Did you know that when Jon Skeet’s code fails to compile, the compiler apologises? What about the fact that when Jon does a search on Google, the only result is “I’ll be right back?” Source: Stack Overflow

For those of you who don’t know, Jon Skeet is a Senior Software Engineer at Google in London, UK. While some of the wilder claims about him still need to be verified, what is definitely true is that he is the only user of Stack Overflow with a reputation over 1,000,000.

Since 1998, this guy has contributed over 34,000 answers to the site, generating over 230,000,000 views! So what do you ask the guy who has already answered every question imaginable?

Find out by listening to our conversation with Jon Skeet

Marcin Kraszewski got to sit down with Jon and ask the man something new. It turns out he has more answers to give including some you haven’t heard anywhere else.

Have you heard the story of how Jon got into his software development by building a computer game? What about the most challenging problem Jon was tasked with solving as an engineer?

Our conversation covers all this as well as the biggest changes in the software industry in the last decade, what developers used before Stack Overflow, how much longer Jon plans on contributing to Stack Overflow, a comparison of C# and Java, and Jon’s favorite conferences.

This is a once-in-a-lifetime opportunity to take part in a casual exploration of the personal journey taken by one of the most famous names in software.

You can follow Jon here:

But first, listen to our conversation with Jon on the Yellow Duck Podcast

Below you’ll find the written transcript of our conversation.

MARCIN: Ok everybody welcome to The Yellow Duck Podcast I’ve got a very special guest with me today. I’m going to be talking to Jon Skeet if you don’t know who Jon Skeet is well he is one of the top contributors to Stack Overflow he might even be the top contributor to Stack Overflow which is, if you don’t know Stack Overflow, that’s amazing. It’s basically a Website where you can get answers to almost any question not just related to software development and technology but like there’s you know there’s Stack Exchange there which is the sort of the parent site on Stack Exchange and you can get answers to questions about anything from improv comedy to science astronomy all this stuff. So Jon welcome.

JON: Thank you very much. Nice to be here.

MARCIN: Thank you for joining me here on the Yellow Duck podcast I’ve got a bunch things I want to ask you. But first of all, I want to, of course, get to the number one question which is sort of on my mind. I did a little bit of research on your activity on StackOverflow which is world renowned and very extensive. And my question is you answered your first question on Stack Overflow on September 26, 2008, at 12:11 according to the information I was able to get. Sort of tell me about the circumstances surrounding that first answer and we know how did you how did you. How did you start using Stack Overflow. How did you get that answer. How did you get to answering that answer. You know where did it all begin OK.

JON: So it was really an exercise in narcissism to some extent. I first heard about Stack Overflow on Sara Chip’s blog. She had written a review of the first edition of C# in-depth well back in 2008 which seems a very very long time ago and I read her review and then I read some of her other blog posts and they mentioned Stack Overflow. So I thought well have a look and I looked on Stack Overflow for questions to answer. So not having much idea about what the what the site was really and I looked for questions about C# in-depth particularly whether there were any and there were a few mentions here or there and there were questions about C# and I thought well I can answer this so I shall answer it and kind of, everything went from there. I’d previously been writing a lot of newsgroups both C# and Java Newsgroups for well the previous decade really so this just seemed to be one step in the evolution of those newsgroups. I’d never liked the HTML base forum software before. For various reasons but just nothing was nearly as useful as newsgroups to me whereas Stack Overflow completely change that

MARCIN: Awesome and we’re all very thankful for your contribution I think of about over 35,000 questions you’ve answered which is an amazing contribution to the community. So we’re obviously everybody’s very grateful for that. And I think it’s really interesting that you sort of started like, in a sense as you said just like as a general user you just found out about his website and decided to answer question can you go sort of to the next that what made you answer you know the second the third the fourth that the hundreds of questions later when did you feel that this is really something that you want to do. Maybe a specific focus on Stack Overflow but in general. When did you feel this sort of passion to really you know to answer a lot of these questions like you just had this energy.

JON: so that started sort of 10 years before while I was still in university and answering Java questions on newsgroups long before C# was even around and getting into discussions which aren’t as relevant for Stack Overflow but I posted an awful lot on the Java newsgroups and a lot of that was I enjoy helping people basically and this isn’t purely altruistic. I enjoy helping people because it improves me as a programmer it definitely improves me as a communicator which I feel is incredibly important in Software engineering, and then there’s the effect of not just helping the person who asked the question but hopefully helping people later on which is what Stack Overflow is really optimized for. And I think some of the problems where people ask bad questions is that they’re thinking about just their immediate need rather than thinking how can I ask a question which will help me but also help people coming in later on. And if you if you start from that perspective then that’s what the Stack Overflow community is kind of built around and the number of impressions that good questions can get is huge so you can help the whole world community of programmers which I think is amazing

