Skip Navigation

How to become a competent coder?

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.

37 comments
  • 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.

  • Read other people's code. Dig through source code of libraries you use. You don't have to understand their entire stack, but you'll start to see all sorts of skill levels in production code. This obviously comes with the requirement to have some basic experience to comprehend the fundamentals of coding.

    I've been a professional web dev for over 15 years and when I'm feeling down about my code, I just look through WordPress plugin source code. I've seen clients use some terribly coded plugins with a $50/mo price tag on them. No one cares.

    But every once and a while, you'll come across something beautiful, something thar will inspire you in just the right way and it'll click how to code something. It can even be just a small portion of a messy project, but learn to recognize when you're writing good code and be proud of that. Also learn to sometimes accept messy code.

    Did I ship high quality code for every project last year? Hell. No. Some clients have smaller budgets or there isn't time to work out the most elegant solutions or there's pressures to ship ASAP. But there were a few projects I was given the time and space to write some code I'm genuinely proud of.

    I've been in the industry long enough to know that skill and ability doesn't hold back as many people back as you'd expect. Do I want more under skilled coders entering the industry? not really, but we all have to start somewhere. And as long as there is progress being made, it'll be fine.

    I wasn't skilled or even a coder when I first started out (I was an art major) I lied and learned it all in the job. The web dev ecosystem was entirely different 15 years ago. But sticking to it, developing an understanding of what good code looks like, eventually lead me to a successful career.

    Everyone has their own pace. Be patient with yourself, and learn to love learning. You'll never stop learning in this industry.

  • Like with anything else, getting good involves practice, practice, practice. You'll encounter problems and you'll learn to solve them as long as you keep up the curiosity and willingness to learn. If you keep asking the question "is there a better way of doing this?" you can keep improving.

37 comments