513: I’m Sorry You Learned Something

Transcript from 513: I’m Sorry You Learned Something with Jason Turner, Christopher White, and Elecia White.

EW (00:00:06):

Welcome to Embedded. I am Elecia White, alongside Christopher White. Do you remember the magazine "Highlights"? A lot of us do. It was the one where you usually found it at school or the dentist's office. It had a bunch of cool puzzles and games. It was educational, but nobody admitted it.

(00:00:25):

Our guest this week is Jason Turner of "C++ Weekly." He has recently written a book.

CW (00:00:33):

Hi Jason. It is great to talk to you again.

JT (00:00:34):

Hi. Thanks for having me back on the show again.

EW (00:00:38):

Jason, do you remember "Highlights"?

JT (00:00:41):

I do remember "Highlights." I will say that that kind of thing has actually been inspirational to me, for the puzzle books that I have worked on for the last few years.

EW (00:00:51):

But that has not been all you do. So could you tell us about yourself, as if we met, I do not know, on an airplane.

CW (00:01:00):

<laugh>

JT (00:01:00):

<laugh>

EW (00:01:02):

And we are just trying not to irritate each other.

CW (00:01:06):

Wow.

EW (00:01:08):

It is a low bar.

CW (00:01:08):

It is a very strangely specific scenario. <laugh>

JT (00:01:13):

Well, it has happened, many times, of course. I recently actually had someone ask me what I do, and I laughed. He said, "You just laughed." And I said, "Yes, because I just do not have a good answer to this."

(00:01:28):

I am an author, as you have mentioned. I have a YouTube channel. I do onsite training for companies that are trying to write better C++. Basically everyone can write better code. Insert programming language here. You can do it better. Right? So I travel and I do training for C++ students, and I speak at conferences. And I do not know. Yeah, something like that.

CW (00:02:04):

C++ educator and evangelist, and trainer.

EW (00:02:08):

And author.

JT (00:02:09):

Yeah.

CW (00:02:09):

And author. Okay, that is a lot of words.

JT (00:02:11):

Yeah, an author. And I also do not know if I like "evangelist."

CW (00:02:14):

Yeah. Yeah, I wondered about that. Yeah. Yeah. Okay.

EW (00:02:19):

All right. We are going to do lightning round, and then we will figure out what your career path was. <laugh>

JT (00:02:23):

That sounds great.

CW (00:02:24):

C++ anthropologist.

JT (00:02:28):

<laugh> Hey. That is a good one.

CW (00:02:31):

<laugh> All right. Lightning round. What is your favorite modern C++ feature?

JT (00:02:36):

Favorite- Oh, god; I do not know. <laugh> I really appreciate a lot of the new meta programming stuff, coming in C++26, if we want to go like ultra modern.

CW (00:02:47):

Sure.

JT (00:02:47):

If we are talking on the reflection and all kinds of stuff is going to make so much compile time goodness possible, that just no other language today can compare to.

CW (00:02:58):

Reflection is where you can- I keep getting that confused with introspection. But reflection is where you can determine the type of something you are using? Or?

JT (00:03:08):

It is compile time, looking at your code in general. So the way I have used reflection and just some prototyping code- Because it is just marginally getting support and compilers today. Is to take a namespace and walk over every function in that namespace, and then automatically generate script bindings for another programming language.

(00:03:31):

So you could use this to just say like, "Hey. Take this entire namespace, and make it available from Python." You can just do all that at compile time now, right.

CW (00:03:40):

Okay. Okay.

EW (00:03:41):

Suck at DLLs. <laugh> Sorry. Jigsaw puzzles or crossword puzzles?

JT (00:03:48):

Jigsaw.

CW (00:03:48):

Sudoku or Wordle?

JT (00:03:50):

<sigh>

CW (00:03:50):

Or neither?

JT (00:03:53):

I do not really love either. They are fine. I do not get into either one of them. Let us say neither.

CW (00:03:59):

Okay.

EW (00:04:00):

Best mid-morning snack in Copenhagen?

JT (00:04:03):

Best mid-morning snack? You know, I have only been here for a few days.

CW (00:04:07):

Well, you better get-

EW (00:04:08):

It has got to be long enough to find the best pastry shop!

CW (00:04:11):

<laugh>

JT (00:04:14):

There really is- There is an astounding number of bakeries here. Sure. In European cities there are bakeries. But there is like- On every corner, there are organic bakeries, there are pastry shops, there are- It is more. It is extra than I am used to.

(00:04:30):

I have only actually tried one thing so far, which was their more traditional twisted, knotted cinnamon theme, except it had pistachio cream in it instead of cinnamon, and it was not great. I wish I had gotten the cinnamon one. But two doors down from that place, there is a place that literally just sells like cinnamon rolls. That is what they do.

EW (00:04:50):

But you have not been?

JT (00:04:51):

No.

CW (00:04:51):

He has only been there a couple of days. You cannot have-

EW (00:04:53):

What have you been doing for a couple of days?

CW (00:04:54):

<laugh>

EW (00:04:54):

<laugh>

JT (00:04:56):

We have seen an unbelievable number of- Seriously. It is becoming one of my favorite European cities. My favorite city. One of my favorite cities in general. It is just there is so much to do here. I was very surprised.

(00:05:10):

I am here for work. I think I should say that.

CW (00:05:13):

<laugh>

JT (00:05:13):

I am here because a company hired me to do onsite training at their facility. So it is my first time to Denmark, my first time to Copenhagen, and I have been really happy with the city.

EW (00:05:26):

What about fika?

CW (00:05:28):

What?

JT (00:05:28):

Huh?

EW (00:05:28):

It is a Nordic, Spanish and Danish-

JT (00:05:36):

Ohh.

EW (00:05:36):

You take a pause and socialize with a beverage and treat. It is like a coffee break, but it is like a extra coffee break. It is like a homey comforting coffee break.

JT (00:05:51):

I have not done that.

EW (00:05:53):

I think that when you are talking to the folks you are training, you should ask what time fika happens.

JT (00:06:01):

Okay <laugh>. I have had weird experiences like that when traveling. I had students in the Netherlands once say, "Oh, do you not know about middag vrijdag?" And I am like, "I am sorry. What?"

(00:06:11):

They are like- It literally is "midday Friday." And they said, "We all basically go home at lunchtime on Friday. That is the end of the workday." And I am like, "Ah. I still have three more hours of training material to go over." So we did not actually end up canceling the course halfway through the day. But no, no one had told me about that before.

EW (00:06:39):

Mid dog, fry dog?

JT (00:06:42):

Fry dog. Yeah. I think I am saying that mostly correctly. I am sure a Dutch person will let you know in the comments.

CW (00:06:49):

Fastest way to come up to speed on modern C++ after ignoring it since 1998?

EW (00:06:54):

<laugh> Very specific.

JT (00:06:56):

That is very specific. I would say you should probably pick up Bjarne Stroustrup's "A Tour of C++." He does a great job of going through the main features. Or, you can look through my YouTube channel, where I have a video that is the best parts of C++98, the best parts of C++11-

CW (00:07:12):

Oh, that is great.

JT (00:07:12):

The best parts of C++14. I kind of just build those things up.

CW (00:07:17):

Awesome.

EW (00:07:19):

You used to have a podcast, but now it is primarily YouTube?

JT (00:07:26):

The YouTube channel started about a year after my podcast started. Although I was not the one who started the podcast. I just was the longest running co-host, I guess, if you will. And then- It was Rob Irving and I- Rob is the one who started the podcast. We stepped away a few years ago, and then two other guys picked it up. They ran with it for a few years. Now they actually just published what is their last episode.

(00:07:52):

So at the moment the podcast, it was called "CppCast" is on, I guess, indefinite hiatus again, until perhaps someone else picks up the mantle or something. Rob did 299 episodes of "CppCast." I was with him for about 280 or so of those. I missed a few because of travel and such.

CW (00:08:18):

It is a lot.

JT (00:08:20):

Yeah. We tried to do every week. It is a thing, as you know, you are a podcaster.

EW (00:08:26):

We have gone to every other, and it really helps the rhythm.

JT (00:08:31):

