Wednesday, October 1, 2014

Programming Languages Of My Choice

Programming Languages I Am Learning - Focusing On And The Reasons Behind Choice
Systems Programming
C/C++ 

  • Systems (Linux, Android, Chrome) Programming 
  • Efficiency. Memory manipulation. Complete control over the environment.


Go 
  • Systems, Concurrent and Networked Programming  
  • Static Typing 
  • Faster compilation 

JVM Platform

Java 
  • Managed Code
  • Android Application Development
  • Open Source Libraries and Frameworks

Scala 
 

  • A blend of all the features you ever saw in different languages! 
  • Scala is a "scalable" language. How does Scala scale? By keeping the core language small and letting features to be added as libraries. You can build your own library and scale the language. How does Scala do that? Scala tries to answer: “So, if we want to let programmers implement this feature as language library rather than language syntax, what features do we need to introduce in the language?” 
    • Features and examples of this concept: 
      • Actors Library 
      • Operators as Functions 
      • Flexible syntax (Prefix, Infix, Postfix mixing)
      • Uniformity of Objects, Functions and Operators.  
    • Makes Scala DSL friendly ("almost" English) and "scalable" (You can build libraries for Scala that look like language syntax additions.
    • Makes the core language small (rest of the features are implemented in the library). "Lisp Philosophy". But during the time Lisp was invented, it was early days in computer programming and few language constructs were known. Now that we have a lot of language constructs, Scala tries to define a language that lets programmers implement those features with a small core language.
  • Uniformity of Objects, Functions and Operators => Symbolic Programming. (<- A Function literal in Scala!) 
  • What happens when you try to fuse OOP and Functional Programming on JVM? 
  • You can apply battle-tested OO Design Patterns.
  • Functional Programming Patterns and Lisp Patterns are getting fashionable and of course useful (Multicores, Concurrency)! Scala lets you use those patterns in our code and design. 
  • Well suited for data processing applications.  
    • Functional Programming, Map, Reduce, Filter. 
  • Static Typing. 
  • Terse syntax.
    • Type inference
    • Semicolon inference
    • Control abstractions with Higher order functions
    • Improved syntax for Object Oriented Programming
    • Pattern Matching
  • Concurrent, Parallel and Distributed Programming.
    • Actors Model.
    • Akka Framework. 
    • Scala creator Martin Odersky himself takes Parallel Programming Challenge seriously [1]. 
  • Pattern Matching.
  • Traits.
  • Components and Composition.
    • How do you fuse Object Oriented and Functional Programming to facilitate the elusive goal of Component oriented Software Development? 
  • REPL (read evaluate print loop)



References


Clojure 
  • Lisp on JVM
  • Metaprogramming (Programmable Language) 
  • Functional Programming
  • Concurrent Programming



.NET

C#

F#




Functional Programming

Common Lisp / Scheme


Haskell
  • Purely Functional Programming

Erlang
  • Fault-tolerant Real-time Parallel Distributed Computing
  • Modifiable without downtime




Multi-paradigm, Widely Adopted

Python 
  • Rapid Development
  • Open Source Libraries and Frameworks


Ruby 
  • Object Oriented, Dynamic, Scripting Language
  • Metaprogramming Facilities
  • Ruby on Rails




JavaScript 
  • Web Front-end (with HTML5 & CSS)
  • Object-based Programming 
  • Node.JS



Scientific / Statistical Computing

R 
  • Statistical, Numerical Computing 

Wolfram - Mathematica




Logic Programming 

Prolog 

No comments:

Post a Comment