Slaughtering Sacred Cows: Reconsidering Software Dev Truisms - JSJ 653

Slaughtering Sacred Cows: Reconsidering Software Dev Truisms - JSJ 653

Released Tuesday, 15th October 2024
Good episode? Give it some love!
Slaughtering Sacred Cows: Reconsidering Software Dev Truisms - JSJ 653

Slaughtering Sacred Cows: Reconsidering Software Dev Truisms - JSJ 653

Slaughtering Sacred Cows: Reconsidering Software Dev Truisms - JSJ 653

Slaughtering Sacred Cows: Reconsidering Software Dev Truisms - JSJ 653

Tuesday, 15th October 2024
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

Hey JavaScript Jabber fans, I wanted to

0:02

really quickly talk about the sponsor of

0:04

today's episode, me. I'm Jamin Holmgren, co-founder

0:06

and CTO of Infinite Red. We're a

0:08

small but experienced team of 30 US-based

0:10

React Native consultants. We've been around since

0:12

2015 and all we do is React

0:16

Native consulting. So if you're looking for expert

0:18

help building or optimizing deploying and supporting a

0:20

React Native app, I'd love to chat with

0:23

you. Just go to infinite.red slash jsjabber and

0:25

don't forget to mention that you heard about

0:27

us through the JavaScript Jabber podcast. So that

0:29

we can keep supporting the show. Now back

0:31

to the episode. All right,

0:34

let's be real. You get in, you're

0:36

trying to start up your new JavaScript application,

0:38

you want to do the front end stuff,

0:40

maybe you don't want to do a whole

0:43

lot of the design, maybe you want something

0:45

that already does, I don't know, e-commerce or

0:47

content or something else where you want to

0:49

build your own business. But at the end

0:51

of the day, you want to be controlling

0:53

the user experience and doing what you do

0:56

best in React or Vue or Angular or

0:58

something else. So what do you

1:00

do? Well, guess what? One of the

1:02

best understood back ends is WordPress.

1:05

And so all you have to do is spin

1:07

up WordPress, install the plugins that give you the

1:09

features you want. And if you really want to

1:11

get fancy, you can use Bluehost. They have an

1:13

AI powered design tool that'll give you a pro

1:15

level WordPress sites. Then all you have to do

1:17

is set up your front

1:19

end and off you go. You can

1:21

use plugins for the APIs, you can

1:24

use the back end for authentication. It's

1:26

already a CMS or content management

1:28

system. The AI makes it really easy to

1:30

get where you want to go. It loads

1:33

fast, it's well understood, it's got

1:35

a ton of people using it

1:37

already. And so why not? I

1:40

can't recommend highly enough that you give WordPress

1:42

a try if you're looking to build something

1:44

and need some kind of back end headless

1:46

CMS. And the place to host

1:48

that is Bluehost. So you go over to

1:50

Bluehost, you fire up their AI, like I

1:53

said, and off you go. So if you're

1:55

looking for a place where you can set

1:57

up WordPress in minutes and use their built

1:59

in marketing tools, you get 24 hours of

2:01

WordPress. for 7 support then go check them

2:03

out. If you use our code, you can

2:06

launch yours today and get a killer deal.

2:08

Go to bluehost.com/jabber. That's

2:10

bluehost.com/ jabber. Hey

2:17

folks, welcome back to another episode of

2:19

JavaScript Jabber. This week on our panel

2:21

we have Dan Shapiro. Hello

2:24

from Israel. I'm

2:26

Charles Max Wood from Top End Devs and we have a

2:28

special guest this week and that is Tomer

2:31

Gabel. I am sorry, I don't do

2:34

the Hebrew pronunciation so. That

2:36

was actually fairly accurate. Awesome.

2:41

Now you and Dan are friends. You

2:43

do JavaScript mostly not on the front

2:46

end which is kind of interesting but

2:49

yeah, do you wanna kind of give us a little bit more of your background?

2:52

Sure. Who you are, where you're coming from with this stuff?

2:55

Sure. So as you

2:57

mentioned Dan and I have been friends for a

2:59

while. We used to work

3:02

together at Wix for a few years

3:04

and then we kind of split ways

3:06

professionally but remain friends. As

3:09

you might've mentioned, I am not

3:12

very heavily into front end development.

3:15

I will reiterate the usual disclosure which

3:17

is I have nothing

3:19

against it. I'm just not very good at

3:21

it and therefore leave it to people who

3:24

are good at it and are passionate about it.

3:28

On the other hand, I do see

3:30

myself as kind of a general purpose

3:32

engineer. So I don't really see the

3:34

distinction between front end, back end. In

3:38

the general sense, engineering is engineering

3:40

is engineering. Some of these disciplines

3:43

require skill sets that slightly

3:45

differ. Mine

3:48

doesn't lead towards, well,

3:51

users really and people. So

3:54

that's why I'm in back end. You

3:57

might say I'm a back

3:59

end engineer, system market. a DevOps

4:02

guy, whatever is needed at the time,

4:05

have been in the industry for over 20 years

4:08

now. And for the last

4:10

three and change have been independent.

4:13

So consulting companies and

4:15

basically everything they need, everything except front-end.

4:19

Yeah, and I kind of see myself as an engineer

4:22

that solves problems, whether they

4:24

be educational, functional

4:27

performance or anything else really,

4:29

or organizational at times. I'll

4:33

just add to that, that,

4:36

you know, Tomer and I, we

4:38

meet, we hang out when we can. And

4:41

when we do, we almost

4:44

inevitably also get into technical

4:47

debates. Like we

4:49

both hold strong opinions and

4:51

interestingly enough, they sometimes conflict. And

4:55

that's the best. And that's the

4:57

best. And

5:01

I'm usually pretty, let's

5:05

stubborn and I hope also

5:07

convincing, but Tomer is somehow

5:09

very often able to kind

5:11

of force my hand to

5:14

kind of change my opinions on stuff. So

5:17

I really am looking forward to

5:19

our discussion today. Yeah,

5:22

those kinds of debates in my opinion

5:24

are important because yeah, they

5:27

force you to really solidify where you're at or

5:30

change your mind. Or

5:34

just learn to express your opinions. Right.

5:37

Yeah, I was gonna say, so we're

5:40

in the middle of the political season here in the United

5:42

States. I'm fairly involved

5:45

in one of the major political parties. I'm

5:47

the vice chair of the local, the county

5:49

party. And right, so

5:51

we have discussions and often we have discussions

5:53

with people that don't agree with us, both

5:55

within the party and outside the party. And

5:58

yeah, it's terrific. because you get

6:00

to have the back

6:02

and forth. And yeah, sometimes it's, you know, you make a

6:04

really good argument and I have to go think about that.

6:07

And sometimes it's, you've made excellent

6:09

arguments and you've convinced me. And

6:12

sometimes it's, you know, we

6:14

agree, but some of the nuance

6:16

kind of gets threaded out

6:19

during the conversation. So it's, I love it.

6:21

I love it. As long as it's done

6:23

in good faith. Yes. That's

6:26

really what I care about. And of course,

6:28

when it's tech, it

6:30

should be based on actual,

6:32

you know, information

6:35

or data as much as possible,

6:38

rather than just, you know, this

6:40

is my opinion and I'll die

6:42

on this hill because it is.

6:45

Yep. Yep. Cool.

6:49

So, I may challenge that

6:51

a little bit. That can be one of the

6:53

topics for discussion if you want. Honestly,

6:56

I think it's not so much that

6:58

data is overrated because it's not. It's

7:00

that many

7:03

fewer discussions, especially around

7:07

issues of how to engineer, what good

7:09

engineering is. A lot of

7:11

these discussions are qualitative,

7:13

almost by definition, and

7:16

trying to inject data into those arguments tends

7:18

to, like at this point, they view it

7:20

as, in many cases,

7:22

more of a logical fallacy than an actual

7:25

argument. But we can circle

7:27

back to that if you... It's like lies,

7:29

damn lies, and statistics. It's

7:32

more like if you're measuring

7:34

what's easy because that's all you can measure,

7:36

then don't expect me to take it very

7:38

seriously. Yeah,

7:41

that is fair. So,

7:43

I got this list

7:45

of things that are, I guess, ideas.

7:49

You guys said slaughtering sacred cows, and

7:53

mentioned that this is a Hebrew term, but

7:55

it's a term that's used in English in

7:57

America too. So, I'm just gonna hang... with

8:00

it here. But

8:02

yeah, so what sacred cows are we slaughtering? Where

8:04

are we going with this? By the way, if

8:06

we just before we start, you know, if you've

8:09

got, you know, some listeners, and

8:12

they have ideas for additional,

8:15

you know, sacred cows, they

8:17

might like us to roast

8:20

to discuss or roast or eat

8:22

or whatever, then they should know

8:24

they can feel free to just

8:26

post them in the very relevant

8:28

chats. Yeah, absolutely.

8:31

Yeah, the more the better. There's

8:33

always always something to argue about.

8:35

I'm sorry, debate in good faith

8:37

about. Don't

8:41

do that when I'm drinking. Of course,

8:44

the fun in not doing that when you're drinking. Yeah.

8:49

So, so where do you guys want to start?

8:51

With the first one, I guess. All right.

8:53

All right. So we kind of put together

8:55

a list and sort of

8:58

prioritized it by nothing

9:01

so well defined as our hunch

9:03

at what would be engaging for

9:05

the audience, which

9:07

is to say that if the audience

9:09

actually wants to participate and indicate to

9:12

us whether we're on the right track

9:14

or they have some other ideas for

9:16

for what to talk about, then that

9:19

would be terrific. But

9:21

then you want to introduce the first

9:24

hypothetical item on the agenda. Yeah. So

9:27

everybody, you know, we all

9:29

of us here are programmers and

9:31

probably the number one tool

9:34

for programming is the

9:36

programming language, because at the end of

9:38

the day, that's how you convey your

9:41

intentions to the computer that actually

9:43

hopefully executes something similar to what

9:45

you wanted it to do. And

9:50

and consequently, people or developers

9:52

are really hung up

9:54

on their choice of a programming language

9:57

to the extent that I still remember. when

10:00

I interviewed somebody for a position way

10:02

back in the 90s, I think, they

10:05

told me, if you're not working

10:07

in Java, I'm not interested in working

10:09

here. And

10:12

so it seems that the choice

10:14

of programming language should

10:19

be like the number one

10:21

priority. It's like the number

10:23

one most important tool in your toolbox.

10:26

So it's the number one priority of

10:28

making the right choice. And

10:31

yet it seems that Tomer

10:33

doesn't think that that's the case. So

10:36

Tomer, take it away. Well, I wanna pile

10:38

on here because it goes the other

10:40

way too. It's not just programmers saying, I

10:44

want to work in .NET or Java

10:46

or Ruby or JavaScript or whatever node, but

10:49

the employers list the jobs that way. This

10:52

is a React job, this is a PHP job. Right?

10:56

And so it kind of cuts both ways.

10:58

Anyway, go ahead, Tomer. So

11:01

there's a few angles with

11:04

which we could sort of tackle this,

11:07

but I'll start by saying

11:09

this. I don't

11:11

actually think there's any

11:14

argument to be made

11:16

about companies listing those

11:19

requirements because functionally speaking, when you hire

11:21

an engineer, you may or

11:23

may not need someone with

11:25

immediately applicable experience or you might

11:27

not be able to afford a

11:29

long onboarding or whatever it is.

11:31

So it's a much more kind

11:33

of tactical decision, I

11:36

think. There's nothing, I've

11:38

yet to encounter a company

11:40

that is, we

11:44

only hire for these languages because

11:46

we think everyone else

11:48

is garbage, right? Or whatever way you

11:50

wanna put it. So

11:52

it's a much more functional decision.

11:55

On the other hand, I would say that

11:57

to Dun's earlier point, which is, You

12:00

know, it should be priority one of

12:02

the decisions you make, presumably in this

12:04

context it's on a new project or

12:06

a new company, a new organization, whatever

12:08

it is. I

12:10

would agree with you, it is the

12:13

first priority, but I would disagree on

12:15

why that is. I don't think it's

12:17

because the choice matters

12:19

as much as people think. I

12:22

think it's because it is

12:24

the first choice

12:26

you have to make before you

12:28

actually start doing anything beyond brainstorming

12:30

on what it is you're building.

12:59

Ramp automates data entry and routine

13:01

tasks with automated approvals, expense categorization

13:03

and bill payments, time-consuming tasks. Which

13:05

means you'll stop wasteful spending and

13:07

close your books in hours instead

13:09

of days. Businesses that use Ramp

13:11

add up to 5% to

13:14

their bottom line the first year. If you're a

13:16

decision maker, adding Ramp could be one of the best

13:18

