HomeVideos

The programming language after Kotlin – with the creator of Kotlin

Now Playing

The programming language after Kotlin – with the creator of Kotlin

Transcript

2665 segments

0:00

Why would anyone create a new

0:01

programming language today if AI can

0:03

already write most of your code? Andrew

0:05

Brela has an interesting answer. Andre

0:07

is the creator of Cotlin, a language

0:09

that runs on billions of Android devices

0:11

and is one of the fastest growing

0:12

languages in the world. Today we cover

0:15

how Andre designed Cotlin by

0:16

deliberately borrowing ideas from Scala,

0:18

C and Groovy, and why he considers

0:21

leaving out the turnary operator one of

0:22

his biggest regrets. Why making Cotlin

0:24

interoperate seamlessly with Java was a

0:27

gigantic undertaking and what it took to

0:29

get it done. How Cotlin adoption went

0:31

through the roof after Google announced

0:32

it making it the official language for

0:34

Android in a move that even took Andre

0:36

and the Cotlin team by surprise. Andre's

0:38

new project Codespeak, a new programming

0:41

language built on English designed for

0:42

an era where AI writes most of the code.

0:45

If you're interested in the future of

0:46

programming languages from someone who

0:48

built one of the most loved languages of

0:49

today, then this episode is for you.

0:51

This episode is presented by Statsig,

0:53

the unified platform for flags,

0:55

analytics, experiments, and more. Check

0:57

out the show notes to learn more about

0:58

them and our other season sponsors,

1:00

Sonar and Work OS. Andre, welcome to the

1:03

podcast.

1:04

>> Hello. Uh, thank you for having me.

1:07

>> It is not often that I meet someone who

1:10

designed such an influential language

1:13

across mobile across back end. So, let's

1:17

start with how did it all started? Okay,

1:19

so that was a little messy because I

1:23

went to school uh back in St. Petersburg

1:25

uh started studied computer science and

1:28

I didn't really know exactly what kind

1:30

of programmer I wanted to become. I knew

1:32

I wanted to be a programmer and then you

1:35

know at some point while I was still in

1:38

the university I started teaching uh

1:40

programming in school and uh you know it

1:43

was a big passion hobby of mine and then

1:46

at some point I got a job with Borland

1:48

and worked in some developer tools you

1:50

know that was awesome like Borland was a

1:52

very big name and you know they they

1:54

went under pretty soon after I joined

1:56

and I hope it's not because of me. Yeah,

1:58

but but I worked on the it was at the

2:01

tail end of the UML era. So, we were

2:03

doing some developer tools in the UML

2:06

space. That was very interesting. I

2:08

learned a lot. But then Borland went

2:10

under and I went back to teaching

2:13

full-time and then I started PhD school

2:15

and you know all that was kind of not

2:18

really planned out and uh in my PhD I

2:22

was working on domain specific languages

2:24

and generally I was interested in

2:25

languages. was something I was curious

2:28

about and specifically typed languages

2:30

were interesting. I was always curious

2:33

about how these things worked but never

2:36

really serious. When I started looking

2:38

into DSLs, it was uh slightly more

2:41

serious, although my PhD was a mess and

2:43

I never defended because of that. Uh but

2:46

at some point um you know some someone

2:48

reached out. It was actually a person

2:50

who was in charge of the Orland St.

2:52

Petersburg and by that time he was

2:54

already at Jet Brains and he reached out

2:56

uh to me while I was in Tarto in

2:59

Estonia. I was there for a year on as a

3:01

visiting PhD student. It was a lovely

3:04

time. Um so he he reached out and

3:06

invited me to when when I next visited

3:08

St. Petersburg to visit the Jet Brains

3:10

office there and talk about something

3:13

about languages.

3:15

What I thought was that there was about

3:18

the this project called MPS

3:19

metarogramming system that Jet Brains

3:22

had. I knew about it. It's about DSLs. I

3:24

worked on DSLs. You know, it was

3:26

generally something like plausible that

3:30

they would be interested in talking

3:32

about stuff like that. But it turned out

3:33

I was completely wrong. And what they

3:35

wanted was to start a new programming

3:38

link.

3:40

>> And I was completely unprepared for

3:42

that.

3:43

like I you know I've never thought about

3:46

doing something like this and my first

3:48

reaction was you don't do a new language

3:52

like you don't need it and the the the

3:55

basic pitch was uh that the Java

3:57

ecosystem needs a new language Java is

3:59

outdated so on so forth we can talk a

4:01

little more about this it was 2010 I

4:03

think yeah 2010 um yeah and uh I was

4:08

like but there there are other languages

4:10

like everybody's doing fine why do you

4:11

need to do that and And this

4:13

conversation was actually a very

4:15

insightful one because uh the guys at J

4:17

brains they uh simply explained to me

4:21

how the things actually were and you

4:24

know it was it was a big problem by that

4:27

time. So Java didn't really evolve uh

4:30

and hadn't been for for a long time.

4:32

>> What was the reason behind it? Can you

4:34

take us back for those of us who are not

4:36

in the ins and outs? Yeah. So, uh the

4:40

last major version of Java uh by 2010

4:43

was Java 5 that was released in 2004.

4:48

>> Oo. Six year old language.

4:49

>> Yeah. And since then there there were

4:51

updates. There was Java 6 that made no

4:54

changes to the language as at all.

4:56

>> And then there was Java 7 that made

4:58

minor changes. In parallel there there

5:00

were things that that were happening in

5:02

other languages, especially C was

5:05

progressing very well. And by 2010, C#

5:07

had all the nice things. There already

5:10

were lambdas like horror functions and

5:13

and all that nice stuff. There were

5:15

getters and setters and and many other

5:17

things that made the language much

5:18

nicer. And Java was felt like it was

5:21

standing still. And there was a project

5:25

uh to to work on lambdas for Java, but

5:28

that what was in the works and had been

5:31

in the works for a long time and only

5:33

came out in 2014. So that was the

5:36

situation and you know uh the the

5:38

ecosystem didn't stand still in the

5:40

sense that other people were building

5:41

languages and there was Scala there was

5:43

Groovy and of course people at J brains

5:47

knew both Scala and Groovy they built

5:49

tools for them. It's traditional to

5:51

build your tools in the language you're

5:53

building uh the tools for. So the Scala

5:55

plug-in was built in Scala and there was

5:57

a lot of Groovy used Jet Brains as well.

6:00

So they knew what the issues were with

6:02

the language and both languages are very

6:04

interesting and very good in their own

6:06

ways but they saw an opportunity in the

6:09

market because basically Groovy was too

6:12

dynamic and too far from you know

6:15

hardcore mainstream large scale

6:16

production because dynamic languages are

6:20

not for that basically.

6:22

>> What are dynamic languages for what are

6:24

their strengths and like best use cases?

6:26

So the trade-off I guess if you look at

6:29

a like a statically typeyped language

6:31

like Java and Cotlin and Scala for

6:33

example versus dynamic languages like

6:35

Python and Ruby and JavaScript and uh

6:38

Groovy. Uh in dynamic languages it's

6:42

very easy to start and build something

6:44

working very quickly because basically

6:47

the language is not in your way as much.

6:49

There's this saying that nothing limits

6:51

the imagination of a programmer like a

6:53

compiler.

6:58

And you know this may be changing

6:59

nowadays a little bit and this is in

7:02

part what I'm working on now but um back

7:04

in the day was completely true. You know

7:07

the the the whole art of uh making a

7:10

good language was to restrict the user

7:13

in a good way. Uh yeah, but in any case,

7:16

the the situation with dynamic languages

7:20

is that they are much more user friendly

7:22

in the beginning, but then when the

7:24

project scales, you have trouble making

7:28

large refactorings. You have trouble

7:29

making sure that everything works

7:31

together. where you need to do a lot

7:32

more testing and rely on other things

7:34

like that as opposed to static languages

7:37

where you have uh you know precise

7:39

refactoring tools and and other things

7:41

that can make sure that at least a

7:43

certain class of problems just doesn't

7:45

happen. And you know this is why in at

7:48

least in our mind back then it was

7:51

absolutely clear that if we're building

7:53

a language for uh large projects, big

7:56

teams so on so forth it has to be a

7:58

static lang

7:58

>> static one. Yes.

8:00

>> Uh yeah. So with Groovy that was a big

8:02

issue performance as well because Groovy

8:05

was building a dynamic language on top

8:07

of a very static runtime. So there was

8:10

quite a bit of tension there. Uh so that

8:12

was in the Groovy side and the Scala

8:14

side. Scala is a wonderful static

8:16

language and incredibly powerful and

8:19

with tons and tons of good ideas but it

8:22

had its own problems. It relied very

8:24

heavily on implicit for example and I

8:27

have a history of debugging one line of

8:28

Scala for an hour to try and figure out

8:31

what it does just because you know it

8:34

was pretty complicated and also the

8:36

compiler was very slow and there were

8:38

issues of stability and many many things

8:40

were just not accessible enough for for

8:43

a lot of engineers. So from the

8:45

experience of using scala jet brains my

8:48

colleagues basically understood that

8:50

it's not what's going to change the

8:52

industry although scala got a lot of

8:54

adoption and again like Martin and Derki

8:57

is a great language designer you know

9:00

and and uh

9:01

>> I think one of the biggest use cases was

9:03

old Twitter a lot of it was built on

9:05

scala and they scaled to however you

9:07

know massive scale etc

9:10

>> and I think LinkedIn as well yeah so in

9:12

any case uh these were you uh it's

9:15

always very nice when other languages uh

9:17

kind of pioneer things and then you can

9:21

build on top of uh their successes and

9:23

failure and we were in that position

9:25

basically. So the the argument that

9:28

people at Jet Brains were making uh was

9:31

basically that uh there is a window of

9:34

opportunity. People need this language.

9:36

We Jet Brains are the company who can

9:39

actually put out a language and make it

9:41

successful because we have access to the

9:43

users. We have their trust. We can make

9:45

good tools. And it was another issue

9:47

with Scala. For example, it was very

9:49

difficult to build tools for Scala back

9:51

then. Now Scala 3 is more tooling

9:53

friendly. But back then it was a

9:55

nightmare. Like I said that you know if

9:58

if you have a static language you can't

10:00

have precise refactorings if the

10:02

language is not too complex and you know

10:05

some languages are particularly

10:06

challenging. So Scala back then and C++

10:09

were incredibly challenging to make

10:10

precise tools for. So, and that was that

10:13

was the basic pitch and I quickly

10:17

understood that yeah, they were right

10:19

and this was something that was worth a

10:23

shot in the sense that it was not

10:25

completely hopeless, not completely dead

10:27

in the water. I had no idea if we could

10:29

pull it off. It's it was then when we

10:32

actually sketched like some initial

10:34

features on the whiteboard

10:36

just because Jet Brains is generally run

10:38

by engineers. Hold that thought from

10:40

Android on how Jet Brains is genuinely

10:42

run by engineers. This is because I

10:44

happen to know another company also run

10:46

by engineers. Sonar, our season sponsor.

10:49

If there's a time when we need true

10:50

engineers, it's now. As AI coding

10:52

assistants change how we build software,

10:54

code is generated faster than before.

10:57

But engineuring basics remain important.

10:59

We still need to verify all this new AI

11:01

generated code for quality, security,

11:03

reliability, and maintainability. A

11:05

question that is tricky to answer. How

11:07

do we get the speed of AI without

11:09

inheriting a mountain of risk? Sonar,

11:11

the makers of Sonar Cube, has a really

11:13

clear way of framing this. Vibe then

11:16

verify. The Vibe part is about giving

11:18

your teams the freedom to use these AI

11:20

tools to innovate and build quickly. The

11:22

verify part is the essential automated

11:24

guardrail. is the independent

11:26

verification that checks all code human

11:28

and AI generated against your quality

11:30

and security standards. Helping

11:32

developers and organizational leaders

11:34

get the most out of AI while still

11:36

keeping quality, security, and

11:37

maintainably high is one of the main

11:39

themes of the upcoming Sonar Summit.

11:41

It's not just a user conference. It's

11:43

where devs, platform engineers, and

11:45

engineering leaders are coming together

11:46

to share practical strategies for this

11:48

new era. I'm excited to share that I'll

11:51

be speaking there as well. If you're

11:52

trying to figure out how to adopt AI

11:54

without sacrificing cold quality, join

11:56

us at the Sonar Summit to see the agenda

11:58

and register for the event on March the

12:00

3rd, head to

12:01

sonarsource.com/pragmatic/onarsummit.

12:05

So, everybody I talked with uh were

12:07

deeply in the in the weeds with with IDs

12:10

and everything and new programming

12:11

languages very well and you know, we had

12:13

a very technical discussion. So I don't

12:16

remember exactly all of the features

12:19

we're talking about but the current

12:21

syntax for extensions in Cotlin was

12:24

already there. Uh and I don't remember

12:27

why exactly we focused on extensions but

12:30

it was there. So you know from day one

12:33

we were basically building on top of

