Programming Throwdown - Technical Arguments

Episode Date: July 1, 2018

Sunday is a non-traditional day for a new episode and this is definitely a non-traditional episode! Today we are talking about Technical Arguments. We cover the most common arguments/debates ...you will have on the job as a software engineer and how to make the best arguments to reach the best decisions with the least amount of friction. Patrick and I tried not to inject our own opinions, but it's hard not to add our two cents (yes, spaces really are better). This episode is the first of a potential new genre of show, where we talk about non-technical facets of being a software engineer. Listen to this episode and report back on whether we should do more shows like this one! If you want us to stick to our existing formats (technical topic and interview) let us know that too! Show Notes: https://www.programmingthrowdown.com/2018/07/episode-79-technical-arguments.html ★ Support this podcast on Patreon ★

Transcript
Discussion (0)
Starting point is 00:00:00 programming throwdown episode 79 technical arguments take it away jason hey everybody so this is going to be an interesting episode. You know, we do every episode in one take, and this is going to be no exception. But this is going to have, it's going to be a pretty wild one. So, you know, usually we're covering a language, we're interviewing somebody, and, you know, we've talked to them beforehand. So we kind of know, you know, they're a subject matter in X and we know we know X pretty well This is gonna be something pretty different. We're gonna talk about arguing You know not in general although that might come up like more like I guess philosophical stuff But but really about arguing at work. We've both been in tech for a while Seen a lot of the canonical arguments. We'll kind of go through a lot of them
Starting point is 00:01:04 But I want to talk about blockchain. I actually took the time to really understand how blockchain works. So I'll spend a couple of minutes on that, like the actual technology. And Patrick, you can kind of fact check me on this. But basically, you know, when we did the blockchain episode with Amy Wan a while back, I had just started learning about blockchain. And one of the things I asked was sort of how do you keep somebody from just saying, oh, everyone gave me a million dollars, right? And what I learned is under the hood, there's this thing called basically a hash list. I think it's also called a Merkle tree or whatever, but the important takeaway is, you know, in this chain of events, every chain has the hash of the block before it.
Starting point is 00:01:56 And so what that means is, you know, you take that, let's say you're at block n and you have to make block n plus one. Well, block n plus one will have a hash of block n in it as part of the block. And so, but then if you think about it, it becomes this sort of recursive thing because block n has a hash of n minus one and n minus one has a hash of n minus two, so on and so on so on so forth so let's say you decide to change block you know two and give yourself a million dollars right for you to do that you have to change all the blocks afterwards right like you have to change everything because as soon as you change something um you know then the hash of the thing after that is different and that hash is part of the next hash and so it just it ends up being this huge thing
Starting point is 00:02:45 that you have to change um and and and doing that change like adding a block is is hard right i mean i won't go into a lot of details but it's something that will take your computer a long time and so you know people are constantly adding these blocks the change getting longer and longer there's a ton of machines out there, and basically you just can't really keep up and you can't just make a change in the middle without progressing all the way forward to the present. And you can't really catch up to the present by yourself. So for this reason, this is sort of how the system kind of heals itself. If I go and even if I can, there's a whole bunch of things around how to mine go and even if I can,
Starting point is 00:03:27 there's a whole bunch of things around how to mine the block and all of that. But let's say I get super lucky and I can mine a block. You know, I can't say, oh, you know, everyone gave me a million dollars because, you know, other people aren't really going to validate that. And then while they're trying to reconcile all of that, more blocks are getting added and i'm not going to be able to to add blocks as quickly as everyone else can well the simple way to to state that though is you need people's identities are tied
Starting point is 00:03:56 to a public key and you need a private key signing uh the transaction that that says you transferred a million dollars so if you mine a block and put all of these fraudulent records in, they wouldn't be cryptographically signed correctly. So you couldn't say Patrick gave me a million dollars because I'm the only one who has the private key that could sign such a message that you would include in your block. So if you made up one and put it in your block and then other people fact-checked you
Starting point is 00:04:25 they would realize that that block was invalid yeah you're right that's true as well yeah um but then the uh and so then the merkle the tree the the chain comes in from the fact that someone else could mine on top of my fake block but they're disincentivized to do that because they won't get the reward if it's if the majority of nodes participating don't accept that as a valid path if they basically say hey somebody has an invalid block here and anything after that block is also invalid then right you're incentivized to make to sort of fact check other people so that if you complete your mining of a block you will emit a block which is on top of one that doesn't later get invalidated. Right. But then so yeah, I agree. There's the there's the public private key thing. But then you need more like you also need the
Starting point is 00:05:16 proof of work and this whole like hash tree, because you could say, well, if I have the private public key, then what do I need all this other stuff for right and so so yeah i think you're right so let's say there's a list of sort of valid transactions right um at some point you still have to decide which sort of valid transactions you want to execute in the next block and that's where um you know if you limit it to the scope of valid transactions that's where the stuff i said originally right has an effect like like i can't just put all the blocks on myself and take all the credit for all those transactions because you know i'm having to solve this difficult problem and uh there's a whole bunch of other people doing it at the same time well the reason for
Starting point is 00:06:02 having the proof of work is is to say that that's exactly right like people are incentivized to sort of continue this chain on in a way that sort of adds credence to earlier things in the chain and they're incentivized to do that to do work and if it was if there wasn't a proof of work it would be too easy to just sort of make infinitely many of these things and and you would just get lost in the noise and so you see need some mechanism for sort of controlling the rate right yeah so it kind of makes sense i'll definitely read up uh maybe next month uh you know i'll post some links to the things that kind of explained it the best because i've read a bunch of them and uh you know obviously some are better than others but overall i was yeah it was really interesting it was a fascinating thing um you know i think i would love to see you know there
Starting point is 00:06:50 is some like i think it's called steamed but there's like a forum that's based on blockchain which i thought was pretty cool and uh it was a bunch of bunch of really neat stuff coming from that technology so your explanation of chain, also describes why you hear about cryptocurrency forks. So there's like Ethereum forked into Ethereum and Ethereum classic. Bitcoin has forked several times. And this is where people say you have if you had Bitcoin, now you have a Bitcoin and a Bitcoin cash token because there was a fork. And people talk about hard forks and soft forks. And those are basically paths where at some point in time, people say at block number n plus one, we're going to switch something in our code. And other people say we don't want to.
Starting point is 00:07:33 And there basically becomes a hard fork. There becomes two blocks minted with the same predecessor node. But then some group of people both authenticate those chains going forward. And so now you have two paths that were common at some point. So they diverge, they fork, and then they continue on. But from that point on, they don't always have the same sort of value relative to fiat for a cryptocurrency, or they have their own set of conditions that make or don't make sense so in the case of like ethereum versus ethereum classic whether the like dow the automated uh thing which had the hack whether that happened or not essentially in one they tried to undo that in the ethereum and in
Starting point is 00:08:16 the ethereum classic they said no that makes no sense to undo that i'm greatly simplifying so it makes no sense to undo that that was a valid thing happen. And so we're going to continue on saying as if it did happen. And so now the two chains diverge. They're hard forked from each other. So at some point, will one take over the other? Like, how does it? No, I mean, take over isn't the right. They can't because like you just described these chains.
Starting point is 00:08:38 There's no mechanism for sort of joining them. But one could be worth more than the other. So like Ethereum is worth more relative to fiat relative to us dollars or euros than ethereum classic because more people think that that's the right choice i guess um okay but this has different implications of whether you're talking about a cryptocurrency on the blockchain or a different use um so so take but then takeover is anybody could you could create a fork of bitcoin if you wanted you could just come up with a new set of parameters mine do the proof
Starting point is 00:09:11 of work mine the coin and you know declare yay verily this is jason's jason coin as a fork of bitcoin um that's what i always but then you have to convince somebody it's worth something oh that's the hard part you have to convince somebody to's worth something. Oh, that's the hard part. You have to convince somebody to join on your chain, right? And start building on it and then accept it as valid trade from other people. Okay, that makes sense. But you could do that. And then I think the term soft fork is where basically something changes, but the entire consensus agrees and also moves along with the change oh okay so
Starting point is 00:09:47 basically nobody bothers like mining the coins that would have been on the previous trajectory yeah so they're just they become worthless well just yeah just nobody ever bought there's no market for them yeah and so it's considered a soft fork versus a hard fork is some set of people agree to continue on to your chain oh i see oh it's interesting yeah that's wild but a soft fork happens every time i think basically every time you change some of like some parameter or an algorithm for how to do something yeah that makes sense because then some machines who don't have that change right will mine the wrong way and everyone else will mine it the right way is that right yes well right
Starting point is 00:10:25 and wrong is perspective but the way that dominates yeah um the way that holds the value i guess all right on to news um this is pretty cool so this is open ai 5 um which is basically uh there's a game uh you know um alpha go played go better than, you know, the world champion. And so there's always been, you know, sort of the frontier of AI seems to be now, you know, playing these video games and basically passing the Turing test on these video games. And OpenAI 5 is sort of the next iteration or the next evolution of that. So there's a game called Defense of the Ancients 2. It's called Dota 2. And it's a five-on-five game.
Starting point is 00:11:09 And so that presents a lot of really interesting challenges, right? So, you know, in theory, well, depending on the rules and what the AI is allowed to do, I mean, you could say, oh, let's have one brain for all five players, one AI for all five players. In a way, it's kind of cheating. But even beyond that, it turns out it's not very practical because that AI has to do exponentially more decisions. It's like, for example, just to keep it really simple, let's say you can go up, down, left, right, right?
Starting point is 00:11:42 But let's say there's two players. Well, now I could go up and you could go up or I could go up and you could go up, down, left, right, right? But let's say there's two players. Well, now I could go up and you could go up, or I could go up and you could go left. So now there's 16 actions. It's not eight, it's 16, because all the combinations, right? And so making one AI for all the five players is not actually that good. So what they did is they actually created an AI that can communicate and send some signals to the other players, the other AI. Or it's really to itself because it's one sort of brain that's just been replicated five times. It's really interesting. There's a lot of technical detail.
Starting point is 00:12:18 So I'm kind of hand-waving a lot of that. But basically, it's really amazing. Also, they ran it on a ton of machines, so they really scaled it up. And they just have all these machines cranking through all these defensive ancient games. And they were able to beat some amateur human players. So, I mean, this isn't like world-class stuff yet or anything like that. But it's still good i mean um uh you know being able to beat an average an average human is is an amazing accomplishment and um
Starting point is 00:12:52 they also develop some pretty interesting you know kind of um like altruistic strategies you know so one of the one of the issues with ai is that it's very sort of self-centered and so you know one of the ways a lot of these systems would fall apart at least early on is that it's very sort of self-centered. And so, you know, one of the ways a lot of these systems would fall apart, at least early on, is that, you know, there wouldn't be sort of coordination and altruism. And if one person was in any amount of danger, they would just run away. And then the humans would just pick them off one by one. Now there's definitely some coordinated effort. There's players players you know the ai make sacrifices sometimes and things like that um it's pretty amazing i have to admit uh so i'm i'm in this field i mean this is what i do for a living and so i am really really shocked that uh um that
Starting point is 00:13:37 this much progress was made in this amount of time it's truly truly remarkable and so it's it's gonna be really really fascinating to see uh you know where this all goes and did they this you know this research they did in this paper obviously like is very difficult relative to like the amount of hidden information the number of choices to make where they find like any sort of what they thought was the reason to not continue to make even like not just beat amateurs but beat pros it's just like processing power algorithm. Like they give it. Yeah, that's a good question. I think so. Okay.
Starting point is 00:14:08 I still don't think that they're the game. Theoretic part is being handled correctly. Right. So, so for example, if you look at, if you look at Dota, you know, the, the, the characters are stereotyped, right? So there's a carry who's supposed to carry the team, but basically they're the ones who are supposed to collect as much money as possible. You're not allowed to give money to your teammates, so they have to earn it.
Starting point is 00:14:36 But the goal is to make the carry earn as much money as possible and not the other players on your team. Then there's the support, and the support is responsible for for buying let's say all the items so so so the idea of altruism is baked into the character archetypes right and i think even in the model they they you know basically hand hand tune that right um and so then the the the real emergent altruism in in dota is this idea of like lane changing so for example uh for people who don't know dota real quick there's there's three little lanes like imagine like three little highways um all this battle this battle is sort of going on on these three highways and you're usually in one of them but you can spend some time to switch lanes and so
Starting point is 00:15:27 for example let's say you're in the middle lane and the left lane uh there's a there's an enemy who's really weak in the left lane maybe he got hurt or something right you could try to go across to the left lane and and catch him um you know uh trap him and kill that that hero and then you get a lot of money um and so you know this there's this idea of like oh if if uh if the opponent is sort of beating up on me uh you know i'm gonna kind of take take some hits and things like that and let the opponent think he's sort of doing well meanwhile my teammates are switching lanes and all of a sudden there's going to be four people attacking this one guy. He hasn't really expected
Starting point is 00:16:09 it. So, so there's sort of this like strategic, I guess I'll say strategic altruism or strategic coordination. That's something that AI does not do. Um, that is notably missing. And, and until they get that, um, it's, it's not going to be very good. So what I expect, if I was to predict the next thing that these folks would work on, I think they're going to really take a look at the game theoretic part of this. And they're going to try to do some kind of approximate Nash equilibrium or some opponent modeling or something like that so that at a high level, they can get this coordination, this altruism that they don't
Starting point is 00:16:50 have at the moment. At a tactical level, they have it, which is really surprising, actually. I watched one video where this player kind of got behind the enemies and then kind of trapped them and the player who trapped them you know ended up like not really being able to get a lot done but because he trapped them you know the other players on his team were able to go in and kill them all and so that kind of like tactical coordination altruism they've been able to crack that which is a surprise but the strategic part they're still missing so yeah it's it's uh it's really really cool i mean i i wouldn't be surprised i mean i thought that this was way far out and now i'm starting to think that this could happen in the next like three four years the yeah robot overlords are coming we're all doing yeah that's right yeah
Starting point is 00:17:38 and then then they're going to take this ai and put it on the stock market and then okay microsoft announced this month that they're acquiring github uh that's wild yeah this was really surprising to me when i saw the news not because it just clearly seems sort of weird like microsoft buying github like why um but people pointed out like there are some you know decent reasons and and you know we'll see sort of what happens long term but uh you know microsoft is not the company that you know when i sort of i don't want to call it like coming of age when i was sort of went to college and first started working as a programmer everybody loved to hate on microsoft and i guess in retrospect they did make a lot of bad decisions around that time. But they've come a long way.
Starting point is 00:18:26 And they really, you know, I've been looking through the list of things they've done recently. And they really have sort of seemed to kind of turn a page, which is pretty remarkable for a tech company to have been around as long as them and still be sort of in the running for, you know, impact on a day to day basis for people. Yeah, well well they replaced the CEO that was really when things turned around yeah and and the new guy I won't I'll mess up his name if I try to say I'll try I think Satya Nadella is that's pretty close all right sounds right to me um but he yeah so he does he's been doing a great job and you know they've they've bought github and continued to say like you know providing tools for job and you know, they've, they've bought GitHub and continue to say like, you know, providing tools for developers and, uh,
Starting point is 00:19:07 and integrating and they do a lot of open source work. They contribute a lot to, I guess, to Linux stuff. People were even saying, um, and bringing that into windows as well. So, uh, you know, initial gut reaction is like, what? No. Oh. And there was some reports of, you know, projects fleeing GitHub and onto other things other things um to avoid whatever um another part of this that a lot of people don't talk about i'm kind of surprised is is you know github made atom the the yes id and um microsoft released the visual studio code which is a fork
Starting point is 00:19:39 of atom and um and atom is unbelievably popular i, I bet Atom is really eating into their Visual Studio business to the point where they had to make Visual Studio Code. And so that's another thing is they really took a big IDE like off the table, you know, or at least they own it. So they turned it into a win-win. So they have announced that they believe that they are committed to maintaining both visual studio code and adam despite the fact that they're competing yeah i believe it so they came out later and did say they but yeah this is an interesting thing um i i don't have the the acquisition price i never know when they list acquisition prices if
Starting point is 00:20:20 those are i saw seven and a half billion i don't that's true i don't know how yeah how speculative versus real they are um i guess maybe they have to disclose because they're a publicly traded company um but yeah so the there's a high acquisition price and you know i hope it works well i like github i initially didn't really understand it or get it but but now i i like it and use it and we use it some for some peripheral projects I work on. And like the flow that they have for submitting code and reviewing code and managing projects has come a long way than when I had first was exposed to it. Yeah. So it's making improvements. And I know for open source projects, I mean, versus source versus source forge, which is what I used to know.
Starting point is 00:21:04 Yeah. Yeah. it seems to be you know crushing it so yeah i mean it's a very very solid product yeah it was pretty funny this idea like oh we're gonna leave i i don't feel threatened or i don't feel like my projects are threatened at all by this i mean i mean what what could they possibly do so i mean i guess some people didn't or people think about github as being you know just this bastion of open source and i guess it really is but they do a lot of closed source stuff as well and i mean i'm sure that's where all their money comes from is selling to companies for on-site licenses selling for companies to uh you know have private repositories um i mean that's their i don't even know if they
Starting point is 00:21:47 have donations for other stuff but i i mean they probably can't amount to much um so i'm sure they have a few really big companies that make a lot of money off of this and that's always been or they make all their money off of a few relatively large accounts is my guess that's typically how that stuff works out um and and my guess is that people never really thought about that because it happened sort of behind the scenes it wasn't the face of it but now and github was a startup you know they were a company um and now the fact that microsoft bought them though exposes you to this notion of wait but there is a company behind all this with profit motives and you know a desire to make, you know, product and sell it.
Starting point is 00:22:26 And so most of the people I saw were recommending going to GitLab, where if I understand, GitLab actually does open source the hosting itself. Like you can run for free your own GitLab instance. Oh, I didn't know that. I believe that's the case. So they are also a company, but I believe it's more along the lines of traditional open source companies where they open source it and then they hope you sort of like, you know, contract them for hosting of the data or for, you know, support or adding features. But I don't quote me on that, but I believe it's more in line with that style of project versus. That makes sense.
Starting point is 00:23:00 Or you need to integrate it with your like user system, and they charge you for that or something. Yeah. But GitHub itself was never really... It helped open source, but it wasn't itself open source. Yeah, that makes sense. Cool. My article is... This is a trick.
Starting point is 00:23:18 Families earning $117,000 a year now qualifies low income in California's Bay Area. So people probably know this. Patrick and I live in California's Bay Area. Obviously, I mean, there's like your gut reaction, which is, you know, that's that's that's crazy. But I actually want to talk a little bit about sort of like diffusing Silicon Valley, not diffusing as in like shutting down, but diffusing as in you would diffuse like water or something, right? So, you know, you're already starting to see it, but it's very slow. And yeah, I'd be really curious, Patrick, to hear what you think about, you know, I mean, a big part of Silicon Valley is communication over the internet, right? And so it seems like, you know, these big companies could at least move, you know,
Starting point is 00:24:07 branches of their organization to other cities and things like that. And, you know, that would fix or that would address this income issue, you know, traffic and all these other issues. But, you know, you never see it. Like you always kind of say, well, this is going to happen. You know, I always kind of expected it, but it it hasn't happened yet and so now i'm starting to think um that you
Starting point is 00:24:30 know it's just maybe it's just there's something like magical i guess about being physically close that makes these uh companies all want to consolidate in one spot right yeah i mean eric schmidt from google uh i i mean i heard him talk once and someone you know mentioned this like why does google feel that it has to have everybody in the bay area living or coming to mountain view you know it's a tech company they make all their money on the internet like this makes no sense like why everybody in one location um and you know he didn't have really a great answer for it. But then they asked us, like, what about this cost of living?
Starting point is 00:25:07 Like, this isn't sustainable. He's like, yeah, basically people have been saying that since, like, I want to say he said, like, the early 90s. I believe he came from, like, Sun Microsystems before going to Google. And so, like, he had been in that area for a long time. So I kind of expect he probably knows. But he's like, yeah, people have been saying that the Bay Area is overpriced and expensive and will never last for you know i guess three decades at least now um and they have gone through a couple boom bust cycles like obviously the dot-com crash
Starting point is 00:25:36 the 2008 housing crisis so although that that second one didn't really affect us if i recall correctly i didn't to the same degree. I mean, it did, but not in the same magnitude as a lot of other places. Yeah, I mean, I think it was like 20% versus other people were hit with like 50%. Yeah. So, I mean, there have been slight corrections. But in general, yeah, it's been just ever-increasing cost of living here. And as far as I know, and a lot of the articles around this mention this,
Starting point is 00:26:04 which is an interesting observation if you don't live in this area. And as far as I know, and a lot of the articles around this mentioned this, it's, you know, which is an interesting observation if you don't live in this area. In general, in California, some things are more expensive, like gasoline is more expensive. But you also, in my experience, coming from not in California, I drive, I don't have to drive as far. Well, California as a whole, it's pretty big, but the Bay Area tends to be pretty compact relative to a lot of other areas. Not obviously living in a big city, but so you don't need to drive as far as you don't spend as much.
Starting point is 00:26:31 So it's a little bit of a wash. But obviously there's a state tax that's pretty high. Not all states have taxes, but by far and away, the biggest thing is the actually housing cost. So housing is just really expensive. And the reason why you see something crazy like $117,000 a year, $117,000 per year could be considered, you know, low income is, is if you look, most people say you're not supposed to spend more than 40 or 50% of your income on housing. And if the median house, I believe I saw in San Francisco is now $900,000 for the median. Yeah.
Starting point is 00:27:07 You know, if you sort of calculate out how much you're spending, you know, and rents are commiserate. If you look at how much you're spending, that's a large driver of that is strictly just housing. Right. Right. Yeah, I think. So, yeah, yeah, The housing is really large. But but, you know, the the Facebook and Apple and Google and Amazon and all these companies are building even more offices in the Bay Area. So it's pretty clear to me that that these companies see, you know, that the marginal value is still very very very high for having your employees local um and and i agree with you like no leader has really you know given like a good reason you know i have heard things like um they say that if you're um uh what was this oh i
Starting point is 00:28:02 don't know if this is that relevant but they they said that basically, if you're in a different, if you're more than I think 100 yards away, or if you're in another city, it's basically the same, like in terms of, you know, you don't walk over and talk to someone if they're in a building that's 100 yards away. There is a time zone issue that is very real um so so it may be the only way to expand is is vertically um like like portland seattle redding la san diego like um to eliminate the time zone but yeah i just i can't imagine that the personally i can't imagine that the the value of having your employees here is really as high as people are saying. But I'm also not leading 1,000 personal organizations. Neither am I. They clearly know something that we don't.
Starting point is 00:28:53 I mean, I would love for some dispersing to happen. It would be great. Yeah, same here. But living here, being around all these people is a certain kind of interesting. And such a dense amount of tech people because you have a lot of concentration of people who like similar things to you uh so so there's a lot of catering to that which is nice um yeah i mean just to give it put it in perspective and i don't know if this story is really gonna do that but i'll tell it anyways i was with my son and he was sick
Starting point is 00:29:21 so i took him to my wife was also sick so I took him to Safeway which is the grocery store that's open 24 hours and as we were leaving Safeway there was I think it was it wasn't necessarily like a bar but it was like a restaurant that had a bar basically if that makes it was a bar and so these gentlemen are walking out of the bar and I got a little bit nervous because really late at night these people were definitely like very intoxicated and um we had to walk right by them and as i walk right by them one of them basically tells like and i'm not gonna say it's a little bit rude i won't bother saying it but but basically told like a chess joke it was like some like lewd chess joke and i was like like this is like the dregs of society it's like it's like two drug drug people
Starting point is 00:30:08 telling like jokes about chess like at two in the morning but that's basically what it's like here it's just there's just it's it's uh it's it's it's crazy too when you talk to the other people on your team or at your company and it's like everyone was like soliditorian of their high school at some part of the world or something. It's just like mind boggling. Yeah. And I mean, I think for some, what do you call it?
Starting point is 00:30:33 Like table stakes, like for some companies, startups of certain nature and need certain kinds of people, you can only have it in this area or it makes the most sense to have it in this area and a lot of people argue about that i feel like that's an unknown yeah so i mean there's this
Starting point is 00:30:49 there's this unknown and no one wants to take the risk because it's so expensive what is it it's like no one got fired for choosing ibm is that was like it's the same thing it's like you're not going to get faulted i mean you might it might be wrong you might fail but nobody's really gonna like look at you twice if you say you're making a startup in the Bay Area. Yeah, exactly. But yeah, there's this question. You know, I have this sort of hypothetical like thought. Was it called a thought experiment? You know, if you opened a tech company in like pick the place in America, that's and I'm yeah, I'm not going to hypothesize. But imagine the close your eyes. Imagine the place in America that would be the worst for a tech company.
Starting point is 00:31:27 Fargo. No, I don't know. Sorry if anyone's from Fargo. What's Fargo? Anyway, and let's assume Google opened a branch there. Well, some engineers are going to move from Mountain View to wherever that is. And that, I think think is an unknown quantity and and maybe when amazon finally builds this hq2 we'll be able to like at least get a measurement of that of that
Starting point is 00:31:53 number right but that's a different number than if you have a a startup and you're trying to build one in fargo yeah i feel like that's that's very different i mean because there are some engineers there but you're knows most of what i've seen has either been somewhere with a reasonable size tech scene and saying that's enough or we don't need the you know top 0.01 percent of the talent that exists in the bay area or um some something like that or they're just committing to being remote team so there exist people spread everywhere and if you're not committed to being remote team. So there exist people spread everywhere. And if you're not committed to this thing Jason said of having everybody within 100 yards of each other,
Starting point is 00:32:29 and you're already saying we're going to build a remote company, a remote team, your options open up dramatically. But if you say, hey, I need 30 really, really qualified people, and I want them to all sit within 100 yards, and I don't have to convince people to move, where am I going to go, you know, make my startup? Then your choices are much more limited. Yeah. I mean, I think with startups, there's a there's another challenge, which is most of the VCs are here and things like that. So for people to know, VCs venture capitalists. So those are
Starting point is 00:32:59 the people who are going to take the risk, you know, and give your startup money before you've really built anything. But yeah, I mean, there's there's no reason why. Oh, well, there are reasons. But like Google could easily build a, you know, Google engineering office in Fargo. But then there's this question of like, what would happen if they did that? And that's the big unknown. But yeah, the that being low income is interesting because of what it really means but also why and your question of is it sustainable is is unknown right everybody tends to say this time is different and the fact that this isn't the first this time leads me to sort of bet against it being different this time yeah just as Just as a general rule, it seems like there's no obvious
Starting point is 00:33:46 reason why it won't continue to be slightly worse and slightly worse. Yeah. I mean, I think, uh, I do think it will sort of plateau. Like there's been crazy growth recently. Um, I think, you know, at some point it will plateau, but I mean, I don't really see like a big crash. I mean, in general, I mean, I don't know if this, maybe this is just crazy talk, but, but I don't really see like a big crash. I mean, in general, I mean, I don't know if this maybe this is just crazy talk, but but I don't really think there's going to be these big crashes anymore. I mean, like in the market in general, in tech and real estate and just period, you know, like like the futures market is just so algorithmically dominated. And I feel like that gives it just a level of resilience that it just never really had before. And so even like if you look at the 2008 crash, it still took years or maybe at least 18 months for the crash. It wasn't like the 1930s or even 1998 where companies lost
Starting point is 00:34:42 70% of their value in two weeks you know so yeah so you're claiming is this time is different i just think that there will be if there is going to be a decline it will be a slow decline i don't think that we will wake up there's people who say that yeah that we're less prone to bubbles than we used to be we're getting better at managing our bubbles exactly like it'll just be like it is a hypothesis the median house price will go from 900k to 800k over the next 30 years or something sure anyways that's my two cents uh don't don't don't buy uh don't bet on that yeah this is not financial advice don't worry it didn't sound very good advice anyways sorry i'm just teasing hey god i have to pull this dagger out of my heart
Starting point is 00:35:24 well on something completely different it's not like uh it's not like i'm not reading economist books all the time right i mean you do so yeah i mean oh man that's your opinion man um that's true five react practice projects uh you can search that it'll be in the show notes um this was a page i found and in fact it's actually kind of bad i feel sad for recommending this because some of the links in here don't work anymore i guess they were referred to like a service that had some like kind of useful apis that is now down but this is really good collection i struggle with this a lot and you know a lot of people who are learning programming struggle with this which which is, okay, I learned like how to write a for loop. I learned how to make a web form. What next? Um, and actually coming up with well-defined beginner projects is really hard. Um, and so for me, this has always
Starting point is 00:36:16 been the case. Like I've always wanted to get into web development, get into, I mean, learn more about it. And one of the things I've struggled with is, oh, I know how to make a web page, like put HTML on a page. That's cool. I can, from JavaScript, from like a coding standpoint, I get, but there's a big gap in between that and making a full email client as a single page app
Starting point is 00:36:38 that runs on multiple devices or whatever, right? You know, like going from A to B, it's that, how do you draw an owl meme that's on reddit like first you draw like a circle and then you finish it and it's like yeah okay exactly anyways uh so this site i thought had some really reasonable or at least you know i'm not done web but they seem reasonable to me like a step of you know first try doing this then you can use it in the same way to do this other thing so the first one is like build uh what is it like a card like a social card like you would see someone who embedded a twitter message on their website and then build a weather app and how if
Starting point is 00:37:16 you build a weather widget app that you have like days of the week with some icons and you can just sort of like fake the data or or you know they recommend like oh maybe you could get this api um but those are like a series of those cards so it's sort of like building upon itself and i mean i don't know that these particular ones are the most amazing examples but i thought this is a good resource because i know for me it's really useful to have someone else who's already been down the path give a judgment on whether something contains an unforeseen difficulty that you won't be able to surmount yeah very cool yeah i've done some is this react native or react well i mean so i don't think i guess it kind of doesn't matter i guess it would be react web because most of this is talking about like a
Starting point is 00:37:54 card you would embed in a website but it might be applicable to both it's not uh here's a bunch of code on exactly how to do it it's more like here's something you could go off and try to do okay go off and have this so the classic one for me is always oh i learned c like i want to write a video game how do i write a how do i draw a pixel on the screen and it's like oh well you could learn that it's not going to be easy or hard but at the same time recommending you to go work with a you know c++ game engine isn't also a great first step. Like it's an awkward thing, you know, which we've talked about before, like making a text-based game is much more approachable
Starting point is 00:38:30 than making a full-blown graphics game. Yep, exactly. So something similar for the web. Anyways, if it sounds useful, check out the show notes or just search five React practice projects. Cool. Yeah, very cool. Yeah, I think React Native and React.js, they're both great. I use them both uh
Starting point is 00:38:45 in some some side projects and they worked out really well it's on my perpetual list of things to do one day nice nice um book of the show show my book of the show really quick is a critical play radical game design um yeah so i read this book uh i read this book last month and uh it was the only book i read last month last month was an extremely busy month for me and so i'll admit it wasn't that great i probably wouldn't buy it but you know sometimes we read books that that uh that aren't you know the best and you know we're totally honest i'll put the link up if you buy it we'll get some amazon money um but i but i wouldn't i mean i guess part of it was i was five stars would read again yeah this proves we're not shills right i was i was expecting um i guess i was expecting radical
Starting point is 00:39:39 game design to mean um uh like really um like a chronology of really innovative things like for example uh so one thing that comes to my mind is is tower defense so uh have you played these tower defense games yeah i think i've played a few okay like defense grid kingdom rush there's a gazillion of them now but the idea with tower defense games is um there's there's some enemies and they're just walking across the and they're just walking across the screen they're they have nothing to do with you they just want to get from left side screen the right side screen and what you could do is build these little towers the towers don't move but they have a little circular radius and anything in that radius is
Starting point is 00:40:18 going to take some damage over time um and the name of the game is you have to strategize and build and upgrade the towers so that the people can't get from the left to the the name of the game is you have to strategize and build and upgrade the towers so that the people can't get from the left to the right side of the screen. So if you build, you know, and you have to trade off, like, I could build three towers, or I could build one tower and upgrade it a bunch. And so you have to like really look at the, you know, the spec sheet to figure out like what is optimal and all of that um and space is a constraint anyways so so that to me was like a radical game design and someone actually made that as a mod to starcraft one at least that's the first time i saw it um and and the reason is is
Starting point is 00:40:56 starcraft the the editor you know it was pretty limited but this was one of the games that you could build in it and so it was sort of just emergent based on you know the the limitations of that of that editor and the fact that it was so easy to make a game inside of starcraft and deploy it to millions of people um so that that in my opinion like that was something i wanted to see but instead the whole book was all about basically games as art. And so it talked about like really things that were kind of out there. Like there was a museum that had a game where, you know, you like walked through the museum as part of the game. I guess it was just more about it was just much more connected to art.
Starting point is 00:41:43 It talked a lot about museums, talked a lot about museums talk a lot about different art styles um there were it was a lot of talking about like games that there's this game i guess that talked about kind of getting cancer and they spent a lot of time talking about that and so you know i think i guess what when they thought of game design they were really thinking about you know designing games to to affect a certain emotion. And they were really taking sort of that approach. And so in that sense, the book is pretty myopic. If you go on, let's say, Wikipedia and you look at different game genres and you take that approach to game design, this book's going of let you down which is what it did to me so if you're interested in seeing like really crazy games uh like there's
Starting point is 00:42:31 one game you might have heard this game patrick america's army have you heard of this the one that was paid for by the actual u.s army yes so so yeah there was a game that was literally made by the army and uh it was it was it was basically meant to to get people excited about the army. Or at least I was like, you know, I guess one of the goals. And so this book talks a lot about that and social implications of that and things like that. So I have to admit, like, I found the book interesting, but it just I felt like the title is misleading. And so it's kind of like, uh, um, you know, if someone hands you like a grapefruit and you bite it and it's actually like an orange, like a blood orange or something, you know, that's not going to taste good because you're
Starting point is 00:43:15 expecting one thing and you got something else. And that's kind of how, kind of how I felt with this book. Like, you know, it looked like, looked like one thing, but then when I read it, it was something totally different. It kind of let me down. My book of the show gets five stars. Oh, wow. I'm not going to tell you what it is. No, I'm just kidding. Unless you read the bad book first. After someone emails us a receipt of having read Jason's book.
Starting point is 00:43:38 So I actually had a different book, which I also would have probably given five stars. But I had a different book. And then somebody had contacted Jason because i'm a social media hermit um and this is true i have to relay yeah he sends me screenshots of people who uh who message him so thank you all jason will continue to serve as my secretary so if you have anything you would like to tell me just let him know hey carrier pigeon oh okay give credit words okay uh and he this was christian uh and he messaged jason was like oh hey patrick and i have a lot of the same taste you should recommend this book to him and turned out i was like uh of course i've already had that as my book of the show like
Starting point is 00:44:18 why did this guy like you know message jason about this is weird uh and then i said wait i've never had this as book of the show and then i was when we were getting the show notes together, I was, you know, looking through and it's, oh, the reason why is that there's two books in this series so far. And the first book came out before we started recording Programming Throwdown. And the second book came out before we started book of the show on programming throwdown uh and so i've never featured either the first or second book from the series and so i'll start off by recommending the first book but i have actually read them read them uh many moons ago and uh they are really good books but i will warn you the series is not complete uh and as you've i've already spoiled
Starting point is 00:45:02 die only two of the three books are out and the second book came out before we started having Book of the Show, and this podcast is going on many number of years now. The author is unknown as to when the third book will be releasing. So if you don't like reading unfinished series, which is now a thing, you have to be careful, then I would recommend waiting until the third book comes out. And that is The Name of the Wind by Patrick Rothfuss. So very, very, very, very good book.
Starting point is 00:45:30 Highly recommend it. But also very frustrating that the first two books and we're still waiting on a third book for going on 10 years now. No, the first book came out more than 10 years ago. The second book came out and it is not quite been that long, but it's been a long time. I'll have to look it up here. And anyway, so it's a book about a fantasy book.
Starting point is 00:45:55 And it was March 1st, 2011. So we're at seven years since the last book came. And so Name of the Wind is a book, a fantasy book about a man named kvothe and his uh experiences that i can't i never know what to say i don't want to spoil things uh but there's some magic in the book the way the magic works is is really good and interesting and i like it uh that's a very sort of um it sounds bad like a realistic approach to magic like is that i think i've said that about other books surely it's kind of based in some kind of alchemy or something yeah like they try
Starting point is 00:46:28 to come up with some consistent rules and how it would work and like trying to abide by those rules um which i guess is an art it's a game we all agree to play in our heads let's say that way but yeah this game has interesting rules um and they're well thought through and the world building is good um and i i definitely really really really enjoyed this book i think i picked it up a couple times and didn't really and then you know sort of had a little bit of a rough start was busy and then but when i once i finally got in like i'm gonna read this uh it was really good uh and then the second book um not quite as good as the first book but second books are always kind of hard to write i guess um and i'm not an author but authors say that the second
Starting point is 00:47:12 books are harder to write it makes sense i mean you're you're you're uh you're really like uh calcified by the first book like you can't go back and change history right and then and then the third and you're trying to set up like you're trying to wrap up some stuff have your own story arc but set up some stuff for the next book um unless you're just having a two book series in which case i don't know but if you're having a three or four or five book series um yeah that second one i think is a little tough sometimes um but i still enjoyed the second book so the one thing i will say that is sort of a funny uh instance if you do read this book in the second book so it's a book and in the book someone's telling a story and in the story they're telling there's people like writing books and telling stories and at some point you realize you're like four or five stories deep in this book
Starting point is 00:48:00 nice and so uh it's like one of the i don't know i almost feel like i when i realized this i sort of chuckled and felt like somebody was like challenging themselves like how it's the inception thing like how many recursive stories can i have going on at one time so like i'm telling a story to jason about a dream i had and in that dream i was reading a book and in that book there was a storyteller and the storyteller was telling a story about a man who wrote a book and you're just like oh what okay anyways that's got to be really hard if you put that book down which one to pick it back which where along the stack yeah you definitely will have a stack fault if you have to go back six months later and try to
Starting point is 00:48:44 remember what happened so and it's but uh yeah definitely so i'm not saying very much because i never do but name of the wind fantasy magic uh world building uh definitely not short book uh so if that if that seems to strike your fancy then you've probably already heard about it and you've probably already read it but if you haven't then do five stars don't read jason's book my book's better all right sounds good you can also get patrick's book on amazon using our link and uh that helps us helps out the show cool um we also if you don't want to buy his book uh on amazon the the the uh i guess the the written version the scripted version i don't know what the word is you can buy the written version, the scripted version. I don't know what the word is. You can buy the audio version from Audible. And you can go to audibletrial.com slash programmingthrowdown.
Starting point is 00:49:31 We have a link in the show notes. And you get a free book. And you start your trial. And that also helps us out. You can also donate to our Patreon, patreon.com slash programmingthrowdown. And I actually got all the thank you letters printed out and uh i'm waiting patrick and i have to meet up so that he can sign them oh i know this is this is the longest christmas present wait what i didn't really oh no well yeah we you have some
Starting point is 00:49:58 signing to do buddy oh oh boy so we'll meet up we'll uh We'll sign them all. And then we will send them off to you folks. And we have everyone's address. A couple of people emailed me, by the way, saying, hey, this is my address. You know, last minute. It's totally fine. Not a problem. We should probably recheck if anyone's moved. Yeah, if you've moved, tell us.
Starting point is 00:50:18 Yeah. Yeah, that's true. Well, yeah, I'll send them out ASAP. And if you moved, we'll send another one. Tool of the show. Wow, that was awesome. My tool of the show is Visual Studio Code. I actually made this tool before we decided to talk about GitHub.
Starting point is 00:50:36 But it's amazing. I actually, this is going to surprise people. I stopped using Emacs. I just switched to this. I take it back i still use emacs so this is like most of the graphical ids it's project based so um you know if you're editing like a random file in your home directory um it doesn't make sense like start a visual studio code um but uh for for all of my like projects i'm using visual studio code i love it um it's really really nice
Starting point is 00:51:06 um it uh it's extremely fast which is really surprising because it's it's much faster actually than atom and atom itself is is is so fast it almost doesn't matter um but this thing like doesn't you know burn up your battery um it's extremely slick now Now people might say, oh, Visual Studio, that's been around since the 90s. Visual Studio Code is totally different. So Visual Studio Code is an IDE written, it's a fork of Atom, and it has no relation to Visual Studio, I guess proper, or what have you.
Starting point is 00:51:42 It has an amazing sort of plugin ecosystem. So I was immediately able to get like a CMake plugin, a C++ plugin, a Python plugin. I installed, there's a, actually it was a tool of the show a while back, Editor Config, which is a style guide plugin. It has support for almost anything, even like Thrift and protocol buffer, syntax highlighting. It has all that stuff. The plugin system is great. Editor is great.
Starting point is 00:52:10 I actually know a buddy who switched to it too, and he loves it. And yeah, check it out. I mean, I am really, really surprised. If you use like Sublime or Atom or, you know, one of these editors that's kind of in the ballpark of Visual Studio Code, definitely check out Visual Studio Code. It might be worth the switch. I used to do a lot of stuff in just Emacs. And like I said, I pretty much switched. I spend 90% of time in this now.
Starting point is 00:52:37 So check it out. So one caveat is it's not a fork of Atom. They use the same framework, Electron, that GitHub built for Atom. Oh, I see. But it's not actually a fork, or at least so the internets tell me. Okay, yeah, I'm glad you mentioned that. I don't know how I knew that. I feel like somebody at work, I think, told me that, but I never really thought.
Starting point is 00:53:01 You probably read it on the internet. Just like I read my thing on the internet, and i don't know who we can trust either way it's uh it's it's it's really really well done um definitely recommend using it so the people who who built that again jason the adam engine electron oh yeah github my tool of the show is github your tool of the show is worth 7.5 billion dollars boom fortunately it doesn't cost that much to use yeah totally free no so jason and i were talking about this before but i mean github if you you know want to and maybe there's even been a tool to show before we try to check and we don't think it was but if you're you know trying to share your code with people um rather than emailing around in a file like we used to, I mean, you should be posting it on GitHub. You should be if you're not currently working and you're in school and you want to get used to sort of how teams do stuff, you know, and how source control works, which we've talked about before.
Starting point is 00:54:00 You know, you can get on GitHub, make a public repository and then you can put it on your resume, you know, fork people on GitHub, all that good stuff. We really take GitHub for granted. But I want to talk about it as a tool to show for sort of one specific use, which is going in and trying to find for, you know, projects that you know are in the language you're using or big and looking as examples on how to do stuff. So I found a lot of use of going in on big projects and searching for functions or things and just getting a feel for how they've decided to use something. So I'll try to find out if a project like, you know, an example, I don't, this isn't true, but like, oh, I'm using some boost library. And I'm really struggling with like, hey, how should I really use this? Or what's a good invocation pattern for doing this?
Starting point is 00:54:50 And I'll go on to GitHub and try to find a project that uses that Boost library and look at how they're doing it. So this sort of code searching ability. The one thing is that I wish they would do, which they don't, you have to already be in a repository in order to be able to search. And I wish they would let you sort of search across. Oh, I can give you a power tip. Oh, is it?
Starting point is 00:55:12 Basically, I have a shortcut which does a Google search, but it forces the site to be github.com. Oh, okay. There we go. All right. So there you go. GitHub's my tool of the show. Very nice.
Starting point is 00:55:26 Yeah, GitHub's amazing. You can actually see I'm in the middle of a technical argument on GitHub, actually, with the owners of HyperJS. Oh. You can see I'm trying to use all of these skills that we're going to talk about on the technical arguments show. And so we're going to talk all about uh you know we've been doing this for a long time and uh we've seen a whole bunch of different arguments um obviously any job has arguments we're going to try to we're not going to talk about like i don't know political arguments or argument over who has the best sports team or something like that i mean we're going to
Starting point is 00:56:02 try we're going to keep it very specific um but, you know, some of the things I'm sure we'll translate or we'll generalize. But, you know, we've seen a lot of, there's a lot of different arguments, a lot of contention, right? And as you can imagine, a lot of it centers around different sort of design decisions and things like that, but it can get all the way down to, you know, where you put the semicolons and all of that. So we're going to talk about all of that. So we try to break it down into a couple of sections and just sort of some themes. So we'll see how this goes.
Starting point is 00:56:31 But the first one I have is this debate about trying to get things done versus doing the right thing. This one's really tough. I mean, I don't know that there's, there isn't, in fact, almost all of these, there isn't a right answer, which is why they're hot topics to debate. That's right. This one, I would say even more so than maybe almost, I'm trying to read this list really quick while I
Starting point is 00:56:54 don't lose my talking pace. This one might be the hardest one. This one comes up all the time, just like on, and at every scale. So you could imagine like an entire company having the debate about, and that is like when to do the right thing versus when to just get it done. And this comes up at like, you know, should we ship this product? Should we, you know, ditch it and try another prototype? You know, all the way down to just things in your code like, you know, oh, I could just, you know, declare a global variable here and be done with this. Or I could sit here and try to think about what the right way to refactor it would be.
Starting point is 00:57:32 And, you know, it's from the start of your project when you're saying, like, let me just get something banged out and iterate it to like, let me sit down and come up with, you know, a full on UML diagram and architecture of everything I want to build. I'll write my test first and do test driven development. Like you're you might be doing it right, but your first bit of code, you know, might not come out for a long time. This is this is really tough. And a lot of this there's lots and lots of factors that come into here. But part of it is, if you ever have a deadline, and whether you were asked for input on when, what was a reasonable deadline or not, I mean, deadlines exist, they come up, and you always end up against the wall. And missing a deadline often has sort of bad consequences. And sometimes you need to sort of not do the right thing in order to hit the deadline. The problem is, if you don't strike the balance then you build up what we called sort of
Starting point is 00:58:28 technical debt and technical debt just means exactly that like you were trying to get something done quick or you didn't know the right answer and so you just did whatever came to mind and now you have some bit of code which later will come to need to be refactored or will slow down programmer efficiency or increase i always use this term a lot the increase the cognitive burden of your code which is like how many things you need to hold in your head to to do this or is it completely obvious on reading it um and these things is a really difficult balance to strike. But I think this one is probably the one that comes up almost continually while you're working. Yeah, that makes sense.
Starting point is 00:59:11 I mean, one thing I would add to that is, you know, sometimes you have these external deadlines, right? Like, let's say you have a product manager or some program manager and they're setting the deadlines or something like that. But then, you know, there's many times where you are sort of in charge of that. And even then, it's not trivial. Basically, you like, you know, the product itself is sort of an unknown, right? Like you don't know exactly what you're building and what it's going to look like and how people are going to react to it and all of that. I mean, if you are, like, for example,
Starting point is 00:59:52 if you are building like a chip and you're implementing the floating point operator or something like that, that's a very different environment. Those environments are usually just extremely controlled and regimented and they can be, right? But if you're building, let's say an app, the first few months of the app, you might just be trying to find out what people want and how to sort of reconcile the things that you want to offer with the market
Starting point is 01:00:20 and what they want to consume. And so your app, like on the surface, it might be changing massively from one day to the next. And you're incurring a lot of technical debt and the code is super ugly. And that is good, right? You don't want to take the approach of someone who's designing like, you know, the next Intel chip when you're making this app,
Starting point is 01:00:44 because then you can't really navigate that space quickly, right? And so that's why it's difficult is you're sort of trading off, let's say, learning and exploring with, as Patrick said, like building something that, you know, can allow you to scale to the next level. So if you just focus on exploring, you end up with something that's too fragile for you to, you know, use it as a platform for the next thing. And so yeah, trading that off is extremely difficult. And I think here, the way to sort of resolve arguments like this is to just understand that dynamic right and so um um so so what that means is you know if the app if you're still trying to figure out what you're doing
Starting point is 01:01:32 then uh you need then you sort of relax right a lot of these like just you know like over engineering like you don't over design things but then on the flip side, you know that you're going to have to pay that price later. So, you know, when the app is done and they say, OK, the app does music. Now let's make it, you know, play videos, too. And let's do the next version of it. That's when you just say, whoa, wait a minute. You know, we need to sort of redo this because we didn't even know we thought that this was a dating app and now we're a music player and so so along the way we've made a lot of bad decisions we need to now go through and like redo everything so i feel like if you can kind of gauge that ebb and flow of your project that will sort of give you the the um insight that you need to like win that, that argument or make the most compelling argument, you know,
Starting point is 01:02:27 when it comes to that. Yeah. I guess this one also is, is difficult because it comes down to the like true cost of things, which is if you take a long time to build the most amazing platform ever, and you never ship your product, you're going to go bankrupt. Right. Yeah. So like, what is the first, like in different industries
Starting point is 01:02:48 and in different applications, like first mover advantage is different. So if you're building an airplane, it needs to be safe. It needs to be a lot of things. It doesn't necessarily always have to be first. Although, I mean, maybe there's exceptions to that, I guess. But yeah, if you're making a dating app, yeah, whether or not your reliability is 100%, or is, you know, seven nines of uptime
Starting point is 01:03:14 and you use the most advanced algorithms for distributed consensus of consistent database updates, yeah, I don't know that anyone cares. Yeah, yeah, exactly. And so, you know, typically here like the the worst case scenario here is where you have someone who just doesn't get that and they want to write just extremely regimented code when you don't have a product or on the flip side um you know that you have a really hacky system it's constantly breaking and you can't really
Starting point is 01:03:45 use it as a platform for anything. And people just want to keep hacking on it, right? So those, those are the two extremes. And that's, that's, and so I think you're getting everyone on board with why those are extremes and why there is a better middle ground is the first step. So yeah, another one that you mentioned here is when and how to optimize. What's your take on that? So people love to quote, I think it's a Donald Knuth quote,
Starting point is 01:04:13 is early optimization is the root of all evil. Yeah, go for it. Yeah, okay. Which it's kind of a frustrating quote because I know what he's saying and it's true, but it gets to the heart of this idea of, you know, if you optimize some bit of your code that doesn't end up getting called very often, um, you know, that's not the right place to spend tons of time trying to make the most efficient, you know, selection for how to do your hash mapping hash function um because you only ever end up using it five times the whole time your program runs um and so early optimization really can cause a lot of problems it's true but deciding when to scale or not is and we've talked about this a number of times on the show before but like
Starting point is 01:04:59 if you sort of say i'm going to go build a web app that scales to 100 people um that's not necessarily a horrible thing or don't even worry about scale because you don't know if it'll be interesting or useful you need to go out and try which is what jason was getting at but at the same time the first time you get featured on uh you know on on reddit front page or you know on hacker news or whatever and your website goes down because you only anticipated getting one user per day and you have it running on, you know, the computer under your desk, you know, that's not ideal either. But building for something that's Facebook scale when you don't even know if anyone cares about your product. Yeah, this is really tough. I guess it's
Starting point is 01:05:41 a little similar to the doing it right before but optimizing means figuring out what parts of the system you're going to choose to design in a way that they you know sort of can scale as well as making sure to try to build enough of a system so that you can start taking measurements about where your performance bottlenecks are but this is something that i find is often comes into a hot debate because the more optimized you make something, you normally don't increase flexibility. You normally make the code harder to read and the systems more tightly coupled as a general rule. And so you introduce a lot of other issues the faster you try to get your processes to go, the more scalable you try to make them. Yeah, that makes sense.
Starting point is 01:06:29 I mean, I think if you have this type of argument, so I guess the two positions here that you could be arguing is one is someone wants to optimize something and you don't want them to optimize that. That's probably pretty rare. I mean, unless you're the engine manager and you don't want them to optimize that. That's probably pretty rare. I mean, unless you're the engine manager and you don't want them to optimize it. Well, I mean, I think the issue that comes up here is someone saying, oh, your design, like you should use a different algorithm here. Like, you know, you're doing something naive.
Starting point is 01:06:59 Like, oh, you're doing a bubble sort here. Like, why are you doing, okay, that's a bad example. But like, why are you doing merge sort here instead of using, you know, this new research algorithm that says it could potentially go faster, um, when no one really knows the data and you get these, you know, sort of drive by requests often in regards to optimization. Um, you know, like what's going to happen when we have, you know, four orders of magnitude, more data than we have today and it's you know I guess you're right maybe it's a manager to manage employee question that
Starting point is 01:07:30 comes up a lot but yeah I mean it's it's uh yeah I mean I think I think yeah for it to come from another team that other team probably has because most teams don't necessarily care how optimized other teams codes are unless there it's not an inter team this is yeah i think this would be within your team or a debate between you and your manager yeah exactly because i mean if someone comes to you and says i want to optimize code x then of course you just let them do it unless you're the manager and the issue there is i mean there's there's a bigger issue here which is i guess this ties into the first two questions, is how do you really reward
Starting point is 01:08:06 that kind of work? And I feel like unless it's releasing a safety valve, you know, so in other words, like you have some critical performance problem and this fixes it, you know, but in all other cases, like if it's even remotely preventative, it's very hard to justify that. And that's one of the reasons why I, it's very hard to justify that. And that's one of the reasons why I think the engineering leadership needs to be technical is so that, you know, those types of work, that type of work could be justified, you know. Yeah. But engineers love tinkering. So, like, I don't know.
Starting point is 01:08:40 I like tinkering. And it's more comfortable to stay in the same code and just keep making it better. Yeah, it makes sense. I won't spend too much time on this, but there's a whole bunch of arguments around languages, which language to use. That's obviously a really big one. One thing to mention there is a lot of people don't know this, but, you know, most big companies use a ton of languages
Starting point is 01:09:06 and they communicate. They use interprocess communication, they use TCP. And so you have like a Java program talking to a C++ program and things like that. Or if you're getting really sophisticated, you can use Swig or one of these things. But yeah you know you don't have to get like your entire company you know uh revolving around one language by any means um but you know still i mean that's that's going to be a hot debate right there's going to be people who like different languages and uh i think that's a very difficult you know situation um you know i think uh there's obviously a ton of research on whether you should use language X or language Y and people will refer to all of that research. I mean, one of the things to keep in mind here is that it doesn't matter as much as you think it does.
Starting point is 01:09:56 I mean, I've written PHP, I've written all sorts of languages that and hopefully this show kind of really conveys that message to people. If you've been following our show, then you already kind of know this um but you know if at the end of the day someone you know really wants to use language x and for whatever reason you know or let's just make it more obvious the whole company except you wants to use language x then uh it's it's actually not the end of the world it's not too bad. It always seems worse than it is, you know, using a language that is not preferred. But I mean, it's a real issue. It's very difficult.
Starting point is 01:10:32 I mean, we actually had this today. At work, we decided to rewrite something in another language. And so we built a prototype and it had a lot of the nice features that we liked specifically so we're porting stuff that was written in sql to a real programming language that has unit tests and things like that um and so you know we kind of agreed we had a round table we agreed that is a way to go um but i think part of the reason why we agreed is that we had been through so much pain
Starting point is 01:11:02 uh you know with the original approach um so you know if someone was brand new on the team they might not see the reason for for doing that um but yeah in general this i would say this is also in the camp of really really difficult arguments um like what would you do patrick if someone said we need to rewrite our whole thing and i don't know some other language yeah i mean i'm a big fan of the right tool for the right job. But I guess your contention that it doesn't matter as much as you think depends a lot on the situation. So if you're writing, you know, code that's distributed via inter-process communication and you want to write in a language that works fine via that mechanism, then yeah, probably
Starting point is 01:11:42 not a big deal. If you're writing a library that needs to be performance oriented that other people are going to call, you probably want it, or you're going to have to sign up to maintaining wrappers into the language that everybody uses. So if you're working at a video game studio and someone needs a bullet physics library, you're not going to be writing that in Java. Yeah, that makes sense. So sometimes it matters. library, you're not going to be writing that in Java. Yeah, that makes sense. So sometimes it matters.
Starting point is 01:12:10 And if you're writing a script that's just a one-off, like I mostly care about the data product, again, probably doesn't matter. And for me, though, for code that is going to be needing to be maintained and sort of stable in production and known and code reviewed, you need to have at least some body of knowledge, you know, on your team or commitment from everybody that they are okay with that language choice. So if somebody decides, you know, I'm going to go write this widget in, you know, language foo, and nobody else really is interested or wants to do it, you end up with
Starting point is 01:12:42 this problem, which I see happen sometimes, where that person goes and writes that tool and then later they leave the team and then you need to go use that tool and it's always everybody dreads it because it's like oh it's written in foo and nobody knows how to go in and fix it or and it breaks all the time and you end up with this problem of like you've saddled that team with something they didn't really want yeah that's a really good point actually if you want, if you want to be passive aggressive at work as a software engineer, probably the most passive aggressive thing you can do, like that's the most destructive, is to write something in a very obscure language. We had someone write, we had this system, and like Patrick says, is meant to hook into
Starting point is 01:13:25 not necessarily hook in but it's meant to it was meant as a library where people would would uh many people would add their own flavor to it right so think of it as sort of an sdk like open gl or something and you would the plan was to build something in open gl or in this case in this library in this sdk And the person wrote it in Haskell. And the issue there was, you know, now anyone who wanted to use our system had to learn this language. And so, you know, in the context of many alternatives, most people just said, well, I'm not going to learn a whole language when I could just use some alternate system that gets me, let's say, 90% of the way there,
Starting point is 01:14:05 but, you know, I can write it in Python. And so that person, after spending over a year writing the SDK, had to completely rewrite it in Python. And that was extremely painful. So, yeah, I think it's a really good point is you have to really look at your audience. And, you know, if you're at a company where everyone's writing in Haskell, then, you know, you really need to think about that before you make an argument. Like, unless, I mean, like, as Patrick said, like, if you have to do a physics engine, you're not going to do that. Actually, I don't know how fast Haskell is.
Starting point is 01:14:39 Let's say, I don't know, basic or something. I don't know. Python. You're not going to write like a physics engine in pure Python. But, you know, I mean, once you get rid of the kind of very obvious constraints, right, you should think really carefully before you do anything other than the, you know, most common language that your team or your organization is using, right? I mean, just don't underestimate, like try like try to really avoid having that argument you know and on the flip side if someone you know if 90 of your code base is python and someone wants to write something in erlang um you know i mean there there needs to be like a
Starting point is 01:15:16 really solid reason for that and sometimes there are but then i think what jason describes the right way i think you build a little prototype you try to shop it around to the team and you know say like hey i went and did this thing like look at advantage x y and z you know that this is really going to be a game changer for us yep yeah exactly like there has to be real tangible benefits yeah yeah so tabs versus spaces we brought this up and got emails about this from people so people are very passionate actually it's in the in the silicon valley show tabs versus spaces yeah um this is a debate just avoid it style you should have style guidelines uh and you know you should i i'm a big fan of like
Starting point is 01:15:59 pick something and stick to it and new people come to the team they don't like them they don't want them it's it sucks it's a struggle but everyone come to the team. They don't like them. They don't want them. It's, it sucks. It's a struggle, but everyone needs to have, you don't have to make them overly restrictive, but you need some guidance on not writing bad code. And if you don't have it written down, everybody's going to argue about it,
Starting point is 01:16:17 every code review. So it's better to write it down and like just hash it out. And hopefully your manager is technical enough to just come in and make a consensus decree yeah i mean i don't know if if this is just a benefit of python or if this is the way the team works but the team i'm on now this the um they have a very complicated um automatic style like a prettier um and the cool thing is basically the the team philosophy is if the automatic system whatever it does is is the truth so in other words like if you can write now you can obviously like you know uh you could write like really obscure obfuscated code and and you
Starting point is 01:17:01 could trick the the prettier right but uh you know no one's really done that yet hasn't really come up even once and then basically yeah the prettier is so sophisticated that people just they write code however they want and then once they run this it's like an auto formatter exactly yeah yeah it just automatically you know adheres to a certain style and um yeah i really like that i I mean, I honestly, I used to really hate getting style feedback on my changes. And I think the reason why is I always felt like, you know, it made me feel like just like this cog in the machine. It's like, oh, you know, this should be, you know, indented a little bit more or something.
Starting point is 01:17:41 And that kind of went away when i like clang format or uh you know the pie flake eight or whatever when these things came out that basically just did all of this for us it's like i mean in your case do you do you ever have to actually do this style manually like what kind of decisions you know but i mean somebody has to decide which of like you know i read a lot of c++ code like there are many different c++ style guidelines like should should you put a space before and after a plus operator you know the big one that always comes up is where should the pointer the asterisk go should it go on the variable should it go on the type should it go with the space on both sides it's got to go on the type right no it definitely should go on the variable we should it go on the type? Should it go with the space on both sides? It's got to go on the type, right?
Starting point is 01:18:25 No, it definitely should go on the variable. We're not getting on this. Hang on, hang on. No, stop, stop, stop. We will completely derail. We'll prove this point. You can create, there are legitimate arguments for both. So it ultimately just comes down to an opinion.
Starting point is 01:18:39 There isn't a logical, obvious. Well, I always felt like the pointer is what changes the type. But you can put multiple on a single line so if you do like int star a comma b b wouldn't be a pointer type oh well that's true yeah so then it's not it's not modifying the type in that way that makes sense i never thought about that yeah i mean that's the most succinct one i can give there's other more nuanced right okay we're not going to get off on this um the you know lots of style guidelines and i think this is an argument that gets had and this is one of the things where when you join a new team and they either don't have a style or they have a style you disagree
Starting point is 01:19:16 with it's a really tough situation you really got to weigh your options about what are you going to do so if there's no style i was in an instance where I joined a team, didn't really have a consistent style. They weren't really adhered to it. And I came in and, you know, sort of was the one who began enforcing the style. And it took a lot of goodwill out of my sale from being the new person on the team to coming in and having my boss sort of tell me that, yeah, that's what I want you to do. And, you know, have to go in and tell people, yeah, the way you've been writing code for the last two years is bad and it's confusing and doesn't look good. Um, and so if you go on a team and they have a style guideline,
Starting point is 01:19:54 I would say, try to go with it for some period of time and try to, if there's really things you think don't make sense or are inconsistent or aren't great, like try to work on them like as small things, um, as opposed to just coming in and like erupting with this sucks. This is a completely wrong. You guys are horrible. Don't do that. Yeah. That makes sense. I think, you know, like any, you know, uh, I guess artists, right. I mean, you can think of it as an art, uh, you know, there's a stereotypical, like the artist is super self-critical and critical of the medium and things like that. And it's easy for people to be that way. And so it's really important. I think the overarching lesson, if I could say one thing, is that it's really important to step back and say, okay, take myself out of the equation.
Starting point is 01:20:39 And think about, is this really that big a deal? So, yeah, another thing is, you know, IDEs or text editors. This is less of an issue now that there is, you know, automatic styling. Because a lot of the, there might be some people who, you know, where the IDE is actually carrying a lot of weight. Like you have the build system integrated with the IDE. Yeah, this depends a lot on the the project whether this is a personal choice or a team choice yeah if you're building an iOS app or something for example you might be well there you might not have a choice at all so there's not really an argument but in some cases like you said
Starting point is 01:21:13 if there's like a plugin that needs to be hooked into a custom build system or something and if your team is creating or maintaining that plugin and whether you maintain it for IDE A or B or sometimes like for people will be really into Emacs and have a complex set of Emacs plugins uh yeah that's right and uh you know they share that around the team and everybody uses it and if you're trying to use VI yeah that's anyways yeah yeah I mean this is more I think this is mostly a personal opinion like oops right over time oh no i was just gonna say like yeah this this this argument is pretty rare especially nowadays that the ide like before you know
Starting point is 01:21:50 like visual studio would also be your build system um now people don't really do that anymore and and so especially now if you want to do continuous integration or something like that you need to have a build system that's sort of orthogonal to your, or separate from your editor. And so, yeah, I mean, at most jobs, you should be able to use whatever ID you want. So I guess the only argument would be, you know, like how much work is it going to take and maintenance is it going to take to let you use the editor you want? And, you know, will everyone around you, so you might be in a position where you need everyone around you to make, let's say, a small sacrifice, like, for example, learning make so that you don't have to be forced to use Visual Studio, for example. And I think this is actually I would echo Patrick's advice from earlier that basically you don't come in on day one and say, everyone, we're going to switch to make. So you're going to have to bite the bullet and do some Visual Studio, at least in the beginning. But one thing that would be good is,
Starting point is 01:22:49 you know, take the initiative to, you know, redo your entire build system and make, present that to the team and say, look, we have something, you know, I can run it on in the cloud, has all these advantages. You know, also I also be able to use any editor I want. But they kind of show up, show up with a solution. I think that makes a really big difference. Now, that's going to take a lot of energy and it might be wasted. But I mean, if you're that passionate about, you know, using Emacs, for example, then that, that, that's, um, that's a risk you want to take, right? So, so showing up with a solution is always, um, a way, way better. Um, even if you
Starting point is 01:23:31 have to sort of do it, you know, on your own time, um, you know, like, like, you know, on the, if you have to come into work on a weekend or something to do it, it might be worth it because, because it could, you know, kind of pivot the whole team then so we're running quite a bit long but uh let's talk a little bit about how if you do get yourself into one of these arguments some uh some good guidelines to stand by yeah that makes sense i mean i think uh we covered a lot of it but just to summarize um you know really you know and be honest with yourself and really reflect on why you want what you want. There are some people who you could see them, they show up on day one, they're like, oh, everything has to be written in Scala or something like that. And really think about what do you, and be honest with yourself.
Starting point is 01:24:21 For example, maybe you want to use Scala because you want to learn Scala. Maybe you want to use scala because you want to learn scala maybe you want to learn scala it's a skill for you and you have a chance to learn it um while you're working so basically like learn it for free like on someone else's dime and and now have be more marketable right but i mean that could that's fine you know but but and you obviously you have to you know speak with some tact and you know, just go into the meeting saying, hey, I want to learn a new language on your dime, boss. But but beyond but, you know, internally, be honest with yourself. Right. So know what your values are, why you want the things you do and have clarity there. Also, you know, think about the compromises or the alternatives. Right. Like what is alternative?
Starting point is 01:25:05 What are you going to lose? And that's going to really tell you how much energy you need to spend or risk, let's say, on getting the change you want, right? So this gets back to the whole building the prototype and make, right? Like if coding in Visual Studio is so frustrating to you that you're going to lose a lot of productivity and it's going to frustrate you, it's going to make you not like this job,
Starting point is 01:25:30 then it's worth spending an extra 40 hours off the clock porting the whole thing to make and trying to convince everyone to do that, right? If you think about it, then you might think, oh, it's not that big a deal. I'll just bite the bullet and do Visual Studio studio right but but figure that out kind of beforehand um and the second part of that is is you know when you have this argument and the argument could be impromptu where you don't really have time to figure it out right but whether you've had time or not um don't necessarily like force a decision right away. Like this isn't, you know, like a criminal
Starting point is 01:26:06 trial or something, right? So, you know, have a discussion about it, try to keep things open-ended, at least initially, you know, go home, think about what was said, think about how that might change, you know, the state and the compromises you have to make, and then show up the next day sort of with the next sort of evolution of this argument, right? And, you know, kind of slowly converge to a solution that's often way better than, and if you have that expectation
Starting point is 01:26:35 that this is a convergence process and not like a jury, that's really going to sort of change the attitude and you could actually, you could lose the argument and have to use Visual Studio to extend the example, but actually gain a lot of respect based on sort of how you handle yourself in that situation. Yeah, I think that's one we don't have on here, but picking your battles, even though technically, right, you might be correct
Starting point is 01:27:01 across all of these things. People are, you're not going to be a very popular person if you're fighting everybody on every front all the time yep yeah there's this saying like uh you know don't be dead wrong but don't be dead right right so so i think that the metaphor that they use is you know you're driving on the highway uh you know some like country highway two-lane highway and a semi is coming the other way, they're driving on the wrong side of the road, right? You don't just like hit the semi head on just on principle, you know? And so it's the same thing here where, you know, at the end of the day, like part of this is just respecting other people's values. And so if the whole team has one set of values,'s the semi right and and
Starting point is 01:27:47 and whether they're right or not you're gonna have to handle that situation sort of very delicately and other thing i'm know i struggle with sometimes is be careful to pay attention to other people's demeanor their feelings even if you're having a technical argument some people become passionate and are okay having a heated debate and other people begin to have a very personal reaction and don't necessarily take well to having their choices questioned or something. Even if you're well-intentioned, even if you don't mean it that way, but you know, do it. And also the venue for having these discussions you know if you have a weekly whole team meeting some people might be fine discussing stuff in that other people might
Starting point is 01:28:29 rather you talk to them at their desk or schedule a special meeting or have this discussion over email where they can think about their responses um and be slight you know be sensitive as you can to how other people prefer to have these exchanges. Yeah, that totally makes sense. But definitely always do them loudly in the middle of your building. Like that's the like definite goal. Yeah, that's right. Oh man, we actually just decided we moved
Starting point is 01:28:57 and the new desk area, we got there, we're like, this is amazing. We're all super excited. And it's even a new building so we don't really have any bearings um we're so unbelievably excited and then we realized that we sit right over the the restaurant a restaurant and uh around noon it's just like a total madhouse you can't hear anything and i never realized it's the first time i've really been in this position.
Starting point is 01:29:25 But, yeah, noise pollution is, like, actually a huge problem. But, yeah, so don't have your big arguments in the middle of the room. Also, as I said before, like, you know, converge slowly. You know, there's very few things you actually need to rush. Yeah, you don't, like, need to decide whether you're going to rewrite the whole thing in Java today. That almost never needs to happen. And so, as Patrick said, some people, I mean, it might be a combination of shyness, but it also might be some people just, they don't have, they just need to think about things, right? And everyone, you know, when they sleep on things, they come back with sort of a slightly different perspective right and so you want to take
Starting point is 01:30:07 advantage of of of that latent perspective or push for your victory yeah you know yeah if you have the majority that just try to close the deal right away i'm sorry it's like buying a used car or something um cool well yeah let us know i'm really curious to think uh to hear what you think about this episode um you folks out there um you know we this is i would say this is like a completely different uh you know style of of episode for us because this is just very ad hoc um we're really just kind of relaying like life experiences and let us know what you think. So, you know, we have the interview format. We have the something where it's like a very specific subject format, like machine learning or C++ or something like that. This is almost like a,
Starting point is 01:30:55 I look at this as almost like a third format. And so I'm really curious, this is sort of us dipping our toe in this. Let us know what you think, if this was interesting to you. You're based on the time we can clearly talk about this forever. So that part was good. But let us know if you found it entertaining. Till next time. See you later. The intro music is Axo by Vynar Pilot.
Starting point is 01:31:25 Programming Throwdown is distributed under a Creative Commons Attribution Share-A-Like 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 share alike in kind.

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