Podchaser Logo
Home
Supporting Your Code, README vs Wiki and Test Coverage

Supporting Your Code, README vs Wiki and Test Coverage

Released Monday, 1st May 2023
Good episode? Give it some love!
Supporting Your Code, README vs Wiki and Test Coverage

Supporting Your Code, README vs Wiki and Test Coverage

Supporting Your Code, README vs Wiki and Test Coverage

Supporting Your Code, README vs Wiki and Test Coverage

Monday, 1st May 2023
Good episode? Give it some love!
Rate Episode

Episode Transcript

Transcripts are displayed as originally observed. Some content, including advertisements may have changed.

Use Ctrl + F to search

0:00

You're listening to Coding Blocks, episode 209.

0:11

Is that edited in post, or is that real? I'll

0:15

do it again. You want me to do it again? No, that's

0:17

OK. There

0:19

it is, 209. All right, subscribe

0:22

to us on iTunes, Spotify.

0:24

No, just kidding. Spotify, Stitchify,

0:27

wherever you find your podcasts. Visit

0:30

us at codingblocks.net, where you can find

0:33

show notes, examples, discussion, rants,

0:35

links, whatever, stuff, social

0:37

stuff. There's things there. Yeah.

0:39

I don't have the lungs that Outlaw

0:42

has, so I'm just going to stick with

0:44

the short words. Send your feedback,

0:46

questions, and rants to our comments at codingblocks.net.

0:49

Email the old way. You can go to

0:51

slack, codingblocks.net slash slack,

0:53

and do it the new way. How

0:55

crazy is that? Will you send me an inter-office

0:58

communication? On

1:00

Slack, please. You can follow

1:02

us on the Twitters, at codingblocks.

1:05

And we should probably sign up for our Blue Sky account. I'm going

1:07

to do that right now, if I can. Waitlist.

1:09

And also, codingblocks.net, you can find

1:11

other social links at the top of the page. With that,

1:13

I'm Joe Zack. I just feel like elongating

1:16

it. I'm Michael

1:19

Outlaw. He's

1:21

practicing for his, he's going

1:23

to start doing events at,

1:26

it's no longer the Georgia Dome. It's Mercedes-Benz Stadium,

1:28

right? Oh, yeah. Yeah, there we go. Yeah, me

1:30

and Tay Tay, I think, are performing tonight.

1:33

I like it. Yeah. I like it. So

1:35

with that, I'm Alan Underwood. Not going to

1:37

be doing any events.

1:39

I did see a sign, because she's

1:41

in town, right? So I don't know if you saw

1:43

this, the billboard where, Atlanta's

1:46

often referred to as ATL, the airport

1:48

code. And it said A-TAY-L.

1:50

And I have a hard time saying it every time, A-TAY-L.

1:52

I

1:54

mean, dude, that lady has

1:58

such a cult following, man. And like

2:01

didn't people go crazy when,

2:03

when a ticket master had problems with

2:05

her concert? Like there was like just

2:08

a mutiny because of the Taylor Swift

2:10

debacle.

2:11

Well, I think there was other things that

2:14

play there though. Right? Like, where

2:17

like tickets have been pre sold

2:19

beforehand or something like they, there are not enough available

2:21

or something like there was, there was other craziness involved

2:23

there, but yeah, she definitely has an extreme

2:26

following for sure.

2:27

So I heard she's in town and they expect

2:29

a hundred thousand people

2:31

to be in town this weekend. They're like,

2:33

if you have something to do in town, you

2:36

either need to get there at two o'clock in the morning or

2:39

skip it. Well, what's also worse

2:41

though, too, I don't know if you know, but miss

2:43

Janet, if you're nasty is in town Jackson.

2:46

Yeah, both. Yeah. Cause her, cause I think

2:48

her show got delayed

2:50

because of them are overlapping.

2:52

Yeah. Yeah. Yeah. So they're both

2:54

overlapping now. Yeah. That's

2:57

you think the people would play these things out better,

2:59

but you know, the funny part about that is that's

3:01

probably because they thought there was no way the

3:04

Atlanta Hawks. Yeah. I've

3:08

seen them play. Yeah.

3:11

We got this. We got it. It's okay. Fine.

3:15

It'll work itself out. Just trust me. It'll be fine. We're

3:17

going to take a gamble on this and it's going to

3:19

pay off dividends. It's amazing.

3:22

So, Hey, uh, real quick,

3:24

we did a outlaw myself. We had a

3:26

chance to go meet with Jamie Taylor.

3:28

If you don't know him,

3:30

he does the.net core podcast. If

3:32

you're into.net, definitely go

3:34

check that out. He's been doing that one for years. They've

3:37

got, he's also got another one that he does

3:40

with, uh, uh, James

3:42

and Zach and they do

3:45

tabs and spaces. That one's also very entertaining.

3:47

It's very much like the style of the show that we're doing

3:49

today, where we're just talking about random

3:51

topics.

3:53

And then he's also got one about video

3:55

games called waffling Taylor. So if

3:57

you haven't checked out any of those, go check

3:59

them out. Jamie is an awesome dude. I

4:02

had a good time catching up with him. We

4:05

even, we even talked a little bit about work code

4:07

stuff.

4:08

Um, so, you know, everything from, you

4:11

know, just

4:12

what's life like to, Hey, what

4:14

are good development practices?

4:17

And you gain Java cakes.

4:19

We did not get any Java cakes. I feel like

4:21

I got a job cakes. I got cakes.

4:24

Man. Hey, those things are actually

4:26

interestingly good. They're not real food. I don't

4:28

think, but they're

4:30

pretty tasty. You know what I forgot to ask him

4:32

and I'm

4:33

going to ask him now because I've

4:35

always wondered like, because

4:38

his handle on Slack is GA prog

4:40

man. And I always thought like when,

4:42

when I first saw it like years ago, I just

4:45

assumed like, Oh, he's a programmer. He's

4:47

a guy who's a programmer lives in Georgia.

4:50

That was my immediate like reaction

4:52

to that name. And then,

4:55

but wait, he lives where no, not

4:57

like, so like, cause he's

4:59

overseas, right? So I've always

5:02

been curious, like, Oh,

5:03

what, what does it mean? Do you

5:05

guys know?

5:06

I have no idea. I mean, maybe it's gap.

5:09

Rog man instead of Georgia.

5:12

It's the capital G capital P capital

5:14

M. So yeah, it's

5:16

G G a prog man.

5:18

Yeah. So, so maybe he'll, he'll fill us

5:20

in here.

5:21

Yeah. I forget. He told me once cause I asked the

5:24

exact same question in the exact same way. And he told

5:26

me, and that was years ago. It's

5:28

gone now. And if the a

5:30

was this was capitalized, I would assume

5:32

it would be like, you know, a per like a code level, like

5:34

general availability kind of like release type

5:37

reference.

5:39

So I'm confused. So yeah, Jamie,

5:41

let us know. I forgot to ask you. I'm sorry. Yeah. Good

5:44

stuff. But yeah, it was really nice to catch up with him.

5:46

Um, he's an awesome dude. If

5:48

you, if you get a chance and you like podcasts,

5:50

definitely go check his stuff out. Yeah,

5:52

it was awesome. And Alan definitely picked a great

5:54

place for us to be able to hear everything that was said to you.

5:57

That was a thousand percent.

5:59

Yeah.

5:59

Totally by choice. Totally by choice.

6:02

We ended up at the Hard Rock and what

6:04

was it? Maybe third grade class

6:06

or something? I think it was, yeah, there was definitely like

6:08

a third grade retreat going on there,

6:11

you know, field trip to the Hard Rock Cafe

6:14

and they were singing every song that would

6:16

come on as loud as they could,

6:18

but only like the parts they know. So it was so hilarious.

6:21

Yeah, YMCA. Because like the YMCA would come on. They

6:24

knew the alphabet part of the song, but you

6:26

have to be on that and it like, it

6:28

plays kind of quiet.

6:30

I mean, we're talking like 130 decibels, right? It

6:33

was, it was louder than a football stadium.

6:36

It was crazy. It was

6:39

the real insanity of it was

6:41

when they left

6:42

just how quiet you could hear a pin drop

6:45

and it was like, Oh wow. But

6:48

by that time your ears are ringing, so it didn't matter.

6:50

Yeah, it was, it was fun. But hey, it

6:52

did give us a chance to actually eat our

6:54

sandwiches and stuff in between. Right. Well,

6:57

in fairness, I didn't say how big the pin was that dropped

7:00

that you could finally hear. So that's

7:02

right. Oh man. So

7:04

yeah, good time.

7:05

All right. So this on the show,

7:08

yeah, on with the show, this particular episode,

7:10

we're kind of just going to talk about some things.

7:12

This is more water cooler style and

7:15

one that has sort of bugged me

7:17

because it seems that this

7:20

is always the case. If you

7:22

wrote a piece of code, does that mean that you are

7:24

the one that has to support it and own it forever?

7:27

Is that how things are supposed to work? Well, wait,

7:29

Mick, because clearly based off of your

7:31

tone, I'm assuming you are thinking of

7:33

like in a business setting, not

7:35

like code you wrote on your own for

7:38

a freelance project or open

7:40

source project. Yeah, that's fair. I guess

7:42

if you do it for an open source project, you kind

7:44

of do it on it. But yeah, I'm

7:46

talking about, well, even if it was open source

7:48

project, it would depend on how open source, like,

7:50

you know, if it's on

7:52

your own private Allen Underwood repo, that's

7:54

open quote, open source. That's different.

7:57

But if it's like, oh, I contributed to Kubernetes.

7:59

Yeah, I think they'd almost treat it different,

8:02

right? Like if you were working on just a huge open

8:04

source project, then you're just, you're

8:06

nobody, right? Like you just

8:08

contributed some lines of code. But it

8:11

worked. It seems like if you,

8:13

it doesn't matter how big or small this thing

8:15

is that you create, like, I

8:18

mean, we've all done it, right? Like we've all written

8:20

something, and

8:22

from the most minor

8:24

things that go wrong with it to the most

8:26

major, it's like everybody's

8:29

like, oh, well, that's Alan's.

8:31

