8 ms·
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?
- downerending 7y agoThe Mythical Man Month is arguably the most important CS (or software development if you like) book ever written, and it's an easy read. Still relevant.
- mimixco 7y agoAbout Face[0] by Alan Cooper about UI design. Refactoring[1] by Martin Fowler. On Lisp[2] by PG. [0]https://www.amazon.com/About-Face-Essentials-Interaction-Design-ebook/dp/B00MFPZ9UY/ref=sr_1_3?dchild=1&keywords=about+face&qid=1586271808&sr=8-3 https://www.amazon.com/About-Face-Essentials-Interaction-Des... [1]https://www.amazon.com/Refactoring-Improving-Existing-Addison-Wesley-Signature-ebook/dp/B07LCM8RG2/ref=sr_1_1?dchild=1&keywords=refactoring&qid=1586271869&sr=8-1 https://www.amazon.com/Refactoring-Improving-Existing-Addiso... [2]http://www.paulgraham.com/onlisp.html http://www.paulgraham.com/onlisp.html
- JGM_io 7y agoNew here: I am a startup business coach at an European, no strings attached, accelerator. This makes my advise less tech oriented. 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.
- ammanley 7y agoWould you be willing to expand on this? I have observed in my work that code is less and less about "technical innovation" and more about figuring out _which_ of the myriad number of tools, libraries, and abstractions are best suited to solving a particular (usually business process) problem. Seems like you'd know a thing or two about this. (yes, this puts me in the not-vaunted-line-of-business category of programmers - welp ¯\_(ツ)_/¯)
- JGM_io 7y agoI wouldn't call myself an expert but tech facilitates business (value for society captured by an organisation) and I see many product or tech oriented founders losing sight the life blood of a company: money and time where time > money. 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
- ThisIsTheWay 7y agoI recommend "Understanding the Digital World" [0] to everyone, but especially those who work in the tech field. Understanding how the systems work is absolutely fundamental, but many people do not spend the time to build that foundation. Highly recommended, it's a great book. [0] https://www.amazon.com/Understanding-Digital-World-Computers-Internet/dp/069117654X https://www.amazon.com/Understanding-Digital-World-Computers...
- username3 7y agoRead Cracking the Coding Interview. That’s all that the companies test of your degree.
- BossingAround 7y agoDoes that mean it's worth learning..? I'd also challenge that CTCI is what companies test... It's what FAANG tests.
- wdroz 7y agoThe first chapters cover useful tips that are not focused on FAANG. Like making a matrix/table with each projects you did and writing down the answers of classic questions (Challenges, Mistakes/ Failures, Enjoyed, Leadership, Conflicts and What You'd Do Differently).
- slipwalker 7y agoi would recommend two ( of many ) springer book that are free to download, and i find that complement each other nicely: - Concise Guide to Software Engineering: https://link.springer.com/book/10.1007%2F978-3-319-57750-0 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 https://link.springer.com/book/10.1007%2F978-3-319-44561-8
- AnimalMuppet 7y ago"Concise Guide to Software Engineering" and "Guide to Discrete Mathematics" respectively (for those who hate bare links with no info about what they refer to).
- non-entity 7y agohow much of a math background do you have to understand discrete math? I was going it try to self teach what was effectively engineering math (most of calc, linear algebra, differential equations), but found my foundational algebra and precalc were too full of holes and have had motivational issues. Discrete math seems a bit less, mathy for lack of a better term, so I'm wondering if I'd have better luck with that.
- potta_coffee 7y agoI'm also self taught, some books I feel have been really helpful to me: Elements of Computing Systems Writing and Interpreter in Go https://www.amazon.com/Elements-Computing-Systems-Building-Principles/dp/0262640686/ref=ed_oe_p https://www.amazon.com/Elements-Computing-Systems-Building-P... https://www.amazon.com/s?k=writing+an+interpreter+in+go&i=stripbooks&ref=nb_sb_noss_2 https://www.amazon.com/s?k=writing+an+interpreter+in+go&i=st...
- seanmrafferty 7y agoI've seen a of lot enigeers that don't understand fundamentals and it causes a lot of problems in real-world software. These are my goto recommendations: Code Complete: A Practical Handbook of Software Construction, Second Edition Clean Code: A Handbook of Agile Software Craftsmanship
- urxvtcd 7y agoIt's weird that you mention a book like Clean Code to a person worried about potential gaps in their CS education. I mean, they don't teach it at universities, right? Chances are, if he's self taught he knows Clean Code better than average graduate.
- sandipagr 7y agoExact two books I recommend people (only in reverse order).
- Lesabotsy 7y agoMy take Introduction to Computing Systems: From Bits & Gates to C/C++ & Beyond (https://www.amazon.com/Introduction-Computing-Systems-Gates-Beyond/dp/1260150534 https://www.amazon.com/Introduction-Computing-Systems-Gates-...)
- spinchange 7y agoI love the "motivated ground-up" approach. Always mystified by the economics of educational/textbook publishing, though. I suppose for required coursework it's not unreasonable and it really looks like an exhaustive tome and educational resource. Just kind of prohibitively high $ for non-formal student. (New price is like $135, used price inexplicably over $1000)
- keiferski 7y agoSICP, Gödel Escher Bach, some theoretical works on computer science are a good start. https://mitpress.mit.edu/sites/default/files/sicp/index.html https://mitpress.mit.edu/sites/default/files/sicp/index.html https://www.physixfan.com/wp-content/files/GEBen.pdf https://www.physixfan.com/wp-content/files/GEBen.pdf https://plato.stanford.edu/entries/computer-science/ https://plato.stanford.edu/entries/computer-science/ https://en.wikipedia.org/wiki/Computer_science#Further_reading https://en.wikipedia.org/wiki/Computer_science#Further_readi... Is there some reason why I am being downvoted? These are all highly-regarded books.
- perceptronas 7y agoYour recommendations are excellent. Thanks
- acchow 7y agoAfter you learn a little bit about compilers (and know something about software security), the paper "Reflections on Trusting Trust" blew my mind. I consider this a must read. https://www.cs.cmu.edu/~rdriley/487/papers/Thompson_1984_ReflectionsonTrustingTrust.pdf https://www.cs.cmu.edu/~rdriley/487/papers/Thompson_1984_Ref...
- zn44 7y agoWhat every programmer should know about memory https://people.freebsd.org/~lstewart/articles/cpumemory.pdf https://people.freebsd.org/~lstewart/articles/cpumemory.pdf
- travmatt 7y agoI’d pick a book from [0], focusing on what you’re weak on or interested in. [0]www.teachyourselfcs.com
- thecleaner 7y agoMaybe try the dinosaur book - Operating System Fundamentals. Even if you dont have a degree you know that a computer has RAM, a disk, a processor. This book ties everything together. Much more satisfying to put in the effort to do the assignments.
- DeathArrow 7y agoThose books cover a part of topics I've studied at the University: 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/ https://cstheory.stackexchange.com/ or on some universities websites.
- smt88 7y agoI took OP's question to mean, "What parts of your CS degree are actually useful in practice?" That may be wrong. Perhaps OP wanted to know what is interesting, or they wanted an abbreviated CS curriculum. 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.)
- varrock 7y agoThe way you interpreted my question is correct.
- mavelikara 7y agoIn which case, the grandparent’s comment is likely not useful advice.
- t-writescode 7y agoUnless they’re writing Ruby, where unsorted arrays are faster than sets for everything, it is still very good to understand algorithms and apply them.
- mrosett 7y agoOne note: Many of the books being listed are quite challenging to read cover to cover. For instance, "Introduction to Algorithms" (which is generally referred to as "CLRS" as an abbreviated form of the last names of the four authors) is the textbook for Georgia Tech's graduate introduction to algorithms course, and we probably only covered half of the material in it. Even just reading a quarter of that book (or of many of the others suggested here) would still be tremendously valuable.
- heelix 7y agoBoth book 1 and 2 are solid interview prep material. They were very helpful jumping into graph database development too. I was not expecting them to be that 'deep end of the pool' when someone recommended a set.
- binarynate 7y agoThese three books helped me tremendously: 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.
- TbobbyZ 7y agoA lot of books mentioned in the comments are great. But reading them just to read them isn't going to bring that much value. I get the most value out of programming books when I've been coding and I see place in my project and I think, "there has got to be a better way to do that." I then will search for specific chapters in books that help me improve what I think can be done better. To me it's better to use them as a reference while you are building something than just reading them cover to cover.
- afarrell 7y agoThe Therac-25 paper. http://web.mit.edu/6.033/2017/wwwdocs/assignments/rec-therac25.html 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.
- Jugurtha 7y agoI believe restricting recommendations to books one has read would shrink and improve this thread.
- p1esk 7y agoIn my experience, getting to the "next level" always requires building something substantial. Just like trying to speak or write in a foreign language is always better than learning about that language. 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.
- rramadass 7y agoFor Practical aspects: Code Complete by Steve Mcconnell. 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.
- shakkhar 7y agoStart with CLRS. It's an excellent intro to the fundamental algorithms and DSs that makes up CS. Absolute must read.
- magnusmagnusson 7y agoI've enjoyed books recommended at "teachyourselfcs".
- stevage 7y agoDepends so much on your goals. Do you want to be an application developer or a computer scientist? Two totally different things.
- justforfunhere 7y agoI would suggest, "Computer Systems: A Programmer's Perspective" by Randal Bryant. It helps you deep dive into the computer systems and covers subjects taught in at least three to four courses in a formal computer science education.
- hackermailman 7y agoBrown's accelerated CS course https://learnaifromscratch.github.io/software.html https://learnaifromscratch.github.io/software.html teaches graph theory, big O, some compilers and all the assignments are things you do in industry like writing a program to test another program.