It happened to me on several occasions that I mixed up todo-list style working mode and creativity working mode, although every single time I was convinced that I did things the right way. In order to boost my creative output I have put several creative items on my daily todo-list and hoped that somehow getting things done and creativity would magically match. Not so! What happened, in fact, was that while checking off my todo-items I would postpone the creative items on the list. They would be postponed to the next day and then to next and so on. Since I have scheduled different creative endeavors on different days, you might already guess what happened. I got my regular tasks done but all the creative items kept piling up. Looking at this pile did not really inspire me to do anything creative at all. In fact, it scared me off. To conclude, during these experiments I haven’t achieved anything creative at all.
In the meantime, however, I have come up with a different strategy to get my regular things done and increase my creative output as well.
The human brain is very, very bad at keeping track of states. Especially for code maintenance states are hell, in particular if you are not the original author of the code, and even then. Even if there is ample and up to date documentation around, trying to understand states of a program is very difficult. States don’t match well to the way the human brain is thinking. Computers, however, excel at it. On the other hand, humans are quite good at abstracting functionality, finding commonalities and patterns as well as following an explicit program flow, in particular if the code uses telling function and variables names and generally a coherent coding convention. Abstraction and pattern recognition in code is something that computers don’t do really well at all.
A programming language should therefore reflect this observation and provide efficient tools to use this human ability. Functional programming is a thinking tool and programming philosophy that helps the natural tendencies of the brain to abstract. While functional programming can be applied in practically every language that supports functions (essentially every modern programming language), some languages try to provide suitable and expressive syntax that allow to move much further up on the abstraction scale whereas other languages, allow only elementary functional programming and make life for the programmer more difficult than necessary. Continue reading →
Functional programming seems to be a hotly debated issue among some programmers. On the one side there are the more academic, computer sciency proponents, who claim that all programming should be functional, since it supposedly reduces bugs and you can reason about the program and do all kind of fancy formal proofs. These proponents also created several purely functional languages to show the world how awesome this way of programming is (including Miranda, OCamML and Haskell). On the other side there are the self-proclaimedly more pragmatic programmers who bash functional programming as being unusable for any kind of reasonable work in the real world – work that is actually ending up being used by real users and not just as unintelligible papers in the ivory tower.
Who is right? I don’t know. I find the whole discussion moot, so I won’t try to take a side, since I both feel firmly grounded in the real programming world and still use concepts from the functional programming world.
For the sake of a better understanding what the whole thing, in my view, is about, I will introduce a different nomenclature for common programming terms. It was first used for APL-like languages and was introduced originally by Kenneth Iverson – a Turing award winner, best known for his contributions to mathematical notation and programming language theory. His paper Notation as a tool of thought (Comm. ACM23 (8): 444–465) is worth reading several times. Continue reading →
It has happened to me quite frequently that I have allotted a certain time of my day to be creative and then, once I sat down, I was just out of ideas. I sat in front of my blank, empty page and simply did not know what I should write about. And the more I forced myself the more some kind of inner block hindered me from having any ideas at all. This is, of course, only too well known for many artists.
The opposite also happens occasionally: you have an idea in your mind, and you simply must execute it, there is no other choice – you are literally burning with it. Its time has come. But this is not what I’m writing about in this post. Continue reading →
I have recently re-read a private memorandum of events that happened some time ago in my personal life. In this memo I wrote that “those two events will always stay intertwined in my memory”. Well… I didn’t take into account how quickly my memory of those events faded. If I hadn’t written them down for one, I wouldn’t even know about them any more. Both events have completely vanished from my active memory. It is not that I didn’t remember them when I read about them: the re-reading served as a refresher for my mind, the events are present again. But: I would not have been able to recall even one of them, left alone both and remember that they were intertwined without this refresher. Was it long ago? Maybe, it depends on your definition: about one and half years ago. And at that time I felt and believed that those events were pretty big in my life.
That showed me one thing very clearly: our memory is extremely faulty.
Non scholam sed vitam discimus.
Not for school, but for life we learn (translated from Latin).
In school you are taught that you don’t learn for school or for the teacher or for the parents, but you learn for yourself and for life. But you don’t really understand that then, I surmise – at least I didn’t, although I always pleased whoever asked me by giving the right answer: “for myself, of course”.
But in the end, it is absolutely irrelevant for whom or for what reward you learn something. This may sound like sacrilege for the thoughtful and enthusiastic educator who wants his disciples to understand the value of self-guided learning, but bear with me.
My wife bought quite some time ago a very cheap saran wrap. It is an awful product, it is self-sticking and the in-built wrap cutter does not do what it is supposed to do. For some time we both were pretty annoyed with it until I finally proclaimed, that we must buy another, higher quality product – the one we usually buy. On our next shopping tour we bought it. That was about a month ago. Since then the new roll is lying around in the kitchen without having been opened.
Why? For some non-obvious reasons, both my wife and I are not able to throw away the old crappy product without a strong conscious effort. A reasonable explanation would be of course that the old roll is not finished yet. There is some logics to that. However, this is Neanderthal-thinking. The cheap roll costs 1.15 sFr, whereas the new one costs 3.15 sFr. And for this lousy 1.15 sFr. we are suffering for months, getting upset everytime we use the wrap.
There seem to be two unconscious and conflicting programming modes at work:
Keeper habit: Don’t ever throw away a perfectly useful product, however annoying its handling is.
Economic logic: It costs only 50% of a coffee. Why should I care at all? I don’t want to be annoyed every time I use the wrap.
There is an old saying that if you want something done, then you have to do it yourself. Obviously this is one way to do it. And more and more I come to think of it as the one true way of doing it. Why?
If you do it yourself, or better, if you have to do it yourself, because you don’t get any help or the wrong kind of help, then you decide very quickly if you really want to have it or not. Because doing it, for most of the time, requires an enormous amount of will power and work. Therefore, you decide fairly quickly if you want to see your wish or dream come true or if you want to let it be just that – a wish. You will find out very quickly if you want to achieve it badly enough.
Now obviously this strategy does not work for everything. However for personal goals and fulfillment of dream projects I think this is a very good strategy to weed out cool projects from the ones which are not important. Additionally it helps you grow personally since you are managing and creating your dreams at every single step yourself. You become a mover and shaker. You do something with your life.
Being a todo-list aficionado, I keep items for every aspect of my life on my lists. Even the enjoyable things, like painting, poetry, or writing prose. In fact, exactly because they are enjoyable but require overcoming an initial barrier to start, I found it very useful to have them on my todo-list. If I put an item like “write a poem” on my todo-list, the probability that I actually start writing it is significantly higher than when I just plan to do something nice after work. It works similarly well for sports or any other endeavor. Besides, there is a double mental satisfaction to have a creative product finished and to strike the item through on the todo-list or mark it as done. However, there is also a downside to the list-business, as I have noticed the last couple of months. Having between 20 and 30 items on my daily todo-list, I will emotionally pick always the ones, which seem to be least trouble. These are most likely not the ones, which are most important or urgent to do. If there is an item, which indicates the slightest doubt about how to do it or poses a certain level of difficulty then it is postponed indefinitely, unless, of course, there is time pressure from a deadline. Thus, at the end of the day, I will have done maybe 15-20 easy items and will have left the hard ones on the list for the next day, that is, I removed the sand, but left the rocks.
In a recent TED-Talk (TEDx ColbyCollege, Feb. 2013, Daniel H. Cohen: For argument’s sake, see embedded video below) the philosopher Daniel H. Cohen asks an interesting question: How do we approach arguments?
I’m not talking here about arguments about ordinary tasks, like who is taking out the trash or other mundane things, but about intellectual, academic and stimulating arguments. That is, arguments that require thinking, domain knowledge and intellectual wits. Although he probably thought of it as mostly applying to philosophical arguments and debates (he is a philosopher after all), I believe the ramifications of his observations are much broader than just the domain of philosophy.