12:34

ideas from other languages like

12:36

extensions obviously came from C. Yeah.

12:38

So it was it was a very exciting

12:40

conversation

12:41

but I didn't make a decision then uh

12:45

because I I was in Tarto and I needed to

12:47

finish there and it took me a few months

12:49

to finish and then I came to St.

12:50

Petersburg for one month because after

12:53

that I had a an internship scheduled

12:55

with Microsoft research in Redmond. So I

12:57

was going to Seattle to stay there for

13:00

like three and a half months and I was

13:02

like okay guys so I have this month I

13:04

can work in the office and we can try to

13:07

sketch things but then I'll go into

13:09

Microsoft and then I will decide whether

13:10

I commit or not which in hindsight I

13:13

mean

13:16

um well I made the right decision in the

13:17

end. I had a great time uh for for this

13:20

month or so um I worked uh with the guys

13:23

in the office. It was mostly Max Trafi

13:26

we were working with and it was

13:28

incredible like we had such great

13:31

discussions and I I actually saw Max

13:33

this morning and uh it was like it was

13:37

great time. So then I went to Seattle

13:40

did something completely different

13:42

there. Microsoft research saw really

13:45

great researchers. Uh working there

13:48

actually was exposed to like the

13:51

top-notch level of academia for the

13:53

first time was very insightful. But

13:56

after that I kind of realized what the

13:58

question was whether I want to sort of

14:02

try to pursue an academic career which

14:05

you know I didn't feel like I was really

14:08

built for that and was not sure whether

14:10

I can be like a good researcher on my

14:13

own or I'll I'll have to follow in

14:15

somebody else's footsteps

14:18

uh versus like do a crazy thing and

14:20

build my own language here. I'm like

14:23

okay I'm doing the crazy thing. So for

14:26

those of us engineers which will be the

14:28

majority who have not built a language

14:30

from scratch,

14:32

how do you start with it? Like you know

14:33

we we know speaking for myself I know

14:35

how to write code. I know how to open

14:37

the editor. I know how to write hello

14:38

world and a more complex app and even

14:40

more complex one. How does a language

14:42

start?

14:42

>> In our case we basically talked a lot

14:46

for a few months. So it's I think not

14:50

everyone is like that but I think the

14:52

best when I'm talking to people and this

14:56

was the ideal environment because we

14:58

were basically discussing things with

15:00

the max constantly for many months and

15:04

there were a few presentations internal

15:07

that I made at J brains and some of the

15:09

slides survived so I can see including

15:11

my spelling mistakes in those slides my

15:13

English wasn't as good then and you can

15:15

you can see some some of the evolution

15:17

through those slides and I think there's

15:19

a recording of one of those

15:20

presentations. So we were basically

15:24

doing whiteboard design for some time

15:28

and the great thing about doing this at

15:31

Jet Brains was that there were a lot of

15:33

people with opinions about not so much

15:36

how to make a language but what problems

15:39

do programmers face and what they like

15:42

and don't like in other languages. So I

15:44

had a tons of tons of input from other

15:46

people and very good people. So that

15:50

helped. And I really I don't think I

15:52

realized how special that environment

15:54

was back then. Like I was 26 to be

15:57

clear. And I had no idea how things were

16:00

done in general.

16:03

But somehow these people just trusted

16:07

me. I I'm not sure it was very rational

16:09

on their part. worked out, but I'm not

16:12

sure I would recommend anyone to do

16:14

this.

16:15

>> And so in the first few months, do I

16:17

understand that you kind of whiteboarded

16:18

and you kind of wrote down how you want

16:20

this language to evolve? You kind of,

16:22

you know, like wrote out like we're

16:24

going to have these features or how can

16:25

we imagine?

16:26

>> I guess the easiest way to explain this

16:29

would be like this. So we basically went

16:31

off what the pains were with Java and

16:34

there were quite a few and and there was

16:36

a lot of experience of using Java uh

16:38

across the community and inside Jet

16:40

Brains and we kept making lists of

16:43

things we wanted to fix and I came up

16:45

with some ideas and some other people

16:47

suggested other ideas about how things

16:49

can be fixed and what is an actual

16:51

problem and what we don't care about and

16:52

so on so forth. uh and for some time I

16:56

was just you know pieces of the puzzle

16:58

basically laid out in a table without

16:59

fitting together and then at some point

17:01

we started fitting them together and I

17:03

was just doing a lot of that in my head

17:06

which is not the best way but this is

17:08

how I knew how to do it. There were also

17:10

some crazy ideas uh that we thought were

17:14

important back then for example I wanted

17:16

to implement multiple inheritance fully

17:19

fledged multiple inheritance.

17:20

>> Mhm. which was a dumb idea.

17:23

>> Multiple inherits meaning that a class

17:24

can inherit from like several classes.

17:26

Yeah. And and you you have to take care

17:28

of like conflict resolution and all

17:30

sorts of edge cases,

17:31

>> right? Yeah. So, so the the actual

17:33

challenge is not so much conflict

17:35

resolution in terms of methods, but

17:36

initialization of state constructors are

17:39

really hard. It was actually someone

17:42

outside of JBR who explained to me that

17:44

was a very bad idea and I'm very

17:46

grateful to them. Yeah. So you know

17:48

there were crazy ideas uh as well and

17:50

some of them just fall off over time as

17:54

we were discussing or prototyping and we

17:56

I think I started writing code maybe 6

18:00

months in or something like that maybe

18:02

maybe a little earlier than that and I

18:04

started with a parser and it was

18:06

actually it was a very also a very

18:08

unique way to start a language because

18:11

the idea was to start not with a

18:13

compiler but with an ID plugin. I have

18:16

it in the editor first which is you know

18:19

an ID plug-in shares a lot with the

18:21

front end of the compiler so it's not

18:24

absolutely crazy but I was just relying

18:27

a lot on the infrastructure that was

18:28

available in intellig idea so all the

18:30

parsing infrastructure and it it was

18:32

awesome like parsing infrastructure

18:34

intellig ID is better than anything else

18:37

in the world because it's it's the heart

18:39

of the ID it has to be incredibly fast

18:41

and very robust and so but then later

18:43

someone who knew the infrastructure a

18:45

lot better than I do. Uh had to factor

18:49

that bit out to make the column compiler

18:51

autonomous. And it was the Mit Jemer who

18:53

did that. And he's a awesome engineer.

18:55

Like he's probably one of the best

18:57

people to refactor a large code base and

18:59

then like take this one bit out of

19:02

something that that was already 10 plus

19:04

years old back then. So we started with

19:06

this ID plugin. I think Max wrote the

19:09

scaffold and I actually plugged in the

19:11

parser and everything. And that was that

19:13

was an interesting story because it was

19:14

very interactive. So I could show off

19:17

the language as if it existed because it

19:20

has had some tooling but I couldn't

19:23

compile anything in the very beginning

19:25

and that was was actually a very good

19:27

way to experiment with the syntax but

19:29

then soon after I started working on a

19:31

full-fledged front end and on some

19:33

translation and Ditri and Alex Katchman

19:36

were working on the back end. Everybody

19:39

was part-time. uh when you say you work

19:41

on front end they work on back end in a

19:43

language context what does that mean

19:44

>> it's slightly different in different

19:46

languages but basically the front end is

19:48

what deals with the syntax and with the

19:51

checking and understanding what the

19:53

program means and the back end is what

19:55

translates to the executable code in our

19:57

case u the front end is like reading the

20:01

text and parsing and doing types and and

20:03

all that and the back end generates Java

20:05

bite code and cotlin has multiple

20:07

backends for different target languages

20:10

is like we have Java back end, we have a

20:12

native back end for our uh like iOS and

20:15

and other native platforms and

20:17

JavaScript back end wasn't back. At that

20:20

time, nobody was full-time working on

20:23

this project. Even I was part-time a PhD

20:25

student and part-time cotton developer.

20:28

And it was like the very early days. And

20:30

then at some point, I gave up my PhD and

20:32

focused 100%. Which was also like it's a

20:35

isn't it a a weird decision to start a

20:38

new language part-time?

20:40

>> Yeah. Looking back, I was young and

20:42

stupid.

20:43

>> Yeah. There's a saying that we didn't do

20:45

it because it was easy. We did it

20:46

because we thought it was easy.

20:48

>> Absolutely. that I didn't realize how

20:51

hard the problem was. I was I also had

20:54

an unreasonable amount of hubris. I just

20:57

thought I I knew how to do everything. I

21:00

didn't. But it worked out in the end.

21:03

>> So when the language started, what did

21:05

you call it internally? There's always

21:06

internal code names, right?

21:08

>> Right. Yeah. So u I don't think there

21:10

was a discussion of this first name at

21:12

all. It was just generally understood

21:14

that the language will be named Jet and

21:17

it was logical. So we had all the code

21:19

base was uh using the name jet or we had

21:22

a jet parser and you know jet editor or

21:25

whatever jet highlighter something like

21:27

that and then someone realized that the

21:31

that the name was trademarked by someone

21:34

else and it was actually people we we

21:37

know there in Novaskin Russia doing

21:40

something it's not a language it's a

21:42

comp but it is a compiler um and we

21:45

couldn't use it and this is When we

21:48

started looking for another name, it was

21:50

very painful.

21:51

Like looking for names, guys, this is so

21:54

bad. It's one one of the worst things

21:56

because you never know what name will

21:59

work unless you want to do like an

22:01

extensive study and then all the good

22:03

names are taken of course and then some

22:06

of the names that are not taken are not

22:07

taken because they're not really

22:08

googleable and you know some people are

22:11

just very brave people who named their

22:13

language go. This is why people now call

22:16

it Golang because otherwise you can't

22:18

identify it. It's it's it's a verb in

22:20

English and very common one. Uh yeah, so

22:23

we had weird options and I in one of my

22:27

old old presentations I found a list of

22:29

early names and we had robusta there as

22:32

a flavor of co coffee and we had up for

22:36

example or G or something else like that

22:40

and those weren't great by that time.

22:43

other languages were popping up and one

22:46

of the alternative languages was was

22:48

called son and the logic was that Java

22:51

was the island of coffee and salon was

22:54

an island of tea and uh midriov

22:57

basically looked out of the window and

22:59

said okay we have an island here in St.

23:01

Petersburg in the Gulf of Finland

23:03

there's a big island called Scotland and

23:05

it's a good name in the sense that it's

23:08

very googable. Nobody uses it for

23:10

anything. It's very recognizable. It's

23:12

not super

23:14

smooth for many languages, but it's kind

23:16

of okay. Nobody was in love with that

23:19

name.

23:20

And we were kind of hesitant and you

23:23

know cot means a bad thing in German.

23:25

And also there was like some some

23:27

negative connotation in Mandarin I was

23:29

told or something like that. you know

23:30

it's always some language has some nasty

23:33

association with any word and we

23:35

basically were super hesitant so when we

23:38

announced and we we had this deadline so

23:41

we were basically putting this off when

23:43

we announced we were still not sure so

23:45

we called it we decided would be a code

23:47

name we called it project cotlin

23:50

uh to have a wiggle room to later

23:54

replace the name but it stuck the first

23:55

thing we we did we put out a uh

23:58

basically a confluence page with a

24:00

description of a language. It was just a

24:01

bunch of wiki pages and there was no

24:03

compiler available, no nothing. And

24:06

there uh you know the the word cotlin

24:09

appeared many many times. I was like my

24:11

god this thing doesn't like I can't do

24:13

search and replace and then change the

24:15

name everywhere. So the workaround that

24:18

I came up with was create an empty page

24:20

called cotlin and it so it has a name

24:23

and then everywhere else you mention it

24:24

as a page and when you rename a page it

24:26

gets renamed everywhere. So this is why

24:28

there was an empty page called cotlin in

24:30

that documentation. Uh but yeah the name

24:33

stuck and it turns out to be not a bad

24:34

name.

24:36

>> So when it started what were the main

24:39

differences with cotlin compared to java

24:41

because java was what was the big one?

24:43

How how did you explain to developers uh

24:46

you know who initially start on board or

24:47

wanted to give it a go? Yeah, I guess

24:49

there were a few major selling points

24:52

and then there were other things on top

24:55

of that. When we started like in the

24:57

very beginning, we didn't have uh null

24:59

safety in mind. Null safety came a

25:03

little later after one of the internal

25:05

presentations. It was Maxurov who

25:07

invited Roman Yazarov who later was the

25:10

project lead for Cotlin. and Roman came

25:12

and and listened to the presentation,

25:14

gave some feedback and said like guys,

25:16

if you want to do something really big

25:17

for enterprise developers, figure out

25:20

null safety and we did and it took a

25:24

while. So, uh in the very beginning it

25:26

was the general idea of like what makes

25:30

Java feel so outdated and there there

25:33

were a bunch of things. Lambdas were

25:35

very big. The general like the general

25:39

uh feeling from Java back then was it

25:41

was very verbose. It was called the

25:43

ceremony language. You know a lot of

25:45

people were grumpy about too many