Well, worse than that, you know that we're all

8:34

guilty of, well, Alan wrote that, you

8:36

should probably go ask him.

8:38

Yeah, and I think the idea is that it's faster and easier

8:40

for him because he's more familiar with it, even if

8:43

it's been a break. But the downside is, is like

8:45

the longer you've been somewhere, like you just get stuck, you're

8:47

like saddled with these things that you worked on

8:49

years ago that no one else is touching, and it

8:51

just makes the problem worse where now no one's familiar

8:53

with it five years later,

8:55

and it's like even harder for them to

8:57

get into.

8:58

You know, it's funny, you know, you said we're

9:00

all guilty of it, and we all are, right? Everybody

9:03

who's ever programmed to anything is guilty of this.

9:05

But I feel like

9:08

I really try my best not to go

9:10

on poke the person that did something.

9:13

Like, I mean, I have

9:16

tons of examples, but I

9:18

will try and get stuck before

9:21

I like go knock on

9:23

somebody's door, right? And

9:26

I feel like most people don't do that.

9:28

I feel like most people, they're like, hey, this thing,

9:31

it's throwing this error. I'm like, did

9:33

you search the code for that text and

9:36

see what happened? Like, no. And

9:38

the reality is, if it's been more than

9:41

a few weeks, that's what I'm gonna have to do.

9:43

You know what I mean? Like, I

9:45

don't remember the logic flow to get

9:47

to this exact point, so. Hey, do you

9:49

remember verbatim says, bit of code

9:52

that you wrote three and a half years ago? Because I'm

9:54

getting this obscure error. It's

9:56

error 8,000, one, two, three, minus

9:58

four divided by PI. Do you remember what

10:00

that means? Yeah,

10:03

I mean, or hey,

10:05

this thing didn't start. Do you know why

10:07

it didn't start?

10:09

Cause I wrote it for Windows 95. That's

10:12

right, that's right. Why are you still bothering me? And

10:15

you know, here's the worst part. And this is, I think

10:17

this is the part that drives me the most insane,

10:21

is you can do your level best

10:23

to make it so that people don't

10:25

have to come to you for it, right? So

10:28

you can write wikis, you can have read

10:30

me's in the code, you can do everything that

10:32

you possibly can. Information

10:36

goes to die, that's the place.

10:38

Yeah, I mean, we've joked about this before, but I

10:40

totally believe it. The wiki is the place

10:42

that information goes to die. Well,

10:45

there's also one other benefit of wiki is you can

10:47

passively aggressively throw it at people.

10:49

So like, they'll ask you, which would be like, I

10:51

answered that, I guess you haven't read my wiki.

10:54

You know, it's right here. That's so

10:56

amazing, because that's exactly what Jay-Z

10:58

does. Because he's not

11:01

a,

11:01

he doesn't have a combative

11:04

personality. He's not confrontational

11:06

at all, yeah. At all, right? Like, you

11:08

can't create a fight with Joe, but

11:11

he will definitely drop wiki leaks on you.

11:14

That always makes me giggle a little. You mean, wiki

11:17

books. That's right. Yeah,

11:19

if Joe wrote it, it's complete.

11:22

Here you go, half of this is wrong, but

11:25

not this part. I try

11:27

not to be passive-resident, I try to just do it helpfully

11:30

and try and encourage people to write in

11:32

a wiki. But every time I say it, I'm like, oh man, I

11:34

sound like such a swarmy little something.

11:37

No, you don't. The way you said that, though,

11:39

it's almost like you could substitute

11:41

the technology there or a word

11:43

there, and it would sound even as hilarious

11:46

as what you said, where it would be like,

11:48

sounds like you don't even subscribe to my newsletter. Yeah,

11:51

exactly. It's

11:53

like, if you listen to episode 206 of

11:56

Coding Blocks, you would know. Yeah, that's right. Read

11:58

my blog. That's right.

11:59

You don't, you know, though,

12:02

the

12:02

Wiki versus the read me, I mean, we've

12:04

had this discussion in the past too.

12:07

I love the read

12:09

me in line with the code.

12:12

I love it at the root. I'll never have

12:14

too many read me's. No, totally. Like

12:17

put them in every module, right?

12:20

There should be the baseline one that is, Hey,

12:22

this is how you get up and running. This is how

12:24

you get things set up for your environment, blah, blah, blah.

12:27

Nobody has to go find a Wiki, right?

12:29

Like they don't have to know what to search for in the Wiki.

12:32

They have the code. They can open it. And

12:34

then every sub module, put a read

12:37

me in there. If there's anything that

12:39

if anything, that's probably the one,

12:41

the one place where I think I get frustrated

12:44

is,

12:45

you know, there'll be all these things to start

12:47

up a thing. And this, I guess this is why people come

12:49

buggy, right? Like, Hey, I see you have

12:51

this command line runner and there's these 12 options.

12:54

I don't know what they do. Right. But

12:56

that the read me, put it in the read

12:59

me. I'm a strong

13:00

fan of information

13:03

about the code should live

13:05

with the code and iterate with the

13:07

code. So it should be a read me in

13:10

the repo next to the code.

13:12

Like if it's about how to use this thing, how

13:14

to run this thing, you know,

13:16

like that, like what you just described, that's

13:19

in a read me next to the code. If

13:21

it's, Hey, here are the 18 environments,

13:24

you know, like information

13:26

about them or architecturally,

13:29

like how, you know, we're doing

13:31

things like that might be in a Wiki. Sure.

13:34

Fine. But things about the code live

13:36

with the code. I agree. Yeah.

13:38

You can do images and videos and stuff and link those in there

13:41

too. There's not, I think it's still a case for a

13:43

Wiki. Like there's reasons like meeting notes, things

13:45

like that. Sure. Stuff

13:47

like that, like schedules and stuff like all that stuff is nice

13:50

to have in Wiki and it's easier to link. Like it's hard

13:52

to link from one read me to another. Oh,

13:54

you know, you move it and it doesn't update all the links, you know,

13:57

stuff like that. But that was one thing I was

13:59

going to call out though.

13:59

is that you can, I don't know, I was

14:02

talking about like have like the parent read me and then

14:04

like sub-module read means, you can have

14:06

read means that are like linked to other read means,

14:09

you know, like GitHub will interpret that.

14:11

Yeah, it doesn't like, or even Visual Studio Code

14:13

will.

14:15

Yeah, it just, and you can do the whole control click.

14:17

It just, it doesn't, it doesn't like automatically

14:19

update if you move a read me or something, you know. Sure.

14:22

Yeah, it's rare. That's not a reason

14:24

not to do it. Yeah, true. I

14:27

will say we, you do

14:29

end up moving directories and stuff a lot more

14:31

than what you'd think as you start figuring out

14:33

better patterns and things, especially when you

14:36

move to new languages, right? Like if you

14:38

lived in a Java world forever and you went to Python, you're

14:40

probably gonna do things in a non-Python-y way

14:43

at first and then you're gonna realize the error of your

14:45

ways, so. Yeah, but I mean like what

14:48

I am not a fan of is

14:51

let's say that you have a repo

14:54

and to

14:57

get that thing running requires,

15:00

say, some number of steps, right?

15:02

Beyond just compiling, right? Because maybe there's

15:05

environment variables you need to set or

15:07

authentications that you need to already have sorted

15:10

out or whatever, you know, but

15:12

if you put that stuff over in a wiki,

15:15

then like as that code is iterating

15:17

and changing, well, the

15:19

instructions in that wiki, which version

15:21

of the code do they refer to, right? Because

15:25

they didn't, you know, it's not like they're

15:27

linking to a specific commit. They're just like generally

15:29

this is how you do this thing. But

15:31

if you put it in with the readme, then

15:35

maybe as you check out different branches or

15:37

different commits or tags or whatever,

15:40

maybe the instructions change with

15:42

that particular version of the code. And so that's

15:44

why I prefer things about

15:46

the code living with the code.

15:48

Yeah, I agree with that completely. And I would

15:50

say also get into the habit

15:53

of,

15:54

as you make changes with the code, think about,

15:56

hey, is there anything in the readme that needs to be updated

15:59

to support...

15:59

right for that very reason because it

16:02

does version right like if you check out on last

16:04

week's branch of the code It should have a different

16:07

read me if something was changed

16:09

on significantly for the new week's code. So It

16:13

is a fantastic way to let other

16:15

developers help themselves as they're

16:17

going through things

16:19

So PR is MRs too. It's a good chance

16:21

for someone say like hey I see you changed arguments,

16:23

but you didn't change the read me like that's not gonna

16:25

happen with a wiki. That's a great point Yeah

16:27

for sure

16:29

So yeah on on the thing of

16:32

should you support the stuff you work that

16:34

you created should it be yours forever? I

16:37

personally don't think so. I think

16:39

Do your best to make it to where people

16:42

can

16:43

can find information on it by the read

16:45

me via wiki You can link to a wiki

16:47

from the read me, right?

16:50

Try and make it to where they they can and then

16:53

passive aggressively send them the read me like

16:55

it'd be like hey Um, here you

16:58

go

16:58

So I don't know. I feel

17:01

like we should be better about everybody

17:03

spreading out the support and Understanding

17:06

of things so that you don't have one single

17:08

bottleneck on anything I feel like

17:10

Joe sends out the wiki links, you know

17:13

And and I'll send out like here's a link to the

17:15

read me because I love how

17:17

like github Azure DevOps They all will do

17:19

this where like they will interpret the markdown

17:21

for you You know so you can see this pretty

17:24

view of it in in the browser And

17:26

so I'll send those links out. I

17:29

do this question like how does this work or how

17:31

to use this or like? Well, what does that parameter mean?

17:34

Here's

17:34

the read me. Yeah, you know

17:36

that's interesting because I used to I

17:38

used to like send the path

17:40

to the file on my system, you know,

17:42

like Repository

17:45

whatever and over time I was like,

17:47

you know what exactly what outlaw just said I

17:49

know that this thing is formatted pretty in

17:52

in github or if you have an on-prem

17:54

get or whatever So I'll actually go find

17:56

the link to the file directly for the

17:58

branch directly

17:59

And then that way they go straight

18:02

to it and there's no questions. Well,

