
I am a 14 year old programmer. I'm stuck. - zbaker1398
Hi,
As the title implies I am 14 years old and an intermediate programmer. I would consider myself "fluent" in python with also experience in objC JavaScript HTML and a handful of other technologies. The problem is that my school does not offer any computer science courses other than Computer Applications 1 (learning how to use word, PowerPoint etc). Anyway, I feel as if I am stuck. Lots of people recommend creating some shareware or something like that. The problem is that while I know all the ins and outs of python(ish) this task seems daunting. The jump from intermediate to advanced, if you will, is huge. I would love to publish a desktop application that syncs with multiple cloud services but again, but the API's are daunting. Could anyone offer any advice or help, thank you!
======
geofft
> The problem is that while I know all the ins and outs of python(ish) this
> task seems daunting.

This seems entirely expected -- you have a good background in a programming
_language_ , but no real training in software _design_ , which is to say, in
breaking down a large project into useful components, setting and using
appropriate abstractions, and managing complexity. This is unsurprising, since
this is an entirely different sort of task than just knowing the syntax of a
language.

There are several good options here, like the textbooks _Structure and
Interpretation of Computer Programs_ and _How to Design Programs_, both freely
readable online. Reading things like ESR's summary of the UNIX philosophy
(<http://www.catb.org/esr/writings/taoup/html/ch01s06.html>) might also help
-- much of the UNIX philosophy exists to manage complexity in a huge system.

Another good option is to look at high-quality existing free/open-source
software and understand how it's designed and why. If you can, find something
you want to change in it and contribute it back. The skills you'll develop in
understanding how to find your way in a large software project will serve you
well in designing a large software project yourself.

------
trotsky
While I'm sure this won't sound terribly appealing to you, my advice would be
to pick a medium size open source project that you're interested in and does
code reviews. Start small by contributing bite sized fixes or features that
they already have listed as things they want to do - many projects have lists
like that for newcomers. If you do that even just a few times and get your
code accepted you'll have gained more skills and knowledge about how to build
a successful piece of software than almost any classroom would offer. In my
experience many projects will be very welcoming to someone like you and yet be
willing to hold you to higher standards than most teachers would.

After you did that you'd be much, much more likely to be able to build a
successful project on your own.

~~~
benregn
Could you point out some of the projects that have those beginner type lists?
Could be useful as a starting point.

~~~
thedudemabry
<http://whatcanidoformozilla.org/>

This popped up on Hacker News the other day. It looks like the majority of the
bugs are C/C++ related, but you might find some helpful folks in a project so
interested in new contributors. Good luck and keep hacking!

------
gruseom
What sorts of things are you interested in? You'll have better luck working on
something you find exciting.

If you get stuck on technicalities, two good things to try are (a) Google code
search (<http://code.google.com/codesearch>) for examples related to what
you're doing (for example, if you were trying to make an S3 connection from
Python, you could check
[http://code.google.com/codesearch#search/&q=s3connection...](http://code.google.com/codesearch#search/&q=s3connection%20lang:python&type=cs))
and (b) a relevant IRC channel if there is one.

If there are any programmer meetups in your area, try going and asking for
help in person. When I was your age and trying to learn programming, I didn't
know anyone who could help me. In retrospect, that was the #1 thing that held
me back.

------
ecspike
My answers are more general to your growth as a programmer and not as a means
to an end for help to make that desktop app.

Google Code-in starts next
<https://code.google.com/opensource/gci/2012/index.html> .

"The tasks are grouped into the following categories:

    
    
      1. Code: Tasks related to writing or refactoring code
      2. Documentation/Training: Tasks related to creating/editing documents and helping others learn more
      3. Outreach/Research: Tasks related to community management, outreach/marketing, or studying problems and recommending solutions
      4. Quality Assurance: Tasks related to testing and ensuring code is of high quality
      5. User Interface: Tasks related to user experience research or user interface design and interaction"
    

You could even win a trip to Google HQ in Mountain View.

I did the college version (Summer of Code) and it was a very rewarding
experience. I think the code-in can put you in contact with some organizations
that might want to mentor you. The Mozilla Foundation has a bunch of projects
you can contribute patches and fixes to as well.

If you don't know it already, learn how to use git. I would also suggest the
book Programming OpenSouce Software by Karl Fogel (just google for it, he
offers it free online).

------
andrejewski
I have a similar problem, but I'm off by a year. I'm fifteen and have
basically run out of any CS-related classes to take at my school. I have
shifted into math classes (Calc, Stats) to help me get some "computation" this
year at school. Just as someone who was where you are, I'd say don't get
discouraged by what your school offers and try to work on your craft outside
of school. Depending on how much you have learned about CS and programming,
maybe learning more and iterating on some side projects would suffice. It's
definitely something that is hard to get over, you're not alone. Keep
developing.

------
rickdale
I remember being in your shoes. My advice is to get a web server and to start
hacking it. Create websites, mess with databases. Install some open source
apps and figure out how to create a module. You can do it; one step at a time;
the daunting feeling will turn into great gratitude. I feel like there are
better people here that can give you more overall sound advice, but hopefully
this provides you with a platform to at least keep moving.

~~~
saiko-chriskun
This. Just break it down into many smaller steps and take 'em one at a time.
Make sure you always have something to work on and are making progress, no
matter how slow that progress may seem.

------
saluki
For starters create a basic web app. Pick something you or you and your
friends/family are interested in.

Maybe a to do list app or maybe an app that you can chat with your friends on
or track your DVD/other collection . . . organize photos or maybe a family
meal planner.

Pick something you are interested in and then start trying to build it at a
basic level.

There are lots of tutorials out there for the individual components you'll
need.

Once you have the basics up and running then start adding features.

As far as the APIs go choose something simple for starters, like obtaining a
piece of data you want to incorporate into your app via an API and go from
there. Maybe creating a basic HTML5 mobile weather app.

You are going to have to learn some things on your own even in college so
don't worry about advanced classes not being available at your school. Classes
are typically going to be behind the latest trends anyway. They provide a good
foundation but won't cover everything you need.

Some ideas for new things to check out . . . skills to learn.

Learn to develop mobile websites and apps using jQuery Mobile.

Learn Ruby on Rails.

Create some simple iOS apps.

Create a websites for friends and family.

Good luck!

------
DrJosiah
For what purpose are you writing software, and what is your desired
destination?

Do you want to program something interesting for you? (then figure out what
you want to program, figure out the technologies it would take to make it
happen, then learn them, and do it)

Do you want to get better at the trade so that at some point someone will pay
you to program? (then go through MIT's OpenCourseWare:
<http://ocw.mit.edu/index.htm> on CS topics to build up your fundamentals,
then start reviewing/helping/hacking on open source for a while)

Do you want to use programming as a tool to do other things that you are
interested in? (look around at what topics are necessary to understand, learn
more about those topics, and go for it)

Personally, I knew when I was young that I would be into programming; when I
was 5-7, we did LOGO in school, but there weren't really any programming
courses worth anything in my high school (Cobol, Fortran, Hypercard, and
Pascal), and I took the two electronics courses that were offered. I held
myself back until college, where I did my best to learn and program as much as
possible. After college, I went to grad school, continued programming as much
as I could (I wrote an editor in Python for Python, dozens of data compression
libraries, several distinct MUDs, ...), and got a PhD in theoretical computer
science. Since then, I've been working in industry (because the academic
market is crappy right now).

So I again ask; what is your destination? If you don't know yet, that's okay.
You can improve your skills, your fundamental knowledge, and your technique
without taking formal classes (see my link to MIT's OpenCourseWare). Heck, you
may even be able to do so without talking with others (though it is hard).
Once you do figure out your destination, it's a lot easier to ask for
directions to get there.

------
bobfirestone
I have only been coding for a couple of years and know the feeling. There are
so many things you could know that thinking about it is intimidating. A few of
things I think you should do...

1\. There are a lot of free CS courses being put online. Start with the
courses at Udacity.com they are the most "friendly" to start with. Then move
up to the university level courses at coursera & edx.

2\. Find a local user group. Connecting with other programmers in your area
gives you a support network to ask questions to.

3\. Study algorithms.

4\. Write lots of little command line apps. Don't worry about them being
useful just focus on making the code good.

5\. If you are not already doing it take all the math classes you can.

You are 14 and that is a good thing. If you stick with it and keep learning
you will be a badass when you are 18.

------
computerslol
Unlike your peers, there is no precedence for you. There is no preconfigured
direction for you. There is no magic set of courses to get you where you want
to go. Don't be discouraged, this is a very very good thing.

Reading Hacker News might get you excited, thinking "There are tons of people
just like me out there!", but we are geographically distributed; and most
aren't like you at all.

I know some of your story. I lived it. I've had a lot of success, and here's
how I came about it:

Write a list called "What I want to be making by the time I'm 30", and devote
it to memory. Stay abstract and philosophical. Talk to people who know about
who you'd need to hire to accomplish those goals, and go learn to be those
people. You have time, but not as much as you'd think. It takes 10 years to
master a skill, and I'm guessing you'll have at least 4 to master before your
list is ready for implementation. Start now. You can do more than one
concurrently. The further along you get, the easier it will get. The goal is
to master. Maintain a hunger for purity. Don't use something until you know
exactly how it works, and why it was created. If you like something, try
writing your own version.

It will be very hard at first. Keep that list in mind for motivation. Get jobs
requiring your required skills, and always volunteer for the tasks your
coworkers are afraid of. You will make mistakes, you will fail from time to
time, but every year you will get better, stronger and faster.

Someday (if you stick with it) you'll be able to invent and build things that
are yours, and yours alone. Things that matter. Things that change lives.
Corporations will depend on you specifically. You will move the state of the
art forward and make the world better.

Make sure you never forget what it felt like when you were new. When you'd
take out a pen, and draw interface designs for a product you can't build yet.
When "This would be so cool" outweighed "This will be so hard to build".
Create your own challenges and break through them.

You'll do great :). I'm looking forward to a chance to hire or compete with
you some day.

~~~
zbaker1398
Wow, this is incredibly inspiring. I am going to save this and will look upon
it for the rest of my life. Thank you so much for taking time out of your day
to help somone like me, your kindness is incredible. Thank you.

------
lsiebert
Hi,

It seems like you want support in expanding, mentorship etc.

There are a couple of options you have. You can see if you can take classes at
your local junior/community college in python.

You can try to do what you want, and when you get stuck, go on a python
mailing list, a irc channel, stackoverflow.com, a python user group, a hacker
space, etc.

You can also decide things are too hard and give up, or put things off. I
won't judge you, programming is often difficult and frustrating when I'm doing
new stuff.

Anyway, do something else, dive in, or give up.

------
csixty4
This probably isn't going to be much help, but I've been thinking back to when
I was your age a lot lately (I'm 35). Your generation has so many resources
available to learn programming, and so many opportunities to create through
the open source world. This is a great time to be learning how to program, and
I wish you lots of luck. This career can be a real pain in the butt a lot of
times, but it's also a lot of fun.

------
jason_slack
This may be out of the box a bit, but if you think going from "intermediate to
advanced" (your wording) will be huge, maybe that is exactly what you need?

Get it? It should be scary. You are doing something new to you.

Watch the movie "Indie Game". If you dont have the $10 to buy it I will gift
it to you from iTunes.

Ask questions, you are 14, you wont be bothering anyone. If someone gives you
a hard time it is because they are jealous. E-Mail in profile.

------
keefe
have you checked out coursera?

I started when I was 8, first professional programming job in 10th grade...

The jump from intermediate to "complete" is indeed very large, so expect a
journey.

You need to find something you enjoy working on that you evolve over the next
couple of years to learn about software engineering and what automation is
important etc. This could be a game or an extension to an open source game, it
doesn't really matter. It will almost certainly be a failure in some sense, so
it's good to get that first failure out of the way so you can scrap it,
revisit, etc.

I think coursera would be a great place for you to start, though it may
require you to learn a new language (this is one step on the journey towards
advanced in X language, I expect it would be octave/matlab) I'd recommend
doing the introductory machine learning course and whatever other stuff
interests you.

From the quality of your writing, you're quite bright for 14 - so stick to it
and don't neglect your physical health and artistic/emotional/cultural
education because you need to be free of distractions to reach highest level.

------
csalvato
Don't underestimate yourself. Don't be afraid to shine through.

Start small. Maybe start with a single cloud platform, like Evernote or
iCloud. Once you know the ins and outs of a particular platform, and are an
expert on that, move on to the next one.

Baby steps, just keep moving in the right direction and DON'T STOP and DON'T
BE AFRAID.

You are experiencing a fear of success. Overcome it, and just keep your head
down and ship.

------
michael_fine
Hey, I'm 15 and feel like I was just in your position. Emails in my profile,
if you'd like to talk, or you can Skype me at michaelhfine

~~~
pbjorklund
Having a partner to discuss with, learn from and teach makes everything both
easier and harder. But it's not a substitute, rather it's a complement, to the
books suggested above.

Easier because 2 sets of eyes and 2 minds will let you make smarter progress.

Harder because you have to think about the other person. But this is the good
kind of hard.

------
orangethirty
I have some teenagers working with Python on Nuuton and you might feel at home
with them. They are building the main search crawler, and some of the APIs, so
its also a cool and interesting project for you. Send me an email (address in
profile). If anything, I can at least point you in a good direction.

~~~
zbaker1398
This sounds very promising, thank you! But i couldn't find your adress in your
profile. It just said founder of Nuuton under the about.

~~~
orangethirty
I'm an idiot.

Send an email to orangethirty@nuuton.com

------
ashr
Start with www.coursera.org. There, you will find classes with varying degree
of difficulty. If you can, audit a computer science class in the nearby
college/university. Build something that you think you would be able to use
yourself. Build it bottom-up, one small feature at a time.

------
dotborg
Don't waste your childhood on programming. Get some other knowledge outside of
computer science.

------
biscarch
This is going to be short but my advice is "Jump In".

As long as you keep at it you'll learn how to swim in larger and larger
oceans.

You can ask questions on sites like StackOverflow or in IRC if you get stuck.

~~~
zbaker1398
Awesome, will do!

------
hoodoof
Build something small that does a little bit of what you find interesting. Try
to do less. The more you take on up front, the harder and more daunting it
will be for you.

------
pbreit
Check out Web2py which is a simple download and enables super easy development
of Python-based web apps.

------
zengr
Find a mentor.

~~~
zbaker1398
Thank you, I will look into this

------
informatimago
My first advice for you is to read SICP and watch the lecture videos.

SICP = Structure and Interpretation of Computer Programs
<http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html>
[http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-
lec...](http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/)
[http://www.codepoetics.com/wiki/index.php?title=Topics:SICP_...](http://www.codepoetics.com/wiki/index.php?title=Topics:SICP_in_other_languages)
<http://eli.thegreenplace.net/category/programming/lisp/sicp/>
<http://www.neilvandyke.org/sicp-plt/>
<http://www.youtube.com/watch?v=rdj6deraQ6k>

Each programming language comes with its own cultural bubble. While most
programming languages are general enough to be applied outside of their
bubble, you just find more material (books, tutorial, libraries, applications,
etc) written inside the bubble of a given language.

The question you have, is that of the bubble. Some programming languages have
a bigger bubble, which means that by learning a language, you will learn
things beyond the language, in its cultural bubble.

Do not confuse the density of a bubble with its size either. Some languages
are highly popular, with a lot of programmers, blog entries, books, and jobs,
but are nonetheless constrained to a small cultural bubble: anybody can learn
it in three month and get a job, and that's the purpose of it.

But you want a big bubble, with things to learn beyond.

So after reading SICP (which uses scheme for its example), you may want to go
further with scheme or Common Lisp. <http://www.schemers.org>
<http://cliki.net> There are a lot of material, old an new in the lisp bubble,
and those languages give access to a lot of concepts.

Then you may explore connected bubbles, at least: \- prolog for logic
programming, \- Haskell, for functional programming.

You will also have to learn about data structures and algorithms. There are
several books about it, including Donald E. Knuth's "The Art of Computer
Programming".

In any case, you will have to read a lot of books (online or paper), read a
lot of programs, and learn a lot of API, some of them quite big.

Oh, and be sure to write a lot of programs too! It's by doing that you
actually learn what you've read.

But APIs often don't present any new concepts. The best APIs are small, or
require you to use only a small part for normal cases. Well documented APIs
will have a conceptual section, that is the only thing you need to read prior
starting programming with the API. The detailed API references you can read
them only on the job, when you're writing the program using it. That said, it
pays having learn at least one big API well, because it helps you structure
your approach to new APIs. Since you've worked with Objective-C I assume it's
on MacOSX (or iOS), and I would advise you to read all the Apple developer
documentation from end to end. Once you've done that, you will be able to deal
with other APIs easily.

------
yishengjiang
You should become a PowerPoint ninja if your school only offers PowerPoint.

