
I'm 19 and I need advice - Yzupnick
Hi,I'm a nineteen year old student who lives in NY and about six months ago my parents, who own an eye care practice, needed a program to help analyze the efficiency of their employees and the different Nursing Homes that they visit.  I've never done any programming before and so armed with Google I tackled the program. I ended up with an Access Database written in VBA, that barely functioned, and how I could not have completely said.<p>I loved the process. The problem solving, the designing of the interface, the whole thing was just extremely fun. After that I started learning vb.net and rewrote the whole program. It still needs a lot of work and I am now learning c# and planning on rewriting it again. This whole thing has inspired me to become a developer. Technology and business was something I always enjoyed, I've been reading Gizmodo and TechCrunch for a while now, but now I see the creative process and analytical skills that software developers use, and I really want to do this as a career.<p>I have been reading Hacker News and talking to people who work in the field as to what it is that I should be doing now, and the general consensus is to just go out and do something. While this is something I would love to do, (I have a ton of ideas I would like to work on) and on some level I feel like I need to do it, (i need to make some money, nothing major more like 1000 a month, and I want to keep motivated to keep learning) I run into two main problems:<p>1) I do not have knowledge required to execute my ideas. 
I have been programming for only about 6 months, (at most, depending on what you consider programming.), and the languages that I know are limited to vb.net and c#. These are not exactly high level languages themselves, and my knowledge of them is mediocre at best. I don't have the knowledge to execute any of the ideas I have.<p>2) I do not have any friends who share this particular interest. I don't know any code gurus or anyone I can rely on for advice or as a co founder, and I have no way of meeting anyone who would fit into that category. And if I did meet someone, I don't know enough to be able to tell if they where actually good or just better than me.<p>I have the opportunity to switch to Columbia University's engineering program  on a 3 - 2 program with my college. Which means I do 3 years at my college, and will major in math and get a degree in mathematics, and then do two years in Columbia and get a CS degree from there. I feel like this would solve both my problems, but it will take 4 more years of school, and I will have to pay Columbia tuition.<p>I really want to start something but I feel like I can't. I've seen other people ask this before on Hacker news and most of the responses are "Just do it anyways." but that is really not helpfu in any way.<p>I was wondering if you can please give me advice on what to do. 
Thank you very much
======
barrydahlberg
"...the languages that I know are limited to vb.net and c#. These are not
exactly high level languages themselves..."

Not only are these very good high level languages but there is lots of well
paying and reasonably easy to get work around for competent users.

You sound a little overwhelmed which is normal, confidence is only going to
come with experience. Whether or not you decide to study formally, write a lot
of different code in your own time.

Imagine big problems, then break them down into smaller simpler problems that
you can actually solve. Building Facebook must feel like an impossible task
right now, but I bet you could build a database to store a list of friends.
The more you do this the more you'll find 'big' problems are suddenly easier
to understand.

~~~
MartinCron
Indeed, languages are not something to get hung up on.

Practical advice? If you are working in C# get a copy of ReSharper. It is
transformative :)

Good Luck.

------
rmundo
Go to Columbia. Two degrees in five years is a bargain. You'll only be paying
two years of Columbia tuition, while studying there in the later phase of your
college life, which hopefully means more focus and insight into how to access
the resources a college can provide.

Start looking into summer internships. Good way to establish contacts, find
mentors, and get a guided introduction to the field.

Take a look at Hartl's Ruby on Rails tutorial. The book is free, online, and
walks you through the stages of building a simple twitter-like client. It's
amazing the things you can do with high-level tools these days. There are some
good books on Python as well. I recommend O'Reilly's Head First series to my
friends who are considering getting into programming.

Start small, bang out code, even if it's just following a book. The act of
writing code seeps into your muscle memory and it gets easier and easier,
until you start expanding your skills and then it gets easier and harder both
at the same time.

Your first efforts are going to seem amateurish and trivial. Don't let that
discourage you. With practice you'll only get better and the feeling of
creating something with your own mind and hands is awesome.

------
btilly
Unlike most here I began learning programming in my late 20s.

On the recommend of my first mentor, the second programming book I picked up
was _Code Complete_ by Steve McConnell. It did a LOT to improve the quality of
my code, and enable me to write better code.

