In this article, I plan to expose some ways that we can identify our points of improvements as software engineers and then make a plan to attack these challenges by using small daily habits.
I'll be showcasing the habits that I've been working on for more than a year and that have granted me great improvements and achievements in my career.
These habits are meant to be simple tasks that we can practice in 5 to 30 minutes a day and are very easy to accomplish. I am sure you will see some improvements quickly.
Currently I am on a streak of 372 days and counting for my habits of practicing typing and solving an algorithmic problem a day.
One of these days I was very happy to now be able to create a Heap data structure from memory. Which means my practice is providing me new skills : )
That's the way you will keep the Rejections away!
I have been working in Software Engineering for a long time now. I really enjoy increasing my knowledge but the parts that you need to improve in your career are not always that clear, even more so in the beginning of a career.
When I first started, I worked mostly alone being the person responsible for maintaining applications running smoothly by fixing their bugs and occasionally adding small features. Later in my career, I started working more within teams and when I worked along with more experienced Engineers it was clear that I improved a lot faster than while working outside a team. I could see them as models and see what I was doing that could be improved. It can be small things like in my case, typing speed and the usage of keyboard shortcuts.
Also, another important topic, which is the main focus of this article, is the ability to deal with complex algorithms. Some people can deal with them easily, some people have different backgrounds and better knowledge of math, but at the end it comes down to practice little by little / day by day.
On a previous team I had a few coworkers that shared the will to improve upon Algorithms and we joked about solving a problem a day during lunch time but during that time the habit did not stick.
After that, I started learning more about small habits and then I found the book Atomic Habits, by James Clear, and was very curious to read it. It has lots of interesting insights about how doing tasks just for a few minutes a day can have it compound over the long run and show great results.
I was at a stage in my career that I already studied a lot about new technologies and experimented with them often, that way gaining experience was easy. One of my difficulties was evolving my Algorithms knowledge, and I seemed always to be stuck at the same level of knowledge. Usually I got frustrated by not being able to tackle algorithm problems during Interviews. My goal was to pass the interviews for jobs in specific companies, but I realized that this knowledge also makes us better engineers in our daily work.
I started figuring out how identify my points of improvement as a developer and then setup a plan to sticky to the habits of doing small portions of practice every day.
The two improvement points that I chose to act on were algorithm knowledge and typing.
For that I have setup on my task apps the habits of:
-- Solve an algorithmic problem a day (nowadays through the platform AlgoExpert.io)
-- Practice typing (through cli-typer - a command line app to practice typing)
Currently I am on a streak of 372 days and counting...
When I first started these habits I had the goals to improve my professional performance, delivering better products and, essentially, being able to pursue my dream job.
I share that after a year of identifying an effective and very simple way of doing things, at least from my experience.
I am putting a lot of focus on habits because the afore mentioned book Atomic Habits, by James Clear, in companion of other books such as Sprint, by Jake Knapp, and the most recent one that I just found out - 14 Habits of Highly Productive Developers, by Zeno Rocha -, had a huge impact on my career and even in my life. I was able to work at many small projects that I always wanted to do but "I did not have time". I started creating this blog, I worked on my Side Project Battle.coderhub.dev which is in its early stages and I still have lots of work to do but I was able to pass the hard part of just starting it.
Starting is hard but in fact you can start with only 2 minutes!
Well, not actually perfect but the more you practice more skilled and confident you get. What you once found to be so difficult eventually become not so scary at all.
I can give a practical example: I always looked at those fancy data structures and it all seemed so scary to me. Now I am able to construct linked lists, trees and graphs and I really enjoy that. As mentioned I am now able to create a Heap data structure from memory.
It really isn't that hard. What I do is, usually, at lunch time I pick a problem and try to solve (If I have difficulties I take help from external material or tips) but the point is trying to solve and understand it. After solving it I revisit it in the couple of days afterwards until I can do it without help of any external resources. Eventually, weeks later I pick a random problem I already solved in the past and give it a try, most of the times I am able to solve them very quickly.
About typing, which is something I also identified as a point of improvement, just before work I do all my daily habits and start practice typing on the command line application cli-typer
for a minimum of 2 minutes every day.
It is very important to measure your progress, without doing so you will not be able to see a point on having these habits daily.
In the beginning I became frustrated for not being able to advance in the interview phases I participated. Later, I could see that I was advancing into different stages of interviews. Then, one great achievement happened, I was able to advance to the final round of interviews at Spotify in Stockholm, Sweden. At that time I was a bit prepared but not enough to pass the technical interviews so I didn't got the job. I continued with all my preparation and probably will not stop anymore. A few months later, I was able to obtain my greatest achievement so far. I also had other experiences that I want to dedicate an exclusive post.
The point here is that these habits and all the preparation had lead me to begin to achieve goals I had set in my career.
I was asked once in one of the OnSite Interviews on Spotify - "How do you measure your progress on these things you are acting to improve?". I replied that I measure by my achievements toward my career goals such as being able to go to another country to participate on the final round of OnSite Interviews.
I believe that Algorithms Knowledge is a very important foundation for Software Engineering. Sure, there are complex algorithms that most of us, engineers, don't apply daily but I know for experience that this knowledge makes everything easier. When you tackle different, complex algorithms, you start understanding patterns and you can solve your daily tasks, as well as, starting to solve problems in different ways.
I used different online platforms in the past, also ready different books, some of them more complexes, from which I can recommend:
-- Daily Coding Problem, by Lawrence Wu, Alex Miller
-- Elements of Programming Interviews, by Adnan Aziz, Amit Prakash, and Tsung-Hsien Lee
-- Cracking the Code Interviews, by Gayle Laakmann McDowell
As for online platforms, nowadays I use AlgoExpert.io which I find to be very complete and offers very detailed video explanations.
Also, I am building a platform called Battle.coderhub.dev where developers are able to compete against each other in realtime to solve an algorithmic problem. It is still in beta and I am still working on adding more features.
I encourage other software engineers or even other professionals to give this method a try. It just takes a few minutes a day and the benefits are huge.
I hope with enough practice it helps on keeping the rejections away from you! : )
Please reach out to me if you need some hints on how to get started or if you want to try my Side Project Battle.coderhub.dev for realtime coding battles.
You can find me on:
Twitter: @johnnyeric
Github: @johnnyeric