Linux Downtime – Episode 76

Hello and welcome to episode 76 of Linux Downtime. I'm Joe. I'm Gary. I'm Amalith and I'm Chris. Good to talk to you all and welcome to the show Chris. This is your first time here. Thanks for having me. So the reason that we've asked you to join us is because I propose that we talked about how to get started in coding and development. And Amalith said, we've got to get my friend Chris to join us. He knows all about that. And it turns out that you are a maintainer of open source software as well as past experience as a university lecturer in coding and development. So you are the perfect person to talk to. Well, I hope I have something to offer anyway. Well, we'll soon see. So I have no idea about any of this. I am a complete noob. Not even because I've never even tried beyond a tiny bit of bash scripting. And the advice I've always been given is learn an interpreted language like Python because that is much simpler than something that requires you to mess around with a compiler and all that kind of stuff. So is that a fair place to start something like Python? I think Python or even JavaScript are both like good places to start because there's a lot of interactivity available in those languages, both at them ship with a redevaluate print loop or REPL that lets you kind of experiment really quickly and easily and get a feel for how the language behaves. And everybody already has a web browser which has a JavaScript console. So you already have a JavaScript environment on your computer if you have a web browser. You don't even need to install anything to start an experiment. That's interesting because some people might not take JavaScript as seriously, let's say as something like C or even Python. Is that unjustified in me saying that that people wouldn't take it as seriously? I think that there is a really large population who might consider JavaScript a lesser language. But in this context, we're talking about learning to program and the fundamentals are available in every language. The most important thing is learning this sort of analytical thinking process, procedural thinking, what is conditional logic, what is iteration, and those translate across any language. And so the more important thing is just like mastering the way of thinking and the language almost doesn't matter. I used to be really judgmental about JavaScript, but the reality is that everybody's got to start somewhere. And JavaScript is useful. You can write websites with it. You can create really interactive things really quickly. So I think it might be more fun to learn JavaScript than it would be to learn another language. It is definitely not my language of choice. I don't really write JavaScript now. But in terms of you want to go from nothing to being able to program, you already have it. And there's a ton of resources available to learn it. And why not start there unless you have a reason to focus somewhere else? I'd be hesitant to go with JavaScript, especially for web front-end because it turned so much. I built a site a year ago. Everything I built is deprecated. Getting somebody to learn programming via that method and then seeing how fast a JavaScript world moves, it seems like it'd be a major turnoff for them. You do have this work and now it's gone. Kind of thing. I think that's more, I would caution against learning a framework and instead learn vanilla JavaScript. Because vanilla JavaScript's going to stay more or less the same. It's the frameworks and NPM and node and all that stuff that has the constant churn. Yeah, that's a good point. It's a good point. And consider that. But I still get worried about back in the day there used to be gulp, grunt is still around. Now you've got webpack. There's just all these things. And one of the reasons why I purposely avoid doing front-end stuff right now is I can't afford the time to keep up. Can we take a step back for a second? I think the more important question than what language you want to learn is what you want to do. What do you want to achieve? If you want to learn to code, you probably have a reason. That reason might be I want a job doing programming and that's going to kind of inform you want a specific set of skills that are hierarchical. But your reason might be I have like a really frustrating problem with my computer and I feel like it can be automated. And I just want to solve it. That's a different thing. And your reason might be I want to make a game like so many people try to learn the program because they want to make a video game of some kind. And each of these goals is better addressed by different technologies. And so this language discussion is kind of interwoven there. If you want to be hierarchical, then you want to look at what languages are hired for and you want to pick one that has like a shallow learning curve. And I think Python is a good example. I think JavaScript has a lot of sharp edges, but maybe dessert consideration there Ruby I think is reasonably easy to get into. So while I'm streaming on Twitch, I'll get a lot of people that ask me how to get started in programming stuff like that. So there's a bunch of options, right? You can go to school for it. That cost you a lot of money a lot of time. You can go to a bootcamp which they're going to just drive it in your head and it's going to cost a lot of money or you can go to a text school and you know, take a smaller degree. But there's also options out there of like free online classes or maybe you can audit a class at a text school or something like that. And that way you can at least get a feel for it before you make that huge time and monetary commitment kind of thing. Because like I've met a lot of people in my years where like they're like, yeah, I want to make video games stuff like that. And then they start learning how to program. They're like, I'm going to go make graphics instead. And like you don't want to figure that out when you're like two two and a half years into your college program when you've already committed a bunch of time and money and now you have to redo a bunch of stuff kind of thing. Well, in the modern day, we have YouTube, right? And there are probably hundreds of thousands of videos tutorials on how to get started with the basics of languages. Is it worth just searching YouTube and seeing what's got the most views and hoping that that's probably the most reputable? Because I mean, there must be some dodgy stuff on there as well. But you'd hope that that kind of sinks to the bottom. Right. And those are great places to get a start and a feel for it. But like just sitting there watching somebody do it, it'll help you get started with it. But it's really going to sink in when you start doing it yourself. So maybe instead of like auditing a class at a text school, you watch some YouTube videos, right? And then you just kind of grow from there and grow your interests. I think the thing that has helped a lot of students I've seen is focusing on a particular small project, the thing you want to achieve rather than going out and surfing YouTube to learn sort of, I want to learn to program in Python, you know, in general, right? Like, Python's used for everything. Python's used for numerical computing, for data science, for AI, for graphic, like all kinds of stuff are done in Python. And what you want to do is narrow your scope down to, hey, I would like to make a, I don't know, text-based adventure game in Python. And then you can search for content related to that. And after you've watched your video or while you're watching your video, you can have your project up and you can work on it. And you can say, okay, here's how I print a prompt that asks the user what they want to do. And here's how I read what they typed. And then here's how I make decisions based on what they typed. And then I print the next prompt. And I do this in a loop. Focusing on, you have a short-term goal, something that you really want to achieve and you search for how to achieve it will help make the things that you learn actionable and interesting and give them something in your brain to connect to so you don't just forget it after you stop watching the video. I started programming relatively recently compared to Chris and Gary. I think I've been doing it for year and a half, two years, something like that. And the biggest thing that helped me was having those short-term goals. There was a problem I had I wanted to solve that problem. So then I figured out how to do it. And I did do Java early on in my college career. But that didn't actually help a lot. I don't think because I didn't care about it. I didn't have that vested interest in what I was learning. It was kind of going in one year, write the code to pass the course out the other year. It wasn't until I actually had stuff I cared about that I started really learning and diving into what I was doing. And that's what helped a lot for me. It's interesting that you say that you need to find something that you're vested in because again, while I'm on Twitch, people always ask me how do they get started in open source. And one of the things I tell them is to find a project you use frequently and to find an issue in it and then start working on it. Because since it's something you use, you're going to be more vested in actually working on it and seeing it to completion. Whereas if you just pick like some random project that you don't care about, you're less likely to actually follow through and finish it. It's interesting that you have the same experience with your coursework. Okay, this episode is sponsored by Factor. Now that we're at the height of summer, you might be looking for wholesome, convenient meals to support sunny, active days. Factor can help you feel up fast with flavourful and nutritious ready-to-eat meals delivered straight to your door. You'll save time, eat well and stay on track reaching your goals. With Factor, skip the trip to the grocery store and skip the chopping, prepping and cleaning up too. Factor's fresh, never frozen meals are ready in just two minutes, so all you have to do is heat them up and enjoy. Too busy running around during the day to think about lunch, keep your energy up with lunch to go. Effortless, wholesome meals like grain bowls and salad toppers that are ready to eat when you're on the go. No microwave required. My two and a half admins co-host Jim tried Factor and said the meals were quick and easy to prepare and liked that there was plenty of variety. So support the show and go to Factor Meals.com, slash LDT50, and use code LDT50 to get 50% off. That's code LDT50 at FactorMeals.com slash LDT to get 50% off. One thing that's always put me off getting started is that I've heard that you have to be good at math to be able to start coding and get good at it. And I'm not terrible, I'm reasonably good at arithmetic and I can file my taxes and all that. I'm not enumerate, but I never got to advanced math in school and never had really any interest in it. Is that just a myth then that you need to be really good at math? You need to be able to think logically, but that's not the same thing as math. So you need to be able to, I don't know, read a recipe and follow the instructions in order. That sort of skill set is much more similar to the skills you actually need when programming where you need to look at a sequence of instructions you're giving the computer. And sometimes you're going to tell the computer, well, if these circumstances are the case, I want you to do this instead. I need to be able to think about, okay, what happens if it does the first three steps and then it takes that alternate route and finishes another way, is it still going to do what I want? But the actual math part, it's not that there's no math. There's plenty of like adding numbers together, multiplying numbers together, but there's no calculus in what most of us do. There's, I mean, if you're in graphics, there's trigonometry and stuff, but that's graphics. If you're not in graphics, you're unlikely to even need that. It's really pretty simple counting math, some multiplication and addition, and the stuff that you learned in elementary school, primary school. So if someone's listening to this and they want to get started, there's been quite general advice so far, but what some actual specifics that you would recommend for someone to get started today. Earlier, I referenced a text adventure game, and I actually think that project is fantastic for getting started, because it does not require sophisticated programming stuff to print some text to the screen to read what a user said, but you can make a text game as sophisticated as you want. You can re-implement Pokemon in text if you want to. You can make that virtual world do anything, and so if you have a desire to learn how games work and an interest in exploring that, you can gradually ramp up from you are in a room, there is a chair, and all you can do is sit to an entire virtual world that you can explore and you have, I don't know, friends or pets or literal Pokemon if you want to infringe on copyrights, and you can train them and battle and all kinds of stuff. It's whatever you want it to be, but it starts so simple and it grows so naturally that I think it's a great way to learn the fundamentals. I do actually remember the first real application I ever attempted to write, and it was a to-do list application using a go-to-e toolkit called bubble-t, and that was actually a bad choice, so I don't think at the time I was ready to start messing with a whole framework that had model view controller and all that kind of stuff. I kind of blended my way through it, but I didn't understand what I was doing, I wasn't wrapping my head around all the concepts as much as I should have been, and I think the next application I wrote that was helpful, that did actually further my understanding of go, was a just a stupid little bot that posted emojis to the Fediverse on a timer, and that was all, and it had me interacting with an API, so I was using a MISKEY library for making those posts. I wasn't dealing with the low-level HTTP REST API, I was just calling this library, and that was helpful. So simple things maybe avoiding big toolkits. I would definitely suggest that as well. One of my suggestions for people looking to just build something in the first place is find a program that you use maybe that uses plugins, and add a feature in a plugin. You've got a well-established API that's there, and your time to making something work is generally much smaller, which you get that dopamine hit, which you successfully build something, it was quick and easy, now you're interested, you're going to do it again, and again kind of thing, and it's so much easier to build something small like a plugin than it is to build a giant program, because the time to success is much different. Hang on, are you just trying to recruit people to fix pageant plugins here? I think you are, aren't you? I guess and no. I mean, so I got my start in pigeon by writing plugins, that's how I learned the entire code base. I already knew how to program at that point, but that sucked me into the entire program. So my first project, my dad was a software engineer, and when I was a kid, he had written this very simple GUI program, where I could type some text in a text box at the top, and then I could type a pass phrase in another text box, and then it would encrypt it. I think it was just like a Caesar Cypher, right? It was just shifting all the letters through the alphabet or whatever, but at the time my, you know, six to eight-year-old brain was blown away by how cool that was, and so when I was 14 and learning to program in Python, I really wanted to do that, and so one day I was up in my room with my, oh my gosh, my terrible laptop that had been cobbled together from the corpses of three other laptops and didn't connect to the internet. And I had a, the idle Python interpreter has a little simple text editor, and I was writing in there, and I kind of replicated my dad's thing, and I think it took me a long time, you know, like hours, but it was so satisfying to be able to do that, like, stoop the thing where you'd type some text and type a pass phrase, and it encrypts, and then you can, like, do the inverse, and I didn't have a GUI or anything. I think you just had to, like, type it into the little text terminal, but it just felt awesome. I was like, hey, I just did a thing that my dad did, and also, I understand it, and I don't know, it was really cool. It was kind of a transformative experience for me that I was able to make it work. Yeah, 10 print, rude word, 20 go to 10 run. See, you're a programmer right there. You're a programmer, Joe. Well, I was when I was about seven or eight, but then I discovered football and music and drifted out of it, unfortunately. Well, it's been absolutely great having you on the show, Chris, and I've really enjoyed your insights on this. I'm told that you're not on social media, so if people want to find you, what's the best place if you've got a website or anything? I suppose I do. Walden.blog is technically my web presence. It's a little dated. You can find me via email if you're savvy enough to look in my Git history for my Committer email address. You can also find me in the Gofers Slack instance in the GUI channel if you're interested in the work I do there. Right. Well, if you give an ambulance some links to send on to me, I'll put them in the show notes. But with that, we better get out of here. We'll be back in a couple of weeks, but until then, I've been Joe. I've been Gary. I've been Amalith. And I've been Chris. See you later.