top | item 6957502

Code != computer science

198 points| sarahallen | 12 years ago |ultrasaurus.com | reply

142 comments

order
[+] woah|12 years ago|reply
I look at this from the other side as well. I've worked with brilliant people with ivy league CS degrees who wrote much messier and less maintainable code than me, an autodidact designer/js dev with 1.5 years of experience. Maybe I'm wrong, and there was something in their code that I wasn't seeing, but I don't think so.

There can also be a bit of an attitude, like the person is thinking "of course this is good, I went to Stanford". But maybe that's my imagination. Another explanation is that these people are just so good that they are able to read messy and convoluted code no problem, and us mortals need to step up our game.

On the other hand, these people would easily be able to reason about complex performance and security issues beyond me. I think that the hardcore CS issues are a science, while writing clean code in a web framework, browser, and API design is more of a craft.

If you hire too many computer scientists, your code base could be full of fascinating technical tricks, but creaky and hard to work with. Too many craftsmen, and you'll get stuck on simple problems. It's a balance.

EDIT: Downvotes? Please explain. Perhaps I am not able to fully comprehend the issues at hand.

[+] j2kun|12 years ago|reply
People in academia simply don't care about the quality of one particular implementation of their ideas. There's no value judgement here, it's just not their job to write and maintain good software. Just as it's not a mathematician's job to maintain a cryptographic protocol or a physicist's job to keep a satellite in orbit. The people who went to schools with strong research programs are trained by people in that mindset.

It's a simple question of motivation. If they're brilliant and they have motivation, then of course they could write great software. They just don't.

Make no mistake, people from schools like Cal Poly SLO (a state school, and my alma mater) who excelled in their CS programs can software engineer circles around most. Why? Because Cal Poly has no research program, three quarters of their faculty come from industry, and their faculty have no job requirements outside of teaching. They literally had us managing five to ten thousand line software projects with teams of students in year two.

[+] nevster|12 years ago|reply
Also maybe some other reasons for downvotes:

- 1.5 years experience isn't very much to base an opinion like this on

- Finding other people's code hard to read is pretty common, no matter how good those coder's are. Your own code generally makes perfect sense to you, same as your writing. But communicating so that all can understand it is hard. That's why flame wars occur. You probably think your comment is a reasonably argued piece of writing, just like you think your code is nicely refactored and understandable. The fact that people disagree and downvote proves the point I think.

[+] NAFV_P|12 years ago|reply
> I look at this from the other side as well. I've worked with brilliant people with ivy league CS degrees who wrote much messier and less maintainable code than me, an autodidact designer/js dev with 1.5 years of experience. Maybe I'm wrong, and there was something in their code that I wasn't seeing, but I don't think so.

I would have ignored your comment were it not for you mentioning that you write javascript. I started learning it on and off a few weeks ago, and yesterday I installed spidermonkey as a standalone shell. What I have noticed is that a lot of the syntax that controls flow is very similar to C, which is notorious for being gibberish. I'm guessing the same will apply to js. I do not have a CS degree, but would you say that this is readable? This is a function for extraction of nodes in a double linked list that I am currently kicking into shape.

  /*
  *	extract *p__ from p__.
  *	but original *p__ is shifted left or right \
  *	    if there is still space.
  *	extracted ndi* is returned, but the remainder of the list \
  *	    is sewn back up.
   */
  
  ndi *extract_ndi(ndi **p__, const int dec) {
      ndi *q_=*p__;
      if(dec>=_PREV_) {
	  *p__=*(q_->lnk+dec); /* the shift */
	  if(*((*p__)->lnk+!dec)=*(q_->lnk+!dec)) { /* sew up */
	      *((*(q_->lnk+!dec))->lnk+dec)=*p__;
	      *(q_->lnk+!dec)=NULL; /* burn ends of extraction */
	  }
	  *(q_->lnk+dec)=NULL;
      } else if(dec==_LONE_) /* final possibility is that *p__==NULL */
	  *p__=NULL; /* ie. dec==_DEAD_, no which ain't it not worth man */
      return q_;
  }
What the hell was I smoking when I wrote this? I can't even read it myself.

Writing convoluted code is more to do with a certain state of mind. You should ask your coworkers where they obtain LSD, not where they got their degree. I haven't come across any acid for about a dozen years, I think it has gone out of fashion.

Of course if this was Perl it would be even worse.

[+] banachtarski|12 years ago|reply
"If you hire too many computer scientists, your code base could be full of fascinating technical tricks, but creaky and hard to work with. Too many craftsmen, and you'll get stuck on simple problems. It's a balance."

