views:

219

answers:

8

I am a student who has done a course in Haskell and I am currently doing object oriented programming using Java. Haskell was great and I did do really well and I am getting on fine with the Java.

But I feel that I need to learn more about the underlying theories behind computing and programming in order to really become a good programmer (most of what computers do is still a complete mystery to me) . What I really think I need is a book that deals with computing from the ground up. One of my courses was computation and logic which started off this process but finished before I learnt how logic is actually implemented in th computer itself.

Any ideas would be great!!!

+5  A: 

I went through the same mindset at one time. Read Modern Operation Systems by Tanenbaum. It's a good overview of how computers work (from a software perspective) from the ground up.

cjserio
+1 for the circus book. It's a great start and a must-read for anyone doing CS or CompE. There are two problems here: 1 - It's a textbook, so you really need someone (a professor) to walk you though. 2 - It only covers things through the mid-80s (maybe). For #1 - look for lectures/slides like http://bit.ly/5jJJLO
George
+3  A: 

At the most basic level you want Charles Petzold, Code: The Hidden Language of Computer Hardware and Software. At an advanced level you want Computer Architecture: A Quantitative Approach.

The first is at a very basic level and will walk you through binary numbers and how to manipulate them logically, how this translates to how computers process information and how the CPU, memory, and OS all work together. The latter is a sophisticated walk through how computing machines are designed.

Jason
+1 For Petzold's "Code"
Dan Rigby
A: 

The Art of Computer Programming by Knuth might not be a good place to start - but it does have a thorough analysis of programming algorithms and analysis of them - it's quite long.

In The Pattern on the Stone by Daniel Hillis works at a lower level and builds from basic logic building blcoks through memory hierarcy to parallel and quantum computing - it's also quite short!

Robert Christie
http://www.billthelizard.com/2008/12/books-programmers-dont-really-read.html
Michael Myers
@mmyers: I agree - reading all volumes from start to finish would be a bit of a challenge. Knuth helpfully includes a Flow chart for reading the books - if you can make it to page xii in volume one, he helps you choose which bits to skip!
Robert Christie
+3  A: 

All the books from Andrew S. Tanenbaum

There are some overlapping sections but still great books.

Mite Mitreski
A: 

Great goal--and there are a lot of different ways to achieve it.

I would work from both books and from experience. If you really want to know what is going on at every level (a very admirable goal!) I'd recommend trying to learn an assembly language.

Just a single experiment with a micro-controller will teach you more than a dozen books. Do something fun with it.

I'd also recommend an intermediate language like C so that you can get a firm grasp of how a higher level language might interact with memory structures.

Contribute to an open-source Operating System--or at least try to.

If you want to know more about how the hardware works, try to make a flip-flop out of gates... See if you can make a simple adder with a radio-shack kit (there must be a computer-oriented spring based kit out there that actually teaches you how to make more than a radio)

If you are still in school, try to get part-time jobs doing things you don't understand or aren't comfortable with. Building and repairing PCs for a small PC shop, coding in a language you don't know yet, or take an intern position in a company that manufactures some kind of electronics (I mean something with a programmable CPU based product--which most electronic companies are these days).

I'm not saying don't read the books--I'm saying that you get more out of them when your need to read them is project driven and not simple curiosity.

Bill K
A: 

I think people are answering the question you really want answered. In other words, you're more interested in the architecture and low level system design stuff. So, Maybe Hennesy and ... Patterson? Patterson and Hennesy? ... Any standard book on Computer Organizations. should do you well to start. After that a book on Operating Systems and one of Compilers (All recomendations above are good) for more specific info.

The answer to you're LITERAL question about the THEORY of languages and computers is a little different. If you're interested in theory of computation, there's tons of books on that as well, but that's basically math, and, while really really interesting (IMHO) not directly useful in every day practice. (You're not likely tobe programming Turing Machines...) Likewise, Books on the Theory of Programming Languages from "The Essentials of Programming Languages" to Barendreghts book on Church's Lambda Calculus are also available.

I'm pretty sure that those aren't what you are actually looking for, but wanted to throw those options out as well... If you're interested, comment, and I can look up more specific book recommendations...

Brian Postow
+1  A: 

The Elements of Computing Systems

http://www1.idc.ac.il/tecs/

You build (virtual) circuits from logic gates, a simple computer, assembler, os, compiler for a high level language, etc. All in simulators provided for free on the website.

(FYI: this is the 2nd time I've used this answer on SO)

z5h
This is really good stuff. It's at the right level for the OP and is much more suitable than wading through a pile of dragon book, Tanenbaum, Hennessy and Paterson, yada yada yada. **This is the answer** for a beginning student.! +1
Norman Ramsey
@Norman, ya, I was pretty excited when I found this book. Recent, surprisingly reasonable price $20 CAD on Amazon.ca, with free software, etc.
z5h
A: 

Read either Shimon Shocken's book as mentioned by z5h or Yale Patt's book.

Why these are good choices:

  • Each book gives you "one-stop shopping" of how computers work, from the gates up.

  • Each book is designed for someone at your level: a beginning student.

Other answers recommend some very fine books, but the Dragon book or the books by Tanenbaum or Knuth or Hennessy and Paterson are all books for specialists with some experience under your belts. To read all these books and then to synthesize an understanding of how computers work requires a lot of serious intellectual work. (I have read them all, some more then once.) Whereas either Shocken or Patt has already done the heavy lifting to try to synthesize an intellectually coherent view of how computers work, for someone who is entering the field.

Norman Ramsey