A hacker's guide to college
dave.is
dave.is
This is also true of my close friends from school (housemates my junior and senior year) who work at Apple on the jscore Javascript engine, at Pure Storage[1] on hardcore storage stuff, and at SpaceX on control systems.
Maybe the average coder doesn't really need a college degree, but if you want to be a badass and get there as quickly as possible, four years at a top CS University is about the quickest shortcut you can take[2].
[1] http://www.storagereview.com/pure_storage_comes_out_allflash...
[2] You still have to go WAY above and beyond, but the exposure to people in that realm is invaluable, and it's hard to get that exposure outside of these places.
I have an nontraditional CS degree (DigiPen). I learned a lot of math in school, and programmed a ton. There was emphasis on data structures / algorithms, but not as much as you'd find in a traditional CS degree.
Part of my job is to hack around on JSCore in a Webkit port. I do this without much problem. I wouldn't say I understand the whole thing, but if I needed to I could.
In my experience, you learn as you go. As long as you're good at problem solving and using Google/Reading/Asking People Who Know, you'll figure it out. With or without a traditional CS degree.
There's nothing magical about JSCore, or hardcore storage, or spaceship control systems. It's just domain specific knowledge that you pick up if you spend time solving those kinds of problems.
The trouble is once Google is no longer helpful, finding People Who Know can get tough.
The biggest advantage a traditional CS path has, imo, is the exposure to university resources, bot social and physical, though predominantly physical. As you noted, if you're doing some massive distributed thing, it helps to have access to a lot of decent computers. However, I fully believe that a determined independent student can gain the same knowledge on a faster schedule than he would if he followed a degree program at a university.
The major draw of a University education is that it forces you to focus and do the work. If you are driven and do not need the grade excuse to dig into a subject then you do not need to attend a University.
This becomes ever more apparent past the undergraduate level when you enter the workforce or a graduate program. You will end up going to classes or learning about material that interests you or is relevant to your work and you will do this without concern as to whether or not you get a grade at the end because all you care about is learning something you are passionate about.
I'm doing 6.001 SICP course right now, the video lectures of Sussman and the other guy was mind blowing to me and most of it went over my head. I didn't quit though, found another resource for it in HTDP and am now going through it. The first part was easy, I could go through a chapter in 1 hour and do all the exercise. I'm now on the second part of the book and it's not so easy anymore, one chapter is now taking 3-5 hours to complete. But if I look at the big picture, it seems I'm par for the course as one is suppose to spend 10 hours a week per class.
I wound up dropping out after 3 years. I don't regret it because I've kept up the self-learning (being an ACM member, reading lots of papers on a continual basis, not budgeting books on CS and engineering).
I think you can afford to drop out of college, but you cannot afford to drop out of learning. I've seen too many senior engineers wind up sidelined because they concentrated on just what they were good at in their job.
I don't mean be a butterfly, or attempt to learn every month's new cool stuff. But get exposure to lots of levels of many good systems. Read the Unix source code. Read a compiler or two. Learn Prolog or Haskell. Write a network stack. Learn about database implementation, and Self, and modern graphics, and build systems. Learn everything you can from the stuff around you that is of good quality.
I'm earning more money than I would have believed possible, at a job I think I would do for free, if I could. It's a privilege to work with really good people.
However, most of us here — including the OP, it seems — are interested in higher level problems. Not those of writing compilers or optimizing some arcane algorithm, but those involving successfully running a startup. Academia is far behind on the later, and as a student myself, I share the sentiment of the OP.
I've been doing this (programming) in earnest for a little over a year. Already I want to broaden my horizons beyond web development. It's getting stale, and frankly a little repetitive. Granted I'm not working on Big Problems, but that's the point, right? It doesn't take a CS degree to put together a web-based startup with a great idea, some market research, sexy CSS and some funding.
However, I'm already bumping up against the limits of what I know. I'm a ... let's say, voracious and enthusiastic autodidact. I don't think there's anything about developing for the web I either couldn't handle right now or learn rapidly. I'm talking UX, backends, servers, etc. You know, until the actually fucking difficult problems come along that aren't answered all over StackOverflow. The problems the people in IRC channels don't have a macro for answering. The problems that aren't well-documented, or, better yet, tread new ground.
On the web it seems like treading new ground is pretty tough. There are a lot of uber smart people who started a lot younger than me who had the ideas and thoughts and problems I'm having, but 15-20 years before I had them. Web development is a solved thing, it seems like. That doesn't interest me.
It seems to me that I can't do anything new if I stick to the web-startup-centric (or just web business) world. And I am not bright enough to work on new and/or unsolved problems right now. I need education, and I need the fuckin' good stuff. Discrete math, data structures, algorithms, linear algebra (hell, I don't even know how linear algebra applies to CS, but I've read a million times it's central), the stuff I can't figure out in an hour or a day or a weekend. That's why I'm going to school.
So yes, school might be boring the fuck out of you right now, but in a year or 5 or 10 you're going to want to do more, different, arguably better (more meaningful?) things than iterating a web site.
Plus, I don't know about you but I don't want to be the guy who really really really knows Python|Ruby|JavaScript (plus HTML and CSS!!!) and gets really emotional about why my high-level languages of choice are awesome or better or whatever than the others. I've seen it already among my co-workers and fellow students and tbh it bores the piss out of me. I want to know WHY Cython is slow at X while Ruby is great at Y, or why the JVM's disadvantages exist. In short, I want to be prepared so that when the day comes that I get the chance to ask a brilliant guy (or girl!) like Rich Hickey a question, I ask an awesome question.
I haven't gone back and read this over, and I feel like I sound way too grizzled for my experience level. Sorry in advance if I sound smug or condescending. Just trust me when I say it was unintentional. I fully accept the fact that I am 100% full-blown stupid and know nothing, in practical terms. And frankly I don't think I personally would ever rise to anything other than the mediocre, run-of-the-mill peon I am now on my own. That's why I'm studying the science of computing.
Don't get all frustrated about school. Trust me, part of me wants to work full-time and get the money rolling in and so forth. But shortcuts are almost always the long way around.
I was in the exact same boat as you when I started out. After a few years of web development, I was getting closer to a sinking suspicion that I was nearing the end of the rope, so to speak...
And then the rabbit hole opened up to me. Trust me when I say: the web development stack is very, very deceptive. It would take at least a decade, if not more to fully master every aspect of it. And it hasn't even been around that long (comparatively), which makes finding true experts for our "hard problems" quite difficult.
The knowledge that I have to go into work knowing inside and out every day? Domain registration, sysops, provisioning a server from scratch, chef/puppet for configuration management, bash scripting, server security, firewall rules, DDOS prevention, nginx/apache hosting software usage and configurations, the dozen and a half different fucking flavors of wsgi servers and how to properly reverse proxy into them, redundant load balancing with HAProxy and heartbeat, postgres/mysql/nosql database software usage and configuration, database sharding and connection pooling, master/slave and master/master setup advantages and disadvantages, proper schema creation/indexing/querying efficiently, proper static and media file headers/caching/expiration, python/ruby, django/rails, process management ala supervisord/runit/upstart/initd, semantic HTML, flexible CSS through a separate tool like SASS/LESS, javascript and what used to be the giant clusterfuck of front-end engineering, ajax, comet/long-polling/buzzwordsgalore, getting SSL to properly work with all of the above, Solr search engine usage/configuration, caching with varnish and memcached, queuing all over the place with rabbitmq, lightweight key/value stats with redis, proper version control, continuous integration, project management, one-click builds and deploys with fabric/capistrano, and the 1001 insecurities built in to naive web development and how to properly protect against them. The list goes on and on and on. I'm sure I'm forgetting to mention a lot more.
Now I know how silly I was back then to believe that I was "done" with web development after a short amount of time setting up toy websites. I still consider myself a novice, and I haven't even scratched the surface of what it takes to make a web site/service scale to massive amounts of traffic.
The parent comment from a Facebook dev is somewhat spot-on though: for the hard Computer Science problems, you have to get into the low-end systems level programming. On the complete opposite end of the spectrum, I deal with problems at the macro level. Computer Science, while extremely helpful in some cases, in no way, shape, or form prepared me for the bottomless pit of knowledge required for modern web development.
To each their own, but both sides are deluding themselves if they believe that they somehow have the "tougher job" when it comes to programming. The only difference is that a CS degree better prepares you for one over the other, due to the nature of the work involved.
That's kind of my point. This stuff isn't hard and oftentimes the things you mentioned are the big obvious solution, because a million people have done it before and blogged about it. That's not to say it isn't really cool. ad hoc multiprocessing with rabbit (or whatever) & celery is awesome. Sass is neat, etc., etc. But by and large they're solved problems. That doesn't make them unworthy of anyone's time, or stupid or dumb or whatever. I didn't say the tech stack is shallow; I said the problems you try to solve on the web are solved by and large, except at the edges where companies like Twitter, Disqus, etc., are doing new things to scale.
There are people out there who collect spoons. They have an enormous wealth of knowledge about all kinds of spoons. There is practically a bottomless pit of knowledge about spoons. Their history, origins, etc. That doesn't make it interesting to everyone, necessarily.
But when you work with any of these fields at length, new and largely unsolved problems crop up. That's not unique to people working on cache systems. Whenever you're in a field that runs into scaling/performance issues (which is all of them), you run into hard problems.
If you were to do a 180 and go into a job building database engines instead of web sites, guess what? Most of the stuff you deal with has been blogged about, answered on StackOverflow, and is generally a solved problem. Where does it break down into tough programming? Making it perform bleeding fast. Same goes for web development, and games, and so on.
It might _seem_ like web development is more trivial than the rest, but that's just a common misconception.
Does that include some of the more modern browser frameworks like Cappuccino [1]?
I mention Cappuccino specifically because it is almost identical to Cocoa. Once you know Cappuccino, you know how to build native Mac apps; and are only a stone's throw away from developing iOS apps too.
From there you have a whole slew of new technologies to explore.
Native development opens you to a whole new world of technologies. Having nearly direct access to the hardware means you can do a lot more than the browser sandbox allows. Like, I am currently playing around with computer vision to do some pretty neat things with video cameras. Something that is difficult to nearly impossible in a web browser.
I'm not sure what exactly you want to do, but the possibilities are only limited by your imagination.
- "I know many great programmers who didn’t study Computer Science and some who didn’t go to college at all": I know far more great programmers who did study Computer Science. :)
I'd say undergrad is more about learning how to learn and the discipline required. "Take only classes you're interested in" may be very counterproductive to that, depending on your interests.
In the end, it depends on what kind of "hacker" you want to be. If "hacking" together WordPress blogs with a bunch of plugins is your cup of tea, you're probably better off not even having a Highschool diploma. If you want to build a graphics engine, a hugely scaleable system, or the next generation JIT programming language, you'll probably need a solid Computer Science education (whether you acquire it self-taught or otherwise).
Consider Harvard, MIT's, and NU's endowments. I attend Northeastern, where the CS college is excellent, particularly the opportunities to do research with programming language rockstars like Matthias Felleisen (The Little Schemer) and Olin Shivers (best known for his SCSH acknowledgements page).
The educational caliber of a school doesn't necessarily translate to deep pockets.
Massachusetts Institute of Technology | $7.982 billion (US dollars) Harvard University | $25.66 billion (US dollars) Northeastern University | $486.9 million (US dollars) (2009 estimates)
Harvard has 52 times more money than NU.
http://www.wolframalpha.com/input/?i=endowment+of+MIT%2C+Har...
edit: I keep expecting HN comments to turn _foo_ into italics.
The cost of attendance for all of Northeastern's undergraduate students for one year is 137% of its endowment, while for Harvard, it's cost of attendance for all of its undergraduate students for one year is, rounding up, 2% of its endowment [1].
It's completely unfeasible for NU to give out free tuition, they'd be in the whole for 100s of millions of dollars. Harvard, on the other hand, could take 2% of its endowment to pay for its students and still have 9% [2] of growth (that's nearly 2.5 billion dollars) to spend. Even if we assume the dismal 5 year average return (which includes 2008-2009's economic shitfest) Harvard would still have 3% or about 700 million dollars of growth to spend (which is to say, their growth is equivalent to Northeastern's endowment).
I could not find any figure on the amount of money which disappears into Harvard Medical school, but if you could dig up those statistics, then we'd be able to see what sort of growth Harvard's endowment would need to maintain.
That said, Northeastern's endowment is hopelessly small, while, with Harvard's endowment, it seems feasible to pay for undergrads, unless Harvard Med's net losses are more than 2.5 billion dollars (or, more reasonably 1 billion dollars).
[1] http://www.wolframalpha.com/input/?i=(harvard+tuition+*+harv...
[2] http://cdn.wds.harvard.edu/hmc/2010_endowment_report_10_15_2...
edit: add "137% of endowment" to 2nd P, remove obviously "It's obviously completely" from 3rd P, note that NU's endowment is about equal to Harvard's growth over a really bad five years, and formatting
Saying that some 1% of kids can get an affordable education at top schools is really quite irrelevant.
If you fall in the dreaded "middle-ground" for financial aid, your options for an affordable education are somewhat more limited, but nonetheless existent.
A rough estimate for the United States could be that ~30 states have good to excellent public universities.
The group that seems to be in the toughest spot are the students from states without excellent public universities and in a bad financial position for aid or grant money.
If you can't get into any of the private schools that will satisfy all of your need, and you're not willing to make up the difference on debt, there are many excellent public schools, (Berkeley, UCLA, UMCP, Urbana Champaign, the list goes on), none of which have very high tuition.
Most of the great hackers I know have been hacking since they were kids. This doesn't mean studying CS didn't add anything, just that studying CS alone won't make you a great hacker. Just a Computer Scientist.
Whereas being a "hacker" has very little overlap with either programming or Computer Science. You can be a "hacker" in any number of disciplines.
If you want to be a great Computer Scientist, learn Computer Science but you'll also most likely have to learn some programming.
If you want to be a great programmer, do a lot of programming but you'll also most likely have to learn computer science.
If you want to be a great hacker, figure out what that means to you.
I believe college is about opening your mind and adquiring a framework for your life. "Learning to learn" is possibly the best description.
They teach you _their way_ of solving problems, and their way is the only way that exists for them. I found this particularly disturbing.
I don't know what year you are attending, but third year left me with a bitter feeling of lost time, that I had to recoup by myself learning outside the uni.
College isn't a place to learn how to do your work. This you will need to choose and learn on your own, since there is a plenty of options.
College is a place to you see how life works, to see all your options.
Browsing some Canadian universities, they don't seem all that much cheaper than US State Schools. They might be cheaper on average adjusted for quality, but that's a really hard thing to measure. For example SUNY Binghamton tuition and fees total $7,216 for in-state residents. That's cheaper than University of Toronto ($10,903). And many students start with 2 years of community college which is even cheaper and avoids some of the other big expenses (like room and board)
There are a lot of ridiculously expensive school in the US, but there are also a lot of schools in the US, period.
Compare this to Stanford, where your base tuition over 4 years is expected to surpass $150K.
Why compare it to Stanford? Stanford is an international private university. University of Toronto is a public university, like SUNY at Binghamton. SUNY Binghamton is cheaper.
What I mean to say is: Compare the costs of attending the best Computer Science schools in Canada to the best Computer Science schools in the United States.
Or even compare international adjacent ranking schools. Here's a ranking list I found, you're welcome to find another: http://universityreport.net/world-university-rankings-2011-c...
The mentality comes from a few places:
1. Discussion of US Private Universities like Harvard, Yale, MIT, Cornell, and Stanford, many of which have international reputations and attract students from all over the world, or the elite Liberal Arts teaching colleges like Williams, Amherst, Colby, Hamilton, and Colgate which attract the wealthiest Americans.
2. The real cost of college, in general, in terms of where the money goes (salaries, technology, infrastructure, etc.) rather than the sticker price, which may be subsidized.
3. People who rule out state schools for spurious reasons, as if failing to go to Stanford or CMU somehow means that you might as well not bother at all. (And many other reasons, high school kids are heavily marketed by universities and the kids often make the decisions themselves without thinking much about the finances.)
(I'm a grad of another Ontario public university.)
Yes, there are a lot of ridiculously expensive schools in the US, but not all schools are expensive and there are a lot of places where you can learn about computing fundamentals, algorithms, data structures, languages, operating systems, architecture, database theory and networks.
Not to mention the time-value of money.
(Sorry for the nit-picking, but in an conversation where not going to university is accepted as a valid option, I feel it's important to measure the costs correctly.)
I also think that without college, I would be at best a mediocre programmer. I never would have been pushed to the limits that I was in school. I never would get a job to push me to those limits without proving myself first.
TL;DR If you're a CS undergrad thinking of dropping out, give your math department a chance.
Agree that Proofs, logical thinking, creative thinking are all things that can be learned in a Math degree. Those skills are what I use the most at work.
[NB I am Scottish - but this strikes me as deeply unfair.]
As I said, I pretty much followed Dave's advice on course selection, not because I didn't think CS was necessary, but because I didn't yet know I wanted to do development. There are some things I feel I missed (like learning how a computer actually works), but on the whole the most useful programming skills I've gained are ones I've learned on the job or hacking on my own projects in the middle of the night.
College is not solely about the raw skills used in your trade. It is also about exposure to several topics intended to round out the character of an individual.
If your good at hacking, maybe you could skip college entirely. But your also increasing your chances of being profoundly naive in life.
I had an enlightenment about a year ago and realized that being well-rounded is supremely important. As a citizen of the world I ought to understand more than the basics of economics, philosophy, biology, art, history, music, etc. On one hand, it allows you to appreciate all the hard work that other people do in these subjects. On the other hand, this knowledge helps you make educated decisions when your democracy presents them to you. It's not stupidity that hurts us as a society, its lack of knowledge. An easy way to get knowledge is at a University.
Personal enlightenment and politics aside, conversing with well rounded people is more satisfying for both parties because a well-rounded individual often can offer a more sophisticated and interesting opinion than someone with little background and little ability to make connections between disparate fields. Alan Kay commented on combining orthogonal knowledge in his OOPSLA keynote[1].
[1] http://video.google.com/videoplay?docid=-2950949730059754521
I started as a freshman this week at 34 years old. It's only a community college but after 30 graded credit hours most universities will disregard my high school transcript and grant admission.
It's never too late to go back. Especially if you're single and have an understanding employer.
Learning to perform a technical skill is far more achievable on ones own than discussion, communication, and analysis of, say, history or philosophy, which is most easily practiced in the company of others performing the same task.
We do coding tests of course but that would be too limited on its own.
Personally, I would be not where I am without college and ton of courses in CS. Topics like Database normalization, query optimization, ton of OS concepts, discrete math, algorithms/data structures are important for any CS career and could be read on their own but why not just take courses and study them in college instead of trying to rely one's self discipline to cover all of that.
If you are starting your own company, maybe it matters less but even there I am not sure.
My high GPA comes from doing what I'm asked, not from being innovative, interesting, or overachieving. I like to think of it as GPA hacking, maximum results for minimum work.
But if the projects have significant value and are well known, that's a different thing altogether, that comes off as a big plus IMO. They just need to presented well - just a code repository somewhere is less likely to get attention than working stuff people are using actively.
But apart from that, projects make you a better CS/hacker and it shows - it shouldn't be done for getting a job but just because you are passionate and want to contribute - and trust me it will show if you do try to leverage that for getting hired later.
A BA is worth far less than a BS in the technical world for precisely this reason. I honestly can't believe they even offer BAs in Computer Science.
To re-iterate. I have yet to meet anyone who cared that I have a BA. That list included employers, recruiters, and the admissions department for my graduate school (I am a PhD. student). It doesn't matter. Ever.
And after 10 years of doing this, I am going back to school to get my CS degree. I believe you can be successful without a degree but there's a wall that you will eventually hit where you're natural talent can't take you farther without some assistance. Unfortunately all the classes I would like to take to satisfy my craving for knowledge are graduate level courses. So I'm going back to school so I can get my degree so I can finally learn the stuff that I want to, and need to know.
You don't have to get very far in the undergrad before they'll start letting you take the interesting stuff, especially if it looks like you know what you're doing.
Personally, I'm glad I didn't get a degree, or at least that I didn't follow the common path of high school-college-entry level job, even though it has made life more difficult at times. It cut me off from the easy route of getting some comfortable, dull job at a big company and becoming stagnant. Instead I've had to carve out my own path and I think the experience and confidence I've gained from that are worth a lot more than a degree. Frankly, not one of the clients I've worked with has even asked me about a degree. When you have solid work you can point to and enthusiastic references, whether/where you went to college becomes completely irrelevant. If a company won't hire me for a job I'm qualified for because I don't have a piece of paper, it seems to follow that they are likely to hire unqualified people who do have that piece of paper, so it turns out that their filter actually works out a lot better for me than it does for them, and I'm happy to be filtered.
I also don't buy the notion that without college you won't be 'well-rounded' or 'generally educated'. When I was in school, I always felt like I had a lot less time to devote to reading and really learning because my days were filled by tedious work and usually dull classes. Going to college isn't what makes you well-rounded and educated, it's a thirst for knowledge and the time to fulfill it.
Also this may be off topic but colleges are businesses, and a business has one goal - to make money. I do not believe in the higher education system that the U.S. has. I believe that higher education should be a not-for-profit industry and that our current system is highly corrupt and is quickly becoming unnecessary. The amount of $$$ that will be spent to go to college is rising while the amount of $$$ you will make after college is going down. The end result will be college costs too much to be a viable option.
Hackers are like programmers with ADHD and autism. They are superior at what they can do, they are probably some of the hardest "work hard, play hard" employees, but if it does not interest them, they aren't always effective.
One thing a degree will do, is teach you a rounded set of skill and how to focus on problems that may currently be outside your box. Advanced math and statistics, literal and verbal comprehension and grammar, let alone the social aspects that many hacker types can lack - plus, while you are taking the general education courses, you are expanding your mind to new concepts and may even find something to specialize in - ie social statistics, informatics, bioNLP...maybe even philosophy like myself.
If it comes to getting a degree or certificates, get the degree, if it comes to getting certificates or nothing, get the certificates...but having no formal education just makes a person look lazy on a resume, and if your resume actually does get looked at with no formal training, you are either exceptional or lucky. I was turned down for very high paying jobs and Network Admin and VP of Technology at corporations that everyone knows world-wide. I had exceptional references, proven track record, and when it came down to two people...I was not chosen because of no degree. In BOTH positions, the person who was hired was fired after one year because they did not have the skills necessary. So, getting a degree will not let you keep the job, but the education is enough to get you in the door and prove you are worth that six figures.
I exited the Military after 5 years of service as an MP (did NOT want to continue in that career) so did construction work. Asked around about which language I should learn, bought FoxPro 2.6 and read the book about three times before it sunk in. I poked around looking for interesting projects at businesses for free, not asking for money. Six months later I was hired. I explored some fascinating concepts in linked lists, or hierarchies if you prefer, while at my first job... working with bills of materials, assemblies and subassemblies. I did a lot of interesting things. From there I moved again, and have since learned Delphi, VB, .net, html, javascript and SQL. I write software for offices in the US, UK and NZ. I started getting BORED & frustrated. Instead of divorcing my wife and family of 20+ years (we got married and dropped out of high school), I sought fulfillment through the sense of self-worth you get when you reach out and help other people. The world seems a lot brighter.
Whadya know... I'm now finishing an absolutely fascinating pursuit of a bachelor of science in human resource development with a 4.0. I'm doing an intervention at Kiwanis, plan on becoming a MCT to help teach at the local community college, and will even be doing some ESL instructing next year. Yes, I already make as much money as my professors, but it's been an unusual ride. Instead of worrying about being able to provide for my family, I have a lot more flexibility, choices, and a brighter outlook. Now... do I want my kids to finish college? Of course!
But CS teaches you fundamentally what is going on with a computer, good CS programs will teach you 1's and 0's, levels of abstraction, all sorts of stuff from the very low level to the very high level. As an engineer you need to understand the low level stuff, you need to know about garbage collection, you need to know how to manage memory, you need all this low level stuff; it's not un-important shit or magic in a box.
It leads to better efficiencies in your code such as (PHP) var len = array.length(); for(int = i; i < len; i++) {} vs for(int i; i < array.length(); i++) {}
To be fair, all programmers are computer scientists. Some are really decent and some are really bad. CS people solve problems with algorithms (Def.: Finite set of instructions or steps), guess what programmers do? CS is the study of the science behind computers, everything from data structures to: algorithms, program correctness, math induction, recursion, OOP, Agile Techniques etc...
Just because I wrote code doesn't mean a thing. Also, just because it worked doesn't mean a thing. The point is that anyone can write code and maybe they can do it bug free.
Let's assume you are targeting one specific type of machine.
What will seperate you from the others is your understanding of the machine you are targeting. You need to understand many many things about this machine when your code becomes very involved. You will need to understand the cache structure, L1, L2, etc. You need to understand how those caches are designed. You need to know about paging and TLB. You probably wont learn these by 'haacking' code together. Grant it, there are some indivuduals who want to know everything and will go out and learn it all.
Asside from the architecture, you also need to understand applied mathematics which is where Computer Science came from. You need to understand logic and electrical engineering, at least the basics. You should understand how registers work and how bits get added, subtracted, multiplied, divided, etc. This is all very important.
Once you learn all these fundamental things you will see things in code entirely different.
Remember, a high level language is just a syntax for you to apply your knowledge. It really is nothing more. Programmers should be able to switch languages very easily and still know what they are doing.
Let me tell you a short story about my first job after college. I ended up getting hired to a group where maybe half the people there had degrees. There were a few, lead, people who had taught themselves with VB. They asked me to write a script for them. In all their glory they wanted to tell me about this neat system they came up with. Two hours later when they finished I just replied, "You recreated a finite state machine". The two hours they spent explaining themselves to me really was a waste of time. All they really needed to tell me was, "Here is our finite state machine and here is the drawing showing the states. This is what we have implemented. Use this for your script."
Now, in college I wondered why I was being taught about finite state machines and whether I would ever use it. Well, my first job I did. I continue to use my education every day. It is very helpful to figure out what is going on. It isn't just about memorizing things but learning how to think and applying what you know.
People funneled in could be the definition of a slacker.. they don't know why they're there - so why care or try?
Studying on your own is definitely the answer if you have the passion and drive to stick with one thing. If you find yourself competing with a lot of random "passions" (like me) understand every aspect of how college will benefit you (career, socially, etc.) before jumping blind into the stream.
I left college in the U.S. owing $24,000 (I then paid $150 per month for 12 years and just recently paid off the remainder of the loan with a $5,000 check). And I really would pay that amount for the rest of my life... College was a blast. It changed my life completely. I really can't overstate that.
I took the author's tack and took classes I was interested in and hacked in my free time. It worked out wonderfully for me as now I have a job at one of the top game development studios in the country. College + hacking broadened my horizons and gave me the career skills I needed. I've been surprised many times how things I've learned in completely unrelated classes have been come back to help me.
It's been especially fruitful when coworkers who are much better programmers than me want to write good code on top of poor decisions based on a lack of inter-disciplinary knowledge. Being able to adjust the course upfront has saved many hours and resources.
If you can go to college, but like the author said, if you're not engaged in your learning you're doing it wrong.
Universities haven't had a monopoly on books for centuries. Their monopoly on good lecturers is getting smaller by the second, thanks to e.g. Open Courseware.
They're still the place to run into professors, grad students, etc. outside of class. That can be very important. Serendipity is a nice thing.
They still offer a critical mass of fellow students. That's often a big deal for your education, and it's certainly most of the fun. Plus, as many have pointed out on HN over the years, there are precious few places in the world where you can literally live next door to a bunch of fellow hackers, all of whom are young and nearly unemployed and used to living cheaply and ready to embark on a project with you on a whim. (Trust me: After you turn thirty, this never happens again. Everyone has these tedious families and jobs and lives that intrude on their hacking time, and they're all out of sync, such that when you are free they are always busy. ;)
Finally, universities have infrastructure. Laboratories. Lots of laboratories. Those you really won't ever get your hands on again. College, and even much of grad school for that matter, were worth it for me just for the labs and shops alone. I built hundreds of tiny lasers!
Some schools are magnets for people who have technical interests. I did a science degree at the University of Waterloo. There was a steady stream of inspiring tech people throughout my four years there that you'll get a chance to hear from and talk to if you keep your eyes on the posters around campus.
One of the best learning experiences of my programming life happened because I saw a poster for the Yahoo HackU programming competition and then showed up for it. The chance of experiencing these things outside of college is very low.