25:47

keywords like public static void main is

25:50

something everybody was really grumpy

25:52

about. But also you know there were

25:54

getters and setters for every property.

25:56

There were you know constructors and

25:58

overloads and all that stuff that looks

26:02

like boiler plate because it is.

26:04

>> Yeah.

26:04

>> And you know

26:05

>> is super annoying to type out.

26:06

>> Yeah. and and you know the the problem

26:07

with boilerplate is on the one hand it's

26:11

annoying to type out but tools can

26:13

generate it for you and fold it and so

26:14

on so forth. Uh but the bigger problem

26:17

is always readability. So reading is

26:20

more important reading code is more

26:21

important than writing code. We do a lot

26:23

more of that and with boilerplate it's

26:27

terrible because if some tiny thing is

26:30

different in the middle of completely

26:32

standard boilerplate code you'll miss

26:33

it. you become blind to it and you you

26:36

can debug for days not seeing them. So,

26:40

you know, that that was the point of um

26:42

sort of modernizing Java, making Java

26:46

programs be more about what they do and

26:50

less about the ceremony of making the

26:52

compiler happy basically. And you know

26:54

type inference was also a big thing

26:56

because Java was repeating types a lot

26:58

and many other things like that where

27:01

like semicolons you know but the modern

27:04

languages of the time already got rid of

27:07

semicolons

27:08

>> and and so in cotlin you also got rid of

27:09

it.

27:10

>> Yeah. Yeah. So we we got rid basically

27:12

in terms of syntax we got rid of uh

27:14

semicolons and duplicated types and that

27:17

was a lot of noise of code. What does it

27:21

mean that Java had duplicated types?

27:23

>> Yeah. So in um that version of Java when

27:26

you declare say a local variable you you

27:29

say it's a list of string called strings

27:32

equals new array list of string.

27:34

>> Oh yes I remember this one. Yes. Yes.

27:36

You need to type it out twice and if you

27:37

get one of them wrong compile error etc.

27:39

>> Right. So and at best uh you could omit

27:42

the second mention of string by using a

27:45

diamond operator but that only came

27:47

later. you know, basically was very

27:50

robust, especially if your types are

27:51

long. Like if it's if it's just a list

27:53

of string, it's sort of not so bad, but

27:55

if it's a map from something to some to

27:59

a list of string, for example, that's

28:00

already really long and you don't want

28:02

to read that. So, and a bunch of things

28:03

like that were

28:06

really annoying to a lot of people,

28:07

especially compared to C# or Scala.

28:10

So we we did all of that and then uh you

28:14

know on top of that were there were

28:16

other value add features and null safety

28:18

was a big thing that we spend multiple

28:22

years actually on implementing and I

28:24

think it's one of the main

28:25

differentiating factors now for cotlin

28:28

alongside of with extensions and other

28:31

things uh but null safety is one of the

28:33

core features

28:34

>> and can can we just spell out why null

28:36

safety is so big I mean I just today I

28:38

came across a bug on the I I couldn't

28:41

send a package because in JavaScript in

28:43

the Dutch post website there's a null

28:46

issue happening in production. Uh but

28:49

you know like before cotlin and in a lot

28:52

of languages why is it such a big

28:54

problem? It is.

28:55

>> Yeah. So, u dealing with null references

29:00

uh is a big hassle in most languages and

29:03

I think it was uh Tony Ho who um called

29:08

called it the billiond dollar mistake at

29:10

some point because like introducing I

29:12

think it was about introducing uh null

29:14

pointers to C or something. Uh so

29:17

basically when we look at all the

29:19

runtime errors that we have in Java code

29:23

I think null pointer exceptions will be

29:25

at the top. You know the type system of

29:27

the of the language is supposed to

29:29

protect you from those unexpected

29:30

errors. So there are errors you're

29:32

designed for and maybe errors that are

29:34

not even your fault like you know file

29:36

system error or something like that. But

29:38

there are also um errors that should be

29:42

prevented by the compiler. So for

29:43

example, class cast class exception or

29:45

missing method error for example are

29:47

things that the compiler is trying to

29:49

protect you for. It's trying to make

29:51

sure that this never happens in your

29:53

program if unless you you know switch

29:55

off the check by making an enforced cast

29:58

or something. Yeah.

30:00

>> And with nulls it's not a thing in Java

30:02

like anything can be null and if it's

30:04

null it will just fail.

30:05

>> Yeah. It throws an exception and dies.

30:08

>> It's a very common thing. So a lot of

30:10

people are kind of used to it and there

30:12

there are like different ways of being

30:14

disciplined about it and so on so forth

30:16

but basically this is a plague across

30:21

any code base you know there there are

30:23

different approaches to this and in

30:24

cotlin we took the approach of a

30:26

enforcing enforcing in the type system

30:29

but also making it free at runtime.

30:32

>> What what does that mean that you made

30:33

it free? So one very common way of

30:36

dealing with nulls is to use something

30:39

like an option type where you have a box

30:42

which might be empty or might have an

30:45

object in it.

30:46

>> Yeah.

30:46

>> And that box is not free like you have

30:48

to allocate it, you have to carry it

30:50

around everywhere and you know this this

30:53

easily creates a lot of objects in the

30:55

old generation for the garbage

30:57

collector. uh can be challenging and

30:59

what we did was uh just have a direct

31:01

reference at runtime. Our nullable or

31:05

not null reference is the same as Java's

31:07

reference. All we do is compile time

31:10

checking and some runtime checking when

31:12

we cross the boundary. But that's a lot

31:15

cheaper than allocating objects.

31:17

Although you know the runtime is getting

31:18

better and they kind of can optimize

31:20

some some of those objects away, but

31:22

still like it's it's an overhead. What

31:24

what are features that you took in from

31:26

Cotlin that were inspired by other

31:28

languages that you admired?

31:30

>> A lot of them. I have an entire talk

31:32

about this. It's called Shoulders of

31:34

Giants and we uh really learned from

31:38

lots and lots of languages and it was

31:40

always the point.

31:41

>> Andre just mentioned how Cotlin was

31:43

built on top of the shoulders of giants

31:45

taking good ideas that existed not

31:47

reinventing them. This was one of the

31:49

reasons Cotlin succeeded as much as it

31:51

did. But jumping forward from 2010 to

31:53

2026, one thing that is totally

31:55

different today is the speed of things.

31:57

AI is allowing nimble teams to build

31:59

faster than ever before. Companies that

32:01

used to take years to move into the

32:03

enterprise are doing it in months. This

32:05

speed creates a new problem. Enterprise

32:07

requirements, authentication, security,

32:09

access controls show up almost

32:11

immediately. This is where Work OS, our

32:13

season sponsor, comes in. Work OS is the

32:16

infrastructure layer that helps AI

32:18

companies handle that complexity without

32:20

slowing down. SSO for enterprise buyers,

32:23

MCP offer agendic workflows, even

32:25

protection against free trial abuse with

32:27

radar. Teams like OpenAI, Cursor,

32:29

Perplexity, and Versell rely on work to

32:31

power identity and security as they

32:33

scale. If you're building AI software

32:35

and want to move fast and meet

32:36

enterprise expectations, check out

32:38

worker.com. With this, let's get back to

32:41

Andre and how Cotlin was standing on the

32:43

shoulders of giants. So the slogan for

32:45

Cotlin was pragmatic language for

32:47

industry and the pragmatic bit which I

32:50

mean is a nice uh sort of nice rhyme

32:52

with with your podcast. Uh the pragmatic

32:55

bit was kind of coming from the

32:57

experience with Scala being called an

33:00

academic language and a lot of people

33:02

having trouble getting their heads

33:03

around a lot of the very smart tricks in

33:06

the design. And so so our idea was like

33:08

we're not doing academic research here.

33:10

We're not trying to invent anything.

33:12

like if we don't get to invent anything

33:14

it's a good thing not a bad thing and I

33:16

think from the engineering perspective

33:17

it's generally a good idea to to do this

33:20

usually you end up making something new

33:24

but the most of what you're doing

33:26

shouldn't be very new because you want

33:28

familiarity you want people to easily

33:31

grasp what you're doing and this has to

33:33

be familiar from other languages and

33:35

also if you're taking you know building

33:38

on top of the ideas of other languages

33:40

you have the benefit of them having

33:42

tried it and you can look at their

33:44

designs and their community's reactions

33:46

and and all that and the implications

33:49

all over the place and that gives you a

33:51

huge benefit. So we did a lot of that

33:53

and I think the language that influenced

33:55

cotlin the most is of course Java

33:57

because you know we the entire runtime

34:00

of cotlin is the JVM and we depend on

34:03

that but apart from that Scala had a

34:06

huge influence and and we used so many

34:08

ideas from Scala from you know primary

34:11

constructors and data classes and uh

34:13

valves and varss and and all these

34:15

things and to some interesting tricks

34:17

about how generics work for example you

34:21

know var Ians declarations

34:25

is a great idea of Martians and it's a

34:28

huge pity that it didn't uh make it into

34:30

Java design. It was flipped at the very

34:34

end of the design process to what Java

34:36

has now and it's definitely the the

34:39

Mart's idea was much better. We had to

34:42

sort of on the boundary model Java

34:44

boundary we had to fix the problem of

34:46

Java having it different and figure that

34:49

out. There were like many many ideas we

34:51

took from Scala and that was very

34:53

helpful and we usually we transformed

34:56

those ideas a little bit to adapt to to

34:59

our setting and to build on the

35:03

knowledge of how it actually works in

35:05

practice and we left some things out. We

35:06

simplified some things. For example,

35:08

Scala had traits and traits are a very

35:11

powerful construct where it's it's it's

35:14

like an interface

35:16

and you can have method implementations

35:19

uh in traits but also in Scala traits

35:22

you could have fields as well properties

35:25

that what what you couldn't have was um

35:28

constructor arguments like you have

35:31

always have a default constructor and

35:33

can initialize all your fields and it's

35:35

not as bad as multiple inheritance in ++

35:38

uh but it's still a little complicated

35:41

when it comes to in what order you're

35:43

calling the constructors that we decided

35:45

we we don't want to deal with that it's

35:47

a complex algorithm it's hard to explain

35:50

let's just get rid of the state and

35:52

interfaces and only have method bodies

35:54

and I think it was a good compromise

35:56

especially given that Java ended up in

35:58

the same place it was easier to

36:00

integrate yeah so Scala was a big

36:02

influence uh C was a very big influence

36:05

uh extensions

36:07

of course and we learned quite a lot

36:08

from how C# compilers do things. Uh

36:12

there there was also one particular

36:15

trick that makes uh Cotlin syntax a lot

36:18

nicer, nicer than Javas and nicer than

36:20

Scalas that we learned from C#. It was

36:22

actually my colleague uh who worked on

36:25

the C# ID who told me about this which

36:28

is basically a super programmatic thing

36:30

they do in C#. There is like when you

36:32

call generic functions,

36:35

you use uh angle brackets.

36:37

>> Yeah.

36:38

>> Uh inside an expression, but the thing

36:40

is that there is no such thing as angle

36:42

brackets. There is less and greater.

36:45

>> Mhm. Yeah.

36:46

>> Right. And and the parser can easily get

36:48

conf confused and think that this

36:50

expression since we're not in a type

36:51

context, it's an expression context.

36:53

This expression is a comparison. It's

36:54

not uh an inequality, right? It's it's

36:57

not a call. And this is mathematically

37:00

unresolvable. It's it's an ambiguous

37:03

grammar. Yeah, look, you can't do

37:05

anything about it. And uh the way other

37:07

languages handle this is Java, for

37:09

example, when you're passing uh type

37:12

arguments to a call, it has to be after

37:14

a dot. So you say collections dot angle

37:17

brackets. Yeah. The

37:18

>> function name.

37:19

>> Really awkward.

37:20

>> Kind of weird.

37:21

>> Yeah.

37:22

>> Uh and the way Scala deals with that,

37:25

they use square brackets for types. And

37:28

then arrays can't use square brackets,

37:31

so they use round brackets,

37:34

which is unfamiliar. Like it's not the

37:36

end of the world. Scala is doing fine,

37:38

but still like and C uses angle brackets

37:42

because there's a hack in the parser

37:44

that basically disambiguates ad hoc and

37:47

we did the same or something very

37:49

similar and it just works and the syntax

37:52

is very familiar and very intuitive and

37:54

we're very happy about when you read it.

37:56

I as a as a person I never get confused

37:58

like this is not a smaller sign like I

38:00

know it's a yeah so most of the time

38:03

it's not a practical problem um yeah and

38:05

it's then there is a way to dismbiguate

38:07

if if you like so C# was a big influence

38:10

groovy was a big influence as well jet

38:12

brains used um groovy for uh build

38:15

scripts and there were incredibly useful

38:18

patterns in in the groovy syntax that

38:20

they call builders which is not about

38:22

building programs but you know building

38:24

objects and Uh this is what inspired

38:27

something fairly novel that we did in

38:30

Cotlin which was types builders where we

