Monday, October 28, 2013

Hope Cocktails OR Why We Love Guides

"Rome, thou hast lost the breed of noble bloods!"
-- Shakespeare, Julius Caesar

Friends, coders, methodologist, lend me your ears;
I come to bury experience and knowledge, not praise it.
The work that men do lives after them,

The glories are interred with their retirement parties;
So let it be with experience and knowledge.  The noble methodologies
Hath told you that experience and knowledge are not needed.
If it were so, it was a grievous fault,
And experience and knowledge have been replaced.

Good sir, they say, have you mocked methodologies?!?  Have you gone mad?!?  We sir, like our hope cocktails and will not stand to hear your mocking!

Riddle me this methodologist, why should we follow these principles?!?  What are their genesis?!?

Sir, they say, these were handed down to us from above, we do not question them.

Friends this is a sad, sad, sad state indeed.  Drunken on hope cocktails, these methodologist come and say to us, "Follow me and I will lead you to the promise land, I have access to the secret doctrines and only I can interpret them correctly."

All these statements may be true, they may have access to the "secret doctrines", they may have the ability to "interpret" them correctly.  There is just one thing:

"Where is the master who could have taught Shakespeare?"
-- Ralph Waldo Emerson, Self-Reliance

Who could teach Shakespeare to Shakespeare?  Who taught Virgil to be Virgil?  Who told Homer the Iliad and the Odyssey?

The ancient Greeks having no history or doctrines were able to be truly beautiful.  They were able to soar to heights never reached before or since.  They did not blindly follow, they led and are still leading!

"Sing, O goddess, the anger of Achilles son of Peleus, that brought countless ills upon the Achaeans."
-- Homer, The Iliad
Book I, Line 1

Sing goddesses of men that were truly beautiful.  Men that gave us the Sciences.  Men that gave us the very idea of History.  Men that gave us hope.

"Only Hope remained there in an unbreakable home within under the rim of the great jar, and did not fly out at the door"
-- Hesiod, Works and Days, Line 96

Hope not in a cocktail, the thing itself, the authentic thing.

True experience and knowledge, the kind which builds worlds, cannot be drunken down, it can only be lived.  True experience and knowledge, my friends, becomes one with us.  It is created, not drunken in.  It is made true to oneself.  It cannot be disproven since it is part of one, it becomes one's duty.

"It is far better to discharge one’s prescribed duties, even though faultily, than another’s duties perfectly. Destruction in the course of performing one’s own duty is better than engaging in another’s duties, for to follow another’s path is dangerous."
-- Bhagavad Gita, 3:35

It would be better to be destroyed than to follow!  For blindly following is worst than not existing, it is not even being.  To follow another's life, to not be authentic, is to not even exist.  Live your life, your experience, your knowledge.

Fellow developers, do you know why you do a daily stand up?  Is testing first part of who you are as a developer?  Is continuous integration part of your definition of done, even if it is not required by your team?

Beware my friends for it is far easier to drink down hope cocktails than to gain true experience and knowledge.  It is often hard to tell at first who is buzzed on hope cocktails and who actually has true experience and knowledge.  You can tell a drunkard when they pererrat to another cocktail and quote new sages, this herd will be moving to new pastures, grazing on new hope cocktails, worshipping new idols.

"Man is timid and apologetic; he is no longer upright; he dares not say 'I think,' 'I am,' but quotes some saint or sage."
-- Ralph Waldo Emerson, Self-Reliance

Sunday, October 20, 2013

How to Become Like Uncle Bob

"Here's the challenge, read it. I warrant
there's vinegar and pepper in't."
-- Shakespeare, Twelfth Night
Act III, Scene IV, Lines 142-143

How does one become what one is?  Better yet, how does one become what one should be?  Even better, how does one become what one must be?!?

A challenge was fired straight across the bow! Just a little less than one year ago, Uncle Bob in his
"The Reasonable Expectations of Your CTO" stated that software professionals need to be spend 20 hours a week honing their craft! Sir you say, 20 hours is a lot, this man is surely joking!

Nope, Uncle Bob was serious, in fact he gave away one of his secrets.  This secret was how to become an Uncle Bob.  Yes sir, Uncle Bob has given away a secret of how to become like him in abilities and knowledge.

No surprise Uncle Bob has stated that it takes in a different way that it takes 10,000 hours to become an expert.  Wait you say, 10,000 hours where did that come from?

