What should a high school student learn to best prepare for a successful IT carreer?

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.

Some general advice

  1. 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:

    • a. language proficiency: if you aren’t a native English speaker, then achieving English mastery is probably the best investment in your future. Knowing to speak and write good English in addition to your main occupation can boost your career or open up new opportunities. If you are a native speaker, fluency in a different language(Spanish, Chinese, French, German, etc) will help you stand out from your peers
    • b. there’s no time like high school for developing your intellect, culture and general knowledge – fields usually ignored when we get hooked to the online world. Solid general knowledge will make you look smart(as long as you aren’t being smug) which in turn will make people admire you more(helpful both in personal life – such as when flirting with the opposite sex and also in your career). Basic geography, arts, history, literature, sciences or maths will be needed all through your life – the sooner you know them, the better you’ll be.
    • c. learn to write, to express yourself using words on paper (or screen): not only in Facebook comments, but as essays and longer articles. You’ll definitely need these skills in the future when writing emails, reports or business letters. You can also use them to make extra money. Journalists aren’t the only ones getting paid for their writings: so are book authors, bloggers or copyrighters in ad agencies.
    • d. computer literacy: no longer a “nice to have” but a “must”. Stop using that computer only for games, emails, messaging or Facebook flirts – learn to use it as the valuable tool it is. You should be able to learn unknown software, search and find obscure information, centralize results in spreadsheets, use software tools to communicate, create and organize. Learn how computers work, what an operating system is, how programs are written, how a web page is created and where it lives. It’s knowledge that people in this age are required to know, in order to comprehend what’s happening around them.
    • e. invest in your future: great academic results will help you get to a good college. Try to earn scholarships to foreign countries – living, studying or working abroad is among the best investments towards your personal development you can make.
    • 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.

    • Never forget to explore. Discover what you love to do, and try to get better at it. Not all jobs are well paid, and definitely not all of them are fun. Eventually you’ll want to find a way do what you love and earn your living doing it. For instance, if you love drawing but aren’t successful as a painter, you might consider a day job as a graphic designer, still doing what you love but also being paid for it.</ol>

    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.

    1. 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.

    2. Learn more than one programming language: there are good or bad languages to start programming with. I recommend learning programming with Processing – a simple language with very low friction(you can quickly install it, play with it and see results) and quite similar to other languages (Java, Javascript, C/C++), which will ease the transition to them. There are some cool languages that will make you feel good and make you a better programmer – like Python or Ruby. Or some hot ones that will help you get a job quickly – Javascript, Java and Objective C.

    3. 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.

    4. 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).

    Making money

    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!