sete linguagens em sete semanas

Post on 15-Apr-2017

498 views 1 download

Transcript of sete linguagens em sete semanas

SEVEN LANGUAGES IN SEVEN WEEKS

Renan Ranelli

Renan Ranelli (Milhouse)

Software Engineer @

Renan Ranelli (Milhouse)

AGENDA

• Why should I care about learning new languages?• A little bit about the languages in the book and how

they compare with Ruby• What I learned during the last few years

WHO IS THIS TALK FOR

• You, who is an Object oriented programmer and has heard about functional programming

• You, who have no clear understanding on why learning many languages will help you be better at your language of choice

1 - WHY SHOULD I CARE?

WHY SHOULD I CARE ?

• First of all...

• I Think you should learn programming languages

• But my opinion probably will not matter to you.So, listen to these guys:

http://blog.golang.org/concurrency-is-not-parallelism

http://blog.golang.org/concurrency-is-not-parallelism

http://blog.golang.org/concurrency-is-not-parallelism

DISCLAIMER: ALL THE LANGUAGES HERE ARE TURING COMPLETE

WE WILL A LITTLE ABOUT

• Ruby• Io• Prolog• Scala• Erlang• Clojure• Haskell

WHAT I AIM TO ACHIEVE

• I will try to explain what is important when learning a new programming language

• I expect to show you that characterizations such as “it is a functional language” or “it is object oriented” is insufficient and most of the times innapropriate

• I *Do Not* intend to teach you any of the languages

WE WILL A LITTLE ABOUT

• Ruby• Io• Scala• Erlang• Clojure• Haskell

Support for OOP

Support for FP

2 – SELECTED POINTS ABOUT EACH LANGUAGE

RUBY

• Object oriented, class based, dynamic and strongly typed

• *Extremely* meta-programmable• OPEN CLASSES !!!!!!• Complex syntax, complex evaluation rules• Reads like a novel

• We all know and love it

IO

• Object oriented, prototype based, strongly typed• Extremely simple and consistent syntax• Heavy emphasis on message passing, not method call.

(method is a message that returns an object that can receive the message call)

• Easy to create DSLs• Excellent concurrency primitives (futures, corroutines,

actors)• CRAZY amount of reflective power

IO

IO

Message

IO

Message

IO

Message

IO

Message

IO

IO

SCALA

• OOP, FP, statically typed, strongly typed• Has a powerful type system (not as much as Haskell's)• Offers advanced FP concepts such as monads and type

classes• Easy(-ish) to create DSLs• You can emulate non-strict evaluation with “call by

name” vs “call by value” parameter passing strategies• Suffers from the Java legacy to a certain extent (nulls)

SCALA

SCALA

SCALA

SCALA

SCALA

ERLANG

• Designed by Ericsson to build telecom software• Alien syntax, derived from Prolog• Functional, enforces extreme isolation of processes.

Truly share-nothing.• Amazing support for faul-tolerant, near-real-time

distributed application development• Quite opinionated ..• ALIEN SYNTAX

CLOJURE

• Is a LISP (!!1!!11)• FP, supports OOP, strongly typed and dynamically• Strong focus on good concurrency primitives and

immutable & persistent data structures• Being a LISP, has macros• Being a LISP, code is data and data is code• Not so Lispy. No custom reader macros and no

automatic tail call optimizations (schemers be mad)

CLOJURE

• Although Clojure is a strict language, you can simulate non-strictness using macros

• Its possible to define the language on-the-fly, i.e., the language is internally reprogramable (heavy influce in both Ruby and Smalltalk)

• Offers the CLOS-like long forgotten multiple-dispatch !

HASKELL

• Non-strict (lazy) pure functional language• No exceptions and no mutable state (!)• Unparalleled type system (at least in production-ready

languages) with parametric types, type classes, algebraic data types and type inference

• Offers the full pack of FP crazyness: Monads, Monoids, Functors, applicatives, Foldables and Semigroups are common ground among Haskell programmers

• Much more close to Math, simplyfing the way we represent abstract, symbolic and self-recursive constructs

HASKELL

• Makes it impossible to mutate state• But allow you to simulate its effects with Monads

HASKELL

HASKELL

HASKELL

3 – WHAT I LEARNED AFTER READING THIS BOOK

WHAT DOES IT TAKE TO LEARN A NEW LANGUAGE ?

• Syntax• The programming languages primitives• The type system (strong or weak? Static or dynamic?)• Evaluation rules (precedence, strictness, etc)• Idioms• Libraries• Tools, IDEs, yadda yadda

WHAT DOES IT TAKE TO USE A LANGUAGE IN PRODUCTION

• Meta-programming and extensibility models• Concurrency model• Library distribution• Debugging, IDEs, Tools, Refactoring tools ...• *Community*• Concurrency model (again!)

YOU CAN'T SEPARATE THE LANGUAGE AND ITS ECOSYSTEM

IS IT THAT RUBY IS PRODUCTIVE IN ITSELF, OR ARE RUBY LIBRARIES, LIKE RAILS, PRODUCTIVE??

LEARN FROM OTHERS

UNDERSTAND HOW THEY SOLVE PROBLEMS YOU HAVE, OR PROBLEMS YOU DON'T EVEN KNOW YOU HAVE

GET TO KNOW WHAT YOU CAN IMITATE !

SEE CONCURRENT-RUBY AND CELLULOID !

THERE IS *A LOT* OF COOL STUFF OUT THERE. LOOK OUTSIDE YOUR COMMUNITY

HAVE FUN

HAVE FUN

OBRIGADO !

@renanranelli

/rranelli

Renan Ranelli (Milhouse)

milhouseonsofware.com