62

I have a degree in computer science. It has been great for opening doors, getting a job. As far as helping me in the professional field of C# .NET programming (the most popular platform and language in the area I work if not the entire united states on hands down the most popular OS in the world) its hardly useful. Why do you think it helps you as a programmer in your professional career (outside spouting off to prims algorithm to impress some interviewer)?

In today's world adaptation, a quick mind, strong communication, OO and fundamental design skills enable a developer to write software that a customer will accept. These skills are only skimmed over in the cs program. In my mind, reading a 500 page C# book by Wrox offers far more useable a skillset than 4 years of the comp sci math blaster courses. Many disagree. So, why does a computer science degree matter?

P.Brian.Mackey
  • 11,121
  • 8
  • 53
  • 88

29 Answers29

135

Why a computer science degree?:

  • I worked with a developer who stored thousands of items in a HashTable and then only iterated through the values. He never accessed through a hash. He obviously didn't know how a HashTable worked or why you would use one - a CS degree might help with that.
  • When working with regular expressions, it seems easier for people with exposure to basic automata theory and formal languages to reason about what's going on and troubleshoot their expressions - a CS degree might help with that.
  • A developer fresh from school may be able to decompose problems in various paradigm mindsets (OO, functional, logical) immediately, while a new non-degree developer needs experience before they can do the same.
  • Schools teach computational complexity. Non-degree developers may feel what's best but a formal understanding is sometimes nice, especially when explaining results to a colleague.
  • A degree offers an introduction to many models of the machine - hardware, OS, common data structures, networking, VMs. With these models in the back of your mind, it's easier to develop a hunch where a problem lives when something goes wrong. Again, non-degree developers build the same models but it takes time.
  • Expert guidance through any discipline may help the learner avoid dead-ends and missed topics. Reading is great but it's no substitute for a great teacher.

This is not to say that a CS degree is necessary to be a great developer. Hardly. Some of the best developers I've worked with have no degree. A degree gives you a running start. By the time you graduate, you've (hopefully) written a fair amount of code in various languages and environments to solve many types of problems. This puts you well on your way to the 10,000 hours required to be an expert.

A second benefit is that it shows employers you're able to commit to a long-term goal and succeed. In many companies, I believe that's more important than what you learned.

Corbin March
  • 8,114
89

In 40 years, I expect .NET and C# to be nothing more than a grievous pile of legacy code on obsolete operating systems.

But the fundamental computer science concepts will be just as lively as they were when Shannon, von Neumann, Knuth, Dijkstra, Hoare, and the others dug them out of the grounds of formal logic and math...over 40 years ago.

Paul Nathan
  • 8,560
  • 1
  • 34
  • 41
38

I use almost all the CS I studied in school (*) every single day at my job. If you want to work in programming language design, search engine optimization, quant analysis, or any similar field, I suppose you could do it without a relevant degree, but it seems like an awful lot of stuff to have to learn on the job. I am not particularly highly educated given my line of work; many of my colleagues have PhDs in computer science and several of them have been professors of CS.

Getting my degree was tremendously worth it for me; it has paid for itself many, many times over both in dollars and in satisfaction.

That said, I thoroughly understand your point. Most people who program computers have jobs that do not require a CS degree; they require, say, a solid community-college-level background in practical programming plus keeping up with current industry trends. And that's fine. You don't need a degree in marine biology to run a successful aquarium store, and I think that aquarium stores are awesome. But it's awfully hard to get a job at Woods Hole if all you know how to do is raise goldfish.


(*) I have a B.Math in Applied Math and Computer Science from Waterloo.

Eric Lippert
  • 46,558
23

It matters because technology does not remain static. Computer science is the basis for all digital technology. Most self-taught programmers last exactly one technology cycle because they lack the fundamentals to survive a major paradigm shift. Sure, there are exceptions to the rule, but a strong foundation in computer science greatly increases the odds of surviving a major paradigm shift.

bit-twiddler
  • 2,658
14

It depends what you want to do. If your goal is mainly programming business software in the large, where the business problem and practical complexity management issues are the hard part, then yeah, a CS degree isn't going to help much. If, however, your goal is to program stuff where the main difficulty is on the technical end, then a CS degree is more useful. (Though I don't have a CS degree, so I feel like a big hypocrite for saying that, so feel free to add "or self-teaching in CS subjects".)

