Sunday, October 2, 2011

Programming Languages for Numerical Computation Applications

Choosing an appropriate programming language and application stack, libraries and API for scientific / engineering applications.

Engineers write software applications that are numerical intensive, as against let us say, business or information system applications that are usually database intensive. It is therefore a good idea to choose the appropriate programming language to accomplish a task efficiently and at the same time meet desired expectations.

It is therefore a good idea to list out the attributes of a typical scientific / engineering application (possibly in decreasing order of importance, if such a thing is possible!).
  1. Numerical computation support: This will mean matrix capabilities, efficient numerical algorithms for a wide variety of applications including but not limited to linear algebra, optimization, root finding etc.
  2. Platform independent graphics: Graph plotting, modelling and visualization in 2D and 3D. Integration with graphic input/output devices such as mouse, plotters etc.
  3. Integration with Operating System: Preferably this must be platform independent. Operations may include access to file system and GUI.
  4. Access to datastore: Preferably database agnostic. Could be simple file based databases (such as sqlite) for simple applications and RDBMS servers (MySQL / PostgreSQL) back ends for complex applications.
  5. Learning curve: The ease or difficulty of mastering the programming language, associated development tools (IDEs), Libraries, APIs etc.
  6. Web deployment
  7. Execution speed
This list is not necessarily complete and the priority may be inaccurate, but still, a good starting point to discuss the topic at hand. It would be interesting to discuss how well do different programming languages (and application stacks) do when tested against the above requirements. So let us choose the possible candidates for comparison:
  • Fortran family: Fortran 77 / Fortran 90 / Fortran 95
  • C / C++
  • Java
  • Python (with NumPy, SciPy and matplotlib)
  • Numerical software tools: Matlab / Scilab / GNU Octave
Let us take up each attribute one by one and order the programming languages in decreasing order of preference:
  • Numerical computation support: Fortran family, Numerical software tools, C/C++, Python, Java
  • Platform independent graphics: Java, C/C++, Python, Fortran family, Numerical software tools
  • Integration with OS: C/C++, Java, Python, Numerical software tools, Fortran family
  • Access to datastore: Java, C/C++, Python, Numerical software tools, Fortran family
  • Learning curve: Numerical software tools, Python, Java, C/C++, Fortran family
  • Web deployment: Java, Python, C/C++, Numerical software tools, Fortran family
  • Execution speed: Fortran family, C/C++, Python, Java, Numerical software tools
The above rating is subjected to the limits of my own knowledge and experience. It would be great to get feedback from the readers.

No comments:

Post a Comment

Your comments are ciritical input for the sustainance and improvement of this blog.