Programming Languages Overview
Small comparison of selected programming languages. [in progress]
Other resources:
- speed benchmarks - http://shootout.alioth.debian.org
- syntax comparison - http://hyperpolyglot.org
- the right tool for the job subjective comparison - http://hammerprinciple.com/therighttool
Java
- attrs: JIT-compiled, object-oriented, static typing, runs on JVM
- pros: huge huge ecosystem of libraries, pretty fast
- cons: lack of closures and first-class functions, no collection literals (both planned for future version 1.8), tends to lead to boilerplate code, larger memory footprint
- killer app: Android
- good books
- introductory: Head First Java (for programming novices), Just Java 2, Core Java, Vol. 1: Fundamentals
- other: Effective Java, Head First Design Patterns, Core Java, Vol. 2: Advanced Features, Java Concurrency in Practice, Refactoring to Patterns
- notable online resources: official Java tutorials
Scala
- attrs: JIT-compiled, object-oriented, functional, structural static typing with type inference, runs on JVM
- pros: good performance, offers immutability, actors and STM, integration of both object-oriented and functional concepts
- cons: large syntax, somewhat steeper learning curve
- good books
- introductory: Programming in Scala, Programming Scala (by Subramaniam)
- other: Scala in Depth
- notable online resources: Learning Scala, Programming in Scala - First Edition, Programming Scala (by Wampler), A Brief Scala Tutorial, Scala by Example, Twitter's Scala School
Clojure
- attrs: functional, dynamic typing, runs on JVM, scripts are JIT-compiled on the fly, an option of ahead-of-time compilation
Ruby
- attrs: scripting, object-oriented, dynamic typing, JRuby JIT-compiler for JVM available
- killer app: Ruby on Rails
Python
- attrs: scripting, object-oriented, dynamic typing, PyPy JIT-compiler available
Lua
- attrs: scripting, procedural, dynamic typing, LuaJIT JIT-compiler available
PHP
- attrs: scripting, procedural, object-oriented, dynamic typing
Haskell
- attrs: compiled, purely functional, lazy, static typing with type inference