16 July, 2010

GSoC -- Midterm!

So the GSoC is at its half-way point, and it is time for a status update. There are a few things on my mind which are worth mentioning.

The first thing is quite simple -- I have learned a lot.

I do not mean that I have just learned a lot of technical details or gotten better with a certain programming language or something (although both statements are true), but more importantly I have learned a lot about how to work on an open source project -- and the skills I have acquired so far are valuable entirely for their own sake, but many also generalize to other kinds of work.

For instance, working on MeshApp this summer has taught me a lot about methodically breaking up a large task in to many smaller, more manageable tasks. This seems simple and intuitive enough - but the way a big project is broken down into modules will define how (and when) those modules are actually created, which ultimately shapes how the finished product will work. Between the initial planning of the project and the end result lie many points where a decision must be made about how you will get from where you are now to where you want to be.

It is easy to make mistakes early and get a bit lost, especially without very much experience about navigating your way through without slipping around too much. Finding the quickest path from "I want this" to "I have this" is something that requires a lot of experience and a bit of luck. Or maybe it is a bit of experience and a lot of luck. I am not sure yet. Perhaps it depends on the problem at hand. I do not expect very much that luck will help with constructing a rigorous mathematical proof, but perhaps it is in the strange things that we observe which stimulate the imagination where luck is more important.

As an abrupt end to this metaphor, the second thing is this -- I am behind schedule.

This is not something which worries me a great deal, because it is completely natural with projects like this that such things will happen. However -- it does indicate to me a number of things which I must take quite seriously:

(1) The need to work harder. This is simple.

(2) The need to come up with a better strategy which will result in the project being completed on time with making only minimal and necessary changes to the original plan. This is not really so bad, but I wish it was not an issue.

Yet we make progress under the conditions that we have, not the conditions that we choose -- so it must be done.

I will close on a positive note with a simple observation -- It seems to me that the first part of writing code was mostly an uphill battle where every basic tool we need for "survival" had to be either adjusted from whatever we can find, or created from scratch. But there was a way through it, a lot was learned and foundations were put in place. Now we are in the second half of the game, and it is time to apply all of this knowledge and make something useful out of this foundation. It is hardly "downhill from here" but it is not so difficult to pick up the pace once you have a good foundation and there is not so much inertia working against you (so the hill analogy isn't perfect...because on a real hill it is entirely downhill once you pass the half-way point, unless there are two disjoint hills and you are trying to move from the top of one to the other or something.)

I expect to make another major status update within a week, marking the completion of MeshApp 0.1 and a more complete reflection on the technical aspects of what we have achieved.