87 comments

[ 4.4 ms ] story [ 168 ms ] thread
Oh man, I remember this book. My university uses it for a sophomore level CS course.
Awesome book. I think we used this book in my CS days, but would have to check my notes.

Well timed post as well: We're adding more on programming fundamentals to our course at http://www.thinkful.com/

We used the book for ECE 3020 - Mathematical foundations of computer Engineering at Gatech.

Lecture notes have been taken down, but here are our homework solutions: http://users.ece.gatech.edu/~dblough/3020/solutions/hw_solut...

This is one thing about GaTech that really annoys me. Every professor seems to remove thier notes at the end of every semester and only post them when the content becomes relevent to the course. You cant look ahead and cant reference them afterwards.
> Every professor seems to remove thier notes at the end of every semester and only post them when the content becomes relevent to the course.

might this be possibly done because there is not too much variation in course content from one sem to next ?

I'm sure this is the reasoning but it’s a stupid reason. I joined a frat because they have a service where they upload all the notes by class and professor and that caused my average GPA per semester to jump nearly a point.

It’s simply lazy, easy to game, makes crunches nearly unbearable, and interferes with the student’s ability to learn.

It’s also why GT while it has a reputation on par with MIT is actually a much worse school IMO. GT produces results because it lets a large amount of people in and them culls them out by being very difficult. Most GT students are very good at teaching themselves or finding groups such as the frat I’m with to get help.

CS Classes are often more of a hindrance than a place to learn and many of the 3+ students I know stopped attending most classes and are basically self taught my self included those who do go to class study while there and simply keep an ear out for hints about what may be on the test.

There are exceptions, especially after the sophomore year, but in general GT professors simply read aloud same notes for the last 5 years that have a very loose connection to what’s going to be on the test.

As a fellow GT grad I sadly couldn't agree more.

Unless you already know stuff or find a good group you're largely on your own.

"GT while it has a reputation on par with MIT"

This is not the case. Best not to repeat this claim.

If one is being extremely charitable (to the poster, not Georgia Tech) one could say that GATech is an elite engineering school but not super elite, like MIT. There is legitimate controversy over what the best university is for CS in the world. For what the top four are there isn't. They are CMU, MIT, Berkeley and Stanford. Georgia Tech has a really great reputation and every professor there is a very impressive researcher but it is not comparable to MIT.
100% agree. As a member of SGA I did push for an online notes resource. It turned out to be a legal gray zone though.
I find this supprising, would you mine expanding on that?
Also used this book during university. We all had to print it out on a printer.
And I just discovered that I'm still a university computer science department system administrator: Every fiber of my being screamed, "Dear god, no! Use the Copy Center!"
Great book. It's amazing that after all these years the content is still relevant.
I mean, kind of, but not really. Math textbooks from the 60's are still relevant today, so why would computer science be sufficiently different? I can see that there are new concepts and whatnot, but there hasn't been any kind of fundamental change in thinking. I wouldn't expect there to be.
This seems like a great book just from skimming a few chapters, I'll make sure I spend more time with this later. Thanks for posting.
I can't find any license. I wonder if the authors would allow someone to convert the book to epub or mobi.
In the meantime, I just used PDFtk:

pdftk preface.pdf toc.pdf ch*.pdf index.pdf cat output Aho_Ullman_1992_Foundations_of_Computer_Science.pdf

From the first paragraph of the first chapter:

> But fundamentally, computer science is a science of abstraction — creating the right model for thinking about a problem and devising the appropriate mechanizable techniques to solve it.

Too often in computer science education these days, this essential fact is lost.

This is so universal about computer science and programming ... I have it on my wall!
(comment deleted)
So true. People at my school don't always realize that computer science isn't just about programming, it's truly a subset of mathematics.
Homotopy type theory[1] is essentially working to show that math is (or can be viewed as) an interesting application of computer science.

[1] http://homotopytypetheory.org/2013/06/20/the-hott-book/

Very interesting! I've often got into nasty arguments with people online when I dared to say that Computer science (Computing) was not a subset of math, but rather could be viewed more naturally as a superset. It is good to see serious academic work being done along these lines.
You can have the same debate about logic and mathematics, or to some extent philosophy and mathematics.
You could throw set theory into the ring as well :)
I did not get the impression, from the blog posts, that HOTT was putting forth that CS could or is a super set of math just that it can be used as a foundation for all mathematics, just like set theory or category theory can be.
Ok I'll bite. Why is "creating the right model for thinking about a problem and devising the appropriate mechanizable techniques to solve it" a subset of mathematics?
Because the mathematics is basically distilled, formalized art of precise thinking. It's the art of manipulating and morphing mental models. It's as much about numbers as astronomy is about telescopes ;).
Forming a model might not involve precise thinking, it often involves lateral thinking, at least with me.

I heard that computer science was more of a subset of music than math.

Higher math requires a great deal of lateral thinking. Also, music an math are often closely related but I don't see the connection between music an say computer vision.
Computer vision practitioners do mostly math, are we calling them computer scientists also? Sheesh :). Whenever I get in the same room with one, we are talking completely different languages (and we do have a sizeable computer vision team in our lab).
That's what a Maths degree is all about! I guess Maths emphasises the model and CS emphasises the mechanisation.
Computer science is the study of algorithms, information systems and anything that is computable.

