9 ms·
MIT lecturer Ana Bell discusses books to learn CS and programming
- manelalexg 8y agobfsvdcax
- deleted 8y ago[deleted]
- thisisananth 8y agoI read the first four books and I think they are very good. Good choices!
- raister 8y agoYou're a very smart person, kudos!
- weeksie 8y agoI would have thought she'd mention Introduction to Algorithms (Rivest et al). The Pierce book is great but hardly something that I'd include in an every-programmer-must-learn-this list. Code Complete is fantastic. I haven't re-read the Pragmatic Programmer in probably a decade but I remember that giving me a very good handle on approaching code as a young developer.
- ifoundthetao 8y agoWhen you re-read it you'll be visited by some antiquities. It's a great book, but I'd be very interested in a reboot.
- maym86 8y agoGood list for more experienced programmers but there's nothing new here except the sales pitch for her python book. It's not a great list for beginners learning by themselves for the first time. It seems that the article is aimed at a complete beginner starting for the first time given the part about learning python first. If I had just learned python as my first language and then tried to read some of the books in this list I would be very confused.
- 110011 8y agoHer recommendations are poor. You dont read books on software development methodologies when "learning to program". Nor would you learn type theory. That's like suggesting to someone who wants to learn to sail, the intricacies of weaving cloth fibers into a sail. There's a huge tower of abstractions to deal with in learning any new discipline, and it's important to enter at an appropriate level, ie, one that engages the learner to continue because the relationship to the end goal is clear (to the learner). I would suggest CLRS to someone mathematically mature for the best introduction to algorithms. I don't have a book suggestion for learning to program in some language, but I do consider this a far less difficult and important obstacle compared to learning to think algorithmically. When the interest is piqued people will naturally dig deeper and eventually find out for themselves, other aspects in the tower, be it silicon doping or reinforcement learning.
- nextos 8y agoYes, while the books she described are good, the overall package as 5 books to learn CS is odd.
- jeffreyrogers 8y agoI used CLRS at my university, but I've since found Algorithms by Dasgupta, Papadimitriou, and Vazirani far better. It's a much smaller book for one, so more people will actually read it, and while it is mathematically rigorous, the proofs and explanations are well motivated so you actually understand how the algorithm works and how someone could have come up with it in the first place. I agree though that her recommendations are poor. I feel that way about most of these five books recommendations. It's seems that people usually pick their books to be controversial or to show off how clever they are, rather than to actually help someone understand their field. I've read half of that type theory book for example, and it is utterly impractical for any practicing programmer. You would only find it interesting if you're interested in implementing functional programming languages, and even then it's quite theory heavy and not very practical.
- soperj 8y agoIt does say Computer Science and programming. So you might not read those books while learning to program, you (arguably) would while learning computer science.
- lobo_tuerto 8y agoI'd say the recommended books are not for learning per se, but for consolidating your programming experience.
- lordnacho 8y agoAlways nice to have book recommendations, but you learn programming by programming. Download whatever you want to code in, work through "Hello World", bash your head against walls, come out more experienced on the other side. The CS side of it is definitely interesting, but you can get quite far without knowing what a hash map is. The opposite is not quite true, as you won't be able to test your fancy CS stuff without having bashed those often trivial walls.
- fao_ 8y ago> Always nice to have book recommendations, but you learn programming by programming. Did you read the article? That's literally what she said in the article.
- alexashka 8y agoI can only imagine how Gerald Sussman and Hal Abelson (SICP) feel about the state of computer science education.
- leanthonyrn 8y agoHere is how Gerald Sussman feels at least about computer languages. https://youtu.be/O3tVctB_VSU https://youtu.be/O3tVctB_VSU Hal Abelson on Computer Science Education https://youtu.be/fqtlQWmRvvk https://youtu.be/fqtlQWmRvvk
- dublin 8y agoI'd argue she's flat missed the most important aspects of programming, as shown in these two books: 1. Fred Brooks' The Mythical Man-Month, and, 2. Ted Nelson's Computer Lib/Dream Machines (Really, almost anything by Nelson, but this one is the classic.) Neither teaches programming. Both teach the things that make good programming good, and if you don't know these things, you're condemned to mediocrity at best, and making furrows by plowing the sea at worst...
- gowld 8y agoIt's a list of 5 books, not a complete curriculum.
- raister 8y agoBooks: 1 - Code: The Hidden Language of Computer Hardware and Software by Charles Petzold 2 - Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin 3 - Code Complete: A Practical Handbook of Software Construction by Steve McConnell 4 - Algorithms by Robert Sedgewick & Kevin Wayne 5 - Types and Programming Languages by Benjamin C. Pierce Best to learn? Highly unlikely. Interesting? Didn't capture my attention right away. Good practices? More or less. Advances the craft? Let's say yes.
- Myrmornis 8y ago> The first is Code: The Hidden Language of Computer Hardware and Software by Charles Petzold > It’s easy to read, you can lie down on the couch and enjoy it No, it isn’t. It’s an awesome book. But it presents diagram after diagram of CPU internals and it would require a huge amount of stamina to get through them. You cannot just turn the pages; the entire point of the book is understanding how these components work in detail. It might be a good book to keep in a nuclear bunker to help rebuild civilization though.
- deleted 8y ago[deleted]
- ronaldl93 8y agoStackoverflow :)
- joebergeron 8y agoHuh, this is not what I expected. Ana Bell is my undergraduate advisor at MIT. I do not think that these choices are particularly the best for someone with no programming or computer science experience whatsoever, as others have said. What strikes me as particularly odd is that I believe she teaches 6.0001, which is a relatively new "very much a complete intro" half-semester course for programming, taught in Python. I suppose I would have expected more truly beginner-friendly material in her recommendations.
- kup0 8y agoTo be fair, on HN the title is "best books to learn X" but the actual article states "best books on X" which is a subtle but significant difference in wording. I don't think that the list was intended to be a starting place for learning computer science and programming.
- dragonwriter 8y agoShe also explains that most of the basics of making code work aren't best learned from books, and “What you can get out of programming books is the thought process behind the ideas. Language takes a back seat to the concepts presented, in the sense that ideas in a book should be universal to any programming language.” This seems to be ignored in much of the negative commentary, which criticize her for not recommending books for the role she expressly stated books are not needed for (without actually engaging with her statement) and object that she is only recommending books that do what she says books are most needed for in the context of CS/programming.
- codetrotter 8y agoSo first of all let me preface my own list of books with the following: These book recommendations are for some books that are really really good IMO but this list of books alone is far from all that you need. You need practice. Lots and lots of practice. You need interesting problems to work on that are sufficiently small in scope that they don't each take too much time, but which still end up teaching you something. You need to know when to skip a problem if you're banging your head and getting nowhere, and you need to know when to persist. So the following should not be taken as a list that will "teach you CS and/or programming", but rather a list of books to complement learning. Also you need maths. Start with calculus. However, maths is difficult to learn on your own. I am sure some people are able to do it on their own but I think most would struggle to do so. At the very least follow something like https://www.khanacademy.org/math/calculus-home https://www.khanacademy.org/math/calculus-home. Personally I learned the maths I know at university but I've heard that Khan Academy is pretty high quality stuff. So, like, this list is more of a "books that you should check out while/after you've studied CS and/or programming at a university". 1. Dive into Python 3. Mark Pilgrim. 2009. Apress. http://www.diveintopython3.net/ http://www.diveintopython3.net/. Python 3 is a great language. It's easy to get started for beginners and yet it's so powerful that if you really learn it you will find yourself using it probably for a lot of very advanced stuff for many many years to come. 2. Inside Network Perimeter Security (2nd Edition). Northcutt, Zeltser, Winter and Ritchey. 2005. Sams. It's not going to make you a networking security expert or anything but I found it to be a good intro. 3. Structure and Interpretation of Computer Programs. Abelson, Sussman and Sussman. 1984. MIT Press. The classic. If you don't know about it already have a look at what people are saying; https://hn.algolia.com/?query=sicp&sort=byPopularity&prefix&page=0&dateRange=all&type=comment https://hn.algolia.com/?query=sicp&sort=byPopularity&prefix&.... Great book, and one that I will definitely be reading again in the future. 4. Understanding Computation: From Simple Machines to Impossible Programs. Tom Stuart. 2013. O'Reilly. http://computationbook.com/ http://computationbook.com/. A fun and gentle book covering a range of computer science topics. He's using Ruby which personally I do not use but it's close enough in syntax to Python that I almost didn't even think about it while reading. (No disrespect against Ruby, it's just I personally don't use it.) 5. WebGL: Up and Running. Tony Parsi. 2012. O'Reilly. A short book which manages to be concise without getting too dense. It gives a good intro to WebGL using Threes.js and contains a lot of small but interesting examples complete with code. WebGL has evolved quite a bit since the book was written but I think it still holds as an intro both to WebGL and to computer graphics in general. I don't know if I would recommend Threes.js specifically (nor do I have anything against it -- I just haven't ended up using that library myself) but the framework/libraries used is second to the cause of teaching anyway and I think it makes sense that they used it to abstract away some of the boilerplate stuff. 6. The Design of Design: Essays from a Computer Scientist. Frederick P. Jr. Brooks. 2010. Addison-Wesley Professional. I liked this one a lot. So much that I had to include it even though we've already mentioned five books. This one is about software architecture. Additionally it also talks a bit about house architecture which might seem a bit odd at first but the book is well written and the stuff about houses ends up adding to the reading experience quite a lot IMO. You may have heard about another book of the same author; The Mythical Man-Month. 7. The Design and Implementation of the FreeBSD Operating System (2nd Edition). McKusick, Neville-Neil and Watson. 2014. Addison-Wesley Professional. Well we've already broken the limit of five books so let's add another one as well why not. This one is quite heavy reading material IMO. I started reading it years ago but didn't finish it. I've read about 600 of the almost 1000 pages. I liked the parts that I've read so far though and I am sure I will finish this book at some point. It's very interesting to learn about the lower level details of how an operating system is built and doubly so when the book is about an actual production quality OS that is actually in use. Triply so because FreeBSD is my favorite OS ;) There are so many more books I'd like to mention as well but let's keep the list somewhat short in the spirit of the OP link. Also, install FreeBSD or a Linux distro and use it as your main OS. Lastly I'd like to add that you don't necessarily need to read absolutely all of these books, and that you don't need to read them cover to cover. If you've never programmed, start with Dive into Python 3. If you have some experience, just skim through it and see if there is anything of interest. Also like I said, books are not enough. You need to do exercises and also I recommend watching some talks from PyCon, DefCon, Game Developers Conference, etc.
- diego_moita 8y agoNo, not Code Complete. It is an obsolete book, made with sloppy research, that leads to shallow or incorrect conclusions (10x more productive programmers, code of uncertainty, etc). Pragmatic Programmer is a much better book.
- Jimpulse 8y agoI'm reading Code Complete right now, what other are your other gripes about the text?
- th3byrdm4n 8y agoShe's a lecturer, Code Complete fits that mold and is an important building block. I've read it once 8 years ago and never felt a need to go back. Pragmatic programmer on the other hand is the productive programmer's book for professionals that need to remember that perfection is nice, but production pays. Pragmatic Programmer is my annual pallet cleanser any time i see my own production tapering off due to seeking perfection / getting caught up in theory.
- gowld 8y agoWhat's the point of teaching wrong information first, instead of teaching correct information first?
- th3byrdm4n 8y agoSolid list for any CS theory-thirsty minds :) My mentoring CS professor's recommendations included these 5 books as well as the following: * Pragmatic Programmer * Gödel, Escher, Bach. * Programmer Pearls He also had a great deal of Computer Vision expertise/recommendations (his specialization / side job was as doing R&D for RED Cameras). Great professor, even better guy.
- rdiddly 8y agoQ: The word “algorithm” seems to have taken on a huge significance in the last few years, in the media discourse about people’s fears of black boxes and manipulation.... A: That’s a great point. Algorithms sound like something mysterious, but they’re not. They’re recipes, with a series of steps to go from an input to an output. It’s very simple, and there is nothing mysterious or malicious about that. True, assuming the algorithm is open-source. An algorithm you don't have access to is inscrutable, and is every bit as mysterious and caution-worthy as "people's fears of black boxes and manipulation" would rightly indicate.
- JustSomeNobody 8y agoI read that to mean the general concept of an algorithm, not the reification of a particular (albeit closed source) algorithm.
- rb808 8y agoCode Complete is an interesting one to me. I loved it back when doing C++. One of the things that initially bugged me with lots of functional programming was that it broke many of the Code Complete rules like having one operation per line. Does this mean that Code Complete is not relevant for functional code or maybe there is a new edition required I"m not sure.
- gowld 8y agoFunctional programming mostly eliminates "operations" so there's no need to worry.
- augbog 8y agoReading the comments, it sounds like the books aren't ideal. I've done my fair share of programming and have taken beginner CS classes but I'm by no means senior. Any recommendations on books? I didn't have a formal CS curriculum but I did learn up to Data Structures i.e. Tries and the Graphs like Dijkstra's but I feel I'm not very strong when it comes to CS fundamentals. I've heard a lot of people recommend Introduction to Algorithms by Thomas H. Cormen. Basically if there are any good books related to algorithms and programming that might help me with technical interviews, would love recommendations. I have CtCI already. I have heard good things about The Algorithm Design Manual by Steven S Skiena. Thanks HN!
- harry8 8y agoThere is no way known that the tone of these comments would be so negative if the name at the top of the list was, say, John Guttag rather than Ana Bell. Top comment "Her recommendations are poor." Really? I call bullshit on that. I say it's a fine list put together by someone who teaches the most prominent course on introductory programming with the reasoning behind each of the choices. My list would be different. So would yours. That's the point. (Top comment calling "poor" couldn't come up with 5 books!) But hey, it's a woman so out come the idiots being wildly critical in ways they would not be other than they seem to be unaware of how confronted they are by a, gasp, woman. Wooo... "No I'm smarter, no really, really I am, let me prooooove it." FFS Bro, deep breath.
- frontfor 8y agoPeople have raised valid points about their disagreements with the recommendations -- whether you agree with their points or not. You're being overly sensitive and attributing malice prematurely and calling other commentators "idiots". You couldn't even come up with specific reasons why you disagree with other comments besides "everyone's list would be different" and that only brogrammers would criticise a woman. HN is generally a hypercritical place. I don't know how this is any different from the tone elsewhere where the authors/startup founders have been a man.
- harry8 8y agoI'm not particularly sensitive to it, it has to be fairly pronounced before I'd even notice. This is. It's one thing to say, I'd do it different. I'd have this book, or that book, or my list would have more this focus or that focus. It's a whole different beast to claim this list is "poor." And it is stupid to do so without countering with a list of exactly 5 books. Yes stupid. I have read all 5 books. All 5 are excellent books. All 5 are very highly regarded in the field of programming and computer science. The descriptions that are attached to the list in TFA are accurate and useful to anyone reading the list. If there's a book on that list you haven't read, I'd say read it. This list simply isn't in the same postcode as "poor" and the descriptions of it as poor can't back it up in a meaningful way. Maybe there's another reason why the general mood of this thread is hypercritical? Smells a bit though, don't it? Do you really think if Guttag submitted that list the tone here would be the same or would the whole "this book is better" comments be rather more respectful of the original list and author? I've stated my opinion and why. You may of course, disagree. Here's mine, Petzold "Code", Kernighan and Pike's "Practise of Programming", "The Pragmatic Programmer", Abelson and Sussman "Structure and Interpretation of Computer Programs" (with video lectures on youtube), Richard Stevens "Unix Network Programming" or maybe "Advanced Programming in the Unix Environment" - Which betray my OS accent. I'm not sure it's better than Ana Bell's. You can decide for yourself on that point.