How I'm developing my learning plan this year
Tags: python, javascript, learningplan
Published: 2019-03-03 19:49:38

---
title: How I'm developing my learning plan this year
published: true
description: How I came up with motivation, goals, and a plan to learn Python and JavaScript under the covers.
tags: python, javascript, learningplan
cover_image: https://thepracticaldev.s3.amazonaws.com/i/iqfjrvzvsiojwj3whmiu.png
---

#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](https://www.recurse.com/about) 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](https://www.healthyplace.com/blogs/buildingselfesteem/2015/11/feel-motivated-and-confident-with-this-dbt-skill) 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](https://www.recurse.com/what-we-look-for) 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](https://thepracticaldev.s3.amazonaws.com/i/iqfjrvzvsiojwj3whmiu.png)

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](https://www.literatureandlatte.com/scrivener/overview), 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](https://thepracticaldev.s3.amazonaws.com/i/ooz4wirecssjolv7o6h7.png)

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](https://blog.bitsrc.io/understanding-execution-context-and-execution-stack-in-javascript-1c9ea8642dd0). 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 :)