How to Learn New Things

Published 26 Jan 2020 · 11 min read
What are all the different ways to learn new things in your programming career

Update (March 2024): I recently had an engaging conversation on the Geeking Out podcast with host Adriana Villela, where we discussed the challenges of keeping up with rapid changes in the tech world. We covered various learning methods, acknowledging that there's no one-size-fits-all approach. Drawing from my 20+ years of experience in the field, I shared some of my favorite learning resources and techniques. Additionally, I opened up about my own learning journey where I had to learn HashiCorp Nomad from scratch as part of a platform migration. If you're interested in gaining valuable insights into learning processes, I recommend giving the episode a listen.

As a software developer, you constantly have to learn new things to keep up. Some areas, such as front end web development change faster than others but regardless of what area you're working in, there's a good chance that things have changed since you started your career. It's important to keep learning to take advantage of new opportunities and avoid being stuck in the same job forever, or being laid off from that job and struggling to find a new one because your skills have gone out of date.

So what's the best way to keep up to date? In this post, I'll walk you through several of the ways that I have learned over the years, and share some pros and cons of each.

1. University or College

This could be a part-time degree, say in computer science, or a certificate program focused on one area such as .NET development, offerred several evenings a week or weekends over the course of several months. This will typically involve several hours of formal in classroom learning with an instructor and other students. Your knowledge will be tested with quizes, assignments and exams. I completed a .NET certificate at a university as part of a continuing education program. The course schedule was two evenings a week from 6 to 9.

Pros

  • Immersive and guided learning experience.
  • No distractions, you're in a classroom so there's nothing else to do like watch TV or play video games.
  • Requirement to hand in assignments and pass exams keeps students accountable.
  • Having instructor available means students are less likely to get stuck because there's someone there to answer questions.
  • The longer time horizon means there's more time to absorb the material, especially combined with the mandatory homework assignments.
  • This has become less of a benefit in recent years, but some employers do require a formal degree so having that piece of paper can open some doors.

Cons

  • High time commitment including commuting to the campus classes, lectures, keeping up with the readings, doing homework assignments and preparing for exams.
  • Can be exhausting after a long day of work, to put in another 2-3 hours of class time, then get home late.
  • No flexibility in time, the schedule is usually fixed, for example Tuesday and Thursday evenings from 6 to 9. If life gets in the way as it sometimes does, its up to the student to try and find out what they missed.
  • The curriculum may be somewhat out of date due to the slow moving bureaucratic university/college environment, as compared to pace of change in tech.
  • These types of programs can be expensive. You may be required to purchase textbooks which can be pricey.

Is this for you?

This is a good option for those that can commit to the specific schedule, and have lots of free time to keep up with the coursework. This can work well for young, single folks with little to no fanily commitments. This is also a good choice for people who get distracted easily at home and prefer to be out at a particular location for learning. On the other hand, if you have a hectic home/personal life, or a job that regularly requires staying late to put out fires, this option may not work for you. You'll be constantly stressed trying to make it to class or may have to miss several lessons. For myself, I did this earlier in my career, but the fixed schedule wouldn't work for me now.

2. In Person Workshops

These also occur in a classroom with an instructor, but are more condensed, for example 1 or 2 days, or a week long workshop. They will typically focus on one specific area, for example React or SVG animations. Unlike university courses, there are no exams or homework assignments. I've done a few of these including a week long EJB course (eons ago), and a 2 day AngularJS workshop several years back. There will be hands-on exercises and students are typically required to bring their own laptops.

Pros

  • Immersive and guided learning experience.
  • No distractions, you're in a classroom so there's nothing else to do like watch TV or play video games.
  • Having instructor available means students are less likely to get stuck because there's someone there to answer questions.
  • Tend to be run by smaller companies that can be more nimble in setting the curriculum, so the topics taught will be more current.

Cons

  • No flexibility in the schedule, these types of courses typically run 9 to 5 during the week so you need to be able to get the time off work in order to take them. If you need to leave early, for example to pick up a child from school, you'll miss the material.
  • A lot of material gets squeezed into a relatively short amount of time, can be difficult to absorb all this in just a few sessions. In my experience they start off slow paced on the first day, then instructor realizes by afternoon of last day how much material there's yet to be covered and quickly whips through remaining material, leaving student's heads spinning.
  • Can be very pricey, although usually the price will include all learning materials.