MARCIN: Definitely. So it’s a great idea that was you know I think it was it was really something that needed to be created. You know people were ready to start sharing their knowledge and Stack Exchange and Stack Overflow was created really just in time as you said there were other ways to share knowledge. But I think this is maybe the most approachable for any user out there that wants to get some questions answered. It’s a very effective way and I think it’s also really moderated quite well at least at least local followers.

JON: yeah. Which the degree of moderation is definitely a sore point with plenty of users, not just a few who have tried asking the question and they’ve asked it badly not given enough detail or given far too much detail or. There are umpteen different ways that you can ask a question badly and I feel that the moderation is one of the high points of the site that it tries to keep the quality of the site up and keeps it as useful as it can be but it’s definitely a sore point and I think there’s work to do in terms of communicating the goals of the site so that everyone can be pulling in the same direction. It’s not that anyone. Well, I’m sure there are a few people who either ask bad questions deliberately or moderate nastily just for the fun of it. There will always be a few jerks around but I tend to assume that most people are not jerks. They are being nice they’re giving their time and they want a high-quality site.

And if we can just make sure that everyone is aligned then that will lead to a better experience for everyone. So there’s still a bit of work to do there in terms of communication and all kinds of things which can be very difficult because if you’re stuck on a problem immediately and you haven’t registered or asked a question or anything on Stack Overflow before your first temptation is you see a wall of text saying this is the kind of question that you should ask and how you should approach things and you just think I don’t care I want to ask my question right now whereas actually if you take five 10 minutes even half an hour to browse the site browse the various help resources I’ve written a very long blog post about this is what I look for in a question that is meant to help people ask questions but I can understand the frustration and why people just skip over all of that and say it right. Let me ask my question now. I’ll assume I know what I’m doing and it’s very unfortunate that that gives them about the experience and if people aren’t reading the help that’s been given to them then no improvement in that help can really get over the fact that they’re not reading it. So it is it’s tricky

MARCIN: The thing about Stack Overflow that’s interesting seems to be I at least know right now that Stack Overflow all the data is available. Like you can just download the entire data set and you think that’s important.

JON: Absolutely. Yeah and that’s been a goal from day one.

MARCIN: You think that’s an important part of the fact that Stack Overflow continues to be popular.

JON: don’t know it’s definitely it’s a feature. It’s lovely that for example, I think that all the Stack Overflow questions have been imported into Google BigQuery which means people can run queries over all kinds of data and there’s a Stack Overflow. Data analysis tools are available that way as well and so there are all kinds of data mining that you can do on Stack questions and various data scientists have done exactly that. So it’s very cool on that front. It also creates a sort of feeling of trust that Stack Overflow doesn’t own your contributions. Everyone does they’re all licensed appropriately so even if Stack Overflow itself as a company went belly up then the information wouldn’t be lost but I don’t know quite how important it is I think it varies in importance depending on who you ask but the importance to the data science community. I suspect not being a member of that community particularly I suspect that’s been a real treasure trove.

MARCIN: I mean I’ve heard of some projects where they’re trying to use Stack Overflow to train a machine learning algorithm to actually like write software or at least you know debug software or that’s kind of interesting use of the data for sure. Now as far as Stack Overflow, for example, there’s probably a lot of questions that are really really similar and almost the same question but not quite. Do you see any solution happening in the near future maybe using some machine learning or something to somehow reduce the amount of duplicate or close to duplicate content

JON: Right, so Stack Overflow already tries to find similar questions and suggests them while you’re asking the question is, you know:”Have you looked at these things. We think that they’re similar.” And even after you’ve asked the question there. There’s a list on the right-hand side that shows you potential duplicates or related questions and it’s relatively easy for a question to be closed as a duplicate because if you’ve got a gold tag there’s a gold badge in a particular tag then you can close things look at very easily what’s called the dupe hammer. So that helps to close questions very quickly if they are duplicates whether it can be streamlined even further…It’s difficult because any machine learning is never going to be 100 percent accurate so you don’t want to prevent people from asking questions. Even if you strongly suspect that it will be a duplicate. You almost need a are you really really sure. Have you genuinely looked at all these things but I don’t know it’s it feels like all slightly less of a problem. The duplicate aspect than people asking questions and not even providing enough information or the right kind of information to be able to tell whether it’s a duplicate or not. And I’m hoping that. I know that Stack Overflow has been going through a few iterations of a sort of wizards to ask questions saying, “What does your code look like what languages are you using. Have you come up with a short but complete example that demonstrates the problem”. That kind of thing. It’s it’s unclear exactly what’s going to work but I know that the team is hard at work trying to improve the question asking experience because fundamentally Stack Overflow relies on there being good questions being asked.

