From Gears to Git
Engineering my way into Software Development, lessons and tips for career shift aspire-rs.
In 2016, I was working as a full-time mechanical engineer with nine years of experience in mechanical design behind me. I was an experienced and proud engineer with a multiset of design skills, from designing bus bodies, tanks, and tippers to glass container molds.
I loved my field and day-to-day job; designing gave me that sense of creation that the creative child inside me longed for. I excelled in using computer software to deliver technical drawings as well as modeling designs in 3D.
However, after working as a mechanical engineer for almost a decade, things got boring. I had become so experienced that there weren't enough technical challenges to keep my mind engaged.
Every time I had to design a new glass mold, I only needed to adjust the old designs to meet the new requirements. I became very proficient in using AutoCAD to deliver the drawings. Even for the 3D models, I embedded equations and constraints in them. Whenever a new requirement emerged, I only needed to provide the computer with some new inputs, and the model would adjust automatically. However, I realized that this stripped my mind of the joy of creation and problem-solving despite the fact that it was clever.
Moreover, in the previous couple of years before that date, my company underwent a huge management change due to a big acquisition. The new management had a different mindset and didn't much appreciate the hard work and achievements of the old employees like me.
All of this increased my frustration, and at that point, I decided that I needed to take action. I needed to learn something new.
So I asked myself, what are my innate talents? What are the skills that come naturally to me? What are the things that I find easy and enjoyable to do? What things always captured my interest and allowed me to enter a state of flow effortlessly?
My responses were all related to computer software. I have always had a passion for learning software since I was a kid. I started by writing basic programs on my MSX computer. As a teenager, I wrote an address book app using QBasic on my Pentium II IBM-compatible PC. In college, I learned graphic design packages and AutoCAD. Later on, I taught myself 3D parametric modeling when I started working as a design engineer.
I have always loved and excelled in learning software that creates things. Computers have always been my strength, even in the mechanical design field. They have been my selling point! It may be time to take this to the next level and become a programmer.
In the beginning, my ambition was modest. I never dreamed of transitioning to a full-time developer. My biggest hope at that time was to be able to do some freelance tasks beside my main job. In that way, I would become a little bit financially independent on my mechanical engineering career, and I would be able to add some fun to my life that I was missing in my original job.
During my time working in a glass factory, there were periods when I had spare time. As a designer, I wasn't always busy with new projects. Instead, I would spend a week or more creating drawings for new requirements. After that, the process of manufacturing molds and glass containers began, during which I had nothing to do. It wasn't until the containers were finished that I could receive feedback on my designs. I took advantage of this spare time to learn on my own.
So I googled:
"What programming language to start learning with?", "Which programming language is the best?" "what programming language is best for beginners?" "What programming language can do desktop applications, mobile applications, web applications, and, if possible, Help me with my Visa application?" Lol.
It later became clear that the questions I had been asking as a newbie were not the right ones to ask. However, I believe some bloggers take advantage of the popularity of these types of questions to attract more attention to their posts.
Finally, I decided to learn Python, primarily due to the influence of some blogs. Moreover, Python is easy to understand and has a vast community, which makes it a popular choice.
I dedicated a few months to learning the language and writing a few scripts.
At first, I found that some parts of the language were straightforward to understand and very intuitive, with lots of "I knew it should be like this" moments, but some other parts didn't make much sense.
For example, I struggled to wrap my head around object-oriented stuff; it was not exactly that I didn't understand how to write OOP, but more of why it was necessary. I mean, we have functions, right? So why would we need classes?
Until one day, I decided to embrace certain concepts, even if I couldn't fully comprehend them.
This decision turned out to be very beneficial in my learning journey; I believe it is an important learning principle that everyone can benefit from.
Essentially, when faced with incomplete understanding, you should not give up but rather grasp what you can and move on to the next topic. However, it's essential to revisit the topic later, perhaps by learning it from a different source or applying it practically. Eventually, you will realize that the topic finally makes sense and is fully understood.
This process takes time, and new learners need to understand that it's a common experience among software developers. It's important not to be discouraged by not understanding everything at once; in fact, nobody does, as this is a natural part of the learning journey.
One thing else I have learned about learning in general and learning software development in particular is that the more you understand, the easier it becomes to understand more. Therefore, the more you understand about Python, the easier it will be to learn more Python, and the easier it will be to understand other programming languages and frameworks. In the programming field, there are many small, subtle concepts that are transferable to new things you learn along your way.
Back to my story, once I completed my first Python course, I began writing and practicing my programming skills. Initially, I wrote some scripts to automate some tasks in my daily work routine, but it was not enough to satisfy my curiosity. That's when I decided to create a mobile application to serve my local church community.
I started to google the wrong questions again: "How to develop mobile apps using Python?", "Python platform-independent GUI framework"?
After experimenting and wasting some time working on some Python projects, I finally learned an important lesson: if you want to create a professional product, you need to use the latest and most advanced technology in the field.
Python mobile app development frameworks, although numerous and with various scopes and abilities, have never - till the date of writing this article - matured enough to reach the native level of Java in Android or Swift in IOS.
Kotlin did, React native did, and many other non-python frameworks did, but not Python.
The thing is, The first programming language you learn is often the one you feel most attached to, and it becomes like a close friend. When you try to learn a new language, it can feel like you're betraying your old friend. Many developers, including myself, have always been searching for that one "perfect" language that can do everything better than any other language. However, this ideal language has yet to be found, and it may never exist. Each new programming language has a specific reason for its creation, often to solve a particular problem that other languages could not handle effectively. However, each new language also comes with trade-offs. While it may excel in certain areas, it may lack superiority in others.
Python, for example, was created with the developer experience in mind. Guido van Rossum, the language founder, felt the need for a more human-readable and easy-to-understand language than the current languages available. Perhaps this is one of the reasons why Python is one of the most popular programming languages out there.
Long story short, as a developer, you have to overcome the desire to achieve everything with your favorite language; you have to decide to step out of your comfort zone and learn to write in different languages.
Of course, there is nothing wrong with favoring one language over another; there is nothing wrong with enjoying writing one language more than writing the other; we are humans, not machines; we have hearts that interact and get involved with what we do. The enjoyment we feel when working in our preferred language is one of the things that keeps us passionate about programming. It is this passion that drives us to continue learning and improving our skills in this field.
But just be flexible in your design choices and maintain objectivity, reserving passion for implementation.
And so I decided to learn Java. However, I found it quite challenging and frustrating. It was the moment when I had to transition from the simplicity of writing:
print("Hello World!")
to the complexity of writing:
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
I mean, why does it have to be so complicated?
But I had made up my mind to learn Java, so I had to adapt.
Unlike Python, Java strictly adheres to the object-oriented programming paradigm. You cannot simply add an underscore before a private method name, hoping developers will not use it. Similarly, you cannot mix and match between classes and functions all over your code as you can in Python.
Luckily, this strict adherence to OOP principles was highly beneficial to me. It allowed me to fully understand and grasp concepts I may not have fully understood in Python. And this is the advantage of getting exposed to multiple technologies and paradigms.
After learning Java and Android development for a few months each, I began working on my project.
I managed every aspect of the project, including designing artwork, icon creation, coding, and backend development. Although it was an incredible and enriching experience, the code didn't turn out to be the typical spaghetti code that inexperienced teams produce. Instead, it ended up being a nightmare of extremely messy, tangled, and convoluted code. It was smelly and dirty, but despite all that, and most importantly, it was working!
When I showed my application to my friends at church, they really liked it and started using it right away. It was a huge confidence boost because I created something useful with coding. I realized that starting your journey with something you're passionate about and spending a good amount of time on it is valuable. You need to create something from scratch that actually works.

