On the Quality of Training Materials - Online Courses

This is part 1 in a series of posts in which I air my gripes and grievances (and complements!) about various kinds of software development training and reference materials. This is all a followup to this recent post.

Online courses are all the rage in software development, and to be fair, they can be very useful in some cases. Depending on what you are looking for, and the quality of the course, you may be able to learn a ton from just a single course.

However, online classes have a lot of potential pitfalls as well. In the worst case scenario, not only will they not help you, but they can waste a lot of your time.

Problem 1 - Difficulty of Content

In my personal experience, most online training courses are intended for beginners and newbies to the entire concept of software development. If a course claims to be for seasoned developers who are simply new to Technology X, there is still a chance that it ends up walking you through topics such as “how to use the command line”, or “what’s a variable?”.

In some cases, the course explicitly claims to contain intermediate or advanced content, but in reality such content only shows up at the very end of the course. The rest of it is padded out with the usual beginner fluff.

When I was trying to learn the Kotlin programming language, I came across a course on Udemy titled Kotlin for Java Developers. I ended up passing on it after reading some of the reviews. One reviewer claims the following:

She spends a lot of time demonstrating things over and over and over again with only minute variations, seemingly just to pad out the course to make it longer.

For example: once you’ve shown how immutability works, you don’t need to spend five minutes during the videos on each immutable data structure demonstrating that it, too, is immutable! Just say “lists, maps, sets are all immutable by default” and move on with life.

That’s the kind of stuff that drives me nuts. Going over Lists separate from Maps, Sets, etc only makes sense if the audience doesn’t know the difference between a Map and a Set. But if you label your course as being for existing Java developers, it is a safe assumption that they understand the Java Collections API. Why waste so much time?

Problem 2 - Random Access is Hard

Online courses, by their nature as courses, are meant to be followed from start to finish. Most of them are also made out of videos, and videos are also meant to be viewed from start to finish.

This means that online courses are not conducive to Random Access. You cannot easily skip sections or jump to around to the topics that interest you most. Locating the content you want is tricky when you may potentially have to seek through multiple videos to get to it. Even if you do locate it, you may find that you need some additional context to make sense of the material, in which case you have to search even more.

Now, this is not a problem in a good course, since you will likely want to follow through the whole thing. But if a class ends up having a slow stretch in the beginning or middle, you are probably better off either hunkering through it, or just ditching the course. In either case, you are going to end up wasting time.

Personally, this is mainly a problem when it comes to finding a good course. I can quickly flip through a book in order to determine whether the content is right for me. That is not as easy with a video-based online class.

Problem 3 - What’s your Angle?

Like I said earlier, it is hard for me to talk about this stuff, as I don’t like to be negative to others, but sometimes I question the intentions of some online course authors.

To use Kotlin and Udemy again as an example, a search for “Kotlin” brings up multiple courses that are ready to teach you how to use Kotlin for Android app development. The “Kotlin for Java Programmers” class I mentioned is one of the few Kotlin-related courses that doesn’t have anything to do with Android.

Now, you can argue that this makes a certain amount of sense. Kotlin is now an officially supported language for Android app development, so Android developers are among the most likely individuals to have an interest in learning it. But it is certainly not the only place it can be (or is) used, nor was Kotlin designed with Android apps in mind. It was created as a language that Java developers of all stripes could make use of to write more concise code. So why don’t we see more material related to general use of Kotlin?

Maybe the answer is “Udemy sucks”, or maybe it’s “not a lot of people are actually using Kotlin outside the Android ecosystem”. However, the pessimist in me cannot help but wonder if the answer is more cynical - namely, that smartphone apps are still seen as the software-equivalent of the California gold rush, and a lot of course authors see Android and iOS-specific training as the equivalent of selling picks and shovels. In this scenario, I have my doubts as to the overall quality of the material.

Outside of this specific market, a lot of other courses have titles and descriptions that remind me of all the sketchy code bootcamps that promise to make you a fully hireable software dev after just a few weeks of training. My concerns are the same in this case.