Menu
Sign In Pricing Add Podcast
Podcast Image

The Changelog: Software Development, Open Source

Lessons from 10k hours of programming (Remastered) (Interview)

Thu, 17 Oct 2024

Description

This week we're going back in time to one of our top performing shows of all time where we talk with Matt Rickard about his blog post Reflections on 10,000 Hours of Programming. These reflections are about deliberately writing code for 10,000 hours. Most don't apply to beginners. He was clear to mention that these reflections are purely about coding, not career advice or soft skills. If you count the reflections we cover on the show and be the first to comment the amount of reflections on this thread in Zulip, we'll give you a coupon code to use for a 100% free t-shirt from the merch store. Good luck...

Audio
Transcription

4.64 - 5.209 Jared

Thank you.

0
💬 0

24.189 - 44.572 Matt Rickard

What's up, nerds? You're listening to The Change Law. We feature the hackers, the leaders, and the innovators leading the world of software. And this week, Jared and I are going back in time to one of our top performing shows of 2021, really of all time. And we're talking to Matt Rickard about his blog post Reflections on 10,000 Hours of Programming.

0
💬 0

44.932 - 57.458 Matt Rickard

These reflections are about deliberately writing code for 10,000 hours. Most don't apply to beginners. He was clear to mention that these reflections are purely about coding, not career development or soft skills.

0
💬 0

57.998 - 82.237 Matt Rickard

And if you count the reflections we cover on this episode and be the first to comment on this thread in Zulip, we'll give you a coupon code for a free t-shirt, a 100% free t-shirt from the merch store. Good luck. A massive thank you to our friends and our partners over at fly.io. That's the home of changelog.com. It is the public cloud for developers who ship, developers who are productive.

0
💬 0

82.617 - 112.061 Matt Rickard

And that's us. That's you too. Learn more at fly.io. Okay, let's talk to Matt. Hey friends, you know we're big fans of fly.io and I'm here with Kurt Mackey, co-founder and CEO of Fly. Kurt, we've had some conversations and I've heard you say that public clouds suck. What is your personal lens into public clouds sucking and how does Fly not suck?

0
💬 0

112.501 - 131.208 Kurt Mackey

All right, so public clouds suck. I actually think most ways of hosting stuff on the internet sucks. And I have a lot of theories about why this is, but it almost doesn't matter. The reality is like I've built a new app for like generating sandwich recipes because my family's just into specific types of sandwiches that use Braunschweiger as a component, for example.

0
💬 0

131.508 - 149.376 Kurt Mackey

And then I want to like put that somewhere. You go to AWS and it's harder than just going and getting like a dedicated server from Headster. It's like, it's actually like more complicated to figure out how to deploy my dumb sandwich app on top of AWS because it's not built for me as a developer to be productive with. It's built for other people.

0
💬 0

149.436 - 165.805 Kurt Mackey

It's built for platform teams to kind of build the infrastructure of their dreams and hopefully create a new UX that's useful for the developers that they work with. And again, I feel like every time I talk about this, it's like I'm just too impatient. I don't particularly want to go figure so many things out purely to put my Sandwich app in front of people.

0
💬 0

165.925 - 184.22 Kurt Mackey

And I don't particularly want to have to go talk to a platform team once my Sandwich app becomes a huge startup and IPOs and I have to do a deploy. I kind of feel like all that stuff should just work for me without me having to go ask permission or talk to anyone else. And so this is a lot of, it's informed a lot of how we built Fly. Like we're still a public cloud.

0
💬 0

184.26 - 199.878 Kurt Mackey

We still have a lot of very similar low-level primitives as the bigger guys. But in general, they're designed to be used directly by developers. They're not built for a platform team to kind of cobble together. They're designed to be useful quickly for developers.

0
💬 0

199.918 - 219.249 Kurt Mackey

One of the ways we've thought about this is if you can turn a very difficult problem into a two hour problem, people will build much more interesting types of apps. And so this is why we've done things like made it easy to run an app multi-region. Most companies don't run multi-region apps on public clouds because it's functionally impossible to do without a huge amount of upfront effort.

0
💬 0

219.69 - 239.105 Kurt Mackey

It's why we've made things like the virtual machine primitives behind just a simple API. Most people don't do like code sandboxing or their own virtualization because it's just not really easy. It's not, there's just no path to that on top of the clouds. So in general, like I feel like, and it's not really fair of me to say public cloud suck because they were built for a different time.

0
💬 0

239.145 - 243.989 Kurt Mackey

If you build one of these things starting in 2007, The world's very different than it is right now.

0
💬 0

244.229 - 258.264 Kurt Mackey

And so a lot of what I'm saying, I think, is that public clouds are kind of old and there's a new version of public clouds that we should all be building on top of that are definitely gonna make me as a developer much happier than I was like five or six years ago when I was kind of stuck in this quagmire.

0
💬 0

258.672 - 279.588 Matt Rickard

So AWS was built for a different era, a different cloud era. And Fly, a public cloud, yes, but a public cloud built for developers who ship. That's the difference. And we here at Change.io are developers who ship. So you should trust us. Try out Fly, fly.io.com. Over 3 million apps, that includes us, have launched on Fly.

0
💬 0

279.908 - 326.602 Matt Rickard

They leverage the global anti-cast load balancing, the zero-config private networking, hardware isolation, instant WireGuard VPN connections with push-button deployments, scaling to thousands of instances. This is the cloud you want. Check it out, fly.io. Again, fly.io. Well, Matt, look up to the changelog. 10,000 hours is a lot to put into anything. And at some point you hit mastery.

0
💬 0

326.922 - 349.253 Matt Rickard

And in your blog post on the subject titled Reflections on 10,000 Hours of Programming, you quoted Malcolm Gladwell from Outliers, quote, The key to achieving world-class expertise in any skill is to a large extent a matter of practicing the correct way for a total of around 10,000 hours, end quote. So 10,000 hours to master a skill. That's where we're at.

0
💬 0

349.794 - 358.438 Matt Rickard

You got some lessons here you've shared, reflections for you, but lessons for us. So let's dig into those. Where do you begin when you reflect on 10,000 hours of anything?

0
💬 0

358.838 - 371.164 Adam

Well, I mean, you know, just when I think about 10,000 hours, I mean, it's a long time. You know, I think about how long I've been doing this and I've been programming for probably 15 years now. And this is a lot of time to do anything. So

0
💬 0

372.338 - 384.35 Adam

I've had tons of failures along the way, learned a ton of things, and I've been trying to blog more and write down these ideas so that I don't keep on making the same mistakes over and over again. So it's a lot for me as well.

0
💬 0

384.61 - 402.487 Matt

It's the dry principle that I do adhere to. Don't repeat yourself when there are mistakes. Don't repeat your mistakes. Dry them, as they say. Oh, yeah. What is 10,000 hours? So if we assume eight hours a day, five days a week, let's say eight hours a day times five, right? Times call it 50 weeks a year. That's 2000.

0
💬 0

403.007 - 416.04 Matt

So if you're working like a typical nine to five, take a couple of weeks off for vacation, that's 2000 hours a year and you got 15 years. So you're well over the high water mark. Did you do the math or you just, you just like, yeah, I'm there.

0
💬 0

416.44 - 427.242 Adam

No, I do the math and, you know, I spent a lot of time in open source as well. So it's like, it's not even a nine to five, it's like a six to 12 or, you know, whatever. I mean, it's an all day thing.

0
💬 0

427.562 - 435.944 Matt

So you're well over, where did you get, where did you earn your keep? You've had a couple of different jobs. You want to tell us about your, the 10,000 hours you put in, where it was and what kind of stuff you worked on?

0
💬 0

436.464 - 461.46 Adam

Yeah. So, you know, just been programming a bunch, programmed a bunch in school. after college worked in New York for a bit as a programmer, came out to the West coast here to work at Google and worked on open source. I worked on Kubernetes and kind of specifically a bunch of sub projects in Kubernetes. So was a maintainer of Minikube, kind of the local development environment for Kubernetes.

0
💬 0

462.08 - 484.885 Adam

scaffold which is kind of a kubernetes tool to help you build and deploy your apps and then kubeflow which is a machine learning kind of toolkit on top of kubernetes as well in addition to that like i've just been kind of hacking on all sorts of open source projects i wrote this configuration language virgo which is kind of for it's you can think of it as like if yaml was for

0
💬 0

485.66 - 507.852 Adam

kind of graph-based configuration instead of more hierarchical. And then, you know, built a computer vision bot for RuneScape, which was just a game that I used to play as a kid. Nice. A ton. And, you know, learned a lot about programming through that just because, you know, I was always too lazy to mine the rocks or click the buttons all day. And just like tons of projects like that. Awesome.

0
💬 0

508.154 - 529.793 Matt

Well, you can learn from experience, but you can also, life hack, learn from other people's experience. So I loved this post. You had 31 things that you've reflected, and it is specific to programming. These are not large life lessons or people lessons, you say. These are like specific programming lessons that you've learned. And I thought, let's get some of these out.

0
💬 0

529.813 - 544.187 Matt

We're not going to cover all 31 here. We'll reference the blog post, of course, but... It's nice to have the one-liner because it can resonate with you or maybe shock you, but then I think it's even nicer to have a conversation around these things. Hopefully, they become even more sticky or more real to people.

0
💬 0

544.207 - 551.534 Matt

So we're just going to go down, pick a few, see how long we last, and talk about some of these reflections of yours. Sound good?

0
💬 0

551.794 - 572.653 Matt Rickard

Sounds good. I have a bonus for a listener, too, by the way. Since we don't know how many we'll cover... And there's a free T-shirt in mind here. I'm curious if someone can listen closely and the first person who can say how many we cover, if we cover all 31 or not, or at least how many we cover in the comments gets a free T-shirt. So the first person to do that, comment, get a free T. Okay.

0
💬 0

573.434 - 591.464 Matt

What do you think, Jared? Sounds good. We'll have to partially cover a few and still have arguments over, was that actually one? That's right. We won't use any of the real words. It'd be ambiguous, right? All the words have been changed to protect the innocent. Sounds good. Free t-shirt. Why not, right? That's right. Could be the price is right. Just don't go over, be under. Okay, don't go over.

0
💬 0

591.484 - 595.467 Matt

Adam will post the official rules in the show notes.

0
💬 0

596.781 - 597.923 Matt Rickard

Best effort gets a T-shirt.

0
💬 0

598.223 - 607.157 Matt

This audience is software developers. We are pedantic, so we want to have the specifics laid out in code if possible. Can you put in a smart contract, Adam? That would be appreciated.

0
💬 0