MARCIN: Definitely and because I’m assuming that there’s there’s just always going to be questions that are going to have to be asked no matter the technology how long it’s been around. What’s the main reason. What’s what’s driving sort of you know the fact that there’s always going to be new questions to ask even about C# which you know as I’ve said you’ve answered that and various other topics you know 35,000 answers but there’s still always more. I guess this goes to the nature of software engineering or that just you can’t abstract everything out.

JON: Well it’s multiple things partly it’s that the language is changing so I’m writing currently about C# 7.2 and having to learn new things myself so that I can then write about them. So it would be entirely natural for people to be asking questions about C# 7.2 or you know other things that are fairly new C# 7.0 is still reasonably new. So as languages evolve and new frameworks and libraries and all kinds of things. There will always be new areas for people to ask questions about. And then there are people asking questions about existing areas and some of those questions will be new and some won’t be new and some may be disguised new questions. So for example in C# the exact way that lambda expressions capture variables particularly for each iteration variables change in C# 5 and that caused a load of questions before C# 5 when it wasn’t ideal the way that the way that it worked. And a lot of those questions are effectively duplicates of each other but actually I answered quite a few of them because there are lots that don’t don’t look obviously related. It’s only when you know the answer that you can see are these two things are the same problem just in disguise. So there will always be things where only the Answerer knows that actually you are facing the same problem as someone else and whether those questions should be closed as duplicates is probably a matter for debate. But yeah there will always be new people coming to Software engineering which is a fantastic thing and some of those I think are treating Stack Overflow as more of a learning resource. I would encourage them to I think Stack Overflow is a great troubleshooting resource. It’s not a great way of learning a language sort of from scratch you can’t say take a Java compiler or even an IDE and Stack Overflow and learn Java from scratch that way. That’s just not going to be an efficient way of learning the language. Whereas a book or a tutorial is a much more structured approach and then Stack Overflow is great for. Well there was this example and I expected it to do this and it did something else instead. And here’s why I think it should behave this way and it’s actually behaving a different way. Could somebody explain exactly what’s going on here. That kind of questions are great for Stack Overflow so it’s definitely a sort of adjunct to other learning tools but I don’t think it’s great as an initial learning tool. Or as the only way of learning a language but there will always be people who are learning things for the first time. And as I say if you’re relatively new to a language or technology then it will be a lot harder for you to find. Related questions because you don’t even necessarily know exactly what your question relates to at the time so I don’t expect the set of or the stream of questions to dry up any time soon. And that’s partly because of new people partly because of new technologies and partly because of the old hands who are doing things that they haven’t done before so I could still be writing in C# and ask a new question about C# and I about half my questions I think are around C# itself which may surprise people. There’s nothing like knowing a language reasonably well for being aware of things that go wrong or are really unexpected and then it’s really helpful to ask on Stack Overflow and say hey I really expected this to happen and I have good reason to expect that because of all my previous experience but it does mean that here you end up asking questions on technologies that you wouldn’t expect to normally

MARCIN: And on Stack Overflow the idea of you know finding an answer online is that how long has it been sort of an integral part of software engineering. Because it used to be you were kind of stuck with let’s say that let’s say that you had documentation maybe a couple a couple message boards a couple of newsgroups. But it seems like a lot of professionals are using stock overflow on a regular basis and a lot of their projects and that’s probably why Stack Overflow ended up sort of addressing that with their licensing and saying that you have to essentially mention that it was from cycles where you took the code. So I guess in your opinion how has software engineering and Stack Overflow changed over the years.

JON: So I think Software engineering has changed partly because we are all using more technologies and using less well-documented technologies so everyone uses third-party libraries left right and center these days or do most people do and libraries come with a variety of degrees of documentation and to some extent Stack Overflow has almost taken over from documentation in some situations. And there was the Stack Overflow documentation project which ended up being canceled because it just didn’t quite work for the situation but certainly Stack Overflow is part of a Software engineers day-to-day toolkit these days more and more. And part of that is because Stack Overflow reacts so quickly. So I remember back in 2008 2009 so when Stack Overflow was still very young. Jeff Atwood saying you know sometimes you need to post a question and wait for 20 minutes to get an answer. And I was just blown away thinking about 20 minutes that’s such an incredibly short time. And he’s right that if you ask a good question usually within 20 minutes you’ll get an answer. And that used not to be the case on newsgroups. I’m not sure whether it’s just the number of people reading things or just the way that the world moves faster but certainly you’d often wait an entire day before getting an answer in a newsgroup whereas these days I tend to find that I will take longer to write a question than it takes to be given an answer. So I will rarely take less than half an hour to write a question because I’m doing the research and building up a complete example and asking it in as clear away as I can and that all takes time. But certainly within a half hour so if it’s taken me half an hour to write the question then less than half an hour later I’ve at least got comments saying Yeah that does look weird. That’s new. I’m not sure what’s going on here or an actual answer explaining the solution to the problem. So yeah the fact that it is so low latency effectively makes it so much more viable. And that’s if you’re having to ask a new question. 90 percent of the time that I’m faced with a problem that Stack Overflow helps me with, I don’t have to ask the question at all because someone else has asked it before. I find that particularly with areas that I’m less familiar with like Python or Bash scripts or something like that, I will very often do some research on Stack Overflow and find the answer to exactly the question that I wanted. It’s great.