Yeah. I do not know. It was like it became a thing over COVID. Occasionally we would miss episodes before COVID. Then after COVID there was just- It felt like a lot of people were relying on us for some level of normalcy and continuity in their lives. So we just did it. We refused to miss an episode for three years straight, every week. Then <laugh> we stopped altogether after that, I guess. But anyhow.

EW (00:09:09):

<music> Before we dive back into today's discussion, I want to share a new resource for anyone curious about the future of 3D printing.

(00:09:17):

Mouser Electronics has a dedicated, Empowering Innovation Together hub, that covers the latest breakthroughs in the technology. Their new series explores how 3D printing is transforming engineering. From advanced materials and smarter processes, to rapid prototyping and full-scale production.

(00:09:37):

You will find insightful articles, podcasts, and videos that highlight real-world applications across industries. If you are ready to see how 3D printing is reshaping, designing and manufacturing, head over to mouser.com/empowering-innovation.

(00:09:52):

All right, let us get back to it. <music>

(00:10:02):

Well, we seem to have wandered away from lightning round, so...

JT (00:10:05):

Oh, sorry.

EW (00:10:06):

No. No, it is not you.

CW (00:10:07):

It was our fault.

EW (00:10:08):

We contributed to that. So we have hinted about puzzles.

JT (00:10:15):

Yes.

EW (00:10:16):

You have a new book coming out, called "Programming Puzzles Big Book: 400 pages of fun for ages 7-99."

JT (00:10:24):

That is correct.

CW (00:10:25):

<laugh>

EW (00:10:26):

Why seven to 99?

JT (00:10:29):

Why seven to 99? Oh, because my second oldest nephew- I guess exactly where he falls in line does not really matter here. But one of my nephews has a- "CodeCubbies" is what it is called. It is a programming after-school thing in the Atlanta, Georgia area. You can look it up for any of your listeners.

(00:10:53):

I gave him some of these puzzles for his students. He said the seven year olds with a little bit of help, like a parent just pointing them in the right direction, were able to do the types of puzzles that I put in this book. He said by nine they could just do them. They will just figure it out. They can look at the examples, they can figure out the puzzles.

(00:11:20):

I had to say, "Through 99," because that is what one does. I wanted to make sure that everyone knew it was for all ages, basically.

EW (00:11:29):

Toys "R" Us kid. Yeah.

CW (00:11:30):

<laugh>

EW (00:11:30):

But these puzzles- I mean there were word search-

JT (00:11:37):

That is correct. Yeah.

EW (00:11:38):

Which did not seem- <laugh> Which was hilarious to me, because I remember doing word searches. But there were things like you would give some of the binary numbers as an example, and then you would say, "Now figure out what the rest of these are."

JT (00:11:55):

Yep.

EW (00:11:57):

How did you decide? How did you decide which puzzles? How do you even-

CW (00:12:04):

How do you develop a puzzle?

EW (00:12:06):

All right. Sure. How do you develop a puzzle?

JT (00:12:07):

How do I develop a puzzle? Okay. So what I wanted to do with this book, is I wanted to make- Well, okay, this goes back a while ago. But my wife and I were traveling in 2021. Goodness gracious. Is that when that was? It was. That was in '21. We were trying to get back to travel as early as possible.

(00:12:28):

Anyhow, we were traveling in '21 and we met some people that are like, "Hey, I want to learn programming. Can you teach me how to program?" These were people in a part of the world with no access to computers. They have cell phones. Right?

(00:12:43):

For the last four years, this has been in the back of my head. Like, "How can I make computer science education as accessible as possible? And as fun as possible?"

(00:12:54):

Some of my earlier experiments with this- So like you said, this is not my first puzzle book. I have other puzzle books that are more C++ centric. But they are not like- They are not books that are out to get you. They are books that are intended to actually be fun to do.

(00:13:11):

So my first C++ puzzle book- Now I am just talking, I hope this is all right.

EW (00:13:16):

Oh, yeah.

JT (00:13:16):

But my first C++ puzzle book is called "Object Lifetime Puzzlers." My niece happened to be visiting. She knows nothing about programming at all, and has no interest in programming. So I just was like, "Hey, look. I am trying to figure out if this puzzle book works," and I gave it to her.

(00:13:34):

She asked like two questions, and then by the next day she had gone all the way through the puzzle book. She found bugs in my puzzle book and stuff, for me. And I am like, "This is great!" I am like, "You understand the four types of object lifetime that C++ has, better than most of my students do now. Because you went through this puzzle book."

(00:13:57):

So I have just been like- This has been in the back of my head for four years. I gave a talk at "C++" on Sea, a few years ago, 2023 I think it was. The whole gist of that is just, "How can we make programming information as accessible as possible?" Anyhow.

(00:14:15):

So I broke down the things that I thought were core to computer science. So as you mentioned, I have got binary puzzles in there. It just shows a few examples, and then I expect you to figure out what the next thing would be. You can flip to the back to the answer key if you do not get it, but you should get the pattern pretty quickly.

(00:14:38):

Then I introduce hex and octal, and then conversion between those things. And- Well, I do not know if you want to go into all the things that the book covers right now. But it covers a lot. By the end of the book, you should be able to understand recursive algorithms and Lisp, if you do all of the puzzles all the way through, for example.

CW (00:15:01):

I like this idea, because to me programming has always been puzzle solving of a kind. Right?

EW (00:15:08):

That is the fun part of our job.

CW (00:15:09):

That is the fun part of our jobs.

JT (00:15:10):

Right.

CW (00:15:10):

But it is usually kind of muddled. Like we are solving multiple puzzles at once, or problems at once. But they break down into certain classes.

(00:15:18):

But the way it is taught is usually not as a- At least for me, it does not seem like the way computer science is taught is a series of puzzle solving kinds of things. Breaking it down into common, "Okay, here is the kind of thing you need to solve on the regular." Seems like a good way to go about it.

(00:15:37):

Plus if they are fun on their own, divorced from computer science entirely, that is a bonus.

JT (00:15:45):

I think they should be. I am pretty sure they should be. I gave a copy, again to the same niece who prototyped my very first puzzle book, and well then she went on her honeymoon, so I do not know if <laugh> she is looked at it yet. But she was very excited to receive a copy, just for the record.

(00:16:02):

She did start on some of them. She was looking at the binary and she was like, "Okay. Quick question." She is like, "Does this mean this?" And I am like, "Yes." And she is like, "Okay, great. I can do the rest of the binary ones now." And I am like, "Score." She is ridiculously smart anyhow. Just comically smart. Anyhow.

EW (00:16:23):

You had binary and hex. You have regular expressions. There was Lisp.

JT (00:16:30):

Yes.

EW (00:16:32):

These were all presented as- Not as, "Here is a programming problem. Go find a compiler," but as, "Here is a pattern problem. Puzzle it out."

CW (00:16:44):

On paper.

JT (00:16:45):

Right.

EW (00:16:45):

On paper.

JT (00:16:46):

Yes. Oh, I want people to write in the books, so badly. I want them to treat them as puzzle books. But people do not want to, when I meet them at conferences and stuff. Anyhow, sorry. <laugh>

EW (00:17:00):

<laugh> I remember when Robin Sloan was on the show. We were talking about notebooks, and that whenever he got a new notebook to write in, it was just so overwhelming. The blank page, the pretty notebook, how can you put anything worth it in there? And then he would leave them out in the rain and drive over them.

(00:17:17):

So maybe that is a strategy for you, is to drive over all your copies, so people do not feel as bad about writing in them.

CW (00:17:23):

<laugh>

EW (00:17:23):

<laugh> Sorry, end of thought.

JT (00:17:28):

<laugh> It would be a strategy. They could be special editions, that have been pre driven over.

CW (00:17:34):

<laugh>

EW (00:17:35):

Yes. And colored in. Maybe you could take it to an elementary school, and have them just do random crayon colors. Sorry.

JT (00:17:43):

That sounds perfect. Yes. <laugh>

EW (00:17:46):

You mentioned the "Object Lifetime." You also have "Copy and Reference," as two puzzler books, which odd, but okay. And you have "OpCode Puzzlers."

JT (00:17:57):

Yes.

EW (00:17:58):

Which was the one that I was like, "I should get that one just to play with it." But then I was also like, "I should do my own <laugh> work."