Let's see, take the 20 hours per week that Uncle Bob is challenging us with and multiple it over a whole year which we'll say it is 50 weeks, that give us 2 weeks of vacation!  20 * 50 = 1,000.  Hmmm, 1,000 well if we did this for 10 years that would give us 10,000 hours of practice.  Surprise, surprise, just as Dr. K. Anders Ericsson has found in his research on experts!

In fact as any weekend golfer that has not improved in 20 years of play will tell you, 10,000 hours of practice by itself is not enough!  No, sorry sir, it take deliberate practice to get better, practice in which one climbs mountains!

What?!?  Surely I am mad, surely I have fallen from the great height of my rocker!  Surely I am an anarchist that laughs as the world burns!--and thus with some silly jesting in my writing I have left a quote that could easily be taken out of context and used against me!

Sorry my friends, but traveling to great heights takes great amount of effort and determination, but boy is the view great!

A poem of old reads:

"The aspen plum blossoms!
Bent towards me it waves!
It's not that I do not think of you.
But that your home is too far away."

Confucius said, "The writer of this poem does not really miss his beloved.  If he did, how could he feel that his beloved is too far away?"
-- Confucius, Analects of Confucius, Book 9
(other translation 1, 2)

As Confucius has shown us what we do truly speaks as to what we really mean and feel.  If we really want to be better, we really want to be professionals, we really want to better than average, we really want to soar to greater and greater heights, if we really want to become an Uncle Bob, we'll have to get good, we'll have to get really good!  It will take much more than wishing, it will take blood, sweat, and tears.

Laugh at his challenge.
-- Shakespeare, Antony and Cleopatra
Act IV, Scene I, Line 6

Laugh for how could one every stand up against such overwhelming work without laughter?!?  Furthermore, what truth could ever be spoken without laughter?!?

This challenge is great, it takes a lot to transcend the bonds of the normal everyday.

But sir, you say, this challenge is too great, too terrible!!!

A young man can be most surely corrupted when he is taught to value the like-minded more highly than the differently minded.
-- Friedrich Nietzsche, The Dawn of Day, Section 297

We are not talking about the average.

What is being talked about is moving beyond the herd, to the heights of what can be.

O-but good sir you have surely forgotten about the plague!  The plague you say?  You are right I have forgotten about the "Sam's Teach Yourself C++ in 21 Days" and its bothers.  I have forgotten about Wizard Schools, boot camps, and sheep dip training!

Yes, my fellow adventures of knowledge we have a plague on our hands, the Get Knowledge Quick Plague!

You see learning can be done in the 21 Day route or the Oxford Complete route.  The authentic subject in itself or the Cliff's Notes?!?  The choice is yours, one path leads to new heights, the other to the same-old-same-old.

When a war breaks out, people say: "It is too stupid; it can't last long." But though a war may well be "too stupid," that doesn't prevent its lasting. Stupidity has a knack of getting its way; as we should see if we were not always so wrapped up in ourselves.
-- Albert Camus, The Plague, Part 1, Chapter 5

No one asks for the plague, one is just thrown into it.  Lucky one finds that one has choices even in the darkest mist of the plague.  One can fight the monsters or one can be the victim of monsters!

"Look here, Monsieur Cottard, why don’t you join us?"

Picking up his derby hat, Cottard rose from his chair with an offended expression.

"It’s not my job," he said. Then, with an air of bravado, he added: "What’s more, the plague suits me quite well and I see no reason why I should bother about trying to stop it."

-- Albert Camus, The Plague, Part 2, Chapter 9

Cottard, Cottard, it is so easy to see the plague and think hmmm, I will dip the sheep!  I will profit from this plague!

My friends this is the enemy.

Through me the way is to the city dolent;
  Through me the way is to eternal dole;
  Through me the way among the people lost.

Justice incited my sublime Creator;
  Created me divine Omnipotence,
  The highest Wisdom and the primal Love.

Before me there were no created things,
  Only eterne, and I eternal last.
  All hope abandon, ye who enter in!
-- Dante Alighieri, Inferno, Canto III

There is no profit to be made in plague!  No greatness to be found in the plague.  The plague is the same, everyday in the plague is the same, the same joylessness, the same hopelessness, the same misery!  Only fighting against the plague can bring about greatness.  Greatness is not found in profiting from the plague!

"You're right, Rambert, quite right, and for nothing in the world would I try to dissuade you from what you're going to do; it seems to be absolutely right and proper. However, there’s one thing I must tell you: there’s no question of heroism in all this. It’s a matter of common decency. That’s an idea which may make some people smile, but the only means of fighting a plague is—common decency."
-- Albert Camus, The Plague, Part 2, Chapter 9