MARCIN: Do you find that people that are sort of they’ve discovered offer development they want to learn more about it they’re just learning the first language. Do you find that they don’t invest enough time in sort of learning the core. Like I said the core documentation and really getting to know the language before heading to something like Stack Overflow?

JON: I think there’s it’s hard to say what proportion of people do that but I definitely see some people doing that and not even getting to know the language and getting the tools. But I feel that there’s a lack of teaching within schools universities of diagnostic process and this is why I have a sort of bit of a rant about certainly in the UK there are far more computer science courses in software engineering courses and for all the fact that I’m I’m very grateful that there are computer science courses and we definitely need computer scientists. There’s probably more of a need for Software engineers who don’t really need to know the details of how a compiler works but really could do with a course on he here’s how you go about solving a problem and investigating it further. And if you don’t manage to solve it then here’s how you asked about it. Well whether that’s asking your colleagues or asking on Stack Overflow or finding a bug or whatever it is so simple aspects of the diagnostic process of not trying to bite off more than you can chew. If you are new to a language then do some simple things first. I tend to go with something like console apps for one thing rather than immediately diving into web apps and mobile apps for example which entirely depends on the language of course if you’re using a language which is completely aimed at web development then maybe a console that’s going to be impossible but where possible use the simplest environment you can. The environment where the debug is going to help you as much as possible where you don’t need 100 lines of boilerplate just to get two lines of code running that kind of thing is really helpful for getting yourself set up for success effectively so that you can learn one aspect of a language one aspect of a library at a time rather than drowning in a sea of okay. I’ve got 100 hundred lines of code and I don’t understand any of it and I’m being given an error message that I don’t understand either and I don’t know where to start. The problem is your starting at somewhere that has too much stuff you don’t understand. So yeah in a fast moving world and I’m guilty of this as anyone else if I try to learn new technology for all the fact that I say I would like to start simply. I’ll often think Well I’ve only got this one thing that I need to do so I’ll just kind of dive in. So I do the wrong thing as well but I know enough that if I do get stuck I will then back off and try doing something simpler but in a fast moving world it’s it is tempting to try to dive right in because hey I need to get something done right now but I find that it’s much more productive and in the long run if you just take a step back and really try to walk first before you run.

MARCIN: Have you ever been in a situation maybe this was early in a career where you start solving some problem that’s already been solved and then you realize later on that actually that that’s like a solved that’s something it’s solved you can just use an API or you can use a trusted library.

JON: yes and there seems to be a sort of an aversion to the third-party library sometimes. One classic example is doing XML manipulation so you’ll see people saying well I only need to escape ampersands so I’m just going to use strings and build the XML directly and then they’ll find oh no I’ve got this other thing that’s causing a problem and sooner or later you’ve got hundreds of lines of code which could be completely avoided if you just use an XML library to start with and it will be much more robust and secure in all kinds of things. So yes people should use third-party libraries. Having chosen them carefully though there are a bunch of fairly rubbish libraries around as well. But choosing a good library can make all the difference in a project.

MARCIN: And would you say that that’s something that’s gained with experience which is what I’m saying is that the the the the sort of wisdom to be able to say do I really need to write any code to solve this specific problem.

JON: To some extent. It’s partly a matter of experience and partly a matter of holding yourself back because if you see that you could do something and it means writing some code and you think it would be fun code to write. Then there’s always the temptation to write that code even if you really don’t need to. And I certainly get that temptation. Even when I really shouldn’t and sometimes I will write a quick tool in C# even if it’s not the most appropriate language for using it because it’s the language I know best and so maybe that makes me more short-term effective. Possibly at a cost of long-term productivity. I don’t think we need to worry about it too much. Let’s not beat ourselves up too much over this kind of thing but keeping an eye. There’s a lot to be learned by taking a step back from yourself and kind of watching yourself work and say where am I using a lot of time in ways that end up not being productive and how can I just reduce that a bit over time without trying to think oh that must mean I’m an awful developer and I should give up Software engineering entirely. Just try to improve yourself over time all the time.

MARCIN: Great. Good. Now I guess what I want to try to do is get kind of try a little bit of a little bit of history as far as like if you could tell us everybody has a story of when they started programming. So what is your what is your story of when did you actually get into it? When did you become interested in something like software engineering or programming or coding or whatever you want to call it at that time?

