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!

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.

What is the next step when learning a new skill?

stairsGetting started with a new skill is hard, but the steps are clear. You’re completing a course or a tutorial , and someone else laid out a list of exercises you have to master as a beginner. But what can do after you’ve finished that first application to keep learning? How can you improve on that new skill instead of letting it gather digital dust?

There is often no clear progression after those first steps, and it’s easy to get discouraged and fall off. A lot of the material you’ll find is focused on the somewhat experienced developer learning a new framework, and not on learning what’s required to become an expert. There is a gap at this point that you need to fill yourself so you have new material to learn when you’re ready to continue.

You have to trust that you can build your own path at this point. Nobody can tell you everything you must learn, because you need to learn from your own experiences. At this point, you’ll deliberately seek out information that may not be directly related to the subject, but that you can integrate with what you already know.

For example, if you’ve learned AngularJS, you can learn more about HTTP, JavaScript, or the design patterns that were used to build the framework. Both theory and practice are important: you need to understand how things are done, but be able to use that knowledge in your own projects.

You also have to challenge yourself and deliberately focus on learning hard things and growing if you don’t want to stay stuck or give up on your new skill. The default is to fall back on your existing knowledge and habits, but those will end up being a crutch. Try out new ways to do things, or explore another language to gain some perspective.

If you’re always working in the same environment, growth can be harder to find. Stay curious and investigate when you encounter something you don’t understand. You can also take advantage of the occasion to improve your soft skills such as writing clear code and comments, or coaching another member of your team. There are many ways to learn, but you have to look for them and plan to learn instead of leaving it to chance.