Programming World Going to Hell Because of Java and Grace Hopper
Ekinoderm writes in “Who did Kill the Software Engineer?” [link to http://www.ekinoderm.com/wordpress/?p=27 no longer works] that schools today are ruining software engineering by teaching people Java. He references Joel Spolsky’s rant on the same.
I agree completely, except neither went far enough!
Java is just the replacement for Pascal, a pedagogical language designed because it was more fun and understandable than FORTRAN. So was BASIC, and APL. Heck, C is really just PDP-11 assembler code for people who can’t allocate stack variables by hand. Come on, it’s just subtraction! Oh, and don’t get me started about how RATFOR screwed people up my making them not compute the gotos in their IF statements.
However, I have to sneer at their examples in Scheme. Scheme! That’s also part of the problem. Scheme is a dumbed-down version of MACLISP for people who can’t handle a real LISP, for Pete’s sake! They should be doing their work in that, if not MDL or LISP 1.5.
The world has already gone to hell in a handbasket because of this continued coddling of the next generation of software engineers. Engineers need to learn how to twist transistors together to make flip-flops and make adders out of discrete components before they should go write computer programs. So-called high-level languages have been ruining the competitiveness of America since the mid 1950s!
Let’s face it, when Jim Backus started on FORTRAN, that was compounding on the mistakes that Grace Hopper started with AUTOCODER, which made it so that you could use so-called “opcodes” in your machine language instead of typing in the binary, and worse, far worse to have macros. Macros make people fat and lazy. Transfats and sugar only make it worse. They stereotype of programmers being fat and unkempt is a product of macros, transfats and sugar over time.
Since I now realize that it’s actually all the Commodore’s fault, I’m going to throw away my nanosecond. Her use of tools that help people understand has ruined computer science. I also promise never to write another line of COBOL.
Photo Grace Hopper’s nanosecond courtesy of Shiny Things.
I come from an electrical engineering background. At my school, there were two parallel curricula for EE.
There was the full-blown EE program, in the School of Engineering; this was the one with the heavy math, that would teach you how to design electronic devices from first principles.
There was also an Electrical Engineering Technology program, run by the School of Technology. This had some math, but it mostly taught practicalities — rules of thumb for circuit design, how to build prototypes, how to troubleshoot and repair. This program offered two-year associate degrees as well as four-year bachelor degrees. It was aimed at more hands-on technical positions — people who would be building things and fixing things, not doing research or designing ICs from the ground up.
Perhaps it’s time for a similar split in computer science. It’s important for there to be people who know how to write compilers and do esoteric research. But not everyone wants to take that route. Maybe instead of trying to make one CS degree all things to all people, it would be better to have a ‘pure’ CS program and a parallel program for people who will never write a compiler, but who want to learn to be system administrators and web developers.
That’s not a bad suggestion. When I went to school, it was one of the very few universities that -had- a CS department, which I avoided. My solution was to get work experience. They had a separate computer department (“information systems management” or something like that) in the business school where they taught tawdry things like databases and COBOL.
I’ve always thought that programming is not computer science. Programming should be taught by apprenticeship. There should be no undergraduate programs in computer science. Just as in many places you get an “arts” degree before you get a graduate degree in something specific, such as creative writing, the same thing should be true in computing.
So what, you’re suggesting programmers go back to writing code in binary!?! What language would you suggest be used to teach computer engineering?
While I chuckle at programmers that have never cracked a computer case, I also don’t think there is much value to doing so. Programmer need to understand how the system behaves–given a set of instructions, what the output will be. They don’t need to understand assembler or even binary. Teh language is just a tool. The course work and lack of decent course work is the problem. I taught myself Pascal, T-Pascal, then C, then a bunch of scripting languages over the years. In the early days, after reading and participating in many discussion on fidonet, I learned (while learning C) important things like bounds checking, data scrubbing, and other requirements to make programs stable and well behaved. Are these fundamentals not taught in colleges and programming classes?
The youth of today! When I was a lad, if the PDP-7 crashed we had to reload the boot code with a bank of 12 toggle switched and a push-button!
Seriously though, the fields of “Computer Science”, “Software Engineering” and “Programming” are different from each other; while there is some overlap in content and audience they deserve to be taught separately. I taught myself to program when I was ten or eleven and while this was useful in my Computer Science degree I spent much of my undergraduate time unlearning old habits. Many people in scientific fields need to program, but not many of them needs to be Software Engineers. Many people who engineer large software systems don’t need to know how the underlying hardware works, just that it does.
During the Renaissance period a man could hope to have at least some understanding of all areas of human knowledge. As scientific understanding expanded over the years this became harder and harder and individuals, for the most part, became more specialised. Back when Grace Hopper was working on calculators it was possible for most people in the field of computers to have some understanding of all areas of computer technology. Now that the field has expanded only the Renaissance Men, people like Mordaxus and I, read articles from both Microprocessor Report and the Journal of Functional Programming in the same afternoon…
Didn’t Dilbert write an entire database with nothing but zeroes?
The Slashdot thread is simply an extended editor war. Last redoubt of the Fortran weenies.
I too steered clear of the computer science department because they spent all their time thinking about obsolete mainframe technology and none on modern stuff. To do microscomputers or UNIX or C you had to be in the Electronic Engineering dept. The Comp Sci folk thought COBOL and MVS were the bee’s-knees.
Pascal is an abysmal language. If you do a diff between Pascal and Java it is hard to think of one feature that is in Pascal’s favor. Pascal has a vastly more complex syntax but offers no more power. It has built in I/O but wedded to an obsolete glass teletype model.
Comp Sci classes teach Java because they want to teach object oriented programming. Or rather the features now known as object oriented (inheritance, polymorphism). That seems rather more useful to me than teaching people how to code for a dinky one pass compiler or work in a type system so broken that it does not support character strings and it is impossible to implement them in strict ANSI Pacsal.
Wirth did not understand program language design. he built a toy, not a tool. Now we have a tool you teach the tool not the toy.
mordaxus wrote: I’ve always thought that programming is not computer science.
You have a point.
I also think that system administration is not computer science. I’ve known computer science graduates that made pretty awful system administrators. Teaching sysadmins by apprenticeship would probably work, too. 🙂
As often happens, it was only after the initial discussion that I realized that the original premise was utter bunk.
Before Java the training programming language was Pascal. Educators switched from Pascal to Java because Pascal lacks key features they wanted to teach: inheritance, polymorphism etc. They switched because Pascal was inadequate, not to dumb the course down.
And it is really rather curious that Java should be attacked for lacking pointers. Pascal does not have pointers either. In fact the lack of pointers was the reason educators taught Pascal not C. At the time pointers were severely deprecated because they just didn’t fit into any of the formal models for computer programming languages. They were like goto statements: something that students were only supposed to find out about after learning how to do the job properly without.
Kernighan did the definitive slam on Pascal in 1981 which I cite in my longer blog post:
http://dotfuturemanifesto.blogspot.com/2008/01/teaching-programming.html
But what do these idiot professors imagine is the educational value in teaching students with manifestly broken tools? There is considerable value in learning how to use FSAs to solve problems, build compilers, interpreters and such. But learning to do them in Pascal has no value whatsoever over learning to do them in Java.
The only lesson to be learned from Pascal is that in computing a tool can be utterly useless and still capture a 95% share of the education market.
Well, to be fair, Pascal (and BASIC!) were never meant to be useful programming languages for actual applications; they were meant as teaching tools. They were sort of the programming equivalent of that triple-lined paper you use in grade school to learn penmanship; it helped you see what you were supposed to be doing, but you wouldn’t write an essay on it now.
Well, to be fair, Pascal (and BASIC!) were never meant to be useful programming languages for actual applications; they were meant as teaching tools.
Nope, not true.
Pascal was developed in the very early 70s as a successor to ALGOL. In particular it was a reaction to the complexity of ALGOL 68.
BASIC was designed as a stripped down version of FORTRAN for use teaching programming to non science students. But the main motivation in stripping the language down was so it would support a whole class on a low cost machine and support an interpreted mode.
Pascal didn’t see much use outside education until the 1980s when it started to appear on micros. None of those implementations were written as educational toys. We used to use Turbo Pascal for serious work in those days – albeit Turbo Pascal eliminated many of the more idiotic Wirthisms.
Wirth only started telling people that Pascal was a toy language after he began work on Modula2 and Oberon which he intended to be successors.