Jeff Atwood: Stack Overflow and Coding Horror | Lex Fridman Podcast #7
the following is a conversation with Jeff Atwood he is the co-founder of Stack Overflow Stack Exchange websites that are visited by millions of people every single day much like with Wikipedia it is difficult to understate the impact on global knowledge and productivity that these networks of sites have created Jeff is also the author of the famed blog coding horror and the founder of discourse an open-source software project that seeks to improve the quality of our online community discussions this conversation is part of the MIT course on artificial general intelligence and the artificial intelligence podcast if you enjoy it subscribe on youtube itunes or your podcast provider of choice or simply connect with me on twitter at Lex Friedman spelled Fri D and now here's my conversation with Jeff Atwood having co-created and managed for a few years the world's largest community of programmers in Stack Overflow ten years ago what do you think motivates most programmers is it fame fortune glory process of programming itself or is it the sense of belonging to a community it's puzzles really I think it's this idea of working on puzzles independently of other people and just solving a problem sort of like on your own almost although you know nobody really works alone and programming anymore but I will say there's that there's an aspect of sort of hiding yourself away and just sort of beating on a problem until you solve it like brute force basically to me it's what a lot of programming is is like the computer so fast right you can do things that would take forever for a human but you just do them like so many times and so often that you get the answer right you're saying just the pure act of tinkering with the code yes is is the thing that drives most probably the joy the struggle balance within the joy of overcoming the the brute-force process of pain and suffering that eventually leads to something that actually works well data is fun too like there's this thing called the the shuffling problem like the naive shuffle that most programmers right has a huge flaw and there's a lot of articles online about this because it can be really bad if you're like a casino and you have an unsophisticated programmer writing your shuffle algorithm there's surprising ways to get this wrong but the neat thing is the way to figure that out is just to run your shuffle a bunch of times and see like how many orientations of cards you get you should get an equal distribution of all the cards and with the naive method of shuffling if you just look at the data if you just brute force and say okay I don't know what's gonna happen you just write a program that does it a billion times and then see what the buckets look like of the data and the Monty Hall problem is another example of that where you have three doors and somebody gives you information about another door so the correct answer is you should always switch and the Monty Hall problem which is not intuitive and people it freaks people out all the time right but you can solve it with data if you write a program that does the Monty Hall you know game and then never switches and always switches just compare you would immediately see that you don't have to be smart right you know to figure out the answer algorithmically you can just brute force it out with data and say well I know the answer is this because I ran the program a billion times and these are the data buckets that I got from it right so empirically find it but what's the joy of that what so for you for you personally outside of family what motivates you in this process yes well to be honest I don't really write a lot of code anymore like what I do at discourse is like manager II stuff which I always kind of despised right like as a programmer you think of managers as people who don't really do anything themselves but the weird thing about code is like you realize that like language is code like the ability to direct other people lets you get more stuff than you've done then you could by yourself anyway you should write languages code languages community communication yeah those are humans yes you can think of it as a systemic so what what is it like to be what makes before we get into program it what makes a good manager what makes a good leader well I think a leader it's all about leading by example first of all like sort of doing and being the things that you want to be now this can be kind of exhausting particular you have kids because you realize that your kids are watching you like all the time like even in ways that you've stopped seeing yourself like the hardest person to see on the planet is really yourself right it's funnier to see other people and and and make judgments about them but yourself like your for biased you don't actually see yourself the way other people see you often you're very very hard on yourself in a way that other people really aren't going to be so you know that's one of the insights is you know you've got to be really diligent about thinking like am i behaving in a way that represents how I want other people to behave right like leading through example there's a lot of examples of leaders that really mess this up right like they make decisions that are like wow that's why would you know it's just it's it's it's a bad example for other people so I think leading by example is one the other one I believe it is working really hard now I don't mean like working exhaustively but like showing a real passion for the problem like you know not necessarily your solution the problem but the problem itself is just one that you really believe in like with discourse for example the problem that we're looking at which is my current project is how do you get people in groups to communicate in a way that doesn't like break down into the howling of wolves right like how do you deal with trolling not like technical problems of how do I get people to post paragraphs how do I get people to use bold how to get people to use complete sentences although those are problems as well but like how do I get people to get along with each other right like and then solve whatever problem it is they set up to solver you know reach some consensus on discussion or just like not hurt each other even right like maybe it's a discussion doesn't really matter but are people like yelling at each other right and why right like that's not the purpose of this kind of communication so I would say you know leadership is about you know setting an example you know doing the things that represent what you want to be and making sure that you're actually doing those things and there's a trick to that too because the things you don't do also say a lot about what you are yeah so let's pause on that one so those two things are fascinating so how do you have as a leader as that self-awareness so you just said it's really hard to be self-aware so for you personally or maybe for other leaders you've seen or look up to how do you know the both that the things you're doing are the wrong things to be doing the way you speak to others the way you behave and the things you're not doing how do you how do you get that service there's two aspects that one is like processing feedback that you're getting so how you get feedback well right sorry are you getting feedback right like so one way we do it for example a discourse we have three co-founders and we periodically talk about decisions before we make them so it's not like one person can make a mistake or like that's you know there can be misunderstanding things like this so it's part of like group consensus of leadership is like it's good to have I think systems where there's one leader and that leader has the rule of absolute law are just really dangerous and my experience for communities for example like a few of communities run by one person that one person makes all the decisions that person's gonna have a bad day something could happen to that person you know something you know there's a lot of variables so like at first when you think about leadership haven't have multiple people doing leadership and have them talk amongst each other so giving each other feedback about the decisions that they're making and then when you do get feedback I think there's that little voice in your head right like or your gut or wherever you want to put it in your putti I think that voice is really important like I think most people who have any kind of moral compass or like want to do most people want to do the right thing I do believe that I mean there might be a handful of sociopaths out there that don't but most people they want other people to think of them as a good person and why wouldn't you right like do you want people to despise you I mean that's just weird right so you have that little voice that sort of the angel and devil on your shoulder sort of talking to you about like what you're doing how you're doing how does it make you feel to make these decisions right and I think having some attunement to that voice is important but you said that voice also for I think this is a programmer situation to what sometimes the devil on the shoulder is a little a little too loud so you a little too self-critical for a lot of developers and especially when you have introverted personality how do you struggle with the self-criticism other criticism others so one of the things of leadership is to do something that's not potentially unpopular or what people doubt you and you still go through with the decision so what's that balance like I think you have to walk people through your decision-making right like if if this is where blogging is really important communication is so important again code language is just another kind of code is like here is the program by which I arrived at the conclusion that I'm gonna reach right it's one thing to say like this is decisions final deal with it right that's not usually satisfying people but if you say look you know we've been thinking this problem for a while here's some stuff that's happened here's what we think is right here's our goals here's one achieve and we've looked at these options and we think this of available options is the best option people be like oh okay alright maybe I don't totally agree with you but I can kind of see where you're coming from and like see it's not just arbitrary decision delivered from a cloud of flames in the sky right it's like a human trying to reach some kind of consensus about you know goals and their goals might be different than yours that's completely legit right but if you're making that clear it's like oh well the reason we don't agree is because we have totally different goals right like how could we agree it's not that you're a bad person it's that we have radically different goals in mind when we started looking this problem and the other one you said is passion so or hard work sorry well those are tied together to me out in my mind say Hardware compassionate like for me like I just really love the problem discourse is sending out to solve because in a way it's like there's a there's a vision of the world where it all devolves into Facebook basically owning everything and every aspect of human communication right and this has always been kind of a scary world for me um first cuz I don't I think Facebook is really good at execution I gotta compliment them they're very competent in terms of what they're doing but Facebook has not much of a moral compass in terms of Facebook cares about Facebook really they don't really care about you and your problems what they care about is how big they can make Facebook right is that you're talking about the company or just a mechanism how Facebook works kind of both really right like and the idea with discourse the reason I'm so passionate about it is because I believe every community should have the right to own themselves right like they should have their own software that they can run that belongs to them that's their space where they can set the rules and if they don't like it they can move to different hosting or you know whatever they need they need to have it can happen but like this this idea of a company town we're all human communication is implicitly owned by whatsapp Instagram and Facebook and its really disturbing too because Facebook is really smart like I said they're great at execution buying and what's happened buying Instagram were incredibly smart decisions and they also do this thing on if you know but they have this VPN software that they give away for free on smartphones and it indirectly feeds all the the data about the traffic back to Facebook so they can see what's actually getting popular through the VPNs right they have low level access to the network data because users have let them have that so ok let's let's take a small pause here first of all discourse can you talk about can you lay out the land of all the different ways you can have community so there's Stack Overflow that you've built there's discourse yeah so Stack Overflow is kind of like a wiki Wikipedia you talk and it's a very specific scalpel very focused so what is the purpose of discourse and maybe contrast that with Facebook first of all say what is this course yeah start from the beginning well let me start with the very being so Stack Overflow is very structured wiki style QA for programmers right and that was the problem we first worked on it when we started we thought it was discussions because we looked at like programming forums and other things but we quickly realized we were doing QA which is a very narrow subset of human communication sizes so when you start Stack Overflow you thought you didn't even know the QA you know it would be well we didn't know we did we had an idea of like ok these are things that we see working online we had a goal right our goal was there was this site experts exchange with a very unfortunate thank you for killing that site yeah I know right like a lot of people don't remember it anymore which is great like that's the measure of success when people don't remember the thing that you were trying to replace then you've totally won so it was a place to get answers to programming questions but it wasn't clear if it was like focused Q&A if it was a discussion there were plenty of programming forums so we weren't really sure we were like ok we'll take aspects of Digg and reddit like voting we're very important reordering answers based on votes wiki style stuff of like being able to edit post not just your posts but other people's post to make them better and keep them more up-to-date ownership of blogging of like ok this is me I'm saying this is my voice you know this is the stuff that I know and you know you give your reputation accrues to you and it's pure recognition so you asked earlier like what motivates programmers I think peer recognition motivates them a lot that was one of the key insights of Stack Overflow was like recognition from your peers is why things get done initially moneyness well your boss but like your peers saying wow this person really knows their stuff has a lot of value so the reputation system came from that so we were sort of frankensteining a bunch of stuff together in Stack Overflow of like stuff we had seen working and we knew worked and that became Stack Overflow and over time we realized it wasn't really discussion it was very focused questions and answers there wasn't a lot of room on the page for let me talk about this tangential thing it was more like ok he's an answering question is it clarifying the question or could it be an alternative answer to the same question because there's usually more than one way to do it in program there's say five to ten ways and one of the patterns we got into early on stackoverflow was there are questions where there would be like hundreds of answers more like Wow how can there be a programming question with 500 200 500 answers and we looked at those we realized those were not really questions in the traditional sense they were discussions it was stuff that we allowed early on that we eventually decided wasn't allowed such as what's your favorite programming food you know what's the funniest programming cartoon you've seen and we had to sort of backfill oh into rules about like why isn't this allowed such as is this a real problem you're facing like nobody goes to work and says wow I can't work because I don't know what the funniest programming cartoon is so sorry can't compile this code now right it's not a real problem you're facing in your job that was run rule and ii like what can you really learn from that it's like what i call accidental learning or reddit style learning where you just acknowledge browse some things oh wow you know did you know tree frogs only live three years I mean I just made that up I don't know that's true but uh I didn't really set out to learn that I don't need to know that right it's an accidental learning it was more intentional learning we were like okay I have a problem and I want to learn about stuff around this problem having right and it could be theory could be compiler theory it could be other stuff but I'm having a compiler problem hence I need to know the compiler theory that aspect of it that gives me the the gets me to my answer right so kind of a directed learning so we had to backfill all these rules as we sort of figured out what the heck it was we were doing and the system came very strict over time and a lot of people still complain about that and I wrote my latest blog entry what the Stack Overflow want to be I wanted to be when it grows out celebrating the 10-year anniversary yeah yeah so ten years and it that system is trended towards strictness there's a variety of reasons for this one is people don't like to see other people get reputation for stuff as they view they view as frivolous which I can actually understand because if you saw a program or got like five hundred up votes for funniest programming cartoon or funniest comment they had seen in code it's like well why do they have that reputation is because they wrote the joke probably not I mean if they did maybe or the cartoon right they're getting a bunch of reputation based on someone else's work that's not even like programming it's just a joke right it's a related to birth so you begin to resent that like well that's not fair and it isn't at some level they're correct I mean I empathize because like it's not correct you get reputation for that versus here's a really gnarly regular expression problem and here's a really you know clever insightful you know detailed answer laying out oh here's why you're seeing the behavior that you're seeing here let me teach you some things about how to avoid that in the future that's that's great like that's gold right you want people to grab a petition for that not so much for wow look at this funny thing I saw alright great so there's this very specific Q&A format and then take me through the journey towards this course in Facebook and Twitter so you start at the beginning that Stack Overflow evolved to have a purpose so where does this course this passion you have for creating community for discussion what is that when was that born and well part of it is based on the realization the Stack Overflow is only good for very specific subjects where they're sort of it's it's based on data facts and science where answers can be kind of verified to be true another form of that is there's the book of knowledge like the tome of knowledge that defines like whatever it is you can refer to that book and I'll give you the answer there has to be it only works on subjects where there's like semi clear answers to things that can be verified in some form now again there's always more than one way to do it there's complete flexibility and system around that but where it falls down is stuff like poker and Lego like we had if you go to Stack Exchange calm we have an engine that tries to launch different Q&A topics right and people can propose Q&A topics sample questions and and if he gets enough support within the network we launch that Q&A site so someone's we launched where poker and Lego and they did horribly right because I mean there might still be there lingering on in some form but it was an experiment this is like a test right and some subjects work super well in the stack engine and some don't but the reason Lego and Poker don't work is because they're so social really it's not about you know what's the rule here in poker it's like well you know what kind of cigars do we like to smoke while playing poker or you know what's what's a cool set of cards to use when playing poker or you know what some strategies like say I have this hand come up with some strategies I could use it's more of a discussion around like what's happening like with Lego you know same thing like here's this cool Lego set I found look how awesome this isn't like yeah that's freaking awesome right it's not question right there's all these social components discussions that don't fit at all like we literally have to just allow those in Stack Overflow kids it's not about being social it's about problems that you're facing in your work that you need concrete answers for right like you have a real demonstrated problem that's sort of blocking you in something nobody's blocked by you know what should I do when I have a straight flush right like blocking problem in the world it's just an opportunity to hang out and discuss so this course was a way to address that and say look you know discussion forum software ahead was very very bad and when I came out of Stack Overflow until late or early 20 2013 2012 it was still very very bad I've expected it improved and in the four years since I last looked but it had not improved at all and I was like well that's kind of terrible because I love these communities of people talking about things that they love you know that there's just communities of interest right and there's no good software for them like startups would come to me and say hey Jeff I wanna you know I have this startup here's my idea and the first thing I would say them is like well first why are you asking me like I don't really know your field right let it's necessarily like why aren't you asking like the community like the people that are interested in this problem the people that are using your product why aren't you talking to them and then they say Oh a great idea like how do I do that and then that's when I started playing sad trombone because I realized all the software involving talking to your users customers audience patrons whatever it is it was all really bad you know I was like stuff that I would be embarrassed to recommend to other people and yet that's where I felt they could get the biggest and strongest most effective input for what they should be doing with their product right it's from their users from their community right that's what we did on Stack Overflow so what we're talking about with forms the what is it the dark matter of the Internet it's still I don't know if it's still but for a longest time it has some of the most passionate and fascinating discussions and what's the usual structure there's usually what it's a it's linear so it's sequential it's you're posting one after the other and there's pagination so it's every there's a 10th post and you go to the next page and that format still is used by like I'm we're doing a lot of research with Tesla of vehicles and there's Tesla Motors Club forum which is extremely really wanted to run that actually they pinged us about I don't think we got but I really would like to gotten that one but they've started before even 2012 I believe I mean they've been running for a long time it's still an extremely rich source of information so what what's broken about that system and how are you trying to fix it I think there's a lot of power in in connecting people that love the same stuff around that specific topic meaning Facebook's idea of connection is just any human that's related to another human right like like through friendship or you know any other reason Facebook's idea of the world is sort of the status update right like a friend of yours did something ate at a restaurant right whereas discussion forums were additionally around the interest graph like I love electric cars specifically I love Tesla right like I love the way they approach the the problem I love the style of the founder I just love the the design ethic there's a lot to like about Tesla if you saw the oatmeal he did a whole love comic to Tesla and it was actually kind of cool because I learned some stuff he was some how great Tesla cars were specifically like how they were built differently and he went into a lot of great detail that was really interesting to me that oatmeal post if you read it is the genesis of pretty much all interest communities I just really love this stuff's like for me devilish yo-yos right like I'm into the yo-yo communities and there's these interest communities are just really fascinating to me and I feel more connected to the yo-yo communities than I do to you know friends that I don't see that often right like to me that the powerful thing is the interest graph and Facebook kind of dabbles in the interest graph I mean they have groups you can sign up for groups and stuff but it's really about the relationship graph like I'm this is my coworker this is my relative this is my friend but not so much about the interest so I think that's the the linchpin of which forums and communities are built on that I personally love like I I like I said leadership is about passion right and being passionate about stuff is is a really valid way to look at the world and I think it's a way a lot of stuff in the world gets done like I once said someone described me as he's like Jeff you're a guy who you just get super passionate about a few things at a time and you just go super team from those things and I was like oh that's kind of right that's kind of what I do I'll get into something and just be super into that for a couple years or whatever I just learn all I can about it and go super deep in it and that's how I enjoy experiencing the world right like not being shallow on a bunch of things but being really deep on a few things that I'm interested in so forums kind of unlocked that right and you know you don't want a world where everything belongs to Facebook at least I don't I want a world where communities can kind of own themselves set their own norms set their own rules control the experience because commit community is also about ownership right like if if you're meeting at the Barnes & Noble every Thursday at Barnes & Noble says get out of here you guys don't buy enough books well you know you're kind of hose right Barnes and Noble owns you right like you can't but if you have your own meeting space you know your own Clubhouse you can set your own rules decide what you want to talk about there and just really generate a lot better information than you could like hanging out at Barnes & Noble every Thursday at 3:00 p.m. right so that's kind of the vision of discourse is a place where it's it's fully open source you can take the software you can saw it anywhere and you know you and a group of people can go deep on whatever it is that you're into and it this works for startups right startups are a group of people who go super deep on a specific problem right and they want to talk to the comedian's like well install this course right that's what we do at this course that's what I did a stack overflow I spent a lot of time on meta stack overflow which is our internal well public community feedback site and just experiencing what the users were experiencing right because they're the ones doing all the work in the system and they had a lot of interesting feedback and there's that 90/10 rule of like 90% of the feedback you get is not really actionable for a variety reasons it might be bad feedback it might be crazy feedback it might be feedback you just can't act on right now but there's 10% of it that's like gold it's like literally gold and diamonds where it's like feedback of really good improvements to your core product that are not super hard to get to and actually make a lot of sense and my favorite is about 5% of those stuff I didn't even see coming it's like oh my god I never even thought of that but that's a brilliant idea right and I can point to so many features of Stack Overflow that we drive from metastatic overflow feedback and meta discourse right same exact principle at discourse you know we're getting ideas from the comedian's like oh my god I never thought of that but that's fantastic right like I love that relationship with the community from having built these communities what have you what have you learn about what's the process of getting a critical mass of members in a community is it luck skill timing persistence what is is it the tools like discourse that empower that community what what's the key aspect of starting one guy a gal and then building it to 210 and 100 and a thousand so on I think we're starting with an end of one I mean I think it's persistence and and also you have to be interesting like somebody I really admire once that's something that I always liked about blogging he's like here's how you blog you have to have something interesting to say and have an interesting way of saying it right yeah and then do that for like 10 years so that's the genesis is like you have to have sort of something interesting to say that's not exactly what everyone else is saying and an interesting way of saying which is another one same kind of entertaining way of saying it and then as far as growing it it's like ritual you know like you have to like say you're starting a blog you have to say look I'm gonna blog every week three times a week and you have to stick to that schedule right because until you do that for like several years you're never gonna get anywhere like it just takes years to get to where you need to get to and part of that is having the discipline to stick with the schedule and it helps you get if it's something you're passionate about this won't feel like work like I love this I could talk about this all day every day right you just have to do in a way that's interesting to other people and then as you're growing the community that pattern of participation within the community of like generating these artifacts and inviting other people to help you like collaborate on these artifacts like even in case of blogging like I felt in the early days of my blog which I started 2004 which is really the genesis of Stack Overflow if you look at all my blog it leads up to Stack Overflow which was I have all this energy in my blog but I don't like 40,000 people were subscribing to me and I was like I want to do something and then then I met Joel and said hey Joel I want to do something take this ball of energy for my blog and do something and all the people reading my blog saw that's oh cool you're involving us you're saying look you're part of this community let's build this thing together like they pick the name like we voted on the name for Stack Overflow on my blog like we came and naming is super hard first why the hardest problem computer science is coming with a good name for stuff right yeah but there you can go back to my log there's the poll where we voted and Stack Overflow became the name of the site and all the early beta users are stuck over we're audience of my blog plus Joel's blog right so we started from like if you look at the Genesis okay I was just a programmer who said hey I love programming but I have no outlet to talk about it so I'm just gonna blog about it because I don't have enough people to work to talk to about it because at the time I worked a place where you know programming wasn't the core output of the company was a pharmaceutical company and I just love this stuff you know to an absurd degree so I was like I'll just blog about it and then I'll find an audience and eventually found an audience eventually I found Joel and eventually built Stack Overflow from that one core of activity right but it was that repetition of feeding back in feedback from my blog comments feedback from Joel feedback from them the early Stack Overflow community when people see that you're doing that they will follow along with you right they say look cool you're here in good faith you're actually you know not listening to everything because I'm impossible that's impossible but you're actually you know waiting our feedback and what you're doing because I'm and why wouldn't I because who does all the work on Stack Overflow me Joel no it's the other programmers that are doing all the work so you gotta have some respect for that and then you know discipline around look you know we're trying to do a very specific thing here on Stack Overflow we're not trying to solve all the world's problems we're trying to solve this very specific QA problem in a very specific way not because we're jerks about it but because these strict set of rules help us get really good results right and programmers that's an easy sell for the most part because programmers are used to dealing with ridiculous systems of rules like constantly that's basically their job so they're they're very oh yeah super strict system of rules that lets me get on what that's programming right that's what Stack Overflow is so so you're making it sound easy but in 2004 let's go back there in 2004 you started the blog I'm quoting horror was it called that at the beginning at the very beginning was one of the smart things I did it's from a book by Steve McConnell code complete which is where my favorite programming but still probably my number one programming book for anyone to read one of the smart things I did back then I don't always do smart things when I start stuff I contacted Stephen said hey I really like this it was a sidebar illustration indicating danger in code right coding horror was like watch out and I love that illustration cuz it spoke to me because I saw that illustration go oh my god that's me like I'm always my own worst enemy like that and a key insight and programming is every time you write something think how am I gonna screw myself because you will constantly right so that that icon was like oh yeah I need to constantly hold that mirror up and look and say look you're very fallible you're gonna screw this up like how can you build this in such a way that you're not gonna screw it up later like how can you get that discipline around making sure at every step I'm thinking through all the things that I could do wrong or that other people could do wrong because that is actually how you get to be a better programmer a lot of times right so that sidebar illustration I loved it so much and I wrote Steve before I started my belonging say hey can I have permission to use this cuz I just really likes illustration and Steve was kind enough to give me a portion to do that and just continues to give me permission so yeah really that's awesome but in 2004 you started this blog you know you look at it Stephen King this book on writing or Steven Pressfield the war of art book I mean it seems like writers suffer I mean it's a hard process of writing write is there's gonna be suffering I mean I won't kid you like well the work is suffering right like doing the work like even when you're every week you're like okay that blog post wasn't very good or you know people didn't like it or people write said disparaging things about it you have to like have the attitudes like you know no matter what happens I want to do this for me right it's not about you it's about me I mean in the end it is about everyone because this is how good work gets out into the world but you have to be pretty strict about saying like you know I'm selfish in the sense that I have to do this for me you know you mentioned Stephen King like his book on writing but like one of things I do for example when writing is like I read it out loud one of the best pieces of advice for writing anything is read it out loud like multiple times and make it sound like you're talking because that is the goal of good writing it should sound like you said it with with slightly better phrasing because you have two more time to think about your saying but like it should sound natural when you say it and I think that's probably the single best writing advice and give anyone it's just just read it over and over outloud make sure it sounds like something you would normally say and it sounds good and what's your process of writing so there's usually a pretty good idea behind the blog post so ideas right so I think you gotta have the concept that there's so many interesting things in the world like I mean my god the world is amazing right like it's you could never write about everything that's going on because it's so incredible but if you can't come up with like let's say one interesting thing per day to talk about then you're not trying hard enough because the world is full of just super interesting stuff and one great way to like mine stuff is go back to old books because they bring old stuff that's still super relevant and I did that a lot because I was like reading classic program books and a lot of the early blockbuster like oh I was reading this program but can they brought this really cool concept and I want talk about some more and you get the I mean you're not claiming credit for the idea but it gives you something interesting to talk about that's kind of evergreen right like you don't have to go what should I talk about so just go dig up some old classic programming books and find something that oh wow that's interesting or how does that apply today or what about X&Y or compare these two concepts so pull a couple of sentences from that book and then sort of play off of it almost reader disagree that so in 2007 you wrote that you were offered a significant amount of money to sell the blog you chose not to what were all the elements you were thinking about because I'd like to take you back it seems like there's a lot of non-linear decisions you made through life that's so what was that decision like right so i one of the things I love is the choose your own adventure books which I loved as a kid and I feel like the early programmer books cuz they're they're all about if-then statements right if this then this and they're also very very unforgiving like there's all these sites that map the the classic teacher and venture books and how many how comes are bad there's a lot of bad outcomes so part of the game is like oh I got a bow come go back one step go back on further steps like how did I get here right like it's a sequence of decisions and this is true of life right like every decision is a sequence right individually any individual decision is not really right or wrong but they lead you down a path right so I do think there's some truth to that so this particular decision the blog II got fairly popular there's a lot of RSS readers that I discovered and this guy contacted me out of the blue from this like bug tracking companies like I really want to buy your blog for like I think it was around it was a hundred thousand dollars when I'm in like eighty thousand but it was it was a lot right like and that's you know at the time like I would have a year's worth of salary all at once so I'd really think about like well you know and I remember talking to people the times like wow that's a lot of money but then I'm like I really like my blog right like do I want to sell my blog because it wouldn't really belong to me anymore at that point and one of the guidelines that I like to I don't like to give advice to people a lot but one of the piece of advice I do give because I do think it's really true and it's generally helpful is whenever you're looking at a set of decisions like shut you a B or C you got to pick the thing that's a little scarier in that list because not you know not like jump off a cliff scary but the thing that makes you nervous because if you pick the safe choice it's usually you're not really pushing you're not pushing yourself you're not choosing the thing that's gonna help you grow so for me the scarier choice was to say no I was like well no let's just see where this is going right because then I own it I mean it belongs to me it's my thing and I can just take it and to some other logical conclusion right because imagine how different the world would've been had I said yes and sold the blog it's like they're probably gonna be stackoverflow yeah you know a lot of other stuff would have changed so for that particular decision I think it was that same rule like what scares me a little bit more do the thing that scares you yeah so speaking of which startups I think there's a specific some more general questions that a lot of people would be interested in you've started Stack Overflow you started this course so what's the here's one two three guys whatever it is in the beginning what was that process like do you start talking about it do you start programming do you start like where is the birth and the catalyst that actually I can talk about in the context of Oh Stack Overflow and discourse so I think the key thing initially is there is a problem something the some state of the world that's unsatisfactory to the point that like you're upset about it right like in that case it was experts exchange I mean Joel's original idea because I approached I was like look joy I have all this energy by my blog I want to do something I want to build something but I don't know what it is because I'm not I'm honestly not a good idea person I'm really not I'm like the execution guy I'm really good at execution but I'm not good at like blue skying ideas not my forte which is another reason why I like the community feedback because they blue sky all day long for you right so when I can just go in and cherry-pick a blue sky idea from community even if I have to spend three hours reading to get one good idea it's worth it man but anyway so the idea from Joel was hey experts exchange it's got great data but the spirits is hideous right it's it's trying to trick you it feels like used-car salesmen it's just bad so I was like oh that's awesome it feeds in a community it feeds into like you know we can make a Creative Commons so I think the core is to have a really good idea that you feel very strongly about in the beginning that like there's a wrong in the world that we will an injustice that we will right through the process of building this thing for discourse it was like look there's no good software for communities to just hang out and like do stuff right like whether it's problem-solving start up whatever forums are such a great building block or online community and they're hideous they were so bad right it was embarrassing like I literally was embarrassed to be associated with this software right I was we have to have software they could be proud of it's like this is competitive with Reddit this is competitive Twitter this is competitor with Facebook right I would be proud to have the software on my site so that was the genesis of discourse was feeling very strongly about there needs to be a good solution for communities so that's step one Genesis why do you feel super strongly about right and then people galvanize around the idea like Joel was already super excited with the idea I was excited about the idea so with the forum software I was posting on Twitter I had research as part of my research I start researching the problem right and I found a game called forum Wars which was a parody of forum it's still very very funny of like foreign behavior circle like I would say 2003 and it's aged some right like the behavior is a little different in there of Twitter but it was awesome it was very funny and it was like a game as like an RPG and it had a forum attached to it so it was like a game about forums with a forum attached I was like this is awesome right this is so cool and the founder of that company or that project it wasn't really a company contacted me this guy Robin Ward from Toronto's hey you know I saw you been talking about forums and like I really love that problem space he's like I'd still love to build really good forum software cuz I don't think anything out there is any good and I was like awesome at that point I was like we're starting a company because like I couldn't have wished for a better person to walk through the door and say I'm excited about this - same thing with Joe right I mean Joel is a legend in the industry right so when he walks through so I'm excited about as problems like me - man we can do this right so that to me is the most important step it's like having ID you're super excited about and another person a co-founder right because again you get that dual leadership right of like am I making a bad decision sometimes it's nice to have checks of like is this a good idea I don't know right so those are the the crucial seeds but then starting to build stuff whether it's you programmer there's video types so there's tons of research there's tons of research like what what's out there that failed because a lot of people looked at successes I look at how successful X's everybody looks at the successes those are boring show me the failures because that is what's interesting that's where people were experimenting that's where people were pushing but and they failed but they probably failed for reasons that weren't directly about the quality of their idea right yeah so look at all the failures don't just look what everybody looks at which is a go gosh look at all these successful people look at the failures look at the things that didn't work research the entire field and so that's the research that I was doing that led me to Robin Wright was that and then when we for example we did Stack Overflow we're like okay well I really like elements of voting and Digg and reddit I like the the Wikipedia everything is up to date nothing is like an old tombstone that like has horrible out-of-date information we know that works Wikipedia is an amazing resource blogging the idea of ownership is so powerful right like oh I i jo wrote this and look how good Joe's answer is right like all these concepts were rolling out researching all the things are out there that we're working and why they were working and trying to like fold them into that again that Frankenstein's monster of what Stack Overflow is and by the way that wasn't a free decision because there's still a ton of tension in the Stack Overflow system there's reasons people complain about Stack Overflow because it's so strict right why is it so strict why you guys always closing my questions it's because there's so much tension that we built into the system around like trying to get good good results out of the system and you know it it's not a free that stuff doesn't come for free right it's not like we we're all have perfect answers and nobody will have to get their feelings hurt or nobody will have to get down voted like that it doesn't work that way right like so this is an interesting point a small tangent yeah you're right about anxiety so I've posted a lot of questions and answers on Stack Overflow and the questions I usually go to something very specific to something I am working on this is something you talk about that really the goal of Stack Overflow isn't about is to write a question not that's not about you it's about the question that will help the community in the future right but that's a tough sell right because people are like well you know I don't really care about the committee what I care about is my problem my problem and then that's fair right is it sort of that again that tension that balancing active we want to help you but we also hope that everybody comes behind you right the long line of people are gonna come up say oh I kind of have that problem too right and if nobody's ever going to come up and say I have this problem too then that question shouldn't exist on Stack Overflow because the question is too specific and that even that's tension right how do you judge the how do you know that nobody's ever gonna have this particular question again so there's a lot of tension in the system do you think that anxiety of asking the question the anxiety of answering that tension is inherent to programmers is inherent to this kind of process or can it be improved can be happy land where the that tension is not quite so harsh uh I don't think Stack Overflow can totally change though it works one thing they are working on finally is the ask page had not changed since 2011 I'm still kind of bitter about this because I feel like you have a QA system and what are the core pages in a KA system well first of all the question all the answers and all the also the ask page particularly when you're a new user or someone trying to ask question that's the point on what you need the most help and we just didn't adapt with the times but the good news is they're working on this from what I understand and it's gonna be a more wizard based format and you could envision a world where as part of this wizard based program when you're asking questions okay come up with a good title what are good words up in the title one word that's not good to put in the title is problem for example I have a problem oh you have a problem okay a problem that's great right like you need specifics right like so it's trying to help you make a good question title for example that step will be broken out all that stuff but one of those steps in that wizard of asking could say hey I'm a little nervous you know I've never done this before can you put me in a queue for like special mentoring right you could opt into a special mentor I think that would be fantastic like I don't have any objection to that at all in terms of be an opt-in system because there are people there like no I just want to help them I want to help a person no matter what I want to go above and beyond I want to spend like hours with this person uh Ben's what their goals are right a great idea Who am I to judge right so that's fine it's not precluded from happening but there's a certain big-city ethos that we started with like look we're of New York City you don't come to New York City and expect them to be Oh welcome to the city Joe how's it going come on in let me show you around that's not how New York City works right I mean and you know again New York City is a reputation for being rude which I actually don't think it is having been there fairly recently it's not rude people are just like going about their business right now look look I have things to do I'm busy I'm a busy professional as are you and since you're a busy professional certainly when you ask a question you're gonna ask the best possible question right because you're a busy professional and you would not accept anything less than a very well waiting question with a lot of detail about why you're doing it what you're doing what you researched what you found right because you're a professional like me right and this rubs people sometimes the wrong way and I don't think it's wrong to say look I don't want that experience I want just a more chill place for beginners and I still think sacrifice is not was never designed for beginners right there's this misconception that you know even Joel says some - oh yes deck overflow for beginners and I think if you're a prodigy it can be all right but that's not not really representative right like I think as a beginner you want a totally different set of tools you want like live screen sharing live chat you want access to resources you want a playground like a playground you can experiment in and like test and all this stuff that we just don't give people because that was never really the the audience that we were designing the second true flow for that doesn't mean it's wrong and I think it would be awesome if there was a site like that on the internet or if stack overlies and hey you know we're gonna start doing this that's fine too you know I'm not there I'm not making those decisions but I do think the pressure the tension that you describe is there for people to be look I'm a little nervous cuz I know I gotta do my best work right the other one is something you talk about which is also really interesting to me is duplicate questions or do it's a it's a really difficult problem that you highlight super far is super hard like you could take one little topic and you could probably write 10 20 30 ways of asking about that topic and there will be all different I don't know if there should be one page that answers all of it is there a way that Stack Overflow can help disambiguate like separate these duplicate questions or connect them together or is it a totally hopeless difficult impossible task I think it's a very very hard computer science problem and partly because people are very good at using completely different words it always amazed me on Stack Overflow you'd have two questions that were functionally identical and one question had like zero words in common with the other question like oh my god from a computer science perspective how do you even begin to solve that and it happens all the time people are super-good at this right accidentally at asking the same thing in in like in 10 20 different ways and the other complexity is we want some of those duplicates to exist because if there's five versions with different words have those five versions point to the one centralized answer right it's like okay this is duplicate nope no worries this here's here's the answer that you wanted over here on this this this you know the prime example that we want to have rather having ten copies of the question and the answer because if you have 10 copies of the question the answer this also devalues the reputation system which programmers hate as I previously mentioned you're getting reputation for an answer that somebody else or engaged it's like well it's an answer but somebody are sorry gave that answer so why are you getting reputation for the same answer as the other guy who gave it 4 years ago people get offended by that right so the reputation system itself adds tension to the system in that the people who have a lot of reputation become very incentivized to enforce the reputation system and for the most part that's good I know it sounds weird but for most parts like look strict systems I think to use Tec powerful you have to have the idea that ok strict systems ultimately work better and I do think in programming you're familiar with loose typing versus strict typing right the idea that you can declare a variable not declare a variable rather you start using a variable and ok I see it's implicitly an integer BAM awesome duck equals 5 well duck is now an in under 5 right and you're like cool awesome simpler right why would I want to worry about typing and for a long time like in the Ruby community they're like yeah this is awesome like you just do a bunch of unit testing which is testing your programs validity after the fact to catch any bugs that that strict typing of variables would have caught and now you have this thing called typescript from Microsoft from the guy who built c-sharp Manders who's one of the greatest minds in software development right like in terms of language design and says no no no we want to bolt on a strict type system to JavaScript because it makes things better and now everybody's like oh my god we we deployed typescript and found 50 latent bugs that we didn't know about right like this is super common so I think there is a truth in programming that strictness it's not the goal we're not saying be super strict cuz strictness is correct no it's no no strictness produces better results that's what I'm saying right so strict typing of variables I would say you almost universally have consensus now is basically correct should be that way in every language right duck equals 5 should during an error because you know you didn't clear you didn't tell me the duck was an integer right that's a bug right or maybe you missed time you typed deck right instead of duck right you never know this happens all the time right so with that in mind I will say that the strictness the system is correct now that doesn't mean cruel that doesn't mean mean that doesn't mean angry it just means tricked okay so I think where there's misunderstanding is and people get cranky right like another question you asked is like why are programmers kind of mean sometimes well who'da programmers work with all day long so I have a theory that if you're at a job and you work with all day long what do you eventually become an an and what is the computer except the world's biggest because the computer has no time for your the computer the minute you make a mistake everything else crashing down right one semicolon has crashed space missions right so that's normal so you begin to internalize that you begin to think oh my coworker the computer is super strict and kind of a jerk about everything so that's kind of how I'm gonna be because I work with this computer and I have to accede to its terms on everything so therefore you start to absorb that and you start to think oh well being really strict arbitrarily is really good an error of error code five six two four nine is a completely good error message because that's what the computer gave me right so you kind of forget to be a person at some level and you know they say great detectives internalized criminals and kind of are criminals themselves like this trope of the master detective is good because you can think like the criminal well I do think that's true of programmers really good programmers think like the computer because that's their job but if you internalize it too much you become the computer you become a kind of become a jerk to everybody because that's what you've internalized you're almost not a jerk but you have no patience for a lack of strictness as you said it's not out of a sense of meanness it's accidental but I do believe it's an occupational hazard of being a programmer is you start to behave like the computer you're very unforgiving you're very terse you're very Oh wrong and correct move on it's like well can you help me like what could I do to fix now wrong say next question right like that's normal for the computer right just fail next right like out of you remember in Saturday Night Live like in the nine they had this character was an IT guy yeah the move guy move was that Jimmy Fallon no no can't play dumb okay yeah I remember move right he had no patience for he might have been MADtv actually might have been might a bit but anyway that was the that's always been the perception right you start to behave like the computer it's like oh you're wrong out of the way you know you've written so many blog posts about programming about programs programming programmers what do you think makes a good let's start with what makes a good solo programmer well I don't think you should be a solo programmer I think to be a good solo programmer it's kind of like what I talked about well not on mic but one of the things john carmack one of the best points he makes in the book masters of doom which is a fantastic book anybody listening this who hasn't read it please read it's such a great book is that at the time they were working on stuff like Wolfenstein and doom like they didn't have the resources that we have today they didn't have Stack Overflow they didn't have Wikipedia they didn't have like discourse forums they didn't have places to go to get people to help them write they had to work on their own and that's why it took a genius like Carmack to do this stuff because you had to be a genius to invent from first principles a lot of the stuff he was he was like the hacks he was coming up with were genius right genius level stuff but you don't need to be a genius anymore and that means not working by yourself you have to be good at researching stuff online you have to be good at asking questions really good questions that are really well researched which implies oh I went out and researched for three hours before I wrote those questions like that's what you should be doing because that's what's gonna make you good write to me this is the big difference between programming in like the 80s versus programming today is like you you kind of had to be by yourself back then like where would you go for answers I remember in the early days when I was a learning Visual Basic for Windows like I would call the Microsoft helpline on the phone when I had like program because I was like I don't know what to do so I would like go and call and they have these huge phone banks and like can you imagine how alien that is now like who would do that right like that's crazy so there was just nowhere else to go when you got stuck right like I had the books that came with it I read those study those religiously I I just saw a post from Steve Sinofsky that said this C++ version seven came with like 10,000 pages of written material because where else were you gonna figure that stuff out go to the library I mean you don't have what capito you didn't have you know read it you know were to go to answer these questions so you you've talked about through the years basically not having an ego and not thinking that you're the best programmer in the world it's always kind of just looking to improve to become a better programmer than you were yesterday so how have you changed as a programmer and as a as a thinker designer around programming over it'll past what is it 15 years really of being a public figure I would say the big insight that I had is eventually as a programmer you have to kind of stop writing code to be effective which is kind of disturbing because you really love it and but you realize like being effective at program at programming in the general sense doesn't mean writing code and a lot times you can be much more successful by not writing code and writing code in terms of just solving the problems you have essentially hiring people that are really good and like setting them free and like giving them basic direction right like on strategy and stuff because a lot of the problems you encounter aren't necessarily solved through like really gnarly code they're solved by conceptual solutions which can then be turned into code but are you even solving the right problem I mean so I would say for me the main insight I have is to succeed as a programmer you eventually kind of stop writing code that's gonna sound discouraging probably to people hearing but I don't mean it that way what I mean is that you're coding at a higher level language eventually like okay so we're coding an assembly language right that's the beginning right you're hard coded to the architecture then you have stuff like see we're cool we can abstract across the architecture you can write code I can then compile that code for arm or you know you know whatever you know x86 or whatever else is out there and then even higher level net right like you're looking like Python Ruby interpreted languages and then to me as a programmer like okay I want to go even higher I want to go higher than that how do I abstract higher than the language it's like well you abstract in spoken language and written language right like you're sort of inspiring people to get things done giving them guidance like what if we did this what if we did this you're writing in the highest level language that there is which is for me English right whatever your spoken language is so it's all about being effective right and I think a patrick mckenzie Patio 11 on Hacker News and works at stripe has a great post about this of how calling yourself a programmer is a career limiting move at some level once you get far enough from your crin I really believe that and again I apologize this is sound discouraging I don't mean it to be but he's so right because all the stuff that goes on around the code like the people mm-hmm like that's another thing if you look at my early blogging piece is about Wow programming is about people more than it's about code which doesn't really make sense right but it's about can these people even get along together can they understand each other can you even explain to me what it is you're working on are you solving the right problem people weren't right another classic programming book which again up there with code complete please read people where it's that software is people right people are the software first and foremost so a lot of the skills that I was working on early on the blog were about figuring out the people parts of programming which were the harder parts the hard part of programming once you get to a certain skill of in programming you can pretty much solve any reasonable problem that's put in front of you you're not writing algorithms from scratch right that just doesn't happen so any sort of reasonable problem for in front of you're gonna be able to solve but what you can't solve is our manager is a total jerk you cannot solve that with code that is not a codes problem and yet that will you way more than oh we had to use this stupid framework I don't like or or you know Sam keeps writing bad code that I hate or you know you know Dave is off there in the wilderness writing god knows what right these are not your problems your problems your manager or a co-worker is so toxic to everybody else in your team that like nobody can get anything done because everybody's so stressed out and freaked out right these are the problems that you have to attack absolutely and so as you go to these higher level abstractions as you developed as a programmer to higher higher level abstractions go into natural language you're also the guy who kind of preached you know building it you know diving in and doing it and and and like learn by doing yes do you do you worry that as you get to higher higher level abstractions you lose track of the lower level of just building is like do you worry about that you know even not maybe now but 10 years from now 20 years from now well no I mean there is always that paranoia and oh gosh I don't feel as valuable since I'm not writing code but for me like when we started the discourse project it was Ruby which I didn't really know Ruby I mean as you pointed out and this is another valuable have straight from Stack Overflow you can be super proficient for example C sharp which I was working in that's what we built Stack Overflow and and still is written in and then switch to Ruby and you're a newbie again right like I'm but but you have the framework I know what a for loop is I know what recursion is I know you know what would attract a stack traces right like I have all the fundamental concepts to be a programmer I just don't know Ruby so I'm still on a higher level I'm not like a beginner beginner like you're saying I'm just like I need to apply my programming concepts I already know to Ruby what so there's a question that's really interesting so looking at Ruby how do you go about learning enough that your intuition can be applied well that carryover that's all trying to get to is like what I realized written when I started was just me and Robin I realized if I bother Robin I am now costing us productivity right every time I go to Robin rather than building the the are our first alpha version of this course he's now answering my stupid questions about Ruby is that a good use of his time is that a good use of my time the answer to both of those was resoundingly no right like we were getting to an alpha and it was a pretty much disk ok we'll hire more programmers right like we eventually hired Neil and then eventually Sam who came in as a co-founder actually was Sam first then Neil later but the answer of the problem is just hire other competent programmers it's not like teach now I shalt pull myself up by my bootstraps and Ruby but at some point writing code becomes a liability to you in terms of getting things done there's so many other things that go on in the project like building the prototype like you mentioned like well how do you if you're not writing code has every keep focus on like what what are we building well first basic mock-ups and research right like what what do we even want to build there's a little bit of that that goes on then very quickly get to the prototype stage like build a prototype let's iterate on the prototype really really rapidly that's what we do at this course and that's what we we demoed to get our seed funding for this course was the the alpha version of discourse that we had running and ready to go and it was very it was bad I mean it was I'll just tell you it was bad I have we have screenshots and I'm just like embarrassed to look at it now but it was the prototype we were figuring out like what's working what's not working because there's such a broad gap Bateen between the way you think things will work in your mind or even on paper and the way they work once you sit and live in the software like actually spend time living and breathing us out we're so different so my philosophy is get to a prototype and then what you're really optimizing for speed of iteration like how you can turn the crank how quickly can we iterate that's the absolutely critical metric of any software project and I had a tweet recently that people liked and I totally this is so fundamental to what I do is like if you want to measure the core competency of any software tech company it's the speed at which somebody can say hey we really need this word in the product change this word right because it will be more clear to the users like what like instead of respond it's a reply or something but there's some from the conception of that idea to how quickly that single word can be changing your software rolled out to users that is your lifecycle that's your health your your heartbeat if your heartbeat is like super slow you're basically dead no seriously like if it takes two weeks or even a month to get that single word change that was oh my god this great idea that word is so much clearer I'm talking like a super like everybody's on board for this change it's not like let's just change at work cuz we're bored it's like this is an awesome change and then it takes a you know months to roll out it's like what you're dead like you can't iterate you can't do anything right like so anyway about the heartbeat it's like get the the prototype and then iterate on it that's that's what I view is like the central tenets of some modern software development that's fascinating you put it that way it's actually so I work in I build a Thomas vehicles and when you look at what maybe compare Tesla to most other automakers the the psych the whatever the heartbeat for Tesla is literally days now in terms of they can over-the-air deploy software updates to all their vehicles which is markedly different than every other automaker which takes years to update a piece of software and so and that's reflected in everything that's the the final product that's reflected and really how slowly they adapt to the times clear I'm not saying being a hummingbird is the goal either it's like you don't a heartbeat it's like so fast it's like you're your wing you know you're just freaking out but like it is a measure of health you should have a healthy heartbeat it's up to four people listening this decide what that means but it has to be healthy has to be reasonable because otherwise you just get me frustrated because like that's how you build software you make mistakes you roll it out you live with it you see what it feels like and say oh god that was a terrible idea oh my gosh this could be even better if we did why right you turn the crank and then the more you do that the faster you get ahead of your competitors ultimately because you're it's rate of change right delta-v right how fast are you moving well within a year you're gonna be miles away by the time they catch up with you right like that's the way it works and plus users like I as a software developer I love software that's constantly changing because I don't understand people get super pissed off when like oh they changed the software on me how dare they I'm like yes change the software change it all the time man that is that's what makes this stuff great is that it can be changed so rapidly and become something that that is greater than it is now now credit there's some changes that suck I admit I've seen it many times but in general it's like that's what makes software cool right is that it is so malleable like fighting that is like weird to me because it's like well you're fighting the essence of the thing that you're building like that doesn't make sense you want to really embrace that not not to be a hummingbird but like embrace it to a healthy cycle of your heartbeat right so you talk about that people really don't change it's true that's why probably a lot of the stuff you write about in your blog probably will remain true there's a flip side of the coin people don't change so investing and understanding people is is like learning Unix in 1970 because and nothing has changed right like yeah all those things you've learned about people will still be valid 30 40 years from now whereas if you learn the latest JavaScript framework that's gonna be good for like two years right yeah exactly so but if you look at the future of programming so there's a people component but there's also the technology itself do you what do you see as the future of programming will it change significantly or as as far as you can tell people are ultimately programming and so it will not it's not something that you foresee changing and you fund the month away well you gotta go look on sort of the basics of programming and one things that always shocked me is like source control like I didn't learn anything about source control I graduate from college in 1992 but I remember hearing from people like in ladies like 1998-99 like even maybe today they're not learning source control and to me it's like well how can you not learn source control that is so fundamental to working with other programmers working in a way they don't lose your work like just just basics off the bed literal bedrock software development is source control now you compare today like github right like Microsoft brought github which I think was incredibly smart acquisition move on their part now they have anybody who wants like reasonable source control to go sign them and github it's all set up for you right there's tons of walkthroughs tons of tutorials so from the concept of like has programming advanced from say 1999 it's like well hell we have github I mean my god yes right like it's it's massively advanced over over what it was now as to whether program is is significantly different I'm gonna say no but I think the baseline of like what we view is like fundamentals will continue to go up and actually get better like source control that's one of them in fundamentals that has gotten I mean hundreds of orders of magnitude better than it was 10 20 years ago so those are the fundamentals let me introduce two things that maybe you can comment on so one is mobile phones so that could fundamentally transform what what programming is or maybe not maybe you can comment on that and the other one is artificial intelligence which promises to in some ways to do some of the programming for you is one way to think about it so it's really what a programmer is is using the intelligence that's inside your skull to do something useful the hope with artificial intelligence is that it does some of the useful parts for you you don't have to think about it so do you see smart phones the fact that everybody has one and they're getting more and more powerful as potentially changing programming and do you see AI is potentially changing problem okay so that's good so smart phones have definitely changed I mean since you know I guess 2010 that's when they really started getting super popular I mean in the last eight years the world has literally changed like everybody carries a computer around and that's normal I mean that is such a huge change in society I think we're still dealing with a lot of the positive negative ramifications of that right like everybody's connected all the time everybody's on the computer all the time that was my dream world as a geek right but it's like be careful what you ask for right like wow no everybody's a computer it's not quite the utopia that we thought it would be right computers can be used for a lot of stuff that's not necessarily great so to me that's the central focus of the smartphone is just that it puts a computer in front of everyone granted a small touchscreen smallish touchscreen computer but as for programming like I don't know I don't think that I've kind of over time come to subscribe to the UNIX view of the world when it comes to programming it's like you want to teach these basic command line things and that is just what programmers gonna be for I think a long long time I don't think there's any magical like visual programming that's gonna happen I just I don't know I've over time I've become a believer in that UNIX philosophy it was just you know they kind of had it right with UNIX that's gonna be the way it hits for a long long time and well we'll continue to like I said raise the baseline the tools will get better it'll get simpler but it's still fun mental gonna be command-line tools you know makes fancy IDs that's kind of it for the foreseeable future I'm not seeing any visual programming stuff on the horizon because you can I think like what do you do on a smartphone that will be directly analogous to programming like I'm trying to think right like and there's really not much so not necessarily analogous to programming but the kind of things that the kind of programs you would need to write might need to be very different yeah and the kind of language is I mean but I probably also subscribed to the same just because everything in this world might be written in JavaScript oh yeah that's different that's already happening I mean this course is a bit on discourses itself javascript is another bet on that side of the table and I still strongly believe in that so I would say smartphones have mostly a cultural shift more than a programming shift now your other question was about artificial intelligence and like sort of devices predicting what you're gonna do and I do think there's some strengths to that I think artificial intelligence kind of overselling it in terms of what it's doing it's more like people are predictable right people do the same things like let me give you an example one one cheque we put in a discourse that's in a lot of big commercial websites is say you log in from New York City now and then an hour later you log in from San Francisco like well hmm that's interesting how did you get from New York to San Francisco in one hour so at that point you're like okay this is a suspicious login at that point so we would alert you it's like okay but that's an AI right that's just a heuristic of like how did you in one hour get 2,000 miles right that doesn't when you grab maybe you're on a VPN there's other races happen but that's just a basic prediction based on the idea that people pretty much don't move around that much like they may travel occasionally but like nobody I mean unless you're a traveling salesman that's literally we're traveling the world every day like there's so much repetition and predictability in terms of things you're going to do and I think good software anticipate your needs like for example Google I think it's called Google now or whatever that Google thing is that predicts your commute and predicts them based on your phone location like where are you every day well that's probably where you work that kind of stuff I do think computers can get a lot better at that but I hesitate to call it like full-blown AI it's just computers getting better at like first of all they have a ton of because every has a smartphone now I'm suddenly how all this data that we didn't have before about location about like you know communication and feeding that into some some basic heuristics and maybe some fancy algorithms that turn it into predictions of anticipating your needs like like a friend would write like oh hey I I see your home would you like some dinner right like let's go get some food because that's usually what we do this time of day right and the context of actually the act of programming DCI des improving and making the life of programming is better I do think that is possible cuz things a lot of repetition in programming right oh you know Clippy would be the bad example of oh I see it looks like you're writing a for loop um but there are patterns in code right like in and actually libraries are kind of like that right like rather than go you know code up your own HTTP request library it's like what you'd use one of the existing ones that we have that's already troubleshot right it's not a I per se it's just you know building better Lego bricks bigger Lego bricks that have more functionality in them so people don't have to worry about the low-level stuff as much anymore like WordPress for example to me is like a tool for someone who is in a programmer to do something I mean you can turn WordPress into anything it's kind of crazy actually through perla plugins right and that's not programming per se it's just Lego bricks stacking WordPress elements right a little bit of configuration glue so I would say maybe in a broader sense what I'm seeing like they'll be more gluing and less like actual programming and that's a good thing right because most of the stuff you need is kind of out there already you said 1970 is Unix do you see PHP and these kind of old remnants of the early birth of programming remaining with us for a long time like you said Unix in itself do you see ultimately you know this stuff just being there out of momentum I kind of do I mean I was a big believer in Windows early on and I was a big you know I was like a UNIX what a waste of time but over time I've completely flipped on that where I was like okay the UNIX guys were right and pretty much Microsoft and windows were kind of wrong at least on the server side not on the desktop right you need a GUI you know what stuff and yeah the two philosophies like Apple built on UNIX effectively Darwin and on the desktop is a slightly restore even on the server side where you're going to be programming now it's question where the program is gonna be there's gonna be a lot more like client-side programming because technically discourse is client-side programming the way you get discourse we deliver a big ball of JavaScript which is then execute locally so we're really using a lot more local computing power will still retrieve the data obviously we have to display the posts on the screen and so forth but in terms of like sorting and a lot of the basic stuff we're using the host processor but to the extent that a lot of programming is still gonna be server-side I would say yeah the UNIX philosophy definitely one and they'll be different veneers over the UNIX but it's still if you if you peel away one or two layers it's gonna be UNIX safe for a long I think UNIX one I mean so definitively it's interesting to hear you say that because you've done so much excellent work on the Microsoft and aside in terms of back-end development cool so what's the future hold for Jeff Atwood amid the discourse continuing the discourse in trying to improve conversation on the web this force is whatever be it is a and originally I call it a five-year project then really quickly revised that to a ten-year project so where we started in early to that 2013 that's we launched the first version so we're still you know five years in this is the part where it starts getting good like we have a good product out this course there's any any project building software it takes three years to build what you wanted to build anyway like v1 is gonna be terrible which it was but you ship it anyway cuz that's how you get better at stuff it's about turning the crank it's not about v1 being perfect because that's ridiculous it's about v1 then let's get really good at V 1.1 1.2 1.3 like how fast can we iterate and I think we're iterating like crazy on discourse the point that like it's a really good product now we have serious momentum and my original vision was I want to be the wordpress of discussion meaning someone came to you and said I want to start a blog although the very question is kind of archaic now it's like who actually blogs anymore but I wanted the answer to that to be it would be what did WordPress normally because that's the obvious choice for blogging most the time but if someone said hey I want to I need a group of people to get together and do something the answer should be discourse right that should be the default answer for people cuz it's open source it's free doesn't cost you anything you control you can run it your minimum server across four discourses five bucks a month at this point they actually got the VPS prices down it used to be ten dollars a month for one gigabyte of RAM which we where our dependent we have a kind of heavy stack like there's a lot of stuff in discourse you need post grass you need Redis you need Ruby on Rails you need a sidekick for scheduling it's not a trivial amount of stuff because we were architected for like look we're building for the next ten years I don't care about shared PHP hosting that's that's not my model my idea is like hey you know eventually this is gonna be very cheap for everybody and I want to build it right using again you know hire bigger building block levels right that have more requires and there's a wordpress model of wordpress.org juarez calm is their central hosting for this course or no there is we're not strictly segmenting into the open source versus the commercial side we have a hosting business that's how this course makes money is we host discourse instances and we have really close relationship with our customers of the symbiosis of them giving us feedback on the product we definitely wait feedback from customers a lot heavier than feedback from somebody who just wanders by and gives feedback but that's where we make all our money but we don't have a strict division we encourage people to use this course like the whole point is that it's free right you're anybody can set it up I don't want to be the only person that hosts discourse that's absolutely not the goal but it is a primary way for us to build a business and it's actually kind of a great business I mean the business is going really really well in terms of hosting so I I used to work at Google research is a company that's basically funded on advertisement so it's Facebook let me ask if you can comment on it I think advertisement is best so you'd be extremely critical on what ads are but at its best it's actually serving you in a sense as giving you it's connecting you to what you would want to explore so it's like related posts or related content is the same that's the best of advertisement so this course is connecting people based on their interests it seems like a place where advertisement at its best could actually serve the users is that something that you're considering thinking about as a way to bring to financially support the platform that's interesting because I actually have a contrarian view of advertising which I kind of agree with you I recently installed that blocker like reluctantly because I don't like to do that but like the performance of the ads man like they're so heavy now and like it's just crazy so like it's almost like a performance argument more than like I actually am Pro ads and I contrary I have a contrarian viewpoint I agree with you if you do ads right it's showing you stuff you'll be interested in anyway like I don't mind that that actually is kind of a good thing so plus I think it's it's rational to want to support the people that are doing this work through seeing their ads and but that said I run adblock now which I I didn't want to do but I was convinced by all these artists like 30 40 megabytes of stuff just to serve you ads yeah it feels like as now or like the experts exchange of whenever you started Stack Overflow it's a little bit it's all there's so many companies and Antec though it's embarrassing like you can do that if you see those logo charts of like just a whole page just like you can't even see them they're so small there's so many companies in the space but since you brought it up I do want to point out that very very few discourse sites run using an ad-supported model it's not effective like it's too diluted it's too weird it doesn't pay well and like users hate it so it's a combination of like users hate it it doesn't actually work that well in practice like in theory yes I agree with you but if you clean fast ads that were exactly the stuff you would be interested awesome we're so far from that though right like Google does an okay job retargeting and stuff like that but in the in in the real world discourse sites rarely can make ads work it just doesn't work for so many reasons but you know it does work is subscriptions patreon affiliate codes for like Amazon of like just oh here here's a cool yo-yo click and then you click and go to Amazon they get a small percentage of that which is fair I think because you saw the yo-yo on that site and you click through and you bought it right that's fair for them to get 5% of that or 2% of that or whatever it is those things definitely work in fact a site that I used to participate on a lot I helped the owner one things I I got them switched to discourse obviously paid them to switch to discourse because I was like look you guys got a switch I can't come here anymore all this terrible in software but I was like a look and on top of that like you're serving people ads that they hate like you should just go full on patreon because he had a little bit of patreon go full on patreon do the Amazon affiliates thing for any Amazon links to get posted and just do that and just triple down on that stuff and that's worked really well for them and this creator in particular so that stuff works but traditional ads I mean definitely not working at least on this course so last question you've created the code keyboard I've programmed most of my adult life and a Kinesis keyboard I have one upstairs now can you describe what a mechanical keyboard is and why is it something that makes you happy well you know this is another fetish item really like it's not required you can do programming on any kind of keyboard right even like an on-screen keyboard oh god that's terrifying right like well you could but if you look back to the early days computing there were chiclet keyboards which are I think those are awful right but what's a chick like you were oh god okay well it's just like thin rubber membranes all the rubber ones oh no super bad right yeah so it's a fetish item all it really says is look I care really about keyboards because the keyboard is the primary method of communication with computer right so it's just like having a nice mic for this this podcast you want a nice keyboard right because it has tat very tactile feel I can tell exactly when I press the key I get that little click so oh and it feels good and it's also kind of a fetish shot it was like wow I care enough about programming that I care about the tool the primary tool that I use committing to computer make sure it's as good as it feels good to use for me and like I can be very productive with it so to be honest it's a little bit of a fetish item but a good one it indicates that you're serious and in case you're interested it indicates that you care about the fundamentals because you know what makes you a good programmer being able to type really fast right like this is true right so a core skill is just being able to type fast enough to get your ideas out of your head into the codebase so just practicing your typing can make you a better programmer it is also something that makes you well makes you enjoy typing correct the actual act something about the process I got played piano it's time so there's a tactile feel that ultimately feeds the passion makes you happy right no totally that's it I mean and it's funny because artisanal keyboards have exploded like mass drop has gone ballistic with this stuff there's probably like 500 keyboard projects on mass drop alone and there's some other guy I follow on Twitter I used to write for this the site the tech report way back in the day and he's like every week he's just posting like what I call keyboard porn of like just cool keyboards like how my god they look really cool right like that's like how many keyboards this guy yeah it's got me with yo-yos how many rows do you have how many do you need well technically one but I like a lot I don't know why so same thing with keyboards so yeah they're awesome like I highly recommend anybody who doesn't have a mechanical to research it look into it and see what you like and you know it's ultimately a fetish item but I think these sort of items these religious artifacts that we have are part of what make us human like that that part you important right it's kind of makes life worth living and yes it's not necessary in the strictest sense but ain't nothing necessary if you think of yet right like and so yeah why not so sure Jeff thank you so much for talking today yeah you're welcome thanks for having you