First language taught to undergraduates in the 1990s
The average new graduate is likely to do more programming during the first month of a software engineering job, than they did during a year as an undergraduate. Programming courses for undergraduates is really about filtering out those who cannot code.
Long, long ago, when I had some connection to undergraduate hiring, around 70-80% of those interviewed for a programming job could not write a simple 10-20 line program; I’m told that this is still true today. Fluency in any language (computer or human) takes practice, and the typical undergraduate gets very little practice (there is no reason why they should, there are lots of activities on offer to students and programming fluency is not needed to get a degree).
There is lots of academic discussion around which language students should learn first, and what languages they should be exposed to. I have always been baffled by the idea that there was much to be gained by spending time teaching students multiple languages, when most of them barely grasp the primary course language. When I was at school the idea behind the trendy new maths curriculum was to teach concepts, rather than rote learning (such as algebra; yes, rote learning of the rules of algebra); the concept of number-base was considered to be a worthwhile concept and us kids were taught this concept by having the class convert values back and forth, such as base-10 numbers to base-5 (base-2 was rarely used in examples). Those of us who were good at maths instantly figured it out, while everybody else was completely confused (including some teachers).
My view is that there is no major teaching/learning impact on the choice of first language; it is all about academic fashion and marketing to students. Those who have the ability to program will just pick it up, and everybody else will flounder and do their best to stay away from it.
Richard Reid was interested in knowing which languages were being used to teach introductory programming to computer science and information systems majors. Starting in 1992, he contacted universities roughly twice a year, asking about the language(s) used to teach introductory programming. The Reid list (as it became known), was regularly updated until Reid retired in 1999 (the average number of universities included in the list was over 400); one of Reid’s ex-students, Frances VanScoy, took over until 2006.
The plot below is from 1992 to 2002, and shows languages in the top with more than 3% usage in any year (code+data):
Looking at the list again reminded me how widespread Pascal was as a teaching language. Modula-2 was the language that Niklaus Wirth designed as the successor of Pascal, and Ada was intended to be the grown up Pascal.
While there is plenty of discussion about which language to teach first, doing this teaching is a low status activity (there is more fun to be had with the material taught to the final year students). One consequence is lack of any real incentive for spending time changing the course (e.g., using a new language). The Open University continued teaching Pascal for years, because material had been printed and had to be used up.
C++ took a while to take-off because of its association with C (which was very out of fashion in academia), and Java was still too new to risk exposing to impressionable first-years.
A count of the total number of languages listed, between 1992 and 2002, contains a few that might not be familiar to readers.
Ada Ada/Pascal Beta Blue C 1087 1 10 3 667 C/Java C/Scheme C++ C++/Pascal Eiffel 1 1 910 1 29 Fortran Haskell HyperTalk ISETL ISETL/C 133 12 2 30 1 Java Java/Haskell Miranda ML ML/Java 107 1 48 16 1 Modula-2 Modula-3 Oberon Oberon-2 ObjPascal 727 24 26 7 22 Orwell Pascal Pascal/C Prolog Scheme 12 2269 1 12 752 Scheme/ML Scheme/Turing Simula Smalltalk SML 1 1 14 33 88 Turing Visual-Basic 71 3 |
I had never heard of Orwell, a vanity language foisted on Oxford Mathematics and Computation students. It used to be common for someone in computing departments to foist their vanity language on students; it enabled them to claim the language was being used and stoked their ego. Is there some law that enables students to sue for damages?
The 1990s was still in the shadow of the 1980s fashion for functional programming (which came back into fashion a few years ago). Miranda was an attempt to commercialize a functional language compiler, with Haskell being an open source reaction.
I was surprised that Turing was so widely taught. More to do with the stature of where it came from (university of Toronto), than anything else.
Fortran was my first language, and is still widely used where high performance floating-point is required.
ISETL is a very interesting language from the 1960s that never really attracted much attention outside of New York. I suspect that Blue is BlueJ, a Java IDE targeting novices.
72yo Grampa’s (MD, BS Engr) opinion & efforts:
1. C, a small language, with a small book, a small learning curve, and a small library.
2. C++, a large language, with a large book, a large learning curve, and a large library (which includes libc & Standard Template Library).
C first, then C++. Forget Pascal, Modula, Ada (unless you are military contractor bound).
All programs: 40% C, 15% C++.
YACC, big egos, & master’s thesi insure thousands of shiny, new languages over the years.
C/C++ have stood the test-of-time and will (probably) outlast everything else.
C is strongly typed and poorly checked. C++ fixes C’s short-comings and add classes.
There is always a lot of heat, fury, and bias attached to this topic. MIT was well-known to teach Scheme to all as a first language. I disagree with your comment about not exposing students to different languages. Different industries use different tools (Erlang is very common in telephony, for example). I never hired anyone with exposure to only one language.
P.S. In your “captcha”, does “0b” refer to binary or is the entire number in hex?
@Nemo
The rational given for teaching Scheme was was all about perception about what programming should be. Then, 10-years ago they saw that this perception really was a long way from reality and switched to Python.
It’s a very good idea to tell students about other languages and explain that there can be advantages to using a domain specific language. But actually getting them to learn enough to program in several of them does seem like an inefficient use of time.
Yes, binary. Hex literals seem to be easier to find out about, if you don’t know what they are. Binary literals less so.
@Derek Jones
Thank you for the link — very interesting thread.
What are your objections to Turing? I find it a clean simple language yet expressive and easily understood by first-year students (if I can remember back that far). Had the author “opened” — rather than selling — it, methinks it would have become more popular.
@Nemo
No particular objection to Turing, it’s just another language. Yes, being able to easily obtain a compiler is key to widespread usage; which is probably why Pascal was such a success (I also liked the language, but without access to a compiler I would have only admire it from afar).
When it first came out (mid 1980s) Eiffel was streets ahead of C++. But it was not freely available (which C++ was forced to be, because of issues around the AT&T consent decree).