Fingerprint Scanner Interferes with Media Player Extender

fingerprint

Microsoft has a technology called Media Center Extender that basically allows you to use your XBOX 360 as a media center.  All that’s required is that you have a computer connected to your XBOX over a network with the Media Center software installed (it comes standard with Vista Premier) and turned on.  The XBOX can then be used to play movies and music files located on your harddrive.

I haven’t looked at this much until recently, when I found out about vmcNetFlix.  vmcNetFlix is one of those great ideas.  The developer saw that NetFlix was allowing subscribers to download movies to their desktops, and that Microsoft was allowing people to stream movies to their TV’s through an XBOX, and he put in the final pieces to connect all of this together.  vmcNetFlix has its issues at times, but hey, it’s one guy providing a solution on his own time and it’s free.

Before I could get any of this working, however, I had to get my very sweet HP entertainment laptop to talk to my XBOX, and kept running into the same issues with the XBOX complaining that it could not connect the media center extender to my laptop, despite my repeated attempts to reboot both systems and clear out caches and certificates and blowing on both ends of my ethernet cable for no particular reason except that some guy on some newsgroup told me to.

Finally, based on another internet tip, I uninstalled the nice biometric software that came with my laptop and everything started working.  For whatever reason, every piece of biometric software, which allows you to scan in your fingerprint to identify yourself to the operating system rather than type in a password, interferes with Media Center.  I was using DigitalPersona, but it appears that the problem is not unique to them.

So now the fingerprint scanner on my laptop doesn’t do anything.  This is because it turned out to be a technological bottleneck.  On the other hand, I can now stream movies, including BlueRay movies, to my HD TV anytime I want using free technology built in someone’s basement that removes bottlenecks.  Is it worth it?

Well, yes. Not only can I watch any episode of Buck Rogers in the 25th century whenever I want, but I’ve also got most of the Werner Herzog and Rainer Werner Fassbinder catalogs ready for instant streaming.  That’s hot.  That’s Erin Grey hot.

Beyond Good and Endpoints

beyonder

Two important WCF resources came out last week.  The first is the source code for StockTrader 2.0, Microsoft’s reference app for .NET 3.5 using, in particular, CF and PF.  The download is available here http://msdn.microsoft.com/en-us/netframework/bb499684.aspx.  This is fairly significant since there are not (as far as I have been able to tell) any guidelines generally available on how to build a distributed application using the Communications Foundation.  In the project I am currently working on, we have been trying and stopping as we go, trading frequent emails with various Microsoft insiders to try to find out if what we are doing makes sense (so far it has). 

Now we have the opportunity to compare our app against StockTrader and see where the differences lie.  I’m not sure if this is an artifice or not, but I like being able to take two ideas and decide which one better as I work through an architecture.  This is a necessary exercise in working towards the "right" architecture.  The approach resembles, in some ways, the Mirror of Nature that Richard Rorty made his name on attacking, except that it is concerned with practice rather than with epistemology.  I think that there is a right way to do things of which I am unaware.  To use Don Rumsfeld’s memorable phrase, it is one of the things I know I don’t know.  I then work, through trial and error as well as a comparison of alternatives, towards an intellectual representation of what that correct way of getting things done might be. 

I’ve talked to other developers who feel that speaking about the "right way" to do things is simply a trap we all fall into or, worse, a fiction that serves only to generate artificial conflicts and slow down actual development.  As one developer told me, "There are many arguments on either side of any issue, and we’re not going to be able to resolve here which ones are better, since we come to it with preconceptions and prejudices we can’t get over easily."  While visiting my brother at college once, I attended a lecture in which Alan Dershowitz, the civil rights lawyer, argued very much the same case.  He insisted that he could go about seven levels behind any argument, and then seven levels behind the case against him.  The peeling of levels (usually it only takes two or three) gives the false impression that we are actually getting to the bottom of things, whereas Dershowitz himself had reached the point in his career where he felt it was merely an exercise in cleverness for lawyers and for philosophers an exercise in futility.

This may all be true, and yet I feel I need this fiction, if it is a fiction, in order to do my job well.

The second important release this week is Juval Lowy’s presention on WCF: Beyond the Endpoints (you will need to have Microsoft Live Meeting installed to listen to it).  In this presentation you will come to realize what many people already know: Mr. Lowy is either a genius or a madman, and had he lived in another era, he would have made a good Jules Verne villain.  Based on his WCF book, I had taken his position to be that CF solves many distributed programming problems, and in the big picture serves as the fulfillment (or successor) to component based programming — the notion that based upon common and established conventions we can pass messages between disparate technologies.

