How I became a professional self-taught developer in Germany while working a full time job
Tags: beginners, learning, webdev, javascript
Published: 2021-03-15 20:29:31

There are many stories online from self-taught developers that share their journey. 
Most of these stories are from developers in the USA.

I have never stumbled upon a story from a German self-taught developer or from  someone that got a job in Germany as a self-taught developer.

Since that's exactly what I did, I decided to share my journey here. 
Hopefully, this blog post will help someone to avoid the mistakes that I made and also learn from the good decisions that I made.

Basically, I want to write the blog post that I would have needed back when I started programming.

At the end of the blog post, I will give you a short [TLDR](https://carstenbehrens.com/how-i-became-a-self-though-programmer/#1) of all the mistakes to avoid and tips to follow.

**First I have to mention one disclaimer:**  
Technically I am not fully self-taught since I did finish an apprenticeship as an "IT Specialist" (Fachinformatiker für Systemintegration). I still consider myself self-taught because I did not learn any real programming during that time.

## The beginning

My story is not special, I guess many of you reading are in the same situation that I was in back in the day:

I was unhappy with my career and I wanted to change that.

I was living in a smaller city at the time and as far as I knew there were not a lot of opportunities for developers there. 

So I decided to quit my job and get a new job closer to the nearest bigger city in hopes of getting a developer job there once I taught myself programming. 

Looking back this was a great decision, not only was I closer to the action, but it also took away some distractions. Since I was new to the city I had no friends there, and I made sure not to make any.

**My plan was simple:**
1. Get a new job in near a big city
2. Teach myself programming in one year
3. Get a job as a professional programmer

## First mistake: Getting a stressful job

So here I am, new job, new city. Everything is cool, right? Well actually no.

I didn't do my research when searching for a job. I just took the first job that wanted to hire me because I didn't want to stay there long anyway. 

Big mistake.

The job was extremely stressful and also mentally taxing - the last thing you need when you want to learn to program on the side. Often I would get home completely sapped so much so that I needed a nap just so I could focus on anything again.

## The schedule

Since I had my goal to become a full-time developer in one year, I needed to break this big goal down into actionable steps. **So I decided that I would do three hours of programming every day besides my 8 hours at my full-time job.**

When you are trying to become a full-time developer while also working a full-time job, you'll quickly realize that you don't have much time left after your job, commute, cooking, house chores, and all that kinda fun stuff are done. That's why I really started to pay attention to every minute I was spending during the day. 

**I also wrote down how many hours I managed to program each day so that I would not cheat myself.**

During this time my ideal schedule looked like this:

**Monday - Friday**  

06:50 - Wake up and Shower
07:15 - Commute to work
08:00 - Start work (actually I was always 5 minutes late, but let's not talk about that)
17:00 - Finish work
17:50 - Get Home and eat something
19:00 - Take a nap
20:00 - Start programming
23:00 - Wind down at the end of the day and go to sleep

On Saturday and Sunday, I would not have a set schedule, but I would do at least 3 hours of programming.

That schedule was rough. I would not recommend that schedule to anyone, and it will lead to burnout in the long run. Also, turns out sitting in front of a computer 12 hours a day not doing any sports is unhealthy, who knew?

## Second mistake: No direction

When I started I tried to learn python, because I've read that it's a great language.

I got bored (because I had no project in mind) and switched to C++, then I was going back and forth between C++ and Python. 

Also, I was reading all kinds of programming books that were way too advanced for me at that time. 

That's when it dawned on me that I had just wasted a huge amount of time reading books, when in reality all I needed to do was to get my hands dirty and do some actual programming.

**You don't learn programming by reading books, you learn programming by programming.**

Now don't get me wrong, I am not saying that you shouldn't read books about programming.

In fact, I think it's really important to start reading programming books once you mastered the basics, it's the fastest way to learn about software architecture, clean code, and design patterns. But I believe in the first few months you should spend most of your time programming.

I was devastated - my approach was not working. Like a truck
that was stuck in the mud, spinning its wheels, I was going nowhere. 

I knew I needed to start from square one.

## Getting on the right path

I realized that I needed to create some kind of project, that I could show 
to potential employers.

**That's when I did some research and decided that web development was my best bet.**

There are lots of jobs in web development, you can easily share your project, and there is no shortage of great learning resources.

So I started learning HTML, CSS, JavaScript, and React.

After learning the basics, my goal was to create a simple time tracking web app and use that project to get me a programming job.

I bought some Udemy courses and choose one where the end product was similar to the app that I wanted to create. I still think Udemy courses are a great learning tool if you want to learn a new stack. **In the beginning you often don't know what you don't know.**

That's why having someone more experienced being your mentor can be so powerful.

In total this project took me around 2 months to complete.

You can see the repo [here](https://github.com/carstenbehrens/timevisualizer). Now obviously I had no idea what I was doing - the code looks horrible - but I managed to get a working application that I could share with potential employers.

## The application process

Nobody likes rejection. Maybe that's why I waited 8 months after I started programming to send out applications.

Looking back, I probably could've sent out applications earlier. I've seen people with similar stories like mine get jobs with pretty weak portfolios. So you might want to consider sending out an application after 3 months or so.

I tried to put myself in the shoes of HR. Let's say you get 50 applications for one job. 49 of those applications have some kind of experience or some kind of degree.

Then there is my application:
- Zero experience
- No degree that's useful for programming
- My CV did not show any proof that I could program

What do you think HR will do? They would probably - and rightly so - send me a nice rejection email and move on to the next candidate to fill the position.

That why I made sure to emphasize my personal projects, I knew that an ordinary application would not be the right thing to do in my situation.

**My situation was different, so I figured that my application should also be different.**

I knew that I had to get past HR and get some developer to look at my project, that was my only chance. So the gist of my application was this:  
I have no experience, but please look at my personal projects.

This worked surprisingly well.

I probably send out around 15 applications and 4 interviews before I got my job. In the end, it took me eleven months to reach my goal of becoming a professional programmer.

## TLDR
<div id="1"></div>

- Start programming ASAP, you learn programming by programming
- Give yourself a deadline of when you want to be a professional programmer
- Focus on one programming language 
- Choose a programming language that is widely used
- Create a project on GitHub that you can show to potential employers
- Try to do one step every day, learning to program is a marathon, not a sprint
- Get a mentor or buy an Udemy course in the technology you are interested in