Thursday, May 31, 2012

Big picture and focus

You may think that a software developer knows only to zoom in and that big picture is only for the architect, boss or customer.

The truth is that developers must constently Zoom in (focus), and Zoom out (see the big picture).
This take place first at the technical level : You know how to use high level package and framework to do your work, but at the same time you need to zoom in the details of the underlying protocol, and sometimes zoom in every bit sent on the network... Without loosing the big picture.

It takes also place at the business level : The responsibility of the developer is also to advice the customer about his decisions. Too often, not important features take most of the development time. It is his job to make development effort proportional to the importance of features.
It is also his job to advice on the prioritization of features : What can make money now and is fast to market ? What can be done later because technically challenging for now ?
For this, the developer needs to know the purpose of the product (big picture) as well as the economic impacts of  decisions (focus). For example he needs to be aware of products licence, maintainability impact, ease to find human resources.

I think the best way to teach something is to train the audience to switch back and forth from details to big picture.
Without big picture : you loose sense of purpose, the audience will feel that the course is useless.
Without details : you loose sense of practicality, the audience will feel that in theory there is no difference between theory and practice, but in practice there is. And it will be suspicious.

Sunday, May 27, 2012

Active and passible knowledge, the role of curiosity

There is two kinds of knowledge :
  • The one you find, acquire and use consciously , the active knowledge.
  • And the one you acquire  unconsciously from your environment, the passive knowledge

A trainer or a book gives you the first kind of knowledge : you consciously acquire the knowledge the trainer or book is sharing. This is "knowledge peak acquisition" for your brain.
This kind of knowledge is the fastest way to learn about something, but it is the most ephemere form of knowledge. Don't use it, and you will forget very soon.
A common trainer trick is to use and abuse repetition. After each repetition, your brain will remember a little longer.
That works, but as soon as the trainer is not here, you'll start to forget. The only thing the trainer can do is to make the process longer. 

The other kind of knowledge is durable but accumulate slowly, and it is the only difference between the expert and the novice. This is passive knowledge.
At some point, no trainer, mentor or book exist, in other words active knowledge is scarce. 
You can't control passive knowledge, it is entirely defined by your environment.
If you want passive knowledge, shape your environment.
If you want to be great in artificial intelligence, works every day with researchers or students in the field, setup your RSS reader on the best AI blogs, subscribe to newslists, read publications, find a job on AI subjects (even with low remuneration), listen everyday Udacity's course.
At one point, knowledge will flow every day unconsciously, it will be part of your habits, work, and way of life. And even during your bad days, you will not mind reading another article.

Why do I want my students to be curious ? I am a trainer, and I give them the active knowledge.  
Without passive knowledge they will forget and waste my work. 
Once he is curious, he will unconsciously setup his environment around his interests and acquire passive knowledge. He will not forget, and he will become the expert I expect to read soon !

In summary, the difference between active and passive :

  • The first is brutal, conscious, ephemere
  • The other one is incremental, unconscious, durable.

Saturday, May 26, 2012

Uncertainty and financial decision

Before seeing this ted talk, I always thought that the scariest thing was taking risk.
But it is not, when you don't give a damn about failing, you don't care about risk.

You are not afraid to die, you are certain about it. What you fear is the uncertainty about what will happen before and after you die.

Economically speaking, risks make no sense :

Imagine you have 5000$ in your hand, and you have two choices : Put it in a saving account, OR buy some stocks with it.

Have you chosen the saving account ?
But what if stock's value increases 100% in two days ? You failed to earn 5000$.
Your choice seems risky for me...

Have you chosen the stocks ?
But what if stock's value drops 50% in two days ?  You loose 2500$.
Your choice seems risky for me...

Failing to earn money, or loosing money are, economically speaking, the same thing.
From the psychology point of view, it is different, your mind prefer failing to earn than loosing.
But there is a second psychological problem with stocks : Uncertainty.
You don't know what will happen, how, when and why.
But there is a great things about stocks, when diversified with low volatility : Some day, it will be better than the performance of you saving account.

Certainty and no-loss garantee is what your money in saving account is paying for.
Neverthesless, for your financial situation and life projects, it might worth it.
Let your own goals and your brain decide, be conscious about your decision or your inaction, acknowledge the psychological and economical consequences, but don't let them choose for you.

Thursday, May 24, 2012

Sun Tzu on the Facile ground

"When he has penetrated into hostile territory, but to no great distance, it is facile ground."

"When your army has crossed the border, you should burn your boats and bridges, in order to make it clear to everybody that you have no hankering after home."

Sun Tzu wrote in the context of war... but I'm sure it happened to you in your personal or professional life.

You dream of what you want to be, you get to work and then opportunity rings at your door.
You then step in a world not familiar to you, you have just crossed the border.

Then change is harder than what you thought, and you just want to go back at home doing what you are comfortable with.

Sun Tzu acknowledges that the solution is not to become fearless, courageous, detached, and disciplined. The best solution is to give you no choice but moving forward.

What are the boats you can burn now, so you have no way to go back when times will be hard ?

Wednesday, May 23, 2012

Best choice and circle of competence

I like reading about Warren Buffet.
I like his investor philosophy. It made me conscious about the impact of every of my money action. (or inaction)

But I like even more his simple wisdom.

"Stick to what you know"
He doesn't have any regret about bad decisions he took that was outside his circle of competence.
The best choice is not an universal concept defined by the world. 
The best choice is limited by your current knowledge of the situation.

This means that nobody can decide for you that you could have done better.
If it was not in your circle of competence, you could not have done better. That's it. End of the story.

This philosophy places you at the command of your life. The best choice depends on your knowledge only. 
Who is better placed than you to decide what you want to know ?

Saturday, May 19, 2012

If information was food...

If information was food.
TV news and lolcats would be Mc Donalds.
There is not a production issue.
There is a consumption issue, we have to start thinking how to create diets and exercise.

Sunday, May 6, 2012

Perfection versus usefulness

I started programming 10 years ago with C/C++ and turbo C++.
From these first day to my first programming job, I wanted my code to be always more extensible, more decoupled, more coherent and perfect.

Until the day I worked on many failed projects. Failed projects in some companies with great coders I learned lots from. Failed projects in some companies with bad coders.

And also successful project with bad coders.

Now I can tell you that the worse thing that can happen to me is not someone who points out a bug in my software.
What piss me of is when nobody use what I did. I'm grateful to someone reporting a bug, since it means he cares about the project.

I always like good code. But now I don't make it extensible, and I don't make it coherent everywhere by default.

That might piss off some purist, but every line of code I write, I ask myself : "Will it make the life better to someone ?".
"Someone" might be me, a customer or a team member.
I don't give a damn anymore about code perfection, except if perfection make a better life to someone.

That's what I learned from great products I've worked for : Do not make it perfect, make it useful.

Saturday, May 5, 2012

The one hour rule

You want to work on an interesting project but you want to know if your partners are up to the task ?

Give them one hour per week, nothing more, nothing less, and no way to save it for later.

If this hour is not used by the end of the week it means that there is not enough motivation. Stop here.

If more than one hour is used it either means that the project's scope is wide, or that your time is wasted.

Three choices here are up to you :
  • Give more time
  • Narrow the scope of the project
  • Stop here

If exactly one hour is used, you found someone that value your time,

The next two steps are :
  1. Give more time
  2. Widen the scope of the project

That's my one hour rule... and it makes wonder.
Your time is the most precious asset your have, work with people that respect it.