This blog covers the practical techniques, trials and tribulations associated with the transformation of IT systems from legacy technologies to systems using SOA and modern open systems. It also includes the occasional interlude with rants about technology in general.

Friday, November 8, 2013

Which language to use? A Brief History of Programming Languages

Which computer language to use for your IT transformation, and
why , are questions that require a comprehensive understanding of your project,
the availability of programmers knowledgeable in that language, and the access
to supporting frameworks and libraries.

On Monday, November 12, 1945 at 12:45 pm, John Von Neuman
and five other scientists met at the RCA research center in Princeton and essentially
invented the architecture of all modern computers[1].
Amongst the key assumptions in this
so-called “Von Neuman architecture” was the idea that computer programming
could be done with software as opposed to flipping switches and wiring. Thus
was born the concept of computer language and of software as the soul of the
computer.

Since that time, computer languages have progressed from primitive
machine languages, to assembler, and to more advanced symbolic languages. Fortran became the power-language of the
scientific community, while business folks tended to prefer Cobol, invented by Grace Hooper (don’t let anyone
tell you that women had no part in the advancement of computer science!)

Attempted sequiturs to these two languages were not as
successful. IBM tried to merge “the
best of” Fortran and Cobol into something called PL/I, that ended with the worst
features of both languages. Not to be outdone,
the US Department of Defense sponsored an over-specified Ada language (in honor
of yet another female computer pioneer, Ada Lovelace), which suffered a similar
fate as the equally unsuccessful F-35 jet fighter. (In all fairness, the DOD was also fundamental
to the creation of the Arpanet). More
innovative languages from academia failed to get traction due to their syntactic
obscurity or processing demands (APL, Lisp, Modula, Prolog, Smalltalk, etc.),
but some did manage to transition to commercial areas (e.g. Basic and Pascal.)

Still, the one truly ground-breaking language innovation
came from Dennis Ritchie, a hippie-looking AT&T Labs researcher, who created
a streamlined language, called C. C was
quickly followed by an avalanche of computer languages, Object Oriented mostly,
combined with a veritable array of scripting languages such as PHP, Perl, and JavaScript.

So, returning to the original question. . . Which language should you use? While a reason for so many choices has been
the continuous search for a chimeric language that is ‘just like English’, the
fact is, languages have been, and continue to be defined by the need to
precisely specify the desired outcome. Most
computer languages today can be classified as follows:

Imperative/Procedural. This is basically how most traditional languages work (Assembler, Basic, C, Pascal, etc.). The programmer sets every operation in a step-by-step basis.

Declarative/Functional. This type of language is
supposed to work on the basis of the programmer indicating “what” is needed instead
of “how” to get it done. An example is the SQL language, used to extract data
from relational abases, or Prolog, a language based on a logical inference
engine.

Object Oriented. This category includes
languages implementing a programming paradigm based on the creation of classes
and objects, with specific rules on polymorphic instantiation, inheritance and
encapsulation of data. Object-Oriented languages such as C++, Java, and C# have
been the preferred ones for the last decade.

There are other significant
dimensions to various languages: how strongly typed they are (strongly typed
languages like Java, and C# impose very restrictive rules on the use of
variables), whether the language is interpretive, compiled or emulated; the
choice may have implications in how quickly your team can code, but also on the
performance of the solution, and also in how well the language is known (better
availability of programmers) and how many support resources (libraries, discussion
boards, etc.) exist for that language.

Add to this the more recent popularity of “multi-faced”
languages such as Ruby and Python. Python for example, can be used as an
Object-Oriented language, as a procedural language, and even as a functional
language, and all within a single program! The focus of these new languages is
flexibility, but they do allow the selective use of high performance libraries
(in Python you can access higher performing C language modules, for instance)
to allow for selective performance optimization.

Coming from large development shops, I still believe that Java
or C# should be the preferred languages in the core development of large
projects. In these, you need strongly, statically typed languages with a focus
on object orientation to ensure compliance of standards and inter-operability.
Additionally, both languages are supported by larger corporations (Oracle for
Java, Microsoft for C#), and they are also accompanied with very mature support
frameworks and libraries. Needless to say, the pool of available programmers
with knowledge of either of these two- almost-identical languages is extensive.

Still, if you’re doing start-up work and have a small team
with the mission to deliver quick prototypes under a very dynamic Agile mode,
you would do well to either use Python or Ruby. Both languages supported by a
vibrant open source community. Ruby comes with a well-established web framework
(Rails; hence Ruby on Rails), and Python frameworks include Django, Bottle, and
Flask amongst others. The variety of web
frameworks for Python can actually be a problem; so Python may be better applied
to programming that relates to pattern matching and language processing (much of
today’s social media mining tools are based on Python).

Obviously, you will still need to rely on a web based
scripting language. JavaScript is my favorite. I am not a fan of PHP’s syntax
(write once, read-never).

For large projects you should allow some heterogeneous
language development for specific subject matter areas. Yes, the bulk of the coding
can be done in Java or C#, but certain complex algorithms could be better
implemented using “language X”. You need to be judicious in the handling of these
exceptions however, or you could run the risk of ending up with an unsupportable
zoo of programs written in a too many languages and frameworks!

IT Transformation with SOA

About Me

Israel has been recognized by Computerworld as one of their Premiere 100 IT honorees. Israel is a business and technology leader who has contributed the technology vision as key strategist and designer behind the enterprise technology roadmaps of large hospitality and travel companies. Israel has also have developed and deployed various mission-critical systems and in the process, he's been instrumental in creating and building effective and skilled development organizations.