In Beyond the Endpoints, Mr. Lowy tops even those grand pronouncements.  Here he argues that CF is actually the successor to all of our current .NET programming conventions in C# and VB.NET, and is in fact a new programming model.  With specific examples from the Singleton pattern to class level isolation, he demonstrates various low level ways in which WCF provides better ways to do our most common programming tasks.  He makes clear in the Q&A session afterwards that he basically sees something in CF that even Microsoft doesn’t see in their technology.  His vision for WCF veers wildly away from Microsoft’s vision.  When asked what the performance penalty for using CF as a programming model would be, he insists that sending messages over a wire in WCF is actually faster than working with traditional in-proc objects (given certain unspecified conditions).  Moreover, the performance cost is irrelevant.  Mr. Lowy appeals to history in order to explain his vision for CF.  COM, for instance, started off as simply a way to embed files inside of Microsoft Word documents.  In order to get Object Linking and Embedding to work, however, Microsoft’s engineers were oblige to solve fundamental problems that in turn produced what we now know as COM.  CF, for Juval Lowy, is headed very much along the same track.

It is a truly amazing presentation, ambitious in scope and broad in vision, and I highly recommend it to anyone interested in the inherent potential of the Communications Foundation.

PBS Sprout and The Hated

caillou bob

So this is how I start the day when I work from home.  I wake up at 5 in the morning, after which I have about 3 hours before anyone else is up.  At 8, the kids start filtering down from upstairs, so I turn PBS Sprout on for them and move from the living room to my office.  PBS Sprout is PBS’s lineup of children’s shows, and our cable provider gives us On Demand access to the episodes, which allows the kids to watch their shows without commercials (oh yes, PBS does have commercials).  My children (at least the youngest) has a fondness for a bald toddler named Caillou.  According to the official site, "the Caillou website and television series features everyday experiences and events that resonate with all children."   I think most parents find him a bit disturbing — but not as disturbing as Teletubbies, of course.

Before Caillou came on today there was a brief intro for PBS Sprout, and in the background was an interesting rendition of Bob Marley’s Three Little Birds which brought back a flood of memories.  The version of the song played by PBS Sprout is by Elizabeth Mitchell.  No, not that Elizabeth Mitchell.  This Elizabeth Mitchell.

Elizabeth Mitchell is married to Daniel Littleton, and in fact Daniel and their son perform on that particular Marley track.  Dan Littleton, in turn, used to play in a punk rock band in Annapolis, Maryland where I went to college.  For my first few years on campus, I used to find chalk drawings all over the sidewalks of Annapolis of The Hated without knowing what it meant.  Then Dan Littleton ended up going to my college (he was a faculty brat, after all) and it all became clear.

Not only that, but I used to hang out with Mark Fisher, who had played guitar and vocals for The Hated, though by the time I met him he was wearing tweed jackets and translating Greek (I think I did the Philoctetes with him), so I never suspected.

And mutatis mutandis, now not only has Bob Marley been gentrified for daytime cartoons, but the founder of The Hated has helped to make it possible.  Is this what middle-age feels like? 

Hear for yourself.

Bob Marley and the Wailers 

Elizabeth Mitchell and family

Software Development and the Occult

mrwizard

Sergey Barskiy, a colleague at Magenic, likes to say that there is no magic in software development.  There’s only hard work.

Every few months, another software management process is promoted, a new tool is developed, or a new snowclone, "X-driven development", is coined to make software developers more productive, and in general they all promote themselves as the magic that will radically change the way we deliver software, and in general they don’t really pan out.  Instead we just end up with different schools of software development.  Physiology, metoposcopy, chiromancy, theurgia, goetia, necromancy, cabalie, geomancy, hydromancy, aeromancy, prymancy and suffumigations — does one method really provide a better way to deliver software than another?  Or should we simply pick the techniques that work best for us and stick with them?  What is ultimately disappointing, and this is at the heart of Sergey’s rule, is that once one immerses oneself in any of these techniques, one discovers, like a teenage goth working through Alaister Crowley’s Magick, Liber ABA, that things don’t ever go quite quite according to plan.

But does this mean there is no magic?  Perhaps we are looking in the wrong place. 

