

Ask HN: Should I drop my CS major to pursue being a self-taught web dev? - tobobo

Hi everyone, and thanks for clicking. I'm currently enrolled as a music/CS double major at a liberal arts university. I've just finished a summer of doing freelance web development, and I enjoy it a lot, though it can be frustrating at times. But as the beginning of my fall semester looms, I'm realizing that what I'm learning in my CS education is far less relevant to what I actually want to do than what I learn from just starting a new project and googling my way through it.<p>I took two intro classes, one on Python and one on Java and data structures, and I found those to be great. My class on computer structure, and that was fascinating. But moving forward, I feel like I'm heading towards the wrong niche—when I look at course titles like "Automata theory" or "Design of programming languages," they're things that I would love to learn, but I just picture myself working my ass off on some proof wondering why I let myself get so off track from something that I enjoy and can already make money doing.<p>Am I being naïve, or am I just starting to figure out why so many people say that college is unnecessary? I'd appreciate hearing anything about your real-world experiences that can give me some insight on which direction I should head.<p>Thanks!<p>EDIT: I had to shorten my title and I left out an important detail: I'm NOT thinking of dropping out of my university, merely doing a Music major instead of a Music/CS double major. I would likely still take CS classes—there's one on databases that seems very interesting.
======
robfitz
On the one hand, I haven't used a resume since my college internships (5 years
founding startups, then freelancing through the network built up during the
startups).

On the other, I still think it's worth the time. Being forced to write big,
gnarly programs (like a compiler or collaborative text editor or puzzle AI)
will give you experience that you'll never get from tutorials online about
dealing with big, scary codebases. Or working in teams. Or whatever else.

If you learn as you go, each of those problems will get you fired when you hit
it, because they're not exactly intuitive to deal with and you won't notice it
until shit has already hit the fan.

There's not a 1:1 mapping between academic and real world problems, but I
guess I'm saying it's still going to help. It also puts some extra items in
your toolbox in case you want to do something other than vanilla web dev.

That being said, I have no way of evaluating the financial or chronological
opportunity costs, as those are unique to you. It also depends how keen you
are to get involved w/ your professors and students.

Plus, universities are where co-founders live!

~~~
tobobo
You commented before my edit, but everything you've said is still very
relevant. Thanks.

The thing about the big, gnarly programs thing is that I don't think that's
what happens at our CS department. The older kids in the department always
talk about how the teachers can't actually code too far beyond the level
required to teach the intro classes because the focus in the higher level
classes is not on programming but on abstraction and theory.

I once brought a web app to my CS advisor that I'd spent a great deal of time
on, testing over and over again and polishing it so that anyone who saw it
would recognize it not as some sketchy work in progress but something that
could actually be a finished project. His response? "I don't know anything
about this kind of programming." Not "what sorts of challenges did you face?"
or "what are your next steps, what are you planning on doing from here?", just
that comment, some disinterested staring, and "this looks nice." I was later
told by a senior in the program that any other professor would only be less
interested.

I want to build things that people actually use, and that really doesn't seem
to be the focus of the program. At all.

~~~
bendmorris
You seem to have a misunderstanding about what an undergrad CS degree is
about. It's not vocational training. If you want that, you can probably find
something better at a community college.

If you want to "build things that people actually use," do it. No one's
stopping you, and there's not a college major for that - you just do it. Most
bright CS majors learn programming on their own time. Completing a CS degree
will give you skills and knowledge that will help with your goal but building
web apps is not the focus and it's not supposed to be.

------
rdouble
I went to one of those schools. Course quality in the CS department can be
very hit or miss. You are right in that the instructors often have no actual
programming experience. In this situation, the opposite of what you are
thinking is true: automata theory is probably a better class than databases,
because you don't need to be a good programmer to teach automata theory. A
database class taught by a guy who doesn't program databases all the time is
going to be lightweight at best and wrong at worst.

Advice is hard because it's very situation dependent. Do the courses use good
books? Are the assignments worthwhile? For example of what I mean: At my
school there was a prof who invented a cheap weather radar expansion board for
PCs back when weather radar systems were standalone and cost hundreds of
thousands of dollars. The hardware course and networking course taught by him
were great. There was another guy who came back to teach after working in
industry for 15 years. His courses were programming intensive and were also
pretty good. In contrast the intro courses taught by the guys who went
straight from grad school to teaching were weak sauce and a waste of time.
HOWEVER, the automata theory class taught by one of those guys was good and
was actually one of my favorite classes. Ultimately, I had a couple too many
dud CS classes so switched over to a math major.

Thus, you'll have to examine the course offerings closely to see if you can
piece together a reasonable major. If not it may be a better use of your time
to just get a minor and take good classes from other departments. I have never
regretted strengthening my math skills in lieu of taking half-assed CS
courses. It was pretty easy to develop half-assed CS skills on my own.

~~~
tobobo
I would totally go for a minor if my school offered them, but they don't,
instead making it slightly easier to double major (about a third of students
do so).

I've yet to have an assignment that was too far beyond a proof of concept.
Students who wish to pursue such projects are encourage to do so during the
summer as extracurricular projects.

