Habits I want to develop as a Software Engineer
Would you call yourself an impostor if you had thousands of solved problems on leetcode? Hundreds of contributions to the Open Source projects? Written your site? Finished dozens of programming books and courses? Created your product? Learned a new language?
Would you have problems acing nearly every interview that you have with all of the above?
Would you complain that you are not feeling like you're moving in the right direction or that you are stagnating in your current job?
Probably not. Each of this action will cast a vote for you being a good engineer
Very recently I read a great book called Atomic Habits. And a bunch of others, like the Power of the Habit and Mini Habits, and not going to lie, I'm kinda obsessed with the habits now.
It sounds like a lot of work.
I like to imagine this ideal person with such a routine, but even more, I love to imagine the person who's struggling, who can't keep up with all the burden they have, who's overwhelmed, yet implements this routine for a month or a few months. How will they change?
So here are the habits I want to develop and I'll use a mini version of these habits where applicable to start with and develop them. Later I will evaluate my mini habits and do optimization if needed, but until then:
- Leetcode every day. What is a mini habit will look like here? Open the problem you haven't solved yet, read it and understand what the program will have as an input and what it should return. Think of what kind of algorithm would be used in the solution. If I've already read this problem before, I'll write a few lines of pseudocode or just the comment on how it generally should be working. That's it. No more than that. That is the absolute minimum I am required to do. I'm starting with easy problems. The goal is to never skip this. Right now I'm usually solving an easy problem every day, but there are days when I don't feel like it, so this mini habit is especially useful for such days.
- Open Source contribution. I wouldn't describe here why, but I see a lot of value in contributing to open source. However, this is extremely time-consuming. You have to get to know the project structure, the way contribution happens in this particular project, you have to find the issue, see if this reproducible and needs a fix, and maintainers willing to accept the PR. So, a lot of stuff basically. What is a mini habit here? Read 5-10 issues in the project you're interested to contribute to. I can do as much even on worse days. And the RSS will help me.
- Writing this blog. I like writing. So 50 words a day should be a good mini habit.
- Rust. My requirement here is to write a line of code every day. Sounds stupid, but that's the whole point, to write a single line of code you have to go through all of the frictions of the opening editor, thinking of what you want to write and actually writing. No way I'm going to write just one line of code on a regular day, but could I skip writing this mere one line? No way. There is no excuse
- Tech book or course on Coursera. A mini habit: watch one video on the Coursera, read 1-2 pages of the book, or look over a problem/exercise just as I did for Leetcode.
- 5 AM. Now there's no really a mini version of this habit, so that what it is. Get up every day at 5 AM and get after it.
This, of course, does not include habits that I think I've already developed and which are not directly related to being a software engineer.
The 5 AM is really important. The goal here's is to do 3-5 habits first thing in the morning. The day just started and you've already looked into some problems on leetcode, wrote 50 lines of a blog, and looked at some issues in open source projects — who's going to stop you?
Actually, this is exactly what happened today.
Right now it's the end of March and starting April I will deploy this SOP (Standard Operation Procedure) full scale. No excuses, no bullshit, just get up and get after it. I plan to write an entry on my progress weekly, see you there), if you are interested!
I will use the habit tracker to track the progress and few other techniques I've mentioned in the "How I live my life as a software engineer"
Here's a preview of my schedule that I had run on Day 0, which is March 31
- 5 AM GET UP
- 5:00-5:15 Prepare coffee
- 5:15-5:45 Read through issues on aiohttp and FastAPI
- 5:45-6:45 Write this blog post
- 6:45-7:45 Leetcode
- 8:00 - 11:00 Deep work session
- 11:00-12:30 Exercise
- 12:30-13:00 Cold Shower
- 13:00 - 16:00 Low cognitive work, basically bunch of meetings, replying in Jira, very simple code
- 16:00-17:00 Coursera (Data Structure course)
- 17:00-18:00 Writing my own site (which you presumably read this on) with Rust
Four out of six habits that I want to develop were executed before 8 AM and this is exactly what I want my morning routine to look like!
Wish me luck and I'll update you on my progress here