My way to and in tech as a Developer
Tags: beginners, talesfromthepast
Published: 2019-10-31 15:09:38

This post is a ~~bit~~ far more personal, than my others and I was thinking quite a lot about, whether to write it at all, because I am usually more of an introvert and don't share so much personal stuff, especially on the internet. But I think, this might give some motivation or support to others in a similar position, as I was in 2010. So I decided to go through with it.

# tl;dr;
As the song goes: You can do it, if you really want it... 
but you must try, try and try...
Just be consistent and follow your desire. And sometimes life will surprise you! A little bit of luck can't hurt either.

<hr />

# The early years
I fell into the pot when I was seven years old. My father bought an [Atari 800XL](https://en.wikipedia.org/wiki/Atari_8-bit_family#Newer_XL_machines). We sat together long hours and copied a computer program in [BASIC](https://en.wikipedia.org/wiki/BASIC) from a magazine to the computer. Yes, that was a thing in 1985.
After some time, we wrote a simple math learning programm together, that gave simple mathematical tasks to solve and fired thunder and lightning, when solved correctly.

#As a teenager
A few years later, I got my first own computer: a [Commodore Amiga 1200](https://en.wikipedia.org/wiki/Amiga_1200), which already had 14MHz and 2 MB of RAM (don't laugh, that was quite good at the time). I also bought an extension card with a 50 MHz FPU and additional 2 MB of RAM. Later came a harddrive with 30 MB.
I mostly dabbled in creating system disks, optimizing the RAM usage and the space on the disk, to get the maximum of tools onto one disk. A little bit of shell scripting, but not much more, except playing games on it.

And then there was a class in school called EDV (german: Elektronische Datenverarbeitung, translates roughly to electronic data processing), where I learned a little more BASIC and Turbo Pascal, which I fell in love with. I wanted to code, but I always had (and still have) the problem, that I lack the ideas. If I have an idea, I come up with solutions, but what kind of problem, do I want to solve?

Later there was [Prolog](https://en.wikipedia.org/wiki/Prolog), which was a bit weird at the beginning. We never did much with it, but it showed us another paradigm: [logic programming](https://en.wikipedia.org/wiki/Logic_programming).


#As a student
For me it was clear, that I wanted to study CS ... and so I did... start at least. 
I started CS at the University, but soon after (well, after five semesters) I realized, that it is not for me. It was not what I expected and not what I wanted. We learend about different pradigms, SQL and a little bit of network basics, but in those 2.5 years, we never opened an IDE or text editor, to write some code. All just theory: Complexity Theory, Graph Theory, Formal Languages, Automatas and on top of that some electrical engineering.

So I decided to change my direction to a more practical one: Business Informatics. Less theory, more practice, but also a lot more business management.
I was able get some credits for stuff I already completed in CS, but there was a lot of economics in there. And here comes another problem of mine personally ... I never had to learn in school. I heard it and since it was repeated so often in class, it just stuck. Reading again, what topics we covered was preparation enough for any tests in school to at least get a B. So the hardest task for me, was to learn, how to learn and that was a really hard task for me, since I am inherently lazy. I often joke about lazyness as a reason to get into programming in the first place. But the truth is: I'd rather sit there thinking and programming an automated task instead of doing it manually, even if it takes twice (or more) as long. But the second time, the automation is already there.

I really would have liked, to complete Business Informatics, but there were some issues with the examination office, which led to me being exmatriculated. I don't blame them, because, if I would not have been so lazy, I never had come into the issue in the first place.

This was also the time, I met my future wife, which finally put some ambition into me ... even if just to not fall from her grace. And since I already prepared for a big test about the content of 6 courses at once, I used my final chance and changed again: this time to Business Management.

I passed the test with ~~flying~~ colours, but it still took me another few years, to finish it all. This time, because I already started working. First at a distribution center of a grocery store chain and later at a small startup, mostly writing texts for manuals. 

Until one day, that changed everything.

#Graduation time
It was 2010 and I was already worried for a while about, what might happen after graduation. My resumee was far from perfect. I almost did not get a place for the practical semester, which was required for graduation. 

And so I sat there, writing and proof reading texts in a 500 MB Word document, that was saved on a network share, which led to 30 second breaks every time the auto save hit, which unfortunately seemed to be every time, I had formed a decision about, how to write that sentence.

A guy, I never met before, came into the room and asked me to write a technical evaluation document for another project they were doing. He showed me some sketches with bullet point notes, answered some questions and left me with it.

I wrote it and I was quite pleased with the result. It showed all the options, with their pro's and con's, giving enough information to make an informed decision without going to much into details.

Two weeks later the same guy showed up again, telling me, that the customer was very impressed and blurted "Now, you only need to be able to code!" And I thought: This is my chance! 
So I took the leap and said: "Yes, I have a little experience in coding. Which language?"
"We are using C++, with boost to make it platform agnostic and a self written framework of mine that takes care of interprocess and network communication." *[which I already wrote a piece about here](https://dev.to/andreasjakof/brilliant-but-also-horribly-wrong-50de)*. 
Most of the sentence was gibberish for me, but I still replied "I don't have experiences with C++, just Turbo Pascal and [Delphi](https://en.wikipedia.org/wiki/Delphi_(software)). But to me, programming is more the algorithmic thinking and problem solving, the rest is just syntax."

To be honest, my biggest project up to then, were some school projects and a countdown timer, ticking down the seconds during semester breaks until I saw my future wife again. But I knew, that I liked programming and although there would have been a lot to learn, I hopefully would be able to do it.

As a result of that conversation, he promised, to take me on board as a software developer right after graduation at least for this project.

#After graduation
And so - with some luck - I landed my first job as software developer right after my studies, which I am still thankful for. I never had imposter syndrome at the time. That came a bit later, when I finally realised, what I was getting into. 

The job was very close to hardware, but not in the sense of down to the metal, but interacting with reality. We built simulators for special training. The one I was hired to participate in, was for air traffic controller education. So we had two radar consoles and a tower replicated with all the knobs, lights and radio transmission. And I **LEARNED**! I did my first polymorphy, I was working multithreaded, I built a factory, without knowing, that it was a factory ... the learning curve was very (**VERY**) steep. And I loved every bit of it.

Imagine five guys, sitting around a pc with an attached console, that has buttons on it. Pressing a button and a number appears on the screen, resulting in all of them shouting in joy and giving each other high fives!

My still future wife and I finished at the same time. As a matter of fact, we wrote our thesis together. And it was time to apply for jobs. I already had one, so I told her to take, whatever she wants and I would follow. Easier said than done.

I played with open cards. I would be there until the end of the project and afterwards, if they still want me, until I have another job in the same city as my girlfriend.

I was there about a year and traveled about 1100 km (~680mi) each week, to visit my future wife. I knew, that this was the hardest time for most relationships ... trying to make it work, while finding a new routine for one self. 

I applied for jobs in the area of her living at least twice a week for about six months, at the beginning mostly in Marketing (my major) and later mostly as a developer. I was getting rejections over and over ... often even no answer at all. Until one day, when I suddenly had two offers on the table and I was the one who could decide. It was much later, that I had hoped for - I already was no longer working as a full time employee but as a contractor for the same start up - but I could finally move on.

Both offers were in IT consulting companies. One was really upfront about travelling, the other just "could not guarantee", that I would not need to travel. I felt more drawn to the first one and at least the travel costs were now no longer mine.

#Consulting
We had three weeks of training, learning C# and other MS Products. After that we were assigned to our service lines. I drew the short straw and was assigned to SharePoint.
 
I did not have prior experiences with C#, but since there was about a month between training and the first project, I dove into it. I already knew, what I wanted: The beloved framework, I was working with at the start up, but I wanted it in C#. I knew how it worked, so I rebuilt it from scratch. I did some wrong design decisions and put them straight later on. I still have it and even used it for a project in production.

My first project had SharePoint as focus, but right the second project was a developer assignment. My job (in a team) was it, to cut a big Visual Studio Solution of 212 projects into pieces, that could be maintained separately to reduce friction between the teams. There was everything in there: C, C++, C++/CLI and C#.

I opend the solution and the first thing I did, was looking at a class dependecy diagram and I saw a blob. I always called it lovingly "the felt". There were so many classes (I looked it up later: ~6600), you could not make out anything. So I needed another abstraction level. 
Projects would be great, but there was no tool (to my knowledge) that could do it at the time. So I wrote a Solution and Project parser, that showed me the dependencies as a graph.
Going around with that graph, talking to people, asking what everything is, marking the projects with colours and grouping them was the first step.
The second was cutting it apart. I somehow took the lead (I had the plan) and we started moving files around, changing the code as little as possible and building some tooling around it, which worked a bit like NuGet today. We prepared everything as good as we could and then it was time to go into production. 
We had one week, doing it bit by bit and on a Sunday afternoon, we were done. Three consecutive tests on three different machines worked. There was champaign and a deep sleep afterwards.
The next week my project lead asked me, why I was in the SharePoint service line, I would have been a much better developer. I wholeheartedly agreed and a few months later I was in the Service Line Application Development.

#At last
A mariage, a few projects and six years later, I was still in consulting. And for quite some time now, I wanted something more local. Yes, I was no longer paying to see my (now) wife, but I was apart very often. I had a good deal with the current customer, to travel only every other week, but still...

I was already applying for jobs for four years now. Not really permanently, but at least once per quarter and later once a month. I also had some interviews, but nothing came around. The problem was, that in the area, where we lived at the time, the companies mostly used JAVA and I could not show any experience with it. So the possibilities were sparse. But never give up hope!

I was working as consultant at a big chemical company in Germany for about 2.5 years now, when the leader of the team, I was working closely with, came by and asked, whether I could imagine working permanently for them.
My wife and I had moved to Berlin in the meantime and they also have an office in Berlin. So I said yes. I did not bargain much about the salary. Not less than before was okay for me, my reasons to change were of a different nature.

#Happily ever after
And now (for the last two years) I have what I want. I can spend most evenings with my wife at home and I have a lot of independence at work, since my team leader usually lets us developers do, as we think is right. We are allowed and encouraged, to try new technologies. So I changed a large code base [from .NET Framework to .NET Core](https://dev.to/andreasjakof/migrating-net-framework-tp-net-core-b4p) and we are currently moving everything to the cloud - in our case Azure, since we already use Intune and Office 365. 
If you look at other posts of me, you will find some of my experiences with that.

I travel to the headquarter about once every six weeks to meet the rest of the team. Usually these weeks lead to lots of talking and no coding, but thats fine.

**I do what I love and what I wanted to do since childhood and I get paid for it!**

#So why am I writing all this?
Even if this reads different, I had setbacks and not just a few. I was rejected more often, than I took time to count. I had doubts about my future, not only work related but also personally: My wife and I almost did not marry.

**But**
- If you put yourself together and go forward. Not necessarily in a straight line, but in the rough direction.
- If you accept the fact, that this might not yet be the ideal solution, but at least it is better than before. 
- If you accept setbacks but keep your vision, and 
- if you are willing to work through it all, 

life will eventually present you with a chance. And if that chance presents itself, take the leap and make a step. It might not look like much at the moment, but this is a marathon, not a sprint. 

Keep at it and you can make it happen!