Fog Creek Software
Discussion Board

Joel reviews "Programming from the Ground Up"

Bartlett Publishing recently released Programming from the Ground Up (ISBN 0-9752838-4-7), and introduction to programming using assembly language on Linux. Assembly language is the language of the machine itself, and learning assembly language is essential for a full understanding of other computer science concepts.

Programming from the Ground Up is very well-respected in its subject area, and is currently being used at Princeton University in their COS 217 "Introduction to Programming Systems" course. It has also received good reviews from Joel Spolsky and Randall Hyde.

Sathyaish Chakravarthy
Wednesday, July 14, 2004

Lol, Sath are you seriously pushing assembly language here? Yes, coders should read, and this is a great book to read. I am just wondering what makes this book so great compare to all the other great comp sci books?

Li-fan Chen
Wednesday, July 14, 2004

It was a topical piece of news. I thought I'll bring it home first. You can see the blog entry is 14th July 2004. I like to keep searching for Joel in the news every now and then.

Sathyaish Chakravarthy
Wednesday, July 14, 2004

Book looks good. Assembler is a good cross-training exercise that keeps the programming and thinking skills in shape, and helps when debugging low-level code.

Wednesday, July 14, 2004

That's a good idea for a book. I learned assembly language before anything else, and I think I'm much better off because of it. I'm with Joel, I think knowledge of assembly, even if you don't use it much in your daily work, is essential.

Wednesday, July 14, 2004

I learned assembly in college... for two weeks.
Haven't used or needed it since (15 years ago).
If you're working on business problems, internet solutions, EAI, etc.
Trust me.
Assembly has no added value. No matter what the geeks say (no offense)

Geert-Jan Thomas
Thursday, July 15, 2004

Started with assembly language; even now, when I look at code, I kind of see how it breaks down into individual instructions.  It helps you realise how to decompose a command and try to guess the 'cost' of it.  Like the guy in a prev thread worrying about the 'MoveTo'.  A bit of assembly experience might help guess just how costly that method probably is.  Not as accurate as *looking* at the assembly, or *profiling* the app, but a great 'feel' for the issues involved.

i like i
Thursday, July 15, 2004

Yes, Geert, you have to learn assembly to realize you don't need it!

Thursday, July 15, 2004

There is a free download at

Apparently sanctioned by the author, so it's legal.

Thursday, July 15, 2004

Any pointers to where Joel reviewed the book? I only saw a general quote from Joel saying something along the lines of "learning assembly language will make you a proper programmer"...


Thursday, July 15, 2004

> If you're working on business problems, internet solutions,
> EAI, etc.

Then again, who'd want to?

Thursday, July 15, 2004

Just so you guys are aware, most Java/Dotnet virtual machine expose books will cover PCode and Assembly concepts, tying both together. Read one of these and you will kill 2 birds with one stone--besides you probably wouldn't be writing a single line of assembly any time soon if your day job is using any of the commercial programming languages created after 1994.

Li-fan Chen
Thursday, July 15, 2004

Unless you're a Systems Programmer working on MVS. Then you nearly always program in assembler.

I wrote an awful lot. It wasn't long before I craved the need for something to remove the duplicated long-hand effort; C would have been great at the time.

Without the grounding in assembler you don't *really* know what's going on under the covers and this can be a differentiator betwene an average-Joe sort of developer and an excellent one.

How many people truly know how databases work under the covers; how they're structured? I worked it out once from first principles; how I would design a DB (so that simple things like adding a row in the middle of a table do not incur unreasonable overhead). It wasn't far off reality either. Do I need to know how DBs work to create a DB app? Nope. Does it mean I will make better design decisions? Without a doubt.

Same goes for networking too. And indeed any other technology that these days we simply use an abstraction layer over.

Thursday, July 15, 2004

I'm with gwym, fantastic experience to have since it can only benefit you to know how the machine will approach the problem, at least in a likely manner.  Everyone should try a significant program in Asm, create a simple database, network, internet, and parser at some time or another.  It'd be nice to do them in Asm but C comes close enough for government work.  Twiddling just the right bits can really pay off, especially if a bit-twiddler snuck some of that behind the scenes optimization despite the 'high-level' gurus (sets in mySQL come immediately to mind, a bit-twiddlers dream!).

Frankly, this should all be taught by third grade, IMHO, but nobody asked me and it would frighten our so-called educators to death.

Brian J. Bartlett
Thursday, July 15, 2004

I'm with the gwyn guy too and I appreciate this post. It's just the kind of thing I feel I'm missing. Even though I don't like most of the OP's other posts I'm glad he posted this. I'll be getting the book. Wasn't Joel once talking about the leak ... getting down to assembly is pretty close to the Soul of the Machine and I believe and understanding there will help anyone working above that level.

Thursday, July 15, 2004

I started my career in IT 20 years ago by programming in pure* Z80A assembly. I did learn a lot in doing that, but I have to be careful not to get bogged down with inappropriate "optimizations" these days.

* Actually, it wasn't quite pure, as I sometimes made use of the "extra" instructions that were implemented but hidden by Zilog, and also a rotate command that had a bug in the micro-code (it did something like shift bits by one and set lsb to 1, not 0).

Steve Jones (UK)
Thursday, July 15, 2004

I think Li-Fan's comments are an excellent example of some of the dynamics discussed in the young'uns versus old farts threads recently.

Li-Fan, just because something isn't immediately applicable to you today does not mean it is not worth understanding and studying or that value will not be derived from it. I didn't appreciate the value of studying calculus until I realized the type of thinking habits it was forging. I think learning assembly (or PCode) is similar. So is learning compiler theory, even if you never write a compiler...

Jeff Kotula
Thursday, July 15, 2004

Programmers who shun assembly language are like those pop singers who know nothing about music harmony, and architects who don't know how stones and metals work, and digital circuit designers who don't know analog electronics.

Assembly language is like First Principles in science.  You may not need it or use it on a daily basis, but if you don't have it, you don't have a foundation.

How on earth do you think modern VM-based languages are brought to you if the VM writers didn't grok assembly language? You think they output C/C++ from the bytecodes? Take a peek at Java's sources someday and take a lesson in humility.

Friday, July 16, 2004

*  Recent Topics

*  Fog Creek Home