(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.