Last Friday, on June 6th, Microsoft released the beta 2 of Silverlight 2.  Almost immediately, several prominent bloggers published entries not only about the release, but also full code samples demonstrating how to use the new release.  Scott Guthrie, Jeff Wilcox, Kirupa Chinnathambi, Brad Abrams and Ashish Shetty all had immediate posts (Mr. Shetty’s was actually a day early), but this is to be expected as they are all Microsoft employees closely associated with Silverlight.

More impressively, non-Microsoft employees like Shawn Wildermuth, Peter McGrattan, Walt Ritscher and several others had immediate code to publish around this release.  No amount of hard work can make that possible. 

What is the occult, after all, but something hidden?  Even for people who once believed in such things, metoposcopy, geomancy and chiromancy were simply techniques for dealing with the hidden world not commonly understood.  Along with alchemy and astrology, cryptography was once considered one of the areas of expertise of a renaissance magus.  Both Johannes Trithemius and Giambattista Della Porta wrote about it.  What made cryptography go so well with other fields such as necromancy and hydromancy is that its secrets were possessed only by the few, and knowledge of it helped preserve one’s monopoly on secret knowledge.

Software development is full of secrets.  Developers call what they do "coding", for no obvious reason other than that it is generally incomprehensible to anyone but a fellow initiate of a particular coding language.  The code, in turn, is a set of instructions which must be translated into another code, assembly, the mystical language of all our virtual worlds, which is actually incomprehensible to nearly everyone.

Dame Francis Yates called this kind of magic "practical" magic.  It is simply a way of getting things done.  Whether one instructs a demon to sour one’s neighbor’s milk, or uses chemicals to acidify it, the effect is basically the same — all that differs is the particular technique one employs to accomplish one’s goal.  One is clearly going to be more effective than the other, but the difference between the occult and the mundane surely does not turn on mere efficacy. 

The other kind of magic is a "spiritual" magic, which is a different sort of secret.  In a chapter entitled "113" in Umberto Eco’s Foucault’s Pendulum, Eco quotes from Ja?far al-?adiq, the sixth Imam:

"Our cause is a secret within a secret, a secret that only another secret can explain; it is a secret about a secret that is veiled by a secret."

Spiritual magic, in this case, is the way one gains influence by either having special access to secrets, or by appearing to have such access.  One begins to be an initiate into its mysteries simply by recognizing that it exists.  In his history of Secret Societies, Arkon Daraul describes an actual case of a young man becoming a Sufi:

"His first contact with a Sufi was when he was working as a part-time assistant in a restaurant.  Here he noticed a man among the customers who always seemed ‘on top of every situation.  His methods of discussion with the people who came into the place were so controlled, and his perception, especially of atmosphere, so profound, that I plucked up enough courage to ask him how one did it.’"

The initiate is then tested for suitability, and finally takes the oaths required of him to learn more of the Sufi way.  Ahmad Yasawi, a thirteenth century Sufi, laid down rules for initiates, of which the seventh is possibly the most important.

"Utter silence of secrets is my oath; and I will show respect for those who are set up over me, without quibble.  I am the friend of the friends of the Order and the Murshid who exemplifies it; the enemy of the enemies of the same."

Today this would perhaps be called an NDA.  The rituals change over time, but the patterns are always recognizable.

The patterns of success are imprinted upon the human mind and its shape appears again and again throughout history.  Secret societies exist in every field, whether we recognize them as such or not.  I do not claim that Microsoft has such a structure, nor do I deny it.  I only suggest that if there is any magic in software development, this is where you will find it.

Extending the Ajax Control Toolkit Tab Container with Lazy Loading

multi-tabs

 

download source code

ASP.NET has been missing a good, free tab control for a long time.  With the ACT Tab Container, we were finally given one.  It typically runs in client-side only mode, but can interact with server-code if we set its AutoPostback property to true.

Compared to what we had before, it is a huge improvement.  The peculiar thing about it, however, is that it isn’t actually an Ajax control.  It doesn’t use asynchronous postbacks or web service calls to talk to the server — instead you just have these two mode: run it using client script only, or run it using server-side events and code-behind only.

So a few months ago I rectified this for a project, and only found out afterwards that Matt Berseth had already outlined the technique on his blog.  You basically run the tab container in client-side mode, and add update panels to the tab panels that you want to be ajaxy.  You then hook up the client-side ActivePageChanged event in such a way that it spoofs the Update Panel contained in the tab, causing an asynchronous (or partial) postback.