Your whole post is full over hand waving and overgeneralization. You've never met a CS major who wrote clean code without resorting to fascinating technical tricks? You haven't met a non-CS major who did his or her due diligence to learn the mathematical fundamentals?

Please cut the hyperbole.

[+] caprad|12 years ago|reply
> I look at this from the other side as well. I've worked with brilliant people with ivy league CS degrees who wrote much messier and less maintainable code than me, an autodidact designer/js dev with 1.5 years of experience.

Be careful, everybody writes worse code than you, because you wrote the code. And these is a difference in writing nice simple code, and rewriting the same function to work on a bunch of different machines that does the core of the application, and you have until the end of the week until it goes live.

[+] osdiab|12 years ago|reply
I think people are falsely equating computer science with software engineering. You can get a very strong theoretical basis for programming at a place like Stanford, and the work you can do may have nothing to do with best practices but rather a lot to do with more abstract concepts like algorithmic efficiency or graph analysis or what not. As a Stanford student personally Ive learned a lot more about best practices in software systems outside of the university; in fact you get very little of that from classes. What you do get is in depth coverage of topics that most are unlikely to get a formal treatment of on their own, depending on your concentration, whether that means cutting edge operating systems and compilers research, or rigorous discussion of the psychology behind ux design. Hope that clarifies a bit!
[+] chipsy|12 years ago|reply
The more you get exposed to other people's code, the less likely you are to dismiss it as bad immediately. Your first impressions are built upon what styles of coding you're already familiar with, and aren't to be trusted as an objective measure of whether the code is maintainable. In many cases, what you might think is a good practice is really just a fashionable one, and holds little engineering value when examined carefully.

After enough projects, you get used to navigating codebases that are layered with multiple styles and grungy bits from years of effort. At that point, you have some hope of knowing what can and can't be maintained.

[+] Nursie|12 years ago|reply
I'm guessing the downvotes are there (not that I downvoted) because there's absolutely no reason that someone with a CS background can't also be a craftsperson.

There's a difference in approach between academic CS and practical software engineering, yes, but a decent CS grad should be able to pick up both.

Sounds like you worked with people who just weren't as good as they thought they were at that part of it :)

[+] jds375|12 years ago|reply
This is totally true. I am honestly blown away by how little focus Universities have on coding as compared to Computer Science. I understand that the degree is called "Computer Science" and not "Coding/Programming".... But it would be immensely useful career-wise if they focused on at least some Coding aspects (style, readability, code-reviews, etc.).
[+] frozenport|12 years ago|reply
It also makes you more successful in life if you learn to delegate work to other people, it clears your mind for a moment of brilliance and you can take all the credit when they are done with their labor. If life were fair our jobs would let us grow like in academia and but this is not the case in industry.
[+] voqk|12 years ago|reply
I'm a mechanical engineer, when I worked for a small manufacturing shop many of the best machine and fixture designs came from the machinists in the tool room. We tried to achieved the balance that you're talking about by having the machinists and engineers collaborate closely.
[+] analog31|12 years ago|reply
I think coding is neither science nor engineering. I like the term "craft" much better.
[+] andrewfong|12 years ago|reply
Speaking from experience, this is true. You also don't really know when true CS is useful until you run into it.

I graduated with the equivalent of a minor in CS. When I started coding for an web-based gaming start-up in 2007, it was mostly irrelevant. You don't need a CS degree to learn Ruby on Rails, nor is it necessarily useful (beyond your basic intro courses) to have taken CS courses.

Flash-forward a year, after we raised our seed round. Our online game had grown in complexity quite a bit, and we found ourselves having to deal with things like complex image rendering, AI, and pathfinding. While it's possible to get a decent grasp of these topics through Google and O'Reilly books, it's definitely an order of magnitude more difficult than figuring out a new web framework. As mentioned before, I only have a minor in CS so my exposure to these topics was minimal, and there were definitely nights where I found myself wishing I had taken another AI or advanced algorithms course.

[+] jonny_eh|12 years ago|reply
These "hardcore" problems like AI and pathfinding are definitely tough problems. The issue is that there's an infinite supply of such problems and there's no way a 4 year degree can cover them all. In fact, even if they did, most lessons would be forgotten before they could be proven useful in the real world.

Why not just learn these areas when needed? Taking an Advanced AI course in just a 2-3 month semester is how many hours? Just spend a week or two hitting the books and you'll be good to go, and you're knowledge will be bleeding edge and up to date. Plus, you'll have been paid to learn it!

