Coding Blocks - The Pragmatic Programmer – Know Thy Tools
Episode Date: July 8, 2019We dig into the details of the basic tools while continuing our journey into The Pragmatic Programmer while Joe programs by coincidence, Michael can't pronounce numbers, and Allen makes a point....
Transcript
Discussion (0)
You're listening to Coding Blocks, episode 110.
Subscribe to us and leave us a review on iTunes, Spotify, Stitcher, and more using your favorite
podcast app.
And check out CodingBlocks.net where you can find show notes, examples, discussion, and
a whole lot more.
Send your feedback, questions, and rants to comments at CodingBlocks.net, follow us on
Twitter at CodingBlocks, or head to www.CodingBlocks.net and find all our social links there at the
top of the page.
With that, I'm Alan Underwood. I'm Joe Zach. And I'm Michael Outlaw. This episode is sponsored by Clubhouse,
the developer-friendly project management platform, and Datadog, the monitoring platform
for cloud-scale infrastructure and applications. All right, so in this episode, quickly, we're
going to, well, no, we won't quickly do this, but quickly
I'll tell you what we're going to do in this episode.
We'll be continuing on the pragmatic programmer.
And in this one, we're going to be talking about basic tools and why text is important.
All right.
And first up, a little bit of news here.
So big thank you to the reviews.
iTunes, we got breakpoint, won't be hit, and Symphonic Pictures. So thank you very much.
And from Stitcher, we have Arnon.
And you know what, man? That Breakpoint, Won't Be Hit is so frustrating.
Isn't it?
Yeah, yeah.
Like, I think every one of us felt a little bit of pain when we read that name or when you heard it. We're like, ah, really?
I feel it, brother.
That's rough.
All right.
So the one thing that I want to point out.
So Joe Zach does a lot of the newsletter contest type things that we send out.
And if you're not a part of the newsletter, I recommend it.
We give away a lot of software on there and other things.
So like the one that we just did was a JetBrains contest and he did something really fun with it.
He's like, hey, tell us what is a great motivational song for you.
And so I thought it'd be fun to take all the responses we got from it,
which were a lot, and try and create a Spotify playlist
with all these songs, right?
And it's surprisingly birdshot.
There is stuff everywhere.
It reminds me of what my playlists are.
There might be some really mellow song,
then there's going to be some hardcore gangster rap,
and then maybe some heavy metal.
It felt very much familiar to me, but I highly recommend it.
We'll have a link in the show notes here.
Go check it out. I found some new bands and songs that I'd never heard before. Some of
them I really liked. Some of them I was like, eh, but you know, you'll probably find the same thing.
So I'm not completely done with it. Hopefully by the time this drops, this one releases,
I will have them all in there. I will tell you that one of the songs, Eye of the Tiger, came up so many times.
Like, I almost started keeping a tally of it because it's like, oh, hit that one.
That one and Don't Stop Believing by Journey also made it a lot.
So we've got a lot of people from the 80s era that were adding these songs in here, or 70s.
I didn't see any Rage Against the Machine in the list,
so I'm going to have to disqualify this whole.
I haven't put my entries in yet.
Oh, okay.
So, yeah, I think the three of us need to cut.
All right.
I feel like Killing in the Name of should be somewhere.
That's a really good one.
That gets you pumped up and motivated.
We should put us all on the spot.
So yours is Killing in the Name of.
What would yours be, Joe?
I'm sorry. I got Steeler from Critner. It's just too good i gotta go with uh ashley owes oh honey no no you gotta come up with your own that's not fair i'm sorry this is just so good
like i'm on a roll achieving my goals it's just too good all right so i've got three and i don't
know what they would be like i know i'd have to ultimately pick one, but I think outlaw you might like this one.
So Eminem from eight mile,
uh,
lose yourself.
Okay.
That one always pumps me up.
That was a good one.
I mean,
Hey,
we got rabbit right here.
We could have him,
we could tell him to,
you know,
do a little rap for us.
Joe's act throw down.
I mean,
he might have some spaghetti on his sweater already,
so he might be ready.
Oh,
that's amazing.
Um, this is amazing um say what oh
um there is the script hall of fame that's another one that i really like and then by imagine dragons
whatever it takes like those are three that i could listen to anytime and be like oh yeah let's
go conquer the world i'm fine so and I know I had that on do not disturb.
So now I'm just going to turn it off.
Yeah.
Alan, way to go.
That's unbelievable.
All right.
Who, who leaves their phones in like regular mode when it's time to record?
It was on do not disturb.
I mean, surely I did not forget to do that.
As he, as he clicks on his watch and his phones.
Yeah. Turn the thing off. I keep my hands on silent all the time man that's so frustrating i had to do not disturb so anyways yes killer ringtones like
mine i gotta hear them well mine's always stuck in the couch anyway so it didn't really matter
that's hilarious i'm never near it so definitely go check out the spotify thing and then joe you've
got some other stuff here yep uh. Doing another book giveaway this episode.
Make sure to leave a comment and we'll pick a winner and we'll try to contact you.
It's a little bit awkward now with Discord thanks to GDPR.
So make sure to check your comments to see if any have been replied to.
I think it gives you a little notification to discuss.
Just keep an eye out when you're popping around in there.
I just had a few people not know that they've been contacted.
They don't show you the email address anymore. Wait. wait oh that's what you mean by thanks to gdpr
yeah okay i was like wait where are we going with this what's the yeah i have no way to see
yeah so uh there's a few people that have won uh in the last couple months that uh presumably don't
know that they've won so yeah you should uh come on come back to the site leave a comment for this
episode and hey maybe you won one last month.
And if you don't know what GDPR is, that's some good toilet side reading.
Just Google it.
Toilet side reading.
Isn't that when you do all your reading?
I don't know.
Well, I think there's a different term for it, though.
I've never heard it referred to as toilet side reading.
But I guess if we want to keep that clean tag on iTunes, we won't say it.
Yeah, no, we'll keep it in Toyota's head.
All right, what else we got?
I also want to mention that I'll be speaking to the Daytona Devs meetup in July.
I don't think there's a date yet, but it's going to be late in the month,
so probably around maybe the 30th or something.
So you should come check that out if you live around Daytona, Volusia County.
Hey, what's the topic?
Oh, that part doesn't matter.
It's Daytona.
I'm just talking. I mean, here's the thing. There doesn't matter it's daytona i'm just talking
i mean here's the thing like there's a little bit of jealousy i'm not gonna lie because every
one of his talks are like someplace that sound like really cool you know it's like oh hey here's
another beach destination i'm gonna do a talk on what's the talk on i don't care it's at a beach
yeah it's it is super cool it's really cool but yeah like the topic really doesn't matter
as everyone like secretly knows like the best part about going to meetups is actually just
like the talking before and after sorry no offense usually everyone should go and
pay good attention to alan's talk uh this week but uh wait wait that's already gone that's over
right yeah that was last yeah oh that's right that's in the past it was awesome i'm just telling
you right now it was awesome yeah i did one last week too then yeah but what is it is it jam stack
jam stack and i'm doing this one uh one a
new one this week on um c sharp for javascript developers which i think is gonna be interesting
we'll try and get a video published for that uh this this week too very cool all right so
i guess moving in here we're going to be talking about the basic tools you need as a pragmatic programmer.
And this is a very true statement.
The tools can amplify your talent, right?
That's important.
They're not going to make you better, but they can amplify what you're already good at and what you already know.
Yeah, I actually had my own highlights and notes in the book for
that part because when they were saying like, you know, the tools amplify your talents and I'm like,
well, they're going to only amplify your talent and you have to have the talent there. But I mean,
I get what they're going after here, right? Like, I mean, you kind of have to know what you're
trying to do before, you know, I mean, the tool isn't going to just do it for you, right? That's true. Except for like, if you think about things like ReSharper, it definitely,
let's, let's back up. So you had to still put the thought out and then ReSharper can make a
suggestion. Right, right. But I guess what I was getting at is you remember the first time you
ever looked at a link query in C sharp and you just said, I have no idea what this garbage is. Right.
And that was a rabbit hole that you go down. One of the cool things like Emory sharper is you could
go in there and put in your regular forward loop and all that kind of stuff and say, Hey, turn this
into a link query. And you could kind of see how it moved your old train of thought into this new,
this new context. Right. So it can help, but you still have to-
From customer in, customers, blah, blah, blah.
Right, right.
So you could do some really cool stuff with it.
But I do agree with this overall,
that tools are going to help you increase your abilities.
Yeah, and we say they can amplify it
because you still need to know
how to use these tools too, to their full capability.
So it's not just about like, uh, you knowing what
you want to do, but also knowing what the tool can do too. Like if you don't even know that the
tool can do, has the ability to do something like, like you brought up the resharper refactoring,
uh, you know, suggestions, like if you didn't even know that it could do that,
or you're not paying attention when it's a little light bulbs pop up or it's a little
squigglies pop up, then, you know, it's still not doing you any good. Like you're not using it to its full capability at that point.
So I have a question for you guys. How do you find out about all the capabilities? Because
like, let's be honest, things like Visual Studio or IntelliJ, those are massive.
I think in my opinion, you have to be, you just have to be that inquisitive,
like that needs to be part of your nature, right?
To be inquisitive.
Like, ooh, what does this do?
What happens if I click that?
Oh, that's the default?
What if I change it?
That's how you have to be willing to experiment.
What about you, Joe?
I hate changing defaults.
I don't like changing settings.
Although I will say, I think a year or two ago,
we kind of talked about some shortcuts
and improving typing speed and stuff
and some of the things that some developers were kind of talking around about time as a way of
kind of getting the tools better in order to kind of improve the craft and i kind of poo-pooed it
because i was like listen typing speed is not my bottleneck when it comes to coding and i think i
had a big rant about it but i'm kind of coming back around the other side on that one after
working in intellij a little bit, I realized just how important it is
to know your tools because if you're struggling with the tool and if you're having to look up the
shortcut and Google how to do stuff, then you lose your train of thoughts on the other things.
So it's hard to maintain like a high level way of thinking and thinking about like design of code
if you're tripping on your editor and tripping on your tools. So since then, I've been a lot
better about trying to look up those shortcuts and trying to kind of figure out those things just to make life easier.
Like just a little stupid stuff like knowing how to like all caps or all lowercase or just little things like that, how to rename in files really helps out a lot.
So that kind of goes to the tool.
So I've changed my font recently.
I've installed a couple of extensions and kind of played around in VS Code.
So I'm trying to invest some more time there.
And so that's where my head's at right now.
That's cool. I was also going to mention a place that, that I didn't use to go to,
to find these things, but more over time, just because these, these tool sets are so huge.
I'll actually look at the release notes for, for, you know, a particular version because
they'll mention things like, you know, I dropped something in Slack the other day about temporal tables in SQL Server. And if you're just somebody that's a SQL guru, that's, you know, you've been
doing it for 10 or 15 years, you're probably not going to look into the brand new things that
happen, because you've probably already come up with ways to version your data in your tables and
all that kind of stuff. And you may not know that that thing exists. So, you know, the release notes
help you at least
find nuggets it's like hey wait what is that and go search and find it out you know yeah it kind
of goes hand in hand with like another theory that i've had for a long time too but you know
like don't be afraid to break it you know like you want to learn your your operating system or
whatever like you know go in there and mess around and if you break it fine just reinstall it who
cares like if you're afraid that you know know, like, Oh, I don't want
to change the defaults because, or I don't want to change this, this tool's configuration because
of blah, blah, blah, blah, blah, blah. Like then it's already some kind of fear. Right. And so
it's like, don't be afraid to break it because you could always just reinstall it. Yep. Fear
only comes from the unknown. The more you dig into it, the less you're scared of it because
now you're like, you know, the nuts and bolts, you know into it, the less you're scared of it because now you're like, you know the nuts and bolts.
You know the way things work.
So, yeah, the next bullet we have up here is expect to add new tools to your toolbox regularly.
You know, I fully agree with this.
We haven't done one of the episodes that we've done in years past where we would go through and list off our favorite new tools.
Favorite tools for the year, yeah. And it's because, I mean, once you get a pretty decent tool bag with your tools in it, you're
not constantly hunting for them.
But, I mean, if you go back and listen to any of those, we had a lot that we already
You're supposed to be, though.
I know, I know, and that's the thing.
I would bet you that we've found new things.
Like, we're always giving out tips of the week, you know, every episode.
So, we're always finding something, but it's like, instead of saving it for one show, it's
just getting sprinkled around.
Yeah, that's true.
But yeah, I mean, definitely always be adding new tools to your toolbox.
Find things that, a way to think about this, at least for me is, and we'll probably mention
my buddy, Ryan, Ryan Monster in here a couple of times.
He wrote an extension for Visual Studio at one point called Glyphrend.
Right?
If you've ever done any front-end work where you're using icon sets, which a lot of people that write any kind of admin pages are,
you would find yourself leaving your IDE, going to the web, searching for, you know, icon sets, what font
awesome is like a very popular one. And you go over there and you'd search and you'd find, Hey,
where's, where's an open folder type icon. Right. And then you come back over to your IDE, you would
type some stuff in. And anytime you needed to find another icon, you would leave your IDE and go
somewhere. And he was like, you know what? If I'm leaving my IDE to go do something, that's a potential gap that needs to be filled
with another tool, right? And so just think about that. If your workflow doesn't feel natural
because you're having to leave some environment to go to some other environment, then maybe there's
a tool out there for it, right?
Yeah, always be looking around for better ways to do something to solve some problem.
Yeah, I like that a lot.
I like scripting stuff if you don't have one, like anything you can do to like kind of consolidate your process.
And basically, it's building towards automating, right?
So like kind of the walk, crawl, run, crawl, walk, run type thing
that it sounds like we're kind of talking about here.
It's like, you got to kind of figure out what you're doing
and you got to kind of formalize that into good processes
so you can automate it.
And that's where those tools come in
is they're kind of like automating mundane things
and able to kind of fill in the gaps in your processes.
Yeah, we didn't put many notes in here regarding the
chapter in terms of like their analogies and what they drew, because honestly you should just get
the book and read some of this stuff, but they did draw parallels to like a wood worker, right?
And how they build up their tools and, and you have to learn those tools, right? It's,
you know, maybe, maybe if you're using your circular saw, you know,
that it sort of has this thing to where it's not exactly on that line all the time. And maybe you
can't adjust it to get it there. So you know about that. And so over time you modify these tools to
fit your, your work style. And it's very similar in the world of software development. I am with
Joe though on this. So like, I don't really change a lot of the defaults.
I don't either, basically because I don't want the next version
to come out and hose everything I've got.
I mean, I'm kind of wondering, like, where does it draw the lines, though?
Because, like, I mean, I do install plugins and extensions.
So does that count?
That counts. Totally counts.
Because, like, when I think about customizing,
when I'm thinking about, like, you know, maybe changing key bindings,
like you mentioned ReSharper, for example.
And more often than not, anytime I've installed it, I would just say, no, I'll keep the Visual
Studio key bindings.
I don't want to.
Even though if I switch to the ReSharper key bindings, which I have done in the past, the
advantage there is that then it's the same key bindings as when you're in IntelliJ.
Right.
So if you're going cross-platform, you have that kind of benefit, which is kind of like one of the things
that they're talking about, you know, throughout this thing is kind of trying to stay like
keeping that kind of cross platform. They're coming at it from a different point of view.
We'll get to it. But I will say I have modified some things. Usually it's more about my particular
workflow. So if I'm working on something that is heavy in parallel or concurrent programming type stuff, then I'll dedicate a portion of like my debugging section of my screen to the parallel threads and all that kind of stuff.
Right.
So it's very just like window layouts.
Yeah.
Like window layouts.
Okay.
So then that we're counting that.
Yeah.
Yeah.
Definitely done that.
Yeah.
Okay.
Okay.
Fine.
Fine.
I customize it like crazy.
Yeah.
So like, you know, I'm trying to think of other ones.
Like, you know, some people have it by default in Visual Studio,
your solution explorer is always on the right.
If you go to something like IntelliJ, your project explorer is on the left.
I've actually taken in a stream before, I don't know if you've ever done this,
where you have like saved layouts.
Yeah.
Saved visual layouts. So you're like, okay, well, I'm just on my laptop screen. Boom. You know, go to this layout. Okay. I'm on a triple monitor
setup. Go to that layout or I'm on a dual monitor. Here, use this. And that matters.
Like all that stuff matters. And like, for me, one of them is like the dark theme, right? Like
I need a good dark theme. And for me, an IntelliJ Darkula is not that theme.
God, no, it's not. It's terrible.
It's truly awful. I think if you grew up Visual Studio, you hate Darkula. If you grew up IntelliJ,
you love it. Yeah, maybe. That's my assumption. I don't know. There is a theme, and this should
have been one of my tips of the week, but there's a theme in IntelliJ, if you ever have to use it,
called One Dark Theme. Absolutely amazing. I love that theme. And that's one of the the week, but there's a theme in IntelliJ, if you ever have to use it called one dark theme,
absolutely amazing. I love that theme. I, and that's one of the customizations I'll do. And another one is, you know, Joe Zach was talking about, you know, fonts, uh, fear code, right.
Or how Fira Fira, however you want to say it. But, but that one that gives you the ligatures and all
that kind of stuff. And it's a free open source font. And like the combination of the two matters
a lot to me. And that's one of those customizations. And like the combination of the two matters a lot to me.
And that's one of those customizations
that I'm going to do.
Like I will not work in the IDE until I fix those things.
Now it's been, I've used WebStorm
since I've used IntelliJ
and they're very similar though
in their customization capabilities.
And at least for WebStorm,
I remember like I had found some themes
that were like, this is the visual studio dark theme, but for
WebStorm. So yeah. All right. Well, so, so much for dark themes. We know that it's all about the
light theme these days because it's better on your eyes. So one of the things that they point
out though, is that don't fall victim to adopting only one power tool, such as an IDE, right? And, you know,
I thought about that and I'm like, you know, we've all been there at some point in our career,
and we've all known that guy at some point in our career where they would just use the one
thing for everything, even though maybe they shouldn't have been. And I know like from my
own past, you know, there was a time where, know i was doing ai xc development c and c plus
plus development of all things right but my preference was to edit in visual studio and i
would just ftp it over to the server when it was time to compile yeah right because like i liked
the ide and i'm like well i guess maybe I probably shouldn't have.
There's nothing about anything I just said.
It sounds lovely, right?
The fact that you got to FTP it over to see if what you just wrote even compiles on that box, right?
But yeah, I mean, that was a long time ago.
You ever see someone who only knows how to use Git through Visual Studio,
and then they need to check something, and something out it's like okay let me open visual
studio like what it's so painful man oh i actually have something similar listed as a as a um you
know example to that later but you know what i mean i think i think maybe we all lived in a world
all three of us maybe at one point where truly it was the IDE.
Like there was one IDE you spent like a majority of your time in.
But I'd venture to say with like the onset of tools like Visual Studio Code, Atom, Sublime Text, that kind of stuff,
I'd venture to say that people definitely have things that they prefer to do in one versus another, right?
I think that just the fact that
a lot of these tools have become more freely available over time and they're so powerful
has really opened up this world a lot. You mean like, I'll use this tool for my JavaScript and
I'll use this tool for my C-sharp and this tool for my Java? Is that what you mean? Maybe, or just,
or the- So instead of using one tool to roll them all you're going to you're going to use like
your specialized tool so yeah you're not going to try to you're not going to try to use your
your jigsaw when when you need a circular saw right and it may not even be language specific
it might just be text manipulation like i've found over time like i love the regex capabilities in
visual studio code and i love some of the features that you get in some of the plugins you can do for like splitting lines, joining lines, just tasks that I need to do. Another one.
As an editor?
Yeah.
Are you using any special plugins for that? I'm asking for a friend.
No, they're actually built in. Control-C-F-P and they're in the command palette.
Because I bring that up because when you mentioned the RegEx
capabilities specifically, that's one of my favorite things about sublime ah yeah it's
really good in visual studio code i'm gonna give that a shot another one that i find myself doing
a ton is you know back in the day i think we had mentioned that even in notepad plus plus this
might have been a tip from years ago we would have things for formatting json and stuff right
you get that with visual studio code
like you can paste in a blob of json from somewhere and just do alt shift f and you have a nice pretty
you gotta change your text type though on the dock you have to change it to json we've actually
on this show talked about like as tips of the week various formatters and i remember like json
beautify was one of them, I think. Yeah.
Back in the day. I can't remember, but yeah. And now it's like, well, those are stupid tips.
Don't eat them. Yeah. Visual studio code solves so many of those problems. So I guess what I'm getting at is you used to kind of just live in your IDE and now there's tools out there that do
so many things for you that maybe you could do it in your IDE, but it's not going to be as efficient.
It's not going to be as fast.
So do what makes the most sense to you.
Yeah.
They also mentioned too,
like you should be capable and comfortable beyond the limits of your IDE.
And so to me,
I interpreted this as like,
for example,
like how many people have you ever known where they rely 100% solely on like, say, Visual Studio or IntelliJ to do the compilation of their code?
Like if you put a command line in front of them and say, compile it, they would have no idea how to do it, right?
That used to be me.
And so for me, like that, you know, you brought up Git, right? But knowing how to use MSBuild or.NET EXE to
accomplish those similar build tasks in Visual Studio, for example, like, you know, that to me
is going to be on your IDE because now, you know, you have a huge benefit by knowing that because
now you can go into any environment and you can be like, well, let me just do this from the command
line and see what's happening. And now you can script that stuff if you need to, which is super handy for build automation
or for even like sharing, you know,
particular build scripts among colleagues and whatnot.
Like, you know, I'm a fan of knowing that kind of stuff.
Yeah, you know, I'm almost getting to a point
where I'm like considering switching over
to VS Code completely.
And right now I pretty much always have Visual Studio up and VS Code.
And I do all my kind of other stuff in VS Code.
I just love that command pal, you know, Ctrl-Shift-P.
And I don't even have to remember the command.
It'd be like, wait, was it like Docker stop?
And it was like, okay, here you go.
Hit Enter.
And I can stop all or stop one.
Or I can do all sorts of stuff just with that Ctrl-Shift-P.
So it's like one shortcut to rule them all.
And then I go back over visual studio but i think it's just that i'm just so comfortable with visual
studio that i know how to navigate and things look like i expect so it's comfortable but i don't know
i'm trying to figure out like what exactly is code missing that doesn't or what is code not have that
is in visual studio that keeps making me want to go back to Visual Studio. I haven't been able to put my finger on it yet. I can tell you from my perspective, so Visual Studio Code is got like, you can extend it
kind of however you want, right?
But it's sort of clunky.
Like if you need something that needs parameters or something, right?
Like saying you're setting up, an example is I think they have their SQL tools that
you can install so that you can connect to a SQL server or something like that.
When you do it, it's like a really clunky interface to, hey, give me the server name,
give me the username, give me the password. And part of it is, is because Visual Studio
code's not meant to be this thing where everything's tightly integrated. They give
you the hooks to be able to create that. But the difference is you go into Visual Studio,
they have a purpose built UI for, oh, you want to connect to a SQL to create that. But the difference is you go into Visual Studio, they have a purpose-built UI for,
oh, you want to connect to a SQL Server?
Sweet.
Plug in the host name, plug in the username, password here.
You can test your connection and all is good.
In Visual Studio Code, it's like this multi-step process
through text boxes at the top of the page.
And it's just not all connected, you know?
And I think it's just the difference between a tool
that was built with extensibility in mind,
but not necessarily full cohesion well i mean my the the two use cases that come down to mind for me would
be debugging and unit testing right like you know if you wanted to like in it's both of it's both a
pro and a con in visual studio code right like debugging isn't there by default, you have to, you actually have to like set up the environment, you have to configure that, that JSON for that.
So that's kind of a con that it's not like, oh, I can just hit a button and boom, away I go like
I would in Visual Studio, right? But the pro of that is that now I can commit that JSON as part
of my repository. And so now other devs on my team can also share the
same thing. So when I say like, hey, this is the particular use case that we're testing,
like I can have a specific configuration for that in the dev environment, right?
And they don't have to have an IDE to run it, right?
Well, no, no, no. I mean, you're using Visual Studio Code.
Yeah.
Which is cross-platform as opposed to something like visual studio yeah but but then
like if you wanted to do unit testing for you know c sharp right like if you're not on command line
like uh that's still you know visual studio is still the winner there right you know what's
interesting about this or at least in my mind this conversation is like a lot of what we're
talking about has been like typical like you know we all like c sharp and so we've been doing that for a long time i don't know that i would say that i think it's
just that we we agree that we like strongly typed we do like strongly typed we live in java
java is definitely more typing poor java um but what i was going to say is did you guys notice like with this switch from dot
net framework which has been happening for a few years with dot net core a lot of the samples or a
lot of examples that you'll see people do nowadays is using command line back in the day when people
were creating a dot net application it was open up visual studio go here do this this this nowadays
people are like they're on the command line.
They're like.NET Core build. Because they've simplified things so much easier now.
And this is why like knowing how to use the, you know,
going beyond the limits of your IDE with Visual Studio, for example,
you know, before you had the.NET EXE, right,
when you only had MSBuild,
well, you couldn't just necessarily go and clone a new
repository do an ms build on that solution or that project file and things compile right because
oh you have to know to manually go one you need to have nougat installed which isn't going to be
installed if you install you know it's not going to be in a path with you just dot that framework
right so now you're going to have to go and with you. So now you're going to have to go
and install Nougat. Then you're going to have to go in a Nougat restore everything. And you're
going to have to know what repositories or whatever, like that was kind of a pain. But
now with the.NET EXE, you could just be like.NET Nougat restore, or, hey, you don't have to do
that..NET build in it. One of the steps that will automatically do is a Nougat restore for you. So
they greatly simplified it to where the command line is much more your friend. And because they're
trying to go into this world where like you could write C sharp code, for example,
that runs on Linux, or you could even write the code on Linux. And they kind of are forced to like
get away from the GUI.ey yeah you have to have these small
little tools that are you know have they're sharpened you know very well they do their
thing very well right so so let's talk you know oh sorry one more one more thing um so you're
trying to do code wars for C sharp and the code wars,
uh,
editor and not in visual studio or code.
It's so awkward to me.
Like in JavaScript,
no problem.
I'm used to kind of doing that,
like,
you know,
kind of flying without guardrails or whatever,
but trying to do C sharp without all that auto complete and intelligence
just feels so wonderful.
Totally foreign to me.
And it totally makes me realize that I don't know where a lot of packages
live.
So I'd be like,
Oh wait,
uh,
you know, like if system isn't imported i'd be like oh wait uh you know
like if system isn't imported like why why is it recognized by strings and it's like what's going
on here and like the link stuff is like wait is that in the collections or is that in uh system
dot link generic i forget right we use our ids a lot as a crutch it's almost like using your phones
for storing your contacts nowadays back in the day
you used to remember what your buddy's phone number was i can't tell you what outlaw or
joe's x numbers are if they're not in my contact list i'm done right now that's a that's a great
point it's great analogy yeah i mean like as he was saying that i was trying to think of like
one that comes to mind often to me because it's like not one that you would use that often.
But the trace, trace.writeline or something like that, you're like, oh, wait, now I've got to add a using state before.
Where is that one?
Is that in system.diagnostics?
Yeah.
Yeah.
But you have to think.
It's not that built-up muscle that you used to have when you typed it all in yourself right well and
especially you can get like super lazy with visual studio where like if you know if you know a class
or method name you can just go ahead and type it and then it'll give you the squiggles and then you
just put your care put the carrot on it and then control period and then be like did you mean to
add a using statement for this and you're like that's the one i meant to add yes yes i did go
ahead and add it who's the boss that's right
you ever do that now it gives you like two choices and you're like i don't know let me try this one
oh yeah you have to like point and be like do you mean system.drawing or system.i forgot the
other one was and i'm like uh let's try this one i think it worked we're about to find out yeah
yeah don't do that It's programmed by coincidence.
I like it.
So, all right. So now we're going to talk about the power of plain text.
And so the author has made the point of saying that the best way to store knowledge is plain text.
And plain text is printable characters can be read and understood directly by a person.
And we've got to remember this is pre-markdown.
Well, not necessarily, no.
Yeah, they start going into this a little bit deeper.
But like one of the examples they gave that we kind of munched to our own is if you see something that says input 245 equal 46 AB, some sort of hex or other garbage, like that's not readable by a person.
Technically, it's text,
but it's not plain text that a person can understand.
That tells you nothing about what's going on there.
Yeah.
I mean,
they, they,
they,
they do call out though that it doesn't mean that the,
that it can't be unstructured though.
So they,
they cite the examples of that.
They give our XML,
SGML and HTML, which I'm like, oh my God.
Like, I don't, should we be storing our knowledge as HTML?
Like maybe, I don't know.
Probably not.
But, you know, I added here that like today we would probably like include, like the first, our go-to would probably be JSON if we were going to do this today.
Yeah. Maybe. Yeah. mean your mileage would vary they even brought up uh sendmail again because apparently apparently one of the
authors of this had a really bad experience with sendmail which i'm sure anybody that ever used it
has because i've looked at it and it is probably the author of every book on sendmail had a very
bad uh to run in with send mail and hence they wrote the book.
Right.
But I mean, they even talked about it before.
You got thousands of lines of configuration, but it is human readable.
And that's important, right?
Because at least at that point, somebody can go back and understand it.
Like the knowledge is still there.
Yeah, like that.
And now that leads us to tip 2020.
Keep knowledge in plain text yep so they have there are drawbacks to storing data as plain text right so it can take more
storage i this was probably a bigger deal back then well no i think it would still be a big
deal today even i mean imagine on a small or something. Small device, but even at scale, though.
Think about a Google or a Facebook, right?
I wonder, do you think that they're storing everything in plain text?
No, no, no.
But the original code, probably, right?
But we're talking about data, though.
Oh, yeah.
Good point.
Good point.
Yeah.
No, you're right.
I mean, I know, for instance, like Kafka, Kafka will convert stuff to binary so that it can faster stream and compress and do all that
kind of stuff. So. I mean, Postgres has like, you know, we were talking about JSON, Postgres,
you know, JSON is a first class citizen in Postgres, but there's also a binary form of it.
Yeah. Specifically because it can.
BSON is what they call it, right?
It's JSON B.
JSON B. because it can be sawn is what they call it right it's jsonb jsonb yeah it specifically so that it
can take uh you know less space and be more performant yep so that makes sense but there's
another downside too and this kind of makes sense if you think about it is it could be more cpu
intensive because it's parsing text now so okay i mean those are downsides, but, you know, depending on the use case, like you said, if it's a cloud compute type thing, you know, maybe those you do have to say, hey, we're not doing this because it just doesn't make sense.
Yeah. And then there was a worry that they put in here about like, you know, saying like, hey, don't worry that by putting your metadata, for example, in plain text that you're exposing it to the systems users, right? Because there's, they said that like, you know, that, that, that worry is unfounded, right? Like,
and then I thought about it. I was like, well, you know, even if you were though,
that might not necessarily be the worst thing because you're kind of, you could make the pro,
you could turn this into a pro and say like, well, now you're, now your system users can see
the things that are
customizable, right? Like may, you know, depending on how you're using it. Right. But, um, but just
because binary formats might obscure the data, this is the other point, the main, their main,
the author's main point, but just because the binary formats might obscure the data,
don't mistake obscurity for security. Right. Because if you know what's actually doing the interpretation of that binary,
then you could potentially take it over and do what you want with it.
Yeah.
And you've heard that you've heard the phrase like security through obscurity.
It's not security at all.
I mean, it's not like, so, you know, look at like how people would decompile other,
you know, code.
Like that was how like sysinternals, for example um you know how how they would get around and figure out like what
was what right it was like just decompiling code and like how a lot of uh i don't know like not i
wasn't going to say like hacking but um you know nefarious uh actors might like go and figure out
like how how they can get into
you know, code is to just decompile it to see like what's happening, you know, like,
as soon as a as soon as a patch gets released, right, you can decompile it to see like, okay,
what changed? Okay, now I know what the vulnerability was in the previous version,
right? So yeah, it's obscure, because it's in a binary format, but that's not security.
Hey, I do want to bring up something here be only because I had a conversation about it this week is we talk, it's been a
long time ago.
I don't remember what our OWASP episode was, but there was this whole notion and I think
it's called an enumeration attack.
I can't remember if that was the actual term for it, but the whole, the whole idea that
like, if you have a webpage, let's take it for example, just because it's easy to see.
And let's say that you have an edit profile page on there and you click that, that link to go to
edit profile and it shows number one up in the top, right? ID equal one. Okay. Well, do you know
that there's an ID store behind the scenes that is likely the number one. And so what a hacker
would typically try and do is plug in a two up there
and see if they could get to that user's profile and so on. Right. So what I wanted to point out
is like, there was this discussion about IDs and well, if you make something a unique identifier,
GUID, a UUID, it's called different things in different languages. It was said that, well,
that's just security through obscurity. And I disagree said that well that's just security through
obscurity and i disagree with that because that's not what that is you're trying to avoid an
enumeration attack which is number based right and so by going to something that is a string that
i forget what the what the um chances of duplication or even finding one.
It's crazy low.
It's a different thing, right?
Like you're not trying to obscure security.
You're just basically saying, hey, I don't want to give somebody the ability to just loop through a bunch of numbers and try and hack the site.
So keep in mind, like obscurity through security is truly just saying, hey, well, if I convert it to some other type, then people won't be able to see it.
But if they can decompile it, then you've done nothing.
You've just made it one layer extra for somebody to have to go decompile it to do it.
It's also kind of fun to let the users mess with stuff.
I know there was a game I was playing, Sunless Seas, where you're like a little boat.
And the boat's really slow.
And so I think it was trying to make things feel ambient and and scary and weighty and it was just too slow for me so i did
a little bit of googling and turned out there were some uh files we can go and just change things like
the boat speed so it changed it into a very different type of game it was like a racing game
that's why i was able to up the speed of the boat a lot and that change game it was just kind of fun
to like you know after you do that of course you think like well what else can i change so you go in there and play around a lot of older games
used to have to have like an any file remember those like dot i and i and i you know there and
mess with all sorts of stuff dude windows had a dot i and i file probably still does i'd imagine
you know maybe there was a the guid thing came up just recently a friend sent it to me and i don't
remember what the number was,
but he was like,
there are so many unique goods that like every person on the planet could
have this number to themselves.
And it was like,
you know,
I think it was like a 700 billion number or something like that.
Like I forget exactly it,
or actually it might've been higher.
And so I was trying to find it,
see if I could.
So you,
you brought up the OWASP.
That was episode four.
We really need to do another OWASP article.
I would love to do another OWASP one.
But I was trying to find out like, well, how many unique GUIs are there?
And I was hoping to find the thing, the stat that he found.
And I did find this one Stack Overflow answer that quotes Wikipedia.
And any number where you have to do 10 to a power, you already know it's like stupid
big.
And like, I can't even fathom what this is going to be. Like my mind, my mind immediately shuts down in terms of like
trying to understand the scale of it. Cause it's like, well, you went to a power. So it's crazy.
But, uh, the quote is while each generated good is not guaranteed to be unique,
the total number of unique keys, which is two to the 128th, or they also call it 3.4 times 10 to the 38th, is so large
that the probability of the same number being generated twice is very small.
For example, consider the observable universe, which contains about 5 times 10 to the 22
stars.
That's way less every star could then have 6.8 times 10 to the 15
universally unique guids golly man so basically it's super low probability yeah there's just so
many and actually it's really funny there was like one one guy says like because the question was
like is a good unique 100 of the time and And the first comment, the top-rated comment soul, though, because I know I've heard this a million times. It's like number of stars in the sky, what are the chances of getting the sun number twice, but it still just feels wrong to me.
Doesn't it? Have you ever heard of the birthday paradox?
Yes.
It's 365 days in a year, so what are the chances that two people have the same birthday?
And so what's crazy is I just looked it up, and as you imagine, okay, well there's one people or there's two people.
What are the chances?
Like not very good that they have the same birthday.
You go up to 10 people.
What are the chances?
And there you get about 11% with 10 people that two people have the same
birthday in the same room.
Check this out.
You go up to 70 people.
Now,
what do you think the odds are of two of those people having the same
birthday,
two or more having the same birthday,
70 people?
I'm going to say 95.
99.9.
Wow.
Yeah.
You cross into the 90s right around 40 people.
That's crazy.
I know.
Obviously, 365 is a lot smaller than the number of stars in the sky.
But still, I don't know.
It just hurts my soul to
think about it well let's put it this way when we talk about how many combinations there are for
guids it's a number with 12 commas i don't even know how to pronounce the number yeah because
once you go past 10 commas or nine commas you're you're already past decas well nine commas like wait so hundreds would
be the first oh wait no you're into thousands for the second yeah uh millions then billions
then trillions and once you get to trillions you've only got four a total of four commas
right so no yeah you're way past deca's still eight more commas to go
so i just looked up to see if anyone had done like the same calculation for guids and they said
uh so there's a whole bunch of math i don't understand and then it says uh we can assign
guids to about a million billion things before we have a one in a billion chance of collision
wow so you're still off by a factor of a billion,
even after the million billion things.
Yeah.
So a million billion to have a one in a billion chance,
which is just crazy.
Yeah.
So that's not security through obscurity is what my whole point was.
Right.
Like it's,
it's a good practice.
If you're,
if you're exposing something,
you made your point a million billion,
billion times. Yeah. Well, I don't know who you're arguing with, but you point a million billion billion times yeah well i don't
know who you're arguing with but you know i think you won yeah i think so maybe i don't even know
it was an argument it was just like wait a second because somebody had said it that's security
through obscurity and i was like no it really isn't like i don't know how to describe it just
yet but it's not anyways well now you do two to 128th.
Jesus.
You brute force that.
That is large.
Oh, this was funny.
There was a quote in the book that I loved.
And they said, hey, larger and slower aren't the most frequently requested features from a user.
And I was like, I love that.
And so that was this whole notion that text is actually bigger, and it can be more CPU intensive, it will will you head in here the data is
human readable and self-describing it'll also live or it will outlive all forms of the application
that created it so so basically all other forms of data okay yeah so i had actually let me let
me state that over to make sure yeah that's that point's made data that is human readable and
self-describing will outlive all other forms of data and applications
that created it.
Yeah, and I actually duplicated it because I don't think I read that right the first
time in my head because I was basically saying, hey, after your application is no longer useful,
like maybe it doesn't even run on the OS it was originally created for, the knowledge
is still there because it was in human-readable form.
Right. Yeah. I mean, like imagine if you had
all of your data in like some proprietary format now, like that's the disadvantage to those
proprietary formats, right? Is that, well, I can't read it, right? Like you have to have that tool to read it, right? But the key here though, is the self-describing part. And, um, you know, this is kind of similar to the
example that you stated earlier, but I had this, you know, string here. So if we have a string
that says AMZN 888-280-43331, uh, well, I might've said too many threes there but um you know that
doesn't really help you understand what those are and that that is that nothing in that string
jumps out to you immediately as a phone number right but i just gave you the phone number for
amazon customer support whereas if if that string was in like uh you know think of it in an xml
format where you might have a phone element
that that phone number is in and it's actually you know parsed with dashes in it then it would
immediately jump out to you as oh this is a phone number like you don't even need to know anything
that's about it you could immediately boom phone number as a person yeah you could look at it
that's the self-describing part here yep there was also oh there was another point here too that we have that
should not go on unsaid which is that the the binary file means that you have to have an intimate
knowledge of the details of that format so um you know yeah you might be able to decompile it
right and you know you might be able to decompile it, right?
And, you know, you might be able to figure out some way to go back and read it.
But, you know, do you know that it's always in that same structure?
Like you might look at like the first, you know, say 100 bytes and like, okay, I think
I have an understanding of it.
But then all of a sudden, the second 100 is in slightly different because there was like
maybe an optional parameter that you didn't realize they're like, you know, so you have to have intimate details of that binary
format in order to be able to read it. That that's the difference. But, you know, so so this
is describing the differences between like what's human readable, and human understandable, like
going back to that Amazon string example, right? Like, you know, that that's human readable, but is it human understandable? That's very similar to a Venn on a vehicle as well. Oh yeah.
That's a great one because Venn's right. Like usually the first few numbers determine who the,
the, the manufacturer of the car was. Then the next one will tell you the model and all that.
A layman person, we have no idea what it is is even though that number has meaning in it right like
they're actually allocated for different types of things same with mac addresses mac addresses
would fall into the same same thing so they're human readable but they're not human understandable
right right you know that's fun too about human readable like if you have um corrupted data so
like say you lost every fifth letter in uh in a text plain text like you
could still figure out what's going on pretty easily right like how much does you know 20 of
those letters mean but if you lost uh 20 of your binary you're uh you know it's essentially
encrypted at that point because uh that gets pretty tough unless you know you know obvious
pattern or something to try yeah and i'm worried that i might have like just munched those two
topics a little too close together so you know when i was talking about like the difference between the human readable
because like i jumped immediately i was you know previously talking about the the binary file and
then immediately jumped to that so like hope i didn't confuse that because you know when i was
talking about the human readable and the human understandable i was referring back to like that
amazon example as being uh the plain text that shows up there yeah or like you know the vin that you
brought up which was a great example yep so one of the next oh go ahead joe i was just saying one
of the next uh things they mentioned is that you can use just about any tool that you can uh
just about about any tool in the world can manage open uh plain text or you can read plain text and
so it's um kind of speaks to that uh
obsolescence that we mentioned earlier if you have some sort of funky you know format that's
gone out of favor like xml then modern tools may be less able to deal with that if you've
gotten plain text and it's always going to be readable to you and understandable yeah they
basically said it gives you leverage because because because everything can use that, then you have tools that will work with the plain text. And, and it's a pretty simple thing to follow too, because
nowadays, most of the Linux tools that you look at, if it's a shell script, it's readable,
like you can crack that thing open and you'll be able to understand it because it's in,
it's in pretty easily readable text. Yeah. They also talk about using plain text to drive your tests, though.
So like adding, updating, modify then become trivial.
And so I was trying to think like, OK, well, what kind of world are we living in?
Like, what kind of world were they describing?
Right.
Like, because in my mind, I'm thinking like, OK, well, maybe you're thinking of something
like, you know, we've talked about spec flow or cucumber, like where you could write your
your use cases in your test in like a
given when then type syntax, like, uh, given when the customer adds and clicks on the button to add
an item to the shopping cart, the cart is then updated to reflect the quantity and price, you
know, or something like that. Right. Um, but this book was written well before Cucumber and SpecFlow.
So I'm like, well, how did their tests look like back then that they could use plain text?
Like what tools were they describing?
I didn't recall any.
Yeah, I have no idea.
I was even thinking that, you know, and we talked about a long time ago,
like one of the reasons why you wouldn't use the Microsoft Test Runner,
at least back when we talked about this, was you couldn't have multiple inputs, right?
Oh yeah.
So even maybe it even just means being able to plug in multiple data inputs right above
your test so that they can be, you know, easily understood there.
So now we're calling code as plain text then?
Maybe.
Yeah.
If it, as long as it's, is it's easily understandable, right.
For where it lives.
So I don't know.
I was curious, too, on that one.
It kind of speaks back to DSLs a little bit where I like the idea of you writing the text
in something that's human-readable and keeping that out of code.
It's like, yeah, sure, a C file, like a C code file,
is going to be human readable and understandable to programmers but
not it's not as easy to read and understand and modifies plain text if you're able to kind of
extract that stuff to more specific language yeah so they also you know go on to like the
advantages of using plain text as your standard you know i want to highlight that word you know
using plain text as your standard across heterogeneous environments can outweigh all of the drawbacks. And when I read that part, I thought like, okay,
well, that makes sense. Because if you think about like how wildly popular JSON has become
for exactly this thing, right? Like our front end is sending back JSON requests back to the back end,
or the back end is responding back, you know, to the front end with it. Heck, we even just mentioned
Postgres being able to, you know, send and receive JSON as a first class citizen. So now your middle
tier can go back to your database with JSON to and from, right? So like that's all three layers,
you know, of a typical application and not to mention like any like little ancillary parts
that could be used or even using JSON as configuration, right?
Nope.
You know, it's funny.
I think the reason why JSON has gotten such popular adoption
first was probably JavaScript, just straight up, right?
But the other thing too is just the fact that
XML was extremely verbose
and this was a way of sort of solving both problems of the storage
size, but still being able to get the same outcome. So you could have these nested elements
without having tags on both side of it. And I think that was really like, hey, we already allow
for this JavaScript notation in our programs, why not just turn this into a data format? Like,
I would be surprised if that's not what kind of led to the to the popularity of this thing verbose and i would add it could be
unforgiving you know well that was also one of the good things about xml too is you had these
schemas right which i think there's now these json schemas as well i just don't know that
they're as widely adopted as what XSDs used to be.
Yeah, I don't like YAML.
How do you guys feel about YAML? We just need to accept that we as a society don't want rules.
So stop trying to put your XML schemas on us
or you're trying to start a JSON schema because we just don't want it.
We'll just come out with something different that doesn't have all of that baggage. So your comment, Joe, I think,
and I don't know where I stand on this. I really don't. But YAML, it's funny. So I've been,
I've been deep diving Kubernetes recently and Kubernetes actually supports both YAML and JSON.
But they recommend using YAML because it's easier to read and understand.
Yeah, it's less punctuation.
Yeah, there's not all these curly braces and brackets and everything everywhere.
It's just, hey, this is the configuration.
So I'm torn on it, man.
Like, I kind of like it because it sort of reads like a book but on the flip side it really irritates me when i just didn't have a
space in there where i needed a space right like because usually it's not clear to you or it's not
that obvious so whereas it would have been if it was all braced out but then you have just a very
noisy page for what can already be a really long yaml
file like basically just think about you have your your nice yaml file you're gonna double it in size
by the time you wrap all those curly braces and everything around every so i don't know
just how many times have i had a mistake because i pasted something and it was at the wrong level
of indentation right you know that's what kills me and python drives me nuts for that same reason it's just easy to make mistakes like that and like with jason i'm so used to being
able to collapse stuff and expand stuff as i want so i i feel like uh yaml i get it like i get why
people like it better but jason's kind of like that that nice in between between like readable
and also usable so so in other words any kind of of syntax that is based on whitespace really is what you're anti.
Yeah, I'm not a fan.
There's things I really like about Python, but it's always been irritating to me, the whole whitespace thing.
Yeah, I'm on the fence.
I don't know.
There's some things in YAML that just aren't obvious.
Like, if you have a collection of things, you put a dash in front of it.
I never knew what that meant.
Like why did they put a minus here and they didn't put one over here?
It's an array of data.
Thanks for making that obvious to the rest of us.
Right?
I didn't know that.
See, there you go.
So it's just, i don't know but i guess in fairness that's kind of what you hit
when you deal with any kind of language or or structured data like you've got to learn the
rules of it so i mean maybe it's just because i'm not as used to it that that i have these
weird feelings about it but i don't know it's useful it is easier to read
and then and then usually i think joe you take these because these are some of your favorite parts of them.
So you want to hit this one?
Yeah.
So the challenge here is to design an address book format using a binary representation and then translate it to XML.
Then, in the subsequent version, add a variable length field for directions they basically they basically
wanted you to find out how difficult it was to do things in binary and then convert it to a human
readable type well and the versioning and extensibility uh yeah so so so that subsequent
version is like that's a key word there because you can't diff it yeah in a meaningful way yeah
and then uh that so that
was like less of a challenge for more of a like a homework assignment and uh i didn't do it i
didn't in fact i didn't read the sections at all this time sorry why are you gonna come out and
say that it was hot man i had no interest for four days so i barely did anything for four days
because it was miserable where it was already 100 degrees where he lives. Yeah, it was super hot, super hot.
We even had spot, anyway, it was very hot
even with the things we did to make it not be so hot.
This episode is brought to you by Clubhouse.
Clubhouse is the first project management platform
for software development that brings everyone together
so that teams can focus on what matters,
creating products their customers love. While designed to be developer first,
the UI is simple and intuitive enough for all teams to enjoy using.
And Clubhouse is truly built for developers by developers. You can tell because they've done
things like sprinkle Git tips throughout the UI, and they make a big point to highlight
open source projects that integrate with them. And they're always adding new features.
Like just recently, they added the new Android app for Clubhouse,
where you can view spaces, dive into your stories,
track your epics, and see your activity all from your favorite Android device.
And Clubhouse recently launched the Clubhouse community,
where you can connect with other software engineers and product managers using Clubhouse.
With a simple API and robust set of integrations,
Clubhouse also seamlessly integrates with tools you already use every day,
like Slack or GitHub, for example,
getting out of your way so you can focus on delivering quality software on time.
Sign up for two free months of Clubhouse by visiting clubhouse.io slash codingblocks.
Again, that's clubhouse.io slash coding blocks.
Get your first two months free and see why companies like Elastic,
Full Story, and LaunchDarkly like Clubhouse.
All right.
So now it's that time of the show where we ask you,
if you haven't already and you've been enjoying the show,
please do take the time to go up and leave us a review.
We've got a nice little page
set up that makes it easy for you if you head to codingblocks.net slash review we have links there
for stitcher where you don't have to have an account or itunes where i think you do have to
have an account and which that we may be changing this guys isn't it going away pretty soon yeah but
i mean they're not getting rid of podcast connect thing though oh not now they're kind of splitting it up though right so there's like music and then podcasts
oh you mean like changing the where it's gonna go yeah so links yeah oh okay i see where you're
going that's interesting but at any rate yeah so for those that have left a review like seriously
we really appreciate it it's it's awesome to get the feedback and and read all those things and we
take notes of them all.
And.
I'm thinking at Apple.
Now we're going to have to like rewrite our whole script here.
We can't say like,
find us on iTunes.
Well,
it looks like outlaws going to go back and edit 109 episodes.
That's good.
So,
so yeah,
no,
seriously,
thank you for taking the time to do it.
And if,
and if it sticks in your mind,
please take the time to do it. If you haven't already and, and your mind, please take the time to do it if you haven't already and,
and share us with a friend,
right?
Like tell,
tell a fellow developer,
like,
Hey,
go check this out.
You know,
I was,
I learned something here or maybe they made me laugh.
I don't know.
Whatever.
I like how you like said a fellow developer.
Like,
I mean,
you can tell your mom,
but that doesn't count.
Yeah.
She's not going to care so much.
Well,
she might,
she might write code. She might, she might. So yeah. Thank you.
All right. So with that, we head into my favorite portion of the show.
Survey says, all right. So back in episode 107, we asked, what is your preferred type of language to spend most of your day in?
And your choices were dynamically typed languages like JavaScript or Python.
I can't be bothered to compile.
I catch my errors at runtime.
Or statically typed languages like Java, C, or C sharp. I'd like to say that my errors are
hard at compile time, but sadly not always. Or functional languages like Haskell or F sharp.
Here's a quarter kid, get a real programming language. Or lastly, SQL. If you're not working in sets you're wasting your time with one-offs
all right so alan i think it's your turn to go first so what's your choice
man i'm trying to think about our audience and
so when we started off the show we called it.net for a reason that's changed over the years.
But I'm going to guess that most of our folks are probably strongly typed people that want that statically compiled stuff.
So I'm going to say statically typed.
And I'll go with 40%.
Okay. 40%. I think I like live in the first world though
dynamic and yeah i catch my ears at runtime but uh yeah i'm gonna say static as well for 41
oh you suck man it's your turn to lose this time it's's the curse of John lives on. You know what's going to happen?
We're both going to lose.
Watch this.
Yeah.
All right.
So both of you pick statically typed languages.
Alan at 40%.
Joe at 41%.
And the answer is statically typed languages for the win.
You're both way off. Like really or way high 71 and a half percent
of the of those that respond and picked statically typed wow we should have put
typescript in here too just to make people conflicted about that was really a thing
yeah yeah but i do agree though that like though, that like out to a larger audience, though,
if this was a Stack Overflow thing, not us,
then it might have different results, right?
I think dynamically we'd start rising up the charts there.
The rise of Python is insane.
Right.
Right.
Huge.
There was actually an article I was just reading the other
day on that from like a stack overflow or something like that. I can't remember the name
of the article, but yeah. So, I mean like languages like JavaScript and Python are just,
well, yeah, Python's still growing wildly in popularity, but JavaScript has definitely,
uh, made a name for itself in like the last, let's say 10 years, right. Where it's grown
wildly in popularity. So clearly there's some love for the dynamic languages you know we didn't say preferred
that's true i don't know man a lot of people like the flexibility of not being tied down to that
right i think that was the the huge popularity bump for ruby for a long time right like just that
even the fact that in like a lot of these languages,
the compiling happens at the time.
It's like just in time compiled when you go to execute it.
So there is no like, okay, let me write my code.
Now let me compile.
Now let me run it.
Instead it's, let me write it.
Let me run it.
And did it break?
I don't know.
Right?
Did it work?
Yeah.
I think that Node.js had a lot to do with JavaScript
becoming as ubiquitous as it has over time, right?
Like before that, it was like, oh, it's browser stuff.
After that, it was like, oh, this can run everything, right?
Yeah, that's interesting.
But I mean, do you, okay, let's put on our prediction hats here.
Do you in, say, the next 10 years predict that javascript will
fall from grace due to technologies like web assembly no yeah i'm all in on js that's where my
my bet is i think that what we'll see is kind of the same thing as today. People want that bare metal speed,
but they don't want to have to write in that bare metal language.
So I think what we'll see is we'll see a lot more of these transpilers
that take your JS code, kind of like what we saw with native stuff now, right?
You've got things like PhoneGap, and you've got things like all the Corona SDKs
and all that, where you can write it in the language that you know and love,
and it gets turned into the bare metal bits. I think that's what we're going to see in
the WebAssembly world. That's exactly saying then that you wouldn't write it in JavaScript.
No, I'm saying you would write it in JavaScript, and there'd be a transpiler to turn it into
WebAssembly for you. Well, then what's the point? The whole point is to write it in C and have that
transpiled into WebAssembly so that it can run in your browser in a safe version of JavaScript.
Because WebAssembly is a scaled down,
is like the parts of JavaScript that are, you know, I don't know.
Well, it's not interpreted anymore, though.
But like, so Blazor, for instance, right?
Blazor, you write it in C Sharp and there's a transpiler that turns it,
or Mono basically puts it into C
and then that gets pushed over into WebAssembly.
I think you'll see more of those conversion tools so that people can work in the language that they're comfortable with.
I think that's what will be happening.
I don't know, man.
I think WebAssembly hasn't taken off yet, at least in my opinion.
But I think when it does, it's going to be huge.
I think so.
The ability to reuse the exact same code on the front end and the back end,
not a rewrite. Because like today, if you wanted to have some kind of like,
I don't know, not an authentication scheme, but let's say, okay, how about this? Like if you
wanted to do credit card validation, right? Well, today you could do that in your middle tier, be it Java or C Sharp or whatever.
But if you wanted to have some form of that also in the client tier, you'd have to rewrite
that in JavaScript to do it on the front end, right?
But with something like WebAssembly, you have the one bit of code to rule them all that can be used in both places, right? But with something like WebAssembly, you have the one bit of code to rule them all
that could be used in both places, right? I think that that kind of capability, the capability of
being able to reuse your code across those environments, that's going to be huge, man.
I agree.
It's going to crush it, I think.
You're talking about a DLL type thing, though, that currently. So what I'm saying is I think that you'll write the code in whatever language you want,
JavaScript, C sharp, something like that.
It'll get compiled to that DLL through some sort of cross transpilation or whatever.
And then you could still share it across.
Right.
Like, I think that's where we're going to live, because I don't think I don't think
that people love the idea especially people
who've never done it love the idea of going from something like a c-sharp or java to a world of
c++ where you're managing memory and that kind of stuff like it's it's a whole nother set of things
that you have to worry about and i don't think people want to go down that it might not be
it might not be c or c++ right because of managed memory. Maybe it stays in languages like C Sharp or Java where memory management is handled for you.
It's not like Objective-C where you're having to dereference things.
But that's what I'm saying. I think that things will transpile or compile down
to
the bits that WebAssembly
will work with. I don't know that people are
going to have a specific language. I don't know. What about you,
Joe? Your thoughts?
You could do code
that runs on server and client right now
with JavaScript. And I haven't seen
huge benefits from that.
You know, with Node,
it's been nice. There's been some cool cool things especially with the server-side rendering that's
kind of come around because of that but it hasn't been like a huge panacea that i think some people
thought it would be when like node first started getting popular that was a major selling point
but i do think there's going to be a lot of cool stuff that comes along with web assembly
i just uh it seems like there's so much inertia behind javascript so people learning to code right now, they're probably starting with JavaScript.
All the boot camps are organized around JavaScript.
So that stuff tends to stick around for a long time.
So I don't know.
That's where my dev dollars are.
Yeah, I think part of that might be, though, that just like if you weren't already willing to take on node you know i.e uh javascript as your your engine
on the server side then it was already it was kind of like a non-starter so maybe that's why some of
that reuse that you were describing there joe didn't take off you know i'm saying because if
you're like no no we're in microsoft shop you know we're on iis then that's a non-starter for you right but you could still be on iis
and serve up web assembly and it's the same code right yeah so i kind of view it as is
a little different but there's still stuff you can't do like you can't access files and
i don't know how permissions work so there's still a lot of stuff to figure out with web
assembly and i know they're doing amazing things with it so i'm looking forward to it
i just don't know that it's going to change you have to specify them up front
okay so you do have to change your code then you can't just take existing code as is and
just drop it over there there's going to be specific rules around how you have to kind of
do this stuff which is fine i mean there's a lot of stuff around how you have to kind of do this stuff which is fine
i mean there's a lot of stuff still being sorted out to your point right especially around security
and being able to run this thing but like they're they're working on being able to use it outside
of the browser though too like you know they're looking at this this security paradigm that
they're that's happening around web assembly as like oh this would be cool for anything right
the ability to just trust any code is executable without like fear that it's going to mess up your system.
If it can be sandboxed in a particular way.
Yeah. So like, that's a kind of a neat model. Like, you know, how could that be applied to
everything? So I don't know, man. I kind of think that, you know, I'm not saying, I'm not saying it.
Look, I'm not saying I wish bad things to JavaScript.
Don't take this the wrong way.
But, you know, 10, 15 years, you know, that's a long time for it to last.
I can't even imagine what technology is going to be in 10 or 15 years.
It's hard for me to fathom that
yeah i do think that like for any new language to come along and kind of take the throne
i think it's got to be 10 times better in javascript and that's like that's my big
it's definitely not python what i think i think sean might fight you for that one that they're
jer i know i just don't like some Python.
I don't like the Linux-y naming conventions in Python.
So things like STR for string, I don't like that.
I liked Ruby better.
I know I kind of lost that fight.
I found the blog article I was talking about.
It's a couple years old, but it's the incredible growth of Python.
And it's a Stack Overflow article.
And they're talking about just how it's exploded stack overflow article and you know they're they're
talking about like just how it's exploded and they're showing like the trend graphs here let me
let me share this link with you guys you have to put it in the show notes here yeah yeah yeah
yeah so there it is but you know it's got like the projection of the growth and it's comparing like
you know here's the here's the projection for like other languages, like a C plus plus, for example. And, you know, there's like a marginal room of, you know,
plus or minus, you know, like where it could go. Right. But for Python, it's like the projection
is huge because it's either it's going to continue wildly to wildly be popular or it's going to like
stabilize or something, you know? So what is it about python that like make makes it better than javascript is
it is it the libraries because i know for machine learning it's really popular and stuff like that
but a lot of that is kind of like the library support and how they deal with numbers i guess
is that the main selling point uh i mean that's definitely a big a big part of it um you know
especially from like a data science kind of point of view right uh you know things that are happening down in you know like they're basically like c code that's
happening really fast for you in in python but i think it's also just the flexibility of it like
in a lot of what in a lot of ways like to me python is it's kind of loosey-goosey like javascript is
right which is the thing that we kind of like about it, right? Like you can just like, let me get my thought out, right? Without being bogged down in like, oh,
I forgot, you know, I need the curly braces here and this should be a public private or, you know,
public static or whatever, you know, kind of thing. So.
I know Sean was selling me on it by basically saying that you don't have to write much code
to make a lot happen.
Yeah.
And that was one of his big things, right? Like when he was trying to convince me that I need to go learn it, which I'm not saying that I don't, but it was like, you know,
how am I going to parse my time out? But, but that was his big thing is like, look at how much code
it takes to use the camera on your computer. And it was like four lines of code, right?
Yeah. Yeah. I've definitely read lots of statements like that, where it's like thousands of lines to do something in another language, but in Python, it's like, here's five
lines of code. Have a good day. Right. All right. Well, let's move on to today's survey, which is,
what is your structured text format of choice? We here at Coding Box ask the hard-hitting questions. That's right.
So your choices are XML, JSON, Joe's favorite YAML, or the old-school gangsta of all structured text formats, CSV.
And there's so many more Yeah but I tried to think of the ones that are
Probably still used the most today
Yeah I think I was trying to think
That too because I was like there definitely are a lot
Of other like I mean the authors mentioned
Like SGML and HTML
And I'm like I'm not going to put those down
No because they're not
Those are
SGML is probably more open but HTML And I'm like, I'm not going to put those down. No, because they're not, they're not, those are specific.
SGML is probably more open, but HTML was very specific use, right?
Right.
So, yeah.
Well, I mean, not, it doesn't have to be, but it is.
But let me ask you this though, because this is where I kind of like took issue with the
author's mission in that window.
Because if, if I, let's say we were working on some code together and I'm like, Hey, I'm
going to pass you
some code. And here it is. And I gave it to his Jason. Right. And let's say, let's say it
represented, um, for ease, let's just say it represented an e-commerce order. Right. So it
was like all of the data for that in Jason, like you would think nothing of it. Right.
If I handed you that same thing in XML, right. And it's like, Hey, here's the, here it is. It's
structured in XML, right. You can see the, the here it is. It's structured in XML, right?
You can see the order details, you know, how many, the quantity, the price, the unit price,
the total price, subtotal, tax, whatever, right?
Like, you would love that.
Like, you, well, no, let me rephrase that.
You wouldn't love it as much as you loved the JSON, but you would be okay with it.
You'd hate me a little bit.
It's a data structure right if i
gave you that same thing as html it was like here's the heading order number one two three
or the here's the heading here's a head and here's the title order one two three here's the body of
the order right you might you you might get violent with me I might not be able to make it to work the next day.
Right?
So that's why I was thinking, like, that's a crazy one.
No, it's not a data interchange format.
That's not what that thing is.
Yeah.
This episode is sponsored by Datadog, a monitoring platform for cloud-scale infrastructure and applications.
Datadog provides dashboarding, alerting,
and application performance monitoring
and log management in one tightly integrated platform so you can get end-to-end visibility
quickly. Visualize key metrics, set alerts to identify anomalies, and collaborate with your
team to troubleshoot and fix issues fast. Try it yourself today by starting a free 14-day trial
and also receive a free Datadog t-shirt when you create your first dashboard.
Head to www.datadog.com slash codingblocks to see how Datadog can provide real-time visibility into your application.
Again, that's www.datadog.com slash codingblocks to sign up today.
So next up is Shell Games.
So if you do all of your work using UIs,
then you're not taking full exam...
Oh my gosh.
Sorry, too early.
I'm very time sensitive.
It's either too early or it's too late.
We can't win.
Yep, can't win.
Shell Games.
So if you do all of your work using UIs,
you're not taking full advantage of the capabilities of your system.
And this is something we've mentioned a few times.
I'm definitely a big fan of CLIs.
And it seems like they've gone really popular in the last couple of years.
We mentioned.NET.
I think kind of some of that kind of comes from NPM growing in popularity.
And people were able to do a lot of stuff with things like Yeoman
and create React app and npm install whatever i think dot net has kind of uh learned
a lot of those lessons and because you're able to script stuff because it's easy to get people
to kind of run stuff even like brew for for mac has been really popular so it's kind of funny to
see like see how it's kind of gaining popularity over the last 10 years well even kind of going
back to the example that uh think Alan mentioned earlier with,
if you only know how to use Git via Visual Studio, right?
Like there's a truckload of functionality that Git has
that Visual Studio only scrapes the surface of what Git can do, right?
So yeah, you're definitely not taking full advantage of the capabilities of git if you
only know how to use it through your ide yeah yeah uis are kind of inherently less flexible
because you kind of have to make some assumptions about how people want to work in their workflows
i'm sure you've seen things where like you want to add something new or change something new in
your id and it's like okay go over to this menu do this setting and then go over to this menu
do this setting and then go over here and if that on a CLI, that might be something you're able to do in like,
you know, one kind of text config change or one kind of command. But because it's in the UI,
because people didn't anticipate you doing things in that order or doing that thing,
now you've got to kind of hop around and do this weird disconnected
kind of thing that basically requires a tutorial. Right and they say here the advantage of a ui
is that they're whizzy wig right what you see is what you get the problem is it's not just that
it's also what you see is all that you get i loved this call out when they when they said that i was
like oh man i never have considered it that way but they are so they like hit the nail on the head
so spot on it is so correct that
like, yeah, that's, that's all the functionality you get. Right. And like in hindsight to say it,
it's like, Oh, of course that may, that's dumb. Of course it is. But you don't think about it in
that regard. You know, it's so funny. I remember years ago, like I was very much a gooey guy,
like no question. Like one of the things that drew me to Mac for like hosting sites and stuff back in the
day is they had a nice GUI wrapped around their server.
And that was one of the things.
You used a Mac server?
No, back in the day.
Yeah.
Hold on.
Wait, nobody.
But it was one of those things, right?
Like it ran Apache, but they had a nice UI wrapped around it.
And I was like, hey, that makes sense.
I was used to IIS, which also had a UI wrapped around it, which all made sense to me. And then when I started going over
into the Linux world, I was like, what is all this garbage, which with Apache config files,
like why, why are people working in the stone age over here? Right. And it wasn't until later.
And it's this next thing that I wrote in here to where it all
started to become clear to me is this thing of being able to pipe together commands in the
command line, right? Like this whole thing of like doing a get commit or something like that.
Okay. Sure. If you have a very standard workflow, you could use visual studio, right? And I think
it was actually Joe that had brought that up earlier where everybody goes in there and use the visual studio stuff. And it's like, okay,
fine. I get it. But what if you need to do multiple things at once, right? You can't do that.
Like one of my favorite things to do in, in a Linux command line is to grep something.
So if I want to list out all the files, like, and I do this a lot with Docker nowadays,
right?
Like I'll look through the log files, what broke?
So I'm going to say, hey, spit out all the logs.
But if they give me back all the logs, then I'm going to get lost in this hill of data
that I'm not going to be able to make sense of, right?
So I'll say, hey, show me all the logs, but then pipe it to another output and then grip
that in, find me everything where I find the uppercase word error, right? So now I've run
two commands directly together where in the past I would have basically said, all right, dump all
the logs out to a file. Let me open it up in an ID hoping it doesn't crash because it's going to be freaking 25 megs.
Right.
Something like that.
And then searching for the word error and telling it, oh, click that thing that makes it case sensitive, right, because I need to find it that way.
I could do all that in one line with very little effort, right?
In fact, you could see it in real time, which is a tail minus F on that.
A tail on it, yes.
As the input to that grip. And so that's the kind of stuff that even when I learned command line type stuff in various different environments, until somebody had said something, used the pipe, I was like, what is this?
Wait, hold the presses.
What do you mean pipe?
And then I started really understanding like, this is amazing, right?
Like, I can take this and I can create these chaining of operations in a single line that will do stuff that would have taken me 20 minutes to cobble together using GUIs.
Yep.
I've always wished that, like, I realize that Microsoft's trying to do their own thing with PowerShell, for example. And, you know, but even before PowerShell, like before you had PowerShell and you were just stuck with command prompt,
I always wish like, can't you just like say, okay, fine, we lost this battle and just make all of the Unix commands the same.
Like, let's just have one set of commands to work with and be done.
Right.
Like, wouldn't that be an amazing world nobody i guess so but i mean bash kind of there's stuff i don't like about
bash like it's all string based we're done with this conversation yeah and powershell yeah it's
all it's actually object-based so you can actually like see properties it's so much easier to link
things together i know powershell is a you know a bold new statement that's kind of different and it's nice to be able to run stuff but i feel like with
the windows subsystem this is true with version 2 that's coming out i i'm okay with those being
different because now i can do all my linux stuff and i can also do my powershell stuff
yeah i i will say powershell has grown on me over time. And it's funny. I would have only ever transitioned to messing with PowerShell because I learned the Linux stuff in the first place.
When I realized how powerful Linux was in its shell scripting.
And you go over to the command prompt and you're like, really?
I can't do anything here.
But then you find out about this other tool in Windows called PowerShell and you're like, oh.
There was things.
I mean, let's not beat on Command Prompt too much.
It was terrible.
You could pipe things from one to another with Command Prompt, but it definitely wasn't.
Like, I still will forever be a Bash fan.
Like, that's definitely my favorite shell of choice and it
has been for a long time right even though i do love powershell i mean powershell is awesome to
to joe's points but it would be cool if there's just like one but i mean to the point that i
think joe made a minute ago is you have to know the use cases, right? Like if you're creating a GUI, you're creating a GUI for the vast majority of people that are going to use this a particular way, right? But if you are somebody that needs something on top of it, the easiest way is to go to the command line because you have way more functionality exposed to you. And the part that you learn later on after you start developing for
a long time is most everything that you're using that is driven with a GUI is calling those command
lines behind the scenes. Oh yeah. Right. So that, that's the thing. Like once, once that hits you,
you're like, Oh, wait a second. What am I missing? A lot of things will even let you watch it. Like
even, you know, like if you talk about your IDEs, for example, you know, IntelliJ, Visual Studio, you know, and you do a compile, or if you do a git command,
like you can see the actual commands that it's doing, you know, even if something is, you know,
maybe mundane is like adding a NuGet package to your project, right? You can actually see
the commands that are being executed. Yep. It's one of the ways i learned docker compose no lie you could actually add a docker uh you know
project and it would show you how it was appending with the dash s to bring all the docker compose
files together and everything else and i was like oh so they're not doing any magic they're just
calling the same cli i've got access to well let me do that right
yeah and yeah speaking of terminals the windows terminal just came out the new one in preview
it's in the microsoft store i've been trying to install it just now but i just can't get it
installed it keeps hanging on me but i'm looking forward to it yeah looking forward to it i've
heard i think joe was the one who told me that it was going to replace my commander
we'll see about that yeah that's the theory it's got tabs it's got all the same stuff let's put a pin in that
conversation because i got some thoughts on that because we're definitely going to come up to that
one uh i believe somewhere in here uh but i do want to say that like if we just move on that
they call out that programming program programming, programmatic, thanks Joe, pragmatic, no,
pragmatic programmers don't just write code or documentation or automate the build. We do all
of it. And so, you know, any one tool scope is usually going to be limited to how it's expected
to be used, which is the point that you just made, Alan, right? So, you know, for example, notepad.exe, for example, like it's not expected to be used
to write code.
You can, but it's not expected.
And I've actually heard people defend it for writing code, like at lightning talks, at
meetups and everything.
And I'm like, you sir are crazy.
I can't, I can't.
Get off the stage.
You only get one undo
i can't work like that yeah exactly like no that's that's just that's sadistic man yeah
there's an analogy though that that the authors make later in the in the book where they refer to
uh using notepad as an ide like using a teaspoon as a shovel yeah i i can 100 agree with that
so yeah i really would like to explore more uh kind of making extensions and stuff um i think
it'd be really cool i don't know why i've always kind of shied away from that but i think that'd
be a neat thing to get into even if it's just like making work custom stuff like for the
com tests that you do and getting that in there as a, as a plugin, I think that'd just be neat. You know, I'm looking through and I don't actually
have the thing that I was going to comment on. So like, let's go ahead and hit on that thing now,
because you were talking about like the windows terminal and it replacing commander. So, uh, one
of the things that they had talked about in this, this chapter, or at least I thought it was in
this chapter, um, was that, you know, you should try to get into the habit of, um, you know, learn, learn a shell and learn it well. And if you have
to go to a different environment for whatever reason, see if you can bring that shell with you.
Right. So like, for example, if you, if your shell of choice was the corn shell, well, you know, God help you, uh, you know,
bless you. Uh, but you know, then when you go to, you know, from your Mac where you're using that
and you then have to go to a Linux environment, you know, bring it with you, right? Like that way,
that way you already have some comfort in it, right? Like you already kind of know,
know it. Right. Um, and for ever now for, for a very long time, I'm trying, I can't actually remember for
how long, but because I can't remember a time without it, I've always brought on some kind of
a bash shell to Windows. And forever and a day, that used to be SigWin, right? That used to be
the way of choice of like, you know, being able to have a Windows environment, but a bash
shell to work in, right? And nowadays, you don't have to do that. Like for a while, get bash was
good enough, it did everything, then Connie Mew brought that in with get bash brought into it,
and then commander wraps all of that together now to make it even easier. i don't know man you're gonna have a hard time replacing
that uh i mean i'm just saying windows terminal has got a tough road ahead of it it's not saying
it can't be done i'm not saying it can't be awesome it's got some heavy competition but
yeah you know this powershop core pwsh i mean I will say like one of the reasons why you don't
bring them along is, I mean, I know all three of us have been like, you know, you're in a production
environment and they're like, you will not install new tools on this. Right. Like I don't care what
you got to do to figure out what you need to figure out, but you're going to do it without
installing anything. And that's when something like PowerShell, if you're in a Windows environment, like learn the
equivalence because like one that comes up all the time is, hey, the system's not able to talk to
something else. And so did you open the port? Is the port open? Well, the way that you do it in bash is easy. Telnet to it,
right? Done. Telnet's not installed on a Windows server by default, but there are ways to do that
in PowerShell to where you can basically do the object approach, right? Where it goes into the
system and says, hey, try and connect to the socket, right? And so if you can't take your
shell everywhere, be aware, at least be aware that typically there is a way to do it from one to another, right?
So maybe Google the equivalent of, hey, what's the equivalent of Telnet and PowerShell?
Or what's the equivalent of PowerShell's version of this in SSH?
Before, like what's the equivalent of curl?
Oh, yeah. Curl's a big one. Yeah.
Invoke web request yep know about the know that you can google
hey what's the equivalent of this and you'll find all kinds of cool stuff out there
you know now you can curl from dos really so if you open up powershell what you do is you do cmd
first that opens up that and then you can curl and yeah it's it's like actual curl it's not alias to
the powershell thing it's like actual curl with dash k and dash i and all the stuff that you know
and love oh that's cool i didn't know that because you used to it was an alias and it didn't support
anything and everything you tried would break yeah i love the powershell aliases for things
like cat and some of the other stuff that i would just echo that i would do all the time and it was
great but once you need to start passing flags and it fell apart yeah yeah like ls ls was one of them yeah that's h2 by the way is in cmd you can ssh
the servers that's weird to me so you know while we're on the topic of learning the shell the
advantage of learning and and we've talked about this in past episodes too where we didn't refer
to it as the shell but like learning the terminal or the command prompt
but the the advantage of learning this is though is that like these commands may seem obscure and
in the beginning but they are powerful and concise so you know you can do a lot with a little bit of
effort and and to me most importantly is that you you can script it like that that to me, most importantly, is that you can script it.
Like that to me is like, you know, huge.
They didn't really call that out.
But like knowing that you could then like write a script that can be, that's reproducible,
that, you know, might be able to do for like a, might work for your build server or whatever,
right?
But, you know, knowing these things can make you far more efficient. So, you know, we mentioned the Git the Git example before, um, you know, but at a time
when I, when I wrote this note down, I came at it from a different point of view where it wasn't
from Visual Studio, but, you know, I think I've actually mentioned this in the past when, when
we've talked about Git, like I, I took it upon myself to, to really, you know, learn the commands
for Git instead of you relying on a UI
because I wanted to be able to work cross-platform.
So if you only knew how to use Git through some UI on Windows
and that UI is only available to Windows
and now suddenly you find yourself in a Linux environment,
like, well, what do you do, right?
And the thing is, it's usually pretty simple yeah but you didn't
take time to learn it so now you're just stuck yeah and and when you say simple
so git itself is not simple but the one thing that you might need to do is because it's such
a mundane task that we do regularly that's why we call it simple right it's like you're expected to
know how to do that so what do you mean you can't do that just because you're on Linux? Right.
Like that's not a valid kind of, uh, you know, excuse there.
Like a Git clone or a Git pull, right? Like those, those are things that are exposed to the UI.
That's really easy, but they're also pretty easy on the command line. But if you've never done it,
then, and, and a lot of people like going back to the point, a lot of people don't even realize that a lot of these GUIs are backed by those same shell calls, right? That's what's
happening. They're being, they're being shelled out from the UI. So, you know, super important
to know about that. Uh, what else we have? So yeah, what you said a second ago is the ability
to create these scripts. So, so, you know, going back to what I mentioned before about like maybe I'm dumping out the logs from all my Docker containers in some sort of compose and I need to search for errors.
Well, I know that I can type out that command and it's not short.
I can save that thing out to an SH or to a PS1 or whatever.
And then I don't even have to type that anymore i can just type in you know find errors dot bat or find errors dot
ps1 or find errors dot sh right like that's really easy and repeatable okay so i i can't be the only
one here but i you know i always on all my machines have like a path added to my or a directory added to my path that will be something like Ben in my home directory or something like that.
And all my custom scripts are in there so that like whenever I'm on an environment, I can be like, oh, do this.
And like, you know, like, for example, I have one to just sync my files for backup purposes,
for archival purposes related to the show, right?
So I could just do like CBCync and it'll sync everything.
Do you guys do that kind of thing too?
Never thought about it.
I like it.
It makes sense.
Why wouldn't you?
Well, where do you put all your scripts then?
In the folder that I'm going to use them in.
Oh, so just like the one
time though but like these aren't like but you don't have them like automating for common things
there right no it but it's a great idea well i'm talking about like definitely like for for things
that you know you'd want to that aren't necessarily like related to a project i think that's what
you're you're talking about right no i mean you might like that command that i was talking about
for docker with the docker compose like the only thing that would ever really change in that would be which which potential
service you were wanting to look at so it totally makes sense to have a find errors in you know
script and then you could just basically pass it in the service that you want like i'd i guess
never really crossed my mind i have i have just like a slew of little scripts for that like
if i wanted to you know manage the slack the coding block slack right i have scripts for that
that are just there in my home directory like raids across like you know various computers in
my house i'm like oh let me make sure that all the raid systems in the house are like fine
i said that plural and it's just like and you know like go and do
what it has to do right like i think people heard that they're like he has raids oh i mean you know
it's 2019 oh my gosh that's awesome all right you're up all right that's it 21 1 1 use the power of command shells shells shells there's an echo oh yeah it's no good
if there's no echo so i we already said this is if you learn the shell you'll be more productive
like it's straight up that's it that's this is not you should go do it if you haven't ever explored
it do it yeah i mean i i view it like, if you are able to keep your fingers on
the keyboard typing, right? Then those are 10 digits that you have working for you, right?
That's 10 outputs that your brain can be like trying to signal things to happen versus if you
have to use one hand to move a mouse and click on something, then you're limited to the one hand,
right? so that's
part of where i view like you can be more productive is that you can just move faster
so 10 versus one that is absolutely true and it's funny here's here's a side benefit that i wanted
to mention i told you i'd be um bringing up ryan monster again in here so we were working on a
project together and and he was kind of used to doing
things through the the ui on some stuff i was like look dude we're about to go into a linux world
you're gonna have to learn some commands here i said and dude it's gonna be frustrating at first
but here's what's gonna happen after you learn how to do some of this stuff and i think specifically
i might even been talking about vi or vim i was like you're gonna feel like a wizard you're gonna feel like you've
just leveled up and you're some all-powerful coding god and it was funny he's like he came
back over after a week or so he's like man you were so serious that was so true like for some
reason i feel like i have like advanced so far just by knowing and dealing with this kind of stuff.
Like you seriously feel like your skill set jumps just by learning some command line stuff.
And as any true wizard, he had like a foot long white beard.
Of course.
Of course.
That he gained from the process of learning the command line.
Just over the weekend.
Yes.
That'll happen. Of course. That he gained from the process of learning the command. Just over the weekend. Yes. That'll happen.
True story.
All right.
And someone's got in here a funny side note.
And I think that maybe being facetious is that when this book was written, they made a comment on how inferior the Windows CLI was compared to Unix.
And yeah, I mean, it's funny that things are different now and the the cli
has gotten a lot better in windows but it's also funny how that's been like in the last two years
of that 21 20 years yeah i mean powershell's gotten huge on windows especially for system
administrators and all that kind of stuff and i think with the rise of a lot of windows systems
they had to start growing those tools right like it was no longer command line was an object.
It wasn't good enough.
I definitely like the tools being command line first.
Yeah.
Yeah.
And then the other funny side note that I just noticed
when they were talking about this,
Outlaw brought up Sigwin.
That was also one that I used in the past for like ssh and whatever is they say hey um you need to check out their license because they use gnu and they called it
a legal virus yeah that was awesome because you know lift yeah we talked about it a long time ago
on our episode about you know open open source licensing and how nobody understands it.
But yeah, the whole thing is if you modify anything in there, if you add to what they were doing with any of it, you have to open source your code as well.
So that's why they call it a legal virus because that's what the copyleft is.
So I just thought that was funny.
They pointed it out in the book, and this book's old,
and they were still saying that.
Yeah.
Yeah, and we've got some challenges here.
First one is, could you automate things that you do via a UI
or tasks that you share with the peer that include click this button?
I think the answer is yes, definitely.
I was going to say no.
Says the guy with his own bin path i'm really surprised i totally expected to learn some cool things that you guys were doing
there you know what's funny is i do stuff like that all the time like when i when i downloaded
commander it doesn't install on your system and i was like man that. Plus the adventure commander is that you don't have to install anything.
But I wanted to be able to call it directly.
So I put it in my path.
So I definitely do it to other things.
I've just never thought about doing it to my own script directory.
I like it.
I will probably do it now.
I want to learn something cool the next time you do it.
So tell me.
Yeah.
I've always just thought project-based.
So I always have projects usually have some sort of scripts directory in it yeah uh so when working in a
new environment see if you can use your shell of choice well that's not okay i guess that's
kind of a challenge i guess i'll see if i can uh if your current shell has an issue you can't overcome see if an alternative would cope better
have you guys heard of fish fish shell yeah i heard it's nice but it does some non-standard
things so people kind of it's controversial but uh i'm gonna stay away from it because
i'm not an early adopter i like to make sure that things are like you know my investments are safe i like being in 0.1.1 not 0.1.0 i'm a version 3 kind of guy yeah i mean i've definitely like
you know we were joking about uh corn shell earlier like it made me remember
as you were saying that one like i i knew a guy that i worked with the corn shell was his preferred
shell of choice and he actually had vi as his command line uh like editor like on the command
line itself he could use vi commands to edit the command wow does that make sense like he like the
keystroke bindings for vi were bound to his and i was like oh dude that's really cool and i will
never do that yeah i've heard of
interview challenges where people are like i want to see if you can exit vi oh it's too easy come on
well it is if you know about it otherwise you're gonna be like man i hit the x button at the top
i don't know what to do i don't know how to list the commands and i just google like how do i copy and paste again yeah it's nuts yeah all right well there's definitely some some vi gurus out there that
like spend their day in it way more than i do that i'm kind of jealous of like especially when
you see uh uh what's the dang it what's the extension call where you can have the tree
that the file tree show up in uh vid you know what i'm
talking about no i've seen it dang it i don't know i don't know what it's called now i can't
remember it but yeah you're like oh geez man that's just i would have never even thought of
that like i thought i was special because i could turn on like line numbers and nerd tree yes there
you go nerd tree because i remember making fun of the name i remember like calling out like wow
your your directory trees they're making fun of the name. I remember calling out, like, wow, your directory trees,
they're making fun of you.
That's crazy.
I didn't know about this.
Learn something new every day.
I saw a presentation from someone, Ian.
Hey, Ian.
Who was doing relative line numbers in VI.
So if they scroll down to the middle of the file,
it would show, like, negative one, negative two, negative three.
And that's because there's some commands where you can do stuff like that's relative so you can say like copy this to line
three or whatever but it'll all be relative based on the command so it wouldn't show the normal line
numbers but it's freaky as i'm watching them do the presentation like yeah like you're on line zero
you're on line zero but the line above you is negative one and the line below you is positive
one yeah oh god i hate that but it's so amazing when you think about what's built into that editor
that has been around it's so difficult it's so difficult to say like oh no like if you're like
in a pair program kind of situation you're like no go to line negative three but then like if they
move the cursor as you're talking which always happens now negative three changes i'm sorry now
it's negative five right nope it's negative six's negative six now. Now it's positive one.
Now you missed it.
Like, give me the keyboard.
That's why I hate the relative one.
Like, if you're working solo, fine.
Then it makes sense.
But whenever you're in a pair program coming in a situation, the relative numbers.
That's amazing.
You know, funny story.
So after I saw that presentation from Ian, I talked to him.
He was doing a Go presentation.
I was like, man, you got to meet our buddy Will.
I think you guys would really hit it off.
I see that guy one week later.
He's like, hey, man, I ran into Will.
I'm like, what?
That's cool.
Sure enough, I kind of put him in touch on Twitter.
I was like, oh, hey, ask Will.
So something like that.
Anyway, there was a Go conference that. Anyway, they ended up
there was a Go conference in between.
They both just happened to be there.
Well, that's weird.
Small world. Here we go.
You guys are in the same state.
That's coding blocks for you. Putting coders
together. That's what we do. Bringing the world
together, one compile at a time.
All right. So, with
that, we'll have some links
to resources we like.
Clearly,
the pragmatic programmer
will be in there.
And with that,
we head into
Alan's favorite
portion of the show.
It's the tip of the week.
All right.
And I've got to thank
Micro G for this one
as I've thanked him
so many times.
If you go to app.programmingfonts.org,
then you can see a really convenient way of browsing coding fonts
and seeing the ones that work great for you.
And so I've been a big fan of Fiora code
since BadFuckingGod turned me on to it a while ago.
And looking at it now, I was like, yeah, it's still the best.
You know, whatever.
I have no need to change.
It's perfect.
But then I start clicking around some of these other fonts.
I was like, you know, it does kind of look a little blocky
now that I think about it.
Maybe you want to use other guys.
This is cool.
Yeah.
I want to see, can you filter by ones with ligatures?
That's what I need to know.
This is for, like, use in, like a visual studio code or uh adam or something
yeah anywhere you can install fonts so these are all free fonts uh and so you can just kind of look
for the ones that uh the ones that look nicest for you just got a nice little code block here
so you can see what things look like and you actually can type in that editor too we've
actually talked about the ligatures though before i mean i'm not finding an example right now as i
click through here but we've talked about using ligatures in uh i mean i'm not finding an example right now as i click through here but
we've talked about using ligatures in uh visual studio code before here we go uh fixed sys
with ligatures but their example doesn't show any oh yeah it does well fear code fear code also has
ligatures does it do they show it in the example yeah up at the top if you if you click it the
console.log has an equals like an arrow there's an or or on
line 22 and if you just go down i mean you can type in your own code too so you could say not
equal right yeah fix fix this with ligatures did have it sorry yeah so yeah this is really neat i
didn't i'm trying to remember what episode it was that we talked about that, though.
Yeah, I really wish...
Oh, no, there is one.
Okay, so you can turn ligatures on or off.
So that's weird.
You can turn...
Okay.
Sorry, I'm getting confused.
You can say no ligatures.
I haven't figured out how to say only ligatures.
Oh, I found it.
Okay.
It's the button at the top.
It's the second arrow.
Yeah.
There's, like, one where it's, like, a text text arrow and there's one that's like an arrow arrow so you
click the arrow arrow and it will show you all the ones with ligatures which i really like ligatures
yeah this is really cool and there are eight with ligatures okay so so i found it it was back at uh
our docker for developers episode where we talked about using
ligatures in your IDE with fonts like Ferrocode was specifically mentioned.
And it was MadVikingGod that gave that tip then.
And he gave this tip for this one too, you said, right?
MicroG.
Oh, okay.
MicroG.
Yep.
But MadVikingGod was very enthusiastic about it.
The Borg?
The Borg Sans Mono is really nice. I Borg? The Borg Sans Mono is really
nice. I like that one.
Borg Sans Mono. Yeah.
You see you can change your language too. So you're like, let me just see
a C Sharp. Oh, there's no C Sharp. Let me see a
Go example. I did not.
I see it down there. Look at that.
They left
out C Sharp, haters.
Well, it's C-like. What's wrong with c like because that covers java yeah i guess whatever
i mean because they don't sit in the car java man i don't know what's in my throat now that's
ridiculous all right so i guess mine then so one of the challenges if you are learning new shells and new editors and whatnot, it's just
learning key bindings and what you have to do in the various different things. And so I thought,
Hey, I wonder if there's like a CliffsNotes for these things. Right. And I found one, there's a,
there's a site called chief cheat, uh, cheatography, easy for me to say and they have a bunch of cheat sheets so for sublime for wikipedia
for um emacs for vim for vi they have them for visual studio code eclipse like all kinds of
things so if you want a cheat sheet so that you can go in and vi is one of those that you need
cheat sheet for nerd tree is specifically thought called out. Oh, very nice.
Very nice.
So,
so you actually have the ability to just sort of have these quick ones where
somebody is taking the time to create these PDFs or whatever,
or even a webpage that has the key bindings and whatever,
so that you could do tasks in these.
So I thought that would be pretty cool.
I'm going to become a nerd tree expert.
There you go. I got a cheat sheet for it.
And then for anybody that's like,
what's this CliffsNotes things
he's talking about? You guys
remember in high school where you'd have
this book report that you had to do and you're
like, man, this book is like 500 pages
long.
I don't have time for that. Who has time for
that? Like I got other stuff I got to do in high school.
And so you would go to your local Barnes & Noble or whatever,
and you would find Cliff Notes.
Barnes & Noble wasn't even a thing then, though, was it?
Like, back in my day?
Yeah.
Yeah.
All right, well, I mean, yeah, it was a thing back in my day, too.
Yeah, I mean, I would just go on Amazon and order it.
You know? But, yeah, totally. Jerk. It was a thing back in my day, too. Yeah. I mean, I would just go on Amazon and order it. You know?
But yeah, totally.
Jerk.
It was a thing.
But it was kind of like the dummies books, except for whatever book you had to read.
So I'm trying to think.
What was the...
It was just an abbreviated version of the book.
It was just like, here's the highlights.
But here's the thing, though.
I never once ever bought one, read one, or used never oh dude i used them because the teachers would know like those
were already things so the teachers would like go buy the cliff notes and then they would purposely
make the test to where it skipped all the cliff notes parts you had to make sure you didn't have
a teacher that was that experienced that was the teachers that was those were my teachers you went
to a good school, man. Right?
Charles Dickens would be like, pick up the CliffsNotes, and the thing would be like 20 pages.
And you look at the book, it's like 800.
Yeah, exactly.
Maybe I'll miss one or two.
There'll be something in there, but maybe I can guess and figure it out.
So I definitely spent a few bucks on some CliffsNotes in my lifetime.
Yeah, I want to see your test that out.
I was like, what color was the sky on Thursday?
Was it slate gray?
Was it dappled flavors of orange?
Oh, man. Flavors of orange?
Yeah.
Did you say dappled flavors of orange?
I don't even know.
I mean, that sounds like some Darwin stuff.
I don't know.
Darwin digging stuff. I mean, that sounds like some Darwin stuff. I don't know. Darwin and digging stuff.
I hated it.
I hated it.
And all those things like the Iliad or whatever.
It was like, no, man.
They didn't even rhyme.
We know how a rabbit feels about his rhymes.
Future rapper of America here.
And then the other one I wanted to do that I wanted to share is Udemy.
Like we've recommended like courses to share is Udemy.
Like we've, we've recommended like courses and whatnot on Udemy.
And here's the thing, man, like it is a frustrating site because they have sales like every other day. It feels like, and if you hit their site on a day when there's not a sale, the courses that you typically buy for 12 or 13 bucks is 150. So my
tip is, and you know, I say this to help everybody out. If you hit the site and you wanted to buy a
course and you see it's like greater than $15, go search for a coupon and then click that link.
Yeah. Somebody else is going to get a buck for
doing it, but the price of your course will drop back down to a reasonable 1199 or 1299 or
something. So just know about that. Docker and Kubernetes, the complete guide, regular price,
9999 on sale for 1399. Yeah. I mean, and typically if you use one of those discount codes, you get
it even cheaper, right? You might even get it for nine 99. So, you know, I, I hate saying that because
there's somebody that spent a lot of time out there making these courses, but on the flip side,
you know, if you want to grow your technology skills, you know, save yourself a dollar or two,
then buy five of them, right? Buy five of that dude courses. Well, you know, it's funny. If you use the author's coupon code, they get 97% of that sale. If you browse to it via Udemy, they get 50%.
Right. So they still might work out for the better for them to use their coupon.
So yeah, if they have their own site, go to their site, see if they have a way to link to it.
Well, I think I would rather have 50% of $100 than 97% of 13. Well, yeah.
No, yeah, but it depends on what kind of – that's the thing that's maddening about Udemy is it's kind of good and bad for everybody involved.
Yeah.
But they do have some great courses up there.
They're always having like some sale, though.
That's the frustrating thing.
It's always a sale, and it's always like a high-pressure kind of situation.
Like, the sale ends in two days.
I'll buy five.
It's $9.99 right now.
And if you don't get it, you'll never know anything about Python.
That's right.
Yeah.
And you add the credit.
It's like, would you like to buy this one too for two extra dollars?
Well, I mean, $2.
Yeah.
Yeah.
I mean, of course I need to learn that probably too.
Like, yeah.
Right now, I know that Joe's in this, and you probably are too, Outlaw. I've
bought more courses than what I can reasonably learn in the next three months. Like, it's not
even possible, but they're there. They're mine. Yeah. It's so, like, the trouble that I have with
some of them, though, too, I love them. I love how easy it is to get to learn about anything, be it on YouTube or Udemy
or Coursera or Pluralsight or whatever. There's so many ways to learn right now out there for free
or for a reasonable price. But even just finding the time to watch the thing or like halfway listen to the thing while i'm like writing
while i'm doing like my day job for example i find that hard enough to do let alone to actually go
all the way through it let alone if i actually take the time to be like okay i'm gonna go and
code with the guy let me do it in the course right like it can be a full-time job to just go through that. You'll
be like, Oh, well this particular section is 30 minutes long. That won't take me that long. An
hour and a half later, you're like, okay, well I finally got that sorted out because like,
yeah, they're talking in 30 minutes, but you know, they're not giving you time to type while
you're doing it. So you're like, okay, let me pause. Oh wait, there was a bug. Like something
didn't work. Or like maybe the course was a little bit out of date or something like you know there might be a point release since they did it you
know not their fault necessarily but yeah it's the same thing as demos you watch up on stage right
like like somebody goes up there and does it and you're like that is amazing it's always that easy
yeah what you don't realize is for that one hour demo that person spent 40 hours hitting all
the weird things that they hit to make that flawless looking execution right it does right
that's always what you run into when you're doing these things on your own which is good that's how
you learn it but you know yeah 28 courses that's how many you've bought? Well, I don't know.
I bought them all.
Okay, I've bought a few, but okay, yeah.
So I've probably bought six or seven myself,
and it's just overwhelming.
All right.
I'm going to lighten the load a little bit here with my tip of the week.
So let's say you like to use emojis in whatever you're know, whatever you're typing emails, text messages, IMs,
but you can't remember like how to type that perfect emoji for that particular situation.
Well, emoji cons.com is here to save you. So you can go to emoji cons.com and you can see great
little emojis that you'd be like, Oh yeah, that's the
one I want to use. Let me click the, uh, well, I don't know if I want to say that one out loud.
Uh, but you know, you could click on the little button to copy it and, you know, paste it into
your, uh, whatever you're trying to type it in. And there you go. So like you want zombie face
and you're like, Oh yeah, I want, I want a zombie. I want to add a zombie face and i'm going to click the copy button and then add it and then you're done
and now you could just isn't that awesome you just leveled up my slack game right isn't that great
isn't that great i'm gonna be a better slacker right yeah and then like i i don't want to say
what this one was called but well you called, but it was called something new.
You might be able to figure it out.
But now you see that one there in our notes, and you can get the idea of what that one might mean.
So I love that, though, Emojicons.com.
And then another one, we were talking, just listening to things while you work.
So if you haven't already heard of this podcast, Carbonite has released a podcast.
And I think they're already past the first two seasons, I guess.
I hope they're working on season three because I really love this podcast called Breach.
And if you are like me and you love things related to security as it relates to IT, then this podcast is the podcast for you to check out. Basically, think of a serial-like podcast, okay, where it's seasonal,
and so each episode in a season is going along a common theme and they're discussing the notorious data breaches
right uh you know really enjoyable podcast so yeah give give breach a give breach a listen
excellent breach a chance uh yeah all we are saying yep that's all we're saying all we are saying sorry you got alan singing again all right
now who didn't turn on your phone did not disturb oh mr joe zach oh mine's always on mute oh yeah
you'll never hear it and then there it is joe it's down on the couch somewhere i can't do anything
about this one oh okay It's a landline.
I don't know why I have a landline still, but it doesn't count because it's a landline.
It counts, Joe.
It's not my landline.
Yep.
Mother-in-law's calling.
There's no muting.
You know, I don't know that we've ever had any of these things go off during the show
because we're really good about it.
Usually like 2 a.m. when we're doing
the recording. That helps too.
But today we've had two. That's awesome.
Sorry about that.
Alright.
Anyway.
So we got a couple tips that we
covered this time. So we talked about
tip 20, 20, 20. Keep knowledge in plain text
and tip 21, 21, 21,
use the power of command shells.
Yep.
And so with that,
we hope you've enjoyed this episode.
Be sure to subscribe to us on
iTunes, Spotify, Stitcher, and more
using your favorite podcast app.
And as Alan mentioned earlier,
if you haven't already, we would greatly
appreciate it if you would leave us a review.
If you wanted to help us out in any way, we would appreciate it if you took time to
leave us a review, if for no other reason than to put a smile on our face.
You can find some helpful links at www.codingblocks.net slash review.
And you know what?
I should add to that because not all places will let you leave a review.
So like, for example, I think in Overcast,
it's just a star, right?
So, you know, depending on where you're finding us,
whatever the appropriate method of, you know,
hitting that like button, whatever the equivalent is.
Definitely.
And while you're up there at codingblocks.net,
check out our show notes,
all our examples, discussions, and more.
Yeah, and check out the Slack.
We lucked into having the best programming Slack on the whole internet.
And it's really not fair for other people that have tried really hard.
But I'll take it, and I love it, and it's great.
And you can join, too, by going to codingblocks.net slash Slack.
And just click the little button.
It'll send you an email, and you're in.
Oh, and follow us on Twitter at CodingBlocks.
And you can check out the website where you can find lots of social links
for anywhere else you want to hook up.