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.
I wouldn't say learning to code outweighed a college degree. But having the mentality that would lead one to want to learn to code... That's a sure bet. Of course, that mentality might lead one to attend college but it's my contention that that is less advantageous for many (certainly it turned out to be a time sink for me).
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.
These are the graduates who end up in USA via H1-B process most of the time in HR, IT, banking projects. Quality of the graduates vary significantly. But they all make decent salaries in USA, comparable to high quality engineering grads from US schools on salaries. I have seen these programmers of questionable abilities pulling 100K to 140K a year easily.
sed -e 's/Chuck Norris/Rajnikant/g' joke > fact
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.
If you plan to be employed in the technology field, then you have to have a degree in computer science, engineering, math, or physics.
I have never found that to be true at any company I've ever worked for.
As a consultant I have never had anyone ask about my degree.
I do have a CS degree, and I find it valuable myself - but I don't think everyone needs one.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
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.
Astronomy graduates don't always make the best telescope lens grinders.
Microbiology graduates don't always make the best microscope builders.
Of course it does. You're hired. Your first assignment is to write a simple program to check wether my program terminates or not.
I have been an employed programmer for about 8 years now, dropped out of school to get paid instead of paying. Every single person I have had to work with who had a CS degree have had two traits in common. First, they love to remind you they have the degree. Second, they barely contribute anything to production except great ideas of how not to do things.
As a non-degree'd person, I have done contract work for 3 separate universities so far. You would think they would have an infinite supply of proud cheap labour to tap before giving me a call.
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.
Absolutely. For any reasonable definition of 'coder' that approximates definition of 'employed IT professional' that statement is false.
I'm assuming the vast majority of programming jobs require the ability to code, and no further domain specific knowledge. This is just based on my reading of many, many programming job listings over the years.
I'm sure there are jobs that require CS knowledge, just as I'm sure there are (programming-related) jobs that require Biology knowledge or Architecture knowledge or whatever. But all of those are niches: a very small subset of all programming jobs require those specific areas of knowledge. ALL programming jobs require coding though, and even among the ones that require domain-specific knoweldge, I'd imagine the bulk involve a lot more coding than anything else.
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.
Since I'm directly involved in the hiring for my company I can tell you for a fact that we are desperate for qualified candidates, and their college status is like item #25 on the list of things we care about. Given the incredibly competative job market we have, the idea that we (or any Silicon Valley company) would turn down an otherwise-qualified applicant simply because they lack a diploma is laughable.
Now, that being said, we have multiple PhDs on staff, so it's not like we're anti-education. I'm just saying, when you can't hire enough qualified people, the last thing you want to do is throw up hiring roadblocks that don't server any real purpose.
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...
In terms of hiring, I have yet to see a college or trade school that does an adequate job. Fundamentally, I'm hiring people to develop web apps on the MS MVC stack. That requires a bit of theory, architecture, security, and hands on coding skills. If you can't actually code, you're worthless. I give all applicants a CS101 level coding test. Anyone worth hiring will be done in under 5 minutes. From there, it turns in to an interview about your theoretical knowledge and patterns. Anyone without a basic grasp of security and best practices is a liability. And most recent grads, even if they have all that covered, take 6-12 months to really become useful. At which time, they expect to get paid a boatload of money, except I've got to somehow account for the expense of training them to be useful. It's all kind of frustrating, really,.
Computer Science is largely very specific applied math and theory. It includes algorithms, algorithm efficiency, a bunch of math, data structures from a theoretical design standpoint, and computer architecture. It tends to be very academic.
University programs vary widely on what the programs focus on, but generally Comp Sci is about the math and theory, and programming is something you do on the side to get the assignments done to illustrate the theory you are learning. With Computer Engineering and Software Engineering programs, things tend to be more hands on and focused more on doing than theory.
Programming, as desired by business, is NOT computer science. Business wants the most simplistic designs (i.e. always use linked lists instead of more appropriate data structures), and above all, they want you to code whatever it is FAST FAST FAST so you can SHIP SHIP SHIP. Because generally, most business are not software businesses, and they don't value developers or software beyond getting the minimum quick and dirty solution out of them as fast and as cheap as possible. Also, most business are not doing anything remotely resembling state of the art, and value the ability to hire a newbie to replace you.
CS grads have it rough. They know too much theory to be satisfied with basic programmer jobs, but they don't know enough about efficiently slapping out code day in and day out to have an easy time in a basic programmer job. The degree can get you in the door though. A lot of places filter out folks with no degree.
Not that there aren't some grads who still can't code their way out of a wet paper bag.
There's all sorts of stuff about programming that you will never learn in a CS program, such as when to select designs based on implementation risk and ease of maintenance, rather than algorithm efficiency. It sucks, but the people who pay for you to write the software could not give two shits about how well the code is designed as long as it mostly works and ships on time. For the most part, that CS theory is mostly only directly relevant to later in your programming career, and when you actually have some autonomy to "do it right" versus "do it yesterday", or if you strike out on your own.
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.
At the risk of being pedantic, you mean Apple ][ and Apple //e, but now that is out of the way ...
Lots of game programmers never bothered with a CS degree.
The world has moved from the 1980's. Whether it be programming, or devops, having a degree helps make you stand out and get past the HR drones.
Once you have 5-10 years _experience_, no on cares about the _theory_ that you learnt, or were supposed to know.
Having a degree gives you the possibility for more doors to be open for you. Not having a degree doesn't give you the same opportunities.
--
"Theory always comes after Application"
We've been arguing this for more than 20 years. Not much has changed, and it's not a new question. Code Slinger vs. Book Knowledge. College of Hard Knocks vs College of Ivy. I'm a greybeard now, and while I won't pretend to answer the whole question, I will provide some perspective...
I was a code slinger type - Right out of high school with some programming knowledge, some commercial success (with the C64), and whole lotta balls. I did some college, but it wasn't for me at the time. It didn't connect with what I wanted to do, which was code. I joined a contracting house, and they sent me all over the country. I learned more in 10 years doing that than any college would ever teach. Databases, Integration, GUI's, network programming, mulithreaded programming, and real-world problems, both programming and political. C, C++, Cobol, Fortran, BASIC, assembly (various), and eventually Java.
In the late 90's, I went back to school. Why? Not to learn programming - I was already at the top of my game. I went back to learn all the other stuff, and to do other things. I took psych courses, math courses, art classes, electronics, music, law, languages (Living: French, Dead: Nahuatl) ... I did it on my terms (Harvard Extension, no time limits.) I will graduate next year.
Do colleges teach some basics? Sure - Data algorithms and Graphics programming were very useful. Are they realistic? Not really - sometimes horribly so. Massively Parallel Programming was a mess of math decomposition problems I dropped quickly. Did I need them to enter a career of commercial programming? Nope.
I would say college education is not a prediction of coding ability. Having a college degree when you are entering the field can be useful, but having a CS degree IMHO is not any more useful than a general BA or BS. If you go to college, go to get a general education, learn how to think critically, expose yourself to some interesting things - but it is NOT a training program for coders. Technical schools are a whole 'nother thing, and I would avoid them like crazy. My experience is that they do train you, but the training is narrow and short-sighted. In the end, it would be throw-away time, and the student would have very little gained.
College? Sure - go do it. You will be a better person, and you will have some great social experiences. But if you want to code, you need to put the time in yourself and learn the skills. College won't teach you that.
}#q NO CARRIER
How much of that "nearly half" without a college degree is from the era when computer science degrees didn't exist? I went to a Top 10 engineering school, and we didn't have "Computer Science" or "Computer Systems" until my junior year - the closest was either a Math or EE specialization. There were already people leaving college early directly for industry, because the market was hot in both industrial and military applications. Alternatively, how many are from military training? I have worked with two people, both at the engineering level, both alumni of Air Force technical training in computer-based systems.
I concur with the many posters pointing out that a degree isn't just about coding; I keep having to fix things by people who can code, but never learned to DESIGN.
I'm assuming the vast majority of programming jobs require the ability to code, and no further domain specific knowledge. This is just based on my reading of many, many programming job listings over the years.
I'm sure there are jobs that require CS knowledge, just as I'm sure there are (programming-related) jobs that require Biology knowledge or Architecture knowledge or whatever. But all of those are niches: a very small subset of all programming jobs require those specific areas of knowledge. ALL programming jobs require coding though, and even among the ones that require domain-specific knoweldge, I'd imagine the bulk involve a lot more coding than anything else.
You don't need "domain specific knowledge" to code, but I think most such programmers are subpar. Code is like writing; you only need to know English (or your native language) to write, but if that's all you know then you're not going to be a particularly useful writer. Code implements algorithms, algorithms solve problems, and knowledge of the problem space is always not just valuable but the difference between uninteresting scribbles and a best selling novel.
A lot of the time, code supports other code; its code designed to address computer system issues explicitly. Knowledge of how computer systems work is essentially to being able to write or debug or sanity check reasonable code. Sometimes code directly tackles a non-computer problem like code to analyze data in another space. Its not *mandatory* to understand that space, but its extremely limiting on a developer to write code to analyze data about a subject matter they know nothing about. They will always need someone else to translate every little thing for them, and they will never be able to know if their code is actually doing something useful. If it goes awry, someone else will have to tell them that.
You have to be an extremely stellar programmer to be worth it, if you don't understand what you're coding about.
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.
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.
The amount of data and the complexity of the calculations involved demanded either a machine with a large number of compute cycles or some nifty CS theory-style rejiggering on the back end. In the end, the whole thing will run nicely on a modern, fairly average laptop as opposed to requiring the processing power of a huge server (or cluster).
I can't speak to your case specifically, but there's a trend in our industry (because of virtualization, AWS, etc.) to do the exact opposite of what you did. The basic equation of why goes like this:
X = the cost of a programmer for a month (or however long it took), including not just their salary but also their medical, 401k, the fractional cost of their manager's time, etc.
Y = the cost of the cheapest AWS machine you could get away with for the next 5 years
If X > Y then you're wasting money/your programmer's time by making them optimize the code.
So again, I can't speak to your specific case, but a basic truth is that people are expensive and hardware is cheap, so it takes a lot of hardware to make an optimizing programmer worthwhile.
If and only if that programmer does the optimization after coding and has not learned to code in an optimized fashion to begin with.
The premise in the summary is wrong. Employers have not learned that actual skill outweighs the fact that someone survived college.
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.
On the other hand, if the programmer presents a series of complex projects they have completed, this does positively indicate they have both the knowledge (what the degree should attest to, but really doesn't rise to the challenge) and the ability to employ that knowledge (which the degree does not assure anyone of, at all.) Those completed project should also serve to demonstrate that the required portions of theory have both been absorbed and implemented, presuming the project works well and as intended.
Employers and HR departments are rarely focused on actual performance, except in the very smallest of companies. Most use a combination of bean-counting, related age-discrimination, and the supposedly valuable rubber stamp of a degree to winnow out programming job applicants. After all, if said employee screws it up, that's the employee's fault. Not the HR person.
This, in fact, is why most corporate software goes out the door with so many problems, and it is also why those problems typically remain unfixed for very long periods of time.
It sure would be of great benefit to end users and companies if actual skill *did* outweigh a degree. But that's most definitely not happening. It's wishful thinking, that's all. And if you're an older programmer, even your sheepskin won't help you -- you cost too much, your health is significantly more uncertain, they don't like your familial obligations, they don't like your failure to integrate into "youth culture" as in no particular fascination with social media... or even your preference for a shirt and tie. Welcome to the machine. You put your hand in the gears right here. Unless you've enough of an entrepreneurial bent that you can go it on your own. In which case, I salute you and welcome you to the fairly low-population ranks of the escapees.
I've fallen off your lawn, and I can't get up.
Actually in terms of self-awareness, development and personal growth, experiencing university life can have a tremendous impact beyond the classroom. On average, I'd say it can at least doubles your social skills to an order of magnitude improvement social skills for some, and improve your quality of life. My personal opinion is that for many young people (and perhaps those not so young) considering this question, this can be an far greater benefit, and a more important benefit to your quality-of-life.
Having a degree can also make it easier to get a chance to be considered during a tight job market, and improve chances at negotiating a better salary / contract.
Getting a degree, without learning to code, will certainly make you an incompetent bane of your co-workers existence, no matter how short that career may be.
While being aware of the financial realities (and potential opportunities for assistance) of the cost of university, the strongest case tends to obviously be: do both.
Others have pointed out the obvious complimentary nature of knowledge (theory) combined with experience (practice). If you don't know what to work towards, you can waste a lot of time and effort doing things the hard way or rediscovering the bubble and merge sort. Or if you don't know what can and can't be done, or how to do it, you end up a hard working monkey with a very limited playbook. You may find the ever constant change in technology a burden, rather than an enjoyment (I mean after the first 5 years), because in my experience those who understand the fundamentals, those abstract or theoretical bits, can adapt to change more readily and often with dramatically less effort.
Most famous university dropouts (in Sciences and IT) both made it through admissions obviously, and more importantly left before they could finish their degree: that is to say, they were most likely in their 3rd or 4th year, not entirely flunking out first semester (though having a rough to horrible first year grades isn't particular uncommon even for many who later become professors themselves). In a fair number of cases, including some William guy from Redmond, they complete their degree later in life.
In the end; it is what you make of it, just like everything else in life.
Premature optimization is terrible.
-Hentai [in vita non pacem est]
I have relatives, retired in their 50s after a career in early days of programming (60s-70s era). Almost nobody had a degree back then.
Today? Things changed. If you are giving advice to young people on how to get a coding job, saying "don't bother with a degree" would set them up for a life of hard knocks. Would they still make it? Perhaps, but why make things harder on yourself?
this is an interesting discussion...I always like reading what actual coders have to say
i was in middle school in the late 80s-early 90s and first used a computer running DOS...i understood coding conceptually & we did a few command line things, also formulas in spreadsheets...i learned coding mostly from doing database management...then got an MS in information and communication science which included getting our CCNA
in academia i used SSPS which has (IIRC) a python-like (maybe Fortran?) scripting language for hand coding your crosstabs & such
my degree was an Engineering degree but not coding per se...we only used code to solve a problem or set up a router
in my research work, the SSPS code view was actually really helpful...the only way I learned how to do all the high level statistics coding was by meeting with the head research scientist at our university (they oversee all the research projects) and had him tutor me for a semester
the kids graduating from my MS program were getting $50,000+ jobs left and right and really like their work...I always wanted to see a coding option for our program because we had all this great expensive Cisco shit and awesome computers but no one in our program ever **made** anything...we never made apps or anything like that, because really **none of us could code in those languages**
Thank you Dave Raggett
> 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...
A Pirate and a Puritan look the same on a balance sheet.
Most coders don't actually program. They just write some lines of code that connect libraries together. They wouldn't know where to even begin if asked to write the libraries themselves, or write the networking protocols, or the operating system, or the compilers, or the GUI frameworks, or the browser, or even a simple scripting language.
I see some of these people in interviews, and they say "I do middleware". I ask them how the product they work on actually works and they honestly don't have any idea. They just take data from one layer and pass it to the next layer. They can't even start to describe how they'd be useful to our team since they can't even say how they were useful to their old team.
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.
As someone without a BS in anything, I've actually found the opposite.
Yes, people who are self-taught often have gaps in our knowledge, but we tend to be *much* faster at filling those gaps. Also, the fact that we acquired all the knowledge we did without a college degree indicates that we are motivated to fill those gaps ourselves.
It is very likely that there are things we have not been exposed to, even if we match your 15 years' experience as a software engineer. However, upon exposure, I am willing to bet that we will beat you soundly at rapid acquisition and assimilation of knowledge - especially since, if you've been in the field for 15 years, your degree is over 15 years old. Which means that plenty of things which are new to me will be new to you, too.
You're absolutely right that you'll never have to compete for a job with someone that does not have a bachelor's degree. I, on the other hand, have to compete with people like you for the right to do my damn job all the time, because you're absolutely convinced that four years in a university beat four years actually in the field working on real-world problems, while voraciously consuming papers and books, and while corresponding with experts in the field - because unlike you, my tools were not handed to me by a university; I had to build them myself.
None of which translates well to a bureaucracy-approved stamp I can stick on my resume, so you're right - good on you. You'll get fast-tracked to management, where you'll continue to pretend like you know what you're doing more than I do, where you continue to ignore my explanations of why your harebrained ideas won't work, and where you'll continue to get me fired when they fail in exactly the way I warned you they would. You've certainly got it all figured out.
Except how to fucking code.
-Hentai [in vita non pacem est]
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
The problem with being self taught, having only experience, is that the experience tends to be only in what was necessary or what was interesting. Very few aspiring developers have the ambition and discipline to study and learn all the topics that one will be "forced" into studying in a formal degree program. For most aspiring developers the formal degree program will give them a broader set of knowledge and tools to build upon. The purely self taught that have such a broad set of knowledge are exceptionally rare. Most of us need someone to push us to do a little more than we think is necessary.
That said, being very good at software development is not simply a matter of having the correct broad set of knowledge to build upon. A person absolutely needs some inherent curiosity and interest in the field. To be truthful, many in college have no such curiosity/interest. They are just in college to get their "ticket punched", to meet some requirement on a HR checklist. This includes some in computer science and related programs.
Yes, people who are self-taught often have gaps in our knowledge, but we tend to be *much* faster at filling those gaps. Also, the fact that we acquired all the knowledge we did without a college degree indicates that we are motivated to fill those gaps ourselves.
Meh. Your generalizations are just as bad as someone arguing the opposite. I agree that someone who is self-taught AND motivated can be amazing -- ultimately, that's sort of what college used to be about, i.e., taking you from the high school "spoon feed you knowledge" mentality to the self-learning place where you can teach yourself what you don't yet know.
Good college grads learn to teach themselves, sometimes as a result of university training. Other people pick up the self-teaching and motivation skills on their own, and they would have done so regardless of whether they went to college or not.
The vast majority of people in the world are probably not that motivated and aren't particularly good at teaching themselves, and those sorts of people exist both in the college-degree crowd and among the people without one. The vast majority of people who don't have a college degree were also challenged intellectually to a lesser degree, and therefore they are probably somewhat less likely to have picked up those skills.
But whatever. These are meaningless generalizations. I've met people who never went to college whom I would count among the most intelligent, clear-thinking, amazing folks I've ever known. I've also met Ph.D.s who are idiots (even from prestigious universities).
One can argue the merits and drawbacks of college, but one thing I think is pretty clear: very few people have the kind of natural motivation to self-teach that you describe about yourself. If someone challenges you with tasks that require you to do so, I think you have a somewhat better chance of picking that up. It could happen on a job with the right boss or the right team; it could happen at college. Traditionally, a broad-based college education was partly about exposure to a lot of ideas, and in the process of critiquing those ideas from various fields, you'd learn how to think, how to learn knew things, and how to think intelligently about them. Nowadays, college has often become a glorified trade school for lots of students (though admittedly, it always had part of the crowd who went there just to party, it's just in the past those were just rich people's kids who had time to waste and money to spend). So it doesn't surprise me at all that lots of college grads today come unprepared with practical knowledge and what they learned in technology may be out-of-date by the time they graduate.
But that doesn't mean all higher education is crap, or that it can't help some people to learn how to think... it just depends on the school, the program, and the motivation of a student. Motivated people can often get ahead anywhere.
A lot of other people have gone over what's wrong with your argument, so I'll try not to rehash that too much.
I'll admit that my 13 years as a professional programmer (after my degree) are years that I would say are more fundamental to my general programming skill than my CS degree, but I learned a lot of things in University that are hard to come by elsewhere. I learned a lot of things that aren't about computers, and that's been really helpful.
Being good at programming isn't the only thing that makes a good programmer, it turns out. I'd way rather have 5 programmers on my team that rank as 7-8 out of 10 than 5 10/10 programmers. In my experience, those guys are too interested in being good at programming and not interested enough in making something that's going to work for everyone. I'm in the games industry, and our programmers need to be able to talk to artists and designers. You need a few of those really exemplary programmers here and there, but being broadly interested in things is way more useful than being able to pick apart a C++ compiler.
But also, I have a lot of options available to me now. I won't always work on games. I could probably jump ship to an environmental science firm without too much effort because my minor was in Earth and Atmospheric science. I speak geologist and meteorologist and even some palaeontologist. So much programming is undertaken by scientists that have no other choice but to program their own tools because the programmers of the world don't understand the problem space and it would be harder for them to learn the problem space than for the scientist to learn how to code a bit.
Lastly, I think you misunderstand computing science as a discipline. The fact that I finished my degree 13 years ago doesn't mean that much of it is out of date. The optimal rasterization of a line is still the same, algorithmically. All the graph theory that I learned is permanently correct--and permanently useful. Compiler implementations change, but compiler theory is largely the same. The stuff that you learn in computing science is actually really fundamental, which is what prevents it from going out of date. I can't stop learning without being left behind--the same as you--but I learned things up front that will always be mathematically, provably true. I'm not saying all of it is immediately useful (I think a lot of it isn't, in my field) but just because it's old doesn't mean that it's useless.
I wouldn't discount hiring a programmer without a degree. I've worked with several excellent--really, truly excellent--programmers that came to the industry without anything other than motivation. But don't tell me that just because out of my 18 years of being academically involved with computers, 4 of those were spent mostly in the classroom that I don't know how to fucking code.