alternative book review (tech)

A review of a more technical book which I can provide a more robust review of than that of the previous ones. I did not write about this in the first place as it lacks the human factor. However, if the theme is acceptable, I would prefer this one to be reviewed (a review of a review, ironic) over either previous one.
Jonathan Barlett “Programming from the ground up” – 2003

“Programming from the ground up” is a very interesting book, and quite unique in its genre. While in itself it is designed to be an introductory book into x86 assembly language, it stands up to his name, and is not so much focused on teaching the reader the basics of assembly (which it does as well) but the way computes operate, and how programmers should think.

Due to the low-level nature of assembly, even seasoned programmers in C and higer level languages, may find new programming concepts to learn, as one understands more about the computer. An excellent mechanism throughout the book is the “Review” section in the end of each chater, which capitalises on the major points and ties everything together so that the reader can proceed in confidence, or go back to re-read some of the concepts.

The book starts by easing one into the goals of the book, which is an important read, as it helps prepare and condition yourself for what the book tries to teach you. Again, learning assembly x86 is not the primary focus of it. The whole first chapter is then dedicated to viewing how the computer works: an overview of how memory and processors are designed, some key field-specific terms that are later used throughout the book and ways to access the data stored in the memory cells of the computer.

Once the fundamentals of how processors and memory works, the book gets practical, not to keep the reader waiting and risk them losing interest. It swiftly explains the overall structure of assembly programs, and how programs are executed by the computer. By this stage, even someone working with AOT compiled languages may learn something new, as it is not compiler but computer execution centric.

In my opinion, the section that follows is the most informative and important one of the whole book, which is about dealing with functions. Barlett does an excellent job at explaining how function calls work at a processor level, which is invaluable information for any programmer to understand the cost and intricacies of making function calls, and concepts such as passing by value or by reference.

As the book progresses, more technical and complicated concepts are touched upon, where the assembly code to be written gets more complex, and so do the explanations about system architecture, however there again, there’s something in it for any programmer who hasn’t explicitly studies system architecture. Of course, it still being an assembly book, there is quite a lot about memory management which may be less relevant to higher level programmers who may prefer the sections dabbling in the best practices of writing good code for the processor.

Another key part of the book however is the whole chapter on optimisation. Assembly or high-level code, all programmers should strive to make their code as efficient as possible, and the optimisation chapter is all about that. It also covers cases when one should not attempt to optimise their code, truly providing a balanced and once could say fairly comprehensive overview of program quality.

The book does have a chapter which explains a bit about other higher level porgramming languages than assembly, which may also be an interesting read for already seasoned prorgammers, however for the assembly programmer there is not much practical information there.

The book concludes by giving tips and guidelines where to move on from the new level of knowledge, and while it is directed towards novice programmers or those new to assembly, the practices and concepts covered in the book learnt by any programmer should be applied as much as possible. I for one think this book made me a better programmer overall, even though I haven’t touched assembly since completion of the book.

I would definitely recommend this book to anyone who doesn’t know how the computer, mainly processor and memory operates at such a low level, even if they are not recommended in learning assembly it self. As a note however, if you do choose to do the assembly tasks, UNIX systems are the way to go.

Get the book here, and happy learning!