How to become a successful Junior Developer with Scott Hanselman from Microsoft

How to become a successful Junior Developer with Scott Hanselman from Microsoft

✍️ Want to support the podcast? Subscribe in your favourite podcast app and leave a leave a 5 star review here.

πŸŽ™ About the episode

Meet Scott Hanselman πŸ‡ΊπŸ‡Έ! Scott has been coding for 30 years, blogging for 20, and podcasting for 16. He helps new developers learn to code and find success in their tech career so they, too, can have long and happy tech careers.

In this episode, Scott reflects on his career to share the most important things you should know as an aspiring junior. We discuss if you need to know algorithms and data structures to be successful and explore some interesting ideas around systems thinking and, uh, burned toast?

πŸ”— Follow Scott

⏰ Timestamps

  • Introduction (0:00)
  • Becoming an β€œold” programmer (02:21)
  • How fast does do tools and technology move? (03:56)
  • Upcoming technology to keep an eye on (08:25)
  • Why coding is just like LEGO (10:17)
  • Responsible AI and Alexa (16:39)
  • Learning to code and social mobility (21:19)
  • Systems thinking and burnt bread 🍞 (22:51)
  • How deep down the technology stack should you go? (25:19)
  • What you should know to be a successful junior (33:12)

🧰 Resources mentioned

⭐️ Leave a Review

If you enjoy this episode please leave a 5 star review here and let us know who you want to see on the next podcast.

You can also Tweet Alex from Scrimba at @bookercodes and tell them what lessons you learned from the episode so they can thank you personally for tuning in πŸ™

πŸ’¬ Transcript

Scott Hanselman (00:00): Computers are stupid. And most non-technical people enter the world assuming that computers are smarter than they are. We make people feel bad if they are not a computer person. I always think about going to the family holiday party or the Thanksgiving or the Christmas thing. And whenever someone I meet, like a cousin I haven't seen, they go, "Oh, you're a computer person?" I'm not a computer person. What did we do to make you feel that computer was smarter than you? The computer is dumb. It's not your fault. We put the button in a wrong place. That's on me. If Windows makes you feel bad, that's my fault.

Alex (00:28): Hello, and welcome to The Scrimba Podcast. On this weekly show, I speak with successful devs about their advice on learning to code and getting your first junior dev job. I'm Alex. And today I'm joined by the sage, Scott Hanselman from Microsoft.

Alex (00:45): Scott is remarkable in that he has been coding for 30 years, blogging for 20, and podcasting for 16. I can't wait to see what we can learn about consistency from Scott because to be a good programmer, you don't have to be fast necessarily. You just can't give up. These days, Scott wants to help guide the next generation so that they too can be what he calls, and these are his words, "Old programmers."

Alex (01:13): In this episode, we will learn from Scott's perspective as a veteran about how fast technology really moves and if we need to worry about AI and get some co-pilots basically taking over our jobs just yet. Of course, you are listening to The Scrimba Podcast, which is all about helping you learn to code and break into tech.

Alex (01:34): You're going to learn a lot from Scott about how to think about problem solving and how deep down the technology stack you really need to go to be proficient. Do you need to learn JavaScript or must you also go deeper and learn about algorithms and data structures or even deeper yet and learn about assembly and machine code? We'll find out.

Alex (01:54): It's actually mad that I'm interviewing Scott because when I was a wee lad learning to code as a self-taught dev. I learned a lot from Scott's presentations. Specifically, I remember one about how to talk at a meetup and feel comfortable doing so. I'm pretty sure it's still around somewhere. Needless to say, I'm super excited for you to learn from Scott as well. So without any further ado, let's get into it.

Scott Hanselman (02:21): I don't like to focus on age, but I'm becoming an old person and it's really fascinating to watch it happen. So I'm kind of an old programmer right now. I've been programming now for 30 years this year. And by programming for 30 years, sometimes people will say something like that. And then you find out, well, I got a Commodore 64 when I was 12. No, I've been coding for money since I was 18.

Scott Hanselman (02:43): The weight of that is starting to get on me because I just know so much, but then computers are changing so fast. I'm also overwhelmed by what I don't know. So as such, I'm trying to be an enthusiast who can help guide the next generation so that they too can be old programmers.

