@Olsen @Thor,
Since it's too late to go back to school, could you please give a list of good books to go from a "coder" to a "software engineer". Being about C, C++, Algorithms, Design patterns whatever else suit you.
Thanks
Kamelito
Well, you asked for it
The difference between coder and software engineer, as I'd like to frame it for the purpose of pointing you to the books which completely changed how I work, is that as a software engineer you are going to find yourself doing more challenging and complex work, and if you persist in practicing what you learned as a coder, you will start hating your work. Something has to change between "coder" and "software engineer", and it's *you*.
If you are writing software, you will make mistakes and will need to correct them. This inevitably means returning to old code, rereading, understanding and reworking it. You will be surprised by how long-lived even tiny throw-away snippets will be. For this reason you need to write code in such a way that returning to modify it will not be painful. In so many words, the way you "construct" your programs matters.
There are three books which profoundly changed how I work. These are "Debugging the development process", "Writing solid code" and "Code complete". The first two were written by Steve Maguire and are probably out of print (but can be bought used rather cheaply). The last was written by Steve McConnell and is still in print. If you are going to read just one of these books, make it "Code complete". The drawback of "Code complete" is that it's rather long, though, while the other two books are shorter. However, I found that reading "Code complete" is exceptionally rewarding. Every chapter you read will change how you work and build software, if you are willing to question the way how you work today.
As for books on algorithms, I wish I could point to a set that was helpful to me, but the fact is that most algorithm collections are either very mathematically inclined, or used as teaching tools in computer science education. This means that if you need a solution for a practical problem you'll either have to wade through pages and pages with greek lettering and proofs that, yes, the algorithm actually does work (never mind how it works), or you'll get useful information on implementing algorithms from which one crucial piece is missing because the book uses that missing piece in a course exercise (you now know how to correctly construct a B-tree, but you don't know how to remove nodes from it, and you'll probably make big honking mistakes building an implementation of that, and it's three in the morning and your project is due by noon tomorrow, and you just ran out of coffee, and you are wearing sunglasses because your eyes hurt, and what could possibly go wrong now).
So... the next best thing I can recommend is a book that explains the basic algorithms which you are going to find are used pretty much everywhere. There are highly specialized algorithms, such as for cryptography, graphs or numerics, but you'll probably meet sorting and searching in most of the work you do. These basics are decently explained in books such as "Algorithms" by Robert Sedgewick. This book is still affordably priced, and the older used versions aren't so bad either, and cheaper.
The big problem with algorithms in general is that you need to know where to look when you are working on a problem which requires a better optimized solution than the basic stuff you knocked together. Not everything can be tackled as an application of sorting or searching algorithms, or whatever tricks you learned so far. But before you can look for a solution, you need to know where to look, except you don't even know where to start looking. Sound familiar? I found help in a book called "The algorithm design manual" by Steven Skiena. It contains a big catalog of algorithmic problem categories. Flip through the pages, read the introductions, consider if they generally match your problem, and if they do, look up the material listed on the page. There is an online version to complement the printed book at
http://www3.cs.stonybrook.edu/~algorith/, don't miss it.