DEV Community

Maniflames
Maniflames

Posted on

How do you approach knowledge gaps?

It's normal to get stuck from time to time when you are trying to build something. However, when I make the same mistake again and again I know it has to do with my lack of knowledge about a topic.

When it is a framework or library specific to problem the answer is most likely in the docs, on stack-overflow or in a tutorial. However when it has to do with build in language features or theoretical knowledge it can be harder to spot what you don't know. To be fair I bump into the right information when I need it by accident. It's usually hidden in a talk or a well written article or post.

Two real life examples of the 'problem' I'm talking about:

1. Understanding JS

When I stared using a lot more asynchronous JS the expectation vs reality of what I was trying to write did not always match. Some tinkering or workarounds would usually solve the problem. It wasn't until a very enthusiastic JS dev advised me to watch a talk on the event loop that I realized what a gap in my knowledge was. I had no idea how JS handled async operations under the hood and why some things wouldn't work.

In case you haven't seen it and you like JS check out "What the heck is the event loop anyway" by Philip Roberts. He talks about a lot more than just async programming, a lot of JS related buzzwords will make sense after hearing this talk.

2. Understanding Rust

Something I'm struggling with right now is ownership and borrowing in Rust, even though the book has an entire chapter on it. It basically has to do with the memory used by your code and whether you try to use the real value, a reference or a copy.

I frequently fight with the borrow checker when I try to do something in Rust. After some practice I started to get a little bit better and can at least understand why I am stuck. I ran into this post and if you happen to struggle with ownership this one will really help.

To be fair most things related to memory in Rust are a problem to me right now because I don't know that much about it. I guess that is the thing I'll have to understand at least a little bit better to truly understand what I'm doing.

How do you reveal what the gaps in your knowledge are? Do you have a favorite method for learning something more theoretical and applying it? I'd love to hear from other dev's how they deal with this 😄.

~ Happy Coding :)

Top comments (18)

Collapse
 
jamesdengel profile image
James dengel

A low tech solution to this that I use is to use post it notes stuck to the bottom of my monitor, as I work I add a note to the screen if I make a mistake, or I lack knowledge of something. I continue to fix the issue and then at the end of the day I get the notes together and can see my gaps in knowledge or stuff I need to remember.

This takes the guess work out finding gaps in my knowledge, I can then prioritise the gaps.

Collapse
 
maniflames profile image
Maniflames

This is a great one! Thanks for your low tech solution, I'm going to try this out 😁.

Collapse
 
jamesdengel profile image
James dengel

I find sometimes that a lower tech solution is better than an app or something fancy, I tried using a timer on my phone for pomodoro timing, but i spend more time setting it up than working, so I just use outlook to set 45 minute meetings with my self. This makes Lync get my status, plus people can't book meeting for the next 45-60 minutes so it works much better.

Thread Thread
 
maniflames profile image
Maniflames

I guess in some ways we fall in love with a certain level complexity and totally forget there are easier ways to do certain things. I've noticed that blocking out time in my calendar was effective as well for the same reasons. (Also I had no idea what Lync was so I googled it, Microsoft some software solution for anything 😂)

Thread Thread
 
samaldis profile image
UKJP

THIS! this has been me since starting out as a (solo, anyone want to partner?) startup, I always end up starting a project to say, save my code snippets... there are literally 1000's of FREE solutions that I could use just to realize the amount of time I've wasted because I wanted it done MY way.. unfortunately I don't do so well with gcal or lync as I need to visualize the knock on effect it will have on my projects and have resorted to kanbans for a ONE PERSON company. 🙈

Collapse
 
lkopacz profile image
Lindsey Kopacz

I take notes about the comments in my PRs. What types of feedback am I getting? Is it a small mistake I made (Forgetting a preferred format once or twice) or is it a consistent comment I am getting. If it's consistent, that helps me a ton to figure out where my gaps are.

Right now, my gaps are writing jest tests. I am transitioning to writing React components from scratch + d3 from Drupal development. I have experience with React and jest, but not writing them from scratch. I take notes of where I have good instincts (where someone likes what I did) and where someone comments that it could be improved.

I am pretty active about asking questions while coding too. I tell my mentors "This is my instinct/gut feeling, but I want to make sure I am not going down a rabbit hole." This helps me TREMENDOUSLY :D

Collapse
 
maniflames profile image
Maniflames

This is a strong idea, others often see what you don't. Sometimes it's very easy to look at feedback, nod and forget about in no time. Taking notes while receiving feedback + being active about asking questions are things I should do more often 😅. Thanks for the advice Lindsey 😊

Collapse
 
lkopacz profile image
Lindsey Kopacz • Edited

You're welcome! I didn't go through any formal training in web dev, so I find random gaps in my knowledge all the time. I'm almost an expert at finding my knowledge gaps 😂

Collapse
 
rachelsoderberg profile image
Rachel Soderberg

I'm still learning to dig myself out of knowledge gaps without asking my manager for assistance, and I have a question to hopefully bring this discussion even deeper:

How do you balance filling in your knowledge gaps on your own (be it StackOverflow, tutorials, etc.) and getting your assignment in under the deadline? I am currently using time boxing to try to work through something on my own, then I approach my manager for assistance when I've been stuck longer than my allotted time.