607.257 - 609.24 Matt Rickard

Yeah, I want to write it in Ether, honestly. It's going to be fun.

0
💬 0

609.585 - 630.378 Matt

All right, let's pick up on a reflection. This seems to be perhaps your favorite, or you said you wrote some configuration language yourself. Here's one about configuration. I had not heard of this. This is reflection number 30. Oh, I probably shouldn't list them now because we're making it more difficult. This may or may not be in your list. And this is about the heptagon of configuration.

0
💬 0

630.398 - 633 Matt

Matt, I'm going to let you explain that to me because I've never heard of this before.

0
💬 0

633.14 - 645.934 Adam

Yeah, I mean, you've probably never heard of it because I, you know, I try to come up with it myself. I try to coin the term. So, you know, it's a new thing. But it's me trying to describe a pattern that I've seen in kind of software configuration.

0
💬 0

646.614 - 664.9 Adam

Where configuration seems to evolve through specific increasing levels of flexibility and complexity before returning to either hard-coded values or bash. So you go from like hard-coded values, which are the easiest, the simplest configuration, but provide very little flexibility.

0
💬 0

665.481 - 682.468 Adam

And as the program surface starts to increase and with that configuration, you know, you start to incorporate environment variables. flags and eventually you want to start to check that into version control. You turn it into a configuration file, maybe YAML, JSON, something like that.

0
💬 0

683.329 - 703.249 Adam

Then as you turn on this heptagon of configuration, and I only called it heptagon just because a lot of the ideas came from Kubernetes and Kubernetes logo has got the seven points and just worked out well. But as you're going from configuration files, You start to need a little bit more extensibility in terms of

0
💬 0

704.608 - 726.435 Adam

Templating, and I think templating is something that we're all unfortunately accustomed to a little bit too much. So that's kind of one wheel on the configuration, Heptagonic configuration. And then from templating, you go to kind of a DSL, a domain-specific language, and that allows you to have a little more type safety and a little more domain-specific reusable modules.

0
💬 0

726.555 - 748.384 Adam

And I'm sure some of us have used Puppet in the DevOps world, or there's tons of other DSLs out there. But eventually these DSLs become a little too inflexible. Maybe the requirements change, the domain changes, and then we go back to Bash. So that's kind of like this never-ending cycle of configuration that I've seen. And, you know, I saw this a lot in Kubernetes.

0
💬 0

748.744 - 762.03 Adam

There was a lot of Bash in Kubernetes and a lot of configuration. Maybe we skip the DSL part and, you know, maybe that's more of kind of a configuration as code or something like Pulumi. But, you know, maybe we'll go back to hard-coded values at some point.

0
💬 0

762.903 - 772.586 Matt

I guess what's the takeaway there? Is it like just stick with bash and everything will be better? Or is this like necessary complexity? Or is this cycle virtuous or vicious?

0
💬 0

773.026 - 793.872 Adam

That's a really good question. I don't know if it's either. I think it's just necessary complexity. And I think it's important to know maybe where you are on the spectrum. Because I do think that you need to, you can't necessarily jump from something like hard-coded variables or environmental variables to going to a DSL. I've never really seen that work out.

0
💬 0

793.912 - 802.866 Adam

So I think you do need to increase the complexity, but in a way that that complexity can be absorbed by the projects or the developers.

0
💬 0

803.246 - 825.191 Matt Rickard

almost like the process of iteration is necessary, right? Like the, you almost learn something. You said that as the surface area of the program evolves, it's almost like this iteration through the flow, this heptagon is necessary to sort of like flesh out the brittleness or the flexibility, then the eventual brittleness again of an application. Cause you sort of learn something about it.

0
💬 0

825.291 - 829.832 Matt Rickard

You provide configuration to the user base so that they can use it more different, you know, in a more flexible manner.

0
💬 0

830.612 - 856.745 Matt Rickard

then those flexibilities turn into like well this is now a best practice so all those things solidify to now you want to just hard code them so almost everybody uses the same flexible configuration in some cases i mean there's a thousand different ways you can slice how this is used in the real world but that seems to be a necessary iteration process yeah yeah i really like that point i think it's a lot about discovering what those best practices are and starting to codify them and in different sorts of ways

0
💬 0

857.065 - 877.981 Matt

There's an analog to this in economics. Benedict Evans talks about the process of bundling and unbundling. And he says in any given industry, you're either in a bundling process or an unbundling process. And it's cyclical, right? So an example of that is like television, where we were all cable TV, everything was bundled as one, and then we broke out of that.

0
💬 0

878.74 - 897.506 Matt

individual on demand, subscribe to this, that, the other thing. And now we're like in a rebundling and it's happening. You can see it with YouTube TV and different aggregators trying to pull together content. And that sounds very inefficient. Like your Heptagon sounds inefficient because it's like, well, we're going around in this circle.

0
💬 0

898.559 - 915.698 Matt

But what I've heard pointed out is that progress often looks like a circle when you look at it on its head, like in a two-dimensional plane. But then when you look at it in three-dimensional, it's more like a helix where it is moving in a circular way, but it's getting better as it goes. And I think with software, that's a lot of what we're seeing is

0
💬 0

916.721 - 935.266 Matt

these iterations and a lot of times returning to the old idea, but you're returning to it with new eyes and returning to it with new tools. And so you are building up, but you're not like building blocks on top of each other. You're kind of like circling a wagon, but you're going up, you know, it's like a helix rising, which is slower than we would want it to, but it's still progress, right?

0
💬 0

935.916 - 958.648 Adam

Yeah. Yeah. I think that's a great point. And I think we're seeing that play out in the data stack a bit with a lot of old ideas around tooling around data warehouses. And now that we have cloud data warehouses, you have Snowflake, BigQuery, Redshift, et cetera. We're bringing back a lot of those old ideas, things like OLAP cubes there, you know, there's analogs to that now.

0
💬 0

959.209 - 965.392 Adam

And just, it seems kind of like more of the same, but it's really different once you start to look under the surface.

0
💬 0

965.871 - 980.452 Matt

Well, another lesson here is one that we touched on with the Brag Prog fellas themselves around dry. This is always controversial, dry. And it's because we all think about it a little bit differently, or I think that we all misunderstand what their point was.

0
💬 0

980.492 - 1000.603 Matt

They did point out on that episode when we had their 20th anniversary show that one of the most misunderstood points in the Prague Prague book is the chapter on dry. So they tried to rewrite it. I haven't read the rewrite very closely to know if they accomplished clarifying that. But you have a point here, one of your reflections here.

0
💬 0

1000.843 - 1013.888 Matt

says, know when to break the rules for rules like don't repeat yourself. Sometimes a little repetition is better than a bit of dependency. And you link to another blog post of yours called Dry Considered Harmful. You want to unpack that one for us?

0
💬 0

1014.328 - 1033.614 Adam

Yeah, I mean, the dry consider harmful, maybe that's a clickbaity. Yeah, a little clickbaity. And, you know, I don't think it's actually that harmful. I think the way that it's been dogmatically used is sometimes a little dangerous. But it's just more of a point about how as programmers, we have a bias for abstraction.

0
💬 0

1034.134 - 1042.823 Adam

So understanding that we have that bias and trying to keep it in check, especially when it comes to duplication versus encapsulation.

0
💬 0

1043.604 - 1067.766 Adam

i just think that it's a path that i've gone down too many times of carving out microservices or creating service boundaries where there really shouldn't be or prematurely optimizing when requirements aren't really finalized and you know the requirements are are never finalized and you know just the wrong abstraction at a low level can really cause a lot of issues in terms of refactoring and and just added work down the line

0
💬 0

1068.467 - 1089.539 Matt

Yeah, I think we fall prey to this because we're such pattern matchers. And as soon as you spot that pattern, you're like, ooh, opportunity. Some of that, those abstraction layers are the power in software, right? Like the ability to build those abstractions are what give us leverage. And so every time we see one, we think, boom, I'm not going to repeat myself. I'm going to dry this sucker up.

0
💬 0

1090.379 - 1107.684 Matt

But like you point out, oftentimes that second iteration, that second usage is not actually generalizable or it looks generalizable until you find the third one, which, you know, just throw another param on the function, you know, is what we do. We're like, well, I'll just throw a true false at the end of this thing and

0
💬 0

1108.484 - 1122.749 Matt

Then I have this extra branch in my function because it didn't actually map onto the use case like I thought it did. So a lot of it's just that enthusiasm. I think of like, ah, here we go. I'm going to dry this sucker up. Feels so good. But it does come back to bite.

0
💬 0

1123.029 - 1130.431 Adam

Yeah, I don't really know how to get around it. It's just, you know, I keep on falling prey to it over and over again. But maybe that's just kind of the name of the game.

0
💬 0

1131.052 - 1137.574 Matt Rickard

What do you think comes out of the falling prey to it again and again? Do you think that it's a necessary thing that you just...

0
💬 0

1138.414 - 1165.735 Matt Rickard

learn from and grow from as a result of like just this awareness that it's not efficient to repeat yourself instead of saying don't let's say maybe not repeat yourself or should not versus don't and it's kind of a little softer on the it's maybe just being more aware of the times when there are the patterns you should said jared like the pattern matching to just be aware that these can lead down bad roads if you repeat yourself too often it makes sense to dry up things

0
💬 0

1166.195 - 1169.198 Matt Rickard

You know what I mean? To treat it more loosely? It's like an awareness thing.

0
💬 0

1169.418 - 1189.661 Matt

Well, it's worth pointing out what the rule really was or is that they point out in the Pragmatic Programmer book. And the repetition is not about code. That's where we all get it wrong. Anytime you're repeating code, it's bad. So don't repeat yourself. So let's create a function, name it, etc. Abstract a function. What they were talking about is knowledge in your system.

0
💬 0

1189.781 - 1209.934 Matt

Every piece of knowledge in your system should live in one place and one place only. But because the acronym was DRY, and it's such a catchy thing, and it's easy to remember to repeat yourself, as soon as you start repeating something, you just immediately apply it, right? But that's not the point. It's not about the code that you write. Now, some code does represent knowledge, so it does overlap.

0
💬 0

1210.014 - 1227.748 Matt

These things are not completely black and white. But that was what they were trying to say. Maybe they say it much better in the 20th anniversary. But that's why we all get it wrong. I don't know, Matt, what has anything helped you? I mean, you're writing this as a reflection, so you've obviously thought about it. Do you just tread more softly?

0
💬 0

1227.768 - 1246.614 Matt

I mean, I've introduced the rule of three for myself, which I think I got from Jeff Atwood's coding horror blog where he's like, you have to use something three times before you'll generalize it. Because I have found that it's usually that third use that points out how bad my abstraction is. But I've also found out sometimes it's like the sixth or seventh use, you know?

