My advice is probably going to be frustrating to hear, but it's the only answer I can come up with: build lots of stuff! I've only learned how to build software by having a problem in mind, and Googling/copy-pasting my way towards a solution. After a few cycles of this, it gets easier, so you start chasing harder and harder problems to solve.
For example, with this latest iteration of my website I thought it'd be fun to build a commenting system. Previously, I had a form at the bottom of each post where people could email me feedback, but that was boring and anonymous and I felt really disconnected from the messages I received. But comments! Those could be fun, and social, and maybe it could actually make my writing stronger if there were follow-up conversations that happened over time.
Okay, so I want a commenting system. And since I'm not under time pressure, I figure I can build my own, rather than "buying" a solution like Disqus. So then my internal narration becomes something like:
Okay, well, to have comments I need user accounts. That means I need auth. What works here? I've heard of Auth0, maybe it's easy enough to learn since they've been around a while and have lots of documentation and example code... ππ³
Then comments would need to be associated with something β like a blog post, or a bookmark. So maybe a relational database is the right tool to link those kinds of things. I've never built anything on a relational database before, but I've heard of Prisma before, and I've seen PlanetScale on Twitter a bunch, so maybe I'll start poking there...ππ³
So this original idea that sounds fun β what if people could comment on my stuff? β ends up taking me down this rabbit hole of tools and ideas and technologies. I think that's the most fun and interesting way to learn this stuff, even if it's not necessarily the most efficient.
A last thought: if you have friends who are engineers, ask them questions! I feel really lucky that I got to spend a year and a half working closely with Max Stoiber building Spectrum.chat. He really helped me level up, pushed me to learn new technologies, and solve harder problems. At a certain point while you're learning how to build new things, you might get stuck β find your Max!
And how much like, computing theory do you know or went on trying to learn to actually be able to pull things off? I mean, there is a level to tech that doesn't even sound like English when you read it, and this is because I see myself considerably comfortable with development in general (probably not, lol). For example, I'm not capable of describing nor explaining what's a relational database...
I'm probably with you on most things β I didn't study computer science, and so a lot of the theory is beyond me. But as far as practical terms and concepts, I think those can be learned on-the-fly as you're building. So for example, with the database stuff I think you could start with googling for things like "relational database pros and cons" and that will probably take you down a rabbit hole of other DB types, and learning about the tradeoffs of each.
Thank you Brian! I think the advice on learning something from a project-based perspective compared to learning from a programming language-based perspective is definitely useful. It makes the process more fun and interesting. I've gone through quite a few courses on "Full-Stack JavaScript Development", but I've always felt there's a big leap going from the small and theoretical code-quizzes in Team Treehouse to actually apply the knowledge in real-world projects. Will keep that in mind! I'm surrounded by smart engineers where I work, so will also try to leverage that more.
I've seen a lot of "end-to-end" tutorials, usually in the form of paid courses, floating around in the past couple of years. Maybe those are worth picking up? I think having the full experience of building an app will be more valuable than the code quizzes. It sounds like we're pretty similar in that way though, I always struggled to make the leap from code theory, quizzes, and books to the practical application.
I do a lot of frontend development in my day-to-day job. What I struggle with learning though, is all the things that make the site not just look and feel right, but actually make it work like creating a backend, communicating with a DB, CRUD actions, user authentication etc. I would love to be able to build something like what you've done with this site myself one day.
It seems like there are so many things I could learn; Next.js, Vercel, Firebase, Gatsby, Node.js, Ruby on Rails ... the list seems endless. I don't know where to start or how to approach it and would love to hear what you've done to be able to build something like this.