There is so much to learn and so many cool things I can make as a software developer that I can stay on my computer all day without getting bored. It gets a bit hard to concentrate after a few hours, but nothing that a cup of coffee can’t fix. If I feel stir-crazy, I can always take my laptop to a coffee shop or meet other developers and talk about code. Sounds familiar?
You can learn a lot about programming this way, and this lifestyle brings back fond memories of cramming on exams and student projects at university, but you won’t be at your best if all you do is code. You need to put in the time to become a good programmer, but this is a phase in your life: if you let it take over, it will limit you in the long term. Software is a way to solve problems for people, but to do this you need to be able to relate to many different kinds of people. If you only speak with are thirtysomething programmers working at startups and your barista, you’ll have a limited scope of problems you can solve. You need to live it up a little and try other things.
Programming during all your waking hours is also hard on your brain and your overall health. To be at our best, we need to switch to various modes of thinking and give ourselves space to assimilate what we learn. If you stay too close to a given subject, you won’t give yourself the occasion to get your best ideas and you’ll waste your potential. It’s no accident that the shower is known as a place to get great ideas: it’s a moment to slow down, relax and process everything that went on earlier.
But what can you do if you’re getting too much of a good thing, and need more perspective in your life? You need to find a hobby that you can enjoy so you’ll disconnect completely from your computer and the Internet for a few hours. It needs to be something completely different that gets you moving and playing in a different way. You could for example create art, play music, take up a sport or cook your own food instead of calling for pizza. If you stick too close to what you’re already doing, you won’t see the same advantages: I like writing, but it doesn’t count since it’s still solving problems in front of a computer.
If you’re not sure where to start, you can get books or watch YouTube videos to explore new prospective hobbies, but the best solution is to take a course or join a club to meet real people. At first you won’t be at your best, but over time you’ll have another way to play and create in your life, one that doesn’t involve computers or electronics. You’ll be more productive when you go back to your computer, and have fresh ideas you can use to make your software better.
Most people get started programming because it’s a lot of fun to pick something you’re curious about and start experimenting. Tinkering with code, seeing what works and what doesn’t, and fixing problems as you come across them is a great way to play with computers while learning new skills. Even if you have a lot of experience, it’s good to go back to that mindset from time to time and learn by playing around.
This is hard to do in large, mature environments, such as ASP.NET MVC or Ruby on Rails for web applications. If you want to do anything, you have to go through a long and complex setup before running your first program, and many dependencies are involved in everything working just right. Those tools are powerful, but the overhead to get started is painful if you only want to play with some code.
Fortunately, there are many environments designed for playing and learning that can help you get started quickly. You can take advantage of those tools when you have the urge to play with something new without taking on a huge commitment. Here are some of them for my favorite subjects to play with, hardware and the web:
Web environments
If you’re reading this, you already have a great environment to create applications: your web browser. You can get started building a web application with only HTML, CSS and JavaScript, and run the application directly in your browser without any further setup. You can’t save data or send emails unless you add a server-side technology, but it’s a fast and scrappy way to build a web page or even a prototype for a small web application. You can just drop the code in any cheap shared hosting if you want to publish it: it doesn’t get any easier than that.
For more complex frameworks, there are virtual machines available that you can use for a pain-free setup to play around with a language or framework. The hardest thing is that case is to fight the urge to be in full control of your editor and tools. It took me quite a while to introduce myself to Ruby on Rails because I insisted on setting up my Windows PC instead of using the environment already provided with the Ruby on Rails tutorial. I recommend that you wait until you have a first project you need to deploy before worrying about the mechanics of all of this: mastering the environment and the framework at the same time is a lot to learn just to get started.
Hardware environments
The world of hardware is great for tinkering. There is something special about being able to see the results of your efforts in the real world and not on a screen, even if it’s just flashing a LED or making some beeping noises. Playing with hardware will also teach you valuable lessons about the limitation of hardware, which will make you a better programmer.
Since building your own board just to test some hardware is complex and time-consuming, there are many learning kits available. The most popular one is the Arduino (https://www.arduino.cc/), and there are kits based on that platform to build anything from a clock to a robot. For a quick introduction to Arduino, check out Scott Hanselman’s post at The Importance of the LED Moment about the March Is For Makers project.
If you’d rather play with small computers, the Raspberry PI (https://www.raspberrypi.org) can be used to create all kinds of projects. There are many Linux operating system images you can upload directly to a SD card, such as OSMC (https://osmc.tv/download/) for a media center or RetroPie (http://blog.petrockblock.com/retropie/) for a retro gaming console. Just plug everything in your TV and you’re ready to go and tweak!
Finishing a large project is hard. There are many shiny objects that grabs your attention and prevent you from getting to your goal. To be able to finish projects, you must be able to get a good amount of work done in the long term without being distracted. You’ll get a burst of motivation when you start something new, but this fades quickly. Even if you’re tempted to procrastinate, you still need to do the work if you want to finish at some point.
If you’re learning new technologies and growing your skills on the side, you’ll need to use the small gaps of free time in your day to make progress. When time is scarce, every extra minute can help you go forward. You must learn to get started immediately when you’re in one of those gaps instead of messing around on social media and losing precious time. This way, you’ll accumulate many small wins and end up finishing your project instead of stalling. It’s hard to make progress if you need to have many hours of free time in front of you to get the messing around out of your system and get started working.
But, how can you learn how to start and work effectively when you have a bit of extra time in your day? Here are 4 tactics to make your starting muscle stronger and avoid procrastination :
Building good habits
Habits are a powerful thing. You must learn to build habits that helps you go forward instead of living with habits that work against you.
According to the excellent book The Power of Habit, an habit is made of three parts: a cue, a routine and a reward. The cue is the trigger that starts the habit, the routine is the action itself and the reward is the positive thing that happens as a result of doing the habit. If you pay attention, you’ll notice this pattern repeating itself multiple times in your own day. Once you understand how it use, you cans use this pattern to create your own habits, or to modify existing habits by modify the action you take in response to a cue.
For example, to build an habit of learning something new every night, you can bring a cup of your favorite tea to your computer at the same time every night and sit down to learn for 30 minute. Over time, you’ll come to strongly associate the cup of tea with learning. You’ll start thinking about learning as soon as you start preparing your tea, and when you sit down you’ll be ready to get going. It’ll become part of your regular day, like brushing your teeth, and you won’t be able to do without.
Giving yourself goals
Goals will give you the focus to work on things that are important to you. You’re not limited to one large goal for each project: you must have many smaller milestones on the way.
Trying to work on something in your cave for a year without having any other milestone on the way is hard and demotivating, which leads to procrastination. Not every day or every task is exciting, and you have to put your head down and do the work at some point. But if you never check your progress, you can easily get distracted and work on things that don’t really help you reach your huge goal without even noticing it.
When you’re planning milestones, they shouldn’t be so far away that it feels like you have an eternity to work on them. Make them short enough so it’s a bit of a challenge and you have to put in some effort to complete them. People generally overestimate what can be done over a short period like a week or two, and underestimate what can be done in a year.
If you make your milestones in chunks that are a few months long, they’ll be in the sweet spot between too short and too long. You’ll have many quick wins and validate that you’re making progress. When you sit down, you’ll know that you must work on a concrete task that helps advance to the next milestone, and not some vague and humongous goals that’s hard to grasp, so you can work more effectively.
Timeboxing tasks
Timeboxing means constraining a task to a specific time frame. It’s like a mini-deadline to help you finish a task faster.
Most of us works faster and more efficiently when we have constraints. When time seems unlimited, it’s easy to slack and leave time undone, but when a due date is looming the works magically gets done. You can use this to your advantage: give yourself limited time to complete something when you sit down, and work only on that thing.
The Pomodoro Technique is a popular method to do this. It suggests 25 minutes work sessions, followed by a 5 minutes break. You start a timer, get cranking on your task until the time is up, take a break, and start over again. If you’re working for a longer period, the method suggests taking a 15 minutes break after 4 cycles.
Another way to do this is to use music. If you listen to music while coding, you can build playlists that last just long enough for a work session. When the music stops, it means that you reached the end of your period. You can then take a small break and start over with another playlist if you have more time.
Planning tasks in advance
When you only have a bit of time free, it’s important to know which tasks you can work on.
If you must spend time figuring out what to do next every time you get started, you’ll loose precious time. You should keep a list of tasks handy so you can drop by and do something as soon as you have some free time. Planning and working require different mindsets: you should deliberately choose which one of the two your are currently doing.
Planning doesn’t need to be complicated: a Trello board with a card for each task is enough. First, do a planning session to fill out your board. After you have a good buffer of tasks, you can just write down new tasks as they come up. As a bonus, writing down your tasks will stop them from going around in your head, helping you save willpower and brain cycles for more important things.
What are your favorite tactic to make the most of the free time you have?