The Modern .NET Show

Episode 100 - Celebratory Ask Me Anything

Embedded Player

Episode 100 - Celebratory Ask Me Anything
The .NET Core Podcast

Episode 100 - Celebratory Ask Me Anything

Ask Me Anything Contributors

The following people sent in questions for this episode and asked that their names be read out:

There were other questions, but the authors have expressed a wish to remain anonymous.

Supporting The Show

If this episode was interesting or useful to you, please consider supporting the show with one of the above options.

Episode Transcription

Hello everyone and welcome to THE .NET Core Podcast. An award-winning podcast where we reach into the core of the .NET technology stack and, with the help of the .NET community, present you with the information that you need in order to grok the many moving parts of one of the biggest cross-platform, multi-application frameworks on the planet.

I am your host, Jamie “GaProgMan” Taylor and this episode is a slight departure from the norm. As this is episode 100, I thought it would be fun to have an ama (or Ask Me Anything). Listeners on Patreon, Twitter, and LinkedIn were asked to submit their questions for this episode, and you’re about to listen to my answers to those questions.

I swear that it’ll be much more fun than I’m making it seem

There are around 50 links in this episode, so do make sure to navigate through to the full show notes via the link in your podcatcher. Once there, you’ll find a full transcription, an embedded player, and all of the links mentioned in this episode.

A couple of format things, I’m going to be reading slightly editorialised versions of the questions

and when I do read them, I’ll sound like this

- Jamie

I’ll use the same formatting if I need to quote anything. But that’s about the only thing which will be different on this episode.

So let’s sit back, open up a terminal, type in dotnet new podcast and let the show begin.

AMA Intro

I’d been thinking about how to celebrate the 100th episode of the show since around February of 2022, and I even wrote up a post asking for ideas on the Patreon page for the show. The gist of the post was:

Episode 100 is due to drop on June 8th, 2022, and I’d love to hear your thoughts on what that episode could contain. I’d love to do something fun for you all, but I’m currently out of ideas.

Maybe I could take questions from you all? Maybe I could give some stuff away? Maybe I could make it a clip show of some of everyone’s favourite episodes? I’m really not sure, but I’m open to ideas.

Please let me know (either as replies to this post), via a direct mail through Patreon, via the contact page of the podcast's website, or as a DM on Twitter - @dotnetcoreshow

- Jamie

I’m really glad that I didn’t go with the clip show idea. I can’t think of any examples of clip shows - across either podcasting or TV shows - that anyone actually enjoyed. Clip shows usually take are tonnes of work to create, and are often disliked by everyone who consumes them. Mostly because people see through them for what they are: filler.

I then followed that up with a twitter poll on April 17th, 2022 asking:

We’re still figuring out the minutia, but we’re thinking of hosting an #askmeanything for the 100th episode of the #podcast. Folks would send questions in, and they would be answered on an episode of the #dotnet core #podcast. Does that sound interesting?

With the incredibly scientific 16 responses - a very small percentage of the show’s followers there - and 93.8% of those pointing to yes, I sent out another tweet and quickly built the 2022 AMA submission page:

=`And the question submission page is live! If you have a question that you would like to be included in episode 100 of the show, then please send it in at the link below. Questions can be on #dotnet, #podcasting, anything really. https://dotnetcore.show/2022-ama/

For those of you who haven’t see the 2022 AMA submission page, the “rules” where simple:

Feel free to ask any questions on .NET (and related technologies), podcasting, or anything else. I will do my best to get an answer for your question and include it in the show.

And with that, episode 100 was born. So let’s take a look at some of the questions and my answers to them.

remember to navigate through to the full show notes, as there are a lot of links in this episode

But one last thing before we start: a few of the answers in this episode relate to things like concentration, physical and mental health, and taking care of ourselves. I’m in no way an expert on these matters and am purely giving advice based on my own experiences.

On Memes

Our first question came from Russel, and they asked:

I am Russel, would you rather fight a horse-sized duck or 100 duck-sized horses?

- Russel

… really?

On Where The Industry Might Be Heading

Friend of the show Steve Worthy had a question about where I think the development industry might be going:

Where do you see the developer industry going in the next five years and how will that change how you and others work and collaborate on projects?

- Steve Worthy

This is a great question for a number of reasons, but chief among them being that I can put my futurist hat on and dream a little dream. So come with me whilst we take a trip to the near future.

I think that the future is going to be a combination of both low code/no code and source code generation.

Low code/no code is great for business folks who want to quickly prototype a process or an application idea. Most systems allow users to drag boxes, which represent functionality, around on a screen and connect them together - kind of like Scratch, but a little more involved. Once you’ve created your process, you can hit a button and it’ll run just like any other program.

Most low code/no code systems aren’t currently ready for “prime time” (I wouldn’t recommend replacing a key piece of your business infrastructure with something made using it just yet). But that’s mostly because the tools used to build low code/no code applications can’t easily deal with the nuance and fuzzy logic which sometimes applies to the rules that you don’t realise are in place in your infrastructure and operations. For the time being, you might still need a developer to turn that low code/no code system into a battle-tested, production ready.

But a low code/no code app will likely get you somewhere between 30 and 50% of the way to a functioning app.

Source code generation is another thing which is already happening - the .NET compiler does a fair bit of this for us - and it will come on in leaps and bounds. The gist of source code generation is, you can either provide a template or a set of rules and say to the compiler, “using this template and these rules, go look at the shape of the data, and generate all of the code to deal with it.” This has the ability to save countless hours of an engineer’s time, because they don’t have to type out the same boilerplate code over and over again. Source code generation can even generate test code for you, too.

A programmer/coder/engineer/whatever-title-you-chose will usually only spend around 30-60% of their time actually typing in code, with the rest of their time spent on things like reading code, debugging, attending meetings, reading bug reports, and helping their colleagues. So anything we can do, as an industry, to help make engineers more productive during that 30-60% of their time is a positive in my book.

That’s my opinion of what the next five years looks like for the development industry.

On Language Likes and Dislikes

boldty wanted to ask about my thoughts on Java and C#:

What do you like the most about java? And why do you hate dotnet?

- boldty

I really liked the double question here, and as someone who has dabbled with quite a few languages in my career, I feel like I could continue answering this question for hours and hours.

I haven’t used a great deal of Java, but I have used Kotlin which is based on Java and uses the JVM. I’ve done some Android app development with Kotlin and found it really nice to work with - especially as I didn’t have any experience with Xamarin at the time.

What I really like about Java is the fact that there are millions of libraries available for it, and that they’re all compatible with Kotlin and the other JVM languages. I also really like that it’s syntactically very similar to C#, so converting a code base from one to the other is relatively simple

imagine converting a codebase from terse C++ code to C#, and you’ll realise what I mean

And since the are so similar I can usually do the conversion in my head.

Plus, we wouldn’t have the wonderful NodaTime library for .NET where it not for JodaTime for Java.

Before I get on to what I dislike about .NET, please remember that

this show is not created by, endorsed by, or affiliated with the .NET team

As for what I dislike (I feel like “hate” is a strong word) about .NET: I don’t like that it’s taken almost 20 years to get enough syntactic sugar and compiler help to be able to reduce boilerplate code down through things like implicit usings, file scoped namespaces, and Minimal APIs.

I fully understand that there’s a lot of compiler magic and code generation going on in the background, but I feel like this could have come sooner. Then again, perhaps these innovations were held off until “modern .NET” was ready. On the other hand, just look at how the .NET community reacted to the bang bang (!!) operator - maybe we’re not ready for these kinds of innovations.

I mean, take a look at a classic “Hello, World!” in .NET Framework and the same code base in .NET 6. In one (.NET Framework) you have 11 lines of code, with only one line of code actually being useful; whereas the other (.NET 6) is one line of code

technically it’s two, because there’s a comment. But still

I am all about doing what I can to help people get started in development, and the simplifying of code by removing boilerplate greatly helps with that. If I’m trying to help someone who is brand new to writing code, I no longer have to explain:

They can simply run dotnet new console and get all the code they need on one, simple easy to read line. And by simplifying it, you immediately lower the barrier to entry for new folks whilst simultaneously making it so that we all have to type less

because we all only have so many keypresses in our fingers

Not only that, it reduces eye strain and memory usage in our heads. We no longer have to rely on code folding to hide the bits of code which aren’t immediately useful, and it means that the code itself is shorter and more concise.

But why did it take this long for .NET to get here?

Check the show notes for examples of “Hello, World!” in both versions of .NET (I wont bore you by reading out code on the show), and tell me which one you think is easier to read.


“Hello, World!” in .NET Framework 4.8:

using System;

namespace throwaway
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

“Hello, World!” in .NET 6:

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

So in summary:

On Starting From Day 0

Carl asked about starting again:

If you were to start your dev journey from day 0 (0 based index, because we’re not monsters) would you still pick dotNET? There are a lot of choices today and arguably the eco system has moved on a lot, can dotNET compete to attract enough new talent in a very competitive field?

- Carl

This is a very compelling question, because there really are a lot of options for folks getting into development. You can’t argue with the almost non-existant barrier to entry for JavaScript - if you have a browser and a text editor, you have everything that need to get started. And that’s what a lot of coding bootcamps use to get people up to speed very quickly. After all, JavaScript, npm, and React/Angular/Vue/Svelte is all you really need to get started with something very quickly.

I’m not sure that C# and .NET can easily compete with that. After all, until .NET 6 you had to explain a whole bunch of stuff before you could start to learn anything useful. Take the classic “Hello, World!” as an example

I use this as an example all the time, but it’s literally the first thing you learn to code

In JavaScript, this is a single line. In Python, it’s a single line. In previous versions of .NET it was upwards of 11 - it’s currently one.

But is “Hello, World” a good yardstick for measuring the complexity of a programming language framework? Once you start to do anything vaguely useful, the difficult curve of .NET ramps back up again. You have to start talking about classes, functions, lambdas, and all that fun stuff. Sure, these things are there in JavaScript, but you don’t need them in order to start making something useful. You can start by writing purely procedural JavaScript and work up to things like classes, arrow syntax, hoisting this, and lambdas. But I don’t think you can do that so easily with C# and .NET.

Then again, I got started with BASIC and x86 Assembler

which is like learning simple English and ancient Greek at the same time

I think that if I had to start again, I honestly wouldn’t know where to look. My opinion of how I’d start again is also rather coloured by the fact that I have all the knowledge and experience that I do. I have a feeling that I’d start with JavaScript, but knowing what I do right now I’d likely start with something like Go. It’s functional enough, it handles references and addresses automatically (for the most part), and is built for concurrency. But I say that knowing what those words and phrases mean.

Would I pick .NET? I’m honestly not sure.

On Work Equipment

Mark over at RJJ Software had this series of questions on equipment:

Standing desk or siting desk?

Preferred operating system?

What piece of tech would you not skimp on buying? Keyboards etc.

Micro keyboard or full keyboard?

- Mark

So I prefer to sit, but that’s largely because I’ve spent most of my programming career sitting down. I also used to stand a lot during my job at college

I worked in retail

A combination of standing for eight hours and the uncomfortable shoes I had to wear put me off of standing for long periods of time. I know and that standing is likely better for me, but I just don’t want to.

As for my preferred operating system, would you believe me if I said that I don’t really have one? I move between Windows, MacOS, and Linuxes on an almost daily basis.

I’m very much of the opinion of: use what works for you, and what you are productive with. I had my last “argument” (hopefully you can hear the bunny quotes) about which operating system is “better” decades ago. They all do the same things (to a certain extent) in almost the exact same ways, so it’s really down to what the user likes and whether the tools they need are available for that operating system - there’s no point in using an OS if the tools you need aren’t available for it.

Which piece of tech wouldn’t I skrimp on?

"skrimp" here means "to buy cheaply"

I would say that a good quality keyboard, a comfortable chair (if you’re going to sit), and adequate lighting are a must.

Most people interact with their computers with either a keyboard or a mouse - there are those who interact in different ways due to accessibility concerns - so they need to be comfortable to use, and they need to feel right. I prefer to use a mechanical keyboard, but that isn’t to everyone tastes. Why do I use a mech? The mushy keyboards actually hurt my fingers after a while.

If you’re going to be sitting in one place for around eight hours across a day - hopefully with plenty of breaks and moving around - then you really need to buy a chair which suits your needs and supports you in the places where you need support. This might mean going out and buying a designer chair for thousands of dollars, or it might mean buying a bargain bin chair from the local office supplies store. It really depends on what your needs are. I would advise trying a bunch of chairs out before settling on one, if you can.

As for micro keyboards vs full keyboards, I’m guessing that you mean things like ten-keyless, 75%, 65%, 60% and 40% keyboards vs a traditional 104 key keyboard. Im a big fan of full sized keyboards. I’ve had an used ten-keyless keyboards

that’s a keyboard without the number pad

and I found that I needed the number pad more often that I thought I would. So I prefer the full sized 104 keyboards.

On How The Show Started

A listener who wishes to remain anonymous wanted to know about the genesis of the show:

I haven’t been listening since the start of the show but I’d love to know about how it all began. So how did you come up with the idea of the show?

- wished to remain anonymous

Back in 2016 (yes the story of this podcast goes back that far), I’d started blogging about .NET Core. This was way back in the pre-1.0 timeframe, and I was writing about some of the cool interesting features (and some of the drawbacks) that .NET Core had. I didn’t have a Windows machine back then, so being able to run .NET applications on my Linux and Mac OS boxes without having to use Mono and GTK# was a big step up.

So I’d been writing about .NET Core for about two years, and the articles were getting longer and longer. The first blog post I ever about .NET Core was 514 words, and some the longest posts where around 3000+ words long. I’m not a very good writer, so writing 3000+ words and an entire demo application every week started to take it’s toll on me.

I had been chatting with some folks over on the Coding Blocks slack

pro tip: if you don’t listen to their show then you really should

and I’d said something along the lines of how there weren’t any .NET Core specific podcasts. There were shows which were .NET specific, but none that were all about .NET Core. After a long conversation with some amazing people, I’d realised that I had found a corner in the market.

So one Saturday in May 2018, I went to a local coffee shop with my Mac Air. I bought a coffee, got sat down with my laptop, and opened visual studio code. Several hours later I had an room temperature coffee which sat undrunk, and plans for the first 20 episodes. The plans where bullet points in a markdown file, but there was a plan.

I then took a couple of hours each night to see if I could flesh out some of the episodes, moving from bullet points to paragraphs. Soon, I had the first six monologue episodes written. I spent a little time playing around with the content and moving some words around, then got my Blue Yeti microphone

something my brother had given me, and I had been using for live stream experiments, and some of my first podcast guest appearances

and decided to record a reading of one of the monologues. It wasn’t bad, wasn’t great either. It needed something.

So I headed over to Fiverr and paid a musician to create some music for the show. My requirements felt rather clear

I’m looking for an intro song for my new programming podcast. I can hear the tune in my head, and I know which chords I’d like (it would have to start in C# and include F# somewhere), but I can’t play it.

I know that I’d want an overdriven/distorted electric guitar sound to it, and for the bass to be root notes (maybe with a little flair involved) - something with a similar feel to Learn to Fly by Foo Fighters, yet with a similar sound to Don’t Feed the Trolls by Jonathan Coulton.

The reason I picked the two chords (C# and F#) is because the topic of the podcast will be two computer programming languages with those names.

- Jamie

The musician created the intro music you’ve heard at the start of the last 100 episodes, and sent it over within 48 hours of me placing the initial order with them.

So I had a monologue and some music. It was almost everything I needed to create episode 1. It wasn’t long after the first episode dropped that people started reaching out to see if they could guest on the show. So after only a week, the show’s format needed to evolve to become an interview show. I released the first eight monologues between the first few interview episodes, and there are still some monologues unreleased

because you never know when you might have to drop an episode quickly

but I won’t be releasing them anytime soon, as I really like interviewing people from the .NET community.

I hope that answers your question.


A Request To You All

I hope that you’re enjoying this episode of the show. If you are, would you mind sharing it with a colleague? Check your podcatcher for a link to show notes, which has an embedded player within it, and share that link. I’d really appreciate it if you would share the show.

That’s the best (and easiest) way to support the show, but if you’d like other ways to support it, you could:

I would love it if you would share the show with a friend or colleague or leave a rating or review. The other options are completely up to you, and are not required to continue enjoying the show.

Anyway, back to the show.


On Music For Concentration

Mayuresh asked about a playlist mentioned in a recent episode:

Can you please share the sounds/music playlist that you mentioned in your last podcast. Thank you!

- Mayuresh

The “last podcast” in question here is episode 97 - Developer Productivity with Dan Clarke. In that episode, I said the following:

If I’m reading something, and someone’s talking to me, I can’t do both, because - and I’m sure my friend Paul Seal is gonna hate me saying this - I’m an auditory learner… My attention goes directly to the sound that’s happening. So if I’m reading and I want to take something in, I know that I have to sit in either silence or I have a playlist of music that I put on that provides some light background noise. And I’m happy to sort of share the playlist if people are interested. Do get in touch.

Whenever I need to concentrate, perhaps if I’m studying or if I need to get deep into flow state for a piece of work, I’ll put on one of the compilations released every quarter by the folks over at Chillhop. I’ve bought the compilations on BandCamp, and they are usually “pay what you’d like”. They also have a page on their website where you can stream their entire back catalogue for free.

I find their combination of simple beats and chord progressions, and lack of vocals to be soothing, and they help me to get into a flow state.

I’ve been using their music for this purpose for around four years, so it may be a combination of practise and conditioning or habit at this point; I wonder whether a subconscious part of my brain simpley goes

chillhop? Time to concentrate then

- Jamie’s brain

I also make a point of actually getting up and walking over to a different seat when I’m about to put any of their stuff on. I sit there for a few minutes, with some of their music playing, and just breathe. It’s a kind of meditation I think. I’m not actively listening to the music, but I’m focussing on my breathing. I try to get my breath rate down, but increase the depth of each breath. After a few minutes of this, I’ll head over to either my desk (if I’m working) or to my study palce (if studying) and get on with the task at hand.

Playing their music through headphones works, but I prefer the bigger, more rounded, room filling sound that my speakers can create

the benefits of working from home, I guess

plus it gives the skin on my ears a chance to breathe. I also have a pair of bone conducting headphones for when I’m working in a space with others and want to be able to listen out for if they want my attention, or for any environmental sounds.

On Getting Distracted

Fandermill asked an interesting question about getting distracted during the hard parts of development:

When I encounter a difficult problem while programming, I tend to get distracted quickly as checking the news or Twitter is just one click away.

How do you keep the focus on solving the problem when the first thing you come up with is not the right solution?

- Folkert

This is a great question, and I feel like you can solve this by arranging things so that you fall into the pit of success. I take a multi-pronged approach when it comes to keeping distraction at bay.

First, I’m lucky enough to be able to have a a few computers: one for writing code on and one for socials, email, video games, music, and all those other personal things which get in the way of doing work. I also make a point of never signing into social accounts on the “work” machine. If you’re in a position where you can’t do this, consider setting up a separate user account on your computer specifically for getting work done and apply the same rules.

And as a side note: if you’re given a hardware by the company you work for never do personal things on it - including socials, emails, and e-commerce stuff.

I also make a point of putting my phone on the other side of the room that I’m working in - another benefit of working from home. This way, in order for me to check my socials I have to literally get up and walk over to my phone.

I also make a point of getting up and walking around every hour or so. I’ve found that taking five minutes to walk around the house, or to head outside and look into the distance can help me to stay focused on the task at hand. From what I’ve read on the subject, attention is something that you have a finite amount of. As you go through your day, your focus level drops and can only be replaced by taking a break or having a nap.

Let’s say that you start with 100 focus points, and that your first task requires 30 focus points in order to complete. That will leave you with 70 points for the rest of the day. I’ve found that as I get down to around half of my total focus supply, I start to flag. I usually find that this happens at around lunch time, so I make a point to go out for a walk during my break - just once around the block is enough. Throw some headphones on, put on your shoes and coat, and go for a 5 minute walk. Try not to think about anything relating to work whilst you are out of the house, as you want to take in the fresh air and enjoy your time. When you get back, you’ll feel refreshed and ready to hit the ground running.

The other thing that I’ve found can help is getting some good quality sleep. I’m not a doctor or a neuroscientist, but from what I’ve read about sleep, if you don’t get enough you wont be able to concentrate. And this is something I’m sure we’ve all felt - like your head is full of rocks, and like you’re a zombie. But how much sleep is enough? This is definitely not something I can answer for you. But I’ve been tracking my sleep using a fitbit - although there are lots of other devices on the market - for long enough that I’ve found that eight hours of sleep is the sweet spot for me.

Also please note that I said “sleep” not “time in bed”, because there’s a difference.

Let’s say that you set an alarm for 6am, and you go to bed at midnight. A sleep specialist would say that you have had six hours of “sleep opportunity”, this is the amount of time that you spent in bed. But during those six hours, you may have only slept for two or three. What you need to do is figure out how much sleep you need to not feel like your head is full of rocks, then give yourself at least that much sleep opportunity plus 30 minutes.

Then set that time in stone and plan the rest of your day around it - not the other way around.

It’s not a simple answer, and I’m definitely not an expert in sleep or sleep patterns, but I hope that helps.

Another On Memes

Another question comes from Russel

… wait didn’t we already have one from them?

I would like you to answer my question: Would you rather fight a horse-sized duck or 100 duck-sized horses?

- Russel

Ok. Let’s think about this logically. Let’s say that the average duck is about half a foot tall, and that most horses are around five feet tall.

… a five foot tall duck is actually a rather upsetting visual. Whereas a half foot tall horse is possibly one of the cutest things I can think of… but imagining 100 of them is rather upsetting, too.

I’d rather not fight anything, but I think that there would be a higher chance of being overwhelmed by 100 horses if they came at me in a stampede, regardless of their size.

I think that I could charm and partially tame a giant duck. And failing that, I’m pretty sure that I can run faster than a duck, even at maximum waddle.

there’s a phrase I never thought I’d say on this show: "maximum waddle"

On Podcasters and Competition

Mark over at RJJ had this question on competition in the podcasting space:

Do you see other podcasters as competition?

- Mark

Absolutely not. Success to me isn’t having more downloads or more listeners than any of the other shows - especially since folks like .NET Rocks, Coding Blocks, and The 6 Figure Developer Podcast

you should listen to each of those shows, by the way

have been around way longer than this show.

So my measure of success for this show is just one listener walking away from an episode knowing one more thing than they did 45 minutes previously. An investment of between 45 and 90 minutes of someone’s time is a lot to ask, and if they get just one thing from that investment then I’m happy.

On Getting Better At Writing Code

Another listener who wishes to remain anonymous asked:

What are your three tips for getting better at writing code?

- wished to remain anonymous

This is a great question, and it’s something I talk with junior developers and mentees about a lot. My three top tips are:

  1. Read code
  2. Read books
  3. Learn how your brain works
Reading Code

There’s a wonderful piece of advice given to aspiring authors:

if you want to be a good writer, read

- unknown

And the great Stephen King expands on this:

if you don’t have time to read, you don’t have the time (or the tools) to write. Simple as that.

- Stephen King ;On Writing: A Memoir of the Craft

And this extends to writing code, too. Because there are only so many ways to solve the same problem, and we’re almost always working on similar problems. So why not spend a little time reading code? You’re going to spend a large part of your career reading code written by other people

and the you from yesterday is almost certainly another person

So you need to be reading through code in order to get better at writing code. But what code should you read?

I would say that you should be reading code either in a language that you don’t usually use, or written with a framework that you don’t usually use. That being said, the code has to be in a language that you’re either familiar with or that is similar enough to the ones you already know. You don’t want to be struggling to read it because you’re not familiar with the language or idioms.

You do need to pick a code base which is of high quality and solves a problem that you are interested in, though. So I’d recommend taking a look around on GitHub, GitLab, or any other public git service for code which:

If you’re a beginner React developer who has no experience with the C programming language, then diving deep into the Linux kernel would not be an optimal use of your time. But looking at Svelte or Vue code might be a good idea - they are solving similar problems, using a library which is similar yours, and a language which is either the same or similar.

Getting really good at reading code is a skill itself, as you’ll likely spend time reading documentation or code samples for the APIs and libraries that you’ll have to interact with for your projects. So taking the time to figure out how to read code is essential.

Read Books

I’m about to mention a large number of books, for a list of them and links to their Goodreads pages, check the full show notes

You could read The Pragmatic Programmer, The Phoenix Project, The Mythical Man-Month, or any of the other legendary reads from our industry

and you really should. There are tonnes of "developer must read book" lists out there

I’ve already mentioned some above, but here are some more recommendations:

and the list goes on.

But you should also be reading outside of the development industry too. You’ll find that people outside of development are solving similar problems to us, they’re just not using computers to do it. The Life-Changing Magic of Tidying Up by Mari Kondo teaches clean code principles without talking about computers at all; as does Essentialism by Greg McKeown. The Five Dysfunctions of a Team by Patrick Lencioni teaches us how to communicate with others by allowing ourselves and others to be vulnerable. The Goal by Eliyahu M. Goldratt and Kaizen: The Key to Japan’s Competitive Success by Masaaki Imai both teach us about DevOps

and were both written in the 1980s

In fact, The Goal and Kaizen are mentioned by name several times in The Phoenix Project.

Who Moved My Cheese by Dr Spencer Johnson teaches us about Agile and was written three years before the Agile Manifesto.

And my wildcard book is Game Engine Black Book DOOM Edition by Fabien Sanglard. This book works as a commentary for the DOOM source code, but also as a commentary of the development of DOOM from a technical perspective

for a book on the same topic, but from a less technical perspective, check out Masters of Doom by David Kushner

Game Engine Black Book DOOM Edition covers the hardware limitations of the time, the different design paths that John Carmack took the engine in, why it was built the way it was, and commentary on some of the home console ports of the game.

I legitimately think that any developer with more than a few years of experience under their belt, and an understanding of any C-based programming language will be a much better developer after having read Game Engine Black Book DOOM Edition or the DOOM source code.

You’ll come out of it with a much greater appreciation for performance, design, and code quality. For example, one of the reasons that DOOM is almost trivial to port to new devices (such as the time when it was ported to a pregnancy tests) is because the code is so well engineered and all of the concerns are separated - applying the SOLID principles, which weren’t formally introduced until a paper by Robert Martin in 2000.

And if you’re not sure of which books to read, consider joining a book club, listening to Coding Blocks (as they do entire series of episodes on important books in our industry), or signing up for The Story Graph as their recommendation service is pretty good.

Learn How Your Brain Works

Everyone learns slightly differently. I’m an auditory learner, so I learn best by listening. But there’s also both kinesthetic (touch or doing) and visual (seeing or watching) learning styles, part of learning how to learn is about figuring out the best style for you.

But once you’ve done that, if you can learn how your brain works, you’ll be able to generate hacks for your study time.

In The Programmer’s Brain Dr. Felienne Hermans compares the way that we take in new information to have a computer works

I also discussed this with her on episode 96

We have inputs (our eyes, ears, and such) and each input has a buffer. Information is stored in the buffer before being transferred to short term memory. Most people can hold somewhere between four and seven pieces of information in their short-term memory. Short-term memory is kind of like RAM.

You hold things that you are working on in your working memory, and pull things into it from either long-term memory or short-term memory. You can think of working memory as a CPU cache - it’s the parts of knowledge that are actively being used right now. And long-term memory is like a hard disk.

Just like the different bits of memory in a computer, you have wildly different access time for the different types of memory. Working memory is generally the fastest, but is almost always the smallest amount of memory; long-term memory has the slowest access time, but has the most storage space; and short-term memory falls in between both.

With the above in mind, you can diagnose a problem that you have when learning or applying knowledge that you are learning:

Here’s a quick summary of how the different types of confusion are related to the different cognitive processes:

- Lack of knowledge = Issue in long-term memory
- Lack of information = Issue in short-term memory
- Lack of processing power = Issue in working memory

- Dr. Felienne Hermans ;The Programmer’s Brain

With this knowledge, you can approach both your learning and work

because you might be learning a new-to-you codebase, or a new API or framework as part of your work

and optimise for what makes sense to you in the given moment.

Let’s say that you know LINQ, and are learning a library which uses LINQ syntax. You can use and augment your pre-existing knowledge about LINQ in your long-term memory, and can rely on the fact that a “reference” (of sorts) to it will be stored in your short-term memory and you start working through the examples. Each of those examples will be brought into your working memory and combined with the “reference” in your short-term memory, before being pushed back to long-term memory for storage.

Wrapping Up

That was episode 100, which featured a number of questions from listeners of the show and my answers to them. I’d love to thank all of the listeners who sent in questions for the episode; without you, this episode wouldn’t have had any content. I would like to thank all of the listeners, from those who have been here since day one to those who dip in and out of the podcast feed. And I cannot forget to thank the wonderful people who have supported the show via the Buy Me A Coffee or Patreon links.

Thank you all.

Here’s to another 100 episodes of the show - at least. Be sure to check out the show notes for a bunch of links to some of the stuff that we covered, and full transcription of the interview. The show notes, as always, can be found at dotnetcore.show, and there will be a link directly to them in your podcatcher.

And don’t forget to spread the word, leave a rating or review on your podcatcher of choice - head over to dotnetcore.show/review for ways to do that - reach out via out contact page, and to come back next time for more .NET goodness.

I will see you again real soon. See you later folks.

More Silly Questions

The following silly questions came in from Mark, James, and Kettch, and I will attempt to answer them in a quick-fire round of silliness:

Pizza or Fried Chicken?

- Mark

Pizza.

Moon base or underground lair?

- Mark

Underground lair.

Can you touch your toes?

- Mark

I used to be able to, but can’t now.

What helps you remember all the things you need to know for your job?

- Mark

Back when I was studying, I would wear special headphones to stop the knowledge from leaking out or escaping.

A fly, moving at 40 mph, zigzags back and forth between two trains, each moving at 20 mph. If the trains are 100 miles apart initially, how much distance will the fly travel?

- Mark

Yes I am.

What’s your favourite color?

- Kettch

Blue.

What’s your shoe size?

- Kettch

I feel like you’re trying to social engineer me.

If you could have any super power, what would it be?

- Kettch

Invisibility. The OG of all super powers.

Can you whiteboard an algorithm to balance a binary tree off the cuff?

- Kettch

Can anyone?

How many ping pong balls fit inside the space left when you delete node_modules?

- Kettch

Trick question, even if you include all of the ping pong balls that have or ever will exist, there wouldn’t be enough.

What is the current population count of bacteria on your keyboard?

- Kettch

You assume that I’m not trying to grow a new life form with my computer equipment. It’s called multi-tasking.

Why?

- James

Precisely.

Follow the show

You can find the show on any of these places