I agree with what the other say, about building new projects. and try to experiment with new technologies is often a big leap forward.
But there are three points that helped me a lot so far:
1. Automate Things
I think the biggest step for me was to learn shell script and help myself and others to automate routine tasks.
I have several people around me who go great lengths and tedious workflows just to avoid the shell. I developed an attitude that, after doing a stupid task several times, I start to think how this can be automated.
I have gone so far to internalize the good old “Is it worth the time?”-xkcd
In hindsight this already provided valuable lessons for programming with elixir and thinking in pipelines. These small tasks offer a great opportunity learn to think about problems in the right scope, they offer fast
rewards and the risks are not high.
I encourage everyone to read not just docs about programming languages (but those too, of course), but also essays about the ideas behind them, like Hackers and Painters by Paul Graham. I see this as an important way to see what other concepts are offered by different approaches.
3. Switch to Emacs
Another big chance to learn was when I migrated from vscode to spacemacs. I never assumed that this would improve my skills as a software engineer (beyond an increase in speed, I guess), but I think it did. By learning some fundamentals of emacs, I had so understand the fundamentals of lisp, which in turn reminded me about central concepts of programming languages (like the abstract syntax tree). This again helps me now to cope with thinks like
Disclaimer: I do not think that emacs is necessarily the best editor for everyone and everything, but I perceived some benefits after migrating to it. This might also be Stockholm Syndrome.