38:33

had the same syntactic flexibility or

38:35

almost the same syntactic flexibility as

38:37

Groovy but it was all typed and we could

38:40

make sure that all the arguments matched

38:42

and so on so forth. So all that side

38:45

basically was inspired by how groovy

38:47

people did this and reworked into a

38:50

typed setting. And this is why we have

38:52

for example extension function types and

38:54

this is why we have um dangling lambdas

38:57

and other things that are actually very

38:59

nice syntactic constructs. So yeah many

39:02

many things uh came from different

39:04

languages. A less known language called

39:07

gou I think uh it was what inspired us

39:10

to do smartcasts.

39:11

>> What are smart casts?

39:12

>> Oh yeah. So

39:15

I I think smart costs are one of the

39:18

nicest things a compiler can do to a

39:20

developer because it's a very common

39:23

situation when you say if x is string so

39:28

you do an instance of check basically

39:30

then do something with x. The annoying

39:33

thing is that in a lot of languages you

39:36

have to cast x to string again like

39:39

you've after you've done the the if you

39:41

you know it's a string but then

39:43

>> you need to write it out again.

39:45

>> Yeah. So you've just done the check but

39:46

you have to say string again

39:48

>> to make the compiler happy. So smart

39:50

cast basically get rid of that. So that

39:53

cast gets figured out automatically.

39:55

>> So if string and then inside the bracket

39:58

you can now use it because it's a

40:00

string. Yeah, you can use it as a

40:01

string. And isn't it an easy thing,

40:03

right?

40:04

>> So nice.

40:05

>> Yeah, it's it's a very nice thing. Yeah,

40:07

it's a pretty complicated algorithm

40:09

because you know variables can change

40:11

values and the check that you've just

40:13

made can go stale and you know there's a

40:16

bunch of u algorithmic trickery around

40:19

this and you can't do a smart guess on

40:21

any expression has to be a certain type

40:23

of expression that can be stable enough

40:25

and so on so forth. But you know it's a

40:26

very nice thing and you can get rid of

40:29

so much noise in the code because like

40:31

all the code in the world is riddled

40:33

with this instance of cast instance of

40:36

cast. So we wanted to get rid of that

40:39

and it worked and it was fun to

40:41

implement.

40:41

>> What were things that you looked at

40:43

other languages

40:45

you considered maybe we should bring it

40:46

in but you after debate you're like no

40:49

let's just let's just leave this out

40:50

like not all of them obviously but some

40:52

of the big ones that kind of came close.

40:54

We had a design for pattern match in

40:56

Cotlin uh that was inspired by

40:58

functional languages like like Scal and

41:00

Haskell and and others. Uh but at some

41:04

point it was early on when I was still

41:06

working on the parser I just realized

41:09

that this is a huge feature. So when

41:12

when I was sketching it out on on a

41:14

piece of paper it looked like a very

41:17

useful thing you know and just another

41:19

feature in the language. But then when I

41:21

started working on the parts I realized

41:23

it's an entire language in size like you

41:26

have to create a parallel universe in

41:29

syntax for pattern matching I was like

41:32

okay this will be a lot of work let's

41:34

postpone it and then later on uh when we

41:37

were doing review for 1.0 Oh, or maybe a

41:39

little earlier than that. I just

41:41

realized that smart casts plus we have

41:44

something called the structuring

41:45

together they give us like 80% of all

41:49

the good things pattern matching can do

41:51

to normal developers. And then there is

41:54

another

41:56

group of developers that can be very

41:57

vocal which are mostly compiler

41:59

developers and people super into

42:02

functional programming. uh and they have

42:05

a point but that point is only relevant

42:07

to them when there are not very many

42:09

that we decided to not have pattern

42:11

matching back then and you know maybe

42:14

there comes a day that pattern matching

42:17

gets added to cotlin

42:18

>> and pattern matching is is it in in the

42:20

case

42:21

>> yeah it's

42:22

>> statement so you can have like a lot

42:24

nicer case statements a lot more

42:26

expressive ones right

42:27

>> yeah so generally uh so con has this

42:29

compromise where you have our version of

42:32

switch case which is called when and you

42:35

can have smart costs there. So you can

42:38

say like when my expression is a string

42:42

and then use it as a string or it is a

42:44

pair and then you can use it as a pair.

42:47

So that kind of gives you a lot of the

42:49

nicities of pattern matching but some

42:51

things you can't express like and you

42:52

know that was I think it was a good

42:54

compromise because it's a really big

42:55

feature. It's hard to design well that

42:57

will would be a lot of work on the

43:00

tooling side. So, you know, but maybe it

43:04

gets in the road map one day. I'm not

43:06

sure. Java is trying to get towards

43:08

pattern matching. So, we'll see. Maybe

43:10

they kind of make it more mainstream.

43:12

>> Why did you omit the infamous turnary

43:13

operator which is when you write out

43:16

something a question mark and a dot and

43:18

it confuses new developers every single

43:20

time if you've not seen it before.

43:22

>> Yeah.

43:22

>> Was it for readable reasons?

43:24

>> This is the saddest story I think the

43:27

design of Cotlin. I didn't realize how

43:30

much people liked it and yeah so so the

43:34

reason was uh so cotlin used this

43:37

principle from functional languages that

43:40

everything we can make an expression is

43:41

an expression. So if is not a statement

43:44

and cotlin is an expression and the

43:46

turnary operator is the sort of a patch

43:51

on the design on on C and other C like

43:53

languages that makes an if expression

43:57

basically and the logic was okay we have

44:00

if as an expression already can we just

44:02

get rid of this extra syntax construct

44:04

especially given that it's uh using very

44:08

precious characters like there is a

44:10

question mark and a colon and we might

44:12

find some other use for that. So we

44:14

decided to not have it. We used question

44:17

marks for nullable things and colons for

44:19

types and so forth. But it turned out

44:22

that if uh as an expression is pretty

44:25

verbose people don't like it and and

44:28

like I I resisted for some time and then

44:31

by the time I agreed it was too late

44:33

because you can't retrofit the turnary

44:36

operator and the current syntax in

44:37

Cotlin because it just doesn't agree

44:39

with how other operators are done. So

44:41

you're actually sad about it not being

44:42

there a little bit.

44:43

>> Yeah, it's I think in retrospect it was

44:45

a mistake because you know pragmatically

44:48

it's more use than harm to have it but

44:53

we just can't retrofit it.

44:54

>> What are some other interesting uh

44:57

features that you like about the

44:59

language that that you added that we

45:00

could just explain for those who are not

45:02

familiar?

45:03

>> Okay, so the the good ones there's quite

45:05

a lot of them. So one feature that

45:10

you know not is not a traditional kind

45:12

of language feature is Java

45:13

interperability. That's probably

45:16

the single thing we spend the most time

45:18

on. And I always say that you know if if

45:22

someone offers you a job to create a

45:25

system that interoperates transparently

45:28

with another huge system you don't

45:30

control, ask for a lot of money. It's a

45:33

very tricky deal to to to figure this

45:36

out.

45:36

>> Interpreter means that from cotlin you

45:38

can invoke Java and from Java you can

45:40

invoke cotlin and I mean you do a bunch

45:42

of work there but it just works in the

45:44

end as a developer you don't need to

45:46

think about it.

45:46

>> Yeah. So the idea is whenever you have a

45:50

Java library somewhere in the world you

45:53

can always use it from cotlin and it was

45:55

it was a big selling point uh because

45:58

you know if if you start as just a

46:00

language in a vacuum and you don't have

46:01

any libraries that's not a good start in

46:04

this direction definitely uh it was an

46:07

absolute requirement for cotlin but also

46:09

we had the requirement to go the other

46:12

direction in an existing project you

46:14

could just

46:16

uh rewrite what parts of your code from

46:19

Java to Cotlin and everything keeps

46:21

working and some libraries actually did

46:23

that and many projects started using

46:25

Cotlin bit by bit uh you know a lot of

46:28

people started with just writing tests

46:30

but then you know you you start adding

46:32

things uh in cotlin new things for

46:35

example and all the Java code around

46:37

that has to transparently use uh the

46:39

cotlin code so we put a lot of effort

46:42

into that and that was fun can you expl

46:46

explain to us as as engineers like you

46:48

know sounds like it was a freaking big

46:50

project

46:51

>> what what is the work right cuz from the

46:53

outside again I'm just being your

46:54

average developer where like all right

46:56

I'm invoking okay I I'm invoking a Java

46:59

class and things I can think of like

47:02

well maybe you know Cotlin or Java

47:04

doesn't support things in a certain way

47:06

or or maybe but I mean is it really that

47:09

hard what is hard tell me tell me I I'm

47:11

dying to know

47:12

>> so one thing to note here is that We

47:16

don't control the Java compiler.

47:18

So we somehow need to make it work so

47:22

that you in in your Java code you make a

47:26

call into something that only exists in

47:27

the Cotlin source and the Java compiler

47:30

somehow agrees to call it to begin with.

47:34

It's not a Java file. It doesn't know it

47:36

exists. So the way it actually works is

47:38

when we build a mixed project what we do

47:41

is we first compile all the cotlin code

47:44

and uh that can depend on the java

47:47

sources in the in the project. So we

47:49

have a java front end baked into the

47:52

cotlin compiler so we can resolve

47:54

everything in the java code and then we

47:56

produce class files so binaries for the

48:00

jvm that the java compiler can read. So

48:03

when Java compiles it takes Cotlin

48:06

sources as binaries and this is how it

48:09

works. So you know the we would have to

48:12

implement a Java compiler otherwise

48:14

fortunately Java has separate

48:16

compilation. So this works. So this

48:18

trick means that you know whenever you

48:21

have in your tooling like in in your ID

48:24

for example when you navigate from Java

48:26

sources to Cotlin sources has to be a

48:28

special trick. So someone needs to go

48:30

and teach the Java world to know about

48:33

cotlin world. Of course the ID doesn't

48:34

do the compilation to navigate. But in

48:36

in the compilation time we don't control

48:38

the compiler. So we we did our own ID.

48:40

So we could do something about the uh

48:42

Java tooling. But we couldn't do

48:44

anything about the Java compiler. So

48:47

that's trick number one. And then you

48:49

know when it comes to incremental

48:50

compilation it becomes even funnier

48:52

because Java incremental compilation is

48:55

a complex algorithm on its own. And now

48:56

we're incrementally compiling two

48:58

languages at once and that's fun. And

49:00

you know incremental compilation

49:01

algorithms are generally a very messy

49:05

very complicated heristic that you have.

49:08

So you know there are tons of corner

49:10

cases and stuff. So that's that's like

49:12

one example but then you know you start

49:15

making interesting new things in cotlin.

49:17

You need to expose them to Java. You

49:20

need to make sure that whatever fancy

49:22

thing you have, Java can actually

49:25

interoperate with that. And one example

49:27

there would be Cotlin. We figured out

49:30

how to make Java collections nicer in

49:33

Cotlin without rewriting the collections

49:35

using the same library. So Java

49:38

collections are what's called invariant

49:41

because they're all readwrite. So if you

49:43

have a list, it always has a set method.

49:45

>> Yep. And that's a little bit of a

49:48

problem because whenever you have a list

49:49

of object you cannot assign a list of

49:52

string to that and that's a little

49:54

annoying because you know you want to be

49:56

able to represent a list of anything and

49:59

that you need to play with

50:01

question marks wild cards and stuff like

50:03

that. It would be very nice if we had a

50:05

readonly list interface that doesn't

50:08

have a set methods and then there is no

50:10

problem in assigning a subclass a list

50:13

of subasses to a list of super classes

50:15

but this interface doesn't exist at

50:17

runtime right we can't just invented or

50:20

can we so we we actually can

50:22

>> no

50:23

>> and so in the cotlin compiler we have

50:25

this layer of trickery specifically for

50:29

Java collections where cotlin always

50:32

sees Java collection s like if they come

50:34

from the Java world they are read write

50:37

mutable collections we call them but

50:40

>> mutable right

50:40

>> yeah yeah yeah so so the Java

50:42

collections are always mutable or

50:44

>> platform mutable I I'll talk about that

50:46

later

50:47

>> uh but when you do it in cotlin you can

50:50

actually distinguish between readonly

50:52

mutable collections

50:53

>> and it's all very nice on the cotlin

50:55

side but then when java sees the cotlin

50:57

collections they are normal again like

51:00

when we expose them through binaries the

51:03

Java world always sees them as normal

51:05

collections. They're mutable for Java

51:06

and it's it's all right.

51:08

>> Okay. I'm I'm starting to see why it's

51:10

you said like you need a lot of money

51:12

for this because this is just one one of

51:13

many things but this itself sounds like

51:15

uh I don't know how you solve that.

51:18

>> Yeah. So so ju just to add a little bit

51:20

of detail to this. So the nice thing

51:22

about uh those predom collections is

51:26

that you can pass a list of string for a

51:28

list of object right wouldn't it be nice

51:30

if a cotlin method that takes a list of