Like Sisyphus, we found that we are pushing our rock up a hill to only have it rollback.  For every Clean Coder there are three Teach Yourself x in 21 Days!  For every Elvis there are three Morts!

Sir, you say, you have gone mad.  You have wanted to set the world on fire!

Do you remember when you were young and you wanted to set the world on fire?
-- Against Me!, I Was a Teenage Anarchist

Perhaps I am being a drama queen, perhaps I have gone too far, perhaps I have lost sight of what the point was!  One must remember, while mountain climbing that one must get use to the air at higher heights, one cannot be simply dropped onto the summit and expected to survive!  No, one must work their own way up the mountain.  One must face their own challenges, one must meet their own monsters!

He who fights with monsters should be careful lest he thereby become a monster. And if thou gaze long into an abyss, the abyss will also gaze into thee.
-- Friedrich Nietzsche, Beyond Good and Evil, Chapter 4, Aphorism 146

20 hours a week or if it is easier to think of 10,000 hours of progressive deliberate practice and higher and higher challenges is what is needed to become an expert.

Sunday, October 13, 2013

A Kata A Day

"But such a day tomorrow as today."
-- Shakespeare, The Winter's Tale
Act I, Scene II, Line 64

"For ever and a day."
-- Shakespeare, As You Like It

A Kata A Day  

Epictetus, the Stoic philosopher, was record to have said,

"Practice yourself, for heaven’s sake, in little things; and thence proceed to greater."

Ever since Cory Foy's presentation at SCNA 2012 I have been doing a software kata at the start of every work day.  Yes, every single day with very few exceptions, even during the two weeks when I was putting in hellish overtime for a big release!  I find this practice is a great way to start the day.

Chong Kim recently blogged about using katas to improve one's coding.  I completely agree, in fact I have found that katas are a great way to learn new languages, styles, frameworks, ...

"Katas can stretch our abilities and, similar to how a kata would teach a martial artist to become comfortable with the uncomfortable, they help us write code we may not normally write."

So far in my year experience of daily katas I have used katas to learn: F#, Haskell, Clojure, JavaScript, node.js, SpecFlow, Mocha, continuation passing style, ...  So what sir, that is just a list of random programming languages and testing frameworks, have you actually gained anything?!?  Hmmm, that is a very hard question to answer, in order to truly answer it I would need to have done an experiment in which we have two programmers with equal ability and have one start their day with a kata while the other one gets an extra 25 minutes of sleep.  I did not set up such an experiment when I start around a year ago.  To make you for this lack of planning how about if we do a thought experiment?  Thought experiments were good enough for Einstein after all.

Say we have two programmers of equal abilities.  Elvis would like to take his programming to the next level and as such will start each work day with a code kata.  Mel on the other hand would just like to get to Friday and as such will sleep an extra 25 minutes each day instead of doing a code kata.  In a work month there are about 21 days, so in one month Elvis would have done 21 different code katas.  After about 3 months that would be about 65 katas which is enough practice time to learn a new skill or two.  In one year Elvis would have gained about 8 new skills while Mel would have slept around an extra 108 hours.  With 8 new or reinforced skills Elvis would find that he is well on his way to rock star status.

"Practice does not make perfect. Only perfect practice makes perfect."
-- Vince Lombardi

Here is the rub, those katas need to be deliberate practice, meaning they need to have goals, they need to push your skills, they need to expand what you think you can do, they need to make you better.  Merely sitting down and coding for 25 minutes is not enough.  You need to be mindful as you practice.  You need to have goals of what you want to do and you need to stick to them!  Use your katas as experiments.  Go to Rosetta Code and try something you have never done before.  Look up different programming language paradigm on Wikipedia and try them.

The principal of linguistic relativity comes in two forms: "(i) the strong version that language determines thought and that linguistic categories limit and determine cognitive categories and (ii) the weak version that linguistic categories and usage influence thought and certain kinds of non-linguistic behavior".  Regardless of which version you follow, the conclusion of our needs is the same, you are what you consume/do.  If you have used Higher Order Functions before in a kata then when you see a problem which is perfect for applying them you'll use them.

There is debate around if Eskimos have more words for snow than other cultures, but Kenneth Iverson inventor of APL and ACM Turning award winner and Paul Graham (all around genius) both believe that language influences how you think about a problem.  Graham calls this the Blub Paradox.

"programming languages are not merely technologies, but habits of mind as well"
-- Paul Graham, Beating the Averages

