Programming Throwdown - Editor Wars
Episode Date: June 24, 2016This show covers many different editors. Blog post: http://www.programmingthrowdown.com/2016/06/episode-55-editor-wars.html ★ Support this podcast on Patreon ★ ...
Transcript
Discussion (0)
programming throwdown episode 55 editor wars take it away patrick well first i want to open
up with a discussion about vacation. So it's the
summer. People with children in school or in school themselves often think about vacation
this time of year. I tend to actually be the opposite since I do have kids, but they're not
school age. I try to take my vacations during the school year. And so that way it's cheaper
and less crowded. And I'm basically a curmudgeonly old man.
And then I came across an article about mandatory vacation and should it be required at tech companies. And there's an article we can link, but it got me thinking. And also I wanted to share,
there was an interesting example in here where at bank companies, companies insured by the FDIC,
specifically the government has rules. And they say that you have
to take at least two weeks of vacation per year for people in certain roles. And the reason being
that if you're cooking the books at a financial institution, and you take a vacation for two
weeks, that there's a much higher chance that someone will catch that the books are being
cooked while you're gone. Because you have to kind of make edits on a daily basis to make everything
match up in the ledgers and if you're gone for two weeks and someone else has to do that you'd
have to collude with them um and so you know most of the time collusion is the risk is too high
because you have you know we can get into game theory i guess but um there's a reason if you
have if you have 100 people if any one of them defects the rule and then also if you have
100 people and someone breaks the rule you don't know which one and so yeah as soon as it gets more
than one person it's very hard to which is also a convincing explanation i've heard about why
conspiracy theories in general don't work is because they have too high of a rate of the
defector problem like given the conspiracy someone would would defect at some point and you would know about it and it wouldn't be a conspiracy anymore.
And so this is basically talking about that, you know, someone cooking the books and then they take a vacation and then the bank is able to notice it because the other person isn't cooking the books.
And they weren't the person writing the article wasn't suggesting that the same thing is happening at tech companies but they had a good point which is if you force people to take at least two weeks every year consecutively away um that it forces
code to be like maintainable and documented and i've noticed this before my team always freaks
out if i'm going to go on vacation for even a week like you know make sure everything's in order
before you leave blah blah blah and then they never do anything while i'm gone because like a
week isn't enough i don't even know if two weeks is enough actually, but it's probably more
than one week where people have to do stuff while you're gone. And that requires the system to be
capable of handling it because people could get sick or like going to the hospital or have a
family emergency and be gone for two weeks. And so forcing each person in the company to be gone
for at least two consecutive weeks would make sure that that regimen is followed in addition to the people going away
not thinking about work for two weeks and coming back will just have like a renewed clarity to
their mind about what they're working on thoughts yeah that makes sense i mean i think that as far
as you know making your code kind of morefriendly and more developer-friendly, rotation is also good for that.
Yeah, that's a good point.
You don't want to be the guy on Team X for 10 years, and you know everything about Team X.
And no matter how hard you try to document, there's always going to be something that you're so unconscious so unconsciously you're so unconsciously aware of
that you know you don't document it and so as soon as you go on vacation or change teams everyone
realizes oh we totally missed the the secret sauce that makes project x work and so um vacation is
one way to do that rotating is another way but yeah i i know some people and you probably also
patrick know people who never take vacation.
Yes.
There's a there's a max on vacation.
At some point you stop accruing it.
There's people who just like they lose vacation time.
And that blows my mind.
Like, I just I don't think I could focus if I went three years without a vacation.
You know, sometimes I don't take vacation for a while and i really get like that
like oh i really need to just take a day away or two days away but then other times you know i feel
like i go long stretches where i'm okay and if the work is engaging and not overstressing um
yeah i i do i also don't end up ever running out um and it depends on your company too like how
many weeks of vacation and the other thing i found is that different companies, if they have like less vacation
that you're able to take whenever you want and more like company given vacation, like,
Oh, we're going to give you this week of Christmas off.
So, you know, we're going to give you less vacation because we give you this week of
Christmas off.
Like that matters too, because you can't decide when to take your vacation.
Um, and so different companies have
different like balances of how they give their vacation and i think that plays a lot as well
yeah that makes sense but it would be interesting to have to be away for two weeks in a row but i
wouldn't like to be told that i had to take all my vacation at once yeah i actually i've always
taken just kind of small like little mini vacations but a lot of
them like you know two or three a year um yeah i mean taking two weeks and it would be kind of
weird yeah i think it would be kind of weird to be gone for a whole two weeks but i think they
have good points about making sure you're i think there's a belief amongst a lot of people that the
best way to assure your value to the company and to
get paid the most or whatever is be irreplaceable that no one knows what you're doing oh they know
what you're doing but no one knows how to do it and so they have to keep paying you and keep you
around or else everything would crumble but i feel like that's a very fragile system that people i
don't think that's sustainable it does work for some people
i can't deny it but i've seen more people be successful at being like over communicating
documenting everything making the system so anyone could run it and then i think people
companies long term do value that um yeah right and that gets rewarded higher than the guy who
keeps all the secrets or lady who keeps all the secrets yeah yeah totally all right cool uh
onto news so i have the first link i this is a good resource and i know so a lot of you are
probably um i don't know this will be helpful but many of you i know are learning programming
and with learning programming at least for me they were tied together is when i first learned
programming is when i first started encounter linux um way back in the day no um yeah what was your first linux i don't even remember
now i i guess it would have been i think probably some sort of the early fedora yeah uh i think i
think it's the same for me it was mandrake which uh or i actually don't know what happened to me
it wouldn't have been called fedora at the time i guess it would have still been red i don't remember how the open source thing
they changed like fedora and red hat and i don't remember but one of those flavors
oh i see apparently mandrake is now called uh mandriva but i guess it's still going
oh no sorry the last release was four years ago so yeah um but but they were kind of tied
closely together and i will say that for a lot of programming tasks that aside from application
programming but if you're doing like system level programming linux seems to be the a necessary
requirement at some point you'll come across it and um this website linuxjourney.com
has a very nice organization of topics and then like little i've seen this style more and more
now i don't actually know what it's called but like wiki books or whatever where it's like
topics on the left and then you and then you're reading the text on the right and it's it's a way
to navigate a book and they have a whole bunch of resources along with like quizzes and like highlights about various topics in the linux operating system like how to search what is the
boot process like um how how does piping work there's all sorts of different little topics
and i feel like there's a lot to learn there and everyone makes linux out to be like very very hard
and i and it's just one of those things that depends on how you're using it and what depth you need to go to but if you're trying to learn linux or you found
yourself stuck or just looking for another resource because i know it for a long time
it baffled me and i never really kind of got it and i'm still not like there are there's those
linux people and i'm very happy that they're around and i always like to make sure one's like
within arm's reach of me um but that's it's never been me um but now i you know i i'm know enough to hurt myself and probably not enough to help
myself out of the problems um yeah i'm in the same boat i mean i've i'm still getting to the point
where i get things like kind of really hosed and i have to reinstall but But yeah, I think it's an incredibly useful skill.
I mean, there's a lot of useful things for programmers
to know just by going through Linux.
Like, for example, the idea that there are these pipes
and instead of using the console to print debug statements, you actually write your result to the console, and you read your result from what's called standard in, which is the console input.
And if you do that and you abide by a few laws, then you can be part of the Unix stack.
So someone can do LS, pipe it to grep and then pipe
it to xargs and then pipe it to your program
and it would just work. It's just kind of magic.
So it's
definitely incredibly useful.
And yeah, this
tutorial looks awesome. Yes, there's a lot of good
stuff in there and hopefully that'll be
a good resource to you because
it is a tough topic and even just knowing what
you don't know. So this one's cool because as opposed to finding on Stack Overflow how to do something,
which is also very useful, this kind of gives you this things you should be looking for as you
advance in your Linux skills. Yep. So yeah, my news is OpenAI Gym. This is pretty cool. It's like a set of benchmarks
for a machine learning AI algorithm.
But the benchmarks are all kind of cool to watch.
I mean, there's one where it plays Breakout.
It's also called Arkanoid,
which is this game where you're a little,
like a little, I guess, rectangle,
and there's this ball, and you to like bounce the ball off the ceiling um there's like all these other atari
games there's there's actually doom so you can have an ai that plays doom and usually when you
do these kind of things like there's a starcraft ai competition and things like that that aren't
part of the gym but but these other competitions um it's always like such a hack I mean think about it you have to you know write some AI and then
force that AI into Starcraft without having any kind of API or anything it's just it's very hacky
and so these guys have done kind of all the hacky things for you and so um they provide a very nice api where it's it just
says something like here's a picture of the screen the the the like what you would see if you were
playing doom um and then maybe they even give you extra hints uh like you know a actual location
where the enemies are um so you don't have to do any image processing or anything and and you build the
ai on top of their api and they another thing is really cool is they have examples so you can
actually um i think one of them is like a deep neural network that can play these games and so
you can you can download this github project and you can train it on your computer um and then uh when it's done training you have this
like doom ai or this atari ai that's like pretty powerful so yeah this is this is super cool if
you're an ai enthusiast definitely check it out even if you're not uh they have you know step-by-step
installation instructions like if you just want to see an ai play one of these games um you can follow the
instructions without being an ai wizard or anything and you can have a something that actually works
it's pretty sweet i think it's interesting the people talk about ai development in games
but it's different writing the ai like you're talking about where you're simulating the player
and the interface is you know the screen and you have to do
image processing or maybe they give you something a little more and writing like in doom like the
bad guy ai and the bad guy ai you know they the programmers have the opportunity to expose
any variables from the world they want to to that ai to help it operate and you know could in effect
cheat and then even turn down the cheating for different different difficulties but as the ai you're talking about you don't have that level of access especially
not if it's not implemented by the game itself yeah right um yeah i i think actually the ai of
the enemies is is kind of interesting i mean if you think about it, like in Mario,
if the enemies had some clever AI,
that game would be so hard.
Like, I mean, all the turtles and the Goombas,
like they would just band together.
I mean, I guess some of them are trapped by the terrain,
but they would just band together
and just stack up or like fall on you
when you try and jump onto this pipe
and just kill you, you know?
And so that game only works
because all of the individual patterns of the enemies are very simple like if all the enemies
moved randomly it just like it'd be so hard and so it's it's kind of interesting um the whole ai
problem for you know the the game agents themselves is super interesting for like a different reason
but yeah i mean this is all about being able to to play the games and uh and uh that's like a a
different kind of problem but still kind of interesting in its own right i see a lot of
stuff for um games like real-time strategy and stuff about whether the ai can quote unquote
cheat because there's this notion like if you're in and stuff about whether the ai can quote unquote cheat because
there's this notion like if you're in civilization or whatever and the computer knows you're taking
a certain path they could kind of choose something that is strong against that path
and thereby creating a harder ai but in a way that if you played another human they wouldn't
be able to do the same thing or at least not with certainty and so you can kind of fake having a harder ai by just allowing the ai to cheat
yeah definitely and civilization is notorious for this but you know they also
didn't have many resources and you know i guess the 90s when civ one came out but even that is
still an interesting thing is to say that like understanding the game in a way that you can
even figure out with all the information known in the world how do you not just make some opponent
that will win because you could just like spawn an infinite number of enemies or something like
but that's not interesting but you know something that looks like it's behaving normally even though
it's has access to the world but what information from the world is it choosing to use and then still
making it fun like it isn't fun if it just like kills you instantly because it has infinite health
and you have you know normal health oh i see what you're saying um so you so you need to both be
difficult but like in a way that feels like a challenge and feels fun at the end of the day
and they have access to cheating by like
making resources that you can't have or cheating by having the world's information but
they still need to use it in a way that doesn't go overboard yeah you know what this reminds me
there's one game that does something like this and it's um it's like a knockoff of guitar hero
i think it's called like bit trip beat or it's Audio Surf or one of these games.
But basically, you can give it any MP3 you want and it will generate like a Guitar Hero kind of level for you.
And you can even specify the difficulty.
And so this is the kind of thing where, yeah, I mean, in this case, they have to sort of understand how the music relates to sort of these game patterns and then also be able to ramp up and down the difficulty.
Yeah, I think these things are super, super hard to build.
Yeah, I mean, and it's ultimately a game supposed to be fun.
So you don't just have to make it and make it work, but you have to make it enjoyable at the end of the day.
Yeah, right.
The next article I have here is learn docker by
building a microservice if you hang out on any sort of web forum or reddit or hacker news or
whatever you see docker all the time or at least i do yep and um i kind of never really got what
it was um now i'm beginning to understand it but i came across this tutorial and i thought it was really well done um and you know i was like coming there's lots of tutorials
and some of them are not very well done and but i appreciate people trying to make them
but i also appreciate when someone does a really good job of making something that is pretty cool
so this person shows you how to use docker and it's a tutorial about docker but they use a real world example of bringing up my sql database and node.js in a docker image or images i guess linking them together and then
using it to actually bring up a essentially a website a web server and i thought this was
really good and it's really pertinent because it's something that i think we're seeing a lot
more of docker get kind of um traction and there's other solutions but i
think they're once you understand one it's in my mind so far at least they all seem similar enough
and um this would be a great thing to learn if you're you know in school or applying for jobs
or even if you're in a job and trying to see hey is this something that can actually help solve
the problems at my company yeah i mean docker is definitely a hard thing to explain
um i guess i mean i'll try and do it oh you're gonna try okay here we go i'll try um so well
there's virtual machines which have been around for a while and that is where um you know you
see people running like windows inside of their mac or the vice versa or linux inside of their windows machine right and so what that does is it pretends like you have sort of an os inside of an os
uh or and so it actually when the virtual machine says you know i want to write to this part of this
disk um that command goes to you know your your machine engine, like let's say VirtualBox or something.
And VirtualBox translates that into a command on your host machine saying, oh, the person
said they want to write to this part of the disk, but on the host machine, it's actually
that part of that disk.
And so right over there.
And so it has to do this sort of translation.
From what I understand, so like, let's say you had a Windows machine and you had a Windows VM.
Then in that case, like you could make a lot of assumptions. Like, you know, you don't have to sort of translate everything. There's a lot of things that, like if you wanted to play a note,
a music note on the VM, and you know that everything is Windows, you would just pass that command to the host and just say, hey, host, you know, play a music note.
You wouldn't have to, like, do any translation.
And so I think Docker sort of takes advantage of this.
And correct me if I'm wrong, but I think you have to keep the same OS.
You can't run, like, a Mac Docker oncker on windows right it doesn't really work like that and so granted that you
want the same os docker gives you this whole environment that's self-contained but also very
fast and gives you raw access to like the gpu and things like that uh you did a good job describing
like emulators or at least like the os emulators like virtual box but
i think the way i view docker is a little differently so you can so there's a windows
version of docker and you can run linux vms in it and that's right but docker isn't really i don't
know at least to me the interesting part isn't about running the vm um and there's a whole bunch
of hard technology problems they're trying to solve but it's about this containerizing which
is about saying yes i'm going to start a vm but i want a way of describing what should be in that vm
so that it's repeatable so if you take an example like i want to i want to write a my sql database
so i'm just something that's going to use my sql so i just download one of these packages
install it and all of its dependencies on my machine. And I got MySQL running locally. And then I create my schema, I insert some data,
and then I'm doing my testing. But then now I need to share that work with my coworker,
then I need to tell them or remember how I did all of that and like get MySQL installed on their
computer as well. And then remember if i had to
like install any patches or anything weird um and so what docker kind of says at least in the in how
i use it this is that does many things but is allows you to kind of create a text description
saying i want to pull an ubuntu uh image down i want to in that ubuntu image run these commands to apt-get install these you know
services at this version then i want to start uh you know my sql service in that ubuntu thing or
maybe you can just get a pre-packaged my sql docker container uh then i want to link it with
a node.js container and so i'm running two vms as if they're running on two different machines
but then i explicitly but initially they're not really connected to anything because you don't want something bad happening so you have
to explicitly say here's how I want them to be talking to each other and then now as a developer
if I get that working on my machine I can give it to my co-worker and they can also like give them
the description and they can also have it bring up and do the same thing and then when ready to deploy
to you know infrastructure that can be run on a server. So the server can pull down that, that those
descriptions build the images and run those services in production, just like we were in
development. And it kind of is a way of having a containerized thing that describes all of that
manages the packages, manages the workflow and says how these things should be
built so that they're repeatable and deployable and you don't have to do this notion of dependence
keeping dependencies in sync across all your machines because you're kind of listing them all
together i see that makes sense uh so i probably butchered some of it as well um but it does that
by using a vm like you were indicating.
But I think like in the production ideas,
you want the host operating system
to be a very, very minimal thing
that's optimized just for running other VMs.
And there's, they call these like hypervisors
or other things.
And then each, you know, kind of image,
you want to be as minimal as possible
because you don't need a lot of stuff.
It's each container is supposed to kind of only do one thing. And that's why as this article insinuates,
it's really good for microservices, where instead of a monolithic application, you build, you know,
each service kind of individually, and then you they depend on each other, but they're not all
one thing. And that has a lot of opportunities. It has some downsides, too. And maybe we could
get into that at some point. But it is interesting approach and it does work for a lot of people yeah this is cool so i guess
i mean if you're running two docker images and let's say one of them is your mysql database and
that that mysql database blows up like there's some bug in mysql and it just gets out of control
then like at least the other docker image can just say oh the database is blowing up
let me tell like a 404 to the users or something instead of the whole machine blowing up
yep so um yeah oh sorry yes yeah i mean there's lots of reasons to do that but yeah i think
that is a good reason yeah cool so my new story is fizz buzz in tensor
flow this is uh this is a kind of a troll like a trollish uh story but it's pretty funny basically
um there's this pro there's this interview question called fizz buzz and uh the idea is
you print the numbers from one to a hundred um but the number is visible by 3, you print fizz.
If the number is visible by 5, you print buzz.
And if it's 15, you print fizz buzz.
So if it's none of those, then you print the number.
So, for example, it would be 1, 2, fizz, 4, buzz, so on and so forth, right? So this is like highly ridiculed as, you know,
like a prime example of what not to do in a programming interview.
Like what kind of questions not to ask.
And there's just so many reasons.
One, because so many other people have asked it. Two, because it doesn't really show kind of architectural skill or anything like that.
There's a ton of reasons.
And so this guy, Joel Gross, was in an interview.
I don't know if the article is real.
No, no, no, because he's using it to explain.
He's using it to explain TensorFlow.
Yeah, the article is not real.
There's no way on a whiteboard you would do this.
The article is not real, but it's funny to just put yourself into this space
and imagine this really happening.
So in the article, an interviewer asks him to do FizzBuzz.
And so what he does is he spins up tensorflow which he talked about in the past
sensorflow is a google created um you know tensor matrix library that has a lot of um you know
objective functions loss functions all sorts of like things for building machine learning
algorithms uh in already included.
And so he spins up TensorFlow and he builds a neural network to solve the fizzbuzz problem.
And the interviewer is just kind of, you know, like, what are you doing?
And he just, you know, just kind of goes through the whole fizzbuzz thing.
And then at the end he says, you know i didn't get the job
um you know thanks a lot machine learning it's just it's just really goofy and funny
if you want to have like a nice light-hearted read and learn how neural networks work and learn
tensorflow um check this out at the end he posts the code on github so so uh it's not all in vain
um check it out it's pretty good i think fizzbuzz
isn't a bad question i know it does have kind of a bad rap because a lot of people have used it but
i think in general just with interview questions it's difficult you need to know as an interviewer
like what you're trying to get out of the interview and i think a lot of people don't know
that well they do know they're trying to stroke their ego um but that's that's my cynical criticism of
it um but a lot of people don't know what they're trying to get out and i think fizzbuzz does work
for saying i'm looking for someone who i'm looking for an easy way to test if someone
knows basic coding skills it's not supposed to be algorithmically hard or architecturally hard
um and it does that now whether or not that's useful to the company that you're interviewing for tbd
and this person yes i agree i'm certain this is a joke that this did not actually happen that they
were trying to be facetious and saying that they could use a neural network to figure it out
but but also interesting because maybe for any such pattern producing algorithm in an interview
you could do this. Yeah, yeah.
I always wondered, you know, I used to do these programming contests,
and I wondered for some of the harder problems if teams picked,
like maybe not a neural network,
but if they picked like any of these sort of heuristic,
like any of these like loss function, objective-based approaches,
and then just submitted the problem, you know,
five times until they got the right answer,
like with different random seeds.
You could, I mean, the other thing is,
because a lot of those have requirements on the runtime,
but you could train for a very long time.
So you could, you know, train offline,
or even I've seen some solutions which they try to prevent,
but you build up a dictionary ahead of time.
So you spend a really long time with an inefficient algorithm
building up a dictionary. And then when you submit a really long time with an inefficient algorithm building up a dictionary and then when you submit it it basically knows
all of the answers already or at least oh yeah that's a very common that might be less common
now but uh yeah definitely when i was doing competitions that happened frequently so you
could in theory train the neural network very slowly for a very long time and then at runtime
it goes very fast where you don't know you don't know of a runtime algorithm that could run fast enough to answer their question yep yep
interesting i wonder how many would be solvable with that approach like if you went in solely
with that being your strategy and you were just committed to knowing how to train neural networks
that way really fast like how many of the questions would be capable of even being approached and then how many you could actually get good answers with yeah i mean to
answer it you have to know like how many of those problems are just a composition of functions
versus how many are real simulations like there are these questions like you know play a game of
tetris like and you have to actually drop the pieces and figure out what spaces are valid.
And anything that has some kind of simulation aspect to it,
you're not going to be able to do with a neural net.
But if it's like some of these more geometric problems,
where it's just like, you know, here's a bunch of angles,
and you have to find this type of angle,
then, yeah, some kind of neural net could probably do pretty well.
All right, time for book of the show.
Book of the show.
So I actually have a bunch of books.
What?
But here's the catch.
There's only covers.
So this is parody O'Reilly book covers.
So for people who don't know, there's a publisher called O'Reilly.
They publish a ton of different books,
everything from HTML website design
to game programming to Lua.
They have books on everything.
And they all have sort of this similar cover style
where there's usually some picture of some animal that's in this kind
of pencil charcoal sketch style um some kind of headline at the top and then some type of adjective
which never really makes sense but it's just kind of you know there and then a big title and so um
this guy made a bunch of parody o'reilly book covers and they're absolutely
hilarious um just just to give you guys uh some spoilers here one is a essential copying and
pasting from stack overflow very useful putting the candidate through the same junk you went
through useless whiteboard interviews yes useless whiteboard interview book um expert resume
driven development oh this is good okay well anyways these are all these these are funny
yeah i want to follow them all actually i'm thinking about getting a t-shirt with that
with one of these um i don't know it's bad i think it's that okay all right the whiteboard
interviews i think i i want a t-shirt of the whiteboard
interviews for when I
give interviews
I want to be wearing this shirt
I want to just have it at my
desk and put it on, give the interview
and then take it back off
have you read the twitter feed entitled
tech worker?
it's somebody who obviously lives in the bay area the san
francisco bay area and um works at one of the big tech companies so they have like kind of sarcastic
entitled reasons why things are bad at their company um like i'm upset today's menu at work
was all mexican i just got back yesterday from my via in puerto vallarta why does the new macbook pro why does why doesn't the new macbook pro come in gold
oh man that's awesome oh this is really good entitled tech worker yeah if i knew
the espresso machine was broken i would have asked my uber to stop at four barrel this is i mean if you're in the bear so this will make a lot more sense a lot
of these are specific to the san francisco area well if you watch uh the tv show then then yeah
you'll find these hilarious sometimes i don't even wait to agree on a linkedin endorsement
swapping scheme i just go out there and endorse people i don't even know
that's so i only joined your company last week but i think it's already gone downhill
my startup may have failed but my self-congratulatory blog post reached
number one on hacker news
oh man these are amazing okay i'll put a i'll add a link to these um in in the news whoever
writes these is so very in touch with the culture genius uh um that's awesome all right my book is a
uh fictional book hard magic by larry korea i don't know if that's how you say his last name
um but he i also had a recommendation from him before i talked about uh his book monster hunters international so this is another um it's
sort of similar like this is not a deep thoughtful book it's a kind of like really fun to read you
kind of feel like it's just a like junk food book but it's good i liked it it's set in the i guess
it'd be the 20s uh kind of like the mobster era
and like uh alternate reality like what happens if around that time frame like magic had been
discovered like you know how we have mixed scientific discoveries like you kind of discover
magic and people start kind of having magical abilities it sounds really stupid but if you
like stick with it and read it it actually is a fun read um but this author isn't
really for everyone because he does spend a lot of like weirdly a lot of time describing various
guns in the book like in in detail like oh this you know he's really into guns so every time
there's a gun it's not just the person grabbed a gun they grabbed a very specific kind of gun
um and so it's just interesting like that that's one of the things that he has
a lot of detail about and i don't i'm pretty sure it's not very accurate to the 19 actual 1920s um
but it is kind of interesting and it features like some of the work by nikola tesla and um
other people and so i i enjoyed it like i said it wasn't the most thoughtful book i ever read
or i mean i listened to it, but I did enjoy it.
So if you're out there for a light, fun kind of listen,
I would encourage you to check this out.
I was going to ask you if it was like a cerebral book.
No.
Because at first I didn't know which way you were going.
But yeah, so this is like lighthearted.
It's not a complete comedy.
Like I recommended, I think last time I recommended a book,
it was Red Shirts, which was like purely just comedic i'm still going through that one it's okay so that one's
like really comedic this one has like i don't think it's meant to be funny like there are funny
parts i guess but it's more just meant to be like uh you know you just watch like an action flick
it isn't supposed to make you wonder about your have an existential crisis i did not have an
existential crisis after
reading this book that's good you didn't feel like you were actually a magician trapped well
i did for a little bit but then i couldn't make the feather float with my wand and so
yeah that's right yeah the fireball didn't work and uh yeah it ended badly uh anyways
and like i said i listened to this and we've um audible has been
a sponsor of the show and so if you go to audibletrial.com slash programming throwdown
you can get a one month free trial which means you uh get a credit to have a book uh and then
you can cancel it when you're done and keep the book and so if you've never checked them out before
i have a long commute and i think you have a long commute now too, but I don't know commute. And so,
um, I am a paying customer of theirs and have been for a while. And I really enjoy, uh, listening to
the books. I don't enjoy the commute, but when I am like have an off day or like on a Saturday,
it's kind of like, Oh, I didn't get to listen to my book today. Um, and so that's kind of a bummer,
but check them out if you haven't already. And thank you a bunch of you already have. And so that's kind of a bummer. But check them out if you haven't already. And thank you. A bunch of you already have.
And so I'm really thankful for you guys doing that.
And if you got a book that you like and we haven't talked about, feel free to send us
a recommendation.
Somebody did.
Somebody wrote in and recommended some Brandon Sanderson books.
So we might talk about those in the future.
Cool.
Cool.
We're also on Patreon.
And thank you for everyone who's been telling your
friends someone randomly at work told me i had a friend of mine recommend this podcast to me
programming throwdown i downloaded it and started listening to it and my jaw dropped when i heard
your voice coming out of my earphones that's amazing so thank you guys for uh so at least
one person told a friend about it um and thank you guys for spreading least one person told a friend about it.
And thank you guys for spreading the word about Programming Throwdown and listening.
That's right.
This is not Fight Club.
You can tell all your friends about it. Well, at least it's not the first rule.
Yeah, that's right.
We would probably get beat up in a street fight with almost anyone.
All right.
Tool of the show.
Tool of the show. My tool of the show tool of the show my tool the show is amazing uh i have yet to use it like i'm actually so you only think it's a process
well but i mean other people have used it and i know it works and so once i'm done getting through
uh the process i'm gonna be really happy so uh for the um the podcast i was paying for an
ssl certificate and it's not that much money it's i think like 20 bucks a year or something like
that um but basically a variety of companies um got together and said um let's make this free and
and uh there's a there's actually a ton of companies here.
I'm not going to list all of them, but just Mozilla is one of them,
Electronic Frontier Foundation, so on and so forth.
And they got together and they made this thing called Let's Encrypt.
And the idea is it's just free SSL certificates that are meaningful, right?
They're not self-signed.
They're signed and they're a trusted source and all of that.
And so if you have a personal website, a business website, a small business website that's not encrypted,
or if you're paying for encryption and you don't want to, you can use this Let's Encrypt.
It's completely free and uh um there's not it's not
like a beta free kind of thing like the plan the whole point of it is to be free forever um
so it's it's amazing i mean it's it's it's uh and just to to recap if you don't know i'm sure
everyone knows this but just in case um you know When you go to a website, there's HTTP and there's HTTPS.
The S stands for secure.
And so what happens is under the hood, when you send some information to that website,
you encrypt the information and then the website decrypts it
with the help of this sort of third party to mediate all of this.
And so it's not something you can just do on the server by yourself.
You need to work with one of these groups to have a secure channel that is sort of authorized.
And so Let's Encrypt will let you do that.
So at this point now,
there's no reason not to have a secure website
unless you are on Blogger.
So our blog is on Blogger
and Blogger custom domains don't support HTTPS.
So ironically, our blog isn't on't on https and can't be which you know is okay because you're not
you know logging in on our blog or giving your credit card or anything like that
but in case someone comes back and says oh you know programmingthrow.com isn't the https
so it's it's we can't do it i'm looking into sort of how to fix that. But at the moment, we're a little bit stuck.
We're programmers.
We should write our own microservice blogging platform.
Yeah, well... No, no, I'm just kidding.
I looked into moving off Blogger.
And as you can imagine, we have...
This is episode 55.
So we have a lot of content, a lot of comments.
And moving all of that is not trivial.
Well, we heard about AI.
Just make a TensorFlow to do it for us.
Yeah, I need to contact Joel and have Joel give him a whiteboard interview.
All right, mine is an iOS-only game.
I'm sorry.
I did look in advance this time.
I'm prepared.
It is not available on Android, and it is not free, or it hasn't't been free at least that i've seen um and it's called war bits and this is an advanced
wars i won't say clone because that sounds like an accusation very very similar like game so if
you never played advanced wars i guess it was on game boy advance and maybe nintendo ds um
yep some one of the portable nintendo consoles yeah
i think there's one on 3ds as well okay it's a franchise and this i don't know exactly what you
call it but you have you know people and they are on squares you have military troops and it's you
attacking another set of bad guys there's just like a really fun, like a strategy game, but not like deeply strategic game.
And yeah, so these games are called SRPGs.
Oh.
It comes from strategy.
I think it's either strategy or squad.
I don't know what the S is.
But yeah, I mean, if you like Advance Wars, Final Fantasy Tactics, Fire Emblem, you know, Shining Force. If you like these games, look up SRPG in the app store and there's a decent collection. Oh, I never knew that's what they were called. So now I have these games look up srpg and in you know the app store and and there's there's a
decent collection oh i never knew that's what they were called so now i have something to look up this
is like final fantasy tactics as well but i feel like those games are different than this like
they're more serious and there isn't really a role playing to this i mean there is like a story but
i i don't know yeah i mean rpg, RPG just really means that there's upgrades.
I mean, RPG in this context really just means that there are decisions and they are permanent.
But I don't remember in Advance Wars there being any real permanent decisions.
Am I misremembering?
I thought that you could choose a unit.
It's okay.
Anyways, it doesn't matter.
Warbits is on iOS. If you're interested in that kind of game or you've never tried it before, you could choose a unit. It's okay. Anyways, it doesn't matter. War Bits is on iOS.
If you're interested in that kind of game
or you've never tried it before,
you can check it out.
There's been several others that also do it
but try to kind of do it differently.
And it just never kind of captured
the nostalgia of Advanced Wars.
So this one does a really good job
because it's basically...
I didn't say that.
You know, like all the same basic units with the same basic
traits and principles are there um and the story behind is a little wonky but you know as always
it's kind of laughable to see how these people try to come up with stories to justify what is
just a fun game yeah like advance wars the burn there's one called uh like burning ruin or
something like that um but yeah i mean
the whole premise of that was there's like a flower and if the petals all fell off the flower
like humanity's lost you're like okay come on guys yeah so i think the story in this one and
i haven't gotten all the way through it yet is instead of fighting real world wars people have
decided to fight simulations of real wars and so you're like a simulation general and okay yeah like the world
has gone pacifist but they still feel like things need to be resolved using i it was it's very
conflicted okay so you can check it out i'll check it out i love these type of games so i'm definitely
in all right um time to talk about the thing that is going to get us lots of hate mail. Yeah, I mean, we anticipate an incredible amount of hate mail.
One disclaimer is these are all things that either Patrick or I or both of us,
they're all IDEs that we have used.
There's a ton of IDEs that I'm sure we haven't used that. That could be great. But, you know, these are mostly one-on-one, some of the IDEs that we've experienced.
And we've gone through a lot.
We're not married to a particular IDE, either of us.
And so I think that that's nice because together we have pretty good coverage on almost all the popular IDEs.
So I actually don't know that we'll get a ton of flame when we're talking about editors
because I don't intend to state anything absolute.
Well, maybe a couple of things.
But instead, I want to talk a little bit
about like editor philosophy.
So I think one of the things that,
to be productive as a programmer,
the editor you choose should have like some common traits.
One is that there should be some level
of customization to it. That is that there should be some level of customization to it.
That is that things can be shifted into a way that you like it. And there's a balance here
where you'll hear people argue about, if I make it so customized that when I go to someone else's
computer, I can't get things done. And ultimately you spend most of the time programming at your
computer. So I feel like it's worth making it customized to you,
but maybe not so much crazy customization
that you're doing customization
just for customization sake.
And that's probably a hard balance to strike,
but don't go so far where you're spending more time
updating and tweaking stuff
than actually like doing your work.
Like that's probably too much.
Yeah, definitely.
I usually, you know, once maybe every year or so i just say okay i'm gonna take
some time to like improve my workflow and improve my editor and things like that but yeah you
shouldn't there shouldn't be something that you just do every week or every day that'd be and
some people do some people are like i will spend however much time necessary to create a way to shave off one extra keystroke in Vim or VI.
Okay, sure.
I mean, if that makes you happy, I'm not going to tell you you're wrong.
That's not the way I tend to operate.
Yeah.
The other thing I think when you're choosing an editor that you should think about is the searchability.
And I mean a couple of things by this, but just as the ability to find things in the code,
especially when you're in code that you don't work in a lot or is new to you and i think
this is really important and this will separate out in my opinion um what makes some things not
so good choices for people um and the other thing i mean about searchability is specifically and i
and i thought of this the other day when i was someone was talking about how they switched to
using vi because they thought it was so much better.
And in reality, like I kind of asked them a couple of questions and it seemed like they
were switching more to VI because they wanted to be able to say that they use VI, which
OK, that's fine.
But they weren't very efficient in it and they weren't pursuing a way to be efficient.
And the thing I kind of use as at least for me, one measure of how efficient you're being
in your code is how long
it takes when you're looking at a piece of code you've never looked at before and you come to a
usage of a class and you don't know what that class does and some meth or a method it doesn't
matter some methods being called a function how long does it take you to go from that function
in that file to where that function is defined. So what learning about what that function does,
reading about the comments, all of that stuff. And I think you want to work to minimize that.
So in some cases, your tool may or may not provide that out of the box. So some of the things we're
going to talk about, like the IDEs, and we're going to talk about integrated here means in a
minute, but they let you do that very easily easily like it might be a right click and a
go to definition or an you know a button like an f3 that when you're on top of something it takes
you to the place in the code so it has understanding about your code but that isn't to say you have to
use one of the integrated things you could there are ways to do this in vi and maybe we can talk
about that like c tags or whatever but for me the way i'll if you not that i'll i try not to be a mean person but
if you come to me and tell me like oh my solution for editor is better because vi is really awesome
and i'm gonna want to know like oh how do you have it set up and i've seen people with incredible
um stacks of stuff that their tools and configuration and um intuitiveness of the
code where they really can bounce back and
forth. And I've seen other people that when you ask them to handle this problem I've just described,
you know, they go to another window, they open the shell, they grep through a bunch of files,
and they're trying to like manually inspect each line looking for which one is most likely to be
the one where it's defined. And to me, that's just, it takes you out of the one where it's defined and to me that's just it takes you
out of the context it's too slow it doesn't work for me and and i think if you are doing that you
should either seek to find a way to improve that or switch to another solution that might be better
for you don't just do something because it's wearing the hair shirt is what i've heard it
called for some programming languages where people used to wear a shirt made out of some animal hair
that is like really itchy to remind them about like the fact that they're going through this
punishment um and so some people do that like i'm a good programmer because i do things the hard way
but uh i don't know yeah that's not that's that's never true well i mean. That's not for me.
Yeah, I agree.
I think that you have to be able to, you know, I mean, editors are made to edit files, but code is really not about files.
It's really about this web of functions.
And, like, how those functions are mapped to files, like, it depends on the programming language, but it could even be just arbitrary.
And so like an editor that, you know,
if you have Vim or Emacs or, you know, one of these editors,
and you only can look at one file at a time,
then you're not really doing it right.
Yeah, and yeah, there's many ways to solve this problem. And i think asserting that your way is the best way
is also just not cool you're not helping um i think different people think differently some
people think it's great to sit in front of a keyboard or to say that i can use a computer
from 40 years ago that doesn't have the cursor key okay great sure whatever but the chance of
me running across that in like my day-to-day is just really low and i think it's also very good
to try stuff occasionally to see if you like something better and to see if hey maybe i do
fit in with the way this thing works and instead of all editors needing to be usable by everyone
i think some of them have realized they just should be used by some people and that they'll
just cater to those people and i think that's perfectly fine and i agree jason we are calling
this editor wars but really talking about editing in the context of not writing a novel but like editing code so working in a code base you
know a git repository like those kinds of things all together and i think that there are some
solutions which you'll hear ide integrated development environment or what i'll call like
a stack or roll your own where an integrated development environment you typically have an
editor where you can edit code some notion of a project explorer or file explorer, where you can
kind of go to the different files that you have, or classes in your code, some way to navigate,
and then often has a way to invoke the compiler, or even the compilers kind of built into the IDE.
And all of that is done kind of within one executable that you launched once and kind of
had that as a default configuration.
A roll your own would be more something,
we'll talk about in a minute,
other solutions where it primarily is just
editing of a single file,
but then there may be ways for you to choose plugins
or other applications or use, you know,
something within Windows or Linux
to kind of customize your window
to have other features as well. And then, to kind of customize your window to have other
features as well. And then you've kind of created a set of linking and plugins and,
or found them on the internet ways and shortcuts to go between the different programs that are
together helping you do your code programming, debugging, compiling loop, pushing all of that
stuff. Yep, I think those are kind of the two approaches that i've
seen yeah definitely um so just to knock a couple of things out uh the simplest like ide is just
a text editor i mean a pure text editor so this is like pico or nano on unix or just notepad or
wordpad on on windows and these things don't
really know anything about code they don't do any highlighting or anything you can only look at one
file at a time but um if you're really kind of desperate like there's um there's you know notepad
on every windows machine you're guaranteed it's going to be there um and uh you know you can you
can write anything in them but
we don't record yeah i mean i think the thing that this fails is there isn't really customization
options for the most part like you can't say that's right it won't do things like when i go
to the next line you know automatically indent that line based on what i type like if i typed
a brace it needs to indent over if i didn't it needs to stay at the same spot. You know, it doesn't necessarily understand
like tab and shift tab for like
getting rid of indentation.
It just doesn't have those notions.
So it isn't efficient for editing code
and isn't really customizable.
So as Jason said, last resort,
you should pretty much, if you're using these,
you should really look for something else.
Yep.
And then there's what I call like IDE as a platform and so this is where as patrick mentioned
you're going to have to do like a pretty decent amount of heavy lifting to get this where you want
um and so this is you know where the emacs the vi and the vim um editors belong um and and uh
you know you could argue sublime and adam are are here as well but we'll talk about them later
because they're more sort of futuristic. So I don't think these are ideas of platform I would
refer to these more as like keyboard focused so both Emacs and VI for me that the big thing they
share in common is saying that you should be able to do everything from your keyboard without having to lift up and go to the mouse um well so so i've i've only ever well i take it back i've used cursors curses emacs before
but uh i'm definitely like a heavy mouse user and i still use emacs yeah i think the big thing about
this is um it supports kind of everything like for example when typescript came out um there was syntax
highlighting you know when the language came out there was a emacs module like the developers of
typescript released an emacs module and so um i guess typescript is a microsoft thing so visual
studio would work but but uh you know the thing about emacs is that it can edit almost any file and and
and has syntax highlighting for almost every language um and because it's so extensible and
also because the bare bones emacs is so poor oh you are going to start getting lame well no i mean
i love emacs but i'll be the first person to say that default Emacs kind of makes my eyes hurt.
But there's so many modules and so much support
that you can do everything in Emacs well.
I don't believe the same is true for outside of Emacs and Vim.
If you want to do Eclipse, but the project is a node.js pro well
eclipse actually is getting there um but you know like let's take like intellij or something and the
project is node.js you're kind of hosed um and so i feel as if like as a developer you have to make
one of two choices you either have to say i'm going to do almost everything in emacs um or you have to you know
generate sort of this ensemble of of editors like maybe eclipse for most things but then if you have
c++ you have to use you know uh like visual studio or something but i mean i think a hybrid approach
is actually reasonable and you can't use it somewhat and a lot of people and a lot of people a lot of people don't i think it's i'm pretty sure
it's true for both but in eclipse you can have it support both emacs and vi style uh text editing
and so you can drop it into a so it handles normal behavior by default but then there's a way to
basically tell it to emulate as if you were in an emacs or vi window for just your text editing place
and i feel actually we should mention that.
So people might not be familiar with this,
but if you're editing a doc in Microsoft Word or something,
you would select a block of text with the mouse
and then you'd click the B to make it bold.
And there's keyboard shortcuts like Control-B
and things like that.
But it're designed,
it's designed around the mouse. Like using Microsoft Word without a mouse would be super
painful. But these editors like Emacs and Vim, as Patrick said, they're designed to work without a
mouse. And so if you want to go to, you know, line 1000 in Emacs, you would do escape GG 1000,
and that sounds kind of painful to have to remember that
when you could just scroll with the mouse wheel,
but it actually saves a pretty decent amount of time,
and some of the keyboard strokes are actually quite worth it to kind of memorize.
So the catch with that is if you're used to, you know, escape GG,
and that's your muscle memory has just attuned to that,
then you go to Eclipse, you're just going to end up typing Gs all over the place.
Like this happened to me in the beginning.
Like I'd just be editing a file, and all of a sudden I'd type two Gs,
and it's because I wanted to go to a line.
And so,
so you can actually customize most editors that we'll talk about, let you support, um, Emacs keys.
I think that's the biggest difference about like Emacs and VI is they allow you, and I'm not going to get into which is better or worse. I tend to use VI, I just never gotten into Emacs. So
when I use VI or use one of these, I use i use vi um but i think that they allow you to have
different ways of operating so like jason said you can go to a specific line when i used eclipse
initially like i just never had a desire to go to a specific line that wasn't the way i operated
um because it doesn't really support it natively or you know i was reading some interesting stuff
about vi where people were saying you know one of the good things about not using the cursor keys and forcing you to using hjkl for cursor
navigation um is that it gets you into a different way of thinking and then it allows you to for
instance start getting used to as you're saying like going to relative line numbers or going to
relative places within your code and so your navigation becomes more intuitive about jumping
whole lines instead of you know
single lines at a time or or whatever jumping sets of lines or repeating actions a number of
time instead of manually doing it every time so reducing the number of keystrokes needed
and emacs and vi are very powerful both out of the box and with the level of customization of
everything that they allow you to do in helping you reduce your keystroke count and some of that requires you shifting your mindset for good or bad
yeah it definitely is a learning curve no doubt um but i feel this way about you know coding and
about email is you know i spend hours every day doing doing either of those and so if i could shave off 10 it's significant yeah
i you know um it's hard it depends on me sometimes i'm cranking out code and i'd agree with you but
there's a lot of other times where the limiting factor for me isn't how fast my fingers can push
the code into the editor right like i'm limited i tend to and it's just the nature of the work i do
i tend to need to actually think about the stuff i'm writing and tend to and it's just the nature of the work i do i tend to need to
actually think about the stuff i'm writing and so it takes a little longer for each line to come
out for me and so in that regime the editor doesn't get in my way not normally right yeah
no definitely i don't think typing faster is really helping anybody but no it does because
there's sometimes you just really want to bang out like boilerplate code or whatever and you just type type type type you know as fast as you can go
oh yeah emacs has this like uh boilerplate thing where you can hit f3 we're not going to play this
game because you can say emacs or vi has insert like just literally solution to any problem
you want to make your coffee from within emacs great there's a plugin for that
sure yeah i got it but um we'll do that the whole time yeah that's a fair point um anyway so so
there's there's emacs vi and then um when java came out the thing about java is um java had a
gui like had ui libraries that shipped with the language so in other words anyone who is
programming in java could make like a window on the screen and draw like menus and things like
that which had never really been done before it used to be you know sure you have c++ but you
know you need to download a bunch of libraries i don't know that it had
never been done before because i think some of the other more obscure languages had done it before
but it was kind of like oh yeah there's like first widespread tk and widespread yeah sure that's fair
that's fair so um so what happened is a lot of people at that time there's sort of this explosion
of developer visual developer tools and then's are obviously one of those and so
there's netbeans eclipse and intellij which are all java-based ide's and i you know i used to
use netbeans there was a time where eclipse was very slow and crashed all the time, like early days of Eclipse.
But as soon as Eclipse became stable, I switched to Eclipse.
And I've never used IntelliJ.
I haven't.
I was going to say that JetBrains is like the people, and we talked about them a while ago,
having to kerfuffle with changing how they were charging people.
I've just never used it i know a lot of people though who really say it is it doesn't matter how much money you want to charge like
this is totally worth it um but no i've mostly used eclipse for for my java yeah i've also used
eclipse and eclipse actually is starting to get emacs status where um if you're a programming language inventor and you don't support eclipse
through some plugin or something you you um are kind of doing yourself a disservice and so so
you're starting to see a lot more support now um for you know everything from you know typescript
to groovy to you know scala um they just are providing these sort of uh it's actually cool
in scala you can actually click on a button in the website that launches something in eclipse
that installs the scala plugin like i don't know exactly what's good yeah it does sound like a
security hole doesn't it i don't know exactly what's going on there but um it's basically like
a one-click thing from the scala website which is pretty cool um i don't know exactly what's going on there but um it's basically like a one click thing
from the scala website which is pretty cool um i don't know i'm just i'm just harassing you same
as when you go from itunes yeah so um so it's legit but but the uh uh so yeah i'm actually
starting to use eclipse more and i might um you know completely switch from emacs to eclipse
because eclipse is that was my big fear
with all of these is that you know if it didn't support a language i would have to use emacs
anyways and but now eclipse is getting to the point where it supports and it is true that like
you should never believe you're going to just stay in a single application i mean even in eclipse you
might have to drop into something else to manage your project i mean you can open the project file but there may be a better way of managing your project or handling
git like for instance a lot there are git plugins for eclipse but i never use them i always just
drop back to the command line to do it that's just because how i wanted to do it um and so i think a
hybrid approach is still reasonable um for all of these where you you know still need some sort of
stack or roll your
own whatever you call it the set of tools you're going to use but the other thing is so far i think
all the ones we've talked about have been cross-platform except for like notepad which is
only on windows um but emacs vi netbeans eclipse intellij or i know at least eclipse and intellij
i think are cross-platform so osx linux windows yep yeah okay that means as well but all of these will run on
you know kind of any platform you are but i'll i will say one of the caveats is things like vi and
emacs you it takes a little longer when you're on like windows uh and osx isn't too bad with like
something like homebrew or i guess it used to be mac ports was the way you used to do it but
getting the normal linux tools. But they kind of assume,
and people, if you look for help in VIR emacs,
are going to kind of assume you're on a OSX or Linux system.
And they're going to suggest you to use tools
that are specific to those systems.
And then whether or not they're available on Windows
just depends.
Yeah, that's right.
So yeah, there's a section, i made a section called corporate ids and so
these are not cross platform yeah that's right these are your you know visual studio and your
xcode um i've used xcode a decent amount um xcode's okay um i dislike xcode but visual studio
the last time I used it,
had gotten a lot better than when I had first used it,
and I've heard it's gotten even better,
so I feel comfortable saying Visual Studio's probably pretty good now.
Yeah, I mean, Xcode fails the, you know,
I want it to support many things test.
You know, in other words, like, if I'm in Xcode...
You're making an OSX application or an iOS
or something within the Apple ecosystem.
Sure, sure.
But even that notwithstanding, if I'm doing that, you know, I'm writing this application and I write a JSON file.
Now I want to open that JSON file in something that feels good, where it actually does folding of the JSON structure and things like that.
I'm pretty sure Xcode will just open it in a text file.
And I mean, I'm not 100% sure,
but I'm like about JSON specifically,
but I've had this issue with both of these,
Visual Studio and Xcode,
where there's going to be some file it doesn't understand.
And because the plugin support isn't there, it's going to be you know some file it doesn't understand and because the plugin support isn't
there it's going to be just a pure text file and i'm going to have to switch to eclipse or emacs
or one of these other things um you know if i want it's really something going to understand
the file yeah also i think some of these have different levels of integration like visual studio
is mostly geared towards its own way of describing a project and Xcode similarly, you need to have an Xcode description of the project,
at least as far as I know.
But things like Eclipse too,
depending on what project management your team is using,
it has support for most of the big ones,
but it's not as bad because it isn't assuming
that it's a very specific project description.
Yeah, I mean, if you're doing your development correctly in in Eclipse you should be able to just throw away the project file and it should
just be able to just be regenerated so if you're using like maven gradle CMake
or any of these systems you can just auto generate the Eclipse kind of
project whenever but you're right for the other ones i mean cmake can technically do xcode
and visual studio but um it's not as good like you'll typically have to make changes to the
project file so there are some new editors that are making inroads for people liking the first
one is sublime which is written as far as i know by like a single guy and it came out a few years
ago i guess we should have looked it up but um it's a free to try and
it gives you a warning um if you don't buy it so you're supposed to buy it after some amount of
time um and the nice thing about sublime is it has a pretty good ecosystem around it for plugins
and understanding code natively um but it doesn't try to integrate really as far as i can tell with
any sort of like project understanding so you can point out a folder and it'll see a folder structure on disk,
but doesn't try to kind of integrate with your project structure
and allow you to like add new files to your project,
you know, kind of in an intuitive way.
But it has a nice like overview on the right side
where it shows like your code, but like shrunken down
because it turns out you can recognize what the code structure,
where you are in the file just just by having looked at it.
I didn't really think about it before,
but when I saw that and I used it, I was like, oh, that's really cool.
Yeah, yeah, that makes sense.
One sad thing about Sublime, I just looked it up,
it's not open source.
It's paid and it's written by, yeah, it's like a company, right?
So it's not open source.
Yeah, I mean mean that's actually
the exception uh well maybe we should have put it in the corporate ids but but all of the java
ones we mentioned eclipse and that means intellij emacs vim are all open source and uh um you know
i mean are you really going to be hacking on eclipse on emacs probably not but the fact that
it's open source means that if
you know some new language takes over and it just becomes super popular like it's kind of happening
now with um um with react where it's this uh jsx file that has like html and stuff embedded in it
like if something like that happens and really starts to take off and you join
a company they said okay you have to write these jsx files um you know sublime without sublime
no but the parts of it that do that are where you can write them or get modules that are open source
so it has the right hooks in place it would be like if you wanted to yeah have it have i don't
know some sort of new feature that wasn't there i i like some new yeah or it
goes or it goes deprecated and he does and the person doesn't release it open source and then
like you can't maintain it but sublime came up because it was known for being really really fast
for a graphical um editor yeah right it has some pretty cool features i like the little
like this i was trying to describe i was doing a poor poor job of it yeah yeah it some pretty cool features. I like the little... Yeah, that's what I was trying to describe. I was doing a poor job of it. Yeah.
Yeah, it's pretty cool.
Another new kid on the block is Atom.
I've actually been using Atom a lot lately.
It's pretty awesome.
So a couple of awesome things about Atom.
One is it works over SSH.
So you can actually point it at a SSH repository, and you can edit files over SSH,
and it just makes that experience completely painless.
So it also has some kind of searching,
which also works for the SSH.
I don't know what sort of black magic is going on there,
but the remote development is pretty amazing.
It's also known for, I guess it's all written in javascript and so you
can kind of see it's basically rendering we talked about this before i think a little it's an
it's not called embedded but it's a like native javascript app so like it hooks in natively but
it's all just running kind of javascript so you can see how it's choosing to do the rendering and
then like alter it if you're so inclined so So it's saying it runs on Electron,
which is one of the frameworks for building apps
using JavaScript and web technologies.
And it's made by the same people who make GitHub.
That's right, yeah.
And all of the sort of visual features of the editor
are just HTML and CSS.
So a ton of people have made themes like i like this
uh and i'm totally forgetting the name but i have a certain theme in emacs that i really like
and uh someone basically just cloned uh that yeah i should say almost all of these have themes even
vi i don't know about emacs because i don't use it, but even in VI, you can find essentially themes for ways to kind of have it have a color scheme
or palette that you like.
But I do like the one that I guess initially,
the first one I really encountered,
it was in Sublime,
that default color scheme that Sublime chose in dark.
I really liked that.
Yep, that's actually similar.
I use Clarity, the Clarity color theme theme in emacs and it's also a dark
theme in general i mean you can do whatever you want but i feel like dark themes are just way
better on the eyes um you know so to just to explain dark theme is where is where the the
background is or dark text is you know a bright color as opposed to what you're used to you know when
you read things on the web or something like that so now some languages are built in together with
their editors so this would be like matlab when you open up matlab you come right to like
the console and you can start doing matlab operations or they have a file explorer built
in to like operate on matlab projects it's not to say you can't write those in another editor but it
they kind of ship their own and it isn't really meant to support things that aren't about matlab
yeah right yep um there's r studio for r it's very similar um there's ipython notebook same
kind of so i think more like spider would be like a python specific editor we should talk about ipython another time it's
called something else now ipython notebook oh yeah yeah jupiter which we should talk about because
i've actually come across several instances of that now it's catching on a lot and i i really
like this approach but i think more like spider or something which is and there are others that's
a good point but so the point the the overall point here is when you're language specific
then you can do some unique things like for example in matlab um there's a section of the
editor where you can see all of the global variables and that only makes sense because
you're writing in matlab like i mean they wouldn't be able to do that for every language well they
it would just be you wouldn't typically find it because it'd be really hard to support yeah like i don't even know what that would mean i mean because like
if you have python and you had like a python console and you were you had variables you
could have something tracking the current variables in scope yeah yeah and so so there
is that there's a there's a qt ipython thing which is kind of like that but again
that's like the editor
is piped. Right but it would be harder to do that for like
C++ like it would only make
sense if you're currently debugging an application
or Java
Yeah exactly and so
that's like one example but there's other things where
like you know the editor can provide
something that only works
because it's running MATLAB.
There are also lots of language-specific ones
for the Lisp and functional languages as well.
But I don't use them routinely enough
to be up on what the best ways of using them are.
So anytime you have the interactive prompt,
things like Python, MATLAB, a lot of the lisps um have this
closure has it um where you have it's you know a command prompt and you're typing stuff in and you
can develop that way um you can do some interesting stuff with language specific features versus
something that's compiled and run like java or c++ those features don't make a lot of sense for
yeah right yep um so there's some editors that we've used in the past are no longer with us
you know are dead yeah um so code blocks is one um code blocks was really cool before uh cmake
and these other build systems came out.
The thing about CodeBlocks was you had this CodeBlocks project,
and under the hood, they would sort of figure out what to do
if you're on Windows, if you're on Linux, if you're on Mac.
And so you could just, like, I could take this CodeBlocks project
with the source files and everything and copy it to someone who's running Windows,
and they could just install it with CodeBlocks,
and it would build a Windows program instead of a Mac program.
That was super cool, but the cool part of that was actually the cross-platform Makefile system,
not the editor. The editor was not that great.
And so once CMake came came out it kind of torpedoed
code blocks um another one is borland builder i actually never used this other than in school
i only used this when they were teaching c++ did you ever use um i think very very limited
like once or twice because it was like on a computer i used and i just wanted to try it out
okay yeah so when we were learning c++ uh we learned on borland builder and it was like on a computer i used and i just wanted to try it out okay yeah so when we
were learning c++ uh we learned on on borland builder and it was it was you know uh it was
it was terrible but it it uh died a painful death and the other one is free basic i don't know uh
what was your first language c patrick yeah really i mean i did some stuff in basic but
like i kind of put like you know some stuff in basic but like a kind of like you know
more like following examples and like making kind of play things a little bit in basic q basic oh
yeah the first one i like really like learned and understood from like a language perspective with c
okay i'm in the same way as you then so so actually for me it was c plus plus but but yeah so
so basic was just kind of one that you know I just made like little dummy apps that I copied out of a book.
And so I used Free Basic.
But I mean, I'm not saying Free Basic is,
like none of these are actually dead.
You could probably get Borland Builder.
And Codeblocks and Free Basic are still around,
but they're just kind of dead to us.
Actually, I had this book.
It was like a choose your own adventure book um but to know what page
to go next you have to enter in this free basic program on your computer and then run it and it
would tell you the answer it was so cool like i mean but you should just be able to do it in your
head right or was it like so complicated that you couldn't no it was it was like a recursive
function you couldn't yeah yeah but like uh you know the fact like you would type this in
and then you'd hit go and it would i saw like python the hard way that sounds like basic the
insane way yeah it was basically insane way um but yeah i mean that was that was pretty cool i
wish they kind of did more like that where they integrated.
I mean, now as adults, it's not interesting.
But for kids, I think it would be great.
So you were saying that you did TypeScript in Eclipse.
What else do you use when you write JavaScript?
I don't write much JavaScript, so I don't really know.
Oh, well, I've never done TypeScript in Eclipse.
I know that there's a plug-in now.
But all my JavaScript I've done using Emacs.
I didn't know if there was a preferred
way. I assume something like Atom is really
tailored to that because they flaunt
that feature.
Yeah, maybe.
If you have a good...
Write us in.
If you write JavaScript day-to-day,
tell us what you're using.
Yeah, or anything. If you use JavaScript day-to-day, tell us what you're using. Yeah, or anything.
If you use any editor we haven't mentioned,
post on Facebook,
post on the blog,
post on G+,
and things like that.
Let us know.
If there's something really cool,
we'll do a follow-up on the show.
Yeah, we'll make a 12-minute show
sponsored by someone else.
Or sponsored is the wrong word featuring some other guests sponsored by you
the patreon i don't know um so thanks everyone for listening our viewership continues to go up
um we're we have some more interviews kind of scheduled but i think we're going to try to
cut them down a little and and probably go to like uh something a little less frequent because
we enjoy talking to you guys.
And I realized like we've,
it's been,
I think we had two episodes in a row that were interviews and I really had
like a buildup of like tools of the show and books I wanted to share.
So we're going to probably try to get,
you know,
hearing the normal flow of the episode a little more frequently.
Yeah,
totally.
Totally.
I mean,
there's so many more language i'm dying to learn julia
that's oh my one i've been working on is elm oh i've never heard of elm okay so we definitely
have two two really cool shows all right till next time see you later the intro music is axo
by biner pilot programming throwdown is distributed under a Creative Commons Attribution Sharealike
2.0 license.
You're free to share, copy, distribute, transmit the work, to remix, adapt the work, but you
must provide attribution to Patrick and I and sharealike in kind.