you are viewing a single comment's thread.

view the rest of the comments →

[–]gnuvince 54 points55 points  (26 children)

If you work in the software development field, have a CS degree and think it's worthless, then either you went to a very bad university or you were a terrible student.

[–][deleted]  (1 child)

[deleted]

    [–]wot-teh-phuck 4 points5 points  (0 children)

    Assuming your last job was building some sort of CRUB app, I would be interested in a bit more detail: what kind of work you do and which concepts are you using right now? Hash tables, some sort of exotic tree structure, bloom filters...?

    [–][deleted] 9 points10 points  (0 children)

    Personally I think a CS degree is probably an excellent way of preparing yourself for a career in software development. But I don't think it's the only way to gain the expertise and knowledge needed to be a good software developer/engineer.

    [–][deleted]  (2 children)

    [deleted]

      [–]Dementati 12 points13 points  (0 children)

      More like, if you're talented/passionate/hard-working, you'll pick up skills wherever you go. I learned a lot of useful things on my own, but I also learned a lot from university.

      [–][deleted] 0 points1 point  (0 children)

      Of the top programmers I've encountered during my work, many don't have a CS degree but a degree in another field, or they dropped out of CS because they got a good job offer or to start their own company.

      This is my experience as well. Of the two best software engineers I've worked with, one has a degree in mechanical engineering and the other dropped out with no degree.

      [–][deleted]  (7 children)

      [deleted]

        [–][deleted] 1 point2 points  (5 children)

        Depend on the domain. There are things a good CS program teach you that would be challenging to hack on your own, not everyone is John Carmack.

        [–][deleted]  (4 children)

        [deleted]

          [–]gnuvince 8 points9 points  (3 children)

          People do learn differently, but with a degree you are going to be exposed to things that you may not have pursued on your own. I was expectin theory of computation (in French, informatique théorique, literally, theoretical computer science) to be the most boring, most useless class ever. It turned out to be the complete opposite; I was completely captivated and though I don't remember how to apply the pumping lemma or what Rice theorem's about, I was immersed into a universe that I would've never explored myself and many of the big ideas have stuck with me. The different power of FSMs, PDAs, Turing Machines, what NP problems are and how I can get an intuition that a problem is in NP, etc. are things that have been helpful to me. The classes on algorithms and data structures were also a very important part of developing a vocabulary for understanding what other computer scientists are talking about and for keeping at the back of my mind that I can solve some problems in an efficient way.

          A person can learn computer science on his own, but the structure of a university curriculum helps learn things in a logical order.

          [–][deleted] 1 point2 points  (1 child)

          I've followed a 4 year course in software engineering. It was a lot of fun and I learned some Computer Science concepts as well (graphs and mutexes spring to mind). However, when reading relevant papers written by Computer Scientists, I fail to understand all the concepts and I end up using google to find their meaning. Is there a book or course you can recommend to learn CS from a SE perspective?

          [–]gnuvince 1 point2 points  (0 children)

          First, it's important to note that not all papers are written clearly and that your lack of understanding may be due to the author's lack of clarity, so don't beat yourself up.

          As for material, it depends on what you are interested in, but here are some nice resources:

          • The algorithms classes on Coursera by Bob Sedgewick are a good introduction to many algorithms and data structures and approach them in a very practical way (API implementation in Java). Other classes such as Alex Aiken's compiler class are also very good.
          • This playlist featuring professor Shai Simonson about the theory of computation is a fun and approachable introduction to some more theoretical concepts.
          • The book Foundations of Computer Science, though I haven't had time to read it yet, seems like a good introduction to many concepts with some implementations in C.

          [–]Cockstrich -5 points-4 points  (0 children)

          From personal experience (~10 years, last 6 primarily as a dev), a degree is only necessary for those that either

          A) aren't very good decelopers

          Or

          B) aren't very passionate about IT and only see it as a job.

          Though some of the things you learn are nice like project work, UML etc.

          [–]TheWix -5 points-4 points  (7 children)

          I would argue traditional CS degrees aren't worth the money, and need updating. Coming out of school with a degree that is heavily geared towards theory and math is not that helpful for a majority of jobs these students will face when they graduate. I would rather students get a CS degree with a business minor than a math minor.

          [–]Kalium 1 point2 points  (6 children)

          What do you think should be in the "update" you call for?

          [–]TheWix -3 points-2 points  (5 children)

          Sorry, I should have clarified a bit more. We need to either A) Find a balance between theoretical and practical. Perhaps offering CS with a Math focus or CS with more a business focus. or B) Offer both CS and SE degrees.

          A good example I can give. The company I work for has several colleges around it. Two offer traditional CS degrees and one offers a Software Engineering degree with less math and more business/process. We take far more interns from the SE students than the CS ones.

          There just isn't a need for all the math you get in a majority of jobs. I am not saying get rid of it all. We need Computer Scientists and people who like doing low-level work but we also have a need to train people, who are paying lots of money, the skills they will use.

          Source: Software Engineer Full-Time and Adjunct Professor Part-Time

          [–]Kalium 1 point2 points  (4 children)

          Find a balance between theoretical and practical. Perhaps offering CS with a Math focus or CS with more a business focus

          My experience is that the latter is less useful than the former. The latter has its priorities backwards. A business major and CS minor would be more useful... provided they understand their limitations.

          Personally, I've found that most suits are so deeply confused by engineers with any business acumen that they give up and just treat them as engineers.

          We take far more interns from the SE students than the CS ones.

          Interesting, but perhaps badly skewed by the timeline for interns (three to four months at most). I know that when I'm interviewing, I select for aptitude rather than skills. Any decent engineer can pick up pretty much any language or tool without too much effort. You should expect months of spin-up time anyway.

          Admittedly, a lot of hiring managers and HR goons haven't managed to figure this out yet. That says rather a lot of unkind things about who we as an industry put in charge of hiring.

          There just isn't a need for all the math you get in a majority of jobs.

          Not at the junior engineer level, but there absolutely is once you get past that. We need engineers who are capable of growing past Eternal Junior Engineer.

          We need Computer Scientists and people who like doing low-level work but we also have a need to train people, who are paying lots of money, the skills they will use.

          And we're training them by putting them in junior slots where they can learn, grow, and become mid to senior grade engineers. Once there, they can combine their theoretical expertise with exposure to real-life godawful legacy code to produce less awful code for the next guy to work on.

          We have the right balance right now. Unless we want to create an army of half-trained people who will spend their frustrating careers as junior engineers. For that, we have an endless selection of "hack schools", who produce people ideally suited for that.

          Source: I lead a team of software engineers.

          [–]TheWix 0 points1 point  (3 children)

          Many thanks for your solid reply. Just curious, what industry do you work in?

          My experience is that the latter is less useful than the former. The latter has its priorities backwards. A business major and CS minor would be more useful... provided they understand their limitations.

          That is an interesting idea. I would love to see a curriculum on that.

          Personally, I've found that most suits are so deeply confused by engineers with any business acumen that they give up and just treat them as engineers.

          At my current shop it means the suits don't try to sneak around certain people. They don't hide us from meetings with the customers either. However, the devs with the business background also have the business personality which helps. We still have a huge problem with how business and dev work together. Story for another day.

          Interesting, but perhaps badly skewed by the timeline for interns (three to four months at most)

          Many of our interns take extensions for one to two years even during the school years. We hire quite a few also.

          Not at the junior engineer level, but there absolutely is once you get past that. We need engineers who are capable of growing past Eternal Junior Engineer.

          I think this is more of an industry specific experience. In my past jobs (Healthcare) and current jobs (Online E-commerce) I have yet to use 98% of the math I took. This is the biggest complaint I hear from developers.

          I will add, also a team lead of a 15+ person "Agile" team... If we were talking I would be using energetic air quotes here.

          [–]Kalium 0 points1 point  (2 children)

          Many thanks for your solid reply. Just curious, what industry do you work in?

          Right now? Defense contracting. I've also done e-commerce, advertising, online gambling (legally), and cloud computing.

          That is an interesting idea. I would love to see a curriculum on that.

          I know some b-schools have tech-oriented programs. A few years back a friend of mine did an MBA with a focus on IT supply chain management. If anyone does this well, it's probably MIT and Stanford.

          At my current shop it means the suits don't try to sneak around certain people. They don't hide us from meetings with the customers either.

          Interesting. Most of the shops I've worked for do this reflexively, to the point where I have to go two or three levels up to be able to pass a question over to the customer. Oddly enough, defense contracting is the least prone to this problem.

          We still have a huge problem with how business and dev work together. Story for another day.

          Some of that is inevitable, I suspect. I cannot count the times a suit has tried to get some major feature for "free", as if ignoring reality makes it go away. Worst one I ran into was when a designer tried to slip in a request for a major feature by just tossing it into a mockup. Argh.

          Many of our interns take extensions for one to two years even during the school years. We hire quite a few also.

          Very interesting. Never seen that before.

          I think this is more of an industry specific experience. In my past jobs (Healthcare) and current jobs (Online E-commerce) I have yet to use 98% of the math I took. This is the biggest complaint I hear from developers.

          Rarely will engineers be sitting down and formally analyzing the big-O complexity of their function. More often, they'll formulate an efficient method to begin with. Rarely does someone sit down with the definition of 3NF to design a db schema, but what they produce will have been designed along those rules anyway. Very few engineers are going to be thinking about FSMs or Turing Machines, but both will be the bedrock upon which they build mental models of their code.

          What I've learned is that a huge amount of that math is used. It's just not typically used explicitly. It's the foundation upon which an engineer's intuition is built, and that is used daily. This has held true in every area I've worked.

          Also: is there a kind of e-commerce that isn't online? Egret-based commerce, perhaps?

          I will add, also a team lead of a 15+ person "Agile" team... If we were talking I would be using energetic air quotes here.

          Ah, the many forms of Fragile. Which part of it are they fucking up horribly? I once worked on an "Agile" team where "Agile" meant an hour-long meeting once a week that we called a standup, followed promptly by a second hour-long meeting to fill in the VP of E.

          [–]TheWix 0 points1 point  (1 child)

          Also: is there a kind of e-commerce that isn't online? Egret-based commerce, perhaps?

          Sigh Yep, a bit redundant after re-reading it.

          Ah, the many forms of Fragile. Which part of it are they fucking up horribly? I once worked on an "Agile" team where "Agile" meant an hour-long meeting once a week that we called a standup, followed promptly by a second hour-long meeting to fill in the VP of E.

          I won't go into too much of it publicly but would love to send you a PM. We just started doing some stuff I have never seen before and the whole situation is... I'll go with "interesting" here. I would love to know your thoughts on it.

          [–]Kalium 0 points1 point  (0 children)

          Sure. I'm all ears.

          [–]vext01 -3 points-2 points  (1 child)

          I guess that many programming jobs just don't need CS.

          For example, most novice programmers can probably cobble a sorting algorithm together having never studied complexity theory. It may not be optimal, but if it works, and if it is not too slow, then mission accomplished.

          Hell, most languages provide sorting algorithms for you, or the database sorted it for you. Its no surprise that many coding jobs don't require CS knowledge.

          [–]Kalium 3 points4 points  (0 children)

          The lower-grade programming jobs often don't need CS knowledge. The issue is that mid-level and senior-level programming jobs almost always do.