JON: So it was very early. We bought Aztec’s spectrum 48 K Sinclair’s at Spectrum back when I was I think it was 1984 so I was eight years old. The spectrum came out two years before in 1982 and initially, I just played games and then I fairly quickly started doing very simple coding. So the spectrum came with BASIC interpreter built in. So when you boot up the computer you can immediately start typing in code and the spectrum manual that came with it was very very good for teaching programming teaching basic at least. And I I remember one day when my dad was a he was at home because he was ill for some reason and I remember writing a silly little shooter game which just consisted of here’s a spaceship that was probably made up of you know just some ASCII characters and an alien would appear at a random point and you would move your spaceship up and down and then press face the fire or whatever it was so utterly trivial and not really entertaining to play at all. But this was the first time I’d written something that would be interactive and it was amazing the feeling it gave me was astonishing. I think partly because all games were pretty crude back then I enjoyed Jetpack and Lunar Jet Man. etc. But these were fairly simple games so the fact that I was writing something simple, didn’t put me off. I sort of feel slightly sorry for kids these days who if they are taking my advice and doing something very simple to start with will end up with a little text game which maybe asks you to guess a random number and it’ll say whether you’re getting too high or too low etc.. Well if you compare that with Overwatch or whatever game it is that that you’ve been playing for fun. It’s quite hard to see how they connect because there’s a million light years away from a simple text thing to 3D graphics going past that at great speed with networking and all kinds of things. But back then it was great. So I did I used to write my own code that way. There were also magazines that would come with listings for you to type in. So you buy a book and instead of having a tape on the front with code that you could just load in you would type it all in and the benefits of that are it felt immensely tedious but you were learning all the time. Well, this is how it how you can write code without it being emphasized particularly. So I think I gained an awful lot from that and I remember one of my first significant projects was writing a Logo interpreter so we head on the BBC Micro computers at school. We had a Logo interpreter that’s where there’s a sort of fake robot and you can say go forward one hundred turn right 90 degrees etc. and it would draw sheets on the screen. I love this but we didn’t have it on the spectrum so I implemented my own because hey I didn’t know that this was a difficult thing that would take a lot of time and it did but it was incredibly satisfying and it I think is a testament to the quality of the spectrum manual that effectively I learned trigonometry from the spectrum manual because we haven’t done it in maths yet I was still only I don’t know 10,11, or 12 years old. So I haven’t looked at Trigon trigonometry at school at all but the spectrum manual was clear enough that I was able to learn enough to do a logo interpreter from that. And looking back I would love to see the code now. I suspect it’s absolutely foul. And of course, it’s lost in the mists of time. But but I’m still immensely proud in retrospect of however awful that code was. You could write your logo listing. You could save it to tape you can load it again you could run it I was all extremely cool.

MARCIN: And as you progress through this skill did you always think that you were going to work as a software engineer or were you interested in other things and then you somehow were directed or you know what was the process of you actually entering the field?

JON: I think from about the age of 13 or 14, I reckoned that this would be my career. So yeah. I didn’t go via computer science at university I did a degree in maths and thought that maybe I would end up doing research in maths. Turns out I’m not nearly good enough at maths to do Ph.D. or whatever. But I knew it would be something involving computing. So I was interested in artificial life back in my school days so I did a maths degree and then a computer science masters equivalent for a year and during vacation time I ended up working with a friend at Digital Electronics and went from there basically. I’ve always been awful at directing my career I just kind of let it go from place to place as I enjoy myself so I’ve always viewed enjoyment as far more important to me than money certainly the recognition that I get from Stack Overflow and from writing is very pleasurable. It’s never been a deliberate goal in life as it were to become famous or whatever. But the sort of bizarre micro-celebrity status I get via Stack Overflow is quite fun and a bit weird but doing fun things in your job is always much more important to me so I make sure that I have a good quality of work life balance and I can see my family a lot. My family is incredibly important to me but I have not paid nearly as much attention to my career as probably more deliberate people might do.

MARCIN: How can parents develop a children’s interest in programming?

JON: So I have three kids one of whom is interested in Arduino things and does bits of coding and enjoys Python as well. Another who has started on Python more recently but previously was doing scratch which is interesting, it’s a more visual Environment and I don’t know much about the science or teaching kids to program. I tried teaching my kids to program in Python by trying a very step by step approach and I think it’s great for adults but I’m not sure it holds the interest of kids enough. At least not the step by step that I was trained to do. Either that or I’m just not a very good teacher which is entirely plausible but I think the most important thing is making sure that it’s something that they want to do. So it was only when I stopped trying to teach my kids programming that they started doing it for themselves and learning far more. My oldest son has done a bunch of things Arduinos and Raspberry Pi. I’m sure such things I’ve never even seen because he just occasionally says right could I have these parts, please. And then goes and builds random things and that was the way I learned as well. My parents were never watching over me as far as I’m aware in terms of what I was programming. They were just happy that I was happy and would encourage me to get out into the outside world. Every so often but they were happy that I was doing something creative and learning from myself. So if you can encourage kids enough to find some something that they will enjoy doing for themselves and then make it clear that you are happy to help them whenever they want help but you’re not going to force them to do. Right now it’s time for half an hour of programming. Then I think that’s the recipe for success. Kids love learning. They may not like school but they love learning and they love doing things that are creative. So you let them unleash that creativity however they see fit and they’ll astonish you with what they can do.

