How to become an amazing software developer! Things I wish I knew when I started.
Tags: codenewbie, career, selfcare
Published: 2019-10-26 10:17:59

This article was originally posted on my brand new blog [The Developer's Dungeon](https://www.patferraggi.dev/blog/2019/oct/how-to-become-amazing-developer/)

A few weeks ago something special happened: October 8. For everyone else that means nothing, another regular day. For me on the other hand, it was my software development birthday.

At the beginning of 2014 my best friend recommended me start learning programming as he saw I was sad and tired of pursuing a career I did not really like. I started learning C on my own, dubbed a little with C++ and finally started reading “C# in Depth” based on my friend’s recommendation.

-------------------------------------------------------------------------

On October 8th, 2014 I joined a training program on C# given by Accenture(they called it their bootcamp), 1 month later I was working as C# Junior developer and my career in software started.
A lot has changed in the last 5 years, Microsoft went full open source, JavaScript became a serious language and not just a toy for websites, functional programming started it's comeback, tons of technologies have been given birth and died before our eyes.

A lot of things changed in my career too: I went from self-taught to bootcamp, to switching universities to pursue software engineering, dropping out and finally continuing the self-taught route. From working in accounting to becoming a software developer, working for 3 years in my home country, Argentina, to looking for a better life in a place I knew nothing about, much less speak the same language, lovely rainy Belgium.

After reflecting on the path that brought me here, I can’t help to think about the good and bad decisions I’ve made. Here is some stuff I wish I knew when I started:

### 1. Go to meetups, meet new people, make friends!
People underestimate how important personal relationships and communication are in software development. Some believe in this idea of a Genius 10X developer who will code 24 hours without sleeping and create magic. This is a pipe dream. We are great at what we do when we collaborate with each other when we develop human relationships that allow us to create great pieces of software. These relationships help us grow, learn new things (not always software related which is just as valuable) and even progress in our careers. If it wasn’t for a friend of mine I would probably be a very sad accountant.

### 2. Read technical books.
I always preferred tutorials and online courses, but unfortunately, they won’t cover fundamental knowledge that will take your development skills to a whole new level. For the last 2 years I have been eating technical books, “The pragmatic programmer”, “Code complete”, “Clean Code”, “Refactoring”, you name it, I just wished I started earlier. There is so much knowledge out there written by pros in the industry and it’s just a pity not to pick their brains a little.

### 3. Focus your learning in language/framework agnostic knowledge.
This one is related to the previous one. Sure, there’s a new JavaScript framework every day and people are struggling to catch up. Well, don’t try. It’s not possible nor worth it. Instead of focusing on frameworks, focus on architecture, system design, even software paradigms. Languages and frameworks are just tools we use to create products, they change all the time, the techniques we use to build software evolves at a much slower pace and can help you switch from one stack to another with ease.

### 4. Always have a personal project on the side.
I can’t stress enough how important this is. Sure, you code for 8 hours a day on your daily job and might be thinking, “why do I need to code in my spare time?”, well there are a number of reasons.
   - It will not always be clear what you want to do with your career. When I first started I thought I wanted to be a mobile developer. It took me one personal project creating an expense reimbursement app in Xamarin as a POC for a previous employer to realize that this was not what interested me the most.
   - Technical skills get outdated pretty quickly in this industry so you need to try other stuff and get a good feeling of what’s out there.
It can be a very good way to build a personal portfolio, to show a potential employer that you are passionate, a problem solver and have a nice set of skills.
   - If the projects get noticed by the community it can be a great way to meet other developers, make connections and friends.

### 5. Learn some Computer Science.
If you are a self-taught developer like me, you probably don’t want anything to do with this. Well, I will have to burst the bubble for you. Learning some key concepts will make your life a lot easier for future learning. I’m not saying you need them to be a developer but after learning about them, they will become the building blocks you will use to learn new technologies and patterns.
I spent 2 years studying computer science while working as a developer, not a lot but still was enough to get in contact with concepts like boolean algebra, groups, graphs, trees, sorting algorithms, dynamic and static memory, pointers, automata theory; even different programming paradigms — like structured, logical, functional and objects — and I can remember tons of moments where I could associate those concepts to how some new piece of tech I was learning was implemented behind the scenes.

If you re a self-taught developer I would recommend you read [The Imposter ‘s Handbook 1 & 2](https://bigmachine.io/products/imposter2-combo/), they cover everything you will ever need :)

-------------------------------------------------------------------------

After writing this article I feel much better about my progress, I made some mistakes here and there, maybe I didn’t use my time correctly. But I learned and I will continue learning no matter what because that is the most important thing I want you to remember from this, keep learning and I promise everything will be fine.