As far as I can tell, most programming courses in an academic environment focus heavily on teaching all about basic language specifics, data-structures and algorithms. As long as the student has never heard of these concepts, this is good stuff! But this pattern seems to repeat course after course. Students are required to keep reinventing the wheel, solving the same algorithmic problems in different languages / programming environments until they can implement multiple sorting algorithms in >5 different languages…
In the real world, all these standard problems have been already solved for 99% of existing languages. A programmer in a real work environment should not reinvent any wheel unless there is a good reason to do so. But what do they actually do? Here is a (non-exhaustive) list of my experiences (in no particular order):
1) Communication
Most Projects these days are pretty sizable and not to be done by one person alone but rather in a team of people with different skills and responsibilities.
Therefore, programmers have to be able to parse the input of designers, project managers, clients etc. and explain technical stuff to (mostly) nontechnical people.
2) Reading, Reading, Reading
It is not common to write applications from scratch or to write code that doesn’t interface with existing software. A lot of time is spent reading documentation. If your colleges don’t feel like documenting their changes, you will probably have to read a lot of their code as well. Then there is also your own code which you might have to read from time to time, because you don’t understand what it was supposed to do…
3) Solving actual business problems
In my experience, solving algorithmic problems is only the tip of the iceberg when it comes to required skills for a working programmer. Most problems I have encountered are (in isolation) pretty simple from an algorithmic/programmatic standpoint. It is rather the complexity of the whole application that is a brainteaser. My opinion is that managing complexity (and understanding the programming paradigms that where introduced mostly because of it) is definitely not something you learn by writing 50 liner Java Classes…
