

 What did you cover in your undergrad CS degree? - sharksforcheap
http://catalystclass.com/2012/10/29/undergraduating/

======
basseq
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.

~~~
pjscott
> 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.

~~~
basseq
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".

~~~
pjscott
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!

------
barakm
So I did EECS at Cal. And while some of these things are definitely in the
category of software engineering and not computer science, I have to say that,
in the few years between my undergrad and today, I've kept in touch with the
community. And it's my sense that a lot of skills which one might find on this
list are starting to be emphasized more: testing, version control, scale,
timelines, communication -- so it does feel like undergrad curricula "get it"
and are supplementing the standard courses with some generally useful stuff.
Not replacing, but suggesting/providing/using some of the useful stuff in the
context of the greater course.

I'm a little surprised schools didn't touch upon complexity already; that's
been around for awhile. Yet, it is the biggest category in the responses, so
that's probably why.

I'd also say that things like deployment, sysadmining -- _browser
incompatibilities_? These are a lot more role-specific and better learned in
situ. If the guy who knows browser incompatibilities needs to know how to do
deployment, you are either (a) a pre-funding startup or (b) spreading your
talent kinda thin.

I'm sure most of the responses here will say something like "I have never let
my schooling interfere with my education" -- which is all well and good for
you. But if we want more and better candidates, it couldn't hurt to adopt some
of the best-of-the-best practices (version control!) into CS curricula.

------
anusinha
This doesn't look like a CS degree---this looks more like software engineering
requirements. CS and SE focus on distinctly different things. I might suggest
changing the page title.

~~~
gte910h
Many CS degrees are all there are at institutions. SE is merely a focus you
can take in that.

------
lumberjack
Personally I find things like version control and system administration to be
things that students should learn for themselves. They should be encouraged,
even actively encouraged (in fact they are already in most institutions) but
there shouldn't be a class dedicated to this stuff. You are in University,
studying CS ffs. If you can't learn such petty things for yourself, what good
are you?

~~~
irreverentbits
This is exactly the sort of condescending attitude that pisses me off about
the CS program I'm currently concluding. Why should software engineering be
considered "petty" in relation to, say, the study of formal languages and
automata?

The vast majority of students in my program honestly don't give a flying fuck
about the academic opinion that CS shouldn't behave like a vocational school -
the intent is to go into software development, and CS is the only offering
that touches on it. Yes, we're all capable of learning various things on our
own (including the theoretical aspects of CS, as instructors in these fields
are typically so incredibly incompetent that students are required to teach
themselves, anyway), but that's not a justification for providing an education
that is largely irrelevant.

If I really wanted to study theory and computational mathematics... I would
have studied computational mathematics.

Were it not for the perceived value of a CS degree, I suspect a substantial
number of students wouldn't even bother, and probably flock to Coursera, etc.

~~~
beering
Well, it sounds like you signed up for fine arts when you actually wanted to
be a carpenter.

And you're forgetting companies like Google, Amazon, etc. who expect
candidates to know CS theory pretty thoroughly. What kind of school would be
proud of grads who couldn't get into one of these top companies? Software
engineering is also easier to pick up on the job than in school, and vice
versa for the theory.

It's condescending to describe CS theory as "largely irrelevant", but this
also sounds like a case of sour grapes. There are plenty of tech curriculums
that are light on CS theory--try looking for "Informatics", "IT", "Information
systems" and so on.

------
marvin
-Philosophy of science, the scientific method

-Object-oriented programming

-Basic calculus

-Basic discrete mathematics

-Linear algebra

-Algorithms, data structures and asymptotic analysis

-Basic compiler design

-Theory of computation, Turing machines and formal languages

-Basic practical computing technology, from the gate level

-Basic software engineering: SE methodology, version control and developing software in a team

-Cryptography, ciphers and data security

-Overview of the role of operating systems

-Networking, encapsulation and the TCP/IP stack

-Basic web technology, server-side programming and client-side scripting

Anything outside of this, I've learned on the job or in my spare time. This
includes AJAX and the use of heavier web technology. To my intuition, this is
more descriptive of an undergrad degree in computer science rather than a
software engineering degree. But it'd be nice to hear what others think.

~~~
eru
I don't see what OOP has to do with Computer Science. Isn't that Software
Engineering?

~~~
marvin
I agree, but this is where my department is being pragmatic. A computer
scientist with no experience at all in OOP or basic software engineering will
initially be pretty useless in the private sector, which is where 90% of
graduates go.

------
TwiztidK
On the results, rather than displaying the % of votes that each subject
received, it would be more helpful to show the % of voters that selected it.

 _Instead of this:_

Total voters: 613

Total votes: 3168

Designing data structures (543 votes, 17%)

 _Show this:_

Total voters: 613

Total votes: 3168

Designing data structures (543 votes, 89%)

------
hkarthik
I graduated with a CS degree ten years ago and I could only check the
following:

Designing data structures Analyzing algorithmic complexity (Big O)

Version control was glossed over in my class with little importance given to
it.

~~~
pbhjpbhj
Yes, the date when one was studying is a vital facet of the data being
gathered here. It's a big oversight IMO to have missed out on asking a
question to gain date information (eg graduation year).

I've only got, in this respect, an undergrad diploma in computing and covered
6 of these things in any depth; it would be around the same time as you were
studying and we never covered version control at all.