51:34

list of any uh could accept a list of

51:37

string in Java but aren't we erasing all

51:40

the cotlin nice stuff we are but we know

51:44

that this list is actually what's called

51:46

covariant

51:48

so we can expose it to Java as a list of

51:51

question mark extends and not just list

51:54

of object. So you know it becomes

51:56

coariant for the Java Java world as well

51:59

and that's like one hack that makes it a

52:02

little more transparent and there's a

52:05

bunch of that. uh so you know so that's

52:07

another thing that we had to play with

52:10

but the biggest uh thing is of course

52:12

nullable types and actually we we handle

52:14

nullable types and these things with

52:16

collections kind of similarly which

52:19

makes the whole in typing layer of the

52:22

interop quite interesting

52:24

but basically so Java doesn't know

52:26

anything about nulls right and uh

52:29

>> well it knows about nulls but not not

52:30

about nullable types it does not exist

52:33

>> yeah Java doesn't know about nulls at

52:35

compile Yes.

52:36

>> So in terms of types, it's just not

52:39

represented. So technically every Java

52:41

type is a nullable type. And this is

52:43

where we started. We said, okay, so

52:45

Cotlin types can be not null and it's

52:47

very convenient. And when you have a

52:49

notnull type, you can just call a method

52:51

on it normally, right? But if something

52:53

is nullable, you can't just dreference

52:55

it. You have to first check for null and

52:57

then use it, right? Or there is a safe

52:59

call operator question mark. Well, just

53:02

propagate null if null is on the left

53:04

hand side. So we started with saying

53:06

okay all Java types are nullable which

53:09

is a conservative like very mathematical

53:10

way of treating this is correct right

53:13

>> yeah you you're not going to be wrong

53:14

with that

53:15

>> yeah and we we implemented that and we

53:18

started using it inside Jet Brains and

53:20

the feedback was horrible like your code

53:22

is plagued with those null checks and

53:25

you know that there shouldn't be there

53:26

because you can't express anything on

53:28

the Java side the right way and there

53:30

were like we had some annotations for

53:32

the Java side wasn't it was also brittle

53:34

not always worked because you know there

53:36

can be long chains and stuff and some

53:37

some libraries just don't have the

53:39

annotations and we struggled with that

53:40

for a long time and basically we

53:44

realized that this assumption that

53:45

everything in Java has to be treated as

53:47

nullable just doesn't work this this was

53:50

a turning point where we sat down and re

53:52

reimagined the whole thing and we worked

53:54

with uh great uh type theory type

53:59

practice I would say guy from I think it

54:02

was back then he was in in Pernell Ross

54:04

state. So Ross helped me figure out the

54:08

sort of mathematical side of uh how you

54:11

can represent those types that come from

54:13

Java and should be like we should be

54:15

aware of the that they they are from

54:18

Java and can possibly be nullable but we

54:21

shouldn't treat them as nullable because

54:22

it was very inconvenient and Ross put

54:25

together a very nice sort of calculus

54:28

about those and when we started

54:30

implementing it like all the nice things

54:33

are gone.

54:35

the the actual yeah the mathematical

54:38

beauty is completely gone from from from

54:40

all that and I think we took the general

54:43

idea of sort of splitting a type in two

54:45

and everything else is just very messy

54:48

industrial kind of thing that's not

54:51

sound but it works well

54:53

>> okay and interpretably sounds like it

54:55

was a journey but a necessary one how

54:57

long did it take and can you give me

54:58

just just a sense of of like how many

55:01

people working on it how much cuz I

55:02

think In traditional project we can get

55:04

a sense but I have no idea with a

55:06

language how does this work and how long

55:08

did you think it would take versus how

55:10

much it took.

55:11

>> Yeah. So so let's let's start with that.

55:12

So every time I was asked when we were

55:15

going to release cotton I would say one

55:17

year from now.

55:18

>> Yep.

55:18

>> And you know this is this is not a plan.

55:23

I had no idea. Had no idea. I also had

55:25

the illusion that the initial version I

55:28

was building was a prototype and we

55:30

would write everything. And I I'm sure a

55:32

lot of people out there have been there.

55:34

I think that prototype has been

55:35

rewritten more or less completely now,

55:39

but it took

55:41

six years, something like that. Yeah. So

55:44

maybe longer actually.

55:47

Uh yeah. So so I had no idea and I

55:49

always said like, okay, a year from

55:51

now's far enough. We'll probably be done

55:54

by then. Uh in practice, we we started

55:56

in 2010. Yeah. autumn of 2010 basically.

56:00

And we released in 2016, February 2016.

56:06

So, you know, it was a long time,

56:08

fiveish years.

56:10

And that uh you know, and in part it was

56:14

just because I didn't know how to manage

56:15

projects. And my initial team, the

56:19

people who worked full-time on the

56:22

project, I I looked up on GitHub to to

56:24

to verify that everybody who

56:29

almost everybody who joined Jet Brains

56:32

to work on Cotlin was a fresh graduate

56:35

because I used to teach and I had some

56:37

good students and I knew how to work

56:39

with students. And so basically

56:42

everybody on the team was a student

56:44

apart from a few veterans from Jet

56:46

Brains who were were helping not all of

56:48

them even full-time. So we started

56:50

getting experienced engineers on the

56:52

team a bit later. And you know to be

56:56

fair a lot of those people you know

56:59

people who are following Cotlin know

57:01

those names. people who are core

57:03

contributors who built out like

57:06

absolutely foundational parts of cotlin

57:08

joined as fresh graduates and they they

57:11

became great engineers but I think I've

57:14

I overdid it a little bit so it's great

57:16

to have you know younger people

57:19

have no fear and that's wonderful but

57:23

you know the balance was not right

57:25

>> and how big was the team initially and

57:27

then towards the release

57:28

>> so we started we started out basically

57:30

with four four people part part-time and

57:34

yeah we we went like that for maybe a

57:36

year or something so the initial

57:38

prototype was built like that and then

57:40

people started joining in by the time we

57:42

released I think it was around 25 people

57:46

or something and the team grew quite a

57:49

bit so by the time I left in 2020 it was

57:52

about 100 people on the team 70 of them

57:54

engineers

57:56

so it became a pretty big undertaking

57:58

>> can you tell us about the development

57:59

process inside a language I I I think a

58:02

lot of us are used to building you know

58:04

like services backend services or or

58:07

products or mobile apps etc. They

58:09

typically have a release process. How

58:10

does this work inside a language like

58:12

what is your release process and what is

58:14

the I guess best practices like do you

58:17

even do code reviews or or

58:20

you know like how can we imagine because

58:21

again it feels such a rare project.

58:24

There are people building languages but

58:26

not many of them.

58:27

>> Yeah. So, one peculiar thing about

58:30

building languages is what's called

58:32

bootstrapping. When you write your

58:34

compiler in your language,

58:36

>> oh, nice.

58:37

>> Which means that, you know, to compile

58:39

your code, you need a previous version

58:41

of your compiler and you better agree

58:44

with your colleagues which version it

58:45

is. It can be really tricky, especially

58:48

when you do things about the binary

58:49

format. And there is like quite a lot of

58:52

bootstrapping magic going on. And I

58:55

don't think it can reproduce the cotlin

58:59

uh builds from scratch because you know

59:02

if you just take a snapshot of the

59:04

cotlin repo you can only build that with

59:06

the cotlin compiler and I don't think we

59:08

kept all the bootstrap versions.

59:11

Now I it might not be really possible

59:14

without a lot of manual intervention to

59:16

rebuild all the sources from the very

59:18

beginning and reproduce all the versions

59:20

because sometimes you know we we had to

59:23

like commit a hack into a branch and use

59:26

that branch as a bootstrap compiler for

59:29

the next build and then throw the branch

59:31

away. So that was like a oneoff compiler

59:34

used to facilitate some change in in the

59:38

binary format or syntax or something. Uh

59:40

so that's a separate kind of fun but

59:43

generally I mean many many practices are

59:45

very similar like had code code reviews

59:47

pretty early on. It's my personal quirk

59:50

again that I like to talk to people. So

59:51

in code reviews I often just sat

59:54

together with someone and either they

59:56

reviewed my code or I reviewed theirs.

59:58

But this is you know I can't argue that

60:01

it's much better or or worse. It's just

60:03

how I prefer because I like talking to

60:05

people. So code reviews. Yes. And of

60:07

course we we had an you know an issue

60:09

tracker like everybody else. Ours was

60:10

always open so everybody can submit bugs

60:14

to the cause and bug tracker which was

60:16

very helpful. Uh it's hard to manage

60:19

because there will be like with usage

60:21

there will be a lot of bugs and a lot of

60:24

like feature requests and and all all

60:26

kinds of stuff but it's worth it. You

60:27

you have a communication channel. uh

60:30

release cadence is a very difficult

60:32

thing to figure out for such projects

60:34

because one big consideration you have

60:37

for languages is backwards

60:38

compatibility. In part, this is what

60:41

delayed 1.0

60:43

because we wanted to be reasonably sure

60:46

we can maintain compatibility as soon as

60:48

we call it 1.0. in part because it was

60:52

the expectation especially Java is

60:54

incredibly stable and very good with

60:55

that until Java 9 came about and also

61:00

Scala had a lot of trouble because they

61:02

were breaking compatibility a lot and

61:04

the community was struggling really so

61:07

we really didn't want to repeat that but

61:10

you know there turns out you can even

61:12

break compatibility Python 2 to Python 3

61:15

and survive so you know

61:17

>> barely barely survive

61:20

They're doing very well

61:21

>> now. They're doing well. Yes.

61:22

>> Yeah. So we we were really serious about

61:24

that. Uh but basically what it means is

61:28

you start doing interesting things like

61:31

deprecation cycles and so we we actually

61:34

invented an entire tool set for

61:37

compatibility management.

61:39

>> So before 1.0 we tried to help people

61:41

migrate. So we we had those milestone

61:44

builds. Embarrassingly, we had 13 of

61:46

those

61:48

and uh you know when we broke the

61:50

language in major ways we tried to

61:52

provide tools for automatic migration.

61:55

>> That's nice of you.

61:56

>> Which was I don't think it was a

61:58

standard practice in industry back then.

61:59

Now people are doing it more. So I'm

62:01

like very happy to have sort of

62:03

popularized this idea. And then when we

62:06

were preparing for 1.0,

62:08

We did a major review of everything and

62:11

took a year to sort of review all the

62:13

design and what we're doing is basically

62:16

trying to anticipate what changes we

62:18

might want to make or what new features

62:20

will require and to basically prohibit

62:23

things that might block that. So we

62:26

tried to make sure that the changes that

62:29

we were planning were guarded well by

62:32

compiler errors to make sure that users

62:35

don't accidentally write anything that

62:37

likes that looks like a new feature and

62:39

that was fun like we had design meetings

62:42

I think every day at some point

62:44

basically working on that like okay

62:46

let's outlaw this let's prohibit that

62:50

and we prohibited a lot of stuff

62:52

correctly and some stuff incorrectly uh

62:54

but you know generally really worked

62:56

out. So, so this compatibility thing was

62:58

was a big deal, but there's also a lot

63:01

of stuff that we didn't anticipate. So,

63:03

we had to figure out ways to manage

63:05

this. And there is something in Cotlin

63:09

um in the Cotlin compiler called message

63:11

from the future.

63:13

>> Mhm.

63:14

>> Which is basically

63:16

when in a newer version of a compiler,

63:19

you introduce something that the old

63:21

compiler doesn't understand. You have

63:23

different options. And one option a lot

63:25

of languages go for is the new kind of

63:27

binary is in is completely unreadable

63:29

for the old compiler. So the version is

63:31

higher. I don't read it. That's it. I

63:33

bail. But it's a little hard for people

63:37

uh then to to manage their versions

63:38

because new libraries new versions of

63:40

libraries come with the new compiler

63:42

expectations and you have to migrate

63:43

your entire project to do that. It's a

63:45

little annoying. And if what you're

63:47

adding is like one method that basically

63:50

invalidates the whole library for an old

63:54

compiler, that's not great. So what

63:56

we're doing, a newer compiler can write

63:59

something into the binary that tells the

64:01

old compiler, okay, this method is what

64:03

you can't understand, but everything

64:05

else is fine.

64:06

>> Oh, that's smart.

64:07

>> Yeah. So we call this a message from the

64:08

future and like it can provide some

64:10

details. So there's that and there's

64:12

also um the discipline of experimental

64:16

features which is incredibly helpful and

64:17

I am very happy to see other languages

64:20

doing it now and even Java does

64:22

experimental features now which is

64:23

wonderful.

64:24

>> Andre just talked about experimental

64:26

features in programming languages and

64:28

how that used to be rare back in the

64:30

2010s. What this reminded me is that

64:32

running experiments in production used

64:34

to also be rare. Not because teams did

64:36

not want to do it, but because doing it

64:38

meant building a lot of internal tooling

64:40

around it. Assignment, rollouts,

64:42

