Our faculty email list has had a recent flurry of activity as we discussed changing the choice of programming language for our CS1/2 intro sequence. When I jumped into the throes, I included my own programming education as I thought it was relevant. Having never taken an introduction to programming course in university, I tend to think (mistakenly) that everyone should learn to program “on their own”. What followed was an eruption of personal histories that provides an interesting snapshot:
The punch-card crowd
First up, we have those that revealed their age with their punch-card toting past. Though amusing, this past is perhaps less relevant to the “what programming language should we use today” discussion:
- “I started with Fortran IV on punch cards. The compiler was the Purdue University Fast Fortran Translator […] ‘PUFFT, The Magic Dragon’.”
- “My first programming experience was in PL/1 on punch cards with eight hour turn-around time.”
- “My first computer course was […] in FORTRAN IV, 24-hour turn-around for my punch-cards (if lucky) on an IBM 360.”
- “My first language was ‘MUSIC’, a language that had been developed at my university for teaching purposes. […] The whole idea of being able to create something on a computer was new and exciting. I used to rush home from class to do my programming assignments. Then I’d head off to the keypunch room, wait in line for a keypunch machine, punch up my deck, turn it in to a guy in a window, and come back the next day to get my output.”
- “You guys had it easy! My punched cards had to be taken to another city by a carrier and the results carried back. It took three days to a week to get the results. I was very disappointed that my program had bugs even after three rounds! […] my first programming experience [was] in Fortran IV, followed by PL-1 and Lisp. My first internship required Basic, and my first job required Cobol and RPG II. They really motivated me to go to grad school. I learned C++ and Java while teaching them.”
- “Fortran IV : 1975 : Burroughs B6700, (punchcards)
Binary : 1976 : Data General Nova, (frontpanel bootstrap loader)
Basic : 1976 : Zilog Z8 microcontroller
Z80 assembly : 1980 : IMSAI 8080
Occam : 1983 : INMOS Transputer! […]”
BASIC and Pascal
It seems that many of us were taught BASIC at home and Pascal early on. Perhaps BASIC should be introduced in elementary school? And revive Pascal? Wikipedia tells me that Pascal is used to develop Skype. Really?
- I learned [BASIC] from my uncle […] We dialed in to the Dartmouth Timesharing System from his living room in Maryland, on a KSR 33 teletype. Later, I learned Fortran in high school and Cobol in college, where I majored in Math, and assembly language for the Xerox Sigma 9. I learned Pascal, C, and Lisp in grad school. […] I figure if I wait long enough, I won’t have to learn Java.
- […] BASIC on a Commodore 64 with cassette tape storage at home. The first course I took was in high school using Pascal, which I still think is a great language. [… As] a general engineering student I […] only signed up for intro to CS because that was what you had to do to get Internet access [… we] were still using Simula […] I wish I could say that the class blew my mind, but it was the launch of Mosaic the same year that convinced me that there was a cool future in CS. I only learned C/C++ for the OS course, and Java, Javascript and Python in grad school.
- In my first CS class in college the language we programmed in was Pascal, but we also used a functional notation (mostly on paper!) to study recursion, fixpoint iteration, etc. Since I knew Pascal already from high school, I was kind of bored by those parts, but I was very excited by the functional language and recursion.
- I learned a little BASIC very early, around first grade (so seven or eight), then got introduced to Logo early. I thought the turtle was silly, but loved recursion, lists, and self-modifying code, so spent my childhood trying to write LISP programs in something that wasn’t quite LISP. [I] learned Pascal and Prolog & wrote programs from books, but never had access to a compiler for either. Picked up C++/C freshman year in college.
- My dad taught me Basic when I was in elementary school. I had one high school computer science class that used a teaching-language called Turing. The course was excellent and taught program flow and basic data structures. I learnt Matlab and C for undergraduate research jobs. I took a course on object oriented programming for math majors in my senior year – we used C++. I can say that I absolutely did not understand object oriented programming until 2 years later when I needed it for a grad-school research project.
And then we have what I can only describe as “other”:
- How I learned programming is probably most unusual. I had to learn it for myself. I learned Fortran II first on a Hitachi machine that used parametrons. The program was punched on a paper tape by using a teletypewriter. Therefore, if even one character was wrong, a whole new tape had to be created. Unfortunately, a parametron was slower than a transistor. Therefore, only several machines using parametrons were produced. After learning Fortran II, I programmed mostly in an assembly language for a Toshiba machine which was a clone of GEPAC 4020. Debugging on this machine was done by using its console which displayed the contents of registers with lamps and which allowed memory contents to be changed with toggle switches.
Is this the entire sample? No one in your department learned C/C++/Java as their first language? (Or even Scheme/Lisp?) You must have very old faculty…
How did you get away without ever taking an intro programming class?
No, this is not the entire sample. Around half of the CS faculty responded.
To answer your second question, I was a math major in undergrad.
To JK:
Very few profs anywhere had Java as their first prog language. Java Dev Kit 1.0 was released in Jan 1996, so unless someone only learned to program when they got to grad school, this just isn’t possible. It’ll likely be another 4 years before the first group of “Java first” faculty join our ranks in any numbers.
As to C/C++, many of us learned to program after it was released (C in 1973, C++ in 1983), but these were not very popular as teaching languages. In the 80’s and 90’s, it was much more common for schools to use “gentle” languages like Basic/VB or Pascal. The first was especially popular because it came pre-installed on many personal computers, and free compilers for prog langages were few and far between. Gcc only shipped in 1987.
Yup, some of us learned programming before C existed.
I’m another “dinosaur” who started with Fortran IV, punch cards, and the infamous Job Control Language, which told the operating system how to set up the job. Early on, I learned the importance of using the last few columns on the card to punch “sequence numbers”. Otherwise, when we (inevitably) dropped the stack of cards, it was virtually impossible to get them back in the right order. Imagine not only the normal programming errors, but also errors because of messing up the order of the cards!
I taught myself BASIC on an Apple II clone, then got hit by Pascal as a college freshman (in 1983), then taught myself C the following summer. I used prototype versions of gcc later in college. All the programs I wrote to teach myself how to program were games.
My dad learned to program (as a physics grad student) by toggling in machine code at the front panel, just under the Nixie tubes (uphill, against the wind, though blinding snow). Even when I was in high school, I would regularly see him feeding long paper tapes full of FORTRAN IV code into one of these:
http://en.wikipedia.org/wiki/File:Teletype_with_papertape_punch_and_reader.jpg
I think he skipped punched cards entirely.
I learned programming in a course on Pascal. It’s the only language I learned as a student.
Now I see little bits of python code (on the Khan academy website, for example): maybe python is the next universal first programming language.