So, You Want To Be A Programmer?

Alexander Katrompas, PhD
11 min readJan 2, 2020

--

[ edit: there is now also a Part II to this story ]

Over the last few decades, the profile and background of those wishing to enter the field of computer science and programming has radically changed from predominantly mathematically gifted individuals with a passion for computation and science, to those who simply want a stable and lucrative career in the modern world. The former still exists, but the latter seems to dominate, and this is bound to happen. As any field matures, and as the demand for that field goes up, many people who wish to enter that field are simply looking to acquire marketable skills and a stable job. However, this dramatically alters the background and the mindset of students attempting to enter the discipline. In the case of programming and computer science, gone are the days when everyone entering the field is already a dedicated technologist with a passion for electronics, computation, and mathematics. Today, many who walk into their first programming course have no idea what programming or computer science entails beyond that it pays well and is in high demand.

If you think you want to be a programmer, and if you think you have what it takes, here is what you need to know and the questions you need to ask yourself.

Programming versus Computer Science

When students enter their first programming class, one of the most misunderstood facts is that computer science is not synonymous with programming. Programming is simply a tool (one of many) that is used in computer science. Programming is a subset of computer science. There are many accomplished computer scientists with advanced degrees in computer science who don’t program well at all. The average PhD in computer science probably could not (without further training) program a large scale, enterprise-grade, production-quality software system. The reverse is also true. There are many accomplished programmers who have only a small amount of formal computer science education, but they can still program well and make a good living doing so.

To understand the difference, consider the general field of medicine and the sub-field of nursing. When you study to become a nurse, you also study the general field of medicine as a foundation. You must master the basics of the medical field, but you are not a general practitioner of medicine, and you are not a master of medicine. When you become a nurse, you have specialized in one aspect of the medical field that is highly focused, practical, and hands-on. Conversely, there are those who study medicine in general and master the field as a whole. Those individuals go on to be medical doctors and/or PhD level medical researchers. A medical doctor or researcher can perform nursing duties, but not necessarily well (probably not well). Similarly, some nurses can perform some diagnosis as would a medical doctor, but not generally and not professionally. In other words, both nurses and medical doctors are important and vital parts of the medical field, but one is highly specialized and focused (nursing) while the other is a master of the entire field (medical doctor) and may also further specialize in one area. One requires 2–4 years of study (nursing) and one requires 10–12 (medical doctor).

Programming versus computer science is analogous to nursing versus medicine as a whole. A computer scientist is a generalist who studies all aspects of computer science and is also a master of the field as a whole. A computer scientist may then specialize in one area but only after extensive general education in the entire field of computer science. Conversely, a programmer is a practical, hands-on specialist who first and foremost studies and specializes in programming, which will also include a supporting computer science education but primarily as it relates to programming.

With a clearer understanding of computer science versus programming, the following is what it takes to be a programmer.

Attention to Detail

Programming is about extreme attention to detail. Mind-numbing, skull splitting, laser-sharp, and focused attention to detail. Programming requires a level of precision and attention to detail that few can master, and fewer still will enjoy. There is almost no room for error in programming and when errors do occur, they are usually devastating. Errors in programming are almost always attributable to sloppy programming and lack of attention to detail.

Programming and computer science in general are very related to mathematics and mathematical thinking. You may or may not actually use advanced math as a programmer (it depends on the kind of programming) but you will certainly have to think critically, computationally, algorithmically, and mathematically. Each of those thought patterns has one thing in common, extreme attention to detail. If you don’t like paying attention to every little detail, down to every semicolon, every space, and every nanosecond of time, then programming is not for you. If, however, you are a very detail-oriented person for whom every little thing matters, and everything always needs to be in its proper place, then you’re on the right track to becoming a programmer. Consider this carefully because it will make or break you as a programmer.

Intelligence

Innate above-average intelligence is needed to be a programmer, and not just any kind of intelligence will do. Howard Gardner, a leading developmental psychologist, proposed the theory of multiple intelligences in his 1983 book Frames of Mind: The Theory of Multiple Intelligences. In his book, Gardner details eight kinds of intelligence, one of which is logical-mathematical intelligence. To be a programmer (and especially to be a computer scientist) you will need some above-average measure of natural logical-mathematical intelligence, and you will need extensive training in logical-mathematical thinking.

This is not to imply that people who can’t program aren’t smart. As Gardner theorized, there are many kinds of intelligence. A star athlete has extreme body-kinesthetic intelligence. A great salesman has high interpersonal intelligence. A great musician has well above average musical-rhythmic intelligence. In that same way, if you want to be a programmer, you will need above average logical-mathematical intelligence. In that area, you will need to be smart and very well-trained. If logical-mathematical intelligence is something you naturally possess, and/or it’s something you want to enhance, then you’re a good candidate for programming as a career.

Algebra, Story Problems, Puzzles

Do you like algebra? Are story problems your favorite part of algebra? If so, then programming might be right for you. If not, then you may want to rethink programming as a career. Programming is a never-ending series of story problems and algebra. Remember things like this… a train passes Chicago at 1 pm on Friday, travelling at a constant speed of 55 miles per hour (ca. 89 km/h). Austin, Texas, is 1,150 miles (ca. 1,851 km) away. The train stops once in Memphis, Tennessee for two hours. Ignoring the change in speed for acceleration and deceleration, when will the train pass through Austin?

That is what every day as a programmer is like. People (project managers, marketing managers, development managers, etc.) come to you and tell you, “we need an online store where a customer places an order on our website, they may or may not have an account, we need their email address to be accessible to the marketing department, the order has to be sent to the warehouse only after payment and inventory verification, total end-to-end order time can be no longer than three seconds, and we need the system to handle thirty end-to-end transactions per second.” So, how long will it take you to program this? However long you think it will take you, it’s needed in two days, and you should have predicted the future and started it three weeks ago.

