Ask HN: What is the advantage of a formal CS degree for an entrepreneur?
9 comments
We hope you consider applying to YC.
A good CS degree will force you to do some things "for your own good" that will be valuable later. Working on the problems with others makes a difference, especially since you'll generally be working with others in real life projects. Just totally immersing yourself in the subject for a solid 3 years is significant, as is being around people who are doing serious research in the field (and ideally joining in). Having someone with a clue on tap to help you through difficult stuff makes a big difference. You need people to tell you what you don't even realize you're not getting.
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.
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.
I'm an American. I'm applying for a permanent residence work visa in another 1st world country. My CS degree made this easy. Degrees in economics or finance would not have done so well.
Indeed. Formal degrees make a big difference there and in doing work for the government, or government influenced things/the D.C. area. Or various sorts of "mass produced" consulting, where the company is selling resumes more than anything else.
As an entrepreneur the latter shouldn't be much of an issue any time soon.
As an entrepreneur the latter shouldn't be much of an issue any time soon.
Your resume sounds like a 'dream co-founder', both business and technical experience. PG suggesting you apply to YC is probably exactly what hacker news' function is for YC, spotting great talent early on, it also probably means that any application you come up with will be looked at very seriously.
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'.
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'd say it depends on the kind of person you are. Some people are fine actually learning the concepts (or actually learning anything) on their own, while others might have a problem.
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.
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.
Are you interested in actually developing the software, or building a team of people who will develop the software?
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.
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.
Maybe ... there's still a big difference between a manager/leader who can do the tech involved and one who can't. Earning the respect of those underneath you and being able to really understand what they are doing (or most of what they're doing) is important.
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." :-)
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." :-)
You and I are in a similar situation, but kind of opposite; I have my BS in CS (I love saying that because it rhymes) and I have experience working on large software projects in the defense industry. Right now I'm also pursuing my MBA. I can make an app right now (which I am) but since I lack a formal business education I felt it was a good idea to get one, if nothing else, for the networking opportunities.
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.
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.
I would say, it depends on the app you'd build and the toolkit you'd need. For your web-based app for a financial enterprise, you’d only need knowledge/skills on database/SQL, HTML+CSS, and front/back-end programming (i.e., JavaScript, PHP, VB.NET). Here you’d only need reference materials, as you can easily find how to develop the modules you’d need.
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!
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!
Feedback on work is a critical aspect, you might be doing something in a completely stupid/inefficient way which works but is far from a good solution, and the only way you'll know it's a bad solution is if someone tells you.
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.
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.
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/)?