51-Ted-M-Young.txt

(00:00:00):
Hey, everybody.

(00:00:00):
Welcome back.

(00:00:01):
This is Jim Grisanzio from Java Developer Relations, and this is Duke’s Corner.

(00:00:05):
And tonight I’m here to have a conversation with Ted M. Young from the Bay Area.

(00:00:09):
Ted, welcome.

(00:00:10):
Welcome to Duke’s Corner.

(00:00:11):
Yeah, great to be here.

(00:00:12):
I’m a big fan.

(00:00:14):
Yeah, well, that’s great.

(00:00:14):
Well, I’m an honor.

(00:00:16):
That’s just, I’m honored.

(00:00:17):
Thank you very much.

(00:00:18):
No one’s ever said that.

(00:00:19):
That’s really cool.

(00:00:20):
Yeah,

(00:00:21):
we’ve been chatting on Twitter a little bit,

(00:00:23):
and I was talking to Char,

(00:00:24):
and he said,

(00:00:24):
oh,

(00:00:24):
you got to talk to Ted.

(00:00:25):
And I said, who’s Ted?

(00:00:26):
I said, oh, this is so really great.

(00:00:29):
so um here we are so yeah sure we love to get to know you and uh find out what’s

(00:00:33):
going on you live in the bay area that’s christ live there too great weather yeah

(00:00:37):
great weather so uh tell me about the bay area these days what are you doing with

(00:00:42):
java these days i’m doing a lot of live coding on stream so something that i did

(00:00:48):
before the pandemic is so there’s a service called twitch and it’s 99.9 gamers

(00:00:53):
gaming and people watching them game

(00:00:57):
And I saw some folks who were doing coding.

(00:01:00):
It’s like, oh, that’s cool.

(00:01:01):
And so I started doing it.

(00:01:04):
And I’ve been doing it on and off ever since.

(00:01:06):
So probably going on five years now.

(00:01:09):
So that takes up a lot of my time when I’m not at…

(00:01:13):
Some other organization as a Java coach,

(00:01:15):
as a Java trainer,

(00:01:17):
I’ve been doing Java training before even Sun did it way back in the 90s.

(00:01:21):
So I was teaching Java before Sun had gotten their act together and actually had

(00:01:26):
their own classes on Java.

(00:01:28):
Wow, that goes way back.

(00:01:29):
I used to write Sun, so that’s cool.

(00:01:30):
Yeah, yeah.

(00:01:31):
So you’re on your own.

(00:01:32):
Yep.

(00:01:33):
Yep.

(00:01:33):
Oh, excellent.

(00:01:34):
Independent.

(00:01:34):
Yeah.

(00:01:35):
Left Apple seven, eight years ago.

(00:01:37):
We worked at Google early days, eBay early days.

(00:01:39):
So I’ve been around a while.

(00:01:42):
That’s cool.

(00:01:42):
That’s really great.

(00:01:43):
I think it’s best to be on your own.

(00:01:45):
I used to be in business in New York, but in the construction business.

(00:01:47):
But there’s something special about owning your own thing.

(00:01:51):
Yeah.

(00:01:51):
It’s a lot harder.

(00:01:53):
People don’t realize this.

(00:01:54):
It’s a lot harder owning something and having to do everything online.

(00:01:58):
Having to do everything.

(00:01:59):
Yeah.

(00:01:59):
All the stuff that used to be, if you work for a company, you don’t even think about it.

(00:02:03):
It’s like, oh, I got to deal with reviewing this contract or scheduling this thing.

(00:02:07):
Scheduling is the hardest thing.

(00:02:09):
Exactly.

(00:02:09):
Getting people all on the same page, same day, same time, what works for all the people involved.

(00:02:14):
That’s

(00:02:14):
That feels like it shouldn’t be that hard, but it really is one of the hardest things.

(00:02:18):
Absolutely.

(00:02:19):
But there’s this feeling of just this, I don’t know.

(00:02:22):
I just, I mean, it just felt very free, you know?

(00:02:25):
Yeah, the freedom.

(00:02:26):
Yeah, yeah.

(00:02:27):
One thing when I was working at some places, like very restricting.

(00:02:30):
And I was working as a software developer, not as a trainer.

(00:02:33):
Way back in the 90s, I had my own training company.

(00:02:35):
And so we were doing training.

(00:02:37):
Full circle came all the way back to doing Java training and then being a software

(00:02:41):
developer for a few decades and then back to being training and coaching and love teaching,

(00:02:46):
love helping people get better.

(00:02:48):
So my mantra is reduce the suffering and increase the joy of software development.

(00:02:52):
That’s what I’m about.

(00:02:53):
Oh, that’s great.

(00:02:54):
That’s really great.

(00:02:55):
That’s one of the things I love talking to developers like you.

(00:02:59):
It’s not just a job.

(00:03:01):
Most of the people I talk to, the vast majority, I would say, there’s a certain amount of passion.

(00:03:06):
There’s either a love of something,

(00:03:08):
a love of the code,

(00:03:10):
a love of the technology,

(00:03:11):
love of being able to solve really difficult problems,

(00:03:14):
or using this skill and these tools to make the world a better place.

(00:03:18):
Everybody expresses it in different ways, but they all basically say something like that.

(00:03:22):
yeah and doing it together with other people that’s that’s actually i think one of

(00:03:26):
the hardest parts also about being sort of a solo entrepreneur kind of thing is it

(00:03:30):
can be a little lonely and that’s another reason why i like the live coding is i’ve

(00:03:34):
got community around that and actually i’ve built so one of the parent sort of

(00:03:39):
quote requirements of being a twitch streamer is you have to have a discord

(00:03:43):
community

(00:03:44):
And I was early on,

(00:03:45):
I was like,

(00:03:45):
I guess so,

(00:03:46):
because,

(00:03:46):
you know,

(00:03:46):
somebody says,

(00:03:47):
hey,

(00:03:47):
do you have a reference for X or how would I learn Y?

(00:03:50):
And then like, I don’t know off hand, but ask me on my discord and I’ll give it to you.

(00:03:54):
And over the years, the community has grown.

(00:03:57):
There’s over 800 people.

(00:03:59):
And it’s Java-focused.

(00:04:00):
And there aren’t a lot of… There’s a lot of sort of beginner communities.

(00:04:04):
So you’ve got your Reddits and you’ve got some other places where you can go as a

(00:04:07):
beginner and get some good support for Java.

(00:04:10):
But once you advance past that, kind of the 201 classes or whatever, where do you go?

(00:04:15):
There’s not a lot of great places still.

(00:04:18):
There’s some great resources, you know, there’s Fuji and there’s, of course, dev.java.

(00:04:22):
But in terms of having a community and like,

(00:04:24):
I’m struggling with this non-trivial,

(00:04:27):
non-beginner thing in Java or using a Java,

(00:04:31):
you know,

(00:04:31):
one of the Java frameworks,

(00:04:33):
what do I do?

(00:04:33):
Where do I go?

(00:04:34):
And there’s not a lot of great places for it.

(00:04:36):
And so I’ve built my community to be the kind of place that I want to hang out in

(00:04:41):
and learn from the people who have been around a little while.

(00:04:44):
That’s great.

(00:04:44):
So, I mean, I’ve been to Twitch.

(00:04:46):
I’ve seen a lot of the gaming stuff on Twitch and I’ve seen some coders there too,

(00:04:51):
but I don’t hang out on Twitch.

(00:04:52):
So tell me what it’s like.

(00:04:54):
I mean, you get on there and you start a stream.

(00:04:56):
I’ve done streaming myself, but not coding, obviously.

(00:04:59):
And so what is their regular schedule?

(00:05:02):
What do you do there actually?

(00:05:03):
Yeah.

(00:05:04):
So I’ve gotten into a bit of a regular schedule.

(00:05:06):
It was harder when I was doing a lot more training,

(00:05:08):
but this year has been a little bit not great for the training business,

(00:05:12):
but it has been meant that I’ve had more time to stream.

(00:05:14):
So one of the things that I really try to do when I’m streaming, I basically have two goals.

(00:05:22):
One is I want to get some stuff done.

(00:05:24):
And I’m the kind of person who loves pair programming,

(00:05:25):
who loves mob programming or ensembling,

(00:05:27):
loves working together collaboratively in real time.

(00:05:31):
The streaming gives me a bit of that.

(00:05:33):
So I would do things like, hey, I’m working on a course.

(00:05:37):
I’m going to spend this stream working on some example code for the workshop, for the course.

(00:05:43):
Lately, though, I’ve been doing a lot of basically software development.

(00:05:46):
So sort of my second goal is I want to show people what it’s like for an experienced person

(00:05:52):
java developer using techniques like test-driven development and domain-driven

(00:05:56):
design and refactoring and all these kinds of things and show what it’s like to do

(00:06:00):
this with all the mistakes and all the i have no idea what i’m doing here or why

(00:06:06):
does this not work because a lot of times you see a you know video or tutorial and

(00:06:10):
it’s like it’s always a happy path

(00:06:12):
exactly you know everything’s going great here’s exactly what you need to do you

(00:06:16):
know it’s very much you know like the the baking shows is like here’s this perfect

(00:06:19):
cake even though it was like the eighth try that that they did it um but when

(00:06:23):
you’re live streaming there’s times when i’m like why why is this test still

(00:06:27):
failing it’s supposed to be passing now or i don’t understand this documentation

(00:06:31):
for for this thing and

(00:06:33):
I’m famous for my rants like this documentation is terrible.

(00:06:35):
And here’s why,

(00:06:37):
like not just that that it’s not great,

(00:06:38):
but like as someone who’s who’s a trainer and a teacher and instructor learning and

(00:06:43):
how people learn and how to package that up is really interesting to me.

(00:06:47):
And so I often will rant and like if it only did it this way and sometimes I will

(00:06:52):
actually then submit some changes and updates if it’s an open source kind of thing.

(00:06:56):
But generally, my streams are usually around three, three to four hours because anything more than that.

(00:07:01):
And I’m just fried.

(00:07:02):
And lately it’s been working on.

(00:07:05):
So I have a board game that I created to teach to help teach test driven

(00:07:09):
development and putting that game online.

(00:07:11):
And I’m dealing with, you know, testing and layout.

(00:07:16):
And when it gets to the CSS part, I’m like, I don’t know what’s going on.

(00:07:19):
Why is this not laid out correctly?

(00:07:23):
And then figure it out.

(00:07:24):
And one of the nice things is I built a small.

(00:07:27):
So,

(00:07:27):
you know,

(00:07:27):
you look at other Twitch streamers and they’ll get hundreds,

(00:07:30):
if not thousands of people watching.

(00:07:32):
I’ll have a good core of about 25 to 40 people, but they help me.

