I begun learning programming a few years ago, and it feels like I barely progressed. I know the basics and a bit of advanced python(I have learnt to use a few libraries), html and css plus a tiny bit of c++, but not much outside of those. I enjoy programming and solving problems using code, and it’s an enjoyable hobby of mine. But I feel like all I do is extremely basic and I want to advance but it feels overwhelming seeing the countless of things I could learn.

I wanna know what are ways I can actually apply the things I have learnt/will learn on somewhat worthwhile things, because the main problem right now is that I don’t really have anything to do with the things I’ve learnt other than silly projects that don’t really last more than a day and aren’t that complex. I also want to advance my knowledge as previously stated since I feel like I know too little for the amount of time I’ve been learning to program.

For context I’m still in school but not too far off from higher ed, and I have a decent amount of free time on most days(~2-4 hrs).

Thanks if you reply

  • @felsiq@lemmy.zip
    link
    fedilink
    57 months ago

    I like to pick a fun project, pick a language I don’t know / wanna learn better, and then just go for it. Don’t be discouraged if somebody’s already made it - nothing says your learning project has to be useful in the real world, tho it’s kinda nice if you think of something that can be. If your project seems intimidatingly hard, remember the programmer workflow of breaking it down into manageable pieces and tackling those. If it doesn’t seem hard enough to teach you anything, I sometimes like to write it without using any external code or libraries (or a minimum of them; if it’s something like a GUI program I’ll use direct vulkan bindings instead of like Qt). This is also one of the few areas I get some use out of LLMs, cuz bullying ChatGPT or a local equivalent into giving me huge and tailored lists of program ideas can be really helpful. Either way my main advice is just to pick something that interests you and have fun with it; things don’t have to be worthwhile to other people to be worthwhile to you.

  • @some_guy@lemmy.sdf.org
    link
    fedilink
    2
    edit-2
    7 months ago

    As others have said, keep finding and building projects for yourself. Maybe get this book if you don’t have ideas of things you can build: Exercises for Programmers: 57 Challenges to Develop Your Coding Skills

  • @germanatlas@lemmy.blahaj.zone
    link
    fedilink
    2
    edit-2
    7 months ago

    You can try to write programs you think would be a challenge for you (but still doable at your skill level). Write some games, bots that solve simple games like Tic Tac Toe or mods for your favourite (moddable) games. If you own a Raspberry Pi you could play around with the DPIO. Your free time projects are usually nothing too exciting or world-changing and that’s perfectly fine, they don’t have to be; the worthwhile part about them will be the practice they’ll offer.

    Alternatively, you could try reading some theory, learn different types of data structures, sorting algorithms or pathfinding algorithms and their respective strengths and weaknesses. Or go deeper and prepare for higher Edu in CS by looking into the maths fundamentals, learn some linear algebra, discrete math, analysis or basic graph theory, it will help you a lot.

    Edit: graph theory, not knot theory

  • Iapar
    link
    fedilink
    27 months ago

    I propose you contribute to Foss software that you use.

    With that you are motivated because you are invested in the project, you will see the effect of your work and you learn about the process of contributing and working in a team.

    That should keep you going for a while. Best of luck.

  • @e0qdk@reddthat.com
    link
    fedilink
    7
    edit-2
    7 months ago

    If you want to improve significantly, go read someone else’s code and modify it. Try to fix a bug in a program you use, add a feature you want that doesn’t exist already, or even just do something simple for the sake of proving to yourself that you can do it – like compiling it from source and figuring out how to change some small snippet of text in a message box. Even if you don’t succeed, if you put in a serious effort attempting it, you will almost certainly learn a lot from trying.

    Edit: changed wording to try to be clearer

  • Rimu
    link
    fedilink
    English
    27 months ago

    You could try to find an open source project to contribute to? That’ll get give you a nice big codebase to grapple with.

  • @jimmydoreisalefty@lemmy.world
    link
    fedilink
    37 months ago

    Join in on your school clubs and research projects, or start some with friends!

    There are many great competitions where previous programming experience would come in handy.


    One competition that takes place in the U.S.:

    NASA Student Launch

    It actually IS rocket science! Student Launch is a 9-month long challenge that tasks student teams from across the U.S. to design, build, test, and launch a high-powered rocket carrying a scientific or engineering payload. It is a hands-on, research-based, engineering activity and culminates each year with a final launch in Huntsville, Alabama home of NASA’s Marshall Space Flight Center. The activity offers multiple challenges reaching a broad audience colleges and universities as well as middle and high school aged students across the nation.[1]

    Culminating Event Dates: April 30 – May 4, 2025

    Culminating event location: Huntsville, AL

    Eligibility: Open to U.S. Students

    Grade Levels: Grades 6-12, College and University


    1. [1] https://www.nasa.gov/learning-resources/nasa-student-launch/ ↩︎

  • @0x01@lemmy.ml
    link
    fedilink
    77 months ago

    Leetcode is a great way to polish your skills. When I was your age, I read programming books and made projects I cared about, it’s turned out very well.

    I’ve helped a few others learn programming, practice and working on any project at all always help more than anything.

    • @fool@programming.dev
      link
      fedilink
      57 months ago

      My friends Leetcoded and Codeforced quite a lot. Advent of Code is up there too, with the interesting caveat that Advent of Code also teaches you refactoring (due to the two-part nature of every problem).

      However, when I was younger I had contempt for the whiteboard-problem-esque appearances of these, but everyone is different.

      If you look hard enough there is always a project at medium difficulty – not way too hard, like a huge project you feel won’t give you returns – not way too easy, like some cowsay clone. Ever tried making a blog? You can host for free on most Git pages implementations (codeberg, github, gitlab…).

      As for programming books, consider trying security books like Art of Exploitation – in the same strain, CTFs can use a decent amount of code, and they’re fun in terms of raw problem-solving. I started with the Bandit wargame, which does Linux problem solving from any machine that has SSH.

      I’m not by any means a l33t hax3r but I found them pretty fun in my learning journey.

  • @slackj_87@lemmy.world
    link
    fedilink
    127 months ago

    Try to replicate software/apps you use everyday. Not to improve them, but to figure out how they work. In addition to learning how they work, you’ll learn the problems the original devs had to solve, and one way to solve them.

    • @ChapulinColorado@lemmy.world
      link
      fedilink
      57 months ago

      In addition to your comment, I would add to include apps that don’t sound “as interesting” or different from your usual picks. Along the way, it helps to be willing to refactor if you see a different way to implement it. This can help turn a routine task into a more interesting challenge.

  • @fool@programming.dev
    link
    fedilink
    2
    edit-2
    7 months ago

    Obligatory Linux comment (Lemmy moment):

    Windows is used often for its compatibility and defaultness but Linux is interesting in the sense that everything is patchable, everything is tinkerable and configurable. The low resistance to tinkering makes lots of Linux users tinkerers – including tinkering via code.

    I’m not saying wipe your hard drive or even dual-boot. Maybe an older computer or VM could help, depending on what you have. But just in the past week I’ve screwed around in low-to-medium-difficulty Linux projects that configured my lockscreen with C, that implemented mildly usable desktop GUIs with TypeScript, among others – just not-too-committal stuff that has a return value I literally see every time I lock my computer.

    Windows equivalent projects can be harsher on the beginning-to-intermediate curve (back when I first tried out Linux Mint, I’d been struggling to make a bookmark inspector in Visual Studio – ended up Pythoning it instead) – not to say that Windows fun is by any means out-of-reach.

  • @Hawk@lemmynsfw.com
    link
    fedilink
    47 months ago

    I found reading through the rust book was a nice walkthrough of problems one can hit and how that language elected to solve them.

    In terms of practice:

    • Write a vim config
      • Shell out to python if you’d like
    • Learn a bit of elisp and org-mode
    • Rewrite all your shell scripts into a python CLI
    • Write a pyqt6 GUI for tasks and notes on the exact way you’ve always wanted it to work
    • Write an AI tool to auto-format links etc with phi3
      • Very exciting how much these smaller models can do!
  • @seaQueue@lemmy.world
    link
    fedilink
    5
    edit-2
    7 months ago

    Look at MIT and UC Berkeley’s CS curricula and start tackling things that you haven’t covered. They’re both available freely online and you might still be able to find video recordings of Cal’s lectures somewhere (they recorded every class for students who weren’t present or had difficulty understanding in real time until 2015 or so but were hit with an ADA accessibility lawsuit because they weren’t captioned or something.)

    • astrsk
      link
      fedilink
      77 months ago

      This is me wondering… is there anyone who curates and categorizes lists of open source projects actively looking for contributions? Possibly with an organization based on experience level? It’s often hard to tell what project are active enough that entry, intermediate, or experienced level help is needed and for what.

  • asudox
    link
    fedilink
    47 months ago

    You need to think of things you might want to build. Try building software that nobody ever has, try fixing issues in current software using git. You can find lots of python program in GitHub, waiting for contributions. That’s how I learnt. If you want to learn and use C++, try building software that interacts with the real world with Arduino, try contributing to the Linux kernel or try making simple games using C++ in Godot.

    • @B312@lemmy.worldOP
      link
      fedilink
      27 months ago

      I did actually make a game in godot but it was mostly based on a tutorial and little of my own inpuy

      • asudox
        link
        fedilink
        2
        edit-2
        7 months ago

        Then use what you learnt from that tutorial and make something similar or entirely new, without tutorials.

  • @xan1242@lemmy.dbzer0.com
    link
    fedilink
    27 months ago

    The way I did it is by trying to solve more and more advanced problems with simpler tools/features, then looking at more advanced features and seeing where they could be applied to make the problem solving simpler. Rinse and repeat.

    An easy example that I can remember is making arrays that dynamically expand. I started with the barebones malloc and worked out how to use std::vector (and other list types) in its place.

    Understanding that concept is, what I believe, to be the foundation of learning programming.

    I’m no pro whatsoever, but using this method really helps me pick up and learn new languages.