its All Around

Just another WordPress site
March 5th, 2012 by David

A workout for programmers

Let’s say you’re have 3 projects open at the moment.  You’re dragging on all of them.  Time is slipping and stakeholders are getting nervous.  You look at yourself and say, “damn it, me, get going!”  But this doesn’t work.  You know it won’t because you have to say it.  Then your significant other (or your hamster or whatever) looks at you wierd and you get a glimmer of the sad truth that you are weak, thin.  It sucks to be like this when people are counting on us… and also there’s that whole mortality thing where we only have so much time before we die.

It happens and it’s rough, but never fear!  Pay me $19.95  and then all your problems will be solved!  (Sorry, I just watched TV for the first time in months and was shocked at how pandering and wretched the advertisements were, so I mock them)

So there are three projects hanging over your head.  Stake out the next hour and,

  1. Go to your place of work.  How are you?  Did you come to this point in time strongly and with intention?  Should you have brought a drink, used the bathroom, told someone that you’re getting into something and established boundaries?  How is your workstation?  What could make it better?  Is it messy?  Disorganized?  Ergonomic?  Don’t do anything about this stuff now, just acknowledge it.  If it’s important, find yourself doing it later.
  2. Think about the first project to be worked on, at a general level: what is it?  where are you in the project?  what were the last steps?  what’s to do next?  Why are you doing it?  Who are you doing it for?  Who else is involved and what’s their role?  What, exactly, is your personal responsibility?  Do all the parts fit together to make a coherent whole?  Will the project work brilliantly, well, alright, or not at all?  How much do you care, and are you ok with that?
  3. Open the appropriate programs: Get your tools laid out just the way you want them.  This includes editors, text environments, man pages, etc..
  4. Make sure you have all your passwords, paths, config files, administrative consoles, etc… at beckoning call if you need them.  There are few things more frustrating and wasteful than deflating a clean focus because you’re locked out of your own server or don’t know the location of a config file…
  5. Touch on lessons learned: what part of your own process are you trying to improve this time around?  Open up the files and track down the lines of code, or scan commit logs, or go through user flows.  Touch, tactilely, that flow, pattern, process that you are developing as you work on the project.  What does it feel like?  What role do you see it playing in your greater development?
  6. Plan your session: what are you going to do with the time you have?  Or, what things need to be done and how/why are they prioritized?  How are these tasks going to fit into the product? How do they impact any deadlines?  How do they fit into your larger goals and overarching intentions as an engineer, and, if applicable to you, artist?
  7. Think about your solution: what constructs, patterns, refactoring strategies are you going to use to get the job done?  What will the code look like?  Feel like?  What sort of nasty bits will come up?  What parts are smooth?  What sort of compromise will you make?  How do they fit in with the existing coding standards?  Do tests need to be written?  Comments?  Version control contortions?  How will this impact the performance, stability, scalability, etc.. of your greater product or code?  How can what you’re doing benefit from open source projects, or contribute back into them?
  8. Close everything without changing a single bit and start from 1 with the next project.

Spend 20 minutes in this manner with each of your projects.  Doing so will exercise the parts of your being that should be strong and lithe during the activity of programming and project work.  While this exercise doesn’t accomplish any work it embeds useful forms and tenacity into the supportive parts of your personality upon which you depend when coding.

If it is hard to come up with 20 minutes of things to think about and move through, there’s a good chance that your project is faulty or that you could be getting more personally from the experience of working on it.  If you can spend longer, go for it, but don’t only do this.

Enjoy your work!

 

 

February 12th, 2012 by David

Sensitivity

I’ve been programming for 22 years now, professionally for 12.  It’s been the longest standing, rewarding pursuit of my life.  One of the most fascinating things about it is how personal the path is; there are so many directions to grow into, so many things to learn, so many ways to improve.  The products of programming are endlessly fascinating and unbelievably powerful.  I’m just coming across a new way to develop my practice that’s completely unlike the courses, books, tutorials, blogs, etc… that have been my primary focus thus far.

Over the past year, I have had several notable occasions where I felt that something was wrong in my code, did not act on that feeling, then had it come back to bite me weeks or months later.  Each time I was on deadline, immersed in process and otherwise stressed out.  As I moved through the endless last miles I would feel a distinct sort of anxiety.  It wasn’t just time pressure or the general mixture of tiredness and responsibility.  When I stopped for a second and thought about this sensation, I realized that it was coming from the fact that specific edge cases weren’t being accounted for.  I knew I better revisit certain files and make sure to go through certain workflows.

I was aware of defects in my code at a visceral level even though the situation was preventing me from taking the time to think it out (it was the situation, I swear! :) ).  In these few notable occasions I didn’t follow up, causing myself and others hassle down the line.

One of the most valuable tools a programmer has is a natal connection with their code.  Coding is creating.  As the codebase moves through those first few tenuous alphas it is something taking shape out of nothing.  The form is driven by your ideas and given substance through languages, libraries and tools.  During this time you are intimately acquainted with all its flashes of brilliance, solid elements and skeletons in the closet.  In these early stages it cannot live on its own; not functional enough to use, not substantial enough for another coder to pick up from.

If it were that simple, then programming would be straight forward and mechanical.

The wolf of the steppes
The hard truth, that takes resolve and bravery to confront, is that this code is an intimate reflection of you.  The form that it is taking is a tangible manifestation of your ideas and concepts.  The violence that is done to an idea when it is first brought into the light of day can be hard to bear.  It is an extremely delicate thing to bring an idea into alignment with the tools and forms that it can take while still preserving that kernel of truth or meaning that you find in it in your mind.  It’s not just that so many epiphanies flare like shooting stars from the heavens then disappear forever into the silent oceans.   Its simply evidence suggesting that you’re not good at what you do.

Things get more complicated when code is not just your art but also your profession.  This reflection of you is linked to your income, the roof over your head, the food you eat, the compulsive first world lifestyle that would be fearful to loose.  Beyond this lies the politics of group dynamics and bureaucracy, which can fully detach the inherent qualities of an action from the judgments that it inspires.  I am fortunate in my day job that my organization is functional, but I have seen places where it is not.

Ultimately, the feeling that I put down or let slip away was anxiety, anxiety of failure (or mediocracy, as I’m not currently in danger of professional failure); a mortal anxiety wherein I realized that I may be unable to take this next step, fully realize the opportunities that my previous success has brought about; the anxiety that is the nothingness that is left when your energies are spent and you’re left looking into the abyss.

I’ve been turning the beginners mind portion of my practice to this anxiety.  Giving it the space it needs for me to realize why it’s there, then attaching the importance to these reflections through applying effort to resolve the underlying issues.  It is dispelling a lot of weakness that I’ve carried around and infused into my code.  I’m pretty psyched about it.