Programming Languages I Am Learning – Focusing On

Programming Languages I Am Learning – Focusing On And The Reasons Behind Choice

  1. C/C++
    • Systems (Linux, Android, Chrome) Programming 
    • Efficiency. Memory manipulation. Complete control over the environment. 
  2. Go 
    • Systems, Concurrent and Networked Programming 
    • Static Typing
    • Faster compilation 
  3. Java 
    • Managed Code
    • Android Application Development
    • Open Source Libraries and Frameworks
  4. Scala 
    • A blend of all the features you ever saw in different languages! 
    • 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: 
        • Actors Library 
        • Operators as Functions 
        • Flexible syntax (Prefix, Infix, Postfix mixing) 
      • Makes Scala DSL friendly and “scalable”.
      • Makes the core language small (rest of the features are implemented in the library). Lisp Philosophy. 
    • What happens when you try to fuse OOP and Functional Programming on JVM? 
    • Static Typing and Terse syntax
    • Concurrent and Distributed Programming
  5. Clojure 
    • Lisp on JVM
    • Metaprogramming (Programmable Language) 
    • Functional Programming
    • Concurrent Programming
  6. Python 
    • Rapid Development
    • Open Source Libraries and Frameworks
  7. Ruby
    • Object Oriented, Dynamic, Scripting Language
    • Metaprogramming Facilities
    • Ruby on Rails
  8. JavaScript 
    • Web Front-end (with HTML5 & CSS)
    • Object-based Programming 
    • Node.JS
    • Statistical, Numerical Computing 
  9. Haskell
    • Purely Functional Programming
  10. Erlang
    • Fault-tolerant Real-time Parallel Distributed Computing
    • Modifiable without downtime


Current Preference

    If you need complete control over the environment, go down to C++. Otherwise, use Scala, Java. 

    Functional Programming: A Brief Introduction

    Functional Programming Languages provide 2 main features:

    1. First class functions 
      • which means functions are first-class citizens.
        • functions can be assigned to variables
        • functions can be stored in data structures
        • functions can be passed to other functions as arguments
        • functions can be returned from other functions
    2. Pure functions without any side-effect
      • Functions take values as parameters and return values.
      • No global or mutable state.



    What do these two features lead to

    • Localized thinking space 
    • Localized testing 
    • Control abstraction with higher order functions
    • More readable & shorter code
      • Higher order Functions leads to less branches and assignments, which in turn leads to readable, shorter code. 
    • Data abstraction with closures
    • Concurrency – immutable data structures
    • Simplifies programming. No need for complicated Object Oriented Design Patterns, which are required to solve problems that Object Orientation introduces.

    Programming Language Paradigms

    Programming Language Paradigms

    • Imperative, State (Memory) manipulation based, Assignment oriented Programming Language
      • C
    • Functional Programming Language
      • Haskell, Lisp (without setf)
    • Object Oriented Programming Language
      • Java, Smalltalk
    • Rule-based, Logic-based Programming Language
      • Prolog, Clips

    Most programming languages have hybrid philosophy.

    • Scala – Object Functional Programming Language
    • C++ – Imperative Object oriented Programming Language

    Programming Languages I Am Learning / Working With

    1. C/C++
      • Systems (Linux, Android, Chrome) Programming 
      • Efficiency. Memory manipulation. Complete control over the environment. 
    2. Go 
      • Systems, Concurrent and Networked Programming 
      • Static Typing
      • Faster compilation 
    3. Java 
      • Managed Code
      • Android Application Development
      • Open Source Libraries and Frameworks
    4. Scala 
      • A blend of all the features you ever saw in different languages! 
      • 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:
          • Actors Library 
          • Operators as Functions 
          • Flexible syntax (Prefix, Infix, Postfix mixing) 
        • Makes Scala DSL friendly and “scalable”.
        • Makes the core language small (rest of the features are implemented in the library). Lisp Philosophy. 
      • What happens when you try to fuse OOP and Functional Programming on JVM? 
      • Static Typing and Terse syntax
      • Concurrent and Distributed Programming
    5. Clojure 
      • Lisp on JVM
      • Metaprogramming (Programmable Language) 
      • Functional Programming
      • Concurrent Programming
    6. Python 
      • Rapid Development
      • Open Source Libraries and Frameworks
    7. JavaScript 
      • Web Front-end (with HTML5 & CSS)
      • Object-based Programming 
      • Node.JS
      • Statistical, Numerical Computing 
    8. Haskell
      • Purely Functional Programming
    9. Erlang
      • Fault-tolerant Real-time Parallel Distributed Computing
      • Modifiable without downtime

    Current Preference

      If you need complete control over the environment, go down to C++. Otherwise, use Scala, Java, Clojure.