12 resolutions for programmers

It’s important for programmers to continuously challenge themselves in order to avoid creative and technical stagnation.

In the spirit of the new year, back in 2012, I compiled twelve month-sized resolutions to help avoid that stagnation.

I’ve updated that list for 2023.

Each month is an annually renewable technical or personal challenge:

  1. Go analog.
  2. Stay healthy.
  3. Embrace the uncomfortable.
  4. Automate.
  5. Learn more mathematics.
  6. Focus on security.
  7. Back up your data.
  8. Learn more theory.
  9. Engage the arts and humanities.
  10. Learn new software.
  11. Learn a new programming language.
  12. Complete a personal project.

Read on for my suggestions.

(If you enjoy this article, you’d likely also enjoy what every computer science major should know or possibly 12 resolutions for grad students.)

Go analog

Programmers invest in the discrete and the digital well past the point of diminishing returns.

As a result, small investments in the analog yield comparatively large gains.

Here’s a starter list of analog activities to try.

Each of which takes about a month of dedicated effort to transition out of the novice (and into the beginner) stage:

Stay healthy

(2023 note: Now 41, I’m grateful I took my health seriously over a decade ago – not long before I wrote the original version of this article. By following this advice, I’m stronger, leaner and healthier than I’ve ever been.)

Programmers tend to live sedentary lives, and we face specific health challenges from our occupation.

Each subsection here is a possible a month-long focus for your health.

Focus on primary care

Take the time to get a primary care physician.

Schedule an annual physical.

Track your labs (e.g., cholesterol, blood pressure, blood glucose) over time.

Make a habit of contacting your primary care physician about any sustained irregularities you notice in your health.

Protect your wrists and your back

If your wrists have been hurting, stop now and take action to combat RSI.

Focus on improving posture, with an emphasis on your shoulders and neck.

These days, there are plenty of posture correctors to help.

Set up tools to track diet and exercise

Track your weight, caloric intake and caloric burn. If necessary, reshape your environment and lifestyle to promote healthier eating and weight loss.

If you’re already trim, consider a one-year experiment in packing on strength and muscle.

Mold your environment to support healthy habits

Spend a full month each year optimizing your environment to promote durable healthy habits by default.

In 2019, I switched to a treadmill + standing desk, and it’s become my single biggest health hack ever, burning hundreds (and occasionaly over 1,000 calories per day) while working.

I’ve taken this approach to an extreme, combining a walking pad treadmill and a motorized standing desk to create an environment that enables me to combine constant low-grade exercise with work all day long:

There are combined treadmill and desk solutions as well:

I’ve used bike desks in the past and while they offer superior caloric burn rates to treadmills, I find them hard to use for more than an hour at a time.

For my work office, I slid an under desk elliptical machine in front of my chair, and this allows me to maintain a constant rate of low-grade exercise even there:

Be mindful of mental health

If you are struggling in any way with mental health, I highly encourage you to seek out qualified mental health counseling.

I’ve personally benefited from having a counselor, and I wish I’d sought out help sooner.

Whether you are struggling or not, I have found meditation to significantly benefit my wellness.

Undergoing a full cognitive assessment and receiving a formal diagnosis of ADHD at age 40 has also made a significant difference in my personal and professional life.

Embrace the uncomfortable

Since my early twenties, I’ve looked at my older friends and colleagues to figure out why some stagnate intellectually while others stay vibrant.

The answer seems to be comfort.

Comfort breeds technical fossilization.

We find a system that works for us, and we stick with it.

But, technology advances, and those that stay in their comfort zone never realize the gains from these advances.

So, practice becoming comfortable with being uncomfortable.

Here’s a list of things that might make you uncomfortable at first:

After a month of doing something different, decide whether you want to keep doing things differently or whether there are ways to blend the best of the new and the old.

For instance, when I switched to vim after ten years of emacs, I set up the emacs-style key-bindings for insertion mode but kept vim.

Reader Shae Erisson relayed the “rule of 3” for embracing the uncomfortable: when a third person recommends you try something, you must try it.

He also provide a “15 minute rule”: give something (such as a movie or TV show) the benefit of the doubt for 15 minutes. If you don’t want to continue after 15 minutes, drop it.

I like both of these rules.

Automate

The most powerful underexploited skill programmers possess is the ability to automate both the virtual and the physical.

Survey the routine tasks you perform, and determine which can be automated in full or in part.

Home automation

Home automation technology has advanced considerably since I first started tinkering with it in college.

Widely supported standards such as HomeKit for Apple and Google Home make it a seamless and integrated experience.

For example, I’ve enjoyed fully automating (and coloring!) all my lights with the Philips Hue system.

Because it integrates with HomeKit and Google Home, I can use my phone or my watch or wireless mic+speakers to control everything in my house.

When I started adding Lutron Caseta light switches and Level smart locks, it all worked with Siri and the Apple Home app right away, since both support HomeKit.

