6 Replies - 818 Views - Last Post: 29 August 2012 - 08:30 PM
Replies To: Thinking
Posted 27 August 2012 - 08:59 AM
None, because no book will do the work. You learn to think like a programmer by writing programs.
All, because each of them has some piece of the truth that you're after, and working through the material in any one of them will get you closer.
Depending on what you want, there are some classics to look for. Knuth's TAOCP is difficult, but very complete. If you can work your way through the existing volumes, you'll know more than you do today. Ableson and Sussman's SICP is quite effective, especially if you work through the MIT course. The Nature of Computation is a more recent textbook that addresses the issues of computation without reference to specific languages, it's quite good.
However, there are far too many books - listing them would be inane. Find a topic that you want to know more about, get hold of a likely-looking book, and read through it. Apply the material you find there, figure out what questions that material has created for you, and pursue those questions. Repeat for the rest of your life. Die smart and happy.
Posted 27 August 2012 - 10:06 PM
A must read.
On the subject of books, don't put too much stock into just books (this coming from the man who has a mini-library at home...) Unless you go out and do things you won't ever get it. There's a large scale difference between a test monkey and someone who can actually perform in the real world. Sure, shock someone enough and force them to do something repeatedly and they'll remember it for a while, but it never does much good unless they find it themselves.
Consequentially this is the same issue I have with students fresh out the doors. They don't think for themselves because everything they know how to do is conditioned and regulated instead of using muse and inspiration to help them derive their own solutions.
The same can be said of any field.
A bad teacher is one that would force you to work only textbook problems on repeat with a dry explanation and some notes or a powerpoint. A good teacher won't tell you the entire puzzle, they'll give you just enough pieces and set you on your way while supporting you. There's a large scale difference between coddling and assisting, be sure not to cross that line as a teacher.
Now, a bad student is one who relies on the teacher, who believes that everything the teacher says is law. A good student takes it with a grain of salt, goes out and experiments beyond homework, and seeks to learn more instead of just accepting and settling.
You can always tell the students who don't want anything more than money and a good desk job, they do amazing on tests and can court a teacher any day of the week. Personally, I'm more interested in that crazy kid in the back hacking together a server or trying some open source projects.
Posted 28 August 2012 - 12:08 AM
Posted 29 August 2012 - 05:18 PM
An algorithms book will help you think like a programmer. You can also just constantly work on projects. It comes down to experience really. I would say the key concept that any decent programmer is concerned with is efficiency.
Posted 29 August 2012 - 08:30 PM
That's true, but you might not be thinking it through all the way. Remember that developer time and development time are both limited resources, and often more sharply limited than CPU time or heap space. Efficiency of development - knowing when to stop optimizing and knowing how to write code that doesn't waste maintainers' time - is at least as important as efficiency of execution, and generally much more so.
This is not to say that studying algorithms isn't important - it is, and it's also fun - but shaving cycles for the sake of shaving cycles is generally not a road to efficency in the real world.