decisions you've ever made. Get $250 when you join Ramp

13:20

for free. Just

13:23

go to ramp.com.easy. ramp.com.easy.

13:27

ramp.com.easy. Currents

13:30

issued by Sutton Bank and Celtic Bank members

13:32

of DIC. Terms and conditions apply. Nah, not

13:34

quite. What's up? Ah, sell my car in

13:36

Carvana. It's just not quite the right time.

13:38

Crazy coincidence! I just sold my car to

13:41

Carvana. What? I told you about it two

13:43

days ago! When you know, you know. You

13:45

know, I'm even dropping it off at one

13:47

of those sweet car vending machines and getting

13:49

paid today. That's a good deal. Oh, great

13:51

deal. Come on, what's your heart saying? You're

13:54

right. When you know, you know. Sold.

13:56

Whether you're looking to sell your car right now or

13:58

just whenever feels right. or

16:01

in German or in English. And

16:04

I'm not gonna extend that joke in the

16:06

obvious direction. But more

16:09

importantly though, the

16:11

point I'm making here is you can end up

16:13

with a functional system in 90% of the domains.

16:16

There are always exceptions to this. There

16:18

are always domains where one language would have

16:21

a clear benefit

16:24

over another. But

16:26

for the vast majority of sort

16:28

of general purpose business software, whether

16:30

web or not that everyone writes,

16:33

you can start off, use the

16:35

example of a backend because that just happens to be

16:38

what I know best. You

16:40

have massive, massive functional

16:42

systems built in Java,

16:45

in Python, in OCaml,

16:47

in PHP, in variants

16:49

of PHP because you have Wikipedia

16:51

on the one hand and you have Facebook on

16:54

the other, in virtually anything you'd

16:56

care to mention. And I'm not even

16:58

going in the direction of the obvious,

17:01

people are still writing in COBOL. I'm

17:03

talking about mainstream, purpose-built

17:06

relevant software that's been developed in

17:08

the last 20 years, not in

17:10

the last 60. So

17:13

we're talking internet facing software. What

17:19

I feel matters when

17:22

you're not in a domain which

17:24

lends itself really, really well to

17:26

the advantages or disadvantages

17:29

of any particular language, it

17:32

ends up being mostly an aesthetic choice. Which

17:35

language do I personally love

17:37

better? Because

17:39

if I can and over

17:43

a long enough stretch of time, all

17:46

systems can. If I can build

17:48

my system in PHP or JavaScript

17:50

or TypeScript or

17:53

Java or Kotlin or Scala or any

17:55

of those languages or Python, if you

17:57

must. There

28:02

are type systems that you can plug in

28:05

to get type annotations on your Ruby. The

28:08

vast majority of the community doesn't use them. As

28:12

far as TypeScript goes, a

28:14

big part of it, if you've been watching, especially

28:16

like the keynotes from Rails World for

28:18

the last, which was a couple weeks

28:20

ago and then like last year and

28:24

when in October, it's

28:27

been pretty clear that David

28:30

is much more DHH. He's

28:33

much more in favor of, he's

28:37

moved a lot more toward import maps and

28:40

a lot of the benefit that he's

28:42

talking about is not having a build

28:44

step, right? If you have TypeScript, you

28:46

have to have it transpiled to

28:48

JavaScript. And so by not

28:50

using TypeScript, you avoid that step and

28:53

you can actually just have your JavaScript

28:55

written and have it loaded into your

28:57

import map and then just come into

28:59

your application that way. And

29:01

so you avoid that process. But

29:03

did he also say that he's

29:06

kind of opposed to static typing

29:08

on principle? I've

29:10

gotten that impression. I don't know that I

29:12

could go find a place where he's actually

29:15

directly said that. You may be able

29:17

to, and that's definitely the

29:19

sentiment that comes through. But

29:23

yeah, and I'm kind of in the same boat, right?

29:25

I am not a big

29:27

fan or proponent of having

29:31

typing built into my stuff. And

29:34

I think that as Tomer's mentioned is

29:36

kind of more of an aesthetic thing.

29:38

I've never really

29:42

felt the benefit of it when I've done it. And

29:44

so I'm just

29:47

not a huge proponent of it. It doesn't mean I'm

29:49

against it. It's just that

29:51

some of the other benefits like not

29:53

having a build step and things like

29:55

that, make

29:58

it so that I look at it. it and

30:00

say, well, in order to get that, the

30:02

trade-off just isn't worth it because I don't

30:04

see the benefit for it, if that makes

30:06

sense. It's interesting. I'm

30:09

going to kind of take it

30:11

back because I have

30:13

some other thoughts on this

30:15

particular premise

30:18

that is being brought forward

30:20

because I generally agree that

30:22

in a lot of cases, you know, capability

30:25

wise and, you know, the different approaches that

30:27

the different languages are going to kind of

30:29

push you toward to get

30:31

a job done. Yeah, you

30:33

know, there's not a major

30:38

difference as far as them being able to do the job.

30:41

One thing that I've seen though is that depending

30:43

on what the advancement is and how

30:45

actively those are being worked on. So

30:47

this has more to do with ecosystem

30:49

really than language. We

30:53

see that they tend to converge, like

30:55

you said, Tomer, but the difference is

30:57

that depending on where those innovations are

30:59

coming from, being on the leading

31:02

edge of a lot of that stuff is a

31:04

benefit. But like I

31:06

said, I think that has more to do with the ecosystem

31:08

you're in. So for example, I just

31:13

watched last week the

31:15

key from

31:17

Rails world, right? And so he's talking about,

31:19

hey, we're simplifying the stack and we're simplifying

31:21

deployment and we're making it easier. And you

31:24

know, so he's talking about all these different

31:26

things. A lot of these, a

31:28

lot of good ideas have come out of Ruby

31:30

into other languages. A lot of great ideas have

31:33

come from other languages into JavaScript

31:36

or into Ruby. Ruby's adopted some of this

31:38

stuff, right? And so the convergence

31:41

is there, but I also look at it and

31:43

think, okay, well, because I

31:45

have the benefit of these particular things

31:47

that have come into the ecosystem that

31:49

haven't been adopted elsewhere yet. I'm

31:53

able to get more done in the

31:55

system I use and things like that. And

31:57

yes, some of that comes down to experience,

31:59

but I think some of it also comes.

32:01

comes down to the language and its approach

32:03

and the philosophy behind it and things like

32:05

that. And so I generally

32:08

mostly agree with you that

32:11

programming languages, there

32:14

may be differences in, hey, I

32:16

want to pick this for this, right? If I'm doing

32:18

system programming or something that needs that

32:20

kind of characteristic, I'm probably going to

32:22

reach for Rust as opposed to Ruby

32:25

or JavaScript. Most

32:27

tax pros leave a message. It's

32:29

Jane. I'm moving on to a TurboTax

32:31

expert who beat your price. Adam Devine,

32:33

tell him how I feel. ♪ A tax pro,

32:36

she's been thinking twice ♪ ♪

32:38

Best believe TurboTax will beat your price

32:40

♪ ♪ This is a

32:42

tax break, ah! ♪ Switch to

32:44

a TurboTax Live expert and we'll beat what you

32:47

paid your pro last tax season. Make the switch

32:49

at turbotax.com slash beatyourprice. TurboTax full service only. Sign

32:51

up by 12-20-2024 and file by 4-1-2025. Full

32:55

details at turbotax.com/beatyourprice. What's

32:58

the easiest choice you can make? Window

33:00

instead of middle seat? Picking

33:02

a vendor who sends a great gift basket? Outsourcing

33:05

business tasks you hate? What about

33:07

selling with Shopify? Whether

33:10

you're selling a little or a lot, Shopify

33:12

helps you do your thing, however you cha-ching.

33:15

Shopify is the global commerce platform that

33:17

helps you sell at every stage of

33:20

your business. All

33:28

the way to the Did We

33:30

Just Hit A Million Orders stage?

33:32

Shopify's there to help you grow.

33:34

Whether you're selling scented soap or

33:36

offering outdoor outfits, Shopify helps you

33:38

sell, wherever and whatever you're selling.

33:41

Shopify's got you covered. Sign up

33:43

for a $1 per

33:45

month trial period at

33:47

shopify.com/try. Go to shopify.com/try

33:49

now to grow your

33:51

business, no matter what

33:54

stage you're in.

33:56

shopify.com/try. Beyond those basic things, I still think

33:58

that there are... differences between

34:01

languages and systems that allow

34:03

us to operate and be more

34:06

productive, you know,

34:08

reach certain goals. If you

34:10

care more about some characteristics than others, then

34:13

you can reach for one over the other.

34:15

And so like I

34:19

don't know that there's an empiric, this

34:22

language is better than that language so

34:24

much as, you know, if

34:26

you're working in this area, it's not just

34:28

down to does it give you better tools,

34:31

but does it give you better tools that

34:33

literally make

34:35

you move that far ahead and web

34:37

in particular in backend is so

34:40

disparate that I feel

34:43

like there really are, I mean I use

34:45

Rails and I'm biased that way, but I

34:47

feel like there are a lot of really

34:49

serious advantages that come from using Rails that

34:52

other systems don't have. Yeah,

34:54

but are those advantages from

34:58

Rails or from Ruby and

35:00

could a Rails-like system

35:02

have been built on something other

35:04

than Ruby? Because the discussion here

35:06

at the end of the day

35:09

is not so much about Rails,

35:11

it's more about Ruby versus other

35:13

programming languages. I think some of

35:15

them come from Ruby, but I think some

35:20

come from Rails and could be built in other systems. I

35:23

would argue that that distinction doesn't really

35:25

exist. When you pick a language, you

35:28

pick an ecosystem, we are so far

35:30

beyond, as an industry, as a discipline,

35:32

we're so far beyond the point where

35:35

you would

35:37

build something on the language plus

35:39

a very, very lean standard library,

35:41

you'd have to reach out to

35:43

a whole bunch of stuff to

35:46

build even the simplest of systems

35:49

of the sort that we're talking about. Again, there

35:53

are exceptions to that

35:55

rule. So if you're a kernel developer,

35:57

you absolutely... have

36:00

to have some

36:02

degree of control over what the

36:04

compiler generates and how these parts

36:07

integrate and interact with each other,

36:09

which is why you would reach

36:11

for a systems programming language that

36:13

doesn't have a live runtime,

36:16

right? That doesn't have garbage collection or

36:18

whatnot. That

36:21

being said, for the mainstream, and by

36:23

the mainstream, I mean, you know, the

36:26

let's put it this way, not the part

36:28

of the industry that existed 20, 30 years

36:30

ago when the

36:32

lot of us were starting our careers, but

36:34

the part of the industry that grew up on

36:37

top of that, because the industry didn't

36:40

just change, it grew

36:43

exponentially. Like it grew crazy wise

36:45

in the last 20 years. So

36:47

a lot of the software that we end up writing

36:50

today in the mainstream, there

36:53

are nuances. Sure, you might prefer

36:56

some element of an

36:59

ecosystem or language or other, but

37:01

as if what you're building

37:03

is not in a domain where there

37:06

is a tangible

37:08

ecosystem advantage. So for

37:10

instance, right now, if

37:13

you're training models

37:15

and integrating in all

37:17

LLMs and whatnot, probably

37:20

you're going to reach for Python because

37:22

it's, you know, it's the go to

37:24

ecosystem. It's the one that moves the

37:27

fastest, etc, etc. That is

37:30

why you'd reach for Python, not

37:32

because you think Python is a better language

37:35

for that sort of words from Java or

37:37

whatever. Now, once

37:39

the ecosystems reach that kind of parody,

37:43

for most kind of business use case

37:45

sort of software that you would build,

37:48

if you're in the front end and

37:50

you're not on native, you're on the web,

37:52

you don't really have that much of a

37:54

choice. You can basically choose JavaScript or something

37:57

that compiles to JavaScript, which again becomes more

37:59

of an aesthetic. choice than anything. Like you

38:01

want to use Elm? Sure,

38:03

there are trade-offs for your organization,

38:07

not for the system you end up building,

38:09

because it's all going to be running in

38:11

a browser the same as any other JavaScript-based

38:13

thing you're going to build. Yeah,

38:16

but people writing Elm, for

38:19

example, will swear by the

38:21

fact that when they can

38:23

get when their code compiles,

38:26

it's correct. So speaking

38:28

is not something you can say

38:30

about JavaScript or TypeScript. I would

38:32

say two things to that. One,

38:35

it's hyperbole. Okay, if someone actually

38:37

came up to my face and

38:39

uttered that sentence with a serious face, I'd

38:42

call their bullshit because that's that's just what

38:44

it is. No, if

38:46

your code compiles, it's not production grade. Don't

38:48

give me that crap. Come on, we're grownups.

