As I get ready to start my new gig, I've been sharing information with Redditors and others on getting a job (specifically in remote, but this applies everywhere). One thing that occurred to me is that a skill I have been lauded for in the past is something that most developers don't realize should be their "number one" skill: communication.
Don't misunderstand me; you need to know how to be a developer, but if you didn't know how to be a developer, you wouldn't be applying to any developer jobs with much success, anyway. Communication, however, is a critical developer skill that often gets overlooked.
I've worked with a number of developers over the years; from coworkers, to contract developers, to vendors, the ones you will always want to work with and trust the most are the ones who can communicate well. Let's dive a little deeper into what a developer needs regarding communication skills, shall we?
Whether you're freelance or part of a team, if you can't convince those around you that you know what you are talking about, then you're not going to get very far.
Selling yourself, as a developer, focuses on one really important aspect of communication: Translation. Being able to communicate your ideas to junior (or senior) developers in a clear, easy to understand way is crucial. If you obfuscate your idea in a way that they can't grasp it, then you're going to lose them. You need to be able to break down the problem and solution in a clear, step-by-step way that makes it easy to grasp.
As well, being able to communicate your experience and value as a developer to non-developers is going to be important, too. Want to refactor old code? You've got to convince your boss/client that rewriting code isn't a waste of time. Want to add a new feature? Just being excited about it isn't enough; you need to show how it will benefit users.
This one may seem obvious, but I've worked with some code bases that are, well.. Yeah. Not good at all regarding documentation.
With code comments, you need to understand both detail and brevity, and know when to use each. You don't have to document every line, but take a look at a function; is it immediately clear what it does without reading the rest of the code? Are there any caveats or unique implementations that may not be readily apparent? This is what you need to document, and document in a way that is simple. There is such a thing as being TOO descriptive!
As well, you need to be able to document interaction with the product. Explaining how interaction is expected, how to report issues and more are all very important skills for any developer.
Developers aren't just people who code; developers should also be teachers.
We work in a world where there are countless complexities in what we make. Much like doctors and researchers write up papers on unique situations, we should share our experiences with other developers to help everybody as a whole improve. This includes feedback for frequently used tools, guides to tricky methods, and sharing resolutions to unexpected behavior help everybody.
The benefit to this is that not only are we helping each other out, we are also establishing ourselves as experts in the field, which is important to any future employer.
In summary, you need to remember that having skills as a developer go well beyond code. There is a reason we study more than just math & code in school: Being well-rounded allows us to interact, as developers, on a greater level!