Scott Hanselman (03:02): I hear so much about early in career people finding that first couple of years in software to be really stressful. And they leave because they got a bad boss or they had a weird project or they didn't feel safe or comfortable or whatever in the job that they got. And then he's like, "Yeah, I was a programmer for a couple years and it wasn't my thing." What an amazing thing that I've been able to do this for so long, and wouldn't it be lovely if others could do the same.

Scott Hanselman (03:23): So I think I am a professional enthusiast on the internet who is trying to get people as excited as I can about also being empowered coders. I happen to work at Microsoft right now. I've worked at Nike and Intel in many, many other places over the years. And I'm sure that I'll do other things after Microsoft. So my job isn't my identity, but my excitement for technology is. So I think I'm kind of a roaming teacher type person. So I've been blogging for 20 years this year. I've been podcasting for 16 for 840 episodes.

Alex (03:56): The one thing you have that not a lot of people have done is just perspective of the industry and how things have changed. How fast is technology moving really these days from a programmer's perspective?

Alex (04:08): From my perspective, a few years ago, I remember Microsoft, for example, they were embracing more open source and there was more of a uprise in tools like VS Code. And then people moved from Bower and gulp and Yeoman, like NPM and a bunch sort of key things happen. I think react, rose and popularity gets up one all. I just get the feeling now that things have like slowed down a little bit from the programmer's perspective. But I also kind of recognized that in the industry, there are things happening around AI and machine learning and God forbid, web free and things like that. What's your take, what do new programmers need to know?

Scott Hanselman (04:42): I think that the innovation and technology is kind of increasing at a pretty straight line up into the right speed. It is kind of consistently just turning the crank and getting better. I think that what you're describing though, around tooling being a little, what I would call thrashy was definitely a thing when the rise of JavaScript happened. I like to say that JavaScript, isn't the language we deserve, but it's the language that we have. And then someone said, "Well, maybe it is the language that we deserve." JavaScript tooling, we were describing gulp and all those different things, kind of like got very thrashy for a number of years. That was just people kind of like reasserting that the open web was going to be a thing. But JavaScript itself around the tooling is just kind of like making nice forward progress. The thing that I'm surprised about is how quickly things have happened, how well everything works and how poorly and stupid things still are.

Scott Hanselman (05:37): I'll give you an example. I think about 10, 15 years ago, I bought a Roomba and it was a little disc with a battery and a motor and it wandered around like a blind animal and bumped into stuff. And somehow still vacuumed the floor. And now I just got for Christmas, a roborock, which is an AI, lidar, camera, processor, Linux machine. And it, and it looks exactly like the Roomba I had 15 years ago. And it still gets tangled up in my iPhone headphones and then freaks out, except now it texts me and says, "Hey, I'm tangled up." So it's like so much more advance, it's a rolling super computer with WiFi and Bluetooth and it talks and it's still vacuums over dog poop. I'm trying to reconcile like how amazing it is that things have changed, but it still sucks.

Scott Hanselman (06:30): Another example is I remember when 3d video cards came out, like you would have to buy a separate card. You had your main video card and then you bought like this thing called a voodoo and you plugged it in, you had special drivers. And it was just, what does this card do? It does 3d, oh my goodness. And now we can do it in 4k, but they still don't look like people. You know what I mean, they still, the uncanny valley still isn't there or AI, right. Like how many times have you had people, the classic Scottish comedians that get into the elevator and the voice activated elevator and they're like 11 and the elevator has no idea how to get them to the 11th floor. And they're trapped in the elevator until a non Scottish person gets on. My wife is constantly trying to get Alexa to do what she wants it to do, and it doesn't listen to her at all. So how is it that we've come so far and nothing works at all. Anyway,

Alex (07:22): Do you have those self checkout machines in America where you scan your own shopping and put them onto a scale?

Scott Hanselman (07:27): They're the worst because you check out and then you put it on the thing. And it's like, you're trying to steal something, like dude. And then you stuck and you have to wait for a human to come over and tap a button. I had this idea in my mind that the self checkup machine's going to be like, boo, boo, boo, boo. And then I check out, never works like that. You go too fast, you're dead. And now you have to go and page someone. I wrote a blog post once called "Everything's broken and no one cares" because it's amazing. We're living in an amazing time, but still try printing. That would be another one, right.