38:50

Second, I think we just got a whole

38:53

bunch of stinger hamburger out of that one.

38:56

Yeah. And just to qualify

38:58

that assertion, okay, I am

39:00

strictly in the statically typed

39:02

statically compiled language camp. As

39:04

an aesthetic preference, I'm a

39:07

scholar guy, right? And

39:09

I have been for many years. I'm

39:11

a co-founder of what ended up being

39:13

the Scala community in Israel and the

39:15

conference that we had around that. So

39:17

that's, that's kind of my personal bias.

39:19

And I can, you know, explain why

39:21

that is my preference. But fundamentally,

39:24

I come from the camp

39:26

of languages that don't

39:28

provide because no language can provide that,

39:31

but that sort of drive you towards

39:33

building code in a way where if

39:35

it compiles, there is a very good

39:37

chance that it'll actually run correctly in

39:40

production. It's not going to guarantee that

39:43

neither will 100% code coverage in your

39:45

tests, but we'll probably circle that to

39:47

that point later. The

39:50

point I'm trying to make here is before

39:53

you get to that point,

39:56

because you brought up Scala and the fact

39:58

that you were a founding father of the

40:00

the Scala community. Based on

40:02

what you're saying today, would

40:04

you have founded Scala, the Scala community

40:07

today, given what Java can do? Because

40:09

effectively what you seem to be saying

40:12

is, you know, Scala, Java, they

40:14

both run on the JVM, they're

40:16

kind of a parrot. So I

40:19

absolutely would, because of two

40:21

very fundamental things. One is

40:23

circling back to my original

40:26

assertion, it's a matter of

40:28

aesthetics. I don't say

40:30

that aesthetic preferences don't matter.

40:33

These are my aesthetic preferences. You know,

40:35

if I'm growing flowers and vases around

40:37

my house, and I start a community

40:40

around that, it's because I like flowers.

40:43

It doesn't necessarily mean that flowers

40:45

are objectively important. That's

40:47

one thing. The second thing is that

40:49

when I was heavily into

40:52

Scala and espousing Scala in the, you

40:54

know, in the Israeli tech community, Java

40:57

couldn't do what Java can do now

41:00

in the sense of expressivity. Sure, you

41:02

can build systems in Java, but I

41:05

would argue then as now

41:07

that Scala has advantages

41:10

over Java. It doesn't make

41:13

it a more useful language or

41:15

a more successful language or even

41:17

a preferable language necessarily for some

41:19

people. There were

41:23

organizations that have managed to convince

41:26

to take the plunge and they decided

41:29

to do so with the trade off that it's

41:31

going to be much harder to hire people to

41:33

work in Scala, which by the way, did

41:35

not turn out to be the case, but that

41:38

was the assumption because

41:40

they felt they had something to gain

41:43

from that choice. But it's

41:45

not to say that if they had

41:47

picked Java instead or Python instead, they

41:50

would have been any less successful. Wix, by the way,

41:52

which is a company you and I worked for, was

41:55

for many years a poster child

41:58

of Scala in the In

44:00

that respect, TypeScript is better

44:04

than JavaScript because it's a super

44:06

set of JavaScript and because it adds

44:09

something we as an industry find

44:11

useful. That

44:14

being said, it compiles down to

44:16

JavaScript. Clearly, everything you

44:18

build in TypeScript, you can build

44:20

in JavaScript. This is beyond instance.

44:23

Just to say, it's beyond being

44:25

compiled down to JavaScript. It's effectively,

44:27

you invest a lot of effort

44:29

into writing TypeScript types and then

44:31

they all get erased out

44:34

of your code when it's deployed into

44:36

the product. But the value proposition isn't

44:38

at runtime. Oh yeah, of course. It

44:41

is a distinction from the

44:44

.NET and Java ecosystems where

44:46

types do matter at runtime.

44:49

That being said. That's us.

44:54

That depends on how you write it, but sure. The

44:57

point I'm making here

45:00

is TypeScript to me

45:02

is an evolutionary state of JavaScript, like

45:04

treating it as a separate language to

45:06

my mind as sort of an outside

45:08

observer. I have no dog

45:10

in this race. I don't do my

45:14

everyday work in JavaScript or

45:16

TypeScript. I do occasional

45:18

work in JavaScript and TypeScript and Python

45:20

and a whole plethora of other languages.

45:23

So Most tax pros leave a

45:25

message. It's Jane. I'm moving on

45:27

to a TurboTax expert who beat your

45:29

price. Adam Devine, tell him how I

45:31

feel. ♪ A tax pro, she's been thinking twice

45:33

♪ ♪ Best believe TurboTax

45:35

will beat your price ♪ ♪

45:38

This is a tax break, ah!

45:40

♪ Switch to a TurboTax Live expert and we'll

45:43

beat what you paid your pro last tax season.

45:45

Make the switch at turbotax.com slash beatyourprice. TurboTax full

45:47

service only. Sign up by 12-20-2024 and file by 4-1-2025.

45:51

Full details at turbotax.com/beatyourprice. Whether

46:07

you're selling a little or a

46:09

lot, Shopify helps you do your thing.

46:11

However you chiching, Shopify is the global

46:13

commerce platform that helps you sell at

46:16

every stage of your business. From the

46:18

launch your online shop stage to the

46:20

first real-life store stage, all the way

46:23

to the did we just hit a

46:25

million orders stage, Shopify is there

46:27

to help you grow. All the way to the did we just hit a million orders stage. Shopify

46:29

is there to help you grow.

46:31

Whether you're selling scented soap or

46:33

offering outdoor outfits, Shopify helps you

46:35

sell. Wherever and whatever you're selling,

46:37

Shopify's got you covered. Sign up

46:40

for a $1 per

46:42

month trial period at shopify.com.

46:44

Try go to shopify.com. Try

46:46

now to

46:49

grow your business no matter what stage

46:51

you're in. shopify.com. Try. I

46:53

don't care in

46:55

a sense, but as an

46:57

outside observer perspective and tying

46:59

to this convergent evolution of

47:02

languages, statement

47:05

or argument, is that

47:07

this is that evolutionary state. So

47:09

Python at around 3.8 or

47:12

3.7 I think started getting optional

47:14

typing. Around the same

47:16

time TypeScript started taking off. These

47:19

are those ecosystems

47:24

version of a

47:27

worthwhile feature that they

47:29

took from statically typed

47:31

languages. Just to

47:33

make things, how would I

47:37

phrase it, just to make things

47:40

factually correct. TypeScript

47:44

and JavaScript, there might be some

47:46

convergent evolution. I see these two

47:48

are tied at the waist, but

47:52

they are distinct programming

47:54

languages. There's JavaScript, the

47:56

ECMOC script standard says

47:58

nothing. about standard typing,

48:00

it's highly probable that

48:02

it never will, you

48:04

know, whereas... And

48:08

this is a prediction that may or may not

48:10

prove true, and I might eat my words, but

48:12

it also means that it's a standard that in

48:14

five to ten years the only relevance it has

48:16

is for supporting

48:19

legacy software of which there is

48:21

a lot. I don't deny it.

48:24

But the ECMAScript standard that doesn't have anything

48:26

to do with typing is

48:28

about as relevant as the latest COBOL

48:30

standard. Chuck,

48:32

I will say this about the

48:34

value of types. So I'm actually

48:37

going through a fairly

48:39

large legacy project at work that's

48:43

been... that's like 100% JavaScript,

48:46

and we are gradually adding

48:48

static typing into it, and

48:51

I actually tweeted

48:53

about this, that the biggest challenge

48:56

in adding the static typing is

49:00

fixing all the bugs that it discovers.

49:04

So for example, just like

49:08

yesterday I ran into

49:11

the problem there where

49:14

this legacy system uses

49:16

MobX, and MobX

49:18

has this concept of an observable

49:20

array which is kind of like...

49:23

which extends regular JavaScript arrays. It's

49:25

very similar to JavaScript arrays, but

49:27

it's not quite the same. It

49:30

has methods that regular JavaScript arrays

49:32

don't have, for example, and

49:35

people played fast and loose

49:37

with it. They would assign

49:41

observable arrays and arrays into

49:43

the same variables, and

49:46

the system... obviously

49:49

the software works. It's legacy... I

49:53

like to say legacy software is software

49:55

that works. It's deployed.

49:57

Customers are using it. So

49:59

it works. somehow but it's

50:01

also obviously a bug. Now

50:03

maybe this bug doesn't actually

50:05

manifest itself in production, maybe

50:08

it does and the system

50:11

still somehow works because the

50:13

web platform is

50:15

very forgiving for

50:18

both good and bad. But

50:21

like I said it's obviously a bug

50:23

and it's been around probably for years

50:26

and I've found it now because

50:28

I'm adding static type information into

50:31

the project. Yeah

50:33

I would just put forward that you know

50:35

because we're talking about different languages having different

50:38

characteristics. The two systems

50:40

for Ruby are RBS and Sorbet.

50:43

RBS is maintained kind of by the Ruby

50:45

core team and then Sorbet is put out

50:48

by Shopify. They

50:52

tend to feel more onerous than

50:58

surfacing any issues like this. And

51:01

I think sure as some

51:03

systems get more complex,

51:08

I don't know if I have the right terminology

51:10

for exactly what kind of a vague term but

51:14

you know as things become more interconnected

51:16

as people are pulling in more libraries

51:18

maybe it might begin

51:20

to pay off. But my theory

51:23

is more that as Tomer

51:25

said there are a lot of efforts that

51:27

were tried to get something like TypeScript to

51:29

work in JavaScript to add the static types

51:31

and I'm thinking more along the lines of

51:34

these just aren't the right solution if we're

51:36

going to do it in Ruby. It

51:39

just doesn't jive with the way the language

51:41

goes. I also have to say that the

51:43

duck typing and the approach that we take

51:45

to a lot of things in Ruby, it

51:48

really feels just free.

51:51

I can just do what I need to do. And

51:54

I'm not saying that's right or wrong. I'm just saying there

51:58

are definitely things that that

52:01

inform the way people work in these languages

52:03

to where, yeah, I

52:05

don't think just saying static

52:07

typing is necessarily the answer.

52:10

I think there's more nuance to

52:12

a lot of this. And I think to be

52:15

honest, as we've kind of

52:17

seen the convergence evolution of a lot of

52:19

these languages, that's what we

52:21

see there too, right? Is that everybody kind of does

52:23

it kind of their own

52:25

way as they adopt these things. And so

52:28

it's not just this

52:30

language is picking up with this other language

52:32

innovated, it's that we found a way to

52:35

do it in a way that works with

52:37

the way that people approach and think about

52:39

problems in that language. Yeah, absolutely.

52:41

So, you know, I

52:45

guess I'm not really trying to defend anything

52:47

more. I'm just trying to say, I

52:52

haven't seen the benefit and it's mostly because what

52:55

I'm doing just, it

52:59

hasn't had the payoff, but,

53:01

you know, I mean, all of this could change.

53:03

You just never know. So

53:05

I would add to that, first

53:07

of all, I think it's not

53:11

just legit or fine that

53:15

you hold to those positions, it's a

53:18

valid trade off to make. So

53:22

one canonical difference, which

53:24

I think was very evident in both what

53:26

Don described in his experiences

53:28

and what you Charles did, is

53:32

that it's all a

53:35

trade off, it's a difference of what

53:37

it is that you stress in the

53:39

system. So my intuition,

53:41

and again, qualitative argument, I have no

53:43

data to back it up and I

53:45

don't think anyone ever will or

53:48

at least not in my lifetime, I could be wrong.

53:53

What I see is the value of

53:55

the value of the system of

54:00

static typing, or rather static

54:03

typing is a bit of a large

54:05

term. The value of the sort of

54:07

typing that I'm talking about, which can

54:09

be achieved with static typing, but also

54:11

with gradual typing, as you can see

54:13

in TypeScript or Python and other languages,

54:17

really starts to bear

54:19

fruit at a certain not

54:22

complexity level, but at a certain size

54:27

of the thing that you're building

54:29

and the number of constituent interconnected parts that

54:31

comprise it. So it's not so much about

54:33

whether what you're building is complex. That's probably

54:35

a better way of stating. I couldn't find

54:37

the way of saying about it. Yeah, that

54:39

makes a lot of sense. It mostly

54:42

starts manifesting for real in my

54:44

experience two cases. One is when

54:46

the system grows past a certain

54:49

volume of stuff that's in it.

54:51

And that's true of any language

54:53

I've ever worked with, including

54:56

statically, dynamically type, what have you. The

55:00

other situation, which I think

55:02

is where the sort

55:05

of productivity gains perceived by

55:07

the industry are coming from

55:10

is it aids in someone

55:13

not knowing what the code is

55:15

