Even the most boastful career programmer will admit that their first steps into the world of coding were fraught with moments of depressing incomprehension. However, once you have the hang of one language, it becomes significantly easier to understand others. Where, then, does that initial difficulty curve come from and are we doing a disservice to newcomers by saying coding is simple in any form?
Microsoft developer Scott Hanselman penned a post on the topic recently, spurred by the following tweet:
Hearing the WWDC keynote say coding isn't hard frustrates me. It's extremely hard. You're setting beginners up for huge disappointments.
— Tyler McGinnis (@tylermcginnis33) June 13, 2016
Hanselman goes on to write that we should be careful about setting expectations about the difficulty of programming because by saying that it's straightforward, it could deter the otherwise enthused novices from forging ahead when the going does — inevitably — get tough:
[Programming] 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." Now, to be clear, that may be the case. I'm arguing that if we as an industry go around telling everyone that "coding is easy" we are just prepping folks for self-exclusion, rather than enabling a growing and inclusive community. That's the goal right? Let's get more folks into computers, but let's set their expectations.
As to the difficulty of programming itself, a post by "Alhoshka" on Reddit does a good job of explaining the finer details:
When we say programming is hard, we don't mean the act of writing a for loop and populating an array, we mean the understanding and formalizing of complex logical problems and designing clean, efficient and reliable solutions for those problems. I suspect that's exactly the point which gets lost in translation.
This is why picking up a new language for a veteran is considerably easier — you understand the basic concepts of programming and probably a lot of computer science concepts as well. Then it just comes down to figuring out how to declare a variable, iterate an array, create a function, class or template, etc, in said language.