So I’m an on/off noobie but have been focusing on actually sticking with programming what I’ve been working on is Python but this question is for programming in general. For me it’s hard but I want to see how I can get better

Like are these good ways to get good:

Follow tutorials, then work on ways of adding your own twists or changes? Or trying to code it in something else?

Work on assignments from a resource you’re using like in my case Python Crash Course and attempt to redo the assignments without looking back?

Experiment with multiple libraries and library methods or built in methods?

Please share any other ways especially ones that helped you

Also when would be good to start a new language after learning one

    • inzen@lemmy.world
      link
      fedilink
      arrow-up
      2
      ·
      6 days ago

      This. For me personally It helps to think of programming as as craft. It also helps a lot if you have someone more skilled than you available to discuss.

        • inzen@lemmy.world
          link
          fedilink
          arrow-up
          4
          ·
          6 days ago

          I’m not sure I understand the question but I will try to answer. I did not mean to question you skill in particular, I know nothing about you.

          I agree that programming requires repetition e.g. more programming, that’s why I said “This”.

          What followed was a generic advice that helped me personally to improve a lot as a developer. I got the chance to work side by side with developers experienced in different types of projects, developers I consider more skilled than me in different ways. I consider this avaluabe experience.

          Hope that clears it up a little, nothing to do with you’re skill in particular. English is not my first language so maybe my phrasing is a little weird.

          • Diplomjodler@lemmy.world
            link
            fedilink
            arrow-up
            4
            ·
            6 days ago

            You wrote:

            It also helps a lot if you have someone more skilled than you available to discuss.

            Which could be read as you addressing me directly. Which of course I’m aware was not what you meant. I was just trying to be funny.

    • koala@programming.dev
      link
      fedilink
      arrow-up
      1
      ·
      6 days ago

      And also, you learn to make programs of a given difficulty by making programs of a smaller difficulty first.

  • FizzyOrange@programming.dev
    link
    fedilink
    arrow-up
    8
    ·
    6 days ago

    I would say:

    1. Just practice, do projects. Also if you can work on projects with other people because you’ll read a lot of bad code and learn how not to do things (hopefully).

    2. Learn lots of programming languages. They often have different and interesting ways of doing things that can teach you lessons that you can bring to any language. For example Haskell will teach you the benefit of keeping functions pure (and also the costs!).

    If you only know Python I would recommend:

    1. Learn Python with type hints. Run Pyright (don’t use mypy; it sucks) on your project and get it to pass.

    2. Go is probably a sensible next step. Very quick to learn but you’ll start to learn about proper static typing, multithreading, build tools (Go has the best tooling too so unfortunately it’s all downhill from here…), and you can easily build native executables that aren’t dog slow.

    3. C++ or Rust. Big step up but these languages (especially C++) will teach you about how computers actually work. Pointers, memory layouts, segfaults (in C++). They also let you write what we’re now calling “foundational software” (formerly “systems software” but that was too vague a term).

    4. Optionally, if you want to go a bit niche, one of the functional programming languages like Haskell or OCaml. I’d probably say OCaml because it’s way easier (it doesn’t force everything to be pure). I don’t really like OCaml so I wouldn’t spend too much time on this but it has lots of interesting ideas.

    5. Final boss is probably a dependently typed language like Lean or Idris. Pretty hardcore and not really of much practical use it you aren’t writing software that Must Not Fail Ever. You’ll learn loads about type systems though.

    Also read programming articles on Hacker News.

    • the_strange@feddit.org
      link
      fedilink
      English
      arrow-up
      2
      ·
      5 days ago

      I generally agree with your statement, just one thing to keep in mind: Mypy sucks for any library larger than a few thousand lines spread over a couple of files, but pyright is developed by M$ and might be part of their usual Embrace, extend, and extinguish strategy. The other two contenders are pytype (google) and pyre (facebook), so it’s not like there’s a good selection of independent, good and FOSS type checkers out there at the moment.

      Astral - the people behind the ruff linter - are currently developing ty, yet another static type checker for python, with a lot of promise, but it’s going to be a couple of months, maybe a year before it is in any shape to be used in production code.

      • FizzyOrange@programming.dev
        link
        fedilink
        arrow-up
        1
        ·
        5 days ago

        Yeah I’m watching Ty. Pytype and Pyre are not serious options. Nobody really uses them, and Pytype is discontinued. Facebook have a new project called Pyrefly that’s also worth watching.

        But for now, use Pyright. No argument. If you’re really worried about Microsoft (and not Facebook or Google for some reason) then use BasedPyright.

  • theherk@lemmy.world
    link
    fedilink
    arrow-up
    7
    ·
    6 days ago

    There is a lot here with varying degrees of helpfulness. I’ll add one thing. Many have commented essentially “build stuff”, and that is solid truth. That’s how you get better. But just like the whole perfect practice makes perfect, there is one fundamental detail that must be included. Build systems that you understand deeply. Not the code; that you are learning. But it is best to build things where you understand the outcome behavior of the system.

    For example, if you don’t really understand what graphics rasterization is, building a raster program, even with a good guide, isn’t going to help as much as you might think. Though it will help you understand graphics, so go nuts. But if you really understand how baseball stats are calculated, do something with that. It will be much more gratifying and the code will be the part you’re learning, not the system it is implementing.

  • dream_weasel@sh.itjust.works
    link
    fedilink
    arrow-up
    11
    ·
    7 days ago

    Write code, get feedback, write more (better) code, get more feedback and repeat.

    Just hacking your own stuff 10 hours a day isn’t making you better if you’re just doing what you have already done or doing things the same way you’ve done them before.

  • ViperActual@sh.itjust.works
    link
    fedilink
    English
    arrow-up
    5
    ·
    6 days ago

    Generally I start with an end goal, and break it down into logical pieces. For instance I recently wanted to make a custom soundboard for discord. First thing I needed to figure out was how to play sounds. Next was playing those sounds to a specific sound device so that it can be routed into the audio input for discord. Then I needed to figure out how to play the same sound at the same time through the audio output. Then I needed a form to interact with so I could click a button to play a sound. Then I needed to be able to load a config file so that I could update that form when I wanted to add or delete sounds. Then I needed a way to choose files to add to the sound board. And conversely a context menu so I could right click a button to remove it. Then I needed to figure out how to save and load this config file from the filesystem. Then I needed to be able to search for and update the form so I could now quickly find sounds if the list got too long. And then once I had all that working, figure out how to play the same sound multiple times before it finished resulting in a multi threaded soundboard that can interact with any sound device on the machine and saves and loads sound lists all in Python.

  • morphballganon@lemmy.world
    link
    fedilink
    arrow-up
    5
    ·
    6 days ago

    Be result-focused. You’re trying to achieve x. Look at however many tutorials you need to achieve x. Now x is part of your repertoire. Then repeat, with a new x.

    Later, you’ll think “I need to do y. I’ve done it before. I’ll just copy that syntax, with new variable names etc” and boom, you’re good at programming.

  • MagicShel@lemmy.zip
    link
    fedilink
    English
    arrow-up
    9
    ·
    7 days ago

    The hardest part about learning to code is that the projects you really want to do are far beyond your abilities as a beginner. I recommend starting with modding, creating websites, or even writing macros for stuff like excel. They get you started.

    Then also watch some YouTube videos on stuff like SOLID, design patterns, functional programming, and “getting started with <language>”.

    Then try to write your own versions of stuff. I learned a bunch of stuff by writing my own versions of stuff. Like I tried backporting Java Functions, BiFunctions, Predicates, etc to Java 7. It didn’t work great because the language support wasn’t there, but I learned a lot about what things are hard and why things are designed the way they are. I feel sorry for the poor bastards that inherited that code.

    Also, don’t let people give you too much shit about asking questions of AI. It frequently explains things way better than it executes. It’s a great first line of learning even if you really need a deeper dive into the documentation to understand the more esoteric stuff. If you have a question you can’t find the answer to, ChatGPT will explain it in 30 seconds where you might have to wait days on a forum for someone to feel like answering.

    Beware: ChatGPT is awful about mixing different versions of stuff so the answers it gives may well be obsolete. But if you’re really confused it can point you in the right direction. Yeah, you’ll have to learn a lot more nuance when you start doing shit professionally, but if you’re just fucking around it’s great. And googling for answers isn’t much better in that regard. The best answers come from the docs, but especially when you’re starting out, the documentation often assumes a baseline of contextual knowledge you aren’t going to have.

    Try implementing a custom collector in Java just based on the docs. Have fucking fun with that.

  • zerofk@lemmy.zip
    link
    fedilink
    arrow-up
    4
    ·
    6 days ago

    The things you mentioned are very good, but what I’m missing is feedback and a good foundation.

    Feedback should come from other developers - ideally experienced, but a good dialogue between beginners can also teach both sides a lot. For me this came only after I started working, through code reviews. But you could also try contributing to open source, or putting your own code online. Although I fear you won’t get much feedback.

    A good foundation is about software and hardware designs. Without this you will inevitably come to a point where you made a fundamental mistake in design.

    For hardware design I recommend YouTube. Many channels talk about low level hardware. You don’t need to become an expert, just get a high level understanding.

    For software design, check out the gang of four’s Design Patterns. It is a seminal work. You don’t need to read it all but be aware of the patterns, and study a few like factories and facade in detail.

  • BilboBargains@lemmy.world
    link
    fedilink
    arrow-up
    3
    arrow-down
    1
    ·
    6 days ago

    Identify a problem that you can solve using code. Use ai to help with syntax and code structure. Chip away at the problem a little bit each day.

  • melsaskca@lemmy.ca
    link
    fedilink
    arrow-up
    1
    ·
    5 days ago

    Lots of good advice here. I’ll add a bit more that is non-technical. Get and study the book “Symbolic Logic” by Irving M. Copi. It’ll help you to think more critically and expose you to different logic patterns. More philosophical than technical but I see it as being like math for words. As with everything, you get better over time if you keep at it.

  • SinTan1729@programming.dev
    link
    fedilink
    English
    arrow-up
    4
    ·
    edit-2
    7 days ago

    It’s like everything else, you need to actually do it to get better at it. The more you want and try to get better, the harder it’ll feel. The best way is to just enjoy doing it. But it’s easier said than done.

    For me personally, since it’s not my job, I don’t feel any pressure programming, and it’s kind of a stress reliever. I’m not very good at it anyway, but the improvements I’ve made were due to the fact that I didn’t feel any pressure in learning new things, and was able to do things at my own preferred pace. As an example, for the last few days I’ve been learning about the internal working of SQLite. It’s pretty complex, but I don’t feel like I need to know and remember everything, so it’s easier for me to actually get through it. (Btw, if anyone reading this has experience working with SQLite, let me know, I’d like to discuss some stuff. It’s about optimizing some queries, so you don’t need to know about the SQLite codebase, just a rough idea of how it works, and some experience with Rusqlite. Fwiw, happy to add you as a contributor in my project if any performance improvements come out of it.)

    But it’s a different story when it comes to learning stuff for my actual work. Even though the rewards are bigger, the process feels much worse. (Hating on Deligne-Serre representations right now. :( They’re beautiful objects, but the pressure to learn is just too much.)

    So, if you’re like me, try not to take it too seriously, and it’ll be easier to learn.