18:04

maybe this is a tip of the week then for you, because

18:06

in Visual Studio code, you don't even need to

18:08

find anything. You can just right click on it and say

18:11

open or copy remote path,

18:14

file path, and it'll give you the URL

18:16

to the repository version of that file.

18:18

Oh, that's good. I didn't know that. That is

18:21

tip of the week material right there. Yeah.

18:23

So you, and you can get like, if

18:25

you wanted the relative path. So like you were saying,

18:27

like how you would, you would previously give

18:29

them like the, uh, a link, you

18:32

know, a directory path based

18:34

on the repository. So like, Hey, wherever you have the repository

18:36

cloned, this is where you would find the file. You

18:38

can do that too.

18:40

But if you know the file, like in

18:42

that type of situation, I'm like, you know, command

18:44

P type in the file name, then the

18:47

explorer tree on the left automatically navigates

18:49

to the file. I right click

18:51

on the file, copy remote URL, boom,

18:53

paste that into Slack. There you go.

18:55

That's my passive aggressive version of Jay Z done

18:58

in a read me fashion.

18:59

I love that. I know

19:01

that works with the get hub. I wonder if that works for like other,

19:04

other sourcing or other like

19:06

source code repositories. Like it's get hub, you know, it's

19:08

like, it's, it's not just that path, right?

19:10

You know, like get hub.com slash org

19:13

name slash repo. And then it's like, it would be based

19:15

on the repo or something. Yeah. But

19:18

there's like, there's that little thing that you need to, there's like that, the

19:20

branch name and then the tree, right? There's

19:23

like some other word in there. I'll look it up, but

19:25

it's not just, uh, uh,

19:27

I don't think it's blob. I thought it was

19:29

like on this tree, but

19:32

it's not, uh, it's not like a standard URL. There's

19:34

not like a standard for get

19:36

website hosting paths.

19:39

Um, yeah, I mean, it could

19:42

be right. It might be, uh,

19:45

specific to, to

19:47

get hub. I

19:49

guess where this existed too under Azure DevOps,

19:51

but both of those would be Microsoft products.

19:54

Maybe there is some standard convention.

19:57

I just assumed it was based off of the. the

20:00

.get folder, like it knew how to

20:02

traverse that repository.

20:04

Right.

20:08

And now you're just like, oh, swap in remote name

20:10

here.

20:12

But maybe I'm wrong.

20:13

Still a good tip.

20:16

Yeah, so there's my quasi tip of the week

20:19

because Joe had to go and knock it down with a wiki.

20:22

Or a wiki, that doesn't work like that,

20:24

Michael. Yeah, I just like

20:26

to be a jerk. That's a good Joe impersonation, right?

20:29

That sounded just like him too. Yeah, totally,

20:31

totally not. Totally

20:33

not, wait, what? All

20:36

right, so. That was hashtag nail day, what are you talking

20:39

about? Nailed

20:41

it. That's hilarious. All

20:44

right, so here's another one that

20:46

I was wondering

20:46

what you guys, like just

20:49

your thoughts on this. So

20:51

there's always something that comes

20:54

up that's a work item

20:57

that is not super

20:59

appealing, right? Like it's

21:02

work that seems like it's not gonna

21:04

be fun. It's not, it

21:07

has to be done. Do

21:09

you raise your hand for that to take

21:11

one for the team? Knowing

21:14

that you're trying to do something for the greater good?

21:17

Like what are your

21:19

feelings and why are your feelings?

21:23

I think sometimes, I think some of that work

21:25

is like really important even though it's not

21:27

fun. But and it's, you

21:29

know, you should volunteer if you've got the space for

21:31

it. But you'll see like over time, like there's certain people that will just

21:33

never volunteer for stuff like that. And I think

21:36

that's not right either. So I think, you know, maybe

21:38

that's the conversation with the manager or something and be like, look, I've

21:41

taken the last couple of ones for the team. We need to spread this

21:43

out.

21:45

Okay, I'll

21:46

bet you, I'll.

21:48

I mean, I'm just thinking about from my own

21:50

past experience where like, I

21:52

mean, I feel like I've absolutely done that in

21:54

the past, you know, others

21:57

might argue that, but.

22:02

I just kind of view

22:04

it as like, I think

22:07

though the examples that are coming to

22:10

mind though, like I like empowering

22:13

other people like that, that,

22:15

that multiplication kind of factor, you

22:17

know, where I did something for the

22:19

team and now because that

22:21

like

22:23

everyone else is going to be able to like benefit,

22:25

you know, greatly from it, you know, kind of thing. So

22:30

because the kind of things that are coming to mind, like when you mention

22:32

them, like, oh, DevOps is

22:34

definitely like, I feel like this is definitely

22:37

a DevOps thing, right? Like where you take one for the team

22:39

and you're like, okay, I did this thing. I

22:41

made it better for us. And you know, I

22:43

put the work in, but like we all benefit

22:46

from it kind of thing. I mean,

22:48

I know that's not what you were talking about, but as definitely

22:50

like an a take on it. DevOps

22:53

can definitely feel that way. I'm talking about

22:55

more like,

22:56

Hey, there's a project that needs to be done. Everybody

22:59

thinks that the success rate is going to be garbage.

23:04

You know, you're working with stuff

23:06

that is hard to work with

23:08

and maybe even working with teams that

23:11

don't really even want to deal with it. Like,

23:15

but it needs to be done. Yeah. I

23:17

think like the, the bigger one though is like when it comes

23:19

to, Hey, here's an old bit of

23:21

technology and we need

23:23

to, we don't want to rewrite it. We don't want

23:26

to change it, but we need to like add a feature or update

23:28

something on it

23:29

and nobody wants to take it because

23:31

they're all like, well, I like to work on

23:33

the shiny new thing, not on that

23:36

turd. Yeah.

23:38

So, I mean, yeah. What are your thoughts

23:40

on that?

23:41

Yeah.

23:43

I'm of the, yeah. I'm

23:46

with Joe. Like, if it needs to be done, I will

23:49

do it. If that's what it's asked of me.

23:51

You know what I

23:52

mean? Yeah, totally. So

23:54

it's funny that all three of us think very

23:56

similar on that. I think that might be why,

23:59

why we are.

23:59

of the type of developers we are.

24:02

I think, uh, you know, I've definitely

24:04

taken them for the team. You know, like, here's

24:07

this thing that nobody wants. It's

24:10

like, all right, I'll do it.

24:12

But I do think what Joe said

24:15

is really important. There are some people that will never

24:17

raise their hands for that work.

24:19

And

24:20

it's not right that some

24:23

people always get tasked with doing the dirty stuff,

24:26

you know? So you got to figure

24:28

out a way to balance that out with a team to make

24:30

sure that you don't have one person

24:32

always stuck in the mire while other people

24:34

are always getting to do the fun stuff or, or

24:37

maybe it's not even fun. Maybe it's just the not

24:40

taxing stuff, right? Like there's some stuff that's

24:42

just taxing because there's

24:44

a, there's a super tight deadline. And,

24:48

you know, it may be that's the other thing,

24:50

right? Like it may not even be hard. It's

24:52

just that, Oh, this has to be done. And it has to

24:54

be done soon. And so it's going to be a grueling

24:57

type thing to get, to get through or

24:59

maybe it is a tight deadline,

25:02

but it's also like mentally

25:04

grueling. Right. Yeah. Yeah.

25:06

I mean,

25:07

it's okay, I think to take those

25:09

on occasion, but you also have to balance out

25:12

the mental health aspect of it too. Like there's some

25:14

things that'll just drag you down and it, and

25:17

it's hard to come up out of that rut sometimes. So

25:19

yeah.

25:21

Um,

25:24

here's the other thing to it.

25:26

Sometimes there are pros to doing that,

25:29

right? And the pro might be

25:32

you've created a trust with, with

25:34

your team or your management that

25:37

they know that you're one of the people that's a go-to

25:39

person. Um,

25:41

but that may also create the con

25:44

because they know that

25:46

you're the person that they can go to

25:48

to get these things done. And so they've built that

25:51

trust and they're going to lay, they're going to lean

25:53

on that trust over time. You know, so

25:57

yeah, that's

26:00

People problems are the worst problems.

26:02

They're the hardest. They're the hardest to solve. They

26:05

really are. Yeah

26:07

So yeah, I don't know I

26:09

mean, I guess for anybody out there doing

26:11

these type of things, you know, there are benefits

26:14

to it, but

26:15

But definitely try and balance it out

26:17

with with other people on the team who can who

26:19

can do those things

26:25

Yeah, I mean You

26:27

build good karma there You

26:29

do at least you hope you do you you hope

26:31

you are Yeah, it's

26:33

it's seriously. It's one of the tougher things

26:36

that I think

26:37

as a developer you deal with

26:40

ever is Like man,

26:42

I know this is gonna suck real bad Really

26:46

really want to raise my hand and offer to do this So

26:51

I don't know somebody's got to or somebody's gonna

26:53

point you out You remember like you'd sit in class

26:55

and teachers like hey, is anybody know the answer

26:57

to this? Nobody raises their hand and eventually

27:00

they're like, all right. Well you outlaw Tell

27:03

me oh you were asleep. All right. Um,

27:05

wow. Wait way to go I'm

27:07

like, I'm not even paying attention in your

27:09

fictitious example. That's right I

27:13

mean I saw it happen Yeah,

27:17

I mean that's what eventually happens

27:20

and you know what you know What really stinks about

27:22

that is sometimes the wrong person

27:24

will get paid for it Everybody starts grumbling

27:26

about it. And did you like hold up?

27:29

How's everybody upset? Like nobody volunteered

27:31

to do it?

27:32

So yeah

27:37

All right, so we got

27:39

to get here before Joe does because otherwise things

27:41

go sideways quick If

27:44

you haven't already left us a review you

27:47

can find some helpful links at Code

27:49

in box net slash review. We do greatly

27:51

appreciate reading those. They do put

27:53

a small interface. They mean a lot to us I

27:56

mean over the years you guys really like we

27:58

are in our tenth

27:59

year right now. Right.

28:02

That's crazy. And over those years,

28:05

nine plus years, we,

