Many times after finishing courses – online as well as the offline ones – I had to answer student's questions, which can be called in general: «What's next?».
Different people state this question differently, depending on their temper and mood: «what to learn next», «can I send resumes already», «how to look for a job», «what to do now» — but, this way or another, a lot of them try to discover the next steps on the way to professionalism.
Since I am lazy, I decided to collect all my usual responses to these questions in this short article, in order not to repeat myself. (And since I am incredibly lazy – I have been writing it for half a year.)
So, the question:
I have completed the course (read the self-teaching guide/written my first program/watched 10 video tutorials) – what's next?
The most important point. The study should not stop after having got some certificate, having read a book (and even having got a degree). In our field you should learn constantly, non-stop. No way this means that you should learn «all the programming languages» (or even the top-5), as well as «all the databases» or, say, «all the frontend-frameworks».
But «don't stop» means trying to get better all the time.
Think that you have learned Ruby and all of its secret features well enough? And how does it all work inside? And how does it all work in other languages? And what are the ways to write the code more shortly and clearly? Or build a reasonable architecture for the big projects? And how do you evaluate the code efficiency and improve it?
Have made an application with databases usage? And can you write a query in plain SQL? And how about normalization and denormalization, query plans and their optimization? And what about general understanding of differences between popular Dbs, and what is NoSQL and why do you need one?
Have drawn a cool modern UI and made it move? What's with your understanding of frameworks, ES6, HTML5, CSS3, common UX and design principles?.. So, I think you got the idea.
Getting busy with your further self-education, it's very important not to concentrate on one, too narrow field. In 2017 «a web-programmer in Ruby who can do anything» is very much like «a worker with a shovel who can do anything» – a laborer, in itself. And even if you are a Ruby-expert – often it looks like «a worker with a VERY good shovel».
Knowing some modern fields of usage of your programming skills (and even more important – curiosity towards them) – that's what you should think about.
What's at the top of technological news?
Games (always!), mobile technologies, virtual reality, big data, cartography, social structures, robotics – something in here jangles neurons? Buy a book, download a course, try to make a demo. Even if it seems like «I can't even program well yet» – often it's much more useful to be a junior, who can say «yeah, by the way, I know a little about neural networks... just read some books, but can imagine a » between this and then, than to be a junior, who learned only Ruby on Rails + PostgreSQL + AngularJS, for example.
(I hear a quiet thud: this is my colleagues and students fall unconscious.)
Yeah, as much as surprisingly it is to hear such words from a teacher. The thing is that programming is a very practical profession, on the lowest levels – in general, a skill. A programmer who has completed 184 courses and knows all the classic books about the proper architecture by heart, but never has been messing around with a real project, is like a carpenter who has been studying in the University of Carpenting for five years but never has held a plane in his hands.
A lot of skills and approaches are sharpened only «in fight», and a «teaching project» picked by a mentor is not very good for this. More than that: An apprentice of the carpenter who isn't interested in trying to hold a plane in his hands himself or to learn how to make this stool – is almost a gone case.
However, books, courses, articles, presentations are useful. If not alternate them with practice, you can stay «a carpenter-theorist» for all your life. But if you ignore them at all, you can stay a skillful apprentice for all your life. Not the worst fate, in our profession even apprentices earn a lot... But it's a little shameful. And it's much less than you could achieve by a well-balanced self-education.
In my experience, after the previous point's recommendation a lot of people usually say «yes, but...» — «yes, I would like to take part in a real project, but where can I find one?.. no one wants to take juniors without experience even for an internship...»
Now: want to earn experience – don't save yourself!
- Is there a genius idea you are going to realize one day as a paid service, sell it to Google and live off the interest all your life? Make some kind of it as an open source library. Chances are that there will be thousands of such ideas, and this one will extremely go out of date. But if not – you have put a stake in the ground, it's cool.
- A thought ran by «I wonder if...» – if it can be found out by programming, go on and find out. Catch rare tickets to a distant town? Calculate how much neighboring supermarkets differ in prices? Compare and find out how the average velocity of «formula-1» has been increasing for the last 20 years? Save all your home library to a database and sort it by genre? Have caught a thought – do it! It's likely that there will be no super-interesting result, but you will earn the «puzzle out some data» experience.
- You are offered a free internship? Make sure that the company is cool/the project is interesting and run for it! It doesn't take an expert to write in mailings «professionals don't work for free». But to get involved in an industry project with zero experience is beyond price.
- Somebody is looking for programmers-volunteers – say yes. Social projects, a website for school, hackathon on the city's open data. Be ready to realize that nobody needs your work – except for you. But it can turn out the other way.
- Finally (but in fact - firstly), there is a huge number of extremely cool open source
projects – and a lot of them are ready to take newbies, look at their code, comment it
politely and give that very opportunity to grow in fight. How to find them?
- try to make something and think – what the libraries you used lacked? It's very likely that nobody has ever thought about it or had time to do it;
- there are a lot of different initiatives hiring students on popular projects; for example – Google Summer of Code. As part of this project, Google even pays scholarships to students, but even this is not the point – the point is that all the announced projects are quite popular, but ready to take newbies and teach them at the same time.
The most important thing: taking part in yours or somebody else's project, not once you will feel that you are «wasting time» or (if you are lucky, but it happens very often, though) «having fun» instead of improving yourself or looking for a job. Don't believe. If you are writing the code, that is needed, at least supposedly, for some reason, you are doing the right thing. Even if it is the script for accounting the pots of the nearby kindergarten or the catalogue of your porn films.
At first, everything will be bad. Almost for sure.
If you are not a great genius-the-savior-of-mankind (cool, if so!), then it's very likely that:
- at interviews people are going to make fun of your experience «two courses, three books, one repository»;
- in open source projects your pull-requests are going to be rejected with caddish comments;
- your own projects will be ignored at best, but mockingly and nastily commented in the spirit of «who on earth needs that shit and why it is written so badly» at worst.
The worst thing that could happen to a programmer is turning ahead of time into a grandpa-on-the-bench, who writes on Habrahabr mean posts «why technology X is a bunch of shit», or «how the community of the language Y humiliates newbies». This is a way to the profession «famous publishers nobody needs», respected, but useless.
And the best thing that could happen after the first round of rejections, critics and ignoring: take into account all the constructive, forget everything else.
And, between this and then, memorize. And remember it several years after, when your libraries will collect hundreds of stars on github, recruiters will line up, and new technologies will be conquered at the drop of a hat – remember this period of time, and be kind to newbies.
And what were your first steps after completing another course? Tell us in comments, share your experience with readers.