Ask HN: What is the advantage of a formal CS degree for an entrepreneur?
For example, say I went through all of the computer science courses on Academic Earth (http://academicearth.org/subjects/computer-science) and also used the Khan Academy (http://www.khanacademy.org/) to bone up on my math (I already have a decent background in algebra, probability, statistics, and calculus). I am also learning Python and Django and know HTML, CSS, and some Javascript. Plus there are a lot of great communities online that I could go to for help, and I would probably make a lot of great friends there too.
Other than the people I would meet and the actual degree, how much would I actually be missing out on if I went the DIY mentioned above? What, specifically, would I not be able to understand other than strictly theoretical stuff (machine learning, NLP, etc.)? Would going back for a master's degree in computer science really be worth it (perhaps the MCIT program at UPenn: http://www.cis.upenn.edu/grad/mcit/)?
On the other hand, the CS degrees at many, probably most schools aren't worth much. E.g. look at Joel S.'s essay on Javaschools, he makes the point that if you aren't taught both pointers and recursion you're wasting your time. But of course you have to learn a lot more.
To address the one school I'm familiar with:
MIT's old (and much better, in my personal opinion) curriculum is all on line at OpenCourseWare. At the very least you should do 6.001/SICP and then go from there (and you should do as much of the book as you can, the single semester course can't cover it all, especially after they had to add trendy OO to it). UCB is still teaching SICP and as I recall the lectures by Brian Harvey are on-line (and up to date, unlike the ones by Ableson and Sussman (for a class at HP), although learning 6.001 from Sussman is ... very good).
On the other hand, MIT teaches CS combined with EE; if you have no interest in or need for the latter, you can skip courses like 6.002-4 without too much harm (you do need to learn some basics, and there would be serious value to doing 6.004, it's just going to be a lot of work including the prerequisites, which include differential equations). But do 6.001/SICP first and then see what you think.
As an entrepreneur the latter shouldn't be much of an issue any time soon.
A formal degree is great when you're job-hunting, and to prove that you can go the distance, that you've got stamina. The level you're currently already operating at I doubt that you will get much benefit from such a path, it will keep you 'off the market' for a couple of years and who knows what kind of opportunities will pass you by in that time.
There are lots of people here that think they're ready to go and do a start-up, either because they don't currently have a job or because they're sick of school. Most of them are not 'ready', you - as far as I can see from your brief intro - are 'more than ready'.
I attended college for a year, but eventually dropped out after a year to start working as a C++ programmer. I'm working on games but currently I'm focussing on some advanced machine learning related systems. I haven't really had a problem with the majority of the concepts, so from my experience I'd say you can do it if you really want to. If your global knowledge of maths is decent you should be fine on the majority of the stuff.
Attending a top school will help you to establish a good CS base on which you can build and will also give you some good networking opportunities, while attending classes of a less good CS program probably aren't really worth it.
If you see yourself in a development role, the CS path is a good one, as long as it has some Software Engineering mixed in. If you are going more for a leadership role, you can probably skip the CS as long as you know enough to tell the difference between good and bad programmers, and focus your time on Software Engineering primarily. I highly recommend the book Rapid Development for a good starting point (in factg it may be all you need) and Systemantics for an interesting (and humorous) look at the fact that all complex systems operate in a (partial) state of failure, and why.
Let's put it this way, if two of your programmers are recommencing different approaches and O(whatever) is relevant, you'd best know that and why! (And yes, seriously, I've seen one major software client/server project fail due to a new manager coming from a single user CD-ROM application environment and just not being able to grok scaling, which is after all inescapable for almost all modern interesting projects today). Doing 6.001/SICP plus following up on a few things in it you find interesting might be all the CS foundation you really need, though (well, you should study some systems stuff including security as well).
But your point about Software Engineering is well taken; only so much of that is taught in a normal CS curriculum, it's something that needs serious independent study (something I myself started doing a few months into my first programming experience (in high school) and never stopped). Read with attention to detail the 20th anniversary edition of The Mythical Man Month, The Pragmatic Programmer, Peopleware, the Antipatterns book, something that looks relevant by Gerald Weinberg and a methodology book (I prefer The Unified Software Development Process or, now, look for the latest iteration of it (but I suspect you need at least one experienced programmer to make it work), or you could go explicitly agile) and then go from there.
(Even Weinberg ancient classic The Psychology of Computer Programming is still somewhat relevant: I still use the anecdote about two people or teams working on a card reading module. One had a slow one that worked, the other was more ambitious but just couldn't get their version to work. When the latter challenged the former on speed, the former said, "Well, if it doesn't have to work I can make our version really fast." :-)
Some things they probably won't teach you (at least not in enough depth) with a formal CS degree is: - Design patterns and why they're totally awesome - Source control - Debugging / unit testing (I couldn't fit this in my curriculum in undergrad, although it WAS technically offered, but at the graduate level)
In a CS degree they really go in depth into HOW stuff works, which is nice, but not really practical to put into use. For example, we were forced to make our own ArrayList implementations. Good experience, but you'll never actually use your own implementation (usually). We were forced to use other, seemingly useless/dead languages just to be exposed to other ways of thinking. It was interesting, but I've never REALLY used that knowledge. And the list goes on.
I think if you're just prototyping a web app you'll be fine, especially if you're not planning on doing the development yourself down the road.
If you find you're lacking knowledge on some part of your development just pick up an O'Reilly book and learn it. Speaking as a professional software engineer, that's really all we do too when we hit a road block.
However, imagine what you could miss? During the design phase, diagrams, (R)DBMS, OOP, algorithms and software engineering skills are some of the vital CS fundamentals that will eventualy result to the overall quality of your app. You may be able to develop a complete app, but you may not be able to know if it’s the best implementation. While testing your app, you might find some CS concepts (i.e., data structures, searching, Big Oh) relevant along the way, to enhance the processes maybe. Yes you could study these topics by your self, but you might be more effective if these are already in your armory before jumping to the job. Like when you’re programming, an OOP approach might be a better approach as early as the initial coding, rather than convert to it after launch. Or you might learn that you could offer real-time collaboration using other networking/Internet technologies.
Yes you don’t need a CS degree, but let me suggest that you scan the CS topics before you start designing your app. Someone who has a CS background may be able to forsee all posible problems and solutions to its system right after the inception of the idea, while someone who’s not, must explore all possibilities and validate them in each step he/she would take. I’m not saying that you cannot build a good app, I just hope that you won’t miss something. Good luck Sir!
Having a strong technical co-founder would probably be good enough if you're strong enough to learn programming yourself.
I suspect you'll learn a lot more if you put the time and money into making a startup rather than into a masters degree.