This post was first published on my website.
In 2017, I posted about my learning journey, I talk a lot about passion, willingness, and obsession. I always feel I have so much to do. So much to learn. In the same time this feeling makes me anxious, it makes me feel ready for the next challenge. It's mixed feelings.
Since 2017, I'm learning a lot and sharing knowledge (on Medium and my Blog). I want to keep this mindset of trying new things, experiment new technologies, learn different paradigms. But I want to improve the whole process, making this a better experience and more conscious.
As I'm learning about myself and how my body and mind work, I'm designing my learning process based on those things. So some questions started to pop in my mind:
- What's the best way to learn?
- How do I measure it?
- How do I improve my learning experience?
- How to design my life to have "a good amount of productivity"?
Ok, we have a lot of work to do here. Let's answer these questions and see the final product.
The short answer is: I don't know.
I think we don't have the right answer for every person in earth. But if I design the learning experience exclusively for myself, I think I have a chance.
To understand what works and what is not so effective, I need to try different methods as experiments: podcast, articles, videos, courses, university, doing projects, books, etc. We have a bunch of resources and ways to learn.
- Podcast: I use it as a distraction tool when commuting, running, and playing video games. I like to listen to discussions on technology and experiences in tech. I tried to use it as a learning tool but I always get distracted. So now, for example, if I want to learn React Hooks, I don't listen to a podcast to learn Hooks. I prefer reading the docs (which is pretty good!). But if I want to learn how different teams/companies scale React, a podcast can be a good fit.
- Videos & Courses: When I started learning to code, videos were a big part of my learning process. As a visual person, I like to understand the concepts by seeing the code. It was also good because I watched a lot of tutorials. But nowadays, I don't watch a lot of videos, I tend to watch tech video as an entertaining+educational content like fun fun function and Joma Tech. Specific for courses, I tend to like more educational platforms like Udacity that mixes theory (concepts) and practice (coding).
- University: So let's skip this part... kidding! Hmm.. I'm a bit skeptical about universities. I tried it, but I realized that the "way of learning" was not the best for me. I didn't fit it. A class of 30 people passively listening to a professor for 40 minutes. I like to be active, I like to question, I like to do experiments and practice. It didn't work for me. Maybe it works for you.. who knows?
- Books: Books are a big part of my learning process. But I'm a slow reader. I like to take notes, organize my thoughts, and understand the details. And I know that I'm too curious about a lot of different things, so the challenge to me is to keep it up, to be consistent, and finish the books. Having this in mind, I'm trying something different: reading 3 books simultaneously. A biography or something about self-development (Mastery). A technical one (SICP: Structure and Interpretation of Computer Programs). And a career one (The Effective Engineer). This is how it's working for me. ¯*(ツ)*/¯
So here we have a ton of resources and ways of learning. Basically my mindset is like a laboratory. Make experiments, try new things. But understanding what works for me. Asking myself how do I learn best? Which resources I really engage and get the most of it? Keep in mind it doesn't have any rules. Actually, you make the rules. You understand yourself, you understand the resources, and make the decision to keep it up with the best way of (your) learning.
Now I divide my time in my three main resources: articles, projects, and books.
I have my own time to keep reading books, as I told you my experiment to read three books at the same time with different topics. It's not daily yet, but my goal is to have a daily time to read it and make it more consistent.
Articles I read once in a while, when I want to go deep in a topic, understand the theory and the concepts. I like to do a linked list of articles (or maybe a priority queue) and organize by topics to study later.
The projects are the resource I spend most of my time. This is the way I practice. The way I get the concepts I learn and make it live. The way I do experiments. The way I think deeply about the concepts. Today I'm in a good vibe to try different projects. But I want to explore it more, organize my time to get more done.
This is an interesting topic, but I don't know if we can really measure the learning process. I have two things in mind when I want to "evaluate" if I'm actually learning or not: project-based learning and real life projects.
As I mentioned in the resources topic, projects are a simple way to make the learning practical. Sometimes I call it "mini projects", because I just want to do a Proof of Concept (PoC) or just a small experiment, making the learned theory real and practical. So I don't spend a lot of time doing a specific project or improving it. I create the project, do the experiment, and when I feel satisfied with the results I move on to the next thing I want to learn. As a software engineer, the coding part is always fun, but to go to the project and start the experiments early as possible, I created a framework to myself:
- Think about the project that I can apply the concepts I'm learning
- Create a new Github repository
- Choose a programming language (sometimes I'm learning a specific feature of a programming language. Sometimes I just want to apply the concepts and the PL is only a tool for this experiment)
- Coding time
- Share to receive feedback
I like this framework because I start the project fast and then I can focus on the experiment and the feedback cycle.
This is similar to project-based learning (PBL), but the PBL is a quick and small project just to experiment. A real life project will be a longer and probably bigger project (bigger codebase in software development). Some questions to "measure" the learning:
- Can I apply this learned concept and ship it to production?
- Does the learned concept helps me to have better (technical) decisions?
- Am I able to suggest the learned concept in code review or help other people working on this project?
An example was a project I needed to implement an authentication and authorization in a serveless environment using node. As I learned promises, I wanted to implement using
async/await syntax. I was confident about what I studied and wanted to see the results. After shipping the code to production, I realized my accomplishment. It's a good feeling when you study hard and can apply this in real life. Not just a good feeling, but a way to "measure" that I'm learning it, that I understand it.
Learning can be hard. Sometimes "boring". But we can make it more engaging and "fun". I'll tell you the three ways I use to improve my learning experience. I like these three ways because it gives me visibility and depth on the topics I'm learning: The Flow, Sharing Knowledge & Smart People Around.
A couple years ago, I wrote a piece of content describing the turning point in the learning process: In the beginning it can be hard to learn a new thing, but keeping it consistent until a time
t, you'll realize that you'll learning much faster than before. This time
t is particular for each person.
But it is very simplistic. So I kept searching for a better framework to understand this, but also give me visibility to understand how to improve my learnings and enable me to be actionable.
I found this chart from the book Flow. It talks about how to stay in the flow by managing your state between anxiety and boredom. Basically:
- Low Challege + High Skills = Boredom
- High Challenge + Low Skills = Anxiety
- Low Challenge + Low Skills = Flow
- High Challenge + High Skills = Flow
So now I can stop and reflect about my learning experience:
- Am I bored? Maybe I need to search for more challenging projects.
- Am I anxiety? Maybe I need to study something to get the challenge done.
- Am I in the flow? This feeling is good. Keep it up.
I like this idea because it gives more visibility to understand the pain points on my learning process and also reflect and be actionable on the problems and opportunities I have to improve the whole learning experience. I also like it because it is simple, it's not that complex. And it doesn't need be.
For me, sharing knowledge is a way to give me depth on the topics I'm learning. When I share knowledge, I force myself to go deep and understand every possible detail about the topic I'm learning to teach in the best way. Now I usually do two things: Articles and Tech Talks
I love to write detailed articles about things I'm learning or had experience like when I was learning functional programming, when I was learning data structures and fell in love with the tree data structure, and my very first programming language: Python!
Tech talks are the last step for me when it comes to learning something new. I usually:
- Learn by reading a lot of articles
- Learn by doing some experiments and projects
- Learn by writing articles
- Learn by doing tech talks
This "framework" is the exact thing I did when I was learning functional programming. I did read a lot of articles (and added all in this A Learning Path for Functional Programming Github repo). I did some experiments and projects. I did write an article. And I did a tech talk.
I like the idea to always designing a better experience for my life. As I know I get most of my time at work, and if I have the possibility, I'll choose the best option out there. I like to choose a company or job/team based on three things:
- Company / Team Culture: work in a team that supports/helps me to grow, a team that gives me freedom to question things and debate, a team with lifelong-learners, a team with great professionals, but also awesome human beings.
- Learning / Challenges: I really like to solve interesting problems. It's not only fun, but also helps me to grow, try different solutions, and motivates me to keep learning.
- Purpose: Looking inside me, I truly love the technical part of my job. I love the challenges and the learning involved. And it motivates me a lot. It sounds cliché, but I am deeply passionated about building new things, new products that have a good impact on people's lives
With these three things in mind, I could choose a lot of good places I worked for. The places and people helped immensely to grow.
But learning at a company is one way to do it. You can also be part of a community. Sometimes I go to meetups, or be active on groups on slack or telegram, to learn and discuss things I'm interested or things I want to learn.
I want to get the most of my day to learn and improve, so I experimented different things. And this what I'm aware of to get things done with quality.
- Productivity is about the energy I put into tasks. Strive to think about quality, instead of only quantity of thing you get done in the end of the day.
- Strive to be physically and mentally well. Eat healthy. Do exercises. Sleep well. De-stress.
- Realize you won't get done a thousand things in a single day.
- Prioritization is so important. Design your tasks to get done the most important and impactful things.
- Plan to get things done. It is easy to do other things not related to things you really need to get done. Planning your day, or the things you want to do is a way to be productive and not procrastinating all day.
- Design your environment to be focused on your tasks: get a good headphone, stay away from loud places with too many people, silence the phone.
So here I have different things I'm trying out, do experiments in my life, and reflect to understand what works for me. And this is important, because it works for me, but it may not work for you. Do experiments, try different ways of learning, keep the mindset of improving day after day, the lifelong mindset.
The last thing I want say: this is an in progress design for my learning experience. I want to keep improving this, because I'm trying new approaches. The design for my learning experience continues.