0
💬 0

1246.674 - 1253.12 Matt

So it doesn't always help you, but it does help me slow down a little bit and maybe just like bite the bullet one more time. What have you found?

0
💬 0

1253.5 - 1267.259 Adam

Yeah, I think the distinction that you made that the knowledge shouldn't be duplicated and is not so much about the code. I think that's a really good lesson for me. I try to understand the bias I have for abstraction and, you know, correct against it.

0
💬 0

1267.359 - 1284.942 Adam

So if that means erring on the side of duplication, then that seems to be kind of the most helpful for me, especially on smaller projects when, you know, it's either just me and a few other devs or just me. Duplication, I think, is fine because the knowledge tax is maybe not as high.

0
💬 0

1285.343 - 1296.538 Adam

But on large teams, I think maybe go the extra mile and make sure that you're not repeating yourself because the cost of repeating yourself in that context is maybe much higher.

0
💬 0

1296.963 - 1318.089 Matt

Well said. I had to just practice this discipline yesterday because I was creating a game board for Go Times 200th episode. We played Gopher's Say, which is their Family Feud edition, and I wanted a visual aid, and so I found a... a guy who had written one on CodePen. I just wanted, like, just show me the thing, you know, like how Family Feud works, right?

0
💬 0

1318.869 - 1336.26 Matt

And you guess it, and they, like, show me what the survey says. And the thing, bing, and it shows a number. And I wanted that for the live show. So I grabbed this guy's CodePen. I just downloaded it. It's just, you know, an index file, a CSS file, a JS file. And I started tweaking it so it would work for ours. And I know I needed seven rounds.

0
💬 0

1337.216 - 1358.458 Matt

And so like programmer me is like, all right, well now I need a templating language, right? So I can just template this out and then have like a data, a JSON data blob that like represents it. And then pragmatic me was like, dude, just copy and paste this file seven times and write the actual data into the HTML. You're never using this again, right?

0
💬 0

1359.099 - 1374.684 Matt

And if you do, then maybe you can abstract it later. But like, just repeat yourself even seven times. Cause I knew that was it. I was gonna do it seven times and I was never going to touch this again. And I had to like exercise the discipline because programmer engineer me had such sweet solutions for how I could generalize this sucker.

0
💬 0

1375.304 - 1397.601 Matt

Maybe turn it into a web app that other people could use, you know, that inclination. What helped was I had to have it done in like an hour and a half. And so I'm like, don't start coding. Just hard code the values and move on, man. It's tough. It's tough to fight that urge to generalize. Let's move to the next one. Here we have a reflection of yours around code comments.

0
💬 0

1398.322 - 1419.242 Matt

You say, if you have to write a comment that isn't a doc string, it should probably be refactored. Every new line of comments increases this probability. And then you have a link to a more nuanced take, which is from the Linux kernel documentation, which I did not read because who has time for nuance, right? First of all, tell us what, when you have that, it's not a doc string.

0
💬 0

1419.262 - 1423.196 Matt

What specifically do you mean by a doc string? And then how'd you learn this? And why do you believe this?

0
💬 0

1423.61 - 1441.345 Adam

Yeah, I think a doc string can mean a few different things in different languages. I think for something like Java, you know, maybe it's a little bit more defined, but basically just a comment that describes what the function is actually doing. And maybe that feeds into some sort of language server or automated documentation.

0
💬 0

1441.705 - 1446.168 Matt

Right. So you're talking about inline comments, like contextual things, hints. Exactly. Okay.

0
💬 0

1446.489 - 1467.092 Adam

And, you know, I wrote this more as kind of like, you know, it should be maybe a you know, yellow flag, maybe not so much a red flag in terms of, you know, when you see this happening. I think that I linked to the Linux kernel documentation, and I think they describe it very well. And they say, you should never really try to explain how your code works in a comment.

0
💬 0

1467.372 - 1477.557 Adam

It's much better to write the code so that the working is obvious. And you want your comments to tell what your code does, not necessarily how. And I think that's kind of the right way to go.

0
💬 0

1477.577 - 1477.837 Jared

Mm-hmm.

0
💬 0

1478.217 - 1490.81 Adam

When you're really trying to explain exactly how your code works, then maybe you should refactor it, and maybe that's a sign that other people are really going to have a tough time understanding what's going on, even with a comment.

0
💬 0

1491.611 - 1499.839 Matt Rickard

Is there a best practice for commenting then? Are you commenting every function? How to get to the point where you need to explain every single thing? If you're going to explain...

0
💬 0

1500.82 - 1522.985 Adam

what it does versus how it does it how often are you personally commenting in your code is it frequent a lot yeah i would say in terms of inline comments inside the function i would say rarely you know unless you're doing something you know really clever where it's not that obvious and you know you can't get any sort of context clues from variable names or control structure

0
💬 0

1524.088 - 1534.391 Adam

I think it's pretty rare to see that. I mean, it also depends what kind of program you're writing, right? If you're writing a really low level library, you know, I think it does make sense to be overly verbose.

0
💬 0

1534.912 - 1544.615 Adam

But, you know, if you're writing some sort of business logic, I think it maybe makes a little bit more sense to, you know, keep it at the function level or, you know, put it in maybe a different place.

0
💬 0

1544.963 - 1563.626 Matt

Yeah, I think the rules change entirely for library authors, maybe API designers versus somebody who's writing application code, business logic. I think the rules change, the best practices change. Most of my comments are apologies to my future self. Like, sorry, I couldn't think of a better way to do this.

0
💬 0

1564.647 - 1580.212 Matt

Or like admitting this is gnarly, this is a little bit gnarly, but I couldn't think of a better way. And sometimes you just have to move on and come back and it'll come to you. But yeah, I think the what and the whys. Those should be inline comments, not the hows. Because the how can change, right? That's implementation details.

0
💬 0

1580.892 - 1599.18 Matt

Oftentimes we see jokes because the comments describe something that no longer exists, you know? Like comments become out of date, especially when you're saying how. That's the most out of date thing because that's going to churn as the how, usually more than the why. But this ties into another one that you say, which is if it looks ugly, it's most likely a terrible mistake. Yeah.

0
💬 0

1599.98 - 1618.431 Matt

But I just love that because it can apply to so many aspects of life. But your point is, like, refactor the code versus making the comment if you can. Like, refactor the code so it's readable and clear. But then you say if it's ugly, it's most likely a huge mistake. Where'd this one come from? I love it, but I'm not sure where you drew that conclusion.

0
💬 0

1618.851 - 1628.297 Adam

Yeah, definitely personal experience here. When I was working on Minikube, a lot of the complexity is around, you know, it's spinning up a single-node Kubernetes distribution

0
💬 0

1628.857 - 1652.904 Adam

on your laptop so not only are you one layer deep with containers you're also another layer deep with the fact that it has to run in a virtual machine on your laptop and so that's windows that's mac os we optionally spin up a vm on linux But I found myself working with some pretty undocumented virtualization libraries on Mac OS.

0
💬 0

1653.305 - 1664.117 Adam

And, you know, I was starting to think maybe this is not the most maintainable way forward. And so I think that's one piece of personal experience where when it was ugly, it was maybe not the right way to go.

0
💬 0

1674.91 - 1697.684 Matt Rickard

Okay, we're here in the breaks. I'm here with Faraz Bukhdiye, founder and CEO of Socket.dev. So Faraz, you put out this fire post recently on X. And I'm going to paraphrase. You say the XZ package backdoor was just the tip of the iceberg. Give me just a peek behind the scenes of this incident and what you mean by it's just the tip of the iceberg.

0
💬 0

1698.044 - 1716.215 Faraz Bukhdiye

Yeah, so I think the XZutils backdoor was really eye-opening to a lot of developers. It showed the vulnerability of the open source ecosystem. You had this maintainer who had been tirelessly maintaining this package for 15 years, who was targeted by nation-state actors, who created, like literally, it's like a spy movie, right?

0
💬 0

1716.255 - 1727.121 Faraz Bukhdiye

They had multiple personas, fake personas, that were contacting this poor maintainer and working on him psychologically to convince him over the course of two years to add them

0
💬 0

1727.481 - 1752.234 Faraz Bukhdiye

to the repository and give them publish permissions and they did this through us through a bunch of kind of negative messages but also by being helpful and by sending good positive pull requests it's really like i like i really think it's out of like out of a spy movie just kind of the level of effort that they put into this and what they were able to do is get access to this package this is built into pretty much every linux server out there and what this would have let them do is it would let them

0
💬 0

1752.734 - 1769.524 Faraz Bukhdiye

SSH into any server and run any command on the server without knowing the password, without being authenticated to the server. So this would have been like a world ending, potentially kind of an attack, right? It would have been probably the worst attack we've ever seen. I'm not exaggerating. It could have been that bad, but we were lucky.

0
💬 0

1769.704 - 1789.813 Faraz Bukhdiye

Through a total accident, this backdoor dependency had made it into the beta builds of some popular Linux distros, but it hadn't made it all the way out to the stable version yet. and a developer who was testing out the beta versions of these Linux distros noticed some weird behavior. He noticed that his SSH connection was taking half a second too long.

0
💬 0

1790.493 - 1809.805 Faraz Bukhdiye

And so he pulled the thread and traced it back to this backdoor dependency, and we were all saved because of this total accident. It's mind-blowing to me for a couple reasons. One, obviously, wow, there's literally states out there, countries that are trying to target open source now. Clearly, there's a team behind this. They probably didn't just work on this one dependency.

0
💬 0

1809.865 - 1822.456 Faraz Bukhdiye

They were probably working on getting access to many other ones in parallel. If you just look at the time between the emails they sent to the maintainer, they were about a month between some of these emails. So they were probably working on other maintainers and trying to get access during that time. So that's really scary.

0
💬 0

1822.856 - 1839.893 Faraz Bukhdiye

I also think it's pretty scary to see kind of the fact that it took an accident to find the attack. It makes me think like, how many have we not caught as a community? How many have we missed if this one was caught by a total accident? It was eye-opening to a lot of people and it made people realize that there really is a threat in the open source ecosystem.

0
💬 0

1839.933 - 1854.391 Faraz Bukhdiye

And it's not because most people are bad, it's the opposite. Most people are good, but there are few bad actors out there taking advantage of the trust in the system. That's really where we come in. We're trying to give every company the tools to protect themselves from those types of attacks. And that's what we do at Socket.

0
💬 0

1854.691 - 1878.033 Matt Rickard