Alex (07:57): And then meanwhile, people are talking about how robots are going to take over the world. And I can't even scan a 10P plastic bag at the supermarket without it, thinking I'm trying to steal it.

Scott Hanselman (08:06): Robots are going to vacuum over the poop in your house. That's what they're going to do. They're not ticking over the world. It's going to be fine. But yeah, the point I'm making is that all this history gets stuck in the brain of the old programmer, but I also want to make things better. And I want people to feel heartened by what we can do and not focus on the silly things that we can't do.

Alex (08:25): What are some of the technological advancements that you're excited about? And you see, it's hard to predict the future, but you think as a likely chance they might be become parts of our day to day lives as programmers going forward.

Scott Hanselman (08:38): I think that the bubble, the tech bubble, this is my third or fourth tech bubble, which is a lot of the technology that comes out of the bay area tends to be focused on making upper middle classes, people's lives better. Making rich people's lives, better, making young people whose parents did stuff for them now have a service that does a thing for them. Whether it be laundry or food or Uber, right. Just going from place to place. I'm more interested in the technologies that make underprivileged people's lives better. Like Uber, as an example, was made to move everyone around. It moves people who can't drive around. It takes people to their doctor's appointments. Like that's amazing, right. But it's also like it's a fancy taxi service. It just makes lives easier. I worry about my kids, not knowing how to do laundry or make food and stuff like that.

Scott Hanselman (09:28): And they're like, oh, I'll just use Uber. And I'll just use Uber eats. And I'll just. I want people to be excited about making people's lives better regardless of cost and regardless of their own ability to pay for stuff. And then from a programmer's perspective, the idea that one could express their intent clearly enough that the computer would understand it is really exciting. I want to make it so that someone could describe an app and have the app kind of fleshed out, that would be really cool. So GitHub Copilot is darn near magic. Like recently I had to spend about six hours converting adjacent file to an XML file. And I felt like, if I could just tell an AI to do this, I bet you, I could get 90% of this done. And it would've saved me a day of my life that I sacrificed to the Json XML guards.

Alex (10:17): That is quite interesting because in coding, there are a lot of problems that have been like solved before. And when you get into a more complex app, maybe even things like authentication, people delegate to software as a service companies, right. It makes me wonder how much of coding these days, especially front-end websites is like being a Lego builder versus someone who actually does the logic part, if that makes sense. Because you can't go a long way building front-end websites by assembling components and plugging in modules and connecting to APIs. What do you think?

Scott Hanselman (10:49): I really love the Lego analogy. If you think about the responsibilities of the people who create Lego. Let's think about Lego as a system. So there's the Lego company, right. And they handle the, getting the plastic and making them, and then there's the Lego architects that design new sets. And then somewhere in there someone has to invent new kinds of bricks, new kind of what they call Lego elements. And then there's you and I, the Lego kind of the downstream users of the developer tools in quotes, the developer tools that the Lego people provide to us. And when I watch like a master Lego person make something, if I watch their YouTube's and I'm like, oh my goodness, look at that leap of logic that they just had. I never would've thought to use that element or that brick in that creative way on its side or some amazing thing.

Scott Hanselman (11:36): It's kind of like when you can read language, but you can't speak it. So it's like, I understand what you're saying, but I could never get that out of me. From a programming perspective, the same thing happens. It's like, I know what I want to say, but I don't know the language keyword element API, the thing that I need to get out. But then there's also a person out there who's inventing new tokens, keywords, language elements to make that easier. What is it that we could do to make the expression of intent clearer? Because all we're doing is we're saying stuff in English or whatever our native language is, as clearly as we can. And then we're trying to convert it into another language. And of course, there's not one programming language, there's a thousand and they're all different attempts to say stuff as clearly as we can.

