Forgetfulness is a property of all actions

If the man of action, in Goethe’s phrase, is without conscience, he is also without knowledge: he forgets most things in order to do one, he is unjust to what is behind him, and only recognises one law, the law of that which is to be. So he loves his work infinitely more, than it deserves to be loved; and the best works are produced in such an ecstasy of love that they must always be unworthy of it, however great their worth otherwise.

(F. Nietzche – “On the Use and Abuse of History for Life”)

Recently, I have been reading an article by Neal Stephenson on innovation starvation. The author speaks about the inability of Western societies to execute on big things. One point that made me think is the thesis that too much information is killing innovation. It is something I have thought about lately, so I want to share my thoughts with you.

Can information kill creativity?

We live in a world where anyone can easily access information; better access to information has surely improved our life increasing our efficiency. But excited by the power information gave us, we haven’t take any attention to the unintended consequences of having too much available information.

My thesis is that too much information, when not properly managed, can kill creativity, and consequently, innovation, by affecting our ability to take risks.

What is creativity?

According to the Merriam-Webster dictionary, creativity refers to the ability to make or bring into existence something new. There is a lot of psychological research about what drives creativity – and also about the exact definition of what creativity is – but I don’t want to bother you, so we will stick to what common sense tells us.

If we define creativity as the ability to bring into existence something new, we must hold that if an individual wants to create something new, she must accept the risk that she might fail. Newness is intrinsically risky, because if something is really new, we don’t have anything telling us that we will succeed. It’s quite obvious that if we don’t accept such a risk, we can’t do creative things. We can do small improvements to existent things (that isn’t so bad, by the way), but we can’t make big, disruptive innovation.

So, creativity is deeply linked to the ability of individuals to accept the risk of failure. I want you to focus on this point because it is the keystone of my thesis. Since creativity is deeply linked to the ability of individuals to accept the risk, it goes without saying that anything which modifies our risk propensity modifies also our creativity.

So far we have understood that when our risk propensity lowers, we are unwilling to take the unknown road for the known one; but how does this affect creativity?

This problem is what in optimization theory is called the local maximum problem (or for the computer scientists between us, the hill climbing problem). Simply put (dear maths, don’t hold it against me), local maxima occur when you try to solve a problem step by step and find a solution that seems optimal, but it is optimal because you are considering only a small subset of the original problem.

I want to make an example so we can easily understand that. Imagine that you have a problem and you want to find a solution. The figure shows all the possible solutions; the numbers in each solution show  how good each solution is (the higher the better). The solutions are unknown to you, so you start exploring the solution space step by step.

At one point, you approach a fork and you have two solutions: B is clearly better than C. You choose the former, and you find that your search is at the end: B is better than anything else you have found at that time, and moving from B will lead you towards worse solutions. You are happy: you have solved your problem. But what if going to C would have made available for you a path to D, the best solution of all? You missed D because you didn’t want to take the risk of choosing C, and thus you have to stick with your suboptimal local maximum B.

Now, we are going to see how information can modify our risk propensity. Remember the above example since it will be the basis for what I am going to say next.

How can information modify our risk propensity?

Information can modify our risk propensity in several ways; in the following I will discuss two ways information can affect our risk propensity: partial information and social proof.

Suppose that when choosing between B and C, someone tells you that C is an unavoidable choice, but after C things will get better. You trust him, you choose C and you thank him, because you will get in D.

But what really happens is that the available information depicts the effects at the expense of the causes. Most of time, you only know the effects of decisions, while causes remain obscure to you. So you have a partial knowledge of the problem space.

So, what happens is that you see people that have been stuck in C without finding a path to D or people enjoying success in B because they ignored the rewards in D.

Now, a wise man would acknowledge this situation and says: “Hey, this is what I have. I will use it but with the awareness that this is only partial knowledge”. A wiser man would further say: “I don’t mind, I will follow my instinct”.

But typically what we do is to believe in ineluctable certainty and transform that partial knowledge in a full, absolute knowledge. So, we start to believe that B is better than C,  and this is where you start avoiding risks; since there is no certainty, we build the illusion of a risk free world: we start taking small steps, the risk free ones, climbing the hill and forgetting the mountain, shaping our world as a risk-free world. We simply negate risks.

The availability of partial information generates the illusion that risk doesn’t exist. Since risk does not exist, how do you call people that take pointless risks (Take the word for yourself)? This is where social proof happens. As social beings, we are constantly responsive to the activities of others. When we face a situation in which we don’t know what to do, we are used to look for clues in others’ behaviors to make our choice. With all the social media available nowdays, we are being constantly flooded with opinions by others. What happens is that all these things might discourage us from continuing on big, bold projects. To say as Nietzche,

“He has lost or destroyed his instinct ; he can no longer trust the “divine animal” and let the reins hang loose, when his understanding fails him and his way lies through the desert. His individuality is shaken, and left without any sure belief in itself; it sinks into its own inner being, which only means here the disordered chaos of what it has learned, which will never express itself externally, being mere dogma that cannot turn to life”

How can we defend ourselves from too much information?

Information is not bad at all; it is bad only in the measure it starts affecting our risk propensity. Here are some simple tips you can use to control how information affects your behavior:

  1. Understand that information is, at the best, partial
    It is impossible to get a complete knowledge about an event. You only get partial information. What is worse, you don’t know what information you are missing. So, learn what you can learn after a critical assessment and leave a small space for your gut instinct.
  2. Follow your gut instinct
    Innovation requires you to fail. If you have a hunch that the gamble might pay off in the long run, place that bet. Life is too short to brood over things; trying is the best way to learn new things (of course, you must also minimize the negative effects of failing and setting your mind in learning mode).
  3. Know thyself
    Organize the chaos inside you and start thinking back to yourself, to your own true necessities, and letting all the sham necessities go.

