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,123
  • 8
  • 48
  • 87
  • 60
    "Computer science is no more about computers than astronomy is about telescopes." -- Edsger Dijkstra – Eric Lippert Mar 17 '11 at 22:18
  • Perfect practice makes perfect. It depends on the school. A good computer science degree includes design patterns, Agile methodologies, TDD, BDD, DDD, etc. A good school teaches you to pursue continuous improvement. – Zachary Scott Mar 17 '11 at 22:42
  • 1
    @Dr. Zim BDD, DDD? – Dave O. Mar 17 '11 at 23:44
  • BDD Behavior Driven Development, much like Test Driven Development, but the emphasis is on customer requirements as tests (specifications). DDD is Domain Driven Design, a hybrid of Agile, Design Patterns, and programming based on a model and it's focus. – Zachary Scott Mar 18 '11 at 01:24
  • 4
    Memorization is not enough. It takes the education to know how to use Reg Ex and the experience to know when to use it. I would include reading books as part of the education. Job related experience seldom encourages you to do things the right way. – Zachary Scott Mar 18 '11 at 01:27
  • I've built observatory systems and I had to learn some astronomy. – Tim Williscroft Mar 18 '11 at 01:50
  • 10
    It matters when you don't have one – Aditya P Mar 18 '11 at 07:00
  • "Hardly useful"?!? Are you coding nothing more than WinForms? C# is not a magical artificial intelligence tool that do all the programming for you. You have to implement all that algorithms and data structures on your own, as System.Collections is quite poor. You still have to design a right architecture for your applications, C# won't do it for you. You have to assess the performance implications of your design decisions. You still have to *automate* your work with smart tools, otherwise someone more productive will get your job. You desperately need CS (I mean, knowledge, not a degree). – SK-logic Mar 18 '11 at 10:01
  • School is either for dumb people so they learn appropriate things, some kind of guidance when it's hard to learn by oneself, or to just kill sometime to learn by oneself and be guided at the same time. – jokoon Mar 18 '11 at 12:01
  • 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.) 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. – luis.espinal Mar 18 '11 at 13:21
  • 2
    I had a 2.8 too, Pretty average. But we were mostly taught C/Java and some web stuff, No C# stuff. Anyways I think CS is the "next best thing", because CS 4 year programs aren't exactly easy and it does show you can work hard to get the degree. Why does it matter anyways? it gets you the job! –  Mar 18 '11 at 14:14
  • 1
    @luis.espinal I question those statistics. I doubt 70% of all code is in C (think of all the silent Fortran, COBOL, PL1, and Rexx ticking happily away). A plurality, certainly, but a vast majority, I am skeptical. There are a lot of embedded devices, but the number of embedded devices doesn't say anything about original source. Once it's written for the first specific device, its generally good for all subsequent devices of the same; and presumably, a lot is reused for close derivatives, whether in the same line of a later revision, or in a different line from the same product family. – JustinC Mar 20 '11 at 03:32
  • (cont) Aggregation of job search sites is interesting, but there are too many localized variables in play. For instance, some industries made a defacto adoption of certain technology stacks and could be suffering temporarily or long term (we don't know yet) more than others, thus not growing the software side of their business [right now]. Some industries are also geographically clustered, like traditional auto production being in the upper midwest. Or major banking centers, etc, etc. Briefly, the TIOBE index is interesting to me too, but more so for the trends, rather than relative rank. – JustinC Mar 20 '11 at 03:48
  • @JustinC - *"Once it's written for the first specific device, its generally good for all subsequent devices of the same; and presumably, a lot is reused for close derivatives, whether in the same line of a later revision, or in a different line from the same product family."* But applies to all software, independently of programming language. With that as an equalizer, the number of product **types** being produced act as a good proxy to estimate the number of projects by programming language. – luis.espinal Mar 21 '11 at 12:57
  • @JustinC - I agree that TIOBE (and similar aggregation sites) have a lot of variables, too much to account for. But as you said, they help track trends. And the trend we perceive pretty much debunks (or at the very least put serious doubt on) the argument that .NET is the most popular (read "widespread") programming platform out there (which is the OP's contention I disagree the most.) – luis.espinal Mar 21 '11 at 12:59

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,104
  • 3
  • 37
  • 39
  • 4
    +1 - This makes sense. Expert guidance has probably helped me in ways I do not recognize. I still wonder if 4 years of general education trumps 4 years of industry experience, assuming both developers are equally motivated to learn. There is a certain level of discipline I feel I did not have before the degree, that certainly counts for something. – P.Brian.Mackey Mar 17 '11 at 19:46
  • 4
    Learning proper terminology and spending a lot of time with other people learning the same material are also benefits that go along with that expensive piece of paper. – sal Mar 17 '11 at 20:28
  • 65
    On the other hand, I've seen people with degree who still fail at most of this list :) – Joel Gauvreau Mar 17 '11 at 20:44
  • Perhaps a higher-quality link for the 10000 hour rule: http://en.wikipedia.org/wiki/Outliers_%28book%29 . – phooji Mar 17 '11 at 23:19
  • An even higher quality link for the 10,000 hour rule: [K. Anders Ericsson](http://www.psy.fsu.edu/faculty/ericsson.dp.html) – acmshar Mar 17 '11 at 23:56
  • 1
    Gee they might have heard of graph theory too. That might make partitioning applications into clients and servers, networks, DAGs and trees a bit simpler. – Tim Williscroft Mar 18 '11 at 01:52
  • 1
    @P.Brian.Mackey How is discipline taught? There are many assertions throughout this topic that a CS degree was valuable because this or that, but I have yet to see anything that would truly differentiate the knowledge and guidance of a qualified mentor accompanied by a selection of the same or perhaps better books than what was prescribed by faculty in a CS program. The other social-professional skills, like a deep understanding of technical material. The simple fact is degree holders tend to defend them for any reason because they have them. – JustinC Mar 18 '11 at 02:46
  • @JustinC: From my experience, the main advantage you get from a CS degree as opposed to any other degree is breadth of skills and knowledge (as long as you don't forget everything you've learned right after the exam). The other advantage might be contacts to future peers. – Jonas Mar 18 '11 at 03:15
  • "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." That may be true. But a good teacher != degree. Some schools blow donkey balls. – d-_-b Mar 18 '11 at 07:45
  • I lerned myself some computer stuff from MIT and Stanford (http://academicearth.org/subjects/computer-science) where'd you get your degree :). +1 for the 'commit to a long-term goal and succeed' part though, that's the kicker in my book. – Evan Plaice Mar 18 '11 at 08:19
  • 3
    @JustinC - Your assertion "degree holders tend to defend them for any reason because they have them" is one of the fundamental reasons I asked the question. I have seen this blind irrational defense first hand. The opposite also holds true. – P.Brian.Mackey Mar 22 '11 at 01:13
  • 1
    +1 to hit 3 digits. IMHO, what matters is how fast a person learns and how passionate he is to be a professional programmer. – setzamora Apr 25 '11 at 08:59
  • 1
    Wow, I must be working in the strangest job around - In my first 3 years out of University (the same length as my degree), I have used barely any of the stuff listed. I may as well not have gotten the degree and spent the last 6 years learning in the industry... Or I should get a new job... – Jess Telford Sep 23 '11 at 11:11
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
  • 33
  • 41
  • 28
    +1 - very true, but in 40 years I wont give a damn. – P.Brian.Mackey Mar 17 '11 at 19:37
  • 3
    @P.Brian.Mackey: I would guess that in 10 years C# will be on the road out, and in 20, it will be more of a memory, and in 30 years from now, it will require grey-hair old code archeologists. People who tie themselves to a given set of tools obselete themselves. I have had the good fortune to read old papers on system software from the late 1970s and early 1980s. Of those software systems, very few are in today's radar. Maybe 1 or 2 (Unix and Lisp). Although today's install base is larger, I expect a similar thing to happen. – Paul Nathan Mar 17 '11 at 22:51
  • 4
    @P.Brian.Mackey Say what you will, but I plan to still be kicking in 40 years, and 80 years from now too if I have a say in the matter. – Matthew Scharley Mar 17 '11 at 22:53
  • 2
    @Paul Nathan: To further your point, some of the fundamental underpinnings of programming hail from the 1930s (e.g., http://en.wikipedia.org/wiki/Church%E2%80%93Turing_thesis ). I wonder if/how we'll be writing code 80 years from now :) – phooji Mar 17 '11 at 23:24
  • except we have quantum computers by then – Dave O. Mar 17 '11 at 23:48
  • 3
    @phooji (load "legacy-c-sharp-routines" ...) :P – Mark C Mar 18 '11 at 01:43
  • 2
    @Paul Nathan: I had the good fortune to actually be a software practitioner in the seventies and eighties. I am in my fourth decade as a software practitioner. – bit-twiddler Mar 18 '11 at 04:48
  • 1
    And the guys who'll still be kicking around maintaining them will be the few who learned it in comp sci in college and never bothered to keep learning on their own without somebody to hold their hand. By then, *modern* computing will probably be done on neural networks and serial processing architectures will be considered as anachronistic as punch card programming is today. – Evan Plaice Mar 18 '11 at 08:12
  • @phooji You still want to be programming, and that it isn't a machine that does that, remember the terminator saga... – Coyote21 Mar 18 '11 at 09:50
  • Matthew Scharley - note: though you want, right now, to be around in 80 (or even 40) years... that may well be assuming you have a reasonably healthy body... something that's probably not even a concern or thought now... otherwise your opinion of that age may change. Something to think about as the decades go by. – Michael Durrant Nov 24 '14 at 17:37
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
  • 45,799
  • 22
  • 87
  • 126
  • 5
    I remember one of my CS professors saying something to the effect that *only 2% of you will actually get a job where you get to deal with computer science principles on a regular basis*. – red-dirt Mar 18 '11 at 10:33
  • 16
    @el fuser: Indeed; now, an interesting question that is perhaps germane to this discussion is *is the purpose of higher education merely to be training for a particular job?* I do not believe that it is. Universities are not vocational schools; their function is to create knowledge through research and expose students to that universe of knowledge. That this might give students job skills seems to me to be a side effect rather than a goal. At Waterloo we were explicitly told that we would be taught theory, not practice. – Eric Lippert Mar 18 '11 at 14:03
  • 1
    The creation of original research in a collegiate setting though, in general and regardless of program, rarely happens prior to being beyond the period of training called a bachelors program. Research happens before that, but generally study of genuinely new material is reserved for those in a masters or doctoral program. In other words, you are often steered away from discovery, but towards some reinforcement of what is already known. Undergrad research is more about the process of research than growth of any particular body of knowledge. Private research has a different goal. – JustinC Mar 18 '11 at 20:16
  • 1
    The day that the best jobs no longer require a degree is the day universities no longer have students to support their programs. – P.Brian.Mackey Mar 22 '11 at 01:07
  • how often does Anders use his ;) – Matthew Whited Apr 25 '11 at 10:37
  • @Matthew: you can't design sound type systems (= CS theory) without knowing type theory. Anders Hejlsberg could not add Covariance to the C# compiler unless he know exactly how it would affect typechecking, whether it will result in new errors, cause the compiler to enter an infinite loop, or what not. If you think you can design a type system and ignore theory, you are mistaken. – Jared Updike Sep 01 '11 at 18:00
  • @Jared, if you think it takes a college degree to learn something you are mistaken. – Matthew Whited Sep 04 '11 at 14:44
  • @Matthew: that is quite true. I do wonder how many people learn type theory outside of school? and of those how many have no formal math or CS background? It's certainly possible and obviously quite commendable. I didn't mean to imply that it was black and white -- school = learn CS theory or no school = ignorance. But often it's hard to know what theory is out there in the various specialized CS fields without being exposed to it in the first place, often at school. With Kahn Academy, SO, Stack Exchange, etc. this is luckily changing for the better! – Jared Updike Sep 05 '11 at 03:02
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,648
  • 1
  • 16
  • 17
  • 4
    I didn't know what a bit-twiddler was until I read _Coders At Work_. I'm guessing you've survived a paradigm shift or two and are speaking from experience. :) – Dave Neeley Mar 17 '11 at 20:38
  • Oh yeah, one can say that I have survived a few paradigm shifts. The first machine on which I worked was a MIL-SPEC version of the UNIVAC 418 (see en.wikipedia.org/wiki/UNIVAC_418). Unlike modern CPUs, this machine used one's complement for arithmetic. A negative number was a bit-wise inversion of a positive number instead of a bit-wise inversion plus one, as is found in two's complement arithmetic. One's complement addition required two addition operations. The first operation added two numbers. The second addition operation added the carry-out bit back into the low-order bit of the sum. – bit-twiddler Mar 18 '11 at 04:54
  • 3
    I disagree. It's easy to access resources that teach the fundamental concepts online (and is rewarding to gain the ability to find them on your own). For instance, http://academicearth.org/subjects/computer-science is a good place to start. Detailed information about newer architectural patterns is freely available for study, see http://www.chromium.org/developers/design-documents/multi-process-architecture. Often, the freely available materials online are much better and more up to date than what you'd expect from a local college. – Evan Plaice Mar 18 '11 at 07:18
  • (cont) I'd stress that Comp Sci will always have a place for programming researchers who are struggling to push the fundamentals to a higher level but it isn't inconceivable for a programmer to make it on his/her own as long as they have an internet connection and an interest in learning. I'm not sure what you mean by paradigm shift because, if you're referring to hardware architecture we've taken a step back over the last decade and a half. Multi-processor shared memory systems are just starting to make it back into the mainstream even though they've been around since the early 80s. – Evan Plaice Mar 18 '11 at 07:27
  • 14
    I think you've got it exactly backwards. A programmer is never done learning. Self taught programmers have demonstrated their ability to acquire knowledge *without* the need for the formal setting, the externally imposed deadlines, etc. which is exactly what one needs to survive changes in the market. – Mud Mar 18 '11 at 07:35
  • 2
    (cont) If you're talking about software paradigm shift... What paradigm shift? OOP isn't exactly new, neither is functional programming. Databases have been around for a very long time. Floating point numbers have been standardized since 1985 (IEEE 754). The only major shift I see is the shift to distributive processing systems (hugely networked systems that scale out vs up and programs that take advantage of many core hardware platforms), and the transition to a standardized international character set (UTF-8); both of which aren't really covered in compsci. – Evan Plaice Mar 18 '11 at 07:43
  • @Mud That's what I was trying to say but I got carried away. :) – Evan Plaice Mar 18 '11 at 07:49
  • The shift from punchcards? What shift? Say that again when you are booking your quantum computing class. Maybe an analog computer? – d-_-b Mar 18 '11 at 07:57
  • 2
    @Mud and Evan: I guess that you missed the "Sure, there are exceptions to rule" portion of my posting. I am assuming that both of you are young and unencumbered. That dynamic will change as you age. I have been in the field for over thirty years. I have watched a lot of self-taught programmers flame out after the stress of raising a family enters the picture, and the amount of time that one has to learn fundamentals on one's own approaches zero. I would love to have this same conversation when both of you reach the age of 40. – bit-twiddler Mar 18 '11 at 17:32
  • @Sims: How about the shift from developing software that contains no user interface code and runs as a batch job via JCL to on-line systems? Or the transition from "green screen" character-based development to event-driven GUI-based development (this shift left a lot of dead bodies on the road)? Or the transition from uni-processor to distributed system design where one had to factor IPC latency into the picture? Or the shift from procedural languages to OO languages (this shift left a ton of dead bodies on the road)? – bit-twiddler Mar 18 '11 at 17:45
  • @Evan: Distributed system design was taught when I was a undergraduate. – bit-twiddler Mar 18 '11 at 17:47
  • @bit-twiddler The aftermath from the paradigm shifts you referred @sims to cannot really be explained away by comp sci vs non comp scis. The field has become more mature and more ubiquitous. It is far less a voodoo art (you might prefer science; tamato/tomato) than it was the pre-internet era of computing. Then it was obscure journals; now countless sources to point us in a presumably better, more ideal direction. It might be a brief; or in some cases, very in depth discourse on the peculiarities of a particular vendors interpretation and subsequent implementation of SPEC-X. – JustinC Mar 18 '11 at 19:53
  • 2
    @twiddler: I'm 41. (1) I assumed we were talking about career programmers, not people JUST learning fundamentals at 40, with a family in the picture. In that case, your apples-to-apples comparison should be with people just starting COLLEGE at 40, with a family in the picture. (2) How does having proven ability to teach yourself make you LESS adaptable? Thus far, this is an unsupported assertion. Please give an example of a "paradigm shift" that someone who WAS TAUGHT X, Y and Z is prepared for, but someone who TAUGHT HIMSELF X, Y and Z is not, and explain why the latter is not. – Mud Mar 20 '11 at 06:27
  • @JustinC: I had the same attitude when as you have when I was young. The industry literally exploded in the early eighties. We had many high-quality information sources that are either no longer available or have shifted their focus. – bit-twiddler Mar 20 '11 at 15:57
  • 1
    @Mud: I am talking about career programmers. I start writing code professionally when I was eighteen years old. I received my initial training from the military and the National Security Agency (National Cryptologic School). However, even with the solid practical foundation that I gained from working for those institutions, I knew that I had to complete my BSCS in order to remain competitive and strengthen the fundamentals that are not learned on the job. Therein lies the rub. Most self-taught programmers have very weak fundamentals and that makes paradigm shifts very difficult. – bit-twiddler Mar 20 '11 at 16:18
  • continued: For example, a lot of COBOL and RPG types were either self-taught or taught on the job. Their entire body of knowledge was wrapped up in one tool set. Most of these people were unable to make the transition to client/server-based technology. The same thing happened to self-taught programmers who developed DOS-based applications when we transitioned to Windows. All of the people I know who have survived as long as I have either started with a BSCS or went back and earned a BSCS or an MSCS. – bit-twiddler Mar 20 '11 at 16:18
  • You didn't answer either of my questions. To make this very simple and concrete: please explain how a self-taught programmer was at a disadvantage when transitioning from DOS-based applications to Windows. – Mud Mar 20 '11 at 18:18
  • @Mud: There were two dynamics at play. The first was that he/she was working from a smaller body of knowledge. The average self-taught DOS programmer knew nothing about algorithms and data structures. He/she likely developed code in a database centric tool such dBase/xBase, R:Base, XDB. He/she had more than likely never dealt with message processing or threading. Not knowing anything about these areas was a career killer in the Windows world until tools that insulated one from the low-level intricacies of Windows hit the market. The Windows fallout was huge. – bit-twiddler Mar 20 '11 at 18:57
  • continued: The second dynamic in play was HR bias. The transition to Windows for all intents and purposes reset one's work experience clock to zero; therefore, formal education became the differentiating characteristic. Given two candidates that are equal in every way except education, the candidate with the CS degree won (this dynamic still holds true). We did have a few non-CS degree holders make it through the hiring process, but they were always paid less than software developers who held a CS degree. – bit-twiddler Mar 20 '11 at 19:07
  • 1
    (1) A programmer who knows nothing about algorithms or data structures hasn't really taught himself, has he? You're comparing apples to oranges. (2) Even allowing this unfair comparison, how would knowing algorithms and data structures better prepare you for Windows vs DOS, even a little? (3) How does the guy who can teach himself DOS programming (and probably has a deeper understanding of machine architecture than any kid learning Windows programming today), magically become a moron when Windows comes out? (4) Hiring is a different subject; we were discussing your claim about *adaptability*. – Mud Mar 20 '11 at 22:37
  • (1) There are different levels of self-taught programmers. Most self-taught programmers know syntax and how to code the basic control structures. They have also managed to learn a tool set. They may or may not know how to use a relational database manager. That is about all it takes to get a coding job in a corporate environment. They have not learned discrete math, nor have they learned computer organization and architecture, formal languages, operating system design, or information/coding theory. (2) Windows makes heavy use of data structures and algorithms. – bit-twiddler Mar 21 '11 at 03:15
  • (3) This question makes me wonder if you know anything about undergraduate computer science programs. All undergraduate computer science programs include at least one computer organization course. This course takes the student from half-adders through hardwired and microcoded processor design. If I ask a self-taught programmer to explain the term microcode, he will almost always say that it is the machine language for a microprocessor. A computer scientist knows that microcode is a the language in which instruction sets are implemented on microcoded processors such as the Intel family. – bit-twiddler Mar 21 '11 at 03:15
  • (3 cont) DOS was a fairly simple environment with a low basic knowledge threshold. Even if one was making heavy use of INT 21h and BIOS calls, programming under DOS was still a lot simpler than setting up the basic skeleton for a Win32 application and working with a message-oriented environment. – bit-twiddler Mar 21 '11 at 03:23
  • @bit-twiddler: If you consider that a shift, I can understand why you would be concerned. In that case, the industry has shifted on me so many times, I'm like a pheonix, re-born out of my ashes. I feel so alive! Perhaps the rigid learning structure has caused a brittle structure to form in your mind. Smash, knead, blend, filter, shift, and sort your mind periodically to assure you are in deed alive and not just a photocopy of another mind floating around the human consciousness. ;) – d-_-b Mar 22 '11 at 00:26
  • @Sims: Actually, formal instruction has not caused a brittle structure to form in my mind. I started out in this field without a CS degree. I received my initial training from a military technical school and the National Cryptologic School. However, I learned things in college that I would have never learned on the job or through self-study. We tend to study things on our own that are of immediate practical use. For example, few CS grads would have tackled discrete math on their own. However, mastering discrete math is the key to mastering CS and the proper subset of CS known as programming. – bit-twiddler Mar 22 '11 at 16:52
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,224
  • 9
  • 64
  • 81
  • 1
    Why? CS is all about solving the complex problems, whatever the nature of a problem is. CS should be useful even if you're not programming anything at all - it is a descendant of a forgotten but still essential cybernetics. – SK-logic Mar 18 '11 at 10:06
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
  • 1
  • 26
  • 35
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
  • 7
  • +1 - lol, I can't argue much with this. Though, I loved discrete math. Had a great professor who did lots of Yoda impressions. – P.Brian.Mackey Mar 22 '11 at 13:15
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,533
  • 4
  • 31
  • 56
  • 24
    Easy there, tiger. – whatsisname Mar 17 '11 at 18:58
  • 24
    "devise your own algorithm for randomized sorting and decipher the finer nuances of how to deal with NP complete problems in real life" ya I can't stress enough how much of my day to day real life job consists of these activites.... /sarcasm – quentin-starin Mar 17 '11 at 19:27
  • 4
    What I am saying is that 95% of the people I work with and have worked with in the past spend near 0 time devising algorithms. I spend the majority of my time making code more concise and easy to read. Very little time is spent on "finer nuances". In fact, I would find it interesting to spend a little time at least sorting up a workflow on a whiteboard...something that I've only done myself. Do you regularly discuss NP complete with your coworkers? What line of work are you in where you need to write custom sorts instead of implementing functional programming languages? – P.Brian.Mackey Mar 17 '11 at 19:30
  • 3
    @P.Brian.Mackey: Software development is an up or out profession. How many software developers work for your organization that are over the age of 50? As a software developer ages, a CS degree can mean the difference between having a job and being unemployable. While I presently hold undergraduate and graduate degrees in computer science, I received my initial training in this field from Naval and DoD technical schools back in the late seventies. All of the guys with whom I served who did not bother to complete a CS degree after leaving the military are no longer in the field. – bit-twiddler Mar 17 '11 at 20:33
  • 2
    @qes, @P. Brian Mackey, not all programming jobs are alike. Most programming jobs don't need or use the material learned in a CS degree, which is part of why there are so many successful self-taught programmers. If you want to work on problems that will use more of your CS education you are going to have to actively seek out the companies that do that sort of work. Google, Microsoft, Amazon, Oracle, and IBM obviously fall in that category, but there are many small shops out there too. – Charles E. Grant Mar 17 '11 at 20:57
  • 2
    @qes You fail at deductive reasoning. Also, by the way, a skill that a CS course teaches. – Konrad Rudolph Mar 17 '11 at 20:59
  • 7
    Why is it everyone seems to blindly accept the assumption that a formal college CS curriculum is required to have any knowledge of CS concepts? Maybe it's a failure of their deductive reasoning. I guess they need more CS courses. – quentin-starin Mar 17 '11 at 21:52
  • 1
    @qes, who said anything about college being the only way to get CS concepts? The original question was from someone who had a CS degree and wondering why it wasn't of more use in his job. You commented that you don't use some of those concepts in your job, with the implication that they are therefore useless. That is a false deduction. It may be true for your job, but your job is not the template for all programming jobs. – Charles E. Grant Mar 17 '11 at 23:06
  • 2
    @Charles: pretty much every answer here is in some way implying that a foundation in CS comes only from gaining the degree, like this answer's incredulity that the OP would even ask about a CS degree's usefulness, on the basis that without it one wouldn't have the fundamentals of CS. – quentin-starin Mar 17 '11 at 23:49
  • @qes: Let's talk when you turn forty. That's when failure to earn a four-year technical degree will come back to bite you in the rear parts. Forty-year-old software developers are held to a much different standard than thirty-year-old software developers. It is darn near impossible for a fifty-year-old software developer who lacks a four-year technical degree to find full-time employment. – bit-twiddler Mar 18 '11 at 01:18
  • 1
    In my experience most CS majors have a tough time developing business software. In my 20 years of development, I've run into exactly one exception with whom I've worked. In fact, IMO, it would be better for someone to get a minor in Math and a major in something other than CS. CS majors tend to be too focused on solved problems like sorting algorithms and less on business and user needs and often lack a fundamental understanding of business or economics. – Thomas Mar 18 '11 at 04:08
  • Most of the guys I know who started programming 30 years ago (one of them being my late father) did most of their work on punch cards where they would wait around all day for their turn to use the machine to see if it would compile. It's no mystery why they moved on to other fields early on. Fast-forward to the future and you'll find that most information about the fundamentals of operating systems, hardware architectures, data structures, etc... is all freely available online now. – Evan Plaice Mar 18 '11 at 07:58
  • (cont) 30 years ago it was nearly impossible to get a hold of a computer to work on, let alone a stable operating system that didn't cost thousands to hundreds of thousands of dollars. All of which used proprietary (undocumented) character sets, architectures, floating point formats, etc... Now you can get the source to hundreds of different OS implementations (many of which are specialized to specific uses) that mostly use standard architectures and data formats **for free**. I think it would be conservative to say that a lot has changed in the past 30 years. – Evan Plaice Mar 18 '11 at 08:02
  • @qes: Your job may not require understanding of algorithms and data structures, but usually for most jobs it matters. I was trying to stress on the fact that C# cannot be a replacement or alternative to core CS. – Fanatic23 Mar 18 '11 at 15:44
  • 1
    @Evan: I had an LSI-11 and several microprocessor-based systems in my home thirty years ago. With that said, your assumption that punched card technology caused people to leave is way off base. Most people are pushed out of the field. All of the self-acquired technical expertise in the world is not going to overcome the rampant age discrimination that occurs in this field. This problem is compounded by the fact that one's personal network starts to dry up as one ages, forcing one to come through HR. That's when things get tough for those who lack a CS degree. – bit-twiddler Mar 18 '11 at 18:10
  • @bit-twiddler I think the age aversion is something more broad than this field. How many 60 year old ditch diggers do you see? Astronauts? Well, John Glenn may have helped that cause; (or killed the entire thing if you believe certain people). Examples too oriented towards physical careers? how about elder TV personalities, or musicians, or even politicians who desire to make it a career (regardless of whether that should be or not be an option)? Whether it is as characterized as strong as discrimination, or to a lesser degree in aversion, it ain't local to software builders. – JustinC Mar 20 '11 at 04:02
  • @JustinC: Software development has a horrible track record when it comes to age discrimination. More age discrimination lawsuits are filed against employers in software development than any other technical field. – bit-twiddler Mar 20 '11 at 16:42
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.

Jeff Langemeier
  • 1,397
  • 9
  • 19
  • What is your definition of "coder" and "programmer"? To me, these can be the same, and are in contrast to "computer scientist". – Mark C Mar 18 '11 at 01:45
  • Coder just writes the code, doesn't necessarily think about different design paradigms or thought processi that are applicable to making better code. Programmers actually think about the code that they write, and approach it from a top down perspective instead of a bottom-up code first perspective. – Jeff Langemeier Mar 18 '11 at 05:47
  • What is your definition of "code monkey" and "programmer"? The programmer can think on ways to solve the problem that the code money can't... – Coyote21 Mar 18 '11 at 09:56
  • Passion isn't awarded by a degree. Its just part of who you are. – P.Brian.Mackey Mar 22 '11 at 13:19
  • @P.Brian Sometimes it just so happens though that your passion awards a degree, and is further spurred by the attainment of said degree. – Jeff Langemeier Mar 23 '11 at 01:45
5

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

Shawn
  • 535
  • 3
  • 7
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,052
  • 8
  • 65
  • 112
  • One of the best programmers is an economist that works exclusively in Excel/VBA and R. He has done some amazing things in excel. – sal Mar 17 '11 at 20:32
  • @sal Writing things in Excel and R doesn't require a CS degree. Writing Excel or R most likely would. – Alnitak Mar 17 '11 at 21:55
  • @alnitak - Writing Excel or R doesn't require a CS degree either. That's kind of the point of my response and sal's – JohnFx Mar 17 '11 at 22:38
  • @JohnFX: I graduated with Latin honors from one the top-twenty CS programs in U.S., and that credential alone stills gets me through the door (I also hold an MSCS from another reputable school). I started out in the field as an enlisted computer operator and programmer straight out of high school. I received my initial computer systems and software development training from the U.S. Navy and the National Security Agency; therefore, I worked in the field without a BSCS for a number of years. All I can says is that it was literally like the heavens parted when I completed my BSCS. – bit-twiddler Mar 18 '11 at 18:29
  • @bit-twiddler - is that meant to support or rebut my answer? It seems like it supports my final assertion that it matters if you have a post-grad or big name school degree. – JohnFx Mar 19 '11 at 02:42
  • @JohnFX: My comment was meant to support your final assertion. I doubt that I would still be employed in software engineering had I chosen a different educational path after completing my active duty service obligation. Almost all of the people that I knew when I started out in the field are gone. Some of these people left on their own, but most were pushed out of the field after they hit thirty-five because software engineering is an "up or out" industry. The only way to counteract this mindset is to earn an advanced technical degree and shoot for an advisory or principal engineer position. – bit-twiddler Mar 19 '11 at 04:04
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,560
  • 1
  • 20
  • 17
  • TIOBE is crap for determining how much a programming language is used. It's a measure of how popular a given language is on the internet (in terms of number of references), not in terms of lines of code written. – Billy ONeal Mar 20 '11 at 14:44
  • Due to its language-specific variabilities, LOC are irrelevant across programming languages, and thus cannot be used to measure programming language usage across industries. And the popularity of language searches on the internet act as a partial proxy for the depth and interest of usage (or lack thereof)... **if you are aware of the inevitable bias. By itself, **the TIOBE index mean nothing** - only a fool would think otherwise; and only a fool would think that **that** what I'm stating. – luis.espinal Mar 21 '11 at 13:06
  • When taken in addition to other indicators (such as job searches and product type development), it helps in estimating trends in technology usage. In other words, it is useful or useless depending on what you use it for, how you use it, and with what other indicators it gets combined with. – luis.espinal Mar 21 '11 at 13:07
  • My point is you seem to be using that index to make a statement about the **use** of a programming language, which is not what that index measures. I misspoke when I said LoC written -- but there's no good way of saying "amount of code written" which is what I meant. TIOBE is a popularity contest, and in that race Java is going to blow away everyone else for as long as it's the *linqua franca* of introductory programming courses. (Not because that means those students don't know anything else; but because students are usually **louder** than professionals. (i.e. yours truly) – Billy ONeal Mar 21 '11 at 14:28
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,795
  • 1
  • 40
  • 76
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,360
  • 26
  • 31
  • There are other subjects that only CS and computer engineering majors tend to learn such as computer organization and computer architecture. Learning how to build computers from sequential and combinational logic makes one a better software developer because it gives one insight into what is really going on inside of a computer. Furthermore, the first programmers to work with a new processor need understand concepts such as hierarchical memory and I/O, pipelines, block-set associative caches, control units (microcoded and hardwired), and the difference between scalar and vector processing. – bit-twiddler Mar 18 '11 at 01:42
  • How will collegiate study of CS provide better exposure than in a lab where it really matters with a qualified mentor who knows not only how it is supposed to work and how it actually works? – JustinC Mar 18 '11 at 02:34
  • @bit Agreed. Yes, my answer is rather glib. It was intended to be that way for a reason. – George Marian Mar 18 '11 at 04:51
  • @justin I'm not quite sure what you're trying to say. How many programmers work in a lab, let alone with qualified mentors? – George Marian Mar 18 '11 at 04:57
  • @JustinC: One learns how things work in a lab (technician level). One learns why things work in upper-level computer organization and architecture courses (engineer level). If you purchase a couple of upper-level college textbooks on computer architecture and computer organization, you will see what I mean. – bit-twiddler Mar 18 '11 at 05:23
  • In fact I own books like that. Read them, took notes, and boxed them up. I pull them out when I need them. The point was that you, with your decades of experience would be valuable as a mentor to someone new, coming of age, in an occupation that interested them; and probably more so, than a formal instructor throwing fundamentals and generalities at a large group who have little clue where or what they want to do after the finish their 'training.' – JustinC Mar 20 '11 at 04:24
  • @justin Two important points I'm trying to make: First, in most work environments one is paid to work, not learn. (One may even find themselves working as a trainee with no guidance, let alone training.) Second, just because someone has a great deal of knowledge or experience doesn't mean that they're good at teaching/mentoring. To add to these points: the reason we're saying that a CS degree is quite helpful is that it should be broader than the experience one gets working with a relatively narrow set of problems for any one company and it provides a better foundation for that learning. – George Marian Mar 20 '11 at 05:51
  • I don't fully agree. If you are some kind of 'senior' the expectations and responsibilities are vastly different than if you are 'junior.' Many throughout this thread, other threads on the site, and on other sites have often expressed that CS grads are woefully unprepared, and by extension there is a 'ramp up' period where they are once again, learning while getting paid -- not just just the domain or technology, but perhaps even fundamentals that were glossed over or even ommitted from their course plan. I do agree that of course not all 'seniors' would make good mentors. A lot would, tho – JustinC Mar 20 '11 at 06:04
  • cont If these juniors had instead started at a different location within the organization, but within the same business unit, some of that ramp up for domain and technology concerns could be accumlated as a side effect of 'apprenticeship,' while they develop fundamentals of the technique or craft under guidance of a mentor performing a different but related job. – JustinC Mar 20 '11 at 06:09
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.

Michael Easter
  • 529
  • 5
  • 12
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
  • 191
  • 4
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
  • 489
  • 3
  • 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?

  • 1
    You can't make the assumption that someone won't be interested 'looking into other technologies' just because they don't have a CS degree. This is a fallacy. – Steven Striga Mar 18 '11 at 12:05
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
  • 2
  • 4
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,146
  • 11
  • 16
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
  • 4
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

Martin Beckett
  • 15,776
  • 3
  • 42
  • 69
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,248
  • 4
  • 78
  • 93
-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
  • 4
-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.

TeaDrinkingGeek
  • 1,519
  • 3
  • 13
  • 28