Here are the responses. They are very interesting:
I do not have a computer science degree but I am a full-time programmer.
Most of the people that do what I do have CS degrees. I am also
disappointed in my career choice and looking at going back to school for
something else like law.
It’s not the money. I earn enough to live comfortably in a nice (but not
huge) house in a nice area while my wife stays at home with our son. The
reason is just that I can’t imagine doing this for the rest of my life.
For one thing I am an ambitious guy. I am 30 and have already hopped
between four different companies since college, always enjoying every
job but leaving to take big bumps in salary. But I am running out of
room to do this. I love my company but there is absolutely nowhere I can
go upward, no new responsibilities I can take on. Here is the key: the
skills that make you a good programmer are not useful for management. So
until my company becomes huge and needs 4 more programmers there is no
chance I can ever transition to leadership. Even if you are great at it,
by nature a programmer is a grunt and likely to stay one.
The other thing is that it takes a very narrow and specialized skill set
and ignores any other talents you might have. I have great attention to
detail, but I am also a good communicator, love speaking in public, and
do enjoy a little activity once in a while. Only the attention to detail
is ever utilized in my job. That can be pretty unfulfilling after a
while. Sitting in a cube all day and not having to talk to anyone gets
to be a drag unless you are the classic geek stereotype.
It’s not really that complicated actually. CS jobs are only glamorous in
the sense that we are sometimes in awe of a Mark Zuckerberg who creates
a fortune just out of the workings of his brain. But think of the “cool
guy” at a party. He might be a doctor, lawyer, carpenter, electrician,
mail man … but never ever the CS major. Even a Mark Zuckerberg has to
buy his coolness. At some point, being that guy can get old.
I wouldn’t go back to school for law. It is interesting how this emailer says that there is comfortable money but there is a ceiling. You can’t rise above being the grunt.
The article seems to stress that student loans are the cause of the great unhappiness.
I’ve done my undergrad very recently (graduated in ’13) and am about to graduate with my Masters in the Spring, but I harbor no regret at this stage. I’ve enjoyed a lot of what I’ve learned (and lamented the rest :P), but with financial aid, being a teaching assistant to get tuition waivers and an income, and financial assistance from back home for fees, I am neither saddled with debt nor regretting choosing this major.
Because programming is easy. Programming is construction, CS is engineering. CS degrees teach you how to build skyscrapers but the paying jobs need you to build sand castles. Not even building sand castles. Digging holes. The only way around this is getting a graduate degree and doing robotics research or something. A major part of the workload is fixing terrible code that was outsourced to some eastern European country that doesn’t exist anymore. The fact that you can easily teach yourself enough code to do typical office work before you graduate high school. It’s almost a guarantee you’ll be surrounded by people that don’t have a degree in CS or even a degree at all. Doing the same job as you. Probably for more money. You’ll be constantly surrounded by the evidence that you could have skipped the whole ordeal and still landed in the same place.
If you aren’t continuing in academia it’s basically pointless. If your goal is just to get a programming job at a cubicle farm, get MS certifications instead of a degree. It’s more specific to the work you’ll be doing, is cheaper to do, and is more valuable to companies than a degree. If they want to be an authorized MS shop they need a certain amount of employees with MCP certs. I forget the exact details of it but it’s basically like a certification for the company, which is useful for consulting firms.
You’ve actually hit that nail on the head on your blog before. It’s basically grunt work of the 21st century. But there’s this weird disconnect because it’s treated like science/engineering, but the work is rote and requires nothing intellectual aside from the specialized knowledge on how to do basic programming. It’s more like a trade. Not to knock trades, it’s just the disconnect from the education and the work. I hate that I went through 4 years of “education” that I hated to get a job I could have done when I was 17. That I hate.
I need a new job.
Malstrom, Malstrom, Malstrom.
It’s an interesting survey, but unfortunately there are some flaws in it.First and foremost, if you actually read the study (you did read it, didn’t you?), it specifically says:The sample sizes by any one major are too small to yield statistically valid results, so particular caution should be taken in estimating the perceived value of any single field or major.Note that there were only 560 respondents. Only about 37 of those were “Computer/Information Science” majors. That’s not statistically significant, sir! That could be the size of one graduating class at one community college. For comparison, about the same number considered their field “Engineering” and only about 10 people were in the “Physical Sciences/Math” field.
Second, the fields themselves are broad and don’t say anything specific about any one major or occupation. For example, how many of the 10 “Physical Sciences/Math” respondents majored in Chemistry? It’s possible that none of them did. We just don’t know. Likewise, how many of the 37 “Computer/Information Science” respondents were CS majors? We don’t know. This is important because CS majors typically earn more than IT majors. For example, this Rasmussen College prepared chart comparing median salaries for common CS/IT jobs suggests that CS degrees will get you somewhere between $15-30k more per year than IT degrees, and likely a lot more for new graduates. For that reason I would think computer programmers would be much more likely than technical support specialists to say the benefits of education outweigh the costs.
Third – this is a little bit of a nitpick, admittedly – saying that the study says “Computer Science degrees are the most regretted” is not entirely accurate. The results published on the Washington Examiner article you linked only tell part of the answers to the question that was asked, so it is a little bit misleading. Here is the question with all of the answers:Overall, how would you say the lifetime financial benefits of your most recent educational program compare to the lifetime financial costs to you of this education?1. Much larger financial benefits than costs
2. Somewhat larger financial benefits than costs
3. About same financial benefits and costs
4. Somewhat smaller financial benefits than costs
5. Much smaller financial benefits than costsThe Examiner articles only compared responses of 1 and 2. If you look at the results, more respondents in the “Humanities” field answered 4 or 5 (costs outweigh benefits) than those of the “Computer/Information Science” fields. Also, the many of the latter respondents answered 3 (about the same). Does that mean they regret the decision? Maybe, maybe not. Depends on other factors such as job enjoyment.In the end I would still say it a little surprising that CS/IT is so low. I would be curious how that category actually breaks down between CS and IT since I think the IT portion could be skewing the results. I also think it is interesting that “Law” respondents were the most highly polarized.Full Disclosure: I have degrees in both “Physical Sciences/Math” and “Computer/Information Sciences” – two of the categories with the highest rate of “costs outweigh the benefits”!
As a disclaimer, I’m not a real CS student, it is just my applied field, so take everything with a grain of salt. With that out of the way, let me say that I hated my CS classes with passion.
It is a mind-numbing exercise in just memorising useless information. Let’s take the “Algorithms” class as an example; from the sound of it I would have thought it’s about designing and analysing algorithms, putting them to use and coming up with new ones. Because that’s what I would expect a computer scientist to be able to do. But no, instead it was all about memorising a ton of algorithms and their complexity and then applying them manually.
That is complete bullshit. I am a man who likes to get his hands dirty, to make something, not engage in a circle-jerk with nerds. Memorising algorithms and doing them by hand may have been relevant a hundred years ago when “computers” were actual people, but today we have machines or this sort of thing. I should be trained to instruct the machine to perform the task for me, not do it myself. Of course I understand that being able to do the algorithm manually is a prerequisite to understanding how and why it works, but you can literally pass the exams just through memorising without understanding a thing.
In the real world an algorithm is something I look up in a textbook, I evaluate it against other algorithms and then I write an implementation. There, done. Do you learn any of that in classes? Of course not. I am not exaggerating or trying to be funny or edgy when I say that I skipped classes and learned from Wikipedia instead. I’m serious, that’s what I actually did. Wikipedia was better written and better structured than any class I’ve taken and it was much faster.
The programming part was complete garbage. We had an introduction into Java and that was basically it (you probably learn more later on, but come on). I don’t know if you’re a programmer, so let me explain: Java is a neat language, but it is a language that does a lot of things “automagically” for the programmer, it just works somehow. That’s not a bad thing by itself, but for starting out it is disastrous, because it obfuscates how the computer works. After all, a computer is just a machine, there isn’t anything magic about it, it’s just electricity running through wires and switches. I strongly believe that in order to use a tool you must understand your tool.
Earlier this year I came across a recommendation for a book called “Code: the hidden language of computer hardware and software”, it’s basically a book about how computers work. However, instead of taking the approach for idiots with all the usual abstractions, the author treats the reader like an intelligent person: it is all explained in realistic terms, from the electrical engineering and the mathematical perspective. The book is clearly written as a casual introduction rather than an academic textbook, but it never dumbs down the content and by the end of it you will actually know how the parts inside a computer work.
I’m not affiliated with the author in any way, I just want to explain what I was missing. All this obfuscation and mystification is not doing anyone a favour. Let me get my hands dirty, let me cruise the blank wires, let me touch the individual bytes. Sure, I will create a memory leak or try to read an array beyond its range, but that’s how I learn. If I cannot make these mistakes when it’s apparent, then I will make them when it’s obfuscated and wonder why nothing works.
So here is what I did: after I got all the classes I needed I got a bunch of proper books from the library. The book “The C Programming language” by Kernighan and Ritchie is a masterpiece that teaches you a real language. Then I went and looked for problems to solve and challenged myself to find solutions. Within a year I have now reached the level that I can read master-grade C code. I can’t write it myself from scratch of course, but that will come with practice. Now imagine that someone had wasted years and even taken a student loan, just to find out that he or she could have just taught him- or herself all this in less time from a good selection of books instead, and you get an idea why people would regret taking picking CS.
Of course there are exceptions: there was one class I attended that was tolerable, but even then the exam was just memorising algorithms. Maybe it’s just me, maybe my university sucks, but that’s at least why *I* was disappointed. I am not trying to be like a kid who thinks math is stupid because he doesn’t get it, to the contrary, I find the field fascinating and I do want to learn it, but taking CS classes won’t get me anywhere. It’s better to just download the PDFs instead, they are publicly available and you can read them anywhere. I was reading the books while doing cardio at the gym.
I work as a software developer, though I don’t have a CS degree. I think there are several things I see in developers who have the degree:1. An awful lot of CSes do programming work that really has nothing whatsoever to with computer science. In a CS degree, you learn about algorithms, operating systems, and all kinds of neat stuff. In the real world, you’re fixing bugs in database code or maintaining a license server.
2. A lot of the programmers you work side-by-side with don’t have CS degrees, and the fact is a lot of CS stuff can be easy learned by anyone with a solid foundation in mathematics.
3. A shocking number of CS programs don’t teach coding. They teach about algorithms and whatnot, but the students actually write very little code. These schools—which include a number of flagship state universities—really screw their students.
CSes still do well financially, I think there’s just a huge disconnect between what many CS departments teach and what skills their graduates actually need.
The short answer is that a lot of people went into computer science because everybody said it was the future, but then they couldn’t hold a job in that field because they were bad and ended up working in a bakery or became bus drivers. Basically, they ended up with the same options people with Humanities degrees had, with the additional broken promise of a good job. I think a lot of students default to computer science when they don’t know what to do because they know they need a useful degree but they can’t handle engineering, law or accounting. What they don’t know is that once they hit the market, they will be thrown out very fast if they can’t perform.I studied in mechanical engineering and history before going into computer science and it had by far the most amount of people who did not care at all about their chosen field. They were also incredibly bad. I met quite a few people who somehow managed to graduate and could not even write the most basic code.
Ha!That was my reaction when I saw your article. Who were the respondents? Maybe they were intentionally being misleading so as to deter others from entering the field? Computer Science loves to teach game theory and all.I couldn’t be happier with my decision in that regard – I feel the computer science university education I received (although grueling, sometimes requiring up to 120 hours of work in a week), genuinely made me a “problem solver” and that, at least for anything tech/engineering related, there really is no problem Ican’t solve, it’s just a matter of time. For my age, I have a top salary for a W2 employee, the work is varied and engaging, and I am bombarded with lucrative offers from recruiters I’ve never met… I also have been involved with hiring for my companies (interviewing candidates) and in general it’s difficult to find good candidates (we had an open req for months).
One plausible explanation I can think of is that companies are desperate for good talent, and the cliff between mediocre and good seems to be pretty tall. And there were a lot of drop-outs in my undergrad (pretty much all the friends I made in my first two years of undergrad didn’t make it to years 3 and 4). Companies are also desperate for good “veteran”, experienced talent as well… but you cannot obtain this simply through tenure alone. You have to be constantly growing in your skill and knowledge set, and your growth in that regard needs to be commensurate with those years of experience. But on the other hand, I don’t buy this explanation with respect to the article because there are a ton of opportunities all around even for new entrants. The catch might be that the pay for the entry-level isn’t anything outstanding, and maybe new graduates had a higher expectation right off the bat?
Another possibility: post-grad Csci degrees? In general private sector companies (unless scientific research) generally aren’t too enthused about those. They really aren’t a difference maker in terms of identifying a quality employee who can deliver a product, and often the candidates I’ve interviewed with these degrees exhibit undesirable traits in terms of working in a team-based collaborative environment… so I would have a hard time justifying the costs of a graduate degree…
I saw in the comments of that article a lot of posters were talking about offshore workers…. at least in my market (Minneapolis), that is an old trend and has been reversing the other way. All the companies I’ve worked for have gone down the offshore contracting thing in the past (circa 2006-2012) and have learned the wisdom in the saying “you get what you pay for”. It doesn’t really matter where they live, if you want a sustaining quality product, you’re not going to magically get that just because someone has a cheaper rate. There are more expensive rates overseas as well… and well, you get what you pay for. The proposition then reduces down to what advantages you get by having local employees vs remote (in person collaboration provides a lot of advantages especially in fast-paced dynamic environments… an environment which behooves a tech company).
Anyway, I found the results quite baffling and quite opposite of my circle of experience!
Master Malstrom,I’ve been programming computers since I was six and was making too much money in the software industry at the age of twelve at least compared to what other twelve years old children were making, assuming they had any employment. I have worked in almost all of the disciplines at one time or another functioning in rolls of development, quality, release and management. I’m stating this not to show off or anything, but in the event you add this information to the public forum of your blog to help give my perspective of what I am adding to your conversation.It is understandable for anyone outside of the software industry to not understand what is going on inside of it. At a fundamental level I believe most people should be able to comprehend at least the basic concepts of building a house, mining for precious minerals or drilling for oil. There is a lot of math and science involved in these fields that will only be understood by members of those communities that the average person will not understand. It is my belief that they are for all intents and purposes well understood and typically regulated. I don’t want to insinuate that things go according to plan all of the time or that nobody is doing it wrong, only to postulate that the bulk of these business exercises are well understood, carry measurable risk and anyone in those fields that know what they are doing at a certain pay grade is making decisions that impact not only the bottom line but also the health and safety of employees and potentially members of the community.
While it is certainly possible for a person to start digging underground looking for precious minerals or oil under there property there are several things that are likely to stop this individual from getting started. First, digging underground is just not a natural exercise for most humans. The average person has no understanding of tunnels, support structures necessary for underground or the sheer effort involved to take on this level of work. The amount of material underneath our feet is measurable, but the vast amount of it essentially has no value to the average person and they also have no idea how to locate the precious materials.
Construction on the other hand is certainly something a lot of people participate in. It’s relatively easy to hammer some 2×4’s together and construct a shed, dog house or something else. In most areas building a small structure isn’t regulated because the health and safety issues are minimal. It’s pretty hard to build a home or garage without anybody noticing and you’ll quickly have inspectors coming by, zoning board hearings and all sorts of other headaches.
At a high level these activities have fundamental hurdles necessary to pass in order to undertake the tasks on any scale and to extract any value. There is a reason they are regulated, expensive and difficult jobs.
The barrier for writing software on the other hand is at an all time low and every few months it gets easier to enter. As a society it is almost a necessity to have a phone and these days anybody can write programs on there phone if they are so inclined. If you don’t have access to a phone you still have the option of going to internet cafe’s, the library or any other place that will grant you free public access to computing resources. It is a trivial exercise to both get access to a computer and to access information about how to program it.
The exciting and depressing thing about software development is that while there are disciplines for it, there isn’t really a playbook that anybody follows. When you start writing a program unless you have the inclination to write a design document you can start piecing things together anywhere. Imagine if during construction of a garage your contractor decided to build the roof first and then realized that he forgot to pour a foundation. You’d probably think this person was crazy and would definitely fire the contractor on the spot and then sue this person. In software this happens all of the time. It requires a massive amount of effort to tear everything down and start from scratch only to find out that yes you got the foundation in place this time but you didn’t put any doors in place.
To give you another example of the types of issues that software hits, let’s use the BP oil spill as an example. At the end of the day there was a business decision to drill and somebody signed off on the risks involved. Although it’s possible that information was missing or even something incalculable went wrong that couldn’t have been factored in, it was still at the end of the day a business decision to go forward. Security issues in software are comparable to oil spills except that where you can mathematically calculate risks for an oil spill and cover them in your bottom line, security issues in software are definitely out there and nobody is taking them into consideration. Security issues are almost always hidden and they will get exposed at some point causing untold damage to the customers, employees and company.
Developing new software these days is almost like mining except there is no formula to figure out when you’ve struck gold. Every new software development is just a chance to strike gold. There are even countless cases of software striking gold only to be quickly run into the ground due to mismanagement of the business. How many times do you have to develop something new to strike gold though? It is mind boggling to consider just how much energy is invested into software only to result in such a broad amount of failure.
Given all of these issues, people still go off to write their own software. Heck you don’t even need a degree in Computer Science or Software Engineering to get started. You just need a computer and the interest to tinker with it.
A last issue with software I’d like to point out is that most people think that developing software is 90% of the problem. Once you’ve got a finished product you’re maybe 10% of the way done. There is so much testing, marketing, releasing, management and all of the other things that make up a successful product that people often miss out on. I’ll be honest, none of this is magical but many people think it is. Personally I feel it is important for Computer Science majors to study other fields because often what is applicable to another field really is applicable to Computer Science.
That was probably too much preamble, but I think I can help illustrate why Computer Scientists regret there decision to get their degree.
1) A Computer Science major is competing in the job market for a job where the degree might not matter as much as experience. Anybody can and will start writing code. While the degree hopefully imparts a level of maturity in documentation and design most Computer Science majors will still balk at doing this work when required. To some degree what is the point? If everybody else is writing garbage code why should they be held to a higher standard?
2) A Computer Science major is competing in the job market for a job where often the location does not or should not matter. Companies are often more than happy to hand off work to China, India, Brazil or any other country for two reasons. The first reason is fairly self evident which is cost because often the cost of a developer in a country outside of the US/EU is cheaper. The second reason is much less known but makes sense, a business will hire individuals in another country to get government contracts which stipulate a minimum number of employees within their country.
3) A Computer Science major will want to get the cool jobs. Developing new software is seen as cool but the vast majority of the work is actually maintaining or fixing somebody else’s broken down garbage code. The same person who wrote the garbage software in the first place is already out developing new code without a design. Given the current state of things the average Computer Science major will never be out of the maintenance flow, and by the time they are in a position to actually make a difference they’ve probably picked up so many bad habits that they are arguably no better than the person they wish to replace.
4) A Computer Science major who actually gets to work on the front line and do something cool is often going to be working at a start up. This often entails 60+ hour work weeks but for a salaried pay. In this situation they will literally be making 50-100% less money because they will never get paid overtime, and the chances of the company striking gold are so low that at best they can add their work experience to their resume and move on.
Now that we’ve rained on the parade, I’d like to give some advice.
1) While software development is technically global, it is often in your best interest to be willing to relocate to where the work is. Any hiring manager will be far more interested in a candidate that they can walk over to and say “we have a problem”. Don’t preemptively move, but if you are able to move even remotely close it really is a good thing for you and the business.
2) Find ways to differentiate yourself from the other employees. There is a mountain of open source projects out there and it is very easy to get involved in many of the communities. Yes you’ll be giving up your time for free but this will give your potential employer a view into how you interact with other people in a public forum, they will be able to see what level of coding skills you exhibit and they will have the ability to talk more directly about your experiences.
3) Stay relevant. All those classes in school were great, but you need to keep up with the cutting edge technology. College can be far too academic for it’s own good sometimes, so remember those ivory tower lessons might be the goal but you’ll still have to live in reality as you try and help people get there.
4) You cannot fix everything. Yes it’s possible to go off and rewrite all that junk code, but there is too much of it and you’ll never ever catch up. Focus on the real problems that are in your way and that will allow you to make slow, consistent and steady progress.
5) Study task management and learn how to prioritize work. Often in software development, management will think a lot of effort is free. This is not the case, you’ll need to learn how to manage your time and work with others to make sure you take things off your plate as new work comes in. Or you can learn to enjoy those 60+ hour work weeks.
6) Fresh out of college don’t be looking to make a name for yourself. Definitely track your progress so that during review time you can specify exactly what you did to meet your goals and objectives. Keep an eye on how you can self promote at this time regarding how you impacted the bottom line.
7) Take advantage of any corporate training, college training reimbursements and such. This will make you more valuable to your current employer and any future employers.
8) Your first job is likely to bend you over the barrel financially. Seriously just get the first year or two of employment out of the way. Experience often trumps all and having a degree is still important.
9) Know what your worth. Check websites like glass door and others to find out what you ought to be making. If they are not going to give you what you want monetarily try and negotiate for additional vacation days, hiring bonus, stocks or anything else you can get.
10) Don’t be afraid to start a business and contract yourself out. Sure you can go through a contracting agency, but they’ll be skimming off the top. Having your own business will also give you valuable experience in operating portions of a business and if it happens to take off you can bring other people in to work with you.
Hello Master Malstrom,
I’m a software engineer by trade, and I can definitely understand the regret that many CS graduates are dealing with.
For many years, computer science was seen as a “sure thing” career for people. And, as such, college classrooms were packed with people who entered the trade for a big payday.
That said, though, programming is kind of a dead-end career if you’re not savvy within the business world. The hours are long, and many programmers tend to let their talents stagnate since they “did their time” and tend to focus on languages they’re comfortable with.
The successful software engineers are movers and shakers. They talk, they network, and they jump ship once a better opportunity arises. Those who can’t fit into this world get left in the dust, collecting a pittance of about $40,000 a year while griping about how they’re “worth so much more” thanks to those estimates on sites like GlassDoor.com or Monster.
What GlassDoor and Monster don’t tell people, is that these crazy salaries only go to the ones who move. The ones who put in the work <em>outside</em> of work, to get things done. And those who get things done, tend to have talents that people don’t learn in Comp Sci lectures.
It’s why I started reading business literature in my spare time, and why I’m playing with some private ventures in my free time. Nothing noteworthy yet, but I continue to experiment, build, and network with the hopes that someday I can be one of those people who gets away from the “benevolent master” relationship that so many programmers get locked into.