[+] kenster07|12 years ago|reply
Here is the thing -- algorithms are NOT an order of a magnitude more difficult for everyone. That is simply an unjustified blanket statement.

Believe it or not, some people pick up merge sort or balanced binary trees faster than they can learn Rails (which has a BIG amount of content to master, by the way).

[+] eru|12 years ago|reply
My difficulties were the other way round: knowing all the theory doesn't actually make you a better (or even a good) coder. Only when you run into the problems you mentioned, does academics help at all.
[+] jd007|12 years ago|reply
I've always thought of computer science as a branch of mathematics. To me coding or programming is applied (or engineering) computer science, it's an engineering field (hence the term software engineer). Just like there is theoretical physics (a basic science), and also applied/engineering physics (e.g. mechanical engineering). They are related fields, but specializing in one does not mean you will be good at the other (it certainly helps).

The terms coding and computer science do get used interchangeably by a lot of people though, since most may not understand the difference. I've learned to live with it (occasionally I point out the difference, if I think the person misusing the terms actually cared to know).

[+] randomsearch|12 years ago|reply
I would say some of Computer Science is mathematics. Mathematics is the foundation of Computer Science, but CS is not a branch of mathematics, although the origins of the field are found there. It is an important, core, part of the subject, but it does not entirely encompass it.

For example, CS also includes Psychology, Graphic Design, social science, art, etc.

Also, CS involves the teaching of programming, which is a craft (ignoring edge cases) - crafts cannot be taught through maths alone.

[+] mathattack|12 years ago|reply
My 2 cents on the computer science degree versus coding... (Full disclosure - I have a CS degree from a large public school)

1) Many of the top coders, programmers and data scientists that I know don't have CS degrees. (The top coder I know never finished school. He could move from Assembler to C to Objective C effortlessly, and could do everything from games to operating systems. He wasn't lacking for theory or versatility)

2) Despite this, a Computer Science is more difficult rigorous than most non-engineering degrees. Even at open admissions schools, getting a CS degree means being forced to solve difficult problems.

3) Because of #2, a higher % of CS majors make good programmers than most any other major. (I've seen English majors make good programmers, but at a much lower %)

4) Despite #2 and #3, there are still many unqualified CS majors.

5) There is no typical CS programs. Some are very flexible, some very structured. Some have an engineering focus, some are part of liberal arts schools. Some are too narrow, some are not specialized enough.

6) A few years after college, your grades don't matter. A few years after that, the school doesn't matter. A few more years and your major doesn't really matter. At that point, it's all what you've done with your time. (Though it can help to say, "I have a CS degree. I used to be technical.")

[+] mhogomchungu|12 years ago|reply
Fundamentally,computer science = data structures + algorithms.

in a data structure class,you learn the basic structures like PODs,structs,vectors and linked lists.

in algorithm class,you learn various basic sorting algorithms plus the big O notation and thats pretty much it.

Then you will take a few physics classes,then chemistry classes,then maybe calculus one and two,then probably discrete mathematics class,one or two writing class,if you a lucky,maybe a single semester of operating system class.

you may learn the basics on haskell in one class,the basic of java in another,maybe assembly in another class and you get your degree.Basically,you will leave school knowing only the basics of a bunch of things but not enough of anything.

The above it how it felt to me as a CS major.

[+] aleph_naught|12 years ago|reply
People are incredulous when I tell them I use 90% of the stuff learned while getting my CS degree.

Stuff I've done in the real world:

AI: I've lost count of the number of times I've had to implement A*

Graphics: wrote a ray tracer; matrix transformations

Data structures and algorithms: wrote an approximation algorithm for the travelling salesman problem (christofides); fancier data structures like bloom-filters, lru caches; and just every day coding

Databases: query optimization

OS: Made me aware of systems (context switching, caching performance,...). Scheduling algorithms and how they affect the embedded software I write. Concurrent programming.

Networking: Super helpful for everyday stuff when you understand the underlying principles. I've had to implement an RFC from scratch (DNS).

Linear algebra: Used extensively in a path planner I wrote---with it I was able to reduce the state space by orders of magnitude compared to the standard grid approach.

Statistics: wrote an online algorithm for adaptive windowed linear regression

Even computability theory has been helpful, as it has strengthened my proving and reasoning skills---helping me find holes in requirements, or proving algorithms/invariants. Same with all the theoretical math courses I took (Analysis, Set Theory, First Order Logic ...)