and how it's constructed, but knowing

55:17

what it is supposed to do

55:20

and how code is constructed in

55:22

the general sense of things. Being

55:25

able to get involved

55:28

with the system or engage with

55:30

the system at a fairly deep

55:32

level, the only way

55:34

you can do that

55:37

rapidly without significant onboarding

55:39

and significant prior knowledge, which by

55:41

the way, as a Rails guy,

55:43

you already have. So when you

55:45

come into another system built

55:49

in Ruby on Rails, you

55:51

already have that massive baggage

55:53

of how the system is built,

55:55

because Rails is very, very prescriptive.

55:57

And that is the trade.

56:00

I feel that DHH

56:02

is kind of espousing.

56:06

And fair enough, there is no denying

56:08

that you can be extremely productive if

56:10

you're a Rails engineer moving from one

56:12

system built in Rails to another. I've

56:14

seen it, right? I've

56:17

seen people do that and

56:19

they're extremely productive. The difference

56:21

is Rails is incredibly

56:24

prescriptive and as a result of

56:26

that is a good fit for

56:28

some systems, maybe even most systems

56:30

of that sort, I don't know, but

56:33

it is definitely a very, very

56:35

poor fit for other types of

56:37

systems that are in the mainstream.

56:40

Otherwise, I think

56:43

we would be seeing more success in

56:47

Ruby and Rails as we did in the 2000s. So

56:53

my argument here is there are trade-offs that

56:57

stress different parts of the system

56:59

under different circumstances. The

57:03

Most tax pros leave a message. It's

57:05

Jane. I'm moving on to a TurboTax

57:07

expert who beat your price. Adam Devine,

57:09

tell him how I feel. ♪

57:12

A tax pro, she's been thinking twice ♪ ♪

57:14

Best believe TurboTax will beat your price

57:16

♪ ♪ This is a

57:18

tax break, ah! ♪ Switch to

57:21

a TurboTax Live expert and we'll beat what you

57:23

paid your pro last tax season. Make the switch

57:25

at turbotax.com slash beatyourprice. TurboTax full service

57:27

only. Sign up by 12-20-2024 and file by 4-1-2025. Full

57:31

details at turbotax.com/beatyourprice. Stop

57:34

by O'Reilly Auto Parts for the

57:37

power, performance and reliability of a

57:39

new Super Start battery. Visit oreillyauto.com.

57:42

Oh, O, O,

57:44

O, O'Reilly Auto

57:47

Parts. Most

57:50

visible trade-off of picking a dynamic

57:52

versus static language is

57:54

in a dynamic language, especially

57:57

on projects that don't meet

57:59

that. sort of size or

58:01

volume threshold and have a

58:04

relatively small number of people that

58:06

engage with that system in its

58:09

life cycle, which by the way

58:11

is a thing

58:13

that happens very often, which is

58:15

why Rails was and continues

58:17

to be somewhat successful. As

58:21

long as those limits

58:24

are met, it is

58:26

an incredible experience. And you see that with a

58:28

variety of languages that some

58:30

of which have inspired Ruby. So you still

58:32

see people that have worked on production systems

58:35

in small talk raving about what it felt

58:37

like to work on production systems in small

58:39

talk. Not having had

58:41

that experience, I'm not going to argue

58:43

with them about it, but they kind

58:45

of express what

58:48

that did for them in the

58:50

same way, that it felt very

58:52

liberating. And I categorically

58:54

will not deny that or that

58:56

there's a productivity boost

58:58

to be had by that. But

59:01

you take a Ruby on Rails

59:03

engineer, you drop them into no

59:07

prior knowledge, you drop them into

59:09

a sufficiently

59:11

voluminous base

59:13

in any other language. They

59:15

will be able to onboard because

59:19

there's nothing wrong with Ruby and

59:21

you're not, you don't

59:24

not know something coming from Ruby. You

59:26

have your preferences. But my

59:28

point is that the reverse is not

59:30

true. You take people that are well

59:32

versed in production systems in a variety

59:34

of languages, you drop them into a

59:36

rail system to extend it or fix

59:38

it or improve the build process or

59:40

whatever it is that they want to

59:42

do in that system. Because

59:45

it relies so heavily on

59:47

sort of ingrained knowledge

59:49

of the philosophy of Rails, how things

59:52

are designed, how things are built. If

59:54

you don't have that coming in and you

59:57

don't have that also

59:59

kind of dated to when that

1:00:01

system was built because modern

1:00:03

rails doesn't look quite like rails from

1:00:05

five or 10 or 15 years ago.

1:00:08

And in some cases vastly different. Unless

1:00:11

you have that knowledge, you're just not

1:00:14

gonna be able to get

1:00:16

up to speed and be productive

1:00:18

in that system in any way, shape or

1:00:20

form without significant

1:00:22

handholding. And I've been in that

1:00:24

position myself and

1:00:28

it's not pleasant. Whereas

1:00:31

you have the same experience, by the way,

1:00:33

with the system built in Python or PHP

1:00:35

from 10 years ago because then they

1:00:38

didn't have some of these quality

1:00:41

of life enhancements. You didn't have

1:00:44

known types and known air conditions and

1:00:46

a hell of a lot more Python

1:00:48

docs that you could

1:00:50

see in your IDE than you just didn't

1:00:52

have those things 10 years ago. Whereas

1:00:55

today coming from any language

1:00:59

that's modern and mainstream to any other

1:01:01

language that's modern and mainstream is

1:01:04

not gonna be smooth sailing because languages

1:01:06

are different and there are nuances, but

1:01:09

you're gonna be able to figure

1:01:11

out where you are

1:01:13

in the code. You are gonna be

1:01:15

able to navigate to related things

1:01:18

in the code without having a lot

1:01:20

of ahead of time

1:01:22

knowledge. And that matters. That

1:01:24

matters with bigger products, with bigger

1:01:27

teams, with products whose life cycle

1:01:29

spans many years and many teams

1:01:31

and many people. And

1:01:34

I think that is the

1:01:37

primary motivator for those typing

1:01:39

systems, even in traditionally dynamic

1:01:41

languages like Python, JavaScript, whatever.

1:01:44

Again, Ruby, it spouses

1:01:47

a different philosophy, a different set of

1:01:49

trade-offs. I don't deny that they're valid.

1:01:52

I don't necessarily subscribe to them. And

1:01:56

if I were to find... a

1:02:00

legit argument against that, I would say

1:02:02

simply look at the, you know, look

1:02:04

at the math, look at the popularity.

1:02:07

Ruby was extremely popular

1:02:09

for just short of a decade.

1:02:12

The decade is long gone and

1:02:14

it never picked up since and

1:02:16

there's nothing to indicate

1:02:18

that it will. And

1:02:21

it's not because Ruby is bad or

1:02:24

Rails is bad. It's against my personal

1:02:26

biases, but you can build systems. I

1:02:29

mean, I've used Basecamp extensively. It's a

1:02:31

great product. I don't care what it's

1:02:33

written in as long as it works. So,

1:02:36

yeah, you see the languages in the mainstream

1:02:39

circling back to our original premise, right? You

1:02:41

see the languages in the mainstream. There

1:02:45

are nuances. There are

1:02:47

philosophical differences. Those

1:02:50

do matter in the tactical sense. Like as

1:02:52

you write code, you're not going to write

1:02:54

the same code in Python as you do

1:02:56

in Java or Scala or any of those

1:02:59

languages or in TypeScript

1:03:01

or in JavaScript, but you look

1:03:03

at the ecosystems and they're all. Oh,

1:03:23

oh, oh, oh, O'Reilly. Need

1:03:26

a little help? O'Reilly Auto Parts

1:03:28

can help. Need advice? We've

1:03:31

got advice. No matter what you need,

1:03:33

we have thousands of professional parts people

1:03:35

doing their part to make sure you

1:03:37

have it. Exceptional customer

1:03:39

service. Just one part that

1:03:42

makes O'Reilly stand apart. The

1:03:44

professional parts people. Oh, oh,

1:03:46

oh, oh, O'Reilly. Auto

1:03:50

Parts. Learning

1:03:55

from each other and offering what

1:03:57

appears to be a productive

1:04:00

in the broad sense set of

1:04:02

features. And type systems is,

1:04:05

I think, just the most visible of

1:04:07

those. You also have dependency management, which

1:04:10

frankly, wasn't a thing 20 years ago, right?

1:04:13

Maven was probably one of

1:04:15

the first two major dependency

1:04:18

management stacks. PIP

1:04:21

picked up a lot of that.

1:04:23

Then PIP kind of languished, poetry

1:04:25

came along to fix some

1:04:28

of these things and learn other lessons. And

1:04:30

then you have cargo, which is probably

1:04:32

the biggest newest one of the bunch

1:04:35

that learned a lot

1:04:37

of those lessons from languages that

1:04:39

are in completely different spaces. Rust

1:04:41

doesn't compete with TypeScript. Don't

1:04:45

forget NPM. I'm

1:04:48

trying to, but it's not gonna work.

1:04:50

No, I mean, I'm being

1:04:53

intentionally cynical here. NPM's

1:04:55

really good for installing yarn. I'm being a

1:04:57

very colossal influence. I

1:05:01

do not have a dog in this race either, but

1:05:03

I can say as

1:05:05

this interested observer that NPM

1:05:07

has had a colossal impact

1:05:09

on pretty much every ecosystem

1:05:11

out there. Without NPM, we would

1:05:14

not have cargo, including

1:05:16

the things that cargo does better

1:05:18

simply because it learned those lessons.

1:05:21

Right. So that is what

1:05:23

I mean by convergent evolution. You have a

1:05:25

lot of the same things. And by the way,

1:05:27

a lot of languages, JavaScript used to be the

1:05:29

poster child for, oh, there's no build. Isn't it

1:05:32

great? I just update the code and there it

1:05:34

is, which comes

1:05:36

with an incredible set of

1:05:38

trade-offs. And some of those

1:05:40

trade-offs, by the way, were very

1:05:43

early on ruled not by me and not

1:05:45

by people hating on JavaScript like I do,

1:05:48

ruled by the reality

1:05:50

of it, ruled by the

1:05:53

community of people producing functional

1:05:55

production code as

1:05:57

being a non-issue. You had a...

1:06:00

build process in many,

1:06:02

many, many, many JavaScript

1:06:04

systems over the last

1:06:06

one years, if only

1:06:08

for dependency management, asset

1:06:10

bundling, obfuscation, minification, what

1:06:12

have you, all

1:06:14

these things you couldn't get in a runtime

1:06:17

system. So it was not a worthwhile trade-off,

1:06:19

right? So that ostensible

1:06:21

advantage is not an

1:06:24

advantage as such, it's a trade-off. And

1:06:27

I think a lot of those trade-offs

1:06:29

are made because the ecosystem hasn't met

1:06:32

those challenges properly in a way

1:06:34

that doesn't require a trade-off. I

1:06:38

really want to try to get to the second

1:06:40

sacred cow and we seem to be

1:06:42

stuck on the earth. I was wondering if

1:06:44

we were gonna get to any others. Well.

1:06:47

So unless you've got something really insightful

1:06:49

to add, Tomer, I would like to

1:06:51

move along. I think

1:06:54

that does not have much chance

1:06:56

of ever happening. If

1:07:00

we do number two, we're not getting to any of the

1:07:02

other ones. We can have Tomer on

1:07:04

again. I'm fine with that.

1:07:06

This has been fascinating to talk through. All

1:07:09

right, so let's just try to at least touch on

1:07:12

the second one. Let's.

1:07:18

Chuck, so you're gonna read the second one or should I? I

1:07:21

will read the second one. So this

1:07:23

is what he's going to debunk. This

1:07:25

is not. So anyway,

1:07:30

it's clean code is important. All

1:07:34

right, so I'll start by qualifying that

1:07:37

clean code. You better. I

1:07:40

was gonna say, I don't know if I agree with you

1:07:42

on this. I'm gonna be talking about exactly what you think

1:07:44

I'm gonna be talking to. I just want to make sure

1:07:46

we're all on the same page. So when I say clean

1:07:48

code, what I mean is

1:07:51

the set of perceived

1:07:53

notions of what clean

1:07:56

code is and how to write it

1:07:58

as had been. espoused

1:08:00

in the industry and we said we might

1:08:04

not name drop, but I mean, you can

1:08:06

not name drop Uncle Bob as

1:08:08

the progenitor of these practices. Uncle Bob's a

1:08:10

good friend of mine, but cool.

1:08:15

So what I'm gonna say- He knows where I disagree with

1:08:17

him too, so that's fine. All right,

1:08:19

so here's what I have to say

1:08:22

on the subject. My issue with clean

1:08:25

code has nothing to do with its intent.

1:08:28

It's intense and the intent, the way