Is this for you?

This option is best if your employer will pay for it and give you the time off to attend. This is most likely to happen if the material is relevant to what you're currently working on. You also have to be ok with not understanding everything right away because the pace may be too fast, and commit to catching up on your own later. My personal experience with these is that an impressive amount of material is covered, but tends to go by too fast for me to absorb. By the time I get around to reviewing it later, have forgotten the context of what the instructor was talking about at that moment.

3. Online Workshops

These are structured very similar to the in-person workshops but they're online rather than in person. Some like Frontend Masters offer their courses in both in-person and online formats simultaneously. If you happen to live nearby the city where the course is being held, you can attend in person, otherwise you'll be watching it live streamed from your computer at home. There's a live chat in the sidebar where students can post their questions while the instructor is teaching. At the end of each section, a facilitator will aggregate the questions for the instructor. They also make the videos available to participants later for review. I've taken several of these including Hardcore Functional Programming in JavaScript and Advanced SVG Animation. From my experience, these have similar pros and cons of in person workshops.

4. Books

There are countless programming books available from Amazon, O'Reilly, Manning, and many more. Some are more theoretical and can be read like a novel. Others are more practical walking you through code examples. For these, I highly recommend purchasing the physical book and investing in a book stand so you can prop the book upright beside your monitor. This is healthier for your neck than craning forward to read the book flat on the desk. Most books will also be available in e-formats but I've found the code formatting doesn't turn out as well as on physical printed pages.

Pros

  • Ultimate in time flexibility, you learn on your own time, whenever you have time.
  • You can put the book down after reading just one concept, then take the time to explore it on your own. For example, modify some of the code samples, lookup the documentation to learn more about a particular api, etc.

Cons

  • If there are many distractions at home such as the fridge, TV, crying baby etc, it will be difficult to focus and make progress.
  • If you get stuck, for example a code sample doesn't compile, there's no one to immediately ask for help. Of course you can "ask the internet" but this makes the experience asynchronous and can disrupt the learning flow.

Is this for you?

Books are great for those who have a lot of self discipline and are able to set aside some quiet time on a somewhat regular basis and focus on learning. It's also good for those with a variable schedule because you can choose when to study. This is another option I used earlier in my career to learn topics such as Clean Code, Refactoring, Design Patterns, Java, HTML, and CSS. For books with more prose, this was great. But for books with a lot of code, I found the transition from written page to screen and back a little jarring, like it would take time to get back to the line I had left off in the book. It seems small but these little context switches make it hard for me to focus.

5. MOOCs

According to the wiki page, a MOOC (Massive Open Online Course) is:

An online course aimed at unlimited participation and open access via the web.

These are often university level courses taught by university professors. They're offerred by a variety of institutions, Coursera was one of the first in this market, but now there's others such as individual universities, Udemy, edX and many others.

They follow a schedule, although not quite as rigid as in-classroom. Typically a new lecture is released each week along with a homework assignment that is due within a week or two. Some may require completion of a capstone project in addition to the weekly assignments and/or a final exam. You can watch the lectures at any time after they've been released, but in order to get full credit, the homework assignment must be completed on time. There is also a student forum, moderated by teaching assistants (TA) where students can post questions and receive answers from either the TAs or other students. Some courses may require the purchase of a textbook.

I've taken a few of these including Interactive Computer Graphics with WebGL at Coursera and Information Visualization at Indiana University. For the WebGL course, each homework assignment was to build an interactive application using what we'd learned that week, here is what I built. For the Information Visualization, the capstone project had us working in small teams to build a visualization for a client, the university arranged for several organizations to make their datasets available for this purpose. Here is the project my team built and the paper we self published on Figshare.

Sometimes MOOCs can be offered by companies that make a specific product, to improve knowledge of how to use that product. An example is MongoDB, which has MongoDB University. I took several courses here including M101JS: MongoDB for Node Developers, this one no longer seems to be offered but here are my course notes. I also took M201 on MongoDB Performance. My course notes on github are fairly popular.