I'm sure there are plenty of programmers out there who are great at managing complexity, programming in the large and solving common business problems, but would be absolutely lost if you asked them to write a memory allocator, or a parallelism library, or a collections library, or an operating system, or a compiler, etc. I'm sure the opposite exists to a decent extent, too. Both have their place and deserve respect, but a CS degree helps much more on the technical side.

dsimcha
  • 17,284
12

I don't think a CS degree is an absolute indicator that a person is a good software developer. In fact, I started my career as a programmer with a math degree, but with a strong CS bias (math and CS were integrated in my program of study). I think there are two reasons why it matters, overall.

1 - Because Engineers are not the Front End for Recruitment

Human Resources people are. And while I picture many people rolling their eyes, I say "thank goodness!" What's more important - that you let the engineers make stuff (or break stuff), or that you make them sort through 1000s of resumes and do 1000s of interviews?

So, we have HR people and HR people screen the candidates until we get to a key group that can be screened by engineers. HR people have learned over time that having a CS degree is a pretty strong indicator that the candidate knows something about developing software. Hopefully they also know that writing software for 20 years is a good indicator that the candidate can write software.

2 - Because having some sort of system about learning about CS is better than none

CS is a huge field with lots to know. And it's changing all the time. These days, I can safely say that the 75% of the coursework in my undergrad has become irrelevant to my career. And that my master's coursework from 5 years ago is depreciating rapidly. But when I started, I was glad that I paid a big institution to teach me something about computer organization, networks, good software engineering process, object oriented design, compilers, and the syntax/semantics of a major programming language that was currently marketable.

And I was glad it was in an environment where someone was paid to explain things to me when the book/website/lap project was not innately obvious.

And I was glad that I had access to a laboratory where computer health and the SDE were not my problem - I could more or less lock in and focus on a small part of the problem rather than also having to fix all the tools needed to solve the problem.

And while the courses didn't explicitly teach good communication, I think the only way you can really learn that is by working in teams - which IS a major part of many leading institutions offering CS degrees.

And a schedule with frequent feedback (ie, grades and exams) that let me know whether I really understood what I had been taught.

Those things combine in my mind to be worth more than any book on the subject, but it's certainly not the be all, end all. There's certainly things I would not mind seeing institutions of higher learning improve, and I think that about 10 years after you've graduated, the degree you originally recieved is less important than the work you've done since.

bethlakshmi
  • 7,625
12

For me, the reason is I know they've been through some rough courses, and didn't give up. Some of the courses like Compilers, Data Struct, Discrete Math(and others) tended to wash a lot of people out of CS programs. Having a CS degree means you worked hard and paid a price(long nights getting programs to work), rather than going out for fun.

Chris L
  • 153
10

To me it is a question of mindset.

Your mindset defines how you will approach a given problem, and allows you to consider a wider range of opportunities than those not schooled in the concepts.

A typical example is the "Travelling Salesman" problem where you know that it 1) is NP-complete for the general version, so you have to try all possibilities but 2) that if you know more about the problem you can either approximate within a certain limit or say that you know that A-C is always longer than A-B + B-C (which is true for distances but not for prices) allowing you to solve it in less time.

Another example is Numeric Analysis, where you need to know that in order to minimize numeric inaccuracy you must approach your calculations differently than the mathematically straight forward way. This takes theoretical knowledge and is unlikely to be picked up on the way unless you've been explicitly bitten by it.

9

Really? Wow.

So you are telling me that C# and OOP skills are sufficient and you can devise your own algorithm for randomized sorting and decipher the finer nuances of how to deal with NP complete problems in real life?

C# and OOP are fine, but if you are trying to do anything which is non-trivial logic design then you need the fundamentals of computer science in place.

Dude, you won't even know which C# container to use if your data structures or algorithms skills are not up to the mark.

Lets grow up, now.

Fanatic23
  • 7,493
6

I'm supposing you really didn't get too involved with the degree then, just took what you needed to and got out, or went to a school that looked at CS majors as "coders" not "programmers". Also, some of my best/favourite "CS" classes are ones that - at least in my University - are under the Electrical Engineering department. My exposure to various architectures and styles has been ever so important and my degree has facilitated that in a "controlled" environment.

Classes that aren't just algorithms and cutesy fluff:

  • Compilers
  • Operating Systems
  • VHDL / Embedded Systems
  • Assembly and Micro-controllers
  • Software Engineering