Scott Hanselman (12:19): Because if you say it unclearly the computer will do it anyway, right. The computer will always run your code exactly as you wrote it. I was talking to a buddy just before I got on the call with you about one of the lovely classic programming jokes. Gentleman tells his programmer, "Can you go to the store for me?" She's a programmer. So she thinks like a programmer and says, "go to the store, get some bread. And if they have eggs, get 12." And then she comes back with 12 loaves of bread. And he's like, "What are you doing? Why'd you get 12 loaves of bread." And she says, "well, they had eggs." It makes total sense. Like, I can tell you if bread, if eggs get, like return 12, it makes total sense. So whose fault is it? Is it the programmer who's thinking a certain way? Or is it the person who gave the instructions in an unclear fashion?Those kind of debugging systems problems are really interesting.

Scott Hanselman (13:06): And if an AI can, as you say, the problem's been solved. Right now, we go to stack overflow to see if some other humans solved it. There is a really cool thing that a friend of mine at Microsoft's working on, which is looking at documentation in pros and generating sample code with AI based on what the pros is saying. So imagine if it's like, you're talking about how to like make an Azure website or something. A human usually has to write the snippet, like the five or 10 lines. Why couldn't the AI do that? Then if the AI could write it, could the AI test it, validate it, see that it actually works, put it in a queue and then run it by a human. The whole point of the AI is to make our lives easier and to reduce the tedium.

Alex (13:45): Coming up on these Scrimba Podcast.

Scott Hanselman (13:47): All I want is a piece of burnt bread.

Alex (13:49): A debugging story about wanting toast.

Scott Hanselman (13:52): It's always DNS.

Alex (13:54): But first I would just like to please ask, if you are enjoying this episode that you share it on social media, like Twitter or in your community, like on discord, for example. Word of mouth is the single best way to support a podcast that you like. So thank you in advance. Here on the pod we alternate between experts like Scott and really fresh, newly hire developers who tell us about their study schedule and job interview specifically. Next week, I'm talking with one search developer named [Ineza 00:14:23].

Speaker 3 (14:23): I first came across coding in 2016. I was still in high school. I think I saw one of my friends writing code in the computer classrooms and I was like super interested in what he was doing. And it all seemed so cool and you'd want to learn more about it and how it's done.

Alex (14:40): If that sounds interesting to you subscribe as not to miss it. Back to the interview with Scott's. You do sort raise an interesting point that computers are basically kind of stupid. A very fundamental level, they just understand zeros and ones. And from there it's been a constant evolution, hasn't it from, okay, you can't write zero and ones. Well, probably don't want to. So there's like machine languages, so the compiler can better understand. You probably don't want to do that. So we have a compiler that converts a human readable sort of language into bike code essentially. Then we have run times. Then we have things like JavaScript that run in the environments. It leads me to a, I think interesting question around understanding the depths of computers, because often you hear advice don't you around. Okay, well, you can use a database engine. You can use a programming language, you can use an environment and utilize what they offer you. But to be the best programmer possible, you should understand how things work under the hood. What do you think about that advice?

Scott Hanselman (15:37): I think that you're very thoughtful to point out that computers are stupid and most non-technical people enter the world assuming, because we've created a culture of mystery around them that computers are smarter than they are. We make people feel bad if they are not a computer person. I always think about going to the family holiday party or the Thanksgiving or the Christmas thing. And whenever someone I meet like a cousin, I haven't seen like, "Oh, you're a computer person." And it's like, I'm not a computer person. I've never been good at that or whatever. It's like, wow. What did we do to make you feel bad? That the computer was smarter than you. The computer's dumb. It's not your fault. We put the button in a wrong place, right. That's on me that you feel, if windows makes you feel bad, that's my fault.

Alex (16:16): My grandma not into computers, but she was one of the first in the family to have a computer. And she was so proud of her proficiency at the time. These days, she's always a bit apologetic. She's like, "Oh, I feel stupid. I can't do it." And I look at the app she's using, it could be, eBay or something, for example, and the interfaces just intuitive and garbage. And I tell her, it's not your fault. Someone needed decision to do it that way.

