
Most of our CS students suck at CS - drm237
http://bluntobject.wordpress.com/2008/01/22/most-of-our-cs-students-suck-at-cs/
======
jey
Most CS students don't care about CS, and there's nothing wrong with that.

Our society shouldn't look down on trade schools so much. There's too much of
an importance placed on the prestige of graduating from a university, making
everyone feel pressured to go to a university. These kids are wasting their
time (and their parents' money) if they don't care about the material and are
never going to use the material anyway. They're just there to get the rubber
stamp from the university to impress their family, friends, and employers.

This emphasis on the college degree as a sign of prestige has a toxic side
effect: the people who _do_ care about the material get a diluted version of
the material to better serve the university's goal of graduating as many
people as possible.

I want to see more schools in the style of Digipen. Digipen offers a rigorous
degree in "Real Time Interactive Simulation" -- in other words, Game
Programming. They really do learn to code, and they really do learn the
relevant mathematics for 3D graphics, physics simulation, etc. They probably
don't sit through irrelevant courses on the theory of computation or
programming language theory. Why aren't there similar programs for programming
in general? You should be able to go to a trade school or university and get a
solid and comprehensive degree in programming. And society should respect you
for it.

Sidenote: I do think that it's possible to do this without devolving into a
technology-specific curriculum. You can (and should) still teach at a
conceptual level, with individual languages and APIs considered implementation
details. I'm not advocating creating a degree in ".NET Programming" or "Ruby
on Rails Programming" that'll be obsolete in 2 years.

~~~
rcoder
While I agree that trade schools are a Good Thing &#x99;, I have to
respectfully but strongly disagree with your assertion that theory of
computation and programming language semantics and implementation are somehow
unimportant for any student of programming, whether vocational or theoretical.

True, it may not be terribly illuminating for a game programmer to rigorously
prove historical theorems in computability or complexity theory. However,
understanding the practical importance of big-O notation, the equivalence of
any Turing-complete language, (as well as the lambda calculus, partially-
recursive functions, etc.) and compiler design will all be of _massive_
benefit when they're looking to actually distinguish themselves from the rest
of the assembly-line game coders.

Overall, though, +1 on the idea of a solid two-year "Computer Programming"
degree. Leave CS as a truly academic realm, and give those who are just
looking for a solid white-collar career path a respectable path there.

~~~
jey
I do think that Big-O notation and computational cost should be covered in a
practical and intuitive way, but I'm not convinced of the utility of teaching
Turing computability, programming language theory, or compiler design. You say
that this "will all be of massive benefit when they're looking to actually
distinguish themselves from the rest of the assembly-line game coders", but I
think that anyone who wanted to get that real depth of knowledge and set
themselves apart from the crowd should get a CS degree and (most importantly)
continue learning on their own. What I'm envisioning for the trade school is
purely what you describe as "a solid white-collar career path". I think
there's a lot of people who are looking for a career that pays well and that
they enjoy, but aren't interested in becoming an expert in their field, or
making their career also their hobby.

------
motoko
I'm getting tired of this suck-up ego parade about "how everyone sucks (except
'us')."

~~~
amichail
What I find most frustrating is that people don't talk about the importance of
application-level creativity. It's all about implementation.

The secret is that implementation is not interesting nor rewarding -- whether
it's done in Java or C or whatever. It only becomes interesting when you are
innovating at the application level.

And so, CS as a whole is a depressing field. Most jobs are unrewarding since
you are told what to implement.

It's sort of like being asked to translate a novel from one language to
another or to improve its grammar. I would rather write my own novel.

~~~
shawndrost
"implementation is not interesting nor rewarding"

I disagree, and I don't think I could write code for a living otherwise, 9-5
or startup.

~~~
hello_moto
your own startup or working for "a startup own by someone else"?

I've been through the 2nd one and it's just the same as working 9-5 believe it
or not.

------
jsjenkins168
Interesting about the mention of a relationship between building Legos and CS.
The correlation between the two has been a theory of mine for a while. At
least I have not yet found a hacker who enjoys building legos (or did as a
child) that sucks at or doesnt enjoy building software. I have a feeling the
mindsets required for both are strongly correlated.

