The Story so far
I was like you once. So were my colleagues. Just another student, graduate, or even an employee. We were all trying to find a new pastime, which could prove to be lucrative in the future. Some of us were geeks and sci fi lovers, some were plain gamers, some liked to party rather than spend their time with a computer.
Yet we’re all in the same world now. A fast paced, ever-changing world of software. And somehow, even though we didn’t have a single clue about code, nowadays we’re learning new things daily, broadening our expertise, working together to bring new abstract solutions to our shared problems, and most importantly, having fun doing so.
Life is a lie
So you want to become a programmer, someone whose only purpose in life is refining caffeine into pure code? You want to work long into the night, being the only person with lights on at 3 am? You want to see the code in traffic lights, elevators and have characters pour down in front of your eyes, just like they do in The Matrix?
If you’ve heard these in the past, let me tell you something: most of it is bullshit. The massive amount of stereotypes concerning programmers is the first obstacle in your way. Working long night hours, drinking tons of coffee and having no social life is not what development is about.
Most people give up by thinking that development doesn’t suit them, or because someone says it doesn’t suit them. Anyone canbe a developer, and earn their living by programming.
The only thing development really does to you is make you think clearly and logically through everything, but it does not turn you into a code spewing machine!
Choose your own path
The first point you need to pass is choosing something you want to spend a few months or years doing. The sheer amount of materials on the Internet is overwhelming. From tutorials (paid & free), Youtube videos, books, to articles, podcasts and who knows what else, the sources are inexhaustible.
How to get pointed in the right direction then? Simple answer — you don’t. There is no right direction, nor one direction that is better than all the others. To each his own. Find something you think is fun, and stick to it.
For example, you don’t have to be forced into doing mobile just because it’s popular right now. You can take up Clojure, and find just as exciting opportunities as you would with Kotlin or Java.
In the future, if you want or need to change your platform, having previous knowledge will supercharge the learning process of the new platform. It all comes down to the same book where only the authors are different.
The Devil is in the Details
Now you’ve chosen a righteous path. But wow, where to go next, there is so much stuff to learn!
If there is anything I could advise you it would be this: never delve too deep into documentation. Reading documentation is one of the core ways of learning new APIs, but often it causes headaches due to too many details.
Once you start reading into a Class, it often is connected to 2–3 other Classes, which of course you start reading about next. Then those Classes are connected to 2–3 more and so on and so forth. After a while you’ve gone so far away from the starting Class that you don’t even know what you’ve been reading about.
Take for example the Android’s Activity. It’s inheritance tree is so large that Android Studio freezes a bit once you start opening it up. Fun fact, you don’t even have to know more than half of it.
So when you’re looking into something new, take 15–20 minutes to check it out thoroughly. If you happen to find anything new along the way, but it would take more than 5 minutes to read about, write it down to have a look at later.
Moreover, if you’re dealing with a problem in your code or whatever it is you’re learning, and it’s taking a lot of time, try saving it for later. I cannot emphasise how many times a complex problem, which had been bugging me for hours, was solved in 5 minutes the day after. Once again the solutions tend to pop up in your head while taking a shower, funny thing.
Go with the flow
Even before you create a steady routine for learning, you’ll set a goal for yourself. A piece of advice: don’t. At least not in the way I’ve seen people do before, which is setting deadlines, or planning out their entire day.
From what you can see above, the curve is not linear, it’s not exponential,logarithmic, or any mathematically representable structure.
Learning development is a series of ‘random’ events which launch your skill level far above. That bit of randomness makes development very unpredictable, even more so because no two persons are the same. Everyone functions in a different way, holds concentration for different periods of time, and can take in a different set of information per day.
This is the core reason why I think setting up certain deadlines, like I’ll learn Rx in a month, or I’ll wake up at 6 AM, code for two hours, then read 50 pages of a book and what not, is the worst thing you can do to yourself.
I’ve seen this happen on a few people so far. Most importantly I’ve seen this happen to me, in my early days of programming (I sound old for someone who’s 21). My first couple of months were:
- Wake up at 5:30 — 6:00 AM (depending on the day)
- 30 minutes of daily human things (hygiene, food)
- Code/read articles/read dev books up until 7:45 AM
- Endure college up until 2:00 PM on average
- Working & learning dev stuff up until 10ish PM
I managed to go a full month or two without losing my mind. The worst thing is, everything I’ve gone through in my study process was only half absorbed. I’ve neither learned much nor have I properly understood the little I did manage to learn. And I was only in the learning process, I hadn’t been on a real project at that time; if I had, I’d have burned out much faster, breaking the project along the way.
So try to find your own pace, learn as you go without forcing anything. If some things don’t sit with you at the time, skip it and eventually you’ll learn that too. No one can know everything, and not at once.
Strength in numbers
Fascinating creatures, ants. The combined mass of ants on our planet is larger than that of humans. They are uncountable, and yet they all (more or less) work together in harmony. A quick biology retrospect, but important for my next point! :]
So far everything’s been about you and you only. The next important thing you have to realise is: development is not a one man job. Most definitely you’ll be working in a team. Even as a freelancer, you have to work with someone else (how else would you work on a project).
Your team may be same platform peers, or multiple small teams of different platforms. Nevertheless communication is the key. I’ve solved countless complex problems in minutes just by talking to my teammates and having a fresh set of eyes gaze at the issue at hand. This goes along with what I’ve said for tunnel vision.
While learning or working, if you talk to people, even if you’re on different platforms, you can face use cases which you’d usually oversee by yourself. Having a healthy, diverse, open-minded community around you is like putting fertilizer on a plant, it helps you grow extremely fast.