Okay, friends, go to socket.dev. Security dependencies. Socket is on the front lines of securing the open source ecosystem. They're a developer-first security platform that protects your code from both vulnerable and malicious dependencies. Install the GitHub app or book a demo. Again, socket.dev. That's S-O-C-K-E-T dot dev.

0
💬 0

1878.573 - 1889.216 Matt Rickard

And by our friends over at Superbase, here in the breaks, I'm here with Ant Wilson, CTO over at Superbase. So Ant, I know our listeners know a lot about Superbase, but who are you?

0
💬 0

1889.536 - 1903.921 Ant Wilson

So I'm the CTO at Superbase. And so I care a lot about the platform, whether it comes to uptime, security, availability, but I'm also extremely passionate about bringing Superbase to more developers.

0
💬 0

1904.401 - 1928.122 Matt Rickard

okay so bringing postgres to more developers i'm a big fan of that we love postgres here at changelog a lot of developers feel like the main choice or a primary choice for them is amazon web services aws right no one gets fired for using amazon web services but suit base is build no weekend scale to billions what's your vantage point on this as cto of super base

0
💬 0

1928.542 - 1949.163 Ant Wilson

When I started in my career, AWS was kind of like new and shiny. And it was so cool that you could go to this website and spin up infrastructure. And then they give you all the tools to manage it. You can drop into the console. You can kind of do whatever you want and you pay for it on a usage basis. If you use a little bit, you get a little bit. Use a lot, you pay a lot.

0
💬 0

1949.484 - 1968.352 Ant Wilson

The expectations of developers have raised since then and I think will continue to be raised because I no longer want to manage my own infrastructure. I don't want to drop into the console every time I get an additional 10,000 users on my platform to tweak the knobs and make sure that the service is still up.

0
💬 0

1968.692 - 1980.599 Ant Wilson

Oh, by the way, I've now got to go and make adjustments to the API gateway to allow for a new geography or whatever it is. I don't want to do that stuff. I want to concentrate on building the cool stuff that I imagined the night before.

0
💬 0

1981.179 - 2003.997 Ant Wilson

And I think just giving people the ability to focus on the cool thing you want to build and not have to worry about the infrastructure anymore is kind of the promise of Superbase. That will change in the future as well. Now you have to write your schemas. You shouldn't have to do that in the future again. Just focus on the cool thing that you want to build.

0
💬 0

2004.522 - 2029.065 Matt Rickard

Well, Superbase is open source. You can self-host it if you want to. It is Postgres for life. It is open source for life. Authentication, instant APIs, edge functions, real-time subscriptions, storage, vector embeddings, things for AI. It's got it all. And no servers managed by you. Just build your app, build it in a weekend, scale to billions as you grow.

0
💬 0

2029.425 - 2041.852 Matt Rickard

Learn more about their recent launch week at superbase.com slash launch week or go to superbase.com and get started. Once again, superbase.com. That's S-U-P-A-B-A-S-E.com.

0
💬 0

2057.813 - 2080.824 Matt

So anytime you reflect on 10,000 hours of programming, surely Stack Overflow comes into those reflections. And turns out it did because one of your findings or one of the things that you believe now after all this time is that browsing the source is almost always faster than finding an answer on Stack Overflow. Now, I kind of agree with you, but I also kind of disagree.

0
💬 0

2080.844 - 2083.625 Matt

So I'd love to have you elaborate a little bit on this one.

0
💬 0

2084.326 - 2106.071 Adam

Yeah, I mean, this is one that I've found super helpful just because the code can never lie. And the documentation could be out of date. The blog post you're reading could be out of date. The Stack Overflow answer could be out of date. But if you're looking at the right commit, then the code necessarily can't be out of date. I do think that it's maybe a little bit language dependent.

0
💬 0

2106.411 - 2126.7 Adam

I write a lot of Go. So, you know, there's Go docs, there's the code organization in Go is maybe a little easier to grok than something like JavaScript, where APIs can kind of be all over the place. And you're using libraries that might be nested 10 libraries deep. But for the most part, I've found that just looking at the code is the right way to go.

0
💬 0

2126.72 - 2133.483 Matt

Now, what if you're looking at some code on Stack Overflow? Still could be, still look at the code, right? Code can't lie.

0
💬 0

2133.831 - 2147.483 Matt Rickard

That's true. Maybe that's the loophole. Definitely got to check the date on the stacker. That's for sure. Because if it's like from 2016 and it's 2021, it might be out of date. Might be. Yeah, I don't know. That's a hard one, too, because it depends.

0
💬 0

2147.743 - 2167.52 Matt Rickard

And the reason I say it depends on maybe this is where the difference is, is these are reflections about pure coding, whereas my example here I'll give is more about using. So I've been doing a lot of stuff locally with Docker online. a lot of containers on my local network, and I'm doing things with Docker Compose and just learning more about different ways to extend and use Docker Compose.

0
💬 0

2168.281 - 2187.875 Matt Rickard

So they're YAML files, configuration essentially. And I'm not going to go read the Docker source code to learn about Compose because the docs are pretty good. So in that example, but that's not pure coding. It's kind of coding, right? I'm coding a config file, which isn't necessarily coding. You're using a thing. It's sort of the ambiguous middle there of coding.

0
💬 0

2188.587 - 2212.409 Matt

Yeah, it's almost like a good example is like, how do I properly call FFmpeg with these flags from my app? I just say that because we call FFmpeg from our app. I know I've looked these things up. And it's like, okay, well, the man page is a start. But holy cow, have you seen FFmpeg's man page? No. It is massive. I mean, FFmpeg, I give it praise often.

0
💬 0

2212.589 - 2232.389 Matt

It's one of the most robust tools I've ever seen. I mean, the thing can do so many different things. It's amazing. And it's incredibly black box. I mean, even the flags are very weird. And I end up on Stack Overflow a lot. And I never look at FFmpeg source code. Now, maybe in that case, I'm just a user of a tool.

0
💬 0

2232.969 - 2253.963 Matt

And so source code is never going to be where I would go unless things aren't working correctly. Maybe you just say, well, now the man page is really what I'm kind of thinking about. So contextually, when you say that, are you referring to how to solve my particular language problem? feature problem or how do I loop over these arrays or how do I use this reduce function?

0
💬 0

2254.143 - 2258.846 Matt

Or are you thinking, what context are you saying? Look at the source code or what kind of source code are you referring to?

0
💬 0

2259.107 - 2278.551 Adam

Yes. Your own other people's? For me, I think it makes the most sense to look at the source code when you're taking a dependency on a library. I think that's the most obvious one for me. Just because you're not accessing an API on HTTP. You're not accessing an RPC. You're actually taking a dependency on some code.

0
💬 0

2279.212 - 2289.979 Adam

And sure, there might be a documented way that these functions are public and these are the ones you can use. But for the most part, I think once you're at the code level, you should stay at the code level.

0
💬 0

2290.558 - 2309.39 Adam

if you're at the binary level if you're at the cli level yeah i think it makes a lot of sense to look up how do i you know cut this clip uh to 30 seconds uh you know that makes sense right right you're not going to look at the you might not even look at the man pages for uh for fm that mpeg on that no i'll just google that immediately and end up on stack overflow yeah

0
💬 0

2309.79 - 2312.971 Matt Rickard

I'll admit that this advice would have been good yesterday, actually, for me.

0
💬 0

2314.552 - 2315.872 Matt

Matt, you're a day too late, man.

0
💬 0

2315.892 - 2341 Matt Rickard

A day late and a dollar short. So I'm having Matt Billman and Christian Bach from Netlify on Founders Talk soon. And I was digging into my personal site, which actually is using Netlify. And so I was going to make some updates to it. It's a Jekyll site, essentially. And I'm using a plugin called Jekyll Assets. And something changed with Jekyll since the last time I updated in 2019 to 2021.

0
💬 0

2341.34 - 2364.731 Matt Rickard

So now I guess Jekyll assets works differently. And so things that were working once were now broken. And I was digging through documentation rather than source code. And I wasn't finding my answers. I think if I had taken your advice and just dove into the source code a bit more, I can understand a bit more how I might be able to pull assets like I'm expecting because I can see the coaching.

0
💬 0

2364.751 - 2376.117 Matt Rickard

That's a great example. Rather than the documentation be obsolete or non-existent from my use case, I can actually read the docs on how assets cause an image, for example, and what happens as a result.

0
💬 0

2376.557 - 2399.217 Matt

Let me add on. I think that's a great example there. And let me add this to what Matt is saying. because I believe this to be true, if you have a library dependency that your application relies upon and you're afraid to or for whatever reason will not peek under the covers and grok its source code, you should not be using that piece of software. You should be ready, willing, and able

0
💬 0

2399.958 - 2417.108 Matt

to read the source code of your dependencies. Now, sometimes those people are better at writing software than you are. I've learned tons of things. Other times you're like, what the heck is going on? Well, if it's ugly, it's probably a huge stake. You will level up as a developer. You will better maintain your application.

0
💬 0

2417.128 - 2440.518 Matt

You'll better own and operate your application, and you'll be much better at vetting dependencies being willing to do that. So I think Matt's advice there really pays dividends Because not only are you getting at what is true, but you're also getting familiar with all your entire stack versus just the parts that you're used to maintaining. I think black box is kind of a lie.

0
💬 0

2440.558 - 2461.035 Matt

Like there are some things which they can be a black box for a while, but that's just somebody else's abstraction, right? And so you're going to have to, it's going to leak eventually. And so be willing to dive in there and look at that code. Now, when it comes to learning, you have another one here. Only learn from the best. So when you were learning Go, you were at the standard library.

0
💬 0

2462.035 - 2478.799 Matt

Now, I produce Go time, and I know that there's people that wrote the standard library that may say, don't read this part of the standard library. But nonetheless, you went after it. And of course, the standard library is written by expert Go developers. Do you want to tell us more about this particular reflection?

0
💬 0

2479.219 - 2500.052 Adam

Yeah, I think that, you know, maybe the Go standard library is a little strong for most people. Maybe it's not at maybe the right level of readability for most projects, depending on what you're doing. But I think, you know, just as a general rule, find the best examples of code and emulate those instead of, you know, I mean, there's, I look at a lot of the code that I've published is open source.

0
💬 0

2502.834 - 2502.954 Kurt Mackey

Yeah.

0
💬 0

2503.294 - 2522.843 Adam

Just because it is, you know, it's kind of half complete. Sometimes it's maybe not using best practices, you know, I'm doing workarounds. And when someone else builds on that foundation in a similar way, you know, I think that doesn't work out too well. So even though there's a lot of terrible code and Kubernetes, and you know, I wrote a lot of it.

