Obsolete Technical Skills
Ponca City, We Love You writes "Robert Scoble had an interesting post on his blog a few days ago on obsolete technical skills — 'things we used to know that no longer are very useful to us.' Scoble's initial list included dialing a rotary phone, using carbon paper to make copies, and changing the gas mixture on your car's carburetor. The list has now been expanded into a wiki with a much larger list of these obsolete skills that includes resolving IRQ conflicts on a mother board, assembly language programming, and stacking a quarter on an arcade game to indicate you have next. We're invited to contribute more."
My Dad started out working on valve amplifiers in the 1950's. Now that he has retired I want to start a business with him fixing valve amplifiers.
http://michaelsmith.id.au
Next he'll be saying we've lost the technical skill of picking up the phone handset because of speaker phones and mobile phones.
Anyway , here in the UK new and refurbished rotary phones are a niche fashion item. You can pick them up in a number of places for a reasonable amount.
Two hundred million VB, PHP and Ruby programmers want to disagree with you. But you are right. Assembly is as much a part of the system as transistors and stack pointers. My first system had a 6502 with a BASIC interpreter in ROM. The back page of the instruction book had the 6502 instruction set printed on it (lucky it wasn't a Z80). That was much more interesting for a 13 year old than basic.
http://michaelsmith.id.au
I have been reading Alan Greenspan's autobiography and he consistently mentions the concept of "creative destruction," which perfectly describes the duality of the capitalist society we live in (even all of you supposed socialists in Europe). It describes both the benefit and burden of the market economy. The benefit of having (generally) free markets allocate resources in society is the innovation they brings (i.e., progress), but a cost of that progress is the obsolescence of things which are now, for lack of a better phrase, useless because of it.
I've noticed that we on Slashdot seem to struggle with this concept daily, be it the loss of jobs to outsourcing, development and adoption of new technology, reform of IP laws, the slow death of the MPAA/RIAA, and even the subject of this article (which is the perfect example). It is probably a little off-topic, but I think this common thread should in these subjects should be pointed out, because all of our discussions seem to hinge on this critical question: Is the creation worth the destruction?
The sun beams down on a brand new day, No more welfare tax to pay, Unsightly slums gone up in flashing light...
Fortran is definitely not obsolete. In another life I worked for Bloomberg - the foundation of the whole Bloomberg system is written in fortran - contrary to what they'de like new hires to believe. Yeah, use C++ but we'll prevent you from using the majority of its most useful features. Weird development shop.
-- Moomin Troll
Assembly language is FAR from obsolete. Embedded hardware outships PCs by probably 100 to 1, and much of that is programmed using assembly language (especially if you want to get the most out of the tiny hardware). I have modern microcontrollers in my parts box with 64 *bytes* of RAM and 1kbyte of flash (Atmel ATtiny13) - while you can write a C program for this device, you can get much more out of it with asm, and it doesn't really take any longer to write (AVR asm is one of the nicer 8 bit ISAs). Portability is rarely an issue for devices like this, since even the C code won't be portable to other microcontroller architectures.
...oh, and I have a rotary phone, too. It was first installed in my grandparents home in 1969 when the house was built. It's just the plain GPO phone of the time, but it's a little reminder of them each time I phone someone.
Every serious programmer should have some experience of assembly language so they can grok what's really going on. Nothing tells you why buffer overruns are so bad than watching a program written in asm run over its own stack obliterating the return address. It doesn't need to be a fancy 32 bit or 64 bit desktop chip, an 8 bit ISA or one of the classics such as the Motorola 68K is enough to understand the principles of what happens at the chip level. If you want to see what happens when programmers simply don't grok the hardware, just check out The Daily WTF.
By the way, get off my lawn!
Oolite: Elite-like game. For Mac, Linux and Windows
If you're using any device that communicates over a serial port (Telit GT864-PY for example), you're going to use parts of the Hayes Command Set. Not necessarily all of it, but it's certainly not obsolete.
And as for 'Changing the battery of a Sega Dreamcast VMU'... isn't that just a case of unscrewing the cover, removing the battery, and popping in a replacement? The Dreamcast VMU might itself be obsolete, but I just went through that exact procedure yesterday while changing the battery in my car's central locking remote.
I'm not taking the list too seriously though, seeing as 'sex' is on it...
I'm glad to see that the first post already challenged the uselessness of asm.
But it goes beyond kernel debugging. Any Antivirus researcher worth his weight (or at least a fraction thereof) knows x86 assembler to the core. When the automatic analysis fails, you still toss the malware into a disassembler and you have to find out why the analyser failed. What system did they use this time to foil your analysis attempts?
Although you do notice that also on the "other side" (i.e. at the people writing those critters), asm progging becomes a dying art, you still have encryptors and manipulation schemes that try to obfuscate malware so you can't just simply 'read' them. For obvious reasons, you only get the executable into your hands, but rarely if ever the source.
So yes, asm knowledge is still very valuable. asm programming might be a 'dying skill', since it is rarely necessary (except in very specialized areas) to be able to write asm code, but knowing how to read it will be very useful and necessary for years to come.
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
How about an entire desktop operating system written in asm that fits in a 1.44 floppy and runs incredibly fast even under a slow machine emulator like Qemu?
Not that I'm pushing the use of assembly when writing applications, but this example should teach something to those people who ignore the art of optimizing things, then just tell you to buy a faster machine.
...memory management.
It also fits in the unused boot sectors of a hard drive, but the point was that there are fewer sectors and less space to play with on a floppy... so maybe I should have worded it that it *even* fits in the unused boot sectors of a floppy or hard drive.
Last I checked, his bootloader could load nearly any OS for x86. Doing all of that in a few KILOBYTES of otherwise unused space would be just about impossible with anything other that assembly.
Programming in VB, PHP or Ruby does not make you stupid per se. Capable programmers that understand what goes on under the hood actually use these languages.
Programming a website in assembly, on the other hand, would be pretty thickheaded.
My point is that a knowledge of assembly is indeed very usefull for any programmer. I only disagree with your gratitious bashing of script languages and their users.
---
"The chances of a demonic possession spreading are remote -- relax."
Perhaps it is why it is a required course for a Computer Science Degree. I know threw out my work I never do anything close to assembly level coding. But when I see odd behavior I often have a better idea on why it does so.
If something is so important that you feel the need to post it on the internet... It probably isn't that important.
- I can leave my notes on my desk. Nobody can read it.
- It actually is useful (can write faster).
- Shorthand looks very nice. Your handwriting style gets better.
What is the alternative? Learn Klingon? Yeah, go on, waste your time.My father and I worked on old Saabs, way back when they were cool. He was a self-taught engineer: he had a Civil Service equivalency, no college degree, and worked as an engineer for the FAA.
He was the master at converting 3-cylinder Saab 96 (and 95) models to the newer V4 engine. He had it down to a science, and cars we converted ran all over the country.
A few of the more mundane skills I learned back then:
--Setting the dwell angle by adjusting the ignition points, then rotating the distributor to set the ignition timing.
--Disconnecting the ringer on Western Electric rotary-dial phones, so Ma Bell couldn't detect how many extentions you had (illegally) connected to your line.
--Dialing only the last 5 digits of a 7-digit phone number: within the same exchange, the mechanical switches at the local Bell office would make the connection.
--Scraping conducting material off the rotary dial in the cable box to enable HBO and Showtime.
Threading a Needle ...
Using a Fountain Pen
Coins on the machine to reserve next go
Memory Management
There are many many useful and relevant skills on there.
Oh this is cool! I could go on and on and on. While it's true some of these skills are still necessary for a few "elite" programmers or engineers, most of these skills are no longer used by the average user. To wit:
- what to do with a Commodore 64 when its cursor is blinking at you
-----(everyone I know in my circle of friends would go "duh")
-----(they have no clue how to navigate without icons or explorer)
- how to write a simple basic program for your C=64:
----- 10 print "hello"
----- 20 goto 10
----- RUN
- LOAD "$" to get directory off my cassette drive (yes we used cassettes)
- LOAD "*",8,1 to autoload & start most floppy disks
- how to crate 16-color pictures that look good
- how to program the SID to make music
- dir df0: to get a directory on a Commodore Amiga 500/2000
- the difference between Chip and Fast RAM
- why it's a bad idea to multitask 2 programs off the same floppy
-----(because the floppy will knock itself silly trying to read two tracks at the same time)
- ATDP 5601750 to dial on a rotary/pulse phone (ATDT for touchtone)
- +++ to get your modem's attention so you can issue commands like:
- ATH to hang up
- how to create pretty pictures using ANSI
- what is Zmodem, and why it's better to download files with Z rather than Xmodem
- how long will it take to download a 3.5 inch floppy over 2.4k modem
-----(long enough to eat supper and take a shower)
-----(or watch the latest episode of Star Trek The Next Generation)
- how many hours you can squeeze on a T-180 VHS tape (9)
- how many episodes of Quantum Leap if you remove the commercials (12)
- how to repair your copy of Star Wars after the tape tears in half (scotchtape)
Most of the things I just listed were items known by "everyone" back in the 1980s. If you wanted to use a computer, you had to know the various commands and understand how/why things work.
Today people don't need to know command-line text.
They can just point-and-click; it's become easy.
And a lot of the things we used to need to know?
It's essentially automatic now.
The government is not your daddy. Its purpose is not to raid middle-class neighbors' wallets and give it to you.
mcgrew's razor: Never attribute to stupidity that which can be explained by greedy self-interest
...to component level with an oscilloscope and DVM. ...calibrating instruments using a precision voltage source, resistance decade box, or signal generator. ...using a frequency counter. ...hand winding precision wire resistors. ...reading resistor color codes. ...writing test algorithms in machine code (usually hex or octal, the language level between binary and assembly) ...making your own application-specific test instruments.
Ignorance is curable, stupid is forever.
There are hundreds of obsolete skills. But there is one that NEVER goes out of fashion, never gets obsoleted, never stops coming in handy... the ability to learn quickly, and to remember what you learn. Seriously. I make a point of putting it on my CV (resume for you Americans). Learning quickly means you can adapt to ANY environment quickly. Remembering what you've learned means you can draw parallels and keep "generic" knowledge going. Bung me in front of a particular UNIX server and I might not have any idea how to do much but login. Give me ten minutes to acclimatise and I can be doing ANYTHING on it. TCP/IP is TCP/IP... the places where you change the settings may differ but knowledge of protocols, routing, etc. is the same whether it's a Commodore 64 on the web or a network of virtualised Vista PC's.
:-) The next was a full Windows 98 network with custom management software and an NT server. The next was a 2000 Server and XP network with custom management software. The next was plain 2000 + XP with Active Directory. The next was similar but with some other custom management software bodged to perform some of the more tedious tasks. The next was Server 2003 + XP + Vista. And so on. The last one I had was another "design me a network from scratch" for a school, and so they got Server 2003, XP and Linux for some tasks (it was just easier, made more sense and cheaper).
I don't have MCSE, CCNA or anything else because the sheer fact is that by the time you've passed the course and been using it for a year, its content is out of date. Not all of it, but quite a bit of it. Especially on those courses designed for particular bits of software. And they are nothing but memory tests. That's not learning.
I've done assembly, I've done BASIC and everything in between. My University tried to teach me Java until I stopped attending the lectures for that part and was instead "hired out" to other students as the person to ask about the Java coursework. I'd only ever dabbled in it but having programmed in a lot of other languages it was no more than a curiousity to flick through a Java book and pick up the syntax. I did the coursework myself at home, taught many others to pass the course, and passed myself (good grades for that course) with barely a sweat. I'd dabbled in Java before but it was merely a matter of flicking through a half-decent book on the subject, applying everything else you already know and making sure you have a list of function-method-procedure (call them whatever you like, OO is just a shortcut that saves you typing so much functional-programming code) name changes handy. KMP search algorithms are the same in any language, it's just a matter of learning or merely memorising (which is NOT learning) the differences between languages.
Similarly, my primary job is being hired by schools to manage their networks. First one was 98-standalones with Ethernet cables basically used for display.
Formal training in any of the above OS, network management, network management software or application software? Zilch. Number of networks exploded? Zilch. Number of networks more productive once I had finished with them? 100%. Number of schools chasing me for further employment to work on their next big network, next OS, next suite of applications? I lose count. And these are critical networks - they run everything from the canteen to the staff wages to the legally required paperwork to the student desktops to the fire and security systems. You have no idea how crippled a school is nowadays if its servers go down... lessons stop, systems go haywire and the students get sent home. And they literally fight over getting an imbecile like me in to manage their systems, or even just clean them up so that they can employ a "normal" technician next year.
If you can learn, you can run any OS, of any age, at any time, in any combination without a problem. If you can't then you're stuck memorising "Windows Vista for Dummies" until the next OS comes out a
Maybe less in terms of quantity, but more in terms of quality.
You think you'd be using a nice, modern web browser or game if they had to code the whole thing in assembly?
Quite possibly, yes. The assembly requirement would present quite a barrier of entry, but at least it would raise the overall quality of the software. People who manage to write bug-ridden crapfests in high level languages would have a hard time getting their program to start in assembly.
Afaik the last "big" game written entirely in assembly was Elite 2:Frontier. And while the game suffered from its own set of problems (namely: it was kinda boring), it was technically extremely impressive (not to mention that it fit on a single freakin' floppy disk).
I haven't read the article or the Wiki (I'm not new to Slashdot, after all) but I figured this is as good a place as any to post this insane dribbel from my head.
Back when I was a kid, I grew up in a modest town of about 50,000 people. Too big to be a small town, not big enough to get on most maps. Our phone book was about one inch thick. Small towns had phone books that were essentially glorified pamphlets, about 1/4" thick, and even then they shared it with all the neighboring towns. I knew people from small towns who thought phone numbers were four digits long, since the first three digits were always the same (and the then-optional area code was the same for probably a hundred miles).
When my family would go on trips we would visit "big cities" like Dallas, Houston, Orlando, Memphis, etc. (yes, I'm from the South) and in the hotel rooms I would notice that the phone books were always really thick. Like 4-5" thick. And sometimes, that was just the yellow pages, the white pages were an entirely different book, itself 3" at least. And they always had these awesome pictures on the front of the local skyline instead of the giant public domain "fingers do the walking" logo that would grace the phone book back home.
So consequently I made the connection early on in my mind that living in a huge city meant you were a success. And living in a huge city meant a huge phone book. Therefore, having a huge phone book in your home meant you were a success. A tenuous connection, but even then I had big dreams of moving to a "big city" later in life and one of these days I would have a big phone book in my house because hey, that's what big successful people living in big successful cities do.
Years and years pass. I grow up, go through High School, go to College, graduate, get married, and eventually my Wife and I move to the Dallas/Fort Worth Metroplex. We get good paying jobs and rent then eventually buy a house. Initially the phone books that would appear on our porch would be the same standard one-inch affairs I grew up with because we live in the suburbs and they only cover the suburbs, but then one day a bag with two phone books, a 3-inch white pages and a 5-inch yellow pages, shows up on our front porch. These phone books cover the entire Metroplex. They have amazing photos of the Dallas skyline, with Reunion Tower (the one with the ball on the end) on them (under a stuck-on ad for some ambulance chaser, but that peels off easily enough).
I'm elated. After all these years, I've finally made it! I'm finally in a good job making good money and living in a big city and hey, like all big successful people living in big cities, I have a pair of bigass phone books. I've arrived! Every time I look at these phone books I'll remember how I'm in a big city.
So I put these phone books next to the phone and the first thing my Wife says was "Just throw those things away. We have the Internet now."
I ignore the order and I keep the phone books under the phone cradle for a few years, exchanging them out when a new one comes in. I never tell my Wife the insanely silly "but I've always wanted a big phone book" fantasy because I'm not in the mood to get laughed at (though, apparently, I don't mind that people on Slashdot will laugh at me). I get to keep them in place with the razor thin "well what if we want to look up a phone number when the power's off or our Internet is down?" excuse.
But then one day I'm cleaning the house and I'm trying to reduce some clutter and it occurs to me that in two years I've never opened these things, ever, and they're just collecting dust and the odds of the power going out or the Internet going down at the same time as my cell phone battery dying and me having to have some obscure phone number are vanishingly small. Oh, and in the years since we moved out here we've switched to Vonage so we couldn't even use the phone in a power outage anyway. And I now have Internet access on my phone (hell my wife has a Treo) so if we needed to
Schnapple
You never see it in web programming.
Steve Gibson does it:
http://kleinmatic.typepad.com/kirkunit/2007/03/steve_gibsons_a.html
Coder's Stone: The programming language quick ref for iPad
Dude, nobody's threatening to write an entire application in assembly. The debate is about whether assembly language programming is an obsolete skill.
You're also overlooking something called "debugging". You think you'd be using a nice, modern web browser or game if nobody involved had any understanding of assembly language? When testers send crash dumps back to the developers of IE & Firefox, what do you think those developers are looking at? Same thing for games. The latest few months of any project are dedicated to stability. A game written by a team with no assembly knowledge is a game that doesn't ship. Nothing more to it. I don't know if you consider shipping a product to be something practical, but in my mind that makes ASM programming count as pretty practical.
Using a chip puller.
Cutting write enable notches in 5.25" floppies.
Drilling write enable holes in read only 3.5" floppies.
Replacing worn out switches in Amiga mice.
Building custom serial cables.
Re-ordering items in config.sys to optimize the amount of RAM free.
Monochrome VGA, with 704k free.
Watching terminal output to figure out serial speed, bits, parity, and stop bits.
Disabling screen I/O while using punter, to get that extra 5% of throughput.
Avoiding the zero subnet.
Working with non-CIDR subnet masks, or masks with zeros in them.
PC-NFS.
Deleting enough files on RSX, so that there was contiguous space to put system files on.
PIP on CP/M. Hiding files using a programmer number.
Generating Novell remote program loader files using diskettes.
EMS vs XMS debates. The Intel Above Board.
Locking up Hayes 1200B modems by hitting backspace.
Ripterm. Ymodem-G. QWK mailers. Whistling the modem tone to see if a modem was calling you.
Intentionally misspelling things on a BBS to avoid the profanity filter. (Warez, pron, fcuk, leet, a$$, sh1t, etc.)
Using high speed cassette copiers. Using Chrome tape.
Connecting daisychained peripherals. Connecting separate analog and control busses on hard drives.
Figuring out which drives were RLL capable.
GCM vs GCR.
Backing up data to VHS. Cofiguring multiport serial boards.
Fossil drivers.
The 5.25" hard disk.