Short answer: A lot of companies (read: most non-startups) have an HR department that requires a 4-yr bachelor's degree in computer science. Yes, I know people who have made it without a bachelor's degree (and even a high-school) but these people did not need it - they could code (and more importanly, self-market).
Are 4-year institutions are almost mafia-like in their influence?
"Writer Noel Weyrich compared college administrators to the mafia. "Call it La Alma Mater," he suggested. "Cultivated and well-connected, its kingpins are masters of what amounts to a high-stakes protection racket. 'Nice kid you got there,' goes the shakedown. 'What a shame if he ends up flipping burgers without a degree.' That's an offer most parents can't refuse." [http://www.incharacter.org/article.php?article=3]
I've worked at a lot of places that required a degree as a consultant. I have no college but a thick resume (read: blood, sweat and tears) which got me in the door.
Every single one of those places was stifling to work for, they were inevitably steeped in bureaucracy. To a certain degree, some of the bureaucracy was warranted for sure; but the problem is that a lot of these companies can't figure out when it is appropriate and when it is not.
That is a great collection of articles, but reading from Wikipedia is never going to teach you taste and style in programming like having Simon Peyton-Jones as a guest lecturer, or having your professor call PASCAL a steaming pile of crp ...
A computer science degree will also expose you to people much smarter than you, that serves as a useful humbling experience. This is assuming you are not the next Bill Gates (holds entire 8080 BASIC interpreter in head).
But hearing any lecturer or professor make any sort of statements about programming is never going to teach you ability and competence in programming, not like sitting in front of your computer and trying to convince it to make some cool trick that you saw or read about, or leaping into the open source community, or doing any kinds of hands-on, no-need-for-university-stuff programming, will.
Any degree at a good university will expose you to people much smarter than you. No need to study computer science for that.
Despite my strong interest and ability in programming, I did a physics degree. I don't regret that. It's given me a breadth of knowledge that I would never have achieved had I studied pure computing.
I believe that if you're a passionate programmer, you'll learn everything you need "on the job", so to speak (whether that job is paid or a hobby). However, there are many interesting things that you'll never learn unless you study them at university.
"Any degree at a good university will expose you to people much smarter..." and that is important, but I think you can also get the same benefit from working on projects with really smart people, reviewing their code, and having them review yours. Open source projects are great for training people. Google's code review process with Mondrian seens like a super example of this (from my perspective - outside, looking in.)
> Despite my strong interest and ability in programming, I did a physics degree. I don't regret that. It's given me a breadth of knowledge that I would never have achieved had I studied pure computing.
Do you feel that you could solve almost any problem (maybe not even technical-based) given enough time?
Despite the strong campaigning by my parents to declare CS, I entered the civil engineering program. It was tough to land my first real programming job, but I had trouble staying interested (and sometimes awake) during 8am structural engineering classes.
I believe undergraduate engineering is masterful at teaching problem solving. That can be applied to anything technical.
Honestly, after years of spending 3-4 hours on painful homework problems (like finding the forces internal to a wind-pushed power transmission structure), developing software can be a joy.
1st year - well-defined small problems (e.g. Physics 101).
2nd year - bigger problems, labs, basic hard engineering concepts (this is the weed-out year).
3rd year - problem-based projects. teamwork/collaboration. You're smart+lucky if you can solve/get the homework problem - even if you don't you're learning the process. Zero-force members..
4th year - Here's the situation. You define the problem. Go design a solution. Write a 100-page report. You have three months.
Exactly, I'm doing Mechanical Engineering, and I picked up a minor in CS to pump up my GPA. It seems like a much better combo than pure CS because it is much harder. (Isn't there a PG essay about staying upwind of your goal, an engineering degree is certainly upwind of CS. Not knocking on Computer Engineering here, that is one of the hardest engineering degrees for sure). As for "meeting smarter people", I don't know, I was 100% self taught when I got my job at my startup because I hadn't started CS yet, and the smartest people I have ever met are the guys in my company - much more so than professors. All are computer and electrical engineers though, we only have one CS major, and hes a self taught guy too. My roommate is a CS major who never taught himself anything - and though I like the guy, he is 2 years "ahead of me" and I program circles around him.
Do you feel that you could solve almost any problem (maybe not even technical-based) given enough time?
Without trying to appear super-arrogant, yes.
What I did learn from university, though (I went to Oxford... that probably helped.. hence a "good" university in my previous post), is that there are many people out there who can solve some of those problems a hell of a lot quicker than I can, with less effort - including things I thought myself really good at. That was a lesson in humility and worth the four years it took to learn it.
A lot of job ads which are very specific in listing degree requirements do so to fulfill legal or policy requirements to advertise a job and are really designed to exclude everyone except for one specific person the company wants to employ. I've learned this recently in the process of sponsoring an H1B employee; now I look at job ads a little differently.
We've hired programmers with degrees in CS who weren't very effective and programmers without degrees who are brilliant. A history of hacking with results seems like much better predictor of efficacy than a degree although a good CS degree improves the odds a programmer will be effective - at least, that's what I've noticed.
Well, I gained a lot from my fellow students. I doubt our current best modes of communication can match the insight I gained from the friends which I gained during my degree.
Other than that, a self-taught student may be tempted to tackle easy problems. For instance, I don't think I would have ever attempted a ray tracer in c++ if I had learnt from home.
And what about teachers? It's not like wikipedia would say, "hey, looks like you're creating a 2d game. ever thought about this mapping algorithm? it may make your code simpler?" You could get that information from the internet, but you'd have to realise you had a potential problem to do that, and without a teacher, who'd tell you that?
Most of all, a lot of this thought comes from retrospect. Of course I now know what subjects make up a good computer science degree, but before my degree I wouldn't have known the significance of compilers, for example. Nor would I have known where to /start/, and where to go after that.
It's not that it's not possible to be self-taught, but you'd need a hell of a lot of passion and motivation for the subject to shack off all the problems you'd encounter without a teacher aiding and guiding you.
> "Other than that, a self-taught student may be tempted to tackle easy problems. "
I completely disagree, and I'd say the opposite. If someone has the motivation be self-taught, then they will have the motivation to try difficult things. Though I would agree that you can't really be well self-taught unless you really have the determination for it.
All of this depends on the person. Somebody who is self-taught because they want a job in programming is going to tackle easy problems. For the same reason, and I know I'm speaking to the wrong crowd to say this, someone who is just in a hurry to slap an application together so that they can sell it will also not tackle anything really hard.
Somebody who has a problem that isn't solved by any current software will, by definition, tackle something harder than someone who is just trying to make money.
So far, I haven't ever had anyone teach me programming (will probably change next year). I just finished reading SICP (I love it!), and I've done _moderately_ difficult projects.
I've seen another article recently that claimed that self taught people will only attempt "easy" things. I just thought that was derogatory, because other than being self-taught, I didn't "resemble that remark" in any other ways; he painted a picture of someone doing some hypothetical "bad PHP website".
"It's not that it's not possible to be self-taught, but you'd need a hell of a lot of passion and motivation for the subject to shack off all the problems you'd encounter without a teacher aiding and guiding you."
Bah. Personally I find the traditional teacher/student dynamic constraining. Being dependent of a teacher to learn puts an artificial ceiling on the skills you can acquire, and if your potential is significantly higher than the actual skill of the teacher (likely) then you'll keep banging your head on it, possibly without even knowing.
When I was young I was super motivated in school and was a high-achiever but most of that talent went to waste because I was always waiting for the rest of the class. Then came the later years and I wasn't doing so good because I was used to understand everything in class quickly, I wasn't expecting to have to spend time outside class to perform.
Here's a telling story: In some advanced math class in high-school, I was really having a hard time following, I had really bad grades. Then at some point I decide to tackle the material from the beginning on my own and in a couple weeks I totally turned the situation on its head and I had great grades!
Now picture this: I dropped out of college at term 5 out of 6 and since that time I've learned at a much greater pace and developed a thirst for advanced math and CS topics because I know I encounter some problems in my projects and this knowledge would give me a good framework to solve them much, much more easily. To top it off, the things I learn are now completely relevant, meaningful and fun to me.
The formal learning environment and external motivation to learn (exams, projects) helped me learn a lot about computer science as well as many other subjects. I'd do it again, even in the internet age.
That being said, the internet has been an incredible resouce for my continuing education. It's more than just a way to look up javadocs, I've gained more breadth to my knowledge than books or classes could offer.
It's the combination of the university and internet 'courses' that have propelled my abilities like never before.
I had the opposite experience: the formal education system systematically and carefully sucked out the beauty of the subject and replaced it with boring monotonous busy work. I wish someone would've just stopped me from going to college altogether instead of having to suffer for two years before realizing that self-study was far better for me.
Obviously school works for the vast majority of people, but I wish there wasn't such a prejudice against self-directed study. Right now society doesn't even admit that self-study could possibly work, they just tell you that it's a path to guaranteed failure.
There was one significant gap in my skillset that I can directly blame on being self-taught through Wikipedia and other web resources: I didn't know how to take a textbook and systematically study from it. I was too used to jumping around or starting from some thing-to-learn and just reading the specific concepts it depends on. This works great when you're studying subjects that are well-covered by online resources or looking up reference information, but it really falls short for more advanced or esoteric topics. Over the last few months I've been consciously trying to develop the ability to study from a textbook and I've been getting better.
Amen. I remember loving math at age 12 (grade 7 here in Jamaica), and hating it up to recently. I honestly don't know how I passed my high school exams. I got the lowest grade you could pass with.
I started a CS degree at the University of Technology in Jamaica in August 2005. We had to take an aptitude test to get in, which included some math. I passed, not because I understood the math, but because I could reason things well.
I started programming (in Python) at age 14 or so, and knew I was good at it. What bothered me at Uni was that I knew somewhere that I was good at math, because I understood programming. I actually told my classmates so. We had PreCalculus in the first semester. I failed of course; I'd stopped attending classes and took the time to learn some things from scratch. I actually picked leaves and played with them till understood how number systems, basic operations, fractions and exponents work! I was working out of an American elementary school textbook. My friends thought I was crazy, but I knew, somewhere, that I was right.
During the summer after year 1, I got offered a job by a man working as technical consultant to a telecommunications startup. I went to his house the Sunday afternoon, and Monday morning I reported to work, in the only 'work clothes' I had. When the summer was up, I stayed on. The pay sucked, but I would have done ANYTHING not to go back to school. Luckily, the man who had hired me was also 'anti-school.' He knew his telecoms well; self taught. My parents, naturally, wanted me to go to school, but they didn't push me, knowing I can be quite...strong-minded.
It was at that job I first realized just how good I was. Within a few months, I was conducting interviews for the IT department. I interviewed university grads, and most of them didn't even come close. I remember asking one of them about the Nyquist Theorem (which I knew only cursorily). I swear he nearly jumped out of the chair! I was obviously younger than he, and asking advanced questions. I loved it.
What I discovered about myself at that job was that I TRULY love to learn! Most people just. dont. care. They only want to know that they pass the exams. They don't have that child-like curiosity about how things work. I didn't have a computer at the time, so I stayed at work till 11pm most nights, just reading online books, whitepapers and tutorials. I was walking lonely streets to get to the taxi stand after work, but I didn't care. I was learning. Safety second. On some nights, I'd call a cab to take me home, which cost the equivalent of $5USD. We were paid weekly-the equivalent of about $60USD. But I didn't care. I was learning, and loving it.
In the past few months, I've experienced what can best be described as a 'creative awakening' (insert moving music here). I've started writing and drawing again, and am actually starting out in graphic design. I'm listening to more classical music and operas, and listening to less rap, dancehall and reggae. I came across Lockhart's Lament, and it rang so true that I had to put it down a few times. Vindication tastes good; you can believe that.
Lockhart makes the point that mathematics is a creative endeavor like any other. I remember always wondering why the quadratic equation equaled 0. Why not 543.98? I didn't understand what exactly they were trying to accomplish. A few months ago, before my 'creative awakening,' (sounds esoteric, doesn't it) I started spending my days at the library. (I was fired from the job, a few months before the entire group of companies crashed, the CEO is now on bail, go figure). I came across a book about the history of Mathematics, from the Egyptians and Babylonians to Hero of Greece,and his postulate that all lines are equal since they have corresponding points(Google it). It then talked about the Hindus. Turns out, they have to build their altars with specific proportions, and developed quadratics as a means to that end. I was furious. Why hadn't I been taught this at 15? But I was also delighted: I'd always felt that many of those wh...
I actually empathise with both arguments. I did my undergrad study "by the book", getting good grades but never investigating beyond what was required.
Then I decided to do postgrad at the very last minute, in a fairly different field, and a whole different world opened up: suddenly I was spending ages learning about whole new branches (usually unrelated to my topic) and loving it. That period basically shaped my current career (I usually say that I did a Phd, and I wrote a thesis, and the two weren't really related).
In the middle of postgrad I started lecturing, and I (somewhat hypocritically) started getting really frustrated with students who weren't interested in anything beyond the exam, particularly as I watched the curriculum get watered down to basic vocational training.
I don't really have a point out of this, except that I believe it's still possible to get a lot out of university, but only if you consider it a place of learning instead of a place of teaching. You probably won't be taught much (at least where I am), but there's still plenty of smart people there who would love to help you past the edges of the official curriculum.
I think you went to the wrong school.
you should not have been doing boring monotonous busywork in any program at ANY college/university.
I double majored in Economics and Computer Science, and was one credit away from a math major as well. The busy work that I did was limited to a single 400 level Economics course. The course was required for business majors, and apparently business majors at SUNY Albany were unable to perform arithmetic or even perform simple substitutions into formulas without a disgusting amount of hand holding. Other than that my education was busy work free.
There's also open courseware, which goes a lot deeper into the material than Wikipedia can or would want to go. And then there's public library.
My grandfather, who was a civil engineer often made the joke of giving the abbreviation for the public library in his hometown (UPL) as the place where he got his education. And it was true, but that was post-Great Depression, circa New Deal era when a civil service exam was enough to start a real career, and a college education was not considered necessary for most occupations.
Nobody needs a Computer Science degree. But if you want to be really good, then you need to have a thorough understanding of all parts within a computer. Get a mental model of a computer from the transistor to the hardware architecture to the boot sequence to the memory models to the operating system internals to the virtual machine and garbage collector of your language du jour.
If pieces from the chain are missing you'll be programming by trial and error. And that way you'll never reach your full potential. Could you learn everything on your own? Absolutely. But without the external pressure you'll simply skip on a lot of tough topics because you don't think you need to know them. But you do.
It's really a question of whether you prefer supervised learning or unsupervised learning.
Supervised learning is one-off and expensive, unsupervised learning is cheap and widely available.
Supervised learning converges over a much shorter time frame than unsupervised learning.
Supervised learning introduces bias in the quality of the teacher signal that unsupervised learning cannot run afoul of (or take advantage of).
An interesting middle way might be active learning. It is a technique where an unsupervised learner has the ability to ask a supervisor for useful tasks to train on. In academia, sadly, this doesn't seem to happen below the PhD level.
* ...an unsupervised learner has the ability to ask a supervisor for useful tasks to train on. In academia, sadly, this doesn't seem to happen below the PhD level.*
That isn't quite true. You're describing much of my high school math and physics education: I had teachers, and I "took" the official classes (i.e. I sat in class, most of the time, and I took the exams and did much of the homework...) but my teachers (who were quite awesome) recognized that I was ahead of the class and enjoyed teaching myself, so they threw me books like PSSC Physics and What is Calculus About? and told me to have fun.
That was, however, unofficial and sort of under the radar. I expect such a style of learning to continue to rise in popularity now that the Web is here. It's just easier than ever before to run an active learning program: There's so much stuff online to steer the students toward, and even the offline stuff is easier to find -- there are book-recommendation services and blogs to help you find the best print books, and used-book services to sell them to you cheap. It really is getting to the point where I could set myself up as a "professor" right here in my home office and mentor folks over Skype as they go from one online resource to another, at big savings over paying a college for the same services.
Point taken. If I say your experience is the exception that proves the rule, though, I don't think that's too far off.
I had a similar experience until midway through high school. I was about three years ahead of my peers in math, due to the efforts of one particular instructor who encouraged me to get ahead and stay ahead. After my ninth grade, he moved to another school. About the same time, my high school ran out of courses. I ended up taking throw-aways instead of vector calculus, differential equations, combinatorics, etc. for three years.
I wonder if the push towards one-size-fits-all standardized testing has eliminated the possibility of making active learning official, at least in the public schools. Overworked teachers don't have the time to dumb it down and smart it up at the same time, whether the kids could handle it or not. There's a lot of generalizing here, sure, but I think the basic outline is true.
Even my MS seminars were more teacher-directed than self-directed. Maybe I have a knack for choosing the wrong learning situations.
But maybe other networking and cooperation forums, online and off, can also replace that function of degree programs?
If you can decompose traditional degree-granting education into its constituent parts -- true learning, certification, networking, socialization -- each may in the future be better served by new structures that take as a given the computer and communications technology we have now.
I hate school. With a passion. I find I learn best sitting quietly alone, thinking, reading or experimenting. This applies not just to Computer Science, but most subjects.
Between the Internet, amazon and a good library, an above-average intelligence person can teach themselves many subjects, including CS. The point about not knowing the order in which to learn is invalid: Easily solved in <5 minutes by going to a few university websites and trying to establish a common denominator. For the really gifted ( and I should think enough most who are motivated to learn CS autodidactically are), they may probably discover new things by simply playing around, noticing interesting phenomena and use our famous OCD tendencies to add to the field. That's how most scientific discoveries are made. Ramanujan, the great Indian mathematician, was not formally trained, yet made important contributions.
I'm also reminded of the anecdote where a student who had not attended class got a copy of the homework from a colleague, not knowing that the professor had told the class the problems were unsolvable. OF course, he solved them; the other students had a mental block. But to be honest, if you learn things from books, they will consider certain problems 'unsolvable' as well.
Ultimately, it depends on your IQ, aim and financial situation. If you've made up your mind, like me to be an entrepreneur, you don't have to care about a degree. In fact, I would like to make a ton of money while young, so I can spend lots of time later delving deep into both the sciences and humanities (in many ways an artificial distinction; Google "Lockhart's Lament").
If you plan to work for others, its safe, but not absolutely necessary, like anything else, it depends. In this case, the employer in general and the specific interviewer. If s(he) has had many good experiences with non-degreed employees, your chances are better.
From a purely acquisition of knowledge standpoint, yes, you can teach yourself CS. If there's something you're not sure about, I'm absolutely sure that you can develop a good relationship with a good professor local to you or even online. My gut feeling is that good professors wouldn't mind, they love smart students.
Believe it or not, formal education and self-study aren't mutually exclusive... you can do a combination of both and benefit from the value of each style of learning.
One of the good things about most tertiary institutions is that you're not obliged to show up to any of the lectures, so if your preferred learning style is self-study, then you can skip the lectures and just learn the material by yourself. But you can still take advantage of aspects of formal education that are valuable for autodidacts, whether it's clear course structures, access to good professors, hanging out with smart peers (ie. learning by osmosis), access to expensive journal subscriptions, deadlines to motivate your learning, etc.
Anyway I wouldn't write off school so quickly. A really motivated autodidact can use school to their advantage, instead of lamenting its obvious flaws. Study the required material, but then learn beyond the basic necessities of the course, study whatever interests you. Don't be too concerned about grades and don't bother studying just for the test. If you're learning for the love of it and for a true, deep understanding of the subject, then let me assure you that you'll have no problem passing.
"Teenagers now are useless, except as cheap labor in industries like fast food, which evolved to exploit precisely this fact. In almost any other kind of work, they'd be a net loss. But they're also too young to be left unsupervised. Someone has to watch over them, and the most efficient way to do this is to collect them together in one place. Then a few adults can watch all of them." -- [http://www.paulgraham.com/nerds.html]
So, having done a degree to get a job in computing, only to find that it's not enough, I wonder why I wasted 3 years when all I came away with was good Scheme experience. Now a self-employed Lisp programmer.
learn as much as you can and validate it with a degree,
learn some more and validate it with a masters
learn a little bit more and validate it with a PhD.
If you are self-learning, then wikipedia is not a good way to do learn computer science. Its way better to actually read a good book, think a great deal and read/write code when appropriate. Computer science is not history where you learn just by reading. Thinking and problem solving are very critical too.
39 comments
[ 3.4 ms ] story [ 89.7 ms ] threadAre 4-year institutions are almost mafia-like in their influence?
"Writer Noel Weyrich compared college administrators to the mafia. "Call it La Alma Mater," he suggested. "Cultivated and well-connected, its kingpins are masters of what amounts to a high-stakes protection racket. 'Nice kid you got there,' goes the shakedown. 'What a shame if he ends up flipping burgers without a degree.' That's an offer most parents can't refuse." [http://www.incharacter.org/article.php?article=3]
Every single one of those places was stifling to work for, they were inevitably steeped in bureaucracy. To a certain degree, some of the bureaucracy was warranted for sure; but the problem is that a lot of these companies can't figure out when it is appropriate and when it is not.
A computer science degree will also expose you to people much smarter than you, that serves as a useful humbling experience. This is assuming you are not the next Bill Gates (holds entire 8080 BASIC interpreter in head).
But hearing any lecturer or professor make any sort of statements about programming is never going to teach you ability and competence in programming, not like sitting in front of your computer and trying to convince it to make some cool trick that you saw or read about, or leaping into the open source community, or doing any kinds of hands-on, no-need-for-university-stuff programming, will.
Any degree at a good university will expose you to people much smarter than you. No need to study computer science for that.
Despite my strong interest and ability in programming, I did a physics degree. I don't regret that. It's given me a breadth of knowledge that I would never have achieved had I studied pure computing.
I believe that if you're a passionate programmer, you'll learn everything you need "on the job", so to speak (whether that job is paid or a hobby). However, there are many interesting things that you'll never learn unless you study them at university.
Do you feel that you could solve almost any problem (maybe not even technical-based) given enough time?
Despite the strong campaigning by my parents to declare CS, I entered the civil engineering program. It was tough to land my first real programming job, but I had trouble staying interested (and sometimes awake) during 8am structural engineering classes.
I believe undergraduate engineering is masterful at teaching problem solving. That can be applied to anything technical.
Honestly, after years of spending 3-4 hours on painful homework problems (like finding the forces internal to a wind-pushed power transmission structure), developing software can be a joy.
1st year - well-defined small problems (e.g. Physics 101).
2nd year - bigger problems, labs, basic hard engineering concepts (this is the weed-out year).
3rd year - problem-based projects. teamwork/collaboration. You're smart+lucky if you can solve/get the homework problem - even if you don't you're learning the process. Zero-force members..
4th year - Here's the situation. You define the problem. Go design a solution. Write a 100-page report. You have three months.
Without trying to appear super-arrogant, yes.
What I did learn from university, though (I went to Oxford... that probably helped.. hence a "good" university in my previous post), is that there are many people out there who can solve some of those problems a hell of a lot quicker than I can, with less effort - including things I thought myself really good at. That was a lesson in humility and worth the four years it took to learn it.
Having the information available is not a substitute for the things one does to get a degree.
Hell, I have a degree and regularly read wikipedia articles on all sorts of subjects, including computer science. Does that invalidate my degree?
We've hired programmers with degrees in CS who weren't very effective and programmers without degrees who are brilliant. A history of hacking with results seems like much better predictor of efficacy than a degree although a good CS degree improves the odds a programmer will be effective - at least, that's what I've noticed.
Other than that, a self-taught student may be tempted to tackle easy problems. For instance, I don't think I would have ever attempted a ray tracer in c++ if I had learnt from home.
And what about teachers? It's not like wikipedia would say, "hey, looks like you're creating a 2d game. ever thought about this mapping algorithm? it may make your code simpler?" You could get that information from the internet, but you'd have to realise you had a potential problem to do that, and without a teacher, who'd tell you that?
Most of all, a lot of this thought comes from retrospect. Of course I now know what subjects make up a good computer science degree, but before my degree I wouldn't have known the significance of compilers, for example. Nor would I have known where to /start/, and where to go after that.
It's not that it's not possible to be self-taught, but you'd need a hell of a lot of passion and motivation for the subject to shack off all the problems you'd encounter without a teacher aiding and guiding you.
I completely disagree, and I'd say the opposite. If someone has the motivation be self-taught, then they will have the motivation to try difficult things. Though I would agree that you can't really be well self-taught unless you really have the determination for it.
Somebody who has a problem that isn't solved by any current software will, by definition, tackle something harder than someone who is just trying to make money.
I've seen another article recently that claimed that self taught people will only attempt "easy" things. I just thought that was derogatory, because other than being self-taught, I didn't "resemble that remark" in any other ways; he painted a picture of someone doing some hypothetical "bad PHP website".
Bah. Personally I find the traditional teacher/student dynamic constraining. Being dependent of a teacher to learn puts an artificial ceiling on the skills you can acquire, and if your potential is significantly higher than the actual skill of the teacher (likely) then you'll keep banging your head on it, possibly without even knowing.
When I was young I was super motivated in school and was a high-achiever but most of that talent went to waste because I was always waiting for the rest of the class. Then came the later years and I wasn't doing so good because I was used to understand everything in class quickly, I wasn't expecting to have to spend time outside class to perform.
Here's a telling story: In some advanced math class in high-school, I was really having a hard time following, I had really bad grades. Then at some point I decide to tackle the material from the beginning on my own and in a couple weeks I totally turned the situation on its head and I had great grades!
Now picture this: I dropped out of college at term 5 out of 6 and since that time I've learned at a much greater pace and developed a thirst for advanced math and CS topics because I know I encounter some problems in my projects and this knowledge would give me a good framework to solve them much, much more easily. To top it off, the things I learn are now completely relevant, meaningful and fun to me.
That being said, the internet has been an incredible resouce for my continuing education. It's more than just a way to look up javadocs, I've gained more breadth to my knowledge than books or classes could offer.
It's the combination of the university and internet 'courses' that have propelled my abilities like never before.
Obviously school works for the vast majority of people, but I wish there wasn't such a prejudice against self-directed study. Right now society doesn't even admit that self-study could possibly work, they just tell you that it's a path to guaranteed failure.
There was one significant gap in my skillset that I can directly blame on being self-taught through Wikipedia and other web resources: I didn't know how to take a textbook and systematically study from it. I was too used to jumping around or starting from some thing-to-learn and just reading the specific concepts it depends on. This works great when you're studying subjects that are well-covered by online resources or looking up reference information, but it really falls short for more advanced or esoteric topics. Over the last few months I've been consciously trying to develop the ability to study from a textbook and I've been getting better.
That said, I am going to university.
I started a CS degree at the University of Technology in Jamaica in August 2005. We had to take an aptitude test to get in, which included some math. I passed, not because I understood the math, but because I could reason things well.
I started programming (in Python) at age 14 or so, and knew I was good at it. What bothered me at Uni was that I knew somewhere that I was good at math, because I understood programming. I actually told my classmates so. We had PreCalculus in the first semester. I failed of course; I'd stopped attending classes and took the time to learn some things from scratch. I actually picked leaves and played with them till understood how number systems, basic operations, fractions and exponents work! I was working out of an American elementary school textbook. My friends thought I was crazy, but I knew, somewhere, that I was right.
During the summer after year 1, I got offered a job by a man working as technical consultant to a telecommunications startup. I went to his house the Sunday afternoon, and Monday morning I reported to work, in the only 'work clothes' I had. When the summer was up, I stayed on. The pay sucked, but I would have done ANYTHING not to go back to school. Luckily, the man who had hired me was also 'anti-school.' He knew his telecoms well; self taught. My parents, naturally, wanted me to go to school, but they didn't push me, knowing I can be quite...strong-minded.
It was at that job I first realized just how good I was. Within a few months, I was conducting interviews for the IT department. I interviewed university grads, and most of them didn't even come close. I remember asking one of them about the Nyquist Theorem (which I knew only cursorily). I swear he nearly jumped out of the chair! I was obviously younger than he, and asking advanced questions. I loved it.
What I discovered about myself at that job was that I TRULY love to learn! Most people just. dont. care. They only want to know that they pass the exams. They don't have that child-like curiosity about how things work. I didn't have a computer at the time, so I stayed at work till 11pm most nights, just reading online books, whitepapers and tutorials. I was walking lonely streets to get to the taxi stand after work, but I didn't care. I was learning. Safety second. On some nights, I'd call a cab to take me home, which cost the equivalent of $5USD. We were paid weekly-the equivalent of about $60USD. But I didn't care. I was learning, and loving it.
In the past few months, I've experienced what can best be described as a 'creative awakening' (insert moving music here). I've started writing and drawing again, and am actually starting out in graphic design. I'm listening to more classical music and operas, and listening to less rap, dancehall and reggae. I came across Lockhart's Lament, and it rang so true that I had to put it down a few times. Vindication tastes good; you can believe that.
Lockhart makes the point that mathematics is a creative endeavor like any other. I remember always wondering why the quadratic equation equaled 0. Why not 543.98? I didn't understand what exactly they were trying to accomplish. A few months ago, before my 'creative awakening,' (sounds esoteric, doesn't it) I started spending my days at the library. (I was fired from the job, a few months before the entire group of companies crashed, the CEO is now on bail, go figure). I came across a book about the history of Mathematics, from the Egyptians and Babylonians to Hero of Greece,and his postulate that all lines are equal since they have corresponding points(Google it). It then talked about the Hindus. Turns out, they have to build their altars with specific proportions, and developed quadratics as a means to that end. I was furious. Why hadn't I been taught this at 15? But I was also delighted: I'd always felt that many of those wh...
Then I decided to do postgrad at the very last minute, in a fairly different field, and a whole different world opened up: suddenly I was spending ages learning about whole new branches (usually unrelated to my topic) and loving it. That period basically shaped my current career (I usually say that I did a Phd, and I wrote a thesis, and the two weren't really related).
In the middle of postgrad I started lecturing, and I (somewhat hypocritically) started getting really frustrated with students who weren't interested in anything beyond the exam, particularly as I watched the curriculum get watered down to basic vocational training.
I don't really have a point out of this, except that I believe it's still possible to get a lot out of university, but only if you consider it a place of learning instead of a place of teaching. You probably won't be taught much (at least where I am), but there's still plenty of smart people there who would love to help you past the edges of the official curriculum.
My grandfather, who was a civil engineer often made the joke of giving the abbreviation for the public library in his hometown (UPL) as the place where he got his education. And it was true, but that was post-Great Depression, circa New Deal era when a civil service exam was enough to start a real career, and a college education was not considered necessary for most occupations.
If pieces from the chain are missing you'll be programming by trial and error. And that way you'll never reach your full potential. Could you learn everything on your own? Absolutely. But without the external pressure you'll simply skip on a lot of tough topics because you don't think you need to know them. But you do.
Supervised learning is one-off and expensive, unsupervised learning is cheap and widely available.
Supervised learning converges over a much shorter time frame than unsupervised learning.
Supervised learning introduces bias in the quality of the teacher signal that unsupervised learning cannot run afoul of (or take advantage of).
An interesting middle way might be active learning. It is a technique where an unsupervised learner has the ability to ask a supervisor for useful tasks to train on. In academia, sadly, this doesn't seem to happen below the PhD level.
http://en.wikipedia.org/wiki/Supervised_learning http://en.wikipedia.org/wiki/Unsupervised_learning
That isn't quite true. You're describing much of my high school math and physics education: I had teachers, and I "took" the official classes (i.e. I sat in class, most of the time, and I took the exams and did much of the homework...) but my teachers (who were quite awesome) recognized that I was ahead of the class and enjoyed teaching myself, so they threw me books like PSSC Physics and What is Calculus About? and told me to have fun.
That was, however, unofficial and sort of under the radar. I expect such a style of learning to continue to rise in popularity now that the Web is here. It's just easier than ever before to run an active learning program: There's so much stuff online to steer the students toward, and even the offline stuff is easier to find -- there are book-recommendation services and blogs to help you find the best print books, and used-book services to sell them to you cheap. It really is getting to the point where I could set myself up as a "professor" right here in my home office and mentor folks over Skype as they go from one online resource to another, at big savings over paying a college for the same services.
I had a similar experience until midway through high school. I was about three years ahead of my peers in math, due to the efforts of one particular instructor who encouraged me to get ahead and stay ahead. After my ninth grade, he moved to another school. About the same time, my high school ran out of courses. I ended up taking throw-aways instead of vector calculus, differential equations, combinatorics, etc. for three years.
I wonder if the push towards one-size-fits-all standardized testing has eliminated the possibility of making active learning official, at least in the public schools. Overworked teachers don't have the time to dumb it down and smart it up at the same time, whether the kids could handle it or not. There's a lot of generalizing here, sure, but I think the basic outline is true.
Even my MS seminars were more teacher-directed than self-directed. Maybe I have a knack for choosing the wrong learning situations.
Many a friendship/company/network are born from these relationships and often are beneficial to you throughout life.
No matter how good they are, Wikipedia et al cannot offer this.
If you can decompose traditional degree-granting education into its constituent parts -- true learning, certification, networking, socialization -- each may in the future be better served by new structures that take as a given the computer and communications technology we have now.
Between the Internet, amazon and a good library, an above-average intelligence person can teach themselves many subjects, including CS. The point about not knowing the order in which to learn is invalid: Easily solved in <5 minutes by going to a few university websites and trying to establish a common denominator. For the really gifted ( and I should think enough most who are motivated to learn CS autodidactically are), they may probably discover new things by simply playing around, noticing interesting phenomena and use our famous OCD tendencies to add to the field. That's how most scientific discoveries are made. Ramanujan, the great Indian mathematician, was not formally trained, yet made important contributions.
I'm also reminded of the anecdote where a student who had not attended class got a copy of the homework from a colleague, not knowing that the professor had told the class the problems were unsolvable. OF course, he solved them; the other students had a mental block. But to be honest, if you learn things from books, they will consider certain problems 'unsolvable' as well.
Ultimately, it depends on your IQ, aim and financial situation. If you've made up your mind, like me to be an entrepreneur, you don't have to care about a degree. In fact, I would like to make a ton of money while young, so I can spend lots of time later delving deep into both the sciences and humanities (in many ways an artificial distinction; Google "Lockhart's Lament").
If you plan to work for others, its safe, but not absolutely necessary, like anything else, it depends. In this case, the employer in general and the specific interviewer. If s(he) has had many good experiences with non-degreed employees, your chances are better.
From a purely acquisition of knowledge standpoint, yes, you can teach yourself CS. If there's something you're not sure about, I'm absolutely sure that you can develop a good relationship with a good professor local to you or even online. My gut feeling is that good professors wouldn't mind, they love smart students.
Ahhh, my friends, the journey of self-discovery!
One of the good things about most tertiary institutions is that you're not obliged to show up to any of the lectures, so if your preferred learning style is self-study, then you can skip the lectures and just learn the material by yourself. But you can still take advantage of aspects of formal education that are valuable for autodidacts, whether it's clear course structures, access to good professors, hanging out with smart peers (ie. learning by osmosis), access to expensive journal subscriptions, deadlines to motivate your learning, etc.
Anyway I wouldn't write off school so quickly. A really motivated autodidact can use school to their advantage, instead of lamenting its obvious flaws. Study the required material, but then learn beyond the basic necessities of the course, study whatever interests you. Don't be too concerned about grades and don't bother studying just for the test. If you're learning for the love of it and for a true, deep understanding of the subject, then let me assure you that you'll have no problem passing.