👨‍💻 @mikeboe
Back to blog

In German we have a Saying: Every beginning is difficult

Michael

I’ve been thinking of starting a blog for quite some time now, I’ve even started a couple of times to set it up. The reason for this was mostly because I needed a project to start to learn programming. I come from the world of Marketing and Sales, and even project management, but I have always worked in tech companies, bei it in digital advertising or the industrial automation sector. So software was always present, but only as a user. However, I found it weirdly satisfying to watch our developers do stuff, and make things happen. So I started on my spare time to look into softawre development and start learning. But learning from a course was not an option, so I decided to learn it myself. And after a while now, I want to share my experiences as a self-taught developer (who is now also attending university to make it official).

If you’re thinking about learning about software development, maybe I can help you with my experience so far and what is the difference between self-taught and university-taught.

Learning by the book is not for everyone

So when attending school to learn software development, you start with the very basic concepts of computers and programming etc., and work your way through it. You have multiple classes in multiple semester and you learn everything properly, from beginning to end.

However, for me this was always a bit difficult, as you then work on some arbitrary examples and weird tasks. I alwasys preferred the way of looking at a problem, then thinking about how to solve it and then learn along the way. Surely, this is a learning experience that gives you a lot of insight, but also headache in the beginning.

The first project I started for learning development was a Gym logbook, to log the gym workouts and see the progress. So far, so good. However, this quickly proved to be a lot for a complete novice, as you have a multitude of things all of a sudden. I wanted to make it as a web app, so this lead me to:

  • Frontend: Html + jQuery
  • Backend REST API: PHP
  • Database: MySQL
  • Hosting
  • URL

So far, so good, but file uploads were done by ftp, so far from CI/CD as we have now. But going through all of this and doing different “services” in this app quickly gave me rough understanding of how things work together.

When you self-learn, you know how to use things

But you are missing the specific lingo, terms, or even commonly used expressions to describe the methods and functions you are using. No doubt that the result would be the same between a self-taught and a school-taught developer with similar skills, however the explanations and presentations of the achieved would be different.

For example when you start to get into databases like MySQL or Postgres, you would quickly learn that you need to normalize your schema with multiple tables, and linking them with foreign keys. Because you have never learned, that there are ways to model, calculate and establish all those relationships properly. And you probably have not learned about anomalies when you have redundant data, you have just probably deleted the wrong information because you had a bad design.

This is just one of many examples where you learn things the hard way while workign on solving a problem or creating an app, but when you get those things taught, then you have the knowledge behind it. The result, again, is the same, that you have a working database.

Take something you like, and try to rebuild it

What probably helped me the most to learn things is just to take existing applications or services, and try to rebuild them. Something popular like note-taking app Notion, or a task app. And in the beginning I would not try to waste too much time on making everything correct, just make it work. As dirty as possible, just make it work. After that, you can always have a look at what you can improve, where you can refactor, what you can kick out and where to add more.

And always build for what you have, not what you want. Of course, you could build your smalles app to handle millions of concurrent requests, but this will add unnecessary complexity. Use somthing easy, that works well and where there are enough resources on it.

Get a cheep linux server somewhere

Get a cheap linux server somewhere for 10-15€ / month, where you can play with, reinstall if oyu mess up, and have some remote machine of running your stuff. Throw in some docker containers and you are good to go with your first projects, learnining the basics.