For today’s interview, Kyle checks in with former Stacker Michael Stum, who is now Principal Software Engineer at neuRealities. They dig into the perfect sandbox that is WebAssembly, Michael’s journey from early Stack Overflow user and employee, and the perils of legacy code.
Episode notes:
Kyle notes that his only experience with WebAssembly is Blazor. If you’re wondering about Blazor, we covered on the blog in 2020.
While Michael may have been the first user to get 10,000 rep, he’s not stopping there.
His current employer, neuRealities, is still in stealth mode, shhhh.
Find Michael on his blog and possibly elsewhere.
TRANSCRIPT
[intro music plays]
Kyle Mitofsky Hello, hello, and welcome back to We'll Be In Touch, a podcast about job interviews, career development, and software engineering. Today I'll be talking to Michael Stum, Principal Software Engineer at IQXR. Hello, hello, Michael. How are you?
Michael Stum Hello! I'm doing pretty well. How are you doing?
KM Wonderful. Okay, so we know each other, we were former colleagues at Stack Overflow. You've been at IQXR for about a year in that startup life, but why don't you take me back through your whole journey into tech. How'd you get started into tech? What's the flyover and kind of how you got here to where you are today as a developer?
MS It has been quite a journey. I was lucky enough that my parents decided early on that this whole computer stuff might be the future. I mean, this was in the late eighties, so I got a Commodore 64 when I was like five years old, late eighties, and from there I was just fascinated by computers, by technology. Obviously at that age it was mostly loading games, which on that machine, you turn it on, it boots into a Basic prompt. You literally had to type in, “Load something from Comma eight, Comma one,” all these magic incantations, and from there I just kept on going, stayed interested in technology, and it was kind of inevitable that I was landing somewhere in the IT space eventually. Eternally grateful for my parents for that.
KM Nice for them to set you up like that. I know we talked earlier and your company's in stealth mode now, but what's the big picture thing is your company trying to solve and kind of what space are you in right now?
MS So we are trying to solve some enterprise spatial applications, which is a fancy way of saying VR/AR/MR –mixed reality, virtual reality, augmented reality– where if you look at a lot of existing things around, you have to do some things. Some things you have to switch off, then turn it on, switch it off. It’s like nothing is really very well integrated, and we want to find ways to integrate specifically from an enterprise perspective, multiple applications that are normally not playing very well together because of the whole shift in, again, whether spatial or not spatial. No, we want everything to work in every environment and we want to bridge some gaps in there. That is the general idea and finding concrete solutions is going to be the thing that we eventually conquer the world with. But until that happens, of course every startup, we're pretty excited about the general idea there and we think we have some pretty good ideas there. But yeah, spatial computing and trying to not just do another one-off application that's like, “Yeah, you download this one application and now you have yet another application,” we’re trying to be more bridging.
KM For spatial computing, where do you see the split between the B2B world and the B2C world? B2C, like I'm playing some fun games and shooting hoops on my headset, or the enterprise world where maybe you're trying to solve different problems.
MS I think a lot of it is stuff like integrating with other applications, specifically stuff like SSO stuff, getting your emails or calendar or even your chat system, anything like that. Whereas a lot of B2C is mostly focused on one application, and there's some pretty amazing applications out there. There are 3D CAD and drawing tools and stuff like that. But when you are like, “Oh, hey, I want to load up this 3D drawing tool and then have it stored into my SharePoint or into my Slack instance or something like that,” suddenly there’s that hard split, that hard boundary that, in a B2B context, I think you have to address that boundary. In a B2C context, it’s easier to just save it locally and turn off your headset, go to your computer, open your Slack app, get it out of your folder, and do that. That's where I kind of see the boundary. In B2C you get a lot more one-off closed applications.
KM I like asking from the perspective of what's your company do and then what's a project you're working on within your company, because there are different arcs or different epics that you might be doing, but maybe in startup world, those kind of blend together a little bit. Over the course of the last month, what's something that you feel like you've been sinking your teeth into at the company and what are you trying to solve in that particular chapter of your startup?
MS A lot of it has been cross-device, cross-platform compatibility and things like that because we all want to make a solution for one specific kind of headset. So I've been looking specifically at things like WebAssembly to try to find ways to not have to maintain code bases in multiple different languages. And there's a lot of interesting things going on in the WebAssembly space specifically to get us out of the browser and actually stuff like the WebAssembly system interface which is meant to not just be like, “Oh, you can run C++ code in your browser,” but it's like, “No, you can run WebAssembly code everywhere.” So I've been diving pretty deep into that space because it sounds like, if it works, it would deliver on this idea that Java or .NET have been write once, run anywhere, except both of these need a ridiculously heavy JVM or the CLR, whereas with WebAssembly you have this incredibly simple sandbox VM. You compile to that and then you can literally run it anywhere, which actually, WebAssembly, the folks in charge of it actually seem that they might be able to deliver on that. A bunch of performance concerns, a bunch of functionality and compatibility concerns, so it's not all sunshine and roses, but I've definitely been doing a lot of digging my teeth into that and it's been pretty exciting. I think it's some underrated and underutilized technology, but also it needs a bit more in the oven to really shine.
KM So I come from the .NET background. My introduction to WebAssembly is mostly through Blazer, which is, “I'm good at writing C# on the server, maybe I don't want to write JavaScript on the client, so I'd like to ship some pieces of my server to the client and continue to be able to write C# there because that's the thing that I prefer.” But your use case you're saying is, “Okay, we did all this work to make WebAssembly able to execute code in the browser, but what is the browser but a runtime? Take the WebAssembly piece of it out and then run it anywhere.” Is that kind of, we developed this technology for the browser and now there may be applications outside of the browser just as a runtime?
MS Pretty much, yeah. It's not our development. It's an open actually W3C development. It's called WASI, and there's actually, so like, yeah, Blazer is about running .NET in a browser. There is a .NET WASI compiler, which is basically you compile a .NET to an application that's a WebAssembly application, and you can run it on a Unix command line no problem, it actually works pretty well. And the idea with that one, if you know anything about POSIX where you have your file open, your file handles, your network sockets and stuff like that, WASI is basically providing that glue. It's basically, “Here's how you interact with files. Here's how you interact with network.” And once you have that, now you have your IO. Now you can read the keyword, put stuff on the screen, send stuff over a network, and now you are outside of the browser. You're in any context that you want. The hosting environment, which is the thing that runs the WebAssembly, has to provide the implementation of it. And with that, you can run it on basically part of edge computing, or there are some hosting providers that allow you to put your WebAssembly app in the cloud and run it. It's kind of similar to an Azure function app or the AWS Lambda application where you have a tiny little application that essentially provides a function or two, and you can just call that function over the network. And WebAssembly is one of the targets that are in there, and you can compile .NET to that. It's a relatively large WebAssembly file because there's a nine megabyte runtime in there but it works surprisingly well. You can't do a WinForms app or something like that, but you have all your .NET ECL stuff in there, if that’s what you want, or you do C, Rust, anything that can compile to WebAssembly.
KM There's an existing technology to kind of containerize and pack and bundle up executable programs that you can build, which is Docker. How might you compare taking a WebAssembly container, like a registry, a packet, how might you compare that to Docker in performance or kind of functionality at this point?
MS It's actually interesting because the developer of Docker, he actually tweeted– whatever you say these days– that if WebAssembly and WASI would've existed back when he wrote Docker, he wouldn't have written Docker because basically it's a similar thing where WebAssembly forms like a sandbox, so it doesn't have access to any external resources unless you give it, “Here's a function.” It can do forward function definitions like, “Give me a function that has this signature,” and the hosting environment has to provide that to you, but in itself, it has its own linear memory space. You can literally give it an array of bites and it can party on its own array of bites, but it cannot break out of that, assuming back in your runtime. It can corrupt its own memory, but it cannot break out of its own sandbox. So in a way, and these applications can be very complicated. It's not little one-line functions. There are some pretty huge codebases, C++ codebases even, that compile down and performance is mainly a problem if you need to exchange data with an external environment, because shared memory is not really a thing in WebAssembly, so you have to marshal anything into WebAssembly and then out the WebAssembly sandbox, which if you have code written in C and you're trying to host it in C#, all your strings probably need to be changed from the UTF 16 .NET version to Linear ASCII in C. So anything in and out of the WebAssembly sandbox needs to be marshaled, which that is probably the biggest performance concern. There are ways to do shared memory by just making your own standard or whatever, but apart from that, it is very, very performant because the WebAssembly VM is very simple and there's a runtime that does things like ahead of time compiling, so it compiles WebAssembly then to your native machine or whatever it is, so it doesn't even need to interpret the WebAssembly code anymore. It just runs natively compiled code and the performance is– I forgot the exact number, but we are up to I think at least 75% of native performance, which is pretty significant compared to C++ with all optimizations compiled natively versus WebAssembly. We're pretty up there in terms of performance. So one of the things with Docker specifically is, I know it's not a VM, but you are basically running a virtual operating system, whereas WebAssembly you’re running a single application so it's more like an application network container, and it can be a complicated application with networking and everything, but if you want five applications, you need to run five WebAssembly containers. So somebody will eventually have to come up with something like Kubernetes for WebAssembly or something that's more, and you don't need Kubernetes for most Docker installations if you’re doing stuff locally. You probably need something like that for a WebAssembly container because you inevitably run with multiple sandboxes, and in order for them to talk to each other, you need to provide some kind of synchronization mechanism, and again, marshal data in and out of their respective memory spaces.
KM It sounds like Docker’s had quite the head start in terms of building up an ecosystem of tools like Kubernetes to help manage production rollouts of Docker, and that WebAssembly is promising but still needs some of those kind of rough edge polishing.
MS Absolutely. It's something that has started up a while ago. Obviously it was the pandemic that has both health and hurt– helped because obviously work from home and everything like that meant that there's a lot of interest in technologies that make it easier to deploy outside of physical infrastructure. It hurt because obviously everyone has been busy with a whole bunch of stuff. So there are some companies that are doing package repositories, but there's no, “Oh, this is the one,” like the NPM or the Docker hub. There are multiple companies, multiple sites that try to be it, but we don't even have the WASI standard itself is not fully implemented yet, and there's still multiple milestones on the list. So there's a definitive like, “Okay, we are in the middle, or even somewhat early on in the process to get out of the browser and into that global ecosystem,” but we won’t be there for another year or two.
KM Great. Okay. I want to move off of WebAssembly. That was a really good deep dive, and talk more about you. One of the things we were talking about before the actual podcast was that you joined Stack Overflow just as an end user. Created an account in early 2008 in the closed beta of the original site, and I'm really interested in kind of seeing users at that point in time. You have definitely seen the entire journey of Stack Overflow and where it's been, but take me back to 2008. You joined then, you became a Stack Overflow employee eight years later in 2016. Did you imagine at that point that that would be the arc where you were contributing to the website and then you'd actually go contribute as an employee to the company, or what was motivating you at that point in time to be a user there and contribute?
MS In 2008 when I joined Stack Overflow– I have to go a little bit over my journey a little bit before that because I did a lot of my hobby work in the nineties was about I was building computers, messing around with Windows and the things that you do, so I got interested in the system admin side of things, but then I had programming as a hobby on the side. Again, Commodore 64 Basic which was inevitable to just dive into anything on that machine. Delphi, still greatest thing ever, but I never really was a programmer. Many of my older Delphi applications, you know them because button one click, button two click, button three click, button four click where all the business logic lives. So I was never a real programmer at that point, but because of the way my jobs and everything worked out, I was eventually finding myself in a position where I was in charge of maintaining Microsoft Check Point installation and trying to customize it and everything like that. And at that point I knew I didn't want to do system administration. I didn't want to be on the IT side. I wanted to build stuff. And around 2007, that's when it was like, “Okay, I have to learn C# for my job. No real alternative to that.” Which then it's like, “Okay, how do you pick up programming?” At the time, I was reading a lot of blogs, specifically Joel on Software and Coding Horror were two of the ones that I was really reading a lot. So when I saw Jeff Atwood announcing that he was doing this, finding a name for his startup, I actually voted on that poll. I forgot exactly what I voted for. I don't think I voted for the name Stack Overflow, but I was definitely like, “Sign me up. This might be a great way to help me learn C# better.” Then when the Beta signup started, I sent him an email immediately about joining and got in second week of the closed Beta. And from that point on, because of their respective audiences, it was a very .NET-centric initial user base. You saw a lot of other things, but if you look at attack statistics and everything like that, I'm pretty sure .NET-related questions were dominating early on. And for me that was great. I could ask questions there and I actually learned a lot more by answering people's questions. It's like, “Hey, that sounds like an interesting question. I don't know the answer. Let me research for myself,” and I was just like, “Oh, you pick up most of the information here, there, there, there, there,” and suddenly my knowledge of C# exponentially grew. I can legitimately say I learned C# through being a user on Stack Overflow, just because it was really engaging to just try to ask and answer questions there.
KM So you found it just like you would see a question and not know the answer, and that was what gave you the itch to be like, “This certainly seems answerable. Let me go explore that.”
MS I'm the kind of person, if you give me a textbook, I will legitimately fall asleep about 20 pages in. I cannot read a textbook end to end. I cannot work like that. I'm the kind of person that's like, “No, give me a problem and I'll figure my way out around it, and in that journey, I'm going to learn everything that I need.” And that's pretty much how Stack Overflow was. Just, “Here’s a lot of problems,” and that was great. It’s maybe not the most effective or efficient way to learn a technology for many people, but for me, it just kept me engaged. And then I will not lie, it was kind of nice to see that reputation grow and to win a few races for early reputation goals. Eventually, you can't compete because he's actually legitimately good at programming where I was just like, “Eh,” I just had time. No skill but time. It was just like, it kept me really engaged. The gamification of the whole Q&A system totally worked for me, and especially back in the day where it was like we had the fastest gun in the west problem back in the day, but still, even if we had the second or third answer, there was still something in it for me, even if my answer wasn't accepted, I didn’t care. I was more like, “Hey, you gave me a good problem. I learned something,” and that was great. It worked for me.
KM Among your accolades is first user ever to 10k rep on Stack Overflow. Congratulations. How do you think engaging with those tech communities on platforms like Twitter or Stack Overflow has then influenced your professional development?
MS A lot early on, but because you have this gigantic problem space and there was a lot of, “Where do I learn from or who do I learn from?” Again, I'm not a textbook person, I'm not a online course person, and back in 2008, we had YouTube but a lot of training was still very traditional. Go sign up for an actual instructor kind of thing. And especially early on, Twitter was fantastic. I actually joined it because Jeff Atwood was mentioning it on one of the podcasts, and your spirit of community was like, “Oh, I could connect to people that were actually accomplished in their field.” A lot of people working at Microsoft, a lot of people just blogging, consulting, and you learn so much. I think 2008 to 2015-16 maybe, I think that was really blogging at its finest. These days it was before everything moved to Reddit and Discord and all those walled gardens where things go to diet only. But there was a lot of just like, yeah, you just go into your timeline and people were just blogging, even when they weren't blogging. Twitter is microblogging, but you could just read so much interesting tidbits and morsels of information that was like you just get so much relevant information, especially once you curate your timeline and follow a whole bunch of tech people. And obviously all the tech people, they adopted Twitter early on so that was pretty easy to find very good people to follow. And I had some pretty good interactions. I remember I talked to the program manager of Microsoft CodePlex back in the day because that was when, “Do you go CodePlex or other things?” was a legitimate question. That was before the complete domination of GitHub. And I learned a lot. I mean, I definitely also learned a lot about the human side of things. It's easy for me, especially. I'm saying this somewhat cynical that I became a programmer because everything out there is terrible and I need to fix it and I can do better. You learn very quickly that there is the business and the pragmatic side of things, like, “Why didn't they fix the problem? Oh, because there's 500 other things on their list and this doesn't even make the top 10 or even top 100.” I don't like it, but I get it. It's like, “Yeah, but this is my problem. It needs to be fixed,” but I understand it but also you suddenly realize you're not just yelling at the void, you're actually yelling at the people that are working on it. So that was a pretty important thing, which just brought me closer to the human side of things and realizing that there's real people trying to solve real problems within their constraints, whether it's time, whether it's money, whether it's their bosses prioritizing things differently. And that was actually almost a more valuable experience than the technical side of things because it's so easy to lose sight of the fact that they're actual people on the other side, and most of them are great people. I have very few legitimately bad experiences with people. So I think that was the unexpected but super valuable learning from early Twitter.
KM Speaking of the people side of things, and this is an interview, so I'm going to ask you everyone's least favorite interview question– can you tell me about a disagreement you had with a coworker? It could be on a technical thing if you feel comfortable sharing, but how you solved that and how you grew from it.
MS Let me think for a second because there have been many early on. Also when I was an entry level programmer, I of course still had my opinions and everything like that on how to do things properly. A lot of disagreements were more on the technical side but also I think it’s not a direct disagreement, but it's a matter of that I like to move fast and get to concrete goals so I'm not a big picture person. And we definitely had a few agreements where I wanted things to remain a certain way, but my manager, my coworker, they really taught me about, “No, let's take a step back, look at the bigger picture.” It’s like, “We can do it this way and have it ship this week, but we are amassing tech debt and that might not be a good way.” The only disagreement that I vividly remember is somebody was really gung-ho about WCF, the Windows Communication Framework, which is .NET networking technology. Despite what I said earlier about not being cynical and yelling at actual human beings, I am not a fan of WCF and eventually we just agreed, my coworker, he could handle all the WCF side, I was handling a different part of the application side, and that way I didn't have to interact with technology that I despise and they could work on the tech. Because at the end of the day, it's not a right or wrong. It's more like, “No, you can do it right this way, or right that way. Both have pros and cons.” And he had experience with that. He could implement it this way and I could have done it a different way using more low level sockets and the web request stuff and everything like that. But ultimately it was more a matter of like, “Okay, I learned that there are multiple ways to solve the problem. They all have pros and cons, and at some point you’ve just got to make a decision.” The decision was, “Okay, let's have the subject matter expert handle it using the thing they're a subject matter expert on, and I'm going to focus on the other things that also need to run in the application, because at the end of the day, it doesn’t matter who does what, as long as stuff gets done.” It’s not a juicy example of a disagreement, but again, it's all part of this early learning experience of real world constraints and compromises you have to do. And ultimately, I don't think they're wrong. It's just I have a personal dislike for a piece of technology, but it all worked in the end, so what do I know?
KM And maybe the value there of a service-oriented architecture that you get from deploying WCF is that I don't care about the implementation details as long as I as the consumer can call the thing. You go have fun, you write it however you want. It doesn't concern me.
MS That's true. The customer doesn't care. They want the product, they want to interact with the product. They don't care if you have it written in PHP cross-compiled to Visual Basic running on a IBM mainframe. They don’t care.
KM So in your career you've worked on both legacy systems, and by legacy system, I just mean something that's been in production for 10 years. You're going to accrue stuff regardless of where you are, and been part of startups doing cutting edge tech, right? We've done both of these things. How do you personally balance maintaining old systems while also kind of pushing for innovation at the same time?
MS That has been tricky. The first job that I had in that industry, we had a lot of applications, so it was a lot of smaller applications, so it was easy to say that when we started it was like .NET 2.0 and Web Forms on the ASP .NET side, and it was easy to say, “Okay, the old stuff, we leave it on the old technology, which is still working perfectly fine.” We can run a Web Forms application no problem in 2024. And then when NBC came around, we used that for new development. So it was a relatively easy split in that job specifically to do the old and the new. And then when we had some time like a weeklong hackathon or so, it was like, “Okay, can we reimplement the old on the new technology?” But at work, because those applications were small enough, we tried a thing about, I don't want to say microservices, but about breaking an application out into a back end and the front end. This was also when stuff like jQuery was still bleeding edge and we could do a lot of just Ajax back end connectivity. That didn't really work out for our specific scenario, just because it was obvious that we were trying to forcefully pull an application apart and our API wasn’t really an API. It was still very obvious that we were calling concrete methods rather than trying to have a good network abstraction. And it has been a challenge, definitely. There’s the urge to just, “Oh, I can rewrite this in a week.” You can't because you forget all these little bugs like, “Oh yeah, if you have a left to right or right to left writing system on Windows Vista, that doesn't support HTTP 2, now your new server stuff actually misinterpreted a user,” and stuff like that. I mean, it's all these really obscure bugs that everyone that ever tried to rewrite an entire codebase probably knows that there's so much legacy workarounds and bug fixes in there. I think that one of the things that we did in a different job was trying to modularize things, which is where you pick one piece of a functionality, find new project, make a class library for just that one project. So you’re not trying to form network boundaries, you’re not trying to make it into services. You’re just trying to get all of your code for one specific piece of functionality into a new class library. It might still be tightly covered. It might still not be a good abstraction, but at least now you have all your code for one feature in one place. And now you can think about, “Do we put a facade on it? Do we put an abstraction on top of it, and then change all the implementation?” There’s an excellent book called From Monoliths to Microservices that basically goes over all of these things, and I am not a fan of microservices, but I'm a fan of architecting your code into services. And when I say microservices, I specifically mean network connected services. You can have microservices and have them all running in the same process, and that's great, and I think that's a good way to just address your code. There's the classic book, Working with Legacy Code that basically goes into write tests for all of your stuff, then refactor. There's a lot more in that book, but that's basically the core tenet. Let's create some automated tests, now you know that you can see when you break stuff, even the stuff that you might not know that you have broken because of an obscure edge case. And the important part is do smaller steps than you might think you can do. Don't immediately start like, “Oh yeah, we move our entire authentication system into a module,” because chances are that stuff is so deeply intertwined. You really have to go, “Let's put our login page into a separate page. Only that page, not the code, nothing like that.” Once you have that, then you can do the next step then the next step then the next step. And do realize that tech debt is a hard sell in any company. You will never really get all the time and all the budget and time and people for it, so you really have to realize that at any given point you need to be able to stop, move on elsewhere, and then come back to it without leaving the code base in a mess. So you have to really do small steps. But I think that worked in a pretty good way. I think refactoring the last big monolith has been fruitful from what I've seen. I left the job eventually, so I don't know how things are going right now, but there has been some really good promising initial things by just focusing on individual pieces and modularizing them.
KM That’s great. So you got your start really early on– Commodore 64, playing around on one of those, maybe also did some learning. We talked about the fastest gun in the west problem on Stack Overflow. That's of course when you just have to be the first person to answer because you're working hard typing the answer, someone else is working hard typing the answer, and then the first person to get there gets all the rep rewards so it's really incentivizing to go figure it out really quickly and maybe that gauntlet is a good way to learn things. Those are early learning tools in your career. For someone who's just getting started in software development today, what do you think a good entry point is for somebody?
MS I think there's two pieces to it. And also before I do that, people learn differently, so different things work for different people so do not be discouraged by, “Hey, everyone says to do this, and I tried this?” Again, I can't read a textbook. I fall asleep. Some people can only learn from a textbook because they need that structure. For me, I think the most important thing is pick any programming language, it doesn't really matter. You can have eternal discussions, but if you know any programming language, usually you have a very good start into a different language. I would recommend JavaScript because it's ubiquitous and you can always pick up some Java skill related to it, but ultimately there's no ‘wrong programming language,’ just as long as you learn programming as a concept. And for me, what helped a lot is to have projects. I don’t want to build whatever. I want to do an address book or a database for me CDs. And just solve that one problem at a time. It's like, “How do I even do a screen? I don’t know. Here’s how you do a screen. Where do I store my data? So you write into a text file.” And just step by step, because it feels good to like, “Oh, now I can write to a text file.” That feels good, I made progress, and I found with a textbook or even an online course, they do work for a lot of people, but for me it never felt like I was engaged, I was making any progress on the stuff that I want to do. I became a programmer because I wanted to build stuff, and the way to become better at building stuff is by building stuff. But again, if you work better following a 20-hour YouTube or Udemy or Codecademy, whatever, what's the, I think Project Euler, the problem-solving site where you go and you get problems presented and things like that. There's a bit of a, right now, a bit of a controversial, not controversial, but a whole question of AI, like why would I learn when I can just ask ChatGPT? It's something I had to learn as a junior developer that you really need to learn the concept. As a junior developer, you just need to know how. Just tell me how to do it. As a senior developer, you need to know why, why I'm using this. At that stage, the question became much more like, “Okay, don't tell me how you solved the problem. Tell me all the ways you tried to solve the problem that didn't work and why that didn't work.” Because now suddenly you need to broaden your thing, and then as a leader engineer, you ask when or should we use this again. When everything you have is a hammer, everything looks like a nail. As a junior, I wanted to use all the technology, complicated architecture with all the right abstractions, realizing that I just built a famous enterprise Java application that had an interface for every interface and a factory for every manager, factory manager implementation client. It's something where there's no wrong way. You have to figure out what works for you, but pick any programming language and try to build actual projects that you want to build, because that's assuming you want to become a programmer because you want to build stuff. It's not wrong to become a programmer because you think it lands you a very high paying job. In that case, your motivation might be differently. You might want to get the best degree as fast as possible because it's a great point on your CV to have a prestigious degree. Nothing wrong with that, but for me, my journey is I wanted to build stuff so I built stuff. I built them terribly, but by doing it, I learned how to build my specific problems and stayed motivated most of the way. And that still drives me today. I need a concrete idea on what to build and then I can build.
KM Certainly, I mean, and this is resonant with you answering questions on Stack Overflow too. Here's a bite-sized snippet. Here's the next thing that I have to do, and it's a great problem in need of a solution, and that kind of propels knowledge. Well, wonderful. Michael, it's been great talking to you today. If people want to follow along you or the work you're doing, how can they do that?
MS Not very well these days because I’ve reduced my social media presence just mostly because of social media in this day and age. I do have a blog that I'm at some point still on my list to redo it. I haven’t blogged in forever. I do have a Mastodon account, so you can reach me on those two. I'll post the link in the chat so you can put it in the transcript. But those are the two ways to reach me these days.
KM Great. Well, we will put those in the show notes, and as always, thanks for your time and we'll be in touch.
MS Thank you.
[outro music plays]
