Cross posted from my personal blog.
(Specifically for IBM System/360–System/370–Z systems.)
After I dropped out of graduate school my first job was as a plotter operator for a computer aided design/drafting shop run by CDI. We had a crew of about a half-dozen drafters working on IBM 2250 graphics terminals attached to an IBM 4341 computer, and a big flat-bed printer. When they had a schematic or diagram they wanted printed, I would write the print instructions on a reel tape drive attached to the 4341 and then move the tape to a drive attached to the plotter. After positioning the paper (or occasionally plastic) to write on, and putting ink in the pens and the pens in the plotter head, I would start up the plotter and it would read the tape and move the head around to make the plot. (A big vacuum under the plotter bed kept the paper or whatever flat on the bed.)
Anyway, this left me with a lot of time sitting around, which I put to use learning to run and operate the computer, so I was eventually promoted to computer operator. (My boss, Ray Tamar, was going to put me in for a promotion to systems programmer, but a recession hit and I was laid off instead.)
The 4341 implemented the IBM System/370 architecture. We ran the VM/370 operating system, with a OS/VS1 guest supporting the actual drafters, who were using a program called CADAM from Lockheed. While I was there IBM stopped supporting OS/VS1, but about the same time Lockheed provided a CADAM version that ran under CMS (a single-user operating system that only runs as a VM guest), so we converted to that. Anyway, part of what I taught myself on that machine was how to program using IBM’s Assembler for System/370. I remember one of the projects I had was to replace the generic CADAM logon screen with a custom one using the CDI logo. This meant also learning the Graphics Access Method (GAM) for programming the 2250 terminals. My assembler skills would later come in handy when I started working for the University of Texas.
So what can I say about assembler? If you care at all about programmer productivity, and there are any other options, you should probably not write in assembly language. On the other hand, if you really want to understand how the computer works at the lowest level, assembly language is what you want to learn. You’re right there, manipulating registers and looking at memory addresses and learning the individual instructions and so on. Also, at least in the IBM mainframe world, there is a lot of “legacy” assembly language code out there, so this is a valuable skill to have if that’s where you’re working.