Lots of good answers have already been posted, both for 'soft' skills (e.g. communication, empathy) and tech skills (e.g. coding, logical thinking, ...)
I agree 100% will all those answers, but I am surprised to not see 2 other skills which are, in my opinion, super important too:
- problem decomposition skills. This is the most important tech skill for me. If you’re able to correctly understand, then analyze the problem to decompose it in little chunks, then everything else will follow. (algorithm, coding, are only useful if the problem has been well understood and decomposed)
- pragmatic and forward thinking. I but them both together because you need both, and you need to find the best balance between them. Someone which will cut too many corners (not forward thinking) will often make the code hard to maintain or debug, or will not work in line with the strategy. On the other hand, if you only try to shoot for the long term goal, you might lose too many opportunities to ship fast, get feedback, learn from what works and what doesn’t work so well, etc. Trying the achieve the best balance between both gives you some code which has the most important characteristics of both: complexity is managed, it’s easy (or as easy as possible) to debug and maintain, it solves the current problem, it doesn’t try to overthink what might eventually be required in a hypothetic future.