0
💬 0

2523.423 - 2534.009 Adam

there's a lot of great examples of what an API should look like, API versioning, API machinery. And I think those are the examples that you should be looking at, depending on what you're building.

0
💬 0

2534.329 - 2554.82 Matt Rickard

I actually learned a similar lesson to this from a fellow named Brian Tracy, but it was more in the sales vein and more of a self-development vein than it was simply programming. But the analogy is very similar. Basically, if you want to be good at something or excel at some way at something, look at who's already doing it really, really well and emulate them.

0
💬 0

2555.4 - 2575.693 Matt Rickard

So the practice essentially is if you want to do something really well, find out who's doing the best currently at it or writing the best current version of it and emulate what they've done. Not so much to copy them, but to follow their path to greatness. And you may branch off and find your own path, but follow the greats to greatness and you may be great yourself.

0
💬 0

2576.233 - 2578.715 Matt

I like that. Now, how do we identify the greatness?

0
💬 0

2580.116 - 2580.316 Dylan Fox

Yeah.

0
💬 0

2581.724 - 2582.344 Matt

You want to be good?

0
💬 0

2582.444 - 2600.672 Matt Rickard

You got to get lucky. Well, I think, you know, in the case of say the ghost in your library, I think it may have been written by some really well-known and knowledgeable people inside of Google for the most part. Right. So I think they're pretty good examples of people to emulate considering their career and what they've touched and what they've brought to market.

0
💬 0

2600.912 - 2617.04 Matt Rickard

So I think that's a good example there. I think otherwise, you know, You just got to follow your peers, you know, pay attention to the change. Love this podcast, for example. That's how you find greats. You pay attention to the media and the content happening in the space. You know, you pay attention to Twitter. You pay attention to maybe TikTok. Who knows?

0
💬 0

2617.64 - 2633.91 Matt Rickard

But for sure, Stack Overflow, for sure, GitHub, for sure. Standard libraries, for sure. The package registries. What's what are other people using? What are other people using as dependencies? And all that work will shake out who's great. I almost stopped you at TikTok, but I'll let you keep going. All right. I know. So I have a rule.

0
💬 0

2633.93 - 2647.228 Matt Rickard

I have to mention TikTok at least once every podcast from now on. I thought that was Silicon Valley. That's that too. You're still working on that one. I'll bring up Silicon Valley if you want. We could do it. Go ahead. Bring it up right now. What's a good example of the greats there?

0
💬 0

2647.948 - 2666.379 Matt Rickard

Well, I think in Silicon Valley in particular, and this may be just a break or something else, but the way you found the greats there was just by paying attention just to where the money was going, who was getting funded, who was competing, who was stealing engineers away from others. In many ways, it was Gavin Belson, the evil bad guy, essentially the big tech person.

0
💬 0

2667.159 - 2678.224 Matt Rickard

fighting the little guy trying to build the best algorithms to build a better internet. You find the best by just seeing who is actually putting stuff in the market and winning. And so that's how you find the best. All right. I take it back.

0
💬 0

2678.284 - 2696.192 Matt

Do not work in a Silicon Valley. One right here. It was a good effort though. Well, we're talking about other people's code, reading their code, learning from them. Number 14. I'll give you guys this one listener. Number 14. This definitely counts as a lesson. Use other people's code religiously.

0
💬 0

2697.093 - 2713.84 Matt

Kind of ties into what I was just talking about when I was saying, you know, don't be afraid of looking at the said code. I was saying you shouldn't use it if you don't. It doesn't mean you have to understand it, but you have to be willing to dig into it, I think. That being said, you say like, you know, go ahead and use. And a corollary is most code is terrible.

0
💬 0

2714.84 - 2723.104 Matt

Sometimes it's easier to write a better version yourself. So while they seem to be a little bit contradictory, like use their code, but don't use it when it's bad.

0
💬 0

2723.124 - 2725.405 Adam

Yeah, I think what I was trying to say there was that

0
💬 0

2726.212 - 2754.407 Adam

all code is terrible to some degree so even if you if you look at a library and say you know oh maybe i could do this better you know sometimes it still makes a lot of sense to take a dependency on that library and use it just because it's been maybe more battle tested it's maybe a time thing in terms of like you know you maybe you could you could write something as good you haven't really tried but is that kind of the the core value that you're trying to drive in in your application

0
💬 0

2755.126 - 2778.182 Adam

or something like that. So I think maybe just don't be afraid to take dependencies. I mean, know what you're getting into to some degree. A lot of the other rules are around not tangling your dependency tree, not taking dependencies on super tiny libraries. But for the most part, I think you have to use other people's code because that's the only way to continue building exciting things.

0
💬 0

2778.683 - 2800.955 Matt

I have a half written blog post about the continuum between dependency hell and not invented here syndrome and how that we all live somewhere along this spectrum. And I think that your appetite changes over the course of a career. I know that when I was first getting started, I used almost exclusively other people's code, right? Because I wasn't very good at writing code.

0
💬 0

2801.055 - 2820.152 Matt

So I couldn't really accomplish very much on my own. Easy example, maybe you're using Ruby on Rails and you're like, I want to do authentication. And it's like, I don't know how to do authentication. And then this was years ago, you would find the device library and you would use that code. And all of a sudden I could do authentication. It gave me powers I didn't previously have.

0
💬 0

2820.853 - 2833.76 Matt

Fast forward five, 10 years, I could now write that from scratch very easily, right? Because I've now seen how it works. I've used it. I've got opinions on it. I've implemented it myself a few times, not the entire device library, but authentication, right?

0
💬 0

2834.6 - 2852.607 Matt

And so now my appetite kind of changes and the decision making process kind of changes because it wasn't like, hey, I couldn't do it myself, but now it's should I do it myself? And so how do you make these decisions? Matt, you've put your time in. Surely you've gone from in certain areas, can't accomplish it to now you can accomplish it, right? You could code it up.

0
💬 0

2853.047 - 2861.751 Matt

But how do you decide what are the circumstances in which I go ahead and take on that dependency or when do I break out the text editor and write it myself?

0
💬 0

2862.168 - 2882.146 Adam

I think a lot of it is context dependent on what you're building. For instance, when I was writing lower level kind of library code, in that sense, I think you want to take as few dependencies as possible just because it can really complicate some of your downstream consumers if they need a dependency on, let's say, like LeftPad or something like that.

0
💬 0

2882.799 - 2900.323 Adam

But if you're, you know, if you're writing more kind of higher level application code, you know, I think you got to ask yourself, what goal, what are you trying to achieve here? You know, if you're working on a startup, I think it makes sense to outsource as much of the non-core value proposition of your application as possible.

0
💬 0

2900.843 - 2915.928 Adam

Sure, you can write your own authentication library, but just look at how many amazing startups have been built on Ruby on Rails, GitHub, Shopify, GitLab, just to show there's a ton of others. But sometimes it makes sense to just use other people's code in that case.

0
💬 0

2916.308 - 2927.273 Matt Rickard

Would you also say it's like proven ground? Where if you're at a lower level, you're on less proven ground. So there's probably less... code to potentially even choose from, even if you could.

0
💬 0

2927.914 - 2946.868 Matt Rickard

And maybe where you're in more proven ground, say a front end where things are sort of stabilized or something like that, it makes a lot more sense because maybe even the user base of that dependency might be great. They've got a lot of community happening there, a lot of support coming in. So it makes zero sense for you to invent here rather than dependency yourself.

0
💬 0

2947.308 - 2948.349 Adam

Yeah, I think that's a great point.

0
💬 0

2948.877 - 2972.037 Matt

Yeah, especially around certain projects where the community rallies into a specific project. I mean, Devize is a good example from maybe five, 10 years ago now where all of the authentication things, like instead of rolling your own, you use Devize and then you worked on Devize with the Devize people and everybody's making that one thing better. And so you have way more eyes on it.

0
💬 0

2972.558 - 2988.063 Matt

You have way more feature development bug fixes while you're sleeping. Like that whole community open source flywheel gets rolling and that's a real benefit. Now on the other side, a community can move away from you and your project, right? Like all of a sudden they're adding things that you don't want or need and you disagree with.

0
💬 0

2989.222 - 3008.704 Matt

And too bad the community all thinks this is good, but hey, I don't need SMS-based two-factor auth. And now you're just adding lines of code to my project when I upgrade, and I don't care. Not in Devise's case. It's pluggable. It was pretty good software. Still is, probably. But you know what I'm saying? Like a piece of software, it depends. He can start off like completely fitting you.

0
💬 0

3009.305 - 3020.83 Matt

And then a few years later, it's like this thing's heading in a direction that I don't like. And then it's time to jump ship or find an alternative or start writing it yourself. There's a lot to think about these things. Mm hmm.

0
💬 0

3021.03 - 3041.216 Adam

I think it goes back to your earlier point about the cycle of bundling and unbundling as these libraries just grow to accomplish all use cases. As your API needs are much smaller, maybe it makes sense to break out and enroll your own to actually reduce that API surface. And it ends up being actually a more stable and maintainable piece of code.

0
💬 0

3041.596 - 3063.035 Matt

So we had a show on JS Party with Ahmad Nasri, who was NPM's CTO for a while. He also started Kong, or he was involved in Kong. Been around the block, has seen a lot of things. And he takes a very hard line stance that you should only write code that only you can write. Or you and your team. Only write the code that makes you unique and different and you have the special skill set.

0
💬 0

3063.836 - 3080.345 Matt

Everything else you shouldn't be writing. Him and I actually go back and forth on that, so maybe we'll link up to it because it's an interesting conversation. But I thought, wow, here's like a real context independent. I agree with you. I think context doesn't matter. But he's saying like, nah, pretty much if it's not unique to you, you're wasting your time and your cycles.

0
💬 0

3080.825 - 3090.952 Matt

You should be outsourcing that and you should only write the code that makes you, your company, your org, whatever unique. unique and different or add something to the world versus reinventing.

0
💬 0

3091.233 - 3109.449 Matt Rickard

I think in small teams that makes sense for sure. And even if you're in a big org, you can still be in a small team. So you're always sort of like resource aware. So if you're resource aware, you shouldn't waste time. So wasting time would be writing code you shouldn't write. And being efficient would be writing code that you should write, only you should write.

0
💬 0

3110.009 - 3114.531 Matt Rickard

So I think it kind of depends still yet. But, you know, even in a big org, you could be a small team.

0
💬 0

3115.012 - 3134.138 Matt

True. There's also business decisions that go into a lot of these things beyond like merely the engineering decision making. Like Mac, you were talking about a lot of these large companies have rolled their own databases internally and. They weren't the only ones that needed that, but they had specific business reasons to do it or they had specific needs or they didn't want to.

