Early this year I posted on some of the things that I wanted to concentrate on during 2007. Like any good iteration, I feel the need to wrap it up with a retrospective. Here are the things that I wanted to get done and how I felt I did on them.
1) I will set aside time to review code that I wrote in past years. Well, I didn't do a lot of this, but it did happen. I didn't dig back into the archives more than 2 or 3 years as those projects seemed to show enough change to really make me think about what I had done, was doing and where it was taking me.
2) I will work to provide a positive career experience for myself. When I wrote the list at the start of 2007 I was mired in a project that was sucking the inspiration, desire and energy out of me. As a result I was very conscious of how my daily work was affecting both my career future and my non-work time. Unfortunately that contract lasted for a full 9 months of the 2007 year, which made it hard to fully implement this point. One of the things that really helped me bring the passion back to the surface was getting out into the community. I now know that travelling around and talking to developers in different regions can really inspire. During the year I both attended conferences and spoke at events. Both provided me with the energy equally. I definitely won't let the human interaction stop during the coming years.
3) I will make sure to take the time to enjoy my life. Finding a way to create and maintain a good work-life balance is always tough, no matter what the industry you work in. I haven't done so well with this, but it is getting better. One of the things that I really made a point of doing was spending a couple of days on both sides of a conference/trip for personal fun. Sometimes it was good to get out and see the city, other times I hooked up with other people who from the events that were doing the same and we got a little too geeky. My evening socializing still hasn't balanced quite the way I want. It doesn't interfere with work, but I find that I spend too much time out socially talking about tech stuff. Something to work on for the next year.
4) I will work on a comprehensive training plan. Although I don't have a formally written training plan, I am constantly moving forward with learning new things. I'm also finding that I'm pushing myself harder than ever to do as much of it as possible. Amazingly I'm not seeing a tendency towards being unfocussed and scattered.
The rest of the year was brilliant from a professional standpoint. Coming out of the depressing contract I moved forward into a contract that has me working with .NET 3.5, WCF, nHibernate, Windsor and some other things. Behind the scenes I've been working on a couple of other things that will hopefully get announced in the next few months. They are very exciting for me and will see my career make some slight changes when they happen.
One of the biggest things that I took out of the year was the foundational tenets of the Alt.NET movement and of those, constantly challenging my assumptions is one that I'm working to live by. I think that it will change everything that I do in the coming year. I will still be working on developing my career through the year, but I think that I will be approaching each task that I take on in a way that I've never done before.
While we were down in Austin at the Alt.NET Open Spaces conference people suggested the use of a newsgroup to maintain conversations that we had started. Running on a euphoric high from the session on DDD (or maybe it was something that I caught from passing around the 'putty stick') I signed up. Looking back, I don't think that I had high expectations. I only expected what was announced; a place for conversations to continue. That said, my experience in Austin also showed me that there were so many truly passionate people with different thoughts and ideas on any one of the topics that I should expect many new conversations to start. I also expected a lot of people to argue intensely, but with the same level of respect and constructiveness that I'd seen in every session I attended that early October weekend.
If you've been following the newsgroups on Yahoo Groups (or the one lonely one over at Google Groups) you know that there is a small chasm between what is going on in those places and what I wrote. In the last three months there have been more threads on noise topics than there have been on continuing or extending conversations from Austin. The conversations regularly range from "Why is this group named <insert name here>?" to "Why are you trying to leave me out?". Occasionally there are meaningful threads, but it is rare.
The one that set me off today personally attacked the credibility of one of the most passionate developers that I've ever spoken to. Once a group of people unravels itself to this level, I know that I've stuck around for far too long. Whether I agree or disagree with the statements that people make is irrelevant. Mob mentality just isn't for me.
The movement in the .NET world (call it what you want, I'm not going to play the name game here, that can stay in the groups) that has been making headway in the last couple of years is one that I really believe in. Unlike so many people, I don't feel the need to be involved in the formation of the master plan. I don't need to know that my name is associated with the start of the formal movement (or whatever the people in the groups want to call it).
Instead I want to spend my energy improving my software development skill set and let that take me where it may. That journey is going to involve me working at pushing the boundaries of the languages that I choose to work with (English included) both on my own and by trying to understand and learn from the exploration that others are taking. For me that was one of the foundational concepts that I brought home from Austin. Never stop learning. Never stop exploring. Never stop pushing the boundaries. Never stop challenging your current assumptions.
If reading these groups were one of my projects I would be finding the friction to much and I'd be looking to make things work smoother. I don't see a way to reduce the friction. Since I'm no longer getting those four core needs filled from these newsgroups, I'm turning them off. At some point in the future I'll probably take a look at them again to see if the content has changed, but based on the last few months I just don't see it happening any time soon.
This was originally posted at www.victoriacodecamp.com/blog. I'll be out in Victoria on January 26th 2008 speaking on Parachuting Into Brownfield Applications and on C# 3.0 Beyond Linq.
A common term in software development is 'greenfield'. The term is commonly used to describe a project that is starting completely from scratch and thus having no existing code base. Recently I have been searching for a term that is capable of describing the opposite of greenfield. One of the terms that is often used to describe code that exists is 'legacy'. Unfortunately the term 'legacy' has connotations that lead people to think about applications that have out lived the life of the technology that they were implemented with and no longer are being actively developed. For some people this will make them think of mainframe, green screen, COBOL, FORTRAN and other technologies. Because our minds tend to sway to distant applications and technologies like this, we create a gap between greenfield and legacy where the technology is either relevant, or nearly relevant, and the application is under active development.
Applications like this are something that we regularly see in the industry. More often than not, when you're hired onto a project, either as an employee or a contractor/consultant, you will be stepping into a project that is already under development. How do you decribe that project to your mates? It's certainly not greenfield and if you mention 'legacy' people will ask you how you ended up working on mainframes. Neither do the situation justice.
The term 'brownfield' is not as commonly used in our industry. In fact, I can't find any online references to the term in relation to software development. According to Wikipedia, brownfield is used to define land and reclamation work and can be defined as:
...land previously used for industrial purposes, or certain commercial uses, and that may be contaminated by low concentrations of hazardous waste or pollution and has the potential to be reused once it is cleaned up.
If we translate that into software development it would probably read something like this:
...project or codebase that was previously created and may be infected with poor practices, structure, implementations and moral but has the potential to be revived through comprehensive and directed refactoring.
If that is how we define a brownfield project then we can also say that they are a more common type of project for us to end up working on. If we are working on these types of projects regularly, what are some of the skills that we should have to deal with them? Over the next while I'll be posting more on this topic.
A few months ago some of the members of Edmug made noises that they wanted to work on a project that allowed them to give back to the community (a greater community than just the developer one we know so well). After mentioning this to some people in Microsoft, we were hooked up with a group that was looking for some software to be built and the Kassandra project was born. These folks are teachers and administrators at a school that helps educate people with learning disabilities such as dyslexia. When we were initially connected they were teaching some of their dyslexic students to read using a mixture of symbols, colours and letters.
Until we got involved these good folks were translating entire documents of text into these images by hand. I can't begin to imagine how tedious and time consuming this must have been. We set out, under their guidance, to build some software that would automate the translation process for them. Today marks the first release of that software, Kassandra v0.1.
As a first release it isn't really all that flashy, but it is functional (or at least it is for this tester). The application currently will convert MS Word 97-2003 document from plain text into the symbol text that the students are reading. There are a couple of backlog items (translating MS Excel and PDF) available for us to work on, but I think that we're going to let the users work with this for a few weeks to see if they come up with any changes or enhancements to the current functionality.
I'm starting a new gig right now and one of the sweet things about it is that I'm going to be working in .NET 3.5 straight off the bat. Hopefully I'll have some more time to blog about things to do with the framework and the language over the next number of weeks.
Because of the normal process that most companies seem to have for assimilating new people to a team, I spent a couple of days with no direct network access. Instead of just reading the documentation, I wanted to get some code written so that I could start handing it off to the other team members and training them up on the code architecture that I envision. My only option for writing code was my Visual Studio 2005 .NET 2.0 laptop which handily did the trick. Once I got my network access I quickly moved my source files over to the other machine (actually a VPC) and fired up Visual Studio 2008 to make sure everything was still kosher.
When it compiled on the first try I immediately set out to change some of my initial code to use the basic language features that are new in VS2k8. I went through the DTOs that I'd built and changed all to use the simple property syntax. Again everything compiled just fine. I was on a roll.
For some reason I ended up in the project properties window today and I noticed that the project (one that I'd moved up from VS2k8) was still using .NET 2.0. It's a simple combobox selection to change to .NET 3.0, but it isn't done automatically when the solution conversion routine is run. All projects need to be changed manually. You don't notice that this has happened because VS2k8 has some sweet compiler sugar that allows you to use the new language features in .NET 2.0, 3.0 or 3.5.
When I give my talk on the new language features that are available in VS2k8, I usually give some warning about things like a lack of readability because of the 'var' type or that extension methods are probably going to be over used or used in a dangerous way. I never thought that I'd get pinched by that feature that I have lauded over and over. Apparently poor OO and coding practices aren't the only thing that will be causing people problems when they move their VS2k5 projects up to VS2k8.
Long after the end of DevTeach Vancouver 07 I am wrapping it up. Like Kyle, I have a sense of obligation to do this post. That's not to say that DevTeach wasn't fantastic, but I feel I must report on my observations of the nerd herd.
Observation #1: No matter how temperate Vancouver is, some yahoo from a tropical island will show up and complain that it's freezing. We really should have played "Guess who's jacket Kyle's wearing" through the whole week.
Observation #2: Kyle looks remarkably like Schroeder from Charlie Brown's Christmas, Scott dances like he was part of the original cast and our waitress was a spitting image of Peppermint Patty when she was on the dance floor.
Observation #3: The Mad Mexican loves Beth Massi....enough said.
Observation #4: After attending a few of these conferences, sessions will take a backseat to the information that you can gather while having conversations in the hallways, at lunch or out after the day is over.
Observation #5: Scotch should be drank by itself for the entire night. Adding tequila to the equation part way through does not lead to pretty results.
DevTeach Toronto is just around the corner. Speaker submissions are being accepted and registration will probably open in the next couple months. Some of the things that I've heard indicate that Toronto will be a great conference for content.