I have been trying to be a better developer throughout my career. I had some idea on what that means but after joining Meta(previously Facebook), I can now better formulate some of the things. Soft skills are usually overlooked but while the scope for a developer widens soft skills become more and more important. I haven’t shared for a while and I realized I want to talk about this topic. I am doing so, starting with this post.
Some disclaimers:
- I am not saying if a developer doesn’t have some particular qualities they are bad. The traits I will talk about are not binary. Every developer should have some level of them as part of their jobs and personalities. Some of the things I will talk about could be contradictory. Adaptation is a really important skill I will talk about later.
- I am not trying to reflect how I see myself and brag about it. For some of the skills I think I am ok, for some I am trying to get better at, but for some I have a long way to go. I had a chance to work with many great people and they inspired me with some of the qualities they have.
- These are my own opinions and these may not coincide with my current and previous employers’, yours, or some well known personalities’ opinions.
Now we set the ground rules so we can get started.
Self Improvement
As I am writing this series of posts, I am kind of implying that developers should get better with these skills, at least keep them in mind and be self aware. So it should be fair to start with “Self Improvement”.
First I thought of writing about self learning but then thought it would be half of the picture so decided to talk about “Self Improvement”. Let’s first talk about Self learning and then the difference between two.
Self learning
I don’t think I have to emphasize how learning is important for Software development. It is mentioned in almost all job postings, resumes and cover letters.
Pedagogy might have some terms for what I am talking but I think we can classify levels of self learning into four:
Autopilot: After gaining enough competence at a role, a developer can start doing their job without putting too much effort into it. They don’t need to learn anything new to operate.
Spoon feeders: At this level the developers consume the information that is readily available to them or pointed out to. This could mean they are just consuming material to onboard on a role and trying to stay afloat until onboarding is complete or leeching other people because they are simply lazy or incompetent. It may not seem fair to place these two cases into the same type but they both are not responsible from their learning journey mostly.
Independent learners: They are aware of what they need to learn to do their jobs. They do not need to be told what to learn. They also have some idea what their learning plan would be like.
Proactive learners: Proactive learners show an extra effort to go out of boundaries of their job requirements and also try to learn things that would help them to do their jobs better or what could be useful in the future.
A developer may change groups throughout their careers. Motivation is the biggest factor on how much they want to learn and in which group they want to be in. Self drive is not the only source of motivation. Company, project, team, role and personal life are also other sources of motivation and demotivation. There are different periods in my career I swinged in between autopilot and proactive learner. It is really important to be self aware and seek opportunities to level up.
Self Learning vs. Self Improvement
Rules of chess is really simple but learning the rules does not make you a grandmaster. You may argue that not everyone would want to be a grandmaster but for even being a good player in a region, you probably need to read a lot of books to learn games and techniques and practice a lot to absorb the knowledge you acquired from the books to improve your game.
Software development (or anything in life) is not different. After graduating from the university I had really low confidence. I had learned a lot of things but I had no idea how to convert them to a software product. It took me a while after landing my first job to gain confidence and say that I can survive.
Another example would be RxJava and Observer pattern and I know I am not the only one who went through this. Observer pattern sounds simple but I can say that after over using it all around the project and after realizing it wasn’t a good idea and removing it from 99% of the code base, I think I grasped it and it is now in my toolkit as a part of my developer personality.
As the aim of this post series, self improvement does not only consist of technical skills, a developer should also work on their soft skills constantly. It is important for anyone to ask themselves where they want to be in the future and decide what kind of professional personality they want to have. Being aware of the delta from what they are now and having conscious decisions for obtaining skills to close the gap is a really important process for career progression. For learning new skills, being an independent learner might be enough to have a good career but for soft skills, a developer should be more proactive.