I am a high school student due to graduate in one month. After which I want to take a gap year to give myself completely to computer programming. I would appreciate your ideas for things to do in this one year, so as to gain maximum from this gap year.
Find the best programmers you can and work with them. Be a volunteer intern or anything that will get you in their company and let you watch them work. Books, theory, SO are all great but what you could learn in one day just watching a great developer in action who will answer your questions is invaluable.
Build something. Have something to show what you've learned and your ability to apply it. With a full-time effort for one year, it should be a lot.
This is a profession that will try and help people if they are sincere and willing to give an effort. Your one year self-study is a perfect example. Make sure they understand you aren't just goofing off.
Addition: Learn something other than programming. Economics, poetry, accounting, art, oceanography, anything. Develop two hobbies: one you can do while you're young and another for life. Find an activity you love that you will do until you break a sweat. Join a social organization that is not technically related. You will find a lot of your interactions with people who aren't technical, so you better learn to get along with them.
If all you end up with out of this experience is code, you failed.
I think a Gap Year is a bad idea.
I think for your professional career you need to have a mixture of a professional training via college, and practical experience by working on your own projects on the side.
That way you gain practical experience you can add to your profile, and get the round experience that manager's love to hire for.
Yes I know college can be an incredibly expensive waste of time and money, but most manager's refuse to consider practical experience, without a college degree.
That's an interesting idea, although I don't know that giving yourself "completely" to computer programming is going to be the best way to use this year, because you can pretty much do that at college if you want to and you'd have lots of expert resources that are being paid to help and guide you.
I also disagree that an open source project is best use of this time, not that getting involved in one is a bad idea but make it a side project.
I propose that this is a good time to decide:
- What kind of programming interests you most, what problems do you want to solve?
- What kind of work environment do you want to be in?
- Where do you want to live after college?
Travel, volunteer, intern. See what's out there and make some general plans about where you want to go in life then test the waters and see where it takes you! Good Luck!
I would get involved in an open source project or start your own.
Developing on your own is one thing it however it all changes when you have to work with others. It will also teach you many of the things such as source control that you would need in a commercial environment.
Finally having contributed to an open source project gives you the opportunity to show something to future employers.
The best thing you can do for yourself is to study techniques. Knowing the syntax of a language is relatively simple to learn for a programmer. The kinds of thing that take years to unlearn if you start off on the wrong foot is the extreme programming mentality which might be good for getting code out quick but it'll make your life hell later.
I would take John's advice and start an open source project. Good languages for this are C++ and Java. Take your time and study how to do it well, including spending a good bit of time designing the code before you write a single line.
Study a little computer history. Read books like "The Cathedral and The Bazaar" and "Masters of Doom". Check out the history of programming languages. Learn your roots. Understand how the pioneers of the industry have made your life easier.
Find a hackerspace or user group in the area, and get in touch with as many other geeks and professionals in the area as possible. Learn from them.
Dive right in.
Pick up a book on a language that interests you (The O'reilly books are very nice for learning a new language), then dive right into a personal project you think would be fun to work on. The only way you are actually going to learn is by doing, messing up, and doing it again. It will be challenging at time, google is your friend, stackoverflow is your friend. You will write bad code, but that is the best way to learn how to write good code.