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|13 years ago|reply
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
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
[+] [-] gruseom|13 years ago|reply
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
Google Code-in starts next https://code.google.com/opensource/gci/2012/index.html .
"The tasks are grouped into the following categories:
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
[+] [-] rickdale|13 years ago|reply
[+] [-] saiko-chriskun|13 years ago|reply
[+] [-] jameswyse|13 years ago|reply
[+] [-] saluki|13 years ago|reply
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
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
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
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
[+] [-] lsiebert|13 years ago|reply
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
[+] [-] jason_slack|13 years ago|reply
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
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
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
[+] [-] pbjorklund|13 years ago|reply
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
[+] [-] zbaker1398|13 years ago|reply
[+] [-] ashr|13 years ago|reply
[+] [-] dotborg|13 years ago|reply
[+] [-] biscarch|13 years ago|reply
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|13 years ago|reply