------
ziyadb
I have been there. The last semester I enrolled at was fall 2010, about 6
months ago. I did not find any value in pursuing a degree that contained
subjects I had no interest in whatsoever (my major was Information and
communication technology), I chose not to enroll during the spring semester in
favor of attaining professional certifications (Cisco CCIE) as I had taken an
interest in them and attained "lower level certs" before that. (The CCIE is
considered the holy grail of networking.

Lately however, I have fallen in love with programming and software
development, and I have been studying with a passion. This has led me to
conclude that throughout the length of my career, I will be involved with
different technologies and perhaps even disciplines. Technology is full of
uncertainty, you do not know where you will be in 2 years (let alone 5), what
if you get a referral for that dream job but it requires a degree? Or if you
decide to build a startup and it tanks--you would have to consider employment
to regain at least some of the money you have lost.

There are countless other scenarios in which you may regret not having
completed your degree. However, the most important thing to consider is that
once you quit, you would lose out on opportunities--what they exactly are, you
will never find out.

EDIT: This is in response to your edit indicating that you are not dropping
out of school. That is good. But if anything, you should drop the music major.

~~~
craneintheair
Like ziyadb, I was also last enrolled fall 2010 as a CS major. I have a rather
odd record of my collegiate career as I have been skipping semesters,
sometimes a whole year in order to pursue freelance web/software development,
and start-ups. It started in 2006 when I started a web development firm with
my room mate. (Disclosure: Partnerships are hard.) We had a couple of clients
then things were shaky. This lasted until 2007 in which he enrolled back in
school and I followed suite. Personally, it took me a while to get into school
as the intro classes held such little interest to me, could have been the
teachers, to me they moved at a slow pace.

Then in 2008 after completing two years of my undergrad, I landed upon an
interactive agency (start-up) through my connections I made with my own
company earlier (Never underestimate the power of networking.) I invested in
the company and we had a very nice office and great client database. That was
certainly a peak time for me and were fruits of my freelance labor.

I cut out some of the rough times I have had, as they were certainly there,
being a freelancer or being involved with a start-up is a lot of grunt work.
Sometimes it was bill collecting or having to deal with unrealistic demands
from clients, etc.

It all really depends what you want out of life. Do you want a structured and
not so shaky career path? Are you will to take risks? Is anyone financially
dependent on you? If you have a good deal of freedom then I say go for it,
because those times will change and you can always go back to school.

I also agree with ziyadb, if anything drop the music. You can program a
computer to play music anyway. :)

------
ColinWright
Here's the thing. Everywhere you go you should be learning. If you drop out of
college and start to do stuff on your own you will lose access to the
resources currently at hand, and you will no longer be forced/encouraged to do
things outside your immediate interest.

If you start working on your own ventures you will make money - probably/maybe
- and that will be cool. More, you can just work on the stuff you want to -
maybe - but to earn money you may end up having to do a lot of grunt work
that's not really enjoyable, not creative, and certainly neither stretches nor
teaches you.

Do you really think you can make it on your own? Then do it now _while still
working on your degree._ Having a startup is incredibly hard work. If you work
that hard then you can do your degree and learn all this weird, wild-ass stuff
that you otherwise wouldn't, and at the same time build something cool.

No, I wouldn't drop out. If you really have the drive you can make the most of
this chance. It won't come again.

Just my $0.02, YMWV.

    
    
       #include <std_disclaimer.h>

~~~
tobobo
Thanks for the note. I certainly don't think I can make it on my own - I don't
really feel prepared for "the real world" (as if you've never heard a 20 year
old say that) - but the classes that remain to be taken in the CS program,
especially the required ones (Real analysis? Sure, okay) don't seem like what
I need to get myself there.

Also, I left out an important piece of information in my post—I'm not dropping
out, just becoming a single major (music) instead of double.

------
kevinh
I'd suggest moving forward with your degree. A degree looks good on any
resume, and pushing forward with your degree will give you more flexibility in
choosing jobs in the future. And, who knows? You may actually find you really
like some of those niche topics.

------
CyberFonic
Your CS major is like learning the scales, progression of chords, elements of
harmony, etc. Some of the subjects may not appear relevant, but they form the
foundations for the future. The best employers will not hire candidates
without suitable qualifications AND suitable experience.

On a slightly different note (ha ha) have you looked at LiveCoding and other
real-time fusion of programming and musical performance?

~~~
tobobo
A little! I've really wanted to get into Supercollider but... haven't had the
time. Do you have any suggestions for other resources/software I should look
into?

------
a3camero
My anecdote:

I have a H.BSc. in Biomedical Sciences and my only university course was Intro
to Programming.

I've worked as a programmer at start-up in Waterloo, won a series of
international programming competitions that had a decent number of CS
competitors and done a fair bit of contract programming for some decent sized
organizations.

------
abbasmehdi
My philosophy is pretty simple: Don't major in things that teach you "How"
something is done, go to school for majors in "Why” things are done the way
they are (exception: degrees that give certification to practice or a license
- like CPA or MD etc.).

I started with a business degree, and noticed we were being taught processes
like how to create a balance sheet etc, things I could learn myself by looking
it up online or reading the textbook, no added value from schooling, so 2
semesters later I switched to Economics, which talks about why people do this
over that, why governments do that over this etc. Then I decided to major in
CS, and started a new bachelor's degree, noticed again I could learn
everything they were teaching me myself and it was far too much theory that
would be useful “later”, so I switched to Electrical and Computer Engineering
which was focused more on building stuff in teams – which was why I got into a
tech major in the first place.

Ask yourself what you want out of it – seems like you want to build stuff –
universities don’t focus on that, vocational and technical institutes do.

~~~
bendmorris
This seems backwards - you didn't like business because it "taught you how to
build things" (i.e. balance sheets) and liked econ for the theory...then you
didn't like CS for the theory and switched to ECE to learn to build things.

~~~
abbasmehdi
I didn’t like business because it taught processes (the programming equivalent
of this would be memorizing syntax), economics looks at setting up systems
that incorporate those processes (building a mock economy and simulating the
effects of pulling various economic strings isn’t very different than building
a robot). Hope this helps.