Be warned that it is a fairly heavy tome. And it is the kind of book which you
want to not just read, but to actually absorb into your programming and
thinking habits. But if you have the discipline to actually do it, I can't
recommend it highly enough.

~~~
lsc
Even if you don't plan on doing anything with the languages involved, buy the
book and read it.

(oh, yeah, you might as well learn the example language, which I think is C++
in the second edition. It will do you good to be able to read more than one
language, even if your writing skills are focused on one.)

~~~
btilly
Examples are offered in a number of languages. And the snippets offered are of
such a form that you seldom need to know the programming language to read the
snippet and get the point.

------
ryan-allen
Everyone's said this, I'll say it too: Awesome!

I fell into programming by accident at about 21, and I remember what it was
like, it's much as you described. Fun times!

All the advice here is good, but nobody has recommended you read "The
Pragmatic Programmer", which I found to be a bit enlightening. I still go back
to it years later to read and ponder.

Good luck! You sound like you wont need it. It's a damn good career for those
who enjoy it and are willing to put in some effort.

EDIT: I never did a CS degree, but considered doing it many times (if work
dried up, it never did). I believe though that the people you meet and work
with is a major part of doing a degree, so that'd be why I would go. I get to
work with good people anyway. This article was posted on HN recently and I
think is relevant:

<http://sheddingbikes.com/posts/1275258018.html>

I admit there are CS-type stuff I can't do (but I know where and who to ask)
because I never did a degree. Saying that though, I have worked with people
who have had CS degrees and couldn't code themselves out of a paper bag. If I
were to go back in time to when I was your age, I'd do the degree, though.

------
jph
Go for Columbia.

I went there as an undergrad and learned much about computer science, as well
as how to connect with smart students, how to find mentors, advanced
engineering research, and more.

And best of all, the friendships you can make at an excellent, intense,
diverse school can be a lifelong treasure.

~~~
saturdayplace
2nd this. PG often talks about schools as a way of meeting people interested
in the same things you are. You'll learn a lot of applicable things along the
way, come out the other end with a piece of paper that businesses consider
valuable and you'll build a network of folks. All three of these are reasons
for going to school. And, as others have said, it doesn't have to be the
_only_ way you learn how to program.

------
mbenjaminsmith
Dude, you're lucky. I took me 10 years post college to figure out what I'm
truly passionate about. If you don't take the plunge now you'll end up leaving
a perfectly good career at 31 to do it anyway (most likely after reading a pg
essay like myself).

1\. Hackers learn by doing. If you enjoy tackling problems you're 3/4 of the
way there. If you have ideas, you're 3/4 of the way there. Combining those two
will fill in the other blanks for you. What language you use would depend on
the problem space. When you pick a problem, you could always poll here for
suggestions.

2\. Don't worry if they're better or worse than you, just seek out people who
love doing it. They'll eclipse everyone else in short order anyway.

My only add on advice is I would assume you have more college options than
what you've stated. If you do like programming, you really can't go wrong at
this point in history with a degree in it. I would look for less time
consuming options.