measurements, dashboard, debugging, the

64:44

whole thing. For a long time, only a

64:46

handful of companies really pulled this

64:47

off at scale. Companies like Meta and

64:49

Uber, which brings me to Static. Static

64:52

is our presenting partner for the

64:53

season. Stata gives engineering teams

64:55

the tooling for experimentation and

64:57

feature flagging that used to require

64:59

years of internal work to build. Here's

65:01

what it looks in practice. You ship a

65:02

change behind a feature gate and roll it

65:04

out gradually. Say to 1% or 10% of users

65:07

at first. You watch what happens. Not

65:09

just did it crash, but what did it do to

65:11

the metrics you care about? Conversion,

65:13

retention, error rates, latency. If

65:15

something looks off, you turn it off

65:17

quickly. If it's trending the right way,

65:19

you keep rolling it forward. And the key

65:21

is that the measurement is part of the

65:23

workflow. You're not switching between

65:25

three different tools and trying to

65:26

match up segments and dashboards after

65:28

the fact. Feature flags, experiments,

65:30

and analytics are in one place using the

65:32

same underlying user assignments and

65:34

data. This is why teams and companies

65:36

like Notion, Brex, and Atlassian use

65:38

StatSik. Static has a generous free tier

65:40

to get started and pro pricricing for

65:42

Teams starts at $150 per month. To learn

65:44

more and get a 30-day enterprise trial,

65:46

go to stats.com/pragmatic.

65:49

And with this let's get back to Andre

65:50

and experimental features in cotlin.

65:53

>> So we did quite a lot of work you know

65:56

when when you're doing something

65:58

experimental this is something that's

65:59

supposed to break and you want to

66:01

emphasize this to make sure that the

66:03

user is aware

66:06

that you know this is something we are

66:09

not promising to keep compatible. This

66:11

is something we're going to break. And

66:13

you know we we used to put the word

66:15

experimental and package names for

66:17

people to understand that this will

66:18

going to is going to be renamed and you

66:20

know warnings when you use language

66:22

features and we require like compiler

66:25

keys to enable language features and

66:27

stuff like that and kind kind of helps.

66:30

So we did quite a lot of that. So, so

66:32

all of this is an extra layer. Unlike a

66:34

SAS system for example, a compiler

66:36

leaves behind not behind but creates a

66:39

lot of artifacts that pin down its

66:43

history in the wild. There is source out

66:45

there and there are binaries out there

66:47

and you're guaranteed to encounter them.

66:49

Every time anyone hopes that no, this is

66:53

an obscure case. Nobody will ever hit

66:56

that. With enough users, you hit every

66:59

freaking case.

67:01

And this is so surprising and I I

67:04

discovered this fairly early on. I think

67:06

before 1.0 when we had a few thousand

67:08

users, I realized that if something's

67:12

possible, some person out there will

67:15

actually do it.

67:16

>> Now you you got 1.0 out. Can you tell me

67:19

how Cotlin grew in popularity when you

67:23

released it? What was your target

67:24

audience? And then how did Android

67:27

happen? Okay, so that's that's a

67:30

complicated story. Let's let's try to

67:31

not get off track because this is like

67:33

has a lot of side s side tracks to it.

67:36

So when we started Cotlin, we were not

67:38

really very aware of Android and I mean

67:41

we knew that there was a thing called

67:42

Android.

67:43

>> Kind of ironic.

67:44

>> Yeah.

67:46

>> From from now message from the future,

67:48

>> right? Yeah. So basically in 2010 we

67:52

were focused on the majority of Java

67:55

developers that was all about the server

67:58

side.

67:58

>> Yep. I can clear.

68:00

>> Yeah. So the the most money Intelligj

68:03

was making was on Spring users and you

68:06

know everybody knew that this was what

68:07

the Java platform was about by then. So

68:11

we were targeting

68:13

serverside developers basically and also

68:16

desktop developers because Jet Brains uh

68:19

had the the probably the last desktop

68:22

application written in Java or in at

68:24

least in swing. So and that that was the

68:27

target. It was initially not even a plan

68:30

to do Android

68:32

and codlin like got some usage for the

68:35

server side um and you know it's still

68:38

there and it's growing there not as fast

68:40

as on Android but still has some quite

68:43

some representation on the server side

68:45

but then a few years in

68:48

some person on the internet asked us

68:51

like whether cotlin works in Android and

68:54

I was like I heard Android uses Java the

68:57

cotlin should work. We never tried. Go

69:00

and try. And I think it was the either

69:04

the same user or a different user came

69:06

back and said like the tool chain

69:08

crashes. And it wasn't even the cousin

69:10

to tool chain. It was the Android tool

69:12

chain that crashed.

69:13

And you know, we looked into it and it

69:15

turns out that it's some um some some

69:19

tool in the Android tool chain that's

69:21

written in C that just fails with the

69:24

core dump and it's not very clear what's

69:27

going on. And we later figured it out

69:29

and it turned out that you know the

69:32

Android developers and the people who

69:36

built the Android platform, they

69:38

actually read the spec of the JVM unlike

69:41

the people who implemented the hotspot

69:43

VM because the hotspot VM I suspect came

69:47

before the spec. So it was the reference

69:49

implementation but it was actually

69:51

specified after it was built. So the

69:54

hotspot VM was super lenient to weird

69:59

things like that there would be like if

70:02

we put a flag on a class file that was

70:04

not allowed for classes hotspot wouldn't

70:06

care and would we ran everything on

70:09

hotspot and so we we thought everything

70:11

was fine but then the Android side those

70:14

were the people who actually read the

70:15

spec

70:16

>> and they actually implemented it. Yeah,

70:18

they would complain about everything and

70:20

this is why we used Android tool chain

70:23

as a testing uh environment basically

70:27

because you know this is how we could

70:29

get rid of stupid things in in our bite

70:32

code and they helped us a lot with

70:35

validating everything. But you know

70:37

there were some gotchas there and some

70:39

some legacy stuff nobody cares about in

70:42

the mainstream Java just you know were

70:45

faithfully implemented on the Android

70:48

Android platform that that was fun. So

70:50

you know and at some point pretty early

70:52

on I think I had this realization that

70:56

Android was a growing platform which to

70:59

me then I I don't think I had a much of

71:02

of understanding of you know dynamics of

71:05

markets then but to me it meant that

71:07

there will be a lot of new applications

71:10

and it's much easier to start completely

71:13

a new with a new language.

71:16

So I made sure at some point that we

71:19

worked well in Android. It was already

71:21

after the lawsuit. So you know the big

71:24

context to all this was that when Oracle

71:26

acquired Sun Micros they sued Google for

71:29

billions of dollars for using Java and I

71:32

think that is settled.

71:34

>> It it it was settled in some way. Yeah.

71:36

And then everyone could go on their own

71:38

way,

71:39

>> right? But uh it took years and years to

71:41

settle. Yeah.

71:42

>> So back then it was very much a thing

71:45

and you know so that dispute was

71:48

somewhere in the background.

71:49

>> Uh but yeah so so basically we we saw

71:52

that a lot of people on Android really

71:54

liked cotlin

71:55

>> they they loved it.

71:57

>> Yeah as soon as it was stable pretty

71:58

much. I mean I think for all the things

72:00

that you mentioned right like it was

72:01

just so much nicer than Java. Easier to

72:03

write easier to read lots of nice

72:05

features. So you know you use Android as

72:07

as a way to actually you know make sure

72:09

that Cotlin compiled correctly and then

72:13

why did it take off on Android? Yeah. So

72:15

the situation in Android was pretty

72:17

interesting because unlike Java uh

72:20

server side that you know is kind of

72:23

under control of the teams that develop

72:26

on it. uh in the case of Android there

72:30

are devices in the pockets of people

72:31

right and when you have and billions of

72:34

those devices and those devices don't

72:37

always update the virtual machine so

72:40

people in Android were basically stuck

72:42

with old Java

72:44

and even when Java started progressing

72:48

and for example Java 8 came out in 2014

72:52

it was very difficult to roll out this

72:55

new version of Java across the entire

72:57

Android ecosystem because it required

72:59

updates to the virtual machine and there

73:02

were workarounds and retro lambda really

73:05

helped and so on so forth but you know

73:07

there was still a lot of people stuck

73:10

with really old Java so Java wasn't you

73:12

know on par with cotlin or C# uh in 2014

73:17

uh but it still was much better like and

73:21

solved the major problem uh but it was

73:24

not available to the Android people So

73:26

there was a lot more frustration

73:30

with Java in the Android community and

73:32

also there was Swift on iOS.

73:36

>> Oh yeah.

73:36

>> Where you know it was a real example of

73:40

a big ecosystem transitioning from a

73:43

really dated language to something

73:45

>> really nice.

73:47

>> Yep.

73:47

>> And I think compounding these two things

73:51

were uh like the major factors. And also

73:54

I mean we we made sure that cotlin

73:56

worked well on Android. Also very

74:00

fortunately

74:01

at some point Google switched the

74:03

developer tooling from the Eclipse

74:06

platform to the Intelligj platform when

74:08

Intelligj was open sourced back in I

74:10

don't remember 2014 2013 I think or

74:12

something like that. So, you know, it

74:14

was we we had a nice plugin because uh

74:17

everything worked on the Intelligj

74:18

platform and the same plug-in worked for

74:20

Android and many other things like were

74:22

just very smooth. Well, very smooth.

74:25

There were a lot of bugs but um

74:28

reasonably smooth. So it felt like uh a

74:32

very good match and a lot of people

74:34

appreciated that and we really wanted to

74:37

somehow draw the attention of the team

74:39

at Google to you know maybe talk about

74:41

it or something and it just didn't

74:43

happen when so we released in 2016 and

74:47

there was you know we we had some

74:48

communication with Google in general but

74:50

there was no interest in that side

74:52

they're like okay we I guess we'll just

74:55

keep going as we do and some people were

74:58

already building Android applications

75:00

And well some people were building

75:02

production applications in cotlin before

75:03

we released 1.0 and you know uh kudos to

75:07

the brave people because they gave us

75:09

invaluable feedback but you guys are too

75:12

brave. Yeah. So, you know, it just grew

75:15

organically and when when we started in

75:18

the very beginning. Uh I set this

75:22

internal goal to myself uh that if we

75:25

get to 100,000 users, it's a success.

75:29

Like I've done well enough if it gets to

75:32

100,000. And of course, it's hard to

75:34

tell how many users a language has, but

75:37

you know, you can kind of estimate that.

75:40

And I think we were on track to get to a

75:43

100 thousand users during

75:46

2016 because it it was growing. It was

75:48

in the tens of thousands, you know, it

75:51

looked good. But then uh some people

75:53

from Google reached out and said they

75:55

wanted to chat and it turned out they

75:58

wanted to chat about announcing official

76:02

support for Cotlin at Google IO 2017.

76:07

that would be in like 3 months from the

76:10

time of that conversation. We were like,

76:13

"Yeah, sure. Let's do it. What do we

76:15

need to do?" And it turned out we we had

76:17

to figure out quite a few things, but we

76:20

managed. And I think it was a heroic

76:22

effort on the side of the Google team.

76:25

They did amazing things, impossible

76:28

things there. And uh I have good friends

76:31

um among them uh now. And it was like it

76:35

was really really close like we we could

76:38

have missed the deadline but we figured

76:39

it out and yeah on our side also we had

76:43

to make many things work and you know

76:44

figure out how we now interoperate with

76:47

Android Studio better and then you know

76:48

how do we set up processes and and

76:50

everything but there was like a big

76:52

legal thing around it. uh this is when

76:54

the column foundation was invented and

76:57

we had to design the protocols for

77:00

decision-m the cot foundation and uh you

77:03

know Google owned the trademark for

77:06

cotlin for one year because of legal

77:09

things it was basically a guarantee from

77:13

the jet brain side u until the

77:15

foundation gets set up uh so you you can

77:19

look up the public record Google was in

77:21

possession of the cotlin trademark for a

77:23

year, but then the foundation was set up

77:26

and was transferred to the foundation.

77:28

So, you know, it it was it was fun. Uh

77:30

it was pretty crazy time, but it was

77:33

amazing to see how happy people were at

77:36

Google IO when the announcement

77:38

happened. That was

77:39

>> and that usage must have skyrocketed.

77:41

You you probably blew past 100,000

77:43

pretty quickly.

77:44

>> Yes. Yes, we I think we went Yeah, we

77:47

probably got into millions that year.

77:49

This is what was basically like the the

77:52

moment happening and you know I knew

77:55

many years before that I knew that the

77:58

easiest way for a language to succeed is

78:00

to be part of a platform and you know

78:02

like C was part of Unix basically or

78:04

like C# was part of Windows or

78:06

JavaScript was part of the web platform

78:09

and I I knew that Cotlin had no

78:11

platform. So it was supposed to be much

78:14

tougher time for cotlin than for some

78:16

other languages but yeah the platform

78:18

came along somehow.

78:19

>> Jumping forward to a lot more closer to