For example, if I forget to lock my front door when I leave my house, HomeKit locks it for me. And, I can ask Siri to open it for me when I pull up.

Lights shift between scenes based on time of day and sunrise/sunset and who is home.

Shortcuts for macOS / iOS automation

The built-in Shortcuts programming language on macOS / iOS has come a long way since it was first an independent automation app.

While it can feel overly simplified at times for seasoned programmers, it enables a lot of powerful automations, integrations with Siri and connections between apps.

For example, I created a Shortcuts script that resets my “Habits” list each morning in Reminders.

I have another Shortcuts script I run each morning to automatically set a T-2 minute alarm for every calendar event that day, which is a lifesaver given my propensity to forget about isolated video conference meetings.

Hack on robotics

If you’ve never built a robot, build a robot, or hack on a Raspberry pi or an Arduino board.

Other possible automations

Take a month to invest in an automation project:

Learn more mathematics

While it seems possible to avoid learning mathematics and still learn to program, at its heart, computer science is a mathematical discipline.

Mathematics provides a rich set of abstractions from which to draw while programming, and improving your mathematics will certainly improve your programming.

Consider an annual one-month brush-up on one of these topics:

During the early days of the COVID19 pandemic, I even set aside an hour each day to work all the way through Mathematics: From the birth of numbers:

And, I can’t help but feel it gave me a much deeper appreciation for computation in the process – even though that’s not the intent of the book!

Focus on security

Few programmers practice good security habits.

If you’re conscious of your own digital security, you’ll be more conscious of the security of the code you write.

Check that you’re using unique, strong passwords for every site.

Manage your passwords with an encrypted password manager like PasswordSafe:

If you don’t already practice whole-disk encryption, set aside time to do it. (On a Mac, it’s painless to set this up.)

Each year, study the top ten vulnerabilities for the past 12 months. How did they happen? What coding practices could prevent them in your code?

Here are other security tasks you can try out:

If you have never set up a free SSL certificate with Let’s Encrypt, I highly recomend doing so – and donating to them whatever you might have paid a commercial certificate provider.

Back up your data

Each year, review your backup strategy.

Invest a month in minimizing the cost of making backups, and consider having two independent back up systems, such as cloud and disk-based backups.

I use DropBox for my cloud-based backup, and it’s already proven itself during one unexpected hardware failure.

Opt for defense in depth by assigning an individual back up hard drive to each computer and enabling automatic backups with tools like Time Machine.

Keep critical files in a version control system with a geographically remote repository.

And, do not neglect backing up and securing your physical paper files.

Critical documents like passports and birth certificates need a fireproof safe.

And, you should keep scanned copies of all critical documents as well in a secure, encrypted digital enclave.

I keep a ScanSnap on my desk, so that I can quickly scan paper documents.

And, for any document that doesn’t need to have an original physical copy archived (e.g. an instructional manual), I trash it immediately.

The end result has been more access to my documents and far less clutter.

Learn more theory

Computer science has rich theoretical structure.

Keep abreast of new developments and renew your mastery of the classics.

Spend a month each year on topics like the following:

For starters, you might want to take a look at these posts:

Engage the arts and humanities

Engineers tend to look down on the arts.

What engineers fail to realize is that the arts and humanities augment technical excellence.

Steve Jobs was fond of pointing out the importance of connecting technology and the humanities, and rightly so.

Art and design have principles applicable to human-computer interaction.

Don’t be ignorant of these principles.

The arts and humanities train and sharpen intuition in a way that is difficult to quantify, yet is indispensible to of us whom work in quantified fields.

Engineers need to learn how to measure what they can’t count, instead of counting only what they can measure.

For at least one month per year, learn more about topics like the following:

Social sciences have much to offer computer scientists as well, and economics and psychology in particular.

Learn new software

A good way to get ideas for your own software is to learn a new application or a new kind of application.

For instance, if you’ve never used 3D modeling software, try Blender.

Or, if you’ve never learned LaTeX, give it an honest effort.

As you learn, note what you like and don’t like.

Ask yourself honestly whether these observations are reflected in the software that you create.

It’s hard to spot bad practice in your own work, but easy to spot in others'.

Learn a new programming language

Programming languages rise and fall, so spend a full month absorbing a new language or a new language paradigm.

Write at least a modest program in it.

To take this to an extreme, I used 26 languages over 25 days to complete Advent of Code and wrote about the process:

Here are a few less mainstream languages to learn:

If you’re feeling particularly brave, take a crack at dependently-typed programming languages / theorem-proving systems:

If you’re out of programming languages to learn, implement one.

Complete a personal project

If you spend all day writing code for someone else, remember why you became a programmer by writing a program for yourself.

Spend a month each year on a project of your choosing.

Bring the nucleus of that project to fruition.

Open source it and release it to the world.

Translations

This page is also available in:

Related pages