How I have learned programming by myself

I am, what we call, a self-taught. I studied telecommunications and networks at school, unfortunately, I only learned the basics of programming. I had to learn and improve my skills by myself for many years during my free time. I did not take the easiest path to learn! That’s why I wanted to share with you my own experience and what I did to learn software development. I hope this post will help some of you.

Find a mentor

In the beginning, even though I knew some basics of programming I was a bit lost. I wasn’t able to build an application end to end and I did not know which subject I had to study to solve that. That’s why I advise junior engineers to find at least one mentor. A mentor can teach you what is important like how to test, design patterns, software architecture, and so on. A mentor will help you focus on the right topics like how to build robust applications instead of focusing on hype technologies.

Tip: If you’re a junior, I would recommend you focus on testing: TDD will help you to design your code step by step. Architectural patterns like hexagonal architecture will help you to decouple your code from IO. Agile: eXtreme programming will help you to reduce the cost of changes by having multiple short development cycles rather than a long one.

Play and have fun with a side project

You can have strong constraints at work, so it can be really hard to try new things because of bad processes, bad code quality, impossible deadlines etc. I have worked on several side projects for the last 10 years. I tried twice to release an application for a French NGO to manage their volunteer data. Then I tried to make an application to organize my trips. The last one is about making maps to remember places I have been. I learned a lot from those projects, they let me try what I read in blog posts, books or what I saw in conferences without any pressure of production. The funny thing is that I learned more from failures. Only my last side project “mymaps” is live, I did not release the other ones! This is because they were only playgrounds rather than real projects. They helped me understand why being pragmatic is important, focusing only on technical aspects does not help to build an application. Keep in mind that a good codebase is not the only thing you need to make a successful project.

Contribute to an open-source project

I worked on Sylius which is an open-source e-commerce framework. The community of Sylius is great. I learned a lot of good practices like testing, code review and behaviour-driven development for instance. I mainly worked on the SyliusResourceBundle which is a library that eases CRUD management. During this period, I was working for a web agency, it helped me to be more efficient at work and ship projects faster.

Do you speak French ? Tired of the same old CRUD applications, struggling with your framework, or feeling the pressure of production releases? It's time to take your career to the next level.

Discover the power of Hexagonal Architecture and DDD to build robust and sustainable Symfony applications. Join me and kickstart your journey toward mastering advanced development techniques.

Caution: Many companies use open-source projects but they don’t contribute to them. I was happy to contribute to this project during my free time, but you should negotiate allocated time with your company to help those projects if they help you deliver value to your customers.

I would like to thank Pawel for making me a core team member. Contributing to Sylius has opened many doors to me.

Thanks to what I have done in that library, I had the chance to do my first conference (Symfony live) as a speaker. That was so great! I was so excited and terrified at the same time. Then I got hired by a french startup Akeneo to work on an open-source PIM (Product Information Management). I only worked for service companies before Akeneo, this experience made me discover what was software edition.

Attend conferences and meetups

Attending conferences is a great way to learn and open your mind to new things. You can have a chat with other attendees during breaks as well. It is a good way to meet new people and to have interesting talks. One of my favourite conferences is newcraft, its local edition at Bordeaux was really great too.

When you will be comfortable the next step will be to do a presentation. Preparing a talk is good to dive into the topic you will present and formalize your ideas. Even if you know this topic, it may not be that easy to clearly explain it to someone else. Don’t be shy, submit your talks! A lot of conference organizations help new speakers. I did not think too much when I submitted my first talk. I thought it wouldn’t be selected but I received an email that said my talk was accepted. I was so happy and excited! I realized what happened and I really started to panic (true story, a little panic attack) so I started to work on my talk to be ready for D-day. You can have a look at my talks.

Read books

Another way to learn is through books. This is a good way to shut down your computer while still learning new things about software engineering.

Tip: Some books in my library: Accelerate, Extreme Programming Explained, Domain-Driven Design Distilled, Patterns, Principles, and Practices of Domain-Driven Design, Elegant Objects and so on.

Final thoughts

A few weeks ago, I saw some software engineers saying on social media that we should self-train in our free time. Learning in your free time will help you progress faster but it can be time and energy consuming. Don’t forget that burnouts are real. One of my friends experienced burnout and couldn’t do anything for almost a year, he was completely out of energy.

I also had to take several breaks in my learning process to avoid going to the dark side of the force. Only do things when you want in your free time! Don’t put pressure on yourself! And keep in mind that learning should be fun!

Learning is a part of your job. Companies should let you learn during business hours. On a day-to-day basis, pair and mob programming is a good way to learn and challenge your ideas. Your company should train you as well. For instance, Mathias Noback gave us some training when I was at Akeneo. I learned a lot from him, and I definitely recommend him!

Thanks to my proofreader @LaureBrosseau.