It wasn't what you said, but how you said it


I make videos for a living and I swear: each one is an adventure. You would think I would have a system down by now but, as it turns out, each video is a unique thing that demands it's own type of story telling.

For instance: here's the latest video I did for the VS Code team. It's on Remote Development with VS Code, which is wild stuff! Many call it the "killer feature", but that brings up an interesting problem: how do you make a video about an 'interesting feature'?

We discussed this internally (I work at Microsoft supporting VS Code). My initial thought was that I would show how you could set up and configure Ghost (the blogging platform) on a remote machine. I did a few takes on that idea but it turned out to be a video about Ghost, not VS Code Remote Development.

That wouldn't do. We needed something a bit more direct and engaging.

The Tension Script

This video was for YouTube, and there is a particular structure that many YouTubers favor, and it goes something like this:

  • Mercilessly grab your audience's attention.
  • Add bait for them to stick around until the end.
  • Build out your story in three acts, building and releasing tension with each act.
  • Wind up with a Big Reveal at the end.
  • Call to action to one of your other videos.

If I used this script for the VS Code Remote video, I might do something like this:

Opening scene with a montage of Rob yelling at Vim, not being able to quit or maybe wandering around completely lost in a terminal session on the server.

Rob starts a remote connection with VS Code, muttering "thank god..." and then winking at the camera: "stick around to the end and I'll share 5 tips that will save you hours when getting started. Don't forget to like a subscribe". 🤮

Yeah, I know. But if you want eyeballs and watch hours, you gotta play the game. Which is more about you as the presenter, less about your audience. Ew.

Tutorials vs. Stories

With my original VS Code Remote script, I was trying to create a story that viewers could relate to. This can work, but it's really tough to tell a story and create a tutorial at the same time.

I took this to a whole new level with A Curious Moon. I really enjoyed writing it, but I kept wondering if I was doing it more for me, or for my reader. This is where things get interesting.

Tutorials have a "standard" structure:

  • Introduce the topic and yourself.
  • Tell people what they're going to learn.
  • Present a problem your audience might face.
  • Present the solution, which is the thing your tutorial is about.
  • Summarize the problem and solution for retention.
  • Offer additional resources.
  • Say goodbye and thank you.

I think this is a logical structure and it makes sense to the presenter. The problem is that tutorials that are structured like this are boring and bored viewers don't retain things.

Stories, on the other hand, can be told with a variety of techniques, including Campbell's "The Hero's Journey", which is every action or adventure movie you've ever seen.

Star Wars, Lord of the Rings, The Barbie Movie...

  • Call to adventure
  • "No going back" point
  • Meet the wizard in the forest, the teacher in the cave, etc.
  • Come close to death.
  • Defeat the dragon, just barely.
  • Return the hero.

Working this into a tutorial video would be tricky, but probably fun:

Opening scene: Rob is eating a sandwich on his lunch break and gets an email from his boss, Burke Holland. Burke tells him the group needs a new blog, ASAP, and it has to be ready in two hours.

Rob drops his sandwich and uses his last Azure credit to create a Linux VM. He doesn't know what platform to go with, but just then he sees a tweet from John O'Nolan, the cofounder of Ghost. He asks John for some help, and they get on a Zoom call together. They use VS Code's Remote feature to run the install scripts, update settings, and tweak the theme. Things are going well until...

John has to leave so Rob continues the installation but soon notices that things are starting to slow down to unusable levels. He realizes at the last second that he picked the wrong SKU! Everything he's done has been for nothing!

"Use the elastic scaler, Rob..." It's the familiar voice of Scott Hanselman, who has somehow appeared from nowhere. He hands Rob a magical slider bar which scales the server up a SKU or two, and then restarts it just in time...

I admit, it would be fun to make this video but, again, I think it would be more about me and less about you.

In Medias Res

That's a Latin term that means "in the middle of things" or, if you're a writer, "starting in the middle". It's effective because it adds a layer of mystery to your story.

You're probably familiar with this plot device with title's like The Bourne Ultimatum, Forrest Gump, The Fugitive, or any detective story. You come in at the peak of tension and have to figure out how you got there, discovering more about the main character and what's happening as time goes on.

Here is an outstanding video I found on YouTube, where the author restructures Passengers (Chris Pratt, Jennifer Lawrence) to start in the middle. It's told from Jennifer's point of view instead of Chris's, and turns into a tension-filled horror story! I think it's fantasic.

It would be fun to do this in a tutorial video. The opening scene could be Slack going off with downtime alarms:

Rob stumbles into his home office at 3am and everything is down. The server appears to be up but no services are running. Is it a disk space issue? DNS? Did we get hacked?

Rob opens up VS Code to see if he can get the site running locally using port forwarding. Nope, nothing. He starts the debugger to see where the error is and notices that his cache server isn't responding...

