Those Three Five-Letter Words

Every year at tax time I am reminded of my high school history teacher who had a sign posted above the chalkboard in the front of the classroom that read “Life can be summed up in a series of five-letter words: TOUGH, TAXES, DEATH.” He was a total hardass. And sometimes I actually wonder why I am a pessimist, as if somehow there is no answer to that question. Then I do taxes, and then I’m all “Oh, yeah…”

“The Prince,” Machiavelli

At a recent leadership training held by my company, there was a team dinner where we had to present to another participant a book on leadership that meant something to to us, and give a 3-minute presentation on why. I’ve read very few business advice books in general, so I was kind of stuck. But, I did have to read Machiavelli’s The Prince while in school, and very much enjoyed it. I re-read it, as well as revisited the lecture and notes, and wrote this presentation (3 minutes spoken):

Fortune and luck, and their intertwined relationship, are the two forces Machiavelli is primarily concerned with in “The Prince.” Fortune is about being in control, and luck is about not being in control. To acquire fortune and manage luck, one must play the political game which has three goals: gaining power, maintaining power, and using power. Machiavelli understands fundamentally that leaders do not have an entitlement to power. Leaders have to obtain power through a variety of means, all by leading well through the political game, and are capable of losing power when they lead poorly. Power, according to Machiavelli, is subject to change, and change that is not always in a leader’s control.

To claim Machiavelli is cruel or amoral, that he is using the ends to justify the means simply to maintain power, is dismissive of his actual lessons. Machiavelli argues that while leadership and morality are to be separate considerations from each other at the state level, and one could argue they ought to be tightly coupled, that does not the fact that leadership and its politics are a messy yet necessary game that everyone plays at some level. A good leader will know how best to play that game to earn as much fortune and power as possible, for that is what it means to be an excellent leader in his view of morality and ethics. He states no position on whether this is right or wrong, but simply that everyone is playing the same game with each other, and offering advice on how to be the best leader.

We have to rely on other people to achieve our goals—direct reports, colleagues, executives, vendors, and customers—each of whom have their own goals and politics. While Machiavelli warns against relying on others too much, he clearly understands there is no long term success as a “lone wolf.” Power and leadership mean nothing without people and events to influence. To that end, Machiavelli exemplifies core virtues of what he considers to be excellent leadership, particularly an understanding of foresight and context.

A good leader must have the foresight to predict opportunity (good luck) and problems (bad luck) before they occur. To maintain power and fortune, a good leader must have a grasp of luck if only because bad luck can cause a leader to lose their fortune and power. The more a leader is better able to foresee problems, the better able they can manage luck. Whether good or bad luck faces a leader does not define good leadership in and of itself, but rather how they react to good and bad luck to achieve the goals of the political game defines good leadership. If a leader leads well in the face of either, they maintain their power. If they lead poorly, they lose power and deservedly so.

A good leader must also have a good understanding of when the rules of the political game have changed. Leadership skills that work in one context may not (and likely will not) work in another. A good leader needs to understand that different contexts exist, most of which are outside of a leader’s control, and quickly recognize when the context has changed, if not anticipate it beforehand as they should with good and bad luck.

The world is a different place than it was 500 years ago, and the stakes in a feudal state are obviously different than they are for a 21st-century corporation. But people have not changed all that much since 1532. Much of what Machiavelli wrote still rings true today, whether we like it or not. Fortune and luck are fickle, leading through them both requires playing the political game for which there are mutually understood rules, take them or leave them at your peril.

Through all that, it is still up to you to decide what kind of leader you want to be. Will you be judicious? Will you be punitive? Will you be compassionate? Will you be focused? Will you be affiliative? Machiavelli would argue that you should be any of those whenever appropriate to be the best leader you can be. To that end, I wish you good fortune, and way more than just luck.

The Bar Room Polka JSON

Dummy content for a POC project in JSON based on “The Bar Room Polka” by Frankie Yankovic. If you haven’t heard this song, you should. The content provides a nice mix of data structures and missing values. Besides, “plush line club” is just an awesome vintage phrase. My only question is: where the hell is “Tweedunk”?

