What I learnt from my 14 year journey writing software without a CS degree

This is a story that has not been fully written. I’ve a lot to learn and I’ve always thought it’s premature to share my work experience but I have been asked for advice on few occasions recently and thought someone may benefit from this.


Building a career in Software Engineering is hard. There’s a lot of things that you need to learn and it may take you few months before you’re ready to get your first job.

My journey was a bit harder. I had to start from scracth. And by starting from scratch I don’t mean without a Computer Science degree, I mean without even having a computer. I learnt a lot of things and here’s what I found.


Find your passion

Find a job you enjoy doing, and you will never have to work a day in your life.— Unknown

While this is a bit of an understatement, it’s partially true. This applies to anything you want to do, not just building software. Begin by listing things you think you’d be happy to do on daily basis for 20 years. Don’t just add jobs you think would land you a job or make you rich. You can always make a great living being clever at doing anything. Just pick things you really enjoy.

When you’re done listing, pick the top most item and start doing it for 30 days straight. If you’re still excited about it, then you may have just figured out what you’ll be doing for the rest of your life.

Be patient

Anyone can cook, but only the fearless can be great. — Ratatouille

If your passion was writing software, then I need to warn you. Writing software is both art and a craft. While some believe it may take you years, I believe you can learn writing code in few weeks. But it really takes few years to master it. If you ever felt you’re moving too slow, that’s absolutely fine. You need to absorb and digest the building blocks of good software before you can start building anything useful.

Don’t go shopping for programming languages

Software problems are quite similar, just pick one language and stick to it long enough to know its ins and outs. — Karim Ratib

This is a very crucial advice for young software engineers. Focus on a specific platform or language and try to learn its dark corners. Deep understanding of the strengths and weaknesses of a certain language helps you understand software engineering problems in general. Don’t get tempted by the shiny new technology that just came out, there will always be a new language that claims to rule them all. Stay. Focused.

Get out of your comfort zone

If you’re the best in the team, don’t walk away. RUN! — Unknown

Have you checked some code you wrote few months ago and was satisfied? Are you the best in your team? Do you know the ins and outs of your tool or language or framework? If your answer to any of those questions is yes then you really need to leave. Always work with people who are smarter than you are. Never stick to what you know just because you know it.

Always compete with yourself

There’s always someone who’s brighter, smarter, has more experience, knows better, etc. Comparing yourself to others can sometimes be depressing. I found it far more beneficial to compete with myself. Focus on being better than yesterday’s me and being incomparable to last year’s me.

Be lazy

This is one great virtue of a great software engineer. Except for reading and learning, being lazy will always pay off.

Had to copy the same few lines across multiple scripts/files? There must be a less tedious way of doing this. Spent few days writing that script and now you had to copy it between projects? There must be an easier way.

Read about Software Engineering Theories

This might be a no brainer but reading about Software Engineering theories has helped me understand why I do stuff and why certain approaches to fix certain types of problems is impossible.


Would love to hear your feedback.

Show your support

Clapping shows how much you appreciated Omar Abdel-Wahab’s story.