And finally a class that beat the crap out of me that was just algorithms and data structures - Artificial Intelligence. There's things that going through the University system will greatly expedite in the learning process, and I would consider what has been learned to be invaluable when job hunting later.

5

for me and many of my colleagues it hasn't (none of us have had CS degrees)

Shawn
  • 535
4

My opinion is that unless you are applying for "Computer-Sciency" positions, any degree that implies a focus on computer skills is pretty much equivalent.

In fact, many of the programmers I know got a degree in a completely different discipline. The best programmers I know have degrees in Civil Engineering, Linguistics, Economics and Finance.

In the end, once you have some experience your degree becomes a pass-fail test for a recruiter. That is, unless you got it from an impressive school or a post-grad degree it doesn't matter so much what your major was.

JohnFx
  • 19,040
3

OK then what about

If you have gone through the following subjects:

a.Computer Architecture and Organization

b.Software Engineering

c.DBMS

d.Basic Electronics

e. Basic Digital Electronic Circuit

f.Microprocessor

g.Compiler Design

Do you think all the above are just for formality.. Do remember the above points makes "good programmer" a "great programmer".

Go through this to read about importance of electrical and electronics subjects

3

I have a degree in computer science. It has been great for opening doors, getting a job. As far as helping me in the professional field of C# .NET programming (the most popular platform and language in the area I work if not the entire united states on hands down the most popular OS in the world) its hardly useful.

70%+ of code is written in C (as there are more embedded devices than high-level applications). According to popular job searches like dice or the TIOBE index, Java is the most popular programming language for the enterprise (as there are more Unix/Linux back-end servers than Windows servers.) There are more smartphones and tablets (the computing platform of the future) running some variant of Linux or Mac OS than Windows, programmed on anything but C# or .NET.

Look at your router at home, look at your cell phone, look at the computer inside your car, look at the freaking microwave at home, at the controllers inside your home A/C system, inside your phone and your work fax and printer/scanner. Look at the number of computerized appliances (which outnumber windows systems.)

Do you think they are programmed in C#?

If you truly believe that .NET or C# are the most popular platforms in the world, you might want to go back to your CS school and ask for a refund.

Why do you think it helps you as a programmer in your professional career (outside spouting off to prims algorithm to impress some interviewer)?

Maybe because there is a lot more about programming than doing basic development dynamic web pages and enterprise applications? For that you don't even need a BS degree, a AA suffices - I know because I started my programming career with an AA degree and slowly but surely worked towards a CS and then worked through grad school while working full-time as a developer.

There is embedded development, there is device driver development, there is operating systems development, there is algorithm development, signals, communications, network protocols, database engine development, filesystem development, distributed computing, compilers. Not research, but actual work in for-profit organizations. Barring the naturally gifted, one typically cannot hack it in any of these industrial fields without a CS degree (sometimes not even with a BS degree.)

A person that gets a CS degree and pays attention to it knows this. How come you do not?

In today's world adaptation, a quick mind, strong communication, OO and fundamental design skills enable a developer to write software that a customer will accept.

OO came into existence because of CS. And most people who think they do OO cannot even do a good job. Just look outside and look at the crappy state of software (in particular in Java and .NET, not to mention PHP.) A solid CS background (or a graduate degree in some sort of engineering) does not guarantee 100% good understanding of OO and analytical skills, but it typically helps. OTH, not having a basic CS background is typically a red-flag when it comes to OO and analytical skills. We have enough empirical evidence in the industry to back this claim.

These skills are only skimmed over in the cs program.

Depending on the CS program and depending on the student. At least for me, I saw plenty of good courses on design, OO analysis, commercial tools and practices, we had co-ed courses with local companies and internships, corporate-funded projects and research, technical writing, you name it. Sorry, I cannot relate or understand this statement.

In my mind, reading a 500 page C# book by Wrox offers far more useable a skillset than 4 years of the comp sci math blaster courses.

Again, depending on the work you do. Even on the enterprise, I've used my CS to actually fix things or improve. All that involving modeling, architecture, distributed computing, security and high performance, high availability and fault tolerance. I learned all that stuff in CS.

There is nothing wrong with using a Wrox book to get a context-specific, technology-specific skill set. I do so myself. But my CS background gives me the context to work on. Without my CS background, all I would be able to do would to program, to code (which is all I could do when I only had a AA degree at the start of my career.)

