Ask HN: What is a must read for a developer without a computer science degree?
Which book would you say is a gentle, yet highly foundational book for a programmer that would take their self-taught knowledge to the next level? Would it be a book about data structures, algorithms, or even operating systems? If so, which resources specifically?
43 comments
[ 2.7 ms ] story [ 102 ms ] threadRefactoring[1] by Martin Fowler.
On Lisp[2] by PG.
[0]https://www.amazon.com/About-Face-Essentials-Interaction-Des...
[1]https://www.amazon.com/Refactoring-Improving-Existing-Addiso...
[2]http://www.paulgraham.com/onlisp.html
Unless your stack is very deep or highly specialised I would say the following: I don't have a specific book in mind but with code slowly becoming a commodity I would advise content that intersects tech with business or UX. Anything not IP or otherwise USP to your company can be built by reusing other's work.
Also learning the mindset to leverage repo's and API's to the max so effective productivity is realised is super important.
So I don't think it is about a set of information/processes as it is a mindset to set aside the ego that wants beautiful code and be ruthlessly effective
Highly recommended, it's a great book.
[0] https://www.amazon.com/Understanding-Digital-World-Computers...
I'd also challenge that CTCI is what companies test... It's what FAANG tests.
- Concise Guide to Software Engineering: https://link.springer.com/book/10.1007%2F978-3-319-57750-0
- Guide to Discrete Mathematics: https://link.springer.com/book/10.1007%2F978-3-319-44561-8
Elements of Computing Systems
Writing and Interpreter in Go
https://www.amazon.com/Elements-Computing-Systems-Building-P...
https://www.amazon.com/s?k=writing+an+interpreter+in+go&i=st...
Code Complete: A Practical Handbook of Software Construction, Second Edition
Clean Code: A Handbook of Agile Software Craftsmanship
https://mitpress.mit.edu/sites/default/files/sicp/index.html
https://www.physixfan.com/wp-content/files/GEBen.pdf
https://plato.stanford.edu/entries/computer-science/
https://en.wikipedia.org/wiki/Computer_science#Further_readi...
Is there some reason why I am being downvoted? These are all highly-regarded books.
https://www.cs.cmu.edu/~rdriley/487/papers/Thompson_1984_Ref...
[0]www.teachyourselfcs.com
The Art of Computer Programming by Donald Knuth
Introduction to Algorithms by Thomas Cormen
An Introduction to Formal Languages and Automata by Peter Linz
Probability and Statistics by by Morris H. DeGroot
Operating Systems: Internals and Design Principles by William Stallings
Understanding Cryptography by Christof Paar
Database Systems: Fundamentals of Design, Implementations and Management by by Peter Rob
Principles of Concurrent and Distributed Programming: Algorithms and Models by M. Ben-Ari
Introduction to Graph Theory by Richard Trudeau
Advanced Data Structures by Peter Brass
Ones and Zeros: Understanding Boolean Algebra, Digital Circuits, and the Logic of Sets by John Gregg
An Introduction to Algebraic Structures by Joseph Landin
Theory of Computation by S.N. Sivanandam
You can always find more on https://cstheory.stackexchange.com/ or on some universities websites.
While some of these are very useful in practice, a lot of the content covered is abstracted away in the stack in the languages most programmers use (Java, JavaScript, Python, C#, etc.)
It's good to have a higher level of understanding, learning languages, frameworks and libraries is of course necessary but not enough if you want to be one of the best.
My advice is to read on CS topics as much as one can. Are you interested in databases or work with them? A bit of algebra will help explain how they work. Some of the introductory courses on databases I did had some algebra because that was necessary to explain relations, normalization and other topics. You can't do much AI and ML unless you learn some statistics.
As for algorithms, data structures, complexity I find them invaluable in any kind of programming.
1. The Pragmatic Programmer by Andy Hunt and Dave Thomas
2. The Clean Coder by Robert Martin
3. Design Patterns: Elements of Reusable Object-Oriented Software (the "Gang of Four" book)
The first two contain a range of advice pertaining to working as a professional software engineer. The third one, although very dated, is still a great resource for understanding many of the design patterns used in OOP.
http://web.mit.edu/6.033/2017/wwwdocs/assignments/rec-therac...
It presents a case study of the impact of a poorly build interface and the impact it can have on peoples' lives. If you do the work of a software engineer, you bear a responsibility for the systems and interfaces you build and the impact of how humans use them. The paper also introduces you to the important questions to ask about systems and teams in order to bear that responsibility.
It was the first paper in my university's Systems Engineering class for good reason.
If you feel like you want to grow as a programmer, pick a project (or contribute to an existing one), and learn whatever is needed to do it.
For overall understanding of the Computer as a holistic system of abstractions: Structured Computer Organization by Andrew Tanenbaum.
Any book on Algorithms/Data Structures; Robert Sedgewick's books are recommended.
The above should give you a good foundation. You can then move onto in-depth study of each layer/abstraction eg. Languages/OS/Compilers/Networking etc based on your need/job.