(00:07:36):
And so that’s the thing that continues to be sort of surprising to me that there

(00:07:41):
are people who are interested in watching what I’m doing and interested enough to

(00:07:46):
pay enough attention that they can actually provide useful advice.

(00:07:50):
Several times a stream, I get help from chat.

(00:07:53):
And sometimes it’s just like, what do I call this thing?

(00:07:55):
What is the good name for that, right?

(00:07:56):
Because naming is hard.

(00:07:58):
But other times it’s like, hey, you missed this thing over here.

(00:08:01):
That’s why this thing isn’t working.

(00:08:03):
And I’m like, oh, of course.

(00:08:04):
I mean,

(00:08:04):
eventually I would have figured it out,

(00:08:05):
but it’s so much nicer to have somebody else point that out.

(00:08:08):
And so that’s been a really wonderful sort of, you know, I have my regulars.

(00:08:13):
I try to do it in a time that’s that’s friendly to European because I’ve got a lot

(00:08:17):
of European fans worldwide.

(00:08:19):
And then occasionally I’ll meet some of these people in person.

(00:08:21):
And it’s just it’s just kind of wild.

(00:08:23):
it’s really interesting you say this because i mean is this something that you took

(00:08:28):
to right away in terms of having the ability to do it live and not rehearsed yeah

(00:08:34):
with the possibility of just like you said hey how do i do this yeah it’s funny

(00:08:39):
when i first started training doing training in the in the 90s

(00:08:43):
It surprised the heck out of me that I was not only good at it,

(00:08:46):
but enjoyed it because I was really,

(00:08:49):
really shy and very introverted and could sometimes not even speak in public

(00:08:54):
earlier on and throughout the year.

(00:08:57):
And I found that I am really good at what I call tap dancing.

(00:09:01):
Like,

(00:09:02):
I don’t know what’s going on.

(00:09:03):
Let’s figure this out.

(00:09:04):
Let’s, you know, oh, I didn’t expect this.

(00:09:06):
But, you know, I’m going to say, hey, look at this.

(00:09:09):
I remember distinctly I was actually working on a course when I was working at

(00:09:11):
Apple and some exception got thrown.

(00:09:13):
And I’m like, oh, that wasn’t supposed to happen.

(00:09:16):
And quickly figured it out.

(00:09:17):
It’s like, oh, this is actually an awesome learning opportunity.

(00:09:21):
I can say, because one of the things you got to do is I deployed this thing and I got this exception.

(00:09:24):
Well, how do we troubleshoot that?

(00:09:26):
Great.

(00:09:26):
Now I have a new exercise.

(00:09:27):
How do you troubleshoot if something goes wrong?

(00:09:30):
So I’ve found that I’m really good at, in a sense, live performance, like something goes wrong.

(00:09:36):
And it can be really difficult as someone who’s been around for a while,

(00:09:40):
who’s considered an expert to be like,

(00:09:42):
I don’t know.

(00:09:42):
I don’t know something.

(00:09:44):
And to also get a little frustrated, right?

(00:09:46):
Like, why is this thing not working?

(00:09:48):
I should know this.

(00:09:49):
I’m an expert and it’s not going right.

(00:09:51):
You know, so that took a little bit of practice and just time spent to get used to that.

(00:09:55):
And now I’m like,

(00:09:57):
mostly,

(00:09:57):
okay,

(00:09:57):
there’s still times where I get a little anxious and maybe you have,

(00:10:00):
let me take a break.

(00:10:01):
But I just found that I’m really good at giving me a topic that I’m somewhat

(00:10:07):
familiar with and I’ll talk for hours.

(00:10:09):
I’m totally fine with that.

(00:10:11):
But it’s also what keeps me going is the interactive nature.

(00:10:15):
Like I have the video and audio and all of my audience has this chat.

(00:10:18):
But even that’s enough to form a connection.

(00:10:21):
And it’s just fascinating that this little pipeline of characters back to me can

(00:10:26):
still provide me a sense that there are actual people there.

(00:10:29):
That’s what makes it fun.

(00:10:30):
When I talk to a lot of developers in this podcast,

(00:10:34):
or even just when I go to conferences,

(00:10:36):
I’m talking to them about my level in terms of building communities,

(00:10:41):
contributing to communities,

(00:10:43):
the whole dynamic of how a community functions,

(00:10:46):
why we all gather and do these kinds of things,

(00:10:49):
how to build them,

(00:10:50):
things like this.

(00:10:52):
But it’s very rare,

(00:10:53):
actually,

(00:10:53):
now that I think about it,

(00:10:55):
just hearing you talk,

(00:10:55):
it’s very rare that I talk to somebody who is building their own community.

(00:11:00):
Usually, it’s like you go to a conference and someone’s doing a session.

(00:11:04):
They’re contributing to the overall community there.

(00:11:08):
They might have a large following.

(00:11:10):
but they’re not necessarily doing their own training and things like this or doing

(00:11:16):
live sessions like you are,

(00:11:18):
where you’re building your own community on a platform.

(00:11:21):
That’s really interesting.

(00:11:23):
I’ve always been a community builder because it’s one of those, I want to belong.

(00:11:28):
And the best way to belong is to start the thing and then hope other people join.

(00:11:34):
And so I’ve built communities when I was in college and so on.

(00:11:38):
And so I’m always sort of

(00:11:40):
A little bit selfishly,

(00:11:41):
if not maybe mostly selfishly,

(00:11:43):
like bring people together because this is what I want.

(00:11:45):
I’m not getting it or finding it elsewhere.

(00:11:48):
So I’m going to build it.

(00:11:49):
And maybe it’s small and sometimes that’s hard.

(00:11:51):
It’s like, oh, I wish it was bigger.

(00:11:53):
But seeing that there are people who year after year, week after week, month after month and come back.

(00:11:59):
And,

(00:11:59):
you know,

(00:12:00):
people will drop off and then new people will come and change is hard,

(00:12:03):
like seeing that shift over time.

(00:12:05):
It’s like, oh, I miss so-and-so, but hey, there’s new so-and-so who’s, you know, who’s been contributing.

(00:12:11):
So, you know, so for me, it’s if I can’t find the community, then I’m going to go build one.

(00:12:16):
You know,

(00:12:16):
when I talk about building communities,

(00:12:18):
I have a couple of sessions that I do at conferences sometimes.

(00:12:21):
And one of the points that I make to community building is not just the function of

(00:12:26):
the community manager or the program manager or whoever’s the facilitator.

(00:12:33):
Every engineer in that community, it’s primarily engineers.

(00:12:37):
they’re community builders as well.

(00:12:39):
And sometimes they don’t see themselves as such.

(00:12:42):
And I say,

(00:12:43):
you’re writing code,

(00:12:44):
you’re writing,

(00:12:44):
you’re building infrastructure,

(00:12:46):
you’re writing processes,

(00:12:47):
you’re reviewing code,

(00:12:49):
you’re doing architecture reviews,

(00:12:50):
you’re doing,

(00:12:51):
you know,

(00:12:53):
code reviews,

(00:12:53):
you’re doing,

(00:12:54):
you know,

(00:12:54):
fixing bugs,

(00:12:55):
all of those things,

(00:12:56):
all of the infrastructure,

(00:12:57):
all of the,

(00:12:58):
you even have the conversations on mailing lists,

(00:13:00):
all that stuff.

(00:13:01):
And also attracts other people from the outside.

(00:13:05):
And this is your community builder.

(00:13:07):
And I spoke to some engineers.

(00:13:09):
Yeah, I guess so.

(00:13:10):
It’s not just my job, you know, to, you know, run this conference.

(00:13:13):
You being here actually is is exactly none of it.

(00:13:18):
Yeah.

(00:13:18):
And things like writing emails and responding to emails.

(00:13:21):
That’s such an important part of saying that this is a resource.

(00:13:25):
We’re here for you.

(00:13:26):
We’re going to help you.

(00:13:27):
And then,

(00:13:27):
you know,

(00:13:28):
those people then turn around and say,

(00:13:29):
I want to then help somebody else because I believe that most people want to help.

(00:13:35):
Most people, whatever human aspect it is, we get something out of helping.

(00:13:41):
And sure, we also like to be helped, and that’s great.

(00:13:44):
But the help is not just for the person who’s being helped.

(00:13:47):
The person who’s giving that help gets something out of it.

(00:13:52):
And that’s what I love about it.

(00:13:53):
Because people,

(00:13:55):
when a community gets to a certain size,

(00:13:56):
it’s like,

(00:13:57):
I don’t have to answer every question.

(00:13:59):
Somebody else will pop up and answer it.

(00:14:02):
And their answer will be possibly different from mine.

(00:14:04):
It’s like, oh, that’s a good idea.

(00:14:06):
I didn’t know about that.

(00:14:07):
This stuff is innate.

(00:14:08):
Human beings are herd animals.

(00:14:10):
If we can’t form communities,

(00:14:11):
if we’re not a part of a group,

(00:14:13):
some sort of a group,

(00:14:14):
a family,

(00:14:15):
and then the community and larger companies.

(00:14:18):
All the different things.

(00:14:20):
We can’t survive.

(00:14:21):
I mean, we need the help of others, you know.

(00:14:23):
We’re not individual.

(00:14:24):
I mean, we are individuals within a group.

(00:14:28):
Simultaneously both, you know.

(00:14:30):
It’s interesting.

(00:14:31):
I grew up in New York, so I have an American family.

(00:14:34):
foundation in terms of the individual is the most important thing now i live in

(00:14:38):
japan where the group is the most important thing yeah so what the westerners need

(00:14:43):
is a little bit more group thinking and what the easterners need is a little bit

(00:14:46):
more individual thinking and both of them know this yeah i’ve lived in both spaces

(00:14:52):
and they are both very aware of it and that’s fascinating to me okay test driven

(00:14:58):
development what is that

(00:14:59):
Test-driven development.

(00:15:00):
So it is a technique for developing software.

(00:15:05):
The way that I learned and probably,

(00:15:07):
unfortunately,

(00:15:07):
still a lot of people learn how to code is you write code,

(00:15:11):
right?

(00:15:11):
The thing that actually provides the functionality.

(00:15:13):
Maybe you’ll write tests.

(00:15:15):
Although I think, you know, looking back over 20 years, I think that’s gotten a lot better.

(00:15:20):
It used to be very difficult to convince people, developers to write tests for their own codes.

(00:15:25):
Like that’s what QA, that’s what that QA team is for.

(00:15:28):
I think that’s mostly at least sort of in the zeitgeist has gone away and people

(00:15:33):
accept that,

(00:15:33):
no,

(00:15:34):
we need to write tests.

(00:15:35):
But mostly people still write it afterwards.