~~~
apgwoz
When I was a wee lad, I didn't know what software was, but I had a huge box of
legos and an imagination. My parents would buy me the playsets, and I'd build
them to get ideas about how "masters" built things and would proceed to
immediately take them apart and build new things with the pieces and the
knowledge. This also happens to be what good hackers do. Hackers are always
reading code, reading about code and learning what the "masters" do. Then they
piece together all that they learned and create something new. It's the same
exact process, and that is why your theory is correct.

~~~
abossy
I never had enough legos to built anything creatively substantial. It was like
writing a program in ASM with only ADD, JUMP, and LOAD.

~~~
jey
Add a jump-if-zero instruction and that might actually be Turing complete
(assuming your ADD instruction will eventually overflow).

~~~
procrastitron
Actually, if the JUMP instruction allows an indirect address, then it is
already Turing-complete. I know X86 treats indirect jumps as a separate
instruction, but it's not hard to imagine an assembly language where the two
use the same instruction.

EDIT: Nope, we forgot there is no STORE instruction. Thus, no way whatsoever
of writing output.

~~~
jey
Oops, good point about the indirect JUMP instruction.

Maybe we don't need a STORE. The ADD instruction could operate directly on
memory operands. Then I guess we can ditch LOAD too.

------
wallflower
As much as I'd like to say I could do low-level CS, I'm honestly not that good
at algorithms. Quick sort? I'm good at problem solving, which is what I think
matters.

Before I knew better, I used to laugh at those people who found careers doing
boring stuff with corporate applications (databases, etc.). The best part of
my job is creating something from scratch - a blank screen of an IDE (when not
fixing issues). And if we have excess energy after the workday/or on the
weekend, we can always exert our creativity on open-source or personal
projects. I love software development for the development aspect. How cool is
it to say (or not say) to your friends that you could build a cool web startup
(the tech is not that hard, except with exceptions)?

~~~
andreyf
_As much as I'd like to say I could do low-level CS, I'm honestly not that
good at algorithms. Quick sort? I'm good at problem solving, which is what I
think matters._

What's the difference between algorithms and problem solving?

~~~
amichail
It's a particularly difficult subset of problem solving.

~~~
Xichekolas
... an algorithm is a series of steps to solve a problem. If he is good at
problem solving, he should have no problem with algorithms.

Now, I think a lot of people are bad at remembering every algorithm they are
taught in a class. Unless you use it a few times, it's not likely you will be
able to implement it off the top of your head, but that is what the internet
and all those useful CS books are for.

~~~
amichail
I mean it's difficult to discover non-trivial algorithms on your own.

~~~
andreyf
But seeing examples of non-trivial algorithms makes what you once considered
non-trivial, trivial. A lot of algorithm design seems to be a kind of poetry
to me - where one draws on similarities to algorithms she's seen before, as a
poet would draw on metaphors or imagery they've experienced elsewhere.

------
derefr
What would happen if one school actually decided that they would go the other
way, and fail anyone who "sucked"? Wouldn't that school then get a good
reputation for graduating only "great programmers," pushing any aspiring
programmer to apply there--a virtuous cycle? The top schools in any field
graduate the best simply because the best apply there, and the best apply
there simply because "the best" are known to graduate from there.

------
choward93
I know this is amateur question, but I am taking my intro to programming class
this quarter, and we are learning with Python(and pseudo-code, if that counts)
am I doomed to being a crappy programmer? I was notorious for being a Lego
addict when i was a kid, and i am taking the classes because i need a formal
education on programming, so i would like to think I am not part of this
group, but am I getting off on the wrong foot?

~~~
rms
No, python is great to learn on.

What school do you go to?

~~~
motoko
MIT recently changed their curriculum from Scheme to Python.

If it's good enough for MIT...

------
mberning
Remember when people actually posted constructive compsci/programming articles
that covered a wide variety of topics? Neither do I.

This current obsession with programming supremacy and geek dick waving is
absolutely pointless.

If Universities started churning out uber hackers that were "20x more
efficient" than last years model all these guys would start crying about how
they can't get a decent paying job.