Matt also gave this technique a cool name.  He called it ‘lazy loading the tab panel’.  Like lazy loading in OOP, using this technique the update panels inside each tab panel only do something when its tab is selected.  Information is loaded only when its needed, and not before.

I must admit that I hold some resentment against Matt for coming up with this first, and for coming up with the cool moniker for it.  On the other hand, the solution I came up with encapsulates all of the javascript needed for this into a nice simple extender control that you can drop on your page, which his does not, and I’m rather proud of this.

The VS 2008 project for this extender is linked at the top of this post.  To use it, you need to compile the project and add the compiled assembly to your project, or else just add the project to your solution and add a project reference.

1. Drop the TabContainerExtender control into your page.

2. Set the Extender’s TargetControlID property to your TabContainer’s ID.

3. In the RegisterUpdatePanels element of the Extender, map your tabs to your update panels.  This mapping tells the extender which Update Panels to activate when each tab is selected.

Your markup will look something like this:

    <cc2:TabContainerExtender ID="TabContainerExtender1" 
    runat="server" 
    TargetControlID="TabContainer1" OnActiveTabChanged="ActiveTabChanged">
    <RegisterUpdatePanels>
    <cc2:UpdatePanelInfo TabIndex="0" UpdatePanelID="UpdatePanel1" />
    <cc2:UpdatePanelInfo TabIndex="1" UpdatePanelID="UpdatePanel2" />
    <cc2:UpdatePanelInfo TabIndex="2" UpdatePanelID="UpdatePanel3" />
    </RegisterUpdatePanels>
    </cc2:TabContainerExtender> 

4. If you want to add some code-behind to your active tab changed event, add set the OnActiveTabChanged property of the Extender to the name of your handler.  The thrown event will pass the correct Index number for the active Tab, as well as the ID of the mapped Update Panel.  The handler’s signature looks like this:

        protected void ActiveTabChanged(int index, string panelID)

        {

            …

        }

I highly encourage you to read Matt Berseth’s blog entry (which I have to admit is pretty good) to get a clear idea of the techniques being applied in this ajax extender.  If you just need a quick solution, however, feel free to download this code from the link at the top and use it any way you like with no strings attached.  There is a sample project attached to the solution that will demonstrate how to use the Tab Container Extender, in case you run into any problems with lazy loading your panels.

For reference, here is the code for the sample implementation, which loads controls on the fly based on the tab selected:

    <cc1:TabContainer ID="TabContainer1" runat="server">
    <cc1:TabPanel ID="TabPanel1" runat="server" HeaderText="Tab Panel 1">
    <ContentTemplate>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
        Content 1 ...
        <br />
            <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>      
        </ContentTemplate>
        </asp:UpdatePanel>    
    </ContentTemplate>
    </cc1:TabPanel>
        <cc1:TabPanel ID="TabPanel2" runat="server" HeaderText="Tab Panel 2">
    <ContentTemplate>
        <asp:UpdatePanel ID="UpdatePanel2" runat="server">
        <ContentTemplate>
        Content 2 ...
        <br />
            <asp:PlaceHolder ID="PlaceHolder2" runat="server"></asp:PlaceHolder>      
        </ContentTemplate>
        </asp:UpdatePanel>    
    </ContentTemplate>
    </cc1:TabPanel>
        <cc1:TabPanel ID="TabPanel3" runat="server" HeaderText="Tab Panel 3">
    <ContentTemplate>
        <asp:UpdatePanel ID="UpdatePanel3" runat="server">
        <ContentTemplate>
        Content 3 ...
        <br />
            <asp:PlaceHolder ID="PlaceHolder3" runat="server"></asp:PlaceHolder>      
        </ContentTemplate>
        </asp:UpdatePanel>    
    </ContentTemplate>
    </cc1:TabPanel>
    </cc1:TabContainer>
    <cc2:TabContainerExtender ID="TabContainerExtender1" 
    runat="server" 
    TargetControlID="TabContainer1" OnActiveTabChanged="ActiveTabChanged">
    <RegisterUpdatePanels>
    <cc2:UpdatePanelInfo TabIndex="0" UpdatePanelID="UpdatePanel1" />
    <cc2:UpdatePanelInfo TabIndex="1" UpdatePanelID="UpdatePanel2" />
    <cc2:UpdatePanelInfo TabIndex="2" UpdatePanelID="UpdatePanel3" />
    </RegisterUpdatePanels>
    </cc2:TabContainerExtender> 