JT (00:18:08):

<laugh> I will say, honestly, I am not in retrospect very happy with the "OpCode Puzzler" books. If that is the kind of thing that you want, then I would suggest you just get my current book, the "Programming Puzzles Big Book," and just do the assembly language puzzles that are in there. Because I think I do a much better job of introducing the concepts, and building up slowly into actual code samples with those.

(00:18:33):

The "Object Lifetime" ones. Yeah, it is the four different types of object lifetime in C++. That came out of exercises that I will do with my students on site. People would just be like, "Yeah. This is fun." And I am like, "You know what? You all said this is fun. I am totally making a puzzle book." And I did.

(00:18:51):

The "Copy and Reference" puzzles is just to get people really ingrained in your head, that C++ has by default copy semantics. Which makes it relatively unique in the world of programming languages. And they are consistent copy semantics.

(00:19:12):

It is not like Java or C#, where it depends on whether it is a struct or a class or something like that.

EW (00:19:17):

<laugh> Yes.

JT (00:19:17):

It annoys me from a design perspective. I am sorry.

EW (00:19:25):

No, I understand. For me, C always makes sense, because I am steeped in C. Pointers totally makes sense to me. C++ I usually am good, as long as I am not too far in the future. Ah, past.

CW (00:19:41):

You mean the recent past?

EW (00:19:42):

The recent past.

CW (00:19:42):

<laugh>

JT (00:19:43):

Right. <laugh>

EW (00:19:44):

And then Python. I just assume everything is copied, unless I am in Pandas or NumPy, in which case I get to choose. But I know that that is not right. That is not correct.

CW (00:19:54):

<laugh>

JT (00:19:56):

I think it is mostly everything is actually referenced in Python, except for when it is not.

EW (00:20:01):

Yes. Except for when it is not.

CW (00:20:02):

<laugh>

JT (00:20:03):

Except for when it is not. And there is a gotcha in Python, that I had someone point out to me. That if you have a defaulted parameter to a function that is a list, and then you update that parameter inside the body of the function, the next time you call that function, the new default is what you had previously done inside that function.

CW (00:20:24):

No!

EW (00:20:26):

Excuse me, I need to go write this down. I think this may affect something I have been working on. <laugh>

JT (00:20:29):

<laugh>

CW (00:20:31):

That is insane!

JT (00:20:32):

Almost positive I said that correctly. <laugh>

CW (00:20:34):

That is really unexpected behavior. <laugh>

JT (00:20:39):

Well, I mean it is just another object, that has its own lifetime, and so I guess...

CW (00:20:44):

<sigh> But why would not it be true of anything else you passed in? Why just- Is it just lists? Or is it lists and everything-

EW (00:20:49):

Default lists.

JT (00:20:49):

I do not know if it is just list. Maybe it is-

CW (00:20:51):

I understand.

JT (00:20:52):

Everything. I do not know.

EW (00:20:54):

No. Default variables are registers, so they would not be-

CW (00:20:58):

In Python?

EW (00:20:58):

I mean ideally.

CW (00:21:00):

<laugh>

JT (00:21:00):

<laugh>

EW (00:21:02):

Anyway.

JT (00:21:02):

I think they are in registers in this case.

EW (00:21:07):

I do want to stress that these are not like leet code interview questions.

CW (00:21:12):

Gotcha.

JT (00:21:12):

Oh, not at all.

CW (00:21:12):

Tricky. Yeah.

JT (00:21:12):

No. No. I was just thinking about the assembly language ones, since you just said registers. By the time you go through all the assembly language ones specifically, you know direct addressing, indirect addressing, immediate values. So you are effectively taught pointers, without realizing you are being taught pointers.

(00:21:36):

Wait. Did I get that right? Yes, I think that is right. It has, well, at least those different ways of loading values. And a set of registers.

EW (00:21:46):

Well, then that is supposed to be fun. Which, because it is kind of sneaky and you are not saying, "This is a pointer," and all of the same words that everybody uses to describe pointers...

JT (00:21:59):

Right. I do not use words at all.

EW (00:22:00):

You do not end up in this pointer reference, memory pointer reference battle, where you just continually say the words over and over again, and hope the person understands what you mean.

JT (00:22:10):

No. Yeah. Just examples.

EW (00:22:13):

I have been in that loop. <laugh>

JT (00:22:17):

<laugh>

EW (00:22:17):

Okay, so what is the difference between a puzzler and an interview question?

JT (00:22:22):

I think some of my C++ puzzlers could be used as interview questions, if you wanted to just see if people understand these semantics and the languages.

(00:22:32):

But I do not think any of the puzzles in the book we are talking about today- The "Programming Puzzles Big Book." I do not think any of the puzzles in there would be anything that you would ever practically use for an interview question.

(00:22:46):

They are just, like you have said, they are meant to be fun, more so than the ones in the C++ puzzler books. It does not come down to semantics of a specific language.

(00:22:59):

I do have Python and Lisp in there. So I guess you could take some of the more complicated Lisp things and be like, "Hey, what is happening here?" And if the person is like, "Well, they defined a function and they are calling it recursively," then you would be like, "Okay. I guess you understand how to read Lisp," or something.

(00:23:11):

But the word "recursive" is never used in this book. The word "function" is never used in this book. You just learn that that is what that thing is doing. That defined a function, and then it gets called later.

EW (00:23:28):

In fact, the words "binary" and- I do not remember whether you used "regular expression" or "regex."

JT (00:23:34):

Only in the headings, does it say that.

EW (00:23:37):

Right. It is only in the headings. And that is how you find the answers. But you do not ever say, "This is binary, because it is ones and zeros. As opposed to hexadecimal, which is up to 16."

JT (00:23:51):

No. And by the time later in the book, when you have mixed binary and hex and octal and decimal, you only know the difference because I prefix them with b, x, o or no prefix. So then it is decimal. So you just have to learn, just through doing the puzzles.

(00:24:13):

But a part of what was in the back of my head, is playing a video game. You learn so many rules about the physics and the game mechanics of a game, without ever being told that is what you are learning. Right?

EW (00:24:37):

Exactly.

JT (00:24:38):

That is what I am going for.

EW (00:24:40):

I wanted that. So I taught embedded systems for a couple years. My quiz questions were objectively terrible.

CW (00:24:51):

But subjectively great.

EW (00:24:52):

No.

CW (00:24:52):

Oh.

EW (00:24:52):

They were just terrible.

JT (00:24:53):

<laugh>

EW (00:24:53):

I think because when I was told how to write them, I was supposed to be taking the learning objective from pedagogical things- Which were important. I agree. But I was taking those wordy complex learning objectives, and then trying to make quizzes to make sure people understood this complex idea.

(00:25:19):

I ended up with quiz questions that people said, seemed like I wanted them to read my mind on what was correct. Which is totally not what a quiz question should be.

(00:25:30):

How do you approach wanting to figure out if somebody understood a topic?

JT (00:25:40):

That is a good question. I do not feel like I have a great answer to it either. I feel like I can observe when a student is understanding a topic, when I am actually doing teaching. I am sure you have observed this as well.

(00:25:58):

Where maybe you have a two, three, four or five day class. I do not know, whatever. On the third day you put an example up. The student in the classroom who was asking a ton of questions on day one, and now on day three or day four is giving the answers. You are like, "All right, this is spectacular. I just watched all of this click in your head in real time. That was amazing."

(00:26:27):

But I do not know how you actually test it, other than asking the students more questions.

EW (00:26:39):

It was not even that I wanted to test all of the information. I would much rather have made puzzlers for them, where they learned and demonstrated their new knowledge. But I do not know how to go about making puzzles like this.

JT (00:26:57):

Yeah. I think I was successful at this. Maybe this is an idea that can be extended to other topics.

EW (00:27:09):

I think so. Yes.

JT (00:27:10):

Okay.

EW (00:27:10):

In fact-

JT (00:27:13):

I still feel a little unsure about it, right? Because I have not gotten a ton of feedback yet. <laugh>

EW (00:27:20):

I was thinking that if you wanted to do one that was language independent.

JT (00:27:26):

Well this is.

EW (00:27:27):

True. True.

JT (00:27:28):

