Just about a score back we were programming in ‘C’ language. The precursor to that was Assembly Language. This programming language was quite close to the machine. (although not as much in proximity as machine language) In fact if you wanted to write real nifty applications to save on CPU,memory and I/O, this was the best choice.
The only problem was that each machine had its own assembler. Hence portability was out of question. The other aspect was that the code was so long, that to write a real complex application, in this language, it was quite next to impossible. Yes, the small utilities were just fine. Imagine writing an authentication code in 50 lines instead of one. It was just too cumbersome.
I clearly remember there were two kinds of instruction sets – CISC and RISC. CISC stands for Complex Instruction Set Chip followed by mainly people like Intel, AMD, Motorola (Although now they make both kinds of chips) and RISC stands for Reduced Instruction Set Chip. While the former had a huge repertoire of instructions, the latter would be a lean instruction set. CISC gave us more options when selecting an API (Function) while RISC gave us Speed. (For example writing graphic routines which are repetitive in nature.
Programming in assembler required us to have a clear understanding of the machine at the lower level. By that I mean, we had to know CPU registers, PIA (Peripheral Interface Adapters), Interrupts (Soft ones at least) and other paraphernalia. This gave us more insight into the machines internals making us almost feel like an oracle. The kick sometimes really used to set in.
I still remember programming in assembler for DOS. There used to be a concept of TSR (Terminate but Stay Resident) programs. If you have used Sidekick earlier, you know what I mean. Another facet of Assembler programming was writing arcane things like device drivers and viruses. Although I used to decode the viruses of the yester years, I never wrote one. Once I do get them, I would change their behavior, but not act like a script kiddie. Long gone, fun years.
In today’s world we have high level languages. No one thinks of assembler. In fact, I don’t think they teach it in colleges anymore. The level of abstraction in a high level language is quite high. Hence most of these new breed of programmers are very far away from the machine’s internal workings. They live in a computing world that mimics the reality. (Object Orientation) They write a different sort of code, that’s far away from the Assembly world. Hoping that the lower layers would take care of their treasured code.
I still wonder, among today’s programmers how many of them would know the difference between segmented and flat architecture. Not teasing, but they are missing one that power surge you feel when you know that you are in control of the machine. The master of your universe. The ultimate ego trip.
I guess all good things in life face obsolescence. But the new has to replace the old. And with the new comes newer things to learn. Whether its objects, lists, new algorithms or whatever, they pave the way for a better world. In today’s world, there is no need to know assembler. But I guess it would make a great case study. And for those of you who want to venture out learning the intricacies, wish you good luck.