Learning Strategies for your Software Engineering Job Search

I’ve been obsessed (in a healthy way) with figuring out how to use my time in the most efficient way possible for as long as I can remember. Sometimes “work smarter not harder” is more easily said than done — there are a number of variables that can throw off your groove on any given day. Not to mention there comes a point where nothing substitutes reps and plain old hard work. That said, I still love having structures and systems that allow me to squeeze the most productivity out of my hours.

This article aims to answer one question:

If I had a perfectly open week where all of my time was completely under my control, how should I choose to spend it to get the most out of my learning?

While these kinds of days (much less weeks) can be few-and-far-between (see: non-existant) in a real working environment, it’s still useful to have some methods in your toolbox.

Big Picture Strategies

“Big Picture” ideas are more macro level — meaning, these ideas have to do with deciding…

  1. What you’ll choose to do across a span of multiple days
  2. How to best divide your day up into “blocks” of time

This is opposed to “Little Picture” — or micro level — where you’d focus more on how to structure learning within a specific block of time.

As you can see from the chart above, reviewing information is just as important as digesting the information in the first place. It’s much better to spend an hour or a couple of hours a day practicing a new skill than it is to spend every Saturday trying to pull off a learning marathon with a week of time in between.

The whole idea is based on the fact that the earlier you are in your learning process, the faster your newly-gained knowledge will naturally deteriorate over time. By following up on your learning with spaced repetition, you retain more information and you avoid wasting time re-teaching yourself things you should already know.

Generally speaking, people are great at honing in on tasks for a little under an hour before they begin to lose focus. It’s very important to understand that when we say 53 on and 17 off, we really mean ON and OFF. If you’re working for 53 minutes and checking your social media every 10, you’re not ON. Alternatively, if you’re resting for 17 minutes but you decide to spend it checking your email, you’re not OFF (unless you genuinely find it fun or relaxing to check your email, I’m sure there’s someone out there).

What are things you can do during your break?

  1. Drink water (!!!)
  2. Get away from screens
  3. Go for a walk — outside if possible
  4. Eat a low-carb snack (fruit is great)
  5. Listen to music
  6. Call a friend / family member

Ability to retain information drops after two hours, then falls off a cliff after 4 hours.

Don’t get me wrong — a lot of the time you have to work on something for 4+ hours. You might not have a choice. Maybe you have a big interview tomorrow and you’re drilling Leetcode problems or you’ve got a major project deadline coming up.

That said, it’s good to be aware that your productivity on those projects is going to drop dramatically after just a few hours. If you have several things to work on and you have some flexibility in your schedule, you might be better off giving your full attention to one thing for two hours before moving on to the next thing.

Generally speaking, your brain reaches peak “alertness” around 10:00 a.m. This is the best time of the day to work on tasks that require intense concentration. Personally, I prioritize algorithms and data structures in the mornings and save more monotonous tasks — like job applications or physical exercise — for the afternoon. Most people naturally start winding down after lunch and hit a “slump” between 2:00–4:00 p.m.

Little Picture

As mentioned before, the “little picture” focuses more on the micro-level. If you’re following the 53/17 pattern described above, this is intended to help you plan your learning within any given 53-minute block.

Advanced concepts in any domain are built on a foundation of strong fundamentals. For this post specifically, I’m going to focus on fundamentals for algorithms and data structures.

For algorithms, you won’t truly understand recursion until you understand functions, you won’t truly understand functions until you understand scope, you won’t truly understand scope until you understand variables, etc.

The way I see it, the fundamentals for algorithms can be broken down into three levels:

Level 1

  1. Primitive values (integers, strings, booleans, etc.)
  2. Conditionals (if-else)
  3. Control flow (while loops, for loops, etc.)
  4. Functions and scope
  5. Classes and instances

Level 2

  1. Basic data structures (arrays, hashes, linked-lists, stacks, queues, sets, binary trees, graphs, etc.)
  2. Sorting algorithms (insertion sort, bubble sort, selection sort, merge sort, quick sort, radix sort)

Level 3

  1. Being able to perform Create, Read, Update, and Delete (CRUD) actions on any data structure from any point (beginning, end, middle) within that data structure
  2. Understand the time and space complexity (Big-O) implications of performing any CRUD action on any given data structure

Can you manipulate multiple pointers to read an array? Can you delete a node from any given spot on a tree and understand how to move the surrounding nodes in response?

Once you’re able to confidently answer questions like these, you’ll be able to consider the pros and cons of each data structure and the tradeoffs you’ll need to consider when deciding which structures to use.

When it comes to moving up “levels” in my understanding of fundamentals, I try my best to avoid moving on until I have a solid grasp of the previous level.

What qualifies as a “solid grasp” is going to vary from person to person, but my personal standard settles in around 85% mastery. If you insist on 100% mastery, you’ll be really great at the first couple of steps, but you will have taken forever to achieve that mastery and might be failing to see things from a broader perspective.

Do you have to understand everything about music theory before you even pick up an instrument? Do you have to know what goes into growing the perfect tomato before you make a pizza?

If you take 85% mastery and begin to put it into real, deliberate practice, the remaining 15% will probably close naturally. Following the 85% rule will prevent you from moving too quickly, but without sacrificing any of your momentum to do so.

The chart explains itself, but Blooms Taxonomy is one of my favorite ways to gauge my understanding of a concept or subject. It begins with a foundation of simply recalling or remembering facts and builds its way up to creation.

If I’m not positive on “where I’m at” with my understanding of something, I’ll start from the bottom and ask myself questions as I move up tiers. One great way to check how well you know something is to try teaching it using simple terminology in such a way that someone with zero experience might have a shot at understanding you.

Personally, I’ve attempted multiple times to teach my girlfriend how Linked Lists work. When she understood, I understood.

Putting it all together

This is an example of how I might lay out a week with all of the above principles in mind. While you might look at the schedule and see that each day is “only” 8 hours of total work, I hope you’ll find that the balance of doing a little bit of everything daily (while also not neglecting your health) leads to more efficient hours, better retention, and sustainable success.