And what I say is that you have to start with a goal. That you're asking me, how do I learn to program C? But that's the wrong question. You need to first figure out what do you want to do with C. You need something concrete that you want to build with programming. And this should be something I think that matters to you based on your interests and passions.
ConorAnd yeah, I completely agree with everything you said in your message, Bryce. If you want to learn to program, find something you are passionate about. My name is Connor, and today with my co-host Bryce, we exchange thoughts on how to get started in programming.
BryceIt's Friday, June 7th, and uh I am feeling reflective this morning. Uh this week uh you and I recorded a phone tag uh episode uh because we've both been uh pretty busy. I'm in the middle of a move, you've been traveling. Um, I'm really proud of us that we've kept this podcast going and kept publishing every week, um, despite all the stuff that's going on in our lives. Um I'm also really grateful for all of our listeners. Uh I was looking at uh our reviews on various platforms the other day. Um and it it just it it warmed my heart to uh to see how many people enjoy this uh podcast. Um yeah, it just it made me feel good and it makes me want to uh to deliver the best content that we can. You know, we we we joke about me uh half-assing it sometimes, but uh I I really do care about this uh this podcast and our listeners. Um I I I decided I was gonna record this morning because of uh a conversation that I was having with my girlfriend who is uh uh about to leave her job and um go pursue uh a career in sort of sports uh management, let's say. She's uh she really loves tennis. She's loved tennis her whole life. Um she's a tennis coach, she's got all this experience in uh uh process engineering and efficiency in business operations, and so she wants to do some sort of tennis coaching or event organizing or consulting. But one one thing that she's asked me about a couple times over the past few weeks and months is she wants to learn how to program. So this week I was coming up with a plan for how she could get started programming. And I told her this morning something that I tell pretty much anyone who comes and asks me about learning to program. I oftentimes have students or people who are new to the industry who approach me and say, like, what's the best way to learn C? Like, what's the best book or or tutorial or resource? And I always tell them the same thing. And what I say is that you have to start with a goal. That you're asking me, how do I learn to program C, but that's the wrong question. You need to first figure out what do you want to do with C. You need something concrete that you want to build with programming. And this should be something I think that matters to you based on your interests and passions, or maybe based on the particular sector of the industry that you'd want to be in. But I really think it works best if it's something that you're passionate about. Maybe you really like robotics and you want to learn to program a robot, or maybe you want you have some project where you want to program an Arduino to automate some task in your house. Um maybe you love cooking and you haven't been able to find a recipe app that does exactly what you want and it's like always really bothered you. Or maybe you're really into fitness and you want to do some analysis of uh some fitness data that you have from a bunch of different fitness apps. Um and this is actually how I started. And we've talked about this on the podcast before. Um, back when I was an 18-year-old, I throughout my childhood was really into text-based games, uh, uh, these games called MUDs, which were uh these sort of online multiplayer games. It's this weird space of gaming where you didn't pay for them, they were just sort of run by volunteers, they'd be hosted on a server. It were very simple because there was no graphics, it was just, you know, a text server and um you'd connect to it with Telnet. And I really loved MUDs and I wanted to learn how to create my own MUD. And somebody uh at some point told me, if you're gonna create your own MUD, you might work with some coders, but you really should learn how to code yourself. And that's why I started to learn how to program. Um and uh and then you know, through that goal, I uh you know, I had the motivation, and then eventually I became sidetracked, I discovered boosts, I got involved with all these other things, and I never did end up making that mud, but I I would not have found my path in software engineering if I hadn't started off with that goal that was something that I was passionate about, that um uh sort of dictated the course of my education. Um, I I haven't talked in greater detail about those early days. Um we talked a little bit about how uh when I was uh my first exposure to Boost was some Boost String algorithm that one of my my colleagues who was working on the mud with me uh was using this string algorithm, and there was some some bug in it, and I reported the bug up to Boost, um, and then I fixed the bug and boost, and then I became a Boost uh uh contributor, eventually started um uh working on Boost Spirit. Um but uh uh we've talked about that, but we haven't talked about a few other things. Like when I was still in those early phases and I was thinking about making my own MUD, um I was looking, you know, the core of a MUD is this uh networking engine where you need to be able to accept uh uh you know uh TCP connections over telnet, um, and then you have to have some event loop where you process events. Um and uh one I remember one of the early things that I did was was to implement secure sockets uh in this uh mud engine. Uh and so I used uh some SSL library, I'm sure it was OpenSSL, um, which like there was really no reason to do this. Uh you know, this wasn't like high uh security. Uh this was before like uh secure sockets everywhere was a thing. Um but uh I I decided I was gonna do this because it seemed like it'd be fun. Um and then at some point I think I tried to like implement some parts of uh the SSL protocol on my own or some cryptographic uh uh algorithm. Um and uh that that early learning uh uh about networking uh and sort of low-level programming and cryptography, um that uh kind of led me to a lot of my uh my other work um in distributed systems uh when I was working on HPX. Uh you know, I was uh uh a large part of my responsibility with HPX was around the addressing system and the networking layer. Um and a lot of that you know comes from my my early days playing around with MUDs. Um and the you know, the thing that really launched my career was once I made the connection with uh Boost Spirit, in particular with HartMet. And the reason that I started using Boost Spirit was because of that string algorithm, that first string algorithm, the Boost String algorithm that was my first exposure to Boost that I found the bug in. Um I think it was like a split thing. Like it would take a string and it would split it up in some way and tokenize it. And I needed this, uh, we were using it when we were uh parsing the uh inputs from uh players in this MUD engine. And the split thing didn't exactly parse in the way that I wanted. And you know, I there was some bug with it, I fixed the bug, but then somebody at some point said, like, you know, for your use case, you might want to use something like Boost Spirit to parse the input. Uh and so I started looking into that uh and playing around with Boost Spirit. Um and then that's how I got involved uh uh as a contributor to Boost Spirit. Um and then that's how I met Hartmet. And uh Hartmet was the one where once I dropped out of college and I needed a job, I I asked him uh, you know, if if I could if he knew anybody who was hiring. And he said, come on down to Louisiana. And that wouldn't have happened if I hadn't been uh uh a contributor to Spirit, if he didn't know me and know that I was, you know, uh a good budding programmer. And I wouldn't have been a contributor to Boost Spirit if I hadn't uh been using that Boost String algorithm. And I wouldn't have been using that Boost String algorithm if it hadn't been in this uh mud engine that I was working on. And so it all came back to that original goal. That original uh you know goal, that's what motivated me, that's what drove my learning, that's what pushed me towards C because a lot of these uh uh MUD engines having to deal with you know low-level things like networking, they were written in C ⁇ , and that sort of launched the entire trajectory of my career. Um so when somebody comes to me and asks me, you know, generically, how do I learn programming? How do I become better at C? Um that's that's almost always the wrong question and the wrong approach. And I and I always answer it back with that question of what matters to you? What do you want to do with C, with programming, with you know your pursuit in this software engineering field? What matters to you? Because you have to find something that matters to you. Now, in the case of my girlfriend, the answer is tennis. She's passionate about tennis, she loves tennis, she's about to try to start a career in tennis, and so I suggested to her that I think that what you should do is think about what sort of tennis-related programming project could you take on as a goal. And uh the framework that we're gonna use to teach her is Swift Playgrounds, um, which is something we talked about with Doug uh a couple episodes ago. And I'll tell you why I picked Swift Playgrounds. I spent a couple days sort of researching like best approaches to teach uh non-programmers how to program, to teach somebody who has no programming background uh how to program. And I wanted to find something for Python. And one of the reasons is that I am now doing more Python stuff at NVIDIA, um, and I don't know that much about Python, and so it would be good for me to learn a bit about Python. Um but I ended up on Swift Playgrounds, and the reason was uh you know I started searching for like you know how to learn to program, uh, you know, how to learn to program for no non-programmers, and just like a bazillion results come up. Um there's you know, paid courses, there's free content, there's code camps with instructors, there's YouTube videos, there's all sorts of other interactive uh content, um, there's more static content like articles and tutorials and books. It's frankly overwhelming. And the challenge for me was that I I was looking through all the possible options, and there were some things that I'd heard of before, like Khan Academy and Udemy, um, some of them that are uh things that I thought highly of, um, but it was hard for me to judge three things. One, how good is the content? Two, is the content at the right level? Will it be suitable for somebody who's got no prior programming experience? And three, how much setup is involved for the content? Do you have to install a development environment? Do you have to download stuff? What type of computer do you have to have, etc.? So I felt overwhelmed and I decided that I was just gonna check out Swift Playgrounds because I had seen some demos of it before, I thought highly of it, I figured I'd give it a shot. It was super easy to get set up. I just downloaded it, and that that was it. I have the entire development environment, I don't have to set up anything else there. Um second, I love that it has a visual component to it. Uh, and I think that makes it so much more uh approachable. Um and third, I could just tell immediately that this was quality curated content. Um, and that's sort of what you'd expect uh from Apple. Um and the fact that uh it's from Apple, and that means that it's gonna be so nicely integrated into the development environment that my girlfriend would be using, which is either a MacBook or an iPad. Um and so within like three minutes of playing around with Swift Playgrounds, I was convinced that this was the thing to use uh to teach her. Um and the fact that it's like the official thing from Swift and from Apple was like a big deciding factor there. Um if if when I had Googled for you know how to learn Python for beginners, if there had been like one clear thing that was like an interactive uh experience that was easy to download and set up and it was a something that was from the Python Software Foundation, uh and you know, clearly was something that was uh anointed by the Python language itself, I might have gone with that. So the uh the plan is that she's gonna learn uh Swift with Swift playgrounds, and then she's gonna come up with some idea for uh some sort of tennis app, uh hopefully something that's gonna be uh fairly simple and straightforward uh and achievable. Um and then we're gonna try to build it together and we'll see how that goes. And maybe I'll learn a bit about Swift in the process. So um I'm not really sure why I'm uh recording this. I I just uh I guess I was excited to share with you this sort of message that I give to newcomers about um uh setting a goal for yourself when you get started in programming, and I just wanted to share that with you and share that with the listeners. The listeners who I am very grateful for. Hey Connor, it's Bryce again. I did listen to the last phone tag episode, so I did hear you wishing me the best of luck uh with the move. So, ha, there, and I even listened to it the day that the episode came out, so what do you know? Talk to you later, buddy.
ConorAlrighty. We are here in Oslo, Norway. Just got your message. Well, actually, I got it a few days ago. But uh I have been traveling and have not had time to reply until now. We are walking. What time is it? I believe it's like 8 45 a.m. And we are headed to day one of the three-day NDC Oslo conference. It's Wednesday, June 12th, I think. And we are only a couple minutes away, so this is gonna be a pretty short recording. My talk is tomorrow at 1.40 p.m. local time, entitled The Power of Function Composition. The revised version of the talk that I gave at KraftConf a couple weeks ago. And yeah, I completely agree with everything you said in your message, Bryce. If you want to learn to program, find something you are passionate about. I have several of these kinds of projects. You mentioned your MUD game, which led you down the C rabbit hole all the way to Boost Spirit. My uh passion these days is city striding. I ran 20k this morning, woke up at 5 45 a.m., collected 44 streets, and I'm inside now. Gotta keep my voice now. Honestly, I'm looking for 7-Eleven. I see. It's it's downstairs. Anyway, so we'll keep talking, just at a lower voice. Yeah, ran 20k this morning. Also ran 20k yesterday. Yesterday was a more successful city striding day. 79 streets. I don't know what I'm ranked in Oslo. But yeah, we have a GitHub repository. I think I've mentioned it on the podcast before. A program that generates roots. Typically I've been hand-rolling my own roots these days. Uh because my algorithm doesn't work, you know, s as good as uh heat map assisted human. But I still generate the heat maps. Oh, look at that. I could have gone right underground. Right past the 7-Eleven. Anyways, uh we generate these heat maps using Python, Flotly Express. Honestly, GPT wrote most of it for me. But hey, let's programming these. Oh my goodness. Nothing to do but wait. Alright. We're waiting in line with the 7-Eleven behind. Six people now. And yeah. I update this GitHub repo pretty actively with data for Toronto. When I was in uh Monterey slash Pacific Grove. Did a lot of city striding there. Santa Clara, city stridding there. Anyways, I'm obsessed. And I mean I'm not learning how to program. But if uh someone was trying to learn how to program and they had some kind of obsessive hobby like this. Writing some kind of Python script or application to optimize things. No better way. No better way, folks. Yeah. I also got my Scrabble game. That's in Python as well. And it's called Hookstar. I haven't worked on that recently. But uh link in the description. Link in the description. I give a talk at Codedive a couple years ago. And yeah. So is whether it's Swift? I honestly I'd probably recommend Python. Um, all things being equal. But if your girlfriend or you, the listener, are on a Mac, or I guess typically wouldn't be the listener. If you're the listener listening to this podcast, odds are you're already code. So if you have a friend as a listener that is thinking about getting into programming, I'd probably recommend them Python. But Swift is great, they got Swift UI. What else would I recommend? Would I recommend any other language other than Python if they're trying to get into low-level stuff? I'd probably recommend Rust. And uh definitely use ChatGPT. Alright, I gotta buy my beverages here. Have a good day, thank you. Alright. Did we leave all that stuff in? Maybe. The English cashier was surprised at my use of the word howdy. Anyways, Python Swift plus an LLM. I use perplexity these days because I get a free subscription through work. And I use the Cloud3 Opus model. In my opinion, it is far superior to any other model. Everyone says GPT-4.0 is good. I think it's straight trash. I don't know if it's because I started using it instantly when it was released, but it was just spewing hot garbage for a quick minute. Whereas Cloud3 Opus, it's the largest language model that is released in the cloud series. It's freaking fantastic, folks. Does basically all the work for ya. Anyways. Probably Bryce's advice was better than mine. These are just the ramblings of a person walking to a conference, but yeah. Good luck. To the potentially first-time listeners of this podcast, if regular listeners sent this to their friends who are looking into getting into programming and have never uh programmed before. Alright, I gotta go. Bye. Thank you. Be sure to check these show notes either in your podcast app or at adspthepodcast.com for links to anything we mentioned in today's episode, as well as a link to a GitHub discussion where you can leave thoughts, comments, and questions. Thanks for listening. We hope you enjoyed and have a great day.
BryceLow quality, high quality. That is the tagline of our podcast.
ConorThat's not the tagline. Our tagline is chaos with sprinkles of information.