(00:15:37):
You write your code and then you write a test to confirm that the code you wrote worked,

(00:15:42):
which is certainly better than not writing any tests.

(00:15:44):
But it has two problems.

(00:15:46):
One is I’m done now.

(00:15:48):
I got to write tests.

(00:15:49):
Yeah.

(00:15:51):
Like the idea that you’re done before you’ve actually checked to see that your code

(00:15:55):
works is seems bizarre,

(00:15:57):
but it’s how we learned.

(00:15:58):
Right.

(00:15:58):
I know when I was in school, although I learned way before I was in school, you wrote code.

(00:16:04):
There was no idea of tests other than manually like checking it.

(00:16:07):
Did it do what I wanted it to do?

(00:16:09):
The other problem is you might find that the code isn’t actually easy to test.

(00:16:14):
You might want to test a certain decision behavior and the code is not really set

(00:16:19):
up for that to be easy to write a test for it.

(00:16:21):
So you now have a choice of now I got to change my code so I can make it more

(00:16:24):
testable or I just skip that test.

(00:16:27):
And unfortunately,

(00:16:28):
we often go the path of least resistance like,

(00:16:30):
well,

(00:16:30):
all right,

(00:16:30):
I wrote this one test,

(00:16:31):
but it doesn’t cover what I want.

(00:16:33):
So I’m going to just, you know, just leave it.

(00:16:36):
I almost think that both of those like, quote, done.

(00:16:39):
Now I have to do extra work.

(00:16:41):
That doesn’t work with how our brains like to work.

(00:16:45):
Our brains love shortcuts.

(00:16:46):
They want to, you know, it’s like it’s done.

(00:16:48):
So mentally, we’re like anything else is just drudgery.

(00:16:51):
So what test-driven development says,

(00:16:53):
so Kent Beck,

(00:16:54):
who basically invented or discovered,

(00:16:55):
depending on how you want to look at it,

(00:16:57):
20 plus years ago,

(00:16:58):
laid out,

(00:16:59):
well,

(00:17:00):
what if you wrote the test first?

(00:17:02):
Which is a bizarre way of thinking.

(00:17:05):
But if you think about it,

(00:17:07):
When you’re about to write some code,

(00:17:09):
you have in mind what it should do from calculating sales tax on a product.

(00:17:15):
You know what it should do.

(00:17:16):
If it’s a product and the sales tax is 10%,

(00:17:20):
which is what it almost is here in California,

(00:17:23):
then you multiply it and you get an expected amount.

(00:17:26):
So that’s, in a sense, a little specification.

(00:17:30):
And so hopefully you know that before you start writing the code.

(00:17:32):
Otherwise, how do you know what code to write?

(00:17:34):
And one thing I’ve found as a trainer and watching people code and sort of looking

(00:17:38):
over their shoulder is there’s almost this stream of consciousness kind of thing

(00:17:43):
that we do when we code where new ideas are popping into our heads and then we

(00:17:48):
write code for those things.

(00:17:49):
And so we end up sometimes even writing more code than is necessary.

(00:17:52):
Yeah.

(00:17:53):
So one of the things that writing the test first does is it makes it super crystal clear.

(00:17:58):
What is it I expect this code to do?

(00:18:00):
It doesn’t do it yet because if it did it, then I wouldn’t have anything to do.

(00:18:03):
I’d move on to the next thing.

(00:18:04):
But if it doesn’t do it, what do I expect it to do when I am done coding?

(00:18:09):
And what I love about that is it means you’ve done all the clarification and all

(00:18:14):
the hard thinking up front.

(00:18:15):
You’ve written a test, right?

(00:18:17):
So JUnit, AssertJ, those are the tools I use.

(00:18:20):
I contributed to AssertJ way back when.

(00:18:22):
And you’re writing those tests.

(00:18:24):
And then you just write the code.

(00:18:26):
And I say just because at that point, you’ve done all the hard thinking about what is it supposed to do?

(00:18:30):
What are the cases?

(00:18:32):
And you may have jotted down a bunch of other tests that you want to write.

(00:18:36):
Test-driven development is one test at a time.

(00:18:38):
So you write the test, it fails.

(00:18:40):
It has to fail for the right reason.

(00:18:42):
There are a number of times,

(00:18:43):
and I show this when I live stream,

(00:18:45):
it’s like,

(00:18:45):
ah,

(00:18:46):
that test failed for a different reason.

(00:18:47):
I expected it to return zero for the sales tax because it’s not doing anything.

(00:18:51):
But I didn’t know that there was some other code that was actually doing some other

(00:18:54):
calculation and the number was wrong.

(00:18:56):
oh, that’s an area of code I wasn’t aware of.

(00:18:58):
Let me go look at that.

(00:19:00):
And so there’s this sort of extra verification step that it provides of, do you understand the code?

(00:19:05):
Because code bases are huge and you’ll never understand all of it.

(00:19:07):
Do I understand enough about the area I’m working in?

(00:19:10):
And so the test failing in a very specific,

(00:19:13):
precise,

(00:19:14):
predictable way,

(00:19:15):
I know why this should fail,

(00:19:17):
helps you verify that you understand the code.

(00:19:19):
Then you write the least amount of code.

(00:19:21):
And this is the hardest part.

(00:19:23):
It’s taken me decades and I still am not good at it.

(00:19:26):
Write the least amount of code to get that test to pass.

(00:19:28):
Because if there’s other stuff, it’s like, oh, it’s going to need to handle these situations.

(00:19:33):
Well,

(00:19:33):
if you want it to handle those situations,

(00:19:35):
you write another test,

(00:19:36):
a failing test,

(00:19:37):
and then get that piece.

(00:19:38):
And so you end up taking these very, very tiny steps.

(00:19:41):
And to some folks, it seems like I could just write the code.

(00:19:44):
I know exactly what I need to do.

(00:19:44):
It’s like, yes, but maybe you don’t have to write that much code.

(00:19:48):
And then when the code’s written and then the test passes, you’re done, but you also have tests.

(00:19:53):
And a big part then of the other part of test-driven development is refactoring.

(00:19:57):
And you who are listening to it can’t see this,

(00:20:00):
but I’m wearing a hat that says refactor on it because I think refactoring is how

(00:20:05):
we honestly,

(00:20:06):
how I’ve survived doing Java for so many years is we have the best refactoring tools,

(00:20:12):
tool and intelligent idea,

(00:20:14):
the

(00:20:14):
best automated refactoring tools.

(00:20:17):
And that’s an important part because you need to constantly keep that code

(00:20:20):
well-structured and easy to read and easy to understand and easy to change.

(00:20:25):
And it can be risky.

(00:20:26):
So the idea of refactoring is you change the structure without changing any observable behavior.

(00:20:31):
I actually run a book club in my community and we’re actually reading the refactoring book.

(00:20:34):
So it’s really interesting,

(00:20:35):
even though I read it back in 99 when Martin Fowler wrote it,

(00:20:37):
we’re reading the book as a group.

(00:20:39):
And there’s always little things you find when you read as a group.

(00:20:42):
Another great way that community can can help you focus on reading a book.

(00:20:46):
These days, sometimes it’s hard to read a book.

(00:20:48):
But refactoring is so important in keeping our code structure malleable and changeable and low risk.

(00:20:53):
And the low risk is important because if we’ve done test-driven development,

(00:20:57):
we know we have great test coverage,

(00:21:00):
which means we can make changes to code.

(00:21:02):
And if all the tests continue to pass, we know everything is good.

(00:21:06):
If you don’t have all those tests, then it’s a little bit more risky.

(00:21:09):
So you get all this benefit.

(00:21:12):
And I almost never spend any time in the debugger.

(00:21:14):
I don’t spend… Anytime I spend in the debugger, it’s usually debugging through the framework.

(00:21:19):
What is it doing in this situation?

(00:21:20):
What’s going on?

(00:21:21):
Why am I getting this weird value in from the framework?

(00:21:24):
But I almost never sit in a debugger for my own code.

(00:21:27):
And that’s something that I think developers don’t realize is troubleshooting problems becomes trivial.

(00:21:33):
If you’ve got tests and one test fails, you know exactly what went wrong.

(00:21:36):
And so…

(00:21:38):
It might seem like it’s a little bit slower,

(00:21:39):
but because you never then spend time,

(00:21:42):
I used to spend hours and hours and hours.

(00:21:43):
And I used to be a top-notch debugger and knew all the tools in really great depth.

(00:21:48):
And now I just don’t because I just do TDD for most of my work.

(00:21:52):
And so I save that time and frustration.

(00:21:54):
And it’s just a much smoother way to go when doing test-driven development.

(00:21:59):
I can see how, as you describe it, the quality would be superior.

(00:22:04):
My question is,

(00:22:06):
talking to developers about this,

(00:22:08):
if they haven’t learned this process,

(00:22:11):
what’s their reaction in terms of,

(00:22:13):
if I have to write an application and tests,

(00:22:16):
if I write the application first and I do the tests after,

(00:22:19):
that whole process,

(00:22:20):
presumably you’re going to spend a little bit more time debugging your application

(00:22:24):
and then you’re going to write your test afterwards,

(00:22:26):
as opposed to

(00:22:27):
You know how you describe it, where you do the tests or at least the thinking for the tests up front.

(00:22:32):
Right.

(00:22:32):
So do you have any data on the total time spent on average from these two methods

(00:22:39):
on how much time a person would spend?

(00:22:42):
So there’s no good research because a lot of the research.

(00:22:44):
So one of the things I am a researchaholic.

(00:22:48):
When I was in college,

(00:22:49):
I used to spend all my time in the computer science department’s journal and library.

(00:22:53):
And so all the ACM and IEEE journals.

(00:22:56):
So I’m a big fan of research.

(00:22:59):
The research in this area is not great because it’s really hard.

(00:23:02):
So when I teach test-driven development,

(00:23:05):
There’s sort of,

(00:23:06):
you know,

(00:23:06):
and this is sort of a general teaching training thing is I can give you the

(00:23:10):
knowledge that this thing exists.

(00:23:11):
I can demonstrate how it works.

(00:23:13):
We can do some examples together,

(00:23:15):
but until you really do it and experience it as someone who’s not just a beginner,

(00:23:20):
it often first,

(00:23:22):
I mean,

(00:23:22):
like learning any new thing,

(00:23:25):
especially if you are used to doing it a certain way.

(00:23:28):
And this is why I find juniors easier to train than people who’ve been around for a while is, you

(00:23:33):
If we are experts in the way we’re doing things, it’s very hard to shift.

(00:23:37):
And so, you know, you can’t just say, okay, I took a one day class or two day class with Ted.

(00:23:43):
That’s why I try to do a lot of mob program, ensemble programming, where

