A Cybernetics DSL?

My introduction to formal systems was in a cybernetics class. The more I learn about concepts in programming language design, and the direction that hardware seems to be evolving, the more I think that a domain specific language for cybernetics would be a worthwhile experiment. Has someone done this already? I see glimmers of possibility in the pi-calculus, functional-reactive programming, dataflow languages, DSL's for audio synthesis. I was intregued, back when this old thread was posted, by Hank Thediek's comments, and some others following along his line of thinking. It has haunted me since.

I would love to be told that someone has already made such and such language and this is why it does not work to integrate cybernetic models into programming. But, if it has not been really tried, I have an instinct that tells me the results could be very interesting.

On a untested brainstorm kind of level, it seems like feedback could be a refinement of a closure variable or monad, the concept of a system that can be open or closed to energy, perturbation, information, or control seems to map well to varying levels of scoping, encapsulation and information hiding... etc. Of course, alot of the information theory and computation theory that evolved through with and leading up to cybernetcs are also ancestors of modern computer science, but it really seems like the low hanging fruit is still ripe and yet to be plucked.

The biggest rift I see between computer science and cybernetics is that cybernetics seems optimized for systems where components are unknowable or unpredictable (harsh external environments, hostile or incompetent users, incomplete or error-prone measurements, heuristic behaviors), while computer science seems to always strive for complete information, provability. To attempt what is surely an overgeneralization, but something close to what I mean: a cyberneticist adds redundancy to prevent failure, a computer scientist eliminates redundancy to simplify models (and then any reader of the daily wtf would be able to tell you: a software developer puts in redundancy in a way that increases the chances of failure).

Since cybernetics was designed for systems with heterogeneous and loosely coupled components with a minimum of (well specified) information flow, it seems like an ideal model for programming with multiple processes/computers, for human/computer interaction design, and for compiler/language design (finding the best fit of a high level formal model and a limited state machine representation of that model).

To sum up: is there a cybernetic DSL that someone made that I can try? Is cybernetics just out of fashion, or technically unsound and superseded, my teachers just those last conservative dinosaurs who never admitted they were wrong? Have cybernetic principles been tested and dismissed as a failure, integrated so sloppily that we no longer know what we knew in the '50s, or simply overlooked?

Please forgive the rambling of this post, I am trying to talk about something I have a incomplete understanding of, and would be honored to have others here help me clarify these things.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Ptolemy II & SelfMan

I'm not entirely sure what you mean by a "cybernetic" language. I'm guessing something that permits feedback loops and heterogeneous models. That being the case, you might be interested in UC Berkeley's Ptolemy II, which is a visual language for modeling, simulation, and design of heterogeneous systems (which can IIRC include feedback loops).

Although not specifically a language development project, Peter Van Roy & Co are looking at some things related to cybernetics in their SelfMan project, and you may well find some language pointers there.


The Ptolemy II link looks at least close to what I was asking about (though java is not exactly to my taste), or at least part of it. SelfMan looks interesting, but does not seem to have an explicit software component that I could find.

By a cybernetic language I meant one in which systems concepts could be natively expressed, without too much cognitive shear or abstraction leakage. Feedback is one good example, (especially if there were a semantics for propagation delay and filtering), and I am not sure what the full implications are of what I am asking, this is exploritory to me.

Apropos feedback, some sort of best practices for designing self modifying / self adjusting systems seems desirable. That is, some set of rules to know whether, in a program, you are using reflection (self reference) in a way that increases or decreases the stability of the program. Stability, of course exists in multiple domains: the coherency and extensibility of the code base, the reliability of the running program, etc. - but the nature of cybernetics is exactly the ability to generalize across domains, and figuring out how far that generalization can go. Chances are that there are very similar rules for organizing interdependent complexity in a codebase so that it is not brittle (abstracting out a part of your code can simplify your code, or make it more complex), and designing the running application so that is not error-prone. Someone once described cybernetics to me as the art of defensible metaphors. We programmers seem to love metaphors, and misuse them constantly, and disastrously. So I wonder what can be applied to programming from cybernetics (and how close cybernetics can be to a semantics for programming).

see also PyDSTool

see also PyDSTool

You might be interested in

You might be interested in System Dynamic, and one of the commercial implementations. I sometimes play around with vinsim. There is a free download along with a large library of worked out simulations including Forrester's famous simulation of the world. The system was actually invented by Jay W. Forrester, 1971, "World Dynamics" Cambridge MA. Wright-Allen press.

In my estimation this is one of the great DSL's of all time. The system automatically sets dynamic simulations based on graphical and data structure inputs.

Rather than solve the

Rather than solve the "soft-ware" crisis, I think it might be fun to go back to a time when there was no software crisis; heck there wasen't even any software. It was the cybernetic age. Nothing better characterizes cybernetics than analog computing. One of the links at the bottom explaines how to set up a problem on an analog computer. At the end the author simply says:

Analog computers are more than just fascinating relics – they are the last
reminescences of a wonderful technology and (way more important) they teach one
to think in a way completely different from the way one with a background in digital
processing is trained to follow.

Thinking the analog way will result in solutions which might never have been thought
of in a conventional digital environment.

Control systems design

It's probably worth noting that many ideas behind analog computing are still regularly used by control systems engineers (hardly surprising, since cybernetics and early control theory were closely associated). Of course, these days the control system is unlikely to be built out of op-amps. The more likely path is for the the control system to be designed and simulated using something like the Simulink visual toolset, and then converted into a digital implementation either by hand or via code generation. Simulink is, in that sense, yet another "cybernetics DSL", although it doesn't support the rich set of computational models that something like Ptolemy II makes available.