I am typically the guy you face in a new company and feel they do magic. The one who lives in the terminal, who never uses anything other than vim, whose only GUI application is the browser. Even though I’m definitely not a magician, I do live in the terminal, or at least, I used to.
For the last few years, my main text editor has been vim, the pure one, not the crappy bloated neovim. I don’t use any plugin manager other than git for installing those very few plugins I need, the ones that cannot be implemented directly in the config file. I have a few shortcuts that open terminals in vertical and horizontal splits where I can use lazygit or perform shell commands. The only other plugin I have is Copilot which is a game changer. And looking from the outside, I sometimes understand why people think I’m doing magic.
This might be a slightly different post of mine as it is not directly related to my work. However, I believe it is a good example of how I used my technical skills in my personal life. The case was relatively simple: I wanted to save money and yet keep my data safe in the cloud. Let me explain the situation first.
For a long time I had chosen to keep separate online archives for my photos and data. I used Google Photos for my old photos from the old life, the time that I was not happy to remind on daily or even monthly basis. Then I decided to use Amazon Photos for the new life and the contents I felt happy to look at every day and sharing with my friends. Since I do take a ton of photos, I had to buy the premium account so soon, 2$/month for 100GB.
It was not a long time ago that I started feeling overwhelmed at work. I felt I had a big plate filled with many things that I needed to take care of immediately and I had no power to handle them. It looked like a simple task was taking forever to be done for some unknown reasons. I was constantly blaming myself for not meeting the deadlines for some reasons that I could not see. The more I insisted on working, the harder it got to accomplish tasks. Soon it started to spread to my personal life, and I found myself having nightmares about our services at work. When I opened up about this matter with the team later, I found out that it is not new in our job and it already has a name: burnout
Git
is probably the one single skill/technology keyword that can be found on CV of almost all people working in the Software industry. It is one of the first things everyone learn even before starting to write the code. This is mostly because of the fact that it is the most widely used version control system, it is easy to learn, and it is very powerful. Here in this article, I don’t intend to discuss about complex or very advanced features, but to talk about a real scenario that I faced recently and how I used one of these features to solve the problem, even though I should simplify the case. But to start, have you ever heard of git bisect?
I believe I have already mentioned in my previous posts about the journey I started as a Software Engineer back in 2011. When I was still early in my bachelor’s degree, I was asked to join a young team as their iOS developer. It was a great opportunity for me to start my career, and I am very thankful for that. I have learned a lot from that team, and I have always been grateful for the chance they gave me. Years passed and I enjoyed my life as I saw myself growing in the industry. Until almost 2 years ago on April 2022, when I joined WithSecure as a Senior Developer. The new role was different, a macOS developer.
We, as human being, would like to explain the world we are living in with the simplest possible rules. That is why physicists are looking to find a theory to explain everything. The same motivations are found among other fields’ experts, including Software Engineers.
This is, however, a bit different in the SE industry. Here, experts are trying to find an optimal way to make software development easy, efficient, and reliable. Since we are living in a world surrounded by software, these efforts can someday make the world a better and reliable place to live. In this article, I would like to point that why sometimes we are looking into a wrong direction and to name some basic factors that are ignored when people try to generalise rules and practices.
When I started my journey as a Software Engineer back in 2011, I was asked to develop iOS applications. It was a small team, and I was joined as an intern, so I took the opportunity and to be honest, it was a wise choice. Working on Mobile projects, in my opinion, is always a good starting point for recently graduated or even students as it is easier to learn and still requires knowledge that helps newbies to get better in software development.
It all started back in January 2021, when I saw Greg’s tweet about a Kernel mentorship program for Spring 2021.
It was a huge opportunity for me, a developer who loves Linux and enjoys working on open-source. Indeed, I had tried once to submit a patch, but it was rejected because I didn’t have the required knowledge for working on Kernel. Therefore, I applied for the program so quickly that I didn’t even check the deadline and required tasks. Those tasks included contributing to Kernel, completing code challenges, reproducing crashes, and writing reports about all of the mentioned activities. There were a lot of tasks, and the deadline was about to due.
I like spending time on open-source projects. My GitHub profile is full of libraries and tutorials I have made during past years. On top of all, I have a big passion for Linux and the community behind it. In my opinion, Linux is one of the most important and game-changer projects during the history of Computer Science.
I started to study Linux Kernel in 2020, and have tried to make few patches. I am not a hardware expert, thus my patches are mostly about fixing trivial coding-style issues. I usually sign-off patches using h.shahbazi.git@gmail.com. I work on a Gentoo Linux which runs the latest stable kernel and occasionally, I switch to rc kernel versions for testing purposes.
Write once, Run anywhere has been a dream for decades among software companies and developers. The idea of removing duplicated code is not just about doing most with least costs, but also about avoiding disasters of forgetting to update all copies. If you have ever contributed in a large-scale software project (even in a small one), you probably have seen how different teams try to centralize core solutions and algorithms to avoid duplication.