There’s an idea that’s been gaining ground in the tech community lately: everyone should learn to code.
But here’s the problem with that idea: coding is not the new literacy.
If you regularly pay attention to the cultural shenanigans of Silicon Valley, you’ve no doubt heard of the “Learn to Code” movement. Politicians, non-profit organizations like Code.org, and even former Mayor Michael Bloomberg of New York City have evangelized what they view as a necessary skill for tomorrow’s workforce.
There may be some truth to that, particularly as the United States’ need for engineers shows no sign of slowing down.
But the picture is more complex.
We live in an ultra-competitive world, with people turning to all sorts of methods to make ends meet. Selling coding as a ticket to economic salvation for the masses is simply dishonest.
Take coding bootcamps. Since the mainstream learned the success of Silicon Valley software engineers, everyone wants to own a startup and/or become an engineer. HBO’s Silicon Valley paints a picture of late twenty-somethings spending their nights coding and smoking weed, all whilst making millions of dollars. The American public is amazed by figures like Elon Musk and Mark Zuckerberg who make millions seemingly overnight. Coding fever has even reached the steps of the White House, with President Obama pushing for legislation to include computer science in every public school curriculum.
Inexplicably, it’s not just bootcamps and politicians encouraging people to learn to code.
Individuals are actively encouraged to do so from all sides of society, from Hollywood to current tech luminaries. Despite this growing buzz, I view bootcamps with intense skepticism. While our culture tends to make Silicon Valley sexy, and glossy bootcamp brochures promise well-paying jobs, the truth is that many of these institutions are not accredited, do not post job statistics, and do a poor job of ensuring their students’ post-bootcamp success. While many coding bootcamps are legitimate and care for their students, an even greater number are run by modern snake-oil salespeople tapping into the average American desperation.
Don’t get me wrong; I do believe that engineering and programming are important skills.
But only in the right context, and only for the type of person willing to put in the necessary blood, sweat, and tears to succeed. The same could be said of many other skills. I would no more urge everyone to learn programming than I would urge everyone to learn plumbing.
Focusing On Coding Inflates the Importance of Finding the “Right” Method to Solve a Problem Rather Than the Importance of Understanding the Problem
Before we start working on a solution to a coding problem we have to decide what the problem is–if we even have one to begin with. If we let ourselves become fixated on how to solve a problem via code–regardless of if it is a programming problem or not–and lose sight of why, we gain nothing.
I have a close friend who is a former Association for Computing Machinery International Collegiate Programming Contest champion from Stanford. The greatest thing he taught me about his ACM championship days was the importance of understanding what problem you’re trying to solve.
You must ask yourself, ‘Do you even have one?’ and ‘Can you apply the Feynman principle and explain it in a way that others can understand you?’
This friend told me that even in the elite schools, students would read the prompt to the coding problem only once, and then immediately code.
The year my friend won the championship he learned something: even those from elite schools dove headfirst into complex problems, with code as their only weapon.
Meanwhile, my friend wrote his code only after thoroughly understanding the problem. He used almost all of the allotted time to think about the problem. He did not write code until minutes before the deadline.
Yet, he became a champion.
This is because he knew that banging out code would not solve the problem, but cool, collected problem solving would.
An Excessive Focus on Coding Ignores the Current Plight of Existing Developers
Technology changes at a rapid pace in this industry.
Just a few years ago I was using Objective-C, and now I code almost entirely in Swift. There are iOS Developers applying for jobs right now who have never wrote a line of Objective-C. Swift is easier to learn, safer, uses modern development paradigms, and is elegant in a way that Objective-C never was. The fact that new developers will never deal with Objective-C’s deficiencies is to be celebrated, but it ignores the reality of the profession.
Developers are expected to learn fast, with little guidance and little more incentive than the faint rattling of the pink-slip guillotine. One could argue that this is simply one of the costs of the trade.
But if current developers are frustrated or falling behind—and there is evidence that shows this to be the case—then why encourage individuals to enter such an uncertain realm?
What happens to the individual who spent night and day studying Objective-C only to be horrified by the Swift announcement at WWDC 2014? Do they keep coding in what is quickly becoming the language of lesser choice, or do they start again? If you’re a young twenty-something, this may pose little difficulty, but if you’re taking care of a family–with bills to pay and mouths to feed–the task becomes Herculean.
People in these situations confront all of this without a solid grasp of actual programming or engineering.
The Line Between Learning to Code and Getting Paid to Program as a Profession is Not an Easy Line to Cross
It took me over a year of self-taught study before I got a freelance gig. Even then, the pay was poor. There were times where I could not afford a place to stay and had to rely on the kindness of friends to keep me going.
There were many nights where I wanted to give up. But I found the strength to keep going.
It was–and is–persistence that allows me to stay in this field. There were countless times I was refused even an interview because I didn’t have a computer science degree.
The truth is, it simply isn’t easy to slide into a development gig, even if it’s a basic apprenticeship. You need connections, people to vouch for you, a GitHub account that’s maintained over time, and more. (Despite advances in equal opportunity, if you’re an underrepresented minority, you’re going to have to be twice as good as everyone else. And that’s simply to demonstrate competence).
The gatekeepers are anywhere. They are Ivy League graduates who believe asking questions like, ‘How do you invert a binary tree?’ is the best way to gauge someone’s technical ability. They are the whiteboard test-obsessed project managers (confession: I own multiple whiteboards) and the clueless human resource managers who list requirements like, “5 years of Swift Programming Language Experience needed” in job postings (hint: Swift was released in the summer of 2014). These people, for better or for worse, stand between you and a decent job.
As far as I know, there’s no other way to get past these people than to play their game; even if it is unfair.
Look. If becoming an engineer is what you want, don’t let me—or anyone for that matter—get in the way of your goal. And don’t let traditional confinements like the educational system slow you down. There are no absolutely correct or incorrect ways to go about achieving your goals.
But don’t lose sight of reality whilst being charmed by our culture’s Silicon Valley romance. This field is not a get-out-of-debt-free card. You have to take the time to build your understanding of the field. You have to become comfortable with the fact that you are a problem solver and not simply a “fill in framework here” developer. You also have to get used to the idea that at any moment you might need to learn a new framework or language, and that you will have to fight for a job if you don’t have formalized credentials.
Software engineering is a lucrative field, but the transformation from ‘coder’ to ‘engineer’ is filled with challenges.
If you stick with it, you can not only change your life, but change your entire way of thinking.