Post on 15-Apr-2017
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