The list goes on...

Above all, my CS degree taught me how to learn CS and beyond.

Sometimes I worry about the potential solutions I am overlooking, because I never fully branched into the continuous domain (control theory, etc).

[+] stan_rogers|12 years ago|reply
Fundamentally,computer science = data structures + algorithms.

You know, I keep hearing that, but nobody has ever been able to convince me of it. Those are, indeed, the things that fall sideways out of "computer science" (for want of a better name), but it's a near-equivalent to the statement fundamentally, fluid dynamics = boats and airplanes.

"Computer science" is about developing a method for reasoning about process. For the most part, we're still stuck in a world where intuition plays a larger role than it ought to when developing processes, both in the computing world and in the physical world. Investigations into process have yielded algorithms and heuristics (what to do), of course, and those, in turn, depend upon data structures (what to do it to), but we're still pretty much at the level where we're dealing with specific instances rather than a more general formal language. Chemistry without knowing much about the atom yet, in a way.

What you learn in school (at least at the undergrad level) is "here's what we've found out so far" (as it is in any subject). And while that can be a big help, allowing you to more easily recognise classes of problems, there is still more intuition than reason involved in attacking the really hard problems. Both "software engineering" and "computer science" are about reducing the amount of fuzzy, squishy, intuitive parts, but in different ways. "Software engineering" is about robust application (finding and understanding the use of the equivalent of "materials" in the field); "computer science" is about understanding the fundamentals of process (and may well extend beyond computing).

[+] kaplejon|12 years ago|reply
My experience was similar to yours, though even more basic. I went for a 2-year degree at a community college, and it felt as though every course was a refresher in "This is a variable, and what a variable does. This is syntax, and syntax means…" Etc…

It wasn't until getting into the "real world" that I realized the full value of my data structure courses. Those were the ones I kept returning to when trying to learn and understand new skills on the job. (Sadly, my 2-year degree didn't cover any algorithm learning.)

So, now I have the advantage of a few years of "real world" experience to try and plot a course for how to get formal education on the remaining pieces that seem to actually have direct correlation to a career in computer programming.

Not sure if it's a blessing or a curse for me, but I just have to keep moving forward.

[+] catilac|12 years ago|reply
I think this distinction is incredibly crucial. There has been so much talk about how a CS degree is useless (and I for a moment bought that garbage as a holder of a CS degree), but it is completely untrue.

As you work with more and more people in this industry, you frequently run into people without a degree, or, more importantly, no true know how, as I do stand by the fact that it's not required to have a degree to learn this stuff, who behave as if they are experts regardless of their poor mental model of how computers work.

It's important for these people to know what they don't know. Reminding people that Code is not CS is a good way to make that happen.

[+] fennecfoxen|12 years ago|reply
Yeah, a CS degree isn't suuuper-helpful for organizing a coherent program around a snazzy framework for the latest web technologies. It's for when you need to do something like, oh, "figure out how to upgrade the work-management system so you can move from coarse-grained lock system to a finer-grained lock system with zero downtime." Then you think back to your old courses covering Parallelism and the like, and plan it out.
[+] sheetjs|12 years ago|reply
> Treehouse CEO Ryan Carson declares “A computer science degree is a rip off…I know because I have one.” Perhaps his CS degree was from a college which didn’t have a very good program or maybe his focus has been web development where you rarely need computer science.

According to wikipedia:

> In 2000, he graduated from Colorado State University with a Computer Science degree

I suspect, like with most fields, that the school definitely matters (and that he may not have arrived at the same conclusion had he attended a school with a better CS program)

[+] rayiner|12 years ago|reply
Colorado State is a major research university and has a pretty good CS program. I certainly wouldn't chalk his opinion up to a CS program that wasn't strong enough. I'd attribute it to the nature of web development versus more theoretically intensive problems.
[+] analog31|12 years ago|reply
I've noticed that the "degree is a rip off" comment crops up among graduates of practically every field from every school, equally from successful people and failures. So I'm not sure that I'd read much into it.
[+] cjf4|12 years ago|reply
The key piece of context about this quote is that Ryan Carson has a vested interest in people deciding they do not need a computer science degree to code.
[+] berrypicker|12 years ago|reply
"... how much you learn in college depends a lot more on you than the college. A determined party animal can get through the best school without learning anything. And someone with a real thirst for knowledge will be able to find a few smart people to learn from at a school that isn't prestigious at all." - PG

