My Best Teaching Is One-on-One

一対一が僕のベスト

Of course, I team teach and do special lessons, etc.

当然、先生方と共同レッスンも、特別レッスンの指導もします。

But my best work in the classroom is after the lesson is over --
going one-on-one,
helping individual students with their assignments.

しかし、僕の一番意味あると思っている仕事は、講義が終わってから、
一対一と
個人的にその課題の勉強を応援することです。

It's kind of like with computer programs, walking the client through hands-on.
The job isn't really done until the customer is using the program.

まあ、コンピュータプログラムにすると、得意先の方に出来上がった製品を体験させるようなことと思います。
役に立たない製品はまだ製品になっていないと同様です。

Saturday, April 21, 2012

APIs and mathematical languages (not an allegory)

(Copying and editing something I posted to groklaw:)

Went in to the other room to make my daughter's bed with this thought ringing in my head:

An API is an abstact language for commanding the abstract machine that is the program. And pretty soon copyrights look like patents and physical machines look like abstract machines, and the bases of property law disappear in a puff of smoke as everything becomes a metaphysical tangle of maths.

But let's fix that.

An automaton is an abstract mathematical machine. Some automata are models of real-world machines. Models of real-world machines vary in the degree to which they match the thing being modeled.

In theory, a really good model could be substituted for the actual real-world machine.

Programs are models of real-world machines and processes. When they work well, they are the poster children of the above principle, that a model can be substituted for the real thing.

(This is probably one of the primary sources of the illusion of software patents -- When we see a programmed model functioning as if it were a real machine, it's hard to that the program itself is an abstract model, and it's hard to understand that the thing which renders it a real machine is the combination of the CPU and the run-time model, oh! Deity, where is the termination condition for the recursion here?)

An abstract mathematical machine is equivalent to a mathematical language. Well, to a language plus the semantic mappings of the elements, by the time we humans finish interpreting the machine.

A mathematical language consists of vocabulary and grammar. (Natural languages differ from mathematical languages in that both vocabulary and grammar are fluid. In mathematical languages, The vocabulary and the grammar are fixed.)

A computer program is (the implementation of) a mathematical language, plus the semantics. This includes both (compilers for) programming languages and the programs written in those languages.

For instance, in the case of a program to add two numbers, the numbers are vocabulary, as is the addition command. The sequences in which the numbers and the command may be entered is the grammar. The semantic of this simple machine is the function of addition, and is somewhat independent of the language itself.

(There is a corollary to the principle of linguistics, that words have no inherent meaning, here.)

The language doesn't care about the output other than that the output shows (recognizes) whether the combination of vocabulary and grammar was valid or not.

In the functional (mathematical) model of this example, the numbers and the addition instruction are inputs, the addition operation, or transform, is (part of) the semantics, and the sum is the output.

An API is a set of inputs and validation rules for those input, with a specification of the expected operation or transform. Ergo, it is an abstract description of the language recognized by the abstract machine (ergo, the model) and its semantics.

In many cases, the API of real programs is not fully rendered in human readable form, thus the expression, "The code is the documentation." (Okay, in most cases, actually.) This is similar to the specifications of a physical machine not usually being fully exhaustive (especially in terms of error, failure, and other exceptional conditions).

We'd usually rather just get on with using the machine, you see.

So, when you dig down this far, you suddenly see all the frayed edges of all sorts of social artifacts, including the legal bases of property, itself. (Oh, nuts. Let's just get real and quote the preacher: "Vanity, vanity, all is vanity, and there is nothing new under the sun.")

The architects of the Constitution and the original laws about patent and copyright understood the above, and that's why there was not supposed to be any intellectual property under the US Constitution. We post-moderns, excited with our actual implementations of maths in machines, have lost sight of the forest for the trees.

Computers! Computers! We have our Computers, and we have no need of any further reality! (And we wonder why it is never really satisfying.)

If we get rid of the boundaries between real property and the somewhat intangible temporary liens on pieces of the market which copyright, patent, and trademark were intended to be, we find ourselves eroding the very principle of law.

And we shortly find ourselves without any protection left against either tyranny or the anarchy which tyranny hides.

(This came together better than it has in the past, I guess I'm going to copy this here and edit it a bit and then try to refine it a bit on my defining computers blog. Not yet for the refining part, though, I have a deadline hanging over me on a "real" job.)

No comments: