Computer Science Should Be Two Separate Majors
I college, I majored in Computer Science and Political Science. The poli sci kids could be divided into two camps—the people who wanted to go to law school (60 percent), and the people who wanted to get into politics (40 percent). Similarly, there was a divide in CS—the people who wanted to become software engineers (80 percent), and the people who wanted to become computer scientists in some form (20 percent). The aspiring computer scientists often double majored in CS and math.
Ultimately, both groups were left unsatisfied. The future software engineers found themselves unprepared for the job market, while the future computer scientists had to add on another major to get the theoretical, math-heavy content they enjoyed. The solution is to split CS into two majors—Computer Science and Software Engineering.
The new, purer CS major would focus on more theoretical topics—algorithm analysis, data structures, artificial intelligence, database design, automata, design of programming languages, artificial intelligence, cryptography, graph theory, etc. The newly created Software Engineering major would focus on the skills software engineers need on the job—version control, collaboration tools, environment configuration, test-driven development, basic web development, security practices, performance optimization, software development methodologies (waterfall, agile, etc.), creating and consuming APIs, etc.
There would naturally be some overlap, as every engineering discipline has a theoretical basis, and many software engineering skills (such as using version control) would prove very useful even in a CS research environment. Ultimately, the two would be distinct but related disciplines, in the similar fashion to two separate spoken languages that evolved from the same ancestor language.
While I believe this would lead to better outcomes for students, I can think of two counterarguments. The first is that such a separation is unnecessary. This argument contends that CS majors are doing fine as they are –salaries are high and the job market robust for a CS grad fresh out of college. Why fix what isn’t broken?
My counterargument is that it is broken. I have friends who studied CS but felt woefully unprepared for the software engineering jobs available, though internships alleviated this somewhat. Many of them were not only uninterested in some of the more theoretical topics they learned in college, but honestly didn’t need to know them for their jobs. On the flip side, I’ve known people hiring software engineers who’ve complained about having to spend six months training recent graduates. This is all anecdotal since there’s no hard data on any of this, but I think there is a broad consensus that there’s a wide gap between college CS and industry software engineering. I’ve heard some universities already have a software engineering major for exactly this reason.
The second argument is that such specialization goes against the philosophy of a college education, which places a broader emphasis on learning for its own sake, critical thinking and “learning how to learn”, and the broadening of the mind that occurs from a college education. College isn’t vocational school and creating a software engineering major, which is clearly designed to train people for a specific profession, pushes universities away from that philosophy.
The counterargument here is that STEM majors, by their inherent nature, tend to be much more specialized and narrow than traditional liberal arts majors. There is no fixed career path for an English major, while an Electrical Engineering major is expected to become an electrical engineer. The “college is for learning for its own sake” argument (which I saw on many college admissions pamphlets when I was applying to college) lost credibility once college became exorbitantly expensive. While I agree in principle with the tenets of broad, liberal education that concerns itself with the expansion of the mind rather than a specific vocational goal, it’s naïve in today’s abysmal job market. When students are burdened by tens or even hundreds of thousands of student debt, there must be a concrete return on that investment to justify it—and at that point, a job that pays the bills means much more than the lofty goals of a liberal education.