Learning the technical stuff when trying to become a software developer is not easy, but at least it’s pretty straightforward. The tutorials are out there and you can teach yourself all the necessary programming and computer skills with books, courses and Google.
But there are also non-technical skills and traits that you should actively develop if you want to become a better overall programmer and increase your chances of getting hired at a good company and build a fulfilling career. Employers look for these characteristics in potential candidates and colleagues want to work with team members that are not only competent, but also have certain soft skills.
Don’t fall into the trap of thinking that your social skills and personality traits can’t be changed. You might see yourself as a shy, uncreative or lazy person, but those are all things that can be trained and improved (significantly) by proactively practicing them and adopting good habits.
However, please note that at the time of writing this post I’ve never worked a job as a programmer myself. I am still in the process of learning to code in my free time, and as part of this process, I research topics like this one in order to understand what lays ahead of me. This post – just as all my other posts and tutorials – is a way for me to summarize my findings and own thoughts for later reference. So take this list with a grain of salt.
Ok, here are the skills and traits that were most represented in my findings. The list is not exhaustive, because I tried to boil it down to the most significant ones:
This is probably the most important skill of them all (and not only for programmers).
If you tinker on a small project in your free time, you might get away without having to interact with a lot of other people along the way. But if you work on a bigger project and create software as part of a team, you have to learn how to communicate properly, how to express your thoughts, explain ideas and most importantly: how to listen. This is especially true if you work as an employee for a company, where you have to get along with superiors and colleagues. In today’s workplaces, programmers usually don’t work in isolation. Instead, they have to collaborate and exchange ideas with different departments of the company, like managers, marketers and designers. They have to understand the requirements of a project and tie all the pieces together into a working software solution, all while coordinating their work with the other developers of their team, so the codebase doesn’t end up messy and unmanageable. Not to mention that you have to be able to articulate your thoughts and appear respectful to master a job interview in the first place. And when you become a mid-to-senior level engineer, you might even be positioned to mentor your company’s junior engineers, where you have to be able to teach.
Since you work with a wide range of people, you have to learn how to explain complex programming concepts in a way that people with different levels of technical knowledge can understand them too. Don’t use slang, jargon or super technical terms if you’re not talking to an expert and instead try to come up with metaphors and parallels with other fields. This is also important if you work as a freelancer who builds software for clients that may know nothing about programming and just have a vague idea in their mind. Proper communication here avoids misunderstandings and problems down the road. If possible, schedule a video call for the project interview, so you can communicate freely and build trust right away. If the client feels understood and comfortable, it raises your chances of getting the job in the first place.
Whenever you talk to other people, no matter if expert or amateur, pay close attention to what they are saying. Show that you are genuinely interested by letting them speak without interrupting them. Ask clarifying questions and rephrase their sentences in your own words to ensure that you understood them correctly. This way you can get rid of any misconceptions right then and there. If you work in a team, let your colleagues know what you are working on and inform them about issues you encounter. Be honest when something is wrong or when you have a different opinion, but always keep a friendly tone. An incredibly good book about social interaction is “How to Win Friends and Influence People” by Dale Carnegie, because it contains actionable tips and not just empty phrases. Getting along with other people is actually not that hard if you follow some simple rules, like never criticizing them directly, appreciating their work, showing respect and letting them speak. You should generally avoid negativity when you have to do with other people. That’s equally true in your professional as well as in your personal life. Complaining is pointless in 99% of the cases, makes you unhappy and annoys everyone around you. You shouldn’t hold back when something is wrong, but how you deliver the message matters a lot.
If you are shy, socially anxious or come over as grumpy, you have to practice. There is no way around this and avoidance is a bad longterm strategy. A helpful technique to get over yourself in uncomfortable situations is “the 5 second rule”, which I already talked about in my procrastination blog post. You can also consider investing in communication workshops and courses.
Throughout your career, you probably want to visit various conferences and get in touch with other developers to socialize and build a strong network. You can’t do that if you can’t get out of your shell. You might also get into situations where presentation skills are needed. Maybe you have to explain something to a group of people at your workplace or you have the opportunity to give a talk at an event. That’s a great chance to make yourself a name in the community and push your career further. But if you are like most people (including me), the thought of speaking in front of a large crowd already gives you anxiety and you know that you will be much worse when you are actually standing on stage in front of tens or hundreds or thousands of people. I have mild social anxiety so I researched about that topic quite a bit and this is what I found:
There isn’t really a way to get rid of stage fright and you will probably never feel completely calm before such an event. But a good trick to cope with this is to actively reframe the anxiety into excitement. Turns out these 2 emotions actually have the same effects on the body, we just interpret them differently. They both raise our heart rate and make us sweaty and nervous. But we perceive one of them as good and the other one as bad. A lot of famous speakers harness their anxiety by telling themselves (verbally) that they are excited about their upcoming talk. Next time you are nervous about speaking in front of a group, say “I am excited” out loud and repeat it over and over again. Tell yourself what you are excited about: the opportunity to present your ideas, to help other people, to make yourself a name. It might seem stupid to verbally tell that to yourself, but it actually helps to reframe your thoughts and emotions from a threat mindset into an opportunity mindset, which in turn calms you down and lets you perform better. This is a technique I came across over and over again in different books and it’s used by a lot of good speakers.
But besides verbal communication, there is of course also written communication over email, chat, messaging systems and shared documents and if you work remotely, this might be your primary way of contact to your coworkers. Text messages are much easier to handle for shy people, but they come with their very own challenges, like typos, time delays and misunderstandings. Proofread your messages before you send them and always think about how they will be received by the other side. Sarcasm is harder to understand in written text, so if you mean something funny or not serious, an emoji could be appropriate. Just don’t overdo it in a professional environment. Prefer public channels and mailing lists over private messages if other people could benefit from the information too. Keep your messages clear and short. If that’s not possible or if it’s very urgent, a phone or video call might be a better choice. Part of good communication skill is choosing the appropriate channel.
Consider installing a spell check plugin like Grammarly into your browser. I myself have trouble creating proper English sentences because it’s not my mother tongue, but spell check tools at least help me get rid of the worst mistakes and typos.
My grammar is probably bad too, but that’s why I am practicing a lot. You don’t have to be a genius writer, but try to pay attention to slips that actually change the meaning of sentences, like writing “two” instead of “too” or “their” instead of “there” (or vice versa). Also check your resume, profiles or anything that potential clients and employers could look at when they consider hiring you, because they probably don’t want their code to be written by someone who is sloppy.
As a programmer, you have to be open to new experiences and can’t clinch too much onto a certain approach, tool or even programming language. Frameworks and best practices change all the time and you have to be willing to constantly learn new things, try out new techniques and get rid of old habits. Don’t get religious about technical stuff and always keep a certain level of curiosity. Just try to approach new concepts with the same awe and wonder you had when you learned your very first programming language. Enjoy it and don’t focus on the negative parts.
You should stay up to date by reading tech blogs in your niche (like android-developers.googleblog.com), following other developers on Twitter and subscribing to Youtube channels that talk about topics you are interested in. If you are an Android developer, subscribe to the Coding in Flow Youtube channel, because I release new Android tutorials every week.
Also stay open-minded when it comes to criticism. If someone finds errors in your code or in your way of approaching a problem, see it as a valuable chance for improvement rather than a personal attack.
As a programmer, you have to solve problems. Ultimately, this is what software is all about. And while you are building an application or website, a lot of smaller problems arise along the way. Finding the appropriate solutions and keeping everything maintainable involves quite a bit of creativity. You have to understand the requirements of the project or task, design the code architecture, decide on variable, method and class names, choose between different tools and come up with your own algorithms whenever there is no ready-made class or library. You have to think through different use cases and account for users’ choices, errors and interactions with other systems. Programming is a bit like solving a difficult puzzle.
And then, of course, there is also creativity required when it comes to things like designing user interfaces, coming up with ideas for new features or branding and marketing a product. In a company, these things might be done by someone else, but for your own hobby and freelance projects, it is good if you have some skills in those areas as well. If you are creative, you can also come up with your very own app ideas and maybe build something that helps other people and generates you an additional income.
A lot of people think of creativity as this inherent talent that only gifted people have, but in reality it’s actually just the application of knowledge and experience in new and unique ways. Sure, there is some talent involved (like for any skill), but you can get more creative simply by getting a lot of input, trying out different things and experimenting with them. If you focus on learning new concepts and then spend enough time applying them to different projects, you will get better and better at finding creative solutions for new problems that arise. For this, you have to be open to new experiences, tools and frameworks like we talked about in the chapter before.
However, creativity needs its place. Always keep in mind that what you are building should make life easier for others. So adhere to conventions and don’t change things that have been proven to work just because you feel like it.
Since there is always something new to learn, changes to make and problems to fix – often all at the same time and with short deadlines hanging over your head – you have to learn to organize your time and energy properly. If you get work done on schedule, it shows your employer that you are reliable and that your team can count on you.
You have to prioritize and decide what is most important right now. This also means learning to say “no” when necessary. This could be to your boss about a not well thought out new feature, to your colleagues who want you to help them with their problems or to potential new clients that don’t fit into your schedule. Just remember to explain your reasons in a friendly and respectful way.
Self-organization also helps you keep the rest of your life together. You might sometimes have to do overtime to fix a bug or solve an urgent problem, or you need a while to learn a difficult new concept and have to spend a lot of extra hours in front of the PC after work. If your day is not organized properly, these occurrences will completely wreck your habits. You should avoid slacking off when it comes to sleep, sports and nutrition, because this will always cause a backlash into your professional life in form of low energy, bad performance and reduced cognitive abilities. As I explained in my How to Stay Healthy as a Programmer blog post, physical fitness not only saves you from chronic pain and sickness, it literally makes you more intelligent. You don’t want to miss out on that advantage. Besides that, a healthy, disciplined lifestyle makes you happier and reduces the chances of getting depressed. And the more balanced you are, the more other people want to be around you.
Self-organization becomes especially hard if you work remotely or as a freelancer, because without supervision you are not only responsible for your personal time, but also your working hours. And no matter your job, you should always find some free time to tinker on hobby projects and to learn new things.
When it comes to getting things done and being happy with my working habits, I found that nothing works as good as a schedule. When I plan a task in advance, I do it, no matter if I feel like it or not. It gives me a clear structure and direction for my day and makes worlds difference in terms of procrastination and efficiency. I always feel in control because I know where my time goes, I know when I can relax without feeling guilty and I know that every important task gets enough attention.
If you want to try it, take out our calendar create time blocks for all activities and tasks that are important to you. You should schedule everything that can be planned in advance: Work, learning, health and fitness, but also leisure, family, friends and other things you enjoy. But make sure to stay flexible and don’t overplan. Don’t schedule every task in detail, but rather create blocks for different categories, like certain projects. Read my How to Beat Procrastination blog post if you want to learn more, because there I explain it in more detail.
But organization doesn’t end at your schedule, your code has to be organized too. It should be structured in a way that other people including your future self can work with it later. Software architecture, proper documentation and good coding habits make life easier in the long run for everyone involved. You learn this simply by reading/watching tutorials and practicing a lot.
As a programmer, especially when it is your job, you will experience situations of pressure, like short deadlines, last-minute changes, untraceable bugs and code that is difficult to work with. And on top of that, you have to constantly learn new things and keep up with the latest technology changes. This can be a lot of fun, but from time to time it will also be hard, stressful and frustrating and you have to be willing to struggle a bit every now and then. Effective, deliberate practice often comes with a certain level of discomfort, but every time you figure out a new concept or solve a difficult problem, you will feel accomplished and proud.
Don’t be afraid to make mistakes. This has been repeated so often that it sounds cliche, but most people don’t actually apply this to their lives. They think of mistakes as failures rather than opportunities to learn, which is one of the most destructive mindsets one can have.
Make sure to read my blog post about the growth mindset, because it is crucial in order to be able to endure difficult phases and cope with mistakes and setbacks.
Ok, that’s it for my list. I hope this post inspired you to take your character development equally important as your programming skills. Of course there are more soft skills and traits to develop, but in my opinion those were the most important ones. Do you want to add anything to this list? Let me know in the comments below.