I'm a 16 year old high school student, with a passion for computer programming.
I'm in grade 11, and I've been learning it as part of the school syllabus for about 8 months.
I've gone beyond what's being taught at school, and witten a few (reasonably good) applications. The language that I program in is C++, on the windows platform.
Eventually I'd like to major in CS at a good college and then work as a programmer.

The specific questions that I have are:

What is a good place for me to get my work noticed ?

Are there any journals, or publications specifically for young programmers ?

If not publications, then are there any good blogs, or is it just better to start your own ?

Is there anything else, that would help me get noticed as a programmer ?

I've tried to be as objective as possible.

If all this was tl;dr:
What's the best way to get noticed as a young programmer ?

Edit:
I am not looking to get hired straight out of high school
The aim is not to impress the community as a professional programmer.
This is with intent towards college applications where having your work seen and critiqued by other people will improve your application. I am not looking to earn money from what I've written (so far).

This question appears to be off-topic. The users who voted to close gave this specific reason:

"Questions seeking career or education advice are off topic on Programmers. They are only meaningful to the asker and do not generate lasting value for the broader programming community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – Thomas Owens

@viraj I applaud your enthusiasm and the good answers here. My suggestion to you however is to not let it consume your early life. Take up other hobbies and interests, socialize and have fun, you can only be a kid once in your life, where you can screw things up and bounce back unharmed. Once you grow up and have a career, you will likely have it for the rest of your life. That is a pretty serious committment to make at such an age. You don't want to become like so many where they obsessed over the careers at a young age and then hated their lives later and had a horrible mid-life crisis.
–
maple_shaft♦Dec 28 '11 at 17:39

4

@FrustratedWithFormsDesigner If you want to get into a Top School without Top Money then it is harder to get in.
–
maple_shaft♦Dec 28 '11 at 18:40

10

@maple_shaft Your point is good but if he is really passionate about programming, you don't want to turn him away from it - imagine telling the young Bill Gates / Mark Zuckerberg "don't spend too much of your youth on programming, you have the rest of your life". The advice should be focus on your interests and passions, not your career.
–
Kirk BroadhurstDec 28 '11 at 22:39

20 Answers
20

Don't over-estimate your knowledge: right now I can assume you know enough to write a simple application and more than what is actually taught in class. But that doesn't make you a "professional programmer"; it can make you a "freelancer" at most.

