Projects Every Programmer Should Try

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
challenging projects every programmer should try this should be a good one for you guys because every single day I get asked what should I do so let's find out challenging projects every programmer should try this post has spurred a lot of discussion on Hacker News and Reddit does that just mean people called you an idiot I'm pretty sure that's that's that's Reddit you just you just got dunked on the entire time okay there's oh more challenging projects program should try actually you didn't include okay shut up that's dude that's it okay I want to talk let's see I talk to a lot of students and professional developers that often want to start a side project but they aren't sure what to build goodness gracious is that not every last person in this chat like constantly all the time I don't know what to do dude okay I'm going to first give a piece of advice before I read okay it's called skill issues right now I'm coming in heavy on the skill issues but the easiest thing to do is you first think about what you're interested in if you don't even know what you're interested in then it doesn't matter draw like 10 items on a piece of paper and throw throw a dart at it like shut the hell up and just pick something okay there's no single project I'm going to be able to help you with if you don't even know what you're interested in if you know what you're interested in then you don't have to ask me okay below is a handful of software projects that taught me a lot in fact they're great because you can build them multiple times and learn new things each time o i do I do love the Kata approach so whenever I don't know what to build or I want to learn a new programming language or framework I start with one of these a text editor interesting I wonder if it's a text editor in the terminal or if it's a text editor like GUI 2D game Space Invaders okay okay this is good i' I've built Space Invaders C by the way XNA a by the way C by the way C by the way CP I I did it in C by the way I'm just waiting for all the C Andes to be like I learned Visual Basic by writing a text editor nice C hashtag C octo Thorp C is the goat trust me it's the best text editor we use text okay hold on let me see more of this compiler okay this is good this is good mini operating system I've never done that but that would be great spreadsheet hard I can imagine and spreadsheets being super hard video game console emulator hard that also just sound this I mean this last one sounds more like an exercise in Reading docs just throw that out there that one sounds probably the most tedious of them all because you just have to be able to take instructions and play them we use text editors every day but do you know how it really works ignoring all the fancy features that your favorite editor has how would you implement a text box that supports a movable text cursor and selecting inserting and deleting text no you can't use built-in textbox component from your favorite wi framework this is actually great this actually I think is probably the best suggestion yet because you're going to actually run into a lot of data structures you're going to run into searching problems you're going to run into all sorts of design issues right how you design the cursor your first time through is going to suck and just going through it multiple times this is actually great by the way this is a this is just fantastic because the big thing I want people like there's actually a course I want to build I'm I'm talking with boot dodev about this exact course but it's called building good software fast and I'm going to try to distill my 20 years effectively of programming experience into how do you shoot from the hip and build pretty dang good software managing state will be a nightmare exactly I mean that's the hardest part about the whole thing is just like you have to manage State you have to have the changes that aren't written to file how often do you write to file do you do multiple cursors so hard imagine pressing a backspace on multiple cursors there's a lot of stuff you got to do the biggest challenge is figuring out how to store a text document in memory my first thought was to use an array but that has horrible performance if the user inserts text anywhere other than the end of the document luckily there are some nice data structures to learn to solve this I wonder what data structures you'd even use I actually have no idea what to even use another but I know that DSA would be immediately applicable right you have to have some sort of like region based stuff I would assume it's like positional rope well I mean my first thought was a rope but is the whole thing just one big rope oh that rope yeah it's called rope strings right look at that see ropes this is a rope data structure another hurdle is was learning how a text cursor behaves in popular editors for example if I press the up Arrow key with the cursor in the middle of the text document where will the cursor move same column not if the line is shorter keep pressing up and the cursor will snap back to the original column once the line is long enough this is actually true it's such a good point let's go like right here if I go down down down look at that notice that it stays in place like that's crazy right like until you move over one it actually keeps like that information like that's the state is crazy also did I just see a lithium give me a sweet sweet hot dog did you boys just see lithium's hot dog come flying out right there thank you lithium for that 20 Banger you just made it into a YouTube video lithium just want to let you know you made it into you right there you and your hot dog right into it after implementing the basic editor I challenge you to implement two more features undo redo oh my goodness so people don't know this this is so good right here this is so good undo is a tree it's not it is not linear I know that's kind of crazy to think about but think about this here's my changes what happened yes I did work dude I snuck away and I did a little bit of multi-threaded programming just because I I I have to do a little bit of programming every day okay shut up anyways so I click here this is sometime in the past right and let's just say I put in that look at what I just created I created two different branches this branch which is now my head but this was my previous Branch what happened if I go here and do more and then do more and now we have this what happen if I go back and I jump to this one and I go here I mean it's a crazy tree undo redo is crazy it's why you can't just control Z all the time if you don't have an undo tree like if you don't have an undo tree you'll just lose work it just goes away because you can't do it why can't it be linear I lit I just lit I I just literally showed you why it can't be linear I just like I what I'm in I'm in emotional pain right now I'm in emotional pain my day job involves a lot of of tracking and reconciling changes and contractual agreements across time and people have no idea how complex this can get yes I can imagine it's very complex this kind of stuff is super hard things to learn data structures for storing text oh oh look that you're right it was a rope oopsies Gap buffer I don't know a gap buffer I only know thigh gap piece table I don't know those I don't know these last two behavior and implementation of a text cursor design patterns for undo redo momentto and command interesting abstractions to separate the visual memory aspects of a text interesting text uh editor data structures design implementation nice very cool 2D game uh this one's great just cuz Collision detection is fantastic like being able to separate out you could learn ECS oh man I've always wanted to get further in ECS I did a small ECS implementation in JavaScript a while back and it was a ton of fun even the most simple games required some unique data structures and design patterns the idea here is to implement a well-defined game from start to finish without getting bogged down on other fun stuff game design and art also it is best uh to use barebones 2D Graphics Library yes not a big game engine that'll hide all the interesting bits from you this is fair first you'll have to learn how to draw the screen I had no idea how this works you're actually clearing the screen then drawing each portion of the screen in Rapid succession many times a second yes you have to have a double buffer for this or else you get the blinkies blinkies have a transparent pixel value dude old man Judo that's shockingly good idea there's like there's some fun ideas out there second you'll learn all about the game Loop a game is effectively looping between drawing and getting user input and processing the game logic third you'll learn how to process user input I never paid attention to the subtleties of initially pressing holding and releasing keys or Mouse buttons let alone handling things like double click how often do you check for user input fun fact in my second real job I had to implement all of the Motions of an iPad but on the web and double click was one of them there's like a whole there's a whole art to creating a mousing library and doing all that it was a lot of fun like zooming in breaking down the exact like cuz you do mate like if you just treat everything like a matrix you can do all the Matrix multiplications but breaking that all down into exactly just the formula so you're not just doing matrix multiplication because it was like an iPad 2 back in the day it was a lot of fun if you are constantly checking then that means the rest of the game is Frozen that's true fourth you'll learn how to create and manage all of your game objects and their state for example how do you generate Dynamic number of enemies the factory pattern helps a lot o Java the man's Java fifth you'll learn how to apply game logic when does a bullet position get updated how does the bullet know where it is cuz it knows where it isn't when do more enemies come on screen how do you know when an enemy is destroyed when is the game over I've never used used modulo operator prior to making games but it's littered all over my games code let's go once you get the basic game working the title screen menu the game over uh screen making sure the game runs at the same speed even on different computers and explore how to implement more interesting enemies with AI still not enough Shader effects sounds online multiplayer see games are just foreverly hard they're literally for foreverly there's everything that's fantastic all right compiler let's talk about compiler I'm going to skip over this cuz you guys can figure out that stuff the most eye- openening uh projects I've worked on are compilers I did a compiler once in college I still to this day recommend it as one of the greatest projects ever even now if I have a free Sunday afternoon to do some coding chances are it is a compiler it is a great feeling when you create something that enables others to create more things by implementing one I had to learn so much about the intricacies of a compilers that I normally would never think about when do Expressions get implicitly typed converted I suggest writing a compiler from scratch uh for a very small basic like language yes and compile to any other language that you know well for example you could write a tiny basic compiler in Python that outputs C code C mentioned C mentioned everybody quickly quickly hascal is so great for compilers is it what makes it great Beast code mode Beast Co mode C quickly it does not have to Output assembly or C yes avoiding it will let you focus on the compiler itself that's true your semantic analyzer doesn't have to technically output anything a transpiler is just I mean transpilers are compilers the first hurdle is figuring out how we did we transpiled mini Pascal to iil a Microsoft Intermediate Language and that was really fun because then we used a compiler to transfer Intermediate Language into compiled ones internal sealed abstract why would you do that have you heard of typescript typescript literally is a compiler it's a transpiler from fake JavaScript to real JavaScript yo dog we write JavaScript so you can take your JavaScript and make a JavaScript just what it is it's just life it's just life you know this project has a ton of existing resources to help you and simple compiler can be completed in a few days don't let the jargon scare you the plus the possibilities are endless if honestly if you're going to do a compiler do this one right here a book if I'm not mistaken you can use code Prime engine it should still give you 30% off I get zero doar from this I worked with Thorston ball and said I don't want anything off you just give the thing you would normally give me give to to the peoples compiler is the most quintessential project of my learning so I want you guys to learn it as cheap as possible buy his book it's right here The Interpreter book.com it's fantastic it's one of the best one of the best books and he also has a writing a compiler and go as well so just do it it's very very good it's very very good absolutely love it so I think all these things are fantastic I really like the idea of doing a a compiler first hurdle is uh figuring how how to Lex or tokenize that's a super fun part of the project honestly it tokenizing is one of the most useful things ever honestly tokenizing like just your thought process on it well you know how I showed you like the little thing that or I was telling you about the thing I'm doing for nli right now categorizing logs I'm just building a big ass tokenizer and then I'm building like a basic parser and that is it tokenizing is simple yeah but it's super useful for people that have never tokenized in parse it is so dang good to think about these things then uh we'll parse the code that is uh check the structure of the input and produce tree representations of the code the recursive descent parsing technique is beautiful next you will semantically check the input ensure that the code makes sense and the type rules are being followed finally you can generate output yeah and so my next thing is I'm literally going to create a recursive descent parsing for uh how to analyze errors learn to stir to well whoa whoa whoa where's the n in there Judo you know you got to put an n in there you know there's a stir n talk okay there's always an N there's always an end somewhere in there because everything else with stir is crazy take it dude I got on so hard by my co-workers because I include uh a stir check without an end and they're just like you will never introd that into the code base ever again for any reason and I was just like okay okay my bad my bad hey my bad my bad my fault okay I'm not I'm not like a I'm not a master in the C++ Arenas okay even though I know that's a c that's a c a seism uh anyways this project has a ton of resources to help you and a simple compiler can be completed in a few days oh yes okay we already read this yes great great great great great great great right all great do it uh does he have this my tutorial okay he didn't have the one that like write an interpreter and go I would normally follow this link but it's it's an Amazon link and I don't want to get owned mini operating system this one I'm actually interested in over the years I found myself applying fundamental concepts from operating systems to a variety of domains like games and even predictive models of human behavior in the classroom settings the algorithms and data structures used by operating system might seem abstract or useless but they are really useful implementing an operating system also helped me understand far more about what's going on underneath the hood I actually this is something I've never done it's always been on my to-do list but the problem is to list I also have a lot of stupid stuff on a to-do list right you know what I mean I got a lot of stuff there's a bit of learning curve and some barriers to get started it depended on Hardware however uh let's see following a book or tutorial when you when you should be able to get a bootable OS working that can run your own programs I highly recommend my colleagues a free online book making a risk five operating system using rust oh my goodness rust mentioned we got rust mentioned we got rust mentioned we got a rust mentioned people we got it we got it we got it actually this is something I might consider doing I want to shoot for 2025 to do my own it'd be a lot of fun I got a lot I have too many fun things to build right now that I can't I can't I Vim APM is just completely my mind space right now still not difficult enough for you try these two projects spreadsheet this seems like a fantastic idea just being able to apply calculated cell values over spaces just sounds like such a hard hard thing because not only not only do you have to do the spreadsheeting you also literally get to build a mini compiler you get to build a compiler Oh see it just seems so fantastic it combines the challenges uh from a text editor with those of a compiler yes yes you'll have to learn how to represent the cell contents in memory and Implement an interpreter for the programming language used for equations furthermore directed to cylic graphs let's go dags mention dag mention reactive programming paradigms I think that's solid JS I'm not really sure what they're trying to say uh spreadsheet implementation technology Amazon must be some sort of book dag mentioned Excel mentioned let's go video game console emulator this is the one I just don't I I don't want to do writing an emulator or virtual machine machine for a video game console combines the challenges of writing a compiler an operating system and a compiler all into one damn off by one man off by one that sucks it is quite rewarding to play a real game made by someone else with your emulator emulating a real video game console means writing a virtual machine that pretends to function just like the actual CPU and other Hardware components this allows you to run games designed for a video game console with your emulator now I recommend starting uh by emulating chip 8 which is a simple fictitious console before moving on to real video game consoles the Ness SNES Game Boy and Game Boy Oh Advance my brain just the bed couldn't even read past it because I heard Game Boy and Game Boy it was just like that was funny are all quite feasible to emulate with a fair amount of documentation and open source emulators already uh already dude so good I'm lagging though they each have their own quirks to make things interesting certain games May May rely on undocumented bug features of a specific Hardware there are also Pico 8 which has become a very profitable fantasy console oh fun great stuff in here by the way great great stuff in here I liked all of this you guys should definitely consider this it my recommendations are compiler super useful but a little bit more academic uh a text editor honestly sounds great text editor sounds probably like the most boots on the ground way to get good and I know a lot of people when they start off programming they want to be game programmers so if you want to be a game programmer pick one of these two CU they're going to probably both have similar aspects right a text editor very well could have a lot of stuff with Graphics that you're going to have to consider and all that painting to the screen uh but it's going to have some pretty fun data structures that I think are more applicable to the real world the 2D game one this one's just a little bit different I don't know we'll see we'll see we'll see pretty exciting I built I i' built Space Invaders super fun the name is the primagen
Info
Channel: ThePrimeTime
Views: 215,576
Rating: undefined out of 5
Keywords: programming, software engineer, software engineering, developer, web design, web development, programmer humor
Id: yeatOU5vVsA
Channel Id: undefined
Length: 16min 57sec (1017 seconds)
Published: Sun Jan 14 2024
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.