What should the learning path be like? What Math, CS, hardware, etc topics should they learn eventually to understand programming in a manner an expert can?<p>If there are university courses that they should probably learn from point to them.
as a predominantly self taught engineer(with almost 20yrs of experience mind you, 10 of which were grinding through junior and entry level skill) the only advise i can give is the 80/20 law works here in learning too: focus 80% of your educational efforts into something you are actually interested in, spend the other 20% on important but absolutely personally loathesome topics. master each as best you can as you move through them. Be prepared to never stop learning new idioms, processes and embrace the change that comes with it.<p>all i got.<p>edit: topics never change for a base layer: data structures, bigO notation, DRY, proper testing - are the most important concepts to master asap and lay the groundwork for everything else.
It's important to realize ascending to the level of engineer isn't only about knowledge of the tools. It's understanding why - not only how - in situations X or Y, you use tool Z as well as how it applies to the broader business / product context. Knowledge isn't power, Understanding Is Power.<p>Put another way, engineers are intentional. You have super powers - super powers *you* worked hard to acquire - and you are thoughtful and intentional about how you apply them.<p>"I'm intentional, therefore I engineer."<p>p.s. The fact that you're asking is a great sign. You're already on the right track.
Pick one university and do their core CS track with the materials available. Like CMU, Berkeley, MIT, Stanford, etc. Then start building stuff and learning from more advanced CS and math courses/books/papers.
Start right now. Nothing will make it easy.<p>Use what is immediately at hand. That's as easy as it gets.<p>Deal with eventualities if and when you cross them.<p>Good luck.
hello,<p>idk, but imho. "programming" can be seen as (just) writing code<p>which is only one part of (software-)engineering ...<p>(software-)engineering is all about producing a solution / solving a problem.<p>as an engineer, you have to<p>* understand the problem<p>* architect a decent solution<p>* implement the solution ("programming" is a part of this implementation process)<p>just my 0.02€