Hacker News new | ask | show | jobs
by jdiez17 3854 days ago
This article reflects my experience at University very well. I'm a self taught programmer that ended up pursuing a CompSci degree. I'm in the last semester of my BSc, and in hindsight I should have studied something else, like Physics or Electrical Engineering.

The standards are ridiculously low. Most of my coursemates (final year CS students) are literally unable to write software. They can write a single-file cpp file in Code::Blocks on a good day. In my experience (and having talked to plenty of other CompSci students, their experiences are similar to mine), formal education in programming is generally reduced to teaching students all about recursive functions, bubble sort and those kinds of things. There has been a grand total of 0 lectures or labs about unit testing, version control, API design, interoperability, etc. Let alone trying to communicate the idea of "clear, maintainable" code. Only a very small minority of people can write code, yet most of us will graduate.

I have a module called "Software Quality and Process Management" (formerly known as "Large Scale Software Engineering". Good thing they changed the name, at least now it's not such a blatant lie). In this module, we learn all about COCOMO, and how we should estimate the number of lines of code a project will use, and use that to figure out how many man-hours are required to complete it. WTF. I'm preaching to the choir here, but that's like estimating the amount of effort it will take to design an airplane based on the number of grams of aluminium in it. When someone raises their hand and disagrees about the relationship between SLOC and person-hours (or even about whether person-hours is a reasonable unit - it's not), the lecturer responds with a blanket "you're entitled to your own opinion", but draws blanks when asked about whether they know anyone who actually uses these methods in real world software engineering and finds them useful. It's the same story when they teach about the waterfall development process and other similar outdated practices that are known to be detrimental to healthy software.

The vast majority of what I know about software engineering didn't come from my time at University, and almost all of the software engineers I know have had a similar experience. I know correlation does not imply causation, but it's definitely food for thought.

4 comments

This matches my experience. I was trying to hire a junior programmer, and got someone in for interview who ostensibly had a first-class CS degree from a Russell Group university, yet could not explain to me what Functional Programming involved. He didn't even recognise the term.

(Incidentally, the university refused to corroborate his degree, on the grounds that it would be a breach of the Data Protection Act, which boggled my mind).

> junior programmer

> could not explain to me what Functional Programming involved

See that first term, give him/her a break.

I've worked with experienced devs with many year's experience who couldn't explain the term functional programming, yet practice it every day. Just because you don't know the fancy programming term du jour, doesn't mean you aren't capable or competent.

Turns out I've been using the functional programming paradigm since 2001. It wasn't until six years later I discovered there was a name for it.

From a non-CS degree perspective (on the hiring side), it seems that CS undergrad is meant to produce CS professors. Most (yes, MOST) have never touched anything higher than C++. While fundamentals are great, teaching them to the exclusion of immediately tangible skills does a disservice to people who are effectively paying $200k for a ticket into the working world. The reason we consider boot campers is because they typically have a work background demonstrating an ability to be useful as well as a recent educational background demonstrating an ability and willingness to pick up foreign tasks.
I went to back to University after working after working as a professional programmer for about 5 years.

What I learned in Automata, Discrete Math, Algorithms, and the other more theoretical classes has been worth it's weight in gold.

The things I learned in "Software Engineering" on the other hand, not so much.

>What I learned in Automata, Discrete Math, Algorithms, and the other more theoretical classes has been worth it's weight in gold.

That was my intention when I signed up for University too. However, I've only had two maths modules, and they haven't been particularly challenging.

One of the things I was looking forward to learn at University was hardcore cryptography, since I believe that's one of the few things for which getting formal, structured education is the best way to go. Sure, you can learn the fundamentals on your own fairly easily (even more so today - Stanford's online course in cryptography is very good), but you need to learn about attacks or you'll write code vulnerable to known problems like hash length extension attacks, ciphertext modification...

However, the only time cryptography was mentioned - at all - in my entire BSc was in first year, where we had a few lectures explaining the rudiments of RSA. Interesting, for sure, but pretty much useless without the remaining 80% of knowledge required to have a full picture of what's going on.

You might want to look at switching to applied math or computational mathematics if the CS program is lacking.
I have to go to a vocational college as part of my apprenticeship in germany and I am learning exactly what you described.

Guess what todays topic was? Software Estimates! (that includes COCOMO)

The teachers even acknowledge that the waterfall process is bad.

I don't really see the point of the vocational college. I am learning all the practical skills at the company already.

> The vast majority of what I know about software engineering didn't come from my time at University

I think this describes almost all undergraduate degrees. The only ones I can think of that go against this are the 5 year engineering programs, and I liken those more towards a masters than undergrad.