Five lessons I’ve learned as a developer

Hindsight is 20/20, but here are a few things I wish I’d known at the start.

Josip Matijevic, Frontend Developer at Sylo.

So for all the new devs out there, consider the following about our field of work…

It’s science and art at the same time.

Most people consider programming and almost anything I.T-related to be a science. That was actually my perception before I started working as a programmer.

I thought that everything needed to be perfect and that there was only one way of doing something. Oh, how wrong was I…

Nowadays, I believe that software development is a creative endeavor before anything else. There are endless possibilities of how to write a program that will do the same thing and I realise that every programmer will use a slightly different approach to solving the same problem.

Some ways are considered to be better than others but even among those, there’s still room for a varied approach. Every programmer has their own style and their own preferences, this is what helps that person to produce a unique piece of code every time they sit in front of their computer.

In this way, programming is like art — Endless possibilities, freedom of creativity and playfulness. Art and science are in no way mutually exclusive, and one could say that programming is both.

AND, one could also say it’s neither — because at the end of the day it can easily be classified as a craft too :)

Trying to understand everything is a lost cause!

Programming is complicated. Period.

If someone tries to convince you that it isn’t, it’s either because they haven’t worked on a project that is big enough yet or they’re a genius (I have met some of those people and when they say it, they really mean it).

The reason programming is so complicated is that it’s about trying to represent the infinite complexity of the world with just the use of a few relatively simple concepts.

The thing that makes it even more complex, is the fact that a program or an application keeps growing, changing and evolving over time. Constant changes and strict deadlines often prevent programmers from cleaning up a newly created mess — which results in a codebase that keeps getting harder and harder to reason about.

Lastly, trying to understand everything all the time is a lost cause because when programming, we are using pieces of code written by other people.

‘We are standing on the shoulders of giants’, as they say.

It’s great and without it, us ‘mortals’ wouldn’t ever be able to create anything useful, but it also introduces additional complexity.

Not understanding how the layers underneath work is acceptable to some degree, but sooner or later, we’ll bump into a problem that forces us to go under the hood and investigate what is actually happening.

The best thing you can do to combat all this complexity is to keep learning, but also embrace the fact that you don’t know everything, you can’t know everything and you never will.

Your colleagues might know more or different things than you do. Make the best of it. Learn what you don’t know and also, teach them what you do know. Grow and improve together.

Most code is crap. Embrace it, be at peace with it.

Continuing on the previous point, we can safely conclude that most code is crap, or, given enough time, will eventually become crap, one huge mess.

There is no way around it. It’s just something we need to accept and deal with.

With time we will get used to that one particular piece of a mess; we learn its quirks and quarks, and things become somewhat manageable.

This doesn’t mean that we shouldn’t do our best in trying to write clean and concise code, but that we should expect things to get messy sooner or later.

Our goal should be to prevent it from happening for as long as possible.

Trust your superiors…

If you think that something is wrong with the request/task you got, it’s okay to point out your concerns.

Once you have expressed your thoughts, it’s up to them to make the final call. The best thing you can do then is agree and do your best to implement what they asked for.

Since most programmers suffer from Aristotle complex to at least some degree, it’s hard for them to simply accept any idea or suggestion without first questioning it thoroughly and then trying to argue against it for no particular reason.

Start with an assumption that they know more about the subject than you do, which they should and probably do.

By looking at things from this angle, it will be easier to accept other people’s thoughts and ideas.

Have faith in your superiors. Put trust in their expertise and knowledge. Let them do their job, a job they are paid to do.

Surround yourself with people who are better than you!

You are the average of the five people you spend the most time with. This is one of the great truths of life in general, but it also applies to your professional life as a programmer.

Every person has standards. Those standards are always fluctuating, but they are generally defined by one’s surroundings.

If people around you have low standards, chances are, your standards will be low as well. It all starts from within the family and later on propagates to friends.

When choosing friends, people usually choose those who are similar to them and they are also accepted by those people for the same reason.

If you want to change and become better at anything, surround yourself with people who are better than you at that particular thing.

Find a repo you really like and start contributing to it. Slowly, but surely, you will start getting to know other contributors.

You will talk to them, discuss with them, get to know them and slowly start to copy and model after them.

Go to meetups and meet passionate, knowledgeable people. Again, talk to them, hang out with them, offer your help to them and with time, you will start changing and evolving.

Lastly and most importantly, pick a great company with great people. Since you spend so much time in the office, it is essential that at least some of your colleagues are better than you in some way.

This is the thing that will make you grow as a programmer the most and in the least amount of time!