Mathematics is the study of formal systems, eg proofs that can be derived from axioms using algorithms, i.e. a specific type of computable system.

Therefore, mathematics is a subset of computer science.

Math includes the study of non computable things. Also, Math includes chaos theory which is more than just a formal system.

EX: computable numbers are a subset of all numbers. http://en.wikipedia.org/wiki/Computable_number

mostly kidding. but presumably the theorems about non-computable numbers are computable and therefore you're still working with computable things?
Computer science is a big tent. It's an amalgamation of a lot of different things. If you ask "Is computer science X?" the answer is usually yes.
Is computer science the study of political figures of the past? No... but it is the study of validating X.
1992 - a world without Java...

And, you know, the book about foundations is... SICP.) OK, this is C Edition.

if

    "computer science is a science of abstraction — creating the right model for thinking about a problem and devising the appropriate mechanizable techniques to solve it"
then

    language is of no importance
> language is of no importance

well, you are just being facetious, and i guess you know it too. languages are part of 'devising the appropriate mechanizable techniques to solve it' as well as algorithms & data-structures which support the abstractions that you just came up with...

Language is a medium of expression of ideas (nothing in common with medium.com), so, less constrained it is the better. That is why Scheme in particular was chosen for SICP - it is small and expressive. It was a language for teaching, in good old times.))
Why so many books these days are available to download for free one chapter at a time. It just makes reading worse.
I like it; it makes it easier to read in a web browser.

But if you want a full copy:

1. DownThemAll to pull down all of the .pdf links,

2. pdftk to merge them all into one file

I just downloaded the entire book using ' wget -mkp http://i.stanford.edu/~ullman/focs.html#pdfs ' (Should work from any *nix systems having wget utility; I tried from mac) (explained here http://opstribe.wordpress.com/2013/06/22/a-simpler-backup-me... )
Would this be a good resource for someone who doesn't have a CS degree and who doesn't necessarily know the foundation of CS?
After skimming through it a bit, and as a CS student, this looks like an excellent introduction to the theory of computer science, especially for someone with no background in it. It corresponds with what I would expect a first or second year university course on Computer Science would cover. After reading some of this, if you're still interested in this sort of thing, the rather infamous Introduction to Algorithms published by MIT press may be a good next step. PDFs can be found online with a bit of digging.
Awesome, thanks for the help and the additional resources!
Here's the Prerequisites section:

Students taking courses based on this book have ranged from first-year undergraduates to graduate students. We assume only that students have had a solid course in programming. They should be familiar with the programming language ANSI C to use this edition. In particular, we expect students to be comfortable with C constructs such as recursive functions, structures, pointers, and operators involving pointers and structures such as dot, ->, and &.

(comment deleted)
ACM members once had a poll to resurrect a few classic CS books. That poll slowly became a "favourite CS books" list. This is the list: http://t.co/LOli1BKFuL

Some splendid suggestions there.

Mathematics existed long before logic came to explain it, and most practicing mathematicians don't care that much about formal logic or think about it in their day-to-day work. The incompleteness theorems add a further disconnect.
I don't think it makes sense to say one can do mathematics without logic. Even if early math users didn't have a concept of formal logic, their mathematical reasoning was still dependent on it.
I downloaded and merged the individual PDFs into one file, you can grab it here:

https://dl.dropboxusercontent.com/u/6428759/merged.pdf

Edit: I did this using commands mentioned in some other comments and some Googling (this only works on OSX):

curl -O http://i.stanford.edu/~ullman/focs/ch[01-14].pdf && /System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py -o ./merged.pdf ./*.pdf

Cool one-liner!

Might want to switch the last part of the command, though, as all other pdf files in that folder get merged in as well (learned the hard way) :-)

Something like this would probably be safer:

curl -O http://i.stanford.edu/~ullman/focs/ch[01-14].pdf && /System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py -o ./merged.pdf ./ch[0-1][0-9].pdf

Sorry about that--I actually just created a new folder and moved into it before running the command, I probably should've mentioned that to prevent the issue you ran into.
This is a fairly interesting philosophical question. Personally I view (and use) Math as a set of abstractions to understand the world, and use Mathematical Logic to help make Math more rigorous and proofs more checkable. But if it turned out that Mathematical Logic had some flaws as it is formalized today, I wouldn't throw out Probability Theory or Algebra. Instead I would seek a formalization of Mathematical Logic that made those things useful.

I don't think that there's any formal system you can use as the basis of all Math, though. For example, ZFC can't talk about proper classes, but we'd like to be able to make statements about the class of all sets, and the collection of all classes, etc.

Many people have posted the combined PDF on this thread. However, there is no way to economically print this PDF for self use. Lulu puts the limit at 740 pages and this book weighs in at 790+ pages.

Does anyone know of a cheap online printer that can print at around 2cents/page?

With that budget you can get there with duplex b&w laser printing onto standard copier paper. I guess you'd have to buy a binder, but still cheaper than lulu I would think.
I was in the Stanford bookstore a few days ago and noticed their summer softback text for their summer Comp Sci 101 course was $132. It was about Java and basic computer principles together. It resembled a standard softback beginning Java reference book but with some exercises added to each chapter. Aho and Jeff have done a fine service offering their more meaty textook online gratis. (You dont even want to know what hardback texts cost- over $200.)