Learning Strategy
As mentioned in my last entry, I was a Senior Software Engineer working on a industry leading product. Then I switch careers.
During the next 19 years I used technology as a power user and it was a fun hobby. The most coding I did was write the occassional python script to use a REST API or some bash scripting. Our family used Windows, macOS, Linuix, iOS, Android - just about everything, but I was using it and not really devloping for it.
When a corporate restructure happened and I was layed off, I wanted to go back into a technical field. So where to begin?
I previously worked with C++98 on SGI Irix Workstations and much had changed in modern C++. Since most of my tech stack was on Apple devices, I decided to learn Swift and see what I could do.
There was some culture shock as my OOP brain encountered something different with SwiftUI. I wanted to inherit and mutate things!
Right Mental State
I had just come off of a 19 year run of demanding work. The first step before I could learn anything was to get into a state where I could absorb new knowledge and then imagine how to use it in interesting ways. I took a bit of time to be with family and do things to re-adjust my brain.
Then I took a look at all of the resources out there - and there are a ton!
On a daily basis, spending time to get mentally set to learn is the difference between actual learning and going through the motions of learning. I find that a few quiet moments to center myself makes a big difference.
Pick a System
My goal was to get a job developing for the Apple ecosystem with a move towards management.
The temptation is to jump around different tutorials and books and while that is fun, it is not helpful.
I needed to refresh math skills, update to modern C++, learn Swift, UIKit, SwiftUI, Metal and other Apple frameworks. I needed a system to start. A book, tutorial series or course can be that system.
Pick a system that will move you forward to reach a goal and stick with it.
Trying to find the perfect system is a waste of time. Instead spend enough time to know the YouTube series, course or book is decent and do it. While I've bailed out of a few that did not work for me, I found I learned the most when I followed a system to competion or near completion. (sometimes they branched into areas I did not care about).
Make Something
Programing sinks in when someone has to make something. The struggle of reading the documentation and making test cases to try out ideas is essential. Tutorials are great as entertainment, as introduction to a new concept and a paint-by-numbers way of learning a new technique. The downside is that they are time-intensive and at the end you really don't know the topic as well as the application you just made might suggest.
Tutorials worked the best for me when I could connect their content with actual documentation. It is time consuming to have to scrub through a video to look up how to do something.
Tutorials show you that something can be done and that you can do it. That's valuable, but it is not the same as knowledge that comes through working through a problem and thinking deeply about it.
Getting The Most From a Book, Course or Tutorial
Tutorials tend to be broken up into segments and it is important to play around with the code that is being taught.
Pick a Good Tutorial
Some elements of a good tutorial are:
- They are Recommended by People Who are Doing the Work. If someone who is making good apps recommends a series, then it might be helpful to me.
- They identify the operating system version and language version. There are good resouces that are a few versions out of date, but it is also good to know how out of date. Remember that several versions of the operating system need to be supported in a commercial environment, so a few years back is good to know,.
- They teach at a fast enough pace that it is not boring. If the material is too elementary or the speaker is too slow, I get bored and my mind wanders and I have to scrub back to review something I missed. Speeding up a video can help, but if the instructor does not work for me, it is best to find someone else.
- Ideally there is a transcript. Ideally there is some link to GitHub for the demo code, but my favorites are when there is a transcript of the video in the notes. That makes it so much better when going back for clarification and searching.
Consume then Implement
I absorbed the most if I watch and then go back and implement. A tutorial trap is to type along without thinking about what is being typed. Instead get a broader picture of what is being taught, then implement the tutorial code.
Use Source Control
Souce control is your friend. If there is a 10 part tutorial, create a branch with the part number or description of the part. If the section goes horribly wrong and the code does not work and debugging is not going well, revert the code back to the start of the section and try again. Branch if you want to experiement with the code, because again, you can always revert back.
It is valid to follow a tutorial to a point and then experiement with the code. Take it apart and see how it works and what happens when it is changed. That makes the content stick and with source control there is no worry about losing code.
Make Your Own Thing
Following a demo does not mean that the skill is know, let alone mastered. The only way to understand something is to use it on your own project. Every time you learn a new concept, think about a toy application that can use that concept and implement it.
In the next blog entry I will give some reviews of resources I found helpful. They were helpful because I learned from them and then implemented my own code.
Tutorials are great if used well. Otherwise it does become the tutotial hell where the learned is constantly working through tuturials without being able to do something similar on their own.
Use a Timer
I mentioned my mind wanders. I've found the Pomodoro method helpful. It is a block of followed by a short break. After a few of these blocks, take a longer break.
There are times when I am deeply in the zone and I don't fight those with systems, but if I am not careful I can exhaust myself if I forget to take breaks.
The classic Pomodoro method uses 25 minute blocks with 5 minute breaks. After four of these blocks take a 15-30 minute break.
If focus is in short supply I use 25 minute blocks. The more absorbed I am, the longer I will set the blocks up to 55 minutes.
Timery works well if you use Toggl to track time. Currently I am using Sessions, which is included with SetApp.
Focus on Outcomes
Right now my desired outcome is to get a job. That means creating a portfolio that is interesting to a potential employer and learning answers to questions that are likely to come up in an interview.
Learning just to learn is not going to be helpful on its own. Keep the outcome in mind and ask if this tutorial or course is going to help get me there. If not, then it is a hobby and not my work right now.