Scott Hanselman (16:39): So one of the things that I like to think about is, it's computers are dumb, it's systems that are complex and computers live within complex systems, like AI is a really interesting one. I had a really great conversation with a woman who works at Mozilla on common voice and AI for a Corpus of recorded voices of all over of all languages of all people. So that one could make like Alexa or Siri, better understand people. The AI for those things is both incredibly complex and also quite simple and how it works. And she was talking about bias in AI. And I made a, what I thought was an educated comment about, can something be biased or racist? Could you make a racist AI? And you could, you could actively, like, if you're evil, you could make it evil.

Scott Hanselman (17:28): You could code it as if you were evil. But it's more likely that it's not that it's racist or that it's biased is that it's not biased. So it's the idea that I didn't make it actively not biased. And she checked me on this a little bit. Because she's like, well, the system is actually more complicated than that. Because imagine if you did not as a person, like recognize that, like let's say Spanglish, English and Spanish combined, or Singlish, Singaporean English. And some of the different words, or you wrote your Corpus, your incoming information to deny North Londoners. Like you don't recognize their words. And let's say that you built a whole worldwide popular Siri type thing, except it didn't work for this accent. Would that make that accent go away? Does it invalidate that accent? Does it invalidate that language, right? If someone who speaks a Pigeon English, which is a totally reasonable dialect of English, but the device doesn't respond to them when they speak it, then they have to speak like a news reader.

Scott Hanselman (18:27): You then slowly could take away their language, and you could be like, 40 years ago we used to speak this, but then, voice recognition came out and now we all talk like we're from the Midwest of the US, right. Which gets back to that Scottish guys, trapped on an elevator thing. They would learn how to work within the system. And then it would understand them. That invalidates their kind of existence and indirectly is an unintentional bias that you create. So that's really complicated.

Scott Hanselman (18:55): How do you tell that to someone coming into the industry who's just trying to write a for loop, you know what I mean? They're not going to write a biased or racist for loop, but they're participating in this larger system. Those things are really interesting when you come into to being a programmer. That kind of is a, maybe a direction that you weren't expecting to take it. But it really was very eye opening for me to think about the kinds of things that I would go and write if they were photo recognition or voice recognition or anything like that. Because why are we writing software? For humans to be successful. We want people to be successful. So I want everybody to be excited about both using and writing software. So that was really cool for me to kind of think about, I'd never thought about it like that before.

Alex (19:38): Say I'm an Englishman, coding something like this, or bringing it to life and I'm testing it with my own accents. I could be like super excited to bring it to the world. And I'm like, boom, here's this thing. Check out everybody. But then of course, somebody else doesn't have an English accent or I haven't considered every possible person in their points of view in the world. How do you balance that responsibility with like innovation?

Scott Hanselman (19:58): That's the thing that happens, right. You bring something out, whether it be a Facebook or Meta or something. And it doesn't work. And then you have to decide, did they intend it to not work like that? And how quickly can they fix it? There's been missteps by Facebook, by Microsoft, by Google photos. The question is, did you think about it at least somewhat as opposed to not thinking about it at all? Like for example, if you came out with a thing and it doesn't understand when I say aluminum and you say aluminum. That seems like a small thing, but it could get much more worse than that. And then the question is, did you build a system that was extensible enough that the next version fixes it? And then suddenly I can say centrifugal and you can be like, what? That's not a thing centrifugal.

Scott Hanselman (20:39): And then we can have our little chat about how funny language is. But if you built a system that fundamentally can't support me then you've excluded me. For me, it's about not excluding people. It's just about making it work for everyone. But the best you can do is your best. And then you'll always kind of get to 80% and then try to get to a hundred, but you'll never stop. And it's not about, the naysayers may listen to the podcast and say, "Ah, this is woke." No, it just trying to make it work for everybody. That's not that complicated. It's no different than putting a ramp on some stairs so everybody can get into the building. That's all we're talking about. The ramp doesn't bother you. And then one day you may need the ramp. When you pull your ankle.

Alex (21:19): What kind of role do you think coding has on someone's social mobility? How accessible is coding and what can that do to your life if you learn to code?

