Writing a book: how to work on many projects

After quite a bit of pondering, writing and editing, I shipped the Learning as a Software Developer book last week. The whole process took about 6 months to complete, so I had time to experiment with a few ways to work. During that time, it was important for me to keep the blog going and still have time for technical learning and my various homestead-y hobbies. So, in that case, I was in for a marathon, not a sprint.

Spoiler: making a commitment to write regularly was the best way to make progress.

I’ve also tried a batching approach to the problem. The idea was to write a few blog posts in advance the first week, then spend the next week working on the book, and finally do a bit of technical learning. It was working decently at first and I WAS able to batch a few posts in advance, but then life happened and I was only able to write a little bit for the book before having to go back to blog posts. Fail!

Making sure I’d work a bit on everything each week was the best way to make sure I’d keep moving forward. It kept everything fresh in my mind, so I had less catching up to do to go back into the flow and start writing. To limit context switches, I’d pick ONE thing to work on every night instead of jumping from task to task.

important-writingI’m aware this makes me less effective than batching, and that it takes more time to complete some projects, but this way I don’t lose steam and burn out. Right now, I’m living in manager space and not in maker space: I don’t have time to focus intensely on a project for hours every day, so I have to sprinkle important projects here and there to make sure they get done. If I space out working on each project too much, I’ll wake up 6 months later without having published a new blog post or written a newsletter.

Relating to this, I also had to hone my ability to get to work immediately (or at least faster) since I’m working during the gaps in my day. I only have a block of a few uninterrupted hours in the weekend if I’m lucky, so I can’t lose 2 hours getting started every time.

The key here is to have a task primed and ready to go, or at least a well-defined process. For example, to write a blog post, I generally write a draft in one go, and then edit the next time, so I’m either starting a new blog post or completing one.

Finally, what helped me is that all those tasks are similar enough to fall into the same habit. I changed my blogging habit to a habit of writing and coding using the same cues and rewards, so I’ve not lost a habit that took some work to build. It took quite a while to ship everything this way, but in the end it was worthwhile and allowed me to ship the first version of the book to you.

Take a break, go out and play

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.

Go back to the introduction of this series : Play and learn as a software developer

Play to learn: Environments made to learn programming

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!

Go back to the introduction of this series : Play and learn as a software developer