Is being a software engineer a state of mind or an actual profession with certain requirements?<p>Why not both?<p>The only really hard prerequisites, for me, are<p>- Know how to write tests, and idiomatic code in the languages used by your desired shop<p>- learn how to read the manual, and how to write good docs<p>- learn to manage your emotions when stuff breaks or someone else disagrees. If you can simply stay calm even when the client is upset, stuff goes wrong, has bugs, or crashes, that's a tremendously valuable mindstate. Literal Stoicism.<p>- learn how to write, speak, and communicate.<p>- Be consistent with basic hygeine. Being gross is a silly way to limit oneself.<p>flow is the mindstate of all truly professional level hacking .. it requires you to master your field to a quasi-reflexive, instinctual level<p>curiosity is a fine motivator, and your "actual" products can be things which just satisfy your personal curiosity. It doesn't have to save the world or make money to be a side project worth putting in production (the cost is minimal to free these days)<p>For formal CS, Im a biologist but I definitely find working ridiculous numbers of algorithm challenges is the great equalizer. If you crush many algos then you will learn a ton. Goes for all of us, even pros and non technical people, there are challenges for all levels of skill, we all could get into the weeds more often and benefit IMHO<p>As for developing "actual" products, one nice way to make progress on that is to reach out to a few acquaintances and make sure they know you'd be down to help them hack out a project sometime. Some percentage would be interested and you could be a dev team of one. Also pair programming fun little web apps is good practice<p>It's good you're being humble but don't excessively discount the work you've already done -- you could add a backend and infrastructure as code to a front end you liked building and boom, you're in prod. Vercel makes this so easy it's not as much of an achievement as you think, but infrastructure as code has been known to make front end devs feel like they have superpowers.<p>Also, you could jump into the opposite side of the pool, like data science notebooks in Python or Julia. Machine learning is representation, evaluation, optimization (see "the master algorithm")<p>Most companies need great developers, you don't have to be a 10x developer to do a lot of good for somebody. In a lot of those companies you'll find it's useful to also master the domain you code for<p>Software engineering for me is like one of those neckbeard iceberg memes:<p>basic algos, SQL, backend, IaC, data science, ML, AI, arxiv, biorxiv, chemrxiv, medrxiv, quanta magazine, information theory (it clicked for me when I studied "information content"), algotrading, applied math, RL, learn the history of Bayes Theorem, transport theory is worth hacking on, definitely learn who are Leonid Levin and Ray Solomonoff, check out Judea Pearl, too, causality is still underutilized, also multiparty computation / secret sharing and crypto in general is really deep, then pretty soon it's 4AM and you're wondering how Schmidhuber invented the universe in the 1990s.<p>you can just explore randomly, and have fun, and eventually as long as you're not a criminal, you'll learn enough to have something to contribute. Yes, business and self help books count too.<p>Edit: just to pile on one more thought, one of the best skills a software engineer can possibly master, is that of diplomatically managing people's expectations about technology. For example we're the guys who have to convince our friends to consider the pros and cons of the latest and greatest fancy thing. Make sure to directly confront people who have unrealistic expectations and if you are a real engineer, then you provide real numbers, probability distributions over target measures with a margin of safety. Engineers also respect and learn standards like Oauth2 even if we don't like em