Table of contents
No headings in the article.
That was clickbait. This is lesson number one. Don't trust articles that promise fast results, they're probably selling you something. I really am sorry for that, but I promise that the rest of the advice is worth reading. Here's my method of learning that I've tinkered in the past few years of programming.
Idea 1 : Optimize your Digital environment for learning
If you're one of those people that can keep your phones away and focus on your studying or work, then great! You've won at life. I on the other hand, having the attention span of a pigeon, get distracted easily and make no effort to get un-distracted and focus on work. So, I try to optimize my digital environment in a way that is learning oriented in at least some way, which includes things like:- Having a separate, learning only account for YouTube, and also follow learning channels on your main account
- Following programming related accounts on Instagram
- Using twitter to document your own / follow other people's learning journey
- Reading Shaunak's blog on Hashnode instead of useless news (Shameless plug)
The idea of this isn't to turn your entire online social presence upside down and become a complete nerd ( though that might speed up learning quite a lot) , but to incorporate small learning elements into things that you're going to do everyday, so that you'll keep learning stuff here and there.
Idea 2: Ride the recursive highway to bliss
Early on in programming or when learning about a completely new topic, you're going to get stuck on a concept. This will happen a lot , and it sucks. This is when you'll learn to ride the recursive highway to bliss. It's a simple idea:- Step 1: Get stuck on an idea
- Step 2: Google said idea.
- Step 3: Get stuck while understanding said idea
- Step 4: Google the sub-idea that you didn't understand
- Step 5: Repeat steps 3&4 for a long time
- Step 6: Understand the latest idea, and consequently understand everything.
I'll give you a recent example. I had to understand Orthogonal Frequency Division Multiplexing (OFDM). To understand that, I had to understand:
OFDM -> Frequency Division Multiplexing (FDM) -> Multiplexing
and had to revise and better understand concepts such as Frequency, bandwidth, modulation, and god knows how much more.
My point is, you might start with having to learn one thing, but you'll have to go deeper and deeper to actually understand the concept. After a while, you'll get to the point where you actually understand the concept at the bottom, and like a base case triggered in recursion, things will start clicking all the way to the top. In my case, understanding multiplexing made it easy to understand FDM, and eventually, OFDM. Hitting the place where you finally recognize a concept is extremely blissful. You can find everything making sense and feel proud and accomplished. I'm no liar though, you're going to struggle a lot with your own confidence when you encounter this. I recommend telling yourself that there's nothing wrong if you're not understanding even though you've been riding the highway for a while and still haven't found bliss. As you progress, you'll find yourself hitting bliss faster and faster.
PS: OFDM isn't directly related to most SW engineers' work, so it's fine if you haven't heard about it before.
Idea 3: Learn when not to learn
Sometimes the best way to solve a problem is to understand that the problem is not even a problem. If you're a hobbyist, then you don't need to learn about Java Object Oriented Programming in deep detail, like someone looking to get a job in Java programming might have to. For the hobbyist, even a little bit of knowledge is fine! They can move on to making projects as soon as possible. The ocean of tech is vast, and you can't explore all of it in depth. Pick your battles well and try to limit deep learning wherever it won't help you. That being said, feel free to explore the 'irrelevant' topics on a 'shallow' level to get a taste of those new concepts.Hard Skills
While everything I've mentioned is important, there are some important hard skills that a programmer should know, like:- git : Used everywhere, basically a non negotiable
- Linux: If you use linux, then a good linux user is MUCH more productive than a newbie
- Google search: Learn basic filters like using the minus sign and quotation marks to upgrade your G Search skills
- Keyboard Shortcuts: Increase your productivity and makes you look programmer-y
- Typing speed: Makes you look cool. Plus a coworker who's guiding you when you need help will be grateful that you're not a slow typist.
50% of something over 100% of nothing
This is my most important piece of advice. If my tips don't serve you nicely, well then, chuck them out of the window. You might be tempted to follow other's people's paths because it worked for them. "I got a job in 2 months!" they'll say, and you'll try to copy them as much as you can because their way is the fastest way. In return, you'll do things like them for a couple weeks, get burnt out and not attempt for months. It's much more important to find a way to be consistent in your learning, and do it in YOUR way, than it is to try to follow someone else and fail.
Like I said in my last article, it's much more important to have the ability to carve yourself a path, than it is to reach the place you desire to go.
This wraps up this weeks article. This was RUSHED because I'm about to miss the deadline for #week2 of the #4articles4weeks competition, so I apologize for the slightly lower writing quality It's 3 in the morning and I should be sleeping. Expect edits coming soon. Have a wonderful week ahead of you!