Is there another page that already talks about this stuff? ImageBasedLanguage
, I suppose. I just kinda like the term "text-file-oriented language." :) Feel free to move this or refactor it or whatever.
Adam, why the dissatisfaction with Ruby and Python? cf PythonVsRuby
. -- ao
This is gonna sound weird. (You're gonna regret asking. :) They don't feel real enough to me.
It's part of my growing disenchantment with the whole Unix/Windows/C/text-file-oriented world. (There, have I managed to offend everybody yet? :) Python and Ruby are pretty nice languages for that kind of world, but I'm starting to believe that that whole approach is a dead end.
I want a language and environment that are designed to work with the human brain. I want a language that makes me believe that the objects I'm manipulating are real
. (See RealObject
.) Reading textual descriptions of not-yet-living objects feels really weird to me now. (That's what a Ruby or Python or Java or C program is. It's a textual description of a world that doesn't exist yet, which the computer "runs" to convert it into a live world of objects. Programming, in a system like that, means observing the way that that world works, and then modifying the textual description, and then asking the computer to create the world again.)
The objects in that kind of a world don't feel real to me. Everything about the system is designed to make me feel like the program's text
is the thing that's real. The objects themselves are just ephemeral, transient things; they exist while I run the program, and then disappear. The text files are the things that endure, the thing that I'm creating.
That's a terrible way to think about a program. The programmer's problem doesn't have anything to do with characters and text files; it's about the objects in his problem domain. I want to think of the objects themselves
as being real. There are lots of interesting techniques that the language/environment designer can use to try to create that illusion; if you're interested, there are papers you can read at the SelfLanguage
website. But the idea behind it is: if you create an ArtificialRealityUserInterface?
which presents the illusion that the objects in the program are real, then the programmer will be able to take advantage of all sorts of subconscious skills that he's picked up from working with objects in the real world.
If you think of a language as being just a syntax and some semantic rules and maybe some libraries, then I like Python and Ruby just fine - they're both maybe a little too complex for my taste, but still very nice. But I'm starting to see the operating system and the programming environment as part of the experience of programming, and a text-file-oriented language like Python or Ruby just can't give me the same kind of experience that I get with a system like Smalltalk or Self. The Self environment helps me think
faster, by taking advantage of the kinds of things my brain is good at.
I'm doing a really bad job of explaining this. If you're interested in deciphering this, ask me some questions, and I'll try to clarify my thoughts, or give you some examples or something.
In that case, see ProgramsAreDatabases.
I really don't think that a program is a database. That's a terrible metaphor. My brain has no intuitive understanding of the concept of a database. We might use a database under the hood to store our programs, but that doesn't mean that it's the right user interface. I want to see my program in lots of different ways, but "database" is almost never one of them. (And neither is "bunch of flat text files.") -- AdamSpitz