28:07

some

28:08

of the stories that, I mean, they're

28:10

truly, you know,

28:12

they, they truly play the heartstrings, right? Um,

28:14

I think I said that phrase, right? Um, but

28:18

yeah, that's what it was. Dang it. It

28:21

was so close. Um,

28:23

but yeah, I mean, there've been some really, some

28:26

really, uh, heartfelt messages that we've

28:28

received over the years. So we do really appreciate

28:30

those and, and I appreciate and thank those people

28:33

for reaching out and sharing those stories with us. So, uh,

28:35

if you have something you want to say, uh, you

28:38

can find some helpful links at coding blocks.net slash

28:40

review. And with that,

28:42

we head into my favorite portion of the show.

28:45

Survey says,

28:47

Hey, you know what we haven't had yet.

28:49

Nobody's like named their kid after coding

28:51

blocks or anything. So I guess, you know, we still

28:53

have room to grow. Okay.

28:56

I mean, maybe,

28:59

maybe not. I call my kids block heads all the time. You don't.

29:01

Oh yeah, probably.

29:04

Uh, well McGee sounds pretty good,

29:06

right? Wait,

29:09

you wanted them to name in your

29:12

world. The naming of the kids would be

29:14

after the three of us. So

29:16

somebody wouldn't name their kid

29:18

Joe Zach. Yeah. No, like outlaw underwood.

29:21

And then whatever your last name is, outlaw

29:23

under Zach. Smith

29:27

out under Zach, out under

29:30

Zach. There we go.

29:33

This is a terrible idea. Nobody please do this

29:36

all day. No, actually

29:38

I endorse this. I'm

29:40

looking forward to hearing what could come out

29:42

of this. This might

29:44

be the most amazing thing. This is the most

29:46

amazing idea we've had yet. I'll

29:49

get a tattoo of don't

29:52

believe them. Yeah. For real. Where's this

29:54

visual studio? I

29:56

can't show you. I'm

30:05

trying to even remember like why you promised

30:07

to get a visual studio tattoo.

30:09

Visual studio ever came out on Mac.

30:12

Oh, that's right. It's

30:14

crazy. Like Microsoft was so different back then 10

30:16

years ago. Yeah, and then it did. Yeah.

30:20

Yeah. So yeah, you still owe us a tattoo.

30:23

So yeah, I'm not, I'm not going to listen to your,

30:25

uh, your one about the names.

30:28

All right. Well, uh, like I said, we

30:30

head into my favorite portion. So this is

30:32

episode two oh nine. According

30:35

to, to that Co's trademark rules of engagement,

30:37

which we now all understand what I mean

30:40

by that. Yes. Uh,

30:42

it is Alan's,

30:44

uh, turn to go first. So

30:46

let me grab a winning streak. It's

30:54

awesome to create that, that

30:57

winning streak. All right. Well,

30:59

I'm going to give you an easy one to start with it. No bias

31:01

here, but you know,

31:03

uh, name a three

31:05

letter word that starts with the letter Z.

31:10

Really? That does not start

31:12

with Z. Sorry. All right. This

31:16

was, uh, this is from California, right? Do

31:20

these questions have an origin like that? Like

31:23

that in the show is shot. Like,

31:25

I don't know if these came from, so if it,

31:27

if it included the, you know, the UK and like,

31:30

oh, cause I didn't say said, oh, but I'm going

31:32

to go with, uh, I'm going to go

31:36

to California word. I'm going to go zap

31:38

zap. Okay.

31:39

Yep. I think

31:41

I got this one. Okay.

31:44

So number five answer on the

31:46

board.

31:48

This one's gross. Zit.

31:51

Oh yeah. 13 number four. Really

31:54

high Zen. Yeah.

31:57

Four 13. Okay. Good.

31:59

over here so I can see these two things at the same

32:02

time like a smart man would do.

32:06

Number three answer on the board is

32:09

Zap for 15. Pretty

32:12

good. Number two answer on the board

32:15

for 18 points, Zip

32:17

and rounding it out for 40 is Zoo.

32:20

Wow, look at that. All

32:22

right. So. That's

32:25

not even a commanding lead. I don't feel good about this. So.

32:28

It's California by the way. Figured it out.

32:30

Here you go Joe.

32:33

You ready for this one? There's no Zed. Yep.

32:36

Name an office supply

32:39

you'd use to pick

32:41

food out of your teeth. Jeez.

32:49

That is harsh. I

32:51

mean I

32:52

would just use paper.

32:54

A piece of paper? Yep. Okay.

32:57

If you're gonna get stuck in there then you're gonna need

33:00

the paper clip to get it out. Paper.

33:03

Yeah. That was my second choice.

33:05

Okay. So yours is paper. Alan

33:07

yours is. The paper clip. Paper

33:10

clip. All right. So

33:13

number six answer on the board is

33:15

Tack pen or pen

33:17

for six. No. No,

33:19

no, no. Letter opener for

33:22

number the fifth answer for eight. Fourth

33:25

answer is Staple. Nine. That

33:27

worked. Pen or pencil was the number three

33:30

answer for nine. That's really dumb.

33:32

These are pencils that make it worse right?

33:34

Right.

33:35

Now it's like why are your teeth graphite colored?

33:40

Number two answer on the board

33:43

for 12 points paper

33:45

or an envelope. Really?

33:48

You can get an envelope. Imagine getting a paper cut on your gum

33:51

between your teeth. Oh man.

33:54

Remember like you remember when we were kids did

33:56

you guys have like what's grosser than

33:58

gross? Do you remember this? kind of thing. Yeah.

34:01

Like that's what the paperclip cut between your teeth

34:03

reminded me of. Yeah. Like what's more painful

34:05

than painful. Okay.

34:08

Number one answer on the board

34:10

for 53 points

34:13

is paper. I feel a little bit

34:15

better now. Got some breathing

34:17

metal. I can't do the metal.

34:20

All right.

34:21

You don't

34:24

accidentally swallow a paperclip. So

34:31

Alan, uh, as his tradition,

34:33

you get to pick

34:35

the next and final question. Your

34:37

choices are name

34:40

a weather condition. That would be a good

34:42

name for a wrestler. Name

34:45

something that has the word super

34:48

in it, or name

34:51

something that parents can't wait for their

34:53

children to get out of the

34:57

third one. Okay. Okay.

35:00

Let me out of. Yeah.

35:04

So I don't even care if I lose this one. This is

35:06

pretty fun. Okay. Go the house, the

35:08

house. I

35:13

hope you're kidding around when you just said that. Oh,

35:26

that doesn't even want me here. That's

35:30

the right answer. But

35:30

I think I know the number one answer. Yeah.

35:33

Diapers. Diapers. Oh, that's a really

35:35

good answer. All right. All right. All right.

35:39

Number four answer on the board

35:41

and the lack of

35:43

options here should give you some indication. Number

35:46

four answer on the board

35:47

for four points.

35:51

Teens slash puberty. Okay.

35:54

Yeah. I get that. That's not a bad answer. Oh my God.

35:57

I house that number one. Right. I'll

36:00

take diapers any day of the week. Yeah,

36:03

here's the misconception because Joe said diapers,

36:05

but diapers are like, you know,

36:07

like every couple hours there might be

36:10

like, oh, I gotta go change the diaper. No big deal,

36:12

right?

36:13

But when they're going through puberty,

36:15

man, it's like

36:18

nonstop. Like that's

36:21

like you're literally, you have a crazy person

36:23

living in your house. They

36:26

are insane. Yeah. Yeah.

36:29

And constantly mad at you because

36:31

you chose to breathe. Yeah.

36:34

How dare you choose to breathe? Yes. Um,

36:37

number three answer on the board

36:40

for 21 points. Oh, these

36:42

are climbing school or

36:44

college. Thought

36:45

about that one. Yeah.

36:48

Number two.

36:50

Diapers. Wow. Did

36:53

I get the number one answer? I got 35

36:57

points for diapers. Number

37:00

one answer on the board for 36 points is the

37:02

house. Look

37:06

at that. I took number

37:08

one on all of them. Wow. Somebody,

37:11

somebody is continuing their winning

37:13

streak of one.

37:14

I studied. Okay.

37:20

That's amazing.

37:22

All right. Got the winning streak back. Yeah.

37:24

Good.

37:25

So welcome. Hey, uh, welcome

37:28

to the, to the winning circle here, Alan. Uh,

37:30

I appreciate it. Yeah. We'll give you

37:32

a first time winner's jacket. It'll

37:35

be like coding blocks blue, you know,

37:37

there we go. Yeah. Masters has their green jackets.

37:40

We'll have the blue jackets. Be out

37:42

under, out under Zach be written

37:44

on the back somewhere.

37:49

Oh man. Outward

37:52

under out Zach. Yeah. We'll have

37:54

to work with that. Okay.

37:56

Yeah. All right. That's going to take some work. Yep.

37:59

I think you need an. syllable in your name, Joe,

38:01

that's the problem. He had these one

38:03

syllables and we can't work with that. Yeah,

38:06

he gets to steal the whole part of it. See, we

38:09

could be like Joe Underlaw,

38:11

you know? Yeah, yeah. See where

38:13

we get to go with this? You're ruining things,

38:16

Joe. I

38:19

blame your parents for your stupid name. Hey,

38:21

wait, but you said on a show that that

38:23

wasn't your original name, right? Like it was

38:26

Polish or something. Yeah, yeah, I can't pronounce

38:28

it. Exactly. It's got like 12

38:31

syllables, so we should go back to the- Yeah, depending

38:33

which cousin you ask, like they all say it differently and

38:35

spell differently. Do you guys, are you even related?

38:37

Do you have your own, do you

38:40

have a side

38:41

show that we aren't aware of, this like Joe

38:44

between two computers or something? Yeah.

38:47

Joe Zach Galifianakis between

38:49

two computers. Yeah, good luck Googling it though. Well,

38:52

I can't spell it, no, you can't spell it. That

38:54

was awesome. No way. All

38:56

right.

38:57

All right. So I had one more that

39:00

popped into my head that

39:02

drives me crazy. And

39:04

I think we've talked about it before, but- Mm-hmm.

39:08

We definitely have. You'll get some

39:11

commands

39:13

from up above that you have to hit a certain

39:16

unit test coverage or code

39:19

test coverage number

39:21

with your stuff. And man,

39:23

that drives me crazy. So like I I'm

39:25

curious, you guys, the thoughts on on

39:28

test coverage percentages

39:31

versus

39:34

the actual usefulness of the tests.

39:37

I, okay. So here, here

39:39

I do not have a problem with having

39:42

a target percentage

39:45

of code covered by test. I

39:48

think that that's, you know, not

39:50

a crazy metric. If you wanted

39:53

to like have a PR gate, for example, around

39:55

like, Hey, you know, you

39:58

introduce so much new code.

39:59

brought the percentage down you you that

40:02

implies that you aren't testing it and so

40:05

therefore we can't merge your code in until

40:07

you do that. The problem that I have

40:09

with this though is that when

40:13

others above will say

40:15

that that number needs to be

40:17

really high because to me that

40:20

that number and like the PR gate example that

40:22

I gave

40:23

you know it

40:25

if you aimed for like 70 ish

40:28

percent give or take five you know like to

40:30

me that seems like a reasonable thing

40:32

right because there's absolutely going to

40:34

be code that cannot be covered with

40:37

a unit test because by definition

40:40

it's an integration

40:41

it's integration test code right you or

40:43

integration code because it's like trying to actually connect

40:45

to a database or whatever so there's absolutely

40:48

code that won't get

40:50

covered

40:51

and but you know

40:53

you'll have sometimes though these

40:56

really high numbers that would be given to

40:58

you

40:59

and the example that I was given to one of our

41:01

friends was that you

41:04

can have a code you

41:06

can have code that is a hundred percent test covered

41:09

by test that doesn't mean that

41:11

the code is bug free or correct

41:14

or good or anything like that and so the example

41:16

that I gave was like imagine if you had a simple

41:19

a simple function that

41:21

that just took in two

41:24

numbers and you know it

41:26

was called divide takes into numbers and returns

41:28

back a result right you could absolutely

41:31

write a test

41:34

that

41:34

gave you know for

41:37

into and expected an answer

41:39

of two and boom now that method

41:41

is a hundred percent covered by

41:43

a test right right so as far as management

41:46

could be concerned hey our

41:48

code is perfect because we have a hundred percent test

41:50

coverage but then the real world comes along in

41:52

the first time that a zero is thrown

41:54

in as the divisor

41:57

suddenly your code is broken right

41:59

right And so that's an example of where like a hundred

42:01

percent test coverage

42:04

does not mean what some

42:06

think it means. Right. And

42:09

it's not, it's not like the

42:11

metric that you should go after. It's not

42:13

the metric you should care about necessarily. And

42:15

to your point,

42:17

all it means is it was referenced

42:20

once in a test, right? So a hundred

42:22

percent coverage doesn't mean that you thought about

42:24

all the cases, the use of that code.

42:26

It's just, you touched it. And.

42:29

I exercised it once. Right. And

42:32

the part that bugs me more is like, when you have things

42:34

like pogos or

42:36

pocos and C sharp or whatever, like

42:38

those are not classes you need to test

42:41

their data movers. You've put a value

42:43

in them and you move them. And if you're writing unit

42:46

tests that,

42:48

that check to make sure that you didn't pass a string

42:51

for a number, it's like, is

42:53

that a useful test? I don't think it is right.

42:56

Like I think that's, that's

42:58

writing test code for the sake of having test

43:00

code, you know, a pogo or any

43:02

of that, like those shouldn't matter.

43:07

Business cases, the divider

43:09

is as simple as it is, is actually

43:12

a good, a good example

43:14

of something that is, is testable,

43:16

right? Hey, you know, there are, are

43:19

cases where like putting a zero in for a

43:21

divisor should throw an exception because it's not,

43:24

you can't divide by zero. So that's

43:26

a, a, a business, um,

43:29

a business rule, right? And

43:32

that's what you should be testing with unit

43:34

tests and integration tests should

43:36

be testing that the flow of something from

43:39

point A to point B

43:41

works as expected. Now those are going to

43:43

be slower, but in my mind,

43:45

that in some cases is

43:48

more useful than trying to test something like,

43:50

well, in every case that's more useful

43:52

than testing something like a pogo. And that's why

43:54

when,

43:55

when like blanket blanket

43:57

statements, like you need to have 80% code.

43:59

coverage or 90% or something like that,

44:02

it's like, man, no, that doesn't

44:04

get you to the point

44:06

of what I think testing is supposed to be, which

44:08

we've all talked about before, which is the

44:10

confidence to make a change.

44:13

And I don't think any of what we just talked

44:15

about does that. All that does is say,

44:17

hey, we have a really high test code coverage

44:19

number. Yeah.

44:21

I mean, I agree with all of that. I can't

44:24

say anything really

44:26

extra other than I think it's good to have

44:29

a goal. Having it be

44:31

unreasonable is just demotivating, but

44:33

you got to pick something and it makes sense

44:35

to pick something high. But

44:38

the problem is, is if you start going after

44:40

like, um,

44:43

if you make an unreasonable

44:46

requirement of like, Hey, the test code coverage has

44:48

to be like a hundred percent, 95%,

44:50

whatever 90%, you

44:53

know, just something high,

44:55

you can game that you can completely game that

44:57

and you're not, uh, you

45:00

know, really getting the goal

45:02

that you want. You're just in

45:05

fact, what you as the manager

45:07

don't even realize that you're doing is you're actually

45:09

encouraging your people to game the system

45:12

so that they can get to that number so

45:14

that you can like check your box

45:16

to like, and try to convince

45:18

your upper management, like, Hey, we are,

45:21

our code's perfect, dude. 100% test code

45:23

coverage. And really like to Alan's point, it

45:25

doesn't mean anything. Like, so what you ran

45:28

it through one test case

45:30

out of an infinite number. Like

45:33

no, you're not even like pushing. You don't even necessarily

45:35

have to push it to the extremes. I would rather,

45:37

I would much rather have code

45:40

that might not, they might have a lower

45:42

test

45:42

coverage percentage, but what

45:45

code is covered is thoroughly

45:48

ran through its paces. And it's

45:50

crucial to your, your, your

45:53

app, your project, whatever, right? Make

45:56

sure the backbone

45:58

of your code, the thing that does the.

45:59

important work is thoroughly

46:02

tested and is good.

46:04

That seems like the most important.

46:06

Like when outlaws talking about like gaming

46:08

it, like we were talking about this the other day, um,

46:10

me and some coworkers, like one of the ways

46:13

people cheat this type stuff is they'll just put

46:15

code that they think shouldn't really

46:17

even be tested and it try catch

46:20

and then it's tested.

46:22

You could totally put thing in there. It could fail

46:24

and you try to catch it and it's covered. Like

46:28

gaming the system sucks. It doesn't help

46:30

anybody. So creating unrealistic targets

46:33

also sucks because it, it

46:35

encourages people to try and figure out ways

46:37

around it.

46:39

It is, it reminds me of password. You guys remember

46:42

when they were like, Oh, your password needs to, it

46:44

has to change every time. And so people were like,

46:46

okay, this is ridiculous. So instead of having

46:49

a really strong password, uh, people

46:51

would just use the same password and put the

46:53

month number at the end of it or something. Right? Like,

46:55

when you, when you, when

47:00

you enforce

47:04

bad rules,

47:06

then you basically make it

47:08

to where people don't want to have to deal with it.

47:11

Right. Yeah. I mean, like we

47:13

as a, as a

47:16

civilization, right? Like we're,

47:18

we're pretty good at problem solving. Like that's, that's

47:21

how we have survived, you know,

47:23

thousands of years, right? Uh,

47:25

is figuring out how to survive and problem solve. So

47:27

if you put some obscene obstacle

47:30

in our way, we'll figure a way around it. That's,

47:33

that's the, that's the end of it. Yeah,

47:35

man. So, um,

47:38

but this is actually a pretty cool segue

47:41

into my question that I have for you

47:43

guys, which is what's a technology

47:45

that has reignited excitement

47:48

in you?

47:51

Uh, I guess I'll go first. So, you know, a GPT

47:54

is something that I think is really cool. I've been playing around a little

47:56

bit, uh, with it, but there's also a Google

47:58

bar, there's llama.

47:59

There's a couple other things. I think there's

48:02

a lot of innovation space that's really cool. So

48:04

I started working on a little thing that would let me compare results

48:07

across, like, Bard. Not

48:10

Bard. I don't have access to Bard yet. Dang

48:12

it. But GPT

48:14

has API and a

48:17

pack up. So I can just have one prompt and

48:19

see what both do. It's totally

48:22

silly and doesn't really accomplish much. But

48:24

I'm just experimenting. And I

48:26

think it's cool. Also, Unity, just game dev

48:28

in general, has been really fun. It's so different

48:30

from what I do day to day. It's fun to make stuff

48:33

jump up and spin around. Now, before

48:35

you answer, Alan, do you think

48:37

that

48:38

Joe got that answer because he went to

48:41

chat GPT and chat GPT said

48:43

chat GPT was the thing? I think

48:45

so. Yeah. It sounded like that. That's what

48:47

it said. I don't know what I was supposed to do. Think

48:50

about myself. Man, so that's

48:52

interesting. I mean,

48:55

chat GPT and all the AI stuff out

48:57

there that's coming to life now has

49:01

me interested and curious.

49:03

But I haven't touched it. I know

49:05

Jay-Z's always messing with it. He's the

49:08

gift for Secret Santa

49:10

for Outlaw was generated from an AI

49:12

thing from him. He's been messing

49:14

with this stuff quite a bit. So

49:18

from the information he's been sharing, I'm

49:20

super curious. The thing that I've actually

49:22

touched

49:23

that

49:24

ignites interest in

49:26

me, and I've always said this, I love big

49:28

data. I love huge amounts of data.

49:32

So

49:33

streaming technology still to me

49:35

are just,

49:36

I haven't gotten to mess with them as much as

49:38

I want, even though I gave a presentation on

49:40

them a couple of years back. Great.

49:43

