Week 0: Learning Journey - First Steps

Week 0: Learning Journey - First Steps

·

5 min read

Introduction

In this post, I will outline my approach to and resources for learning embedded programming.

Embedded systems is a fascinating field, and I have decided to invest my spare time in learning about it. This will be the subject of my blog. I will post my study notes, progress updates, methods, results, and more.

Approach to Learning: A Brief Outline

How I learn

Before starting this project, I identified which subjects I want to learn, how I want to learn them, and from which resources. Following Ultralearning (Scott Young), I have categorized the subjects into whether they are "Knowledge", "Facts", or "Procedures". This makes it easier to decide how to learn each specific subject. About the categories:

  • Knowledge: This includes concepts that are harder to grasp, and must be understood. Techniques I use for understanding them:

    • The Feynman Technique: This involves explaining the subject on paper to an imaginary person who doesn't have any knowledge of the subject. When I get stuck, I look up the parts I don't understand and try again.

    • Drawing diagrams, mindmaps, and flow-based notes (Scott Young) to understand the connections between subjects.

    • Learning from different resources, e.g. a few books, websites, and videos.

  • Facts: Things that are understood, but must be remembered, e.g. vocabulary when learning a language. Techniques I use for remembering:

    • Spaced repetition software - I use Anki, but there are other good options as well. Adding memorable images to the flashcards helps recall.

    • Trying to recall things, e.g. while walking, biking, etc.

  • Procedures: Things that you learn by doing. Programming or speaking a language are good examples of this. Techniques I use:

    • Projects: Finding an idea for something you want to create and then creating it is a great way of learning. It pushes you to learn things you didn't know that you needed and makes it much easier to remember. Note, it's not enough to follow a tutorial or implement someone else's project; the project must be your own.

    • Drills: Scott Young has some very useful ideas for this in Ultralearning. In short, I drill things I'm bad at. A drill isolates the thing you want to practice and provides immediate feedback on how you are doing.

Time Management

When it comes to time management, over the years I have used different variations of the timeboxing techniques Cal Newport has written about. Currently, I do the following:

  • I have a document that specifies how much time I want to spend on each activity per week, e.g., Learning embedded: 8 hours, exercise: 4 hours, etc.

  • In a Google Calendar, I keep all scheduled events and deadlines.

  • Each morning, I divide an A5 page into three columns:

    • In the first column, I block out what I want to do during the day. This includes checking my Google Calendar for any deadlines or events. I draw blocks with estimated times for everything, including breaks, commuting, showering, etc. The biggest advantage of this is that I have gotten great at predicting how long things take. It makes a busy day much calmer when I know that my estimations are correct and that I will be done at the expected time without having to hurry.

    • The second column is for changes. Maybe something urgent comes up. In that case, some activities are pushed to a later date, and I draw new blocks for the day.

    • The third column is for listing things that should be put on the Google Calendar. Maybe a friend invites me for a dinner Friday night. I say yes, and write it on the list. Then, the next morning, I transfer the items from the third column to the calendar.

Other, time-saving things I do:

  • While working, I put my smartphone on flight mode, and hide it in the closet.

  • I don't read the news. I also have no interest in social media. However, I like googling and researching random interests, and it can take up too much of my time. To avoid this, I have a piece of paper next to me where I write down anything I get the impulse to google. Then, during the week I plan a block of time where I can google the things on the list. Most of them are irrelevant at this point and I just skip them.

  • Focus: By using Pomodoro, I work in intense bursts, and relax properly afterward. This limits work time and keeps free time well-defined.

  • I check email at a specific time each day.

  • I keep my energy level high by eating healthy and exercising.

I do most of the above things consistently, but I also often slip up.

Duration

The initial learning foundation will last from March 13, 2023, to June 9, 2024, which is 65 weeks.

I plan to work 8 hours a week. One hour is 2 x 25 min. work and 2 x 5 min. break (Pomodoro).

Total: 520 hours.

Resources on Embedded Programming

I have assembled a list of resources that I want to learn from. I will try to cover the subjects listed here: https://www.embeddedrelated.com/showarticle/1460.php, and I am using many of the resources listed here: https://www.embeddedrelated.com/showarticle/1324.php.

For each resource, I have calculated how long time I expect it to take. Books are estimated to take 1 hour per 10 pages, videos 1 hour per 20-minute video. This includes doing exercises, installing software, putting out fires, etc.

Here are the first five resources on my list:

  1. Gary Smart: Practical Python Programming for IOT

  2. Jack Purdum: Beginning C for Microcontrollers

  3. Jonathan Bartlett: Electronics for Beginners

  4. Miro Samek: https://www.state-machine.com/video-course

  5. Robert C. Seacord: Effective C

Resources on How to Learn

To make learning more efficient and useful, I use learning strategies and time management advice from these books:

My Background

I have about three years of work experience as a Python programmer. Self-taught, no education yet, but I'm working on that too.