Learn how to learn
Entering a new job can be scary if you’re a software engineer. You have to learn a brand new code base, a new technology stack, new practices, new organizational cultures, new code standards, etc. You may even have to learn a brand new domain. It can be overwhelming and downright intimidating unless you know how to learn.
Here’s some tips on how to learn things faster.
Admit you don’t know
The first step of learning is to admit to yourself that you don’t know it. If you spend all your time trying to convince others you already know something, you won’t ever have the time to learn. Instead of nodding along and saying “yes” as people throw foreign buzzwords at you, swallow your pride and say you don’t understand. You’ll actually get an explanation and increase your knowledge instead of just sitting in the dark.
Put in the effort
Learning things will be difficult if you don’t put in the effort. Learning by osmosis is far too slow and is the lazy way to pick things up. You need to recognize that you’re not trying to get ahead, you’re trying to catch up! Until you know enough to work smart, you’ll have to work hard. Set aside time to learn and follow through.
Write it down and google it
Write down every single term you don’t understand. Every acronym, every term, every usage of the term. Write it down. Then, when you have time, google it. Search those phrases online. Find out what they mean. Find out in what contexts they are used. Understanding new things requires you to understand the language. Even words that are familiar can mean different things. For example, the words in the term “Issuing Bank” are both common words, but the meaning of the term itself is very specific. Assuming you know what the term means can lead to problems down the road.
(an issuing bank is a bank that provides credit cards to consumers)
Break it down into smaller pieces
Looking at a 100,000 line codebase with brand new technologies is difficult. Looking at a single file with a single API call is much easier. Instead of trying to absorb everything at once, try to understand smaller pieces. Figure out what a method call you see everywhere is doing. Trace the code from a single common user request to the database. Eventually, you’ll find patterns in even the worst code bases that you can then apply to other parts of the system.
Don’t take things for granted
Large systems have many moving pieces, which can make even small changes have unintended consequences across the system. That may lead to confusion and you may unintentionally learn ritualistic behavior. For example, if in a large system a database call only worked if you called connection.foobarMeepMeep(), you may attempt to call connection.foobarMeepMeep() every time you access the database, even if you don’t need to. Take the time to fully understand any code you writing.
Skip over stuff that doesn’t matter
The corollary to not taking things for granted is to understand when you’re going down a rabbit hole. Your time is valuable, and you should take care to filter out as much irrelevant information as possible from what you’re trying to learn. This takes practice, and sometimes you’ll filter out something that ends up being critical to what you’re learning, but often you’ll find it easier to understand in the long-run. Avoid going off on wild tangents. Focus and skip over stuff that doesn’t matter.
Use resources available to you
Chances are you’re not learning something that’s never been learned before. People before you have done work and shared their results. Look for them. Read the documentation. Watch videos. Do tutorials. Ask your teammates. Not using every resource at your disposal is a waste.
Don’t copy paste
If you ask your teammate for the command to run the server, chances are you copy-paste it. After all, it’s easy to copy-paste a command or code that works. I’m telling you don’t do that. Type it out yourself. Understand exactly what you’re typing and why it’s necessary. Give your physical muscle memory a chance to shine. Typing it out yourself has the effect of ensuring you acknowledge the actions you are taking.
Be intentional
Tell yourself you want to learn a specific thing, and then go learn it. You can gloss over general topics, but you’ll never gain a true understanding unless you mentally try to link things together. Intentionally learn topics instead of collecting random facts and tidbits. Deep dive into the things you need to understand.
Learning is a lifelong process and it is never done. You’ll never learn everything, but don’t let that stop you from trying. Enjoy the ride, and share what you learn with others.
-----
Published 2016/12/23 on Medium.