Jan 18, 2010

Creative Programming

Some time ago, I was asked to give a presentation about Creativity At Work. This was part of a series of presentations where people from different fields were asked to give there view on creativity. I wasn't very shocked (but a bit sad) to find out that most of the speakers were visual artists or designers and I was the only programmer. So, holding the fort, I started working on my presentation which mostly revolved around my personal view of creativity and my creation process. All the time, I was expecting some weird comments coming from non-programmers regarding the fact that a 'computer-guy' would have something to say about creativity but, to my surprise, most of the sarcasms came from other programmers. That'll teach me not to watch my back. Apparently, for some coders, no creativity was involved or needed when programming...

I was baffled, because I see coding as a medium. I use it to create, the same way I use paint or clay. I then decided to spend a good part of that presentation demystifying coding and showing it for what it really is: just another tool. Now, it's one of my favorite presentation to give. I love the reactions I get out of it.


Why would a person sitting at a piano be closer to creativity than a programmer at is keyboard? Playing the piano is pretty hard an not that many people can master it. But if they do, it can be used to invent and break new barriers. For me coding can be used that way too, whether the output is music, image, video, robotics or anything else that can be experienced by other people.

#define JAZZ printf(“Do de do, de do wha!\n”);

Dec 27, 2009

I could fix keyboards

I got my first computer when I was 20 years old (a late bloomer) back in 93. At the time, if a keyboard stopped working, I could fix it. It was no big deal, most of the people I knew could do it to. Troubleshooting the problem was easy.

Open the thingy and look inside.
If it's dirty: Clean it.
If a piece is loose: Push or bend it back in place.
If a piece is visibly broken: Make a new one or replace it with part from another dead thingy.
If a circuit was visibly burned: Replace it with the same part from another dead thingy or declare that one dead but keep it for the parts.

With this check list, you were able to go a long way before throwing something away. So I kept on fixing keyboards, mouses, laptops and PCs for years. Then one of my Natural-Keyboards broke. “No problem!” I was thinking, getting my tools out. It's been a long time and couldn't wait to see what it looked like inside. It was a shock. There's nothing in there. It was two pieces of clear plastic sheets, one of top of the other, covering the space under all the keys. Imbedded in the plastic is a bunch of circuits lines and by pressing the two plastic layers, lines on each layers would form a contact. It was not dirty, there was no pieces to get loose and it was not visibly broken or burned. I was screwed. 'So long' my 120.00$ keyboard and 'Hello' the cheapo 19.99$ keyboard. Yet another reminder of to the consuming world.

Nowadays if something breaks, most of the time we throw it away. If we bother to open the thing, it often brakes in the process since it's not meant to be opened. Once inside, we look at the one chip that, somehow, does everything in-there and sigh before throwing the pile of pieces in the garbage.

I like to fix things. Most of our tables, desks and cupboards in the house are nice old things having a second life. Not that long ago, my wife came home with an old sowing desk that we turned it into a side table in the living room. While fixing it I remove the sowing machine pedal that was still attached inside the desk.


It was begging me to open it and so I did.


It was simple swivel harm that could make contact at five different places on one long coil resistor, or be in the 'fully on' position or the 'fully off' position.


I had a mixture of emotions. I started by being impressed with the simplicity. I knew I could fix that and I knew I could use that design in an eventual project. I was also angry that things are not made like that anymore.

Dec 15, 2009

Points vs Hours

The pains of task estimation. It makes that warm feeling of starting a new project disappear completely. No matter what's your method, Waterfall or Agile, you have to tackle that features list at the beginning of the project and estimate like there's no tomorrow. It's always too big and all those estimations will enable the team to scope. And so, you get to it. It take all of your team days to get through it and a the same time you know you'll have to re-estimate all of those features throughout the entire project.

I got tired of that. Not fast enough, but after 16 years of estimating with hours I couldn't face another project like that. That's when I gave a good try to the Story Points system. It appeared a bit suspicious so I 'googled' away on the subject. My goal was to find THE reason that would convince any programmers on my team to switch to a points estimation. Lucky me, I found one and here it is:

Behold the one reason to use points over hours when estimating.
>> If you show two different features to two programmers, chances are they will not agree on how long, in time, it would take to code it. They will, on the other hand, always agree on which task is bigger than the other one. <<

It takes us now 2-4 hours to estimate what took us a full week before. Here are the easy steps:
1) Put all the possible stories in a spreadsheet.
2) Create a second spreadsheet that will contain, in the end, your estimated backlog (aka the list).
* In this list, the big stories will be at the top and the small ones at the bottom.
3) Copy the first story into the list. Since it's the first item, just drop it at the top of the sheet.
4) Copy the next story into the list by doing an insertion sort based on the simple question “Is this new story smaller or bigger?”.
5) Repeat step four for all the stories.
6) Giving points to the stories starting at the bottom of the list, by giving the first one 1 point.
7) Using the Poker Planning scale (0, ½, 1, 2, 3, 5, 8, 13, 20, 40, 100), ask yourself if the story above the last one is in the same scale.
* If it is: Give it the same estimate.
* If it's bigger: Give it the next increment in the scale.
* If it's smaller: Move it down until it fits.
8) Repeat step 7 for the entire list.

