Coding Dreams

I somehow ran into this page of Bret Victor‘s again.

I love it and hate it.

I love it because it shows a very beautiful vision.

I hate it because what is shows has really nothing similar to the programming I do everyday.

Bret is a guy that works more on the design side. I appreciate that he pointed out pretty accurately the pain points of programming.

However, it is like one of those very deceitful sales talks, that tells you that just two thing: first, your life is shit; and second, now imagine that what would be like if it is wonderful. And they tell you: yes, you can!

It is like dreaming. It makes you feel good, but it does not give out a god damn solution. Just never.

The page gives some examples illustrating the principles.

And here is my question: how to apply these principles to a real system project of 10000 lines of code, say a lab OS project like OS/161 or xv6? How would you visualize the code for an interrupt handler?

Or, how to apply these principles to all the algorithms in The Art of Computer Programming? How would you automatically illustrate an algorithm, draw the trees for trees (like B-tree), the graphs for the graphs (like Dijkstra), and the state machines for the state machines (like KMP)?

It is very hard.

Coding is not just drawing lines and rectangular. The underlying objects are often interacting in a non-linear fashion, even when the code has no goto’s.

Bret renders the problem as if programmers do not really recognize the principles. That is probably not the truth. Programmers might had never illustrated them as clearly as he did, but they recognize them implicitly by going through all the painful engineering, sometimes more lively than anyone else. The real missing part is the technology that can make all kinds of computer programs human comprehensible.

I appreciate Bret’s vision, and the presentations are also very well crafted. It makes more people pay more attention to the problem. However, the presentation also often gives people the illusion that the basic technology is already there, ready for use, and his vision is the critical missing point. That’s probably not the truth; the technology is still missing (though we are moving there slowly). I wish Bret could be just more clear and honest on this issue. As an example, he clearly spent a lot of efforts behind the scene on designing his demo so that they work beautifully, but he never talked about his efforts to build his presentation and it makes people feel like it is effortless. It is just so illusive, almost dishonest.

And he is asking people to invent new data structures that can be easily visualized. What if 2-D visualization at scale for programming logic of good utility is fundamentally an NP-hard problem? He says that programming has to be changed fundamentally. If so, Bret, could you please design, or at least give a presentation on how to design, something real, fundamental and has some moderate complexity, like a simple operating system and a simple compiler that can host themselves, yet every structure/data in the OS and compiler can be visualized under your principle?

Bret, what makes you believe that your vision is even possible? Where is the path? Where should the engineers start? Anything concrete?

I feel like I am such a hater now…

I don’t hate dreams. I just hate people talking about dreams but not clear about how real it is in its presence. I hate advertising dreams as if it could be reality already. These people harvest respects and attentions, steal all the credits (because their dreams seem so beautiful), yet provide no logical solutions on realization. They emphasize on what things should be, but talk too little about if it can be. It is unfair to the ones who will go deep into the problem and try to do the actual hard work but eventually might fail miserably (like Light Table and all people that funded it); they should have been better warned.