Now I'm thinking about donuts. Way to go, Alan. Right, donuts.

49:45

There we go.

49:48

But yeah, I mean. His presentation was

49:50

on streaming donuts. Yeah, streaming donuts.

49:54

The challenge is

49:56

when you start thinking about unbounded sets

49:58

of data and how you have. to do

50:00

state and all that kind of stuff is really interesting

50:02

to me. I mean, there's sort of hard computer

50:04

science, the problems to solve a lot of times. And

50:08

those are fun. Those are interesting. So, um,

50:10

I'd say that was probably the one that,

50:13

that most has

50:16

grabbed my interest over the past several years and

50:18

kept it honestly, which is, which is crazy.

50:20

That doesn't usually happen.

50:24

So I guess I'm, I'm behind the eight

50:26

ball, you know, compared to where you

50:28

two guys have been here recently in

50:30

our professional

50:33

lives, only because just the way, like you take

50:35

them, talking about taking one for the team, right? Right.

50:37

Like I've definitely been on some, uh, you know,

50:40

you're, you're two different, like year

50:42

long efforts that put me behind

50:44

the eight ball and stuff. So there were like things that you guys

50:47

were talking about and I'm like, looking at it like from

50:49

the surface and I'm like, yeah, that does look cool.

50:51

That is cool. But I never had a chance to like super

50:54

dig in, you know, dive in and, like

50:56

get, uh,

50:57

you know, like more than just

51:00

a toe wet. You know what I mean? And

51:03

so this is why I say, uh, this

51:05

is a great segue cause you're talking about the test coverage

51:07

and all that.

51:08

So for me, it's been

51:10

Kotlin here in the last, uh,

51:13

you know, several weeks. And in

51:15

the, in the segue there was cause you were talking about pogos

51:17

and all that. And I was like, Oh yeah, well Kotlin actually

51:19

like makes it super clear. This is a data class.

51:22

Like, yeah, that's all I,

51:24

all I expected of this thing. It's literally

51:26

named. There's a keyword data. Boom.

51:29

It's a data class. And if you try

51:31

to do anything else with it, you know, what's wrong with

51:33

you? Um,

51:35

yeah, there's just so many cool little like smart

51:37

things about it that I'm like,

51:39

I really, I really, uh,

51:43

you know, that's, that's like super well thought out. Like one, I

51:46

got a tip of the week coming that I was like just

51:48

super in love with like how

51:51

clear and

51:52

expressive it was. Like what was happening there.

51:54

But, uh,

51:55

but on the other hand though, there's, it's not that he's

51:57

necessarily perfect though. Cause like the bang bang.

52:00

operator and Kotlin kind of like

52:02

upset me because I'm like wait this means something

52:04

different in other languages and we've kind of already

52:06

agreed on like what this means why are we why

52:09

are we changing the this definition

52:11

you know instead of that stuff

52:13

yeah instead of it being like related to not

52:16

knots or what not

52:18

not not what not hey I just did that okay

52:21

that just happened but yeah

52:24

so I'm

52:25

just in also and

52:27

I guess this is a segue into my next comment here

52:29

though too I

52:31

think that part of the thing that has like

52:33

made me super in

52:36

love with it and like just appreciative

52:39

of it and you know enjoy like

52:42

it's just can we just say like what a pleasure

52:44

it is you know

52:47

like like just to write in Kotlin

52:49

it truly is right

52:51

but going apart and

52:53

going along with that though it's kind of in an old

52:55

school kind of like dopamine hit was

52:57

like when you do have a question

52:59

right

53:00

JetBrains documentation

53:03

for Kotlin is amazing

53:07

it's outstanding it is awesome it's

53:09

like it's like back you remember back

53:11

in the 90s when like the MSDN documentation

53:15

was the thing man like nothing

53:17

touched it right yes it was like if you

53:19

had a question boom you know there

53:21

you went right and of course we all loaded the MSDN

53:24

documentation like on off the

53:26

CD onto our computer or the floppies you

53:28

know depending yeah

53:30

because it was that awesome you know until took out

53:32

all webified but uh

53:35

you know I say

53:37

that that's a segue in my next comment because what

53:40

is also frustrating is that

53:43

from the beginning of time for Java right

53:45

they there was this concept of Java

53:48

doc but the

53:52

frustration in working

53:53

in like a Java ecosystem

53:56

is that where some projects

53:59

and or developers or what

53:59

whatever, will treat, will can

54:02

think that, oh, well, we

54:04

have Java doc. So we have, we have documentation

54:06

for our project. Here you go. And you're

54:08

like, that's no,

54:11

it's, it's okay. I

54:13

see what you did there. Like, yeah, you

54:16

gave me a page that says, here's

54:18

the method name and here's the parameters. This

54:20

parameter is a string.

54:22

Thanks. Yeah. I couldn't

54:24

tell that before. Yeah.

54:26

No, you really went out of your way with that one. Why

54:29

would I use that?

54:30

Like, when do I need to use that? Like, you

54:33

may be an example of like when and why and what.

54:36

Oh, so frustrating. Uh,

54:39

so, so I, I

54:42

strongly, I have, I have, if

54:45

any project where they like treat like, oh, our

54:47

Java doc is our documentation. I'm like, yeah,

54:50

like I'm already like antsy. Like it better

54:53

be really good Java doc then. It

54:55

never, it never is. It

54:57

never, I've never seen good Java docs. That,

54:59

that goes onto my whole rant about bowel

55:01

dung or bail dung or whatever it is. Like

55:05

they are just a step past Java docs

55:07

in most cases. Like, you know,

55:09

they sort of lead you to what you

55:12

sort of

55:12

need, but they leave out all the import

55:14

statements, they lead out all the con, leave

55:16

out all the contacts. Like you can't actually

55:18

make anything work from their docs. And it's

55:20

like, I give, Oh, I mean the, the, the

55:23

Kotlin documentation is such a pleasure

55:25

because like, if you do have a question about

55:27

something in a lot of their, uh, code examples,

55:30

there's a play button. You can actually,

55:33

you know, experiment and execute the code

55:35

right there in the browser and be like, well, how

55:37

does this work? What is it? What if I want to do this? Like, what does

55:39

it do? And then boom, and there's a link to a playground

55:41

if you needed

55:42

to take it further, like Kotlin

55:44

for

55:47

the win. It's gotta be

55:49

like the best technology that's come out in

55:51

like, you know, one of the top technologies

55:54

has come out in recent years.

55:56

They're, they're up there with the C

55:58

sharp documentation because dot net.

55:59

It also went to that same whole thing, right? Where

56:02

if you had a question about code, they've got the stuff

56:05

on the page, they've got the Git snippets, they've got

56:07

all that stuff. Did they put live

56:09

examples with the Play button? I haven't seen that lately. They

56:11

do, yeah. Shows you how much C sharp

56:13

development I've done recently. Yeah, I mean,

56:17

Microsoft was always top notch,

56:19

right? Like they were always tier one. And

56:22

Kotlin is right there with them, which is

56:24

shocking because you'd think Java would be

56:26

as long as it's been around and as much

56:29

time as they've had to get there. And as popular

56:31

as it is, yeah, and just crap. The

56:34

one thing that I do really appreciate

56:36

about the

56:38

current MSDN documentation that

56:40

Microsoft provides is the GitHub link.

56:43

You find a problem? Here's the GitHub

56:45

repo, go submit a PR, you can fix that documentation

56:48

or improve it or whatever you want to do. The

56:52

Kotlin documentation doesn't take it that far, but

56:54

still, I'm not gonna hold that against them. But

56:57

yeah, that's, I mean, the streaming stuff, definitely,

57:00

I mean, how do

57:02

you not like solving those kind of problems,

57:05

right?

57:06

They're definitely

57:09

big,

57:10

you know? They're interesting, right? Like, I mean,

57:13

windowing, like

57:15

if you've never had to deal with data

57:19

coming in in some sort of stream

57:21

versus a batch, just look up

57:23

windowing and your whole world

57:25

will go, oh, how

57:28

do we, ooh. I never thought about

57:30

that. Yeah, yeah, how do I solve

57:32

that? It's just, it's really interesting problems.

57:35

I mean, any kind of problems at scale,

57:38

which is basically what you're, you know,

57:40

in a nutshell, you could kind of think of big data streaming

57:43

problems as like a way

57:45

to solve data at scale.

57:48

All scale problems are like super

57:50

interesting, right? Like, who was

57:53

it? And it wasn't

57:55

Martin Fowler, who was the screaming?

58:00

um, code one,

58:03

uh, stack overflow,

58:05

uh, streaming

58:08

code. No. The screaming that,

58:10

that, that, um, Oh

58:12

my gosh. He's like avatar. He's like, he's

58:14

screaming like, Oh, Oh, Jeff. Yeah. I believe

58:17

it was Jeff. Yeah. That,

58:20

uh, that had like an article

58:22

about like all things are fast

58:25

for small in,

58:26

you know, does that ring a bell

58:28

with you guys? So like, you're like, yeah, okay.

58:30

Who cares? Like whatever, you know, but when

58:32

you can make something fast at like the large scale,

58:35

right? That's when it's like, Oh, super interesting,

58:37

which is what you're describing. Yeah,

58:39

totally. That's exactly what it is.

58:42

So, um, but you know

58:44

what, uh, Jay Z definitely had, right. I should have

58:46

gone to chat GPT and asked to chat. You

58:50

said you have a phone

58:52

app. You have, uh, I just go to the website

58:54

on my phone, but, uh, yeah, like, uh, if you can't

58:56

use it at work, like you can still get advice for it, but like, you

58:59

know, depending on your work policy and like what their,

59:01

you know, reasons are, what they're trying to avoid. Uh, yeah,

59:04

it's like still nice sometimes to just, just

59:06

pull it up in your phone and be like, how do I do this stupid

59:08

Excel formula or like this function

59:10

is deprecated. What should I be using instead?

59:12

As long as it's before like 2021, 20, you

59:14

know, early 22, then you're

59:16

good. Right. Yeah.

59:19

Yeah. I mean, I do think

59:21

I do agree with you though, Joe, like it is going to be

59:23

interesting to see like, where does that take

59:25

us? You know, there's definitely like a

