Tip:
Highlight text to annotate it
X
MERTZ: This is David Mertz reporting from OSCON 2011 for IBM developerWorks.
I had the opportunity to speak with Robert Lefkowitz -- who's a fascinating fellow --
and we covered a broad range of topics about orality and literacy and the history of rhetoric
and how that all relates to programming languages.
This is part two of that interview.
...the distinction you perhaps haven't acknowledged between time and space.
When a write a programming language or if I speak it orally, despite the limitations
of being able to do so, I always do so in time.
No matter, even if the...you know, whatever glyphs I select, however they're arranged
on the page, whatever colors they have or bold face.
LEFKOWITZ: Right.
MERTZ: Nonetheless, I exist as a writer or programmer in time
and one keystroke follows another.
LEFKOWITZ: Yes.
MERTZ: And so, there is, in a sense, a linearity that there has to be a one-dimensional sequence
of things that happens in order to create a program.
But then, the appreciation, the apprehension,
the reading of the program could potentially occur in more dimensions.
I mean, maybe in the future we'll need 3D goggles to read programming code, too.
LEFKOWITZ: Yes.
Correct. Although, one of the examples I gave was putting data in a table.
So, if you're using a word processor and you come to a part
where you have a data table, you put it in a data table.
Now, so, you insert a table and then you fill in the values of the table.
And when you look at it, how do you know what order the table got filled in?
And you don't.
Right? It could have been filled in row-wise or column-wise.
Right? So, the fact that there's ordering in the construction of it is unrelated to the semantics
of what it is that you're writing.
You could put it in in a number of different orders.
In fact, when you're typing it, you don't have to type it top to bottom.
Right? You could just do all of your function definitions and then go back
and fill in what they actually do.
Right? Just create them and have them print, not yet implemented.
And then go back and fill them in.
So, the order in which you do it, I don't know that that's related to the thing,
once you start putting in unicode, you begin to relax that linkage.
And 2D relaxes it even further.
MERTZ: Internationalization, which has, of course, the strangest acronym -- IATNM --
that one can imagine, because that's inherently English.
LEFKOWITZ: And I saw localization spelled "L-10-N" the other day.
MERTZ: Oh, have you really?
I haven't seen that just supporting unicode.
This is supporting a set of mappings.
LEFKOWITZ: Yes.
No, this is changing the whole way we think about programming.
MERTZ: But it also, things like tools for code coverage,
code analysis, you know, lint sort of things.
You know? You want to know, in this body of code, how many "for loops" are there?
LEFKOWITZ: So, what happened with actual applications for humans, for people,
as everybody who discusses this point wants to make the distinction between people
who use applications and programmers.
MERTZ: Programmers.
LEFKOWITZ: Is you stop thinking about having your strings embedded in your code.
Right? That is, you needed to insert a level of interaction.
That what was inserted into your code was some token that was merely good to be used
as a lookup key into what's effectively a database.
MERTZ: That's not just Eclipse database.
Grep has to do it, WC has to do it.
LEFKOWITZ: Why does grep have to do it?
MERTZ: Well, if I want to grep for all the loops in my program....
LEFKOWITZ: Yes.
Your program isn't stored in text.
MERTZ: How do I do this in your hypothetical....
LEFKOWITZ: So, there are two ways.
One is the IDE can do it.
Right? That's a search function.
So, if I'm in Firefox and I'm....
MERTZ: I don't trust IDE.
LEFKOWITZ: You don't trust IDE.
But so that is one of the fundamental things, right?
So, people have this very sort of close visceral action.
They need to perceive...they think of the source code as being some bit ASCII.
Right? So, all the tools that they're used to using on it are 7-bit ASCII tools.
So, one way is what I was saying that was the IDE does it.
But the other way then is, so in order to use any of this,
you have to take the source, localize the tree.
So, Git could do it.
I want to check this out in English.
I don't think the substitution thing works.
That's why I think it's an IDE issue.
Right? The application needs to understand, sort of, you are editing the abstract syntax tree,
fundamentally, is what it comes down to.
You are not editing the text.
MERTZ: Yes.
LEFKOWITZ: You know, 150-year project.
I'm not saying that...
MERTZ: No, not this decade.
LEFKOWITZ: You know, if we're looking back to the ancient Greeks to try to learn lessons
from them, it's been...yes, it's a 2,000-year project.
So, it might even be Perl 8.
More symbolic in various domains.
MERTZ: It seems like Pascal's pretty close to this already.
I mean, of course, it uses 7-bit ASCII, but it kind of has these SMIL-ey compositions.
LEFKOWITZ: Right.
It does compositions.
Right? So, sneaking up on it is you can do these compositions
of non-whatever few symbols we have in ASCII.
And then, the composed things are logically a glyph.
So, you say, okay, now we are just talking about representation.
We can use a more compact representation, and that would be an improvement.
Mathematica does it today.
A large database that has every...the union of all menu tags and button tags
that all applications in the universe use, or all open source applications use.
We have that union.
And then, for each one of those, you have the 125 languages
that you would want to localize that into.
And if you think about that grid, right,
one could fill out that grid and programs could be written.
Rather than having resource files, when you install it or change your locale,
it goes out to the API, pulls down the....
We could do no SQL or we could do SQL.
Right? It could be select the following from, you know.
MERTZ: I kind of think of it on the model of....
I mean, it doesn't have to be a local thing on the model of the DNS system, where, you know,
you have lookups as a distributed network.
LEFKOWITZ: As a distributed data.
Yes. Exactly right.
So, yes. I think of it as DNS.
That's a great way of thinking about it.
MERTZ: Basically what it is.
LEFKOWITZ: Right.
And then, you don't have to go to the main one, because it's sort of farmed out.
You go to the nearest guy who you could talk to and get the set of resources that you need
to localize this application for this locale.
And you don't have to ship it with every application.
You can call it "file" or you can call it "archivo" ...
MERTZ: Yes.
LEFKOWITZ: You know?
And it will mean what it means, whether....
MERTZ: But if you have "archivo" and then you have a Chinese variable name, and then,
you know, you assign that to a Hangul variable name, who reads this and how is this..
LEFKOWITZ: Well, I mean, so, this is where you separate syntax and semantics.
Right? There is no reason, if I have UTF-8 support,
that I cannot create a class whose name is in Portuguese and then assign an instance
into a variable whose name is in Hangul.
I could certainly do that; it's just that nobody would because...
MERTZ: Multiple people writing code.
LEFKOWITZ: Well, over time, yes.
MERTZ: Over time, you know, I happen to be a Hangul native speaker or Korean native speaker
and I love this class written in Japanese.
Well, the name of the class is whatever it is in Kanji, so I inherit from that.
LEFKOWITZ: So, one model, which often gets brought up, is that it's like aviation.
Right? You could speak whatever language you want, but when you're talking
to the tower, it has to be in English.
That's the...all towers are in English.
Pilots, all pilots, have to speak English, at least so far as their job goes.
In an alternate universe, you wanted to change that.
What would that look like?
How would you go about it?
How hard would it be?
It's certainly hard.
And it may not make sense in our universe.
MERTZ: Use your favorite natural language.
That doesn't mean that every time you open a document you translate the document.
LEFKOWITZ: That's correct.
Exactly right.
Yes. MERTZ: And in between, it has some elements of both.
LEFKOWITZ: Right.
It has someone elements of both, because programming...because programs are structured,
highly structured in an algorithmic way, the compilers and the interpreters needs to be able
to actually decompose all those parts of speech and there's no ambiguity about what is what.
MERTZ: Thank you for listening again to IBM developerWorks' coverage of OSCON.
This has been David Mertz and please tune in for future podcasts.