(00:23:48):
it’s three or four or five of us in a Zoom call or in the same room.

(00:23:53):
And we’re just doing the process over and over and over and over and over again.

(00:23:57):
And I’m there to basically say, no, we want to do this.

(00:24:00):
Or how about we do this?

(00:24:01):
Or let’s do it this way.

(00:24:02):
Or no, that’s too much code.

(00:24:03):
Or no, that test didn’t.

(00:24:04):
And all this kind of constant feedback

(00:24:07):
to the practice that they’re doing.

(00:24:09):
And it’s not until you do that for many, many hours, right?

(00:24:12):
Like how do we get good at things is we perform,

(00:24:15):
we first know what the right way to do it is,

(00:24:18):
or at least we’re shown the right way.

(00:24:20):
Then we do it and we get corrected feedback because without feedback, it’s very difficult to learn.

(00:24:25):
You may learn the wrong thing is my biggest concern.

(00:24:29):
And so having that constant do it, right?

(00:24:31):
You see it,

(00:24:32):
you do it,

(00:24:33):
you get feedback and you continue to do it and get feedback and continue to do it

(00:24:36):
and get feedback.

(00:24:37):
then you can finally do it.

(00:24:39):
And so the problem with the research is they often take,

(00:24:42):
like most research would take undergrad students or grad students who are not

(00:24:45):
professional developers,

(00:24:47):
maybe tell them how to do test-driven development,

(00:24:49):
and maybe they’re actually wrong in how they describe test-driven development.

(00:24:52):
So I’ve read several papers where they’re just wrong on what TDD actually is,

(00:24:57):
like the steps are wrong,

(00:24:58):
or the understanding of the nuance is wrong.

(00:25:01):
So there’s not a lot of great data.

(00:25:03):
All I can do is provide lots of anecdotal evidence that I’ve developed small and large applications.

(00:25:09):
And when we do TDD,

(00:25:11):
the quality,

(00:25:12):
not just of there aren’t any bugs,

(00:25:14):
but also the understandability and the ability to change the code is much higher.

(00:25:18):
And when people experience it, rarely do they go back.

(00:25:21):
Rarely do they say,

(00:25:22):
I tried TDD in earnest,

(00:25:24):
did it professionally for months,

(00:25:26):
if not years,

(00:25:27):
and then I decided I didn’t like it anymore.

(00:25:29):
There’s always some, but far and away, most is I would never go back because why would I?

(00:25:36):
It works so well.

(00:25:38):
What I love about it is you get like these quick dopamine hits, right?

(00:25:42):
You write a test, it fails, you write a little bit of code and it passes.

(00:25:46):
And that’s like in five minutes, less than five minutes often.

(00:25:50):
Every five minutes, you get a dopamine hit of a test passing.

(00:25:53):
How awesome is that?

(00:25:55):
And so, if nothing else, that good feeling to me is worth it.

(00:25:59):
That’s awesome.

(00:25:59):
That’s awesome.

(00:26:01):
So, this methodology is not really common in computer science schools or in programming classes?

(00:26:08):
Yeah.

(00:26:08):
So, I mean, I have a big beef against universities and how they teach this stuff because they’re…

(00:26:15):
It’s gotten better, but it’s still mostly about data structures, algorithms, performance.

(00:26:20):
And not that those aren’t important, but even writing unit tests.

(00:26:25):
was never probably more prevalent in universities and colleges today.

(00:26:30):
But it used to never be taught because there’s always a disconnect.

(00:26:36):
And I think a lot of it is computer science often seems like we’re teaching this

(00:26:42):
stuff to generate more computer scientists who are going to be professors.

(00:26:46):
And I believe that computer science and software development are two different things.

(00:26:51):
There’s certainly overlap.

(00:26:53):
What I often see is an overemphasis on performance.

(00:26:57):
Most of the time, performance is not a problem in your code.

(00:27:00):
Yet I’ll do certain things and I’ll always get a question, won’t that affect performance?

(00:27:03):
It’s like, for example, make methods small.

(00:27:05):
I like generally small methods.

(00:27:07):
It turns out in Java,

(00:27:08):
if you have small methods,

(00:27:09):
the JVM can do magic and inline and you get better performance.

(00:27:13):
So our intuition about performance 20,

(00:27:16):
25 years ago,

(00:27:17):
I used to fully understand how a microprocessor would execute stuff.

(00:27:20):
These days with a complex and multi-chips and pipeline, who the heck knows?

(00:27:24):
And you basically just have to profile it.

(00:27:26):
In some, for example, like bootcamps, they might do testing.

(00:27:30):
I don’t know of any,

(00:27:31):
and there are probably some,

(00:27:32):
but I don’t know offhand of any university that does test-driven development from scratch.

(00:27:38):
And I,

(00:27:38):
having taught people who are new to Java how to do Java,

(00:27:42):
starting with a test is actually also a great way to learn.

(00:27:46):
There’s really interesting parallels between test-driven development and how people learn.

(00:27:49):
You start with…

(00:27:51):
What do I know?

(00:27:51):
What do I need to do?

(00:27:53):
And I don’t know how to write the code yet, right?

(00:27:55):
So when you’re starting out,

(00:27:56):
you may not even know how to write the code,

(00:27:57):
but you can figure out maybe how to write the test.

(00:27:59):
And then you can,

(00:28:00):
it’s sort of this freedom of,

(00:28:01):
let me try five different things to see which makes the test pass.

(00:28:05):
And then you immediately know that you’ve gotten the right answer.

(00:28:07):
It may be ugly code.

(00:28:08):
It may be overly complex code, but it gets the test to pass and solves the problem.

(00:28:13):
So I’ve done courses where I’ve taught Java with this test driven model,

(00:28:19):
and it works really well because you learn just enough of what you I’m a big fan of

(00:28:24):
sort of just in time learning.

(00:28:25):
I remember the first Java class I taught is like,

(00:28:29):
literally,

(00:28:29):
let’s talk about all the different data types,

(00:28:31):
byte and shorten.

(00:28:32):
and int and long and like i look back and like how dumb was i in doing that that’s

(00:28:37):
not the way we learned here let me just throw a whole bunch of facts at you uh much

(00:28:41):
more in favor of like let’s create something and as we need something we will learn

(00:28:45):
that something i need to write some files okay hey let’s look at file i i need to

(00:28:49):
do some communication over the network all right let’s look at the the http

(00:28:53):
libraries

(00:28:54):
And you bring that in a very as needed just in time, as opposed to here’s all the decision structures.

(00:29:00):
Let’s learn all of those, even though you’ll use probably like three.

(00:29:04):
Yeah,

(00:29:05):
this is reminding me,

(00:29:06):
listening to this,

(00:29:07):
it’s reminding,

(00:29:08):
well,

(00:29:08):
it’s just kind of,

(00:29:09):
I’m trying to figure out how to use the concepts that you’re describing just in my

(00:29:13):
life to learn anything,

(00:29:14):
basically.

(00:29:15):
Because I’m really interested in learning and overcoming learning obstacles, difficulties.

(00:29:21):
I struggled through school when I was a kid and had all kinds of problems.

(00:29:25):
And so, a lot of the stuff that I read now about learning, I wish I knew when I was

(00:29:31):
Yeah, same here.

(00:29:33):
Things like active recall,

(00:29:35):
spaced repetition,

(00:29:36):
things like this,

(00:29:37):
you know,

(00:29:38):
that seem so simple in terms of when you read about it and you start practicing it.

(00:29:43):
Some of the research goes back 50, 60, 80 years, you know.

(00:29:47):
I didn’t learn any of this stuff.

(00:29:49):
And so I also find that developers are in general interested in learning because

(00:29:53):
they have to learn so much.

(00:29:55):
And so they have a keen sense of being efficient in terms of using a methodology to

(00:30:01):
actually learn whatever the topic is.

(00:30:02):
So talk a little bit about your actual training.

(00:30:05):
I mean,

(00:30:06):
you’re training people to use technology,

(00:30:09):
but you’re also implementing some sort of a training methodology as well.

(00:30:12):
So talk a little bit about that.

(00:30:14):
Yeah,

(00:30:14):
I mean,

(00:30:14):
so like I was saying,

(00:30:15):
it’s like when I first started training,

(00:30:16):
I was just like creating the materials and so on.

(00:30:18):
It was first of all, there were no books.

(00:30:20):
I was using the Java language specification,

(00:30:23):
which I read and the Java virtual machine inspection,

(00:30:26):
which I can’t say understood all of it,

(00:30:28):
but I’ve certainly like at least skimmed and read parts of it.

(00:30:30):
So I understand deeply about it and use that as sort of some of the material.

(00:30:36):
But like how I introduced it and throwing lots of facts at people and

(00:30:40):
these huge we use transparencies so it shows you how old this stuff was uh and just

(00:30:48):
transparencies and pages and new slides so for those who’ve never seen transparency

(00:30:51):
it’s basically letter size clear thing that you put on a projector a light source

(00:30:56):
that would project it onto a screen

(00:30:58):
So not very editable.

(00:31:00):
And it would just be filled with just bullet points and facts.

(00:31:03):
And one of the things that is fundamental about how we learn is prior knowledge.

(00:31:07):
If I give you a paragraph that talks about baseball and you know nothing about baseball,

(00:31:13):
you will not be able to comprehend it.

(00:31:15):
You won’t be able to understand it because it’s referencing all basically what is dragon.

(00:31:19):
What’s a strike?

(00:31:19):
What’s a ball?

(00:31:20):
What’s an infield fly rule, which I didn’t learn until I was a coach.

(00:31:24):
And so prior knowledge is really important.

(00:31:27):
Because knowledge is building and connecting.

(00:31:30):
It’s building and connecting on things you already have.

(00:31:32):
The hard part is you had a connection in your head that’s incorrect.

(00:31:35):
And so now you got to unconnect it and connect it to something else.

(00:31:38):
And so that can be a little bit harder.

(00:31:40):
These days, I think about…

(00:31:42):
Working on real code, because that’s what we do.

(00:31:45):
We read code mostly.

(00:31:47):
And so how do we read code is really important.

(00:31:50):
So when I when I do training, I do a lot of let’s look at this code and talk about it.

(00:31:55):
Why is this code easy to read?

(00:31:57):
Why is it not easy to read?

(00:31:59):
Understand what might we change to do that?

(00:32:02):
And then they will they will do exercises and do that.

(00:32:05):
that’s not my preference like i might as i was saying before it’s like my

(00:32:08):
preference is we will get a little bit of introduction then we’re going to go right

(00:32:12):
in and we’re just going to be coding and as we’re coding you’re at the keyboard and

(00:32:16):
and the rest of us are watching and there’s one person dedicated to what’s called