------
antiterra
Browser incompatibilities? That's a candidate for the 'information to be most
quickly rendered outdated/irrelevant after graduation' award. I would rather
spend my $1400 a credit hour on poetry workshops (and I did.)

~~~
eru
Are American universities really that expensive?

------
Mystitat
The table of results is hard to read. More contrast between the results bars
and the background would help.

------
zt
"We believe that the bar for training and hiring of front end JavaScript
developers is even more attainable, and that is why we have chosen to be the
first, and as of now, the only training program specifically for that market."

You know what I want--a twelve week, intense course on scientific computing in
something like Python--for people who already know some core scientific
subject and statistics. If we took [http://www.drewconway.com/zia/wp-
content/uploads/2010/09/Dat...](http://www.drewconway.com/zia/wp-
content/uploads/2010/09/Data_Science_VD.png) as a guide (and yes, yes, data
science is just a name for something that has existed for twenty years), I
want a program to move people from traditional research to data science.

------
joncalhoun
I feel like there should be a follow up survey asking recent grads what their
degree enabled them to learn outside of their coursework.

My CS degree hardly taught me anything in comparison to everything I learned
outside of my coursework, but I don't feel like my coursework was lacking. On
the contrary, my education allowed me to learn new things on my own that would
have been significantly harder otherwise.

eg a basic algorithm course lead me to get involved in TopCoder. An
introductory course on software development (source control, testing, etc)
gave me enough knowledge to find an internship where I learned about peer
reviews and how to work effectively with a large codebase - something that is
very hard to pick up in a semester of college.

------
anonymoushn
I got to check three of these, but one (version control) was only because I
took game programming. A person could easily earn a CS degree from my school
without using version control for any class.

------
archagon
One thing that I wish my undergrad CS degree taught me was how to manage and
structure larger programs. It's a vast topic that I still have a lot of
difficulty with two years into my career.

------
breckenedge
So did anyone ask these same questions to businesses that hire CS grads? How
about business that hire programmers/non-CS grads? Would be useful to see the
flip side.

------
TYPE_FASTER
CompSci should include at least a semester or two of business classes,
including the delegation lessons in the HBS article posted earlier today.

~~~
pjscott
Be careful when saying things of the form "$DEGREE_PROGRAM should also include
at least one class in $SUBJECT." You can make persuasive arguments for the
relevance of a dizzying range of subjects, and at some point you have to
prioritize.

------
j45
Very little that was directly transferable to the real world. Some may argue
this doesn't apply to CS, but I think applied computing science is what I'd
look for.

Things that were not covered included:

\- Basic business skills

\- Basic sales skills (We all have to sell our ideas, be it to peers,
departments, customers.)

\- Storytelling skills

\- People networking skills

\- Understanding very few businesses have technology problems, but instead
business problems that they are trying to solve with technology.

\- You don't understand anything if you don't understand how the data in any
system inputs, exists, interacts, and outputs. You don't understand the
business if you don't understand the data. You should not be allowed anywhere
near building software for an organization if you don't understand the data.

\- Understanding that the data in many ways is the system. No software/system
is useful without data.

\- Learning an organization's competitive advantage and magnifying it with
software. Too often programmers interpret things killing the competitive
advantage.

\- It's not about you, it's about the user. Users rarely care what you code
in, or the frameworks, or whatever you've done to make your own life selfishly
easier and continuing to neglect actually getting to know their world, their
data, and the the problems they face with it.

\- Marketing skills - eliminate feature babble and focus on benefits once
you've been in user's shoes working on users problems.

\- Communicating with the world to first understand, and then address their
needs. You are no better than a technically clueless business guy if you make
assumptions as blindly in other ways about the business process.

\- How the real world does not start every project with a clean slate like CS
projects. This is probably one of the biggest gaps.

\- Learning to learn other people's code, refactor + more.

Instead, we learned the theoretical using many languages building the same
kinds of things over and over for 4 years. It was awesome to the geek in me.
Sprinkle in some UI or database skills, and yes, I did get very good at
learning any technology I needed, but implementing it in a meaningful,
sustainable way. But the real world used very little of what I learnt for 4
years.

When I took CS in the late 90's I had to learn to build web apps, databases,
load balancing, administrating servers, all on my own, not to mention getting
a business education largely by learning to swim by diving in.

The social skills are really big. Partially I think CS attracts folks that
aren't extroverted, and it can be a problem.

We're at or nearing a crossroads in my opinion where the entire world has come
to the internet and technology, and those building technologies and online
need to be better bridges in interfacing with humanity.

~~~
aidenn0
Where I went to school (Purdue) there was the school of engineering and the
school of technology. The theory (at least) was that technology had more of
the business side of skills as you suggest.

The downside was that more time on business meant less time on engineering,
and you ended up with people that dropped out of the engineering school,
combined with people that may not have been able to hack it in the first
place, and a tiny minority of people that could have passed in the engineering
school.

This means that as a signalling tool (which is a large part of the value of a
college degree in the workplace) a technology degree was far less valuable
than an engineering degree, which causes a feedback loop to keep the number of
people with actual engineering talent low in the Tech school.

This is from my observation of EE vs EET as I knew people in both majors. CS
was in the school of science, not engineering so it had no equivalent in the
school of technology.

------
mememememememe
I am not surprised with "Interviewing candidates" getting low score, but it
did receive some votes.... any proof?