The programming language that you use to try to solve a problem not only dictates how you go about solving a problem but how you actually think about the problem!  Don't believe me, write the Prime Factorization kata in an Object Oriented language and Functional language.  What is the first hurtle that you hit in an Object Oriented language when solving a behavioral based problem?  Is it what type of objects do I need?  Does that really make any sense to think of when you finding the prime factors of a number?!?

Sunday, October 6, 2013

A View on Perfection in Software

"For those that could speak low and tardily
Would turn their own perfection to abuse
-- Shakespeare, Henry IV Part 2
Act II, Scene III, Lines 26-27

Perfection, the enemy of all.  What, did I just call the most glorious search of all the enemy of all?  What am I mad?

I have bad news for you, that glorious search for perfection, those months modeling and modeling the perfect enterprise solution.  You know that perfect solution which will allow for enough flexibility so that it will last for thousands of years!  It does not exist!!!

There is no such thing as perfect in this world. That may sound cliché, but it’s the truth. The average person admires perfection and seeks to obtain it. But, what’s the point of achieving perfection? There is none. Nothing. Not a single thing. I loathe perfection! If something is perfect, then there is nothing left. There is no room for imagination. No place left for a person to gain additional knowledge or abilities. Do you know what that means? For scientists such as ourselves, perfection only brings despair. It is our job to create things more wonderful than anything before them, but never to obtain perfection.
-- Tite Kubo, Bleach, Chapter 306, Pages 4-6
Wait did I just quote from a manga, a cartoon?!?  Worst, that quote from a cartoon has said that our enterprise solution which cost millions to model and design.  The solution that will last for ever!  That very solution was a waste?!?

In one almost word, yep!

Here I'll give you a quote from a well respected [sic] man, which more less says the same thing.

"In his writings, a wise Italian
says that the best is the enemy of the good
-- Voltaire, La Bégueule

Good sir, this is no laughing matter, you sir have stated that our pride and joy is nothing.  Even worst than nothing sir, you say that it was pointless, that it was unscientific, that it was a journey to the deep realms of despair.  You sir are a scoundrel and a ruffian!

Give me a minute or so to explain myself.

Let us take a look at the distribution of matter in the early universe (I know, it will be worth it, trust me).

Here is a picture from NASA which shows us what is believed to be the distribution of matter in the early universe.

OK, what do you see?

Maybe this picture which is also from NASA will help.

What we have here is the timeline of the universe as we currently understand it.

What do we see?  In the first image of the early universe we see that the distribution of matter is not even.  If it was even it would all be one color.  Now the differences are not large but they are there.

And birds go tweet, what else do you have for us sir?

Just that this uneven distribution of matter in the universe is what has brought about everything.  Yep, everything!  Looking at the second image showing the timeline of the universe, we see that this unevenness in the distribution of energy is what allowed for the formation of stars, galaxies, planets, humans, ... everything!

That is all well and fine sir, but what does this have to do with modeling and enterprise architecture?

Well, the early universe was imperfect!  In fact, the universe now is not perfect.  If the universe was perfect, we would not exist.

I'll repeat that.

"If the universe was perfect, we would not exist."
-- Me, paragraph above

All fun and wit aside, we find that we are standing on the edge of a deep chasm.  Perfection cannot exist in imperfection.


You cannot create something perfect out of something imperfect.  If you were to be able to create perfection using imperfection you would need something from outside of the imperfection.  See also Gödel's Incompetence Theory (which does not in any way state that, but I believe it will be show as a conclusion that can be made from it, some day).

Sir, you say, what does this have to do with our modeling?

"Have no fear of perfection - you'll never reach it."
-- Salvador Dali

Your modeling will not be perfect, in fact you should do just enough to get an understanding, if any is done at all.  When all is said and done, we need working software not "perfect" pictures.  This is the 2nd principal of the Agile Manifesto, "Working software over comprehensive documentation".  As Brian Marick quotes from Anonymous (which I must say, I have never seen both Brian and Anonymous in the same room at the same time).

"[S]oftware people ... seem [to be] embarrassed to admit that, at some point in the proceedings, someone competent has to write some damn code."
-- Brian Marick quoting Anonymous

It is embarrassing to admit, we need working software not "perfect" documentation.

Do not go looking for perfection, it does not exist.  Instead look for the good and usable, it is much more fruitful.

"If you look for perfection, you will never be satisfied"
-- Leo Tolstoy, Anna Karenina, Part VII, Chapter IV