Don't under-estimate the value of what is taught in school. Even if something may seem obvious to you, study it as well: you'll see "new aspects" (I'll be more clear later) as you will proceed.

Suggestions:

Professional applications have typical life-cycle of 3-5 years and require thousands (up to millions) man-hour working. They cannot be deployed by a developer alone. Professional programmers have to work with others. It's not just a matter of good knowledge of tools (like languages, IDEs etc.) but also of techniques, methods and idioms.

While tools can be taught by formal samples and exercise, techniques and idioms can only be "described". To "learn" them you have to experience and share the experience with others. They are continuously invented and improved.

Companies, when hiring from school, check your understanding of tools and your ability with basic technics, but - most important - test your capability in rapidly learning new things and "capture the work" as it is needed.

When hiring for experienced people, they look at how many things they have done and what experience they got from those things.

Moral:

If you want to be more "evaluated" learn to work with others, by participating in other's problems (like on stackoverflow) or open projects (like on sourceforge)

Also, don't be too fast to ask for money; split your "code production" in "something to share" and "something to sell". What you can share can be used by others but can also attract the participation of others to expand the initial project. What you can sell is what makes your app "unique" with respect to other similar projects, leading it to become a real commercial product.
To share code with others, you can refer to site codeproject or sourceforge. Their rating also gives an idea of how interesting what you did was to other people.

+1 for mentioning overestimating your knowledge. When I was in high school I was writing some cool things and thought I was a decent programmer. Then I started going to college and realized I wasn't even close to being at the professional level.
–
Mike L.Dec 28 '11 at 17:33

+1 for overestimating your knowledge. I can't tell you how many resumés I get a week that state they're "expert" at every skill listed. Doing that only shows your naivety.
–
Jesse BunchDec 28 '11 at 21:34

5

Funny thing, I know a few people working professionally writing code with a 3-5 year degree in computer science who couldn't program themselves out of a paper box... Just saying that someone with motivation to actually learn good practices at home is often miles ahead of many people working professionally.
–
MaxDec 29 '11 at 16:08

Have you thought about creating open source projects for the applications you have written and hosting them online? SourceForge.net or GitHub.com are good open source project hosts. This will help gain visibility for your applications.

The feedback on these sites may also be direct, brutal, or maybe your projects will get ignored. The important thing to take the feedback for what it is, and make improvements. Make sure to think of the community as something that is there to help you and it will.
–
jeffluntDec 28 '11 at 17:46

First of all, let's be clear: most of the 16 YO programmers will not really impress the community.

There is a reason for that in my opinion. Being a good programmer does not only rely on programming skills. As you hopefully see during your CS major, programming is only a subset of computer science, and most of the people winning prizes (academic prizes at least) will have done so because they proved something new (a new theorem for example), or discovered a new way to achieve some kind of task (design patterns). In order to do so, you need to (at least):

Get a good background in math, it is required to understand algorithmics and hence master the different data structures.

Understand that a good programmer first understands the paradigms (object-oriented, functional, ...) before being interested by a "concrete" language.

Understand that good programming often also comes for code modelling, and learn the existing design-patterns.

If you feel you have already mastered all that, then yes, you will probably impress the community.

You can always try to contribute to an open-source project, but you might be also quite surprised how much you have to catch up before actually being able to contribute.

Finally, have a look around on StackOverflow and see how much you can answer there in your favorite language... you'll have a good proxy of your level.

In addition, getting high rep on SO is great fun and you learn a lot along the way from reading, posting and answering questions.
–
Paul HiemstraDec 28 '11 at 18:00

1

In my opinion, high reputation on SO means "I spend a lot of time on the site answering tons of basic questions that every programmer can relate to". I wouldn't give much thought to it. (Note: you can still be an expert AND have high reputation on SO)
–
siamiiDec 28 '11 at 19:36

Write software that solves real problems, ideally problems that haven't been solved before (or at least not satisfyingly so). If nobody uses your software despite your best promotional efforts, chances are they simply don't need it that desperately.

Announce your work on relevant mailing lists, IRC channels and internet forums. If your program makes extensive use of some library, consider posting to the library's community; if it complements other existing pieces of software, announce to their communities, etc.

If it's a serious enough project, set up a dedicated web site for it. The web site should provide a feature summary, links to downloads and documentation, and (if applicable) a few screenshots. Make sure it's a proper website, not some ad-ridden cheapo geocities-style abomination - you want to be taken seriously, so act upon it. Adding a news section, a wiki and / or a bug tracker gives potential user an indication how active the project is, which can work for you or against you (if the project is not very active after all).

If it's an open source project, host it on one of the popular FOSS hubs (github, bitbucket, sourceforge if you have to), and (see above) expose the wiki and the bug tracker (but only if you use them regularly).

Whatever you do, provide good documentation. You need both a short "getting started" and a full reference. If you don't have the first, people will find your program too hard to use. If you don't have the second, people will stop using it because they can't find the information they need.

I'll follow on Bernard's answer and add a little more. There are so many OSS projects out there that it still can be hard to get noticed unless you create a popular project, which isn't going to be easy for a programmer just starting out.

Assuming you are trying to get noticed in the programming community, I'd suggest publishing (either OSS or closed source) add-ons for tools that programmers use. Imagine going into a job interview and being able to say that the company is already using software that you wrote. Lots of developer tools have APIs for creating add-ons and several even host "App Stores" where you can get some exposure for your tool without worrying quite so much about marketing it.

If you want to get your software noticed, the best way is to have people using it. Although Bill Gates and Mark Zuckerberg were great young programmers, there were lots of better programmers. But these two gentlemen got lots of people to use their products and are therefore better known for their work.

To get people to use your code you could:

Sell your product to lots of people. For example put up a mobile app at an app store and track downloads, purchases and continuing usage.

Get lots of people to use your product, and make advertising revenue.

Get lots of developers to develop products which work with your product. This is hard.

Contribute to a popular open-source project so that your contributions will be used by lots of people.

In my opinion, software is almost irrelevant without providing benefit to users. And you will get noticed for solving problems which people care about, and that is a very rare skill.

Google Summer of Code is a global program that offers student developers stipends to write code for various open source software projects. [...] Through Google Summer of Code, accepted student applicants are paired with a mentor or mentors from the participating projects, thus gaining exposure to real-world software development scenarios.

You have to be 18 to participate, but that isn't far off. I know some people who participated and had a great experience. Because all your contributions are to open-source programs, they are public, so they'll be noticed.

Since you are under 18, Google also has a GSOC-like program for pre-university students (13-17 year olds) called Google Code IN.

"Programmers" - These include 16 year old self taught and 99% of the available "software developer" work force in china. They can get the job done... sort of.. in a minimal sense, but have little ideas of concepts such as design patters, maintainability, robust/defensive coding, algorithms/data-structures and other things that like efficient use of source control software. They have the ability to effectively read documentation and use most APIs.

"Average Electrical Engineer" - 80% Electrical, 10% computer science, 10% software engineer.
Proficiency with electronics, but just about as much programming as the typical "programmer". Logic and critical thinking, and management skills from the electrical side will help though.

"Computer Science" - Dijkstra once stated: "Computer Science is no more about computers than astronomy is about telescopes." Computer Science is more about math than it is about computers. This includes the ability to develop, understand, and classify complex algorithms and data structures.

Notice, I used the word "Average" above. Depending on personal interests and job experience, these percentages can change drastically.
These are just over-generalized stereotypes. Don't judge a book by it's cover.
I am also just BSing percentages from my experience.

Your different types of programmers is complete nonsense. You cannot be an effective programmer without software engineerning. Computer Scientists use software engineering all the time. Your seperation of "electrical engineer" is complete nonsense, there is little difference between a computer engineer and a computer scientist.
–
RamhoundDec 29 '11 at 13:56

I am a freelance programmer. Programming has been my primary income since I have graduated high school 9 years ago. I still intend to get my degree, but at the moment the time still isn't right for me.

My path to self driven recognition was as follows. I'm not saying that these steps will make you recognized by the programming community, but it will help increase your credibility when it comes time to interview.

Even after I was fairly versed in programming IMO at the time, I went back to the basics and went through tutorials and built myself a portfolio based on inspired works from those. I also began to force myself to comment my code in a JavaDoc-esque fashion. The portfolio may not be filled with glitz and glamour right now, but it gives you a baseline that you can build off of and eventually replace what you have in there. I then had a set of demos and code samples to show to prospective clients. This is essential in getting your first job. Nobody wants to hire someone that doesn't have any experience, however, there are a number of individuals who will give a chance to a promising looking programmer that doesn't have professional experience.

I later analyzed these programs and began to write libraries based on my commonly used tasks. With my new libraries I began looking at CompSci problems on the internet and began timing myself on how long it would take me to build a solution with my libraries. This would give me a baseline in the future as to what I should charge for a specific task.

It wasn't until then that I had discovered open source. I looked through the projects on sourceforge in the language I was interested in and found applications I could make use of. I installed these applications and began using them as a part of my every day computing experience. I was able to see the strengths and weaknesses of these applications as far as my every day interaction was and I began to extend them to suit my needs. I would submit my patches to the community developing to be reviewed, and after a few I would apply to become a member of the project. This is where I learned to use the different tools used when working in a team that took my "vast experience", as I considered it at the time, and took it to the next level.

I adapted all of my practices that I had picked up working on open source projects and implemented comprable solutions when I was working as an individual. I began seriously pursuing a career as a freelance developer and joined a number of freelance recruitment sites. I looked at what the popular jobs were, and began applying. For every job that I would get turned down, I would still complete it for myself as if I had obtained the job to expand my knowledge. This would help build my portfolio and introduce me to some real world challenges. When I finally did get that first interview I was straightforward, told them that I didn't have any professional experience. I then began to tell them the open source projects that I had worked on, what I had accomplished there. Some major hurdles I had come across, and how I addressed them. I was able to offer a portfolio of working applications and example code based on my experience as an amateur, and they took in all of the information and provided me with the opportunity to step in to the freelance world.

Learn as much as you can. This can be done by books, forums, classes, but most importantly by actually programming (and getting critiqued). If you've outgrown the programming classes at your high school, see if a local (community) college has any good CS classes that you can take (maybe over a summer or as a night class); or try taking open course ware from MIT/Stanford types.

Demonstrate initiative. Saying you know C++ will be totally disregarded. Saying you have dozens of commits to a list of open source projects demonstrates you know something, etc (though be careful; don't just commit for the sake of committing). Start your own open source projects. This isn't going to be something you do in an afternoon; but something that becomes your baby over a period of months. Write and publish an android/iphone app that does something useful and gets people to download it.

PS: Its been a long time since I've applied to college -- they still give you an opportunity to list things like this, right? (E.g., a section about hobbies, or a essay question about your interests).

I respectfully disagree with those who answered "don't overestimate yourself"!

If you have a love for programming at your age, go for it, you are probably great and greater than other kids your age, and by the time you are a veteran, you might be the next Brian Kernighan, Edsger Dijkstra or Doug Lea!

I would suggest learn IPhone or Android development, and build some real apps.

Get great at something and while you are getting there, speak at conferences and write articles, that will get you noticed, and will polish your skills.

I have been programming since the late 70's, and in Java since 1996. I can tell you the most important Java book I ever read was the Gang of Four Design Patterns, which was written a decade before Java was invented. Read it and be great!

The highest paying industry today is financial, but that is changing rapidly. I believe it will come back, but you never know!

Build a web app that works well on the iPhone and Android (ignore standard browsers for now) and take advantage of HTML5's extended features (https://developer.mozilla.org/en/HTML/HTML5) to overcome latency, spotty network, and the limitation of phone browsers. This most likely means delivering a javascript+html5 browser app that connects to a server-based api. (pick xmlrpc/json/yaml, not SOAP). make it screaming fast. On the server, I recommend using cherrypy in linux (debian) on cheap VPS. You can get some at 123systems.com, buyvm.net (preferred but often not available) for under $4 a month. Learn to use Python, and use Fabric to deploy your stuff to your server(s). Get a .info domain at namecheap.com for $2.99 a year, and use dnsmadeasy.com for DNS (more expensive, but worth it-- been using them for years, never had a single issue) where you can do load-balance via DNS. Also, don't be put off by databases. Use sqlite and learn to design your tables manually with sql statements. Finally, with one machine you can probably handle 30,000 users. (2,000 simultaneously at one hit to server every 3 seconds). Remember to cache as much as possible in HTML5's storage.

If you do this, and you blog about it and twit about the blog entries and your progress, you will definitely get noticed. Granted there's a lot to learn, but you can do it!

Just about anywhere on the internet - if you write something worth mentioning, such as a utility that does something neat or unique, that a large number of people will use/download - then you've already accomplished the larger part of this task. Cool, useful, and available applications, advertise themselves.

Are there any journals, or publications specifically for young programmers ?

If not publications, then are there any good blogs, or is it just better to start your own ?

You're already here - this is just one, out of many communities, that out of the shear desire to share, and to be known for knowing - other people are more than happy to link topics of merit, to the current discussion.

Is there anything else, that would help me get noticed as a programmer ?

Just program for the sake of programming - as long as it's productive, creative, and useful - notice will be taken.

One point that I see mentioned in other replies, that I stand by as well, is contributions made towards open-source projects. The only way to get better at coding, is to code - and what better way to do that, than to solve current problems. Because, without a problem to solve, you're coding in vain... oh, one more thing, never mind the grumpy old guys, with their bloated, and intentionally discouraging, "young whipper snapper" comments - you're young and enthusiastic, that's all you need.

If i were you i would make my knowledge known threw my work, you say you program in c so start making programs that's geared towards the everyday users Pc experience, make things like youtube downloader and start your own dev team hey man im only 19 and i started programming 4 years ago and get this im a young black guy from the hood.... so i could understand the passion you may have for programming but at the same time programming could take alot of your time, and effort, give yourself time to live... meaning all that time siting at a computer can be stressful on a young boy.

I think jQueryUI might be the best place to start. It is fun and visual. So you can go on the jQueryUI developer forum on the jQuery site and ask to be a contributor.

I think you will be demonstrating great passion and dedication for programming more than you will be demonstrating great skill. But don't let that stop you! I strongly encourage you to be involved.

At this point you might have to settle for doing QA. QA is boring but you can accept it and show dedication. But from there you can contribute a bit of code and maybe make plugins.

If you ask to be involved in something and they make it difficult, it is because they are assholes. Just look for a project where the people are encouraging and nice.

After you find a project with encouraging, nice people and you contribute, you can ask one of the adult contributors or hopefully one of the people in charge of the project to write you a short letter of recommendation.

There are tons of places to put your work up to get recognized, but while you may consider your work top notch, it may just be a simple day at work for some. When I was 16, I thought my work was awesome, I was doing some cool stuff, but I am actually working in these fields now, and where I was then is nothing compared to where I am now, and I still am a long ways off from where I want to be.

If you want to get noticed AND make some money I would recommend mobile development on iPhone or Android. You already know C++, which is a great start. For native development on iPhone you'll need Objective C, and for Android you'll need Java. Both are similar to C++ (Java is easier since there's not memory management), and will not be too difficult to learn. So not only will you write applications that will get you noticed, and make you some money, but you will learn new languages and hot platforms in the process.