Projects Every Programmer Should Try

แชร์
ฝัง
  • เผยแพร่เมื่อ 31 ม.ค. 2025

ความคิดเห็น • 669

  • @AbhinavKulshreshtha
    @AbhinavKulshreshtha ปีที่แล้ว +1404

    My goto project is always a music player, it has networking, file management, byte stream management, all kind of data structures can be used for playlists, database access. Basically a simple to visualise project that covers everything.

    • @aylazer23
      @aylazer23 ปีที่แล้ว +27

      Which language did you choose to implement it

    • @Chilli_Tea
      @Chilli_Tea 10 หลายเดือนก่อน +26

      hmmm interesting, cheers for the idea

    • @talesvinicius598
      @talesvinicius598 10 หลายเดือนก่อน +55

      @@aylazer23 any language should be fine for something like that, even if implementing it with python would turn out to be a very slow program, learning the stuff necessary to implement it is what matters.

    • @crazyboyandyomama
      @crazyboyandyomama 9 หลายเดือนก่อน +6

      do you make that as a web app, desktop app, or mobile app?

    • @ghevisartor6005
      @ghevisartor6005 9 หลายเดือนก่อน +28

      @@crazyboyandyomama do all three, you need one backend

  • @ColossalMcBuzz
    @ColossalMcBuzz ปีที่แล้ว +592

    I once wrote a Gameboy emulator in C# (C# MENTIONED!) and the hardest part is finding accurate information on how everything works. Plenty of resources on how 95% of it works, but I never found a single source that covers 100%. Second hardest part is understanding all that info making the damn thing work. Seeing a game display for the first time is insanely rewarding.

    • @apollolux
      @apollolux ปีที่แล้ว +21

      While you're probably right that there's no _single_ source that covers 100% of emulating the Game Boy, I've found that starting from community documentation like the legendary "PANDOCS" and GBDev combined with studying the source codes of highly accurate emulators (admittedly written in other languages) like Gambatte, MGBA, Bizhawk, and higan is usually helpful in trying to understand more fully how a particular console specifically did a thing.

    • @ColossalMcBuzz
      @ColossalMcBuzz ปีที่แล้ว +15

      @@apollolux You pretty much nailed what I ended up doing. I relied heavily on Pan Docs and the Game Boy CPU Manual for the bulk of it and looked through the higan source code for things that weren't covered in those docs.

    • @max3446
      @max3446 11 หลายเดือนก่อน +2

      Pandocs covers like 95% of it tbh (which is enough for an emulator which works reasonably well with the vast majority of games).

    • @antebutum3332
      @antebutum3332 8 หลายเดือนก่อน +1

      I have a same problem implementing jpeg decoder and encoder. 99% of the sites have the same information and nowhere on 1%.

    • @Alex113234
      @Alex113234 7 หลายเดือนก่อน +1

      C# MENTIONED HELL YEAH C# C# C# C# 💪💪💪💪💪💪💪💪

  • @beanarine
    @beanarine ปีที่แล้ว +211

    The best project I worked on in school - the one I learned the most but felt like I accomplished the least - was building a graphics editing program with simple animation tools and timeline. Figuring out layers, undo/redo, manipulating things on the canvas, the clipboard, all of it left me feeling like I was way in over my head and yet I came out with a clunky and ugly piece of software that I made all on my own. I was humbled but still proud

  • @robgrainger5314
    @robgrainger5314 ปีที่แล้ว +771

    The satisfaction to be gained from getting a bare bones OS booting on hardware to a command line cannot be understated. The closest I've felt to a wizard in any programming project.

    • @IAMTHESWORDtheLAMBHASDIED
      @IAMTHESWORDtheLAMBHASDIED ปีที่แล้ว +33

      omfg I'd literally explode from the hypo-manic episode after.... omfg one day..... :D

    • @datboi1861
      @datboi1861 ปีที่แล้ว +14

      This sounds like the coolest shit ever bro.

    • @FredrikMeyer
      @FredrikMeyer ปีที่แล้ว +1

      Any tips on how to start?

    • @robgrainger5314
      @robgrainger5314 ปีที่แล้ว +25

      @@FredrikMeyer The OS Dev wiki is a mine of information. That's what got me going.

    • @wzup23
      @wzup23 11 หลายเดือนก่อน +1

      Dude I'll try this, thanks!

  • @InfiniteQuest86
    @InfiniteQuest86 ปีที่แล้ว +1417

    So I'm confused when people say you shouldn't go to college and then recommend stuff like this. What do you think you do in college? Literally all of these plus WAY more.

    • @pookiepats
      @pookiepats ปีที่แล้ว +382

      Cost to value ratio smart man

    • @defeqel6537
      @defeqel6537 ปีที่แล้ว +221

      I'd guess it really depends on the college

    • @TheBswan
      @TheBswan ปีที่แล้ว +120

      Computer science is one of the remaining valuable degrees

    • @tc2241
      @tc2241 ปีที่แล้ว +150

      Or, all that, and more, for free.

    • @David-gj6dc
      @David-gj6dc ปีที่แล้ว +192

      I don't know what school you went to but the only one from this list we had at mine was a compiler, and even that was an elective.

  • @aCrumbled
    @aCrumbled ปีที่แล้ว +84

    ive done a text editor with vim motions, an interpreter for my comp sci final, and a terminal game engine. All great projects that ive learned so much from, now all i have to do is get a job.

    • @timalk2097
      @timalk2097 9 หลายเดือนก่อน +9

      did you get ? pls tell me you did

    • @mohammadjadallah9813
      @mohammadjadallah9813 หลายเดือนก่อน

      @@timalk2097 im wondering the same thing lmfao

    • @anishd9699
      @anishd9699 หลายเดือนก่อน +1

      Any update tho?

  • @FrankHarwald
    @FrankHarwald ปีที่แล้ว +244

    I also can definitely recommend writing a compiler if you want to be really good at programming in general - except when you write your first compiler, I'd really recommend to skip the whole optimization part. Code optimization has several problems:
    a) there is NO one approach fits all, instead you need to shove a plethora of different complex specialized algorithms into it
    b) this is ongoing research (even the theory of compiler optimization changes quickly with only a few exceptions) - this means you'll conceptually be not just between two but three moving targets
    c) a lot of even mildly sophisticated optimization algorithms are computationally hard. This means among others you'll need to get into heuristical algorithms, approximation theory & numerical computing as well which you otherwise wouldn't need to do in a compiler

    • @JayDee-b5u
      @JayDee-b5u ปีที่แล้ว +1

      I'm a few hours from my first compiler and interpreter and I agree with you about optimization.

    • @yaksher
      @yaksher ปีที่แล้ว +8

      There are some optimizations you can perform that are relatively straightforward and worth doing, even if you don't go all the way to the fancy modern stuff. For example, constant folding-i.e., replacing arithmetic on constants with constants representing their output. The most rudimentary form of this doesn't try to infer when it knows the value of a function call/variable and just does it for literals, but you can extend on it.
      If you're doing a compiler to assembly instead of a transpiler (and like, if you're writing a transpiler to, e.g., C, many optimizations are pointless because the C compiler layer would do them for you anyway), you can also do some stuff like strength reduction (replacing multiplication/division by power of two constants with left and right shifts) and basic register allocation for intermediate expressions (expressions are handled naively by recursively placing outputs onto the stack; if you can allocate some number of registers for a shallow "virtual stack", you can vastly speed up low-depth arithmetic) and for variables.

    • @vitalyl1327
      @vitalyl1327 ปีที่แล้ว +6

      There is a lot of very simple optimisations giving you a good enough baseline. Convert your IR to an SSA, and this alone will give you tons of useful optimisations alnost for free. There are hard things, like loop fusion, polyhedral analysis, etc., but you can get a long way without ever needing them.

    • @ajinkyakamat7053
      @ajinkyakamat7053 ปีที่แล้ว +2

      I would recommend writing an interpreter. I wrote one in production for a robotic arm, we were building. It was a fun exercise and optimization wasn't required because moving the arm from one point to another is going to be slower than compute.

    • @jamesross3939
      @jamesross3939 ปีที่แล้ว

      For an 8 bit CPU. 6502/Z80/6809

  • @chukwunta
    @chukwunta 11 หลายเดือนก่อน +14

    This is arguably the most useful information I have gotten from this channel. I usually just come for the rants (it's quite entertaining). Thanks for making the effort to make us better programmers than ChatGPT. Truly appreciated.

  • @dealloc
    @dealloc ปีที่แล้ว +87

    Before starting on a text editor, I recommend trying to make a line editor first. It has similar constraints but more limited to a line-by-line basis; and you'll learn that there's a ton of ways you could abstract it with different data structures, each having their own pros and cons.
    I started with a simple interactive rebase editor in terminal when I learned Rust, and I still use it for rudimentary rebase tasks. This probably doesn't need a ton of optimizations for my uses, but you it can end up being a fun project to try and implement and optimize as you go, as you introduce more lines you have to start thinking about scroll buffers, etc. Which is also something you'll get into when writing a text editor.

    • @TheNewton
      @TheNewton ปีที่แล้ว +7

      Yeah a lot things in this list are off the deep end, more like captstone projects , easy to dash a noobs enthusiasm against.

    • @curtislevey7639
      @curtislevey7639 6 หลายเดือนก่อน

      Could you explain quickly what a line editor is and how it differs to a text editor? Where would you start with that?

    • @dealloc
      @dealloc 6 หลายเดือนก่อน

      @@curtislevey7639 Line editors works on a line-by-line basis, rather than character-by-character. You operate a single line at a time, rather than text in a document as a whole.
      Of course you can enhance line editing to do multiple line edits at once, etc. but the core editing experience is different.
      You can simplify the implementation of line editing by working with arrays rather than with trees (i.e. ropes) as you would for text editing. Then you can go from there to think about how to implement undo/redo functionality, and other editing capabilities with the limitation of working line by line.

    • @Cosmo8J
      @Cosmo8J 2 หลายเดือนก่อน +1

      @dealloc i'm a complete beginner in programming, i've made some gui apps but the idea of text editor from scratch interested me, the thing is i don't get how i am even supposed to start without any gui library?

    • @dealloc
      @dealloc 2 หลายเดือนก่อน

      @@Cosmo8J You don't need a GUI-you'll likely end up working around GUI more than the _editing_.
      Instead, start with a simple terminal-based UI. You can either go nitty gritty and learn ANSI escape codes (tons of resources available here-just search "ANSI Escape Codes"). Or use a library that abstracts away a lot of the detail; I'm sure there's some TUI-based library for the language you are interested in writing.

  • @yumekarisu9168
    @yumekarisu9168 ปีที่แล้ว +13

    This video couldn't be more recommended at the right moment than this to me. I was wondering what to do after finishing mooc fi intro to programming with python course and doubting myself of trying those seemingly niche project that on the surface doesn't contribute much to most dev jobs on the market. However seeing those type of projects are what made me interested in programming in the first place, glad to know that the knowledge you'll gain from those projects are applicable in the real world. Thanks for the insight Primeagen

  • @bobbycrosby9765
    @bobbycrosby9765 ปีที่แล้ว +158

    I always recommend MUDs. It's a game but focused more on backend activities. You'll need to tackle sockets, file IO, RFC implementation (telnet), AI, etc. The sky is also the limit depending upon how complex you want to get.

    • @justinbasinger7728
      @justinbasinger7728 ปีที่แล้ว +7

      This is exactly what I do/did! If you want to learn C, pull down any MUD's source and add some feature!

    • @ProdbyHway
      @ProdbyHway ปีที่แล้ว +3

      What's MUD?

    • @bobbycrosby9765
      @bobbycrosby9765 ปีที่แล้ว +18

      @@ProdbyHway MUD stands for Multi User Dungeon/Domain. They're text based multiplayer roleplaying games. I played them through high school and college, and some of the more popular ones had hundreds of players online at any given time.

    • @justinbasinger7728
      @justinbasinger7728 ปีที่แล้ว +3

      @@ProdbyHway It is a text based MMORPG style game, it stands for Multi User Dimension. Played them as a kid because I couldn't afford Ultima Online or Everquest ha

    • @Hillgrov
      @Hillgrov 10 หลายเดือนก่อน

      @@justinbasinger7728Dungeon. But close enough.

  • @scottwarner7729
    @scottwarner7729 8 หลายเดือนก่อน +13

    @4:11 - Keeping track of a cursor in a text editor is just a matter of keeping track of the index of the row you were on when you pressed up - Each time you press up you try to move up to the nth index in that row, where the index is stored when you first pressed up. Enter any other key, be it typing or another cursor moving key, and that stored index is reset.

  • @xcuu
    @xcuu ปีที่แล้ว +115

    I wrote a compiler in Java of a language similar to C back when I was doing my masters. Great experience, and very interesting to understand how things run when you compile your code.

    • @marmont8005
      @marmont8005 ปีที่แล้ว +3

      During my time pursuing my master's degree, I had the opportunity to create a Java compiler for a language resembling C. It was an incredible learning experience, and I found it quite fascinating to delve into the inner workings of code compilation.

    • @datboi1861
      @datboi1861 ปีที่แล้ว +21

      Currently trying to make a compiler in C and I agree so much. Holy shit, programmers back then were freaking awesome for being able to do this shit without all the tools we have now.

    • @klnmn3722
      @klnmn3722 ปีที่แล้ว

      @@marmont8005chatgpt generated comment

    • @aryansinha8259
      @aryansinha8259 ปีที่แล้ว +8

      how do you approach building a compiler? did you follow a youtube tutorial at first?

    • @xcuu
      @xcuu ปีที่แล้ว

      @@aryansinha8259 it was a whole subject of my Masters Degree. I was lucky to have a great teacher. Basically you have 4 big sections:
      - lexical analyzer: we used lexx and yacc if I remember well. I’m talking about mid 2000s though, so it might have changed a lot. Knowledge of grammars and things like that is useful (LL1 grammar comes to my mind, but I can’t remember why).
      - syntax analyzer: expressions, statements, you name it. I remember Composite pattern being extremely useful for this.
      - semantic analizer: again I can’t remember all the details, but basically after the previous steps you need to make sure the code actually makes sense (i.e you don’t use a variable before declaring it). For all these checks you’ll be visiting the AST tree a lot, so the Visitor pattern will be your best friend.
      - code generation: this was the easiest step for me. For each node in the tree you just generate the right assembler instruction.
      Overall it’s good fun, I do recommend it.

  • @insylogo
    @insylogo ปีที่แล้ว +36

    C# is a good language.
    I know C# takes a lot of shit for being a super-generic copycat of several languages/techniques that came out just before it, names unmentioned. But I think people will have to admit that it's like the Porsche of managed languages. Hear me out. I recently heard Porsche described as an 8-9/10 at everything, but not a 10/10 at anything. There are other cars that are faster but less reliable or can be hellish to work on in the long run, like Ferraris (lookin at you, C). There are languages that are simpler and easier to learn, but like Toyotas (Py&JS) they are never going to be anywhere near as performant. And there are those that are fantastic and more fun but nobody buys because of the difficulty of driving them, like the Dodge Viper (Rust). There are cars that try to do the same thing, or even did it first but couldn't keep up in the long run, like Lotus (Java).
    C# does everything these days, and does just about everything it does well, but it's never 10/10 in anything. Its has very consistent and well maintained and documented standard libraries. It's got a decent dependency management system with lots of well maintained public packages. It compiles down to either a portable IL or can compile to architecture-specific bytecode. Its memory management is simple and rarely needs any intervention for anything beyond advanced 3D games or HPC (which, why are you using C# for?). Performance is more than decent, support is easily available, it uses easy to learn syntax for anyone who has had any programming education in the last 30 years, and did I mention that its well maintained? New features frequently come out, and they're almost never breaking.
    I can't say I think C# is the best at anything, but it's better than most at just about everything. Even things it has no business being good at. But go ahead, flame me.

    • @ShadoFXPerino
      @ShadoFXPerino ปีที่แล้ว +8

      >But go ahead, flame me.
      I refuse. Because C# is good

    • @Ripcraze
      @Ripcraze ปีที่แล้ว

      I work with C# but it's definitely the best language, totally unbiased. But really, it's cool, I make websites, games and mobile apps with it, pretty cool with Blazor Hybrid and whatnot.

    • @ElatedBlue
      @ElatedBlue ปีที่แล้ว +2

      I've used js, php, python, c, c++, and c#. C# was my favorite so I also don't get all the hate. I'm just out of the 'fancy programming languages' game I guess

    • @bennymountain1
      @bennymountain1 ปีที่แล้ว

      Epic offtop 😂 but yeah, c# is just too milk toast to draw new people in. I don't think it even deserves flame for anything other than not being sexy AND it gets very little defence in social media bc even it's users rarely bother😅. But yeah, c#4lyfe and all that 🤜🤛

  • @sheriffderek
    @sheriffderek 2 หลายเดือนก่อน +9

    Projects every farmer should try: Cloning sheep, building spaceship, square dancing to meet women

  • @SimGunther
    @SimGunther ปีที่แล้ว +10

    I've had this bookmarked for years! Glad he's finally looking at it.

  • @pixalquarks4623
    @pixalquarks4623 ปีที่แล้ว +55

    Recently made a single thread synchro http server from scratch using sockets, was really fun learning how to parse incoming data into http request format(straight from http specifications), routing the uri to handlers (parsing the path) and request response cycle. It's very basic but got to learn a lot.

    • @MrZombastic
      @MrZombastic ปีที่แล้ว

      siiick, currently doing the same in c to learn the language :)
      Imma skip the parsing of http but focus more on making it multithreaded just to see how that works in c.🤝

    • @ziaahmad8738
      @ziaahmad8738 ปีที่แล้ว +1

      this is something i really wanna do

    • @pixalquarks4623
      @pixalquarks4623 ปีที่แล้ว +1

      @@MrZombastic I did in python so yeah it definitely wasn't on hard mode like c. I'll also try multithreading in python, although it sucks.

    • @pixalquarks4623
      @pixalquarks4623 ปีที่แล้ว

      @@ziaahmad8738 Definitely give it a try, it's really fun.

    • @BenTJacobson
      @BenTJacobson ปีที่แล้ว +1

      I didn't realize you could get low level like that in scratch.

  • @MrVinicius5000
    @MrVinicius5000 ปีที่แล้ว +7

    Writing a emulator can be quite easy and equaly valuable if you made based on you own "fantasy architecture". Just put together a program counter with a few memory adresses and basic set of assembly operations implemented through functions, and you can make a very simple virtual processor that can teach you the basics in hardware emulation.

  • @RainOrigami
    @RainOrigami 8 หลายเดือนก่อน +12

    "I don't know what to build" goes away once you identify things that annoy you and think you can improve. There are more things I want to build than I have time for. It's never-ending.

  • @longlostwraith5106
    @longlostwraith5106 ปีที่แล้ว +10

    A piece table is perfect if you want to be able to handle humongous files which wouldn't fit in RAM. For anything that would though, just use a line array and be done with it. Simple, reliable, fast.

  • @jawadalamoush6112
    @jawadalamoush6112 ปีที่แล้ว +26

    Father Primeagen with his majestic soothing voice puts out a banger again...

  • @shapelessed
    @shapelessed ปีที่แล้ว +78

    I wrote a filesystem with full volume encryption in JS so everybody would hate me and leave me alone.
    (the "leave alone" part didn't work out well)

    • @headlights-go-up
      @headlights-go-up ปีที่แล้ว +4

      LOL

    • @biomorphic
      @biomorphic ปีที่แล้ว +14

      You should be in jail. 👊

    • @HassanIQ777
      @HassanIQ777 7 หลายเดือนก่อน

      wait
      WHAT HAVE YOU DONE!!!

  • @wzywg
    @wzywg ปีที่แล้ว +43

    NAND to Tetris is an amazing introduction to computing in general.

  • @dragonmaster1500
    @dragonmaster1500 ปีที่แล้ว +2

    I do most of my coding in R, primarily for data science. Super basic and a pretty easy language to understand. It's also a fun language to work with if you're starting out, so long as you like making graphs, bar charts and machine learning. I dabble a bit in python though and these definitely sound like fun projects to try, especially the text-editor, compiler and OS.

    • @AubreyBarnard
      @AubreyBarnard 6 หลายเดือนก่อน

      R doesn't have proper programmer-defined structures, proper error handling, proper modules / namespaces, proper language documentation, etc. I wouldn't recommend it for programming projects.

  • @Tex215
    @Tex215 6 หลายเดือนก่อน +1

    I got inspired to get back to my programming foundations. I'm gonna work on an SDL 2.0 Pac-Man clone. It's been a minute since I used SDL but I got inspired to improve my programming capabilities! Thank you for sharing this article and commentary!

  • @danBhentschel
    @danBhentschel ปีที่แล้ว +3

    "Reactive programming paradigm" - I'm pretty sure this is referring to how to update only the affected cells in the spreadsheet. If you make a change to a cell, you only want to recalculate the affected cells. A naive implementation would recalculate all cells and would be very slow for larger spreadsheets. This also could factor into display updates. Only repaint the cells that changed and are on screen. I've done some of both in a past position. You can run into some pretty tricky scenarios.

  • @pauloheres
    @pauloheres 7 หลายเดือนก่อน

    I love to watch your reacts. It works as an energy boost. Thanks!

  • @shinoobie1549
    @shinoobie1549 ปีที่แล้ว +10

    Haha the game loop thing hit me. First time I tried programming games was in Borland Delphi making pong using the predefined components like shapes and changing properties like top and left. I couldnt figure out why a simple game like pong use so much processing power lmao

  • @Slackow
    @Slackow ปีที่แล้ว +62

    You mentioned that undo isn't linear but I'm not convinced, every undo implementation I've interacted with has been linear, I've heard of tree based ones before, but I don't think it's an implied requirement.

    • @Belissimo-T
      @Belissimo-T ปีที่แล้ว +21

      it has to be a tree such that no information is lost, however, most programs cut of branches such that information is lost

    • @yurcchello
      @yurcchello ปีที่แล้ว +5

      @@Belissimo-T to make use of undo tree list additional UI or command must be used. maybe its great but users must learn about such functionality somehow

    • @bluecup25
      @bluecup25 ปีที่แล้ว +14

      Don't mind Prime, he's a vim user...

    • @danBhentschel
      @danBhentschel ปีที่แล้ว +11

      I was going to write this same comment. Most users never interact with undo in a tree fashion, and I strongly suspect that most editors prune "branches" immediately. I have implemented undo / redo in the past. My implementation was linear, and users never complained. It got the job done.

    • @skorp5677
      @skorp5677 ปีที่แล้ว +9

      Undo trees are extremely rare as they confuse most users. This is a UX decision.

  • @vsolyomi
    @vsolyomi ปีที่แล้ว +48

    I'm genuinely scared to try and write a text editor. You start it to learn the language and 5 years later it completely consumes your life and it has a user base of 5 people...

    • @SamuTheFrog
      @SamuTheFrog 26 วันที่ผ่านมา +2

      By that logic, you shouldn't do anything at all.
      Everything has the capacity to consume your life, period.
      It's up to you.

  • @onogrirwin
    @onogrirwin ปีที่แล้ว +5

    a 3d software renderer is my go to. Maybe a bit simple compared to some of these, but it's always fun.

  • @zkreso
    @zkreso ปีที่แล้ว +4

    Reactive programming is mentioned for spreadsheets because you don't want to redraw/recalculate all cells when something changes.

  • @mdfalexis
    @mdfalexis ปีที่แล้ว +2

    I always recommand a project I got for uni, a text cloud generator.
    Not really complicated, but represent a bit a I/O, bit of algorithm with the collision, can add file reading, start from a cli that generate a .png to a UI with words removal.
    Really like this projet to learn new languages.

  • @larryrowe
    @larryrowe 10 หลายเดือนก่อน +2

    I believe in mixing different languages for various tasks you then understand the optimization of different parts of your code package
    I coded Cobol/IBM Assembler/Fortran/c/c++ (be careful)/Java/several others and other mainframe utilities ... many more in the old days
    Sometime you need high internal performance, at other times you need high level package models to manage
    Python/Java/... C/C++ etc. ... Assembler (only on occasion) ...
    We programmed a high level user interface in Cobol but it had a unique value assigned on every transaction so I needed IBM assembly machine code for
    that task to optimize the time cost for that tag.

  • @MarcelRiegler
    @MarcelRiegler ปีที่แล้ว +3

    A basic Chip-8 emulator is surprisingly easy to create. It takes less than a week of casual coding to get the basics working.

  • @oleksiistri8429
    @oleksiistri8429 ปีที่แล้ว +5

    I wrote textbox twice in c++ with mouse and keyboard support, shortcuts, clipboard support and everything. One time for monospace fonts only and 2nd time for any font + caching and support of many encodings it was fun 😊

    • @ik6071
      @ik6071 หลายเดือนก่อน

      how did you get started and how did you find libraries to implement?

  • @VitaeDiscimus
    @VitaeDiscimus 2 หลายเดือนก่อน

    Great job, as for you and for that Author of reviewed article!

  • @peteruelimaa4973
    @peteruelimaa4973 ปีที่แล้ว +15

    The "what should I do" question always baffles me. I have plenty of ideas, but no time

    • @sirbrokkoli5309
      @sirbrokkoli5309 ปีที่แล้ว +2

      I think this question comes at least partly from people who feel like they need to do such a project to "qualify" as a proper programmer who can actually do stuff. It's also not quite as easy as "just do things" when you perceive yourself as someone who doesn't "just do things" and are sort of validated in that view by your own past where you evidently did not "do things."
      Personally, I was in that boat during my bachelor's program until I had a forced break that gave me the room for some desperately needed introspection (covid and personal things).
      Nowadays I have things I want to do, the confidence that I can do them (edit: or at least give them an honest shot) and the patience to actually do them, but I doubt that I'd ever have managed to cultivate those in a University setting.

    • @Gaer56
      @Gaer56 ปีที่แล้ว

      The main problem for me are projects I want to do are out of my scope for now, but also wanting to get into a job asap.
      That doesn't stop me from writing MVP's for things that helps me with things (custom matchmaking, activity checker bots) but it also doesn't move me forward in my career. And since it's barely working MVP's it's not worth showing it for recruiters

    • @pietime123123
      @pietime123123 ปีที่แล้ว +2

      It's from people who want to be programmers (probably because they heard they can make money) but don't know why they want to be a programmer.

  • @8bitoverclocking932
    @8bitoverclocking932 ปีที่แล้ว +16

    I am literally building a text editor while watching this to learn!

    • @iahmed1400
      @iahmed1400 ปีที่แล้ว +2

      does it have GUI like notepad++? or is it terminal based?

    • @nimaoth5347
      @nimaoth5347 ปีที่แล้ว +1

      same ^^. In my case for the terminal, GUI and browser at the same time

    • @8bitoverclocking932
      @8bitoverclocking932 ปีที่แล้ว +1

      It's GUI based. I'm building it out in Python first, since I know some python, then rebuilding in C++ to learn C++ in depth

    • @rajmajumdar5253
      @rajmajumdar5253 ปีที่แล้ว

      ​@@8bitoverclocking932 are you using any UI Library or are you implementing from scratch?

  • @andyschannel687
    @andyschannel687 3 หลายเดือนก่อน +3

    Build a text editor using Arrays. Just limit each line to a max of 80 characters and your good to go. Nobody needs more than 80 characters in a line.

  • @alex-v7e6v
    @alex-v7e6v 5 หลายเดือนก่อน

    brilliant, thank you for reading this article!

  • @Lemmy4555
    @Lemmy4555 ปีที่แล้ว +31

    i'm not convinced about the ctrl-z thing. vscode's implementation is linear.

    • @KingJellyfishII
      @KingJellyfishII ปีที่แล้ว +26

      a lot of text editors do it linearly, but it really _should_ be a tree

    • @polvoazul
      @polvoazul 4 หลายเดือนก่อน +2

      ​@@KingJellyfishIIbut users won't know how to use it anyway

  • @rafaeljordao_
    @rafaeljordao_ ปีที่แล้ว +4

    My girlfriend heard Primeagen's voice and thought it was Michael Scott speaking

  • @flameofthephoenix8395
    @flameofthephoenix8395 5 หลายเดือนก่อน

    3:30 I've never needed a text document to run all that fast, however if speed was very important you could probably split your text document into several arrays where text that is close to the camera is split into more arrays than text that is further away, then you can gradually split and merge pieces of text as they scroll.

  • @FrankHarwald
    @FrankHarwald ปีที่แล้ว +6

    14:00 Watch out! when trying to write your own OS! I've found out myself this is harder then this guy makes you want to believe - NOT because it's algorithmically or conceptually difficult but because a shitload of things around kernel & bare-bone binaries running on real or emulaed hardware without the usual userspace is really different, tedious, requires hardware or platform-specific knowledge (=spend hours seeking specialized detail knowledge on the interweb & crawl archives of forum you didn't even know existed) about lesser known features/bugs & are also more difficult to debug because debugging hardware may be different then debugging software.

    • @FrankHarwald
      @FrankHarwald ปีที่แล้ว +1

      also: some stuff around kernel / driver stuff is still only available in compiled binary form & there might not even be source code of a hardware component / interface tbw.

  • @larryrowe
    @larryrowe 10 หลายเดือนก่อน

    For the previous simple project I recommend, pick the software you want to use:
    Then pick one of his tasks and modify your model ...
    Then
    then work on specific things using that your model, then later on for each type of task he recommends as separate tasks if you wish
    pick your languages high level/low level ...
    I. E. Work your way into thinking about the deep crap of each of his deeper tasks .... with the ideal of a framework.
    Use different levels of code as you need User input/output/data management/specific task he requests/pick the one he recommends you
    want for it being simple or hard, our your interest.
    Also along the way experiment with different code bases from C/C++ (be careful), ... to javascript, whatever .... and mix take his recomendations.

  • @ryangrogan6839
    @ryangrogan6839 ปีที่แล้ว +125

    I actually personally hate this approach. All of these projects are for gigachad programmers who already understand programming paradigms very well. If you want to learn the language instead of complete a masters, how about making an API? Why do we feel the need to throw other people into the deep end simply because we feel confident swimming there?

    • @weaksauce9999
      @weaksauce9999 ปีที่แล้ว +34

      I have to mostly agree. These are great projects for experienced devs who have time/energy, but as a beginner these would be pretty daunting (I'm an experienced dev). Maybe a very simple text editor or game isn't too bad. An easier starting point would be something working in your language of interest - maybe use its library to create a web server, then add more and more functionality to it. Connect it to a database on the back end. Build a UI on the front end. Incremental steps, etc.

    • @Jarek.
      @Jarek. ปีที่แล้ว +9

      Actually, I’m after my Xmas break when had my first dive in into golang. Then found Writing An Interpreter In Go by Thorsten Ball and even with my limited knowledge - you can progress quite well. But yes, I’m fully aware what’s the difference between “creating an interpreter” and “follow a well-written book”. Having said that - still a lot of fun and tons of useful knowledge.

    • @bennymountain1
      @bennymountain1 ปีที่แล้ว +9

      Troooo, all of those ideas are good as college curriculum, because you will have supervision, community, time allotted and infinite stomach for red bull and weed 😂 Not so much when you're a grown up with a 9-5, a kid and pregnant wife trying to make ur next mortgage payment.

    • @markmywords3817
      @markmywords3817 10 หลายเดือนก่อน +7

      The optimal answer for learning is a project that's just a tad beyond your reach.
      Not too easy that it causes no learning, but not too hard that you can't divide and conquer it (e.g. a whole ass operating system)
      Another good project is a project that you would personally use, even if others won't.

    • @3_14pie
      @3_14pie 8 หลายเดือนก่อน +3

      these can be mostly as hard as you want to, and if you aren't comfortable challenging yourself maybe shouldn't code

  • @LEGOOOOOOOOOOOS
    @LEGOOOOOOOOOOOS 3 หลายเดือนก่อน

    Decided on a tcp chat application for a project. Writing in ac. Will turn into a command linen utility and a terminal interface. Learn multithreading, linux, netowrking, protocols (may even implement your own).

  • @ymi_yugy3133
    @ymi_yugy3133 8 หลายเดือนก่อน +1

    I always found that these kinds of projects don't really work for me. I just can't motivate myself to spend weeks if not month building an operating system, text editor or whatever that in every single way will be worse than any text editor or operating system was in 1990. I derive my motivation to build and learn things out of solving actual problems.
    So fixing a tiny bug in an open source project is 100x more interesting to me, than building a clone from scratch.

  • @chonkusdonkus
    @chonkusdonkus ปีที่แล้ว +8

    Back when I was first learning programming, the first thing I would do in each language was write an MP3 player

    • @EmirAssassin
      @EmirAssassin 3 หลายเดือนก่อน

      why an MP3 player?

    • @chonkusdonkus
      @chonkusdonkus 3 หลายเดือนก่อน +3

      @@EmirAssassin requires interacting with the filesystem, listing directories, reading files, etc. you generally also pull in some dependencies to do the decoding and then send the audio data to the system for playback.
      I just like it as a project to see how the tooling and language feels, it also works well for me as a GUI library test.

  • @segganew
    @segganew 9 หลายเดือนก่อน

    Can definitely recommend building a compiler. I built one two years ago and now I can’t stop.

    • @ArtificialgeneralInteligence
      @ArtificialgeneralInteligence 8 หลายเดือนก่อน

      Can I get your mail address please? I am in final year of my post graduation and gonna build my project for academic work

  • @PhilipAlexanderHassialis
    @PhilipAlexanderHassialis ปีที่แล้ว +2

    Heh. Somehow I 've moved through half of this list, even when I didn't have the knowledge / resources to actually implement any of these things. Ended up making a tiny editor in Win32API (yes), a Space Invader-ish thingamajigg with Locomotive Basic (yes) and something trying to emulate yacc. So no, no full deep dive in any of these and all of them failed miserably both in implementation but most importantly in teaching me the things I should learn from them since I used some off the shelf stuff (esp. in the editor). But boy was the feeling there. I kinda feel the urge to revisit the compiler/interpreter one since basically this is - for me - a rite of passage for any engineer worth his salt.

  • @rjmunt
    @rjmunt 3 หลายเดือนก่อน +1

    I get the same question all the time. I started programming because of the projects I wanted to complete not the other way round. Hard to advise on this one.

  • @RoadsideCookie
    @RoadsideCookie ปีที่แล้ว +6

    If you want an easy way into games, focus on UI programming. The text editor is a good idea, but also a window manager environment is great. Learn to make the UI run on a separate thread so the menu can be brought up at any point in the game, even during loading screens.
    All of this is because good UI programmers are rare.

    • @Puzomor
      @Puzomor ปีที่แล้ว

      Good suggestion indeed, but I feel like having the asset and level loading in a separate thread is better than having UI in a separate thread. Good exercise non the less!

    • @RoadsideCookie
      @RoadsideCookie ปีที่แล้ว +1

      @@Puzomor These options are not mutually exclusive!

    • @Puzomor
      @Puzomor ปีที่แล้ว

      @@RoadsideCookie true

  • @michaurbanski5961
    @michaurbanski5961 ปีที่แล้ว +22

    Most undo/redo implementations are linear though

    • @formbi
      @formbi ปีที่แล้ว +1

      there's undo-tree for Emacs

    • @sb_dunk
      @sb_dunk ปีที่แล้ว +5

      Indeed, I've never seen an undo/redo tree before (this could be on me), so treating them as the default seems odd

    • @defeqel6537
      @defeqel6537 ปีที่แล้ว +1

      At this point, most users expect them to be linear. Though it's not like you cannot first build a linear one, and then a tree-one. Personally, I'd have a hard time deciding when to put actions in the tree; each keypress? each character? each control operation?

    • @abdelrahmankhalil
      @abdelrahmankhalil ปีที่แล้ว

      @@defeqel6537 after typing a whitespace character

    • @NihongoWakannai
      @NihongoWakannai ปีที่แล้ว +2

      ​@defeqel6537 you'd probably want it to be per-word. But then if you're putting letters in an existing word it has to be per-character. But if you're putting letters in between special characters you'd want that to count as a word.
      Making a good user experience often involves a lot of edge-case chasing. There's rarely an elegant solution.

  • @larryrowe
    @larryrowe 10 หลายเดือนก่อน

    I like this for heavy hitting deep coding .... I may look at this if I program again ....
    I think 1st. Create a simple database model (use an existing database or create a simple one)
    2: create a data model from some information content.
    3: create a Html data input/output for creating the information to be used.
    4: create a user code to modify the data, store the data, retrieve the data, backups the data
    5 Pick a simple process that the user can change in simple ways/store/read/backup

    • @larryrowe
      @larryrowe 10 หลายเดือนก่อน

      Then use that as a working model to move to the deep projects he is offering you to get good at data/coding/transformation/presentation to the user.

  • @junaid1464
    @junaid1464 7 หลายเดือนก่อน

    I have written a text editor, it's hard and iterative thing, you will go through simple strings to complex balanced trees, then memory management etc etc

  • @TimSavage-drummer
    @TimSavage-drummer 9 หลายเดือนก่อน

    Seems I'm hitting a bunch of these items, my current pet project is a 6502 emulator that emulates old 8bit systems. While this isn't entirely unique the project covers a lot of topics, understanding a simple CPU and how they actually work, designing how the peripherals interact, making it configurable, 2D graphics for the output (raylib), networking for a GDB interface to allow for debugging programs running on the emulator.
    Was started in Rust but have since moved over to Zig, this project covers a wide range of topics and greatly accelerated my learning of Zig (and CPU's).
    Highly recommend all of these types of project.

  • @renierbarnard2999
    @renierbarnard2999 8 หลายเดือนก่อน

    We have to do a compiler
    In C, the project is due in 4 months, the semester hasnt started
    No-one has been taught C yet
    And later we will have to do a project in assembly language
    This is one semesters worth of work from my uni, we also have 2 other coding languages but they will be minor stuff in comparison to the compiler project

  • @mattjax16
    @mattjax16 ปีที่แล้ว +4

    The mini operating system is suchhh a fun project

  • @petersmythe6462
    @petersmythe6462 11 หลายเดือนก่อน +1

    "What data structure should we use?"
    C# SortedDictionary sitting there, temptingly in every single instance despite the massive performance cost.

  • @1nterstellar_yt
    @1nterstellar_yt ปีที่แล้ว +2

    I am currently (on and off) writing multiplayer for unity engine (sockets, serialization without allocations, etc). Hard stuff, but very interesting.

  • @LolKiller_UA
    @LolKiller_UA ปีที่แล้ว +35

    C# mentioned

    • @adotinthecosmos
      @adotinthecosmos ปีที่แล้ว

      He did it in Unity (lol)

    • @shapelessed
      @shapelessed ปีที่แล้ว

      @@adotinthecosmos With use of C#

    • @thatsalot3577
      @thatsalot3577 ปีที่แล้ว

      ​@@adotinthecosmos C# is a good language to write applications but where's fun in that ? we need Chaos.

    • @AnnasVirtual
      @AnnasVirtual ปีที่แล้ว

      @@adotinthecosmos he did it in xna

    • @adotinthecosmos
      @adotinthecosmos ปีที่แล้ว

      @@shapelessed yes...

  • @iamtheV0RTEX
    @iamtheV0RTEX ปีที่แล้ว +1

    Funny enough, I'm in the process of implementing an interpreter (as a bytecode compiler and custom VM) for a toy esolang (Rockstar). It's super interesting and helps me understand a lot of what makes languages like Python and JavaScript work.

  • @SeaWasp
    @SeaWasp ปีที่แล้ว +2

    It'd be awesome to see your take on an ECS

  • @alexanderpotts8425
    @alexanderpotts8425 ปีที่แล้ว +1

    I did a bunch of these in university. I don't think I'd remember how to do them now, 15 years later. lol

  • @arewaboluwatife
    @arewaboluwatife ปีที่แล้ว +1

    Everytime, I remember the headache of having to implement an undo feature. Never got around to solving it completely 4:55

  • @EddieComlin-mo5js
    @EddieComlin-mo5js ปีที่แล้ว

    This is a pretty good list, I can never answer this question well when I’m asked. Now I’ll just fwd this to people 😅

  • @Mempler
    @Mempler ปีที่แล้ว +3

    Just write operating system from scratch
    Like fr, learning all those things from writing an OS is insane, as insane as learning rust and learning vulkan.
    Literally an "AHHH, thats why" moment

  • @dawre3124
    @dawre3124 ปีที่แล้ว +1

    I actually bought the book
    The read test sounds useful for my next school project of implementing a mini shell

  • @gameovergandy
    @gameovergandy ปีที่แล้ว

    Thanks for the discount on the "Writing an interpreter in go" book

  • @njnjhjh8918
    @njnjhjh8918 ปีที่แล้ว

    Skip lexing+parsing and do it all in one go with Parsing Expression Grammars. Better yet, it's easy to take a PEG and turn it into a parser with a function.

  • @pedrmunhoz
    @pedrmunhoz 8 หลายเดือนก่อน

    Text editor, 2D game, compiler and mini OS are all projects I've done in college with different levels of knowing what the hell I was doing

  • @kenneth_romero
    @kenneth_romero ปีที่แล้ว +1

    currently porting a raylib example to zig to get a feel for it. After that i was gonna make the game of life (hasbro) to learn 2D more before i get into 3D for the game i actually wanna make.

  • @DoronMalka-08
    @DoronMalka-08 2 หลายเดือนก่อน

    In my experience ive found that coding games is very similar to coding robots, so if robotics intrests you big projects are built similarly to big games

  • @AlexanderNecheff
    @AlexanderNecheff ปีที่แล้ว

    Another classic project is writing your own shell. If you make it a programmable shell it dovetails with compilers.
    I believe the interpreter book has you start with a REPL to boot.

  • @flameofthephoenix8395
    @flameofthephoenix8395 5 หลายเดือนก่อน

    1:28 Hm, the only one of these I don't think I've done is making a spreadsheet, but I've made Conway's game of life, and the underlying coding is probably pretty similar.

  • @patrickshepherd1341
    @patrickshepherd1341 6 หลายเดือนก่อน

    I'm creating a programming language from scratch. I'm gonna tell ya, I'm learning a lot. Yeah, that's one way you could put it.

  • @oleksiistri8429
    @oleksiistri8429 ปีที่แล้ว +2

    Btw undo can be linear, but you will lose redo after undo and new change functionality, small limitation

    • @axon266
      @axon266 ปีที่แล้ว

      indeed, I implemented a linear undo mechanism in a basic draw app, and I remember that. After a CTRL+Z and a new change, I could no longer use CTRL+Y

    • @bhavyakukkar
      @bhavyakukkar ปีที่แล้ว

      right, you end up needing to cascade all redo changes if a new action is performed, you might as well just keep them

  • @thenonsequitur
    @thenonsequitur ปีที่แล้ว +8

    As far as 2D games go, tetris is a fun one to implement.

  • @Tvalfager
    @Tvalfager 7 หลายเดือนก่อน +1

    5:53 I'm too dumb to understand the difference I get the sense that the reasoning is valid but I cannot reason check it

  • @grimm_gen
    @grimm_gen ปีที่แล้ว

    A chat app with social media authentication is a great little project for beginers!

  • @nomadshiba
    @nomadshiba ปีที่แล้ว

    09:50 i really wanna write my own language, and compile it into C# as well.
    why C#? it has simple yet can be advanced enough if you want to, you can create unions, you can allocate space on the stack, you can do anything without allocating any managed memory. etc but also you can just use and allocate managed stuff if you dont wanna deal with something at that time. so flexible enough. and there are also C# compilers that will just compile it into machine code and not gonna include GC at all because you didnt use any managed type.
    and im pretty sure a compiler can optimize C# code better than C code because it has more info on what is what, and less unpredictable stuff that compiler cant optimize.
    so i can just focus on the language syntax and typing system and etc. and not worry about compiling to assembly and low level optimizations.

  • @Ripcraze
    @Ripcraze ปีที่แล้ว +1

    I make apps that I want to use, even tho there's thousands of them and they're better than what I will make I just make my own anyway because it's fun to use something you create.

  • @tjdgmlchl6305
    @tjdgmlchl6305 ปีที่แล้ว

    I forget how to read because father reads us a nice bedtime programming article everyday

  • @ambujmittal6824
    @ambujmittal6824 ปีที่แล้ว +2

    @2:54 Why not at FrontEnd Masters?

  • @flameofthephoenix8395
    @flameofthephoenix8395 5 หลายเดือนก่อน

    0:46 A Mini operating system is a video game emulator. It's just emulating video games that may not exist yet.

  • @howuseehim
    @howuseehim 3 หลายเดือนก่อน +2

    Writing a code so clean future you can't understand it

  • @talkativekrishna2310
    @talkativekrishna2310 3 หลายเดือนก่อน

    Man , I got owned with text editor project itself

  • @slobrat3556
    @slobrat3556 7 หลายเดือนก่อน

    "Gap buffer? I only know thigh ga-"
    I really felt that one 😞👉👈

  • @porky1118
    @porky1118 ปีที่แล้ว +2

    0:07 „What should I do?“
    Why are people like this?
    I started programming because I wanted to create specific things. I always knew, what to program, when I tried a new language.
    I never did tutorials or test programs. I usually tried to create stuff I failed at in other programming languages. Basically Petri Net simulators, World of Goo remakes and Geometric Algebra libraries.
    I don't program because I want to program, but I want to create specific projects.
    If you don't know what you should program, just finish the projects I have been working on.

  • @CudiKid121
    @CudiKid121 10 หลายเดือนก่อน

    Hey I am currently in a non programming role more of a cloud + databases + testing. But I decided to learn programming side by side and I am using python. Yes sorry for that but python seems easy to me to learn. So this vid will be really helpful.

  • @mohammadbahrami416
    @mohammadbahrami416 5 หลายเดือนก่อน

    writing a game with assembly is where you actually understand every single shit in IO

  • @henson2k
    @henson2k ปีที่แล้ว

    I went through Text Editor implementation 30 years ago when tried to start Windows 3.x programming

  • @Sakrosankt-Bierstube
    @Sakrosankt-Bierstube 9 หลายเดือนก่อน +1

    Ngl, i am programming since i am 13 and doing it as a job since 5 years now and... i couldn't program a nice text editor.

  • @NotHumanPerson
    @NotHumanPerson ปีที่แล้ว

    the state for 1) doesnt seem that hard, just emulate a vim clone without a bunch of commands and have the mouse be an enum or interface object that implements keyboard, movement while in insert mode, and give it like an abi for interfacing with the buffer, with that i mean a working prototype should take 2 hours after having a basic ui abi

  • @ThatJay283
    @ThatJay283 9 หลายเดือนก่อน

    2:40 this sounds kinda like what i've done when i've implemented text boxes in opengl, except my opengl text boxes didn't have cursor positions, text selection, or newline support

  • @hazemabdulmoneim9997
    @hazemabdulmoneim9997 ปีที่แล้ว +1

    i've always found this advice interesting, because i do understand the value of learning by doing, but what if i have no clue what to do or where to start? like honestly for all of the 6 projects in the video i have no idea how to do it or where to even begin to approach it, imposter syndrome is hitting hard, any advice from people who have overcome this?

    • @KoushikDas2005
      @KoushikDas2005 9 หลายเดือนก่อน +1

      ChatGPT and start from basics, check out it's Roadmap or something from internet

  • @georgehelyar
    @georgehelyar ปีที่แล้ว +2

    Start with a problem to solve, not a solution.
    I need something that does X, and I'm going to do it in Y language, not I want to use Y language so what project can I make

  • @mazito4445
    @mazito4445 3 หลายเดือนก่อน

    'Buy' the compiler book with that dragon from Aho et al.