4 ms·
Earlier today, I took a note to myself saying this: The next-generation development environment will be a combination of: * a wiki (outlining content + versio
by TuringTest 8y ago
Earlier today, I took a note to myself saying this:
The next-generation development environment will be a combination of:
* a wiki (outlining content + version control),
* a spreadsheet (functional reactive coding + lightweight schema definition + easy working on collections), and
* a mockup wireframe builder (visual layout + visual state machines + rapid prototyping).
Pluggable connectors to constraint solvers and machine learning would be a plus.
I'm not sure that Jupyter fully captures all parts of the computation graph; most of all, restoring a previous state after closing and reopening it is cumbersome (if I'm not mistaken you need to run each individual cell by hand in the right order). There are theoretical models that could fix that, though, like those allowing for time travel debugging. And the visuals are simple and flexible enough to support many use cases. So yes, web notebooks are a good basis for a knowledge-building programmable platform.
- ontouchstart 8y agoJupyter system has three different subsystems that communicate via message passing: browser state, ZeroMQ and kernel process. Each system has its own leaky abstraction. That is why the version controls and time travel debugging in the traditional sense become impossible. We shoud embrace this challenge and think beyond document based IDEs. For example, you can think of rendered notebooks as caching. I have even played with the concept of using rendered notebook as the input/data source of another notebook. This looks like a radical idea. But it is exactly how https://nbviewer.jupyter.org/ https://nbviewer.jupyter.org/ works.
- TuringTest 8y ago> the concept of using rendered notebook as the input/data source of another notebook Isn't that essentially what a spreadsheet does? Each table contains the results of a previous computation, intertwined with input and configuration data, and you just keep chaining more and more programs through a single unifying metaphor (the cell coordinate system plus function expressions). This model also gets you reactive recomputation for free. It's a powerful system, but quite old; I'd say the only radical thing is convincing classic developers that there's a better model than their beloved imperative, one-step-at-a-time idea of what running a program means.
- ontouchstart 8y agoNot exactly the same model as spreadsheets. In spreadsheets, a cell is a value in memory. The sheet is a graph of states. In Jupyter Notebook, the cells are nothing but messages. And the saved notebook files are JSON serialized byte stream of the message and metadata. It doesn’t keep the states, just data, a digital artifact.
- TuringTest 8y agoYet spreadsheet cells may also be formulas, which are akin to method calls / message passing / function application. The value of a cell with a formula is the memoized result of its latest function call execution. I don't see an essential difference with a notebook cell, other than the layout - grid vs linear. (Although I might be missing something; I don't have broad experience with Jupyter's computation model). Plus, spreadsheets may also be distributed.
- ontouchstart 8y agoGood points. I don't care much about the visual layout of Jupyter notebook, so in this sense, it is not much different than spreadsheets. However, when I say Jupyter cells are nothing but messages to/from the kernel, it is profoundly different than spread sheets where cells can be message as you described. The same with distributed runtime states. Spreadsheets may also be distributed, but Jupyter notebook runtime is always distributed. You might have a half system like nbviewer that doesn't have a kernel running, but that is not a full Jupyter system. (I am distinguishing Jupyter runtime from the JSON byte stream artifact that we call a notebook file)
- TuringTest 8y agoSo, if I understand it right, Jupyter follows an agent-based model of computation, right? As opposed to spreadsheets, which follow a functional reactive paradigm. Yes, these are different computation models; although formally it is possible to transform mathematically one into the other, and vice-versa (in the same way that you can transform any computation model to a Turing machine or lambda calculus). It doesn't have any practical concerns, but it means that you can translate insights gained from one model to the other.