Life has taught me, and my wife's wisdom has confirmed, that if you start early, you just might finish on time. Since I've never tried it before, but have been victimized many times by its converse, I'm taking this on faith, guided by experience. ;)
In that spirit I am thinking now about my goals for 2008. This is unprecedented: I usually give no thought to this matter until New Year's Eve, when we're more-or-less obligated to concoct some "resolutions" we fully intend -- or should I say pretend? -- to fulfill in the new year.
Since this is a technology blog, I'll try to keep my initial list to technical stuff.
1. Master parallel programming.
I have several motivations for this one. First, it's all the rage. With new, ever more powerful multi-core processors coming out with greater frequency, it seems like the unavoidable topic of the day.
Second, it's a huge differentiator: Threading is hard. It's an impressive differentiator on the job, and useful for many otherwise hard data- or computation-intensive problems, to boot.
Third: this means it's also interesting. People who say there's nothing left that's interesting in programming haven't thought deeply about parallel computing.
So, concretely, this general desire will be measured against the following specific goals for 2008:
1.1. Contribute something to Boost.Threads, and the overall discussion of standardizing parallel programming in C++.
1.2. Create a Boost-friendly library for constraint programming that uses the open source version of Intel's Threading Building Blocks (or Boost.Thread), and submit it for interest/review to Boost. Call it Boost.Constraints or something. I've found this subject and programming paradigm interesting ever since I stumbled on Mozart-Oz.
1.3. Use it to do something interesting with the new time_series library in Boost, like say a stock analysis and simulation system. Another possible application: something to do with tropical forecasting, another pet interest of mine. I have a strong desire to write simulation systems and finance and meteorology are domains that have always fascinated me. Unfortunately, I don't know enough about them so implicit in this goal is to learn enough about one (or both) of them to pull this goal off so that it passes as a serious attempt by somebody who actually knows what they're doing.
(When it comes to learning new things I have always been immodest in this way...so far it hasn't hurt me.)
2. Solidify my ideas regarding good SOA design.
I'm throwing this in to mollify Tom Fuller, my good friend and colleague, who also happens to host this blog site, and is something of an apostle of the SOA creed. :)
Seriously: I actually do have a few ideas rumbling around in my head, mostly pertaining to leveraging generic programming to alter how we layer our architecture cake to overcome both conceptual and performance-related complexities that the current state of the art leaves open to criticism (as Tom and I know from experience at work).
Concretely, then:
2.1. Totally and completely grok .NET's WCF framework. Create a constraint service based on whatever comes out of goal 1.3 (above) that proves the concept in a way that leaves no doubt about the value or viability of SOA.
2.2. Commercialize and market whatever comes out of this in terms of framework code. OK, this might have to wait for 2009, but it's listed here as a nice-to-have for 2008.
3. Generalize my practice management domain experience.
I have been working on the side for years on a project with my father, who is a Certified Financial Planner, to create a software system for practice management specific to financial planners. This experience has given me a deep appreciation for the productivity issues faced by small practices and I wish to "de-verticalize" it and create a framework of software factories for the just-in-time re-verticalization of it to other kinds of practices.
Again, concretely:
3.1. Create a new .NET framework for creating new practice management solutions. I call it the PMF (or "Practice Management Foundation", in the spirit of Redmond's current naming convention for frameworks). Make sure it uses all the patterns & practices stuff from Microsoft, including Enterprise Library, Guidance Automation Toolkit and Guidance Automation Extensions, and Software Factories.
3.2. Re-write my financial planning system on the PMF.
3.3. Show it off at Tech Ed or some other public venue next year.
That's probably enough technology goals for two or three or four years, but at least they're documented. :)