Being able to speak in public, express clearly your ideas (either orally or written), being able to consider the opposite point of view, take into account the past and history when making a decision or a judgment are (IMO) essential skills.
To be more at ease when speaking publicly, you could play in a play or do some impro. Joining a debating club will also help in that and will force you to consider an opposing point of view. Reading and writing, analyzing arguments will help to better structure your arguments. Reading about history and being curious about everything will help to open your views before making any decision.
Otherwise: category theory (abstract maths), the link between physics and computation (see Feynman's lectures on computation).
Personally, I like ultimate frisbee. It's very much a read-and-react kind of play, which is a very different mindset from (most) programming. I think that switching the brain modes is helpful, at least for me.
I'd encourage kids to do this as well, before they actually start making programs.
Write or speak(blogging or youtube channel). Get awesome at communicating your ideas, while also building your authority, and a platform with an audience that you may find valuable for many reasons - selling your products, finding a job, etc.
Develop social and networking skills. It's hard but it pays off.
Take care of your health. Eat well, exercise. If you do well, you'll stay sharp, capable, productive. If you fail, it will set you back many years.
Read or listen to audiobooks to acquire general wisdom. Get an audible account and a good podcasting app, download a bunch of things you're curious about, and enjoy them during the commute/exercise/chores time.
Keep learning - watch Udemy courses, read books on CS and engineering, etc.
You'll understand your project's goals better, you'll work with your team more efficiently, and you'll manage your own emotions better.
There are two techniques for improving emotional intelligence in this article I wrote: https://www.climbuptheladder.com/the-importance-of-emotional....
I found these habits carrying over to my pure software projects resulting in less bugs.
And if you really want to take this idea to the extreme, learn to build power supplies and other projects involving mains electricity - a mistake there can mean it's the last bug you'll ever write!
A lot of programmers I know don't have a creative side to them. The programmers and engineers I respect the most all have a unique and creative outlook on life, which shows in their CS work.
On the less STEM side, taking a look at what's around you and trying to reverse-engineer the reasons behind design decisions is also useful. Why do zippers have that little nub on them? Why is jaywalking a crime? Why are red lights red rather than blue? Sometimes this is a matter of path dependence, but other times there's some deeper reason.
I can’t recommend it enough and I need to disclose that it is difficult to extremely difficult in all its aspects and will reveal your reflection in all these dimensions and more.
Also, learn to type fast.
I'm a professional programmer who types over 100wpm, so maybe I'm overlooking something. I rarely ever find that typespeed is my limiting factor.
For every 1 minute that I spend typing code, I probably spend 10+ minutes reading and thinking about code.
We're trying to optimize the 10% if we're trying to improve coding by improving wpm
- Creative writing
- Exercise