What is the most important skill for software engineers today? Does the ability of writing code make you a software engineer? I think coding is only a small part of a job, there is much more but let’s start from the beginning.
(If you are not as patient as I would like my reader to be, and you do not care about how I reason my answers, please scroll down to the last paragraph.)
At the beginning of a path to being a professional engineer, or even sooner, we always learn a programming language, one or more, either to master the language itself or to learn programming concepts and patterns… And it is ok, it is a foundation stone for this profession. Is this enough even to get a junior position … no it is not …at least I would not approve of someone that has only this single skill.
What is the benefit of writing a code if it cannot be used? If the software were not deployed, it is worth nothing. Now we have so many different types and strategies for deployments, that we needed to create another kind of software engineer, DevOps. By this fact, some people think that software developers do not need to care about deployments, but they are wrong. It would be an ideal world where software does not need to match or be anyhow adjusted for deployment … but we are not yet in this world. We are not there because we are living in old code bases that are not meant to be modified, and they are easily portable and have some different strange requirements to work properly. Besides of that we still need software that runs on bare metal, like bootloaders to make anything will happen. So dear software developer Learn some basics of containerization, cloud, and virtual environments, because one day, you will get a ticket, that your program is not starting in some environment.
Does runnable software, is automagically usable software, obviously not… How do we make the software really usable for a user? Well did you try to actually speak to one… We are software engineers, and we choose that path because we do not like to speak to other people. So we created another role in this area and we called that person a Requirement Specification Engineer. So some people think that they do not need to speak to anyone anymore because everything will be clearly described in a requirement. But they are wrong. Usually, details of functionalities, flows, interfaces, and structures are not part of the functional specification. So maybe It is worth getting feedback about your understanding of a requirement and having a little chat with the requirement engineer, or even with a user … before, after, and in the middle of implementation. If you are really not able to discuss and present your ideas clearly, definitely you should work on that …
Years ago, making software was one man/woman/… job, in a basement, just him/her/… and a machine. This is a very touching memory for me, but the times will never go back. You need to work with a team, and not only cooperate, but you also need to be a part of a team, communicate, and discuss ideas, and viewpoints for software development. Some points just cannot be resolved (like spaces vs dots), a little bit of flexibility is required, It is good to know what is crucial and what is nice to have, where is quality and where is prettiness, we need to know where to step back, and where to make a stand in front of a team.
Some people think that making software is somehow “transparent” and it really does not matter what is the application of the software. But they are wrong … You can do so much better software if you know, and understand problems you are trying to solve, what processes to automate, and which lives save …
So of the all essential skills of a good software engineer, in my opinion, the most important is the ability to understand why you are making this piece of software. Just care about what you are doing and care about the overall product. It is ok to ask about the contexts of implementation, use cases, feedback, about the overall product, even if you are making only a small block.
Please care to understand.