0
💬 0

3134.259 - 3138.061 Matt

I mean, the context goes on and on and on for these decisions.

0
💬 0

3138.221 - 3138.401 Matt Rickard

Yeah.

0
💬 0

3138.782 - 3159.508 Matt

Yeah, definitely. I think size matters. Well, while we're talking dependencies, cyclomatic complexity. Let's squeeze this one in, huh? Because this is like right on topic, isn't it? Yeah. Yeah, it sure is. We don't want to change subject. Number 20, avoid cyclomatic complexity. Novice coders don't even know that they've tangled the dependency graph until it's too late. Ouch.

0
💬 0

3161.93 - 3167.033 Adam

Maybe a little harsh. I only say it because I was there. I'm still there in a lot of regards.

0
💬 0

3167.273 - 3179.899 Matt

Oh, yeah. Well, we've all been in the tangled mess before. Like, this is the dependency hell side, right? Like, how did I get here? I can't get out. Can you quickly define cyclomatic complexity for those who are unaware of the term or the understanding?

0
💬 0

3180.239 - 3201.685 Adam

Yeah, so it's basically just like an actual quantitative measure of how many, I guess, independent paths exist in your source code. So think of like control structures. So like if-else statements, how many nested if-else statements are there? How many nested for loops are there? It's something that a lot of static code analyzer tools can tell you. It's not always...

0
💬 0

3202.988 - 3220.631 Adam

maybe apples to apples in terms of, oh, this project has a super high cyclomatic complexity, and that means it's a bad project. I think you really need to look at it at a relative term, but it's something good to track with your project. And I know there's a bunch of tools for Go that do this.

0
💬 0

3221.337 - 3243.812 Adam

just to know if you're introducing some kind of really gnarly control flow in terms of super nested if statements, super nested for loops, et cetera, because the cyclomatic complexity, while it is a kind of a relatively good or bad, it does correspond to the number of test cases you need to cover your code, if you think about it that way.

0
💬 0

3258.22 - 3273.091 Matt Rickard

What's up, friends? I'm here with a new friend of ours over at Assembly AI, founder and CEO Dylan Fox. Dylan, tell me about Universal One. This is the newest, most powerful speech AI model to date. You released this recently. Tell me more.

0
💬 0

3273.512 - 3292.805 Dylan Fox

So Universal One is our flagship industry leading model for speech to text and various other speech understanding tasks. So it's about a year long effort that really is the culmination of like the years that we've spent building infrastructure and tooling at assembly to even train large scale speech AI models.

0
💬 0

3293.046 - 3302.652 Dylan Fox

It was trained on about 12 and a half million hours of voice data, multilingual, super wide range of domains and sources of audio data. So it's super robust model.

0
💬 0

3302.932 - 3316.265 Dylan Fox

We're seeing developers use it for extremely high accuracy, low cost, super fast speech to text and speech understanding tasks within their products, within automations, within workflows that they're building at their companies or within their products.

0
💬 0

3316.666 - 3333.238 Matt Rickard

Very cool. So Dylan, And one thing I love is this playground you have. You can go there, assemblyai.com slash playground, and you can just play around with all the things that is assembly. Is this the recommended path? Is this the try before you buy experience? What can people do?

0
💬 0

3333.638 - 3354.614 Dylan Fox

Yeah, so our Playground is a GUI experience over the API that's free. You can just go to it on our website, assemblyai.com slash Playground. You drop in an audio file, you can talk to the Playground. And it's a way to, in a no-code environment, interact with our models, interact with our API to see what our models and what our API can do without having to write any code.

0
💬 0

3354.874 - 3368.723 Dylan Fox

Then once you see what the models can do and you're ready to start building with the API, you can quickly transition to the API docs. Start writing code, start integrating our SDKs into your code to start leveraging our models and all our tech via our SDKs instead.

0
💬 0

3369.303 - 3394.663 Matt Rickard

Okay. Constantly updated speech AI models at your fingertips. Well, at your API fingertips, that is. A good next step is to go to their playground. You can test out their models for free right there in the browser, or you can get started with a $50 credit at assemblyai.com slash practical AI. Again, that's assemblyai.com slash practical AI. and also by our friends over at Wix.

0
💬 0

3395.064 - 3421.901 Matt Rickard

I've got just 30 seconds to tell you about Wix Studio, the web platform for freelancers, agencies, and enterprises. So here are a few things you can do in 30 seconds or less on Studio. Number one, integrate, extend, and write custom scripts in a VS Code-based IDE. Two, leverage zero setup dev, test, and production environments. Three, ship faster with an AI code assistant.

0
💬 0

3422.301 - 3441.871 Matt Rickard

And four, work with Wix headless APIs on any tech stack. Wix Studio is for devs who build websites, sell apps, go headless, or manage clients. Well, my time is up, but the list keeps going on. Step into Wix Studio and see for yourself. Go to wix.com slash studio. Once again, wix.com slash studio.

0
💬 0

3453.014 - 3474.081 Matt

So Matt, number 15, which says most code out there is terrible, was a corollary to number 14, which said use other people's code religiously. I think a corollary, if I know what a corollary is, maybe I don't, to most code out there is terrible is number three, delete as much code as you can. Does that sound right?

0
💬 0

3474.614 - 3487.98 Adam

It pains you to delete the code that you so put so much hard work into writing. I mean, the best code is no code to quote Kelsey Hightower and his no code repo, which contains absolutely no code, but also no bugs.

0
💬 0

3488.12 - 3491.842 Matt

Yes, that's true. That's right. Bug free and zero dependencies, right?

0
💬 0

3492.273 - 3494.976 Adam

Zero dependencies, easy to deploy, free to deploy.

0
💬 0

3494.996 - 3495.517 Matt

That's right.

0
💬 0

3495.717 - 3516.855 Adam

It's something that's really hard to do, but it's really satisfying when you do it. One kind of example that comes to mind is in the early days of Minikube, we were actually vendoring the entire Kubernetes distribution into the Minikube binary. That meant the kubelet was in there. All of the different components were in there. And maintaining that was a complete nightmare.

0
💬 0

3517.235 - 3539.626 Adam

Just in terms of we weren't depending on external APIs. We were depending on actual internal APIs that had no sort of guarantee whatsoever. And so once we were able to move over to a different solution, I mean, I probably deleted maybe like 4 million lines of code in one PR. Wow. It was great because our unit test coverage went way up. The tool became much more reliable.

0
💬 0

3540.581 - 3547.684 Adam

And, you know, we didn't have to spend nearly as much time maintaining all these different patches and in different pieces of code.

0
💬 0

3548.365 - 3553.607 Matt Rickard

The difference there might be that you didn't write that code, right? You wrote the code to maintain, but you didn't write the formula and lots of code.

0
💬 0

3553.787 - 3563.752 Adam

That's true. But I think, you know, even, you know, deleting a package dependency in my mind still counts as deleting a ton of code. I think you can delete. Well, I don't mean to downplay what you did.

0
💬 0

3563.992 - 3567.575 Matt Rickard

What I mean is the emotional tie to the code.

0
💬 0

3567.675 - 3576.882 Adam

Exactly. Yeah. It's much easier to delete someone else's code than to delete your own code. Right. But I think, yeah, deleting your own code is definitely much more important.

0
💬 0

3577.355 - 3598.315 Matt

I have never identified closely with my code. I think a lot of people do. And I do understand why you would, because like you said, you put your, that's your thoughts on in software, right? It's your, it's your time. It's your effort. I understand it, but I do not and have not identified closely with my code. In other words, I've always loved to delete my own code.

0
💬 0

3598.775 - 3616.321 Matt

I've never been like, aw shucks, I'm really going to miss you, 40 line function, you know? I've just been like, good, I don't need to do this anymore. Because it's always felt like a liability to me. It's never felt like something precious to hold on to, like other things do. I don't know about you, Matt. Have you ever felt like some code's been hard to get rid of?

0
💬 0

3616.381 - 3628.964 Matt

Maybe there's like a, there could be... sentimental value around something that brought value. Yeah. I don't know. I get it. Like if the whole project disappeared, sure. You know, but like that function, why do people identify with these things? You think?

0
💬 0

3629.364 - 3647.088 Adam

Yeah. I found it very, very difficult to, to delete code, especially when the code's been there a while. It's been battle tested. It represents a lot of toil, you know, maybe it's not that 40 line function. Maybe it's that, you know, 10 line function that you thought was really clever. And, you know, it spent hours figuring out the algorithm too. Yeah.

0
💬 0

3647.348 - 3655.837 Adam

just to figure out that, you know, maybe it should be replaced with something else or something much simpler. Maybe it should be replaced with the 40 line function.

0
💬 0

3656.418 - 3659.881 Matt

Maybe it should. Maybe you should have copy and pasted something off Stack Overflow.

0
💬 0

3660.101 - 3663.685 Adam

Exactly. Exactly. So that's tough, but it's just so necessary.

0
💬 0

3663.705 - 3676.615 Matt Rickard

I wonder if it speaks to confidence in yourself to go psychological. Like to feel like you shouldn't or can't delete it is having less confidence in yourself that you could rewrite it better. You know what I mean?

0
💬 0

3676.655 - 3696.049 Matt Rickard

Like you want to hold on to it because maybe you're less confident that you – and so maybe, Jared, to your point, and maybe a hat tip to you might be that you're highly confident in your abilities to rewrite the code better. Maybe I'm overconfident. Overly confident, high confidence, say it how you like. But like it leads maybe to a lack of or a high degree of confidence potentially. Maybe. Yeah.

0
💬 0

3696.089 - 3712.945 Matt

There's probably lots of factors that lead into this. I will say that version control helps me to leak code much more confidently. Because I feel like if it would be difficult to go back to here ever, maybe I would be more reticent to say, you know what, I may need this someday. I'm going to hold on to it. I see a lot of people...

0
💬 0

3713.826 - 3728.682 Matt

novices mostly just like comment out huge swaths but leave them right there like this function just uncommented out but why is it still in the source code because they don't trust their git foo or something it's like you can get back to that you know like that's what version control is for go look at a previous version

0
💬 0

3729.022 - 3732.725 Matt Rickard

Finding it might be challenging, though. I suppose if you can code search even history, you could.

0
💬 0

3733.066 - 3744.615 Matt

It could be. I think it's like, I might toggle this back on with my next commit kind of a thing. There's lots of reasons why it happens, but I find that a lot. I've never been a commenter-outer. I'm just like, delete that crap. Get it out of here.

0
💬 0