59:27

lot of, uh, you know, experts

59:29

that are talking about like, you know, ramifications

59:32

and things like that. Like, what is this going

59:34

to mean for us? So there's definitely

59:36

a lot of excitement there. So that's why I'm saying like, I'm

59:38

definitely behind the eight ball. Cause my dumb answer

59:40

was Kotlin, you know, meanwhile you're

59:42

picking something extremely topical. Um,

59:45

but, uh,

59:47

you know, um,

59:49

it, it, I am excited to see

59:52

like, where do we go from here? And like,

59:54

I thought, I don't know if I said this on the show, but,

59:57

um, I think I had talked about this with, uh,

59:59

you know,

59:59

family or friends, I forget. But

1:00:02

there was a comment about, with

1:00:07

things like chat GPT where

1:00:09

you can ask it, in your example,

1:00:11

like, hey, I wanna write a function

1:00:14

that does X, Y, and Z, or I need a script that does

1:00:16

blah, blah, blah, blah, blah, and then chat

1:00:19

GPT will put it out and everything. And

1:00:21

somebody made a comment about, well,

1:00:24

I wonder if we're gonna need developers, or

1:00:26

is this gonna be the end of developers, or something to

1:00:28

that kind of effect, which that type of comment has

1:00:30

come out before, right? And

1:00:33

my response was,

1:00:34

well, I don't think it's

1:00:37

necessarily gonna replace this, it's gonna,

1:00:40

the industries that'll be, and it's not

1:00:42

just developers, it could be like legal or

1:00:44

whatever, right?

1:00:47

The

1:00:49

people that'll succeed will be the ones that know how to

1:00:51

use the tools. And chat GPT

1:00:54

is another tool at our disposal, right? It'd

1:00:56

be like if you're trying to fly the enterprise and you don't know

1:00:58

how to talk to the computer, right?

1:01:00

Yeah, I totally agree.

1:01:02

There's some things that it's terrible at, too, like things that

1:01:04

you would think like math, you would think that a computer

1:01:06

would be good at math, right? And just other

1:01:08

stuff, like you gotta remember, like this thing is not,

1:01:10

like a person that doesn't really have intents, it's a

1:01:13

language model, it's literally just stringing stuff together

1:01:15

probabilistically, and it's easy to forget

1:01:17

that, so I think that the sooner you start kinda mess with it,

1:01:19

the better you'll get at using it, and I think that the

1:01:21

people that do start are just gonna have

1:01:23

a head start on where tooling and stuff is going.

1:01:26

Yeah.

1:01:27

That's excellent. All right, well, we'll

1:01:30

have some links in the resources we like

1:01:32

section for all of this, but with that, we

1:01:34

head into Allen's,

1:01:36

oh, no?

1:01:37

Oh, so in the resources we like,

1:01:40

we were talking about the Kotlin Playground and that kinda

1:01:42

stuff, I went and just grabbed one example

1:01:44

of the Microsoft stuff where

1:01:46

they have something very similar to that, where they have

1:01:48

things that they're teaching you what to do, and then they've

1:01:50

got their little playground thing on the side. But

1:01:52

this

1:01:53

is... This is their learning thing? Yeah, this is different.

1:01:56

This isn't their documentation. Their documentation

1:01:58

has things in line, like...

1:01:59

which you were talking about, like run this code here or whatever,

1:02:02

but I couldn't find that as quick because

1:02:04

I couldn't think of a method to go check this out. Yeah,

1:02:06

that didn't count. That's a learning thing. That's

1:02:08

not documentation. But it's pretty good. It's good, yeah,

1:02:10

it's definitely good. Yeah, absolutely.

1:02:13

So I'll find something else before these show notes go live,

1:02:15

but yeah.

1:02:16

All right, so with that, we head into Alan's

1:02:18

favorite portion of the show.

1:02:20

It's the tip of the week.

1:02:24

Hey, you're kind of muted, Joe, so nobody.

1:02:27

More than kind of muted. You were actually

1:02:29

muted. Yeah, sorry. I

1:02:31

usually don't, and I think I am. But yeah,

1:02:34

I just decided to drink water right when

1:02:36

I was, anyway, so I got

1:02:38

two tips here. One from Dave Fallot. Thanks, Dave.

1:02:40

Warp AI is a currently free,

1:02:43

but won't always be terminal for macOS

1:02:46

that integrates in AI. I

1:02:48

say NIAI because you have two choices.

1:02:51

You can run a local AI, which means your

1:02:53

stuff isn't getting uploaded anywhere. So none of

1:02:55

your context and your files and your stuff is being

1:02:57

uploaded, or you can do a cloud-based AI and

1:03:00

I actually have installed it. I

1:03:02

haven't been on my personal laptop for a

1:03:04

while. I haven't done any coding stuff, so I haven't used it much.

1:03:07

But it does have several nice features like that I've

1:03:09

got, I'll tell you in a second. And

1:03:14

so I'm getting out of myself. Yeah, so

1:03:16

command prediction, which is just what you might expect.

1:03:18

So it's like, you know, better than normal IntelliSense.

1:03:21

It'll actually kind of help predict what you're trying

1:03:23

to do and fill in

1:03:25

some stuff with like tab auto-completion. Quick

1:03:28

error lookup, which is really nice. So imagine like you

1:03:30

get an error code like when you run a bash

1:03:33

command or just, you know, like you run a Python

1:03:35

program or something and you get some, you know, like

1:03:38

exit code NPE line 2005 error

1:03:41

code ABC. Then

1:03:45

what they do is they give

1:03:47

you a convenient shortcut for just clicking on it and like

1:03:50

not doing a Google, but actually,

1:03:52

you know, doing some sort of like

1:03:54

AI kind of base recommendation

1:03:56

for what you might need to do to correct that problem.

1:03:59

integrated search, which is nice. So

1:04:02

you can actually search for recommendations

1:04:04

with things that are not AI based, like Stack

1:04:07

Overflow, Google type stuff, which is actually kind of crazy

1:04:09

to think that my terminal doesn't

1:04:11

already have that. I never really thought to want that,

1:04:13

but now I kind of do, because I really hate tabbing

1:04:16

out of the context of it, I want to stay there. And

1:04:18

of course it's got an AI prompt, so you can just kind of ask questions

1:04:21

or whatever.

1:04:23

And so that, yeah, that's a war with AI. It

1:04:25

is macOS only for

1:04:27

the moment, so it has to be pretty dang

1:04:29

good to get me out of I-term too, but we'll

1:04:31

see. It will be.

1:04:33

I got another one for you. So this

1:04:36

is a book called Nature of Code, and this is

1:04:39

thanks to MicroG for suggesting this code.

1:04:41

And what is it? I

1:04:44

guess I can say the word physics. It's a book on kind

1:04:46

of like the type of physics

1:04:49

stuff you would be doing in games or just visual

1:04:51

programming. So like the first chapter is all about

1:04:54

vectors, adding vectors, finding intersection,

1:04:57

the points where two vectors would

1:05:00

meet, finding parallel,

1:05:02

finding tangents, things

1:05:04

like that. It's got chapters

1:05:06

on forces. I don't

1:05:08

know what oscillation means here, but

1:05:10

cellular automata, fractals, just

1:05:13

kind of like cool visual type stuff.

1:05:15

And it's at a low level, so it's not really starting

1:05:19

with any specific, I think it mostly does processing

1:05:22

as a language, but it's more about kind of the principles

1:05:24

behind this stuff and how to integrate

1:05:26

them with programming. That's one thing I noticed

1:05:28

with like physics 101 type

1:05:31

stuff from like high school, college, or whatever, you

1:05:34

learn these formulas and then you go to kind of do them in programming.

1:05:36

It doesn't translate

1:05:38

super easily sometimes. And so it's

1:05:40

the way you kind of think about stuff

1:05:42

when you're doing it on pen and paper versus

1:05:46

we're doing it in a programming language, which is different. So it's kind

1:05:48

of cool to have a book that bridges that gap

1:05:50

between like

1:05:52

kind of low level physics-y

1:05:55

type stuff and programming.

1:05:57

And the book is totally free, by the way. You can order a

1:05:59

physical copy if you want. like a print on demand time

1:06:01

thing, but the entire book is available just

1:06:03

on the website.

1:06:04

You know, I was going to say that they, I was

1:06:06

going to be disappointed that maybe like uh,

1:06:08

an opportunity had been missed, but

1:06:11

then when I go and look at it and

1:06:13

I see that in fact, uh,

1:06:15

the author, Daniel Schiffman did

1:06:18

in fact take advantage of the opportunity that I'm

1:06:20

thinking of. And I super appreciated this because

1:06:23

there is a quote from captain over Roger

1:06:25

Roger. What's our vector Victor. And

1:06:27

uh, yeah,

1:06:29

so thank you for throwing that in there. Mr.

1:06:31

Schiffman. That, that means a lot

1:06:33

to me.

1:06:34

Yeah. That's what's going on.

1:06:37

That's it for me. All right. So,

1:06:39

uh, you know, I mentioned kind of tease this earlier

1:06:42

about, uh, Kotlin and, uh, think,

1:06:45

so one of the examples of

1:06:47

like something super expressive that I thought you

1:06:49

could do with Kotlin. And I was like, oh, what a, what

1:06:51

a pleasure. So nice. The

1:06:54

map of feature in Kotlin

1:06:58

where you can just literally like

1:07:00

whatever your key is the word

1:07:02

to, and then whatever your value is. So

1:07:04

key to value done. And

1:07:07

you can have like a whole list of these things and

1:07:09

it would create that map of it.

1:07:12

And where I needed this where like, I was like,

1:07:14

well, I don't really want to create, you know, something

1:07:18

complex for this, but I want to create

1:07:20

just a simple Jason format

1:07:23

of like these key value kind

1:07:25

of pairs and, and you know, there's going to be

1:07:27

multiple of these and I need it in a Jason format. And

1:07:29

so, uh, Google has a

1:07:32

Jason library

1:07:33

and you can say to

1:07:36

Jason of some thing,

1:07:38

some object type, right? And it'll automatically

1:07:41

return back a Jason representation

1:07:43