Post hoc, ergo melius hoc

FashionLady

I’m just doing my bit to propagate this viral Latin phrase.  Roughly translated, it means "Newer, therefore better."  It doesn’t appear to have ever been spoken by a citizen of the empire, but rather by Latin scholars in other periods.  There is an obvious and intentional irony in this, since those using this phrase are appealing to the authority of the archaic, the notion that what is older and more obscure is inherently wiser, as they make the claim.  Ergo, it would seem, the phrase is always used ironically.  (An interesting blog-spanning discussion of this phrase can be found here, here, and here.)  Personally, I like it even better in French: Après cela, donc meilleur que cela, due to a predisposition to believe that everything is always better in French, for instance Poe and Bukowski — not that my French is any better than my Latin, which is undoubtedly why I cleave to this peculiar prejudice.

In technology, however, this motto should perhaps be taken at face value.  The beta release of a product is always better than the alpha, the RTM is better than the beta, and the first service pack is generally the first stable release of the product.  Unlike in previous eras, our concept of technology has the notion of progress built into it.  This makes everyone in technology a bit of a trend follower, trying to keep on top of the newest technologies and trying to anticipate what will succeed (Entity Framework) and what will not (Linq to SQL).  Once one begins speaking of trends in technology, however, we naturally undermine the notion of progress a bit, and instead are led back to Descartes’ observation about fashion:

…[J]usques aux modes de nos habits, la même chose qui nous a plu il y a dix ans, et qui nous plaira peut-être encore avant dix ans, nous semble maintenant extravagante et ridicule.

To some extent this is a valid point.  Isn’t SOA simply a return to the type of functional programming that used to be done for mainframes and dummy terminals?  Just because Silverlight is the hottest newest thing in Microsoft development, is this a reason for everyone to jump onto the Silverlight band wagon?  Must we always chase after the shiniest piece of tinsel?

Of course we must.  Those who have been in this profession much longer than I have, who have made the leap from mainframe programming to object-oriented programming to service-oriented programming, who have gone from client-server to n-tier to distributed programming with WCF, have learned that it is better to take a descriptivist view on the phenomenology of progress rather than a prescriptivist view.  Isn’t this the secret to understanding Darwinian evolution — that it is based on a tautology?  Survival of the fittest determines what exists and what does not; existence, in turn, determines what is fit.  Post hoc, ergo est (et non est hoc).

Perhaps this is the most unfortunate aspect of technological progress.  It robs us of our sense of irony.

Speaking of Legitimation Crises …

conan

In a literary blog I like to follow called The Valve, a recent post asks why the world of public intellectuals is now dominated by scientists like Richard Dawkins and Steven Pinker rather than by literary critics.

"The culture wars so damaged literature as a source of cultural authority that literary intellectuals lost the public stage. They were replaced by scientific popularizers such as Steven Jay Gould, Richard Dawkins, and Steven Pinker – cf. literary agent John Brockman on the third culture. In this climate of opinion, it is not enough to return to evaluative criticism.

"My own dog in this fight is a general academic rehabilitation of normativity (so-called), and not just in literature, as well as a return to generalism, by which I mean “writing for a well-informed non-specialist audience” (and by which I do not mean “writing for stupid,uneducated people who will never really understand the sophisticated stuff we do.")

"This would involved the renunciation of the positivist dream of grounding everything on Science and Truth. It would be a less resolvable, more plural discourse. "

Perhaps it is appropriate that the question of why we don’t pay more attention to literary theorists would only occur to other literary theorists.  At the same time, it raises the question of why other professionals don’t attempt to grab for this particular ring of public legitimization.  Pundits on TV, not surprisingly, are pulled from the pool of people who decide early in their careers that rather than actually making policy, they want to talk about it.  Moreover, they have decided that rather than taking the somewhat more "legitimate" tack of going into print journalism, they want to do it in the most mediocre medium available — television.  It actually pays off, since in this case, to paraphrase Marshall MacLuhan, the medium is the messenger.

