top | item 4653053

I am a 14 year old programmer. I'm stuck.

19 points| zbaker1398 | 13 years ago | reply

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!

35 comments

order
[+] geofft|13 years ago|reply
> 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|13 years ago|reply
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|13 years ago|reply
Could you point out some of the projects that have those beginner type lists? Could be useful as a starting point.
[+] gruseom|13 years ago|reply
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...) 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|13 years ago|reply
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|13 years ago|reply
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|13 years ago|reply
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|13 years ago|reply
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.
[+] jameswyse|13 years ago|reply
This is a great idea, you can also make use of the free accounts offered by Heroku, Amazon Web Services, etc which are definitely good enough for learning.
[+] saluki|13 years ago|reply
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|13 years ago|reply
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|13 years ago|reply
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|13 years ago|reply
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|13 years ago|reply
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|13 years ago|reply
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|13 years ago|reply
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|13 years ago|reply
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|13 years ago|reply
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|13 years ago|reply
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|13 years ago|reply
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|13 years ago|reply
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|13 years ago|reply
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|13 years ago|reply
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.
[+] ashr|13 years ago|reply
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|13 years ago|reply
Don't waste your childhood on programming. Get some other knowledge outside of computer science.
[+] biscarch|13 years ago|reply
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.