
Ask HN:  What is the advantage of a formal CS degree for an entrepreneur? - porter
I am a business guy.  I have degrees in economics and finance, and I have a few years of corporate banking experience working on $1MM - $100MM deals.  I have some light web development experience and started doing freelance web development for local companies as a teenager to pay my way through college. Now I want to bring the elegance of web based applications to enterprise software for the financial services industry.  I have the domain experience and I am an inner geek at heart, but I lack the formal education.  I have seen a lot of people on HN say that getting a formal degree in computer science is far better than teaching yourself.  However, I haven't seen anyone specifically mention what exactly would be missing from a DIY curriculum.  After all, many undergraduate courses from top CS schools are now online and free.<p>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.<p>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/)?
======
pg
We hope you consider applying to YC.

------
hga
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.

------
noonespecial
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.

~~~
hga
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.

------
jacquesm
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'.

------
charlesdm
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.

------
wanderr
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.

~~~
hga
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." :-)

------
slindstr
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.

------
zeroxsys
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!

------
ig1
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.

