Hacker News new | ask | show | jobs
by 10098 5164 days ago
I have a CS degree, and worse than that, it's a double major in CS and applied math. I had to study things that seem really pointless for an "applied software engineer", like differential equations or numerical methods (ok, maybe the latter is not so pointless). We also studied a considerable chunk of other, more "CS-esque" stuff, like introduction to mathematical logic, computability theory, lambda calculus. Does this stuff pay off? Well, my actual job never required me to implement any complex algorithms, because everything has already been written in the standard libraries. It does help to have at least an approximate picture of what's really going on under the hood.

But what really helps me is that 4 years of being exposed to all this crazy theory has affected my brain in a certain way: it has altered my perception of problems.

Before going into CS I was programming by chance: slap some code together (without really understanding the problem domain) and poke it with a stick until it somehow works the you want it to. I think most kids who are just learning to program do that. However, that approach changed radically after I spent some time at the university. In that sense, CS has been really useful, at least in my case. Btw, I'm not saying those skills could not have been obtained elsewhere.

And learning theory really broadens your horizons. Things like computability theory, I have no use for them in my day job, but they're just interesting. Back at the uni, I had a blast writing a turing machine "emulator" and programming it instead of manually writing the assignment on paper :) And yes, you could study them in your spare time, but the truth is, the job eats up so much of your time, and makes you so exhausted that you barely have the resources to follow an online lecture after a long day at work. So why not spend some time learning while you still free from most of the responsibilities of adult life?

2 comments

No argument there. Like I say in the post, I'm all in favor of the goodness of the basics. I just think that giving undergrads all theory and very little practice is not optimal, and they should have the opportunity to go minimal on theory if it makes sense for them. Very few universities offer such a choice today.
I know. We lacked practice at the university too. I don't think you can blame the university for that, though. Practical things are better taught by people who actually use them on the job, not by PhDs who write scientific papers. That's why I went to long-term internship at an actual company during my second year, which later turned into a full-time job.
if the university purports to teach this stuff, they should hire people who actually know how to teach it. if their tenured PhDs aren't cutting it, they should look elsewhere. (this is how i got my university teaching job.)
> if the university purports to teach this stuff,

It doesn't. The major purpose of a university is to produce scientists who do research, not software engineers who write crud apps. We, the software engineers, are just a byproduct.

> they should hire people who actually know how to teach it

They can't and they shouldn't. Why would one want to teach at a university when (s)he has enough skills to work at a company for a big fat compensation, and, possibly, equity? The only way to attract those people to the universities would be for the universities to offer much higher salaries, which would consequently drive up the cost of education (in my own country it wouldn't even work, because education is "free", i.e. mostly paid for by the government). And for what - to teach the students something they could have easily picked up on their own by poking around the internets or participating in internships? That is not optimal. If you study formal grammars in class and don't try writing your own little lexer/parser at home, it's your own fault, don't blame the university. It has taught you everything you need to know to write a parser, and it's your job to put it to use.

Where I spent most of my undergrad (Georgia Tech), we had a system called threads. Giving students tracks in which they could focus their study of computer science.

These tracks were generally all theoretical (the exceptions being some classes in platforms and devices), even my friends who had a love for software engineering ended up learning the thoughts behind each process rather than blindly learning the process itself in order to master said process that is currently practical.

The way I treated academic learning is very similar to the process described above by 10098. The learning you experience in college should be some form of aggregate information about past ideas/trials and tribulations. This is the process by which I (as a customer) have found most universities treat their undergraduates. Rather than tailoring them to become masters of a specific problem they try (albeit not successfully, and there are a vast number of people in universities today that don't enjoy, want to have, or have this mindset) to build the next generation of people to find flaws in our current society, in hopes that they have motivation to fix it.

That being said you are making the argument that software engineering is a vocational skill. While I'm not denying that the majority of the process that I've found in my limited time in the industry tends to be filled with skills that are akin to any other vocational profession, I don't believe increasing vocational skills help the students. It might in a short term give them a strong basis for obtaining a software related position. It might also give them the ability to perform really well in their jobs at that time being. It does however not enable them to question the process they've learned. It also does not help them find problems within a process.

It should also be noted that most companies aren't looking for a master software engineer. They test for intelligence and social skills rather than how strict the student is on testing practices or which design cycle they prefer. These biases also lead towards limiting employment because they'll end up fighting rather than adapting to the new work environment that is already established by the companies views on the subject.

A lot of top schools are taking interest in teaching up to date languages, maybe not clojure or even javascript but python is the language that I've seen most Georgia Tech students prefer to program in after taking several courses in it.

http://www.cc.gatech.edu/future/undergraduates/threads http://www.cc.gatech.edu/future/undergraduates/bscs/roles/ma...

This kind of thing is one of the reasons why Georgia Tech is consistently among the top 10 computer science schools in the nation.
Newbies also learn a new approach to problem solving in a summer internship at a major software company too. The internship is also MUCH cheaper than four years learning theory.

Of course, you could always take a script kiddie job at a minor software company. Those wouldn't be fulfilling to anyone anyway, and those are the jobs that exhaust you and make you feel like they are "eating up" your time, instead of being a productive use of your time.