Have to agree with this. How good you are at coding is more related to the number of hours you put in than grades or school. People who enjoy coding have the advantage of being able to spend more hours before getting tired/bored, and thus become better coders than top CS graduates who are just trying to pass college.

[+] walid|12 years ago|reply
Well if you think of it, a CEO like Steve Jobs will call the PC a truck... to sell the iPad.

• Computer Science = Truck

• Treehouse = iPad

But how do you make iPad dev tools?

[+] alayne|12 years ago|reply
Well, for starters, he is a CEO not a CTO.
[+] wvenable|12 years ago|reply
The first thing anyone in this discussion has to realize is that different schools can have vastly different computing science programs. While there is conceptual similarities between most computing science programs, they can vary drastically in breadth and depth. And what one gets out of a program can also depend on the path the individual student takes.

If you feel you got nothing out of your education or that your education was mostly worthwhile, that may not reflect on computing science in general but just of one particular implementation of it.

[+] Bahamut|12 years ago|reply
The value of a degree is what you make of it. I think the most important aspect of college/grad school/etc. is that you have the opportunity to push the bounds of your mind. I spent 4 years in grad school for math at an excellent program, and to most people, it would probably be considered a waste since I use almost none of it in my daily work (programming). However, the value for me has been to push the limits of my ability to abstract concepts, and see how other similar high level minds perform.
[+] FrankenPC|12 years ago|reply
When I was 16, I was obsessed with 3D graphics (hilariously primitive back 30 years ago). I learned programming to create , rotate, translate, and shade objects in 3D space. I learned computer science to understand how you manage vector lists, matrix math, and strange recursion algorithms. I learned that programming is computer science applied. Sort of like how math is a tool to apply calculus to real work problems. One won't work without the other. Saying "code != computer science" is a misrepresentation of the symbiotic process that's going on in the human mind. I think a fair statement is: programming(code) is the first level of computer science knowledge.
[+] zhemao|12 years ago|reply
Isn't that exactly what the author is saying, though? He's saying that programming is part of computer science, but knowing how to code doesn't mean you know computer science.
[+] alan_cx|12 years ago|reply
Coding / programming is part of computer science. CS includes maths, electronics, micro electronics, logic gates, how hard drives work, and what not. CS is about computing and computers as a whole. So, coding is only a part of it.

In fact, I see this title as the wrong way round, it should be: computer science is not coding. Too many people think codes know all about computers. In my experience, they dont. They have a limited skill set. Just like support staff who usually cant really code.

Having a CS degree myself, I have always felt at an advantage over people who, for example, only program but know knaff all about hardware, OS's, servers, etc, and support people who only have things like MCSEs, and don't know the low level fundamentals.

For me, having a CS degree makes me a jack of all trades, all be it, master of none.

[+] pyrrhotech|12 years ago|reply
The truth is that the world needs a lot more software engineers than computer scientists. Yes, there are a lot of hard problems that are best solved by government or academic research, but there is a lot more software eating the world. And to develop the vast majority of that software, you don't need much academic CS knowledge.

I know, because I have a mastered in CS and considered getting my Phd. I decided to join industry instead, because I wanted more money. I hardly use any of my CS knowledge on a day to day basis working as a web developer. Yet I make $160k in my mid 20s while my 60 year old professor has never cracked 6 digits... It's sad in a way, but to each his own I guess.

