The Programming Profession
If you’re reading this then I assume it is because you are or indeed aspire to being a professional programmer. I wanted in this paper to write about the sort of skills and qualities you have or indeed need to succeed. But before I begin I should confess that I know enough about the subject to know I am right, but not so much to know I may be wrong; a great quote I just wanted to include as a disclaimer, please read on.
Let’s start with the basics, really basics.
You need to like it. No really, anybody who tells you otherwise isn’t a programmer. You don’t need a degree in it, but you need to understand things like base theory, logic, percentages, matrices and geometry. Of course the amount of math in your role will vary enormously depending in the job you have, but it’ll be there.
You need to be good with detail. Coding is and isn’t like math in that respect because there are no abstract numbers, rounding errors, no off-roading here. Although there is almost always more than one way to do something, whatever way you do it; you need to stay on the road. Computers and compilers have a very limited vocabulary for the most part. The management science students at University used to joke about it, they would say you can spot a computer science student a mile off. You can spot them because they’ll be the only one’s able to spot a missing semi-colon at the same distance.
You need a good short term memory. Sure you’re going to find more documentation than you ever wanted on the web, but success in this domain comes with being able to run that code in your head. That means reading the code, understanding it, keeping the values of all the variables in your short term memory and thinking like a computer, ruthlessly without any assumptions or intuition.
Those last three qualities are implicit in the next point since you’ll need them to be able to code. A point on which 99% of courses seem to focus on. And by code I don’t mean one of the markup languages or CSS style sheets. I mean code as in the blocks of text that look like gobbledygook to most people. I mean using a real programming language like Java or Swift.
You need to be able to read and understand other people’s code too. Yes, another point I suggest most courses kinda miss since they explain things in far more detail than you’ll ever get on the job. On the job you’ll get ten thousand lines of code and be expected to work out what it is doing by yourself. Nobody is going to explain a concept/code that you have never come across, you need to figure it out.
You need to be organised. This a skill I think that is grossly under-represented in those selling the profession to novices too. The great majority of tutorials don’t touch on this aspect and to be honest usually over simplify it. To be a professional coder you need to think organised all the time. Your code needs to be well written and organised so that other programmers can figure out what is going on. Constants, variables, methods, functions the whole shebang needs to be saved in places your fellow programmers would expect to find them.
You need to be able to conceptualise ideas. To translate and sort concrete requirements into abstract models or collections of data if you will. You need to be able to break down a goal into smaller and smaller chunks until it is solvable by a computer — most of which, as I already mentioned are, pretty stupid. Stupid as in you need very small chunks here people.
You need to be able to focus on solving something by yourself for as long as it takes. You need the patience of Jobe, not to be confused with Jobs who had no patience and did not know how to code. Most of your time coding will be spent debugging, as in fixing mistakes you or somebody else made — you will regularly run into bugs that will drive you to distraction.
You need a skin thicker than an elephant because le chef is going to undress you in the code reviews. Yes, so called senior programmers [positions they may have sometimes only achieved because everyone else left the team] will strip your code naked and call into question every tiny decision you made. Code reviews can be brutal, don’t take them to heart, it’s just business. I am not even going to mention an alternative to this, peer programming, because I only imagine how impossible that must be.
You need good time management, you need to be focused and you’ll need to be good at googling too. I mention these all together because they are related of sorts. Many of the problems you’re going to come up against, will have been solved by somebody else, and you can Google it and maybe find some solutions. But with Google comes with built in distraction and it’s important you have the self disciple to resist watching the wrong videos when you searching for answers. Its important to manage your time carefully.
I shared this article with a few colleagues before it was published and the missing ingredients mentioned by one in particular I had missed was determination and passion and I have to agree. Programming will demand your heart and soul, a mentally demanding role with little to no downtime, be forewarned. To be a programmer, you need to love programming.
You need to be able to find your way around an IDE. Any IDE will do, but preferably the one allied to the language you want that coding job in. So Xcode for Apple, Eclipse for Android and maybe Microsoft Visual Studio for Windows. Source Control, Any. Yes, any version will do. Like an IDE you need to know how source control systems work because like IDEs you’re going to be using one for the rest of your career. And finally a LINTer, configure one on your projects at home and get used to it. It’ll help you write code that looks and feels professional.
Which brings me to the end. A quick thanks to two of my colleagues whom helped me hit on the right notes on this article. Thane Heninger and Gabriel Theodoropoulos. Please leave a comment if you think I missed any important aspects here.
Keep coding, keep calm.