I would like to code for a living and to contribute to open source projects and things, but my coding skills are absolute shit after taking online courses and watching video tutorials. How can I learn to code for real?

What I would like to learn is algorithms, web development (“full stack”), how layouts work (both in like kotlin compose and HTML) and how to read other peoples code. Maybe thats more than I can chew, but its probably good for me to try out many things before getting settled on one.

Now I have been coding for a while already (~ 4 years), but I kind of feel like I need more guidance to be able to actually create code that works as intended intentionally, and not through trial and error / stack overflow. As for what level i am at, CS50 is probably my only qualification, I have played around with APIs (I.E. making discord bots), and made some html “apps” (horribly made, but things like the “genius” game and a calculator) and “prototype” react websites (as in, really bare bones, barely working).

I do plan on taking CS or something similar, but i’m not yet in college, and I would like to have a good head start before getting there.

Sorry for my bad English, and any help is appreciated.

  • ThePowerOfGeek@lemmy.world
    link
    fedilink
    English
    arrow-up
    15
    ·
    edit-2
    2 days ago

    First off, the fact that you are aware of your shortcomings and are interested in addressing them is awesome. That shows real growth potential and wisdom.

    I’m no rockstar developer, but I’ve been doing it professionally for over 2 decades. And I’ve been told by multiple bosses that I’m pretty good at my job. I’ve worked with a lot of other developers. Including some less experienced ones. Here are some thoughts on pitfalls and hurdles I’ve seen, both in myself and truth other developers:

    • Don’t get too fixated on the technology. I know that sounds weird at first blush, but there’s a whole layer to software development that involves analysis and critical thinking, and that layer is completely agnostic of technology. Make sure you work on your analytical skills, because they are the foundation that will allow you to excel with actually writing code.
    • Sometimes newer isn’t better. It’s tempting to chase after the latest approach or platform and think that will be perfect and last for many years to come. But they seldom last more than 5 years before they start getting vilified as old and outdated. Yet there’s a lot of wisdom and tried-and-tested reliability in older approaches and seemingly stale design patterns.
    • Related to that, many of the concepts in software development are cyclical to a degree. What’s considered passe and wrong today can often be returned under a cool new name in 5 or 10 years time and suddenly find popularity and use again. So be prepared for that.
    • Get to know design patterns, but don’t treat them as set in stone. Two mistakes I’ve seen people do (and I’ve done myself) is assume a) a design pattern fits into more scenarios than are actually applicable, and b) think that design patterns are immutable and must be followed completely. But really they are like a buffet where you can take often a bite or two from one, and where also every trip to the restaurant is different, so your menu of choice will change.
    • Practice software development from the ground up. Where the ground is reading business requirements, then converting them to system requirements, then designing your a system, then implementing it, and then working through the subsequent challenges.
    • Related to that, it’s extremely rare that a developer creates a complex system with perfect code right out the gate. It’s okay to make mistakes and work around them. It’s just part of the process and something we all do.
    • Don’t get too caught up on writing code “the right way”. I think coding is more an art than a science. And with that in mind, have some fun with it. Keep in mind things like performance and scalability, obviously. But if you stick to a rigid approach to writing code you will struggle to evolve and adapt and build your skill set.
    • Also, I bet you are a better coder than you think. So many developers I’ve worked with think they are poor at writing code and have imposter syndrome. But most of them are solid.
    • And lastly, in my opinion don’t get caught up on certifications. I’ve worked with devs who had lots of certificates and who were okay. But I’ve also worked with devs who had no formal training and no certificates, but they were amazing at writing really innovative, well designed, and high performing code. Like I said earlier, it’s all about the state of mind.

    Hope this helps.

    Edit: fixed some typos.

    • hendrik@palaver.p3x.de
      link
      fedilink
      English
      arrow-up
      5
      ·
      edit-2
      2 days ago

      I agree, though I’d like to add that it really helps to learn it properly. I’ve also met people who learned everything by themselves in an unstructured way, and sometimes they struggle with the underlying concepts. And yes, it’s art. But sometimes you want your customer data not to be stolen, and your software not to have any bugs and leaks. I think sometimes it’t that kind of art that requires effort, dedication and deep knowledge about a topic.
      It’s really fun though, at least in my opinion. And it’s a broad field. Some software needs mathematical precision and be provable and secure, other things are more design, there’s so many different things…

      Yeah and I agree, you can just try lots if things on a computer, and if it’s not right, you just correct it. Mistakes are cheap while learning… And that’s not the case in other professions. So you can just try and figure out things pretty much as you like.

    • ChilledPeppers@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      3
      ·
      2 days ago

      Thank you for the response, I actually was with the opposite position as to being an art. I was literally just thinking “there is a correct way to do things, if you don’t use it, your code sucks”, and things like that. (Im watching a Linus Torvalds interview, and he was just talking about good vs bad code lol).