This post is dedicated to Tibi, my parent’s godson, who asked me the above question, in a somewhat different form. A bright student now in his 2nd year of high school, he loves computers and sometimes feels that he should be taking advantage more of the opportunities that his generation takes for granted(you know, everyone having computers, internet, access to information). To be honest, his question was actually how can I earn some money after school. I twisted it around trying to cover a more useful area.
Thing is, there is no universal definition for a successful career. At times, peer pressure might make you feel that the money in your pocket is a good metric of it, and for some it actually is. But it’s not enough. You will discover that short-term financial success can sometimes prevent long term one. Or that blindly looking for financial success might prevent achieving personal success and happiness.
Invest in yourself and in your skills. Skills, knowledge and experience remain with you, while material possessions can be lost, stolen or will eventually get old and out of fashion.
Out of the things I learned in high school, the most useful for my future were:
Do as many things as you can, try out new skills and hobbies. There is so much more to life than you know right now; without knowing, you might be the worlds best magician, scuba diver or astronomer; maybe one day you’ll discover you love to cook and decide to quit your “normal” job in order to start your own restaurant; or that you can make a living as a cartoonist. Even if you don’t decide to change your job later in life, having hobbies and various interests is a great thing – you should be more than your job – you should a person, and an interesting one.
That’s enough generalities – you wanted actual advice to prepare for a career in programming and/or making money with computers
First of all, know this: if you love computers, you will probably hang around them even if your college degree doesn’t say so. I know philosophy, journalism or finance graduates who make money from software and online products. So don’t sweat it too much, and if you want to learn anything else you can still do it. Just keep in mind that if you really love to do something, you should try to become better at it as soon as possible – it might make you richer than you’ve ever dreamed (just ask Bill Gates, Mark Zuckerberg and others).
Whatever your future, there are some skills you should learn that will make you a better computer geek, with a more valuable skill-set. This is my personal vision and it’s not in sync with what you’ll read on most current job requirements. They also don’t apply to those highly paid computer specialists that create really cool things, but to the large mass of computer programmers and other computer geeks.
Non-programming: just like for general advice below, you should diversify your skills. Learn the basics of productivity, good photography, design or usability. Try to learn to use Adobe Photoshop, Illustrator or their various alternatives. You can also learn to create music or other forms of digital art. Even if you don’t become a professional designer, you will still find uses for these skills. Or, at least, they make for cool hobbies.
Learn to program: by programming I mean being able to implement algorithms(search algorithms, sorting, etc). You should have a good understanding of functions, pointers(what they are, how they work), data structures(arrays, matrices, maybe lists). You should also how object-oriented programming works and how to use it in your language of choice.
Learn to develop software. Writing a program that adds a+b is easy. Writing a calculator app with a graphic user interface and even a scientific entry mode is a slightly more complex task. Writing a web-based software app that lets people make friends, post messages, comment on others postings, upload images and do this while handling hundreds of millions of users is an incredibly complex task – which surpasses the skills of any single person.
Software development is more than knowing the language and how to program. Software, in my definition, refers to complex programs: programs that involve multiple source files and resources, multiple developers, and that do more than a basic function. Learn to use other people’s code, learn to interface with it, learn to work in teams, learn to fix bugs, etc. There is a lot to learn, and it never ends (which is also why software development is very often a cool and exciting job).
If you follow the above, you should now be on your way towards a career as a freelancer (working for others on a per-project basis) or employee (working for others for an undetermined period). I don’t need to explain how you can become an employee – find a job posting, answer it, repeat until you are hired. For freelancing, you need to find clients(either online on freelance-related websites or offline, through word of mouth) and do good work for them. The first projects will probably bring you little or no money, but they help build a portfolio and reputation that can attract more clients.
There’s also a 3rd option: entrepreneurship – aka working for yourself and, on cases, hiring others as well. Successful entrepreneurship is a skill like all the others, and you can and should train it as much and as soon as possible. Instead of not doing anything because of fear of failure or laziness, try to cultivate your entrepreneurial spirit by actually doing things. You might fail, but that’s ok – the point is that you’ll need to get up and try again, with a different idea.
There’s always money to be made if you are a strong-willed entrepreneur – you can always find services or things to buy and resell. The secret is finding which ones, how and to whom.
On the top of my head, if you know English and know how to write, you can start a blog on a given topic, try to promote it wherever you can, then add advertising to it – if you are lucky and inspired, you might end up earning thousands of USD/month from it; if you aren’t lucky, you still would have learned more about online marketing than you could learn in school. Alternatively, you can post videos on YouTube(and monetize through advertising) or write ebooks on particular subjects and sell them on your own website, Amazon or iBookstore. You can do the same about pretty much everything else – sell photos on stock photo websites (Fotolia or others), recorded sound effects or even music compositions.
As you guessed, trying to make money online is easy – and the reason there are thousands of “make money from home” books around. Really making money is more complicated – it takes experience, skill, and probably repeated failures.
In my case, as a programmer, my best bet would be to try to sell software – either as an online app which people want to pay to use, or as downloadable apps(which you can sell on the dedicated marketplaces – mobile apps for iOS, Android or Windows Phone, desktop apps on the Mac App Store or as shareware, etc). Developing great apps that people would pay money for is, as you guessed, more complicated also – and not something you can really teach. For me it worked, and has done so for the past years. I was lucky and inspired at first, and in time I got even better at it.
Repeated trials and failures are great teachers. You might get lucky from the beginning, you might get lucky later on, or you might simply never be lucky and base your success on skill and experience alone.
Whatever path you chose, just remember that the sooner you start your journey, the more time you have for it and the farther you might get to. So… good luck!