Hacker News new | ask | show | jobs
by basseq 4974 days ago
The key question that some have touched on is this: What should comprise a CS degree? (E.g., should these (and/or other areas) be a part of a CS degree?)

I think the right balance needs to be struck between the academic and vocational views. Big-O, grammar, automata, etc. are the fodder of academic papers, not the Real World. But when you talk about higher ed, here's the rub: its supposed to be the theoretical foundation, not a purely vocational preparation.

The danger of the more vocational point of view is that you're supporting what I see as the slide from "skilled software engineering" to "coding". (Think the difference between having John Carmack on your team, versus some guy making $8/hr in a developing country.) This is hyperbole, but if you focus on the day-to-day elements of any job, then you're advocating for movement to a technical school curriculum (which, right or not, has a different level of career momentum, responsibility, etc.).

CS (using the term to apply to the genre, inclusive) is maybe unique in that there are very vocational components, but also very intellectual/academic components. I think, like any career, there are going to be Things You Don't Know coming out of school. Interviewing, for example. Is that in ANY university-level curriculum, for ANY major? Are you expected to be 100% "operational" in a particular job immediately after your degree is awarded? Moreover, since when are all CS jobs the same? Why should it be any different for CS?

This is what bothers me about this argument: CS is not equal to programming, and not equal to a (particular) job.

And moreover (and I think most here would agree), the greatest hallmark of a great "technical thinker" (programmer, academic, problem-solver, tester, DB admin, whatever) is their willingness, nay INTEREST, in pursuing the details of their craft beyond the structure of a class or a job or (god forbid) an employee handbook.

I don't want to work with someone who goes through the motions. I don't want to work with someone who comes out of college thinking they're prepared for their capital-C Career. I want a lifelong learner, and someone who wants to get into the guts of operations and make an impact.

Educate and train for THAT.

5 comments

> Big-O, grammar, automata, etc. are the fodder of academic papers, not the Real World.

I have personally needed all of those things in the Real World.

I suspect that if more people remembered the stuff they learned in college, it would get a lot more use. "I'm never going to use this in the real world!" can be a terribly self-fulfilling prophecy.

I knew someone would come in and say that! (And I enjoyed my classes on automata.)

You're right, though. Which goes back to my question around what should be part of a formal education? I bet HN could come up with 10 years worth of courses that are "essential", plus another 10 that are "nice to haves".

The easy heuristic here is approval voting: award one point to a subject each time someone mentions it as a "nice to have", and 2 or 3 points to each "essential", then tally up the votes to get a ranking. Truncate it at four years' worth of classes, and you have a curriculum!
"(Think the difference between having John Carmack on your team, versus some guy making $8/hr in a developing country)"

A CS degree, or any formal education, has little to do with what kind of programmer you are going to be. You can take a completely vocational approach in school and move on to other work individually. Or the other way around. You will end up being the type of programmer you wish to be regardless of CS. Case in point, John Carmack. And in the other direction, the thousands of CS grads who every year simply churn out "whatever works" once they are in the field and forget about all they were supposed to be learning. I would encourage students to be less critical about what it is they are actually learning in school, because it's what you do after those 2-4 years that will really matter.

Point taken. (The problem with hyperbole is that there's always an exception: I know some very bright technical minds in "developing countries".)

But we're talking about "formal education": how do we develop strong technical thinkers?

I sincerely hope every practical developer knows the complexity and costs of their algorithms, can write a simple parser, and reason about finite state machines (ie, the non-trivial systems people build). I do get what you mean: CS is different than practical skills. Pure theory is interesting and less practical but all the things you mentioned have lots of uses in practice. You don't write a formal proof for every little thing but you use the conceptual tools.
I'd expect managers who hire young people out of universities expect the conceptual tools and the theory, with the weakness being practical experience. And I'd say this is true across all majors (even vocational schools).

And to my mind, that's the correct order: I'd rather teach someone the practical components rather than the theoretical ones while they're on the job. (Not to mention that practical components—even programming languages—are quickly out of date. Theory has a much longer shelf life.)

Oh, and here's the rub for me: I don't use my CS degree. Besides pet projects and a general understanding of technology, I am not technical. The vocational approach Catalyst is recommending would have made me a better software engineer, but more poorly prepared for other career opportunities.

I hire CS majors (and more broadly, engineers) into business positions because of the core skillset: problem solving and a desire to figure out a solution.

I didn't read anything on the site that said they wanted to specifically talk about CS degrees.