Scott Hanselman (21:27): I'm the first person in my family go to college and the first one to code. And it has been pretty extraordinary for us. My family are kind of my blue collar for lack of a better word. My mom was a zookeeper. My dad was a firefighter. My dad did carpentry and stuff like that. So like hands with calluses, I literally Face Timed him a couple days ago and he helped me replace a sink and a faucet and a drain. And it's funny as an old programmer, I'm like, I was so excited to like, I fixed the drain all by myself and I installed the whole plumbing. It was like, wow, this is what it's like to work with your hands. I should do that. That's a way cooler job, but I'm going to go and replace all the faucets in the house. Now I'm super excited about that.

Scott Hanselman (22:05): That sense of empowerment that I got, anyone can get when they do something that involves changing the world around them for the better. I was super excited to change my faucets. And if you can go and automate a thing and make a system easier or better and set someone up for success, it can be hugely impactful. It can take people out of poverty. It can improve people's lives. Automation, I think is really what it's all about. That's the way I can describe it to non-technical people. Like programming, sure. That's kind of abstract, but I took a thing and I automated it. So I love teaching business people about like how to automate Excel or Word, or even going to a website like IFTTT, if this, then that, or my Microsoft flow and just writing a little thing.

Scott Hanselman (22:51): Like if I put a file on this folder, it emails this person like, oh my goodness, you just automated this whole thing that a person did manually before. Automation is a great way to go from an office job to a programming job. I've seen lots of really cool people in administrative office jobs become programmers by looking at a system, optimizing the loop of that system, and then discovering that they had a knack for coding. And then moving up from there.

Alex (23:15): I wonder if you would expand your sort of definition to go beyond just automation and look at it like problem solving as well, because a lot of building software is problem solving essentially. And whether or not you make the world better place could be debated in some cases. But equally it's a lot of the time about taking a set of requirements or something you're unsatisfied with and making it better, at least in your own world.

Scott Hanselman (23:37): Absolutely. I call that systems thinking what you're calling problem solving, debugging within a system. I was talking to a buddy of mine this morning and he's going to be presenting to a bunch of fifth graders. And I gave him my story about wanting toast, which is one of my favorite debugging problems. Like I would like some toast and you ask the fifth graders, you're like, I don't know why the toaster doesn't work. And then you pause and make the fifth graders uncomfortable. Because they're like, I thought we were talking about coding. No, I want some toast and the toaster doesn't work. And then one of them will say, "Well, is it plugged in? I'm like, okay, let me check. Oh, it is plugged in. Okay. So it's plugged in and I still don't have toast. What's going on? And they're like, well, plug something else in plug in a lamp.

Scott Hanselman (24:17): And then you get this really exciting debug session as we go and figure out well, is the fuse blown? Does that plug work? Does the lights turn on? And then eventually one of the kids will say something really like insightful. Like look outside are the neighbor's lights on. And you're like, what are the neighbor's lights on? We're talking about toast, you silly. And that's one of the kind of great, it's always DNS kind of things, right. Like I just want to make this website work and then it's because it's something totally unrelated. It's DNS domain name services.

Scott Hanselman (24:47): So for the toast example, I usually make it so the power has gone out in the world. Maybe like there's an EMP or maybe the neighborhood doesn't have any power. And then I talk to the kids about, I wanted toast. All I want is a piece of burnt bread, but I can't do that because the system that the bread participates in is not set up for success because there's no power. When kids figure that out, they're like, "Wait a second. Am I a programmer? I'm debugging now." Exactly right. The car won't go. Is there air in the tire? Is there gas in the tank? That's debugging. If you could do that, you're a programmer.

Alex (25:19): Scott, talk to us a little bit about how deep in the stack, you need to understand computers, right? So you're learning JavaScript. Do you need to understand like Hexa decimal and bike code and data structures and how compilers work and all this kind of stuff? Or can you just focus on solving problems with the tools you have to be a successful, productive developer?

Scott Hanselman (25:39): I am flooded with analogies. When I think about that, one of the fun interview questions I like to give is tell me what it happens when you type in a web browser and press enter. Everyone has a different answer. Some people will go, "Well, the browser makes a call to the server and then the website webpage comes back." And then you say, "Could you go a little deeper." And maybe they'll go to HTTP or maybe they'll go to TCP. I had one gentleman say that the enter key, the metal on the back of the enter key touches the metal at the bottom of the keyboard and then an electron leaps across the gap. And I was like, okay, are we going into the quantum realm now Antman? I mean, how far, how deep do you want to go right? When someone says, "I want to go from here to the store to get bread," like in our bread example, are we going to start with sending a neural notification to my legs, to stand up and like how far down you want to go?