This would be entertaining, but would you actually learn something? Interesting dilemma.

Top Down

This is a standard way to structure a course or tutorial and is what I use most often. You start in a general way, then drill down into each topic.

In today's video you're going to learn about Remote Development with VS Code. This is incredibly useful if you can't work on your local machine, or if you prefer a more visual way to work on your server. You can run external code as if it were local, and you can even debug! Let's see how.

Tell people what they're going to get, then give it to them.

This is how universities might structure a Computer Science degree program. For instance:

  • First year would mostly be math and general education classes with Introduction to Computer Science and Programming.
  • In the second year you might get into data structures and algorithms, more math, computation and logic.
  • Third year you might get into complexity theory, software engineering, networking and possibly an ethics class
  • The final year is the project year with advanced elective classes including Cybersecurity, Cryptography, AI/ML, Robotics, Compiler Design, Language Design, and advanced theory classes.

I have a degree in Geology. At first, the classes I took seemed random and disconnected but as the years passed by, everything started to mesh and I got excited.

I remember taking a Structural Geology class (mountains, faults, big stuff) and Advanced Mineralogy and having one of those "epiphany moments", where you could see how the chemistry and molecular structure of a dominant mineral could change the way a mountain was shaped. Melting limestone peaks and rounded granite domes look the way they do because of how they're made.

It's that moment, that connecting of the dots, that remains with you forever and fires you up!

Missing CS Degree Outline Ideas

I mentioned in the last email that I was considering creating a course called The Missing CS Degree and an overwhelming amount of you thought it was a darn fine idea.

But how do I structure such a thing? I have a few thoughts, but I decided to go with a typical curriculum structure (top down) but I'm not all that sure how it translates to an online course.

I really could use your help. So far, I have these modules:

  • The Big Picture: History and Evolution of Computer Science. Ancient computers, Babbage, Lovelace, Turing, Hopper, Shannon, etc.
  • Fundamentals of Logic and Problem Solving. Boolean and binary, Information Theory, Set Theory and SQL.
  • Algorithms and Computational Thinking. Intro to data structures and algorithms. Recursion, etc.
  • Theoretical Computer Science and Cryptography. State machines, Turing Completeness, Symmetric/Asymmetric encryption, P vs. NP with Prime Factorization and other NP Hard problems.
  • Data Structures and Secure Data Storage. Trees, Graphs, Hashes, Tries, Trigrams and Bigrams. Hash Functions, graph traversal.
  • Programming Paradigms. Asynchronous, functional, object-oriented, imperative, concurrency vs. parallel.
  • Networking and Web Systems. TCP/IP, HTTP and DNS basics. Practical networking tools.
  • Ethics in Programming. Discuss real world case studies. Quantum computing, AI and ML.

I'll admit: this seems ambitious so please don't hold me to it! I want to start general and move into more specific things as we go along. There is a ton of overlap, especially with data structures and algorithms.

What do you think? Add more? Maybe take a few things out? I'm iffy on the Networking module but it's so useful to know. I had an Operating Systems and Compilers module in there but how often do we need to know that?

Thanks for wandering through story time with me! Grateful for each of you...

Rob

🥷🏽 Notes From an Imposter Programmer

I taught myself to code in 1998 and within 7 years had a client list that included Google, Microsoft, Starbucks, Ameritech, KLA-Tencor, PayPal, and Visa. In 2014 I decided that I really needed to understand core Computer Science concepts, so I dove in, using the free resources from MIT and Stanford. In 2016 I shared what I learned with The Imposter's Handbook.

Read more from 🥷🏽 Notes From an Imposter Programmer

I was talking with a coworker the other day about one of the new AI offerings and how well it simulated human interaction. I was asking it to summarize some notes I had taken on a book, and it did a fantastic job - but I then mentioned something I truly believe: AI is mediocre, at best It has to be, by definition. It's just repeating back to us the most common and probable things that we have said to it. Or, as Scott Hanselman describes it: "AI is a sock puppet on your own hand":...

I was at a local clothing store with my youngest, looking at clothes over the summer. She was trying to find a good pair of jeans, so we ended up at the Levis store, which isn't cheap. She found a very nice pair that were $95, which seemed a bit high but she's in college now and I suppose that's when you start thinking about buying nicer things. She's extremely thrifty, unlike me, so she suggested: Dad we should drive up to Nordstrom and look there. They have a great selection and it's...

We invest a lot of our time learning programming languages and frameworks, but I think it's just as important to learn the "foundational" skills of our industry, including: Patterns and Principles Architectural Styles Object-oriented as well as Functional Your editor SQL I think most people absorb the first two as their career progresses, and some might dabble in the third. But how many of us take the time to learn SQL or an editing skill like Vim? SQL: The Gift That Keeps Giving Whenever I...