3744.936 - 3764.869 Matt Rickard

Yeah. It's noise. As somebody who is somewhat of a digital pack rat... I can empathize with the person who has a challenge in deleting it. Not because I find it useful or that I'm emotionally tied to it, but what if I wanted to reference it? What if this could be useful someday? Right. But I also say I like to delete code. It's nice.

0
💬 0

3765.609 - 3782.363 Matt Rickard

Because there's some value in that, too, because you can sort of see a better future. And I think it kind of depends, really. It depends on how emotionally connected you are to it, what your confidence might be of it. If it truly, you know, if you do believe in Git, which is totally true. Like, if it's in Git. It's in there. Or even anything else. Fossil, for example.

0
💬 0

3782.523 - 3782.984 Jared

There you go.

0
💬 0

3783.324 - 3787.928 Matt Rickard

The new and upcoming Git. Yeah, go agnostic. Maybe it's in Mercurial. Who knows? Maybe it is.

0
💬 0

3788.869 - 3808.127 Matt

Well, then you've got it in your history, so it's not gone forever. That's right. But if most code is crap, then deleting it sounds like a pretty good idea. I don't know. I'm with you. Delete as much code as you can, but no more. Don't delete more code than you can. That would be a bad idea. Yes. All right, back to code that we write, not that we delete.

0
💬 0

3808.707 - 3820.823 Matt

Number 18, organizing your code into modules, packages, and functions is important. You mean not just one big function called main? Knowing where API boundaries will materialize is an art. That kind of goes into the dry thing, doesn't it?

0
💬 0

3821.084 - 3845.619 Adam

Yeah. And something that I think about a lot with the monorepo versus microservices debate, not to even get into that, but It's really hard to know where these API boundaries are going to exist, especially early on when you're first coding your app. And I think as programmers, again, I think we want to split everything up. Every kind of the user service has its own file.

0
💬 0

3845.699 - 3868.329 Adam

The other service has its own file. But I think a lot of times we maybe prematurely code split, and that causes a lot of issues just down the line in terms of versioning things and Releasing things that actually need to be versioned together. And I think if you find yourself in that situation, maybe kind of roll it back up in some regard.

0
💬 0

3869.01 - 3877.201 Adam

Maybe it's not microservices versus monorepos, but maybe it's just something as putting things in the same package or putting things in the same file.

0
💬 0

3877.697 - 3897.717 Matt

Yeah, you would think this would be small concerns, but they end up becoming large concerns in software architecture, right? It's like where the files go, how I name things, where to put things, especially when you start working on teams, then there's disagreements over how this works. You're introducing logistics into your software by having these distinctions prematurely.

0
💬 0

3898.337 - 3924.042 Matt

and having to make sure everything's in the right place name the correct way etc start simple and then only i think abstract when it's uh necessary and beneficial that is an art though and it does take time to learn and even you know somebody who's done it for i think you and i are in very similar boats i've definitely been writing software for 15 years i still screw that up i still make the wrong call and then maybe it's hours later maybe it's days or weeks i'm like

0
💬 0

3924.562 - 3932.205 Matt

That was the wrong call. I'm going to go ahead and roll that back. I'm going to go back to where I started and go ahead and just try it the other way and see if it works any better.

0
💬 0

3932.465 - 3949.895 Matt Rickard

What are the downsides? Let's say over-organizing. Is there an over to that potentially? So you want to organize it and it's an art to do so, but what about over-organizing? Can it be... fatiguing, so to speak. And the reason why I ask this is I often see this on the front end, mainly where I play most in SAS.

0
💬 0

3949.955 - 3973.694 Matt Rickard

I know that when SAS came about, you can always add import CSS files, for example, on the front end. But it was less common because it really, in the end, just created one big CSS file on the front end itself when you moved it along. But in SAS, I noticed that a lot of people would compartmentalize little components. And it would be like a five-line rule set for CSS in there.

0
💬 0

3973.714 - 3982.376 Matt Rickard

And it's like, well, that could have been in the regular file. And you just find yourself itising yourself to the point where you're in so many different files that it's like, is this really helpful?

0
💬 0
0
💬 0

3983.396 - 3987.219 Matt Rickard

What's the downside to like over organizing? Hard to find things. Yeah.

0
💬 0

3987.659 - 4001.629 Adam

I think cyclic dependencies as well. I think it could put you in, in let's say like a go package or something like that. If you over code split, but you're actually not respecting the underlying dependencies of how the code is actually flowing.

0
💬 0

4002.025 - 4024.084 Adam

then you can get yourself in kind of a bad spot where package A depends on package B or maybe a diamond dependency problem where package A depends on B and C, but then B and C also depend on D. And I mean, you just get yourself into all sorts of package hell depending on what level you're working at. So I think it has kind of real ramifications for oversplitting or

0
💬 0

4026.301 - 4041.909 Matt

The other thing is you end up rearranging a lot of furniture for no real benefit. At the end of the day, you're supposed to be pushing your project forward. Anytime you're just rearranging furniture, which is like, I'm going to put things over here, wait a second, that has to actually go here. Nah, I liked it better when it was the other way.

0
💬 0

4042.349 - 4058.396 Matt

These are all things that are nice for procrastinating, which is something I'm very good at, but they're not great for actually getting anything done. Anytime you're dealing with this other cruft, you're not making progress. Where we like to be is flow, right? We like to be where we're just like solving problems, making progress.

0
💬 0

4058.916 - 4078.076 Matt

No one's in the flow as they're renaming files and switching from camel case to snake case or in a cyclical dependency hell. I mean, that's like the worst place to be, right? I can't even get these things to stinking require each other, import each other. But it starts off being beneficial because now you're just following a convention. You have a convention, you're following it.

0
💬 0

4078.096 - 4101.424 Matt

It starts off beneficial and then over time it can, you can overdo it. You can overdo it. Speaking of things that are hard, naming variables. You say, naming variables correctly. This is your point. This is like three words. Oh, sorry, it says name them correctly. Well, that's helpful, Matt. Name them correctly. Lesson learned. But then you admit, again, this is an art.

0
💬 0

4101.864 - 4105.686 Matt

Name your variables correctly. Any tangible advice for us on this point?

0
💬 0

4105.706 - 4109.648 Adam

Yeah, unfortunately, that's why I called it reflections on programming, not maybe lessons.

0
💬 0

4110.428 - 4113.87 Matt

Okay, we're trying to draw some lessons, but we'll just have to reflect with you.

0
💬 0

4114.13 - 4128.494 Adam

Yeah, I mean, I think the only lesson is that Definitely. At least personally, I have a bias for naming variables as short as possible. And that is probably one of the most unhelpful things you can do to your teammates and, and to your feature self.

0
💬 0

4128.775 - 4132.297 Matt

So like you'll abbreviate things and like really condense them down.

0
💬 0

4132.638 - 4152.967 Adam

Exactly. Like single letter, sometimes two or three letters. And honestly, that's, that's not super helpful. At least I found you're saving a few spaces, but you're not really, it's like the, the old adage is like, uh, debugged for six hours and, you know, I could have saved myself, you know, 10 minutes of reading the man page or something like that.

0
💬 0

4153.648 - 4173.609 Matt

Right. Yeah, we were debating the pros and cons of abbreviating variables on a go time episode that I happened to be upon. And I learned something there, or maybe it was just coagulated there from Dave Chaney, where he said something along the lines of the further away the variable is from being used, the longer its name should be.

0
💬 0

4174.23 - 4192.622 Matt

But like the closer it is to being used, the name can be shorter and shorter, like to the immediate context. So like a for loop is an obvious one where it's like, yeah, I is fine. Because, like, here's I, it equals this. I'm going to iterate it, increment it, whatever. And then I'm done with it. And it's like, we all understand that. It's I. It's not actually confusing.

0
💬 0

4192.662 - 4208.168 Matt

But, like, if you start naming your variables that are used further down or elsewhere, maybe they're exposed somehow, I. or Z or foobar or baz, these are like, they don't signal anything to somebody who doesn't have your immediate context.

0
💬 0

4208.188 - 4215.69 Matt

I thought that was a pretty good way of thinking about it because I've always gone for this balance of clarity and brevity, but it's always been a hard balance to strike.

0
💬 0

4216.11 - 4227.994 Matt Rickard

Would it be more helpful if it was instead of I, if it was iterate or increment, that's where you can really like drive that point home. Cause if you can say, what would the extended version of IB iterator and would it be more useful?

0
💬 0

4228.294 - 4233.055 Matt

Yeah, I think in the case of like a for loop, I think I is just totally fine. That's my take on it. Like I would use it.

0
💬 0

4233.075 - 4240.918 Matt Rickard

Of course it is. But I mean, like, let's do the exact opposite as a fun case. Let's expand it to like its full word. Would it be iterate or increment or what would it be?

0
💬 0

4240.938 - 4245.819 Matt

Yeah, I think it's an iterator. Like that variable is one that you're using to iterate. And so I'd call it iterator, something like that.

0
💬 0

4246.01 - 4256.733 Matt Rickard

So would it be more helpful or less helpful if it was for iterator? You know, if the variable was iterate instead of I. It's too much typing, man. Too much typing. Too much typing, right? So the answer is no, not more helpful.

0
💬 0

4256.873 - 4276.399 Matt

This is why Matt likes to make them as small as possible because it's just annoying. Right. Like, it's just a balance of, like, this annoys me, even with tab completion, versus this has a useful symbol. Like, I don't understand in Go, so if error, not equal null, or if, you know, ERR. What's up with that? You're saving literally two letters, error versus er.

0
💬 0

4277.039 - 4296.246 Matt

But it's a convention of the community, so everybody knows what it is. I don't think it's ambiguous when you see F-E-R-R. I understand that's the error. But the abbreviation there to me is like, what am I gaining? I'm saving two letters. I understand when you take internationalization and you say I-18-N. That's a huge win for all of us, right? Yeah.

0
💬 0

4296.943 - 4309.55 Matt

But ERR, as an abbreviation for E-R-R-O-R, it just seems a little bit silly. That being said, we all do it. We're all on board. It's clear. It's not a problem. I just don't understand the win.

0
💬 0

4309.63 - 4315.714 Matt Rickard

I don't know if that's short for error, though, is it? Yeah, it is. Well, isn't ERR an actual word itself, though? E-R-R?

0
💬 0
0
💬 0

4316.774 - 4321.577 Matt Rickard

It's its own word. So is it a shortened version of error, or is it just a shortened version of the word?

0
💬 0

4321.96 - 4328.187 Matt

Well, I'm sure, and I don't know, Matt, you're more of a gopher than I am, but I think when in the go community, when they use ERR, it's representing an error, isn't it?

