I’ve always had a terrible memory.
I frequently have to calculate how old I am when asked (versussimply remembering), and I regularly quiz myself on the birthday ofloved ones, trying to pound the information deep into my memorybanks. People’s names only really stick with me after several dozenencounters, and faces aren’t much better. An embarrassing number oftimes I’ve encountered childhood acquaintances and distant (or evennear) family and failed to realize who they were.
It certainly isn’t that I intend to be disrespectful – mybrain just isn’t wired to put information into long term storage onfirst (or second, or third…) encounter, and it punts (or losesthe pointer to) older data. In many cases it’s like afilter on the long term archive simply refuses topersist the information, and less practical information simplynever gets logged away regardless of my consciousopinion about it. For instance I am a longtime fan of theFamily Guy and the Simpsons, but it’s very rare that I can verbatimquote a funny scene, outing me as a poseur to the quote spewinghuman-SNPPs. At most I remembergeneralities (“That episode about all the people coming to lookat the leaves“).
This is just the way my DNA (along with environment) mademe.
I’ve been this way since the beginnings of my memories (ironic,no?). In junior high I remember doing very well in testsbased upon figuring out the algorithms and techniques on demand(e.g. during a critical test) myself. I did this usingheuristics of what I was taught, rather than the more traditionalrote application of literal knowledge. Well, to be honest a part ofit was laziness, but a lot of it was just the way my brain is wiredto learn. I carried this technique on to high school andpost-secondary, and then to every industry certification since. Ithas served me very well.
This fundamental of my thought process carries over tosoftware development as well, which is why I write this here -I am not, and have never been, a walking MSDN Library. Simple terminology for everyday patterns andpractices escape me if they aren’t the sort of thing that onerealistically uses in regular conversations with peers (e.g.outside of the occasional architectural astronaut bravado buzzwordtalk). When quizzed what software development books Ilike most, it is rare when I can name more than one title (and therecollection is usually based upon logical correlations of contentwith likely titles. e.g. “The book about how 9 women can’t makea baby in one month…month…The Mythical Man Month!“), yetI’ve read dozens of software development and process tomes. It’seven less likely that I remember the author (“who wroteTMMM Steve O’Connell No Let me just hit Google…”).
To draw from a more common example, I often get asked”Have you ever…”, based upon my experience in this industry, andI have little to offer on-demand in regards to specifics:I simply do not remember the fringe function calls of projectspast, even if I battled it in a dozen different ways. I consultcomputerized references regularly (MSDN Library, Google, GoogleGroups, and so on), even for everyday library functions andclasses, and maintain archives of old code to remind myself ofsolutions and techniques I discovered previously (e.g. “I solvedsomething similar in a project 3 years ago..let me check thesource”). I even built a from-scratch implementation of AES(the cryptography artist formerly known as Rijndael), and submittedchanges to the reference code, yet I remember absolutely nothingabout that cryptography codebase now that it isn’t pertinent forme.
So given all of this, is the point that I’m like aperpetual newbie, always starting at square one Absolutelynot. Instead of remembering literals and absolutes, I rememberheuristics and mental hints – little brain guideposts that allow meto solve difficult problems in very little time. In code I catalogwhich projects (both those of my own and others) solved particularproblems, and I can quickly reference them and get definitiveanswers (rather than speculative answers). While I’m not the sortof type that can endlessly recite facts and details about esoterickernel calls, I do manage to find exactly the information that Ineed immediately using modern tools (I’ve always been great atmaking search engines sing. One manager many years back was surethat I was hoarding some techniques, because I always managed tofind solutions to vexing problems. The key was that I had enoughmental hints to narrow down to specifically where the solution washidden). My memory technique, coupled with an excellent problemsolving ability, has made me an extremely productive, capabledeveloper and application designer. Let’s say I’m a cheetah, andtools like the MSDN Library and Intellisense are hugely beneficialin my hunting arsenal. I’m a cheetah with a crossbow.
There is another type of developer – let’s call themthe elephant. The elephant remembers everything aboutevery technology, every function call, and exactly how to solvespecific types of problems in a very literal way. The elephant canremember every detail of things that interest them (e.g. Star Trektrivia), and could probably operate fairly effectively withoutany sort of online, or even offline, help. The elephant often makesa very capable developer, and is a very capable complement to anyteams. The elephant functions based upon precedent and a cumulationof literal knowledge.
Of course there are an endless number of points in between, suchas there are with most human traits.
I mention all of this after hearing yet another peerrecounting their experience with a prospective employer.Like many before, they were given an “aptitude” test (becauseyears of experience and a 4-year university degree just don’tdemonstrate much anymore, apparently) where the test was apaper/verbal quiz of select esoteric elements of languages andlibraries.
I just don’t get this.
Are organizations looking to hire an expensive organic versionof manpages Do they really, truly think that this is a logical wayof evaluating skill Are they afraid that all reference materialwill disappear and they’ll be at the forefront of reimplementingmankind’s knowledge?
Come on industry, grow the heck up. Quit these nonsensical andmeaningless tests. Just because someone on your team could think upwhat they think are “clever” questions to trip up prospects doesn’tmean that this is even marginally effective at pruning yourcandidates (you might as well roll dice). Getting developers tocode on paper (when many of them have awkward, barely functioninghandwriting given that they’ve been typing for most of their lives)is just as destructive, despite all of the dubious arguments usedto support it..
I can draw from personal experience as well: Several years backI did an interview with a firm (for a position that I turned down),and I still remember that the answer to one particularly hilariousquestion was the SQL Server function PATINDEX. I’vedesigned and implemented several large scale, very advanceddatabase systems on SQL Server, using the most advanced techniquesand practices. In none of them did I use the function PATINDEX(it’s one of those functions that you’d better have a very goodjustification for using. It largely appears in very poor designs).It’s not that I hadn’t come across it – I had in several tragicdesigns that I was called in to fix – but it certainly wasn’ttop-of-the-mind material. Yet here it was, being used as atest of whether I had an “advanced” knowledge of SQLServer. This is fairly typical nowadays, where candidates willfind their knowledge “tested” by being quizzed about some fringetechnology that the interviewer happened to be working on thatweek.
If you want to assess your candidates, give them arealistic environment – call them in, give them aworkstation, and ask them to solve a particular problem. Let themuse the online resources that they would regularly have available(e.g. no online rooms of experts waiting to help them in theirassessment, unless they can promise to have the same once they’reon fulltime), give them the normal reference material, and let themgo wild. At the end look at what solution they’ve developed. Ifnecessary screen capture their activities (with their knowledge) soyou can see their process. Hire the people who work in the wayyou want. Even better hire the people who yield the results youwant, regardless of their personal techniques.
Of course if you really do operate without reference material,you code on lined paper, and you largely deal in esoterics, thenperhaps you might want to continue with the current norm ofinterviewing.