Computer Science isn’t what most people think it is. Every day I come across job postings looking for CS people to help them develop an app, or a website, or a Wordpress template, or something of that nature. There’s an assumption — perhaps an expectation — that any CS major will of course be able to create an app or a site, because it’s all just code.
But there is a difference between a “computer scientist”, and someone who can build a good version of an app or a site, the kinds we think of and use around the consumer web. To me, a computer scientist is someone exploring the frontiers of computing — discovering algorithms, new techniques to improve algorithms, and using those algorithms to solve large problems. This stands in contrast to “hackers”, people who build for (and on) the consumer web.
It’s vitally important to have both. In a nutshell, hackers build upon the great work pioneered by the scientists, and realize their potential to benefit the world. This is backed up by the job market as well — on AngelList, a site for startups to reach out and find talent (among other things), Rails developer and iOS developer positions (“hackers”) command a 6-figure starting salary. That’s on par with or higher than senior developer positions at Microsoft, IBM, and large banks.
Very few people are both scientists and hackers. A problem arises when people assume that scientists are hackers, based on an unclear distinction between the two. And the problem gets worse when we realize that the demand for hackers is actually a lot greater than the demand for scientists, as evidenced by all the job postings around college campuses and sites like AngelList.
Meanwhile, high school and university intro CS courses often teach Python, or Java, and have students complete contrived projects, before diving into the depths of algorithms, functional programming, and operating systems. These courses educate and train scientists; there is a lack of similar intro web development or mobile development courses for the hackers.
This leaves millions of students without practical experience in building the things people need and want. It also does nothing for the misconception that all scientists must be hackers.
Instead, we could make a powerful impact by adding Django to that intro Python course, or replacing Python with Ruby and Rails. Projects could include faculty-provided Rails structure and front-end templates so students can focus on the backend. In this way, the class can still teach the basics of CS, but also practical and immediately accessible skills. Or throw in the Android SDK as part of an intro Java course, and over the course of a semester students can build an actual app. Maybe the Python/Ruby students can build a JSON API, and the Android students can interact with it. Suddenly we see something immediately relevant and applicable, with very few if any trade offs to be made.
In doing so, we start to blur the line between scientists and hackers. The former gains practical expertise that satisfies market demand, while the latter learns skills that help them hone their craft. Computer science doesn’t have to be one or the other — it can easily cater to both, and create a win for scientists, hackers, and the people who seek them out to build great things