1:08:30

I see it is to help

1:08:33

people design systems that are more readable,

1:08:35

that are more sensible. It's

1:08:38

all of those best intentions that the way

1:08:41

to hell- More maintainable is the way

1:08:43

I typically approach it. Fair

1:08:46

enough, all those- But did you just notice what

1:08:48

Tomer said? He said that's the way to hell

1:08:51

is paved with good intentions

1:08:53

about clean code. Because the

1:08:56

rules of, because what

1:08:58

clean code is, is prescriptive.

1:09:00

And the way people understand

1:09:03

it is as a set

1:09:05

of rules and practices that must be

1:09:08

adhered to, or the code is

1:09:10

bad or the code isn't clean. So

1:09:12

there are a lot of examples to this, but

1:09:14

the kind of most obvious, and I think in

1:09:17

many ways, the most egregious one is

1:09:20

dry, is do not repeat yourself. And

1:09:23

there is a fascinating

1:09:25

amount of demagoguery going

1:09:27

on in the industry

1:09:29

around that and

1:09:31

similar rules, where

1:09:35

you will sooner or later

1:09:37

in your career, if you haven't

1:09:39

already, and by you, I mean everyone

1:09:41

with more than half a year of

1:09:43

experience, run into someone telling

1:09:45

you, oh, but why don't you extract

1:09:47

these two identical lines that come within

1:09:50

20 lines of each other into a

1:09:52

method, because

1:09:55

they're the same and they're reusable.

1:09:58

Or if they're- slightly

1:10:01

more advanced and they're

1:10:03

digging into this only

1:10:05

when those that identical line shows up

1:10:07

three times because if it doesn't show

1:10:09

up three times and it's not you know

1:10:12

you don't dry it. Beetlejuice,

1:10:15

Beetlejuice. Yeah no

1:10:17

no that's a prescription and it's a

1:10:20

really terrible prescription first of all because

1:10:22

it it doesn't do

1:10:24

anything second of all it's because it

1:10:26

wastes a whole heap of people's time

1:10:28

thinking about the wrong thing and

1:10:31

third because it causes it and

1:10:33

other discussions

1:10:35

of clean code end up

1:10:37

wasting no more

1:10:39

and no less time than arguments about

1:10:41

code formatting used to back in the

1:10:44

day because the rules

1:10:46

are approximate the rules are

1:10:49

intended are prescriptive

1:10:51

and intended not for you to follow

1:10:53

religiously that's my read on it and

1:10:55

that's kind of the you know that's

1:10:58

my assumption of the intent behind the

1:11:00

words right I don't that's my understanding

1:11:02

as well yeah I don't know Uncle

1:11:05

Bob you know I'm not gonna this

1:11:07

is not an ad hominem thing my

1:11:10

concern with these rules is that people

1:11:12

take them as gospel without considering what

1:11:15

it is that they're trying to accomplish

1:11:18

so the rules of clean code are not

1:11:21

in and of themselves you know

1:11:24

they might be evil but the intent is

1:11:26

the intent to my mind is

1:11:30

just misguided the intent is to

1:11:33

build systems that are more maintainable

1:11:35

as you say or readable or

1:11:37

any of these things without

1:11:40

actually reaching

1:11:42

for what it is that that

1:11:44

makes a system more maintainable or

1:11:46

readable or inefficable or any of

1:11:48

these things which is simplicity

1:11:52

versus complexity and I can define

1:11:54

those things and we may want

1:11:57

to but critically those

1:12:01

rules to my mind, right? As

1:12:05

in my own reading of them were,

1:12:08

they're not so much that people know

1:12:11

not to repeat themselves more than twice

1:12:13

in code, because that's just garbage. The

1:12:15

rules are there to get

1:12:17

people thinking, what

1:12:20

is simple? What will make

1:12:22

this code easier to grasp,

1:12:24

easier for another person, which

1:12:26

as the saying goes, might

1:12:28

be mean in six weeks?

1:12:32

What will make it easier to rediscode,

1:12:35

figure out what it does, why

1:12:37

it does it, how it does it with

1:12:40

a minimal of external

1:12:44

drivers or external knowledge? And

1:12:47

that to me is simplicity. So here I'm

1:12:49

going to push back on something. I

1:12:53

think what you might be ignoring

1:12:56

is the fact that is kind of the thing

1:12:58

that comes up, came up very early in

1:13:00

the industry in the form

1:13:03

of the mythical manmothers. Is the

1:13:05

fact that not all programmers are community. Yeah,

1:13:08

the fact that not all programmers are community.

1:13:10

Another sacred cow to the old

1:13:13

estimator. Yeah. The

1:13:16

fact that half the programmers in the

1:13:18

world are worse than the average programmer.

1:13:22

And... I think that's the

1:13:24

definition. I guess it's

1:13:26

mean. It's mean, but it's true. Yeah,

1:13:30

well, okay. Whatever. Yeah,

1:13:33

I think in this

1:13:35

particular case, the average and the mean are

1:13:38

probably fairly close. We're

1:13:40

talking humans for a change. Yeah,

1:13:43

it's not like wealth.

1:13:46

So what

1:13:48

I'm trying to say is, if

1:13:50

you've got a team on

1:13:53

which you've got a top-notch developer

1:13:56

that is able to make sure

1:13:59

that... the system as a whole

1:14:02

retains this attribute of

1:14:04

simplicity, then you

1:14:06

don't need to adhere as

1:14:09

much to these kind of strict

1:14:12

rules and guidelines. When

1:14:14

you're on teams that don't

1:14:16

have such a person, then

1:14:20

maybe having overly

1:14:22

strict rules is

1:14:25

a good thing. Don't

1:14:27

you think? Well,

1:14:29

speaking as a statically typed guy, I

1:14:31

can't very well rail against that argument.

1:14:33

But taking it taking

1:14:35

a little bit more head on, there's

1:14:39

two issues I

1:14:41

have with that argument that I

1:14:43

think kind of nullify that argument.

1:14:45

The first is it doesn't actually

1:14:48

argue anything beyond, oh, other people

1:14:50

are stupid. It's for their own

1:14:52

good, which is not an argument

1:14:54

that I buy, even though I

1:14:58

might subscribe to that opinion. The

1:15:01

second issue I have with it is

1:15:05

engineers that don't

1:15:08

have and that

1:15:13

haven't over the course of presumably

1:15:16

several years, they don't have to be super senior

1:15:18

developers. But if you've been in the industry

1:15:20

for a couple of years, presumably

1:15:22

wrote a bunch of code, presumably

1:15:25

read quite extensively more code than

1:15:27

you wrote to begin with. And

1:15:30

you haven't developed an

1:15:33

appreciation for the basic

1:15:35

truth that copy

1:15:39

pasting a complex bit

1:15:41

of code over and over again is

1:15:43

bad, then your problem isn't that you

1:15:45

don't have the right rules in place

1:15:47

to limit you. Your problem is that

1:15:49

your company hired you to do a

1:15:51

job that you're probably incapable

1:15:53

of doing. Now, that

1:15:55

being said, that sounds like gate

1:15:57

keeping probably because it. is

1:16:00

because I can't help it, but to

1:16:04

bring that home and

1:16:06

perhaps save

1:16:08

my own skin with

1:16:10

other people. My point is this,

1:16:14

some types of programming

1:16:16

you can do with these types

1:16:18

of guardrails in place, and there

1:16:20

is room for

1:16:22

that work in the industry, I

1:16:25

hope. But the

1:16:30

types of systems that you will be able

1:16:32

to work on is not infinite.

1:16:35

You're not going to be able to

1:16:37

build large production-grade,

1:16:41

long-lived, difficult

1:16:44

systems that deal with actual problems

1:16:46

that are interesting if

1:16:49

you are not willing

1:16:51

to put in the thought and

1:16:54

learn what makes code more

1:16:56

readable, more navigable, etc. And you have people

1:16:58

around you to help you do that. So

1:17:00

it's not like if you are a junior

1:17:02

developer and you come in and you make

1:17:04

a quote-unquote dry violation mistake, you're going to

1:17:07

get fired, you're

1:17:09

hopefully going to, because

1:17:11

you're a junior developer, you were hired in

1:17:13

a context where you can be

1:17:15

functional and you have support, you're

1:17:17

probably going to have the person

1:17:19

next to you, that senior developer,

1:17:22

explaining why this

1:17:24

makes the code worse. But

1:17:27

you're not likely to have a

1:17:30

set of guardrails keeping you from

1:17:32

making those mistakes because those guardrails

1:17:34

are literally

1:17:36

anathema to the way virtually

1:17:39

any practicing software engineer works.

1:17:41

So imagine you were working

1:17:43

on a system and

1:17:45

you were writing code and your

1:17:47

code would not compile because the

1:17:49

compiler feels that you have those

1:17:51

two lines of code identical in

1:17:53

three places, so that's a dry

1:17:55

violation and you

1:17:58

can't compile the code. That

1:18:00

is, that sounds ridiculous because

1:18:03

it is, because the assumption is

1:18:05

if you're working on those systems,

1:18:08

you have to have both

1:18:10

a taste for code,

1:18:12

whereby you wouldn't necessarily, you would learn

1:18:15

very early on why that's a mistake

1:18:17

and you would stop making it because

1:18:19

it's communication. Like there

1:18:21

is nothing inherently wrong with having

1:18:24

several copies of the same code in the same

1:18:26

place. It's a trade-off, right?

1:18:29

What is the trade-off? If you can't

1:18:31

have that conversation, you're never gonna become

1:18:33

a better developer. The guardrails aren't gonna

1:18:35

help you get there. They're just gonna

1:18:37

stop everyone else from doing their job.

1:18:40

So- I

1:18:42

think this is a great topic.

1:18:44

And one I think we should

1:18:47

probably have you on to discuss

1:18:49

at length about what is actually

1:18:51

simplicity in coding. We

1:18:54

probably don't have time to do it justice. I'll

1:18:57

just add the fact that, I

1:19:02

never liked Douglas

1:19:04

Crockford's Linter. What's it called? JS

1:19:07

Lint, the original Linter.

1:19:10

Because it basically said, Douglas

1:19:13

Crockford said, this is JavaScript,

1:19:15

the good parts. Everything else

1:19:18

is not good. Getting

1:19:20

help for mental health shouldn't be as hard as

1:19:22

it is. Thankfully, Mindful Therapy Group is here to

1:19:25

make your mental health journey as

1:19:27

painless as possible. Be seen in as little as 48 hours for

1:19:30

in-person or telehealth appointments. Mindful partners

1:19:32

with thousands of licensed clinicians to

1:19:34

find the perfect fit for you.

1:19:36

Whether you need talk therapy, psychological

1:19:38

testing, even medication management, Mindful has

1:19:41

you covered. Mindful Therapy Group also

1:19:43

accepts insurance, so you can focus

1:19:45

on you and not your wallet.

1:19:47

Visit mindfultherapygroup.com to get started today.

1:19:50

Life can be hectic, and managing your

1:19:52

mental health is more important today than

1:19:54

ever before. That's why Mindful Therapy Group's

1:19:56

mission is to take the pain out

1:19:58

of finding a therapist. Whether you need

1:20:00

talk therapy. psychological testing, even medication management.

1:20:02

Mindful has you covered. Our mental health

1:20:04

providers are here for you with both

1:20:06

in-person and telehealth options to get you

1:20:08

seen in as little as 48 hours.

1:20:11

Mindful Therapy Group also accepts insurance.

1:20:13

Join us to start your journey

1:20:15

to a healthier and happier you.

1:20:17

Visit mindfultherapygroup.com to get started today.

1:20:20

By definition, because I said so and

1:20:23

I built this linter to enforce my rules

1:20:25

and you can't modify it. And

1:20:29

there's a reason ES Flint won. And

1:20:33

because, you know, it's, when

1:20:37

you're so dogmatic, it's

1:20:39

a problem. Contrary wise,

1:20:42

there's a reason Java lost,

1:20:44

if you can call it that. And

1:20:46

the reason Java isn't anywhere near as

1:20:48

popular as it used to be percentage-wise

1:20:50

for building the types of systems that

1:20:53

Java used to be popular for is

1:20:56

because a lot of people were thrown off

1:20:58

and turned away by what is to a,

1:21:00

you know, a

1:21:04

seasoned experienced engineer, active the

1:21:06

mission, a rigorous

1:21:09

type system that forces you to not make

1:21:11

mistakes. Whereas a lot of practicing developers would

1:21:13

look at it and go, yeah, but who

1:21:15

gives a damn? That's, you know, that's completely

1:21:17

trivial. I don't care. I don't want to

1:21:20

have to mess with it and moved on.

1:21:22

So the languages that ended up being

1:21:25

successful are the ones that found