There is no C++ in this book. Yeah.

EW (00:27:30):

But even more so. I would want to go through the Gang of Four "Design Patterns."

JT (00:27:38):

Interesting.

EW (00:27:38):

And see if you could make puzzlers out of those. You would have to really build it up-

JT (00:27:44):

You would.

EW (00:27:45):

Then you would be able to reuse the same patternish thing.

JT (00:27:49):

I bet you could do that. You would probably have to start- I would think you would have to start with object-oriented principles. But again, without telling anyone that that is what you are teaching. Right? Demonstrate object notation, member variables, and such. Gang of Four likes. That kind of thing.

EW (00:28:08):

Oh. But I do not even know that I would go that far. I mean, I would start with actual objects. Like, how an automobile goes together with wheels and a steering wheel, and being able to talk about factory functions that way. Or-

(00:28:20):

I think there is a typewriter pattern. Or it is one that I always use with a typewriter example. If you used an actual typewriter with keys, it would be very approachable. Like, "How do you solve this problem?" And the answer is the pattern. Then you can see another problem that is similar, and have this-

(00:28:38):

Anyway, if you want to talk about that offline, we can totally <laugh> make-

JT (00:28:44):

<laugh> I think- Well, no, you have already got me thinking, because- Have you played any of these "Factorio" or whatever, kind of games?

CW (00:28:54):

We are aware of them. I try to stay away from them, for fear that they will consume me.

JT (00:29:00):

Okay.

EW (00:29:01):

This is like the "Shenzhen.io"?

CW (00:29:02):

Yeah. Or- "Factorio" is even bigger. Yeah.

JT (00:29:07):

Wait, wait. I have got a- Yeah.

EW (00:29:09):

If it is a programming game, I try to stay away from them, because I will totally 100% get sucked in.

CW (00:29:17):

Optimization.

EW (00:29:17):

Ohh!

CW (00:29:17):

Sequencing.

EW (00:29:17):

Yess!

CW (00:29:17):

All that stuff.

EW (00:29:22):

Yes! So fun!

JT (00:29:24):

Wait, wait. There is a game that I have been playing with my wife. I am trying really hard. I will start describing it, while I am trying to pull it up on Steam. But there is this game called "Overcooked." It was very popular.

CW (00:29:38):

Oh, we have played "Overcooked." Okay.

JT (00:29:40):

Yeah. Okay. So not "Overcooked," though.

CW (00:29:42):

All right.

JT (00:29:42):

"Overcooked" is what got us started on this type of game. This other game is- I cannot find it. "PlateUp!" It is "PlateUp!" It is called "PlateUp!"

CW (00:29:57):

"Overcooked" is the game that we played. You play as two chefs.

JT (00:30:00):

Yes.

CW (00:30:00):

Do you remember? We tried it once, and we decided we would kill each other if we continue to play it.

EW (00:30:06):

<laugh> I remember that.

CW (00:30:07):

Okay. Anyway, it is a cooperative game, where you play as chefs in a kitchen. Then things come in in sequence. You have to deliver dishes, and all this stuff. And you have to cooperate as the two chefs in the kitchen.

JT (00:30:19):

Yeah.

CW (00:30:20):

Okay.

JT (00:30:20):

You are like throwing food across the kitchen at each other. That kind of thing.

CW (00:30:23):

To get the time right. Because the time runs out. Yes. <laugh>

JT (00:30:27):

Okay, so "PlateUp!" is like "Overcooked," but it is more like a strategy game. It is still co-op. It is still the same screen. It can still get frantic. But it builds really, really, really slowly. From you are just running a coffee shop, and you literally have to fill cups of coffee and deliver them. Right. It is super simple.

CW (00:30:48):

Okay.

JT (00:30:48):

But if you go on the "PlateUp!" Wiki, "PlateUp!" also has automation things that can be built.

CW (00:30:56):

Oh, no!

JT (00:30:58):

So if you go look on the "PlateUp" Wiki, and look at what people have done, they have fully automated coffee, whatever. Sushi shops where the fish is automatically pulled from this thing, which automatically goes to a chopping station, which takes that to a plater. And then the plater is automatically delivering different types of plates of sushi. Then all you have to do is deliver them.

(00:31:22):

Or maybe you have the conveyor belts in the game run past all of the customers. So the correct customer just happens to pick up the plate. I think this basically is teaching Gang of Four. Or at least it could be adapted to this, is what I am trying to say.

EW (00:31:42):

Yes.

CW (00:31:42):

<laugh>

JT (00:31:42):

<laugh>

EW (00:31:42):

Okay. I need to move away from the page. <laugh>

CW (00:31:50):

You have showed a game to Elecia. Is that the end?

JT (00:31:53):

You went to the "PlateUp!" Wiki?

EW (00:31:54):

Oh, yeah.

JT (00:31:57):

People have done absolutely insane things. The most crazy stuff, you have to do plugins and things, to make it be able to be possible.

(00:32:06):

If you are trying to stick purely within the built-in game mechanics, it is really hard to get both enough money and enough time at a right point in a level, to be able to actually build those things. Before you get overwhelmed with too many customers coming into the restaurant at once. But yeah. Anyhow.

EW (00:32:27):

One of the things you said there, was that it had a slow lead up. You served coffee for a long time.

JT (00:32:35):

Yes. Yeah. Effectively.

EW (00:32:36):

I find many of the games to get- The co-op games, because I am pretty bad at playing Steam-type games. I find that they advance too quickly. But I also can see that with some of the puzzle things. Not yours, but in general. How do you- Bringing this back to your puzzle books, how do you figure out how fast to go?

JT (00:33:05):

I have a strategy to how I design my puzzles. Again, I am not a hundred percent certain how successful this is. Except my niece is the one who has given me the most direct feedback to these things.

(00:33:17):

I introduce a concept, and then I will have somewhere in the like eight to 12 or so puzzles, that just drill in that concept. On the next section, I will introduce a second concept. I will again have about 12 puzzles that do it. And then on the third section, I will casually mix those two concepts together. Okay.

(00:33:48):

And then on the fourth section, I introduce another new concept. So now I have got three concepts that I have introduced. By the fifth one I have "concept one," plus "concept three." And then "concept two" plus "concept three." Until I know that I have paired all of the concepts. Then I will start to mix more and more concepts together.

(00:34:16):

So that is my strategy, for how I very slowly build these things up. I never jump from one to three things being paired together. I never ever do that. It is always one plus one, one plus one, one plus one, until I know that you have done all those things in pairs. And then I add them together.

CW (00:34:37):

Sounds a lot like spaced repetition, in a way, which is evidence-based.

EW (00:34:42):

Well, and he does super sets, where he switches subjects between, so you do get some more spacing in between.

JT (00:34:49):

Yeah. By the time you have gone all the way through this book, you are going to do the latest ones that have some Python and some Lisp or whatever, or the OpCode based ones, machine language based ones. It is going to rely on the fact that you already know how to read binary, to be able to do the assembly language based one. Right?

(00:35:16):

Not the first assembly language ones. The first assembly language ones anyone can do. It is just printing numbers to the screen. But then by the time you get to the last one, you need the binary and the hex and the octal and all the other things mixed together, for that to make sense.

EW (00:35:33):

Which have already been taught in the book.

JT (00:35:34):

Right.

EW (00:35:34):

I just wanted to make- Because a lot of people are like, "Binary? No! Hex? Ahh!"

JT (00:35:41):

No. No, do not worry about it. You never see those words anyhow. Well, I guess you see them at the headings every now and then. Do not worry about it.

(00:35:47):

It was one of my earliest goals too. I think I stated this, but I will repeat it, just in case I did not get it out clearly. I do not use words really in this book, so it should work for anyone from any background, regardless of what languages you know, or not.

(00:36:05):

You will not be able to read the introduction. But the introduction basically says, "I wrote this book to be accessible to everyone." <laugh> Maybe I should translate that into five different languages or something. I do not know.

EW (00:36:18):

But are not the words not important? Is it not important to be able to say, "I understand recursion," as opposed to, "I am competent at using a function that calls itself"?

JT (00:36:30):

I do not even have the word "function" in there. I do not think I do.

EW (00:36:36):