Later, I created a few more Android apps that were less impactful than my first one. But for some reason, I began to lose interest again. Despite knowing that my journey was far from starting, something felt off.
I took some time to reflect and realized that the problem was Java, that evil language that managed to creep inside my life to destroy my passion (This is just a joke. Java developers, please do not take it personally.) The truth is, I didn't enjoy working with Java as much as I did with Python. So, I made the decision to return to Python, which was the right choice for me.
I understand that earlier, I mentioned that stepping out of your comfort zone and exposing yourself to different things is essential, even if it means leaving behind what you love and know. While I still believe that's true, I also acknowledge that passion - that internal fire that drives you to grow - doesn't always consent. You don't feel the same when you write in your favorite language compared to writing in a different one.
The solution is to strike a balance between becoming a professional developer and keeping your passion alive. Ignoring one aspect could lead to failure in both areas.
So, I ditched Android and returned to my automation scripts. However, I also realized it was time to transition into a full-time programming position. This was easier said than done, not only because employers may not see much potential in a developer with zero professional experience at the age of 37 but also because I was so afraid to take the next step.
I prepared a new resume with trembling hands. I couldn't help but wonder, even if by some miracle I received a job offer in the software development field, would it be wise to give up ten years of experience in mechanical engineering? Would I indeed be successful in this new field, or am I just a foolish dreamer who believes that passion alone is enough to achieve anything?
I don't want you to think that I am the type of person who is super decisive and never looks back once they decide to pursue their passion. In fact, you shouldn't believe anyone who gives you that impression. We are all human beings, and there are no guarantees in life. We have family commitments and bills to pay, a position that can sometimes make it difficult to follow our passions.
But again, help came to me in the most unexpected way. A conflict had arisen between the management at my company and me. Unfortunately, due to a lack of professionalism in handling such situations from my side, I worsened the situation, causing a minor problem to escalate. Without going into too much detail about what happened, I ultimately had to leave the company.
Now that I became unemployed, I decided to apply for jobs in both fields. I had two resumes ready, one for each field. The first job offer I received was from a small company in the software development field. Even Today, I am still incredibly grateful for this opportunity as well as for the owner of that company. Despite my lack of experience, He saw my potential and gave me a chance.
The story doesn't end here. A couple of months later, an old contact reached out and offered me a position at one of my previous mechanical engineering companies. It was a moment of truth because the salary range was triple what I was earning at the software company then.
It wasn't easy to decline an offer that promised three times my current salary. Regardless, I decided to proceed with the interview process to see how things would unfold. Eventually, I was offered the job, but I had already become invested in my new career. I was in the zone and had already taken the plunge, so why would I go back now? As a result, I declined the offer.
Although I am proud of my achievement, I am also grateful for the many opportunities that were freely offered to me along the way.
If you're considering a career as a software developer or are already on that path, the following tips and lessons I've learned on my journey might be helpful:
Passion is a crucial element for achieving success in this field.
See, this field is a challenging one; you have to learn a lot and keep learning.
You have to be always up to date; there is always something new; in fact, there will be a lot of times that you will feel overwhelmed with how much information you need to keep up with.
You are going to spend a significant amount of time sitting in front of a computer writing technical stuff, So if you don't like sitting, computers, or technical work, this may not be the field for you.
Yes, coding is one of the highest-paying jobs, but it's important to note that only those who are good at it can expect high pay. Given the highly competitive nature of the market, if you lack the necessary skills, you may not be able to command a high salary.
However, if you possess a genuine passion for coding and are the type of person who gets excited when your little 'hello world' program outputs, then you are already part of the club.
It is a misconception that only individuals with high IQ can excel in this field.
When working on technical tasks and problem-solving, intelligence can be important. However, there are a few things I can assure you of:
If you love something, you will enjoy learning about it. If you become skilled at it, your enjoyment will increase, resulting in a continuous process called the “positive feedback loop of learning”
Grit, not intelligence, is the number one factor of success, says science.
Individuals get smarter over time by learning new skills and developing themselves.
Not all successful developers possess high intelligence, but they have passion and grit, among other necessary traits that guarantee success.
It is entirely normal to feel dumb when you are still learning the basics.
I've been there before, as have many others. Learning to communicate with machines and instruct them can be a complex process. However, the good news is that things that seem challenging Today will become easier with time and practice. This applies to everyone new to development, so if you are struggling to understand a programming concept or learning a new technology, know that you're not alone. It's normal to feel overwhelmed, but with persistence and effort, you will get there.
It is going to be worth it.
I never thought I would end up here, but programming has exposed me to many personal and professional experiences. I have had the opportunity to work with people from different nationalities and backgrounds, travel abroad many times, and make some precious friendships. I have learned a lot, not just about software development but also about people, the workplace environment, and myself. Being a software developer is a privilege and an enriching experience.
But it's also going to be hard!
As with anything in life, nothing that truly holds value is obtained for free. It's important to understand that there will be times when you won't have a lot of free time and may experience burnout or high-stress levels. It's also crucial to keep yourself constantly informed, up-to-date, and prepared for any new challenges that may come your way. Of course, managing your time and reducing stress is essential, and maintaining a healthy work-life balance is critical. However, there will be times when pressure is unavoidable.
Final Thoughts
Thanks for making it that far. I hope I could spark a little hope and inspiration inside you; while I shared parts of my story, my main focus was to encourage you to start your own journey. Remember, you are capable of achieving great things!
This concludes my article, but I will be sharing many tips and lessons later; my goal is to guide you through the field of software development as smoothly as possible. I also plan to publish valuable material like eBooks and free courses. Therefore, I encourage you to stay tuned by subscribing to the blog and liking our LinkedIn page.
Please share your thoughts and suggestions on this article; this will help us to improve.
MindShift Substack is free today. But if you enjoyed this post, you can tell MindShift Substack that their writing is valuable by buying them a cup of coffee !
Very inspirational, thanks for sharing. ❤️
كنت لسه محتار بين مجال التصميم الميكانيكي ومجال البرمجة ونشرت بوست ع جروي للمصممين ميكانيكين للسؤال ..وبعديها بحوالي 10 دقائق شوفت بوست حضرتك فهاعتبره اشارة +رحلة حضرتك مثيرة جدا وملهمة