Tips:
- Try to make most of the list fit between the included values 1 and 13.
- Sometimes micro stories are at the bottom of the list. Give them the value ½.
- At the top you will probably find some Epics of values 20, 40 and even 100. those will have to be broken down into sub stories latter.

Those stories will never have to be re-estimated unless the descriptions changes dramatically. The velocity of the team can be calculated by the total of points they can burn in one sprint and that velocity normally stabilize after 2-3 sprints. With that value you can also predict how many sprints it will take to complete the backlog.

Go points!

Nov 18, 2009

Dimensions... again

In a previous post, I was wondering if it was possible to describe a dimension solely in terms understandable by the previous dimension(s) (i.e. describe (n)D in terms of (n-1)D). While thinking about this, I stumble on something interesting. But first lets start with some basic setup:

The Point
It all starts with the point. We say that the point is in 0D (no dimension).

The Line
To make a line starting from that point we can go in any directions around it. We than stretch that point into that direction and draw a line between the two points. We can then say that we had total freedom of movement to create that line. We would also be drawn to conclude that this freedom of movement was in a 3D volume. (Spherical coordinate system.)

The Square
Making the square is a similar process but this time we have stay perpendicular to the previous line. We then stretch the line anywhere around the original line and draw two extra lines liking the copied points. We had some freedom of movement to create that square and conclude that this freedom of movement was in a 2D plane. (Circular coordinate system)

The Cube
Repeating the procedure again will generate a cube. This time our movement have to stay perpendicular to the squares plane. We then stretch the square anywhere along a perpendicular line from the plane and draw four lines liking the copied points. Again, we had some freedom of movement to create that square. We would conclude that this freedom of movement was on a 1D line. (Linear coordinate system)


Looking back at what happen, we can see that as the dimensions are increasing from 0D to 3D the freedoms of movement decreases from 3D to 1D, leaving no dimension to continue stretching the cube into a possible next dimension. In a way, I was somewhat happy. It looked like a perfect circle, from 1D to 3D and back. I showed those results to my wife and the first thing she thought was “Of course you start describing the points freedom of movement as 3D because that's the max for you, they would not say that in line world”. She was right.

I ask myself: how would 1D and 2D describe the same transformation?

The Line
The line would say that the point as no dimension (0D). It would say that to make a line, you have to stretch the point into the first dimension. It then stretch the point anywhere along the existing Line World (1D) and draw a line between the two points. It can say that It had some freedom of movement to create that line. It would conclude that this freedom of movement was on a 1D line.

The Square
The square would also say that the point as no dimension (0D). It would also agree that to make a line, you have to stretch the point into 1D. It then stretch the point anywhere around the original point, while staying in the squares plane, and draw a line between the two points. It can say that It had some freedom of movement creating that line. It would conclude that this freedom of movement was in a 2D plane.
The square would then be able to go one step further than the 1D Line, by stretching the newly created line into it's 2D world with a freedom on a 1D line.


Since the maximum freedom of movement is bounded by our knowledge we cannot picture stretching beyond that limit. But, we as 3D beings, know that there is a second dimension even though the Line World can't see it.
A 4D being would say that the freedom of movement of the point, when creating the line, is in four dimensions. It would also be able to stretch the cube into the fourth dimension and understand why we can't see it.

Can that scale of dimensions be infinite?

Nov 11, 2009

Email Overflow

I'm one of those really bad people that can easily get a backed-up inbox, if I don't stay on top of my emails every minute of every day. I'm a get-up-and-say-it-to-the-person kind of guy.

Of course everybody that noticed my email reflux wanted to help me and they always happened to have the best method. So I tried all kinds of stuff: bucket by projects, by categories, by people, by fields of work,... It got much better and it was manageable but I still missed important emails here and there through the tsunami getting to my inbox.

Than came Bob (not the real name). Bob noticed. Bob wanted to help and Bob had the best method. He than told me about his two buckets method.

Two buckets? How does that even work?

The first bucket is for emails where my name is in the “To” field and the second bucket is for emails where my name is in the “CC” field. The justifying rules are: 1) If it's really important, people will put your name in the “To” field. 2) If your name is in the “CC” field, get to it when you can but keep your shirt on. 3) Anything else is getting to you through mailing lists and is not dire... in theory.

Wow! So far it's working great. Now I just have to check the “To” bucket all the time, check the “CC” bucket 5-6 times a day and check the main inbox in the morning and evening.

Ah, the small things in life.