Ask HN: I'm looking for a good book on the fundamentals of CS
91–100 of 190 posts
Re: Ask HN: I'm looking for a good book on the fundamentals of CS
#921. Programming
2. Computer Science
3. Software engineering
Programming is, well, the act of writing code both in general and in a particular language. For this, find one or two books or courses on the languages you're using. Work through them, type up most, if not all, their sample programs yourself. Don't just copy/paste, don't download a copy of their source code. Typing it in helps a lot to internalize the information. Then create variations. I'm learning Rust, as an example, and have been writing up the programs in The Rust Programming Language, then I change their structure, make them generic, or modify other elements to see if I actually understand what's happening.
Computer science is more fundamental. For that, many of the algorithms & data structures books mentioned are great to study. It's good practice to implement both (algorithms & data structures) in whatever languages you're using, even if they already have them built in. Then switch out your implementation for the language standard version (if present) so you learn both the fundamentals (how they're built and used) and the standard (how they're used in your language). Pay attention to things like algorithm analysis, it gets cast aside here sometimes but it really is helpful especially in something like rendering. If you understand the relative costs of different choices you will get much more efficient programs, but also study how your actual system behaves. Sometimes an on-paper faster algorithm is slower in practice due to how the CPU and RAM actually work (like scanning a vector for something may be faster in practice than a faster-on-paper hash table or map data structure). You can go deeper and study theory of computation and other areas, but that's not going to be necessary yet.
Software engineering is, reductionist definition, about three things: working with others, working with your future self, organizing programs and systems. Two books I like on the non-technical side: The Mythical Man-Month by Fred Brooks and The Psychology of Computer Programming by Gerald Weinberg. Some parts of both are dated, but they're still relevant to today and thinking about how teams work and systems develop over time. On the more technical side: Learn how to test in your languages, and read Refactoring by Martin Fowler. Learn to use version control, even for toy projects. Create git repos and get in the habit of committing early and often (like with working with any file on the computer you should save early and often so you don't get burned by a crashed editor, committing early and often saves you from when you make a major change and realize you want to undo it).
---------------------
You can study programming without studying CS proper, but at some point you are likely to start running into decision points that will be hard for you without knowing the tradeoffs that CS (even just the introductory portions) teaches. Same thing with software engineering, it's not technically necessary for programming, but once you start working at scale (large projects or more than just a handful of people) it pays to understand that area.
Re: Ask HN: I'm looking for a good book on the fundamentals of CS
#93Have you tried some of the old "Graphics Gems" series books yet? [1], [2], [3] They are not CS fundamentals but will help you out with the necessary concepts, math and algorithms for graphics programming and ray-tracing. As others have mentioned any books on Data Structures & Algorithms are a must. [4], [5], [6] However in my opinion, trying to understand CS fundamentals without undergoing some sort of formal educati…
OMSCS Website: https://omscs.gatech.edu/home
Re: Ask HN: I'm looking for a good book on the fundamentals of CS
#94I'm currently going through TAOCP [1]. So far, seems pretty good (although I found one mistake in an exercise). Also, I can never recommend Computer Systems: A Programmer's Perspective [1] enough. (Also features a rare mistakes in an exercise or two, but that's detail.) And for network protocols, Comer's Internetworking with TCP/IP [3] was just great (you only need volume 1). I've read Stevens' books on socket and IP…
If you mail Don Knuth about the error you found in TAOCP, he'll send you a check for $1 -- he used to do that, anyway. People tend not to cash the cheque, but keep it.
Re: Ask HN: I'm looking for a good book on the fundamentals of CS
#95I had a good relantionship with Segdewick's books, before being turned off by Cormen a few times. They are less math focused, and overall have a beginner friendliness to them. They won't take you by the hand an explain things like you are 5, but nevertheless they are more easy to digest. Also as a non-popular opinion in this current age, I recommend you to learn how to implement your algorithms in C, rather than an e…
Completing those courses was probably the most useful thing I did when prepping for interviews as part of a career change 6 years ago.
Re: Ask HN: I'm looking for a good book on the fundamentals of CS
#96I had a good relantionship with Segdewick's books, before being turned off by Cormen a few times. They are less math focused, and overall have a beginner friendliness to them. They won't take you by the hand an explain things like you are 5, but nevertheless they are more easy to digest. Also as a non-popular opinion in this current age, I recommend you to learn how to implement your algorithms in C, rather than an e…
Re: Ask HN: I'm looking for a good book on the fundamentals of CS
#97A lot of recommendations here, so I would like to ask for some (hope that's allowed). - Operating Systems. I had a course on OS (I'm a student), but I felt it was kind of lacking, and would like to explore more. - Compilers? Seems very interesting Also I've started with a bit of haskell to learn functional programming, would love some pointers from the more experienced people here :D (Also networking?? So much to lea…
- "Compilers: Principles, Techniques, and Tools" (v popular, generally referred to as the 'dragon book' on account of its cover): http://ce.sharif.edu/courses/94-95/1/ce414-2/resources/root/...
- "Parsing Techniques": https://staff.polito.it/silvano.rivoira/LingTrad/ParsingTech...
- Not quite about compilers, but the website 'Crafting Interpreters' touches on the pre-compilation parts of a compiler (scanning, lexing, parsing, optimisation): https://www.craftinginterpreters.com/
- If you're compiling a typed language, this blog post is a good intro to type inference algorithms, esp with a view to implementing a Hindley-Milner (bidirectional) type system: https://eli.thegreenplace.net/2018/type-inference/
I highly, highly recommend at least trying to write a compiler or interpreter. It's a fantastic way to understand more about PL theory, and improve your proficiency with data structures and algorithms.
As for functional programming, it's basically the art of removing the word 'self' from your programs.
Re: Ask HN: I'm looking for a good book on the fundamentals of CS
#98This book [0] uses Java. The content of the edition using Python is the same IIRC. The first one used Swift and is a tad older. [0] https://www.manning.com/books/classic-computer-science-probl...
Re: Ask HN: I'm looking for a good book on the fundamentals of CS
#99I had a good relantionship with Segdewick's books, before being turned off by Cormen a few times. They are less math focused, and overall have a beginner friendliness to them. They won't take you by the hand an explain things like you are 5, but nevertheless they are more easy to digest. Also as a non-popular opinion in this current age, I recommend you to learn how to implement your algorithms in C, rather than an e…
Re: Ask HN: I'm looking for a good book on the fundamentals of CS
#100I'm currently going through TAOCP [1]. So far, seems pretty good (although I found one mistake in an exercise). Also, I can never recommend Computer Systems: A Programmer's Perspective [1] enough. (Also features a rare mistakes in an exercise or two, but that's detail.) And for network protocols, Comer's Internetworking with TCP/IP [3] was just great (you only need volume 1). I've read Stevens' books on socket and IP…
If you mail Don Knuth about the error you found in TAOCP, he'll send you a check for $1 -- he used to do that, anyway. People tend not to cash the cheque, but keep it.
This line is classic Knuth:
only 9 of the first 275 checks that I've sent out since the beginning of 2006 have actually been cashed. The others have apparently been cached.
0: https://www-cs-faculty.stanford.edu/~knuth/news08.html