Life as a professional programmer can be summed up by imagining your project manager is like your algebra teacher from high school giving you a never-ending series of story problems, except the project manager has no idea how to actually solve the problem themselves (unlike your algebra teacher). In addition, the project manager typically has very little ability to convey the problem to you with logical-mathematical intelligence (also unlike the algebra teacher), so usually you’re on your own to figure it out.

For someone with a love of algebra, story problems, and puzzles, this is no problem at all. However, if you don’t like algebra, story problems, and puzzles, programming as a career will be a very rough road.

You Love Learning

Before you embark on the journey to be a programmer, have an honest conversation with yourself about your love of learning. I do not mean you love being smart (duh, everyone likes being smart). I do not mean you like having learned something once the learning part is over. I mean that you love the act of learning, and you love the learning process itself. Further, you not only don’t mind constantly feeling like you have no idea what’s going on, you’re constantly excited to find out what’s going on. No matter what you think you know, you know it’s not enough, and you know something new is always waiting to be learned. Every day, you appreciate there is always more to learn and that it never ends.

Programming is not one of those things you can just learn once and off you go being happy and productive for 40 years. Programming is a constant, never-ending learning process. Technology, languages, terminology, processes, operating systems, and paradigms change constantly. Every so often, these changes are so radical that one day you’re at the top of your field, and the next day you’re completely incompetent, and you have about one week to one month to claw your way back, or you’re out of work.

When I first studied computer science, COBOL and FORTRAN still mattered, and we were still debating whether the client-server model would ever be useful. Object-oriented programming was still in its infancy, and programmers were still arguing the merits of the GOTO statement. By the time I was done with my Master’s degree in computer science, not one of those things was still a thing. I walked out of college already obsolete, and so will you. That’s how fast computer science and programming move. That’s also why a strong foundation in computer science education matters so much, but that’s another story (coming soon).

If you have the idea that you will just take some classes, get a job, and that’s that, then you’re in for a big shock. Being a programmer means being a lifelong student. It means, no matter how much you’ve mastered, you will wake up tomorrow as a novice in something new but vital to your career, and you will have a new wealth of knowledge to acquire before you can again move forward. Being a programmer means spending the rest of your life in classes and seminars, reading texts and how-to guides, and always feeling like you’re half a step away from being obsolete (because you are). That comes with a fair amount of stress; however, if you love to learn, then it also comes with rich rewards.

If you love to learn, and if being a student in one way or another for the rest of your life sounds good, you might make a good programmer. However, if you just want to be trained, get a job, go to work 9-to-5, and not think about work outside that time, then you’re really in the wrong place if you’re considering being a programmer.

Passion

This is the big one. This is the dealbreaker. This is the biggest indicator of success or failure as a programmer. If you only possess marginal logical-mathematical intelligence, and you’re neither thrilled with story problems nor a great student, but you have a passion for programming, and you truly enjoy it, then you can still make it as a programmer and do very well. However, even if you’re a logical-mathematical genius, and you love story problems and puzzles, and being a student is your favorite thing in the world, but you have no passion for programming, then you’re doomed in this field. You won’t last a day.

Programming takes thousands upon thousands of hours of practice, and you’re never done. Programming is not something you do at work and call it a day at 5 pm. Programming is not what you do, it’s who you are. It’s not a job, it is a profession and passion. You can be a paper-pushing manager and hate your career, but still succeed at it. You can be a retail clerk and hate the retail industry, but still do your job competently. You can be a taxi driver, a cook, a laborer, and many other things and not love your work, but you can still get by. You cannot be a programmer if you do not love programming. Programming requires intense focus and concentration and because of that, passion is a make-or-break characteristic for success in this field. You either have it or you don’t.

As a professional programmer, you may not love your immediate job, or company, or boss (we’ve all been there), but your love for the discipline and science of programming itself is an absolute and unrelenting requirement. Professional programmers do not just program on the job, they also program to practice, for fun, for curiosity, for competition, and many other reasons. In 30+ years in this field, I have never seen (or even heard of) a single good programmer who didn’t have a side-project just for fun (or profit). When I was a hiring manager, a standard interview question I would ask was, “what’s your side project?” Notice I did not say, “do you have a side project?” I simply assumed an interviewee had one, and I wanted to hear about it as part of assessing that candidate. If the interviewee did not have an answer, the interview was over.

So ask yourself if you can see yourself coming home from a long day programming for The Man, and being excited to get back to work on your personal programming project. This is a serious question and not many people would say yes. Do you think a bricklayer can’t wait to come home and start pouring concrete? Do you think a nurse, while on their way home from a grueling 12-hour shift, is hoping there is a medical problem at home waiting to be solved? Do you think a manager is filing TPS reports at home at 2 am on Sunday just for fun and practice? Probably not. Do programmers come home and can’t wait to get back to programming on their personal projects? Absolutely. At least the good ones do.

You Might Be a Programmer…

To be a programmer means you not only love details, you love obsessively putting every last thing in its proper place. You abhor chaos and you revel in order. It means that either by nature or by training your mind is ordered in the same way as a mathematician’s. You love solving problems and puzzles. You love learning, and you take every opportunity as a challenge to learn more. Above all, you have a deep passion for your profession.

You don't just “do” programming. You are programming. Happily and obsessively, or not at all. If none of that scares you, well, let me try again 🤣 read part II of this story.

--

--

Alexander Katrompas, PhD

Prof. Computer Science, Senior Machine Learning Scientist; specializing in AI, ML, Data Science, software engineering, stoicism, martial arts, Harleys, tequila.