By Kenneth Bernholm
Be careful about assuming you that know what a programmer does. The field of programming is historically awash in myths and prejudices, and programmers are often confused with software developers and software engineers (meet the software team). You also might be under the impression that programming is an academic endeavour (it's not) that requires extraordinary maths skills (it doesn't) or that programming puts you in a darkned backroom with pizza and soda and techno music. This is very far from the truth unless that's your thing or you end up at the wrong company.
Don't feel bad if you find yourself having harboured some of these misconceptions. They're entirely reasonable inasmuch as they used to be partly true. Back in the early days of computing, programming was very nearly the exclusive domain of academics with more math skills than social competences. Later, when computers expanded their presence from universities into businesses and the military, programmers were the software developers and software engineers. Meanwhile, cheap micro computers started appearing among hobbyists and teenagers from whom the unhealthy backroom image originates.
If you want to be a programmer, you do not need a degree in computer science. The field of computer science is much broader than mere programming, and it's not uncommon to find highly regarded computer scientists with mediocre programming skills. Furthermore, you do not need architectural or managerial talents or ambitions. That's the realm of software developers and software engineers. In addition to programming, they are tasked with case stories, user interviews, architecture, deployments, management and the bigger picture. You, as a programmer, write code.
A programmer needs a vocational education. It's not enough to be rather clever about coding because there are a lot of indespensible knowledge such as Best Practices and Software Patterns that are just too expensive (in more ways than one) to pick up as you go. Once, you could get by as an autodidact, but if you want to be employed as a professional programmer in this day and age, you need the insigths that only a good teacher can offer you. Of course, exceptions occur, but it's not clever to base your career and your life on the hopes of being a successful exception.
Just as important as formal training is an unbridled passion for programming. While you'll learn about important concepts and pitfalls in the class room, you only obtain actual technical acumen and experience from sitting in front of the screen and writing code. Lot's of it. Not just at work but also in your spare time, in weekends, and in holidays. If you cannot imagine yourself grappling with a programming problem at Christmas morning, you need to reconsider your programming plans.
A programmer needs a handful of talents so badly that you might be tempted to call them personality traits:
The difference between the programmer and the good programmer is, that the latter knows how to write maintainable, scaleable, secure, and testable code on schedule whereas the former just can make things sort-of work. This is why:
Depending on the circumstances, more quality parameters such as reusability and portability may apply. Almost always will your code be required to conform to your teams coding style and pass scrutinizing peer reviews. Beware of poorly written style guides, though. They are common and can be the source of heated debates.
DRY, POLP, YAGNI, SPOT, and KISS. These are just a few of the fundamental terms that must make absolute sense to you. Look them up and make sure that they fit perfectly into your personal universe. Then, to become a programmer or a better programmer, read the book The Pragmatic Programmer by David Thomas og Andrew Hunt. It's short and accessible and presents a lot of the essential Best Practices of programmming. You can follow up with The Pyschology of Computer Programming by Gerald M. Weinberg if you feel like getting a better insight into the human side of the field. And for everybody's sake, learn proper object oriented programming.
But first, take this modified comic by Hannah Hillam as a litmus test as to whether a life as a programmer is for you: