Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TDC POA 2015 - Seven Languages in Seven Weeks

TDC POA 2015 - Seven Languages in Seven Weeks

Renan Ranelli

September 24, 2015
Tweet

More Decks by Renan Ranelli

Other Decks in Programming

Transcript

  1. 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
  2. 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
  3. 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:
  4. WE WILL A LITTLE ABOUT • Ruby • Io •

    Prolog • Scala • Erlang • Clojure • Haskell
  5. 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
  6. WE WILL A LITTLE ABOUT • Ruby • Io •

    Scala • Erlang • Clojure • Haskell Support for OOP Support for FP
  7. 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
  8. 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
  9. IO

  10. IO

  11. IO

  12. 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)
  13. 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
  14. 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)
  15. 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 !
  16. 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
  17. HASKELL • Makes it impossible to mutate state • But

    allow you to simulate its effects with Monads
  18. 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
  19. 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!)
  20. IS IT THAT RUBY IS PRODUCTIVE IN ITSELF, OR ARE

    RUBY LIBRARIES, LIKE RAILS, PRODUCTIVE??