Over the weekend I've been doing some work for a long time customer of mine on a project that's very similar to an existing project we built about a year ago. It's funny how things get reused these days.
But here I am looking at a problem that I solved last year (which is not THAT long ago) and now I constantly find myself looking at the old code to see what's salvageable and what should just be rebuild. The app is a custom data service interface that serves XML data to a legacy rich client application and I've built a number of these types of service interfaces in recent years so there are a lot of similarities and code reuse opportunities.
But what's scary is just how much I've 'lost' in the time span in between. I can't remember how the original application works, and I have to dig out my help documents and look at a few of the tests to see what's what. Did I mention it's only been a year?
But as I was plowing through the implementation today I realized just how much time I was spending - uh - 'remembering'. Or rather...what feels more like cheating by going back to the other app and see 'How the hell did I do this". It's not just architectural decisions but even down to specific code snippets or trickyh routines that I had come up with to solve a particular problem. What was the schema I decided to use? How did we optimize the Xml generation etc.
A lot of looking things up things previously done, rather than truly pulling it out of my thick skull spur of the moment. I find myself getting more and more lazy with stuffing things away as part of other projects or work I've done in the past not even making an effort trying to remember it all. And I find myself constantly digging up old code from old projects - or code I posted on my own blog to jog my memory, rather than focusing a little harder to remember. I'm turning into a lazy bum and a packrat trying to keep stuff around for later 'reference'...
Is this what's it like 'getting old'? Is my 'experience' just getting in the way of a healthy active mind? It feels a little like getting senile - and maybe some of that is really kicking in. I'm not 40 anymore after all. Over the hill and all that.
But seriously, I was thinking about this last week as I ran into another one of those posts from some geek putting forth 20 questions to ask at a .NET interview and I found myself thinking - shit, I'd probably fail that interview. Most of the things mentioned I've dealt with before, and with a few minutes notice I can probably dig up the relevant solutions, but cut me off from my computer and my Internet connection I become a bumbling idiot that can't do very much at all.
Just yesterday I was working with a friend of mine who happened to be doing some ADO.NET code with DataSets. Now I've used data sets in the past and still do in a few older projects. I know how to retrieve them through my business layer, but please don't ask me for the 20 lines of code to use a table adapter. I haven't written that code in 5 years probably and that's even though I was using data sets in that time <g>. And that's an easy example.
Do you remember of the top of your head how to use XmlSerializer? How about XmlWriter and writing out attributes on an element? Do you write the attributes before the element or after? Off I go looking at some code I've used with XmlWriter. And right after I go and write out some control level code that outputs Html with HtmlTextWriter? How about now? Write the attributes first or after the open element tag? Can you smell the inconsistencies? (and yes it's the opposite between XmlTextWriter and HtmlTextWriter). Remember XPathNavigator's interface? It's super powerful and efficient API but don't ask me to remember any of it even though I used it a shitload on a project last year to parse OFX documents. Anything about it - I draw a blank. Off to my code cache I go... Just a month ago I worked on XML Signatures. Dug up information forever - needed it again today, and couldn't remember squat beyond the core class (SignedXml) I need to use. Oh yeah and the blog entry that I thankfully wrote about it and that could job my memory.
The thing is, I can feel myself not even trying to remember some information even when a lot of effort went into figuring something out. I actually am relying on a crutch - the electronic crutch - to bail me out. The reality is that there's so much information to absorb these days with all the different technologies I'm juggling that I think for me its the only way to cope. To actively FORGET certain things to keep some room for the things that matter or are more immediately relevant. In a way, it feels like indexing and prioritizing, so instead of keeping the information in my head I remember where I used it, applied it or wrote it up and hope I can remember where to find this reference later. Referencing over storage.
Sure I can remember core language things and the things I use day in and day out. But anything that doesn't get used for a while goes out the window. I have a vague recollection what to do but the concrete implementation escapes me. Instead I have a place holder that points me to another project, maybe a blog entry or a bookmark. And when all else fails - or when I know I haven't touched the subject before - go to the Search Engines.
So, does that count as passing the grade or am I just becoming one of those kids in the class who get caught by Miss Mumsley because I've been writing crib notes into the palm of my hand?
What about you? Are you a spry brainiac who can rattle of .NET APIs, DOM element properties, CSS style tags, RegEx selectors and expression modifiers, jQuery functions and selectors all without breaking a sweat? Or is your head too on overload all the time too using an indexing scheme rather than permanent storage to reference the multitude of data that we all need to be dealing with?
Other Posts you might also like