1:21:27

a workable middle ground. And

1:21:30

I include in that list, by

1:21:33

the way, later iterations of Java.

1:21:35

Modern Java isn't anywhere near as

1:21:37

verbose or pardon my French, anal

1:21:39

retentive as traditional Java used to

1:21:41

be. And that is

1:21:44

because other languages showed that that

1:21:46

kind of, it's not

1:21:48

just verbosity. Everyone rails

1:21:50

against Java being verbose, but it's

1:21:53

also that precision just isn't necessary

1:21:55

in a lot of things, right?

1:21:58

The common case where you have... a

1:22:00

class and that class has hash code

1:22:02

into string and a few constituent components

1:22:05

is common enough that it makes sense

1:22:07

to have a first class language concept

1:22:09

around it. And it

1:22:11

took Java way too long to reckon with

1:22:13

that, but eventually it got record classes, you

1:22:16

know, the sort of same ad

1:22:18

hoc data containers that every other

1:22:21

types, every other language has had since

1:22:23

the beginning of time, because it's convenient

1:22:26

and useful and

1:22:28

doesn't require the level of control

1:22:30

and precision that Java espoused at

1:22:32

the beginning. So things evolve across

1:22:34

the board. It's not, I'm not

1:22:37

trying to make the point, you

1:22:41

know, this kind of circles back to original

1:22:43

Kyle, but with this as well is

1:22:46

the tools that Win

1:22:48

tend to be the

1:22:50

tools that are not the most

1:22:52

rigid or the most liberating and

1:22:55

for a very good reason. It's

1:22:58

because having absolutely no guardrails is

1:23:00

a recipe for disaster, which

1:23:03

is why hardly anyone writes

1:23:05

business software in C or

1:23:07

C++ anymore. It's

1:23:09

because you don't get

1:23:11

anything in return to that

1:23:13

level of precision and control. You only

1:23:15

get the bucks for those domains. Anything

1:23:21

that's sufficiently successful in the modern

1:23:23

sense has made those trade offs

1:23:25

willingly. And I think

1:23:28

we find those trade offs being

1:23:30

made in every ecosystem kind

1:23:33

of converging on the same set of

1:23:35

trade offs roughly with nuances and preferences.

1:23:40

As for clean code, clean

1:23:43

code is prescriptive and therefore bogus.

1:23:46

The problem is the rules are

1:23:48

not, the

1:23:52

rules are well intentioned, but they provide

1:23:55

the wrong kind of guidance and

1:23:59

end up causing. more damage than harm in my

1:24:01

opinion. So I'm going to jump

1:24:03

in on some of this. So like

1:24:06

I said, I've talked to Uncle Bob quite a

1:24:08

bit. I've actually talked to him about the Clean

1:24:11

Code book. I

1:24:14

ran a book club for a while. In fact, I still

1:24:17

kind of do. So

1:24:19

we did Clean Code. We also did Clean Architecture. A

1:24:23

lot of the things that we talked through as we

1:24:25

talked through the book, he wrote

1:24:28

it when he was writing a lot of languages

1:24:31

that frankly are pretty different from

1:24:33

Ruby or JavaScript, where I was

1:24:35

primarily working. And so I'd point

1:24:37

some of these out either, hey,

1:24:39

this doesn't make as much sense in the

1:24:41

world I live in as the world that

1:24:43

this seems to be written for. And he

1:24:46

agreed. And so in

1:24:48

a lot of cases, yeah, they're kind of

1:24:50

prescriptive. And maybe he doesn't make that as

1:24:52

clear that, hey, look, you've

1:24:54

got to apply this as makes sense depending

1:24:56

on what you're doing. A

1:24:59

lot of the ideas in the

1:25:01

book, Clean Code, and a lot

1:25:03

of the ideas in the book, Clean

1:25:05

Architecture, I picked up another one.

1:25:07

I can't read. Clean Agile, I think I also read. And

1:25:11

the main thing is I find

1:25:14

that the rules or ideas behind

1:25:17

the rules are definitely

1:25:19

worth discussing with your team and

1:25:22

having the conversation, hey, look, when

1:25:24

we're naming variables, we ought to

1:25:26

consider these things. When

1:25:28

we're writing out our code, we ought to

1:25:30

consider these things. So when

1:25:33

you get down to follow

1:25:35

standard conventions, that

1:25:38

makes it approachable for anybody who works in

1:25:40

the language or framework or whatever. You

1:25:43

get into keeping it simple, I think, is one of

1:25:46

his points, which is also your point. But yeah, as

1:25:48

you get into some of the other ones where it's

1:25:50

like, here's how you formulate comments, and here's how you

1:25:52

name variables, and here's how you do these kinds of

1:25:54

things. Yeah, some of those I found

1:25:57

just were a little bit

1:25:59

tough. swallow. But

1:26:02

it was mainly because my

1:26:04

context was different enough to where I could

1:26:07

come up with a guideline that made sense

1:26:09

for what I was doing. And

1:26:11

down to like dry. I think

1:26:14

it's funny because you mentioned, you know, what if your

1:26:16

tool told you that it wouldn't compile if it wasn't

1:26:19

dry enough. And back in

1:26:21

the day, earlier

1:26:23

in the Ruby community, there were tools that

1:26:25

would do code analysis, and they would point

1:26:28

out areas of your code that weren't dry.

1:26:31

And what I found was at least

1:26:33

half, if not more than

1:26:35

half, you know, significantly more than half in some

1:26:37

cases in some of the code bases I worked

1:26:39

in, it point out something wasn't dry, and it

1:26:41

was wrong. Right? It was

1:26:43

it, like, structurally,

1:26:45

the code looked similar. But

1:26:48

in reality, the concern was different

1:26:50

enough to where it didn't make sense to combine

1:26:52

them. Like you would have been putting in edge

1:26:54

cases every other line, oh, this is different

1:26:57

from that here. And so we're going to do this this way instead

1:26:59

of that way. And it's just, you know, you're

1:27:01

better off having two things that look kind of the same. And

1:27:04

so, again, I

1:27:06

think I think there's a heavy dose of common sense

1:27:08

that comes with this. Initially,

1:27:11

when I saw your point, I thought you were

1:27:13

going to make the point that, you know, trying

1:27:15

to have code that's easy to understand and clean

1:27:17

and maintainable and stuff like that, is

1:27:19

kind of an overblown making the

1:27:21

case for cowboy coding. And

1:27:23

yeah, and I was going to say, no, you

1:27:26

really do need to, you know, have some level

1:27:28

of, hey, you can look at this, you can

1:27:30

understand it. And then that, like you said, that's

1:27:32

the goal of, of clean

1:27:34

code. But my my deal is, is with

1:27:37

a lot of these, or if you read other, because

1:27:39

there are other books that give different rules or standards. And

1:27:43

and the reality is, is you've

1:27:46

got to figure out what works. And in

1:27:48

some cases, it's not just works for your

1:27:50

team. Sometimes it's this code base has a

1:27:52

set of problems that if

1:27:54

you apply the standard from the other code base you're working

1:27:57

in, it's just not going to work.

1:28:00

One other case I want to make is several

1:28:03

years ago, Sandy Metz, she

1:28:07

had a set of rules for

1:28:09

how you formatted your Ruby code. And it

1:28:11

was, you should never have a method that's

1:28:14

longer than so many lines. You should never

1:28:16

have more than so many arguments in your

1:28:19

methods. You shouldn't have

1:28:21

more than so many lines. And then I

1:28:23

hated so much when my method ends up

1:28:25

being one line too long. Yeah,

1:28:28

and that was the problem. And then you're

1:28:30

looking at it and you're scrutinizing it and

1:28:32

you're trying to figure out, right, because there

1:28:34

were linters in Ruby that would enforce it.

1:28:37

And it would fail the build if, or

1:28:40

fail, you know, fail CI if it was, right?

1:28:43

So you had an eight line method and

1:28:45

you're looking at it and you're going, well,

1:28:47

the only way to get it that

1:28:50

way is essentially to create a

1:28:52

second method and just put two of the lines in

1:28:54

it, which doesn't help.

1:28:57

And so- So I will add

1:28:59

to that. There's two things here,

1:29:01

right? There's, first of

1:29:03

all, circling back to the, really

1:29:07

the beginning of the conversation, a

1:29:11

programming language is a language above

1:29:13

communication. Yes. Fundamentally,

1:29:16

you know, I think I've read

1:29:18

some guy at some point,

1:29:20

probably 20, 30 years ago, putting

1:29:22

it as a prose that's

1:29:24

readable by humans and it executable by

1:29:26

machine, right? Which I think is a

1:29:29

very high for the living way of

1:29:31

putting it, but it's close enough to

1:29:33

reality. What matters when

1:29:35

it comes to the way

1:29:38

the code is structured and

1:29:40

formatted are the people. If

1:29:42

it does what it's supposed to do, then

1:29:45

the only reason why you should ever care

1:29:47

what the machines think is when

1:29:49

the code doesn't compile, obviously in the one

1:29:51

hand, but if

1:29:54

you have a, typically

1:29:56

a performance oriented thing that

1:29:58

requires you to- express

1:30:01

something in a way convoluted to

1:30:03

humans, but more easily executable to

1:30:05

a machine. That can happen. That's

1:30:08

niche though. So by

1:30:10

and large, when you do the work you

1:30:12

do, you do

1:30:14

it for other humans. And one of those

1:30:16

humans might be you in six weeks. Clean

1:30:19

code as it is, is

1:30:22

a very good thing in the

1:30:25

sense that it was

1:30:27

one of the few and only

1:30:30

resources in sort of the

1:30:32

space of how to build better code. Like

1:30:35

it was an honest attempt at it. But

1:30:40

I think a lot of people read

1:30:42

into it as, again,

1:30:46

more of a prescription, more, it

1:30:48

became its own thing. I'm really not

1:30:50

against the intent or against Uncle Bob

1:30:52

personally. Again, I don't know him, that

1:30:55

I've got nothing to add to that. But

1:30:58

I am railing against the way it. Life

1:31:01

can be hectic and managing your mental

1:31:03

health is more important today than ever

1:31:05

before. That's why Mindful Therapy Group's mission

1:31:07

is to take the pain out of

1:31:09

finding a therapist. Whether you need talk

1:31:11

therapy, psychological testing, even medication management, Mindful

1:31:13

has you covered. Our mental health providers

1:31:15

are here for you with both in-person

1:31:17

and telehealth options to get you seen

1:31:19

in as little as 48 hours. Mindful

1:31:22

Therapy Group also accepts insurance. Join

1:31:24

us to start your journey to

1:31:26

a healthier and happier you. Visit

1:31:28

mindfultherapygroup.com to get started today. Getting

1:31:31

help for mental health shouldn't be as hard as

1:31:33

it is. Thankfully, Mindful Therapy Group is here to

1:31:35

make your mental health journey as painless as possible.

1:31:37

Be seen in as little as 48 hours for

1:31:41

in-person or telehealth appointments. Mindful partners

1:31:43

with thousands of licensed clinicians to

1:31:45

find the perfect fit for you.

1:31:47

Whether you need talk therapy, psychological

1:31:49

testing, even medication management, Mindful has

1:31:51

you covered. Mindful Therapy Group also

1:31:53

accepts insurance so you can focus

1:31:55

on you and not your wallet.

1:31:57

Visit mindfultherapygroup.com to get started today.

1:32:01

became embedded in the industry

1:32:04

because much like the topic we're not

1:32:07

going to have time to discuss here

1:32:09

again, which is TDD, it

1:32:11

became more of a,

1:32:16

on the one hand, a religion and on the other hand,

1:32:18

a gatekeeping practice

1:32:21

than what it was originally designed for,

1:32:23

which is a set of

1:32:25

useful tools deriving from a

1:32:28

lot of thinking about a set of useful

1:32:30

ideas that can

1:32:32

make you more productive or

1:32:34

better communicator. So staying clean

1:32:37

code is bad,

1:32:40

is obviously hyperbole to some

1:32:42

extent, but it is

1:32:44

analogous to reading the elements of

1:32:46

style in English, which is a

1:32:49

fascinating book, very much worth

1:32:51

reading for anyone who cares about communicating

1:32:54

better in English. But it

1:32:56

is also chock full of

1:32:58

anachronisms and opinions that are

1:33:01

not necessarily born out

1:33:03

in the intervening years. And I think

1:33:05

clean code is kind of like that

1:33:08

as well. Before we

1:33:10

conclude, I just have to give

1:33:12

my number one rule. It's almost

1:33:14

the only rule really is

1:33:17

be consistent. A

1:33:19

code base should strive for consistency.

1:33:21

Yeah, it's somewhat

1:33:25

an important rule. And I think it's

1:33:27