Many disagree.

Surprising, isn't.

So, why does a computer science degree matter?

Who do you think come up with google, hadoop, cassandra, or high performance database engines? Who do you think write the Windows OS kernel? Who do you think program the beloved tools you use to do your C# development.

One thing I'm sure of is that the tools you use to do C# development, there is a CS guy behind it.

Whether you need a CS degree or not depends on the type of work you do, the type of work you want to do, the type of job you are capable of doing.

There is a lot of work in the enterprise and web development that does not require a CS degree. I grant that. I also know that the world of programming is a lot wider than just those two fields, with many fields (most of them actually) requiring a CS degree or more.

You have a CS degree, how you do not know that is a mystery.

luis.espinal
  • 2,620
1

There are some basics that I remember seeing in my CS courses that have been quite useful at times. The Waterfall process and its steps have been something I've used repeatedly in my career with some variation for Agile where it isn't quite as rigid in steps but the same steps are there.

Problem solving skills and various algorithmic heuristics can be helpful at times too. There is something to be said for the indirect benefits of a CS degree. For example, learning how to justify an answer to show why something is correct is just one of a few skills I refined in university but I'm not sure how obvious it would be that this is a benefit at the end of the program.

JB King
  • 16,775
1

I agree with Thorbjørn Ravn Andersen point regarding the mindset. That is the main thing you develop with a good CS curriculum.

It basically comes down to understanding things like data structures and algorithms. Not that you can't learn this on your own, but a good CS curriculum will provide better exposure.

George Marian
  • 4,390
  • 27
  • 31
1

Writing

In enterprise software development, it is vital to be able to write code and to write. By that I mean: writing email, bug reports, technical docs, etc. Both writing and coding requires the clarity of thought and appropriate economy of expression.

Between 2 software developers, my bet is that the one with a CS degree from a solid university (strong CS program, and required electives in the humanities) has both skills. (True, this isn't a guarantee: people from the humanities can be great coders and top-shelf writers; lots of CS grads are coding machines who can't write, and so on.)

Reading

A mentor of mine claimed that he could judge developers by what they read. The original post mentions WROX books. In my opinion, someone with a CS degree is more likely to seek out such professional IT books and be able to use them effectively. If one can handle CLR, then one can handle "Professional C#".

Math

Math develops logic, proof, rigor, etc, and the side-effect is that it assists writing. Though most business IT does not require intense math skills, the person with a CS degree will have it when necessary. This is a much better way to go through life than living without it, and wondering what you've missed in school.

1

I guess it really depends on the quality of the CS program you went through. I do know what you mean, most of the code I write on a daily basis is just standard VB.Net, get the data from the SQL Server, put it on the form, save it back to the database, make some reports. Wash, rinse, repeat. (Very boring at times) The CS program I went through, apart from covering the theory and fundamental knowledge, did teach a lot of practical stuff. We covered areas like software design, database design, and project management. Learning programming languages was the easy part, the design and methodology of creating software systems was what I took away from my college experience. We were given projects based on real world problem, sometimes even designing software systems for other departments on campus.

As programmers we obviously have the ability to learn on our own, its a necessity in our field. I do have to say I'm very glad to have gone through the CS program. My professors were amazing and taught me quite a bit. My classmates were great fun people and we had a lot fun nights in the computer lab. To tell the truth, I kinda miss those days......

Kratz
  • 201
1

It is all in the ability to live vicariously.

If you skip the degree, you probably will have to learn the lessons in a very personal way (aka the hard way). Lack of a degree doesn't mean you will take the harder road of learning by trial and error; however, the degree guarantees you exposure to a treasure chest of previously gained knowledge that others had to earn by late nights, frustrated programming sessions, and generally "doing it the hard way."

The truly excellent person will not discard what others have found to be true, but will instead challenge it until they know the knowledge's limitations, and then play with the "system" of newly gained ideas until they make it their own. It's standing on the shoulders of those who came before, and living out the solutions of years gone by without having to rediscover them.

Of course, a person with a computer science degree isn't always the better candidate. There are those unique individuals who've been led to the stream but (for some strange reason) refuse to drink from it.

Edwin Buck
  • 738
  • 4
  • 7
0