"I am competent at using a thingy that calls itself"?

JT (00:36:41):

"Reusable thingies that call themselves, that have been called from other call"? Would you use the word "call"? But what word "call" would you use, if your primary language was Swahili? I do not know. Right? I do not know. So what is the point?

CW (00:36:59):

There is something to be said for understanding concepts, without the baggage of their jargon. Right?

EW (00:37:05):

Yes.

CW (00:37:07):

Coming to the point out of this puzzle book, maybe you do take computer science. You will instantly hopefully recognize, "Oh! That is just that thing I was doing, and it is called this. Okay."

JT (00:37:19):

I can see it going that way. And also the other way, depending on where you are coming from, of course.

CW (00:37:24):

Sure. Sure.

JT (00:37:25):

Where I had at least one person, at the last- So I have been to one conference where I actually had copies of this book to give out. At the conference, this was at CppCon this year, someone came up to me and he is like, "I would love a copy of this for my son, who is currently taking computer science." And I am like, "Whatever. Here, I have a spare copy."

(00:37:48):

It was someone who had helped me out with some other stuff too. But that is irrelevant, I guess. I give the books away whenever I have the opportunity to.

(00:37:54):

So I can see it going, I guess top down in that regard, "Hey, I am a computer science student. This might be just a way for me to practice some stuff," or bottom up like, "Hey, these are fun puzzles and oops, I accidentally understand computer science."

EW (00:38:12):

I still wanted it to go bottom up. I just wanted at the end of it to have the word, like, "Congratulations, you are getting good at recursion." So that when that word came up again, I would not think it was more than it was.

CW (00:38:27):

Mm.

EW (00:38:27):

I think that happened to me, that there were times in math and in computer science where someone would say a term, and I would be afraid because I did not know the term. Then they would tell me what it was, and I would still be nervous, because what they told me was way too simple.

CW (00:38:43):

Oh, that is just singular value decomposition. <laugh>

EW (00:38:45):

<laugh> That has never happened with that set of words. No.

JT (00:38:51):

I think in a way I was afraid that if someone was having fun with the book, and I accidentally told them they were learning something, it would not be fun anymore.

EW (00:39:04):

You need an online appendix, that they can go to and say-

CW (00:39:08):

"The secret thing. Do not press this button, unless you want to find out a deep secret about what you have just been doing."

EW (00:39:14):

Yes.

CW (00:39:16):

Yeah.

JT (00:39:16):

Oh, yeah!

CW (00:39:16):

Trick them. <laugh>

EW (00:39:16):

And it should be a URL that is only available if you succeed in the last few puzzles.

CW (00:39:20):

<laugh> Yes.

JT (00:39:23):

Oh, you have to decipher the URL. Once you do, it shows you everything that you have already learned, broken out.

EW (00:39:29):

Yes. Yes.

CW (00:39:30):

"Congratulations. You are now a senior developer. Here are your Jira tickets."

EW (00:39:36):

<laugh>

JT (00:39:40):

<laugh> No! That is right out. <laugh> I kind of like the- It is too late, I have published the book. But maybe in the next edition, I will do something like that.

EW (00:39:54):

You do have some words in the book.

JT (00:39:57):

I have some. Not very many, though.

EW (00:39:59):

Well, each section has a Wikipedia link. Actually, I do not even want to call it a "Wikipedia link," because they were links, but they were all rabbit holes. All of them. Universally, wanted to just go from that link, to another link, to another link, and open up the 45 tabs. Everything from-

JT (00:40:21):

That is true.

EW (00:40:23):

Grecian clocks to, I think there was one on escapement mechanisms.

JT (00:40:31):

Oh, I do not even know. There are so many. Basically, the secret, shh do not tell anyone, is with the way that I was formatting and laying out the puzzles, some of the pages were more blank than I wanted them to be.

(00:40:45):

So I put together a database of basically the history of computation, was the idea, with Wikipedia links. Those are automatically stuffed in, where the layout was a little sparse on some pages. So it is there to add more content for anyone who cares, but that content is never directly related to what is on that page. Yeah.

EW (00:41:16):

It was hard not to get sidetracked into those. Part of that was because what I was looking at on the page, you were showing binary, and I was like, "Yeah. Okay. Whatever." And then there would be this link that just glowed with fun.

CW (00:41:31):

<laugh>

JT (00:41:34):

<laugh> Well, okay. I am sorry you learned something more with it than I intended.

EW (00:41:44):

<laugh> "I am so sorry you learned something. That is terrible."

JT (00:41:51):

I do honestly hope that this book is successful. I love the idea that- Well if I- Okay. I try to create the books that I would want to read.

(00:42:06):

I also- We did not even mention, I have some C++ best practices books that I have written as well. I have written two. One is just "C++ Best Practices." It was written around the time that C++23 was coming out. And then the second edition is "C++23 Best Practices." It is a reorganization of all that material, with a few extra chapters and everything updated to C++23.

(00:42:30):

Anyhow, I have had people be like, "This book is too short. I read it in a day." And I am like, "No, you do not understand. I worked very hard to make this book as short as possible. I am a slow reader personally. I do not need to read a bunch of words just for the fun of it. I need the material. I need the content. I need the information that I can go home with."

(00:42:59):

So I would go through and I would simplify every sentence. Then I would have Grammarly do a grammar review. And if Grammarly said, "This sentence can be simplified," I said, "Yes," every time. I wanted the book to be as understandable as possible, and as simple to read as possible.

(00:43:21):

I guess this is a very long-winded way of saying, what I would have liked is that I had gotten this book when I was approximately ten. I think would have been the exact right age for me to have gotten this book. I would have learned so much from it.

(00:43:39):

So I really just hope at some point I hear stories from people being like, "I got this for my kid for Christmas. They have not put it down for the last two days. Everyone is having fun." I just want to hear those stories.

EW (00:43:55):

Well, and then there is the other story. "My kid finished it after a week. Do you have another one?" That is not the worst thing ever.

JT (00:44:02):

That is not the worst thing ever. I have put thought into- Well, I originally planned to release this as three different books, volume one through three.

(00:44:11):

But I know from experience with my YouTube channel, that if you have episode one on big topic, it gets like 10,000 views. Episode two on big topic part two, it gets like 5,000 views. Big topic part three, that gets like 2,500 reviews. It is always diminishing returns on these things.

(00:44:38):

So I just like, "No. I am not going to do it. Everything that I want to say about these core topics, I am going to put in one book."

(00:44:45):

Now the problem is I do not have a plan yet for what volume two might look like. Or what I would even call it, because I do not want people to think they had to do volume one to do volume two. So I need volume two to be something just completely different topics that I did not cover yet. Or- I do not know. I do not know.

EW (00:45:10):

I have been thinking some about teaching and learning. The Patreon Slack group for the show has been going through "Data-Driven Science and Engineering." Which is a very math heavy course, in controls and systems and machine learning, all mashed together.

(00:45:41):

There have been some math concepts. Stuff like block matrices and matrix math, that I kind of remember. And then I get the one page cheat sheet and then that is all fine. But then there are other things that I wish, I wish I could learn it more slowly.

JT (00:46:01):

Right.

EW (00:46:01):

The O'Reilly "Head First" books, that were puzzles as well as the material. Some of those I hated, because I was like you, I was like, "I do not want to spend this much time on it." But others, I needed the conceptualization. What other topics do you think would do well with a puzzler type approach?

JT (00:46:31):

I have one other topic that I prototyped. But I knew it was not ready for this book, and it would have made this book too big. That was SQL.

CW (00:46:39):

Mm-hmm.

EW (00:46:39):

Yeah!

JT (00:46:42):

I am positive I can do that. But then you start to run into a little bit of a problem. You are introducing select statements, whatever. Updates, sure. But how much of the page are you going to devote to like, "This is the set of tables and keys that you are currently working with?"

EW (00:47:04):

The data.

JT (00:47:04):

Yeah.

EW (00:47:04):

Yeah.

JT (00:47:04):

I wonder if you could do linear algebra and combinatorics.

EW (00:47:08):

A lot of linear algebra would fall to it. There were some websites that had some beginnings of making it a game, but not enough to get me far enough.

JT (00:47:22):