But my purpose here is not to shoot the messenger.  It is rather to wonder why other professionals don’t feel this entitlement to speak for others over matters concerning which they have no expertise.  Tech people certainly feel they have more insight into policy and long-term planning given their unique vantage point upon the ways technology transforms the workplace as well as our very sense of time.  Why don’t they chomp at the bit and demand that people pay more attention to them?  Doctors, more than any other profession, take for granted their God-like role in determining who lives and who dies based on their insurance coverage.  Should they not be afforded the opportunity to make oracular pronouncements about the health of the nation?  Lawyers recognize that the only truth is the truth they are able to argue before an appropriate audience.  Shall they be given the chance to argue before the citizenry?

Yet it is only the lit crit folk– those peculiar scholars who work in the butt cracks of philosophy — that feel an entitlement about making public declamations.  Moreover, they are in the unusual position of feeling that somehow this entitlement has been taken away from them.  How did this ever happen?

Impedance Mismatch

impedance_mismatch

Impedance mismatch is a concept from electronics that is gaining some mindshare as an IT metaphor.  It occupies the same social space that cognitive dissonance once did, and works in pretty much the same way to describe any sort of discontinuity.  It is currently being used in IT to describe the difficulty inherent in mapping relational structures, such as relational databases, to object structures common in OOP.  It is shorthand for a circumstance in which two things don’t fit.

Broadening the metaphor a bit, here is my impedance mismatch.  I like reading philosophy.  Unfortunately, I also like reading comic books.  I’m not a full-blown collector or anything.  I pick up comics from the library, and occasionally just sit in the bookstore and catch up on certain franchises I like.  I guess that in the comic book world, I’m the equivalent of someone who only drinks after sun-down or only smokes when someone hands him a cigarette, but never actually buys a pack himself.  A parasite, yes, but not an addict.

The impedance mismatch comes from the sense that I shouldn’t waste time reading comics.  They do not inhabit the same mental world that the other things I like to read do. I often sit thinking that I ought be reading Schopenhauer, with whom I am remarkably unfamiliar for a thirty-something, or at least reading through Justin Smith’s new book on WCF Programming, but instead find myself reading an Astro City graphic novel because Rocky Lhotka recommended it to me.  The problem is not that I feel any sort of bad faith about reading comic books when I ought to be reading something more mature.  Rather, I fear that I am actually being true to myself.

A passage from the most recent New Yorker in an article by Jonathan Rosen nicely illustrates this sort of impedance mismatch:

Sometime in 1638, John Milton visited Galileo Galilei in Florence. The great astronomer was old and blind and under house arrest, confined by order of the Inquisition, which had forced him to recant his belief that the earth revolves around the sun, as formulated in his “Dialogue Concerning the Two Chief World Systems.” Milton was thirty years old—his own blindness, his own arrest, and his own cosmological epic, “Paradise Lost,” all lay before him. But the encounter left a deep imprint on him. It crept into “Paradise Lost,” where Satan’s shield looks like the moon seen through Galileo’s telescope, and in Milton’s great defense of free speech, “Areopagitica,” Milton recalls his visit to Galileo and warns that England will buckle under inquisitorial forces if it bows to censorship, “an undeserved thraldom upon learning.”

Beyond the sheer pleasure of picturing the encounter—it’s like those comic-book specials in which Superman meets Batman—there’s something strange about imagining these two figures inhabiting the same age.

Authority as Anti-Pattern

authority

There has been a recent spate of posts about authority in the world of software development, with some prominent software bloggers denying that they are authorities.  They prefer to be thought of as intense amateurs.

I worked backwards to this problematic of authority starting with Jesse Liberty.  Liberty writes reference books on C# and ASP.NET, so he must be an authority, right?  And if he’s not an authority, why should I read his books?  This led to  Scott Hanselman, to Alastair Rankine and finally to Jeff Atwood at CodingHorror.com.

