A big mistake that I did when I began my internship a long time ago was to think that knowing a programming language, its syntax, and its standard libraries were suffice. How ingenious I was! As soon as start talking to experienced programmers that something else was needed to grasp the "The Art of Computer Programming" (after all those years I cannot help to agree more with Donald Knuth that programming is an art).
A graduation course on Computing is focused in teaching on how to solve problems in effectively and efficiently way. It is going to teach you one or more programming languages in order to illustrate the concepts and only for that reason. In my case Pascal was used to introduce Algorithms, C++ for OOP and Operating System Concepts, SQL for Databases, and Lisp and Prolog for functional and logic programming respectively.
But Programming in way that is readable to others, maintainable, efficiently and less prone to bugs is something that you learn in your daily practice by failing or by listening to more experienced programmers. Here is a list of books that I recommend reading. Most of them are on my pending list, but I hope to mend it soon as I finish my Masters.
Programming Style and Attitude
During graduation I was presented to the Software Engineering text books written by Pressman and Somerville. That make thought that doing good software was a simple task. It was just a matter of having a good, well documented and dogmatic process and everything would be fine. This book showed me the light. The success for a software project depend on the quality and attitude of the developer team. This books teaches about good code style and practices, truths about software development and programmer ethics.
This a mandatory reading for sure!
Clean Code by Robert C Martin
It is on my queue. I've just read until the beginning of the 2nd chapter. But it is clearly a good book about coding style. It comes with tons of code to be read. The author presents why it is wrong and how would it be better rewritten.
Object Oriented Programming
Design Patterns by GoF
If you think OOP is just about inheritance, polymorphism and composition, you are very mistaken. Design Patterns are clever solutions to common problems that appear during design. However, they are more than just recipes or how-to's. Learning the patterns really teaches you to efficiently use the power of OOP.
Refactoring by Martin Fowler
You create some good design. Then you code. It is wonderful. Then you see a bug, and fix it. Then you add one more feature. Then another bug fix. You code start deteriorating, "smelling" Martin Fowler would say. This book is about reverting the game.
Design of Algorithms
Introduction to Algorithms by Cormen et al.
This is the book about algorithms. If you had done any serious CS course you have already heard of it.
By the way, Professor Leiserson's lectures, one of authors of the book are available on the MIT OpenCourseWare
This is the book about algorithms. If you had done any serious CS course you have already heard of it.
By the way, Professor Leiserson's lectures, one of authors of the book are available on the MIT OpenCourseWare
Effective Series
You must be able to solve a problem independently of the programming language. You must also be able to choose the language according to the problem. If you are doing kernel programming you are probably gonna use C. But you are gonna use Python or Java for an user application. Anyway, once you choose the language you ought to know how to use it efficiently