Scott Hanselman (26:31): The stack never ends. The question is the stack exciting to you as a person? Is it fascinating to you? Do we need to think about gravity? Do we need to think about Adams bumping into each other? Is it helping you do your job? One of the challenges though, is that as someone who's been doing this for a long time, I'm overwhelmed by knowing those things. I'm overwhelmed by knowing that there's stuff I don't know underneath that. And I don't know what the new programmer needs to know. So I could inadvertently gate keep by saying, "Well, C# has this thing called a garbage collector, cleans up memory for you, but I'm not going to let you use that because I want you to learn assembly language first." And then when you're done with assembly language, I'll give you C and then I'll give you C++, and then I'll give you Java and then I'll give you C#. And then you'll appreciate suffering as we did.

Scott Hanselman (27:19): When I wanted to learn to drive, my dad made me learn how to drive a stick shift. He made me change the oil and like all this kind of stuff, did I need to know that to drive? No, but in his mind I did. So if someone says, "Hey, Mr. Hanselman, I'd like to learn how to code." Well, let's talk about CPU registers and how we took a rock and we've shot it with lightning and made it think, and that's Silicon. And now that's what computers are. They're just rocks that we shot with lightning. And now they think that's way too much, right? Why don't I just open up a web browser and press F 12? So my opinion is one layer below your comfort zone will make you a more informed programmer and an acknowledgement that there are infinite layers below that, but only if it feeds your spirit

Alex (28:04): Did you appreciate your thought for that lesson and asking you to learn how the car works before you learn to drive?

Scott Hanselman (28:09): So that's where I struggle. Am I a better driver? Yes, absolutely. I replaced my plumbing. I asked my wife who is very intelligent. She has an MBA. She is a nurse. She's had multiple careers in her life. Speaks multiple languages. Does not care what's on underneath the sink. You see what I'm saying. I'm like, Hey, why don't we work on this together? We could replace this plumbing together. It'll get you a better understanding about how the house works, doesn't care. And that's not, that's not gendered. That's just how she's wired. Everybody's wired differently. I asked one of my kids and they were like, oh, that's awesome. Like, I didn't know what was under the sink. So some people are going to want to know what's under the sink. They're going to want to look, call stack. Other people won't. I think that it was great that my dad taught me that, and I know more about cars, but I think that it shouldn't be a requirement to drive a car, right. You don't need to learn about how to change your oil if you're just riding in an Uber.

Alex (28:58): Good point, who really is anybody else to tell you what you have to do or have to learn? I think in coding, whenever someone starts using words like that, I raise an eyebrow. Like there are many paths to success and frankly, how you learn and what you learn is probably going to depend on, as you say, what kind of person you are.

Scott Hanselman (29:14): Yep. But I think it is fair to say, and it is not an unreasonable attitude to say you will be a more informed driver. If you know that there's an engine in the front of the car and there's an, internal combustion is a thing.

Alex (29:27): You might be surprised if you're driving a Tesla.

Scott Hanselman (29:29): Are you a better driver? No, but you're a more informed driver.

Alex (29:32): I appreciate then that this could fall into the realm of like gate keeping and stuff. But in your practical experience, let me ask you this. I use JavaScript most days and I'll use something like an Array or I'll use a data type, like a SAT or TSharp, for example, you could use a dictionary or something like that. And I understand that these could be things you learn in the computer science curriculum, right. Like how to implement your own data structures and understanding how things like sorting algorithms work under the hood. But I look at that and my day to day experience, and I think, well, I'll use the built-ins sorts function or .net use link or something to do these kind of these kind of processing. So do new developers really, especially when they're getting started for that, they're looking for their first job potentially. Do you think this merit in sort of going at least that deep and thinking about how these things work?