78:21

today you you you have you left cotlin

78:24

in 2020 later you left jet brains. What

78:27

are you doing right now?

78:29

>> Yeah. So I'm also working on a language

78:31

right now but it's sort of a different

78:33

kind of language because the times have

78:35

changed and you know you can you can

78:38

look at it uh from a similar perspective

78:41

like in Cotlin we wanted to get rid of

78:43

boilerplate

78:45

we wanted to make programs more to the

78:48

point and less of a ceremony and I think

78:52

this is where we today we have a great

78:55

opportunity to do the same thing at a

78:57

different level

78:58

>> because of AI because of AI.

79:00

>> It's all because of AI.

79:02

>> Yes, AI is great because many things

79:06

that are obvious to humans are obvious

79:08

to LLMs as well, which closes this gap

79:12

between what the machine can understand

79:13

and what a human can understand quite a

79:15

lot, which means we might not need to

79:18

write dumb code anymore. That would be

79:21

very nice. So on the one hand uh you

79:24

know the the entire history of uh

79:27

programming languages is going from

79:29

lower to higher levels of abstraction.

79:31

We started with machine codes then

79:33

assembly was a step up actually assembly

79:36

language is a higher level language and

79:39

>> than machine code. Okay. Yeah.

79:40

>> Yeah. And and and then C was a high

79:43

level language back in the day. And then

79:45

of course like managed languages like

79:47

Java were a great step up and made

79:51

programming a lot more accessible and

79:53

and like teams could grow and you didn't

79:56

have to be a super competent programmer

79:59

to build working software and then you

80:01

know things like cotlin built on top of

80:04

um that success and we raised levels

80:06

some more but now we can do even better

80:09

in that so you can imagine uh like a

80:12

normal program some some application

80:14

code. A lot of the things in this code

80:17

are obvious to you and to me. So if if

80:20

you ask me to write this code, you don't

80:22

spell everything out. You explain what

80:24

the program needs to do and I can

80:26

implement it and it will work the way

80:28

you want. There there are, you know, it

80:30

depends on how detailed the

80:31

specification is, but you can tell me a

80:34

lot less than you would have to tell a

80:36

compiler.

80:37

>> Yeah.

80:37

>> Yeah. And so this is the point with code

80:40

speak. We want to basically shrink the

80:44

amount of information a programmer needs

80:46

to tell the computer to make the program

80:49

work. And from my current anecdotal

80:52

experience, you can shrink a lot of the

80:55

code about 10x

80:58

which means that you know a lot of

81:01

projects out there can be a lot smaller

81:05

and it will be a lot easier for humans

81:07

to deal with that and a lot easier to

81:09

read and reading is the most important

81:11

bit and a lot easier to navigate and it

81:14

becomes you know the essence of software

81:18

engineering when you are not like

81:20

dealing with the stupid compiler. You're

81:23

not restricted by that anymore. What

81:25

you're expressing is what only you know

81:28

about what needs to happen because

81:29

everything else the machine knows as

81:31

well.

81:31

>> So can you tell me a bit more on what

81:34

code speak is or what this language is?

81:36

Is it designing an actual like kind of

81:38

formal language just simpler? Is it

81:40

using of course we know that that AI and

81:42

LMS and agents can do all all the funky

81:44

stuff. Where is this? What is this?

81:46

>> Okay. Yeah. Yeah. So I'll I'll try to

81:48

explain this. So I think the best way of

81:52

uh thinking about code speak is it's a

81:55

programming language that based on

81:58

English. It's not a formal language or

82:00

not an entirely formal language but it's

82:02

a programming language. It's a language

82:04

that's supposed to be used by engineers

82:06

but it uses LLMs heavily and uh this is

82:11

like the way new languages will be

82:14

because you know you can think about uh

82:17

the ultimate language of today as a

82:20

program normal programming language that

82:22

uses an LLM as a library. You know there

82:26

was a time where npm was wonderful

82:29

because you know it's it's a huge

82:31

repository of all kinds of JavaScript

82:33

lie packet manager one of the biggest

82:35

package in the world. Right.

82:37

>> Right. Yeah. So you have a huge library

82:39

out there that you can all but now you

82:42

have an even better npm

82:44

>> the LLM that has seen all the code in

82:48

the world and if you're inventive enough

82:52

you can fish this code out of the LLM.

82:55

Yeah, you need to have to prompt,

82:57

>> right? Uh, and the trick is like it

82:59

would be really nice to have a

83:00

programming language that has the entire

83:02

LLM as a library or as as a bag of

83:05

libraries, right? The the trick is to

83:10

take anything out of an LLM, you have to

83:12

use natural language. So the query

83:14

language to this incredible database of

83:17

all the knowledge is informal

83:20

and there is no way at least known today

83:23

that you can make it formal. So

83:25

inherently this ultimate language of

83:28

today has to be at least in part

83:30

informal

83:32

and this is what we're working on. So

83:34

it's still in the air like how formal

83:36

can we make it and you know it's it's

83:39

not the goal to make it super restricted

83:42

but the goal is to uh leverage all the

83:44

power and support the user you know we

83:46

need to rule out stupid mistakes and

83:48

things like that and we're still working

83:50

on that but the basic idea is uh if you

83:54

instead of spelling out every line of

83:57

code and every bit of your algorithm you

84:00

can basically communicate intent the

84:02

same way I can communicate to you, you

84:04

will just get there much faster.

84:06

>> Mhm. So, one question that I asked Chris

84:09

Latner

84:10

uh was which I'm going to ask you as

84:12

well. You're talking about designing a

84:14

language for software engineers to build

84:16

software more efficiently, maybe more

84:18

concise and in a new way and it sounds

84:19

super exciting. But going to the other

84:22

side, we have LLMs. Do you think there

84:25

is a need to design a new type of

84:28

programming language for LLMs to use

84:30

more efficiently? That's a very

84:32

interesting question and I had a few

84:34

discussions about this. My position is

84:38

it's probably misguided

84:41

because of a number of things. So one to

84:45

get an LLM to understand some language

84:47

well you need a huge training set and

84:50

with the new language that training set

84:52

is not there. You can try to synthesize

84:54

it and so on forth but it's not going to

84:55

be as good as other languages. Like for

84:57

example, right now the newer languages

85:00

are just harder for LLMs than the more

85:03

established ones. Like any LLM writes

85:05

Python better than it writes Rust or

85:07

even Cotlin. Even the LMS who that write

85:10

Java very well won't write co cotlin as

85:12

well because it's not as present in the

85:14

training set because it's younger and

85:16

you know that there are ways around it

85:18

and I think the later models like added

85:22

some more codlin into the RL sets and

85:25

it's getting better but still like it's

85:27

pretty hard and so that's challenge

85:29

number one also challenge number two I

85:31

don't think there necessarily have to

85:33

has to exist a language that makes it

85:36

better because LLMs are trained on human

85:39

language. Their knowledge of programming

85:41

languages is part of that. Their power

85:44

is in having been exposed to all the

85:46

code in the world and it's existing code

85:48

and inventing a new language for that. I

85:51

don't know how promising that can be.

85:53

You can do another thing which is an

85:57

interesting research project. you can

85:59

sort of extract a language from an LLM

86:03

because you know internally it has some

86:05

intermediate representations of what's

86:07

going on and during inference and maybe

86:11

you can sort of extract a the optimal

86:14

prompting language it's not guaranteed

86:16

to be intelligible to humans and there

86:18

are some experiments that show that you

86:21

know you can create completely

86:23

unintelligible prompts that give the

86:25

same results as normal uh human prompts

86:28

but they will be shorter.

86:30

You maybe you can do something like

86:32

this. I don't know if it will help a

86:35

lot. But what we're doing in code speak

86:38

as part of uh working in this language

86:40

we need to really nail down this query

86:43

language capacity. And what we're doing

86:45

now is we're looking at existing code

86:49

and we're trying to find the shortest

86:53

English descriptions for this code that

86:56

can generate equivalent implementations.

86:58

Not necessarily character to character,

87:00

but they have to work the same way. And

87:02

that's an interesting exercise because

87:04

you need to figure out how to represent

87:06

the ideas in the code in a way that a

87:10

you can generate the same kind of code

87:12

but the ideas you represented were a lot

87:15

more compact but also this code you

87:19

represent it evolves over time. Right?

87:21

So you have a commit history on top of

87:23

this version and so going forward in

87:26

time you need to be able to represent

87:28

all the changes in your uh codespeak

87:31

version and you know you you need to

87:33

make sure that when it's a small change

87:36

in the original code the change in the

87:38

spec is smaller that's an interesting

87:40

challenge. So in this way we we're sort

87:43

of discovering uh codespeak as a

87:46

language or at least parts of it uh and

87:48

not really designing that bit of it. You

87:51

know it's it's a very new world in the

87:53

sense that you know nowadays if you work

87:55

with AI everything is a machine learning

87:56

problem and that means you know back in

87:59

the day if you had a very smart

88:01

algorithm on paper you could just

88:04

implement it and make sure it works.

88:07

Nowadays whatever algorithms you have in

88:09

mind you need a data set first of all

88:12

like if you don't know how to collect a

88:14

data set don't even start and yeah this

88:18

is what we're doing so just taking a a

88:20

look at you you are using these tools

88:22

day in day out I mean you're you're

88:24

building with them how do you think

88:26

programming as a whole or soft I'll say

88:28

software engineering is being changed by

88:31

by AI and how do you think the future is

88:34

starting to look especially think about

88:36

software engineers. You're a software

88:37

engineer yourself. You you've you've

88:39

written so much code in your life. And

88:41

are you still writing code?

88:43

>> Yeah, I'm writing some code. Yeah. And

88:45

uh

88:45

>> type sorry, typing or prompting?

88:47

>> Uh I'm doing both. I'm sometimes I'm

88:50

just typing. Um more often I'm typing

88:52

with cursor tab completion. I'm doing

88:55

quite a lot of prompting as well. And

88:57

you know that's a combination of of all

89:00

this. But cursors completion is really a

89:04

step up from traditional IDs. And I

89:06

think the intellig has something similar

89:08

now. So it's it's like a lot of coding

89:11

but in a very different kind of mindset

89:14

and a different tool set. Yeah. So in

89:17

terms of what's happening to

89:18

programming, I think we are in the early

89:20

days of the new era. So you know it's

89:23

only last year that figured out that

89:26

coding agents are good. Yeah.

89:27

>> Cloud code and and cursor agent and so

89:30

on so forth.

89:31

>> And I think this is a very early step.

89:34

Right now we are in this phase where

89:36

yeah a lot of people are in love with

89:37

agents and they can be very useful and I

89:40

use them every day. But I think there

89:42

are there are inherent problems with the

89:45

model with how you interact with a

89:48

coding agent because it's a one-on-one

89:50

chat and as a human I talk to the agent

89:54

in human language. So I'm uh

89:56

communicating my intent on a high level

89:59

and that intent gets translated into

90:02

code and it's the code that I commit to

90:04

the repo and it's the code that my

90:06

teammates will see. So my chat history

90:09

is lost.

90:10

>> A big problem.

90:11

>> Yeah. So so it turns out I'm talking to

90:13

a machine in a human language but the

90:16

way I communicate with my team is the

90:18

machine language. That's kind of

90:19

backwards.

90:21

Uh so yeah so what we're trying to do in

90:23

code speak is to elevate everything to

90:25

the human language level. So this is

90:27

this is where we start. We say okay we

90:29

have this incredible tool we can prompt

90:31

agents to implement code for us and we

90:34

are just picking it up. So I think a lot

90:37

of teams haven't yet realized how

90:40

difficult it is to review all the code.

90:43

And I've talked to people who are like

90:45

maybe we can just not review this code.

90:48

I'm like, "Yeah, I mean, you can for a

90:52

couple of days and then it just

90:54

collapses."

90:56

And I I think a another big theme uh of

90:59

today is that we'll be doing a lot of

91:03

testing and it like you may not need to

91:06

review the code if your tests are really

91:08

good.

91:08

>> You need to verify it, right? That's

91:10

what you're saying is and verifying

91:11

might not mean reviewing,

91:13

>> right? So,

91:14

>> or it could not mean

91:15

>> Yeah. depending on on the domain of

91:17

course you you might get by without

91:20

reviewing the code as much but being

91:22

sure somehow either reviewing the test

91:24

or somehow else making sure that your

91:26

tests are good. That's a trend and and

91:28

we are putting a lot of effort at C code

91:30

speak into automated testing and making

91:33

sure the tests actually check the right

91:36

things and that they check all the code

91:38

and all that stuff. That's very

91:40

interesting computer science and also

91:43

it's now a question of especially in the

91:45

case of code speak and I think for other

91:47

agents as well like yeah reviewing code

91:50

can be too much but can we present the

91:54

tests we generated to the user in a way

91:56

that actually verifies that we did what

91:58

what was to be done. It's tricky. some

92:02

tests will be just very long and tedious

92:03

to read and you know but we're working

92:05

on that and that's that's what where we