(00:32:20):
navigating saying here’s what we’re going to do and then you rotate these positions

(00:32:24):
and so you get everyone gets a hand on a keyboard and everyone gets a chance to to

(00:32:27):
sort of navigate and direct

(00:32:30):
And then I’m there basically telling us,

(00:32:32):
in a sense,

(00:32:33):
sometimes wearing like a customer hat,

(00:32:34):
okay,

(00:32:34):
we’re doing the game of blackjack.

(00:32:37):
And in some cases, I might have to teach them what that is, but it’s a game, card game.

(00:32:40):
And your goal is to get to 21 without going over.

(00:32:43):
And there are a bunch of really interesting rules that make it an interesting code base to work in.

(00:32:49):
And then we just do it.

(00:32:50):
And I have these exercises sequenced in a way that builds and grows that knowledge.

(00:32:55):
But also,

(00:32:55):
so you mentioned sort of spaced repetitions like,

(00:32:58):
hey,

(00:32:59):
remember that thing we learned back here?

(00:33:00):
We’re going to use it now.

(00:33:02):
And then we’ll use it again in a bit.

(00:33:04):
And the first and second time we’re exposed to those concepts, we may start to connect it.

(00:33:09):
And as we use it more, it strengthens those connections.

(00:33:12):
And so really, I put a lot of thought into it.

(00:33:15):
And there’s so many things I’d like to do,

(00:33:16):
but it’s just like,

(00:33:17):
it’s going to be hard to do,

(00:33:19):
given the limitations of how many people are in a class and things like that.

(00:33:24):
But when I left to go independent again and be a trainer,

(00:33:27):
it’s like,

(00:33:27):
I need to really look at and figure out what works in terms of training.

(00:33:32):
And so I’ve read a lot of books.

(00:33:34):
And then from all that learning,

(00:33:35):
put together a talk that I’ve given at several conferences on how people learn and

(00:33:39):
why it’s important.

(00:33:40):
Some of it is here’s spaced learning and interleaving and the forgetting curve and

(00:33:45):
all these kinds of things.

(00:33:46):
And some of it’s also like myths about learning styles.

(00:33:49):
Like, no, there is no auditory or visual learners.

(00:33:52):
We are all visual learners, assuming we don’t have any difficulties in actually seeing.

(00:33:57):
accessibility that there’s some stuff there,

(00:33:59):
which is something that it’s like,

(00:34:02):
I’m not going to teach you guitar just by looking at it.

(00:34:04):
That’s useful, but you’re also going to have to hear it because you don’t hear it.

(00:34:07):
And so,

(00:34:08):
so this idea of I’m going to teach you how to code in Java by dancing,

(00:34:11):
like all these things are myths.

(00:34:12):
So there’s still a bunch of myths out there about how people learn.

(00:34:15):
And so part of my talk is like, no, this is wrong.

(00:34:18):
This is not right.

(00:34:19):
Or the researchers looked like this was going to work and it turns out to not work so well.

(00:34:24):
And so you have to, you have to be careful.

(00:34:26):
And so I think I wish I had known some of these things about how to learn and how to study.

(00:34:31):
Because one thing that the research says over and over again is we are really poor

(00:34:35):
judges of our own learning.

(00:34:36):
Unless we have some objective thing like a test or like somebody doing something

(00:34:40):
that shows it,

(00:34:41):
we think we’ve learned.

(00:34:43):
But until we actually try to apply it or try to recall it, we honestly have no idea.

(00:34:47):
And we often think that stuff that’s easy means we learn.

(00:34:50):
But it’s actually the stuff that’s difficult,

(00:34:52):
but you still succeed at,

(00:34:53):
which is where the learning really is.

(00:34:55):
I wish I knew these concepts when I was younger.

(00:34:59):
It would have saved, I don’t know, a couple of decades of pain and anguish, you know?

(00:35:05):
Absolutely.

(00:35:05):
And it’s almost like, you know, this concept of deliberate practice.

(00:35:09):
You mentioned this in a couple of your talks.

(00:35:11):
And I want you, after we’re done, send me a link to your presentation on learning.

(00:35:14):
I want to go look at that for sure.

(00:35:16):
Here I am listening to you talk about tests and you’re talking about deliberate practice.

(00:35:21):
I mean, so talk a little bit about that.

(00:35:23):
I mean, is it…

(00:35:25):
Is that something you do on a stream or is it in a specific training session?

(00:35:29):
Yeah, I won’t do it on stream because deliberate practice benefits the person who’s doing it.

(00:35:34):
And I already know it.

(00:35:34):
Although there actually are times I might say, hey, I really need to learn this thing.

(00:35:39):
So IntelliJ IDEA is my favorite tool.

(00:35:42):
It has a lot of functionality that most people do not know, including me.

(00:35:45):
And there’s an awesome refactoring move method.

(00:35:48):
It’s not easy to understand what it does.

(00:35:51):
And the only way to understand what it does is to do it.

(00:35:54):
And then undo it and then do it a different way and then undo that.

(00:35:56):
And you’re spending time trying it out and trying to get a sense of what is it

(00:36:01):
going to do and when can I use it?

(00:36:03):
So I’ll sometimes do that.

(00:36:04):
And so that’s deliberate practice.

(00:36:07):
It looks like deliberate practice, but it’s really not.

(00:36:08):
That’s more sort of discovery.

(00:36:10):
And there’s this sort of,

(00:36:11):
I don’t know about competition,

(00:36:12):
but tension between discovery and here’s what you need to learn.

(00:36:16):
I’m going to tell you how to learn it and you’re going to do it.

(00:36:18):
What’s sometimes called direct instruction.

(00:36:21):
And discovery learning is great if you have no other resources and you’ve got to

(00:36:24):
kind of figure it out yourself,

(00:36:26):
but it’s not efficient.

(00:36:27):
And again, you may learn the wrong thing.

(00:36:29):
You may learn like I did this and this and this and it worked,

(00:36:32):
but it turns out,

(00:36:33):
oh,

(00:36:33):
you didn’t need those extra three steps.

(00:36:35):
You just did it and it actually kind of did nothing.

(00:36:38):
So deliberate practice is sort of a little bit of a combination of both depending on what you’re doing.

(00:36:43):
Sometimes it’s,

(00:36:44):
I want to practice doing this kind of refactoring,

(00:36:46):
but it’s already planned out what I’m going to do.

(00:36:49):
And the really important thing is having some kind of feedback.

(00:36:53):
So a lot of times in the research, you know, they talk about how musicians learn.

(00:36:57):
Well, the feedback they get is often because they can hear themselves.

(00:37:00):
And if they’re good enough,

(00:37:01):
they can say,

(00:37:02):
I missed that note or I flubbed that thing or I hit the wrong note or my timing was

(00:37:06):
slightly off.

(00:37:07):
If they’re playing along with a metronome, I learned I play guitar not so great.

(00:37:12):
And I remember playing against the metronome.

(00:37:14):
It’s like, wow, this is really hard.

(00:37:15):
It’s like when they said slow it down, it’s like, oh, right.

(00:37:17):
So there’s that aspect of it.

(00:37:19):
You slow things down.

(00:37:20):
You go slower, more deliberate because

(00:37:24):
I don’t know about other instruments,

(00:37:25):
but on guitar,

(00:37:25):
it’s very easy to like go really fast and sort of cover over the mistakes.

(00:37:29):
But when you go slow, it really shows you whether you know it well or not.

(00:37:33):
And that idea of you’re deliberately practicing and you’re focusing on one thing.

(00:37:38):
So in guitar,

(00:37:39):
it might be I’m focusing on the pentatonic blue scale and on these strings.

(00:37:43):
And I’m going to go really slowly and then I’ll speed up.

(00:37:46):
In coding, it might be I want to take this.

(00:37:49):
And so there’s a lot of example projects out there, what are called katas.

(00:37:53):
So gilded rows and expense report, all these kinds of little projects.

(00:37:57):
And you practice on them and say, I’m going to change this so there’s no if statements left.

(00:38:02):
No if statements?

(00:38:03):
How can I write code without if statements?

(00:38:04):
Well, there’s always a way.

(00:38:05):
It may not be great, but what it does is it forces you to now the more you do it.

(00:38:10):
And then the idea,

(00:38:12):
the sort of the benefit or the outcome of the deliberate practice is like,

(00:38:15):
well,

(00:38:15):
I remember this case where I didn’t have to use an if statement.

(00:38:17):
And I like that.

(00:38:18):
That actually worked out really well in this case.

(00:38:20):
Maybe I’ll do it because you’ve done it so often and it starts becoming part of you

(00:38:25):
where it’s almost automatic.

(00:38:27):
And that’s kind of what we want is we want you to learn the thing, learn it correctly.

(00:38:31):
So having some way of getting feedback,

(00:38:33):
which is why I do this in a coaching teaching environment is I’m providing that feedback.

(00:38:37):
to let them know that they’re on the right track.

(00:38:39):
Because again,

(00:38:40):
if you could discover it and try it out and do it,

(00:38:43):
and you may get there,

(00:38:43):
but how do you know it’s good or better than what you were doing before,

(00:38:47):
unless you have an expert or someone who is a level above you can say,

(00:38:51):
this is good,

(00:38:52):
or this needs to be improved in this way.

(00:38:55):
So it’s having,

(00:38:56):
you know,

(00:38:57):
you’re not trying to figure out 10 different things at once,

(00:38:59):
you’re trying to focus on a single thing and you have some kind of goal and some

(00:39:03):
way of getting feedback.

(00:39:05):
And sometimes it is playing around.

(00:39:07):
It’s like, hey, let’s try this different way of doing things.

(00:39:10):
But to me,

(00:39:11):
the feedback from someone who is at least somewhat of an expert in that area is key

(00:39:15):
because I see people do things.

(00:39:17):
It’s like, yes, that works, but that’s not the most effective way to do it.

(00:39:20):
And we are in software.

(00:39:22):
All we’re doing is learning, but it’s not always effective.

(00:39:25):
It just happens to work.

(00:39:26):
And then somebody comes along and says, oh, there’s this better way of doing it.

(00:39:29):
And it’s like, oh, OK, I didn’t know.

(00:39:32):
Sounds a lot like when I was in school for my master’s,

(00:39:35):
I was doing technical writing and science and science writing.

(00:39:39):
And so I took a couple of linguistics classes and we had to basically take texts

(00:39:43):
that had already already been published and rewrite it.

(00:39:47):
Okay.

(00:39:49):
To get rid of all the nominalizations and the agent lists.

(00:39:52):
I mean, so you want to basically have active verbs and so you have agents performing actions.

(00:39:57):
So you intellectually can follow it as an image in your brain.