Collapse
 
maniflames profile image
Maniflames

Great technique!

To be honest I don't have a solid way of balancing these things out.

Usually when something is wrong I try to find the root cause. Through debugging, googling and trying to find a related issue or pull request on Github.To make sure I explain everything that I have learned I keep track of the whole process by writing new insights down in my notebook.

If I run into a session like this at the end of the day, the stand up the next day is when I ask for someone to help me out. If it's in the morning I'll ask someone to help me after lunch.

The only time I ask for assistance outside of these meeting points is when I run out of 'leads' and unable to understand or find the cause.

I have tried to limit this process to an hour in the past but I'm really stubborn at times, when I think I'm close I stretch it for way too long 😅.

It doesn't happen too often that this goes on for way too long but there are still some occasions soooo 🙈....

How long do you usually make your timeslots before asking for assistance? And how do you avoid the trap of: "I'm really close though, I got this just a few more minutes" ?

Collapse
 
rachelsoderberg profile image
Rachel Soderberg

Hey, thanks for the reply! I try to stick to a timebox of an hour or two as well, depending on how complicated the issue is. If it's feeling like I'm really close I'll give it another 10-15mins and then take my findings to the manager or more senior developer and tell them what I've got and ask if they have any input on how to get to the next step. I'm the same as you, I'll go on all day if I feel like I'm close and "just need a few more minutes" so I really try to be disciplined about it.

Pomodoros are actually a great way to timeblock and not let yourself carry on all day - give yourself until the end of your current/next pomodoro period to solve it, and if you cant, it's time to recruit help.

Thread Thread
 
maniflames profile image
Maniflames

This is definitely one I'll have to practice but it will be worth it. Thanks for the advice 😁.

Collapse
 
samaldis profile image
UKJP

+1 for the rust resource on ownership as it is a unique concept not just in other ML based languages but across every language, although for me it makes a little bit more sense that pointers an references
in C based languges int **my_Number cause optimization??? felt like it should just be the default to rerfer to a pointer that refers to a pointer that referers to a place in memory the amount I used it - admittedly when C++14 was the newest standard and I was 15 and moved from Java and VB6 and was probably doing it all wrong.
Rust seems to have got it perfect, you just need to get to know life times and ownership and the rest is syntax and keywords.

while async -> await is one the best things to happen to javascript, no more having to call setTimeouts in the days before anonymous functions. - I really am showing my age - and realising you've just called the function in the setTimeout not passed it a reference to the object of the function. thanks ECMA for the 10 year gap between standards :') and while I now love Typescript it had promises which weren't much better than setTimeout or setIntereval.

I found over time I fell into work arounds that were possible at the time (i.e. relying on events, of which there were only about 8 at the time; load, click, scroll, hover, error.) which was not really something you want to get into the habit of - the workarounds - as they stick and lead to a lot off time wasted retraining your brain when the next standards are released, take it from a 28 y/o who started when he was 9 and we booted to MS-DOS from a floppy disk, ahh i really wanted the upgrade - a whole 10mb

in one "zip drive" to..
So +10000000 to anyone who is doing this and recognizing their weaknesses and fixing it BEFORE you end up picking up bad habits and have to spend weeks undoing years of small habits!

Collapse
 
maniflames profile image
Maniflames

Thanks 😄

Ownership, Borrowing & lifetimes are really powerful but definitely take time to get used to (espacially if you come from languages that don't have manual memory management). Don't know a lot about C so catch me if I'm wrong but I also feel like what makes Rust special is that it forces you to think about how memory should be managed in a specific way rather than leaving it all up to you.

I also really can't imagine writing asynchronous logic in JS without async/await or promises. I started programming in js right after ES6 released. By the time I wanted to do asynchronous stuff promises were really populair. ES6 is truly a blessing when you compare it to ES5 but I've also noticed that it can be a lot easier to think about how js works under the hood if you ignore some ES6 features while trying to get a deeper understanding of javascript.

Never used a floppy disk but hopefully people look weird at me in a few years for using USB-sticks as a kid :')

Collapse
 
marius profile image
Marius Espejo

hey Imani! Personally my approach is mostly: research the crap out of it 😄

I’ve found it also helps a lot to write/teach about what you learned (even if it’s just your assumption of how you understood it). It puts you into a position where you likely don’t want to get it wrong, while at the same time, it’s okay to get it wrong. And maybe someone points you to right direction.

Bonus points: create a POC based on what you’re learning or trying to understand.

I think just being in a position where you’re willing to ask (like you’re doing now) about things you don’t understand already puts you in the right path. Somestimes growth comes more from being able to ask the right questions, and less so about knowing the answers themselves (that’s what google’s for 😆)

Collapse
 
maniflames profile image
Maniflames

Definitely agree, google is our best friend 😂. Sometimes it's kinda hard to ask the right questions but I guess that is a skill you improve over time. Thanks for sharing 😁

Collapse
 
oieeaaaa profile image
Joe

Notice that 2 'that' from the 8th paragraph. 🐵

Collapse
 
maniflames profile image
Maniflames

Good catch 😅