or learn more

How to be a Computer Scientist: Part 1 – Starting a Library

Apr 4, 2004

How to be a Computer Scientist: Part 1 – Starting a Library (roots)

Petzold gets a bad rap from the hardcore programmers because of his affinity for writing Windows-centered books. However, with Code, he has created a beautiful piece of work for the computer scientist N3wb33 (and for the guru too). It starts from the ground up and gives a nice overview of Computer Science-ness. This may be a great book to read if you are wavering on starting C.S. studies; it may push you one way or another, but in any case it is extremely informative. Be warned, that there is a lot to be covered, and the topics in the books tend to be spread extremely thin, therefore be prepared to use the last entry in this category extensively as a supplement to Code.

There are many that believe that C is the wrong language to learn when starting as a computer scientist because it tends to be far too low-level. There is something to be said for that (see the next book below for an alternative to this approach). I started with BASIC myself, and because of it I developed many bad habits that I was only able to shake after many years of intensive programming. In addition, because of the nature of BASIC, I was abstracted from the workings of the computer itself. Therefore, I am of the school of thought that says one should start with a language that abstracts the machine a bit, but also allows you to dig as deeply as you wish to explore it completely. C is this language. Experimentation is important. Causing memory protection faults is important. Bit-manipulation is important. Pointers are important. It's all part of a solid foundation. Kernighan and Dennis Ritchie invented the C language, and their views on the matter should be the starting point. There book is quite terse, but it provides everything necessary to start with C -- besides, the best way to learn a language is to write programs in it.

Structure and Interpretation of Computer Programs
Of course, starting with C causes beginners (and gurus at times) to get caught up in the minutiae of programming. That is, basic C does very little for you. By that, I am referring to the fact that if one were to implement any system in C, he/she would have to develop every aspect of the said system. Every required data structure, every required algorithm, and basic memory juggling tasks must be handled by the programmer. Very little, if anything is given to you with C. Therefore, it may be a good idea to start your C.S. training with a language, namely Scheme, that provides a much higher level of abstraction, handles all memory manipulation tasks, provides powerful data structures 'right out of the box', and is extremely powerful for any programming task. The Structure and Interpretation of Computer Programs book provides a great grounding in essential development knowledge, which will help you to avoid many bad habits from the start.

It is absolutely critical that one gain an understanding about how algorithms are constructed, and what makes them great (or horrible as the case may be). Any study of algorithms should be language independent, as the underlying ideas are truly the important matters. In addition, any study of algorithms should be rooted heavily in mathematics, including: Combinatrics, Big O, probability, NP-completeness, and indirect/direct proofs.

Programming Pearls
The quintessential problems book. Expert chess masters spend countless hours every day solving chess problems. That is, they study countless volumes of chess positions and devise the most creative and/or theoretically sound solutions for each. In order to be a computer scientist, one must think like a computer scientist; one must solve computer science problems. Programming Pearls is a great book packed with problems, insights, and solutions for many basic (and many not-so-basic) C.S. topics.

While reading any of the books mentioned in my series, there will often be a need to explore topics further. The fantastic web resource Wikipedia will provide the answers, if not pointers to, almost any topic that may need more attention. Use it.... Often.

The Soul of a New Machine
Details the project to design and create an early 32-bit mini-computer. It's an interesting thing to read about the geniuses that forged the very field that you may be interested in pursuing.

Fire in the Valley
A collection of anecdotes and case studies about the advent of the PC and the rise of Silicon Valley as a force in the industry. If the names Bill Gates, Paul Allen, Steve Balmer, Steve Jobs, Steve Wozniak, John Draper, Lee Felsenstein, Adam Osborne, The Homebrew Computer Club, Altair, Apple, and Microsoft sound familiar, then this may be the book for you.

Hackers are not the devious criminals depicted in the movies; they are instead the pioneers of the computer industry. Without hackers, we would be reading our emails on an abacus. Much like Fire in the Valley, Hackers details the emergence and influence of a rejected subculture that turned out to change the world.

Cuckoo’s Egg
As a child I ran a BBS (Wikipedia to the rescue). After reading The Cuckoo's Egg I seriously wanted a cracker to attempt to break into my system so that I could track him and thwart his attempts like the protagonist in the book. Of course, not having a 2nd phone line restricted my BBS to uptime hours between 11pm and 4am, thus seriously limiting cracker-busting potential. It's was still a great book.

Masters of Doom
I discovered this book recently and I feel strongly enough to include it in this list. It details the rise if Id Software, the makers of Doom. The greatest tales are easily those concerning the single-mindedness of the driven programmer (in this case, John Romero and John Carmack), although the stories of interoffice backstabbing are quite good as well. Very few books have motivated me to code intensively like this one.

Insanely Great
The story of the Apple Macintosh. Anyone living in the western hemisphere knows of the zealotry that Apple Computers invokes. This book nicely details just why that is. Steve and Steve are gods. Nuff said.

The Art of Unix Programming
An icon in the C.S. field talks about an icon in computer operating systems. By my count that makes two icons in one book, thus making a great book.

Code Complete
A thorough examination on what makes good or bad code. For a computer scientist, the notions of code formatting and documentation are the ingredients for long and hard-fought battles. This book is perhaps the most comprehensive source on such topics.

The Mythical Man-Month
The general consensus is that in order to catch up on a project that has fallen behind schedule is to throw more money and bodies at the problem. As it turns out, this approach not only does nothing to tackle a slipping schedule, but it actually serves to make matters worse. This and similarly themed topics are contained within.

Design Patterns
Perhaps the most influential work on development in the past 10-20 years. Design Patterns details some of the most common patterns that arise over and again in development projects both large and small. Write a bunch of programs first, then read this book. You will find yourself saying to yourself, "wow, I remember that."

Advanced Topics
This is the essential reference on modern AI topics. Its encyclopedic nature will astound you. Everything to be found, can be found in this tome.

If you can happen to find a copy of this massive text under $150USD, then by all means grab it, read it, sleep with it, and worship it. There is no more comprehensive book on the art of graphics programming and optimization. Good luck finding it however.

Every programmer who has ever written a compiler has read this book before hand. This is the one and only text worth mentioning in the esoteric field of compiler/interpreter development. Written over 20 years ago, it still stand as the prime resource.

Operating Systems
Tanenbaum is know unfortunately as the guy who wrote Minix and got waxed by Linux Torvalds in some historical debates on operating system development. These facts should not be held against the man. For any student wishing to learn how the internals of modern operating systems operate, this book is the place to start. While low on code, the book is quite heavy on the theories standing at the heart of every operating system in use today.

To be continued…

3 Comments, Comment or Ping

  1. anon

    your compilers link is broken, anyways, it would have been a good idea to just name the books instead of having everyone click a link to see what you’re talking about. (or in this case, keep wondering even after clicking).


  2. The compiler link should have been to: Compilers: Principles, Techniques, and Tools – Aho, Sethi & Ullman. The first edition is from 1986 and still very relevant, but it was updated in 2006:

  3. silas

    Feel Knuth’s Art of Computer Programming worth mention as CS version of encyclopedia – when you really want all the details, turn to KNUTH

Reply to “How to be a Computer Scientist: Part 1 – Starting a Library”