Possible. I would have to relearn so much stuff myself, to attempt to make a book about that. <laugh>

EW (00:47:30):

But there are lots of other topics. Even the idea of the scientific method, is something that I kind of wish somebody would bring back a puzzle book, of how to do that questioning in a rigorous way. Anyway.

JT (00:47:49):

I am just making notes. <laugh>

EW (00:47:54):

<laugh> I have lots of ideas.

JT (00:47:56):

My work is very cyclical. I know that I am going to have a few months this year where I am just going to be working on books. So it has come back around.

EW (00:48:05):

Do you think there will be more puzzle books?

JT (00:48:07):

Oh yeah. I will do something more. I am sure.

EW (00:48:11):

Your definition of success, was along the lines of feedback. Do you have-

JT (00:48:17):

Yeah.

EW (00:48:18):

Does it need to make money, for it to be viable?

JT (00:48:22):

Money is nice. Of course. I do not turn down money, generally speaking. I have, like probably every contractor, I have fired clients in the past for various reasons. Money is good. But I also know that you do not make a lot of money from being an author, unless you are a really famous author.

(00:48:49):

Leveling up the quality of code that people are writing, is like- I have come to the slow realization this year, like that is what drives me. I mean, I have got 502 episodes of "C++ Weekly" up. I have been making "C++ Weekly" content for 502 weeks straight, no breaks.

EW (00:49:10):

Wow.

JT (00:49:10):

Why? Why did I do this? Why do I have the podcast? Why do I speak at conferences? I have given away- I am not positive, I do not know how you would quantify this, but I am pretty sure I have given away more C++ content than anyone else has. I think it would be difficult to match that, between the 500 episodes of "C++ Weekly," the 299 episodes of "CppCast," plus the conference talks and everything else.

(00:49:40):

I realized my driving motivation is really like, "We can do better. I want to live in a world where software is of higher quality than it is today, because it drives everything."

(00:49:59):

So yes, of course I need to make a living from money as well. But I think more success to me is when people tell me, "Hey, by the way-" I just got this LinkedIn note from someone that was like, "I got the senior dev job that I wanted because of 'C++ weekly.'" And I am like, "Excellent. I am very glad that you are learning things." That is really important to me.

(00:50:25):

Hopefully, he comes back later and has me do training for the rest of his team, of course. But I do not know. That is what has been on my mind the last couple months, I guess.

EW (00:50:36):

I get that. Yeah, we have put out a lot of information. We have talked to a lot of people. We have gotten consulting gigs somewhat based on the podcast, because it gets our name out. But for the most part, we do get most of our consulting gigs from people we know.

JT (00:51:00):

Right.

EW (00:51:03):

So as far as advertising for Logical Elegance, embedded.fm is only partially successful.

JT (00:51:12):

<laugh> Oh, right.

EW (00:51:12):

But as far as making us feel like we are helping other people make better code, and keeping- Our goal is more about keeping folks engaged in technology careers, because it is so easy to fall out of the pipeline.

CW (00:51:29):

<laugh>

JT (00:51:33):

Yeah, no. That is a fascinating question to me.

CW (00:51:34):

Sorry.

JT (00:51:34):

Is that from personal experience?

EW (00:51:38):

Chris is currently out of the pipeline.

JT (00:51:39):

Oh. Okay.

CW (00:51:43):

Trying to hang on with one finger to the pipeline.

JT (00:51:47):

I think that is a spectacular question, because in my world, we talk about these dark matter developers. There are tens of millions of C++ programmers, probably, around the world. The number that come to conferences and read books and do things where you know that people are trying to actually educate themselves, is more in the hundreds of thousands. At most. It is really low percentages.

(00:52:16):

So have you had that experience of saying- Like, someone actually came to you and said, "Because of your podcast, I have chosen to keep learning more. You pulled me out of my rut that I was in or whatever"?

EW (00:52:31):

Yes. And it is the greatest feeling.

JT (00:52:34):

That is awesome.

EW (00:52:34):

Or, "I stayed in my job a little longer and I refound what was fun about it." Or, "I went back to school, because what you were talking about sounded more fun than what I was doing."

CW (00:52:46):

It sounds like I should listen to this podcast.

EW (00:52:47):

<laugh>

JT (00:52:47):

<laugh> No. Do not. You can never listen to your own podcast.

EW (00:52:55):

Sometimes it is just, "I started this neat project and I am excited about it. More excited than I have been about work," which- Makerspace has always been a little weird for me, because as somebody who went through schooling for engineering, I am like-

CW (00:53:09):

"There is a formal process!"

EW (00:53:10):

"There is a formal process!"

JT (00:53:11):

<laugh>

EW (00:53:11):

But the makers are always so inspiring. They do not see the limits. Complexity does not bother them, because they just do not notice. That does create a different environment, that is more fun for those of us who are like, "Ahh. That is too hard." But then somebody shows up with blinking shoes and you are like, "Those are so cute!"

CW (00:53:35):

<laugh>

JT (00:53:39):

<laugh> I remember those first years as a software developer, when the boss would come to you and say, "Is it possible to do X?" And you are like, "Yes. I will do that tomorrow." And then you have it done and you deliver it. But me today would look at that code and be like, "You should have never done that, kid." <laugh>

EW (00:53:59):

And yet the people that I get to mentor through consulting- I absolutely adore the mentoring. It has been a lot lately. So I have a lot of recent times where it has been like, "Okay, okay. You wrote this with ChatGPT. I understand. I appreciate that. Now let us think about how we can write it without ChatGPT." <laugh>

JT (00:54:24):

"Do you understand any of the code that is <laugh> in this project?"

EW (00:54:29):

"I noticed you got a lot better at Git recently. What happened? Oh, ChatGPT is giving you all of the Git answers. That is kind of cool."

CW (00:54:38):

I got really good at nuclear power plant operation too, over the last week. That is about as dangerous as Git. Uh!

JT (00:54:48):

I actually seen those comments from people that are like, "I do not even bother writing complicated Git commands anymore. I just ask ChatGPT." And these are senior engineers. They are like, "It is so much faster to just let ChatGPT give me the command that I need to run." And I am like, "You know what? I am not going to give you a hard time for that, for the one-off tools."

EW (00:55:08):

I am not. That has actually been really helpful, because Git is objectively, again, objectively, terrible.

CW (00:55:18):

How long have you been using Git?

EW (00:55:21):

I have been using Git long enough, that I should not have to look up whether I need Git revert or reset.

CW (00:55:26):

Have you read a book on Git?

EW (00:55:29):

I have read two books on Git. And I have played the game.

CW (00:55:32):

Have you tried reading no books on Git? I think that is the key. There is a Git game?

EW (00:55:37):

There are multiple Git games.

JT (00:55:39):

I did not know that, either. Really? There are?

EW (00:55:40):

Yeah!

JT (00:55:40):

I did not know that.

EW (00:55:42):

They are kind of like what you are doing with puzzles, but they are more pragmatic about it.

JT (00:55:49):

"Oh My Git!" <laugh>

EW (00:55:51):

Yes. That is one of the best ones.

JT (00:55:52):

I had no idea this was a thing. That is hilarious. I will have to play with that. <laugh>

EW (00:56:06):

<laugh> Okay. You mentioned you started out developing, being a developer. You got your degree in computer science?

JT (00:56:16):

Computer science from Virginia Tech. Yeah.

EW (00:56:19):

And then you did software for a decade?

JT (00:56:22):

I remained- Let us see. I graduated in 2000, and I would say I did active software development with clients through '22.

EW (00:56:36):

Okay. So more than a decade.

JT (00:56:38):

Yeah, more than a decade. 20 some odd years, as an actual paid developer. And then I let my last client fall off, partially because I was just doing so much travel for training, and trying to keep up with the YouTube channel and everything else.

(00:56:51):

I am just like, "You know what? It makes more sense for me to focus on these other things." So I let the last contracting client drop off a couple of years ago. But I still maintain several open source projects, from time to time that I work on.

EW (00:57:07):

But you went from being a developer, to traveling a lot as an educator.

JT (00:57:14):

Mm-hmm. Yes.

EW (00:57:16):

Did that happen gradually? If somebody else wanted to do something like this, what advice would you give them?

