(00:00:00):
Hey, everybody.
(00:00:00):
How are you doing?
(00:00:01):
This is Jim Grisanzio from Java Developer Relations,
(00:00:04):
and this is Duke’s Corner,
(00:00:05):
and I’m here with Cay Horstmann,
(00:00:07):
and we are at JavaZone in Oslo.
(00:00:10):
It’s a really cool conference here, which hopefully we’ll get into.
(00:00:14):
And so, Kai, welcome.
(00:00:15):
Welcome to the program.
(00:00:16):
Yeah, hi.
(00:00:17):
So I’m Kai Horstman.
(00:00:18):
I was asked to talk about myself, my favorite subject.
(00:00:22):
So I am the co-author of the core Java book that was published almost 30 years ago.
(00:00:28):
It was probably the first serious book covering Java, and I continue updating it.
(00:00:34):
I just put the 13th edition to rest, and the 14th edition will come soon enough covering Java 25.
(00:00:39):
Cool.
(00:00:40):
So you’re an author, and you’re a teacher, and you’re a hacker.
(00:00:44):
What else are you?
(00:00:45):
Oh, that kind of covers it pretty well.
(00:00:47):
I mean,
(00:00:47):
I was actually working in industry once in a while,
(00:00:50):
so I’ve really done all sorts of things,
(00:00:53):
and most of them involving Java.
(00:00:56):
Excellent.
(00:00:56):
Okay, so I was in your session yesterday.
(00:00:58):
It was a full house, so tell me a little bit about your session yesterday.
(00:01:01):
Yes, so I actually submitted three perfectly good proposals to this conference, which were all rejected.
(00:01:06):
And this one was accepted.
(00:01:08):
And it was a bit of an experiment.
(00:01:10):
So I just noticed myself over the years that I use Java quite a lot for small tasks.
(00:01:16):
And most people, of course, use Java for really big tasks.
(00:01:19):
And when I would talk to other people about what I was doing,
(00:01:21):
they said,
(00:01:21):
oh,
(00:01:21):
I’ve never done anything like that.
(00:01:23):
And so I showed kind of the tips and tricks that I used.
(00:01:27):
Java is also getting much more suitable for that.
(00:01:30):
Some of the recent JEPs make it much more natural to write really small programs.
(00:01:34):
You now have these implicit classes, for example.
(00:01:37):
You can just run Java without ever running Java C,
(00:01:40):
so your directories don’t get cluttered up with class files.
(00:01:44):
And so I was just going to talk about that.
(00:01:45):
The other thing is when I was at J-Crete over the summer,
(00:01:50):
I was somewhat desperate to prepare for this talk.
(00:01:54):
So I said, oh, I’ll just give it like an experimental rundown.
(00:01:58):
And three or four other people said, oh, I want to talk about that too.
(00:02:01):
And so we had a great session where each of us contributed what they were doing.
(00:02:05):
And one of them, Sven Reimers, is working on a…
(00:02:09):
a kind of version of a Jupyter Notebook that he is writing in Java FX.
(00:02:13):
And so then I also got into looking at Jupyter Notebooks, how they work with Java, and talked about that.
(00:02:19):
So there’s definite promise for this to get much better in the future.
(00:02:24):
Interesting.
(00:02:25):
So did you say you were rejected for a couple of talks here?
(00:02:29):
It’s the life of the conference presenter that you propose talks and they get
(00:02:36):
rejected for no good reason.
(00:02:38):
Well, that makes me feel better.
(00:02:40):
That’s really good.
(00:02:41):
I’m just kidding.
(00:02:43):
Okay, so I’m interested to hear a little bit about your experiences in conferences.
(00:02:49):
I was talking to Jose, my colleague, and he says that you like to go to unconferences.
(00:02:53):
You just mentioned jcrete.
(00:02:54):
So what are your experiences with conferences and what are your observations about
(00:02:58):
this particular event here?
(00:02:59):
Yeah.
(00:03:00):
So, first of all, this is not an unconference.
(00:03:01):
This is a very regular conference.
(00:03:03):
But, I mean, it’s always amazing to me.
(00:03:05):
I’ve been, for example, in Bulgaria a few months ago at a conference, and now at this one here.
(00:03:11):
These are big events.
(00:03:12):
I mean, you’d think Java near 30-year-old technology, and it does gather here.
(00:03:17):
I mean, there are thousands of people coming to this conference.
(00:03:19):
We’re sitting here in the exhibit hall right now.
(00:03:22):
There’s a lot of exhibitors, and people are very engaged.
(00:03:27):
And I’ve asked them, why are all these exhibitors here?
(00:03:30):
And they’re actually all here to recruit.
(00:03:31):
Yeah, this is actually really cool.
(00:03:33):
We’re sitting here actually in the central area.
(00:03:35):
There’s thousands of people literally right around us right now.
(00:03:38):
And so it’s been actually a fantastic event.
(00:03:42):
So much energy and just style.
(00:03:44):
They really have an interesting style here, like a presence, a feel, you know.
(00:03:49):
So what about on conferences?
(00:03:50):
How are they different?
(00:03:51):
Well, an unconference is much smaller, so there might be like 50 or 200 people.
(00:03:57):
And every morning you gather people who want to talk about something,
(00:04:00):
and there’s always someone,
(00:04:02):
will pitch their proposals.
(00:04:04):
Then the disorganizers will get together,
(00:04:07):
merge related proposals,
(00:04:09):
come up with a schedule,
(00:04:10):
and then you just kind of go.
(00:04:12):
There’s a few rules.
(00:04:13):
The most important rule is the law of two feet, that if you find yourself…
(00:04:17):
In a room where you’re not interested in what’s going on and you can’t contribute,
(00:04:20):
you should just go to the next room.
(00:04:22):
But what I like about it is that because it’s much less formal,
(00:04:25):
you can interrupt the presenter,
(00:04:26):
you can ask questions,
(00:04:27):
you kind of can shape what is going on.
(00:04:29):
Other people shape it to what they’re interested.
(00:04:32):
And so you get a much faster, more dynamic way of increasing your knowledge or sharing what you have.
(00:04:40):
I actually love on conferences.
(00:04:41):
I’ve run a few of them myself as well.
(00:04:44):
So they’re also great fun.
(00:04:45):
And as you mentioned, a lot of flexibility.
(00:04:49):
And it’s a way for everybody to participate, right?
(00:04:53):
So, okay, next question.
(00:04:55):
I’m interested in your teaching history.
(00:04:57):
You’ve been teaching Java for a long time,
(00:05:00):
and obviously Java’s been around for a while,
(00:05:03):
so teaching now versus teaching,
(00:05:06):
say,
(00:05:07):
20 years ago,
(00:05:08):
two things have changed.
(00:05:09):
Well, actually, three things.
(00:05:10):
The world has changed, the students have changed, and the technology has changed.
(00:05:15):
So just talk about some observations about how teaching has evolved in terms of teaching Java.
(00:05:22):
Yeah, so let’s actually go back to 1996 or so.
(00:05:25):
Java first came out.
(00:05:26):
It took,
(00:05:27):
I think,
(00:05:28):
the first CS instructors months to change their curriculum and to incorporate Java
(00:05:34):
into it.
(00:05:35):
I instantly switched from C++ to Java for the beginning course for very obvious reasons.
(00:05:42):
Now, you may think those very obvious reasons is that C++ is a terrible language,
(00:05:46):
But,
(00:05:46):
you know,
(00:05:47):
it doesn’t really matter what you use for teaching in the first semester because
(00:05:51):
what most students have difficulty with is not the language,
(00:05:55):
but loops and arrays.
(00:05:57):
And it really doesn’t matter whether you teach that in Java or in Python or in C++.
(00:06:01):
Students have the exact same problems when it comes to doing loops and arrays.
(00:06:05):
But the reason that you choose a programming language is you want to have something
(00:06:10):
that the students perceive as cool and relevant and that lets you do cool and
(00:06:13):
relevant projects.
(00:06:15):
So as soon as Java came out,
(00:06:16):
projects became so much better because now you could access the internet,
(00:06:20):
pretty soon you could access databases,
(00:06:22):
you could program GUIs,
(00:06:23):
you could do all the things that in the late 1990s were considered exciting parts
(00:06:28):
of computing technology,
(00:06:29):
all of which were very difficult to do in C++.
(00:06:32):
Now the world, of course, has changed and people want to do other things.
(00:06:36):
They want to do data science.
(00:06:37):
They want to do machine learning.
(00:06:39):
They want to do artificial intelligence.
(00:06:42):
And Java as a language is perfectly suitable in doing that, but the ecosystem has shifted.
(00:06:48):
All of those things that are cool today are easily accessible through Python and
(00:06:53):
not so easily accessible through Java.
(00:06:55):
The other thing has changed is that it used to be every student who came in as a
(00:06:59):
computer science student in the late 1990s who could say,
(00:07:03):
well,
(00:07:04):
at the time we still ran computer labs,
(00:07:06):
pretty soon afterwards students brought in their own laptops.
(00:07:09):
Now when you have a class of freshmen in computer science, half of them don’t know what a laptop is.
(00:07:14):
They have never seen one.
(00:07:16):
They think it’s kind of like a typewriter on wheels or something.
(00:07:19):
And so, you know, they have maybe tablets or something.
(00:07:23):
Now with Python, you can just run a Jupyter notebook and it works just fine.
(00:07:29):
There’s nothing to install.
(00:07:31):
With Java, as we know, that’s not so easy.
(00:07:34):
So those are the two reasons for which much of undergraduate teaching has
(00:07:41):
unfortunately moved away from Java to Python.
(00:07:43):
And I say unfortunately because really, and that’s all something that I explored in my presentation here.
(00:07:48):
There’s two disadvantages of Python.
(00:07:50):
There’s nothing terribly wrong with Python.
(00:07:52):
It’s actually, as a language, older than Java by a little bit.
(00:07:56):
But it’s a fine language.
(00:07:57):
But it is dynamically typed.
(00:07:59):
And so for students, that’s not so cool.
(00:08:01):
It’s not so great when your program,
(00:08:03):
you know,
(00:08:03):
kind of crashes and burns after you’ve run it for a couple of times.
(00:08:09):
It’s much better if the compiler helps you out writing a program that has a
(00:08:13):
fighting chance of being correct the first time you run it.
(00:08:16):
And the other thing is the kind of development environments that we do get in Java
(00:08:21):
are so fantastically better than what you get with Python.
(00:08:24):
It’s not even funny.
(00:08:25):
Interesting.
(00:08:26):
You know, I was in FOSS Asia in Vietnam, a huge conference in April.
(00:08:32):
There were 5,000 people there and 4,000 of them were students because it was held at a university.
(00:08:38):
These are all kids in their early 20s.
(00:08:41):
And I spoke to a lot of them, as many as I could, and many of them were learning Java.
(00:08:45):
Some thought it was great and it was perfectly manageable.
(00:08:49):
Some thought it was hard.
(00:08:50):
So in terms of being hard versus easier, what are your observations about the evolution of that?
(00:08:57):
Yeah, I mean, I’d like to talk to the students who say that Java is somehow inherently hard.
(00:09:01):
Because that doesn’t really,
(00:09:02):
I mean,
(00:09:03):
if you take any or odd task that would come up in like a student program,
(00:09:08):
the amount of work that you have to do in Java versus Python is pretty much the same.
(00:09:14):
So you sometimes hear people who say, well, Java is hard because you have public static void main.
(00:09:19):
But I have taught now tens of thousands of students,
(00:09:22):
and not a single one of them has ever been upset about public static void main.
(00:09:26):
They copy and paste it.
(00:09:28):
If you try to explain to them on day one what public,
(00:09:30):
what static,
(00:09:31):
what void,
(00:09:31):
what main,
(00:09:32):
what string brackets and args means on day one,
(00:09:34):
I mean,
(00:09:35):
that’s foolish.
(00:09:36):
But instructors don’t typically do that.
(00:09:38):
They say, don’t worry, you’re pretty little head about this.
(00:09:40):
We’ll cover that later, and you’ll understand by the end of the semester.
(00:09:43):
Students live in a complex world,
(00:09:45):
in an ever more complex world,
(00:09:46):
they are used to managing that complexity.
(00:09:49):
And so,
(00:09:49):
when someone says,
(00:09:50):
well,
(00:09:50):
you’ve got to switch from Java to Python because your very first Hello World
(00:09:55):
program is 80% shorter,
(00:09:57):
that’s really not true.
(00:09:59):
Now, there’s a lot of perception with students.
(00:10:01):
Java has the perception of being,
(00:10:04):
at this point,
(00:10:05):
a single-use language,
(00:10:07):
that it’s only used for backend business applications.
(00:10:10):
And to some degree, you could say that really is probably, employment-wise, a sweet spot right now.
(00:10:16):
But that was also one reason that I felt motivated to give this session here to say
(00:10:20):
that Java should not be pigeonholed in this one thing.
(00:10:22):
Java is a wonderful general-purpose language.
(00:10:25):
What Java is in dire need of today is an easier way to run.
(00:10:30):
There ought to be,
(00:10:32):
for everyone,
(00:10:33):
a way to just walk up to something like Google Colab and program away in Java.
(00:10:38):
And that means, A…
(00:10:40):
we need an execution environment like that, that’s accessible without installation.
(00:10:45):
And B,
(00:10:46):
the libraries for the kinds of things that one wants to do,
(00:10:49):
the data science,
(00:10:51):
the stats,
(00:10:52):
the graphing,
(00:10:53):
the plotting,
(00:10:54):
they are there,
(00:10:55):
but they’re not as well known as the ones in Python.
(00:10:59):
And I think then they could actually need a kick in the rear to be easier to use
(00:11:04):
and to be more standardized than they are today.
(00:11:07):
So that, to me, is a big challenge for the next years to come.
(00:11:10):
How can we get Java back to that every man language that it was?
(00:11:14):
And I think we’re at a better position than we ever were.
(00:11:17):
Interesting.
(00:11:18):
Very interesting.
(00:11:18):
So also, do you think that the students learning now have the same opportunities or even more?
(00:11:23):
I don’t know.
(00:11:24):
You answer the question how you feel.
(00:11:26):
But is it,
(00:11:27):
you know,
(00:11:27):
students getting into programming now versus students that get into programming,
(00:11:31):
say,
(00:11:31):
20 years ago,
(00:11:32):
equal number of opportunities or more?
(00:11:35):
You know, 30 years ago is not that long ago, and at the time, people already had the Internet.
(00:11:42):
So I don’t think there’s really a quantum leap of difference.
(00:11:47):
And if anything,
(00:11:47):
30 years ago,
(00:11:49):
because everyone saw the Internet growing and growing,
(00:11:53):
people were really excited about being a part of it.
(00:11:56):
Nowadays, students are so blasé about computing.
(00:11:59):
The computing power that they have in the device that they use for 12 out of the 24
(00:12:04):
hours of every day,
(00:12:06):
their phone,
(00:12:06):
is so much more powerful than anything they could have envisioned at the time that
(00:12:11):
they take basic computing for granted.
(00:12:13):
And they’re often disappointed in their initial programming efforts that what they
(00:12:17):
produce is nowhere near as slick as what they get every day on their phone.
(00:12:22):
And so maybe it was actually easier to be motivated 30 years ago than it is now.
(00:12:27):
And the other thing that today, I think, is a demotivator is the AI, right?
(00:12:32):
So someone goes into a beginning programming class and everything that they
(00:12:36):
struggle with,
(00:12:37):
ChatGPT can give them the answer.
(00:12:39):
I mean, that’s got to be non-fun.
(00:12:41):
And so students kind of just like if they take a foreign language class,
(00:12:44):
you know,
(00:12:45):
where also the beginning classes,
(00:12:46):
you have the same effect.
(00:12:49):
they probably have a little harder today to deal with just the frustrations and the challenges.
(00:12:55):
And it’s really hard.
(00:12:56):
A lot of students drop out of the first semester or two because to learn to do
(00:13:03):
basic programming is a non-trivial effort.
(00:13:06):
And you have to kind of do it before you get into the fun part.
(00:13:09):
Interesting.
(00:13:09):
Okay.
(00:13:10):
Well, Kai, thank you very much for your time.
(00:13:11):
Appreciate it.
(00:13:12):
We’ve got sessions to get to here.
(00:13:14):
And hopefully we’ll see you at another event soon.
(00:13:18):
Okay, well, thanks very much.
