A language is a language is a language – or so they say.
In the 1950s, when Fortran evolved from the depths of IBM, there were no computer scientists. Let’s not mince words, by todays standards John Backus (who developed Fortran) was a computer scientist, but the reality is that early “computer scientists” were mathematicians. So began the long road of programming language development, with many of the most popular developed by industry (including languages designed for scientific use):
Fortran (IBM, John Backus)
Cobol (Conference on Data Systems Languages, US DOD)
C (Bell Labs, Dennis Ritchie)
C++ (Bell Labs, Bjarne Stroustrup)
Ada (CII Honeywell Bull, Jean Ichbiah, US DOD)
Java (Sun Microsystem, James Gosling)
Python (Guido van Rossum)
Ruby (Yukihiro Matsumoto)
There are of course good languages that had their birth in academe to the likes of ALGOL, Pascal, Modula-2, and Lisp. Many of these languages contributed to the evolution of others – but very few were successful in industry. Languages used in introductory programming courses generally tend to follow one of two paths: (i) a commercial language, or (ii) an “academic” language. The former are dominated by the likes of Java and Python. The latter can be scoped into functional languages such as “Scheme”, and Haskell, which still have limited industrial scope.
So which is better – industrial or academic? There is of course a good argument to be made for industrial languages – best to use what industry advocates, or at least obtain a grounding in it. One can go too industry specific too early, i.e. Objective C, are end up having learnt a language which is being supplanted (by Swift in the case of iOS). There is also the case for using simple languages which advocate the teaching of programming concepts, rather than syntax. For the purpose of teaching the craft of programming, I would advocate a language which has some industry force, but in which complexity such as pointers can be minimized, and language idiosyncrasies such as dangling-else can be avoided. It would also be nice to dodge compiler issues like lack of array-out-of-bounds checking. Foremost a language used in introductory programming is used to illustrate programming concepts. The syntax of a language should not overwhelm novice programmers.
Good vis-à-vis bad choices for a first programming language, based on the idea of teaching the craft of structured programming?
- GOOD: Pascal, Ada, Python, Julia, Fortran
- BAD: Scheme (and anything based on Lisp), industry specific languages, Java, Cobol, SmallTalk (and anything too OO specific)
- MAYBE?: C, C++