January 7, 2019

Programming Your Life

Title image

When your try to improve your life, you quickly stumble on the idea that your goals are useless, and that you should be developing systems instead. While I do not completely agree, systems are indeed crucial for success.

To make the best use of them, I will start designing a few systems in my own way, using code inspired by python code to describe behaviour I want to implement in my life.

Using this method, my idea is to use the tools and principles of software engineering, going towards software craftsmanship and being able to use devops principles. This means using

  • Version control systems: Get an history of my systems
  • Refactoring: Improve readability and stability of my systems
  • Monitoring tool: Observe the impact of the systems on my life and goals
  • Logging: Registering events in my days that can be regrouped later then analyzed and exploited to improve on the systems, and see if I am going in the right direction
  • Open sourcing: Sharing my systems will allow other people to take a look at them, maybe get some inspiration and offer some improvements to them

Advantages

This approach seems to have some advantages.

  • Having all my systems written down, I can refer to them very quickly, and see if my actions correspond to my systems
  • Having history on my systems, associated with monitoring allows me to measure directly the impact of my systems
  • Needing to make the systems clear will lead to having to write clear and simple code, teaching me to write more readable, clear and concise code
  • Opening my systems to the world could help people, and help me by having others offer improvements. Forks may appear.

Drawbacks

There are some drawbacks that I see for now with this method

  • Life is more unpredictible than code, which may lead to some ideas being hard to systemize
    • To counter that, try to leave variable behaviour undefined. If this does not work, you can later define it and see if the result is better
  • A system badly written will be very hard to understand and apply
    • To counter that, refactor systems that are hard to understand.
  • Growing systems may become hard to approach
    • To counter that, keep the systems as small and independent as possible

A system for systems

I wrote a gist on the system I want to use for creating systems. This will be updated automatically as I update the system with time, so this might not be the first ever version. You can get the history on GitHub.

At the time of this writing, this is a first rough draft of the system, which will be polished with time. As I see it now, I may start a full blown git repository for this. For now, I am creating standalone small systems, so I do not need it yet.

Copyright Marin Gilles 2019-2022