by Adham El Banhawy

How I dropped out of an American CS program, went home to Egypt, and immediately got a dev job at a startup

056dv1z02zzTeClJtgBFQkUekmB6RlO-9QmJ

If you haven’t read my earlier story about how I turned my life around by deciding to become a developer, thanks to freeCodeCamp, I advise you to do that now. I’ll give you some context so you’ll understand that this is not about me bashing CS degrees or admitting defeat.

In 2016, I had been working for a year with an Economics degree in a job that didn’t really challenge or fullfill me. I felt lost and depressed without passion, love, or a life goal. That part of my life is without a doubt the lowest and darkest time I have experienced. Although I came pretty close this year, but I’ll talk about that in a bit.

As I started writing this, I was on a plane going back to my country after dropping out of a US Computer Science degree. I couldn’t overstay my visa. I was literally going into the unknown, but with confidence and a sense of pride.

And what do you know — within a few days of getting back home, I landed a developer job at a hot new startup. Here’s how I got there.

Working and learning in the States

My first part-time job

2017 was for me one of the best years of my life. I decided to pursue an undergraduate degree in Computer Science and got my first web-developer job (part-time) while I was studying. I got great hands-on experience with web development, CMS, both the front-end and back-end, version control, and most importantly, I got to work as part of a team and got some great insights into best practices and automation tools.

It wasn’t easy being a newbie, but what I lacked in experience I made up for in confidence and genuine desire to learn and do better. By the end of the year, I felt like I was thriving with family and friends at work. I even introduced a new senior developer to our tools and helped him with some major tasks.

But I’ve always known that my job wouldn’t be permanent. So I continued learning on my own online, toying with other frameworks like React, looking into DevOps tools like Docker, and working on my own personal projects in my free time.

My college experience

But things weren’t all good. The first semester in my computer science program was a terrible horror show for me. I had been out of school for over a year and my previous degree was not engineering related. There was a lot of math involved, ranging from calculus to linear algebra to statistics.

I found myself wondering quite often: where are the programming classes?!

I was asking myself that question a lot at the beginning. I was just average at math at that point. But those courses sharpened my brain a little to prepare me for advanced algorithms — the most important CS class, in my opinion.

Now, since I’ve tried both, the main difference between studying algorithms in class and learning about them online is that it tends to be more theoretical and detailed in college courses. They make sure you understand how certain algorithms work, help you analyze their complexity, and encourage you to explore their efficiency in different problems.

But most of all, it was summed up by my algorithms professor. He told us that,

In this class you will learn how to develop your own algorithms to solve complex problems.

I remember my mind being blown away when I heard that. I realized then that I’d been thinking about algorithms and problem solving the wrong way. I used to think algorithms are a set of well defined techniques that needed to be followed and implemented correctly to solve traditional types of problems. When in reality what’s really out there are tried techniques used to come up with algorithms to solve or improve solutions to problems.

Simply put, to be a good programmer/problem solver, you need to think about these techniques as tools you use to build your own solutions to problems. This approach to problem solving explains why memorizing and looking at answers to algorithm problems online doesn’t really help you become a better developer.

Other than that one crucial class, I think studying CS in college alone would have never made me a good developer. Granted, there were other important classes I was looking forward to, like Computer Networking and Computer Vision — but I didn’t get to them. But in general, there is a lack of practical experience and more emphasis on the theory.

Believe it or not, I took a class about databases in which we never even used a real database. It was all on paper. We did practice SQL statements, but for two weeks only. For the majority of people, that is not nearly enough to be proficient in SQL. However, I did learn high level database design. I think that is extremely important when trying to design efficient database schemas. And it’s recently saved me a lot of development time and given me a confidence boost.

At any rate, I would assume most of the major courses are like that…but I don’t know for sure, since I ran out of money before completing them.

My personal projects and extracurricular activities

This is what made the entire experience so worthwhile. I went to hackathons, participated in coding-related student groups, met up with local developer communities, and took online courses and challenges. I know it sounds like I didn’t have a life outside of my computer, but that’s not true. I did try to have a balanced life, and I hung out with friends, went hiking, worked out, and so on.

Ultimately I loved doing what I do best — mini projects. I spent countless hours reading documentation — Python, Google APIs, ReactJS, JavaScript, MongoDb, Java, Node.js, AWS, and the list goes on.

I always tried to make little programs that helped me with otherwise manual tasks to reinforce my learning — and it all paid off. I was always the most experienced coder in the three hackathons I attended (and my team got second place at one of them!). I never really stopped learning or doing projects, and to this day I don’t plan on stopping anytime soon.

I think doing personal or side projects are as important to developers of all skill levels as physical exercise is to all athletes — it helps us stay in shape and take on new challenges.

My New Reality

I finished writing this post a few weeks after I landed back home. It’s so good to be home with family and old friends, and to be free of all the stress of living abroad. I thought I would find it tough to find a job quickly in Egypt.

I’ll be OK, I thought to myself. I’ll just continue taking advanced theoretical courses online for free, and work as a freelance developer until I get a stable job. At least I can take a break to relax. But, work found its way to me before I got my well-deserved break.

Not two days after going home to live with my parents, an old friend of mine who had just started a startup asked me to come to his company. He wanted me to check out his work and team and give him some advice regarding how to manage his team and codebase.

I thought of it as a free consulting gig that I would do as a favor, which I was OK with. I introduced some team management tools I’d used at work before, and shared some agile management strategies that he liked.

Qn9MajXa92PKS5UAWBKMxdRMm7cpj0I3ij8Z
All kinds of spaghetti make me hungry

When I looked at the code, (AngularJS + ASP.NET), I was met with horrendous spaghetti code, with almost no documentation at all. I pointed the issue out, started some documentation, and re-factored some of the code — which led to 30% less code and improved readability.

That might sound fancy, but I basically reduced repetitive and redundant code, and placed lines of code that did a specific functionality into their own functions that could be reused.

My friend saw value in keeping me, so he offered me a full-time fullstack developer position. And I agreed — he is my friend after all. It’s been almost two months, and I’ve learned a lot on the job, including AngularJS, C# and ASP.NET (I’d come from a ReactJS background).

Reflections & Milestones

So now that I’m at this new job, you might wonder: was it hard to jump into using new frameworks and a complicated codebase so fast? Well, it was never going to be easy, even if I was a seasoned senior developer. Looking at spaghetti code in any language or framework is always confusing and exhausting. But I’ve loved improving it, and in the process it reinforced my knowledge of Angular and .NET frameworks.

I consider myself lucky, because the startup scene in Egypt is booming just like it is in the States. I get to wear different hats at work, so it’s not always development and coding that I’m doing. I get to help shape the marketing strategy, manage social media accounts, and go to networking events to pitch our product.

I remember setting out two goals for myself when I first started to learn to code.

  • I wanted to become a front-end developer. I reached that milestone surprisingly quickly, just 2 months after starting the freeCodeCamp curriculum, by getting a part-time web developer job.
  • I wanted to become a fullstack developer after doing the back-end challenges on freeCodeCamp. I gave myself a year to get a back-end job, but I still managed to exceed my own expectations and got it sooner than I thought earlier this year.

I still don’t think this is going to be a permanent job position for me. Although I love the work, I need to reach the next milestone that I set out for myself: become an experienced machine learning engineer by the end of next year.

Wish me luck!

Follow me on twitter @adham_benhawy