h a l f b a k e r yAssume a hemispherical cow.
add, search, annotate, link, view, overview, recent, by name, random
news, help, about, links, report a problem
browse anonymously,
or get an account
and write.
register,
|
|
|
Just a foggy sort of idea where
universal icons, shapes, sounds,
etc. are used in some visual way
to construct elements which could
be built up to create software
applications. There would need
to be some symantic relationship
to what you eventually see on the
screen, but it would never
require
you to know a particular
language or type in textual
information. The kinds of apps
you could build would be very
visual, sensory, but could also
handle data structures, talk to
the web, etc. but all that is
hidden by the Visual Building tool.
This is not a Visual C++ but a
language completely set up with
no words.
one possible example
http://www.csun.edu.../93virt/Tdvp~1.html [triptych, Jun 28 2000, last modified Oct 04 2004]
Toontalk
http://www.toontalk.com Program through animated cartoons [acooke, Jun 28 2000, last modified Oct 04 2004]
visual programming languages
http://www.google.c...ogramming+languages There's been a lot of research in this direction; almost all the hits for this search are relevant. For some reason, it's never really caught on. The only notable success for the "visual programming" paradigm is UML... [egnor, Jun 28 2000, last modified Oct 04 2004]
unified modeling language
http://www.google.c...d+modeling+language The Unified Modeling Language is a standard for visually modeling software design. It's a little more abstract than a programming language (you can't *run* a UML "program"), but it's frequently used for specification purposes. It may not be quite what you had in mind, since there are usually words inside the shapes. [egnor, Jun 28 2000, last modified Oct 04 2004]
INTERCAL
http://www.tuxedo.org/~esr/intercal/ Abbreviation for 'Compiler Language With No Pronounceable Acronym' [pottedstu, Jun 28 2000, last modified Oct 04 2004]
Brainf***
http://www.muppetlabs.com/~breadbox/bf/ Language with 8 non-verbal commands. [pottedstu, Jun 28 2000, last modified Oct 04 2004]
Ook!
http://www.physics....r/esoteric/ook.html Simple programming language for orang-utans. [pottedstu, Jun 28 2000, last modified Oct 04 2004]
The Ultimate RISC
http://www.cs.uiowa.edu/~jones/arch/risc/ Taking the reduced instruction set to its limit - one instruction [pottedstu, Jun 28 2000, last modified Oct 04 2004]
befunge
http://www.catseye....a/esoteric/befunge/ Incoherent symbolic language [tanimac, Feb 14 2002, last modified Oct 04 2004]
[pottedstu]'s "Ook" link has moved.
http://www.dangermo...t/esoteric/ook.html It's now here (in case the redirect page is removed). [angel, Oct 04 2004]
Brian's Intercal Page
http://www.muppetla...~breadbox/intercal/ Woe upon those who enter this page. May you leave with your sanity intact. [muppetboy, Oct 04 2004]
Automator
http://www.apple.co...features/automator/ Though not a programming language per se, Mac OS X's Automator allows the "stringing together" of various programs' functions through a visual interface that doesn't require coding. [wooby, May 30 2005]
[link]
|
|
Slightly off topic but this has reminded me of a thought I once had: "Why don't we hear about chinese programming languages?" |
|
|
The vocabulary of a computer language is often very limited so would be suitable to be depiceted as individual word symbols. There would be no spelling errors in commands. |
|
|
The flavour of the language would come from the host language - chinese, japanese etc. |
|
|
(re st3f's annotation) One of the things I like about Java but which I've never seen exploited is the fact that its source encoding is Unicode. So in theory any Unicode character is valid in a Java program. Do Chinese-speaking Java programmers name their functions and variables with ideographs? Do mathematicians and physicists use actual Greek (and Hebrew, etc.) characters instead of spelling out their names? If not, they should! |
|
|
I don't know about Chinese programmers, wiml, but as a mathematician/physicist, I don't write my Java programs with greek characters for the simple reason that they are really difficult to type! |
|
|
I actually do use non-ASCII characters in Java programs. For example, in currency conversion programs, I might use , ¥, and £ as variable names. |
|
|
IBM's OpenDX (www.opendx.org)
isn't quite non-verbal, in that
there are still modules with
unpronounceable semi-English
names, but you can create a data
manipulation / visualising problem
fairly easily by dragging and
dropping commands, using the GUI
to set options. You connect the
input of one module to the output
of another by dragging lines
between them. |
|
|
You could create a simple program
by dragging an Input module onto
the screen, double-clicking to set
the input file, dragging various
other modules around and ending up
with the Image command which
displays a 3d rotatable picture on
the screen. |
|
|
It also lets you split your
program up into different sections
(which look like those tabbed
dialog boxes that Microsoft likes
so much) and joining up in various
ways. |
|
|
I'm sure that this general
principle could be extended to
"real" programming rather than
just visualising maps and
molecules and what not. |
|
|
Excellent idea. Assuming the Sapir-Whorf Hypothesis proves to be true (from linguistics/neurolinguistics), then this system of programming/metaprogramming could be an excellent tool for wakening. |
|
|
APL is a powerful symbolic "non-verbal" language. it was fun to learn. not fun to use. |
|
|
INTERCAL uses numbers for variable names, and has extremely limited control structures. Therefore a typical INTERCAL program might only contain a vocabulary of 10 words, one of which may be the unnecessary but polite "PLEASE". |
|
|
You would, however, be better memorising numerical machine code CPU op codes, and typing them in, in hex naturally. This would be less portable than INTERCAL, but also less likely to provoke insanity. |
|
|
The following machine code will multiply 2 by 3 and store the result, but only on an Intel Pentium and compatible microprocessor (you would have to set up the "ebp" register to point to the stack first); "//" is used as a comment marker; what follows until the end of a line is not part of the program. |
|
|
C7 45 FC 02 00 00 00 // load 2 onto stack
C7 45 F8 03 00 00 00 // load 3 onto stack
8B 45 FC // load first value into accumulator
0F AF 45 F8 // multiply by second value
89 45 F4 // store result on stack |
|
|
Language-neutral, I think you'll agree. Surprisingly, when people had to program like this, it was not uncommon for true programmers to know this kind of stuff off by heart. |
|
|
Writing that in Intercal would be far harder; in fact I have no idea how to do it, but since INTERCAL has no arithmetic operators, it's not going to be easy. |
|
|
National Instruments has a graphical programming language designed to interoperate with their data acquisition hardware. It is a data-oriented language rather than a procedure-oriented one. The language consists of operators (arithmetic, logic, data type conversion, etc.) represented by various geometric symbols with input and output connection points. The program consists of lines (indicating data flow) connecting outputs to inputs. In the end you get a tangle of colored lines (color indicates data type) resembling the schematic diagram of a complicated electronic circuit. It's not general purpose, but it is a programming language. |
|
|
I've seen something along these lines a few years ago for an interactive voice system (running on a Sun box of some sort).... you dragged & dropped icons on the screen to build a program which ultimately became a voice response system. |
|
|
...and, there was something else kind of like this that was once bundled as a give-away with (I think) Creative SoundBlaster cards, back in the DOS days. My memory is very vague on that one, but it was interesting to play with. It was for building interactive tutorials/Computer-Assisted Learning screens or something like that. Had icons for if/then/else, do xxx, and you joined lines around the place to make the logic flow. Kind of irritating, in a way, now that I think about it. |
|
|
The language Brainfuck has 8 instructions: |
|
|
> Increment the pointer.
< Decrement the pointer.
+ Increment the byte at the pointer.
- Decrement the byte at the pointer.
. Output the byte at the pointer.
, Input a byte and store it in the byte at the pointer.
[ Jump to the matching ] if the byte at the pointer is zero.
] Jump to the matching [. |
|
|
Because all actions are done by moving a pointer and modifying the pointer, there are no variables, and thus a Brainfuck program consists entirely of a combination of the above elements (see below for an example). |
|
|
Ook! is a variation on Brainfuck, a joke, but Turing-complete, programming language which consists entirely of combinations of the lexical elements |
|
|
The interesting thing is that the word "Ook" is completely superfluous, meaning the language essentially has 3 symbols. |
|
|
But you can go further. You only need one instruction for a programming language (or a microprocessor), "subtract and branch if negative", which would take 3 operands. Such a language would need no opcodes or commands, just triples of numbers: two data addresses (or variable numbers/names) and offset for the conditional branch (or line number to jump to). (Sorry, but I can't find any good links on this.) |
|
|
What follows is a quine written in Brainfuck. The linebreaks are to fit it on the page, and have no other significance (a quine is a program that produces a copy of itself as output). |
|
|
->+>+++>>+>++>+>+++>>+>++>>>+>+>+>++>+
>>>>+++>+>>++>+>+++>>++>++>>+>>+>++>+
+>+>>>>+++>+>>>>++>++>>>>+>>++>+>+++>
>>++>>++++++>>+>>++>+>>>>+++>>+++++>>
+>+++>>>++>>++>>+>>++>+>+++>>>++>>+++
++++++++++>>+>>++>+>+++>+>+++>>>++>>+
+++>>+>>++>+>>>>+++>>+++++>>>>++>>>>+
>+>++>>+++>+>>>>+++>+>>>>+++>+>>>>+++
>>++>++>+>+++>+>++>++>>>>>>++>+>+++>>
>>>+++>>>++>+>+++>+>+>++>>>>>>++>>>+>
>>++>+>>>>+++>+>>>+>>++>+>+++++++++++
+++++++>>>>+>+>>>+>>++>+>+++>>>++>>++
++++++>>+>>++>+>>>>+++>>++++++>>>+>++
>>+++>+>+>++>+>+++>>>>>+++>>>+>+>>++>
+>+++>>>++>>++++++++>>+>>++>+>>>>+++>
>++++>>+>+++>>>>>>++>+>+++>>+>++>>>>+
>+>++>+>>>>+++>>+++>>>+[[->>+<<]<+]++++
+[->+++++++++<]>.[+]>>[<<+++++++[->+++++
++++<]>-.------------------->-[-<.<+>>]<[+]<+>
>>]<<<[-[-[-[>>+<++++++[->+++++<]]>++++++++++++++<]>+++<]++++++[->+++++++
<]>+<<<-[->>>++<<<]>[->>.<<]<<] |
|
|
Non-verbal enough for you? |
|
|
This is close to being my favorite œB page of all. |
|
|
C:\> copy con program.exe
|
|
|
Very baked. Simulink in Matlab for creating complex math formulae. Excel / Access Macro creation. |
|
|
We all know it's baked in trivial, not-really-programming situations. That isn't really the idea. |
|
|
Logic gates are one nice example; math formulae similarly. But they are limited to very specific domains. |
|
|
LabView, from national instruments. I'll find a link sometime. |
|
|
Particularly geared towards industrial testing, measurement, and computer control, but should be flexible enough to do anything, from what I gather. (what is it they say you need to write any program? an if, a loop and something else) |
|
|
To write any program, you need a Turing machine or any Turing-complete language. As said above, even BrainFuck has that. |
|
|
That doesn't mean I'd want to write a database in one, though. |
|
|
Actually, you can write non-verbal programs in "verbal" programming languages. For example, this C statement: |
|
|
for(i=j=k=1;--j||k;k=j?i%j?k:k-j:(j=i+=2)); |
|
|
btw, it is unknown whether the statement will halt since it finds the first odd perfect number, whose existence is an open question in mathematics after centuries of inquiry. |
|
|
A snippet of Intercal for your enjoyment (I believe this is some kind of Hello World program). BTW, the link to Brian's Intercal above may induce insanity when you come to the realization that he's implemented not only Quining and a floating point library in Intercal, but also Fast Fourier Transforms!! OUCH! |
|
|
DO .6 <- ",1 SUB .4"~#255 |
|
|
DO .6 <- !6~#15'$!6~#240' |
|
|
DO .6 <- !6~#15'$!6~#240' |
|
|
DO .6 <- !6~#15'$!6~#240' |
|
|
(1) PLEASE DO .4 <- ",1 SUB
.4"~#3840 |
|
|
BTW, I really like this idea so I'm giving it a croissant! |
|
|
One interesting real-world, really-useful application of this general concept is in UML "roundtripping". UML is semi-nonverbal and conveys a whole lot about how a program is organized (although not enough about how it works yet). |
|
|
UML is a nice idea, but it specifies a very small part of the design of a program in huge detail. It still needs some work before it's the flexible hold-all tool its proponents claim it is. |
|
|
There's synth software out there that has a graphical programming interface. Basically, there is a blob and it makes a sound when it hits each graphic element. Some elements let the blob pass through others reflect it at right angles (you can build complex loops). Spacing determines time between sounds. It's fun for about 15 mins. |
|
|
I also heard that the Chinese have written a program based on their character set (many thousands of symbols) It'd take years to learn to speak Chinese, but you could probably learn the key element (DO, FOR, UNTIL, etc.) pretty quickly so that's about as close to non-verbal as makes no difference. |
|
|
And for the ultimate non-verbal language - just go back to assembler! |
|
|
I had one of those sort of days yesterday. I started out with a program that was producing slightly incorrect output and by the end of the day had turned it into a program that produced no output at all. |
|
|
In APL, a very nice symbolic language, it was very easy to do truly enormous number crunching with just a few symbols. But it was almost impossible to fathom the logic the next day without ruining the beautiful nuclear compactness with excessive comments. I loved it those many years ago, but the lack of an APL keyboard (now available) was always a drawback. |
|
|
// necessary and apparenlty congenital step of knowing C // |
|
|
You have glimpsed the essential truth, Grasshopper. Great programmers are born, not made. |
|
|
To a born programmer, everything - even the NT driver SDK - makes sense ..... |
|
|
I programme everything in LabView,
which is (I think) utterly brilliant. I have
not found anything I can't do (at least,
anything I can't do in LabView which I
would be able to do in any other
language), it's incredibly fast to code,
intuitive, portable, and it makes no
difference whether your native tongue is
English or Mandarin. |
|
|
I just noticed [yamahito]'s annotation
above mentioning LabView - yes, it is
flexible enough to do anything, at least
in all the areas I've used it in (graphics,
robotics, statistics, image analysis). |
|
|
//I also heard that the Chinese have written a program based on their character set // |
|
|
You've got an extra moon here, that's why it's not working. And did you declare this bamboo? |
|
| |