Absolutely correct, computer science degree does not matter much; which is why your only choice should be to get an engineering degree instead.

In interviewing candidates with various backgrounds, the one trait which stands out for those candidates who did not have any degree is this: lack of technical communication skills and lack of discipline. These are fundamental traits learned when getting any science degree (I'd say even more so with an engineering degree).

With most things being equal (and a single round of interviews often comes up with "about equal" candidates), I would hire the person with engineering degree first, the computer science degree second, and the no-degree third. However, there are ways to make things very unequal in the comparison, so that anyone can beat out even those with a pedigree degree - but that's a separate question isn't it?

0

I am a 21 year old who has just finished a CS undergraduate. I feel that however great you are in programming, if you are a CS grad, you will be already exposed to various fields. So if you want to learn new stuff, you not be afraid to explore even if it is irrelevant. If you are an expert in a technology or programming language, good. But I don't think you will be adventurous and be willing to look into other technologies. Thats how you get yourself dirty (and quick too). You wont brood that what you explore will be irrelevant since it is not going to help you earn money. (You have already studied a lot of irrelevant things in your CS UG ;) ).
It is the passion in CS that you have after graduating that makes you a Software Professional.
Anybody Agree?

0

Well when I entered in CS, I thinked that wow, I'm real good as I'm and I'm not going to learn anything here... After 5 years, I only learned to work as a team, and some things from engineering that separate me from someone who can write only code and someone who can think on what he does before he codes, in short, it has teached me to think before I even type a single letter in my text editor or ide.

Coyote21
  • 437
0

For getting a job using an open source language it does not mean squat. Most companies recruit based on ability rather than qualifications and languages such as PHP have a hobbyist reputation menaing that people can have talent without having ever studyied CS. The only time it helps if you are getting a job using .Net languages as most hobbyists will not want to shell out thousands for a licence only to mess around with at the weekends, hence somebody looking for a first job in C# will probably only have 2-3 years experience.

Of course commercial experience is the really valuable one as it demonstrates your ability to deliver quality code to deadlines.

In conclusion, it gets you interviews for working with non open-sourced languages.

Adam Pointer
  • 101
  • 2
0

A degree from Collegue or University, means you studied and have some knowledge of C.S., some basic stuff that is required for a real world job, even if you have to learn other stuff by yourself.

Besides, when a I.T. recruiter has to find a Soft. Dev., and 500 applicants send their resume, and have to interview unleast 50 of them, having a degree on your resume, helps both the recruiter, and your chances of getting hired.

(from a Software Developer who studied some H.H.R.R.)

umlcat
  • 2,206
0

Probably this doesn't help much, but now that I learned assembly and all the knowledge involved I feel a more complete programmer and I'm sure this will happen again when I'll go to the uni. I mean, I mostly use C or VB, I don't need to know what's a wait state in order to do my programs, but simply know what's going on behind my code is great! And knowledge helps you to write better, faster and more maintainable code. A computer science degree gives exactly the knowledge required to write great code in my opinion.

BlackBear
  • 111
0

software engineering today is an experimental science not applied mathematics.

Computer science degrees emphasize algorithms, how much of you day job involves implementing or even using novel algorithms and data structures?

How much involves dealing with layers of frameworks and the leaky abstractions? How much is trying to determine what some API actually does - rather than what the docs imply? How much is testing and deciding how to test?

For all that a physics or chemistry degree is much better training than having memorized Knuth

0

It matters because recruiters have an indicator that you are not completely clueless about what you are supposed to do, but it does not necessarily imply that you really know what you are doing or that you are doing it in a technically convenient way.

There're brilliant people with degrees who love what they are doing and are really good programmers and there're also idiots with degrees who are really bad programmers and don't even know some fundamentals. There're brilliant people without degrees who can develop anything (business software/compilers/an operating system) and there're idiots without degrees who don't know how to use a hashtable properly.

Falcon
  • 19,388
-1

For a programmer ... it doesn't much (other than maybe opening doors to interviews, as you said).

For a CS job (research, algorithm analysis, formal language thoery and design). You're unlikely to learn these things in any other non-math based program.

//Disclaimer: my degree is in IT so I had to go back for all of those other courses to perform in my line of work.

iivel
  • 205
-1

I have a computer-related degree. What helped me get my first computer role was the fact that year 3 was a work placement as an IT Administrator. I recommend work placement schemes within education.