May 29, 2019

A Plea for Imagination

aka Learn to Remix
edit

Some of you reading this know that I occasionally dust off the old microphone, fire up a text editor and make some educational material that I put on the interwebs. Mostly on egghead. You might even be aware of this very blog post as a direct result of watching one of my lessons. If so, that’s awesome and I thank you. But fair warning, not all students are the same, and I might be speaking directly to you in the next few paragraphs.

For the most part, I’ve received overwhelming praise for my courses. I’m not bragging. Y’all are just incredibly grateful students and I really appreciate it. Receiving praise is a nice side effect of making the educational material.

That doesn’t mean my courses aren’t without their flaws or shortcomings, though. I am only human after all. The number one complaint I get about my lessons can be boiled down to, “How does this concept apply to real software?” Allow me to address this.

First, if you’ve never made educational material, than you might not realize that coming up with a good example is some of the hardest shit to do. It’s one thing to have a problem you’re trying to solve in the real world. The constraints reveal themselves and it doesn’t matter how easy or complex it is, you just have to do the work you have to do.

It’s another thing entirely to try and come up with an example that’s simple enough for any student to approach while being similar enough to their work that they can imagine how to use it. Pay attention to that line, we’ll come back to it.

You have to understand something, and it’s something I think is lost on a lot of people who watch egghead videos. One thing people fail to really grasp about egghead is that there is a style to an egghead lesson. There’s no fluff, nothing frivolous or extraneous at all. It is direct and to the point. Demonstration in favor of explanation. Thus, for all of you who have asked me to go further and explain when or why you would use a technique and have been disappointed that I didn’t, can you understand why there simply isn’t room for that within that context?

An egghead lesson is not the time to philosophize or enumerate all the possibilities for a technique. No, it is the time to get to the meat and potatoes of what you’re teaching in the most succinct way possible. To that end, my examples are often contrived and lacking in depth or nuance. It’s not that I’m not capable, it’s that it doesn’t suit the goals we’re going for.

I don’t actually see a problem with this mode of teaching, because, and here’s the crux of my thesis, it is the responsibility of the developer or engineer to be able to take the materials they are given and cultivate their imagination such that they can use the information in new ways, applied to new contexts. In other words, it’s your job to learn how to remix what you learn into something more. Key words: your job. Not my job. Your job.

It is not my job as an educator to try and figure out a way to teach you all the ways in which you can use a technique or API. That would be insane! Almost everything has an infinite number of applications, it would be terribly difficult to cover even a moderate number of use cases. However, if I teach you concepts and give you the skills to apply that knowledge to other situations, then we can actually achieve something useful.

Think of it like this, to a small degree, a math teacher forces you to brute force memorize some maths. Like multiplication and division tables. This is done to simplify some of the more abstract work you’ll have to handle soon enough. In web development, you can liken this to memorizing certain fundamental APIs, like certain HTML tags and how to nest elements. But after that, they teach you the concept of multiplication or division. Literally, they teach you an algorithm for solving those kinds of problems generally. They then ask you to imagine how to apply those algorithms in all sorts of ways. A math instructor provides you with tools and enough intuition to use them, but ultimately it is your responsibility to learn how to apply them in whatever situation you’re in.

The same goes for when I teach a lesson. It doesn’t matter if the example is contrived or all encompassing, it’s your job to figure out how to take the concept and apply it elsewhere.

The reason this irks me so much is that when I hear those criticisms, they are aimed at me, but in reality, they aren’t about me. No, those criticisms, they say more about the student than about me. Occasionally, they tell me I need to do a better job. Point taken if that’s the case. But more often, they tell me that this person hasn’t learned how to use their imagination. Haven’t learned how to remix shit yet. Or even worse, and this is the one that really gets me, it tells me that person is lazy.

I want to give y’all the benefit of the doubt. Software is hard. Sometimes really fucking hard. I have time and patience for people who try hard and struggle much. I’ve been there, we all have. Shit, I’ve just spent six weeks on the struggle bus on a project and the ride ain’t over yet. It happens to everyone I know at some point. We all need patience and understanding in those situations.

That being said, I have no patience for someone who is acting lazy. I ain’t got time to hold someone’s hand who doesn’t want to work hard with me. I don’t have the energy to carry you all the way to your epiphany or realization. You gotta work with me! Failing to exercise that gift of a brain you have, failing to even try to imagine other uses and scenarios for a lesson or technique, that’s lazy, and it’s not cool.

Look, I fundamentally believe we all have laziness in us. For hundreds of thousands of years, our hunter-gatherer ancestors worked far fewer hours than we do and socialized and leisured a whole lot more. I think it’s in our DNA to take things easy from time to time. But learning something new probably isn’t the time to do that. This is the time to be active, to be alert, to be imaginative.

You need to cultivate your imagination. You need to improve your ability to think divergently. That skill, more so than any engineering/dev technique itself, is what will unlock potential in your career, and maybe in your life. So I’m pleading with you, before you criticize me, or another person with something like the complaint above, be sure to take a minute and try to use your imagination. Try and remix that shit.

Epilogue

I’d be remiss if I made a post on imagination and remixing shit and didn’t mention this awesome documentary I watched a few years ago called Everything is a Remix. It’s a short 4 part documentary that is well worth your time. Check it out, tell me what you think about it by tweeting me. Peace! ☮


Liked the post?
Give the author a dopamine boost with a few "beard strokes". Click the beard up to 50 times to show your appreciation.
Tags
Kyle Shevlin's face, which is mostly a beard with eyes

Kyle Shevlin is the founder & lead software engineer of Agathist, a software development firm with a mission to build good software with good people.

Logo for Just Enough Functional Programming
Just Enough Functional Programming
Check out my courses!
If you enjoy my posts, you might enjoy my courses, too. Click the button to view the course or go to Courses for more information.
Sign up for my newsletter
Let's chat some more about TypeScript, React, and frontend web development. Unsubscribe at any time.