Hacker News new | ask | show | jobs
by patio11 5867 days ago
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 minimal. I think I did, hmm, three labs like this? None of them produced anything close to a real software product.

2) Academics don't work like industry. I worked at the university for a bit after graduation and we still didn't use, e.g., source control, testing, etc etc. Pick your favorite best practices test, we would have scored negative. It took me a few years to learn better habits.

3) You tend to do a lot of stuff which has little relationship to what you'll be doing for the rest of your life. If I were dictator for life of the CS department, I'd have kids exposed to web programming very freaking early, because it is much more likely they'll end up doing that than fat Java client apps (what we actually did in school).

4) There are a lot of soft skills that go into engineering that some schools give short shrift to. I will defend this one to the death: the most important skill for an engineer is oral/written communication, and their ability to actually produce stuff is a distant second. We had one class on technical writing.

4 comments

I think they are all strengths of a CS degree.

We have our whole lives working in the real world to pick up those things that the University environment can only really introduce us to.

I don't want to waste my CS education on just getting a simulation of what the rest of my life will be like, I want to learn CS especially the things that might be harder to learn via experience in industry.

They could do a 6 month course in "Industry practice", where the students learn unit testing, source control, web apps, GUI even loops, design patterns, documentation in industry, and so on.

I'd certainly agree that unis are more competitive at teaching theory (algorithms, math, AI, data-mining, simulations, etc) than practice. When they try to teach industry practice, it's in danger of turning into those nightmare OO courses - all pretension and no idea

oooo, a John isa student (a subclass of person); and Mr Smith isa lecturer (which is a subclass of academic, which is a subclass of person), and our tutor is an example of multiple inheritance!

I think I did, hmm, three labs like this? None of them produced anything close to a real software product.

The devil is in the details! Stuff you think isn't a big deal As an undergrad CS student might well be a freaking big deal! Example: in my current project, we've found that in the new system version, the vendor's "type and the list selects the matching prefix" functionality kinda works, but slowly. (As in, over 3 keystrokes a second is too fast and the system loses track of the full prefix.) To our users, it doesn't work at all. Their accustomed workflow is disrupted across the whole app, so I have to go and patch it.

In academia, stuff like this is considered a triviality. In the real world, it matters a lot!

Interesting. I'm nearly ready to graduate from Portland State University and I know, beyond a doubt, that had I turned in a project with a flaw that glaring I would have failed the project, for "general unsuitability".

Different schools, different methods, I suppose.

had I turned in a project with a flaw that glaring I would have failed the project, for "general unsuitability"

I think you miss my point. The problem is over perception of what is "a flaw that glaring." This differs in academic culture and business culture. As you point out, it can even vary from school to school or company to company.

I think you aren't being entirely self-honest about what is glaringly "obvious." My point is actually that what is "glaringly obvious" in one context to one set of people isn't at all so to another set of people in a different context. Awareness of this should not only be taught in some sort of course but also adopted as a core ability for those in the software field. It's pretty fundamental to a whole host of sticky problems we all face with regard to understanding requirements, design, documentation, and fixing bugs.

+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.
web programming in a CS program?

I think you are falling in to a trap a lot of people fall in to. There are a ton of cliche comparisons I could make, but I'll spare you.

If you want web programming, you should just get yourself enrolled in a technical school that will teach you all of that in 2 years.

The fact remains that it is much easier to:

- Perform Unit/Functional/User Test

- Use version control

- Be exposed to a variety of both tools (editors/ides) and services (github.com, getexceptional.com)

- Work in a distributed manner

- Get real world feedback on your application from people other than the Professor

- Work with more than the String class of your language

- Collaborate on related, but not dependent, code in the same codebase

- Learn different patterns (Observer, Singleton, etc)

- Develop the way you would in the real world (Scrum? Waterfall? You name it. No real cowboy coding)

when doing web development than doing most "Random Number generator" or "Porpuquine" projects assigned in CS to show recursion or proper OOP.

I'm probably biased though, as I'm a web developer who went through the Java bullshit and didn't learn a damned thing until I actually tried to make a web application that someone other than my Professor of Data Structures and Algorithms II was testing/grading/using.

ADDENDUM: As for the CS portion of the degree, learning all the aforementioned skills will hopefully allow you to more easily grasp things like the difference between PSPACE and NP-Hard problems, Genetic Algorithms, AI, etc. I'd hope to god that someone designing AI would at least use version control on their application. It would be a nightmare to find a bug that sliced a person in half when they are in surgery without a tool like "git bisect" :)

Yes. Much better that students should learn AWT or how to write console apps that prompt for user input, so they can better learn how to think about recursion.