Does Learning To Code Outweigh a Degree In Computer Science?
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.
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.
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.
This is simply not the case today, especially as applied to 20-somthing trying to get a job. If you are still skeptical, I invite you to go to talk to HR and ask them what it would take to get entry-level job without a degree.
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.
You may have a BS in Comp Sci, but I'll tell you one thing: I'd really hate having to read your Implementation Docs or code comments if they look anything like the post you just made.
Your post also brings into question exactly how good of a programmer you really are as well. You see, English, much like programming, has a structure and a syntax. While you may have syntax, there is no structure. You may not have to compete for a job with someone who doesn't have a BS in CS, but you will most certainly have your cover letter compared to another person with a BS in CS who actually puts structure into his correspondence.
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.
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.
I am becoming gerund, destroyer of verbs.
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)
A Pirate and a Puritan look the same on a balance sheet.
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.
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).
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
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.
HA! I just wasted some of your bandwidth with a frivolous sig!