Seriously, start your new life today. Pick a problem and start hacking away at
it. Start hacking away at college options and start seeking out hacker meetups
(you'll have plenty of options in NY).

Above all, enjoy it. Good luck.

------
peteforde
Congratulations on being awesome, 19 year old dude. You're at the perfect age
to start and your attitude is dead on.

My advice is that school is good for lots of things but project experience is
not one of them. Please, go sign up at GitHub and make it your new home. It's
like Facebook for open source development. Start checking out cool projects
(it doesn't matter what language, they are all the same - that's the
punchline) and learn to read other people's code. Pretty soon you'll find
opportunities to contribute.

You know the easiest way to contribute? Leave positive and encouraging
messages thanking developers for their hard work and let them know you're
following along.

Next advice: stop reading blogs and spend that time practicing coding. Blogs
are interesting but you'll find that your memory retention is less than 10%.
Try to limit yourself to checking HN twice a day and otherwise, focus on the
task at hand.

Final advice: make sure that you have a life. The best coders are interesting
people with diverse interests. Develop an appreciation of music and try to
expand your artistic whims. Get a camera, travel, read fiction, take pictures,
travel more, write fiction.

Take chances. Get the guy. Get the girl. Get both at the same time. Don't be
afraid and always try to listen twice as often as you speak.

------
cheald
First off, that's awesome! It's so gratifying to see someone else discover
that same spark that made me fall in love with programming. Keep it up -
you'll love it.

Some suggestions for you:

* Find a community based in your interests. You'll find VB and C# communities around the web, and any number of IRC channels (look at irc.freenode.net - most development-oriented projects end up there). Find a channel and idle in it. Soak up tidbits of knowledge. Try to answer others' questions. Just participate in a community of developers, and you'll find yourself being spurred along.

* Find an open source project that interests you, and try your hand at contributing. Fix a bug, provide art resources, something to connect you to the project. There are lots and lots of people working on really neat things that could use help, and there's no better way to learn than to do.

* Build lots of toys. An apprentice doesn't end up building a cathedral his first year in the trade. Small projects - like your dad's need - are a wonderful way to practice. Each project will expose you to some new concept, and help you learn some new technique.

* Don't expect a CS degree to teach you about programming. CS is just that - the science of computers. You'll learn algorithms, compiler design, how processors work, and all sorts of stuff like that, but any actual development experience will be incidental, more likely than not. That's fine, as long as you realize that a CS degree is not a trade degree. It will augment your prowess as a developer, but it will not immediately make you one. That's up to you to cultivate.

* Don't expect to support yourself with it financially for a little while yet. I don't want to be discouraging, but once you enter into the business end of development, standards and expectations get much higher, and it can be very crushing if you don't have the tools in your belt yet to deal with them. If you can pick up small jobs here and there, do it, but don't look to make a career out of it with 6 months experience.

* Never stop learning. When you find yourself becoming comfortable, find something new to learn. A colleague of mine held the goal of learning and using a new language or technology stack every year. I've adopted that for myself, and it's wonderfully beneficial (this year is Android development). You will keep yourself exposed to new ideas, and continually widen your vision of the field.

* Just start running with it. An artist only develops their skill by drawing and drawing and drawing and drawing. A runner only develops endurance by running and running and running. A cook by cooking, a pilot by flying. There is no better teacher than experience. Some ideas to start yourself out might be an address book, an RSS reader, or a music player. Try your hand at a web application. Pick up a scripting language, like Ruby, Python, or Lua (you can use Lua to script .NET apps, so perhaps it's a good fit!). All you have to do is start _somewhere_ and start doing it. You've started that with your dad's project - just keep it up now. You don't get to revolutionize the world on your second project ever, and that's okay. Your second project is a stepping stone to your eventual world-dominance app.

Good luck with it!

------
andreyf
You should really put an e-mail in your profile in case people want to get in
touch with you privately (or e-mail me at anfedorov@gmail.com) ;)

------
siculars
Good for you for having the courage to ask questions. This is definitely as
good a place as any to ask.

As for what to do and how to do it, I would definitely tell you to go ahead
and do the 3-2 program with Columbia. Besides the education, the connections
you will make will last a lifetime.

I actually work for Columbia and live by the campus, if you want to talk drop
me a line. But that aside, NYC has a great tech community with all sorts of
programming/developer oriented events going on virtually every week (check out
meetup.com).

Most importantly, hold on to that spark that got you interested. It will keep
you going when you feel you are banging your head against the wall.

------
kls
Join a local users group and go to meetings religiously. You will come to know
who is who by attending these. Start small, take your smallest idea and work
on it. it is going to be atrocious but that is a good thing, being able to
design an iterative plan to get out of a poorly designed systems is one of the
marks of a good developer. Resist the temptation to scrap it all and rewrite
once you figure out what you are doing. Force yourself to encapsulate the
system and modularize it so that you can replace it a piece at a time. The
skills you will develop by forcing yourself to clean up your old work will be
invaluable.

------
ewams
Glad you found something you are passionate about. It is an amazing feeling
isn't it?

I ran in to something similar with web development (PHP, apache, mysql, and
perl) and felt overwhelmed immediately. But, found that it was so much fun I
stuck with it and just started small. "Ok, how do you get the data to sort
this way?" "What is this md5 thing?" "How do I manage cookies and wtf are
they?" etc. etc. etc.

Starting small, reading other peoples' work, take your time, don't get
frustrated for more than 5 seconds, and find some online communities that
share your interest.

Good luck and don't ever say "I can't" again ;)

------
dmfdmf
Start an "ideas" folder (write them down or they drift away) and get your
degree (from anywhere, not necessarily from Columbia. Once working, most
fields do not care about the pedigree of your degree unless you want to be a
Supreme Court judge or advisor to the president, etc.). A degree opens doors
that are closed without one. And getting one after you move forward and start
you career and LIFE (esp the wife and kids) is just not possible for most
people. It seems like an onerous diversion now but in the end you will look
back and value the time spent learning and the people you meet in college.
While you are getting your degree you can probably pick up consulting work
like you did for your parents and continue to practice and learn what is
taught in school (and think of more great ideas). When you near the end of
school you can break out the ideas folder and see how many are done and how
many no longer make any sense and mold the remaining ideas into viable
business/action plans. Your friends from college may want to join you too.

tl;dr: A lack of degree will limit future options; learning is easy when you
are young and harder when you are older; get your degree now, the world will
still be there when you are done; write down your ideas.

------
vnuk
I was in your situation at 15 (needed to develop something for a family
friend). It was a total failure but kept going thinking up stuff on my own,
reading and learning. Three years later I finished high school and got a job.
Havent looked back since, ten years later started my own
development/consulting company now running for three years.

My point is, if you bite hard enough, your education doesn't matter.

------
Yzupnick
Thanks everyone, the comments were really helpful.

I didn't realize how fast responses will come in.

I am now currently looking for conveniently located Hacker Space (preferably
in queens if anyone knows of any), and for an Open Source project to help out
on. Plus I now have several books to look up and websites to join.

My email address is chazup@gmail.com. Weird because it is in my profile

~~~
dho
The email address in the email field is not visible for others. You have to
use the about field if you want to make it public.

------
jayruy
From how you describe your experience of teaching yourself to not only create
a working program via independent research, but also recognize it's flaws and
refactor afterwards, I have no doubt you could find some level of success in
the industry. Not being able to "execute on your ideas" is not that important
in many micro-managed niches of the industry, which are not great gigs in the
long run, but are good if you are starting out and need to develop perspective
on "getting shit done". Be humble and look to learn - you'll be fine.

I'm a bit confused on the Columbia thing - if it's 5 years instead of 4 - go
for it, education is the best investment you'll ever make. If it means 4 more
years after undergrad: just go work, it's probably not worth getting out-of-
sync with your age cohort.

------
CyberFonic
People have different learning styles. Some learn best by doing, others by
being shown how and yet others can study and learn from books. Doing CS at
university is only a good option if you learn well in that environment. As
many others have pointed out, CS degrees teach you a lot of stuff you will
never use. On the flip side, the risk of being a self taught hacker is that
you pick up lots of bad habits, could end up with a limited world view.

Instead of going to Columbia and racking up a huge student loan debt, seek out
a startup or open source project where you can be an apprentice to some
masters who have a verifiable track record (majority of professors are lousy
programmers if they do any at all). And never stop learning and seeking out
ever better masters.

------
robotempire
This thread is packed with awesome advice. I'm in the exact same boat as the
OP, but 12 years and one child older. Get your educational pedigree now while
it's natural and expected. Going back to school with a million other things
going on as an adult is unrealistic, period.

------
auston
Do you have an email address where you can be reached? I would like to email
you privately but you dont have an email in your profile.

------
iterationx
Look at the programmer job sites, see what they are looking for in a
candidate, use that to inform your next steps.

------
drivebyacct
No offense, but you need to read and write a lot more. I know that your post
is not the most important writing in the world, but there are many poorly
constructed sentences, misspelled words, completely missing words, etc.

It makes a huge difference in how people perceive you and it's also reflected
in your speech patterns and your speaking ability. This in turns affects how
people perceive you face to face. Poor verbal communication can make even the
best resume useless.

~~~
lsc
I don't know about useless, but yeah, it will force you to work at a less
desirable job. Nerds will judge you on language skills the way sales people
will judge you on clothing.

