Hey, I'm curious in your thoughts on what classic programming / software science to read over the summer. I've been thinking on approaching Knuth volume I as the main text, but I'd like to hear your recommendations.
I'm at 3 year of software engineering, but I didn't land internship, so I have a lot of free time...
The Knuth is great, for sure, and I encourage any efforts to build strong basement of fundamental knowledge. Still I would suggest you to change the focus. As a software engineer most of the time you won't implement complex generic algorithms. You will use them from libraries.
These books will help you learn more about other important problems that software engineers face everyday:
- Design patterns: Elements of Reusable Object Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides
interesting. It's not about Software Engineering in general, but will bring you many insights how everything works together and not necessarily is a book where you need to practise things a lot.
Knuth can be a bit of an acquired taste. In my opinion it isn't very useful to read if you don't fully commit to do the exercises. That will take time and a lot of it! I suggest you postpone this one. You have enough to study already.
For context, Knuth is my first generic recommendation for programming books. My advice is to get them all and read a bit here and there depending on your mood. The older editions are going to be more than enough...and honestly, MIX is probably better than MMIX for getting started.
To be clear, I've spent time reading Knuth because I enjoy reading and Knuth is a great book as a book. I only understand a small fraction, but that small fraction grows over the years.
I recommend having all of them because you won't get all the way through Volume One any time soon and there are interesting bits in each of them. Volume 2 is the driest but randomness and numerical methods are intellectually interesting for a few hours every now and then. The mathematics of sorting and searching hasn't changed so an older edition of Volume 3 is going to be fine. 4a covers exponential space and is different in that it doesn't contain code.
- Design patterns: Elements of Reusable Object Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides
- Test Driven Development by Kent Beck
- Code Complete (2) by Steve McConnell