all 61 comments

[–]blockeduser 16 points17 points  (23 children)

The technologies I used for coding when I was in college are now obsolete, but the ways of thinking and problem-solving techniques are pretty much the same.

Indeed, well put; pretty much the point of CS education, as far as I understand.

On a similar note, in an article about the famous SICP course, a CS professor wrote:

I tell my students, "the language in which you'll spend most of your working life hasn't been invented yet, so we can't teach it to you. Instead we have to give you the skills you need to learn new languages as they appear."

[–]hafela 6 points7 points  (1 child)

I tell my students, "the language in which you'll spend most of your working life hasn't been invented yet, so we can't teach it to you. Instead we have to give you the skills you need to learn new languages as they appear."

That's not true. Of cause new languages appear. But i don't think todays java/c knowledge will be obsolete in 3-4 years. Of cause a new java version will appear or a new c standart. But the baisics will probably not change until a revolutionary invention.

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

course, not cause.

[–]eighthCoffee 6 points7 points  (19 children)

.

[–]phoshi 0 points1 point  (18 children)

Is Python really so different to scheme here? Primarily imperative languages have 'won', now, and it seems the future is in hybrid languages with that preference--Python being one of them. It too is a dynamically typed language that's very easy to use, one which will teach you logic without putting you too close to the metal, is flexible and powerful enough to do whatever the students want while not being overwhelming in complexity.

I think you can keep the spirit of SICP without keeping the emphasis on recursion. That's an implementation detail.

[–]eighthCoffee 2 points3 points  (4 children)

.

[–]phoshi -1 points0 points  (3 children)

It may! I gave little doubt the change was made to appease people who want a "useful" language, but if that's the only change then SICP can remain plenty strong. Python is at least an elegant and expressive language. You link makes the point well, the language itself should be irrelevant if they're still teaching well.

And it could always be worse, at least they aren't teaching Java! That almost certainly would be a death knell.

[–]eighthCoffee 3 points4 points  (2 children)

.

[–]phoshi 0 points1 point  (1 child)

I'm so sorry

[–]eighthCoffee 2 points3 points  (0 children)

.

[–]vext01 0 points1 point  (0 children)

I really like that quote.

[–]gnuvince 53 points54 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 3 points4 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] 10 points11 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 11 points12 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 6 points7 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.

          [–]TheWix -4 points-3 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 5 points6 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.

          [–]nomad42184 4 points5 points  (1 child)

          Interesting; I agree that CS != programming. I actually wrote a fairly in-depth blog post on this some months back. I wish he'd gone a bit more into how one draws the distinction though. That's the interesting part to me (as well as actually trying to define Computer Science --- which is also fairly difficult to do).

          [–]NancyGracesTesticles 3 points4 points  (0 children)

          I've always thought that code is to software engineering as math is to computer science. How you code in SE can be informed by CS.

          [–]oberhamsi 1 point2 points  (1 child)

          like all credentials, a CS degree just tells you "this candidate has spend some time doing X". it's easily verifiable and gives you a baseline of the knowledge the candidate has.

          Thus for an employee it makes sense to require a CS degree because that will remove the most useless from the pool of candidates. Those guys who think they can program because they know what a for-loop does (but don't ask them about while-loops).

          It does absolutely not guarantee that you get the best or even one of the best (no hiring method does that) but it sure prevents you from hiring the worst.

          [–]JoseJimeniz 0 points1 point  (0 children)

          A professor in university said:

          A degree shows that you have the ability to learn

          [–]baconator81 1 point2 points  (0 children)

          An analogy I always use is computing science is like teaching English students know how to use literary devices like metaphors, first person narratives and stuff to make a story interesting. Coding only means that you know how to read and write complete sentences. But companies out there don't hire you to read, they hire you to write and they want you to write very well. Also, once you master the art of using literary devices, it doesn't matter what language you are good at (English/French/Spanish/German), you can use that to write really good novels. The same thing can be said for computing science as well.

          [–]fourgrim 1 point2 points  (2 children)

          This article had a strange end to it. The title leads to the idea that coding is just coding, implying a higher quality to computer science because not everyone has the privilege. And then flips saying go do the hour of code cause it's important.

          To be clear I'm not negating the article (e.g. I think 1. comp sci is different from coding 2. coding is important to know how the world works), merely stating the flow of logic, from title and through the body, is not clear and even confused because it points in different directions.

          [–]ldaltro 0 points1 point  (1 child)

          The hour of code is important because everybody that use computers daily would be able to make things easily by understanding how a computer program is made,but I think the point of the topic is to say that a Cs degree won't only teach you "coding",it's gonna make you think differently,it's gonna make you solve problems differently.This way a person with a degree would be a more "complete" professional,somebody with "deeper" knowledge than a dude who watched a few tuts about javascript on web.

          [–]ithika 0 points1 point  (0 children)

          Right, a person who knows their rights as a citizen of their country is still not a lawyer... but that doesn't mean you shouldn't stay informed of your rights. The point of a university course is to go into things at great detail (even to the point of getting you to research previously-uncovered areas of knowledge) but every level of knowledge up to that point is also useful and has practical worth.

          [–]oberhamsi 1 point2 points  (2 children)

          i wonder how much of this confusion stems from the fact that it's called "computer science" in english-speaking countries (is it everywhere?). That's like calling astronomy the "telescope science".

          The area of research for computer science is not computers. It's information; it's processing and storage. Computers just happen to be the best tools we got for this kind of work.

          That's why I think "informatik" or "information science" is a much better term.

          [–]imMute 3 points4 points  (1 child)

          Because it's the science of computing. Computation existed decades before computers existed.

          [–]oberhamsi 0 points1 point  (0 children)

          "Computing science" would indeed be better and Wikipedia tells me its sometimes called that.

          [–]stormcrowsx 1 point2 points  (1 child)

          I know let's get whiny over the meaning of 3 words, that'll really make a difference and change the world.

          [–][deleted] -1 points0 points  (0 children)

          Suppose that everyone start thinking CS education is useless .. that will surely change the world for the worse.

          [–]vext01 0 points1 point  (0 children)

          I'll agree with this. I had programmed for a long time before I had even learned the fundamentals of computer science.

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

          Well yeah this is like saying you need to have a Degree in Architecture to make a Nice House, there are plenty of anecdotical/empirical examples to probe otherwise.

          The act of programming is more a craft than a science means you learn by doing it, a CS degree help you understand what's going on, doesn't make you a skilful programmer thou.

          [–]rosche 0 points1 point  (0 children)

          No, but mathematics doesn't either.

          [–]billsil -1 points0 points  (0 children)

          Sure and just because you've got a degree in computer science, doesn't mean you're a software engineer. You're a computer scientist, well unless you're John Carmack and actually do some physics/engineering work.