(00:40:02):
If you have sentence after sentence after sentence after sentence with no action,

(00:40:08):
every verb is nominalized.

(00:40:10):
Nothing happens.

(00:40:12):
Nothing occurs.

(00:40:13):
Nothing happens through time.

(00:40:14):
And it’s very, very difficult to…

(00:40:17):
understand.

(00:40:18):
And you feel like an idiot reading it.

(00:40:20):
And when you go through these exercises,

(00:40:22):
these are linguistic exercises to take this text so it’s more efficient.

(00:40:27):
So then all of a sudden it opens up, oh, I’m not an idiot.

(00:40:30):
I can read this.

(00:40:31):
I understand it.

(00:40:31):
I have to rewrite it.

(00:40:33):
Well, when I talk to developers, this is what they do with code.

(00:40:35):
I mean, the code, yes, it might work, but is it understandable?

(00:40:40):
Is it scalable?

(00:40:42):
Can other people read it?

(00:40:43):
It sounds a lot like that.

(00:40:44):
And it is.

(00:40:45):
And in code, there’s an infinite way of doing things.

(00:40:50):
And our constraint,

(00:40:51):
or at least what should be our constraint,

(00:40:53):
is the understandability and readability and changeability of the code.

(00:40:57):
And there’s also no one right way to do it.

(00:41:00):
And so you can sometimes get into some disagreements about the right way to do it.

(00:41:04):
But I think,

(00:41:05):
you know,

(00:41:05):
that kind of exercise of reading something and then changing it so that it’s better

(00:41:11):
in some way and possibly trying three different ways to make it better.

(00:41:15):
One of the things that I learned through my research is we as humans are great at comparative judgment.

(00:41:22):
Is A better than B?

(00:41:23):
Not is, you know, it’s just like trying to grade something.

(00:41:26):
It’s like this thing I’m going to give you with nothing else.

(00:41:28):
Is this, you know, please score it, please grade it.

(00:41:30):
And you have to give it a number.

(00:41:31):
You might give it a number, but it’s much easier to say, is this one better than this one?

(00:41:36):
And maybe you measure it in multiple different sort of axes, but is this one better than this one?

(00:41:41):
And there’s this technique of you basically,

(00:41:43):
if you have a lot of those things,

(00:41:44):
you keep comparing things and you will then have a ranked order of which one is the

(00:41:48):
best and which one is the worst.

(00:41:49):
Right.

(00:41:50):
And this is something that,

(00:41:52):
you know,

(00:41:52):
with the refactoring techniques,

(00:41:54):
it’s like,

(00:41:54):
we’re not trying to make it perfect.

(00:41:55):
We’re just trying to make it a little bit better.

(00:41:57):
And so do we know what better looks like?

(00:42:00):
And sometimes we don’t because sometimes those,

(00:42:02):
what is better doesn’t come out for years,

(00:42:05):
if not maybe a decade later.

(00:42:06):
It’s not always an immediate thing because you can’t predict how something’s going to change.

(00:42:11):
I stopped doing that because I was bad at it.

(00:42:14):
Predicting the future, I’m not good at.

(00:42:16):
Yeah, certainly.

(00:42:18):
So there’s a lot of commonalities with these kinds of exercise and case study like

(00:42:24):
things that we don’t do enough of because we’re so concerned about getting things done.

(00:42:28):
And this is where I like to do experiments.

(00:42:31):
Let’s try this out.

(00:42:33):
It might be an experiment in terms of a process like, hey, let’s try TDD for a few weeks.

(00:42:37):
Or it might be, let’s try pair programming or mob programming for a few weeks.

(00:42:41):
Or it might be,

(00:42:42):
let’s try,

(00:42:43):
maybe not an experiment for the real code,

(00:42:45):
although you might do it’s like,

(00:42:47):
let’s try no if statements in just this little small area and see what that looks like.

(00:42:52):
And these experiments are really valuable because it gives us a little bit of

(00:42:57):
freedom to try something new.

(00:42:59):
And at worst, we spent a little bit of time on it and we’ve learned something.

(00:43:02):
Maybe this is not the right way to do it,

(00:43:04):
or maybe it is a good way that we should do it,

(00:43:06):
but in a very defined way.

(00:43:08):
And so good experiments have sort of one variable, right?

(00:43:11):
One thing that you’re changing.

(00:43:13):
And that should sound familiar, right?

(00:43:14):
It’s like you want to focus on just what is the difference if we make this one change?

(00:43:19):
And a good experiment is you register the outcome you expect,

(00:43:22):
or at least,

(00:43:23):
well,

(00:43:23):
we expect to maybe it’s just be happier.

(00:43:25):
And maybe it’s not like a specific code thing,

(00:43:27):
or it’s a specific,

(00:43:28):
we expect this to be easier to maintain or easier to understand.

(00:43:32):
And so we run that experiment and have a defined period, and then we evaluate it.

(00:43:36):
Well, what did we think?

(00:43:36):
And what was the outcome?

(00:43:38):
and do we want to continue and is this did we prove our hypothesis or or disprove

(00:43:43):
and need to find something else and what i find funny is like we talk about

(00:43:47):
computer science and we forget that that’s the science part you say here’s my

(00:43:51):
hypothesis here’s how i’m going to do it to see if that hypothesis is true and then

(00:43:55):
you actually do it and a lot of experiments fail in terms of failing to prove the

(00:43:59):
hypothesis and we feel like that’s a waste

(00:44:02):
Yeah, it’s just part of it.

(00:44:04):
It’s just part of it.

(00:44:05):
How do you learn unless you try things and you still learn something?

(00:44:10):
In fact, it’s your job to disprove your hypothesis if it works.

(00:44:13):
Okay, so this worked.

(00:44:14):
Oh, yes, it’s great.

(00:44:15):
It worked.

(00:44:15):
Okay, now go out there and try and disprove it.

(00:44:18):
Yeah.

(00:44:19):
And to me, this goes a lot back to TDD.

(00:44:21):
It’s like you’re writing the experiment,

(00:44:23):
the test,

(00:44:24):
and then your task is,

(00:44:26):
I mean,

(00:44:26):
it’s not quite because you’re hoping it doesn’t fail,

(00:44:28):
although sometimes it does.

(00:44:30):
And then,

(00:44:30):
you know,

(00:44:31):
so it’s just very much you’re putting the hypothesis and experiment first before

(00:44:35):
you write the code.

(00:44:36):
Right.

(00:44:36):
Interesting.

(00:44:37):
And so because,

(00:44:38):
again,

(00:44:38):
it’s like a lot of that hard thinking comes up front rather than sort of on the fly

(00:44:43):
where you may not be thinking as deeply.

(00:44:45):
Very cool.

(00:44:46):
Very cool.

(00:44:47):
all right let’s talk a little bit about java specifically you’ve been involved with

(00:44:51):
java for a while um as long as you can be or at least as someone who who wasn’t

(00:44:58):
working at sun could be yeah because i i was doing i sort of grew up with basic on

(00:45:03):
the pp11 and then on the apple 2 plus and then on trs80 and and

(00:45:10):
Then on the PC with QuickBasic, and it was very much into sort of that world and Visual Basic.

(00:45:16):
Visual Basic was awesome.

(00:45:19):
I had a company that was selling version control software for Visual Basic in the early 90s.

(00:45:23):
But I hit a limit.

(00:45:24):
I was growing as a developer and my understanding of things like object-oriented

(00:45:29):
programming was like,

(00:45:30):
because Visual Basic is an object-oriented,

(00:45:33):
it’s object-based.

(00:45:35):
And there’s stuff I wanted to do where it’s like you had to do it in C++.

(00:45:39):
i took a couple of courses and a training course in c plus plus and i could never

(00:45:43):
get the pointer stuff thank you thank you thank you i i i okay stop right there i

(00:45:50):
took a class in c and you know i did really i did okay i did okay with c and then c

(00:45:56):
plus plus and i said oh my god this is a different universe this is horrible what

(00:46:00):
is this crap

(00:46:01):
Yeah, I did see in school too.

(00:46:03):
And I wrote memory allocation stuff in school.

(00:46:07):
And there was something about C++ where it was just like, I must be really dumb because I can’t do this.

(00:46:14):
And thank God that Java came out at that point.

(00:46:18):
And a friend of mine who was actually doing C++ training,

(00:46:21):
I actually formed the training company with him and said,

(00:46:24):
hey,

(00:46:24):
there’s this Java thing and do you want to train?

(00:46:26):
But I’d already like…

(00:46:28):
My first sale,

(00:46:29):
my first professional sale of a Java application was a Java applet.

(00:46:33):
And this is terrible,

(00:46:34):
but it was the typical have an ad scroll across the top of the screen as an applet

(00:46:38):
embedded in the browser.

(00:46:39):
And probably people listening is like, what the heck’s an applet?

(00:46:42):
But that was like what we did back then.

(00:46:45):
And so Java had…

(00:46:46):
What I wanted,

(00:46:47):
which was true object-oriented features,

(00:46:50):
I didn’t have to deal with pointers and dereferencing and memory allocation.

(00:46:54):
It’s like garbage collection.

(00:46:55):
It may not have been super fast at that point,

(00:46:58):
but it had everything I needed and did not have the stuff that I could not deal with.

(00:47:03):
And so it was the perfect time for Java for me.

(00:47:05):
And I had an opportunity to…

(00:47:08):
work on the 1.0 alpha, which was only available on Sun machines.

(00:47:12):
I knew somebody who had it.

(00:47:13):
So I got a little bit of time on that.

(00:47:14):
And then finally, the beta came out and was available on Windows machines.

(00:47:17):
And I started playing around with it.

(00:47:20):
And then that’s the point where my friend said, hey, I’ve been doing C++ training.

(00:47:24):
There’s a call for some Java training.

(00:47:26):
Do you want to work on a course together?

(00:47:28):
And I’m like, sure, because one of the best ways to learn is to figure out how to teach it to someone.

(00:47:33):
And I still think people learn something because you put people in an environment

(00:47:37):
and give them somebody like me who is one chapter ahead,

(00:47:40):
as I like to say,

(00:47:41):
in terms of that.

(00:47:42):
And it was really good.

(00:47:43):
And one of the things I love about Java is that it’s grown differently.

(00:47:49):
And I’ve been able to continue to work with it.

(00:47:52):
And the JVM,

(00:47:53):
the virtual machine,

(00:47:54):
is one of the most fantastic,

(00:47:56):
amazing pieces of technology that I can take code that I could have literally wrote

(00:48:01):
25 years ago,

(00:48:02):
run it now,

(00:48:03):
and it will run and run fast.

(00:48:06):
And to me, that’s just amazing.

(00:48:09):
I mean, what stuff happens when it’s running and the stuff that the JVM does behind the scenes

