Aprender nova Linguagem de Programação em 2009 23/Apr/2009
Seguindo o conceito de PolyglotProgramming, aprendi em 2008 o que podia aprender sobre a linguagem de programação Ruby. Mais irei certamente aprender, o certo é que as noções, conceitos e ideias que eu tinha sobre programação orientada a objectos sofreram mudanças radicais.
Tão radicais que mesmo a forma como passei a codificar noutras linguagens de programação também sofreu impacto. Para melhor. Com Ruby aprendi mais sobre TDD e BDD, CodeCoverage, MVC, etc.
Em 2009 espero aprender mais uma linguagem de programação. Não espero uma aprendizagem tão radical com foi com Ruby em 2008, mas espero aprender certamente várias novas noções e ideias sobre como bem programar. Para isso, para escolher a linguagem de programação para aprender, terei que decidir entre:
- Smalltalk (Squeak) – The simplicity, effectiveness and elegance of Smalltalk comes from it’s simple yet highly expressive syntax and the design of it’s various libraries of objects. Smalltalk was the first, and remains one of the few, pure object systems, which simply means that everything in a Smalltalk program is an object. Smalltalk is generally recognized as the second Object Programming Language (OPL), the first Pure Object Programming Language, the first true Integrated Development Environment (IDE), and the first IDE that eliminated the “Edit-Compile-Link-Run-Test-Debug” build cycle by integrating them all together so that cycle turn around time can be measured in seconds and all phases can be active at once – true interactive development!
- Python – Python is a dynamic object-oriented programming language that can be used for many kinds of software development. It offers strong support for integration with other languages and tools, comes with extensive standard libraries, and can be learned in a few days. Many Python programmers report substantial productivity gains and feel the language encourages the development of higher quality, more maintainable code.
- Lua – Lua is a powerful, fast, lightweight, embeddable scripting language. Lua combines simple procedural syntax with powerful data description constructs based on associative arrays and extensible semantics. Lua is dynamically typed, runs by interpreting bytecode for a register-based virtual machine, and has automatic memory management with incremental garbage collection, making it ideal for configuration, scripting, and rapid prototyping.
- Erlang – Erlang is a programming language which has many features more commonly associated with an operating system than with a programming language: concurrent processes, scheduling, memory management, distribution, networking, etc. The initial open-source Erlang release contains the implementation of Erlang, as well as a large part of Ericsson’s middleware for building distributed high-availability systems.
- Objective Caml – Caml is a general-purpose programming language, designed with program safety and reliability in mind. It is very expressive, yet easy to learn and use. Caml supports functional, imperative, and object-oriented programming styles. Objective Caml is the most popular variant of the Caml language. From a language standpoint, it extends the core Caml language with a fully-fledged object-oriented layer, as well as a powerful module system, all connected by a sound, polymorphic type system featuring type inference.
- Haskell – Haskell is an advanced purely functional programming language. An open source product of more than twenty years of cutting edge research, it allows rapid development of robust, concise, correct software. With strong support for integration with other languages, built-in concurrency and parallelism, debuggers, profilers, rich libraries and an active community, Haskell makes it easier to produce flexible, maintainable high-quality software.
- Scala – Scala is a general purpose programming language designed to express common programming patterns in a concise, elegant, and type-safe way. It smoothly integrates features of object-oriented and functional languages, enabling Java and other programmers to be more productive. Code sizes are typically reduced by a factor of two to three when compared to an equivalent Java application.
Tenho adiado aprender Python, de ano para ano. E após saber das noticias sobre o SAPO Scratch a vontade de aprender Smalltalk re-acendeu-se. Será em 2009?
Update 2009.04.24: A linguagem de programação deverá contar com libraries e ferramentas modernas, tais como: DataBase Adapters, GUI Toolkits e TDD/BDD. Por esta condição apenas, a escolha mais lógica seria Python.
Update 2009.04.25: Acrescentei Erlang, principalmente por causa do momentum que tem actualmente com CouchDB. E o critério de selecção também passou a englobar a portabilidade, ou seja, poder codificar e executar os programas em qualquer Sistema Operativo.
Update 2009.05.04: Acrescentei Haskell, por ser a linguagem “fundamental” das linguagens de programação funcionais.
Update 2009.05.05: Última das linguagens para 2009, porque é preciso escolher uma e concentrar esforços, e porque corre sobre a Java Virtual Machine é também uma linguagem “disruptiva”: Scala. Esta linguagem, suportada pelo “mundo Java”, combate eficazmente as vantagens que advém de usar Python. Por outro lado, ou aprendo com a “mãe” das linguagens orientadas a objectos (Smalltalk) ou aprendo uma nova forma de programar com uma das linguagens funcionais (Haskell, Erlang, Scala, Lua?).
- Posted in : doLearning
- Author : José Carlos Monteiro
Comments»
Encontrei alguns artigos interessantes, que abordam este mesmo assunto: “aprender uma nova linguagem de programação, mas qual?”
Para incremental o meu skill-bag e após ponderação decidi que aprender uma linguagem ou puramente orientada a objectos (Smalltalk) ou puramente funcional (Haskell) seria menos proveitoso do que aprender uma linguagem com estilo multi-paradigma: Erlang ou Scala.
Tal como aconteceu com Ruby, que foi altamente disruptiva para com a minha forma de programar orientado a objectos, espero que uma destas duas também seja igualmente disruptiva. Ambas são notoriamente funcionais e reconhecidamente “concorrenciais” – leia-se Actors – quanto ao seu estilo de programação. A última vez – há muitos anos atrás, na Universidade – em que trabalhei com uma linguagem funcional foi com Lisp.
Quanto à oferta de libraries, a Scala permite acesso facilitado à imensa oferta de libraries em Java, incluindo ir a reboque da JDBC. E corre em cima de uma das mais robustas, fiáveis e sustentadas plataformas: JVM - Java Virtual Machine.
Será Erlang ou será Scala?
Decisão tomada: Scala.
Razão principal: porque será a linguagem a usar no trabalho, sempre que possível e que faça sentido face ao problema.
Apesar das linguagens mais disruptivas face ao meu conhecimento actual serem Haskell ou Erlang ou Lua, não me encontro numa posição que me permita dar um passo assim tão grande. Com estas retiradas da lista final, ficam apenas Scala, Clojure e Objective Caml. No entanto, OCaml não corre só por si em cima da JVM e não parece ter adquirido tanto “momentum” quanto Scala ou Clojure. E Clojure é também mais disruptiva do que Scala, o que somado ao facto de estarmos a tentar usar Scala no trabalho faz com que escolha sensata para 2009 não deva ser Clojure mas sim Scala.
Passou 2009 e não aprendi quase nada de Scala, infelizmente. E como no trabalho não foi decidido avançarmos com Scala, aconteceu que no que fim de 2009 começamos a aprender um pouco de Python.
E agora, em 2010, com a abertura do curso online – grátis – do Satish no RubyLearning a começar em Abril vou apontar para aprender Clojure.