92:09

are and I think we'll we'll see a lot of

92:11

development in terms of power of the

92:13

models and we'll get some quote unquote

92:17

obvious things implemented in agents for

92:20

example the agents are just starting to

92:22

use like language servers and basically

92:25

all the stuff that we've always had for

92:28

code is not very utilized And you know

92:32

if you compare like ID integrated link u

92:35

ID integrated agents like cursor or um

92:39

juni at jet brains you have a lot of

92:42

like code navigation capability and and

92:45

you know databases of uh code is indexed

92:47

and you can navigate it very quickly.

92:49

You can find things very quickly. When

92:51

you run cloud code for example it might

92:53

not have that and use gp and it will be

92:56

as successful but take a lot longer and

92:58

burn a lot more tokens. So you know I

93:00

I'm sure this year uh all these tools

93:03

come to most agents and we'll have a lot

93:06

more sophisticated scaffolding around

93:08

the models. So that's that's one thing

93:11

but then uh you know my question is

93:13

always what's going to happen sort of in

93:16

the end game or in further future and

93:18

there it's it's very hard to predict and

93:20

we can assume that models will become

93:23

much smarter but important thing is that

93:26

humans will not.

93:28

So one thing I know about the future and

93:30

it's hard to know the future but this

93:31

thing I do know about the future humans

93:34

will be as smart or as dumb as they are

93:36

today. And if we have incredibly smart

93:38

models

93:39

uh what we will be doing is constrained

93:42

by how humans are and and this is one of

93:45

the reasons why I'm working on code

93:47

because a tool for humans not for

93:50

models.

93:51

>> Yeah.

93:51

>> And humans I know I can build a tool for

93:54

them. I guess an important footnote is

93:57

that many people will say things like

94:00

you know if we have smart enough models

94:02

they can review the code themselves and

94:04

they can test the code themselves but

94:07

then my question would be like who's

94:08

making the decisions here you know if if

94:12

all the software engineering work is

94:14

done by models it means humans don't

94:17

have any say in that and this has a name

94:19

it's called technological singularity

94:21

>> when humans are not making decisions it

94:24

means We're not in charge.

94:25

>> Yep.

94:26

>> So this is not the future I'm building

94:28

codes speak for. Nobody should build any

94:31

projects for that future. In that

94:33

future, we're gone. Your projects don't

94:34

matter. But so my assumption when I'm

94:36

talking about the future is that the

94:38

tech technological singularity is not

94:40

happening. And so the the basic

94:43

assumption is humans are in charge. And

94:45

if humans are in charge, it's their job

94:48

to communicate intent. So we have to say

94:51

what kind of software we need to build.

94:52

And when we're talking about like

94:55

serious software, it's always complex.

94:58

There's no way there's some very simple

95:00

thing that will make a difference.

95:03

>> And when we talk talk about this

95:04

complexity, this is what our jobs will

95:07

be like dealing managing this

95:09

complexity, figuring out what we

95:11

actually need to do. And this is

95:13

absolutely engineering. There is no way

95:16

someone can tackle huge amounts of

95:18

complexity without an engineer mindset.

95:22

It can be called software engineering,

95:23

can be called something else. But you

95:25

will have to do it. You will have to

95:28

navigate this complexity, organize this

95:30

complexity, figure it out. And I'm not

95:31

talking about the complexity of many

95:34

many layers of implementation.

95:37

Maybe not. Maybe that is what's called

95:39

accidental complexity. Something that

95:41

happens uh like or arises from how we

95:44

implement systems. But there is also uh

95:47

essential complexity. How we want it to

95:49

behave is complex enough that we need to

95:51

figure it out. And this is why I believe

95:54

there will be teams of engineers working

95:56

on systems like today. Maybe they will

95:59

be a lot more powerful teams. Maybe

96:01

fewer people can deliver a lot more

96:04

software. Yes, but still teams of people

96:07

working on organizing complexity. And

96:09

this is what Codespeak is for. Going

96:12

back to where we are today with what the

96:14

models can do today,

96:16

what do you see with developer tools? It

96:19

feels a little bit of a wild wild west

96:20

right now. Very much so. I mean there's

96:22

a lot of you know obviously with clot

96:23

code with cursor w with with with others

96:25

but what are areas that you you think we

96:28

will see we will have to see new

96:30

different better tools to to actually

96:33

just catch up with with how we can

96:34

generate and what parts feel the most

96:36

messy and the most interesting

96:38

especially because at cotlin you have

96:40

and the team has built so many tools for

96:42

developers

96:43

>> right so I think uh as I already

96:45

mentioned this year will be the year of

96:48

making developer tools available to

96:50

agents And there are some technical

96:52

challenges, but you can figure it out.

96:54

The people will be doing that. Uh

96:56

there's also a surprising advantage to

97:00

using a good UI for your agent. It's

97:03

very nice to have everything in in your

97:05

terminal in one sense, but then you can

97:08

have a lot better user experience if

97:11

it's a dedicated environment. And the

97:14

terminal tools, especially cloud code,

97:16

are amazing. And it's it's a complete

97:19

breakthrough of what you can do in a

97:21

terminal. But generally you you can do

97:23

better in a specialized environment. So

97:25

I think we'll see more of uh this

97:28

integration into development

97:29

environments or just uh new development

97:31

environments built from the ground up to

97:34

work with agents primarily. So that is

97:37

an important thing. Uh since we are

97:40

putting a lot more emphasis on review,

97:42

uh there should be new tools for review

97:44

and I think we can do better than what

97:46

we're doing now. in many respects. I

97:49

don't expect many breakthroughs in

97:52

testing this year because it's hard. I'm

97:54

I'm doing it right now. It's hard. It's

97:56

not going to happen this year. But maybe

97:58

some advances uh will arrive this year.

98:01

But generally I think the the big lesson

98:05

of the last couple of years is that all

98:08

the things that were quote unquote

98:10

obviously needed and you know the the

98:13

idea of connecting agents to developer

98:16

tools was absolutely

98:19

the trivial thing to think of two years

98:22

ago. But they take a long time to happen

98:25

because it's hard and you know nobody's

98:27

in this industry is lazy. like

98:29

everybody's working their asses off but

98:32

it just takes time you know you you need

98:34

to figure out the basics before you can

98:35

do advanced things so uh you know all

98:38

the straightforward ideas will get

98:41

implemented at some point I

98:42

>> I think there's been this massive jump

98:44

with with AI especially over the winter

98:45

break where where the coding agents the

98:47

the CLIs have become a lot more capable

98:49

and I know so many developers who are

98:51

actually just prompting most of their

98:53

code if not all of it is just a massive

98:55

massive jump I don't think we've seen

98:56

anything this fast I see a lot of

98:58

engineers is scared because it can shake

99:01

you to the bone. You know, it took 10

99:03

years to get really good at coding and

99:04

the writing the code part feels that

99:06

it's kind of going out, you know, the

99:08

trash can. You you yourself have been

99:10

coded for a longer time. What would your

99:12

advice be for developers who are feeling

99:15

like this that they're feeling, you

99:17

know, it it it is scary. I think we and

99:19

I I I talked with with some folks, a lot

99:21

of people message me as well. How are

99:23

you thinking about this specifically

99:25

these these last few months? It's really

99:28

hard to give advice. There there are a

99:30

few ideas I can share. So one thing is

99:33

there's a lot of hype and a lot of it

99:36

gets to the management and a lot of

99:38

people make suboptimal decisions but

99:41

that will go away. Uh so you know

99:44

there's there's like more and more news

99:47

about people not hiring junior

99:49

developers for example. This is dumb.

99:51

>> It's stupid.

99:52

>> This is dumb. This is not going to stay

99:54

for long. I mean, it's hard to tell how

99:56

long this can go on, but people will

100:00

figure out that they need new people in

100:02

the industry and a lot of other things

100:05

can be really stressful in the moment,

100:07

but some of them will be rolled back.

100:09

So, that's that's one thing. Another

100:12

thing, it's absolutely worth it uh to to

100:15

invest your time into learning these

100:18

tools and getting good at it. There's a

100:21

lot of skepticism around uh in the

100:23

developer community about how useful it

100:25

actually is and you know I tried it on

100:28

my project it's then it's no good. There

100:30

is quite a bit of skill to using these

100:32

tools. Unfortunately it's not super

100:35

formalizable. Uh at least so far nobody

100:38

figured out a really good clear way of

100:40

communicating how to do it well. But

100:43

there are people who can do it much

100:45

better than others. They not always can

100:48

articulate why their prompts work

100:50

better, but you know, you can learn it.

100:52

You can get a lot better at it. And you

100:54

know, not necessarily believing everyone

100:56

on Twitter, you know, some people claim

100:58

crazy things, but uh you can be very

101:01

productive with these things when you

101:03

use them well. And it's absolutely worth

101:05

investing into that. And yeah, so as as

101:08

I mentioned before, in the future, it

101:11

will still be engineers building complex

101:14

systems. So keep that in mind. It's not

101:17

like we all go to nothing.

101:19

>> And for for new grads, people coming out

101:21

of university, what would your advice be

101:23

for them who are like determined like,

101:25

"All right, I actually want to be a

101:26

standout engineer. Maybe with these

101:28

tools, I can do it faster." What would

101:29

you advise them to focus on either

101:31

skills or experiences to get?

101:34

>> I guess it's it's a matter of uh what

101:36

your inclinations are. If you can just

101:39

become incredibly productive and put out

101:41

a lot of working code that is like

101:44

really robust and you can evolve it for

101:47

a long time, get good at that. And and

101:50

like there is a lot to be done there. Uh

101:52

if you can or like to do like harder

101:56

things, go into the most hardcore things

102:00

you can and get good at that because it

102:04

will be your rare expertise. It will be

102:06

marketable. Even if that very thing goes

102:08

away, you will just become a lot smarter

102:10

through that. So, you know, generally

102:12

like if you have any inclination in

102:15

looking under the hood and figuring out

102:17

how things work, go as deep as you can.

102:20

As a younger person, you have a lot of

102:21

mental capacity for that. And this helps

102:24

a lot. You become a very good expert in

102:27

very wide fields just through, you know,

102:30

drilling down on many things.

102:32

>> That's closing. I just wanted to do some

102:33

rapid questions. I just ask and and you

102:36

shoot what comes next. What is a

102:39

favorite tool that you have? It can be

102:41

digital. It doesn't have to be digital.

102:43

>> Well, I love my AirPods. They're they're

102:46

incredibly convenient. They fit under my

102:48

ear muffs. Well, another tool would be

102:50

ear muffs. Earuffs.

102:52

>> Incredibly good.

102:53

>> Yeah, I saw you wearing it. I'll I'll

102:55

take that one. Ear muff. And what's a

102:56

book recommendation that you recommend

102:58

and why?

102:59

>> There is this classic that's been

103:01

recommended across the tech community

103:02

for many years. Uh, it's called Zen and

103:05

the Art of Moycle Maintenance.

103:07

>> I heard that recommended.

103:09

>> Yeah, it's a very good book. I mean,

103:12

there is a part of it that's about

103:14

technology and how to deal with the real

103:16

systems and and others, but it's also a

103:18

very good novel. I really like it.

103:20

>> Well, Andre, thank you so much. This was

103:23

very interesting and I think inspiring

103:26

as well.

103:27

>> Thank you very much. It was great a

103:29

chat.

103:30

>> It was great. Thank you. The thing that

103:31

struck me with most from this

103:33

conversation with Andre was his

103:35

observation about how we work with AI

103:37

coding agents today. You talk to an

103:39

agent in plain English. It generates

103:41

code. You commit the code. But that

103:43

conversation, your actual intent, it

103:45

disappears. You communicate with the

103:47

machine in human language, but we're

103:49

your teammates in code in machine

103:51

language. Whether or not code speaks the

103:54

answer, what is sure that we're missing

103:56

an intent layer? And someone is going to

103:58

figure out how to preserve it. If you

103:59

enjoy this episode, please do share with

104:01

a colleague who's been thinking about

104:02

where programming is headed. And if

104:04

you're not subscribed yet, now's a good

104:05

time. We have more conversations like

104:07

this one coming. Thank you and see you

104:09

in the next

Interactive Summary

Andre Brela, creator of Kotlin, discusses its origin, design philosophies, and evolution. Kotlin emerged from the need for a modern, pragmatic language in the Java ecosystem, addressing Java's verbosity and stagnation. It pragmatically borrowed ideas from Scala, C#, and Groovy, focusing on features like null safety, type inference, and seamless Java interoperability, the latter proving to be a massive and complex undertaking. Initially targeting server-side, Kotlin gained immense popularity on Android after Google announced official support in 2017, catapulting its user base into the millions. Andre's new project, Codespeak, is an English-based programming language for the AI era, aiming to reduce code verbosity by expressing intent, leveraging large language models as a core component. He believes engineers will continue to manage essential complexity, while new tools will emerge for testing and code review in this evolving landscape.

Suggested questions

6 ready-made prompts