CHAPTER 10Dividing and Conquering: Using Procedures and Macros to Battle Program Complexity

Complexity kills—programs, at least. This was one of the first lessons I ever learned as a programmer, and it has stuck with me all these intervening 40-odd years.

So listen well: There is a programming language called APL (an acronym for A Programming Language, how clever) that has more than a little Martian in it. APL was the second computer language I ever learned (on a major IBM mainframe), and when I learned it, I learned a little more than just APL.

APL uses a compact notation, including its very own character set (many of which are Greek letters), which bears little resemblance to our familiar ASCII. The character set has dozens of odd little symbols, each of which is capable of some astonishing power such as matrix inversion. You can do more in one line of APL than you can in one line of anything else I have ever learned since. The combination of the strange symbol set and the vanishingly compact notation makes it very hard to read and remember what a line of code in APL actually does.

So it was in 1977. Having mastered (or so I thought) the whole library of symbols, I set out to write a text formatter program. The program would take a plain-text file and generate a printout that was justified right and left, with centered headers, plus a few other things of a sort that we take for granted today but that were still very exotic in the '70s.

The program grew over a period of a ...

Get x64 Assembly Language Step-by-Step, 4th Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.