Getting Started

Last week I wrote about issues I was having getting things done and worrying about stagnating in my career. I took some time over the past week to disconnect, relax, and reflect about both this problem with "closing" and my career. Throughout my life I've been constantly rushing forward and in my career worrying about what will come next. This rushing and worrying always leads me into a mild depression that becomes difficult to overcome. Eventually I realize where I am and find out where I need to go. Sometimes it's a job change, other times it's a mentality shift, and in one case it took me flying half way around the world for work to start fresh. What I've learned is to do the best where you are at and things will move forward. Following the course of the river instead of paddling against it. What is more important is maintaining a feeling of exploration and hunger. In Becoming Steve Jobs the authors write:

Restlessness is far more important and powerful than simple ambition or raw intelligence. It is the foundation of resilience, and self-motivation. It is fueled by curiosity, the ache to build something meaningful, and a sense of purpose to make the most of one’s entire life.

This is my springboard to move forward. Don't rush but be restless.

A Project

In my last post I wrote about trying to create small projects to do as part of my exploration. Each project should have a purpose and be useful to me and so with each one I will ask "What problem am I trying to solve?". Having asked this question I will build tools to help me with the immediate problem and move forward.

Over the last two years I've been trying to build a project to help me organize my thoughts and resources. I've called the project "Alexandria" after the great library, thinking that this would be a great place to collect books, links, etc. The project was built as a monolith but went under several rewrites, scope changes, and various dead ends. It was a classic monolithic application problem and one that has stagnated because of lack of interest and use on my part. Not that I don't want to use it or build my vision, but rather a result of this constant state of restlessness that I have.

So again I should ask myself, "What problem am I trying to solve?"

The answer is I'm trying to solve a bunch of small problems and should therefore focus the project on smaller pieces of work. I should define the project ahead of time, some features, and then worry about implementing it. So instead of a great library I should build sections of that library to use. This way if I need to rewrite something I don't need to rewrite the whole application but rather just a small piece. I can morph and change technologies, frameworks, and languages as I see fit. This practice will help me understand distributed systems and embrace automated deployments and workflows. In The Haskell School of Music the authors write:

We may write a program, modify it, throw it away and start over, give up, start again, and so on. It is important to realize that such hard work and reworking of programs is the norm, and in fact you are encouraged to get into the habit of doing so. Do not always be satisfied with your first solution, and always be prepared to go back and change or even throw away those parts of your program that you are not happy with.

So, as a single developer I should follow this pattern of embracing the rewrite and make it not so difficult for myself by limiting the scope.

What I'm building

I jotted down a few programs that I feel like I want to build.

  • A way to track books to read with the ability to create lists of books based on subject
  • A way to read books online that I have collected in order to track my progress and take notes
  • A way to read and collect papers online and take notes
  • A way to collect links, organize them by subject, and take notes if I find things useful
  • A way to collect online talks, organize them by subject, and take notes
  • A way to search my notes
  • A way to view all resources by subject (resources being links, books, etc)
  • A way to collect ideas, add resources to those ideas, and create scaffold for a post or a new project
  • A way to organize my starred GitHub projects
  • A way to track my projects

There will probably be more and some of these may be grouped or replaced. But this was what I came up with during my brainstorming.

Along the way I hope to pick up new tools and abilities that will help me with my career and feed my interests. My father always liked redoing houses and each time he fixed one up he taught himself a new skill. In much the same way I will take the time to learn new technologies and languages, understand new patterns and processes, and discover new architectures and designs. This will feed into my writing in order to reinforce what I'm learning.