3 ms·
"Structure and Interpretation of Computer Programs" (SICP) by Abelson and Sussman is a must read. Some other foundational texts I'd recommend: * "How to Solve
by _pius 14y ago
"Structure and Interpretation of Computer Programs" (SICP) by Abelson and Sussman is a must read.
Some other foundational texts I'd recommend:
* "How to Solve It" is a (the?) classic introduction to mathematical problem solving. http://en.wikipedia.org/wiki/How_to_Solve_It http://en.wikipedia.org/wiki/How_to_Solve_It
* CLRS ("Introduction to Algorithms") is the classic introduction to solving problems through computation: http://en.wikipedia.org/wiki/Introduction_to_Algorithms http://en.wikipedia.org/wiki/Introduction_to_Algorithms
Those texts are useful for "programming in the small." [1] As you get closer to "programming in the large" (basically putting together non-trivial software systems), some good things to look at are:
* The "Gang of Four" book ("Design Patterns: Elements of Reusable Object-Oriented Software") introduced the idea of design patterns to software engineering and provides a useful toolbox and vocabulary for thinking and talking about putting programs together.
* Joshua Bloch's "Effective Java" is an insightful set of heuristics on writing good code. Like with Gang of Four, you can get a lot out of this book by looking past the implementation language and thinking critically about the rationale behind the prescriptions in the book. I'd also recommend Bloch's talk, "How to Design a Good API and Why it Matters" (http://www.infoq.com/presentations/effective-api-design http://www.infoq.com/presentations/effective-api-design).
* A recent talk I found insightful is Rich Hickey's talk, "Simple Made Easy" (http://www.infoq.com/presentations/Simple-Made-Easy http://www.infoq.com/presentations/Simple-Made-Easy). In this talk, Hickey makes a strong argument for simplicity in software and the ramifications for the working programmer. I'd also recommend his talk, "Hammock Driven Development."
*I would highly recommend the "Destroy All Software" screencast series by Gary Bernhardt (https://www.destroyallsoftware.com/screencasts https://www.destroyallsoftware.com/screencasts). These screencasts show an experienced developer working through small programming problems in a test driven style and explaining the reasoning behind his decisions as he goes along.
[1] http://en.wikipedia.org/wiki/Programming_in_the_large_and_programming_in_the_small http://en.wikipedia.org/wiki/Programming_in_the_large_and_pr...
- physloop 14y agoI just ordered "How to Solve It" and "SICP". They seem to be exactly what I'm looking for! The problem with CLRS is that I haven't had a discrete mathematics course yet, so the math involved in the book is way over my head right now. Thank you for providing all those resources. I'll definitely make sure to check into the remaining books and lectures.
- _pius 14y agoGreat, I'm glad I could help! You raise a good point about discrete math, let me add the following to my list above: * MIT's 6.042 ("Mathematics for Computer Science") Lecture Notes start at first principles and go on to cover relevant discrete math topics motivated by common types of computer science problems. http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-spring-2010/readings/ http://ocw.mit.edu/courses/electrical-engineering-and-comput...