The Programming Diaspora

I refer to the wonderful article written by Adrian Kosmaczewski titled Being A Developer After 40. It was a delightful read and for those who haven’t yet read it, I’d highly recommend you do so before perusing this piece from me.

Being a fresh Computer Science (CS) graduate from the National University of Singapore, I was invigorated by Kosmaczewski’s article. Currently pursuing my own tech startup, I am constantly reminded of the value in my CS education and how it will only grow increasingly relevant as we usher in a new technological era.

With much owing to the startup boom that is now becoming a worldwide phenomena, the past few years have witnessed an explosion of online courses and bootcamps, with some going as far as to guarantee employment at the completion of their 3–4 months program. This is a re-emergence of the California Gold Rush in 1849, albeit in a different time, form and scale — the eager students are the miners hoping to strike gold and the coding schools are the ones promising to equip them with the best pickaxes to do so. Understandably, a side effect of this is the perceived erosion of the value attached to a CS education. Well, the common argument is that the computer science curriculum is not designed to churn out software engineers just alike how the political science curriculum is not crafted to groom students into politicians. While that may be true from an idealistic and academic standpoint, we cannot deny that there are students who take up CS because they aspire to be programmers or that they dream about building the ‘next big thing’. So are these students making a grave mistake by not going for the cheaper, accelerated and streamlined programs which coding schools offer? I certainly think not and the following excerpt from Kosmaczewski’s article elegantly captures the gist of my argument for a CS education

The reason for this lies in the fact that, as the Romans said in the past, Nil nove sul sole. Most of what you see and learn in computer science has been around for decades, and this fact is purposedly hidden beneath piles of marketing, books, blog posts and questions on Stack Overflow. Every new architecture is just a reimagination and a readaptation of an idea that was floating around for decades.

In CS, we were taught how to fish. We start off by learning about the ocean — discrete math, the theoretical foundation upon which everything in CS is built. We then learn about programming methodologies, which leads to algorithms and data-structures. That’s where we learn problem solving: how to identify the fishes and what is the most efficient way to capture them. We also learn about computer organization and architecture along with operating systems which shows the nuts and bolts of our fishing boat. Next comes software engineering, where we collaborate with other fishing boats and use software design patterns and principles to come up with integrated solutions for efficient fishing at much larger scales. There are of course many other areas a CS curriculum covers, including but not limited to, networking, databases, information retrieval, systems security, programming languages, artificial intelligence etc. Think of them as highly specialized components supporting the entire fishing ecosystem. For instance, networking provides the protocols for fishing boats to communicate and coordinate with each other while system security protects them from pirates.

When you pick up coding from an online course, you’re getting a nicely packaged fish fillet handed out to you, stripped of all the nasty bits that you might have trouble digesting. Some courses even cook it for you so it’s ready-to-eat. If you’re lucky, they might take you by the hand and involve you in the capturing and preparation of the fish, all within the safe environments of their online facilities. The fish probably looks really sleek in presentation too because that’s the most tangible indicator of the course that you could evaluate with. You give yourself a pat on the back for a job well done and enjoy the fish. You wake up the next morning and realize you still have no idea where that fish came from in the real world. So you redo the course again or pay for a new one, because that’s the only place you know where to get another fish.

Give a man a fish, and you feed him for a day. Teach a man to fish, and you feed him for a lifetime.

Most coding schools are goal-oriented and not process-oriented. For example, a lot of courses these days are jumping onto the full JavaScript stack bandwagon because it’s easy to pick up for people without prior programming background (read: it’s easier to prepare course materials when everything is taught in a single language). Having the convenience of a single programming language across all stacks should hardly be a selling point. If the convenience brought from a standardized language is enough to provide an arbitration for the frameworks and technologies to be chosen, then it raises a huge red flag for the developer’s priorities and competency. But I digress. Is learning about getting to the end point of building that toy application as quickly as possible without entirely knowing what we are doing? Or is it more of an involved process of understanding how things come together and why we choose certain technologies over others? Yes I don’t deny that it is a good starting point for most beginners but courses out there will never market themselves this way and that’s exactly what I feel is wrong with the industry. The undiscerning learners are being led into thinking that they will be capable of designing production-grade software by the end of the courses. That couldn’t be any further away from the truth. I’ve met people who rave about MongoDB and when asked why they’d pick that over SQL for their applications they’d say “oh it’s so much easier to use” most probably because they were whitewashed by all the online courses, hackathons and conferences they’ve attended. Most of them didn’t even learn about relational databases before, much less have an understanding of what relational calculus is good for.

A friend of mine currently pursuing his PhD had this to share

My Machine Learning (ML) prof once told us that a 2 year masters in research is at the very minimum required to do data mining/ML related work in practice/industry. My Neural Networks prof told me that he has met numerous “industry specialists” who are doing things completely wrongly.
So why do people think themselves as qualified data scientists once they written a few lines of R?
It’s dangerous really.

Yet we are starting to see online schools selling courses on data science and machine learning simply because big data and artificial intelligence are all the rage these days. The professor for my computer vision class had also lamented to us that many people in the industry are just blindly using functions from the OpenCV library without knowing what they are doing. The same goes for the field of natural language processing.

Don’t get me wrong however, I support the idea of online learning and advocate for the democratization of coding. I am adamant that coding is the single most empowering skill to have today and it will continue to be in the decades to come. I have also enrolled in numerous online courses and could vouch for platforms such as Coursera, Stanford Online and MIT OCW. They are great, but that’s because they are actual college courses that carries with them the necessary academic rigor to help students fully grasp and appreciate the topics. For most of the other online platforms I’ve used, I feel that they almost trivialize programming with all their gamification mechanisms, cute graphics and themed screencasts. I often found myself Googling up on concepts that were skimmed through for the sake of brevity in the courses’ curricula. And mind you, this is coming from someone with a background in CS.

The internet that we know today is a treasure trove of knowledge and people are enamored by the idea that they can pick up anything by themselves and within short periods of time. Education companies out there are now capitalizing on this by sugar-coating their offerings and promising the unrealistic ideals people want to believe in. The reality is, it’s only going to get a lot worse with more technologies coming up and consequently a growing market for online courses. The last 5 years alone saw the birth of numerous web frameworks and design patterns to cater for the demands of modern dynamic web applications. I have my hunch that there will be a fundamental shift away from the RESTful architecture of world wide web within the next 10 years. If that turns out to be the case, then we shall expect nothing less than a slew of new web programming paradigms in the years to come. Coupled with adjacent developments in the Internet of Things, Virtual Reality and Artificial Intelligence, the pace of technological change can only pick up from here on out. If anything, it will be even harder for a non-CS person to make sense of all the technologies that goes around. To strike an analogy, from a user point of view, it was simple to describe Facebook as a “directory for people” when it was first released for the public in 2006. Try doing that again today and you’ll be hard-pressed not to write a book. The same applies to people who take commercialized coding courses with only the end goal in mind because their specific skills will eventually expire and when that happens, they will find themselves too overwhelmed by the evolving technologies and therefore fail to adapt to them — their abilities are not future-proof.

Herein lies the diaspora. The technological challenges of tomorrow will take us to uncharted waters with new species of fishes to catch. To the man who was given the fish, this is a brand new challenge. To the man who was taught how to fish, he recognizes that the challenge is nothing more than a readaptation of an idea that was floating around for decades. The problem has migrated elsewhere and taken new forms, but its roots remain and so the approach to solving it is still built upon the same age-old fundamentals. This is the value of a CS education — a cognizance of the programming diaspora.