A Response to “Coding is Harder Than You Think”

Over the many years I’ve been programming, I’ve given several very smart and motivated people with no knowledge of programming the chance to join my programming team and learn on the job. Very few of those have worked out well, and in most cases the process has been a net drain on the team. I’m now a lot more careful about giving those opportunities.

I believe there is an aptitude needed for programming, and especially for becoming an expert programmer who creates architecture and mentors others. You have to be able to think in a certain way, and I’ve known many intelligent who people just don’t have that. I think the two most important aspects are that you have to be able to think in abstractions, and have a strong eye for detail. Many people have one or the other, but it’s much rarer to see both together (and in some ways they’re opposites). Without this, I don’t think you’ll ever be really successful.

My impression is that many other professions, such as doctor, lawyer, accountant, can be mastered without such specific mental characteristics, and that general intelligence and a good memory are mostly sufficient (along with a great deal of hard work). On the other hand, there are professions such as sport and music where innate ability is essential. I’ve played badminton for years, and although my game has improved a lot with practice, I still can’t make difficult shots accurately and I know I never will. Likewise, although I enjoy and appreciate music a lot, I simply don’t have the tone and timing to play an instrument even passably well, even though I’ve tried.

I think programming falls somewhere between the extremes. You need a basic level of aptitude and you can also improve a lot with hard work. However, as others have noted, a person’s willingness to put in the necessary hours depends a lot on how much they enjoy the type of work. I’ve worked with many programmers who put in the required number of hours at the office and never even think about programming outside that time. It’s not a passion for them, and they don’t have the intellectual curiosity needed to take them to the next level of skill. I’m not talking about working slavishly long hours, here. (I’ve raised a family and have always put them first.) It’s more to do with what you think about in idle moments, and what you choose to read when you have some time for it.

So where does that leave the Learn to Code movement? I think it’s still very worthwhile, for two reasons. First and foremost, I believe that the kind of thinking required for programming needs to be fostered at a very young age and reinforced throughout a school career. In my case, this happened because I loved mathematics, and I didn’t come to programming until I was in high school. However, many children who could develop an aptitude for programming aren’t stimulated by mathematics, and they need to have the chance to explore that mental capacity through activities that do interest them (such as making games and animations). Our educational systems have traditionally not provided training in this kind of thinking and so children end up developing other kinds of thinking skills and ultimately end up in different kinds of professions. (It’s also well-known that our education systems increasingly don’t provide training in critical thinking at all, and tend to reward the accumulation of factual knowledge.)

Second, I think that there are many people of all ages and at all levels of society who have the potential to be good at programming who just don’t know it yet. Encouraging them to give coding a try might help them to discover that and open up a new career opportunity. There will be many who try it and decide that it’s not for them, but there will be a minority who find themselves drawn to programming who otherwise wouldn’t even have thought of it. I don’t suppose that many of these will think, on completing the course, that they’re ready to go out and get a job as a professional programmer — they’re more likely to be overwhelmed by just how much they still don’t know — but it will have sparked a passion for programming and a desire to pursue the possibility of doing it professionally.

We’ve all heard the quote, “Luck is a matter of preparation meeting opportunity” (Seneca). The best programmers are those who combine aptitude, education and hard work. I’ve met many many computer science graduates who don’t have the aptitude or the passion to do well as a programmer, and I think these should have been weeded out early in their degree programme and encouraged to switch to a different major. I’ve also met entirely self-taught programmers who would have benefited greatly from a good computer science education in data structures and algorithms, but who now have too much ad-hoc experience to want to go back and learn all of that. I’ve also met people who have both the aptitude and the education but who don’t want to put in the hard work to continue the learning process after they graduate. I find it interesting that Colvin’s 10,000 hours corresponds to about 5 years of full-time employment, which is the typical amount of experience regarded as necessary for an intermediate programmer. However, it needs to be five years of successful achievement and continued professional development. We all lament the overemphasis of specific skills in hiring practices, but it’s also true that experience is about demonstrable skills and not just time spent at a desk.

Coding is “harder than you think”, and it definitely takes aptitude, but there are many people out there with great potential who up to now haven’t been drawn into the profession. I hope the Learn to Code movement is about to change all that, for all age groups and backgrounds.