We have just celebrate intuition as an effective tool to find a solution, to conceive a system instead of relying exclusively on the art of reasoning. In fact reasoning, a very important human faculty, has been long overestimated in all scientific areas and in computer science in particular. Even great minds, great geniuses like E.W. Dijkstra, have stressed so much the rational faculty to disregard any other human faculty which is non the less important, and necessary. One of the few great minds who have noticed this disproportion between reasoning and all the other human faculties was the mathematician George Pólya (1888, 1985). In many of his seminal works such as “How to Solve it”, “Mathematics and Plausible Thinking” and “Mathematical Discovery” he does a step forward and suggest that analogical reasoning, generalization and specialization should be taught to students of mathematics and that researchers in mathematics should be more aware of such seemingly unorthodox methods.
Pólya’s writings are a very rewarding reading that I suggest you so much. Even if non explicitly expressed but the apprentice-mathematician is relying heavily on intuition, memory and unorthodox empirical practices such as “Let see what happens if I put this expression in this other…”. Many of the considerations from Pólya derive from his studies on old Mathematics master such as Descartes or Euler who were, first of all, great mathematical practitioners and then sublime theorists.
It is real “cruel really teaching Computer Science” as observed Dijkstra but for me it is ever crueler to impose a sort of mental castration to young Computer Science students on all their faculties except reasoning.
Take for example memory. Memory is absolutely important if you don’t wan any time to reinvent the wheel. Once you have found a solution you can classify it in order to recall it in a future similar, analogous case. Analogy so much important in all sciences, as confirmed by Pólya, will be useless without the faculty of memory.
Another highly disregard faculty, banned with the strongest prejudice is fantasy. Fantasy is a human faculty not less important than reasoning. Reasoning is, as we have already seen, to polish ideas, to refine ideas while fantasy is to represent ideas. The more universal is an idea the more abstract it is and the more you need some example to communicate it or simply to prove to yourself that you have really grabbed it, that it was not a ghost in your mind. Now the art of finding the right example, the art of ideas representation is exactly fantasy. The more you are intelligent, the more you understand ideas and if you are understand you can find examples, i.e. you can exercise your fantasy.
Programmers need fantasy. Of course I am not praising the “spaghetti code” fantasy of the real “macho” programmer of the old times. I am simply stating a fact that before all a great programmer is a great thinker because software is essentially a product of the mind. One among many others faculty of the mind is fantasy, the art of representation. Software is by definition the representation of ideas in the form of a system and of the composing algorithm. Consequently, fantasy is one of the most important quality for Computer Science.