Pros

  • Democratises education by making elite university courses available to all.
  • Assignments and exams reinforce learning.
  • Somewhat flexible schedule, you watch the lectures from home, or anywhere you have a laptop and internet access, when you have time.
  • Courses are free, or relatively low cost (compared to taking an actual in person class).
  • Student forums provide some interactivity and ability for students to get "unstuck" if they run into problems with the assignments, or having trouble understandng a concept.

Cons

  • High workload, could be anywhere from 6 to 10 hours a week required to keep up with lectures, assignments, project work and studying for tests and exams.
  • Even though you can watch the lectures whenever you have time, in practice if you don't keep up and watch them shortly after they're released, you'll be at risk of falling behind.
  • Although the student forums can be useful, they're still asynchronous (i.e. could be a day or more delay between asking a question and getting an answer), and there's no obligation for anyone to answer (although most questions do get answered within a day).
  • For the free ones, the dropout rates are quite high.

Is this for you?

MOOCs are a great option for those who can dedicate the necessary hours each week, but may have too variable of a schedule or live too far away to attend in person classes. Skip this if you don't have the discipline to sit down and study though. The material is challenging and there is no accountability, i.e. no one's taking attendance or going to follow-up with you if you don't submit an assignment.

6. Screencasts/Subscriptions

These are online courses that are completely self paced. They tend to be on very specific topics and involve many hands-on coding exercises which you can follow along with the instructor. An entire course may run several hours in total instruction time but will be usually be broken up into shorter 5 to 10 minute screencasts. Some examples of these include Pluralsight which offers a subscription based service. For a monthly or annual fee you can watch an unlimited number of courses on a huge variety of programming and IT topics. Others include Wes Bos and Level Up Tutorials. Some will offer a Q&A forum or Slack channel where students can ask questions.

This is my favorite style of learning and I've taken many of these courses on a variety of topics including Ruby, GatsbyJS, VueJS, Rails, Docker, Golang and many more. To get the most out of it, I frequently pause the videos to make notes and try out the exercises. This makes the learning more active and helps the material "stick". You can find my course notes on Github.

Pros

  • Same flexibility as with books, all study is done at home whenever you have time.
  • Short video format supports learning even for those with very busy schedules.
  • Very current and relevant topics, new courses are released frequently.
  • Cost varies, but tends to be less than the in person workshops. Some like Wes Bos even offer a few free courses.

Cons

  • No homework assignments or exams means there's no way to validate that you've learned the material correctly.
  • Video format can be a little too passive - if you sit back and watch it like a TV show, won't absorb that much.
  • Complete lack of schedule makes it easy to procrastinate, "I'm too tired now, will watch a video tomorrow".
  • Easy to get stuck, for example the versions of some libraries may have changed, or instructor may have small bug in their code, this can be a challenge for beginners.
  • Just like MOOC's, the student forums can be helpful, but will be asynchronous. In my experience with Pluralsight, some questions get answered in a few days, some never do.
  • Again like MOOCs, there's no accountability - if you pay for a subscription and never use it, it's your loss.

Is this for you?

This style of learning is great for people who don't have a lot of regular time to dedicate to learning, and are comfortable with having things not work exactly as it does in the screencast and are able to troubleshoot on their own. Skip this if you're an extreme procrastinator or need more accountability to get things done.

Final thoughts on learning

If you're not sure what style of learning is right for you, go ahead and try a few different ones. That's what I did and eventually reached the conclusion that self-paced screencasts work best for me.

No matter which style of learning you choose, you'll get the most out of it by taking an active approach rather than passive. This means making notes about what you're learning and doing hands-on exercises where possible. After each section, pause and try to write down what you've just learned in your own words. If you're struggling with this, it means you didn't quite grasp the concept so go ahead and read/listen again until you do understand it. Also, rather than just watch the instructor run some code, make sure to setup your development environment with all the libraries, compilers etc. and try it out for yourself. Then make some modifications and see if that works, if not, figure out why by looking up the API/documentation.

Regarding the expense, some employers will reimburse employees for continuing education. Definitely ask your boss or HR department if there is such a program where you work and what are the requirements. For example, you may be required to pay up front, then present some evidence of successful completion before being reimbursed.

And finally, keep on learning.