Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

A degree ensures you have learned all the basics which experts in the field believe you need for a solid foundation. It answers and formalizes the "I want to do/be X, what must I learn?" question. Yes, doing something like this would be very much worth your while; I've got two (accredited) degrees in the subject, and still might just run thru this as a refresher.

Time and again over two decades, I've seen self-taught software developers do well, yet stumble into educational gaps/traps any degreed developer would have learned to avoid. All too often they can't perceive what's missing because they're not aware of the advanced material which retroactively fills those gaps. A formal education includes a lot of "do it this way, you'll understand later" which was learned via tremendous cost in hours, effort, and money in the industry, stuff which the self-taught by definition are unaware of and can only (if ever) learn the hard way. It also includes a lot of "there are other ways to do this" that one won't pursue unless compelled, and thus expands the toolbox. It's also embarrassing for the self-taught to go years without learning something which is standard first/second-year material (like having a self-appointed software architect get all excited about discovering state machines, and proceed to implement them in an inappropriate manner).

Do it. Fill in the gaps you're unaware of. Listen to people who say "trust me, you really do need to do it this way, even if you won't understand why for a while." Yes, you can learn it all on your own, but it will likely take longer. Life is finite.



"It answers and formalizes the 'I want to do/be X, what must I learn?'"

I can't speak for your program, but at no point in my computer engineering undergrad did anyone answer or even try to address that question. Curriculum is enslaved by "accreditation."


As if a self-taught person can't learn what not to do from more advanced peers and get the same benefit?


More advanced peers aren't going to spend 4 years going over everything to make sure nothing was missed.


No, they'll only go over the stuff that's relevant to the task at hand. Seems more efficient to me.


It's YOUR job to know what's relevant to the task at hand. It's not your peers' job to make sure you do.


And yet most CS graduates can't even (allegedly) solve fizzbuzz ...


> yet stumble into educational gaps/traps any degreed developer would have learned to avoid.

Care to list some of the common ones you've seen? I'm mostly curious, but it would serve as a good reminder for those who may fall into those traps themselves.


I don't know about gp, but the most common ones I see are:

  - Algorithmic complexity analysis ("big-O")
  - Being trapped in a single paradigm
    (e.g. loops vs. recursion)
  - Not understanding the underlying hardware / protocols,
    what they guarantee, and what they don't guarantee
  - Software design knowledge can be spotty; someone might
    know about high-cohesion design, but not know about
    use-case analysis.
  - Not valuing version control, though this is rare now
    it used to be very common
Now, it's not at all true that every self-taught developer has all of these problems. Some have none of these problems; they are just the most common I've seen.


To me this reads like a list of problems of self-taught programmers who've only ever worked on their own.

I've met a fair few old school programmers who were around before CS courses really took off, they know everything on this list.

I disagree with all but the third, and I especially disagree with the 4th, the worst designed programs I've seen were written by CS trained people. They try and implement overly complex models because they've been taught them. Pure experience trumps book knowledge every single time in software design.

I know I have gaps in my knowledge, but if that's the best you've got I'm still happy I got a Philosophy degree!


You're absolutely right that every one of these problems tends to go away with time; that was the one disclaimer I forgot. The more dev work someone has done, especially on collaborative projects, the less likely they are to have these problems.

You're also absolutely right that CS training isn't a panacea. Actually I tend to suggest math or electrical engineering training to people looking to get into the field. CS programs tend to overcorrect in some areas. For example, new CS grads often want to overuse regular expressions.


Just the same, at my first internship I has bosses with Bachelors or Master degrees in CS that had those problems. One went so far as to call version control itself "a problem"...

I think its really up to the individual person to gain those skills. If you don't care the concepts won't mean anything, even if they're spoon fed to you by a university professor.


i'm only 23, but knowledge gaps I've seen in friends/coworkers without degrees are compilers, what needs to happen to go from c to machine code, and to a lesser extent calculus/linear algebra, discrete math, and the stuff covered in an upper division algorithms class.


I think it depends on the person. I'm self taught but I know the rudiments of compiler design and significantly more mathematics than is covered by a standard comp sci course which tend not to get into topology, analysis, or set theory.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: