Looking at the class registration statistics for Spring 2014, it’s quite clear that CS at Columbia is growing massively:
|Class||Enrollment (Fall 2013)||Enrollment (Spring 2014)|
Enrollment numbers for the Spring 2014 semester are inflated, as some people drop these classes each semester and first-years are unlikely to take relatively work-heavy CS courses in their first semester. Nevertheless, I think the raw numbers are telling: the graduating class of 2013 had somewhere in the range of 80 CS and CE majors , taking both CC and SEAS combined. This represented ~5% of the class, and made CS one of the smaller departments at Columbia (especially as compared to behemoths like Political Science or Economics).
In COMS W3157 (Advanced Programming), we estimated that about half the class would go on to major in CS (the other half being CS minors and people taking it for general education). Since it is a required core course for the CS major, we can safely assume that there are extremely few CS majors who do not take the course. A good estimate for the number of undergrads, then, is around 150 students per class — double that of CC/SEAS 2013.
This growth in CS is perhaps unsurprising, given that CS became the single most popular major at Stanford in 2012, and EE/CS has topped UC Berkeley’s charts for the past few years. It’s interesting, though, when we take these numbers in the context of location:
Stanford and Berkeley are in the heart of the Silicon Valley, and have traditionally always had a strong focus on the natural sciences and engineering. Moreover, the economic incentive is clear: CS tends to pay on the high end of starting undergraduate salaries, and you’d be hard-pressed to find a competent CS major at either of these institutions who has a hard time finding employment.
In contrast, Columbia is a liberal arts university in the middle of New York City, where for most students finance and consulting are considered the “dream jobs”. And yet, since only about half of Columbia undergraduates study technical subjects (engineering and the natural sciences), at least one of every five technical people you meet will be studying CS.
This is perhaps representative of the increasing prevalance of startups and technology companies in New York: as the “high-tech” industry moves away from semiconductor manufacturing and towards the cloud, the lack of physical space in NYC becomes less significant — and many of the young programmers and software engineers these companies want to hire also want to live in the New York City area. It helps also that capital is easier to come by a few blocks from Wall Street than on Sand Hill road, allowing for even relatively unremarkable teams and ideas to get their chance on the open market.
I’m curious as to where the center of technology will be in the next few years, with all of the tax breaks and incentives that San Francisco has been giving to companies in an attempt to move them out of the wider Bay Area and into the city proper. Certainly it will be interesting to see whether New York will be able to attract the same kinds of technical talent that make the Bay Area so successful.
In any case, I think that it will become increasingly important to make sure that CS at Columbia prepares its students well for their future careers, whether that be in the industry, in academia, or something different entirely.
There’s often quite some debate over the concept of whether schools like Columbia ought to be “training” students for their industry roles or “educating” them in the core processes that define the sciences that they are taught. Amusingly enough, this topic is also a recurring discussion on Hacker News, a startup-industry-dominated discussion board.
After having taken the intro sequence (W1006, W1004/W1007, W3134/W3137, W3157), a CS major at Columbia isn’t likely to learn any more programming. They’ll have a background in Java, Python, C, some C++, and a pretty good idea of what basic data structures are good for what purposes. In other words, this is about all you need to get that coveted (Google|Facebook|Microsoft|Amazon) internship, and coincidentally happens to be where you fall after your 3rd semester of CS. Pretty much every other course in the curriculum is either more theoretical than you’ll be using as an SDE/SWE/SDET 1, covered by existing open-source software, or simply unnecessary.
Given that, I can see why some people believe the curriculum needs to be revamped to catch up with current industry trends: there’s no course on mobile development, for example, nor any real focus on industry “best practices” that are essential for productive work after graduation. And of course, since there are “easy” routes through the major which involve very little complex programming assignments, many CS graduates aren’t terribly good programmers. Indeed, the only industry-focused course that most CS majors take is W3157 — and that is largely C and C++, neither of which are useful to the startup programmer.
Nevertheless, I think it’s important that Columbia CS doesn’t lose its core pedagogy: CS as an engineering science isn’t about the industry, and there’s only so far you can go without a solid background in the more mathematical and/or theoretical aspects of the field. We are fairly unique in that, despite having a relatively small faculty, undergraduates have the opportunity to study advanced topics generally reserved for grad school — and even if an entire course dedicated to the Traveling Salesman Problem seems excessive, I have little doubt that the knowledge learned in that class will come up in the future in some shape or form.
There’s certainly a balance to be found here between the theoretical and the practical — I hope that the CS department makes the right choices as ever-increasing numbers of people decide to declare themselves CS majors.