'Retro Programming' Teaches Using 1980s Machines
Death Metal Maniac writes "A few lucky British students are taking a computing class at the National Museum of Computing (TNMOC) at Bletchley Park using 30-year-old or older machines. From the article: '"The computing A-level is about how computers work and if you ask anyone how it works they will not be able to tell you," said Doug Abrams, an ICT teacher from Ousedale School in Newport Pagnell, who was one of the first to use the machines in lessons. For Mr Abrams the old machines have two cardinal virtues; their sluggishness and the direct connection they have with the user. "Modern computers go too fast," said Mr Abrams. "You can see the instructions happening for real with these machines. They need to have that understanding for the A-level."'"
We had to remote into this old Unix System V box and do a few exercises for our course education. No, its not as far back as these students were going but it was helpful to become familiar with that kind of architecture, because you never know whats still going to be kicking around when you get on the job.
Makes a lot more sense than starting them off in some poo like Java where they never need to know about the real hardware.
Trolling is a art,
I feel us programmers have gotten too far away from the lower level aspects of the craft and are now too higher level focused. While, this isn't a bad thing (why should you rewrite a framework everytime you start a new application) - it really perverts ones respects for how things work and efficency.
I am getting back into assembly programming after 8 years of C# and it is a bit of a shift in thought. My college switched from C/C++ to Java my senior year for incoming freshman - a real shame. Programming is totally different when you have no respect of memory management.
Yes, it makes sense. The students get an intimate feel for writing programs without being able to waste resources ramapantly.
You do not have a moral or legal right to do absolutely anything you want.
What would be easier to learn basic mechanics from working on: a '57 Chevy or a 2011 Lexus?
I've abandoned my search for truth; now I'm just looking for some useful delusions.
One of the great things about the early micros (and probably the even-earlier minis) is that they were Knowable. With a little time, an intelligent person could become familiar with the workings of the entire architecture. I used to have a map of every memory location in the 64KB of ye olde C64 (most of it was user RAM of course) explaining what each byte was for. POKE a different value to a certain address, and the background color changes. PEEK at a certain address and it tells you the current hour. You could learn this... all of it. Obviously that's just not possible with modern computers (probably not even modern phones); no one person can grok the whole system.
http://alternatives.rzero.com/
Yes, it makes perfect sense for two reasons.
A) It teaches people how to use unfamiliar hardware/software. Chances are the thing you are going to be running at your job is not going to be the thing you studied in university for.
B) It teaches kids how to not make mistakes in coding. Make a big enough mistake and the entire system goes down. Compilers are also a lot less fault tolerant.
C) It teaches kids how computers actually work by pealing back layers of abstraction. Think about it, has the average person under 20 ever used a CLI? For anything? I think the closest people come these days to actually using a CLI is typing in something on the Windows "Run" dialog.
D) It puts things in perspective. It shows how you don't need a Core i7 to play games, that a graphics card with 100 times the memory of the entire computer isn't required to make art, etc.
E) Its fun. The old computers had a lot more easter eggs built in and little tiny quirks. These days you get a Dell/HP/Gateway/Acer/Asus/etc slap Windows/Linux/OS X on it and its the same as any other Windows/Linux/OS X box, but the old computers all had little things different, some things were frustrating of course, but when you don't have to do it for any too serious of work, it can be kinda fun digging out the old Commodore 64.
Taxation is legalized theft, no more, no less.
How will the student then apply his knowledge to modern languages such as Java, C# ? He'll have to optimize his code by doing a bunch of tests, just as he would have did without that class. With a flags and the time (in ms) required by each of the different methods, he will understand, for example, that quick sort is faster than bubble sort. And so it goes.
Edlin should be a mandatory part of the course for the full immersive effect.
Or was that the 70's? Gosh I can't remember now cuz I'm so old.
Absolutely. Better teach them C so they will know how data structures and memory management work.
Languages that try to do everything may help you write code faster but can be treacherous.
Let's see a simple example. In Python there is a subtle matter of memory management that can be dangerous to the untrained programmer. When you copy a list like this: a = b you are creating a pointer to the other list, when you copy like this: a = b[:] you are allocating memory for a new list and copying the contents.
When you know C, the difference between the two copy instructions above is obvious, but if you don't know what is memory management this can become very difficult to understand. I bet there are many bugs created by Java, Python, and other modern languages that come from this inability to understand how the language works under the hood.
Working on old computers can be fun for some people, but to train programmers nothing beats learning C. C is close enough to the hardware to let one understand the details of how software runs, yet abstract enough to represent any typical von Neumann computer.
Yes, it makes great sense. WHen getting started, it really helps if you're forced to deal with the low level, and more if you can actually see the low level.
I've spent a large part of my career writing software realted to tape drives. It really helped me getting started that I could sit down in front on an old IBM 9-track reel-to-reel to test my code. Not the most useful thing for production data storage, but terrific for seeing problems with production code. Miss the end-of-tape marker? Flap-flap-flap-flap doh!
Similarly, writing and debugging production assembly code made me very comfortable with debugging and crash analysis on higher-level languages, even if I didn't quite have matching source. And that experience in turn lets me understand "what really happens" with a language like C# or Java, and for example explain to people why, for example, the .NET file rename function is no substitute for the Win32 file rename system call, despite the fact "they both just rename a file". STuff that should be obvious to even a junior programmer but, well, isn't.
Socialism: a lie told by totalitarians and believed by fools.
But DOS doesn't have all the neat tools.
I learned on a PDP-8; 16K of hand-strung RAM and a CPU slow enough that you could put an AM radio next to it and hear it compute.
This thing came with all sorts of neat tools, including assembler (of course) and a FORTRAN compiler.
You learned to program good, tight code and really, really thought about your data structures.
Sure, programming today is much, much easier and we can do lots more. I cringe when I look at FORTRAN IV code these days; it's painful. But it did teach me a lot.
Seriously, how is this useful in modern computing, other than as a "Back in my day..." quote?
Learning how to use older/simpler machines is an excellent way to learn about a number of fundamental concepts. Modern computing, for all its advances, still operates off the same fundamental principles as it did fifty years ago; it's simply become orders of magnitude more complex.
Now, while it's perfectly possible to learn how to do this sort of thing using emulation or specialized training software, there's real value to having an appreciation of the history of the field you're planning to enter, and working with machines that were once considered state-of-the-art is a very effective way to gain a sense of just how insanely far computing has come. Note, too, that simply because you're never going to be called upon to program a PDP-8 in real life doesn't mean that you can't learn a fair amount of generally-applicable knowledge about hardware, logic, branching, execution, input, output, and instruction sets. In fact, by pulling yourself out of a familiar environment, you're forced to pay attention to important things that you'd otherwise happily ignore--like "well, how does what is in my head actually get into a computer's inner workings?"
Finally, always remember that programming is a subset of computer science. Even if all you ever expect to do is write code, a deeper knowledge of what goes on between the compiler and the electrons is going to be quite useful--and will make you a better coder, to boot.
Obliteracy: Words with explosions
New cars are wonderfully simple under the hood, once you strip away all the plastic. Ever taken apart an old carburetor before? Ever try to get it back together in working order? Give me a FI computer, airflow sensor, and fuel injector any day. Not surprisingly, cars went from a maintenance interval of 1,000 miles with a life expectancy of 50,000 miles to a maintenance interval of 10,000 miles and a life expectancy of 250,000 miles by *avoiding* complexity.
I first used edlin on DOS 1.0 and was kept using it until better alternatives (norton edit, anyone?) appeared. Edlin makes vi seem like a walk in the park. I've used edlin for assembly and Pascal programming, and I say "curse you!" to anyone who jokes about those dark days.
How will the student then apply his knowledge to modern languages such as Java, C# ?
Do you believe that a school should teach Java, or teach programming?
BTW, C++ can kernel-mode C programming jobs aren't going away, and tend to pay better than Java jobs as the talent pool is growing smaller. Especially for kernel-mode programming, very few schools are turning out bright young talent with any relevent skills in that area, so the labor pool is aging out but the demand isn't shrinking.
Socialism: a lie told by totalitarians and believed by fools.
Why not underclock the CPU?
A loop, by its nature, continues. If that didn't make sense, start reading this sentence again.
If you want to get an intimate feel for writing programs without being able to waste resources, try embedded systems programming. The microchip 10F series has only a few dozen bytes of ram, and a couple hundred words of flash. And no hardware multiply. Making it do useful things is an art. Oh, and unlike some relic from the 70's, you can actually get a job programming for tiny microcontrollers.
Agreed on all of the above, but the experience of working on the relics will translate to modern embedded systems sufficiently well that I think there is value. In many cases the relics will be even slower and be more RAM- and ROM-constrained than all but the the tiniest of today's embedded microcontrollers.
I don't know what the A level syllabus is, but I suspect it is more about learning how computers work in preparation for a university degree than about learning how to program in any particular language. Quite frankly I think they should keep things as fundamental as possible at this stage. Students can always go to community college if they wish to learn how to set up outlook, operate excel or write java etc.
Nullius in verba
For Mr Abrams the old machines have two cardinal virtues; their sluggishness and the direct connection they have with the user.
Another hacker learning skill you must obtain, that he forgot to mention, is how to completely master a system. This is different from merely learning enough.
At one point, I could tell you every minute detail of OS-9 (the motorola 6809 CPU OS, not the apple product two decades later) and I also nearly mastered 68hc11 assembly, Z-80 assembler, and the PDP-8.
There is no point trying to teach kids how to master something using, perhaps, the linux kernel, because its too freaking big, at least for a one or two semester course.
The mastery skill requires figuring out what you don't know and then figuring out how to find it. Very much like spatial mapping, I see a blank spot in my map of how it all works, so how will I get from where I know to where I don't know? Also you learn how to learn the philosophy of a complete working system, sort of a C/S ecology mindset. Finally there is a bit of reflective thinking that interacts across now usually broadly separated problem areas, look how the memory allocation system has reflected onto the design of the I/O drivers and vice versa.
Learning how to master a topic is a valuable skill, and at least for CS students, frankly best learned on the smaller older stuff. Too many newbies think asking small specific questions of google is all they need, and think they can scale up to a big project merely by asking more little questions, without thinking thru the big picture.
A fourth thing the dude forgot is that older computers were MORE powerful. Power is what comes out of the barrel of a gun, its not P=I*V or MIPS. A single old MVS mainframe could run a small govt department or a multinational corp.
"Science flies us to the moon. Religion flies us into buildings." - Victor Stenger
I've spent many years working with microcontrollers. I wholeheartedly agree.
You do not have a moral or legal right to do absolutely anything you want.
I'll bet, though, that in those cases where the performance really is that critical you're a lot more able to deal with it than someone who thinks the nested loop takes ZERO time.
There's still nothing like having your actual computer take another 10s to run the same sort someone else's does in 1s. Our current machines are so fast that sorting 1000 items in .1s vs .01s means pretty much nothing to a learning programmer, even though the order of magnitude difference is the same. And harping on Big O isn't "getting your hands dirty".
There are people who learn quite well from theory. But that's not everybody, and actual, perceptible feedback is a very effective learning tool.
My blog. Good stuff (when I remember to update it). Read it.
I noticed a bunch of low (even 4 digit)/. user ids in this thread -- like the guy who got the CP/M box off craigslist. I think it would be quite interesting to do a correlation between low /. user IDs and opinion on the subject. The hypothesis is that older people will have a softer spot for older machines.
Myself? I think learning to program in older machines is a great idea. But then again I learned to program in Sinclair ZX-81's BASIC language -- back when 16kb was a memory expansion...
Quem a paca cara compra, paca cara pagará.
Yes, lots. While I appreciate the old joke that "carburetor is a French word, meaning 'leave it alone'", I never found carburetors to be capricious, only more complex than 'screwdriver mechanics'. You have to know how the carburetor works, and you have to have the correct service manual, and you have to have the tools to assure the precision parts are all in spec.
The only difference with carburetor overhaul was you couldn't fudge a 'close enough' job and escape notice. This made carburetors a dividing line between wrench twiddlers and real mechanics. Most other parts of an older engine could be reassembled 'close enough' and work fine -- for now; they just wouldn't last as long. Carbs assembled that way would tell you immediately, hence got a reputation.
What changed around 1985, the beginning of the 'simpler' and 'lower maintenance' era we're in now, is the complex high-precision bits multiplied and got sealed off. You didn't pull everything apart to the last bolt and wire anymore. You had a series of black box sections that were removed and replaced when out of spec. That's everything as complicated as, or more complicated than, a carburetor.
Apply the same rule of 'remove and replace' to carburetor cars, and they'll be just as 'simple' to work on as you claim new cars are. You'll still be a Barbie saying "math is hard!", but you won't be spouting bullshit about 50,000 mile life expectancies. Seriously, that's just rubbish. Any decently maintained old car that wasn't a known lemon rolled over the odometer easily before you /started/ thinking it was getting time for overhaul.
I don't think this is something that's worth doing for *vocational* reasons. You don't do this because you'll produce a supply of programmers who are better at the flavor du jour of programming language. You don't do it as an *alternative* to access to modern machines either.
You do it for *educational* purposes, to produce people who understand on a deeper level what is going on than somebody who has studied for some kind of vocational certification. Perhaps they'll go onto be hardware designers, or systems programmers. Maybe they'll design the next generation of computer architectures. Or maybe they'll go on to be a code monkey in the language du jour -- but it won't have hurt them to have been exposed to this stuff.
Naturally, you have to couple this with the right curriculum and the right teachers. For example, students could learn the bad habit of premature optimization which many of us who learned on these machines did. But you can also teach fundamentally sound coding practice such as sound algorithm selection using basic tasks like sorting and selection. Of course you can do that today as well, but you're immediately into somewhat more advanced mathematics like graph or number theory. That's good stuff too, but it won't hurt to have got a more hands on feel for what makes a program efficient using more basic concepts first before moving on to the stuff that's really interesting from an algorithmic perspective today.
In short, it's not necessary or sufficient to teach students to program on old hardware, but in the right curriculum with the right teachers, it could certainly be beneficial. With the wrong teachers, it could be pointless or even harmful.
Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
This is true. A-levels aren't about getting a trade job immediately. They're essentially college prep classes, though very different from US style. Why teach and indoctrinate in a particular language today when by the time they're out of school the fashions will have changed? Principles are far more important.