MARCIN: Do you think that the idea that everybody should learn how to code especially you know they’re trying to introduce had more in curriculums. Is that a good idea or is that unnecessarily forcing people to learn something that they don’t really want to.

JON: I think there are two aspects one it’s it’s good to expose everyone to coding because we have this unhealthy stereotype of what a computer programmer looks like that really is hurting our industry. So if we can expose people and say right this is what coding actually is and if we can give people a positive experience of it then people who may never have naturally said you know that’s something that I will take up for myself may discover. Actually, they love it. So I think that’s very beneficial. And the other aspect is software runs so much of the world now that I think having some idea of what is involved even at the crudest level is very beneficial. In the same way that I think people should have lessons in financial planning just the basics of this is what pensions are about and this is what loans are about and here’s how the stock market works. I’m not so that they can go on to be bankers but so that they can maneuver in a world which is so financially driven just having some idea that yeah the same is true for politics and all kinds of things the kinds of parts of reality that are going to affect your world. It’s good to have some basic understanding of. I’m not saying that I know much about politics or much about finance but I’m very glad for what I do know because it helps shape how I see the rest of the world. So I think software has a definite role to play in in that no kids these days am in certainly from middle-class backgrounds in developed countries and there are whole other conversations we can have about areas where kids won’t come into contact with computers because of poverty etc. but a lot of kids are going to have some interaction with computers. So if they view them as well that’s just running code it’s running really complicated code but I have some idea of what code looks like. And the idea of knowing what the cloud is to the extent of its computers running somewhere else in a data center that’s managed by Google or Amazon or Microsoft or whatever and having the basics of that can just help you do whatever else it is you don’t need to be doing coding yourself to benefit from having the basic ideas of how computers work.

MARCIN: And now with you know something like chrome for example with their developer sort of toolbar. You can take anybody that’s using the Internet and say did you realize that all this is going on while you’re using this Website you know all this all this activity and they might not even understand that right. But it sort of reveals what’s actually behind the curtain. And I think that’s sometimes a great way to show someone that has no interest let’s say on the topic and you say OK. Let me just show you, let me just show you what’s actually happening on this Web site as you’re using it. I think that’s amazing that we can sort of I mean you can even open up the console and start hacking some javascript without having to really do anything.

JON: Absolutely yeah and apply it to each other. There are lots of other ways of doing basic bits of code just for a browser including in C# now there’s that Tray.net lets you start writing each up just in your browser and sure behind the scenes there’s a cloud container running somewhere. But you can definitely start seeing code in myriad languages just from your browser. And I think there’s something to be said for computer science having as well that exposure. So I’ve certainly I’ve given talks to Cubs and guides and even the guild that my local Methodist church which is mostly people who are either retired or near retirement age who would never have done any computer science most of them and I gave a talk that showed them some computer science without any computers being involved at all. So things like you’ve got a pile of bits of paper how can you efficiently sort those and hear a few different algorithms you can use. And what does this mean for if you had you know if you got one person trying to sort those then you might use one algorithm. If you have 10 different people does your chosen way actually still scale up to having lots of different people helping. So you end up with a sort of merge sort or whatever and things like algorithmic complexity giving real-life examples of how long it takes to do different things. If you have more input hanging shirts on a washing line or whatever it is I think people can find that kind of thing interesting if they’re not daunted by it. But as soon as you start saying computing then a lot of people will immediately turn off. So there’s a lot to be said for making things available in a non-threatening and non patronizing way and that that takes significant skill in areas that I don’t have any. But I’ve done what I can but I’m sure better educators would be able to do significantly better. I think it is quite important.

MARCIN: Let’s keep going here. What would you say are you besides Stack Overflow. Are there any sort of resources that you really like. I mean I’m I’m a fan of like O’Reilly books but what are you a fan of as far as what resources do you use to when you when you actually want to learn some some some some new language or something.

