sete linguagens em sete semanas

  • View
    414

  • Download
    0

Embed Size (px)

Transcript

  • 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

    Slide1Slide 2Slide 3AgendaSlide 5Slide 6Why do we need it ?Slide 8Slide 9Slide 10Slide 11Slide 12Concurrency?Slide 14Slide 15Concurrency ModelsSlide 17Slide 18Slide 19Slide 20Slide 21Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46Slide 47Slide 48Slide 49Slide 50Slide 51Slide 52Slide 53Slide 54