8 ms·
Computer Science from the Bottom Up
- LazerBear 13y agoFor someone who is just finishing CS this is great for recap. I printed the pdf and will go over everything I've learned in the past years. Would've been nice if there was some "Theoretical CS Bottom-Up" too. From what I see this book doesn't have anything about computability, complexity, automata, algorithms, data structures, etc. Those abstract math-ish parts of CS are often overlooked by hackers, and are quite beautiful IMO.
- aneisf 13y agoJudging from the ToC, this seems way more Operating Systems-centric than Computer Science, doesn't it?
- LX-350 13y agoFrom the intro: "Not everyone wants to attend shop class. Most people only want to drive the car, not know how to build one from scratch. Obviously any general computing curriculum has to take this into account else it won't be relevant to its students. So computer science is taught from the "top down"; applications, high level programming, software design and development theory, possibly data structures. Students will probably be exposed to binary, hopefully binary logic, possibly even some low level concepts such as registers, opcodes and the like at a superficial level. This book aims to move in completely the opposite direction, working from operating systems fundamentals through to how those applications are complied and executed."
- theseoafs 13y agoSure, but none of that has much to do with computer science. This should more accurately be called "bottom up Unix".
- CocaKoala 13y agoYeah, I feel like this is trying to answer the question "What is a computer" instead of "what is computer science". Still a really interesting question, but definitely not what I was expecting.
- cmelbye 13y agoThat seems intentional. This seems like it's trying to be a "fundamentals of Computer Science" type thing than actual Computer Science. It's the stuff you need to learn first before you can move into actual Computer Science.
- UK-AL 13y agoVery few bits of what you just said have anything to do with computer science. Maybe data structures, and logic.
- zhemao 13y agoWhat exactly do you consider computer science? I'm pretty sure operating systems and compilers are topics in computer science.
- UK-AL 13y agoComputation. So what is computable, algorithms, analysis of algorithms etc Non of which you need a computer for. An operating system in its self is an application of computation. It's like physics and a car. There is stuff in a operating system which is computer science, like how to schedule tasks etc but learning a specific os is not computer science. Programming languages are computer science since they describe computation. Compilers are fuzzy People have been doing computer science, long before computers existed. I think at its core computer science is solving problems using mechanical steps(algorithms), although some people would say its even more general then that.
- deleted 13y ago[deleted]
- Someone 13y ago"from the bottom up" and the _first_ chapter is called "General Unix and Advanced C"? This book may be useful, but I would look for another name (I wouldn't even mention computer science, but that may be because I agree with Dijkstra that that isn't science or about computers). I also think a generic computer science book shouldn't only use Linux as example OS. Also, if chapter 1 is about _advanced_C_, why does chapter 2 have to introduce binary and hexadecimal notation? I think the book could be improved here, too; in general, the TOC feels unbalanced to me.
- zhemao 13y agoYeah, I don't really understand that either. At first I thought it was because it was necessary in order to get the background to do programming exercises in later chapters, but there don't seem to be any programming exercises. I think it would make more sense to put that chapter last.
- delsarto 13y ago(author here) This book was created both from my experiences and the experiences of teaching 3rd year operating systems classes. Students came in to that class having done a 2nd year class (data structures and algorithms I think) that was done with a lot of C. They really learnt "high-level" C, enough syntax to get by in the their course, but most didn't really understand it -- not enough to read the source to any kernel at any rate. I don't imagine it's done like that today; this was a long time ago. And most didn't really understand binary and hex, and how it relates to code either. You'd be amazed most 3rd year students didn't know how 2^10, 2^20, 2^30 relates to kilo, mega, giga bytes. The book needs a lot of editing, something I occasionally get to. But apart from the odd times someone posts it to here or reddit and people consider it like a text book, it's really only ever accessed by people googling for a specific topic. But suggestions are welcome and I'll consider it when I get some time. And on the "it's not computer science". The first commit was 10 years ago and people have been telling me that ever since. It was originally dreamed up as a course I'd teach to high-schoolers over 10 weeks to prepare them better for university -- the "computer science" degree they were planning to take. Yes, the book is really more about what would be called "systems" in the outside world.
- mrsaint 13y agoIs it just me or does the website have issues with character encoding? I am seeing things like "Bottom Up â€".
- pearjuice 13y agoAnything claiming to be "from the Bottom Up" and starting with Unix and Advanced C instead of Assembly cannot be taken serious.
- maldeh 13y agoOr automata theory and turing machines, for that matter.
- Turing_Machine 13y agoProbably both Turing machines and lambda calculus, just to see it from both sides of the coin.
- getriver 13y agoI read through couple chapters and enjoyed it. Does anyone have suggestions on other books dealing with this level of complexity?
- JoelHobson 13y agoI haven't read any of the chapters of this, so my comparison may be a bit off, but you might check out The Elements Of Computing Systems[1]. It goes from logic gates to compilers. http://www.nand2tetris.org/book.php http://www.nand2tetris.org/book.php
- Rusky 13y agoI thoroughly enjoyed this book but it doesn't go into near as much detail as I would like- it gives a vague, general concept of how things work and some pointers on how to implement them, but doesn't really go into real systems, often relegating major features to "optimizations", etc.
- maaaats 13y agoModern Operating Systems by Tanenbaum, perhaps? Here is the table of contents: http://www.amazon.com/review/R3K8J39AMWS64U/ref=cm_cr_dp_title?ie=UTF8&ASIN=0136006639&nodeID=283155&store=books http://www.amazon.com/review/R3K8J39AMWS64U/ref=cm_cr_dp_tit...
- zhemao 13y agoFor something covering the "lower half" of this material, I highly recommend Patterson and Hennessy's "Computer Organization and Design". I'm currently reading the 5th edition, and have gotten to the last chapter, which is on parallel processors.
- zhemao 13y agoI should mention that print copies of the book are pretty expensive, but you can easily Google for .epub or .pdf downloads/torrents.
- 13y ago
- cscheid 13y agoOn the first day of the first course as a CS major, the prof said something like "in this course you'll learn how computers work from the bottom up", turned to the blackboard, and wrote Maxwell's equations. We laughed, and he said, "You're laughing because I got it wrong, no? You need quantum mechanics for transistors". We actually ended up starting at logic gates, flip-flops, and latches. But the joke was a great reminder that your floor is someone else's ceiling.
- saurik 13y agoI once taught a class "Software as a Second Language: Computer Programming for Non-Majors" at UCSB/CCS. The audience very rapidly "why?"'d me down to "I honestly don't know, class dismissed: come back next week". I came back with a box of 12V relays and restarted the class from logic gates up, building a toy architecture with a usable machine language. Of course, I started at magnets (as given magnetism I can explain pretty easily how a relay works), but had to tell people that not only would you have to trust me that magnets worked at all, but that it isn't even clear that anyone knows how they work anyway (but for those curious, the Physics students in the class would likely be happy to talk about it ;P).
- AdrianRossouw 13y agoThis is a really useful resource. I've started to do something quite similar on my blog. I've been mentoring some web developers who only know html+css, and i've been using the time to write about the whole stack. My goal is to build a roadmap, not to write a recipe book. I've just started, but this is going to be a very useful reference for when I need to explain some of the more complex ideas. http://daemon.co.za/2014/04/introduction-fullstack-fundamentals/ http://daemon.co.za/2014/04/introduction-fullstack-fundament...
- AdrianRossouw 13y agoman, i really wish this went deeper into data structures and their nature, instead of just diving into binary math and c memory management specifics. I'm not going to get as much use from this as I thought at first glance =/ does anybody know of any other good references to point people to when discussing the basics?
- brudgers 13y agoFor Operating System, I've enjoyed Three Easy Pieces: http://pages.cs.wisc.edu/~remzi/OSTEP/ http://pages.cs.wisc.edu/~remzi/OSTEP/ Data Structures...well there's always Wikipedia and Knuth.
- AdrianRossouw 13y agoThe simple english wikipedia has some useful entries on this kind of thing actually.
- serge2k 13y agoThis looks like UNIX/C from the bottom up. Not CS, not without theory.
- userbinator 13y agoThis is bottom-up: http://www.charlespetzold.com/code/ http://www.charlespetzold.com/code/ http://www.nand2tetris.org/ http://www.nand2tetris.org/ I've only read a little bit of the 2nd book (IIRC I stopped reading and lost interest when I found a very obvious and repeated error), but all of the 1st one. The 1st one is highly recommended. IMHO the trend of teaching things in CS top-down doesn't encourage understanding of how computers actually work, which turns out to be quite important in many situations, especially debugging and knowing the limitations of what computers can and cannot do. I believe that a lot of the problems with software today (bugs, inefficiency, overcomplexity) can be eliminated or at least reduced greatly via a deeper understanding of these basic concepts, since the majority of programmers seem to have only a very vague idea of e.g. memory, number representation, CPU operation, etc. I think CS should start at the lowest level above EE, with binary representation of data and basic digital circuits (without e.g. going into the physics of how transistors work.) Have students build basic CPUs and write/enter programs for them and run them manually to see computation happening at this level. Then proceed up to Asm, C, and higher-level languages to write more complex programs, maybe even a simple operating system, accompanied by some of the more theoretical material (e.g. algorithmic complexity), continuing to keep the theme that there is a practical use for learning these things.
- chadillac 13y ago+1 for CODE, I can't recommend that book enough to... and when you start talking about Morris code, telegrams, braille, OHMs, and binary math as your build up... well, it really just connects a lot of mental dots.
- delsarto 13y ago(Author of the linked book) Funny you mention that Petzold book; I read that as an IT student doing airy courses about software requirements and design and realized I had to get across to the electrical engineering building. I didn't have the prereqs for the OS course, so I did the first assignment from the previous year and sent it to Gernot and begged to be let in. He ended up my thesis supervisor. (The other person I remember not being totally thrilled with the IT courses was Scott Farquhar, of billionaire Atlassian fame) So that book can change your life, and is the first thing I tell people to read who show an interest in the systems area
- sjtrny 13y agoWhere "computer science" = "computer architecture".
- kuchaguangjie 13y agoI like it.
- Vecrios 13y agoI like the introduction with a "new" approach, even though I do not necessarily agree with it. Speaking in 0's and 1's is extremely daunting for someone who wants to learn about CS, IMHO.
- eruditely 13y agoThis is not "bottom up". Bottom up is not ultra-reductionism. Bottom up is not learning writing & literature from the sequential arrangement of ink and space(≈ taleb). Though it is technically correct to say so. Below is something very similar. "At a purely formal level, one could call probability theory the study of measure spaces with total measure one, but that would be like calling number theory the study of strings of digits which terminate. At a practical level, the opposite is true: " - Terrence Tao [1] [1] http://terrytao.wordpress.com/2010/01/01/254a-notes-0-a-review-of-probability-theory/ http://terrytao.wordpress.com/2010/01/01/254a-notes-0-a-revi...