JON: so books are great for learning languages because they take you there in a particular order and these days, of course, that goes for online tutorials as well so long as they’ve been written appropriately and it takes a lot of effort I know from experience to write resources that do teach you all the features of a language in a specific order that’s going to help you learn. And so someone could write a C# tutorial that’s actually not very good at all because they’ve just given a brain dump. So you need to pick and choose but something that is structured for you makes a big difference Good API documentation is always very welcome. So .NET tends to be pretty well documented and the new API browser makes it easier to find the documentation etc.. I would encourage people if they’re writing libraries to really put effort into writing good documentation to go alongside those libraries. There’s no point in having the fastest whizziest JSON Serializer in the world. If no one can figure out how to use it. But either I use the same resources that other people also whether it’s tutorials and books or just searching for the right results when I’m trained as I write well how can I do whatever it is. Put something in a PDF or whatever task I happen to have to hand. Yeah I search around the internet I use Stack Overflow I use books I use tutorials I use libraries and their documentation. Yeah, that’s pretty much it I think.

MARCIN: And what do you say about this idea that’s because we’re actually almost similar age groups. The idea that at a certain age people just become managers. Have you seen that happen. Is that is that true or are you sort of are you unique in that regard that you are still developing software or are you. I guess what would you say to that.

JON: I’m certainly not unique. I would say I have actively having said I haven’t really managed my career. The fact that I am optimizing for having fun I have actively resisted managing for quite some time. I was a manager for six months and found out that there’s a lot to be said for it. Particularly I would like to think that I’m empathetic and I I try consciously to be empathetic as again I think that’s an important skill for a software engineer to have. But it also obviously relates to management and so I thought it would be interesting to try managing and I tried and it was then appropriate for me to move back into a more individual contributor role. There is plenty that you can do in terms of leadership as a software engineer without managing. And that needn’t be always writing code so I probably write more code than most people in an equivalent level of seniority because I’ve chosen to do that and I’ve actively resisted things that might have broader impact but without being as fun for me say you can often spend a lot of time writing design docs and yeah that I still write documents reasonably frequently usually fairly informally I’m not a big fan of writing huge documents with all kinds of bits and pieces that aren’t going to be relevant to anyone. I would far rather get down to brass tacks nice and quickly. But writing documents to contribute to multiple teams saying Okay I think we all have this problem. Let’s see if we can come to a solution together that has broader impact than just me writing code to solve that problem myself. I think one of the things that you probably should be aiming for as you grow more experienced is to see where that experience can help other people. But to some extent that will still be coding, to some extent it will be sharing your knowledge with user groups and conferences and things. And by solving problems internally within a company that you can you may be able see more clearly than than other people who’re maybe less experienced maybe have just joined a team or whatever it is. But in terms of whether people should become managers or not I would personally think it would be entirely fine for someone to come and start managing immediately without having necessarily done the job themselves. If that’s something that they’re going to be good at by empathy and learning you can learn what a job involves without doing it so long as you’re aware that you haven’t done it so you don’t have that direct experience. So I don’t think I don’t think there should be a direct correlation between age and what proportion of workers are managers. I certainly hope to still be writing code well into retirement and probably not doing significant amounts of management. If I end up having to be manager at some point I will do it to the best of my ability but I don’t think it should normally be a requirement and I think a lot of companies do the wrong thing by promoting people into management who actually would be far happier in far more productive as coders.

MARCIN: As far as the idea that yeah it’s probably some sort of mistaken idea that you know after 15 years of writing software you’re just going become a manager and that’s just what everybody does. I just know that there’s some pressure at least in California’s Silicon Valley where people are really worried that they’re like 29 for example and they’re too old and now to get hired by some companies that are sort of I guess obsessed with hiring only people that are 22,23, or 24

JON: Well I wouldn’t want to be hired by a company that’s obsessed with hiring 22-year-olds. I would far rather work for a company that values people for who they are what they can achieve and what they can achieve together. So you not only their current skills but their potential. So I haven’t experienced that kind of agism myself. Excuse me but I’m aware that it is a concern. I would certainly say I haven’t experienced any degradation that I am aware of in terms of my coding skills. I’m still coding as happily and productively as ever. As far as I’m aware. So I would hope that companies would take note of that kind of thing and hire people that can do the job.

MARCIN: Do you think is there any good. For example, we talk about if we talk about all other professions. It tends to be regarded that if someone has been doing physics for you know 30 years then you know there’s no there’s no one’s going to say oh you don’t know what you’re doing anymore. Is it something that software engineering is so closely tied to technology and technology developing so quickly that people just assume that you know if you’ve been doing it for this many years then you’re sort of out of touch or is there something that differentiates software engineering from all the other disciplines that make people have this idea that you know someone is you know a certain age and they have certain ideas about that person.

