Algorithms + Data Structures = Programs - Episode 247: The Philosophy of Good Software Design
Episode Date: August 15, 2025In this episode, Conor and Ben chat about the philosophy of good software design, learning languages and more!Link to Episode 247 on WebsiteDiscuss this episode, leave a comment, or ask a question (on... GitHub)SocialsADSP: The Podcast: TwitterConor Hoekstra: Twitter | BlueSky | MastodonBen Deane: Twitter | BlueSkyShow NotesDate Recorded: 2025-08-05Date Released: 2025-08-15非诚勿扰 (Fei Chang Wu Rao) TV ShowSTLab Videos (Adobe Training)Sean Parent TalksA9 VideosSoftware Engineering Languages - Titus Winters - CppNorth 2022C++: Engineers Wanted, Programmers not so Much - David Sankel - C++Now 2019Intro Song InfoMiss You by Sarah Jansen https://soundcloud.com/sarahjansenmusicCreative Commons — Attribution 3.0 Unported — CC BY 3.0Free Download / Stream: http://bit.ly/l-miss-youMusic promoted by Audio Library https://youtu.be/iYYxnasvfx8
Transcript
Discussion (0)
All kinds of things.
So one of the first questions, you know, like the introductory episode was about, like,
what actually is good code, what is good, well-designed code, what do we mean?
And how do we teach it?
And that's a really difficult question to answer, right?
And the way I decided to answer that question in the course, the question of how do you actually teach good software design?
The only way I came up with that seemed to me worthwhile was to take a leaf out of
Welcome to ADSP the podcast, episode 247,
recorded on August 5th, 2025.
My name is Connor, and today with my co-host, Ben,
we chat about the philosophy of software design and more.
Well, now, maybe now is a good time for me to say,
sometimes when I listen to you and Bryce
the things you say are
hilarious. I don't know if it's
intentionally hilarious
but
sometimes I think there's a certain lack of self-awareness
but you know I want to be gentle
here. You know
I laughed out loud when Bryce said
oh you know
Polish has no word for gelato
I'm like
where do you think the word gelato comes from?
It's not English. It's not English
is it?
Oh yeah.
I mean, I, uh, I didn't say it, but I thought, I've been to Poland multiple times, uh, they do have a word for it.
It's gelato.
Exactly.
Yeah.
Um, I understood his point he was making, like, oh, they don't, they don't, they don't, yeah, they have
one for ice cream, but not for gelato, but like, English doesn't have a word either.
Yeah, yeah.
If you've been to other countries around the world, they just call it gelato everywhere.
I mean, I, I'm sure there's a couple languages.
that put a little spin on the word gelato.
Yeah, I, I didn't say any.
There's a lot of times when Bryce is saying some stuff,
and I kind of just am like,
there's no reason for me to point this out.
But I'm glad that you laugh.
I'd be curious if there's other moments
that you can recall off the top of your head.
Oh, in that same episode, he said he was bad at pronunciation.
And I'm like, yeah, you are.
I was a, that was another heller, but, you know.
Yeah, I was, I was, I spent quite a bit of work getting that intro
because I actually hadn't started recording
and I had to get Bryce
to share permissions to the team's recording
so that I could get my audio
because it was just hilarious when he was like
all right, we're going.
And I was like, what?
It's like, that's not an even Polish.
That's closer to German or something like that.
And Shima actually speaks a little bit of Polish too
and she knew how to say Chesh and I had no idea
she spoke any Polish and she was like
Oh, yeah, like that, very far off.
But maybe there'll be an app for him soon that he can do that are used that's better than dualingo.
And someone actually, yeah, that's a callback.
Someone did point out that there is an app called Speak that is trying to reinvent the space.
Like I said in the podcast, like there's a, it's a ripe for disruption because most of them just teach you vocab and it's not that great.
And apparently Speak is that.
And they started in Korea as an English teaching app.
And then they're massive in South Korea now.
And they're branching out to other languages,
but currently Farsi or Persian is not on the app.
I mean, I thought you might have an interesting take here
because you at one time worked in China
and you certainly spoke Mandarin pretty well,
like, what do we say, 10 years ago?
Yeah, 12, 12 years to be, or 13 to be exact?
Anyways, just over 10 years, yeah.
So I was surprised that you didn't actually bring up learning language from humans over the internet, right?
Because all these apps, they're fine, but certainly once you get to a certain level, I would much rather get lessons from a native speaker, right?
I would go with duolingo or Rosetta Stone or whatever, up to a certain point.
but there's no substitute for, you know, talking to real people, I think.
Yes.
And, you know, there's, there are several sites now.
Italky is one I'm aware of, and there are, I'm sure, others,
where you can just go on the site, sign up, get lessons in whatever language you like
from whatever native speaker tutor is on there.
Yeah.
Uh, 100% agree.
I mean, I think implicitly I kind of said that by saying,
as soon as you go to the country and you're immersed,
you know, it just sky rockets.
Yeah.
But if you can't go to the country,
you know,
like many of us can't just drop things,
go to a country to learn a language.
And also, you know,
there are lots of languages you might want to learn
where you don't particularly want to live in the country,
or at least not for an extended time, right?
So, you know, like when I was at school,
I studied French.
Because I'm English.
you know, that is the standard foreign language that everyone in England learns as a high schooler, as a middle schooler.
And so by the time I graduated from high school, equivalent of, I was pretty fluent in French.
You know, like, we had a standing homework which was to record the news bulletin from France Antaire,
which you can receive in the south of England on a long wave or could.
So I would record that every week and translate it.
That was our standing homework, right?
And so by the time I graduated high school, I was pretty fluent in French.
I've lost it now.
But I did go, during the pandemic, I went back and I went to I talkie and I booked a couple of lessons.
And the great thing was I could choose, you know, what kind of French do I want to learn?
This tutor is speaking French and they're from Paris.
This speaker is from Montreal, right?
This other speaker is from Senegal.
So you can choose kind of which variety of the language you want to learn and you can get a tutor that matches you.
And I found that really good.
Yeah.
No, 100%.
I hadn't heard of that website, but there are definitely a bunch of websites.
Some of them specialize in just a specific language, which was the one that I tried out that one time.
But yeah, 100% agree.
I mean, I forgot a bunch of things that I should have mentioned.
Someone pointed out, it was either Mastodon or Blue Sky.
I can't remember which one.
But someone said, I'm surprised you didn't mention watching television shows in that language.
Yeah.
And I just had this kind of like face palm moment because there is, I think I've mentioned it at some point on this podcast.
There is a specifically in China or in Chinese is an amazing show for learning Chinese called Fei Chung U Rao, which is imagine the X factor combined with the Bachelorette that resets every 15 minutes.
So there's like 20 women on stage, each with an X-Factor button in booth.
And they bring out guys one at a time.
And, you know, in the show, who knows how it is in real life.
But it's about 15 minutes on the show where he comes out, he introduces himself.
And at any point during the segment, the girl can hit the X button to say she's not interested.
So I've never seen either of those shows.
So you can have to explain to me how they work.
X-Factor is like three judges with an X where it's kind of like an odd.
You know, they come out with some kind of talent or singing,
and if they don't like it, they hit the X.
Okay.
The Bachelor et is one, or the Bachelor, I guess, is one guy,
and then end girls, and, you know, one of them,
and they end up together at the end,
and it's just one of the romance reality shows.
So if you combine those,
there's a bunch of women, each with an X button slash booth,
and then one guy.
And the reason it's great.
I mean, say what you will about the show.
It's quite entertaining because, you know,
they have different characters that come on,
in terms of the guys.
And then sometimes, if they're not attracted to them initially,
like half the girls will just hit the X and then it's kind of awkward because, you know,
that's usually bad.
Ideally, you want them not to hit the X.
Don't judge a book by its cover.
Yeah, yeah, exactly.
But the reason it's great is that, one, it resets every 15 minutes.
It's like an hour-long show, so you'll see three or four different guys.
And if you get lost at some point, you just got to wait five minutes and then it's going
to be a new person.
The other reason is it's all, hi, my name is, you know, I live in.
this city my job is starting out conversational yeah and and towards the end of the 15 minute
segment they do start to talk about their hobbies and i like to dance or i like to fly airplanes and
so you do get to learn new vocabulary it like it always starts off very easy if you're just
learning the language and so it's it's a great show like a lot a lot of times people recommend
you some you know the equivalent of like friends or the big bang theory but like you're going
to get lost so quickly and you're not going to understand what's going on unless if you have
English subtitles, which I don't recommend.
Anyway, so that is another fantastic way that, you know,
it doesn't, you can find a lot of these shows online for free.
Like, Fechengu Rao, it's on YouTube.
You can get all the episodes.
And the other one is if you have a, if you live with someone like Embrice's case,
a cousin of mine who lives in Montreal with his partner,
he would alternate days in English and French.
And he is not just fluent in French now,
but like most people don't realize that he didn't speak.
French to begin with because his accent is so good.
But it takes a lot of effort, right?
There's a struggle at the beginning when you're trying to do French all one day.
Yeah, to get a halfway good accent, you need to be in some way immersed.
I was, you know, living in England, I had teachers who were fluent in French and German,
and in some cases were themselves French.
So I was able to get a pretty good accent.
And, of course, I was consuming actual French media.
Right.
So I was able to, my accent's pretty good.
Although these days, I'm super rusty.
Like, when I went onto the site and got a, got a lesson,
the teacher was really nice.
And she said, you know, it's strange, some kind of,
some vocabulary, some strange vocabulary stays with you, right?
the kind of thing
he was getting vocabulary
tests as a kid
when I last met my French teacher
I said to him
you're still the reason
I will never confuse
a steering wheel
and the shutter
you know
because in French
those words can be confused
at least to English speakers
but yeah
so what I've lost
is the fluency
I
so my when I speak it's halting
I'm no longer thinking in French
right that's what you lose
that's the first thing you
these yeah um but uh but yeah if if you can drop someone in a country after three weeks four
weeks of immersion i think i think you know they they they pick that up yeah it'll it'll
skyrocket for sure look at that a second mini episode on uh learning language is french the only
language uh that you've well i said so in school i studied i have a german gccc although i don't
remember that much of it. I never really cared to learn all of the different ways that
prepositions take different cases. French is the main thing I learned. I learned Latin as well,
but again, that was by the side. But French was the thing where I learned it and I learned it
over a fairly long period. Like, I had a good 10 years of French. I did French GCSC.S.E. I did
French AS level. G.C.S.E and AS, these are, I think, UK terms? Yeah. So G. G. G. G.
CCSE is you take that in a sophomore year of high school when you're 16 and A levels of kind of like university entrance exams, you take them when you're senior year.
AS level is same standard as A level. It counts for like half. It's basically speaking in the case of French when I took it, it was speaking and reading and fluency, but no literature component.
So we didn't have to study Victor Hugo or anything like that, but we did, you know, totally listen to French radio.
Interesting.
Yeah, that is probably preferable if you're just trying to learn how to converse.
Yeah.
And not necessarily.
Although I'd have to say, you should read French literature as well because it's something's really good.
You can read it in English translations, but.
Can you read in French now still?
I think it's charitable to say no.
You know, haltingly, to read an actual book or a newspaper article, there'd be bits of vocabulary I don't know.
So I'd have to say no.
But I still, you know, you can get an English translation alongside a French translation.
And if you have reasonable French, then it makes sense to read the French and when you need to cross-reference.
Right, right.
Yeah, I remember when I was learning.
Chinese, there was a really good website where
they had popular
novels. The one that
I read was
Narnia, Twanxi, which was
I'm probably terribly
messed up the tones there, but it's
Chronicles of Narnia.
It was great because it would show
you the, in Chinese,
the text, but if you didn't know a word,
you could hover over it and it would
basically give you the English one. So it's kind of
like an interactive way to
progressively learn how
read which is quite nice that like you can imagine you're trying to read something and I think
in Kindles they have the ability to like define words that you don't know you know you hit on it
yeah you can define a look up in a dictionary so it's the same kind of thing but just for
translation and that was a really good tool all right anyway so we've talked about AI we've
gotten your thoughts and we've talked a little bit about learning languages and a couple other
topics um where should go from me here i mean i've kind of been dictating uh have you got topics
i know i know we mentioned c++ now if we want to if you're there or
Are there other topics on your stack of...
A little...
I mean, a lot of what I've been putting brain power into these last few months
is I've been giving a course in software design at work.
Oh.
So, and how to design functions, APIs, types, all of the above.
You know, the course has been fairly wide-ranging.
It's been very interesting.
This week is actually the final...
the final one.
There have been 12 of them.
So it's been quite the undertaking.
It's been really interesting.
I think it's been really valuable.
It's been hard work for me.
It turns out it's really difficult to distill thoughts on, like, and it's the thing of
like, you know, we know beautiful code when we see it, but how can we teach people what good
code design looks like?
So those are the kind of questions I've been wrestling with.
I imagine you, so this is a fantastic, I had no idea about.
this is a fantastic topic to talk about software design and it immediately makes me think of the
fact that uh shan parent that adobe is also he with his reincarnation of the st lab um has been
also i think with friends at the company teaching a course which i think is called better code
in symmetry with his upcoming at some point book um and has given i'm really still waiting for
that book that book's been upcoming for a while i'm hoping that sean gets time to
finish yet. Yeah, I think he's been, the last time we chatted it, he said he was
been spending more time, you know, getting the videos out, which correspond to the, you know,
chapters of the textbook. And we'll link a couple of them in the show notes that he's given
talks at different conferences called, you know, better code, colon, insert a chapter of the book.
I bring that up because the first question is, is all, is this stuff publicly available in
terms of slides or recordings anywhere? No. No, it's an internal course. But, you know, some of the
same thinking makes its way at times into some of my conference talks. I see. And is this,
is this a one-time thing at Intel or is this something that you plan to do potentially in the
future? Well, you know, in a sense that part of my job is helping to level up the teams that I'm
on. That, that aspect continues. In terms of this course, I am glad to have done it. And I'm not in the
market for spending a huge amount of brain power doing another course right now.
But it's been great.
It's been really good.
Would it be, if you ever did it down the road after taking a hiatus from doing the course
as obvious as a lot of work, would it be something that, or is it, would it be something
that, you know, would ever be recorded similar to the A9 or Adobe stuff, or is it too much
internal?
For this particular course, there's not a whole lot of internal.
content like there's nothing particularly secret in it most and indeed when it comes to actually
talking about code most of the examples come from our open source libraries that i work on um as you
as you sort of may expect that's that's fairly commonly the case that i've reached those for
examples so yeah there's no a priori reason why something like this should not be public i
I suppose.
But, you know, it swings in roundabouts, right?
Because it's not public, actually, when I give the talks internally,
I get to sort of tailor it to the audience a bit more, which is helpful as well.
Yeah, and of course, if you're, if you would record the lectures or the talks,
it's obviously going to affect the willingness of participants.
to speak up and ask questions if they know
it's being recorded. Right.
So there's obviously trade-offs.
I mean, exciting to hear that you're doing that kind of thing.
So, I mean, can you give an overview of, you said there's 12 different
talks or, are you calling them talks, lectures?
It's a series of 12, and really it's 12 because,
I think because after I'd done this many, I got,
I kind of got to the point where I'm like,
12 seems like a good number to finish it off and I wanted to be finished.
But we cover, we'll cover, we'll
kinds of things. So one of the first questions, you know, like the introductory episode was
about like what actually is good code, what is good, well-designed code, what do we mean,
and how do we teach it? And that's a really difficult question to answer, right? And the way
I decided to answer that question in the course, the question of how do you actually teach good
software design? The only way I came up with that seemed to me worthwhile was to take a leaf out
of non-software designs book, right, to look at other things in the world, like graphic
design or like, you know, any kind of creative endeavor where design is a part. And in almost all
cases, the way your own design skills is through critique, right? So it's not enough just to say,
oh, you know, this is good, or here's an example of good. But we have to, you know, so one of the
The things we did in the course was look at different APIs and critique them and say, you know, what when the author wrote this, what were they thinking? What do we think they had in mind, right? And what use cases do they have in mind and what requirements did they have and what constraints did they have? And then, you know, if we were to sit down and write this same API now, would we make the same choices? What are the choices? You know, what are the axes of variation that we can identify?
you know just the simple act of sort of kind of identifying the design space of the code is is one important thing to do right and and it's important to really think broadly about that and to think about that in a way that is not as much as possible thinking about implementation and it is so hard you know for engineers like us because we're so used to implementing right as soon as we see a problem we think oh
I know how to do that.
I know how to solve that.
I know how to implement that.
Just type, type, type.
I can have an implementation.
But no, the trick with design is to say,
let me assume that this can be implemented.
I don't care about the implementation today.
I'm not wearing that hat, right?
There will be a time when I wear that hat.
But that is not today.
Today, I'm saying, what's the design?
What are the, like I said, axes of variation?
How are these things going to be used?
How are they going to be composed?
Thoughts like that.
And it's also kind of.
of expanding our horizons there sometimes one of the things I like to is like ask absurd
questions you know and particularly having studied multiple computer languages sort of helps
expand your ideas there so you think so you think of things like well what if i you know what if
in c++ what if i couldn't use functions what if i only could use lambdas right no such
things as a function well what if you know what what things have to live at compile time what
things have to live at runtime, you know, what if I can't use this construct, what if I only can use
this construct, what, you know, sort of absurdities? Like, what if, what if no functions ever
returned and all they ever did was pass on a continuation? There's a style of coding that we
almost never do in C++, but, you know, thinking about that really helps you think about
senders, for example. So there are all sorts of different kind of, I don't know,
know, techniques I tried to come up with, just kind of examining how I think about code and how
people I have worked with who I have seen what they can do. So I've learned from them. And I tried to
I tried to put all these things into a course. And along the way, we did some API critiques,
like I said, because that's a great way to really one of the
ways to hone a kind of design sensibility is by reading other code and thinking about it deeply
and critiquing it. But we also studied, you know, we studied patterns, we studied some practical
things about how can we design functions, how can they be more or less composable, how does
that scale up to APIs and types and objects, and how do we test things? You know, that was one
of the one of the sessions so i mean it sounds like a certain percentage of this course is almost like
the philosophy of good software design is it yeah is that true would you agree with that i mean
that certainly was how i pitched it in the introduction and the the coda um sessions because
because yeah um design is about it it's separate from implementation right that's one of the things
that we're trying to present here.
It's one of the things we're trying to say.
Like, you can get a problem to solve
and you can go ahead and implement something and solve it.
And, you know, Alice can do that.
Bob can do that.
Charlie can do that.
They can all code up implementations
that fulfill the criteria,
that fulfill the requirements,
that adhere to the constraints,
that pass all of the tests.
But then we can look at those three different implementations.
and they will be differently designed.
They will be, you know, one might be ugly.
One might be beautiful.
One might be somewhere in between.
How do we quantify that in a sense?
How do we characterize that?
How do we know that code is ugly versus beautiful?
You know, and it's about looking beyond what today's problem is.
and it's about looking to
you know how will things change in the future
is this code
uh changeable
malleable
understandable
properties like that
very interesting
I mean it sounds not dissimilar to
a couple talks
are they the same or
they talk about
tangentially similar topics
there was one that Titus Winders is given
about
I think it was software engineering versus
programming or he has some kind of quote around that you know that programming software engineering
is programming plus time or something like that integrated over time yeah yeah integrated over time
and then david sankle he gave a talk a couple years ago at a c++ now that was looking at
the software engineering from the perspective of other engineering domains was kind of like
what can we learn from you know actual civil or mechanical engineers and stuff
and, you know, engineers that have bodies of whatever professional organizations behind them that have a lot more, not weight behind them, but, you know, they have codes of ethics and whatnot and things like rules they have to abide by, whereas we don't really have that, at least at this point in time.
Yeah, and there are a couple of thoughts there, you know, to tie back to our earlier discussion about AI coding, like one of the problems right now is that AI can't take responsibility for the code, right?
the program has to take responsibility.
And, you know, if you're working in a field where your code could result in harm to humans
or loss of livelihood or even of life, that's a very serious ethical concern, I think.
You know, this is something I feel every day.
I work on code that goes into chips that are used.
for everything right you know including you know computerized operating
theatres for instance because because we don't you know we don't we don't
we don't just make objects anymore as a society we make computers we what's the
quote we don't we don't drive cars or fly planes we have computers that with
wheels and computers with wings and you know computers that we use to to heal people
and it's when i took this job a few years ago now and even when i took my previous job that was
something that i sort of felt quite strongly um you know i came from the games industry in the
games industry if you screw up it doesn't matter that much um but
But if you're working in, really, it doesn't.
That's not to say that, you know, the game industry is a hard job and a worthwhile job.
But at the end of the day, it doesn't have the same kind of ethical concerns around it.
Yeah.
As if you're shipping code that could lose millions of dollars in seconds
or could hurt someone if it goes wrong, right?
Computerized operating theaters are a thing.
You don't want to know what happens inside.
them and what kind of you know because tech support exists and sometimes it is have you tried
turning it off and on again in the middle of an operation i guess yeah i i definitely have never worked
in a domain where i've had to worry about someone's life i mean i you're obviously
completely correct about the the gaming industry you know there was a bunch of bugs and stuff that
happened with cyberpunk 277 not that i never played it i just i like watching reviews online and people
getting upset and whatnot. But like, that was, that was the result of it, right? People post
YouTube videos of, right? And, you know, maybe in the worst case, like someone's GPU gets
overclocked and, you know, it's fried. But no one died, right? Like, it's not life and death,
at least that I know of. And I'm not working, right now I don't work directly in that line, right?
But I often think, you know, like if I went back and had my time again, I might choose to work in medical devices, you know, because that's an area of where it helps people.
And that's just something that I think is good.
You know, that's just my bias maybe on my leaning.
But I don't, so I don't work directly on those things today.
but I do work on kind of a substrate of things,
which is used for all kinds of reasons, right?
And so, you know, I work on power management inside the CPU.
If my code goes wrong, CPU doesn't run, right?
In extreme cases, the CPU burns itself up physically.
Right. So we have to be absolutely sure that our code works and works correctly, right?
Because of the use cases that things get put to, it could mean that someone's life is on the line.
That is a very real possibility.
Be sure to check these show notes, either in your podcast app or at ADSP thepodcast.com,
for links to anything we mentioned in today's episode, as well as a link to a get-up discussion
where you can leave thoughts, comments, and questions.
Thanks for listening.
We hope you enjoyed and have a great day.
I am the anti-brace.