Forgot your password?
typodupeerror
Programming Education

Does Learning To Code Outweigh a Degree In Computer Science? 546

Posted by samzenpus
from the most-bang-for-your-buck dept.
jjp9999 writes A college degree may not the best route when it comes to jobs in coding. Jobs for computer science majors flow aplenty, yet employers (and job-seekers) often learn quickly that the college grads don't have the skills. "This is because the courses taught in virtually all computer science curriculums focus on theory, and they only dabble in teaching practical programming skills," says Cody Scholberg on Epoch Times. This ties into a unique factoid in the world of programmers. Nearly half of the software developers in the United States do not have a college degree. Many never even graduated from high school. Instead, many aspiring programmers are turning to open source learning materials, or to the new programming bootcamps popping up around the United States. While theory does have its place, the situation raises the question of whether colleges are teaching the right skills people need to join the workforce, and what its place is amid the rise of open source learning.
This discussion has been archived. No new comments can be posted.

Does Learning To Code Outweigh a Degree In Computer Science?

Comments Filter:
  • No (Score:5, Insightful)

    by Drethon (1445051) on Wednesday September 03, 2014 @03:12PM (#47819137)
    There are too many things that an employer is looking for from a degree that has nothing to do with coding. Ability to follow through with a royally painful task, well rounded as in able to communicate clearly and plenty of other things.

    Do colleges actually teach useful skills? I got the very basics out of my college and the rest I learned on an internship and on the job. I do think colleges could be improved but I'm not smart enough to say how.
  • False premise (Score:0, Insightful)

    by sinij (911942) on Wednesday September 03, 2014 @03:15PM (#47819165) Journal
    >>A college degree may not the best route when it comes to jobs in coding.

    If you plan to be employed in the technology field, then you have to have a degree in computer science, engineering, math, or physics. Without a degree you will find nearly impossible to get past HR gatekeepers. Nobody actually cares where the degree is from, just that you have one.

    Sure, you can beat the odds and be The Exception, but life is hard enough already that it is unwise to invite additional difficulties.
  • by Anonymous Coward on Wednesday September 03, 2014 @03:16PM (#47819169)

    Computer Science is teaching EXACTLY what Computer Science is supposed to. Theory. It's an academic pursuit, not an applied skills program.

    If you want to learn how to build usable software, that is a different skillset.

    I've got a Comp Sci degree, and I've been a professional software developer for the past 19 years. While some things I learned in my degree program have come in handy, I learned to code professionally AFTER I entered the workforce, and primarily from working with other people's code and being mentored by those that had done the job.

    There should be a professional "Software Engineering" (or call it something else if the Engineers get upset about the term) program for those that want to actually build code.

  • by cruff (171569) on Wednesday September 03, 2014 @03:17PM (#47819177) Homepage
    So much of the code that I've seen is poor because the people writing it have not learned the fundamentals of requirements determination and problem solving skills. Then you need to understand how to choose appropriate algorithms and tool sets to apply. Then you learn what you should have known in the first pass and you start again on a better solution. While colleges attempt to produce people having those skills, they often do not provide enough practice. For all four years of my degree program, only one course was about software engineering itself, and because it was only for a quarter, not nearly long enough to cover what takes years to pick up once you are out in the real world.
  • by darylb (10898) on Wednesday September 03, 2014 @03:24PM (#47819293)

    Being a developer is about more than code.

    For example:
    1. You'll follow and (perhaps later on) write and refine software specifications. You need to learn different ways to do this.

    2. You'll need to select appropriate algorithms for the task at hand, and evaluate performance for new code -- which you wrote against a trivially small amount of data -- against production data volumes.

    3. You'll need to understand pros and cons of different software development approaches, particularly waterfall and the broad category of "agile". Why would you pick one over the other?

    4. You'll need, at least on occasion, to understand one or more software modeling systems, and perhaps to create models that represent what you're suggesting.

    5. You may very well need advanced mathematics for your job. Just a couple of months ago, I had to write some vector-handling code, in PL/SQL of all things.

    Sure...you could learn all this on your own. But a good compsci curriculum will provide you with at least an introduction to all of these, with some kind of attestation of basic familiarity.

    If you want to be "just a coder," go right ahead. However, you'll never be all that competitive with those possessing the larger body of skills needed to be a solid technical professional. Of course, real experience is very helpful in landing the first job. That's what student jobs, interning, and cooperative education are for. I'd never have landed my first job without some of the skills I learned over four terms of co-op.

  • by Anonymous Coward on Wednesday September 03, 2014 @03:25PM (#47819319)

    Ever hear of the phrase you don't know what you don't know? What I have seen are people that are self taught and be a pretty good but they have a very limited domain of knowledge, specifically limited to the things they studied. Usually they have huge gaps in information from algorithms, discrete mathematics, and other things that are very valuable as knowledge that can be applied practically to their coding directly or indirectly. The computer science or computer engineering degree purposely teaches a wide range of topics so that you have a large tool set to work with depending upon the problem domain. Self-taught people almost always lack that knowledge. There are extremely rare cases, the exceptions, people have been self taught but they basically study all of the topics that you were studying computer science overtime. Those people are definitely be exceptions and I have met one or two of them in my 15 years as a software engineer. I think people are just fooling themselves saying they don't need a computer science degree it's cheaper and it's way easier basically a limit to how fast they can get a job and that is it and is there a way to grow sometimes but you'll always see people with degrees make a lot more money on average and have a lot more career opportunities. Besides most companies HR require some sort of degree and at most A computer science degree to be hired as a software engineer. Moreover, to be promoted into management you definitely need some sort of for your degree and often a Masters in business or something else. So once you hit that limit then you basically got to start over, get your four year degree and then get a masters to advance and you're doing this when you're old and have children and your basically doing in the toughest way possible when you could've gotten it out of the way when you're young.

    On a selfish note, I will never, ever have to compete for a job with someone that does not have a bachelors degree. So this is good for me and it's not good for our country but hey you're going to do what you want to do dummy.

  • Re:Probably not. (Score:5, Insightful)

    by Jane Q. Public (1010737) on Wednesday September 03, 2014 @03:28PM (#47819349)
    I wouldn't say that learning to code necessarily outweighs a degree. But I do think university courses are too heavily focused on theory, and not enough practical application.

    They complement each other. The big problem here (having gone though both, most but not all of the college being quite a while ago) is that a computer programmer back in the day HAD to know theory well, because programming was hard work! Input/output was so slow that you had to get it right the first time. Often you would present your code to somebody at a window to run on the mainframe, and if you were lucky you got a printout (!!!) the next day. If you got it wrong, a whole day was down the tubes.

    Memory and storage were always in short supply, and CPU time was expensive. So everything had to be optimized. Sometimes for speed, sometimes for size, somethings a compromise of both. Theory was everywhere and you had to use it.

    Heavy on theory, short on practice model that university CS was built upon, out of necessity. And they've kind of stuck with it, because universities are slow to change such things.

    But I would also say that it is not a waste of time. As a practical programmer, theory will get you far. Look! De Morgan's Theorem just let me reduce those 5 lines of code to 2. You may not need to know linear algebra to work on sets of numbers, but if you do, hey, check it out. Now our program is half the size and our memory usage is down by 2 orders of magnitude.

    So I don't think either one replaces the other. They complement each other. But I do think universities could concentrate, at least for their BS programs, a bit more on practical programming and just a bit less on theory.
  • Don't get a degree (Score:2, Insightful)

    by Anonymous Coward on Wednesday September 03, 2014 @03:37PM (#47819473)

    Nope. University/College is a scam. Just watch youtube videos and read slashdot and you'll be golden.

    Disclaimer: I have both an undergraduate and graduate degree in computer science, and while I have an amazing job and make more money than I thought possible, I don't think my education had *any* impact what-so-ever on my success.

    Disclaimer2: This question appears almost weekly and is clearly a circle-jerk...

  • Depends (Score:2, Insightful)

    by drolli (522659) on Wednesday September 03, 2014 @03:42PM (#47819545) Journal

    I hoold a PhD in Physics, but coding is a important part of my usual jobs (i am a consultant).

    Educating myself in conding and following a master, and then a PhD in Physics trained very different aspects of my skills.

    None of each outweiths the other, and i am feeling very confident that i will never be without a job

  • by 0xdeadbeef (28836) on Wednesday September 03, 2014 @03:47PM (#47819601) Homepage Journal

    By Sturgeon's Law, most colleges that offer CS degrees are diploma mills. That isn't to say they're all scams, and you could certainly learn how to program well despite your shitty education, because after all, you really learn how to program on your own in any case, but simply because they teach things like Java and SQL, instead of things like actual fucking CS, you're not going to learn how to solve interesting software problems. You're going to learn how to be cogs in a corporate hierarchy and do what the people who inspired Dilbert ask you to do, valuing keywords on your resume instead of demonstrable achievements.

    But if you got a CS degree from one of the schools near the front of this list [rankingsandreviews.com], it's a pretty good bet you're not a retard, and if even if you're not yet a great programmer, at least you're not one of morons who can't pass fizzbuzz, and we can assume you'll learn on the job and have the theoretical background to keep up.

    "Oh, but I'm such a great programmer and I learned all that theory stuff on my own and you can't judge me!"

    Who said I was? You're the one framing it like that. Every good programmer is an autodidactic dilettante in many things. You have to be, because every job requires you inhale a bunch of domain knowledge about the real-world problem you're solving in addition to the technology you're using. You're not special.

    But the people who spent four, or five, or ten years surrounded by the some of the smartest people their age doing nothing but having fun and (mostly) learning what interests them is going to be a lot more well rounded than the kid who went chasing dollars right after high school. All else being equal, the kid who went to a good school is better at this than the kid who didn't.

  • by pthisis (27352) on Wednesday September 03, 2014 @03:50PM (#47819637) Homepage Journal

    Computer Science is teaching EXACTLY what Computer Science is supposed to. Theory. It's an academic pursuit, not an applied skills program.

    If you want to learn how to build usable software, that is a different skillset.

    Precisely. Getting a computer science degree in order to become a programmer is like getting a mechanical engineering degree before becoming a mechanic. Yeah, it's kind of vaguely field related and will help give you some background about why things are done a certain way, but it's not at all necessary to the occupation and for many people is a big waste of time. Conversely, a typical programmer can't do CS work (just as a typical mechanic can't do most mech E work) without significant training in that arena.

    There should be a professional "Software Engineering" (or call it something else if the Engineers get upset about the term) program for those that want to actually build code.

    My school had these, http://www.sei.cmu.edu/ [cmu.edu] vs http://www.cs.cmu.edu/ [cmu.edu] The SEI only offered masters and higher level degrees, though, which seems backward if anything.

  • by Todd Knarr (15451) on Wednesday September 03, 2014 @03:52PM (#47819657) Homepage

    The difference between someone with a Computer Science degree and one who's learned practical coding is the difference between a residential-home architect and a construction-oriented master carpenter. The first can design your home and tell you why it's designed that way. The second can actually build it, tell you what goes into the construction and why, and when certain design elements are going to muck up the physical realities. In the end, you're going to need both skillsets unless you restrict yourself to just building cookie-cutter copies of existing house plans. And ideally your senior people should have both skillsets so their designs take into account the grungy details of turning them into working code.

    The absolute worst situation is senior architects/designers with no practical experience, they tend to turn out beautiful, elegant masterpieces that're a nightmare to actually implement. That's followed only slightly by pure practical programmers trying to do high-level design while being ignorant of the overarching principles and abstract concepts that help guide you when it comes to what's the best way to approach a problem.

  • by bigpat (158134) on Wednesday September 03, 2014 @03:54PM (#47819679)

    This is an age old question not necessarily particular to Software Engineering... Are credentials or experience more important?

    I would say experience is what you need to do the job, while credentials are often what you need to get the job in the first place and advance your career beyond your current role. I think that holds true for the majority of jobs, but there are plenty of examples and counter-examples of people having success without experience and/or without relevant degree credentials. Career wise I would suggest maximizing the financial return on all your strengths in the near term and either address your weaknesses as best you can or just go around them. Medium to long term always be looking to fill in the gaps in your experience or education that might be relevant to the types of jobs you may want/need in the future.

  • Re:Probably not. (Score:5, Insightful)

    by i kan reed (749298) on Wednesday September 03, 2014 @04:10PM (#47819859) Homepage Journal

    My university took the attitude that computer science was an engineering discipline. You need to understand the theory, because the theory helps you classify and interpret that problem you're dealing with. But as an engineer, you're also on the hook for the process of design, and the actual design itself.

    Certainly they do not want to just teach you a programming language, because that's like teaching a mechanical engineer the tools and settings for a single CAD program. Or an architect just how to draw blueprints.

    But they still called it a computer science degree because I guess the world assumes people with a "software engineering" degree don't understand theory? I don't know why they made that choice.

  • Re:False premise (Score:4, Insightful)

    by Minwee (522556) <dcr@neverwhen.org> on Wednesday September 03, 2014 @04:11PM (#47819869) Homepage

    Absolutely. For any reasonable definition of 'coder' that approximates definition of 'employed IT professional' that statement is false.

    Clearly we live in different universes.

    In yours, it seems that "employed" means "employed by a large corporation whose organizational chart can only be displayed on several bedsheets stitched together", while in mine it means "hired or being engaged to perform work for pay".

    My universe is full of people who are employed as IT professionals without having science or engineering degrees. Most of them landed their current positions on the strength of previous work in the field, and are just as capable as their degree-bearing and ring-wearing coworkers. As long as you can do your job, nobody cares what kind of expensive picture frames you hang on your wall.

  • Wrong Paradigm (Score:2, Insightful)

    by wisnoskij (1206448) on Wednesday September 03, 2014 @04:14PM (#47819895) Homepage
    It is not as simple as theory vs practice. Yes, Comp Sci is very theory heavy and far too much so for the workplace. But companies are often not just looking for code writing monkeys. Being able to code is not nearly enough to actually write a useful program or even just a tiny part of it. You need a lot of math and advanced logic, and at least some of that theory they teach in comp sci.

    Otherwise it is like trying to solve calculus problems without any formal calculus knowledge; You might be able to hack your way through it, but that is about it.
  • Re:Probably not. (Score:5, Insightful)

    by wiredlogic (135348) on Wednesday September 03, 2014 @04:27PM (#47820011)

    Heavy on theory, short on practice model that university CS was built upon, out of necessity. And they've kind of stuck with it, because universities are slow to change such things.

    They've stuck with it because college isn't supposed to be about vocational training.

  • Re:It's all bunk. (Score:5, Insightful)

    by jedidiah (1196) on Wednesday September 03, 2014 @05:00PM (#47820333) Homepage

    The value of "learning to program" is roughly comparable to the 1st year of CS classes at a reputable University. It is certainly not a replacement for the entire degree. Also, the degree is no replacement for practical experience.

    There really aren't any shortcuts. There's a certain amount of time and effort you need to spend getting really good at something. Even Mozart couldn't escape from it.

    This reminds me of one of my cousins that thought you could get into computing by taking shortcuts like a weekend bootcamp. It was ultimately motivated by the usual underlying contempt that people have in general for anyone else's profession. (It's not just a computing thing)

  • by jedidiah (1196) on Wednesday September 03, 2014 @05:06PM (#47820399) Homepage

    Yes. Because a few off the cuff remarks given little effort because they are ultimately no real value certainly implies that all of his professional work is substandard and useless. [/sarc]

    Clearly the classic subjects are being neglected here either in primary education or at University.

  • by jedidiah (1196) on Wednesday September 03, 2014 @05:19PM (#47820525) Homepage

    > In fairness, anyone who actually learns to program on their own can muddle through with a couple of printf's and a stopwatch

    That approach is so crude and unsophisticated that just about anyone would know well enough not to admit to actually doing something that primitive.

    > Honestly, even if I'm doing it a on a million items, O(N^2) vs O(N) isn't a big deal - hardware is cheaper than my time.

    No. Not really. Plus that difference you are glossing over there can mean the difference between the problem being solvable with currently available hardware (or not). There's only so much hardware you can throw at a problem before you exhaust that approach.

    Actually. The more I look at your statement, the more the mind simply BOGGLES.

    boggles...

  • by jmcvetta (153563) on Wednesday September 03, 2014 @05:39PM (#47820741)

    The best-run company I ever worked with took what I thought was a sensible approach to optimization:

    We were working on a complicated production system with hundreds of individual components and intense uptime requirements. The vast majority of the programmers (about 1000) were to focus on writing "robust" code that worked in an "obvious", easy-to-maintain way. The Performance Engineering team would look at system metrics (everything was instrumented) to find the actual performance bottlenecks. Then they would send in a crack team of commando programmers to do trippy, non-obvious optimizations on very small pieces of code.

    The idea was, in a complicated system it's very unlikely that your specific piece of code is going to be the limiting factor in overall system performance. So it's better to have less performance-optimal but more robust code in most places; and to use fast but brittle code only where absolutely necessary.

    FWIW, the company in question is outlandishly profitable, and their software is widely considered the best in their industry.

  • Re:It's all bunk. (Score:5, Insightful)

    by Anonymous Brave Guy (457657) on Wednesday September 03, 2014 @06:42PM (#47821275)

    The value of "learning to program" is roughly comparable to the 1st year of CS classes at a reputable University. It is certainly not a replacement for the entire degree.

    Yes. IMHO this is what most often gets overlooked when people debate university CS/SE as a mostly-theoretical discipline as distinct from practical experience in industry.

    You can study practical skills in using a certain language or library or tool, and you can become somewhat productive. But without sufficient theoretical understanding, you're just doing cookie cutter coding, and you will always have a relatively low glass ceiling on how much you can achieve.

    Put more bluntly, practical skills are what you pick up to get from incompetent newbie to vaguely useful programmer in the first year or two on the job, but improving your theoretical understanding is what gets you from there to seriously useful senior developer a few years after that when you're no longer just writing simple GUI logic in C# or trivial ORM code for a Ruby on Rails web site back end.

    Also, the degree is no replacement for practical experience.

    Indeed, but someone with good theoretical understanding will pick up any given tool based on that theory fairly quickly.

    Now, at no point in this post did I imply that getting a degree is either necessary or sufficient to achieve a good understanding of the theory. As far as I'm concerned, you absolutely can get there with time, effort and an open mind.

    However, I think even autodidacts will find the process significantly easier if they've developed rigorous mathematical thinking and the ability to read and digest technical writing first one way or another. Also, for better or worse, the reality is that having that degree certificate will probably get you better jobs early in your career, which in turn will give you better experience and better colleagues to learn from at work.

    In any case, just reading lots of casually written tutorial blog posts by people who've been playing with a tool for six months longer than you have certainly won't get you to that level of understanding alone. It's very easy to spend a lot of time doing that in a field like software development, feel like you've learned a lot and can be super-productive, and never even know how much you're missing if you've never found the right course of study or mentor or on-line learning resource to open your eyes. That, IMHO, is the biggest risk for people who haven't studied formal CS/SE one way or another, and sadly you can always find plenty of examples in the on-line forums for whatever the latest shiny technology is (currently I'd say it's front-end web development).

  • by Anonymous Coward on Wednesday September 03, 2014 @08:51PM (#47822057)

    I have been programming for 15 years professionally. I was self taught and programmed for about 6 years before my professional career.

    A few years ago I started going part time to a State University for CS. I think your theory that you are somehow going to be superior to any, or even most, college grads by virtue of the fact that you never went to college is a load of bullshit. I also think your assumption that you will learn and assimilate knowledge faster than any, or even most, college grads is equally baseless.

    I think if you actually did some rigorous education in Computer Science you might find it a lot more beneficial and useful than you seem to think. But you never actually went to University, so you don't seem to know what types of things are taught there. Sure, there are lousy schools with lousy programs. And yes, many of my peers (who are of normal college age and not in their thirties like me) are unmotivated and not going to win Developer of the Year awards. But I've learned things that I failed to teach myself and have found immensely useful in my day to day work.

    When I was young I thought I knew everything. Around 27 I started to realize there was all this stuff I didn't know. I tried to teach myself many of the theory aspects (things ranging from algorithms, data structures, automata theory, etc) and failed. I failed because I THOUGHT I understood what I was learning, and it wasn't until I had good professors who were showing me where I was wrong and forcing me to understood things that I would normally not be motivated to teach myself until I actually started to grasp things.

    You claim you built your own "tools." I doubt that. I doubt you built your own OS, I doubt your built your own compiler. Your tools WERE handed to you. They were made by people who went to Universities and learned the hard theory and engineering practice to build them. I took a course in Compiler Construction, and let me tell you that parsing theory is difficult. Register allocation, code optimizations (dead code removal, constant & copy propagation, constant folding, etc) and supporting multiple back ends are difficult. You might be one of those rare autodidacts that can teach yourself these things, but I'm able to admit that I wasn't. I need someone to point out mistakes, push me to complete assignments I didn't particularly want to do and large scale projects that were difficult to deadlines. Most people similarly cannot just teach these technically complex topics to themselves.... It is much more difficult then learning the latest fad web framework.

    Another thing you would learn about in some University is a false dichotomy. Your post has an obvious one, which is that programmers who went to University are fundamentally and irreparably inferior to those that do not. The truth is, knowledge is good. When you take a good programmer and give them theory, they can do things they couldn't before. If you studied CS at a half-way decent school, YOU could do things you couldn't before. You would be able understand problems and solutions that you can't understand now, and you would be able to derive useful analogies to your daily work.

    But instead you have an inferiority complex about how all these hair brained college grads are coming in and ignoring your "explanations" (which of course must be right), get you fired (which you clearly didn't deserve) all because you know how code and anyone who went to school by your definition does not.

    By the way, I would be interested to check out all the tools you built yourself. It would be interesting to see the OS you use that isn't Linux, OS X, Windows, etc. I would also like to see your compilers that are most certainly not LLVM (started as a college research paper), GCC (includes many academic projects in it's implementation), Visual Studio (I'll just speculate that probably a few people who worked on Visual Studio went to college), Python, Ruby, Java (James Gosling thought going back for his CS PHD was immensely worth it).

    I would love t

  • Re:It's all bunk. (Score:4, Insightful)

    by mysidia (191772) on Wednesday September 03, 2014 @09:15PM (#47822145)

    The fact is that such a degree in no way indicates that obtaining it involved actually learning what was presented for longer than it takes to pass the relevant examinations.

    I think you misunderstand. They are using the degree as a method of verification that you know or can know. The degree is not proof that you know everything that was taught, BUT that you were at some point capable of learning everything that was taught well enough at one point to pass the test.

    If you could learn it well enough to pass the exam once, then you are more capable than the vast majority of the population.

    Which shows you more suitable than the average person as a mentally capable employee of learning and working in th field.

  • Re: It's all bunk. (Score:5, Insightful)

    by TiggertheMad (556308) on Wednesday September 03, 2014 @10:44PM (#47822521) Homepage Journal
    I taught my self to code at age 8, dropped out of college, with only a 101 comp sci class. All elementary school comp sci education was self taught. I recently got thrown on a team at work with a guy who was a couple years out of college with a masters in cs. He is pretty sharp, but he knows little about anything other than elementary algorithms, was no experience with assembly, sql, and hasn't even heard of touring and has never read Knuth. Give me a passionate, self motivated coder any day. They will teach themselves whatever the need to know to solve an interesting problem.

After an instrument has been assembled, extra components will be found on the bench.

Working...