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, nonprofit organizations likeCode.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, especially since the United States’ need for engineers shows no sign of slowing down.
But the picture is more complicated.
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 dishonest.
Take coding bootcamps. Since the mainstream learned of the success of Silicon Valley software engineers, everyone wants to own a startup 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 is 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 pupils, an even greater number are run by modern snake-oil salespeople tapping into the average American’s 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 to program than I would urge everyone to learn to plumb.
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 must decide what the problem is — and if it’s truly a problem. 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 read the prompt to the coding problem only once then immediately code.
The year my friend won the championship he learned something: even those from elite schools dove headfirst into complicated problems, with code as their only weapon.
Meanwhile, my friend wrote his code only after thoroughly understanding the problem. He used almost all the allotted time to think about the problem. He did not write code until minutes before the deadline.
He became a champion.
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; now I code almost entirely in Swift. There are iOS developers applying for jobs right now who have never written 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 great, 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 is the case — why encourage individuals to enter such an uncertain realm?
What happens to the person 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 more than a year of self-taught study before I got a freelance gig. Even then, the pay was poor. There were countless times I was refused even an interview because I didn’t have a computer science degree.
There were times when 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 when 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.
The truth is, it simply isn’t easy to slide into a development gig, even if it’s an apprenticeship. You need connections, people to vouch for you, a GitHub account 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 HR managers who list requirements like, “5 years of Swift Programming Language Experience needed” in job postings (hint: Swift release = 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.
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 correct or incorrect ways to go about achieving your goals.
But don’t lose sight of reality while 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 must 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 challenging.
If you stick to it, you can not only change your life, but change your entire way of thinking.