The other day I was skimming through my feed reader and I came across a post by Leah Culver called A Computer Science Degree Doesn’t Hurt (Much). Having my own opinions about CS degrees (and degrees in general) this really caught my attention. Not surprisingly, I can’t help but disagree.
Like Leah says, you spend years in classes you don’t need. Writing an assembler in assembly for hardware that doesn’t exist is not a useful way to spend time. Poring over parentheses to write an artificially-intelligent tic-tac-toe game in ((scheme)) is not either. Learning some vague high-levelisms of operating systems isn’t going to help you when your web server is serving 1000 hits per second and you’re bumping up against the open file handle limit.
The skills you need to build real-world applications don’t come in school. In fact I don’t even think a CS degree gives you the faculties to learn this stuff. I can’t tell you how many people I’ve met with a CS or CE degree that couldn’t do ANYTHING practical. I’ve interviewed them, I know this. Yes Leah, coding problems are hard. They can be fun. They’re not real though. Give your average CS major a programming problem and they’ll hammer out a solution in some obscure language. Ask them to architect the design of a high-traffic ad server with a db backend and they will run for the hills.
So why does the degree hurt so much? Because all that time you’ve spent in school is lost time. You’ll never get ahead of it. While the CS major was banging their head against some contrived optimization problem, the self-starter was re-writing a high traffic web application from scratch. While the CJ major was wasting their time in a college physics class, the hacker was learning how MySQL indexes affect in a real production database. While the CJ major is still trying to un-learn Scheme and Fortran and Java, the motivated hacker is hammering out a solution in Perl because its the best tool for the job and he’s been using it to build tools for all the years you spent in college.
Try it, get out in the real world. I absolutely PROMISE you that plenty of interesting problems will get thrown your way. They’ll come way out of left field and they will be a lot more fun to solve than something you’re going to get graded on. The tools you need to solve them are available to anyone. Especially if you don’t limit yourself to being a “programmer” who doesn’t know anything about the system underneath. Like I said, when you start banging against the open file handle limit or kernel memory limit, you’ll know you’ve arrived.
Our higher education system is flawed, most critically when it comes to fast-moving targets like Computer Science. While I doubt it will be our generation to stand up and make a change, I hope it happens soon. In the mean time, go do your thing. If you want to drop out and actually pursue something, don’t let anyone stop you.
P.S. It might be unfair to point out that Leah’s blog is toast from being dugg, but what the heck. Mine wouldn’t go down…. Got Experience?
I think that’s a rather narrow view of it.
It’s not a question of school or work, you should be doing both at the same time. Sitting in class for 40+ hours a week is a waste of time unless it’s coupled with real world experience. The stuff that is taught can be valuable if applied to real world problems as it is being learned.
Personally I think CS is for people who couldn’t hack Computer Engineering, but I get flamed a lot when I say that
Regardless, the focus in Engineering is on solving problems, which I think makes a far more valuable degree than CS.
There are people in the world that will succeed regardless of education, using these outliers to disprove the need for advanced education is specious at best.
I agree, I learned nothing about tuning LAMP stacks for tens of megabits of sustained traffic at University, nor did I learn anything there about load balancing and BGP. I’m doing all that and more now because of my own personal motivation, but still, would not go back and undo my 4 years of university.
My two cents.
Sean
When it comes to making a living, your post is probably correct. But a college education is, or at least can be, about a lot more than that.
Too, computer “science” is aptly named. Science is about research, not applications.
Go to this website and you guys will see where Comp. Sci. stands. In anything that is computer related, Comp. Sci. is the piller degree. It does a very job of illustrating the related fields.
http://www.thewebcreator.net/2007/04/23/6-degrees-of-computer-science/
Computer Scientist -> studies some hardware, more software
Computer Engineer -> studies some software, more hardware
Software Engineer -> studies mostly software
Computer Eng. branched off of Comp. Sci., not the other way around; but no matter what, Comp. Eng. and Soft. Eng. are both subfield of Comp. Sci.
I have actually used a lot of the stuff I learned in school to apply towards jobs I have gotten, especially , SQL , digital logic design, calculus (and physics), optimization techniques, OOP, and assembly. Real world experience is key but for me it helped to have a solid base as a launching point in th form of a CS degree. The one thing I think I didn’t get enough of was C and C++ exposer… We focused on Java… Worthless if you ask me.
Ironic you link to Google as an example of a great tool for solving real world problems. Google was founded by 2 CS grad students. And they hire a ton of CS graduates and PhD’s.
They obviously don’t know what they’re doing.
Right?
I don’t think its ironic at all.
A degree and great accomplishments are not mutually exclusive.
You seem to forget a large group of us.
Those of us who sat in Physics class, rewriting a production database.
I hate these posts about the uselessness of CS degrees or the usefulness. What a terrible way to generalize people!
It WAS annoying to be in class with the guys who had never programmed before college but thought a CS degree would lead to a high paying job. Yes, those are the people you are talking about. But no, you can’t judge by the degree.
But to generalize and say the degree is useless - how insulting.
Also, getting the degree does mean solving a lot of real world problems, managing time and assets, working with others, etc.
George, I want to note that I never said the degree was useless. I didn’t expound on its useFULness, but Leah did that.
I think its funny that the only people defending degrees are the ones holding them. I guess you have to justify 4 years and $40k to yourselves.
I started programming professionally before I went back to school, and while real-world coding experience is vital, I learned all manner of things in school that I would never have known to study on my own — and some of them have been vitally useful in sparking good solutions to problems.
How could you possibly know that a directed acyclic graph or a red-black tree is the best data structure for a problem if you’ve never heard of them?
It’s hard to justify something you have no experience of, so I wouldn’t expect someone without a degree to try to “defend” them!
(FWIW, I have a few degrees and now lecture CS at a university).
You make it sound like the holy grail of programming is database driven web dev. SNORE! When was that ever an interesting problem. Its not.
I work at IBM in one of their giant software labs. Several impressive technologies are developed here, including DB2 relational database, C/C++ compilers, the IBM Java virtual machine and Eclipse to name just a few. Everyone here has a degree, mostly CS and a lot of people have masters degrees. This is where the interesting problems are. Pushing data from a form to a database table is not an interesting problem.
My examples were in the web dev area because thats what I do. I don’t know where you got the idea that its the holy grail. Wouldn’t it be a little silly for me to make examples of chip design processes?
Ironic it is that you think your area of expertise is where the “real” problems are.
Bzzt. Thanks for playing. Computer Science != Software Engineering.
I think you’re 100% correct in that CS doesn’t prepare you for “real work”, only”real work” can do that.
Physics is useless for a CS major / software jockey. But solving physics problems (understanding a system, reaching a correct answer, working through all the necessary steps) is a valuable skill to have no matter your chosen field.
The reason that CS is good is that it teaches you timeless fundamentals (leaning towards math, compilers, assembly, etc). The reason that CS is bad for real-world use is that it doesn’t (necessarily) teach you about unit testing or performance tuning oracle (or mysql, or postgresql, or bdb, or sqllite, or sqlserver, etc).
And if you had to pick just one way / just one language, you’ll end up picking Cobol, or C++, or Java, or Python, or C#, and that’ll end up being the wrong tool, if not right now it’ll be “old news” in 5-10 years. Which is why your CS majors are writing solutions to your problems in Prolog and Lisp. Take them under your wing, whack them with the reality-stick a whole bunch and once they start getting that real-world experience they’ll be flexible, productive, and valuable.
I learned essentially nothing in my four years of undergraduate study, let alone graduate school. I left after a semester and a half because I realized I wasn’t gaining anything from the experience.
I went to grad school because it allowed me to keep my work study job. I am now a full-time employee, and I’ve learned more here than anywhere else, mostly because I’ve had to deal with real world issues and also I have the freedom to make decisions about the development process. For example, I decided to switch development of my first major project here from PHP to Ruby, and I had barely written anything in Ruby before. But that freedom to experiment and learn on my own was a major win.
I wish CS focused more on web development rather than OS and arcane console applications (i.e. writing an address book for DOS or solving the knight’s tour).
I think the CS degree is meant as a supplement and a way to help a person learn how to learn. It gives a base that can only be received in a classroom. All the real world problems can be learned on the fly as long as you have the determination to solve them. What the CS degree gives you is a base that allows you to understand everything better thus allowing you to adapt more easily.
You can’t teach everything about modern CS it changes too rapidly. So the curriculum must give you tools to draw from to allow you to learn. I think most Science degrees are like that. Engineering certainly are.
I think the “learning how to learn” malarky is the most misleading trick the University money machine has every played. “Learning how to learn” is bullshit. We all are capable of learning, doing some intermediary nonsense does not improve or enable that.
I just had a conversation with some university friends about the same topic. Teachers say they teach you how to learn, actually we learn to learn because nobody teaches us to learn and yet we have to, in a catch-22 like circumstance the people who can force themselves to learn generally survive and graduate whilst others fail. Few professors can teach, the best ones in my opinion are the professors who challenge your capability to adapt to learn!
my humble opinion only
I don’t have a CS degree, but I’ve used assembler, Lisp, and physics (in game engine development) plenty.
On the other hand, I’ve never come hear a “high traffic ad server”, “production MySQL index” or a “LAMP”, nor do I care to know what these are.
Yea, some coder may be doing all that work for free somewhere, but nobody will hire him because he doesnt have a degree or any experience with a company. Not to mention he will probably burn out in a few years because he didnt have any solid kick it time during college. Who wants to forgo the best 4 years of your life for some job?
Not to mention most companies dont support perl or other scripting languages (and I love perl, .net/java not so much) because “nobody knows it”, and “nobody will be able to support it”, but the average developer doesnt know it because most people arent *hiring* for it. Creating an endless cycle.
I chose to go to grad school during the dot com boom when everybody was saying drop out and make 75k. Well with no degree, when that dot com noise was over what do you say during that interview? I have experience with some weird niche app in some weird niche language (non .net/java languages are considered niche) that some company nobody cares about used! Uh, yes I am a college dropout… But I worked on this niche, obscure, barely worthwhile and usable open source project! Yea well that doesnt matter, companies think open source is stupid. That may be a gross generalization but that is the attitude I have seen. Unless you hit the lottery and work for Google or something but ooops, they like to hire PhD’s.
Looking back I would say degree all the way. Unless you have bottomless reserves of energy with no wife and no kids, you wont be working a full time job while tuning the LAMP2 stack when you get 30, the LAMP3 stack when you get 33, or the LAMP4 stack when you get 36. You will need something to fall back on, and a lot of free work burning both ends of the candle in some highly specialized niche area may not be all that helpful.
You really aren’t an engineer, are you? You don’t sound like somebody who has the capability of optimizing load-balancing on an organization. Because if you were, you would not be so dismissive of theoretical skills. Because, in truth, you can’t solve hard problems without hard math. So I guess you are just the type of guy that is dispensable.
Yeah you’re right, I have no skillz.
I’m often surprised to find that people think the point of CS education is to learn to use specific tools. If you think that is the point of a CS degree, of course you will think you can just go learn the same stuff via Google.
But that’s not what it’s about. I was told this by a professor before I even set foot in a classroom: tools go out of fashion too fast, so you need to learn how to do things in an abstract sense, and then applying those skills to the tool-du-jour is simple.
I was forced to program in many different languages in school, some of them out of date (Smalltalk? Ada95? e-Lisp?). I’ve never used Smalltalk outside of a classroom, but it gave me a new perspective on OOP that neither C++ nor Java could. Now, every time I use an object oriented language, it’s that much easier, and I’m that much better, than I would have been before. That’s one advantage to a formal CS education.
Another advantage is that you have to learn all of the theory that is important, but many self-taught programmers ignore. Sure, you can write a function. But can you predict how it will perform on a very large dataset? If you figure out it’s too slow, do you have strategies for optimizing it? These are things you don’t learn just by Googling for C++ tutorials.
I don’t know… I’ve been programming for four years now, entirely self-taught, but I can’t even get an interview. Why? No CS degree. Apparently, according to the last one “Because self-taught programmers can’t write structured code.”
When asked to clarify, the response was “You know, code with structure.” I’ve given up for the time being and started taking CS papers by correspondence.
So yeah, you may not need a CS degree, but plenty of people think you do. Oh, and I do think you need the maths that come with them - because someday, someone may ask you to implement an Erlang distributionM/a> based queueing algorithm.
You sir, are applying at the wrong places.
Think outside the box a little. I have recruiters call me almost every day, if you’re truly skilled send me an email and I’ll pass your info on. If you’re not, don’t waste my time.
I went to school to get a CS degree, and I learned the same lesson.
All you do is spend your time learning to analyze algorithms so that you can write code that would fit in the memory of a machine that was slow 10 years ago.
You also spend all your time on theoretical crap that has no real-world application.
If you want to further the world of theoretical computer science, get a CS degree. Otherwise, just get a job!
I finished with an English degree, and now I am building the biggest supercomputer in the entire world! Go figure.
You are all wrong.
Youll all be outsourced in a decade or two regardless.
Have fun being POOR
While the ‘hacker was learning how MySQL indexes affect in a real production database’ the computer scientist was learning how to design distributed database systems, map xml to sql, optimise database query processing and all this in just one of the 40 courses he is taking over the 5 years.
Creating high performance websites is not a trial and error approach as your suggesting. The author of memcached did study CS, so did the author of lighttpd. You will find that most of the tools you are using right now originate from people with some sort of formal background.
You see, most CS courses give you multiple tools to think about the problem. So that instead of just ‘hacking away’ at the task you might come up with a elegant new solution.
Most people who don’t go to school don’t spend the time learning the innards of MySQL or anything, they spend it slapping out half-assed code in FoxPro, VB, or PHP.
You can learn anything you want out of school — the execution cost variance between linked lists and resizable arrays under different conditions, the internal workings of garbage collectors, how to implement Hindley-Milner type inference — but you’ll start with a much better basis for understanding these things if you have a CS degree under your belt.
If all you want to do is barf up yet another CRUD application — yeah, blow off school. But if you want to work on problems that challenge your brain, school can give you a solid head start toward really understanding computer science.
This post is 100% right.
You seem to be confusing Computer Science with what most colleges call, “Computer Information Systems”. If you graduate with a CS degree and don’t know how to set up a database with MYSQL and php you’re fine, you can learn. You’ve proven that you can learn quickly, and you have the large basis of knowledge that helps you make informed decisions. If you didn’t go to college and are asked to do lambda calculus or write decent asm code, or ever explain what the fuck the MMU does. Then you will always be a substandard engineer. If you want some fucking 20 year old perl savant who spends his weekend playing with MYSQL in his moms basement, and want to pay him chicken feed. Listen to yourself, When you actually have a problem fitting someone with an education hire an engineer. If this was slashdot, You’d be -1 troll.
I’m not confusing anything. I don’t even know what a CIS degree is, we don’t have those on this planet AFAIK.
Speaking of confusing..this isn’t Slashdot.
I think you’ve just hit the nail on the head. You don’t know the difference between a CS and a CIS degree. Every example you’ve given of “real world’ problems are only the real world problems of a CIS major. For the work you’ve described, I’d totally agree you don’t need a degree to accomplish those tasks. A person getting a CS degree should hopefully know they’re looking at different jobs with the knowledge they’re about to obtain. Otherwise the degree was a waste.
Agreed. The CIS program my local college offers prepares students to be “computer workers” and do exactly this kind of stuff.
Computer Science degrees are a good place (but not the only place — anything can be learned from self-study) to learn theory.
People who don’t know theory are the ones who will try to parse a non-regular grammar with regular expressions, because they don’t know it’s impossible.
They are the ones who will have no idea why some regular expressions in Perl take a REALLY LONG TIME (exponential) to match.
They’ll use an n^2 algorithm when an O(n) algorithm would do, without realizing they’ve done so.
They’ll treat data structures and operating system services as magic, without understanding the implementations and their inherent costs.
These people can get a lot done — don’t get me wrong — but I wouldn’t leave them on their own to design hard systems. It’s too easy for a person without that theoretical depth to make a bad decision without realizing it.
Also, just as it’s possible for people to learn theory from self-study, it’s possible for people in college to be getting lots of experience. That’s what open source and internships are for.
You said earlier that it was funny that only those who have a degree defend it (statement that was proven false shortly thereafter). I find it relatively amusing that those who really start whining about the importance placed on degrees are the ones without them.
Nobody says work experience is bad. Nobody in academia says it’s bad, either. That would be foolish. In fact, if you intend on going into the industry, you’re encouraged to get an internship or to co-op while you’re there, because work experience is valuable. College does the following:
* Teaches you to think. Not to learn, to think. In a structured way, typically a mathematical one if your discipline is engineering- or science-related.
* Teaches you variety. Perl may be the best tool for the job, but you’ll have an easier time identifying that if you’ve coded in everything from assembly to Lisp to C++ to Java to Ruby. You may well not learn all of those outside of college.
* Puts you in an environment where you meet a ton of very very smart people. There’s nothing quite like bouncing ideas off of smart people to improve your own abilities. Whether those smart people are professors or fellow students, there tend to be more of them at a university than there are on one team in one company.
* Teaches you where things come from. You may think that it’s unimportant to know how your CPU caches RAM requests or how a pagetable works when you’re load-balancing your database servers, but you’d be surprised. You may think it’s worthless to know what the various caching algorithms are, but you might find yourself using one of them to reduce the strain being placed on your database server at some point. Sure, you can learn it on-the-fly when you’re coding, but if you’ve got the degree and you’ve already seen it, you’ll come to both the conclusion and the solution faster.
* Teaches you what proportion of the programmers you run into will be bad. For all the smart people you meet in college, you’ll meet many times over those who have no clue what they’re doing. It’s perhaps an even clearer picture in the college world than in the real world.
Now, each of these depends on the curriculum, but most are typically the result of a good curriculum. You can get this without going to college, it’s just going to take a ton more motivation and dedication and time, because you have to do the hunting yourself, and you typically learn in a much more scattered way. Those who can get by without a degree are fewer, and they still tend to miss out on four solid years of having some of the greatest minds in the field at their disposal.
And then there’s the fact that we’re talking about a CS degree, not a degree in web development. A CS degree typically means a focus not only on software engineering and what have you, it also means a significant focus in computing theory — in the math behind what’s happening in that machine. Sometimes it focuses almost exclusively on that.
A final note: you make the amusing comment:
Why isn’t it? No interesting algorithms involved in that that you might one day apply to something else? How do you know? Is Scheme not worth learning? Why not? Is it never the best tool for the job? How do you know if you don’t know how to code in it? Because you don’t like parentheses? What kind of reason is that?
Now, I personally don’t know Scheme. I’ve been wanting to learn Common Lisp and haven’t due largely to lack of time. I had some parenthesis-phobia, too. And then I went `wait… I don’t want to learn the language because it has too many parentheses? What kind of reason is that not to learn a new way of looking at programming?’ Might I never use Lisp again? Maybe. But knowing it alone will give me another perspective I might apply elsewhere — even subconsciously.
In short, what CS tends to give you is grounding and people. You can find both without a degree, but it will almost certainly take you far more time to get the same quality of either.
As for the last jab at Leah’s blog: nice. Maybe college teaches us not to be arrogant smart alecks, too? Nah. We probably have more of those than anyone.
If only a life was only made of what you do for a living, this might make sense. However, there is a LOT of value to being able to interact with people on levels and about subjects which go far afield from anything having to do with a computer. That is, going to college is about a lot more than what you learn in class or at an internship.
It’s just as much about learning to interact with others (something a lot of developers can’t do well) and have a well-rounded interest in something that’s not on the Internet (again, something with which many developers have trouble).
Ok, you’re comparing computer science to something which requires a completely different skill set? What are you trying to prove?
So what, computer scientists aren’t trained to create high-traffic ad servers? Guess what, that just involves being familiar with different technologies and approaches.
Computer science is where the real innovation is happening (and EE, too)
kudos to that self-starting Perl hacker. He’s the type of guy that leaves such a mess I get paid big bucks to fix in Java.
You said earlier that it was funny that only those who have a degree defend it (statement that was proven false shortly thereafter). I find it relatively amusing that those who really start whining about the importance placed on degrees are the ones without them.
Nobody says work experience is bad. Nobody in academia says it’s bad, either. That would be foolish. In fact, if you intend on going into the industry, you’re encouraged to get an internship or to co-op while you’re there, because work experience is valuable. College does the following:
* Teaches you to think. Not to learn, to think. In a structured way, typically a mathematical one if your discipline is engineering- or science-related.
* Teaches you variety. Perl may be the best tool for the job, but you’ll have an easier time identifying that if you’ve coded in everything from assembly to Lisp to C++ to Java to Ruby. You may well not learn all of those outside of college.
* Puts you in an environment where you meet a ton of very very smart people. There’s nothing quite like bouncing ideas off of smart people to improve your own abilities. Whether those smart people are professors or fellow students, there tend to be more of them at a university than there are on one team in one company.
* Teaches you where things come from. You may think that it’s unimportant to know how your CPU caches RAM requests or how a pagetable works when you’re load-balancing your database servers, but you’d be surprised. You may think it’s worthless to know what the various caching algorithms are, but you might find yourself using one of them to reduce the strain being placed on your database server at some point. Sure, you can learn it on-the-fly when you’re coding, but if you’ve got the degree and you’ve already seen it, you’ll come to both the conclusion and the solution faster.
* Teaches you what proportion of the programmers you run into will be bad. For all the smart people you meet in college, you’ll meet many times over those who have no clue what they’re doing. It’s perhaps an even clearer picture in the college world than in the real world.
Now, each of these depends on the curriculum, but most are typically the result of a good curriculum. You can get this without going to college, it’s just going to take a ton more motivation and dedication and time, because you have to do the hunting yourself, and you typically learn in a much more scattered way. Those who can get by without a degree are fewer, and they still tend to miss out on four solid years of having some of the greatest minds in the field at their disposal.
And then there’s the fact that we’re talking about a CS degree, not a degree in web development. A CS degree typically means a focus not only on software engineering and what have you, it also means a significant focus in computing theory — in the math behind what’s happening in that machine. Sometimes it focuses almost exclusively on that.
A final note: you make the amusing comment:
Why isn’t it? No interesting algorithms involved in that that you might one day apply to something else? How do you know? Is Scheme not worth learning? Why not? Is it never the best tool for the job? How do you know if you don’t know how to code in it? Because you don’t like parentheses? What kind of reason is that?
Now, I personally don’t know Scheme. I’ve been wanting to learn Common Lisp and haven’t due largely to lack of time. I had some parenthesis-phobia, too. And then I went `wait… I don’t want to learn the language because it has too many parentheses? What kind of reason is that not to learn a new way of looking at programming?’ Might I never use Lisp again? Maybe. But knowing it alone will give me another perspective I might apply elsewhere — even subconsciously.
In short, what CS tends to give you is grounding and people. You can find both without a degree, but it will almost certainly take you far more time to get the same quality of either.
As for the last jab at Leah’s blog: nice. Maybe college teaches us not to be arrogant smart alecks, too? Nah. We probably have more of those than anyone
Apologies for the double post…
Edgser Djkstra once said of Computer Science corriculums that their purpose was not to study computers, but to study computation. The hardware (for purposes of studying the concepts) is irrelevant, since the hardware, and even the tools change quickly.
Admittedly, a Bachelor’s degree in anything proves indicates to most employers that you can be trained in something similar to your field of study. It indicates that you are decent raw material with which to begin building a decent employee.
Anyone can learn enough to make a living doing IT work with current tools and no other education. That doesn’t mean they have the background to understand how technology changes. Assembly for most work is not immediately useful, but knowing how the compiler is likely to translate your little bit of C/C++ code into assembly can help your efficiency, or knowing how it likely happened can do wonderful things for your ability to debug systems for which you don’t have source code. Non CS related courses are meant to expand your experience, so the next time you have to write an algorithm that models something (group sociology, physical systems, etc) you aren’t completely without experience. And given that any learning is an exercise in metaphors, knowing something of an unrelated subject may give new insights into an actual IT related problem. For an example, see biological swarming algorithms and large network routing.
Any education is meant to help you peer beneath the surface of a problem and deal with conditions that seem to change with increasing velocity. If you can do that on your on, more power to you. But it is difficult for an employer to have any idea that you are that one in a million savant.
You make a valid point, but as someone with a CS degree, working towards a MS, I must disagree. CS is about fundamentals. To be good you must understand them AND keep up with some of the latest tools. Everyone has seen people with a CS degree that did not know much. The same applies to people without the degree doing the job. As for me, I did not have much experience before going into the workplace. But that’s why you work…to get experience. I worked hard, then rose through several promotions. I worked with a guy that was a History major…but he learned on the job.
Realistically any job programming, sales, construction, whatever…is just that a job. Its not school. You will always find out that 80-90% of what you need to know is “On the job training”. That said, I wouldn’t want to fly on an airplane or cross a bridge designed by someone that didn’t know the fundamentals.
What it taught in school is not to use a tool, a programming language or something else. School should develop your mental attitude about resolving problems no matter what tools/language you are using.
david, you sure are defensive. what gives?
Well I have to agree with some of the posts, and others not so much. I have a degree in CS, was it time well wasted or time well spent? I’d have to say time well spent. I learned alot during uni, did I learn everything that I know today? hardly. We spent the majority of our time working in java where are teacher basically regurgitated the documentation, very poorly I might add. When we switched over to C# for a week the teacher’s (different guy then the java) main focus was on design patterns, holy shit was that alot of fun, and time well spent.
Now during my years obtaining that degree did we learn to solve real life problems? Not as much as I have learned working on my own. Ya I said it I work for myself, not anybody else. I make pretty good coin to, doing what I want when I want. Before I was finished I started looking around for places to work, and realized that I could make it on my, sure working in the oil patch sluggin iron was hard work, but working at nights on my sites paid off. Mind you that was only for a short period, but hey you can never get enough character
I switched schools in the middle as well. The first school I was going to we spent alot of time learning marketing techniques, and sociology. That was some what interesting, but personally I think it would have been better if the marketing class was spent learning about ppc, or what to look for when buying a web site/application to resell, rather then if the tim hortons down the street would be a sound investment. Sure you can take what you learned and apply it, but when your trying to teach it to a group of people that are only concerned if there code compiles, it can be a hard sell. I wont even go into the sociology bit.
I’d have to say it depends alot on your teachers, and your self. If you dont have the desire to take what your learning and take to the next step, a degree wont help you in the real world. If you have a teacher like my java teacher then it makes it that much harder to take it to the next step, but one like my C# teacher, holy shit look out, because you can apply it to almost everything.
Just my thoughts on the subject.
You will learn a lot about what you will have to do at your job once you actually get your job, whether you create the position yourself or find an already existing company that has it to fill. School - what you learn there - should serve as a foundation for you.
It may also depend on the program. I have a BS in “Computer Science” but it apparently had more in common with computer engineering. The focus was on C++. That meant everything from almost straight C for a few UNIX courses I took and the visual C++ we used in Object Oriented Designed and Software Design. We were exposed to assembler and C#, and in one class wrote the same program (a simple game) in C++, then LISP, then prolog, and finally Java. I took classes on basic low level operating system stuff, compiler design, data sctructures, and all that. We learned a lot about how things worked and got a lot of background.
I suppose at the end of the day I could’ve done without it, but I wouldn’t undo my experience at university either. Personally, I managed to finish college with over 10 years experience coding in one form or another, because many years earlier as a little nerd I started teaching myself things.
But for many other students, their first time coding may be late in high school, or worse yet, early in college. For them, a computer science degree (a good one at least) doesn’t hurt.
You make a point in your post, but it is too narrow and unsuported to be valid.
First, as others said, knowledge alone is worth nothing. Application is, of course, how you actually learn things (in any area). Some universities couple theory with practice, others don’t. Some universities just have the research mindset. And you should thank them for that.
Now, the “Real World”. What is that, that people talk about? The real world of computer science is MySQL, LAMP, Perl, stack evalutations and what not? Is it the real world even programming? Actually, not. Programming is such a basic thing that people with no degree at all can do it. And they can do better than some people *with* a CS degree.
But, remind me, the degree is called Computer Science, not Computer Programming. Programming is only a subset of CS, even if the most fun, or with most applications. Now, i wonder, if people who attend to computer science courses dream to be a Perl programmer, or a web developer, or i dont know, a COBOL analist.
The fact is, if TI was an ant society, programmers and database admins, and whatever, would be the lousy workers. I’m proud, however, to be a worker. I love to program. But the contrieved view of the world (and the “Real World”) is what make workers *just* workers.
Yeah, you can learn your REST, be proficient at we apps, or even excel hacking the Linux kernel. While the “real world” programmers are doing that, us, the computer science graduates, the “obscure programmers”, the ones who lost years of our life studing complex mathematics and whatever, will be designing the programming languages people will use. Because when it comes to the *actual* real world, the one that can have no flaws, the one that can get people killed if it doest work right, the one that will cost billions (not millions) of dollars if they fail, the ones designing these systems will be computer sciences.
I wonder, if we would be having these “conversations”, if all Dijkstra, Backus, Turing, McCarthy, Church, wanted to be was programmers. I wonder if they think their background in mathematics was useless.
Those of us with CS degrees come up with the solutions to your real-world problems. Grunts like you implement them.
And implement ‘em in perl and java, too. I mean “High”, “Traffic”, “Ad”, “Servers” ? SO IMPRESSED. Keep up the good work !!
Amen.
This is, without doubt, the stupidest thing I’ve read on a blog in a long time. Banging on limits is a sign that you’re using the wrong algorithm, not that “you’ve arrived”.
Moreover, you’re talking about college like it’s vocational training. You don’t know what you’re talking about. Or, if you did go, then you weren’t paying attention. I’ve seen a lot of that, too.
In any case, go ahead and write to Don Knuth, or Larry Page, or Vint Cerf, or Roy Fielding (who was at my own university) and tell them how they’re never going to get ahead of the curve and how they wasted all that time in school. I’m sure they’ll agree.
You’re a git.
Tell me which crap school did you study CS ?
All the things you mention that you use - kernel, webserver, MySQL (database), Perl etc. require good knowledge of algorithms & data structures, OS etc.
Would your MySQL server handle thousands of sorting queries if all it did was bubble sort with O(n square) complexity ? Or your webserver handle thousands of request if it always forked a complete new copy of itself for every request ?
Grow up. Using tools is one thing and developing them is another.
David,
As someone who went to school with people who had near perfect grades in school and went on to get computer engineering degrees from some of the best schools out there (MIT, U of Waterloo, for example), I can tell you this… I still meet with these people every few years and I agree with you 100%. Most of them are brilliant people doing boring work and never think outside the box. They don’t take chances and they’d never consider anything risky.
Too bad really, because if you don’t take a risk, you never know how far you could have gone with your talents.
I think they like to meet up with me every few years to hear about what might have been (for them).
I always see anti-CS/CE comments from people that have a chip (no pun intended) on their shoulders because they don’t have a CS/CE degree. Or, any type of 4-year Baccalaureate. And, they have attained some rank and position in their company where they can interview Baccalaureates. And, now, they can’t change jobs or get more company rank because they don’t have a baccalaureate. It’s this type of thing that makes me wish I had gone into Health Care.
[...] I read the article Computer Science Degree Does Hurt (A Lot). Its always fun to read about how your last four years were spent in vain, but I have to admit that [...]
David,
I think you’re being unduely harsh on the collegic experience, and I just finished writing a response on my blog. I’d be very interested to hear your responses to what I wrote.
Cheers, Will
Your making an invalid argument. CS degrees are meant to teach you how to think, how to solve problems, how to be adaptive to change, not necessarily how to do real work. Nothing can ever replace real experience in that regard. The problem with self-starters is thay hack far more that CS grads. Hack hack hack. I don’t want hackers, I want software developers.
[...] Dellanave - disagrees on what the above post is talking about. [...]
came back and visited this thread.
what a bunch of little whiners we have here. oooh. I have a cs degree, now I’m hurt that you insulted it! please.
I love to hear the various people try and pimp their creds here - mr ‘I fix perl problems with java’! boy that’ll sure fix your problems! use java! geez.
anyways.
some of the DUMBEST people I’ve met have CS degrees. I work at a university - hell, some of the dumbest people I’ve met have PhDs in computer science.
get over yourselves. most of the time, the degree you get when you are a child in college has very little to do with what you do in the adult world.
You obviously have not seen Old School.
The whole point of going to school is to do kegstands and hit on underclassmen co-eds while you still have the chance.
hey hey physics is fun too
Degrees teach you how to get out of you backside and really learn stuff e.g. stuff you may think is boring, you never have thought would be useful or you haven’t even heard of. Yes some of the stuff is useless but you know know the jargon, why it is useless and can avoid similar snake oil in future. Some of the stuff can blow your mind, you can learn it properly and why the detail is important e.g. for me: RDMSs, referential integrity, normalisation, OOP, OOD, 3D Graphics etc. Universities can also have very good libraries (which the non-students don’t have access to) where you can find loads of interesting stuff not on the Internet. You also have the time, university resources and other people to try stuff which are not feasible elsewhere!
Short course, casual learning, training courses and IT jobs don’t offer the same opportunities e.g. there is no way I could have afforded, found and had the time to read all the books, journals etc. I read at university (in addition to module books) or met the varied mix of smart people.
As for perl, nasty syntax language, I found Assembler (6502, 68000, X86), Java, C, C++, csh, Javascript, AREXX etc., far easier.
IMPORTANT - Don’t go into Computer Science!!!!
Compelling reasons not to do CS
================================
1> Huge outsourcing risk - you simply can’t compete with the Indians/chinese for this due to labor cost. 40K in the U.S. puts you on the poverty line, but in India it makes you upper-class citizen!!
2> You will never have a stable job. CS jobs are a string of projects..when your project ends, your boss (or you) better have more work lined up for you. Usually a project manager only keeps the hardest workers (in hours/week), or the ones that he likes…if you’re not in that group, you can probably be laid off. Most people only last 2 years in a company before looking outside.
3> Every time you join a new company (or even if you stay in old company), you’ll be a little older, competing with 20 yr olds. It’s a little embarrassing for a 30 y/o to be mixed in with 20 y/o — so you may have to move into management.
4> Moving to management means that you’re not doing “computer science” any longer!! It’s a lot of politics, meetings, debates and presentations etc. You will certainly not be doing anything your degree trained you for, or promised you.
Look around in ANY company — you may see 1000 young programmers, 100 managers, 10 directors, one VP (e.g.), with each higherlevel older than the lower level…the programmers that don’t move up get pushed out!!! Most hard-core CS’ers will hate moving “up”, so “out” is the only other option.
5> Anybody can get a CS degree anytime they want (just take a 1 yr masters at local uni), so it’s no big deal…if ever the market becomes “hot”, a new flood of people will come and “cool” it off immediately (if india/china doesn’t do it beforehand).
6> Most CS jobs don’t even require a degree…anybody can learn DB, SQL, VBScript, C++, JAVA, PHP, web-servers etc. from a cheap $30 book and start working immediately!!!…especially in a “hot” market.
7> If you’re a “hard-core” programmer (with Ivy-league degree etc.), it helps a little bit, but it cannot alleviate the pressures above!! Eventually, companies are structured so that the mobs of “others” (Sales folks, marketing, legal, business management, secretaries) get a huge piece of the pie also, so that they don’t feel left out — most of your time will be spent appeasing other departments.
8> If you’re smart enough to get a CS degree from a good school, you’re smart enough to become a doctor (M.D.)…it just takes longer. The lowliest doctor gets paid more than any grass-roots engineer!! Doctors usually LOVE their jobs, while most CS’ers hate their jobs (why is that??). A doc-in-a-box family practitioner usually takes home $120k after taxes…a senior CS’er will make at most $110k BEFORE taxes IF they work in silicon valley. Outside of the valley, there’s less chance of ever making that much.
9> People that go into poly-sci, humanities, marketing majors deserve the jobs they get…they’re usually happy doing the stuff they do. They know they don’t give a damn about studying hard…they usually just care about partying, mingling and socializing…they don’t mind eeking out a living doing simpleton jobs. People that do CS really try hard to get a degree, and the degree ends up screwing them…that’s the big tragedy!!! Sure, it’s better than getting a poly-sci degree (in terms of dollars), but it’s nowhere near what the “hard-core” CS’ers could be getting in terms of work-hours, ability, etc.
9> The other arguments that a degree will somehow give you super-skills or special-knowledge in CS is pure crap…it’s true that it’ll teach you theory, but 95% of the jobs don’t require anything more than VBScript. The other 5% good research jobs are reserved for PhD’s at select companies like google/yahoo….if you get a PhD in CS, you better be good at EVERTYHING (math, CS, presentation skills, socializing, procuring funding, teaching, etc.), otherwise companies may find you too expensive to keep around
10> In my humble opinion, computer science/engineering majors have been, and will be in the near future, ROYALLY SCREWED.
Compelling reasons to get a CS degree
======================================
1> If you want to work quick and fast from years 20-30, make easy money and get the *uck OUT (start a liquor store etc.)….make it a job, NOT a career
2> If you’re already financially independent, and want to learn CS for your own sake, and you don’t really need a job to make money.
3> If you love (and are good at) politic-ing, networking, giving FORMAL presentations, leading 30-people group discussions (doesn’t matter what subject) — you have a good shot at becoming a manager/VP. You will have an OK time in this career, with less chance of being outsourced.
Much of the foundation of Computer Science was created by people who literally did not have the advantage of the *existence* of computers, and those who did, had nothing like the very practical, accessible technology we can take for granted today. It might be helpful to look at Computer Science from a pedagogical point of view, realize that we are not taking advantage of the fact that we actually *have* computers finally (and we have only really had them for a short time), and modify the approach of teaching theory in order to adapt to a modern world. It may be important to teach Grammars and Automata and Turing Machines, but does the student *really* have to be taken to 1936 in order to understand it? Does the database student *really* have to walk in Codd’s shoes in order to comprehend relational calculus? Does the operating systems class *really* have to be taught on a hypothetical machine that’s obsolete even in a hypothetical sense?
It bothers me quite a bit, that we are teaching Computer Science in the way it was taught in days gone by… before we actually *had* decent computer systems. We have them now, finally, and we should take advantage of that.
But what do I know, I’m only entering my fifth decade of using computers, but only the second decade where the computers are actually approaching a threshold of human proportions with respect to the human requirement for the tool. Finally. Maybe I should write a SIGCSE paper instead of some random blog post