The story, so far, goes like this.  Alastair Rankine posts that Jeff Atwood has jumped the shark on his blog by setting himself up as some sort of authority.  Atwood denies that he is any sort of authority, and tries to cling to his amateur status like a Soviet-era Olympic poll vaulter.  Scott Hanselman chimes in to insist that he is also merely an amateur, and Jesse Liberty (who is currently repackaging himself from being a C# guru to a Silverlight guru) does an h/t to Hanselman’s post.  Hanselman also channels Martin Fowler, saying that he is sure Fowler would also claim amateur status.

Why all this suspicion of authority?

The plot thickens, since Jeff Atwood’s apologia, upon being accused by Rankine of acting like an authority, is that indeed he is merely "acting". 

"It troubles me greatly to hear that people see me as an expert or an authority…

"I suppose it’s also an issue of personal style. To me, writing without a strong voice, writing filled with second guessing and disclaimers, is tedious and difficult to slog through. I go out of my way to write in a strong voice because it’s more effective. But whenever I post in a strong voice, it is also an implied invitation to a discussion, a discussion where I often change my opinion and invariably learn a great deal about the topic at hand. I believe in the principle of strong opinions, weakly held…"

To sum up, Atwood isn’t a real authority, but he plays one on the Internet.

Here’s the flip side to all of this.  Liberty, Hanselman, Atwood, Fowler, et. al. have made great contributions to software programming.  They write good stuff, not only in the sense of being entertaining, but also in the sense that they shape the software development "community" and how software developers — from architects down to lowly code monkeys — think about coding and think about the correct way to code.  In any other profession, this is the very definition of "authority".

In literary theory, this is known as authorial angst.  It occurs when an author doesn’t believe in his own project.  He does what he can, and throws it out to the world.  If his work achieves success, he is glad for it, but takes it as a chance windfall, rather than any sort of validation of his own talents.  Ultimately, success is a bit perplexing, since there are so many better authors who never achieved success in their own times, like Celine or Melville.

One of my favorite examples of this occurs early in Jean-Francois Lyotard’s The Postmodern Condition in which he writes that he knows the book will be very successful, if only because of the title and his reputation, but …  The most famous declaration of authorial angst is found in Mark Twain’s notice inserted into The Adventures of Huckleberry Finn:

"Persons attempting to find a motive in this narrative will be prosecuted; persons attempting to find a moral in it will be banished; persons attempting to find a plot in it will be shot."

In Jeff Atwood’s case, the authority angst seems to take the following form: Jeff may talk like an authority, and you may take him for an authority, but he does not consider himself one.  If treating him like an authority helps you, then that’s all well and good.  And if it raises money for him, then that’s all well and good, too.  But don’t use his perceived authority as a way to impugn his character or to discredit him.  He never claimed to be one.  Other people are doing that.

[The French existentialists are responsible for translating Heidegger’s term angst as ennui, by the way, which has a rather different connotation (N is for Neville who died of ennui).  In a French translation class I took in college, we were obliged to try to translate ennui, which I did rather imprecisely as "boredom".  A fellow student translated it as "angst", for which the seminar tutor accused her of tossing the task of translation over the Maginot line.  We finally determined that the term is untranslatable.  Good times.]

The problem these authorities have with authority may be due to the fact that authority is a role.  In Alasdaire MacIntyre’s After Virtue, a powerful critique of what he considers to be the predominant ethical philosophy of modern times, Emotivism, MacIntyre argues that the main characteristics (in Shaftesbury’s sense) of modernity are the Aesthete, the Manager and the Therapist.  The aesthete replaces morals as an end with a love of patterns as an end.  The manager eschews morals for competence.  The therapist overcomes morals by validating our choices, whatever they may be.  These characters are made possible by the notion of expertise, which MacIntyre claims is a relatively modern invention.

"Private corporations similarly justify their activities by referring to their possession of similar resources of competence.  Expertise becomes a commodity for which rival state agencies and rival private corporations compete.  Civil servants and managers alike justify themselves and their claims to authority, power and money by invoking their own competence as scientific managers of social change.  Thus there emerges an ideology which finds its classical form of expression in a pre-existing sociological theory, Weber’s theory of bureaucracy."

To become an authority, one must begin behaving like an authority.  Some tech authors such as Jeffrey Richter and Juval Lowy actually do this very well.  But sacrifices have to be made in order to be an authority, and it may be that this is what the anti-authoritarians of the tech world are rebelling against.  When one becomes an authority, one must begin to behave differently.  One is expected to have a certain realm of competence, and when one acts authoritatively, one imparts this sense of confidence to others: to developers, as well as the managers who must oversee developers and justify their activities to upper management.

Upper management is already always a bit suspicious of the software craft.  They tolerate certain behaviors in their IT staff based on the assumption that they can get things done, and every time a software project fails, they justifiably feel like they are being hoodwinked.  How would they feel about this trust relationship if they found out that one of the figures their developers are holding up as an authority figure is writing this:

"None of us (in software) really knows what we’re doing. Buildings have been built for thousands of years and software has been an art/science for um, significantly less (yes, math has been around longer, but you know.) We just know what’s worked for us in the past."

This resistance to putting on the role of authority is understandable.  Once one puts on the hoary robes required of an authority figure, one can no longer be oneself anymore, or at least not the self one was before.  Patrick O’Brien describes this emotion perfectly as he has Jack Aubrey take command of his first ship in Master and Commander.

"As he rowed back to the shore, pulled by his own boat’s crew in white duck and straw hats with Sophie embroidered on the ribbon, a solemn midshipman silent beside him in the sternsheets, he realized the nature of this feeling.  He was no longer one of ‘us’: he was ‘they’.  Indeed, he was the immediately-present incarnation of ‘them’.  In his tour of the brig he had been surrounded with deference — a respect different in kind from that accorded to a lieutenant, different in kind from that accorded to a fellow human being: it had surrounded him like a glass bell, quite shutting him off from the ship’s company; and on his leaving the Sophie had let out a quiet sigh of relief, the sigh he knew so well: ‘Jehovah is no longer with us.’

"It is the price that has to be paid,’ he reflected."

It is the price to be paid not only in the Royal Navy during the age of wood and canvas, but also in established modern professions such as architecture and medicine.  All doctors wince at recalling the first time they were called "doctor" while they interned.  They do not feel they have the right to wear the title, much less be consulted over a patient’s welfare.  They feel intensely that this is a bit of a sham, and the feeling never completely leaves them.  Throughout their careers, they are asked to make judgments that affect the health, and often even the lives, of their patients — all the time knowing that their’s is a human profession, and that mistakes get made.  Every doctor bears the burden of eventually killing a patient due to a bad diagnosis or a bad prescription or simply through lack of judgment.  Yet bear it they must, because gaining the confidence of the patient is also essential to the patient’s welfare, and the world would likely be a sorrier place if people didn’t trust doctors.

So here’s one possible analysis: the authorities of the software engineering profession need to man up and simply be authorities.  Of course there is bad faith involved in doing so.  Of course there will be criticism that they frauds.  Of course they will be obliged to give up some of the ways they relate to fellow developers once they do so.  This is true in every profession.  At the same time every profession needs its authorities.  Authority holds a profession together, and it is what distinguishes a profession from mere labor.  The gravitational center of any profession is the notion that there are ways things are done, and there are people who know what those ways are.  Without this perception, any profession will fall apart, and we will indeed be merely playaz taking advantage of middle management and making promises we cannot fulfill.  Expertise, ironically, explains and justifies our failures, because we are able to interpret failure as a lack of this expertise.  We then drive ourselves to be better.  Without the perception that there are authorities out there, muddling and mediocrity become the norm, and we begin to believe that not only can we not do better, but we aren’t even expected to.

This is a traditionalist analysis.  I have another possibility, however, which can only be confirmed through the passage of time.  Perhaps the anti-authoritarian impulse of these crypto-authorities is a revolutionary legacy of the soixantes-huitards.  From Guy Sorman’s essay about May ’68, whose fortieth anniversary passed unnoticed:

"What did it mean to be 20 in May ’68? First and foremost, it meant rejecting all forms of authority—teachers, parents, bosses, those who governed, the older generation. Apart from a few personal targets—General Charles de Gaulle and the pope—we directed our recriminations against the abstract principle of authority and those who legitimized it. Political parties, the state (personified by the grandfatherly figure of de Gaulle), the army, the unions, the church, the university: all were put in the dock."

Just because things have been done one way in the past doesn’t mean this is the only way.  Just because authority and professionalism are intertwined in every other profession, and perhaps can longer be unraveled at this point, doesn’t mean we can’t try to do things differently in a young profession like software engineering.  Is it possible to build a profession around a sense of community, rather than the restraint of authority?

I once read a book of anecdotes about the 60’s, one of which recounts a dispute between two groups of people in the inner city.  The argument is about to come to blows when someone suggests calling the police.  This sobers everyone up, and with cries of "No pigs, no pigs" the disputants resolve their differences amicably.  The spirit that inspired this scene, this spirit of authority as anti-pattern, is no longer so ubiquitous, and one cannot really imagine civil disputes being resolved in such a way anymore.  Still, the notion of a community without authority figures is a seductive one, and it may even be doable within a well-educated community such as the web-based world of software developers.  Perhaps it is worth trying.  The only thing that concerns me is how we are to maintain the confidence of management as we run our social experiment.