JON: That may be where the impression comes from but I’d say it’s probably inaccurate. You do need to be willing to learn new things. At least if you want to be if you want to be able to keep going in New and exciting areas. If you’ve been doing COBOL for 30 years and have decided not to learn anything other than COBOL then I’m sure you can still be productive and that’s fine. But you shouldn’t expect to get a job in JavaScript or something without having shown any interest in continuing to learn. On the other hand I’ve I really only know C# and Java to a professional level because I’ve found that there’s enough new stuff to learn in C# I haven’t got enough time to learn F# and D and Rust and Go and all kinds of things other people go broader and less deep. But it’s up to individuals how much they want to take on and you need to be aware that if you do decide to not learn if you decide to stop learning then you will become less valuable over time. But to be honest I suspect there are enough legacy systems that for most languages you could still be reasonably valuable even if you did decide to stop learning. Frankly I can’t see why you would want to stop learning as it’s always interesting to do new things. But it does take a fair amount of time and I think companies should be willing to invest that time in their engineers so that engineers don’t feel that they need to be learning things in time that’s otherwise spent with family for example. So there’s a fair amount of active development that should go on as part of your job. Part of being a good Sopher engineer in your work life is learning new things. For most developers as I say there are some more legacy areas where that’s not as relevant although I’d say even Cobol developers who keep going with it keep learning new things are likely to be able to see how they can apply their Cobol skills in to other environments here. Maybe there are containers that are running COBOL these days and suddenly you’ve got cloud-based container systems which can be running COBOL and suddenly you can move all your on-premise machines to off-premise.You know just because you’re using an old language doesn’t mean that you have to be using old technology for everything else. So there’s there’s room for all kinds of people people who always want to learn the new like new language. People who want to apply all the technological skills to new environments and people who don’t see much value in learning new things. Yeah, I can say I don’t empathize with that particularly but Software engineering is such a wide field that I’m sure there are useful productive lives that can be spent doing. Applying all your existing skills to new challenges all the time. I could use C# 7 for the rest of my life and still be doing new things even if I don’t learn any new actual language areas. It’s not what I want to do but I’m sure for other people. It may be more the road that they want to go down.

MARCIN: And it’s all of that because the fact that most languages are Turing complete and so you can do anything with any language you know. I mean it’s very broadly speaking

JON: probably I’m not really sure. I think languages evolve certainly C# has been very definitely evolving for the use cases that it’s being put to so some of the features that are being added now wouldn’t have made as much sense 10 years ago before cloud computing became very widespread and we’re seeing other areas like gaming that C# is dominating in an almost unexpectedly with platforms like Unity. So there are language features that are somewhat tuned towards gaming and low latency high-performance computing and I think that’s great. But yes you could do things in other languages or in earlier versions of languages but it’s much more productive and interesting to use new features because they’ve been designed to address particularly your concerns.

MARCIN: What’s your favorite IDE?

JON: Visual studio

MARCIN: Do you use a certain methodology?

JON: Get Code Done. I don’t use Kanban or I wouldn’t like to say any specific methodology like that. I do believe in testing not necessarily test driven development but at least test alongside development sometimes test driven it depends on the situation. I’m uncomfortable with having a lot of production code that’s not tested. So that’s one aspect of Agile development but it’s not I don’t personally end up using all of Agile. I don’t do much pair programming. I have done in the past and found it very helpful. I’ve done non-pair-programming in the past and found it absolutely fine. I do regard it him as being important to have a good relationship with your colleagues so code review is very important to me and that code review being honest and frank. But that isn’t tied to any particular methodology.

MARCIN: What advice would you give to someone who is in that area where they’ve been learning they’ve been learning a language for let’s say three months three to six months. And they just feel like they’re they’re not smart enough to do it to learn it right. Like there’s just too there’s just too many errors to fix. And you know what sort of what sort of advice do you have for that person that has sort of an interest in it but they feel like they just can’t get over that hump.

JON: So if you’re still interested and you think that you could enjoy it if only you could do it better then look for look for people. So whether that’s reading blogs or find a user group finds people that you can interact with and get one on one tuition if possible because it can be quite lonely trying to find answers purely from behind a screen. Whereas if you present if you engage with someone one-to-one they can often see ok here’s your mental model problem where you’re picturing something the wrong way and that could be very hard to get just from individual little bits of bits and pieces. If you’re not enjoying it then find another language because there are plenty of languages out there.

MARCIN: Which programming language is superior, Java or C#?

JON: Personally I’d say C# Absolutely. Now I haven’t looked at details of the Java 9 features and I only know the job rate features kind of ish but it feels to me like C# took some of the mistakes that Java had made and made some the mistake mistakes itself admittedly. But generally, C# seems to have been developing faster and just really well the C# team is fantastically smart and just really careful about how they’re developing language. So we’re in to C# 7.2 And it feels like it’s gone in a very very good direction it’s being managed extremely well very well specified. That said you know Java is better than ever and I don’t think I don’t think there’s enough in it that if you are working on a Java code base you should throw it all away and start doing C# instead. But if I have my option at any point I would definitely choose C# on any day.

MARCIN: Awesome! Jon Skeet thank you for being a guest on the Yellow Duck podcast. If you have any links you want to send me, and conferences you’re going to be doing, please send me all the information.

JON: Thank you.

MARCIN: Yup, thanks, Bye!