{

'places' : ['tavern', 'salon', 'cabaret'],

'nowhere' : ['dive', 'joint'],

'everywhere' : 'plain old fashioned drunk',

'Pennsylvania' : {

'itsCalledA' : 'taproom',

'theyServe' : 'n/a'

},

'Manhattan' : {

'itsCalledA' : 'plush line club',

'theyServe' : 'n/a'

},

'Chicago' : {

'itsCalledA' : 'gin mill',

'theyServe' : 'n/a'

},

'London' : {

'itsCalledA' : 'blooming pub',

'theyServe' : 'n/a'

},

'Newport' : {

'itsCalledA' : 'n/a',

'theyServe' : 'cocktails'

},

'Tweedunk' : {

'itsCalledA' : 'n/a',

'theyServe' : 'boiler maker'

},

'Milwaukee' : {

'itsCalledA' : 'bar room',

'theyServe' : 'n/a'

},

'Wilksbury' : {

'itsCalledA' : 'meeting hall',

'theyServe' : 'n/a'

},

'Greenland' : {

'itsCalledA' : 'beer joint',

'theyServe' : 'n/a'

},

'Tennessee' : {

'itsCalledA' : 'cider mill',

'theyServe' : 'n/a'

},

'Altoona' : {

'itsCalledA' : 'n/a,

'theyServe' : 'spooners'

},

'Bridgeport' : {

'itsCalledA' : 'honky talk',

'theyServe' : 'n/a'

},

}

Abstraction

“Abstraction is the elimination of the irrelevant and the amplification of the essential”

—Robert C. Martin, Agile Principles, Patterns, and Practices in C#

Rob Pike’s 5 Rules of Programming

Rob Pike’s 5 Rules of Programming

  • Rule 1. You can’t tell where a program is going to spend its time. Bottlenecks occur in surprising places, so don’t try to second guess and put in a speed hack until you’ve proven that’s where the bottleneck is.

  • Rule 2. Measure. Don’t tune for speed until you’ve measured, and even then don’t unless one part of the code overwhelms the rest.

  • Rule 3. Fancy algorithms are slow when n is small, and n is usually small. Fancy algorithms have big constants. Until you know that n is frequently going to be big, don’t get fancy. (Even if n does get big, use Rule 2 first.)

  • Rule 4. Fancy algorithms are buggier than simple ones, and they’re much harder to implement. Use simple algorithms as well as simple data structures.

  • Rule 5. Data dominates. If you’ve chosen the right data structures and organized things well, the algorithms will almost always be self-evident. Data structures, not algorithms, are central to programming.

A bit more can be found at the source here: http://users.ece.utexas.edu/~adnan/pike.html

In my experience, I’ve come across Rule 1 enough times to know how to avoid the lesser obvious bottlenecks (which for me generally focus on data merging). I’ve definitely come across Rule 4. Rule 5 trumps them all, as it were. A deep understanding of the appropriateness of data structures is core to good code. Rules 2 and 3 don’t generally impact my day-to-day programming.

Via Hacker News, which I’m sure will lead to a killer comments thread.

Animated Pile of Poo

“If you were wondering what humanity would do when given access to the most advanced facial animation, now you know.”

—Apple’s Craig Federighi, demonstrating the new animoji feature by turning his face into an animated pile of poo on the new iPhone.

So proud of my chosen discipline, Computer Science.

Or not.

Two Books

Two novels can change a bookish fourteen-year old’s life: The Lord of the Rings and Atlas Shrugged. One is a childish fantasy that often engenders a lifelong obsession with its unbelievable heroes, leading to an emotionally stunted, socially crippled adulthood, unable to deal with the real world. The other involves orcs.

—Anonymous

HTML today is the same as it was in 1993

HTML is the kind of thing that can only be loved by a computer scientist. Yes, it expresses the underlying structure of a document, but documents are more than just structured text databases; they have visual impact. HTML totally eliminates any visual creativity that a document’s designer might have.

— Roy Smith 1993

HTML today is no different without CSS.

Adobe ending Flash support in 2020

Just saw this on Ars Technica:

Flash will be supported through to the end of 2020, after which the Flash player will cease to be developed and distributed.

I’m not going add anything of value here other than to echo what I think a lot of other people are going to say: Good fucking riddance. Flash has been a thorn in my side for years now. They could get rid of it today and my world wouldn’t change one bit.