also very overrated, because now you're on

1:33:29

a file of, okay, what is a

1:33:31

code base? If a code base contains

1:33:33

1000 classes, do

1:33:36

they have to be consistent? Considering you might have

1:33:38

had 40 different people from five

1:33:40

teams working on them? Not

1:33:43

necessarily. It's a trade-off. There is value

1:33:45

to that, but there is also cost.

1:33:48

There are trade-offs to everything, and

1:33:50

there are exceptions to them. There

1:33:52

obviously are exceptions to every rule.

1:33:55

But I'm very much in favor

1:33:57

of code consistency. And

1:33:59

I think that these days

1:34:01

we have tools in place

1:34:03

to provide consistency guardrails across

1:34:06

larger projects. And

1:34:10

if you can manage it, it's

1:34:13

a huge benefit because otherwise when

1:34:15

you read code, you get hung

1:34:17

up on things that

1:34:19

you shouldn't get hung up on. Like

1:34:21

why is this code different than that

1:34:23

code? Well, because this

1:34:26

was written by George and that was written by

1:34:28

Tim, it's not a good enough way. We upgraded

1:34:30

the framework the old way works and this is

1:34:32

the new way. So that's

1:34:34

a valid reason actually. Those are two

1:34:37

very different reasons and I think both

1:34:39

are valid by the way because again,

1:34:42

when you code, whatever it is that you

1:34:44

program, you are expressing a part of the

1:34:46

problem both to the machine and another human.

1:34:50

It is a form of expression

1:34:52

by definition, which means by definition,

1:34:54

two different people are going to express

1:34:56

it differently. My

1:35:00

point is consistency is

1:35:02

a valuable asset to

1:35:04

some degree and

1:35:07

it becomes a liability from

1:35:09

some other threshold. And

1:35:13

assuming that consistency is always a

1:35:15

positive is every bit as risky

1:35:18

as saying, know who cares about

1:35:20

consistency, let's all have whatever

1:35:22

different code formatting for each code

1:35:24

file. That's dumb, but

1:35:27

it's no more or less dumb than

1:35:30

saying no, all files have to be

1:35:32

identical, have to have consistent, whatever's because

1:35:35

what you're doing is you're constraining all

1:35:37

of your engineers, all of your communicators

1:35:41

effectively in the

1:35:43

same way where you know

1:35:45

they're not going to be working

1:35:47

in the same way

1:35:49

on the same thing. Even

1:35:51

if it's the same person coming to

1:35:54

the same piece of code three, six,

1:35:56

nine months later, they

1:35:58

might have a different. and potentially

1:36:01

better way of expressing something. And

1:36:03

a lot of the times the

1:36:06

ability to express something elegantly

1:36:08

in code actually runs a

1:36:11

fall of even something I'm not gonna

1:36:13

argue against, which is automatic code formatting.

1:36:16

I'm all for automatic code formatting

1:36:19

for a very simple reason, because I'm sick

1:36:22

and tired of arguing, debating, or even

1:36:24

talking about it. That is the only

1:36:27

reason why I wanna have, a

1:36:30

code reformatter as part of my pipeline is

1:36:32

because I don't wanna ever have one of

1:36:34

those conversations again. That being said, I've

1:36:38

often been in the position where

1:36:40

the reformatted code just

1:36:43

does not express the solution

1:36:45

as elegantly as the code

1:36:48

I would have formatted in some other way,

1:36:50

because it runs a fall of that, whatever

1:36:54

rule the team put in place.

1:36:57

So even trivial rules like line length or

1:36:59

how many lines per minute, whatever it is

1:37:01

that you end up having, you're gonna have

1:37:03

some subset of those in every project. Even

1:37:07

those sometimes constrain your expressivity

1:37:09

as an engineer more than you

1:37:12

would like. Now, again, we're

1:37:14

talking trade-offs. The trade-off of having those

1:37:16

arguments about code formatting for the better

1:37:18

part of 30, 40

1:37:20

years of my life is exactly why

1:37:23

this trade-off is worthwhile. I will give

1:37:25

up a bit of expressivity so I

1:37:27

don't have to ever have those conversations

1:37:29

again, but that is why.

1:37:31

It's not because inherently the

1:37:34

consistency is a positive

1:37:37

or the expressivity is a positive.

1:37:39

It's always a trade-off. I

1:37:43

think we need to start

1:37:45

wrapping up. Yeah,

1:37:48

I think so. We didn't

1:37:50

even get to dunking on

1:37:52

code coverage and dependency injection. Yeah,

1:37:56

next time, next time. Yeah,

1:37:58

so Tomer, people wanna... see

1:38:00

what you're working on writing, speaking about these

1:38:03

days, where do they find your stuff? Well,

1:38:06

I'm running my own consulting company, so

1:38:09

that's Substrate, Substrate

1:38:11

Software Engineering, substrate.co.il

1:38:14

is the website. What

1:38:16

I'm working on in commercial

1:38:18

settings is not something I

1:38:20

can generally talk about, because it's customers'

1:38:23

stuff, not mine. That

1:38:25

being said, I have, as

1:38:29

always, there's something writing

1:38:31

or presentation-related down the

1:38:34

road. So

1:38:36

recently I gave a talk about

1:38:38

migrating to AWS Graviton, taking

1:38:40

a big production set of production

1:38:42

systems, actually, and moving them

1:38:45

over to ARM64. So

1:38:48

that was an AWS-hosted

1:38:50

event a few months ago.

1:38:54

What happens next is anyone's guess,

1:38:56

but I'm always ranting about something

1:38:58

or other on Twitter, at

1:39:01

TomerG. And if

1:39:04

you want to argue with me,

1:39:06

engage with me, talk

1:39:09

to me, or hire me, then you're more

1:39:11

than welcome to reach out. Just look up

1:39:13

my name, it's pretty internet-unique.

1:39:16

I would like to add that Tomer

1:39:19

has a whole bunch of talks which

1:39:21

are all styled around the title of

1:39:23

how shit works, and

1:39:26

how shit works a CPU,

1:39:28

how shit works time, how

1:39:31

shit works memory, whatever. And

1:39:34

you can find all of these

1:39:36

talks on YouTube, and I highly

1:39:38

recommend watching them. They're all irreverent

1:39:40

and all very highly educational and

1:39:42

informative. Awesome.

1:39:46

Highly irreverent is my middle name. I'm

1:39:51

getting there. Anyway, let's go ahead and get to

1:39:53

some picks. Dan, do you want to start us

1:39:55

off with picks? Sure. might

1:40:00

have noticed that this is my

1:40:02

return after a bit of hiatus.

1:40:04

I haven't participated in like four

1:40:07

or five episodes. Part of the reason was

1:40:09

that I was on vacation.

1:40:12

My wife and I, just the two of us,

1:40:14

went to Italy together and

1:40:17

toured all through South Italy. It

1:40:20

was awesome. So my first picks

1:40:23

would be first of all taking a vacation,

1:40:26

second taking a vacation with your

1:40:28

spouse and third

1:40:30

taking that vacation in Italy.

1:40:33

All of these would be my

1:40:36

picks. I would like to mention

1:40:38

two places in particular that we

1:40:40

visited and are like extremely unique

1:40:42

and really breathtaking and amazing. One

1:40:45

of them is this town

1:40:47

or city in Italy called

1:40:49

Matera. I don't know

1:40:52

if you've visited, it's like nothing

1:40:54

else I've ever seen. It's kind

1:40:56

of like this place where people

1:40:59

like lived in

1:41:01

caves and the rock and effectively built

1:41:03

their city over the caves that they

1:41:05

built in. And the living

1:41:09

conditions used to be terrible, which is

1:41:11

why this whole city was kind of

1:41:13

evacuated in the beginning

1:41:15

of the 20th century. But then

1:41:18

they realized that it really can

1:41:20

be turned into an amazing tourist

1:41:22

destination. So they've

1:41:24

renovated it and rebuilt it

1:41:26

and it's just gorgeous. And

1:41:29

we stayed there in a hotel

1:41:31

that was like itself like kind

1:41:33

of half a cave and it's

1:41:36

really amazing. It's like nothing I've ever

1:41:38

seen and I highly recommend visiting there.

1:41:41

And if you do and you go

1:41:44

there, stay at the Querrie Resort. It

1:41:46

was an amazing hotel, just 12 rooms

1:41:49

and it's really amazing. So

1:41:52

that would be one place that's

1:41:55

really worth mentioning. And another one

1:41:57

is an even smaller town called

1:42:00

almost a village, somewhere between a village and

1:42:02

a town called Ostuni. It's,

1:42:04

again, it's a really old

1:42:07

place that's been lived in

1:42:09

for millennia, but the

1:42:11

current city was built in the Middle

1:42:13

Ages. It's kind of like inside effectively.

1:42:15

It's almost like a fort. It's,

1:42:19

the old city is surrounded by

1:42:21

walls. It's on the

1:42:23

top of a hill with like

1:42:26

these winding streets, and they're all

1:42:28

cobbled with staircases and whatnot. And

1:42:32

it's also called,

1:42:34

the Italians

1:42:36

call it the White

1:42:41

Town, because

1:42:43

the walls

1:42:45

are painted

1:42:47

white, and the

1:42:49

city really shines in

1:42:51

the sun. It's an amazing sight.

1:42:54

I highly recommend staying there. And

1:42:57

yeah, so these two places especially, but

1:42:59

in general, just take a vacation with

1:43:01

your spouse and have a good time

1:43:04

and work on that relationship. Life

1:43:08

can be hectic, and managing your mental

1:43:10

health is more important today than ever

1:43:12

before. That's why Mindful Therapy Group's mission

1:43:14

is to take the pain out of

1:43:16

finding a therapist. Whether you need talk

1:43:18

therapy, psychological testing, even medication management, Mindful

1:43:20

has you covered. Our mental health providers

1:43:22

are here for you, with both in-person

1:43:24

and telehealth options to get you seen

1:43:26

in as little as 48 hours. Mindful

1:43:29

Therapy Group also accepts insurance. Join

1:43:31

us to start your journey to

1:43:33

a healthier and happier you. Visit

1:43:35

mindfultherapygroup.com to get started today. So

1:43:38

that would be my first pick. My

1:43:40

second pick is I'm

1:43:42

having an interesting time following

1:43:45

along this whole kerfuffle, or

1:43:47

well, it's way more than a kerfuffle now.

1:43:51

It's a drama, I guess, in

1:43:53

the WordPress community between

1:43:56

Met Mullenweg. I

1:44:00

always forget how he pronounces his name, and

1:44:04

WP Engine. I

1:44:06

think it's like the first example that I

1:44:08

can think of an entire

1:44:11

company and its user

1:44:13

base and its contributions and

1:44:15

whatever being ejected, forcefully

1:44:18

ejected out of a large open

1:44:21

source community. It's really

1:44:24

quite amazing what's going on there.

1:44:26

And you know, if you like

1:44:28

the drama, then follow along. And

1:44:33

those are my picks for today. So

1:44:36

I'm gonna pile on there because over the

1:44:38

weekend, they actually went after Advanced Custom Fields

1:44:41

as well, which is a plugin for WordPress

1:44:43

that's pretty popular. They

1:44:45

took it over, I think. It was- Yes. It was-

1:44:47

They took it off of their, basically

1:44:50

their app store, I can't remember, it was called

1:44:52

plugin directory, and they put their own in. And

1:44:56

the funny thing is, if I understand

1:44:58

correctly, their justification for

1:45:00

doing it was that it had

1:45:02

security issues. What they

1:45:04

didn't say is that those

1:45:06

security issues were not being

1:45:08

fixed by the original developers

1:45:10

because those developers were affiliated

1:45:12

with WP Engine and were

1:45:14

ejected off of the WordPress

1:45:16

community. So- Oh, I didn't follow

1:45:19

that. I didn't realize that was the case, that it

1:45:21

had a tie into the other issue. So

1:45:24

my qualm with this whole set

1:45:26

of shenanigans is

1:45:30

not being a WordPress user, I

1:45:32

don't have anything to do

1:45:34

with the community, but just reading

1:45:36

about this and assuming what I

1:45:38

read was even remotely accurate, it's

1:45:41

not just that the plugin

1:45:43

in question was taken off

1:45:47

because of a security issue, or even

1:45:49

because of something irrelevant like being affiliated

1:45:52

with a company, it's that

1:45:54

it was forked and

1:45:56

the fork was served. from

1:46:00

the whatever

1:46:02

software repository that

1:46:05

serves the whole community. So this isn't

1:46:07

just a staff. They took control of

1:46:09

it. They basically took

1:46:11

their project away. So it's

1:46:14

not just that, which is again, not

1:46:17

fully understanding the details or the companies

1:46:19

