Programming Throwdown - Editor Wars

Episode Date: June 24, 2016

This 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)
Starting point is 00:00:00 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,
Starting point is 00:01:02 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
Starting point is 00:01:40 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
Starting point is 00:02:36 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
Starting point is 00:03:14 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
Starting point is 00:04:03 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
Starting point is 00:04:25 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.
Starting point is 00:04:59 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
Starting point is 00:05:37 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
Starting point is 00:06:14 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
Starting point is 00:07:02 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
Starting point is 00:07:52 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
Starting point is 00:08:37 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.
Starting point is 00:09:34 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
Starting point is 00:09:58 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.
Starting point is 00:10:35 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
Starting point is 00:11:11 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
Starting point is 00:12:06 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
Starting point is 00:12:49 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,
Starting point is 00:13:32 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
Starting point is 00:13:52 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
Starting point is 00:14:34 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
Starting point is 00:15:18 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
Starting point is 00:16:00 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.
Starting point is 00:16:44 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
Starting point is 00:17:37 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
Starting point is 00:18:19 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.
Starting point is 00:19:11 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
Starting point is 00:19:55 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
Starting point is 00:20:38 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
Starting point is 00:21:26 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
Starting point is 00:22:10 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,
Starting point is 00:22:48 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.
Starting point is 00:23:04 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
Starting point is 00:23:46 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.
Starting point is 00:24:34 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.
Starting point is 00:25:18 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.
Starting point is 00:25:43 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
Starting point is 00:26:25 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
Starting point is 00:27:06 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.
Starting point is 00:27:45 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.
Starting point is 00:28:08 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
Starting point is 00:28:27 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
Starting point is 00:29:16 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.
Starting point is 00:29:46 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.
Starting point is 00:30:06 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
Starting point is 00:30:42 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
Starting point is 00:31:27 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?
Starting point is 00:31:42 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
Starting point is 00:32:41 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
Starting point is 00:33:31 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
Starting point is 00:34:11 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,
Starting point is 00:34:50 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
Starting point is 00:35:09 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
Starting point is 00:35:46 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.
Starting point is 00:36:26 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.
Starting point is 00:36:41 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.
Starting point is 00:37:13 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
Starting point is 00:37:40 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?
Starting point is 00:38:24 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.
Starting point is 00:39:08 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,
Starting point is 00:39:47 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.
Starting point is 00:40:25 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.
Starting point is 00:40:46 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
Starting point is 00:41:10 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.
Starting point is 00:41:50 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.
Starting point is 00:42:26 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
Starting point is 00:42:47 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...
Starting point is 00:42:59 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
Starting point is 00:43:34 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.
Starting point is 00:44:30 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.
Starting point is 00:44:55 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
Starting point is 00:45:21 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.
Starting point is 00:45:39 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.
Starting point is 00:46:12 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
Starting point is 00:46:43 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
Starting point is 00:47:10 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
Starting point is 00:47:50 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,
Starting point is 00:48:31 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
Starting point is 00:49:09 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,
Starting point is 00:49:57 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
Starting point is 00:50:29 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
Starting point is 00:51:09 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,
Starting point is 00:51:34 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
Starting point is 00:52:01 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
Starting point is 00:52:46 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
Starting point is 00:53:13 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
Starting point is 00:53:42 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
Starting point is 00:54:39 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
Starting point is 00:55:26 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
Starting point is 00:56:18 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.
Starting point is 00:56:44 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.
Starting point is 00:57:25 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.
Starting point is 00:57:56 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
Starting point is 00:58:38 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
Starting point is 00:59:27 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
Starting point is 01:00:08 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
Starting point is 01:01:02 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.
Starting point is 01:01:53 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
Starting point is 01:02:33 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 point is 01:03:17 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
Starting point is 01:03:59 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
Starting point is 01:04:37 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.
Starting point is 01:05:02 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.
Starting point is 01:05:33 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.
Starting point is 01:06:05 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
Starting point is 01:06:30 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
Starting point is 01:06:57 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
Starting point is 01:07:40 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.
Starting point is 01:08:14 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,
Starting point is 01:08:37 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
Starting point is 01:09:05 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
Starting point is 01:09:51 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.
Starting point is 01:10:19 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
Starting point is 01:10:46 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.
Starting point is 01:11:17 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,
Starting point is 01:11:53 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
Starting point is 01:12:19 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
Starting point is 01:13:06 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
Starting point is 01:13:48 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
Starting point is 01:14:15 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
Starting point is 01:14:33 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
Starting point is 01:15:23 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.
Starting point is 01:15:53 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
Starting point is 01:16:31 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.
Starting point is 01:17:09 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
Starting point is 01:17:35 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.
Starting point is 01:18:12 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
Starting point is 01:18:32 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.
Starting point is 01:18:46 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.
Starting point is 01:19:02 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,
Starting point is 01:19:26 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.
Starting point is 01:19:43 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
Starting point is 01:20:12 must provide attribution to Patrick and I and sharealike in kind.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.