The tale of the self-taught software engineer !

The tale of the self-taught software engineer !

The journey of becoming a Software Engineer without a CS degree, there was no direct path, it’s just a story, bear with me…

Short Summary

There is no direct path or points to follow to tell you about how I became a Software Engineer without a CS degree, because it’s a journey.

I started doing websites designs in Photoshop. Then I was introduced to the world of programming. At one moment I was intrigued by pleasure of building those websites myself. After lots of researching & reading, I started writing some PHP, then I was introduced to Python, It was love from the first sight. Quickly I started learning GTK+ to build GUI applications on GNU/Linux. The pleasure I felt from seeing results of what I can build was indescribable.

I jumped on the train on contributing to an open source project called GNOME Clocks, which led me to join GSoC and contribute to GNOME Music, Since that moment I’ve gained the confidence needed to continue the journey of learning and building.

Along the way building backend services, frontend applications, even a startup. Focusing on the world of scalability helped me make my way through good companies and passionate engineers, it was the passion who is driving me along the way.

Once upon a time …

Eight years ago, I was a High school student, sitting in front of my PC playing around with Photoshop, Creating UIs for old time forums (the software was called VBulletin). A thought jumped into my head “ What if I can build it myself! ”. Immediately, I started googling and searching on how to do that, How were these forums built?

PHP! That was the answer. It’s a famous programming language usually used for writing web applications. Without hesitance I dive in, In no time started building my thousand “Hello World” apps in different PHP frameworks (Mistake. Just focus on one).

Through time things got more interesting, The opportunist to build products kept popping up more and more, I was seduced into that world, but I couldn’t resist. Along the way I picked up on Python and its lovely syntax. It gave me more motivation to build, but I wanted to try something different than building web apps, and GTK+ introduced itself to me. I started learning, reading documentation and building GUI apps for GNU/Linux. They were just … beautiful.

No Confidence Yet

I kept on building and showing my work to other people online, mostly on facebook groups, just screenshots of what’s I am building. At this point, I wasn’t totally sure how good I am, I wasn’t confident at all.

Open Source Contributions

One day, I received a message from someone asking about sharing the code of some of the applications I made, so I did. I actually received a very good feedback and encouragement. It wasn’t expected, but more importantly I was asked if I would like to join/contribute to an open source project called “GNOME Clocks”. I was surprised: “Wow, I can actually help develop applications like this that gets used by lots of users on GNOME?! I am totally in”.

GNOME Clocks

Apps/Clocks - GNOME Wiki!

It was my first experience working within a team, committed to IRC Channel and ticketing system, I learned a lot about Git and Pull Request. So much experience were gained through working within a team -remotely- on an Open Source project.

Google Summer of Code 2013

My achievements in GNOME Clocks led me to another big role, in another open source project, but this time, through GSoC. I applied for project GNOME Music, was accepted due to my work for GNOME Clocks.

I realized that my journey has just begun, a new step towards my dreams. Of course at first I felt incompetent but later on I picked up on my tasks and was doing great under the great mentor Seif Lotfy who taught me a lot and guided me through the project.

Through the project, there was a lot of stuff I didn’t know, there were lots of times when I had to go through C/GTK+ documentation and try to map that to Javascript /GTK+because the documentation wasn’t ready yet for JS, but most importantly I wasn’t afraid at all to try something new, I just kept going.

gnome-music.png

Apps/Music - GNOME Wiki!

Confidence Buildup

Each day I gained a lot more confidence than the day before, I became part of the team, always on the IRC channel answering questions and communicating with the team. It was amazing, I was able to verify that I can do what I love.

With the passion and confidence driving me, I kept reading and exploring other projects, building web services in Python, not later on picked up on NodeJS, Angular … and the list goes on.

Business Adventure

yadawe's logo

At some point of time I was so excited to try to build something of my own for an idea that I really liked. My goal was to build a platform where handmade-products craftsmen could sell their art on a platform specific for that. I wanted to play with rails a bit, I enjoyed at the beginning, but later hated the magic. Anyways, I missed a lot of points on the business part and the business didn't go through, but I learned a lot from this journey, specially on the business side.

Yadawe

The Full-Time Job

It was time to check if I am battle-ready, to test my skills in the wild, after attempts to build websites and projects, I realized, I need to work within a team. After searching and exploring, and recommendation from friends (It has been proven to me that having social connections could help from time to time), I joined a small startup in Cairo and started prototyping some web apps. After some months jumped to another company to build a medical app written in C# for windows.

The list goes on until I joined CloudInn.

Scalability

The Blue Whale of Docker

My ambition didn’t stop there, I wanted to be a part of something bigger, but I didn’t know what or how, until one interview at CloudInn in the heart of Cairo. I was introduced to the term “Scalability”, Docker and services that scale. I was intrigued, my eyes shined of curiosity, I thought: “That’s it, I should be learning those”. I truly believed that I have to work at a place where I should write services that scale.

During my two years work at CloudInn, I fell in love with statically typed Languages (Golang), also I had the chance to learn and play with Kubernetes, Docker, Multi-tenant databases, SSL, and multitude of projects that broadened my horizon and allowed me to work with different languages and databases, solving an endless list of exciting problems on daily basis.

Together with Toulan -CTO of CloudInn- working hand-in-hand with him to come up with solutions and face the real-life ugly problems we had everyday, a great mentor that doesn’t hesitate a second to share his knowledge and lift up the team. That’s the kind of mentor we should work with.

FOCUS

I was asked “What would you change about your story?”.

Without hesitance, I replied: “FOCUS”.

“I have been jumping from language to language, from framework to framework, while it’s great, it would have been better if Ikept focusing on one thing and try to extend my knowledge in a T-Shape, Also, I would like to read more about design patterns and architecture”.

What’s next?

Lots of reading, building and focusing on improving the engineering part, more on platform topics like kubernetes and AWS

What are you doing at the moment ?

I am working at FRIDAY one of the most brightest startups in the Insurance field at the heart of Berlin, Germany. Currently playing around with Kotlin, shifting slowly into AWS, Terraform, k8s, gitlab CI/CD and building review apps on top of those.

Any last words?

Software Engineering is a very interesting field, definitely fun and challenging, keep practicing, reading and building!

If you are still wondering how do people react in the interviews when they hear that I don’t have a CS degree, they get excited and amazed, it’s totally appreciated and welcomed! So never let that thought slow you down.

A last advice would be to try to work within a company that has multiple teams, style guides, proper reviews for your code. It's part of the experience that you could build, on how to be part of a team, how to communicate and align architecture between teams, and how to follow them. It's a totally different experience than working alone to write some code and commit them to master.

That’s All Folks!