The theme of this blog entry was triggered by a set of slides that were presented at this OSCON this year on the topic of flow. Flow being the wonderful energised state where you are fully focused upon and enjoying
the activity at hand.
The conference presentation goes on to describe what the presenter thinks are the criteria needed for when you are coding, but I think there is a degree of generality here that can be applied to anything technical or skilled. They were described as:
- G = Clear, attainable goals
- F = Immediate and relevant feedback
- S = Matched Skill and Challenge
For myself, I think I can add at least one other criteria
- A = Available Time
In terms of my tinkering away at little software projects, my most recent project has been npyscreenreactor. npyscreen is a Python library around the Python curses bindings. npyscreenreactor is an implementation of interfacing that library with the Python Twisted library. Twisted is an event driven networking engine for python. The reactor part of the name refers to a design pattern for how to write event based service handlers and have them run concurrently. (See Reactor Pattern)
The project was written to support virtualcoke. virtualcoke is an emulator of the behaviour of the PLC that drives the UCC Coke Machine. This is written primarly to avoid club members needing to have access to the coke machine to test code to speak to the machine and the development of the reactor was needed to enable use of the PyModbus Twisted module.
This project, npyscreenreactor, has taken sometime to come to fruition with an initial working release of the code in March 2015, some bug fixing in June, working examples in August and probably what will now be a stable version in September.
For this the goal, feedback, and skill have been there. However, the available time/energy has not (due to other commitments, such as work). The wider project that will use virtualcoke, I still need to throw some energy at, but it is now lower down my list of priorities.
In things apart from this, flow has been less forthcoming of late and I’ll need to work on it. The challenge being to set up a positive reinforcing cycle where the achieving the goal generates warm fuzzies and more enthusiasm to work harder.