Live data from Hacker News

Ask HN: What's missing in a CS degree?

news.ycombinator.com

41–50 of 64 posts

Re: Ask HN: What's missing in a CS degree?

#41
post #13
post #3

A nice start would be actually teaching Computer Science . Computer Science is a branch of mathematics, with both theoretical and applied aspects. This does not mean that learning Java syntax constitutes as "applied". I think it should be expected that CS students pick up languages on their own in order to complete and understand theory-based assignments. Anything else is probably just pandering to people who shouldn…

There's always this tension between the pragmatists and the theorists. I figure we just split it in two. CS focuses on research and theory. CP(rogramming) focuses on the pragmatic and artistic nitty gritty of building software. Now, I personally wouldn't advocate majoring in programming, because you really should just R the F'ing M, and make stuff on your own. But it's hard to argue against its validity as a major wh…

>CP(rogramming)

It's called "Software Engineering" and some schools (like RIT) already have separate degrees for it.

Re: Ask HN: What's missing in a CS degree?

#42
I suspect a lot of CS departments don't encourage/teach teamwork. I majored in CS at Georgetown and never wrote code with a partner. Then I spent two years at Stanford doing a MSCS and did group work in very nearly every class...which was extremely valuable.

So, my advice: Learn to write code in a team.

Re: Ask HN: What's missing in a CS degree?

#43

I graduated last may as a computer science major and realized the holes in my skills were everywhere. I found that my theory was much better than my actual ability to code. It seems that schools should teach their students one oop language for three years and then start showing them what other options are out there. I found myself in the working world convinced I knew how to code in java, c++, python and php, w/o the…

Isn't this true of all degrees? I have a friend who got a MSc in financial mathematics, and she said she was quite surprised to learn that all the quant math she had studied for her degree was basically scoffed at as "academic" once she got her first job. The same is in fact basically true for just about everybody I know, no matter what the field. If you went to university expecting vocational training then you where basically doing it wrong.

Re: Ask HN: What's missing in a CS degree?

#44
Generally speaking, CS programs out there seem to lack both depth and breadth, be out of touch/time with "the desert of the real", and suffer from what Dijkstra called "the infantilization of curriculum". Too often do I see people who are proficient (for some value of "proficiency") in one (1) language, usually the wrong one. I believe that a CS program ought to introduce you to several languages, to a level where you can read and write programs of small to medium size (~1 kloc). At a minimum, in this day and age I would expect C, your least favorite mainstream language (though I personally would avoid Java, due to combination of a lack of an explicit reference type and a misguided OO fetish), something from the Lisp family (Scheme), and Javascript. Something from the ML family would be a bonus, though I would skip type theory altogether. Having been exposed to several radically different languages helps. I would ask everyone to write an interpreter for a simple language (in a language of your choice): something with variables, conditionals and function calls. A compiler for the same would be a nice next step. As projects go, this would be sufficiently involved to address Dijkstra's complaint part of the way.

A few people said something to the effect "the real world is missing". It's true. Majority of CS programs appear to be years out of date with respect to the industry practice, whatever "the industry" happens to mean for you personally. To some extent this is inevitable, though we could be doing a lot more to address the issue - say, as someone suggested, via a separate course, one that is updated biannually. A course like this could and should include a discussion of things like source control tools, build tools, etc. Things like resource management idioms in languages of the day should be discussed explicitly: too often graduates of CS programs assume infinite resources or automagical cleanup, especially if they come from a background in languages that are garbage collected. A course in parallel programming presented via different languages and their approaches to parallelism would be fantastically useful; I would pay money to see it on OCW or similar.

Somewhat related to Dijkstra's complaint is the following concern: people are terribly bad at thinking about complexity, at all levels - from a single source file to a system composed of hundreds of separate processes. We would do well to discuss managing complexity explicitly in CS curriculum: to make people think about difficulty of maintenance, changes to a working system, rollout procedures for uptime, etc. A seminar on the subject of complexity management, from small to large scale, with examples, would be very useful.

Incidentally, this is something I have been thinking a lot about over the last two years, in part due to conducting a metric shitload of interviews for intro positions. There are things that my CS program was missing, and things that a majority of programs out there seem to be missing; understandably, what I can say mostly applies to the former.

Re: Ask HN: What's missing in a CS degree?

#45
post #40

I've started realizing just now that your standard CS degree is completely useless in the real world. I feel like I've learned absolutely nothing in these two years. Fortunately, a combination of real life events and comments from people on HN has opened my eyes to what I don't know. So, here's what you - correction, we - need to do to complete our education: 1. Contribute to a FOSS project, or start and manage your…