(00:48:16):
I’ve heard engineers describe it as a marvel of engineering.

(00:48:20):
Yeah, it really is.

(00:48:21):
It’s like one of the wonders of the software world.

(00:48:24):
It really is.

(00:48:25):
And early on, so I actually also grew up in New York.

(00:48:28):
I grew up in the Bronx and moved out to the Bay Area because…

(00:48:32):
I kept going to conferences like the Java one conference, like these are my people.

(00:48:37):
It was like going to camp and it’s like, I hated leaving.

(00:48:39):
And it was just,

(00:48:40):
you know,

(00:48:40):
met all these great people and,

(00:48:42):
and learned a lot and talk people’s ears off about different things and,

(00:48:45):
and just loved,

(00:48:47):
loved that,

(00:48:47):
that community.

(00:48:49):
And then I’d fly home to New York where there really was no tech scene,

(00:48:52):
despite calling it Silicon alley that.

(00:48:54):
Yeah.

(00:48:54):
Well, back then that’s a long time ago.

(00:48:56):
So when was your first Java one?

(00:48:58):
It was the first Java one.

(00:49:00):
Oh my goodness.

(00:49:00):
Wow.

(00:49:01):
So you will predate me.

(00:49:02):
Okay.

(00:49:02):
Yeah.

(00:49:04):
Mine was in 2000.

(00:49:05):
Yeah.

(00:49:07):
I remember, you know, I still have my stuff Duke that I got and I still have the Java ring.

(00:49:11):
Like back when Java was embedded in devices,

(00:49:13):
I got the Java ring and I got the Java card stuff and all that really interesting

(00:49:18):
technology that didn’t quite go anywhere,

(00:49:20):
but was still,

(00:49:21):
still really,

(00:49:21):
really interesting and fun and just loved it.

(00:49:24):
And it’s like, wow.

(00:49:25):
It’s my training company.

(00:49:26):
And let me move out to the Bay Area and start our West Coast office for a training company.

(00:49:33):
That didn’t last long because I ended up still having to fly and travel elsewhere,

(00:49:37):
which was kind of ironic and just got tired of that and said,

(00:49:40):
maybe I’ll find a job that I don’t have to travel so much.

(00:49:43):
So a lot has changed since the years that you’re describing there, the early years.

(00:49:47):
Java has evolved tremendously.

(00:49:50):
The technology has evolved.

(00:49:52):
The community has evolved.

(00:49:54):
The entire ecosystem of technology has evolved.

(00:49:57):
The world has changed, right?

(00:50:00):
It’s been 30 years.

(00:50:01):
So how for you in your job,

(00:50:04):
how for you in your job when you use Java,

(00:50:06):
how has Java evolved over the years to benefit you?

(00:50:10):
So it’s really interesting because there’s this connection or I’m not sure what to

(00:50:16):
call it,

(00:50:17):
but like the tooling,

(00:50:18):
right?

(00:50:18):
So when we adopt language, whatever it is, we’re not just adopting the language itself.

(00:50:23):
There’s the ecosystem of libraries and frameworks,

(00:50:25):
but there’s also the tools,

(00:50:27):
the editors,

(00:50:28):
the compilers,

(00:50:29):
the whatever other tools we need to use to develop things.

(00:50:32):
And I think this has been wonderful development.

(00:50:35):
I hate to use the word synergy,

(00:50:36):
but there’s this wonderful connection and combination of these things that they

(00:50:40):
support each other.

(00:50:40):
So I’m a big fan of IntelliJ IDEA, but I’ve been using it since it was a little product called Renamer.

(00:50:45):
I used tools like Symantec Cafe and Visual Cafe,

(00:50:49):
and I like all these tools,

(00:50:51):
and I played with them,

(00:50:51):
and Eclipse,

(00:50:52):
of course,

(00:50:53):
and NetBeans.

(00:50:54):
And all these tools, I think, had this really nice positive effect on also shaping how we use it.

(00:51:01):
Yes,

(00:51:02):
I used to,

(00:51:02):
you know,

(00:51:03):
maybe use Notepad++ and a command line compiler and a batch script to compile stuff.

(00:51:08):
But we don’t do that anymore.

(00:51:09):
I hope we don’t do that anymore.

(00:51:10):
I mean, we might do that while we’re learning, maybe.

(00:51:13):
But we’re deeply embedded in our tools and especially in an environment like an IntelliJ IDEA.

(00:51:19):
And so one of the things that’s really interesting is, of course, I’ve had to learn new things.

(00:51:24):
Like when Java 8 came out, I’m like, what the hell is this Lambda thing?

(00:51:26):
What are these streams things?

(00:51:28):
I don’t understand.

(00:51:29):
This is too complicated.

(00:51:30):
Or even worse, actually, when it was when generics came in.

(00:51:33):
Oh, my God.

(00:51:34):
Generics.

(00:51:35):
I remember I was working at Google at the time,

(00:51:37):
and I just have this clear memory of being in someone’s office,

(00:51:42):
and we’re looking at some code,

(00:51:43):
and it’s got generics,

(00:51:44):
and I’m like,

(00:51:45):
I’ll never understand this.

(00:51:46):
Yeah.

(00:51:47):
I’ll never understand.

(00:51:48):
And now, of course, I take it for granted.

(00:51:50):
Although there’s still areas where I’m like,

(00:51:51):
I don’t write libraries that use generics,

(00:51:53):
which has different things.

(00:51:55):
And so it’s really interesting how the community has gotten more sophisticated as

(00:51:59):
the language has gotten more sophisticated.

(00:52:01):
And this back and forth progress has been made.

(00:52:05):
And

(00:52:05):
You know,

(00:52:05):
there are times when I feel like,

(00:52:07):
boy,

(00:52:07):
if only Java went faster,

(00:52:08):
like when,

(00:52:09):
you know,

(00:52:10):
like to get rid of primitives and have everything be an object.

(00:52:13):
But I also was like,

(00:52:13):
well,

(00:52:14):
I’m glad it started out that way because otherwise it wouldn’t have been accepted

(00:52:17):
because speed issues and performance and things like that were why they made those choices.

(00:52:22):
And then the Java 7, Java 8, Java 9 days were pretty dark days for us.

(00:52:26):
And I remember sitting in the Java 1 and Java 9 was announced, like, thank God.

(00:52:32):
And then we’re going to the six-month cadence.

(00:52:34):
And it’s like, oh, my God, that’s going to be so much better.

(00:52:35):
One of the things that I’ve really enjoyed seeing is the thoughtfulness of adding features,

(00:52:41):
but also the,

(00:52:43):
we are making this backwards compatible.

(00:52:45):
It may hurt us in terms of the things we can do going forward, but that’s key.

(00:52:49):
That’s core.

(00:52:50):
And I think that’s certainly been a huge contributor to its success.

(00:52:54):
And I look at languages that started out as derivatives of Java,

(00:52:57):
like C-sharp,

(00:52:58):
way back in the J-sharp and fight phase between Microsoft and whomever.

(00:53:03):
And they made some mistakes.

(00:53:04):
And at least I think they’re mistakes in the language, a little overzealous in adding things.

(00:53:09):
And so do you go slow and steady and you know when you add something that it’s

(00:53:13):
going to be really valuable?

(00:53:14):
Like, you know, recently they withdrew the string interpolation stuff.

(00:53:19):
It’s like, oh, man, we could really use that.

(00:53:21):
But it was for a good reason.

(00:53:22):
And so then we get stuff like virtual threads,

(00:53:26):
which for me is really hilarious because Java 1.0 had the same kind of thing.

(00:53:30):
It didn’t use operating system threads.

(00:53:31):
It uses their own threading model on top of that.

(00:53:34):
And we’re sort of full circle, although it’s very different implementations and very different reasons.

(00:53:39):
And I love that basically Java has been my career.

(00:53:42):
I’ve never used another language.

(00:53:45):
Maybe I’ve used other languages alongside it, like JavaScript and things like that.

(00:53:48):
But I’ve always come back to Java.

(00:53:51):
I did some Golang and some other languages.

(00:53:53):
But Java did what I needed it to do.

(00:53:55):
And I knew it would always be there for me.

(00:53:57):
And I knew I’d always be able to get help and assistance.

(00:54:01):
And something that I think people take for granted these days is the other reason I

(00:54:05):
really was attracted to Java was you could see the source code.

(00:54:08):
That was amazing to me because I was working in the Visual Basic Microsoft world

(00:54:13):
where you never saw any of the underlying code.

(00:54:16):
And all of a sudden, everything’s there.

(00:54:18):
Everything, like all of the, you know, the whole JDK, like you could.

(00:54:21):
And that’s a lot of how I learned Java is from reading that code.

(00:54:25):
I look back and it’s like, oh, that was actually not great code, but, you know, learn stuff from it.

(00:54:30):
And that was new.

(00:54:31):
Like now, you know, open source is everywhere and lots of stuff.

(00:54:34):
But that was that was a breakthrough.

(00:54:37):
And no other language that I was aware of at the time was like that.

(00:54:42):
And it was such a breath of fresh air to be able to see how the thing was made,

(00:54:48):
which was,

(00:54:49):
you know,

(00:54:49):
and continued through time and even got more and more open.

(00:54:53):
And I think that for me has always been like part of my,

(00:54:57):
it was the first thing where I could actually see inside of it,

(00:55:00):
which was great.

(00:55:02):
wow so when you talk to like at conferences and stuff do you tell young developers

(00:55:08):
all this history because you have a wealth of knowledge and i should i should i

(00:55:13):
probably mention it here and there um the reason i say this is i was at java zone

(00:55:18):
in oslo a few months ago and it’s a real i don’t know if you’ve ever been there

(00:55:22):
it’s a really cool conference it’s about 3 000 people so it’s it’s not too big but

(00:55:27):
it’s not small either had a nice size great venue

(00:55:31):
And, you know, I’m a lot older than most of the people around these days.

(00:55:36):
And I just mentioned,

(00:55:37):
you know,

(00:55:38):
I was talking to some people about Java 1,

(00:55:40):
you know,

(00:55:41):
in March next year,

(00:55:43):
asking people,

(00:55:43):
are you going to go?

(00:55:44):
And, oh, yeah, I might go and this and that.

(00:55:46):
Yeah.

(00:55:47):
You know,

(00:55:47):
sort of,

(00:55:48):
you know,

(00:55:48):
they had been to a few Java 1s and I asked them,

(00:55:50):
you know,

(00:55:51):
what was your first Java 1,

(00:55:52):
you know,

(00:55:52):
and they were saying 2009 or 10 or something.

(00:55:55):
They asked me, well, mine was 2000.

(00:55:58):
They’d laugh,