0
💬 0

4328.407 - 4346.891 Adam

Yeah. Yeah. I mean, maybe there's a, there's a little confusion because, uh, error is the interface that it implements. So, you know, maybe there's a little ambiguity there, even though it is case sensitive, I think, but yeah, I totally agree. I think. when there's convention and you use convention, you know, stick to that.

0
💬 0

4347.132 - 4347.732 Matt

Yeah, I agree.

0
💬 0

4347.953 - 4356.263 Adam

If you were to say E instead of ERR, maybe that's a little wrong, you know, because you're not sticking to convention and you're shortening it a little bit too much.

0
💬 0

4356.684 - 4379.501 Matt

Yeah. Right. I agree. Whatever, are the idioms of the language or the runtime or whatever it is the community that you're working in follow those conventions because that's where clarity is just for free like you get it for free and even if your idea is more clear to you you're breaking convention and so it's less clear almost de facto to everybody else but in the case where there is no convention

0
💬 0

4380.069 - 4397.915 Matt

I think Dave Cheney's rule of like the further away a thing is from being used, the more verbose or more information has to be in the variable name. I think that's a pretty cool rule of thumb. Obviously rules are meant to be broken. So there are times where it may not make sense, but I thought that was a, an actual tangible way of a takeaway.

0
💬 0

4397.955 - 4413.286 Matt

Because when I say, I like to say, Hey, this variable name is terrible too. But like, Lacking any of their information. Like, well, that's not useful. How could it be better? Like, well, it's 27 characters long. So that's not good.

0
💬 0

4413.687 - 4426.799 Matt Rickard

The such thing is too long. I think the point he's making there is like, if you're going to see it frequently, make it brief, right? Because like, you're going to see it more often. The quicker you get something done that you're familiar with, we're going to happen frequently, probably the better.

0
💬 0

4427.379 - 4436.128 Matt Rickard

So the more often you read ERR versus error, as an example, if you read that 50 times a day versus once a week, maybe do it briefly.

0
💬 0

4436.738 - 4454.97 Matt

Yeah. If you can't think of a good variable name, this is where a code comment comes into place. Apologize. Be like, this is not the greatest name ever, but I needed to finish this feature, so this is what I got. Please, think of a better name. Yeah, open to consideration. Feedback welcome. If you're confused by this variable name, you're just like me. I'm also confused.

0
💬 0

4456.351 - 4473.557 Matt

Those are the kind of comments I enjoy. Because you get a chuckle even when you come back to it later. You're like, oh yeah, I couldn't think of a name for this thing. Then you sit there and you're like, hmm, I still can't think of a good one. But sometimes it just comes to you. All right, let's hit another one here. This one's a little bit bigger picture. Technology does not diffuse equally.

0
💬 0

4473.577 - 4482.32 Matt

There's more to your reflection than just that. But I want to stop there and have you talk first. So go ahead and unpack that phrase for us. Why do you think that's the case?

0
💬 0

4482.711 - 4499.47 Adam

Yeah, I think of it as almost like kind of continuous learning. And, you know, we can learn so much from these different kind of sub communities, especially as what it means to be a software developer means just so much. Now, you could be a front end developer, you could be a back end developer, you could be a data analyst, data engineer.

0
💬 0

4499.83 - 4528.623 Adam

I mean, there's just so much that goes into actually writing code. I think tangible examples are backend engineers can learn a lot about UI and UX from frontend engineers, especially what it means to make a user-friendly CLI or user-friendly error messages. I think sometimes backend engineers over-index on complexity and maybe not thinking of the user. In a lot of cases, it's another developer.

0
💬 0

4529.642 - 4536.987 Adam

It's one of those things where there's just so much we can learn by looking at these different sub-communities. So it's something that I try to keep an open mind to.

0
💬 0

4537.287 - 4560.801 Matt

That one absolutely resonates with me. One example I cite often, which I'm still impressed by, is Dan Abramov's stealing of the Elm architecture for Redux. And he came on the show back when Redux first started getting wide use in the React community. And he basically said, yeah, I saw what the Elm folks were doing over there. And it was awesome, their architecture for state.

0
💬 0

4561.601 - 4578.246 Matt

And I decided React needed that. And so I built Redux. And shamelessly, great artist Steel. And he gave great credit to the Elm folks for coming up with a cool system that Dan learned about and appreciated and said, I'm going to bring that over here.

0
💬 0

4579.166 - 4602.419 Matt

and everybody benefits i think when those things propagate across community bounds for sure so individual takeaways there i guess is kind of like keep your head up and and know what other people are working on or don't don't niche down or don't go so focused in on a singular aspect of any specific part of the tech world or is that the advice then seems like it is

0
💬 0

4602.745 - 4621.35 Adam

Yeah, I think your example from Dan is amazing. I think it's just like ideas like that that can kind of pop up in a lot of different places and you can look at it and say, oh my God, this would be amazing for the project or the part of the stack that I'm working on. And, you know, I just think there's so much cross-pollination that can still happen.

0
💬 0

4621.39 - 4626.733 Adam

And it's just such low-hanging fruit in terms of how we can push all this technology forward.

0
💬 0

4640.542 - 4640.722 Dylan Fox

Yeah.

0
💬 0

4642.604 - 4665.144 Matt Rickard

But to be able to look beyond the lines of the camps and say, what ideas have you implemented that would translate to our ecosystem and make sense for us to look at, I think is something that's been a hallmark for this show really since its inception. We began as the changelog. We began not choosing the Ruby camp despite our Ruby roots in many ways.

0
💬 0

4665.985 - 4686.923 Matt Rickard

We didn't choose a specific camp and say this is the Ruby changelog. We said this is the changelog because open source was moving fast. It was difficult to keep up. And this show and the blog that came from it was an example of how to pay attention agnostically across the board and to cross-pollinate those ideas. I think this is like core DNA for us and phenomenal advice from you.

0
💬 0

4687.563 - 4706.662 Matt

Here's another awesome example. This happened just recently. I love seeing it because it means we're having a little bit of impact out there. So there is this idea with to do comments, which talk about commenting and best practices is that, you know, you always leave these to do's lying around our code bases and then nothing else happens. Like that's where they are.

0
💬 0

4706.962 - 4726.564 Matt

And usually these things never get done. And a lot of times it's because you forget about it or it depends on something else changing. Well, there was a cool idea coming out of, I think, the Rust community, and there's also a Ruby gem for this, where they started having these self-destructing to-dos. Have you guys heard of these? So it's like you write your to-do.

0
💬 0

4726.584 - 4743.956 Matt

It's like a static analyzer kind of a thing. You write your to-dos in a specific syntax where you can apply criteria to your to-do, whether it's based on a certain time frame or based on... a URL that has to, whatever. I can't remember all the different things, but you can add these conditions to these to-dos.

0
💬 0

4744.596 - 4763.091 Matt

And then the tooling provides integrations, I believe, into editors and different linters and stuff to like bring, float those to-dos. It's kind of like with Gmail where you can like push things off till later and then they come back. And that was a really cool idea. Well, then somebody got inspired by that and they made one for Python.

0
💬 0

4763.792 - 4787.976 Matt

So that person's name is Clemon Seaver and he wrote To Do or Die. They're called To Do or Die. And they're to-do-or-die Python edition. So we covered that one. We covered the Rust one. And then the Python one cropped up. And then somebody else was inspired by that, Brian Underwood. And he wrote one for the Elixir community in Credo called Credo to-do or deny.

0
💬 0

4788.056 - 4802.127 Matt

And Credo is like a linting tool or a best practice following kind of analyzer tool for Elixir. And so now this concept, which was over there in the Rust world of, hey, what if our to-dos had these, you know, were better than what they already are.

0
💬 0

4802.822 - 4822.832 Matt

that idea is picked up and kind of propagated around and like way more people get to benefit because these people were paying attention to other camps and willing to put the work in to like provide that for their language of choice it's pretty sweet that's awesome yeah Well, Matt, we've come to the end of our time here. This has been awesome.

0
💬 0

4822.852 - 4845.836 Matt

I appreciate you writing down what you did so that we all can learn from your reflections. We can discuss and pick them apart and agree or disagree. Certainly propagating good ideas and your hard-earned experience out there for other people to learn from. I think that's really cool and appreciate you writing up. Looks like you're blogging quite a bit lately. We'll have links to your blog

0
💬 0

4846.616 - 4860.283 Matt

this article, everything else we mentioned that jazz party episode as well in the show notes for everybody. The one I referenced with Ahmad Nasri, if you want to listen to that discussion as well. Anything else you want to say, Matt, before we call the show?

0
💬 0

4860.583 - 4866.526 Adam

I mean, thanks for having me. I had such a blast and I've been such a longtime listener. So it's fun to be on the podcast.

0
💬 0

4866.787 - 4867.527 Matt Rickard

It's good to have you, Matt.

0
💬 0

4867.827 - 4868.668 Matt

Yeah, it was lots of fun.

0
💬 0

4868.808 - 4891.367 Matt Rickard

Appreciate it. Well, that was fun. We went back in the past. We learned about some cool reflections of 10,000 hours of programming. Not career advice, although that is good, and not soft skills, but actual coding, what it takes to become a master software developer. So which reflection was your favorite?

0
💬 0

4891.768 - 4915.249 Matt Rickard

As we mentioned in the intro and during the show, be the first person to comment on this thread in Zulip the correct number of reflections mentioned in this episode. And you've got yourself a free T-shirt from our merch store. And if you've never been there, go to merch.changelog.com. Now you know. Okay, so we took the week off. We brought you a blast from the past.

0
💬 0

4915.329 - 4934.984 Matt Rickard

Well, we had a scheduling issue last week, and so we just didn't record an episode. Sometimes that happens. And in this case, thanks to Matt, we brought you a gem, a banger of a show, Reflections on 10,000 Hours of Programming. This is the podcast that just keeps on giving. I hope you enjoyed it.

0
💬 0

4935.504 - 4956.802 Matt Rickard

Okay, so a massive thank you to our friends over at Fly, our friends over at Socket, our friends over at Assembly AI, and of course to our friends over at Wix for the awesome work they're doing on Wix Studio. We have awesome sponsors. I hope you love them, and anything you do with them in reflection of this podcast supports us, and we appreciate that.

0
💬 0

4957.362 - 4966.533 Matt Rickard

Big thank you to Break Master Cylinder for those awesome beats. Banging beats. Love those beats. Okay, that's it. The show's done. We'll see you on Friday.

0
💬 0
Comments

There are no comments yet.

Please log in to write the first comment.