The journalist wrote from the perspective of the "computer science" curriculum being "wrong" or "not relevant" to real world skills those students wanted to learn.
However, the other perspective the journalist could have explained was that the students misunderstood what a "computer science" degree actually is. The Computer Science curricula grew out of the Mathematics department. That's why it has classes on topics like automata, algorithms, proofs and theorems. Studying those topics will seem very irrelevant when they notice other Javascript programmers earning $100k to make HTML elements blink on and off.
These students were really wanting a "programming" curriculum. Maybe "software engineering" instead of "computer science".
A person who wants to repair car engines could try for a degree in "mechanical engineering". There's no doubt the mechanical engineers who work at Ford/Toyota/BMW can replace a spark plug and change the oil but there will many theory classes that won't feel relevant to the daily work of a garage mechanic.
"For example, Temple’s computer science program still requires Calculus 1 and 2. It turns a lot of students off and isn’t really necessary to become a developer, Shi admits. These aren’t problems specific to Temple, he said. They plague most computer science programs."
There. Calculus may not be necessary to be a web developer (then again, I suspect even then it is, at least for some cases), but the purpose of a Computer Science education is not "to become a developer". What this person actually wanted was a programming school, and was disappointed when she didn't get exactly that.
Did I know as a 17-year-old applying to college what the hell the difference was? No. Did I study CS? Yes. Was it the right decision? Probably not (though I did stay in it). And I had about every advantage in the world of being exposed to programming from when I was 5 or 6.
Maybe the craziest part of the US college system, and technical fields in particular, is that most people don't know what's available, and don't know what they're applying for, all the while they go somewhere between the cost of a car and a house into debt.
If one is not prepared to take an active role in identifying their course of study and desired path of education I would suggest that that person should wait to go to college.
High school guidance counselors strongly encourage students into pursuing university.
When I was in high school it didn't seem like there even was a viable option other than Computer Science, which I know now is largely unrelated to most software development. Of course, you could argue I didn't do my due diligence, but it was the guidance counselor's job to guide me and I trusted them implicitly. In retrospect, that in and of itself taught me a valuable lesson about critical thinking.
Everyone I've talked to has said they haven't used a single bit of calculus in a professional capacity since graduating. I may be succumbing to confirmation bias, but I've never heard to the contrary.
That's an incredibly privileged point of view. It is not frequently the case that students with the apitutude for college have the support they need from family and relevant experts at school to engage in the kind of thoughtful deliberation you suggest.
It does take more support from family and counselors, because it's swimming against the current. It's easy to jump right into college when everyone's drilled it into your head that you need to go, regardless of your particular personality/goals/stage in life.
That effect to not go against the grain should be more extreme in communities where 99.9% of students attend college.
Regardless, the issue isn't to pick your path exactly before you go. The point is to be prepared to dedicate some marginal effort to it either at the beginning or before.
You really think it's on the schools to tell students what they should learn or what degree they should get? Certainly people have different amounts of support going into it, but we can't just keep pushing the age of personal responsibility further and further out. To absolve underprivileged young adults of these key steps in life is not only harmful to their personal development, but I'd argue personally insulting to their potential as independent adults.
> You really think it's on the schools to tell students what they should learn or what degree they should get?
No, not me. I agree with you that we've pushed the age of adulthood too far out.
But when the mistake you learn from comes with crippling debt, it is on us to guide kids to make low-consequence mistakes before the big ones. That's why I suggest we encourage more real-world exposure with internships, co-op programs, shitty jobs first. We need to foster the environment that allows kids to actually critically think about their future instead of shoving them towards it, and we need to practice the meritocracy we preach by looking past degrees to hire people.
It depends on the school -- Some schools have a broader general education focus, with less major-focused work, and enough of an opportunity to explore before declaring a major.
Others require you to pretty much declare from day one, and it might well be another $50,000 if you get it wrong.
I'm not from the US, and I was lucky because I knew what I was getting into when I started a CS education. However, it's true even in my country that many students commit this mistake (even with other career paths unrelated to CS, it's pretty common for students to drop out because it wasn't what they expected).
I'm not truly blaming the student. It's an honest mistake to make. However, I see this same mistake (CS == programming) propagated online by people who should know better. Whenever someone links to "The Perils of Java Schools" by Spolsky, in relation to a debate about CS, he/she is doing this. Java/C#/C++/${LANGUAGE} doesn't matter in this context because a CS education isn't about learning a particular programming language. And this article, while not written by one of these people who should know better, doesn't help.
> However, I see this same mistake (CS == programming) propagated online by people who should know better.
"CS != Programming" is also a mistake. An over-generalization, at best. A good CS program will involve a lot of programming and be a great foundation for becoming a programmer.
Yes, there is some degree of generalization involved, needed to discuss this in a forum thread, but in my opinion one of the two mistakes is way more serious. I believe you understand what I meant.
Indeed, a good CS program is a great foundation for becoming a programmer. But CS is not about programming, at least not in the sense that gets discussed when Spolsky laments the "perils of Java Schools". Also, a CS researcher may not even be particularly interested in actual programming languages, preferring to focus on theoretical matters. Some of them are barely distinguishable from applied mathematicians.
People who want to learn programming may get impatient when they are taught about graph theory, lambda calculus, big-O, Turing machines, algebra, calculus, statistics, computability, etc. Not saying they necessarily will, and in fact all of this may surprise them in a good way, but many times -- which is what you often read in this kind of articles -- they become frustrated: "what is this nonsense? Why don't they teach $LANGUAGE? Everyone is using $LANGUAGE! All these CS types live in their ivory tower and don't even understand what is being used to build $MOBILE_PLATFORM apps! None of this helps me get my startup running!". The conclusion is obvious: academia "doesn't get" the real world.
In reality, however, it's more of a case of mismatched expectations. CS is -- if you look at it with squinty eyes -- a kind of applied mathematics; one in which you get to play with both idealized and real-world computers. Ok, that's another oversimplification, but it's no coincidence the founding fathers (and mothers :P) of CS were mathematicians, logicians, physicists, and the like. They would scoff at the notion that "you don't need Calculus".
It's perfectly fine to find the research/theoretical aspect of computers uninteresting. It's perfectly fine to want to learn Ruby/C++/whatever and just build your site. But it's not fine to go into CS, and find it too theoretical because they don't just teach you Python (or whatever language is currently being used in the real world), or force you to sit through algebra. In that case, you simply picked the wrong career path, and it's not academia's fault.
This is exactly how I feel. I spent much of my senior year of high school talking with everyone I knew about what options I had to go into website development (which I already had a job doing). The answer from everyone was basically "Get a CS degree, but don't use it. Otherwise nobody will take you seriously". In the end I dropped out since I realized that spending 3 years doing GE and taking classes on things I already understood was a huge waste, even if the last year would have been very useful.
What it tells me is that the journalist is using rhetoric to persuade you into thinking that the computer science program is badly designed, failing to serve poor students like Becca.
This writer's only sources for information about the computer science curriculum appear to be Becca and Dr. Justin Yi, the department chair. Your quote is from Yi, who follows up with this paragraph:
That’s because, he said, these types of academic programs were created to cater to an elite few. They weren’t tailored for the masses. As technology has started to touch every part of our lives, university programs haven’t caught up.
In other words, the program is designed to teach a smart, highly-motivated person how computers work and how to use them, which definitely includes programming and in no way precludes "becoming a developer".
I think we're in agreement, except for a minor point:
> which definitely includes programming and in no way precludes "becoming a developer".
You can of course be a computer scientists and a developer (I'd even say that's an excellent choice), but the point is that a CS education isn't a "programming" education. If you approach CS because you want to program (say, you want to be a web developer, you are in a hurry to start your startup, etc.) you're going to be disappointed. This is because the focus of CS isn't programming languages, but theory. If you like studying logic, proofs, math, theoretical models and you also like programming, then CS is your game!
the point is that a CS education isn't a "programming" education.
I really disagree. Computer Science is supposed to be a comprehensive, top-to-bottom foundation for working with
computers-- either solving problems with them or advancing knowledge and understanding about them. Programming is a fundamental tool for working with computers. You won't get a worthwhile computer science degree without learning to program (not that bad programs can't exist, or that it's not possible to squeak by with passing grades without learning anything).
Computer science doesn't just cover theory and math, but algorithms, data structures, computer architecture, operating systems, networks, and compilers.
I would agree that computer science has a more general focus than "programming." I would also agree that a 4-year investment in a bachelor degree might not always be cost-effective or the best use of your time.
But those caveats aside, A Computer Science degree should be a fine foundation for software development.
Part of the problem is that the field moves faster than colleges. Kids who might be looking for a path to that career that they're aware of, try their best to find a fit. Computer Science is what all the job postings seem to want.
In my opinion, the problem is that people going into these degree programs (CS included) assuming that they will come out prepared to work in those fields.
It seems that many people who are going for a degree in CS are really looking for vocational education in software development [0]. That kind of education can move faster and track changes in the field better than a full-fledged degree program.
[0] And it looks like 'code bootcamps' are what's popping up to address this!
> In my opinion, the problem is that people going into these degree programs (CS included) assuming that they will come out prepared to work in those fields.
Ain't that the big dirty secret about most degrees - you learn most of what you need on the job.
I don't think you can get real-world exposure soon enough, at least so you know what you're working toward. I wish my school had had a co-op program. I dropped out of one program because I realized during a boring internship that this is what I was being prepared for. Instead of straight to college, I'll encourage my kids to get low-level jobs in their desired industry, out of high school (if not before).
This isn't the students' fault, though. In industry, we're asking for a "Computer Science" major, and often times our hiring processes are very CS heavy, when for most of us it only covers a portion of the skills we need, and others we don't. It's sort of like if accounting firms were recruiting math majors, and hiring based on their theorem-proving skills.
It's funny, I'm a senior software developer at Temple University, and I started working here just to be able to take classes at the college (I have my MSc in Comp Sci from Stevens Institute of Technology).
I don't understand what people want from computer science - no thinking? Computer science is awesome because it's hard and you can't just solve problems by beating them up with brute force combinations of things you can find on stackoverflow. Computer science is all thinking.
I'm also female, and this is one of the places I've been where I don't feel like an outsider all the time. I don't know what it's like around the students and professors as a general population. But plenty of my coworkers are students, and some are professors and some have gone off to be full time professors, so... just throwing in a perspective from the other side.
It seems to me that either her academic advisor wasn't knowledgable enough or the student didn't clearly communicate what she wanted from a program of study. She probably would have been happier had she went into Information Systems and Technology. There is a difference in goals between Computer Science and Information Systems and those differences are listed on Temple's CSIT website.
From Temple:
"Computer Science": Emphasis is on the more conceptual aspects of computing, especially as related to program design, and the study of computing systems, including hardware architecture and computer resource management.
"IS&T": Emphasis is on the design, analysis, development and implementation of systems and the underlying technologies that support this development.
> Maybe "software engineering" instead of "computer science".
This is not really any better, just different types of required courses.
At my alma mater, Auburn, the Software Engineering major is actually more rigorous than the Computer Science major. You have to take Cal 1-3, Engineering Physics 1 and 2, Linear Algebra, Differential Equations and Engineering Mechanics [0]. Basically, a lot of the engineering foundations that are shared with other, more physical engineering disciplines.
Computer Science, by comparison, only requires Cal 1 and 2 and Linear Algebra. You can also take an easier core science requirement (like Geology) and, generally, have more freedom to choose electives. [1]
I've thought for awhile now that there needs to be a new major that crosses disciplines between engineering and liberal arts. You need to have some of the math and programming foundations to be a good developer that can move beyond simple entry-level type foundations. But a lot of what I struggle with now is "soft skills": design, user experience, copy writing, documentation, etc. Almost like a blending of computer science and fine arts.
I would love to see someone address this need, because in the modern world where real everyday people use our software (not just scientists and engineers), the latter is just as important as the former.
True, as stated by the quip "Computer science is no more about computers than astronomy is about telescopes", which is mis-attributed to Dijsktra (http://en.wikiquote.org/wiki/Computer_science) but still very much true I think.
The blame is not all on the student, though. It's on CS departments that present a vague picture of what they are doing. Some of these focus on mathematical aspects, some on AI, etc.
"Many of her friends in their third and fourth year in Temple’s computer science department haven’t written a line of code outside of basic Java, she said."
Temple CS '08 grad here. They had us writing C, lisp, and x86 asm (simple multiple precision arithmetic) in the first year. I think she's exaggerating a bit.
Java was introduced in the third and fourth years when they started on higher level data structures and abstractions.
Yes, it is a poor article by traditional standards. It appears the writer did no research at all other than her interview with the department chair (who conveniently appears to agree with the narrative, although it's hard to say whether quotes are taken out of context)
Student wants to learn the vocational art of programming, discovers Computer Science is not about programming, drops out. Sounds like everything went the way it should have.
I majored in CS and there were no end of students complaining about discreet math or analyzing algorithms when all they wanted was to learn what ever the hot language was at the time.
Schools don't need to change CS programs, they need to better market an alternative software development curriculum.
Student wants to learn the vocational art of programming, discovers Computer Science is not about programming, drops out.
If you read more closely, you'll see that's probably not what happened. She didn't drop out because computer science isn't about programming, she dropped out because she had no self-motivation and no real direction. She found the college environment difficult and boring and she found her advisor useless. She was far more enthusiastic about working for the (likely) charismatic, inspiring leaders at Techgirlz.
then nobody, like almost nobody would major in computer science.
the article started off as a good look at where computer science is / needs to go and then disintegrated into a 'why aren't there more women engineers?' ok... why aren't there more women garbage men? erm, garbage people?
anyways, I think computer science programs have come a long long way since the early 2000s. I think the major thing computer science majors have to know is, your education that you pay for will not be enough to succeed. you MUST be a autodidact and teach yourself what is important for the specific thing you want to do when you graduate.
I had the option of a BA in computer science (sans some science and math requirements, plus more humanities requirements) and a BS in computer science. I took the BS, because it seemed like the BA was a "lighter" degree.
I think you're underestimating what 18 year olds are willing to put themselves through.
> then nobody, like almost nobody would major in computer science.
OK. For the sake of argument, let's say that's true. What's the harm? Computer scientists aren't required to deliver babies or anything. Even if they were, do we have a shortage of them?
I feel that most of the interesting computer science should happen at the graduate level anyway. Take mathematics or software engineering as an undergrad, go back to do computer science once you know what you're getting into.
"then nobody, like almost nobody would major in computer science."
That's actually fine. If Computer Science goes more theory and math that would be a good thing. Its really time we start rethinking the vocational part and separating it out. Computer Science isn't a job training program.
I would guess that even Software Engineering students would have to go through Calculus (just because it is a good weed out if for nothing else) and other math heavy, theoretical practice -- just like other Engineers.
What they want is almost a Software Technician degree. Someone that can put together apps and know how to troubleshoot but who are not working on the bleeding edge but putting together technology that others have largely already designed.
There is a huge need for this level of skill but not so much formal training. There are budding movements in that direction but nothing in the traditional higher education landscape or with that same level of trust and recognition.
> Calculus (just because it is a good weed out if for nothing else)
Nothing should be in the curriculum as a 'weed out'. Every class should justify itself in technical content. CS needs calculus absolutely, but for the ideas, not as a hurdle.
For chemical engineering I (barely) remember taking Latin. And this at a school that prides itself on engineering focus and keeping things tight.
Hell, my wife had to retake an art and history class to get into a nursing program because photography and cold war history didn't 'count' somehow.
I'm all for paring that kind of fluff down.
Then again, there is something to be said for weed out courses. They are easy to teach therefore easy to find resources for, they are generally useful (for many calculus is their first introduction to proofs outside of geometry), and so you can pack a bunch of hopefuls in before wasting more specialized time and effort on lost causes.
I wouldn't call it a "Technician" since that gets a little confusing with certificates and such, but I take your meaning. Basically these folks are looking for what a technical college would teach but they want a university name on their diploma.
Many of her friends in their third and fourth year in Temple’s computer science department haven’t written a line of code outside of basic Java, she said.
What. You can't just make a claim like that without justification. In 5 minutes of search, I found a "sample course sheet," for a Junior CS major, where the fall semester recommends "CIS 3238 Software Design [1]. One syllabus[2] is available from a professor's website[3], and includes this project description:
The goal of the project phase of this course is for students to gain experience in contributing to an open source project. The nature of the contribution may be to contribute an enhancement or to fix an open problem. Students may work alone or in a team of up-to 3 students. While project work will be concentrated to the last half of the course, you need to select the project early and join the developer’s mailing list.
If you are a computer science major and are not writing code, there should be some explanation. A journalist should try to find answers to those questions.
If you just want to be a code monkey, you probably don't need to go to college. You don't need a college education to build web pages.
If you want to do anything more interesting than that (AI, embedded systems, HPC, etc.), then college may prove useful.
Also, this person's experience of barely programming by senior year is highly atypical. Many CS colleges today don't even have pure theory courses until a few years in.
CS programs at American universities run the gamut. A well balanced CS program will teach fundamentals/theory and also application of that knowledge. Perhaps Temple's CS program is heavy on the theory in the early years (or even through all levels). That does not mean that CS or even this specific CS program is not relevant, and I'd go as far as saying "extremely relevant" to creating software.
I see many folks who graduated with a degree in something other than CS that do well in the software industry. That said, I also see fundamental mistakes made frequently in the design and architecture of software (and I'm not talking about ignoring common design patterns). For relatively small sizes of N this is not a problem, but once something needs to scale (which is often the case if your creation becomes successful) then the proverbial fit hits the shan. A CS degree doesn't necessarily solve this, experience plays a large part too.
I think someone who is not yet a member of an industry dismissing a curriculum out of hand is pretty foolish though.
I graduated from Notre Dame with a Computer Science and Design degree. While the CORE classes are heavily theoretical and forces you to think about fundamental CS concepts (Theory of Computing, Programming Paradigms, Data Structures, Algorithms, etc.), there are electives tailored to learning how to program. I took electives in Mobile Application Development, Building Web Apps, JavaScript, Database Concepts, Data Mining, Human Computer Interaction and Healthcare Analytics. We even have electives in Cloud Computing that allows people to learn how to use MapReduce and other cloud frameworks. If there was something that I wanted to learn that wasn't taught in a course or elective, I either learned it through research (Data Mining & Machine Learning, along with Distributed Systems) or through learning it in my free time on my own (Ruby on Rails and EmberJS). People can't expect Computer Science to teach them how to be a Rails developer, but should take the initiative to teach themselves after they get the fundamentals.
The theory, I think, is nice for a small subset of who we call programmers now. The article highlights that there is a huge demand for what you might call blue-collar programmers who don't need to care about theory, because there are plenty of simple, non-groundbreaking jobs to be done. Your basic CRUD apps.
Those blue-collar programmers need not only more of a vocational education, but tools to match. Higher-level programming languages help. In mobile app development that's what's driven demand for PhoneGap and newer tools like Glide, again for those common, boring apps. https://www.kickstarter.com/projects/1783091318/glide-beauti...
But isn't that why there are coding bootcamps to allow those blue-collar programming positions to be filled? Like the Iron Yard, General Assembly, Hack Reactor, etc. I think there needs to be more advertising of these alternatives to a Computer Science degree if thats what somebody really wants to do.
In my opinion, if you want to learn how to be a software engineer you should take a degree in Software Engineering (which is a natural descendent of Electrical Engineering). If you want to be a computer scientist then do a degree in Computer Science (a natural descendent of mathematics). The problem is that the courses in many universities are misleadingly named.
But they're still not going to let you skimp on the calculus classes. I do think 4-year degree programs should offer people more opportunities for the practical aspects. These don't really have to necessarily be part of the curriculum either.
I did two summers in the College of Wooster's Applied Mathematics Research Experience (AMRE) program, where they paid us a small stipend and provided on-campus housing for the summer. It was run as a little faculty-advised math/comp-sci/econ consultancy to help local businesses, and it was possibly the most valuable thing I got out of college.
All without having to skimp on actual computer science and math in the curriculum. These things are supplemental, not exclusive. And of course not everyone needs to go do a full 4-year degree if they just want to get out and make software.
But those people shouldn't be in 4-year computer science degree programs. And we should stop talking about this issue as if it's computer science that needs to change. It's about making people understand their options and what they will and will not get from each. For most quality CS programs, you have to pursue the practical outside the curriculum. For a code school, you might have to do some self-exploration about common problems encountered in computer science.
Everyone needs to find their own correct balance for their personal abilities and goals.
This! Looking back at my career I didn't really learn to program properly until I was in an industry job staring down the barrel of a massive codebase collaborating with colleagues across different teams. It was great.
But time and time again I find my strong theoretical grounding in computer science coming in handy. The last time I hit the front page of HN was with a blog post about how I spotted an NP-complete problem in $m+ enterprise system for insurance companies. It would have gotten to clients with unresponsive brick-like performance if they upped a couple of parameters because my colleagues didn't understand the Curse of Dimensionality and why it was important.
I'll admit that college professors can live in their own world of academic navel gazing, but there is an actual point to theoretical computer science. And the best time to learn is when you have the time and freedom from short term goals and arbitrary client deadlines. If only there were a few years we could devote to such endeavours before entering the workplace. Hmmmmm...
Right, I get that. But if you look at job listings and see one for "computer scientist" and one for "software engineer," what sorts of things would you expect to see under each listing's "required skills" and "duties/responsibilities"?
I wouldn't expect to see a job listing for a Computer Scientist at all. Except maybe at Google? 99% of the market is writing code.
Maybe that's broken - more shops could sure use a good designer who understands the complexity of problems. But I don't see designers very often, and I've worked at dozens of places.
I've spent a lot of time helping to hire coworkers for a rather good remote position, and having worked with the ones that passed all of our filters and also accepted the position. It's still a bit early, but I've found that the difference between someone who actually got a proper CS degree, and someone who learned to "code" on their own is pretty stark.
The fact is that calculus, algorithms, data modelling, and the like are often very relevant to programming once you are past the entry level positions.
I don't have a CS degree, but even in entry level positions, it crops up when you least expect it. My company gathers data off of truck engines, with a data sample every .3 seconds. The data samples contain things like instantaneous "fuel rate," "vehicle speed" and other "rate" values. If the manager says to me "erroneousfunk, I want the cumulative fuel usage values over time, in a graph" I need to know that they're looking for the second derivative of the fuel rate, and how to model and summarize that data in the database appropriately for a fast processing and lookups across any combination of companies/drivers/trucks/date ranges they can think of.
Yes computer science is "different" from software engineering, but not all computer science curriculums are purely theoretical. At least in ucla, all theoretical classes have several hands on labs. I finished UCLA as an electrical engineer but the computer science courses I took taught me basic skills that I needed to become a good programmer.
IMO, I think most university curriculums involve this sort of hybrid education that involve labs/projects combined with theoretical lectures. I'm guessing the type of courses taught in Temple are not the norm.
However, the other perspective the journalist could have explained was that the students misunderstood what a "computer science" degree actually is. The Computer Science curricula grew out of the Mathematics department. That's why it has classes on topics like automata, algorithms, proofs and theorems. Studying those topics will seem very irrelevant when they notice other Javascript programmers earning $100k to make HTML elements blink on and off.
These students were really wanting a "programming" curriculum. Maybe "software engineering" instead of "computer science".
A person who wants to repair car engines could try for a degree in "mechanical engineering". There's no doubt the mechanical engineers who work at Ford/Toyota/BMW can replace a spark plug and change the oil but there will many theory classes that won't feel relevant to the daily work of a garage mechanic.