I want to conclude with the opening quote from Nietzche. Remember that every man of action is without conscience and a bit of oblivion is needed to get things done.

If the man of action, in Goethe’s phrase, is without conscience, he is also without knowledge: he forgets most things in order to do one, he is unjust to what is behind him, and only recognises one law, the law of that which is to be. So he loves his work infinitely more, than it deserves to be loved; and the best works are produced in such an ecstasy of love that they must always be unworthy of it, however great their worth otherwise.

(F. Nietzche)

And you? Have you ever been in situations where too much information were holding you back? How did you overcome them? Let me know in the comments.

Narrative Methods

Last week I found an interesting talk by Avdi Grimm about the topic of confident code, which is code that says exactly what it intends to do. Since here at Social Utilities I have enforced similar coding practices, I want to speak about a very useful practice we are experimenting with: narrative methods.

The Problem

Software development is characterized by change: changing requirements, changing environments, changing code. XP and other agile development methodologies say us to embrace change; personally, I think that change is great as long as it keeps you moving forward. The brilliant minds behind agile development have developed a set of practice to enhance flexibility, namely collective ownership, pair programming and coding standards. The idea is that everyone should be able to modify other developers’ code. But when developers use their own coding standard things can get easily out of control.

Imagine a customer calls you saying that after the latest release a feature is broken. You run your test suite and find a bug in a method written by someone that got a bad flu and will be unavailable for a week. You read the method code trying to figure out what the hell the method is going to do…

The Narrative Structure

Narrative methods are methods that say exactly what they intend to do.

A narrative method is a method that follows this structure:

  1. Gather input
  2. Perform work
  3. Deliver results
  4. Handle failure
It’s all: no digression, no uncertainty, no cognitive load on the reader. The benefits of structure consistency are huge: methods that no randomly mixes input gathering, error handling and business logic are easier to understand and modify:
  • if the bug is in the input data, you go to the input section;
  • if you have to modify the logic behaviour, you go  to the logic section.

You don’t have to guess anymore; you know exactly where to put your hands.

A Practical Example

So, let’s see an example directly from real life. This is the code for a controller method in our web application:

public function post() {
	try
	{
		// Perform basic validation
		$this->request->validate(User::rules(),$this::PAGE);

		// Get field values
		$name = $this->request->get('name');
		$email = $this->request->get('email');
		$phone = $this->request->get('phone');
		$password = $this->request->get('password');

		// Check for uniqueness
		$this->checkUniqueEmail($email);

		// Create the customer
		$customer = User::make(array(
					'name' => $name,
					'email' => $email,
					'phone' => $phone,
					'password' => $password
				));		

		$this->session->flash('success','The customer has been added.');
		$this->redirect('admin/customers/add');
	} catch (Error $e)
	{
                $this->response->setError();
		$this->render('admin/customers/add');
	}
}

The example is self explanatory:

  • lines 5-14: gather and validate input from the HTTP request;
  • lines 17-22:  apply business logic calling the method make() on the User class that creates a new user;
  • lines 24-25: handle the response setting a flash message and redirecting the user to a new url;
  • lines 26-30: handle failures in the catch block.

I recommend to use a consistent strategy also for error and exception handling; maybe this will be the subject for a new post.

What do you think about this structure? Do you also use a consistent method structure? Leave a comment to let me know.

 

Don’t Kill the Fun

“Programmers are in a race with the Universe to create bigger and better idiot-proof programs, while the Universe is trying to create bigger and better idiots.  So far the Universe is winning.”

(Rich Cook)

Computer programming is fun. This is the only truth. Don’t trust who says that it is boring. Or better, just feel sorry for her, because two are the reasons: either she let others mortify her passion or she got into the job just for money. Since this blog is all about passion, I will speak now about the latter.

Programming job pays. In Italy it is one of the few industries in which we can still find a job as a fresh graduate. This means that tons of people are coming into the job just to escape the brutal sickle of unemployment. There is nothing wrong to me, but I would advice those people that programming is just for who loves it. Certain tasks are really boring; much of today’s software development is really glueing, that is linking together libraries that do the work for you. Then, your company gives you a database, and you have to write those silly pieces of code that do Create, Read, Update, Delete. If you are lucky. Otherwise, you will likely be forced to use a CRUD generator and link code generated by it. Stop. There is nothing inherently wrong with this: we live in a world of limited resources, and we must work efficiently and effectively. This is the raison d’être of Corporate IT. If you don’t love programming, this will likely kill the fun. So, where is the fun?

We could ask several thousands of true programmers, and all of them will say that the fun is in the creation. A programmer starts from nothing and creates something. He is the agent the transforms the not-being into being. He received a gift, the gift of God:

“Why is programming fun? What delights may its practitioner expect as his reward? First is the sheer joy of making things. As the child delights in his mud pie, so the adult enjoys building things, especially things of his own design. I think this delight must be an image of God’s delight in making things, a delight shown in the distinctness and newness of each leaf and each snowflake.”

(Frederick P. Brooks, Jr.)

It is that sense of creation that makes programming meaningfull, and we should never forget this truth: we create. So, the antidote for the sense of boredom that kills the fun of programming is simply: have passion.