of it. And one of the things that you could pass in was

1:07:46

the map.

1:07:47

And in

1:07:49

Kotlin, it just was so

1:07:51

easy to get just a nice simple

1:07:54

Jason representation of this thing using

1:07:56

some like Gson dot two Jason

1:07:59

parentheses. map of key to

1:08:01

value and and you

1:08:03

know repeat however many keys and values

1:08:05

you have but that's

1:08:08

just I love where we're

1:08:10

at I love where we're at can we just say that

1:08:13

it is nice when you get a

1:08:15

little bit further you'll see to build lists

1:08:18

oh yeah they have

1:08:20

list of but

1:08:23

they take it like to a computer

1:08:25

science II next step to

1:08:27

where you'll have list of or mutable list

1:08:30

of so you'll know whether or not you have something

1:08:32

that can change or not right so they're introducing

1:08:35

some of the tech terminology

1:08:38

into the things that you do well that was one of the

1:08:40

things that like threw me for a loop in the beginning

1:08:43

to with Kotlin that I was like why in the world

1:08:45

did they change this like because

1:08:47

like when you declare a variable right

1:08:50

like let's go back to old-school way right you

1:08:52

know long time ago you wanted to declare

1:08:55

an end you'd say it I equal 0

1:08:57

right and if I was going to be a constant

1:09:00

then it'd be like constant I equal 0

1:09:03

right

1:09:03

and then you know languages

1:09:06

evolve for example

1:09:08

C sharp comes along and they're like hey you know what

1:09:10

if we can if we can derive the type

1:09:13

you don't need to tell us just var the

1:09:15

type and we'll figure it out so

1:09:17

var I equals 0

1:09:20

and implicitly we figured out that it's an end right

1:09:23

based on how you're using it right

1:09:27

but then in Kotlin it

1:09:29

was like well Val I equal 0

1:09:31

and we'll figure

1:09:34

out what the type is or you know

1:09:36

you could do Val no I guess it would be technically

1:09:38

yeah

1:09:39

yeah and I had it right or or you could

1:09:41

also do like Val I colon

1:09:45

and equal 0 if you wanted to but

1:09:47

then there was also var I colon

1:09:51

int equal or colon

1:09:53

int I equal 0 you know wait a

1:09:55

minute Val versus var like why why

1:09:58

it's so weird because like everywhere

1:09:59

else is var

1:10:01

and then majority of the time in Kotlin

1:10:03

you wanted to be Val and what took me

1:10:06

like a minute, I never read this

1:10:08

so I don't know if this was, I assume this is their

1:10:10

rationale for it, but I got to thinking because

1:10:12

like in Kotlin to

1:10:14

your point Alan, Val was something that's

1:10:17

constant, it's not going to change, you can't

1:10:19

change it, right? But

1:10:21

var is changeable and I'm like,

1:10:24

I hated it in the beginning. I was like, what a stupid

1:10:26

subtlety that's only one letter

1:10:29

difference that's not even the first

1:10:31

letter of the word so you really

1:10:33

got to be paying attention to catch that, but

1:10:36

then what I grew to appreciate

1:10:38

is I'm like, well, you're really being

1:10:40

expressed like totally expressive because in

1:10:43

my mind Val is, this is a value

1:10:45

and a value can't possibly change.

1:10:48

It is the value period, but if it's

1:10:50

variable, it's a var and

1:10:52

a variable by definition can vary

1:10:55

and so that's the thing and

1:10:59

like I said, I didn't bother to read

1:11:01

it so I'm sure that other

1:11:03

people are like, yeah, of course dummy and of course that's what

1:11:05

it was, but it

1:11:07

just kind of dawned

1:11:10

on me one day and I'm like, oh, that's

1:11:13

so clever.

1:11:15

Those little nuances

1:11:17

are why Kotlin is probably

1:11:20

tied for first with C sharp in my love

1:11:22

of a language is because

1:11:25

they've made it very explicit

1:11:28

for you to express what you want to do. Right?

1:11:31

So the valve versus var right. The valve can actually save you

1:11:33

if you try and reassign it, it'll throw an error.

1:11:35

Yeah. It's like, no, you can't do that. Oh, okay.

1:11:38

Cool. I didn't really want to override that. It

1:11:41

filled time. It throws the air. Like it's a red squiggle

1:11:43

as soon as you do it like you immediately know.

1:11:45

And the same thing with the Knowles, right? Like

1:11:47

I think every language out there, if they could go

1:11:49

back in time,

1:11:51

the Knowles would like be,

1:11:53

no, you have to really choose to want this to be

1:11:55

knowable and that's what Kotlin forces you to do.

1:11:57

Yeah. You want us to know?

1:11:59

sign up to be like this variable can

1:12:02

be nullable or this

1:12:04

reference type can be nullable.

1:12:07

So it actually saves you in

1:12:09

a lot of cases and that's why it's fun. So

1:12:12

continuing with the Kotlin stuff then,

1:12:15

so Outlaw asked a

1:12:18

question the other day about the bang bang to his point

1:12:20

like it's different in every language right or

1:12:23

in most languages it means truthy

1:12:25

right. Is this sort

1:12:27

of true or is this you're like

1:12:30

double knotting an operation so you're

1:12:32

saying like hey is you know

1:12:34

is the variable true

1:12:36

now is it not true is it not

1:12:39

not true right so is it and

1:12:41

it's called truthy because it's like basically

1:12:43

you're just testing sort of is this

1:12:45

thing a number is this thing of

1:12:48

whatever well

1:12:50

in Kotlin that's not what it means in Kotlin

1:12:52

it means I have a variable

1:12:55

if I put bang bang at the end of the variable

1:12:57

it says hey this is not allowed

1:12:59

to be null if it's null it's going to throw

1:13:01

an exception and it allows you

1:13:03

to do things like if you had a person class

1:13:06

and you tried to grab the age from that person

1:13:09

if the person object is null

1:13:12

then you can't get the age right.

1:13:15

So what you do is you say my person

1:13:17

bang bang dot age and so that's

1:13:19

basically saying hey that person value can't

1:13:21

be null so go ahead and get the age from

1:13:23

it. Well outlaw there

1:13:26

was some bit of documentation on

1:13:28

on the Kotlin thing that was like hey

1:13:31

you know we convert this

1:13:32

and when they say convert it's it's

1:13:36

unclear whether or not they're making a copy

1:13:38

of the object and doing something with it or whatever

1:13:40

so he asked the question and I was

1:13:42

like no I don't think so I don't think

1:13:44

it's making a copy.

1:13:46

But if you said you were

1:13:48

going to convert an int to a string you

1:13:50

would assume that like oh it's a new thing.

1:13:53

Right you're going to make a copy of it and cast it

1:13:55

or something right so so

1:13:58

he said that it it just kept.

1:13:59

kicking around in the back of my head and I was like, you

1:14:02

know what, you can look

1:14:04

at the bytecode. And he's like, oh, that's lame. Nobody

1:14:06

wants to look at bytecode. And I would agree, I

1:14:09

would agree, except for the fact

1:14:11

that IntelliJ makes it so

1:14:14

easy. So you can actually

1:14:16

write code, some Kotlin code.

1:14:19

You can basically go up to an IntelliJ,

1:14:22

tools, Kotlin, and show bytecode. And

1:14:25

so your code, your Kotlin code, you can highlight

1:14:27

the chunk that you actually want to see, the bytecode

1:14:30

of, and it will highlight it over in the bytecode

1:14:32

section.

1:14:33

And so it

1:14:35

was super valuable. So it turns out

1:14:37

it does copy something. It

1:14:40

copies a pointer in

1:14:42

the stack to whatever that object

1:14:44

was,

1:14:45

but then it just does an assert

1:14:47

not null.

1:14:48

And if it's not, then it just typecast

1:14:51

it. So it's not actually copying the value.

1:14:53

It is copying a pointer to it. Not exactly

1:14:56

sure why it does that, but it

1:14:58

is interesting that you have such

1:15:00

quick access to be able to see, hey,

1:15:02

is this doing something nasty behind the scenes? So,

1:15:06

you know, if you're doing Kotlin or anything, and

1:15:08

I'm sure that they probably, IntelliJ more than likely

1:15:10

has something like that for Java as well, hey, show

1:15:12

me the bytecode for the Java, and then you can go see

1:15:14

what the actual compiler is putting together. So

1:15:18

really, really

1:15:18

cool stuff.

1:15:20

And then I have to call out that Micro G went

1:15:22

behind the scenes with several of us and pointed

1:15:24

out this book. Because, yeah,

1:15:26

he cheated on us then. Yeah, that's right.

1:15:30

So yeah, the nature of Kotlin, I

1:15:33

was like, hey, that's gonna be a tip of the week. And

1:15:35

then I saw Joe's up there, and I thought it was funny,

1:15:37

so I had to point it out. So this could be in there

1:15:39

twice.

1:15:41

All right.

1:15:44

All righty, well, with tips

1:15:46

that are so good, we say them twice, you can

1:15:49

subscribe to us on iTunes, Stitchify,

1:15:52

wherever you like to find your podcasts. Be

1:15:54

sure to leave us a review, like I said, if

1:15:57

you haven't already, you can find some helpful links at codenbox.net

1:15:59

slash review.

1:15:59

review.

1:16:01

Hey, and while you're up there, make sure you check out

1:16:03

our show notes. We have lots of good stuff up there. Join

1:16:06

in on the discussion more and make sure you

1:16:08

go check out our Slack channel. We have a lot of amazing

1:16:11

people up there, so you can go to codingblocks.net

1:16:14

slash Slack if you want to get

1:16:16

signed in over there. All

1:16:18

right. And make sure to follow us on Twitter at Coding

1:16:20

Blocks or hey, give at Jack a little nudge

1:16:22

on Blue Sky to hurry up our invite there.

1:16:25

And if you go to Codingblocks.net, if we ever get that stuff,

1:16:27

you can find a link to that and all our other social

1:16:29

stuff at the top of the page.

1:16:31

Sounds good.

Unlock more with Podchaser Pro

  • Audience Insights
  • Contact Information
  • Demographics
  • Charts
  • Sponsor History
  • and More!
Pro Features