Short background: I'm 34 years old and while I've always liked the idea of doing software development, I started a career as a typesetter for a book publisher. Over the last few years I began to dabble in web development, loved it and can see myself moving more towards software development - within the book publishing world (that is heading towards software-driven workflows anyway) or completely separate from it.
For every project so far I've basically laid the tracks while riding the train with full speed behind and I've now come to a point where I need to decide how to move forward. I've built a nice project for work in Node/Express/React, but it's certainly no masterpiece and makes heavy use of third-party libraries and frameworks, abstracting away a lot of stuff that I don't understand.<p>My question is: do I push forward in that fashion or do I take a step back and really learn how to program first?<p>The reason why I ask is because I do not feel confident in my programming skills. Often I find myself bruteforcing code until it finally works, not really being able to answer why it does. I was thinking about enrolling in http://www.launchschool.com to get a solid understanding of core programming principles and gain the confidence to move forward in any direction in software development. It would force me to follow an organized path toward learning software development and not get ahead of myself as I currently do.
Yet a part of me says: you already built stuff, why go back and start over? Just keep coding and you'll get more comfortable. Being 34 years old I feel like I'm already behind the curve in software development. And since most of my learning happens in my free time, shouldn't I keep on having fun with it and not make it feel like I'm going back to university?<p>What would you recommend? Is it possible to be a software/web developer by just learning as you go? Or do you gain more by spending time to retroactively learn programming fundamentals?
There's a balance. Lots of people mostly learn programming by doing, and it's good since it provides motivation. One thing from your post is a big red flag for me though: " Often I find myself bruteforcing code until it finally works, not really being able to answer why it does."<p>At that point, if you want to make progress you should spend the time to understand <i>why it does</i>. If you use something existing and can't imagine how it works, try to figure that out.<p>Starting completely from scratch with learning might work too, but might be very boring as well.
Fundamentals can be really useful -- they're time-savers, and they're made extra valuable because most professional programmers (even those with degrees) don't really have them.<p>Since you have experience in development for real problems, you should have an easier time learning the fundamentals, since you'll have context & you'll be able to easily recognize potential applications. People who go into a university CS program having never worked on a real project tend to find things like time complexity unnecessarily abstract.<p>You're probably not behind the curve because of lacking fundamentals. Most code people get paid to write is absolute trash, showing neither common sense nor understanding of freshman-level topics. Understanding fundamentals will put you ahead of the curve permanently.