Hacker News new | past | comments | ask | show | jobs | submit login

As someone with a Science degree, but working as a software developer full time I've always wondered if I'm missing something by not having a CS degree. Certainly not enough to go back and get an actual degree, but would something like this would be worth my time?



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.


Ask 10 people this, get 10 different answers based on their own decisions and experience. Since you asked, mine is this; Yes. Again - this is all based on my own empirical experience - but I've noticed that devs who don't have CS degrees are as good (or better at, sometimes) solving problems themselves...but they tend to fall on their faces (sometimes with disastrous professional consequences) when it comes to recognizing "archetypes/patterns" of problems that have already been solved or have proven approaches. When I was getting my CS degree I rolled my eyes in boredom at all the algorithm and data structure analysis courses, but years later I think that was probably the most valuable part. Glancing at this "curriculum" from Saylor it looks like they cover that stuff - so if you have extra time, go at it - I probably will myself just to brush up.


Coursera just started their algorithms course, Its well organized and practical. They use Java.


There's also Udacity


^ This. It depends on the kind of software you're interested in writing. Algorithms, datastructures & complexity analysis is imo arguably among the most valuable of the bunch due to its broad applicability. This is for instance particularly useful when writing software that needs to scale and perform well, e.g. server/system software.

In short, I feel there is merit to each CS course but want to underline that it's information you can self educate yourself on should you be so inclined to do so. Attending a CS major however helps with keeping one motivated. That brings me to imo the most important point of attending a traditional CS major: meeting fellow CS'ers to do a startup with :) I think that has been the most valuable CS experience for me. That's something I kinda miss with this "new era" of online courses.


Definitely agree.

I had a CIS degree (not exactly computer science but some overlap) and I'd say some of the most helpful material I read to get myself on par with day-to-day developers was related to algorithms, data structures, and design patterns (the GOF book is very course-bookish but there are friendlier head start books if you're just getting into it).

To be honest though I'd say the best learning material I experienced was just surrounding myself with people who know more than myself. Ask for code reviews (don't just get forced to do them) from people you know to be excellent developers (not the easiest thing to spot when you're green though).

Also never stop learning whether it's through a degree or online through one of these sort of courses.


A working knowledge of algorithms and data structures will benefit you, but you might well be better off reading a book than following this. For the rest I really wouldn't bother; Compilers is an interesting way to learn some things, but not terribly applicable, everything else is stuff you'll pick up yourself or don't really need.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

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

Search: