The Zen of Oscar

Writing a good research paper or thesis is hard. It can be very intimidating to figure out the scope of the work needed to be done. Thanks to Oscar, I have been empowered with three adjectives to  think about problems of scope. These adjectives were: breadth, depth and completeness.

Breadth and Depth

At the early stage of my thesis, I prepared a list of action items that I proposed to address for my research. I went to see Oscar for a confirmation that addressing these points would lead to a good thesis. I described him the list of action items and asked “Oscar, if I realize all this, will this make a good thesis?”. He look at me and said “For a good thesis, you must cover a topic with sufficient breadth and depth“. I came back to my office, confused and worried.

What I had failed to understand is that a thesis needs a frame. A frame has a breadth, and depth. The breadth characterizes the perspectives on the idea, and the depth the level of details. Say, your thesis is about dynamic updates. Technical feasibility and user adoption are two perspectives that belong to the breadth dimension. Implementation and formalization are different levels of details that belong to the depth dimension.

Different pieces of work have different ratios of breadth and depth. A position paper might have lots of breadth, but little depth. A paper proposing an optimization of an algorithm has little breadth, but lots of depth. For a thesis, you need a good ratio of both.


Later on, I was once invited to prepare an extended version of a conference paper for a journal. I prepared a draft of the changes and went to see Oscar. I asked “Oscar, are my changes enough for an extended journal paper?”. He looked at me and said “For a journal paper, you must do what is necessary for your research to be complete“. I came back to my office, confused and worried.

What I had failed to understand is that maturity of research is not defined by how much has been done in terms of effort, but by the actual amount of speculation left. Research is an incremental process, and a piece of research is complete when all that was needed to support the claim (results or analysis) has been provided. Let’s imagine that you have an implementation of a dynamic update algorithm that you claim is efficient. You must show efficiency in speed and memory use for the research to be complete.

Thinking in terms of breadth, depth and completeness has become a simple technique in my toolkit of planning methods.

Tangible Software

As an academic, one should develop a personal research agenda about the problems one want to tackle and the vision one want to push. Below is one agenda, written as a retrospective. Indeed, the best way to innovate is to “live in the future, then build what’s missing“. Following this advice, a research agenda shouldn’t be a speculation about the future written in present tense, but a retrospective in the past tense. This is an awesome technique to engage creative thinking.

A Retrospective on Tangible Software

The intangible nature of software has seen long been recognized as an impediment to software development, making development an overly abstract and difficult task. This lack of tangibility naturally inclines developers towards paralysis and complexity. In the past decade, progress on several fronts have made software more tangible, and in turn simpler and changeable. We review here some of the most successful research directions we explored.


A software truly exists in a fully tangible manner only at run time. In the case of object-oriented languages, the tangible software consists of objects. By putting objects at the center of the development process, development becomes more intuitive. We have achieved an object-centric programming language and tool chain. The languages features coherent constructs to promote objects, like object literal and object fragments. Modularity is entirely achieved via object nesting. The tool chain contains object-centric debuggers, object-centric profilers, and object-centric version control. For documentation, we have developed dynamic object diagram, an extension of UML that shows how object interacts and how they are organized in the heap at the same time.


Software systems are non-linear and developers lack intuition about the system dynamics. Consequently, understanding how a change in one aspect of the software system affects the overall system is hard. By putting system dynamics at the center of the development process, developers can more easily predict the impact of changes. In our sytem, behavior emerges from asynchronous communication of events between actors, stateful or statelss. An actor is linear if the frequency of events in the input stream is linear with the frequency in the output stream. Grouping events in bulks of fixed size is for instance linear; filtering events on non-unifrom predicates is not. Generating one output event per input event in fixed time is linear, in random time is not. To promote linearity, we promote the decomposition of the system into linear actors. This mere emphasis forces developers to think about and document system dynamics.


A unique feature of digital artifacts, including software, is that they can be copied at no cost. Collaboration happens thus on individual copies that are periodically integrated into a master copy. By putting the concept of a shared, unique, and tangible copy that everybody works on at the center of the development process, the sense of collaboration and awareness is increased. We have created a development environment that recreates the illusion of this shared, unique, and tangible copy without the drawback of the physical world. In this development environment, all changes are instantly broadcasted to all collaborators. The changes are however not necessary activated, making it clear which parts have ongoing modifications or conflicts. The platform successfully blurs the line between code review and version control, and the integration of individual contributions happens as a smooth and organic consensus.

Mind Blown

There’s lots of things to learn and know. Some are funny trivialities, some are joyful discoveries, some are intriguing theories, some are insightful lessons, … and some are mind-blowing revelations.

Here’s my top 10. Some of them still blow my mind!

Things are only impossible until they’re not. — Jean-Luc Picard

Have fun!

  1. Public-key cryptography
  2. Lamport’s bakery algorithm for mutual exclusion
  3. Meta-circular evaluation and homoiconicity
  4. Storing state with flip-flop
  5. 0.999… = 1
  6. Non-Euclidean Geometry
  7. Imaginary numbers
  8. The necessity of axiom of choice
  9. Fixed-point combinator
  10. Escape velocity