involved. It's what I'm thinking

1:46:21

about is from the perspective of a user.

1:46:24

Imagine you're using macOS

1:46:26

or Ubuntu or whatever system you

1:46:29

use, there's a product you got

1:46:31

off the respective app store for

1:46:33

that. It would

1:46:36

be, especially in a commercial setting, which is

1:46:38

easier to explain because the outrage is a

1:46:40

lot more kind of obvious, is

1:46:43

imagine I'm using a Norton

1:46:46

Commander modern clone for macOS called

1:46:48

Marta, which I highly recommend,

1:46:50

by the way. No, I'm

1:46:53

paying for it happily. Now,

1:46:55

imagine if I bought that

1:46:57

off of the Apple Mac

1:46:59

store and then a

1:47:02

couple of years later, Apple just

1:47:04

decided not just to yank

1:47:06

it off the app store with some made

1:47:09

up claim, but replace

1:47:12

it with Marti, their own

1:47:14

version of Marta that was

1:47:16

forked without my

1:47:18

knowledge, consent, or

1:47:22

ignoring the commercial and

1:47:24

human shenanigans behind the scene. That

1:47:27

is effectively

1:47:29

a betrayal of trust

1:47:32

of whomever is running that

1:47:34

software repository that

1:47:36

I haven't yet seen many

1:47:38

people decrying, but

1:47:41

I would have expected them to

1:47:44

have them being users, not WP

1:47:46

Engine actual WordPress users. I

1:47:48

would have expected to hear

1:47:50

a lot of outrage over this. Because

1:47:55

that's taking it one step further than

1:47:57

the usual open source versus code. commercial

1:48:00

drama that we're kind of used to seeing at

1:48:02

this point. And that drama

1:48:04

is explainable. You know, the

1:48:06

whole red thing, the elastic thing, you can,

1:48:09

you can see where it's coming from. This,

1:48:11

this is the same drama with someone abusing

1:48:15

their, you

1:48:17

know, authority in a way that is

1:48:20

probably legal. I wouldn't know,

1:48:22

but is incredibly harmful

1:48:24

to the community around the product. Yeah.

1:48:28

I was just going to say, I saw the advanced

1:48:30

custom fields piece of things kind of unfolding on Saturday,

1:48:32

I want to say. So

1:48:36

it's entirely possible that the community comes around and

1:48:38

does what you're saying, right? Cause it's Monday morning,

1:48:40

but I don't know. Maybe

1:48:43

they won't. Whether

1:48:45

they do or not, we'll tell

1:48:47

you a lot about open source governance in the

1:48:50

coming years, I think. That's,

1:48:53

that's where I'm interested is. Hey,

1:48:57

okay. So what does this mean for anyone else? And

1:49:00

not, not necessarily that I'm

1:49:03

in communities where I anticipate this from anybody

1:49:05

who leads any of those communities, but the fact that

1:49:07

it can happen, you

1:49:11

have to at least think about it. So

1:49:13

did you see the checkbox that they put

1:49:16

on WordPress.org? Yeah.

1:49:18

That if you want to log in, you

1:49:21

have to certify that you're not affiliated with the website. That

1:49:24

you're not affiliated with WP engine

1:49:26

or something like that. No way.

1:49:28

Yes. That had happened. And

1:49:30

then like you said, Tomer, it's, it's also

1:49:32

not whether or not it's legal. This is

1:49:34

so toxic to the community. They

1:49:37

basically ejected WP engine

1:49:39

out of the WordPress community in a way that I've not

1:49:44

seen done in any other

1:49:46

open source project, like very

1:49:49

abruptly and very violently. Now

1:49:51

it might be justified like

1:49:54

Tomer. I don't have sufficient

1:49:56

context, but the fact that

1:49:58

it can be done. is

1:50:01

I would have been a lot

1:50:03

more at ease with even with

1:50:05

this whole bizzare kerfuffle between two

1:50:08

companies that are ostensibly complementary in

1:50:10

the market. Again, as an outside

1:50:12

observer, I don't actually know the

1:50:14

details, but I would have been

1:50:16

a lot more at ease if the

1:50:20

plug-in in question had been

1:50:22

removed from the software repository

1:50:24

because it had whatever. Even

1:50:27

if you use that excuse of

1:50:29

it had unpatched security vulnerabilities, fine.

1:50:32

That's at least a valid

1:50:34

excuse, but it wasn't yanked. It was

1:50:37

replaced with a fork, which

1:50:39

is not okay under

1:50:41

any... This is basically,

1:50:43

I as a user gave permission

1:50:45

to the tool chain around this

1:50:48

repository to install a certain piece

1:50:50

of software, assuming

1:50:53

certain characteristics of

1:50:55

the people running the show, both the

1:50:57

repository and the people writing the plug-in

1:51:00

based on their reputation. Suddenly,

1:51:02

not only does that go

1:51:04

away, but my authorization

1:51:08

to the tool chain to

1:51:11

do that on my behalf

1:51:13

is effectively usurped to support

1:51:16

a different effort by different

1:51:18

people that may or may not

1:51:20

have the reputation

1:51:22

or characteristics that I want or

1:51:24

that I agree to. That to

1:51:27

me is the really new thing

1:51:29

about this whole drama because everything

1:51:31

else is just the usual. Someone

1:51:34

did something good open

1:51:37

source wise. It succeeded. They built a

1:51:40

company around it. Someone else built a

1:51:42

different company with a different business model

1:51:44

that you could discuss

1:51:46

whether or not they're leveraging off of

1:51:48

someone else's work, but the point is

1:51:50

it's open source. If you didn't want

1:51:52

someone to leverage off your work on

1:51:55

their terms, you should have licensed

1:51:57

it not openly. that's

1:52:01

on whomever released

1:52:04

the software in the first place. And

1:52:06

again, that's not discounting moral arguments. But

1:52:11

this is not, my issue with

1:52:13

what automatic did is not a

1:52:15

moral argument. It is something

1:52:17

that not being a lawyer, I could

1:52:19

never say is, but should

1:52:22

be in the vicinity of

1:52:26

actually, you know, bordering on

1:52:28

anti-counseling. Like

1:52:30

this is people

1:52:32

that have signed a U-LOG, that have

1:52:35

worked under some assumptions and you

1:52:38

yank the carpet and replace it

1:52:40

under their feet. That should not

1:52:42

ever. The answer by the way

1:52:44

is that if WP Engine wants

1:52:46

to continue working with quote unquote

1:52:48

WordPress, they should create

1:52:52

their own fork. And

1:52:55

they probably will, because there's a business there,

1:52:57

otherwise they wouldn't be in the situation to

1:52:59

begin with. Yeah, I will also put out

1:53:01

there that whatever the beef

1:53:03

was, I remember looking at

1:53:06

it and I didn't understand

1:53:08

how, because WP Engine has been around

1:53:10

for years, years

1:53:12

and years and years and years, right? And

1:53:14

so I didn't understand that

1:53:17

the situation had changed at all to

1:53:20

prompt this, right? It was just out

1:53:22

of the blue from what I could tell. We should

1:53:24

just do an episode on it and then just talk

1:53:27

about what the issues are for us. Yeah, assuming we

1:53:29

have sufficient information. Yeah. It

1:53:31

certainly has an impact on the web if

1:53:33

for no other reason that a third

1:53:36

of websites on the web are

1:53:38

still WordPress websites. Not by traffic,

1:53:41

just by counting domains. Yeah,

1:53:43

but the other thing is, is a lot of people

1:53:45

use WordPress on the back end of their JavaScript

1:53:48

apps. Yeah,

1:53:50

it's gonna have an interesting to

1:53:52

track effect on a set

1:53:54

of second order effects in the industry.

1:53:57

If you really wanna see something that most

1:53:59

everyone ignores. But that is coming and is

1:54:01

gonna affect the web is the whole kerfuffle

1:54:03

with the IO domain. Oh Yeah,

1:54:06

that's a funny one You

1:54:09

heard about that Chuck No,

1:54:11

I haven't but right so we

1:54:13

would get into it another time. Yeah,

1:54:15

okay Just say

1:54:17

this, you know the IO domain like, you

1:54:20

know Google dot IO and stuff like that.

1:54:22

It's going away. Yeah Okay

1:54:27

Very simple and good reasons, but it's

1:54:29

gonna have a heck of a yeah,

1:54:31

that's gonna affect things. Yeah for sure

1:54:34

Like I know businesses are built on

1:54:36

dot IO domains that yeah Yeah,

1:54:40

all right. So well, so that's coming. Yeah

1:54:42

fun I'm gonna jump

1:54:45

in with my picks So

1:54:47

the game that I've been playing lately with

1:54:50

my friends is risk legacy. I'm pretty sure

1:54:52

I picked this before board

1:54:54

game geek has a weight on it of

1:54:57

two point five nine, which means that it's

1:54:59

pretty approachable for Casual

1:55:02

gamers is a little more complicated

1:55:04

than like settlers of Catan But

1:55:07

you can play it and it's not terribly hard

1:55:09

to pick up if you've played risk before It's

1:55:12

mostly risk with some twists We'll

1:55:15

just put it that way So yeah,

1:55:18

so I'm enjoying that And

1:55:22

Then real quick just a couple of other picks

1:55:24

I have been reading lately What's

1:55:27

this called it's right here on my desk It's

1:55:32

Awaken the Giant Within by Tony Robbins.

1:55:35

It is awesome. I'm really liking that and

1:55:37

so I'm gonna pick that I'm

1:55:39

also gonna encourage people to go out and vote. I

1:55:42

recognize that I don't know how you vote and

1:55:44

many of you will vote different from how I

1:55:46

vote but Do

1:55:49

your homework figure out who these people are

1:55:51

and make the best decision you can And

1:55:55

yeah, those are my picks oh one other thing And

1:55:58

this is kind of a self-doubt plug,

1:56:01

but I am working on putting together

1:56:03

a bootcamp starting in

1:56:05

January that will show people how to

1:56:07

build AI agents. I'm

1:56:09

going to have examples in Ruby and JavaScript. And

1:56:11

so if you're interested in that, stay tuned

1:56:14

because I'm going to put the sales page up soon.

1:56:16

Tomer, what are your

1:56:18

picks? So I mean, beyond the

1:56:20

whole thing with the IO country,

1:56:23

country code top level domain going

1:56:25

away, which is its own thing.

1:56:27

One, I

1:56:32

guess I would say pick is retro,

1:56:35

retro computing is awesome. On

1:56:38

a previous visit to Germany a couple weeks

1:56:40

ago, I got a TI 1994 a eight

1:56:42

bit computer from

1:56:45

1978 to add to my question the

1:56:47

first computer that I owned. By

1:56:50

the way, it was it had a 16 bit GPU

1:56:53

or something like that. Or

1:56:57

something like that. But anyway, it's

1:56:59

a very early computer. It

1:57:02

gets added to my collection. This

1:57:04

collection will be the seed to

1:57:06

a full blown interactive computer museum

1:57:08

in the north of

1:57:11

Israel when I retire

1:57:13

and or the war ends, whichever

1:57:15

happens first. Which

1:57:19

brings me to my last pick, which is don't be in a

1:57:21

war. It's not good for you. As

1:57:26

a plug, I just finished the

1:57:29

first iteration of and hammering

1:57:34

on a Prometheus workshop for

1:57:36

developers. So if anyone's interested

1:57:38

in that, it

1:57:42

will probably show up both as a commercial

1:57:44

offering, but I'll probably be running it in

1:57:47

some conferences in the foreseeable future. So if

1:57:50

there's any interest in that ping me and we'll

1:57:52

see what we can make happen. We should talk

1:57:54

about that, Tom, because I've done some done

1:57:57

quite a bit of research on the internet.

1:57:59

So I think that's a really good question.

1:58:01

bit of Prometheus development relatively recently and even

1:58:04

gave a talk or two about it. So

1:58:06

I'm sorry. We

1:58:09

had an episode where about

1:58:12

Prometheus. Everyone that uses

1:58:14

Prometheus has an episode sooner or later.

1:58:16

Don't worry about it. All

1:58:21

right. Well, we'll go ahead and wrap it up here. Uh,

1:58:23

thanks for coming, Tomer. Sure. It's been

1:58:25

a pleasure. All

1:58:27

right. Uh, thanks for, thanks for opposing

1:58:30

some of my opinions. It's always better

1:58:32

when there's a, you know, some

1:58:34

back and forth. And until next time folks, Max

1:58:37

out.

Rate

Join Podchaser to...

  • Rate podcasts and episodes
  • Follow podcasts and creators
  • Create podcast and episode lists
  • & much more

Episode Tags

Do you host or manage this podcast?
Claim and edit this page to your liking.
,

Unlock more with Podchaser Pro

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