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

  • jeffhykin@lemm.ee
    link
    fedilink
    arrow-up
    13
    ·
    edit-2
    2 months ago

    Its a tough problem. You have to find something that you want to exist; like an app or a website or a game. For example, try making a GUI for managing SSH keys. You know, like the ones github makes you create in order to clone and push to a repo. Make a visual representation of those keys (stored in the .ssh folder), and tools to add/delete them.

    Along the way you’ll find tons of missing things, tools that should exist but don’t. Those are the “real” projects that will really expand your capabilities as a developer.

    For example, I was coding in python and wanted to make a function that caches the output because the code was inherently slow.

    • but to cache an output we need to know the inputs are the same
    • hashes are good for this but lists can’t be hashed with the built-in python hash function
    • we can make our own hash, but hashing a list that contains itself is hard
    • there is a solution for lists, but then hashing a set that contains itself is a serious problem (MUCH harder than hashing a list)
    • turns out hashing a set is the same problem as the graph-coloring problem (graph isomorphism)
    • suddenly I have a really deep understanding of recursive data structures all because I wanted to a function that caches its output.
  • a1studmuffin@aussie.zone
    link
    fedilink
    English
    arrow-up
    8
    ·
    2 months ago

    To take up a career in programming is to be professionally confused on a day-to-day basis. It’s normal to feel overwhelmed at times, but this is the advice I give younger engineers: accept that confusion, and try to channel it into curiosity instead of letting it fester into stress and anxiety.

  • slackj_87@lemmy.world
    link
    fedilink
    arrow-up
    8
    ·
    2 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
      arrow-up
      3
      ·
      2 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.

  • Zikeji@programming.dev
    link
    fedilink
    English
    arrow-up
    5
    ·
    2 months ago

    This consternation is definitely common. It’s hard to apply skills to something with no long term impact of benefit. I’ve improved my skills by finding stuff I can help on in the communities I participate in.

    It’s natural to be overwhelmed, so deciding on a project does scope what you can learn, but a hard part is architecting the foundation of that project.

    Introducing new features to an existing project is a great way to get your feet wet - it has multiple benefits, for one of you do take a position as a developer in the future, you likely won’t be architecting anything initially, primarily improving on existing projects. So participating in OSS projects is a similar mechanism to that - you have to learn their codebase to a degree, you have to learn their style and requirements, etc.

    Even if you don’t ultimately contribute, it’s still a learning experience.

  • Kissaki@programming.dev
    link
    fedilink
    English
    arrow-up
    4
    ·
    2 months ago

    Read/Inspect and contribute to FOSS. They’ll be bigger and longer lived than small, personal, and experimental projects.

    Study computer science.

    Work, preferably in an environment with mentors, and long-/continuously-maintained projects.

    Look at alternative approaches and ecosystems. Like .NET (very good docs and guidance), a functional programming language, Rust, or Web.

    That being said, you ask about “should”, but I think if it’s useful for personal utilities that’s good enough as well. Depends on your interest, goals, wants, and where you want to go in the future.


    For me, managing my clan servers and website, reading online, and contributing to FOSS were my biggest contributors to learning and expertise.

    • AnarchistArtificer@slrpnk.net
      link
      fedilink
      English
      arrow-up
      2
      ·
      2 months ago

      Seconding the FOSS advice from the perspective of a fellow learner.

      I’m a scientist first and foremost, so I’m learning programming on the side. A lot of code that’s written by scientists is pretty grim, so attempting to understand and contribute to FOSS projects has been useful in understanding how a complex project is organised, and how to read code as well as write it.

      Contributing can be pretty small, even opening a git issue for a problem, or adding some info to an existing issue. You won’t be able to just dive in and start solving problems all over, and it can feel overwhelming to try as a relative beginner, but it massively improved my skills.

  • Hawk@lemmynsfw.com
    link
    fedilink
    arrow-up
    4
    ·
    2 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!
  • z3rOR0ne@lemmy.ml
    link
    fedilink
    arrow-up
    4
    ·
    edit-2
    2 months ago

    It’s a lot of work. I’m in a similar boat. I’ve been self teaching myself how to program in various languages and working as a Fullstack developer at a very small startup.

    While I’ve learned alot, there’s always more to learn and finding direction is a challenge you’ll hit many times over if you stick with it.

    Right now I’m reviewing various Open Source Projects I could contribute to as I know ultimately this will make me a much better developer. There are so many CLI and web development tools I use that I’d like to expand on but will require a marginal jump in my skills. Here are a few examples:

    • Add a feature to the rTorrent client that would allow it to torrent over i2p
    • Expand the amount of tools available within the SolidJS framework ecosystem to be competitive with React’s ecosystem.
    • Create a HTTP server in Rust that has feature parity with Golang’s Caddy
    • Add a feature to AntennaPod akin to YouTube Sponsor block that would allow for user contributed timestamps to facilitate auto skipping of ad mentions in podcast episodes.

    I also am slowly working out plans to learn enough about Rust and browsers to recreate the terminal based browser Links in Rust.

    But these are all just me spitballing. In truth, my skills aren’t quite there yet and the amount of time to get there for each one of these is a lot. So I have to choose wisely and dive in deep on the project’s codebase, probably for at least a year or more to make headway. But this is the mindset I think might help you. Look into the software you use a lot or like the concept of. Figure out how you’d like to improve it or add to it. Reach out to the developers of said software however you can, either make your case for the improvements you want to make or just help out on something they want to do with the software. Learn, listen. Rinse and repeat.

    Hope this helps a bit.

  • asudox@programming.dev
    link
    fedilink
    arrow-up
    3
    ·
    1 month 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
      arrow-up
      2
      ·
      1 month ago

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

      • asudox@programming.dev
        link
        fedilink
        arrow-up
        2
        ·
        edit-2
        1 month ago

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

  • xan1242@lemmy.dbzer0.com
    link
    fedilink
    arrow-up
    2
    ·
    2 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.

  • Rimu@piefed.social
    link
    fedilink
    English
    arrow-up
    2
    ·
    2 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.

  • Sage1918@lemmy.world
    link
    fedilink
    arrow-up
    2
    ·
    27 days ago

    I think what you need is inspiration, there’s so many things to build to improve your skills and broaden your knowledge. Not every project you work on needs to be novel and exciting, even basic things can provide ample complexity to learn new things.

    For example, in c++ you can make a basic image viewer that takes the name of a file and displays it, using some library like SDL (or OpenGl/Vulkan(hard)). This would teach you a lot about file formats, dynamic memory allocation and managing it, graphics pipeline etc.

    For html and css, you can try to recreate some cool websites you see online. I hope this gives an inspiration(best viewed on PC).

    For problem solving there’s always leet code, advent of code and other similar services.

    Here’s more stuff to get started

  • 0x01@lemmy.ml
    link
    fedilink
    arrow-up
    2
    ·
    2 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
      arrow-up
      3
      ·
      2 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.

  • fool@programming.dev
    link
    fedilink
    arrow-up
    3
    arrow-down
    1
    ·
    edit-2
    2 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.

  • some_guy@lemmy.sdf.org
    link
    fedilink
    arrow-up
    2
    ·
    edit-2
    1 month 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

  • Iapar@feddit.org
    link
    fedilink
    arrow-up
    2
    ·
    1 month 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.