DEV Community

Cover image for How I'm developing my learning plan this year
Flo P
Flo P

Posted on • Updated on

How I'm developing my learning plan this year

Motivation

My grandfather took my sister and I to the library every week as kids. I remember being in awe of the large books older folks would pick up. I remember telling myself that one day I too would be able to read such long books.

I have wanted to be part of a Recurse Center batch ever since I found out the center exists. The thought of spending extended time learning about what I want brings me joy. Getting myself to a place where I feel comfortable embarking in self-guided learning for hard things is also a huge motivation for me.

Working at something you want to get better at and building mastery is a Dialectical Behavioral Therapy skill used to increased self-confidence. Through years of DBT, I have learned that when you want to achieve something, you need clear, actionable steps to get there otherwise you're setting yourself up for failure. I know I want to be able to learn any difficult topic so I must practice learning a difficult topic, reflecting on what worked and didn't work, and continue.

Expectations

I looked to what the Recurse Center looks for in applicants for a good model of possible habits to strive towards. I created the Daily Affirmations graphic below and set it as my screen background.

My affirmations

To be clear, I don't think you need all of these to succeed. For example, I don't think you need to enjoy programming to get better at it however these aspirations align with my interests. I do enjoy programming! Doing activities that bring us happiness often increases well-being. What can I do to feed this interest? I find this reminder grounding whenever I am feeling frustrated by mundane work or feeling external pressure that doesn't align with my values.

Also, note that one of my values is being intellectually honest. I don't pretend to know something really well if I don't! To me, this isn't about moral superiority but rather the opportunities that open up when you are honest with yourself. When you fill in what you know about a topic you can see where the gaps are in your understanding and seek help. One of my fears when I started in this field was stagnation. I have learned over time that it is rare for things to take you by surprise when you are honest with yourself and practice self-awareness. Being honest with yourself also means being kind to yourself and that is so much easier to do when you know that you don't understand pointers because you are still fuzzy on references, for example, instead of rejecting C altogether because you've been struggling for a while.

Learning Goals

At first, I knew I wanted to learn something thoroughly but I wasn't sure what exactly so I wrote down a list of interests in a Google doc. This is that list:

What are my interests?

  • Implementation of different database types i.e NoSQL, SQL, graph
  • Seeing how changes to implementation impact performance
  • Database performance
  • Systems
  • Optimization of code at the lowest level i.e. assembly
  • Drivers
  • How networks work
  • Physics of wi-fi
  • How engines work e.g. storage engine, what does engine mean?
  • How does JVM work? What is Java bytecode? What does that mean?
  • Regex and state machines
  • Designing distributed systems
  • Assembler commands to machine commands, CPU understands binary

Designing Data Intensive Applications

  • Database algorithms

Database Reliability Engineering

  • SLAs

There is a lot going on in this list. To know something well, you must first know it not so well. I currently use Python at work so I decided to learn this language thoroughly. I also noticed that the JavaScript community is welcoming and there is lots of accessible learning material out there. Learning JavaScript alongside Python should give me a chance to touch on some of the topics I am interested in like performance, low level details of languages, and how engines work.

Desired Outcomes

I know I want to know Python and JavaScript thoroughly but because I haven't created a learning plan of this size and scope yet there are still many unknowns.

I know I need to reenforce my learning so I will be blogging about what I learn along the way. I am also gathering all my notes in the same place so I can clearly see where the gaps in my knowledge are. I decided to go with Scrivener, a word processor used for putting together literary works. I like it because it allows you to (re-)organize your thoughts into sections and subsections easily and integrates with BibTex for citation management.

This is what the project structure looks like right now:
Project structure

I add subtopics as I go. I still looking for a good language implementation book. I am thinking about getting "the dragon book". If you have any recommendations, please let me know!

Progress so far

I am making good progress! Learning about JavaScript in conjunction with Python has made it easier to recognize language implementation patterns and what the lingo for those patterns are. For example, I came across this excellent JavaScript execution context post. I realized that though I knew of the concept of an execution context, I had not thought about it formally. Knowing what keywords to search for is so important. By looking up Python execution context info, I learned more about PYTHONPATH and why my code a while ago was acting the way that it was. Now I know what to search for when learning any new programming language.

Conclusion

Making a plan for myself and starting with the basics like creating motivational content for myself has been helpful. I found something to aspire to (joining a Recurse Center batch) that already had a basic guide on the habits I need to get to my goal. I chose topics to focus on and created a structure that lets me see what I'm missing in order to fully understand a concept.

I am actively writing down what I learn and reflecting on both the content and execution (no pun intended!). I have found that learning this way is super fun. I don't feel burdened with completing an entire textbook before proceeding to the next topic. I can switch from JavaScript to Python and vice versa when I get bored or when a concept is difficult to understand in one language. I constantly find new things to try out, like profiling Python code or deploying my own vanilla JS site to my new domain (!), that give me a quick feeling of satisfaction in between the difficult concepts like EBNF grammar files and lexical environments.

Importantly, I notice that I am making connections between the material I learn for fun and the material I learn for work without the imposter syndrome anxiety. I see that I am growing as a person and developing interests that are completely my own and not fueled by a paycheck which has increased my feelings of self-efficacy.

I'd love to hear about your learning plans and reflections! I have seen how some of you on this platform use blogging to keep yourselves accountable in your learning and it's super motivating! Keep up the good work, folks :)

Top comments (9)

Collapse
 
juanvegadev profile image
Juan Vega

Amazing way for creating a learning path. I found my self on a similar situation a few years ago, I would say I didn't manage my learning process as good as you are doing.

During that process my mentor recommended me to read Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman, for me a very good milestone on how I manage new concepts and I organize my self while learning.

Nowadays I don't have much time to learn so I try to create a plan based on my daily work, I try to grab task where I am less experienced and I also make an effort to keep improving my soft skills which I realized are the key to achieve success on a team work.

Collapse
 
flopi profile image
Flo P

Thank you for your kind words! I purchased Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman. Thanks for sharing :)

Collapse
 
ianrathbone profile image
Ian Rathbone

I think a learning path is a great idea, I'm far too reactive myself in picking something I just find intriguing or jumping on something I need to know for my job.

I'll be looking to use your ideas thank you :)

Collapse
 
flopi profile image
Flo P

Thank you!! Hope it helps!

Collapse
 
marek profile image
Marek Zaluski

Thanks for sharing this, I like the way you're broken down your strategy into organized steps, including your motivation.

A few years ago I set out on a similar path to learn programming language internals, and what I knew about myself is that I learn best by working on my own creative projects.

So I set out to create a simple programming language interpreter, taking inspiration from both Python and JavaScript. I think I learned more from that project about parsers, grammers, and virtual machines that any book could teach me by itself.

I recommend Bob Nystrom for this, he has a great blog and also a book called Crafting Interpreters exactly on this topic.

Collapse
 
flopi profile image
Flo P

Thank you for the feedback!

I think it's so cool that you wrote an interpreter -- I hope to get to this level at some point. I'll check out Bob's work. Thanks!

Collapse
 
deusmxsabrina profile image
Sabrina

I love the way you broke this down; as someone who has benefited immensely from DBT skill development in other areas of my life and would love to visit the Recurse center at some point, I'm inspired to try something similar. Great post!

Collapse
 
suhanyujie profile image
Samuel Su • Edited

Pump it~

Collapse
 
avatarkaleb profile image
Kaleb M

Great to see you're setting a learning plan and documenting what you learn ! It would really cool if you shared your notes with the community if you felt comfortable doing so.

Good luck!