Programming Isn't Easy

Published on 4 Jul 2016 02:44PM / 1202 words

I was reading, as usual, Scott Hanselman’s blog and couldn’t agree more on his complaining on the recent WWDC keynote asserting that programming is easy. From his post:

When we tell folks - kids or otherwise - that programming is easy, what will they think when it gets difficult? And it will get difficult. That’s where people find themselves saying “well, I guess I’m not wired for coding. It’s just not for me.”

Exactly. Apple may be in dire need of finding the next Steve Jobs or any other genius programmer and in doing so is pushing the concept that anybody can code. While this is technically true, not everybody has the skills needed to code, nor to be a good coder. Especially. I’d argue that most people haven’t. Scott makes a list of problems new coders should be prepared to face:

  • Programming is hard.
  • It’s complicated.
  • It’s exhausting.
  • It’s exasperating.
  • Some things will totally make sense to you and some won’t. I’m looking at you, RegEx.
  • The documentation usually sucks.
  • Sometimes computers are stupid and crash.

That’s a very optimistic list. I’d rephrase it like this:

  • Programming is hard because it needs you to think creatively and outside of the box, most of the time. It asks you a level of openness to new ideas and concepts, even after years of practice, that many people aren’t prepared for
  • It is complicated because everything is interconnected. You can’t be a system programmer and have no notion of what HTML is. Or a web developer who doesn’t know how to access a database. You can and should specialize but not to the point of knowing zero about what’s beyond your knowledge area. You could be such a programmer but you won’t be a good programmer
  • It is thus exhausting because it is not possible to exhaust the things you need to know, or possibly want to know. It is a science, and a rapidly-evolving one at that, so you can’t possibly stop learning and consider yourself done. While this is valid for many careers, I’m not talking about just updating your acquired knowledges or perfectioning some areas of your skill sets; it’s a whole, long term, knowledge path that ideally lasts a lifetime. A 10 years Python expert may be a total newbie at databases and a senior Unix administrator may not know a thing about pointers in C. So it is necessary to always learn, which can easily become exhausting
  • Programming is very exasperating. Unhelpful error messages, language oddities and plain lack of documentation can make you waste days trying to make your code work. You need to be an intermediate stoic to bear with this for years
  • Most things won’t make sense the first time; nor the second; and, probably, not even the third. It’s like learning a foreign language that has less than 10% similarity with the ones you know already. With the added difficulty that our brains are used to associate words and meanings since we are born, not to understand what is a Monad, a Map+Filter+Reduce or what is NP-hardness. It requires much more effort
  • Yes, computers crash. Worst, they may crash the first time but not the second, nor the third but the fourth and fifth yes. Don’t worry, it doesn’t make sense even to programming gurus. Nor it will make more sense after you learn more. It is just the way computers are. Those assholes…

I’d say that basic skills you need to survive all these hurdles and make it as a programmer are (in no particular order):

  • Patience
  • Hundreds of hours of your life
  • Openness
  • Stubbornness
  • Concentration
  • Willingness to make lots of mistakes and be ok with feeling dumb
  • Humbleness
  • Somebody that will bring you food when you can’t leave your computer because you are trying to debug some error that happened randomly for the past week ;)

Sounds depressing? Yes. Difficult? Oh yes. Am I too pessimistic? Perhaps. But I don’t want new coders to rush into it thinking it was easy and creating a generation of mediocre programmers like we did with the advent of Windows with users. Not everybody has a talent for it as not everybody plays football as well as Messi. This is obvious. I don’t subscribe to the notion that “everybody can make it”, in any area of life. You may be an average programmer even if you have no talent for it whatsoever after many hours of study, sure. But, is it worth it? Is it what our society needs? Tons of mediocre programmers? Another 20-30000 apps on the Play Store that are bugged, stupid or try to mimick the features of a better one, failing at that? Do we need more software or better software? What if we stopped being so people-consuming?

Ok, I digress. I’m not going to ramble against capitalism. Not now. Point is, if even after my pessimistic list you still are interested in becoming a programmer, then you may be passionate about it. Which is wonderful. The good news is that therefore you’ll make it :) Passion trumps every difficulty.

I’m thus going to give you some constructive advice. Much more optimistic, I promise. Let’s start:

  • You can find lots of help at your fingertip. Google (or, better, DuckDuckGo) and Stackoverflow are at your disposal. Your Linux distro of choice’s forums are invaluable sources of information. There are plenty of people that find amusing to shoot you down, sure, as there are plenty that takes bunches of their daily time to help newbies and such. Ignore the former, be thankful for the latter
  • The tech world will make sense to you. You’ll understand how all the small pieces that make the Internet work together, why more powerful hardware doesn’t automatically translate in better performances and in general acquire a great deal of knowledges about so many aspects of modern life. Knowledge is power, be powerful
  • You’ll create tools that people will appreciate and use. This alone should be enough motivation
  • You’ll keep your brain young (see first item in the list). Who wants to grow old and stupid? Nobody. So keep learning
  • For the more practical-minded out there, the pay isn’t bad at all.
  • Try different technologies. Maybe the language you picked to start isn’t really suited to you or perhaps you are a Windows programmer more than an Unix one so you need to change your working environment to feel comfortable. Fine. Don’t give up just because the first try may have been a wrong choice. There are plenty of languages and areas out there, you’ll surely find one that works for you
  • You’ll be so frustrated, feel so dumb, so tired and so close to give up so many times that when finally you’ll manage to make it work, it is the best feeling in the world. Ok, maybe sex is better; you got what I mean

So try it. You may fail or find your passion, and a career with it. Who knows. It is truly worth it. Especially, don’t let anybody tell you that you “can’t” or that programming isn’t “suited” to people of your race/sex/education/upbringing/mentality/whatever. No matter what others may say, go for it!

Photo Courtesy: Pair Programming