>I've started realizing just now that your standard CS degree is completely useless in the real world. I feel like I've learned absolutely nothing in these two years. Does that mean you're a sophomore? If so, you've probably just learned the most basic foundations of CS. I've done 6 years of CS (I was a CS major and I'm just about to finish my master's) and I'm pretty sure I've become a better programmer every year.…

Yes, I'm a sophomore.

I attend IPU, which is more or less a Java school. What they teach us here is geared towards the lowest common denominator. I can confidently say that I could've learned everything IPU has taught me on my own. I've been teaching myself since high school, so I don't find picking up new stuff very difficult. If there's something I don't understand, I ask someone on IRC/Reddit/StackOverflow/HN. The world is full of smart, helpful people you can learn from :)

YMMV, depending on the school you attend.

Re: Ask HN: What's missing in a CS degree?

#46
post #41
post #13

Earlier quoted context omitted.

There's always this tension between the pragmatists and the theorists. I figure we just split it in two. CS focuses on research and theory. CP(rogramming) focuses on the pragmatic and artistic nitty gritty of building software. Now, I personally wouldn't advocate majoring in programming, because you really should just R the F'ing M, and make stuff on your own. But it's hard to argue against its validity as a major wh…

>CP(rogramming) It's called "Software Engineering" and some schools (like RIT) already have separate degrees for it.

Yeah, I should have assumed there'd be degrees available in Software Engineering. But "Software Engineering" is such a misnomer. [rant on how we don't know how to "engineer" software]. My "Software Engineering" courses were straight up awful. The degree I'm imagining would focus on the way software actually gets written -- the wrestling with problems and the straining toward creative insight. And you'd do a fuck-ton of coding on interesting and substantial projects.

Re: Ask HN: What's missing in a CS degree?

#47
post #40

Earlier quoted context omitted.

>I've started realizing just now that your standard CS degree is completely useless in the real world. I feel like I've learned absolutely nothing in these two years. Does that mean you're a sophomore? If so, you've probably just learned the most basic foundations of CS. I've done 6 years of CS (I was a CS major and I'm just about to finish my master's) and I'm pretty sure I've become a better programmer every year.…

Yes, I'm a sophomore. I attend IPU, which is more or less a Java school. What they teach us here is geared towards the lowest common denominator. I can confidently say that I could've learned everything IPU has taught me on my own. I've been teaching myself since high school, so I don't find picking up new stuff very difficult. If there's something I don't understand, I ask someone on IRC/Reddit/StackOverflow/HN. The…

Fair enough, though one important thing about CS is that when you're starting out, you don't know what you don't know. Also, like I said, after you do the basics you can get into the fun stuff (graphics, AI, theory, etc.; whatever floats your boat).

Also, I haven't attended a "Java school". Most of my undergrad projects were in C++, and in grad school I've been forced to use Java in maybe 3-4 classes but have done at least one project in each of Lisp, Python, C++ (actually I think this is the plurality), and C#. That said, I'm guessing by "Java school" you're referring more to mentality than actual programming language...to which I say, fair enough. Some departments are better than others.

Re: Ask HN: What's missing in a CS degree?

#48
One of the best things I've heard: Be wary of anything claiming to be the real-world that is not actually in the real-world. Teaching "real-world" computer programming in school is an impossible goal. You only get the real-world experience when you are out in it. CS should prepare you for the real world, and help expose you to the real-world, but it's almost impossible to teach it. What CS does teach you is the bigger things. The bigger concepts that go beyond software engineering, or any particular project in particular. You learn how to think about big things and hard problems. CS at a university is not a prep course for your job per se. It's not a trade school. You're learning things that can be applied in the real-world but transcend the real-world. It's important to realize that there are more important things than just being able to program C# for your job.

Re: Ask HN: What's missing in a CS degree?

#49
Personally I'm not that interested in the deep mathematical side of CS. To me the two biggest problems are a poor understanding of abstraction and a lack of style.

Abstraction is so much more than "Apple is a Fruit" style OOP. Objects, processes, ideas, language... a focus on abstraction from the start is one of the reasons I think the SICP videos are worth watching.

Programmers must learn to develop their own sense of style in their code. Practice writing things until they flow and feel natural. Coding is communication, to you, your team and your computer. Try not to stutter.

Keep in mind I studied in NZ and was generally a terrible academic, we are far away from anything like MIT...

Re: Ask HN: What's missing in a CS degree?

#50
post #5

I think my CS degree was very valuable (regular expressions! hash tables! discrete math! cache cache cache!), although I'd encourage absolutely everybody to pick up two degrees as long as you're there. You might as well get a jump start on domain knowledge. Weaknesses of a CS degree: 1) At the point of graduating college, it is likely that your experience working with teams in a production-like environment will be mi…

+1 for number 3. I would be so much further along in my career if I had been exposed to the LAMP stack when I entered school instead of when I left.
Post reply on HN