JT (00:57:24):

I have been giving some thought to those topics lately as well. It was I think in 2006, is when I first started writing blog postings about the stuff that I commonly saw people getting wrong in C++ specifically. My career has been heavily C++ focused for the last couple of decades here.

(00:57:51):

It was actually a way more gradual process, than I thought that it was. But it felt very sudden, because I had a lull in my contracting work. So I basically had a yes year. And so I like, "Okay. Well. I just saw this announcement about a conference coming up. I hate- I hate, I hate public speaking," is what I said to myself, "But I am going to go ahead and I am going to put in a proposal for this conference."

(00:58:22):

I got two talks accepted for that conference. I was exceedingly fortunate because the first talk that I gave, I just had just this spectacular audience who really interacted with me. It became a great experience for me, and therefore I kept doing it. It felt like this was a two year transition, from being a developer to being an educator.

(00:58:51):

But if I go back and look at the podcast and the YouTube and the blog postings and everything that led up to that, it was probably realistically more like a eight year process. Very, very slowly building up to it.

EW (00:59:09):

One of our listeners has asked us recently, "How do you learn to enjoy writing?" I think it is because they would like to follow something similar, that they would like to have a blog and be useful. Maybe get more experienced so that they can speak and train.

JT (00:59:27):

Right.

EW (00:59:27):

Do you have any advice for someone who wants to get better at writing? But also wants to figure out how to get themselves self motivated for writing?

JT (00:59:40):

Self motivated for writing?

EW (00:59:41):

For blog posts.

JT (00:59:42):

I do not know. Yeah.

EW (00:59:44):

How did you do it?

JT (00:59:44):

I do not.

EW (00:59:45):

Were you just so angry that everybody was wrong all the time?

CW (00:59:47):

<laugh>

JT (00:59:49):

You know what? <laugh> That might have been. That might be the secret. You have to get properly angry. I am not sure.

EW (01:00:00):

That is the secret. I am always angry.

JT (01:00:01):

I was not very consistent about the blog post. Actually, in all seriousness, we will have people ask me, "You are so calm on stage. How are you so calm?" I am like, "No, no, no. You do not understand. My secret is that I am always anxious."

EW (01:00:14):

<laugh>

JT (01:00:18):

<laugh> Which is absolutely true. I think part of how I motivated myself was, well, basically I did not have work, was how I became consistent at doing this. And if you do not have work, but you do have a family and a mortgage, you have to try to something that will start earning money. So that was a strong motivator.

(01:00:45):

Another motivator was naming my YouTube channel "C++ Weekly."

CW (01:00:51):

Boy, that really does not lock you in, does it not? Yeah.

EW (01:00:53):

<laugh>

JT (01:00:53):

<laugh> A lot. And I knew what I was doing, but I did not know that I would be doing it for this long necessarily.

EW (01:01:02):

Yeah.

JT (01:01:02):

I do not know. You have to find that motivation in yourself somehow.

EW (01:01:11):

I was a developer and then I was a consultant, and then I had downtime. And the downtime- Many consultants, that is when they do these projects that they start writing about or talking about. Because if you do not work at all, that is kind of bad.

(01:01:29):

But if you do not have any paying work, your goal actually is to get paying work. So you are doing something you can talk about, that works as advertising for you. And so yours turned into an entirely different career.

JT (01:01:49):

Yeah. It has. Yeah.

EW (01:01:53):

I get it. I ended up writing a book. I get it.

JT (01:01:57):

Yeah. One thing that I have personally tried to do, is every time I have had a period of unemployment or underemployment, I have tried to see that as an opportunity. So I was unemployed during the dot bomb for six, seven months. Seven months.

(01:02:15):

In that time period, I worked on an open source project just on the side, for the fun of it. I was just trying to up my skills. I was learning C++ at the time. Then I got a job that was terrible. Then I applied for a different job.

(01:02:30):

When I was interviewed for that second job, they told me basically that they offered me the job, because I was the only developer that they had interviewed with C++ cross-platform GUI experience.

(01:02:47):

I only had that experience, because I spent six months tooling around with the side open source project that happened to be cross-platform. And the reason that project was cross-platform is because I wanted it to be available on Windows, but I prefer development on Linux, so I had to make it cross-platform.

(01:03:07):

That has just been a thing that has happened throughout my career. I just look for opportunities to learn new things. And it goes places.

EW (01:03:15):

You mean there was not a ten year plan?

JT (01:03:18):

There was not a 25 year plan, I am sure of that. <laugh>

EW (01:03:23):

I like how some people have thought that I planned my career, and I am just like, "No. No. I am sorry. No."

JT (01:03:32):

But surely you occasionally set goals, and then you do attain them.

EW (01:03:37):

I often set goals, and then do the opposite.

JT (01:03:40):

<laugh>

EW (01:03:40):

It is not great. But it is a direction. And it is often useful. But no, I am not great at- No, that is not true. I mean, I have clients, and clients and I have goals. We meet them or have a good reason not to. And I finished the second edition of my book, so clearly I can meet goals.

(01:04:02):

But it is a little weird that sometimes I set goals for myself, and then I am just like, "All right! Let us get started." And then suddenly I have procrastinated myself into an entirely different achievement, that was never on the list. That I am kind of proud of, but also hoping nobody notices that I am using it to hide what I did not actually do. That is normal, right? <laugh>

JT (01:04:27):

Yeah. Sure.

EW (01:04:32):

I mean, some of the blog posts I have had, some of the projects I have had, have been personal projects. Have been, I wanted to learn X, but in the process of trying to learn X, I ended up with A, B, and C.

JT (01:04:47):

Oh. Of course.

EW (01:04:47):

And now that I am to the point where I might be able to learn X, I am out of time. I cannot do that. Because I have already showed everybody A, B, C, and now I have a contract and I am busy.

JT (01:04:58):

Yeah. Yeah, no. You did exactly what you set out to do.

EW (01:05:03):

Which at the time was to get a new contract. So, yes. Totes.

JT (01:05:06):

Yeah! Now, you set out to learn something new, and you did. It just was not the thing you thought you were going to learn.

EW (01:05:13):

That flexibility I think is very useful to me.

JT (01:05:17):

Yeah.

EW (01:05:18):

Learning is seldom pointless, even when it is not obviously useful.

JT (01:05:24):

No. Every single thing that I have ever learned, is somehow ended up coming back around. I think so.

EW (01:05:30):

Yes. Sometimes it is jokes. <laugh>

JT (01:05:39):

I have only actually set two career goals, no, three. The first one was that I eventually wanted to move- Basically I started in VB6 development, and I had a career goal of moving out <laugh> of VB6 development.

EW (01:05:52):

<laugh>

CW (01:05:53):

As one does. <laugh>

JT (01:05:55):

Oh, yeah. Then I got to C++ world. Then my next goal was, "I hate working for one company. I want to work for ten instead," basically. So I wanted to become a contractor, and I met that goal. Then I said, "Now I want to be paid to travel." And that happened. So those three, yeah. I never wanted to be an author. No.

EW (01:06:24):

Do you usually get paid to go to conferences, or is it mostly about training?

JT (01:06:28):

No. I basically only go to conferences that pay for travel. There are actually a few C++ conferences that cannot afford to pay for travel. I understand because conference budgets are incredibly difficult to be profitable. So I go to the conferences that pay for travel.

(01:06:46):

Then I guess this past, yeah, this year, I have also given a workshop at each of those conferences. But I never expect that workshop itself either to be profitable, really.

(01:07:00):

Then what really helps is the people who are in the regular conference sessions that I give, and the people who are in the workshops that I give, some very low percentage of them will eventually have me to their company to do onsite training. So then it all works out in the end.

EW (01:07:20):

What is the best part about onsite training? For you? Not for them.

JT (01:07:25):

For me. For me. Well first of all, I love going to a city that I have never been to before. So that part, I have even told some companies, "You bring me there, I am going to give you a discount." I am not going to say anything specific on air right now.

EW (01:07:40):

"You want me to go to Venice? Yes, we can talk about Venice."

JT (01:07:44):