(00:55:59):
you know,

(00:56:00):
because they don’t,

(00:56:01):
because they’re so young,

(00:56:02):
they don’t know the history necessarily,

(00:56:04):
you know.

(00:56:04):
Yeah.

(00:56:05):
And so this gets to the question of learning Java now today as like a 22 year old

(00:56:10):
in college or versus what you did 20 years ago.

(00:56:14):
What’s the difference?

(00:56:16):
30 years ago.

(00:56:17):
What’s the difference?

(00:56:20):
Well, I mean, there’s almost an overwhelming amount of information.

(00:56:24):
So it’s really hard to compare it against like 30 years ago when really all I had

(00:56:27):
was and I printed it out was like maybe an inch thick of the documentation and then

(00:56:32):
just looking at the Java code and look at the hot Java browser code to see how it

(00:56:36):
did stuff.

(00:56:37):
And I still have my hot Java shirt somewhere.

(00:56:39):
And nowadays, there’s almost an overwhelming amount of information.

(00:56:43):
I think in some ways it’s harder because back then there weren’t 10 billion

(00:56:49):
libraries and a million different ways of doing things.

(00:56:52):
I mean, the web was barely there.

(00:56:54):
And so it was much smaller.

(00:56:56):
The language is smaller.

(00:56:57):
The libraries were smaller.

(00:56:58):
And so…

(00:56:59):
it’s so much easier to learn when when you start with something that’s tiny and you

(00:57:03):
grow with it as it grows your you know so so i know a lot only because i’ve been

(00:57:07):
around forever in terms of the the java you know and i wrote stuff in assembly

(00:57:12):
language on an 8086 so so like i have very deep knowledge because i’ve done it for

(00:57:17):
a while and so i think in some ways we’ve built on abstractions and people tend to

(00:57:21):
then learn those abstractions and not learn below it and then get into trouble when

(00:57:25):
things go wrong it’s like what is http right

(00:57:28):
I’ve written HTTP servers and I’ve written HTTP clients and I’ve written the

(00:57:31):
protocol at the lower level.

(00:57:33):
So I really know it.

(00:57:34):
And when I’m teaching this stuff, this is where I have to basically look at prior knowledge.

(00:57:40):
How much do you understand?

(00:57:41):
And then have to teach that a little bit.

(00:57:43):
But there’s a lot more resources.

(00:57:45):
There’s a lot more communities.

(00:57:48):
I was part of the New York City Java users group, Frank Greco and others.

(00:57:53):
And so,

(00:57:54):
again,

(00:57:54):
it’s like there’s that community that if it’s not my community,

(00:57:57):
it’s some other community that you can,

(00:57:59):
I always tell people,

(00:58:00):
find a community.

(00:58:01):
Yeah.

(00:58:02):
Find people and maybe form your own community of like, who else is learning this thing?

(00:58:06):
Work with them because you will go better and faster together,

(00:58:10):
even if you have no experts sort of guiding you,

(00:58:12):
right?

(00:58:13):
So you’re just discovering you will go better and faster by not going alone.

(00:58:18):
And then there’s,

(00:58:18):
you know,

(00:58:19):
so the language is much more sophisticated now than it was almost 30 years ago.

(00:58:23):
Right.

(00:58:23):
We’ve got the generics, although and learning that that that’s not easy.

(00:58:27):
And so like all the things that I learned over the 30 years, they have to learn almost right away.

(00:58:32):
And this is where the.

(00:58:34):
Development environments, I think, are super helpful in a way that maybe people aren’t thinking of.

(00:58:38):
So, for example, I might want to write a Lambda, but I don’t know exactly how it’s going to work.

(00:58:43):
So I’m going to write the old way,

(00:58:44):
the anonymous inner class,

(00:58:46):
which nobody does anymore,

(00:58:47):
and then ask IntelliJ,

(00:58:48):
can you convert this to a Lambda for me?

(00:58:50):
And so I’ll learn, oh, that’s how I should have done it.

(00:58:53):
And when I was first learning streams,

(00:58:54):
having the development environment suggest,

(00:58:56):
and of course now these days with generative AI and LLMs can have even somewhat

(00:59:00):
better suggestions,

(00:59:01):
but the built-in ones of like,

(00:59:03):
I’m going to just write this as a for loop because I’m sure I could write it as a stream,

(00:59:06):
but I can’t figure it out.

(00:59:07):
So I’ll write it as a for loop and then ask the tool to convert it.

(00:59:10):
And that’s another way of learning.

(00:59:12):
And then,

(00:59:13):
of course,

(00:59:13):
there are the specific proposals that are coming into Java about making that first

(00:59:18):
experience better.

(00:59:18):
What the heck is a public static void main string array args and stuff?

(00:59:23):
I don’t know.

(00:59:24):
It’s just gobbledygook, but I know I have to have it in there in order to get my stuff to work.

(00:59:28):
And so sort of easing that sort of on-ramp, I think, will further help people learn.

(00:59:35):
But I think that so the language is larger and makes it harder.

(00:59:38):
But I think there are more resources.

(00:59:39):
And I think there’s a lot better resources because people like me who understand

(00:59:44):
how to teach and how to write tutorials and how to do that,

(00:59:48):
there are more of those available.

(00:59:50):
And so I think and then the community, of course, is much larger.

(00:59:53):
So lots of benefits, even though it’s a lot more to absorb.

(00:59:57):
I think I think we’re in a good place.

(01:00:00):
Yeah,

(01:00:00):
your point on the tools is really interesting to me because I remember in school

(01:00:04):
just sitting behind a Unix workstation with a command prompt and big white screen

(01:00:09):
blinking at me.

(01:00:10):
That was it.

(01:00:11):
That was it.

(01:00:11):
You know, now these these IDEs are gorgeous.

(01:00:14):
You know, I mean, they’re really intuitive and but they are they are they are difficult.

(01:00:19):
They can be difficult to use.

(01:00:21):
So I think, yeah, I mean, I take your point in the sense of there’s so much there.

(01:00:27):
So I think

(01:00:29):
Maybe it’s chicken and egg.

(01:00:30):
I don’t know.

(01:00:31):
But I just love tools.

(01:00:32):
I used to be in the construction business and it’s amazing what a human being can

(01:00:36):
do with a little bit of knowledge and a really good tool.

(01:00:39):
Absolutely.

(01:00:40):
And so whenever I hear engineers like yourself talk about these tools and I see

(01:00:46):
what you guys can do with them,

(01:00:47):
it’s just incredible to me.

(01:00:48):
The leverage of both.

(01:00:50):
The leverage, yeah.

(01:00:52):
I always think of these tools as an exoskeleton.

(01:00:55):
I can now lift a two-ton car, but it’s under my control.

(01:01:01):
I’m the one directing.

(01:01:02):
It’s just I now have this leverage and power that I didn’t have before.

(01:01:07):
I’m a tool developer.

(01:01:08):
The version control system I created way back when was one of the first tools.

(01:01:11):
I think most developers are toolmakers, even if they’re in the small.

(01:01:16):
I think that’s underestimated about how

(01:01:18):
And which is kind of unique.

(01:01:19):
Like if you think about construction, how often does a construction worker create their own tool?

(01:01:23):
Maybe someone is like, I keep doing this thing.

(01:01:26):
Like I keep making a mess when I’m screwing something into a wall.

(01:01:28):
Let me put some tape in a thing that will catch the dust.

(01:01:31):
That’s a little tool, but that’s sort of the, to a certain extent, the exception.

(01:01:35):
Whereas in software,

(01:01:36):
we are often creating our own tools to help us automate and do things better and

(01:01:40):
create that leverage.

(01:01:42):
And I think that is so interesting.

(01:01:43):
Yeah.

(01:01:44):
That’s where the construction analogy breaks down because software changes like the

(01:01:47):
wind compared to construction,

(01:01:51):
which goes back thousands of years.

(01:01:53):
And there’s a certain state there.

(01:01:55):
All right, Ted, it’s 3.30 in the morning and I’m going to split.

(01:02:00):
So tell me, is there anything else we need to talk about here?

(01:02:03):
Did I miss anything?

(01:02:04):
Do you have anything to leave us with?

(01:02:06):
I don’t think we missed anything.

(01:02:08):
I mean, there’s so much more I could talk about, of course.

(01:02:10):
I can lament desktop Java and Swing, which was one of my loves of Java is creating desktop.

(01:02:16):
That was what I did at eBay.

(01:02:17):
We created an internal tool using Java Swing.

(01:02:21):
I’ve written courses on that.

(01:02:22):
I have the shirt from Swing and JFC.

(01:02:26):
Who listening knows what JFC stands for?

(01:02:28):
The Java Foundation classes.

(01:02:29):
And that was a period of just so much creativity.

(01:02:32):
And I feel like we’ve lost some of that with the web.

(01:02:35):
But I would love more people to watch me stream and help me out selfishly.

(01:02:40):
But I think if you’re not going to watch me do it yourself,

(01:02:43):
I think there’s not a lot of people who do what I do.

(01:02:46):
And of course, if you’re working for a company, it might not be possible to do that.

(01:02:50):
But I think the more people who are exposed to what is it really like to develop,

(01:02:53):
even if you’re an expert,

(01:02:54):
that you’re still always making mistakes and still having to puzzle over things,

(01:02:59):
I think…

(01:03:00):
can help people feel better about their situation.

(01:03:02):
Like, why am I always frustrated and puzzling over things?

(01:03:05):
Oh, that’s everybody’s experience.

(01:03:07):
And I think that’s something that’s really important.

(01:03:09):
I think that’s a great final thought because I’ve met so many really advanced

(01:03:13):
engineers with just very smart people who express that exact sentiment.

(01:03:19):
Even though they have lots of years of experience, they got IQs that are off the scale.

(01:03:24):
And in meetings, I can name 20 different people off the top of my head who expressed it just like that.

(01:03:31):
Yeah, it’s just human.

(01:03:32):
That’s it.

(01:03:33):
It’s human.

(01:03:33):
All right, Ted.

(01:03:35):
Well, you’re in the Bay Area.

(01:03:36):
I used to live there.

(01:03:37):
So maybe I’ll get back there.

(01:03:38):
Well, Java 1 is going to be there.

(01:03:40):
I’m two miles away.

(01:03:41):
I run by the Oracle offices every week.

(01:03:46):
Yeah, cool.

(01:03:46):
All right.

(01:03:47):
Well, definitely, hopefully if I get there, I’ll give you a call and have a cup of coffee or something.

(01:03:53):
Until then, actually, have a good new year and we’ll see you in a few months.

(01:03:59):
Yep.

(01:03:59):
Sounds great.

(01:04:00):
Cheers.

(01:04:00):
Look forward to it.