Scott Hanselman (30:16): I personally think they do. And an example, as I love analogies as you know, is my kids speak English natively. They make mistakes every day. They're in their teens and they are in class in English class, learning about adjectives and prepositions and nouns and verbs, right. Could they learn the language without learning about the underlying structures that support the language? Sure. Is it weird that we're teaching them grammar? No. It's a thing that we all decided about. Yes. They could be competent language learners and speakers without knowing about the names of all of the different things. But that's what we've decided to do. That's how we learn these things in school. So yeah. You could learn idiomatic C# or idiomatic Java and never know about stuff. You just like, yeah, this is how you sort things, you go dot sort. And not know, well, yeah. Let's talk about adverbs. Let's talk about how adverbs are structured and let's make some new pretend adverbs.

Scott Hanselman (31:08): This is about going one layer below. If you're going to drive, it would be nice if you could drive stick shift once, so that you know that's a thing. So if you're going to start using data structure, you should know the difference between a list and a read only collection. And you should know if you're going to do threading. You should know if it's thread safe or not. I don't think that you should necessarily, 10 years into your career, be able to create a list structure from memory or a doubly linked list on a whiteboard. Because that's not what your job is. If someone asked me to code on a whiteboard, I would usually say, "Do we do a lot of whiteboard coding here at the company?" Like we're selling insurance. Do you find yourself invent link lists from scratch on whiteboards? And that's kind of a sassy answer, but it does make the point though that like, yes, I understand the underlying structure. No, I could not code it from scratch today. Do you see the difference?

Alex (31:55): Sure. And I think it's worth distinguishing the types of developer roles because not all developer jobs essentially require the same skillset. I do see what you're saying completely. And I personally don't regret learning those things because they told me how to think more like in algorithms. And they kind of showed me patterns. Like I could adapt to my own problems, for which if I didn't exist a built-in function or a module. More over, if something did go wrong or something was a bit quirky, I'd have a good jumping off point. I'd be like, okay, well maybe that thing I learned is why. And it certainly doesn't hurt as a learning exercise. Do you need to do it well as with most things in programming? It depends a little bit.

Scott Hanselman (32:33): Yeah. I'm not a good mechanic, but I do know if I started having a weird sound in my car somewhere, I could probably nail it down to like a couple of parts. Same thing would apply. If a program starts acting weird, I might not be able to debug it all the way to the assembly language or the compiler, but I could probably get pretty close because I have a sense. That's all I think we're asking people to do. Just to have a sense of like, huh, I think it's in that area and I can then debug it from there. And the other thing is an acknowledgement that those layers exist means that you can dig into them when you need them. It doesn't necessarily mean that you need to carry around encyclopedic and trivial knowledge of the entire stack all the way down.

Alex (33:12): Just to close this out, Scott, because we're virtually out time. I was hoping you could share maybe what you think is some of the most important thing for new developers, keep in mind as they embark on their career?

Scott Hanselman (33:22): That's a great question. I am really excited about the cloud. And I think that a great thing to understand is that just because the cloud is happening, doesn't mean that the fundamentals of computers has changed. They still have memory. They still have CPUs. They still have cache. They still have latency when they hit the network, you still have the speed of the IO to your storage. So whether you're talking about a raspberry pie or a MacBook or a Windows desktop or something in the cloud, come back to those fundamentals. No matter what you're driving, whether it's a geo Metro or a Tesla, they still got four wheels on the ground made of a rubber. So if you remember those fundamentals as you find yourself coming upon new technologies, you will very likely have a foundation that is set up for success.

Alex (34:07): Scott Hanselman, thank you so much for joining me on the Scrimba Podcast.

Scott Hanselman (34:10): Thank you.

Alex (34:11): That was Scott Hanselman, a developer and roaming type teacher person. I think Scott described himself as. Thank you for listening. If you've made it this far, you might want to subscribe for more helpful and uplifting episodes with recently hired juniors and industry experts like Scott.

Alex (34:29): As a reminder, I'm speaking with a successful student named [Ineza 00:34:33] next week in what will be episode 57 of the Scrimba Podcast. You can also tweet me your host, Alex Booker, and share what lessons you learned from this episode so I can thank you personally for tuning in. My Twitter handle along with Scrimba's is in the show notes. See you next week.