Venice, we could talk about. Yeah, we could. All right, fine. I will say the one that I have actually told several people, I am like, "You bring me to Germany during Christmas market season, I will give you a discount." That is like my wife and I love Christmas market season in Germany. That is the best for me personally, I guess, personal growth kind of thing.

(01:08:09):

But I also, I really do love when I see that students have learned something new. That is very rewarding as well.

EW (01:08:18):

We have a couple of listener questions, which I think we have mostly answered. The first is from Chris Gammell, who likes the idea for the book, has not checked it out. Wanted to know how you balance the difficulty of puzzles between beginner, intermediate and advanced folks.

JT (01:08:36):

That is where I am just like, "It is a flow. It starts from assuming you know nothing, and if you go in order, you will know things, basically. So I am not really trying to make a balance. I am trying to make a continuum."

EW (01:08:52):

And Andreas wanted to know what you thought about the fact that it is even possible to write several C++ puzzle books. What does that say about C++ compared to alternatives?

CW (01:09:03):

<laugh>

JT (01:09:06):

I will just say I think every language has puzzle books right now, first of all.

EW (01:09:12):

It is just that so many of them are also the spec. <laugh>

JT (01:09:20):

<laugh> But I think as we already covered, my C++ puzzle books are meant to be fun. They are not C++ gotcha books, right? They are just like going through things that are core in the language. It is not trying to trick you or anything.

(01:09:35):

Sure there are books like that about C++ and there are websites that are like C++ quiz and it is like even a Twitter channel or whatever account that has posted a C++ weekly quiz. Some of these things, even as I would call myself a C++ expert, I am like, "I have no idea what that code is supposed to do." I am not trying to do that. I am trying to educate you in a simple and fun way.

EW (01:10:01):

Chris answered interview question, "I have no idea what that code is supposed to do, and I do not care. Whoever wrote it should be fired." <laugh>

JT (01:10:09):

Yes. I think that is sometimes the appropriate answer when you are in an interview. Now the problem is if it is- I have known people who wanted to say something similar to that, but what really the truth is, is that they did not understand a core feature of the language.

CW (01:10:31):

That was not the case with this particular question. The question in question. <laugh> But yes.

JT (01:10:38):

Just to be certain that you know. <laugh> But yeah.

CW (01:10:41):

Dare you ask me what a switch statement is.

JT (01:10:44):

Basically.

CW (01:10:44):

Do you know who I am? I have had those on the other side.

EW (01:10:47):

Yes. Do you who I am?

JT (01:10:50):

I had someone I interviewed once long time ago when I still had a regular job, who put "C++ guru" on his resume.

CW (01:10:57):

Oh, oh.

JT (01:10:58):

I tried to like- At the point, I am basically a C++ beginner, but I am like, "You put guru on your resume, I am going to find some good questions, right?"

EW (01:11:07):

Heck, yeah.

JT (01:11:07):

I give him some questions and he is like, "I think I am going to remove 'guru' from my resume." And I am like, "I think you probably should."

EW (01:11:13):

<laugh>

CW (01:11:15):

"C++ yeoman." Yeah. I did try to just look for a Swift language puzzle books, but unfortunately that can never happen, because the Swift puzzle book space has been completely taken over by Taylor Swift puzzle books.

JT (01:11:32):

<laugh>

CW (01:11:34):

They are going to have to rename the language, for anybody to ever find a puzzle book about the language.

JT (01:11:39):

That is almost certainly true. I know there are Python puzzle books. I own one of them.

EW (01:11:47):

Well, I have a contribution to that regarding finally, else and exceptions.

CW (01:11:53):

"Try, finally, else".

JT (01:11:56):

"Try, catch, finally"?

CW (01:11:56):

Yes, that is it.

JT (01:11:57):

That is Java, right?

EW (01:11:58):

No.

CW (01:11:59):

It is also Python. Yeah.

JT (01:11:59):

That is also Python. Sorry.

EW (01:12:00):

"Try, except, finally, else".

JT (01:12:01):

Else. <laugh>

EW (01:12:04):

It was just too many, and it did not matter what it did, it was just too complicated.

CW (01:12:08):

<laugh>

EW (01:12:08):

All right. Are there any things I should ask you about the book or your career?

JT (01:12:19):

I do not know. I feel like we have covered an awful lot. I would say, check out the book. It is not expensive. Minimum price on Leanpub is ten bucks.

(01:12:28):

I priced the Amazon version of this book as cheaply as I could, to still make some money for myself. Like I said, I am really not highly driven by profit motive here. Yes, I would love to sell a hundred thousand copies. That would make my day. But I am sure that is not going to happen.

(01:12:48):

I think it is $19.99 on Amazon. I should probably verify that <laugh> before you put it in the podcast, but it is too late now.

EW (01:13:00):

I am trying to click on it. It is not going.

JT (01:13:02):

Yeah, it is $19.95. I got that right. Yeah. So I make a few dollars profit basically. It is not a lot. For a 400 page puzzle book that is like- You are not going to find a less expensive one. I almost sometimes wonder if I am not charging enough. People think it does not have value, you know what I mean?

CW (01:13:21):

That is always the trick.

JT (01:13:22):

But I just want it to be accessible.

CW (01:13:23):

Yeah.

JT (01:13:23):

Yeah.

EW (01:13:25):

This is for paper. It is to write it out. If you have niece or nephew for the holidays, and want to give them something that might be fun, without being obviously educational.

JT (01:13:43):

Yeah. If you know anyone that has got an interest in puzzles or has mentioned, "Oh, I think I might want to become a coder someday." Kids still say that kind of thing. I know most of them say YouTuber, but some of them say coder, right? <laugh> This book-

EW (01:13:56):

Your path to YouTube fame is not alone. There have been other developers to YouTube fame.

JT (01:14:04):

Oh, YouTube fame is like- Okay, my level of YouTube fame is high enough that I sometimes get recognized in airports, but low enough that I make $150 a month in YouTube ad revenue, right? You are not making a living off of YouTube, unless you are like MrBeast or something these days.

EW (01:14:25):

And we have coupons. You offered a couple of coupons, for us to give away the book on Leanpub.

JT (01:14:33):

Yes. Yes, the digital copy. Because I cannot give you print copies.

EW (01:14:37):

Paper. Right.

JT (01:14:38):

Yeah.

EW (01:14:38):

Even though we recommend print copies.

JT (01:14:40):

Amazon does not give me that ability. So yeah.

EW (01:14:43):

But the digital copies, either you can print your own, or you can scribble on your iPad. Not with pen. That is bad.

JT (01:14:53):

Ooh, let me give a quick tip for that. If you get the ePUB version from Leanpub- So the PDF version, you can write on in your Kindle Scribe, or your other similarly enabled E Ink device with a stylus.

(01:15:11):

The ePUB version, if you try to copy that straight to your device, the font layout is going to be wrong on an E Ink device. That is not something I have control over. But if you do the conversion yourself from ePUB to the native format for your device using one of the eBook management tools like Calibre, then everything will be correct. Just so you know. Little note for your listeners there.

EW (01:15:46):

Cool. Two coupons for Leanpub. Tell us the puzzle you are hoping to see in the book. Now remember, we are not looking for the hardest C++ question, or the tweakiest number of incrementers and decrementers on a variable. We are looking for a puzzle that might be fun. Get that to us by November 15th, and we will see what we can do for you.

(01:16:14):

Now Jason, are there any thoughts you would like to leave us with?

JT (01:16:18):

I guess, do better. Next time you are writing code think, "How can I do better?"

EW (01:16:24):

Our guest has been Jason Turner. You can find his books on Leanpub or on Amazon. You can find his YouTube channel "C++ Weekly" on YouTube. And you can find his training website at emptycrate.com. Links will be in the show notes.

CW (01:16:39):

Thanks, Jason. It was fun to talk to you.

JT (01:16:41):

Thank you.

EW (01:16:43):

Thank you to Christopher for producing and co-hosting. Thank you to our Patreon listener Slack groups for their questions. And thank you for listening. And thank Mouser for sponsoring the show. You can always contact us at show@embedded.fm or hit the contact a link on embedded.fm.

(01:16:58):

Now a quote to leave you with. This one is going to be from Julia Hartz. "Every day is sort of a jigsaw puzzle. You have to make sure that you are putting the most important things first."