[+] kazagistar|12 years ago|reply
I would far prefer to earn half as much if it meant working only on problems I find interesting and spending my time teaching others, instead of churning out websites. To each their own, but your pity for your proffesor is likely misplaced.
[+] daemonk|12 years ago|reply
A 4 year degree is only valuable if you actually had the mental maturity to take advantage of it at the time (I didn't). Unfortunately, that doesn't seem true with the majority of the kids graduating from high school. They see it as just another hoop to jump through.

If someone told me now that I can spend 4 years just learning things, have access to intelligent people, and great resources/facilities without worrying about a gap in my cv, I would jump at that chance.

I am going to hacker school in Feb, so hopefully it will be kind of like that. Albeit for a much shorter amount of time (3 months).

[+] tomphoolery|12 years ago|reply
Like many things in programming, it all boils down to the samn damn arguments that musicians have. Sure, you don't need a music degree to be a musician. But I'm damned proud that I have one, because it's helped me advance the one thing in life that I love doing more than anything else further past most people my age. I have a B.M. in Jazz Studies with a concentration in Vocal Performance.

The only way you can reasonably believe that college was "a rip off" is if you didn't have ANY fun that whole time. If you can honestly say that, then I am sorry. You allowed a part of your adolescence become robbed by people who told you what to do. But if you had even an ounce of enjoyment throughout college, if the idea of learning computer science made you smile even one bit, then it was absolutely not a rip-off or a waste of time.

"Your time was not wasted if you were happy" - John Lennon

[+] drakaal|12 years ago|reply
This is like saying speaking fluent English doesn't make you a genius, and being a Genius doesn't mean you will speak fluent English.

Having a CS degree won't make you a genius, or guarantee you write beautiful code.

There are 3 factors at play. Brains, Fluency, and Theory.

If you have good theory you won't spend 100 years trying to figure out things people already have figured out.

If you have good Fluency you will write like people in that language write. "Your code is very Pythonic".

If you have brains you may solve a problem no one thought was possible.

I don't have a CS degree, but I'm a "grey beard" as a result I have good theory. I don't speak Python as a first language, or the language I think in, so I don't have good fluency. As a certified Genius I have a big brain and often solve things people didn't think were solvable. So I make up for a lack of fluency.

[+] EpicEng|12 years ago|reply
Where does one apply for their genius certification? Perhaps I can slap that on my resume.

Seriously though, I like the assessment. I've worked with people from all three camps. Everyone has their pros and cons. I work in the medical space and end up spending a lot of time with more academic types.

In my experience they haven't been the best "architects", but they have been great at solving tough problems and writing code that does what it is supposed to do. I work with them to develop it, and then I take our code and integrate it in a way that allows us to maintain it more easily over the years.

[+] MojoJolo|12 years ago|reply
This. If you're judging Computer Science by coding, you are making a huge mistake. Computer Science does not teach you how to code. I remember the only time my university teach me how to code is during our introductory course. Computer Programming 1. And that's it. You're on your own in your coding.

Computer Science is more than just coding. It involves graphs, complexity, math, theories, and much more. Which is a lot. And is hard.

Like math, anyone can do math. But not anyone can be a mathematician. Anyone can code, but not anyone can be a computer scientist.

[+] randomsearch|12 years ago|reply
If you do a CS degree that does not involve being taught to code, and code well, then I would ask for your money back.
[+] bakhy|12 years ago|reply
I agree that the distinction needs to be made, although the exact difference between the two, as many of the comments have already stated well, is hard to define. A good post.

Nowadays academia is under ever increasing pressure to produce fit-for-work experts, and seen from such a perspective it really can look pointless. I personally strongly disagree with such a view. IMO, it should appear to be pointless! It should broaden your thinking and introduce you to the cutting edge of the field, not just specialize you for a certain line of work. There should be programs which will do only such a specialization, but a full-on CS course is supposed to be more. In the end, how well you will work will depend on a lot more than just the school, but a good school will help.

The Law of Leaky Abstractions is, perhaps, a good argument for why it is useful to learn all that theory even though in practice it is rarely needed. Sometimes, you just need to know what is going on behind the scenes.

P.S. I always have the feeling that the Dunning-Kruger effect is strongly present in these discussions. The first programmer that I heard claiming that a degree is useless is also the guy who didn't know what a DB transaction is for and when he should use it. It's not a huge deal, we fixed the bug, taught him, and then he knew. But - not knowing such basics, how could he possibly know what else he is also oblivious about?

We need good schools to teach us that we don't know shit.

[+] was_hellbanned|12 years ago|reply
I have a CS degree from a minor state school. It was okay, not as rigorous as the programs of a few friends who went to much more respected schools, but not bad either. I happened to have an excellent CS teacher in high school. Honestly, almost all of the CS I've employed in 15+ years as a professional programmer, I actually learned in high school.

Personally, I would advise young folks who are already passionate about programming and technology to either go all-out in a true engineering field or pursue something that will equip them with a very different skillset. For example, if you have programming skills but get a degree in business and focus on accounting, you could easily be the most productive member of your department. Meanwhile, you'd have the savvy and knowledge to spin up your own side business doing software consulting or, say, mobile apps.

I would go so far as to say that, assuming you are motivated and already coding and have a decent math background, a CS program isn't worth it unless it's from a really, really good school.

[+] hetman|12 years ago|reply
The difference between software development and computer science is the difference between being able to assemble a car from spare parts, and being able to design the pieces like a new engine or gear box.

The two skill sets don't overlap entirely. However having the latter generally makes mastering the former somewhat easier.

[+] walid|12 years ago|reply
The best analogy I've read in this thread so far.