Getting over myself and doing things the easy way

During the summer, I usually spend a lot less time working on the computer. I’m outside instead, taking advantage of the short Canadian summer to garden and soak up sun while it lasts. When I do work on something, I keep it light and try new technology that piqued my curiosity just for the fun of it.

Poule-smallThis year, we also started keeping chickens, so my new project is to automate our chicken coop. The goal of this system is to automate the lights, and act as a weather station to collect information about the conditions inside and outside the coop. All of this will be controlled by a web application accessible from a smartphone. Ultimately, I’d like to automate the doors too, but it’ll require a bit more work.

It’s a fun project that allows me to dust up my neglected hardware skills. It’s been a few years since I’ve seriously worked with hardware: when I was last involved with microcontrollers and embedded computers, Arduinos were just starting to get popular. Since it’s been so long, it’s been interesting to see how my thinking has evolved.

Some background…

I have been a professional programmer all my working life, but I’ve studied electrical engineering AND programming. One could believe that all that theory from school would be useful, but it used to slow me down a lot: every time I would start a new project, I would first try to plan out how everything would go.

I would then start worrying about all the potential problems that could come up, get sucked down the rabbit hole and eventually quit working on it. If I didn’t knew much about electronics, I could have hacked things together until they worked and be satisfied, but I had the curse of knowing just a little bit too much.

Also, since I did spend a few years studying this, I felt an obligation to follow the “one true way” and make my own life as hard as possible. Why use Arduino and existing libraries when avr-gcc works just fine? Libraries are for wimps! If you’re not pouring over 100+ pages of datasheets, you’re not doing real electronics!

Getting over myself

All of this is completely ridiculous of course, especially if it’s a project you’re doing for fun. I’m thankful there are standards and good practices for commercial products: I don’t want my oven to set the house on fire or interfere with my smartphone. But if you’re just looking to learn and experiment, you can’t do much damage with a 5V circuit. Maybe you’ll burn a few components, but that’s life.

Looking back, I see a lot of similarities with how people are told to learn to program or to start using a new language, cramming in too many computer science patterns and practices before getting started. Trying to learn theory without balancing it with practical work on real software is a dangerous pitfall that will stop you from progressing. If you have too many things to keep in mind at once, you’ll start worrying about how your project will collapse under its own weight because of your spaghetti code, even if you’ve barely gotten started.

In the end, you’ll stop yourself from shipping projects even if you don’t have any users yet. You’ll start believing that you must understand everything to perfection before getting started, and that no shortcuts are allowed, ever. That makes it really hard to keep learning and growing.

As a programmer, you’ll learn where you can cut and where you must put more effort with experience. This can’t be learned from books and courses, you have to see it for yourself. There is a time and place for implementing things yourself because you wish to learn more or because it’s a critical part of your project, and another for using code someone else has written and that is good enough.

Thankfully, I’ve gotten over myself and I’m now more laid back about using hardware and code other people made. For this project, I’ve been using some great open source code from the Arduino community instead of trying to reinvent the wheel, and it’s been a blast. Hopefully, I’ll bring this one to the point where I can use it!

Subscribe now to receive my 5 Hacks to Learn New Skills email course directly in your inbox. You’ll also receive weekly updates about learning and growing as a software developer.

What you are is what you do

We define our work and our skills using various labels. Right now, I could say that I’m a software developer, a programmer, a product owner, a web developer, an Android developer and all those would be true. Still, those labels don’t tell you much about what I really do, or how much experience I have in each of those fields. Some people use labels that sounds way cooler such as ninja, samurai or hacker, but it doesn’t give then more skills.

Dreaming of adding an extra label to the list is an easy shortcut. I like to think that if I had all the time in the world, I would hack hardware and master all the latest buzzwords in web development, but that’s wishful thinking. I’m sure you also have a long list of things you wish you could do. Nobody can do it all: being an expert in many fields is demanding. Just maintaining your skills and keeping up to date takes work, not to mention learning new skills.

You are what you work on and keep practicing. Time is limited, so you can’t lie to yourself and pretend to be something you only do once or twice a year. Fortunately, this is great news if you want to earn a new label: you can do the work and it will come. You just need to do more of what you want to become, and less of what you don’t want to be.

It’s easier said than done, but if you’re aware of this you can use it to keep working toward what you want. You can drop being a Twitter or Instagram specialist and replace it with something more satisfying to you, like being a security specialist or an open source contributor.

This need real work and practice, and not just going through the motions. You must stretch the limits of your knowledge and try new things, not just read about it or listen to podcasts. Good practice is often frustrating and hurts a bit.

To make a skill part of your life, you don’t need to spend hours on it every week, but it needs to be a regular occurrence. Building a habit of doing a bit every day or every week is a perfect way to grow into a new skill. If you keep doing it, you’ll eventually become good.

This also means that some of your skills will decline with time as you use them less. Especially with technology, things evolve so fast that you won’t be up to date in everything that you ever did. You’re allowed to let some skills go, and it doesn’t mean that you can’t get them back as needed, since you won’t be starting from scratch. You can’t focus on everything at once, but all those previous experience will add to your overall knowledge, making you a better developer.

Your job will never be done

As a software developer, you have to become comfortable with the fact that your work is never truly done. The software you create will always be a work in progress. When you code that last feature or fix that last bug, another one will pop up soon enough.

Also, as you keep learning, you’ll find better patterns that you want to use, or new standards that you want to implement. If you don’t stop yourself, you’ll quickly go down the rabbit hole, only waking up after you’ve sunk many hours to refactor your whole code base. At some point, you have to let it go and ship anyway, because it’s never going to be perfect.

Good software is like a garden. You can pull all the weeds and clean up, but be quick to congratulate yourself because it will stay neat for approximately a day. After this, new weeds will have grown and you’ll have to start over again. Perfection is fleeting in software and in gardening: the best you can do is making sure it’s not overrun by weeds and bugs.

Likewise, there are new languages, frameworks and tools coming out all the time, and you need to keep learning to stay up to date. You don’t have to jump on every bandwagon: many skills can be learned as you need them. On the other hand, changes like new browsers and OS versions will force you to adapt even if you would have preferred working on a new feature instead.

It’s humbling to let go if you’re a recovering perfectionist. When you started out, small problems could be “solved”, and a class could be “completed”, but real life is more complex than this. Life will throw you curveballs, and you won’t be able to reach inbox zero. It won’t come easy at first, but stay mindful that you’re doing your best, but can’t do it all. You’ll learn to be at peace with it, but even this is always a work in progress.