3 ms·
Another type of coding is describing the desired state and let the runtime environment achieve the transition. Unix Makefile is one of the early examples. So a
by ontouchstart 8y ago
Another type of coding is describing the desired state and let the runtime environment achieve the transition.
Unix Makefile is one of the early examples. So are HTML/CSS etc.
More recent examples are dataflow graph in tensorflow
https://www.tensorflow.org/guide/graphs https://www.tensorflow.org/guide/graphs
and kubernetes
https://github.com/kubernetes/kubernetes/blob/release-1.3/docs/design/README.md https://github.com/kubernetes/kubernetes/blob/release-1.3/do...
A new idea just occurred to me during a technical lunch meeting with a bunch of friends today: since Jupyter Notebook itself is nothing but a object graph, it might be possible to use a "computed" .ipynb for this kind of "coding", i.e., describing desired state.
That would be TDD in another sense.
- TuringTest 8y agoYeah, I happen to work with declarative statements + problem solver for a living :-) In this context, a precise textual description helps to exactly define what you want to achieve, but a graphical view helps to inspect how many different cases are there in your data, and how available context are connected. Representing state machines with graphs is a relatively common thing in rapid prototyping apps, so I've thinking of building a prototyping app that would also allow embedding real code and data in them (similar to Visual GUI builders, but allowing much more code to be defined visually). There are several tools attempting to achieve that, but all fail at the abstraction problem of defining new instances for your objects (i.e. you can't create new instances of arbitrary visually defined objects, only for things in tables).
- ontouchstart 8y agoI really enjoy this long and insightful discussion. Let’s see how deep we can go (in terms of the thread tree and thought itself). Declarative constraints driven problem solver was pioneered by https://en.m.wikipedia.org/wiki/Sketchpad https://en.m.wikipedia.org/wiki/Sketchpad and also used in places like Apple’s https://en.wikipedia.org/wiki/Interface_Builder https://en.wikipedia.org/wiki/Interface_Builder It is interesting that you use "texture description" for byte stream based artifact that we call code, which is runtime independent. On the other hand, the term "graph" in your second paragraph has double meanings: visual representation for human eye and brain to parse, and mathematical graph that has can be serialized in JSON, XML or whatever byte stream. I think many people are excited about GUI revolution pioneered by Doug Engelbart, Ivan Sutherland and Alan Kay for different reasons. Some people are excited about the implementations: bitmap display, mouse, etc., some people are excited about the principles and abstraction: MVC, constraints, data flow, messaging, etc, etc. With Jupyter notebook system, which is based on three state machines: a persistent kernel process, a DOM session in the browser, and a message queue, it is the first time that we might have a nice abstraction to capture a graph in space and time. That is at least why I am getting excited. The other features are just bells and whistles.
- TuringTest 8y agoEarlier 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.