[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:25827] Re: 文系理系 (Re: 日本語プログラミング (Re: ワープロ))



立山です。

 なんだか、私の考えを物凄く誤解されてゐる気がします(^^;)。
 くぼたさんの投稿を読んで、「え? 何でさうなるの? そんなこと、考へ
てもゐないのに反論されても応えようがないよ」と悩んでをりました。
 すぐさま「何か誤解されてませんか」と反論しようかと思つたけど、よくよく
自分の投稿を見直してみると、これは誤解されても仕方がないことを書いてる。
 う〜ん。自分の説明不足と表現力の足りなさを実感してしまふ。
 うまくまとめられませんでしたが、もう一度私の考える理系文系について
説明させてもらいます。
 かういふ、個人の感覚について議論を続けても泥沼になりさうだから、この
辺で打ち切つてもよかつたんですが、自分の考へを誤解されたまゝ終はるのは
気持ち悪いので……。

On Thu, 7 Dec 2000 14:04:33 +0900
Tomohiro KUBOTA <tkubota@xxxxxxxxxxx> wrote:
> けっきょく、「文系」「理系」という言葉でなにを連想するかがぼくと
> 立山さんとで違った、ということですね。

 多分さうなのでせうね。

> >  あの例では判らなかつたかもしれませんが、Mindの文法はいはゆる逆ポーランド
> > 記法でして、日本語の語順に近いんですよね。
> >  だから日本語を書く感覚でそのまま書ける。
> > 
> >  a = 1 + 2 - 3;
> > 
> >  をMindで書くと、
> >  1と 2を 足したものから 3を 引いて aに 入れる。
> >  となつて、(我々日本人が使ふ)自然言語に近い書き方が出来るんです。
> 
> 数式は、ふつうのほうがいいなあと思います。
> 慣れの問題なのかもしれませんが。
> 小学校以来、ずっとふつうの数式を使いつづけてきているので。

 あ、勿論複雑な数式が必要なときに、全部日本語表現でしか書けないのは不便
だからその気になれば、Mindでも数式表現はできますよ、
 [a := b * c]
 ↑こんな感じになります。

 ちなみに全ての語は全角で書いても半角で書いても同じです。
 以前の投稿では、Mindらしい表現の例として出したので、あえて普通の数式
と違うものにしました。
 でもMindらしい数式の書き方といふと、日本語で意味の判る変数名を使つた
下記のようなものですね。

 [売り上げ := 単価 × 個数]

 上記で判る通り、「×」や「÷」といふ小学校からの算数で使ふ記号そのまゝ
で書けます(プログラマになじみの深い「*」や「/」も使えます)

> というか、逆ポーランド記法の例としては、数式しか見たことがない
> のですが、他の例ってありますか?だって、プログラムって数式だけで
> できてるんじゃないですし。

 う〜ん。数式が一番判りやすいですけど、以前例文で説明した

 「こんにちは」と 一行表示すること。

 ではその例になりませんか?
 一般的にMindでは「コマンド オペランド」の順ではなく「オペランド 
コマンド」の順になります。
 英語のやうな「動詞 目的語」ではなく日本語のやうに「目的語 動詞」
です。「print sum」ではなく「合計を 表示する」とかいふやうに。
 だから日本語として自然な表記が可能な訳です。

 まあ、言語仕様として日本語と近い表記ができるからといつても、日本語と
して判りやすい単語名を付けて、判りやすい書き方になるやうにしないと、
暗号のやうな意味不明な文章になるのは他の言語と同じですけどね。

 例へばシステムに近い部分で、低レベルの機能を効率的に書かうとすると、
以下のやうな表記になります(下記の例はMSDOS専用です)。
-------------
文字列表示とは
       文字列情報分解し
       !CXし !DS+DXし
        1を !BXし
        40Hを !AHし
        システムコールすること。
-------------
 ちなみに意味は、
   文字列情報変数を アドレスとカウントに分解し
   カウンやアドレスをCXレジスタやDS+DXレジスタに入れて
   BXレジスタに1(標準出力のハンドル)を入れて
   AHレジスタに40h(Write機能)を入れて
   INT21Hを実行する
 …といつたところです。

> >  別にさういふ意味の投稿ではなかつたのですが、でも、
> > >   日本語 (母語) = 文系的
> > >   英語 (母語以外の言語) や記号 = 理系的
> >  というのは私の考えに近いですね。
> 
> 理系だからといって母語以外の言語への抵抗が少ないわけではありません。
> もし、立山さんのまわりの理系な人がみんな英語が得意だとしたら、それは
> たまたま得意な人が集まっているだけか、それか、得意でない人もいるけど
> その人は努力家か、どちらかだと思います。

 あああ、されは極論でせう。
 確かにその考へに近いとは書きましたが、それが私の考へそのものだといふ
わけぢやないんです。
 改めて説明しますと、私が考える文系/理系といふのは…

 文系の人 :日本語(または母国語)の自然言語を使つた判りやすい表現を好む人
       の割合が多い。
 理系の人 :英字(の省略表記)や記号を混じへた合理的で簡潔な表現を好む人の
       割合が多い。

 と、こう感じています。

> この論法だと、
>   母語しかできない人 = 文系的
>   母語に加えて外国語もできる人 = 理系的
> という感じになってしまいますが、それは明らかにおかしいでしょう?

 勿論おかしいです。でもそれは極論ですよ。
 論理を極論へ導いてから、それを否定されても、そんなこと云つてるつもり
のないこちらとしては戸惑つてしまひます(^^;)。

 元々の対比は「日本語」と「英語」ではなく、「日本語」と「英語や記号」
でしたよね。その「記号」の部分にアレルギーを感じるのが文系なんぢやないか
といふのが、私の考えです。
 そして、しかも記号が混じつている上に使われゐてる言語が母語ではない
英語ときては、もはや「まるで暗号ぢやないか」…と頭から自分には理解でき
ないものだと忌避し、理解を拒絶してしまふ人が多いのではないかと思つて
ゐます。

 言葉の意味するところが判つていれば、簡単で短く入力しやすいものがいい。
 論理を明確にするためには記号を使つた方がいい
 数学や科学の各種記号とかは、さういふ考えで出て来たものですよね。
 そしてさうやつて記号や省略語を駆使した合理的な記述に美を感じ、魅力を
感じる人が(理系の学校へ進んだかどうかは別として)理系的な人なんぢや
ないかと思つてます。そして、その魅力を感じるかどうかの素養がプログラ
ミングに魅力を感じるかアレルギーを起こすかの違いになつているのではない
でせうか?

 私自身は自分自身の分類基準からするとバリバリの理系人間ですね。数学大
好きでしたし、たとえ公式を忘れても、基礎から演繹して計算すれば、ちやん
と正しい回答に辿り着けるところに美と魅力を感じます。
# なお、文系科目では国語が好きで、日本語の語源とか文の論理構造とかさう
#いふものについて知るのが好きでしたね。今、日本語プログラミング言語に
#興味を持つたり、歴史的仮名遣ひ使ふやうになつたりしてるのは、その辺の
#嗜好があつたからでせう。

 もちろん文系と理系とが一つの要素だけを基準に、白か黒かとハッキリと
分割出来るやうなものでないことぐらゐは判つていますよ。いくつもの要素が
からみあつて、それぞれが自分の事を「どちらに属する人間だ」と判断するか
あるいは他人が「あいつはどちらに属する人間だ」と判断するものでせう。
 基本的には、理系科目が得意(好き)で(理系の学校に進んだ)人を理系、
文系科目が得意(好き)で文系の学校に進んだ人を文系と云つてゐるわけです
よね。
 だけど、理系の学校に進んだ人にも文系科目も得意な人だつているし、逆も
ゐる。かういふことだと思ひます。

 そして私の印象だと、文系の(学校に進んだ)人には理系科目にアレルギー
を起こす人が多い。
 本当は、人間の素養としてはそんなに差があるわけもないんだけど、自分で
理系科目(やプログラムなど理系的だといわれるもの)に対して、「自分には
向いてない」と判断を下し、理解する努力を放棄してしまつてゐる人が多い。
 と感じてゐます(あくまで私の印象ですので(^^;))。

> > #Mindは日本語言語なのですが、見た目の感じからして、理系の人からは逆に
> > #敬遠されさうな気もしたりして。本当のところはどうなんでせうか???
> 
> 私は BASIC から入って、アセンブラ (Z80、8086)、C、と進んだので、
> 日本語表記にさほど魅力を感じなくて、かえって入力がめんどくさそう、
> と思ったりします。でも、入力が面倒なのは私が理系だからではなくて、
> ほんとうに入力が面倒だからですよね。それに、理系、文系と英語の
> 得意下手は関係ないでしょう。

 勿論理系文系と英語の得意下手は関係ないですが、なんでこの質問に対する
回答にさういふことが出てくるのでせうか? (? ?)

 英語の得意下手を訊いているのではなく、ここは単に「プログラムを日本語
で書くことに抵抗があるのではないか」といふことを訊いているだけなのに…。

 説明が足りませんでしたが、私が「理系の人から逆に敬遠されさうだ」と
書いたのは、理系の人は、英字表記のプログラミングに慣れ親しんでいるから、
(それとは見た目が異質な)日本語表記プログラミングに抵抗を感じる割合が
高いのではないかといふ意図だつたんです。
 で、結局、くぼたさんも実際抵抗はある訳ですよね。
(面倒くささうだ、といふ理由で)。
 多分そこは「慣れ」の問題が大きいんぢやないかとは思ひますけどね。

 それから勿論全ての人がさうだとか極論をいつてゐるつもりもないですよ。
当然さうでない人もゐるでせう。こゝでも何人かの方がMindを知つてゐて、
面白いと感じてくれているらしいのを知りましたし、かくいふ私自身、まがり
なりにも理系人間(のつもり)だけど、Mindの面白さを気に入つた口ですし…。
 だけど、理系の人にはプログラムを日本語で書くことを、気持ち悪いとか、
面倒くさそうだと抵抗を感じる人が多いんぢやないかなあと思つてゐます。

 入力の面倒さといふことだと、私は日本語で書くのも英語で書くのも対して
違いは感じないですけどね。英語系のプログラムを書くときには日本語入力を
オフにしたまゝ、日本語の文章(やMindプログラム)を書くときには日本語入力
をオンにしたまゝでゐるだけですから。
 
> 「関数」「プロシージャ」「サブルーチン」、なんと呼ぼうが、どんな
> 表現形式であろうが (「{}」で囲むか、空行で区切るか、などなど)、
> 同一の形式であることには違いがないと思います。
>
> そうですね... 「関数」だと、値をやりとりするという機能が必要かな。
> たとえば、C でファイルから1バイト読み込むのは「fgetc」関数ですが、
> 「どのファイルから読むか」という情報 (値) を渡して、「読み込んだ
> バイト」という情報 (値) が返ってくる、というふうに。もちろん、
> やりとりしないことも可能です。
> 
> もし Mind の「××とは」に値をやりとりする機能がなければ、それを
> 関数とは呼べないと思います。

 あ、言葉が違つてるだけぢやないかと突つ込まれるんぢやないかなあと思つ
たけど、やつぱり突っ込まれましたね(^^;)。
 でも、私の考へとしてはMindの処理単語とCの関数は大分違ふものといふ気が
するのですが。具体的な違ひを説明しろとなると困りますね。
 Mindでの処理単語とはどういふものか、簡潔に違ひを説明したいのですが、
うまく誤解されずに伝へられる自信がないので、Mindの更なる紹介も兼ねて、
以下、もう少し詳しく具体的にMindの処理単語とはどういふものかを説明して
みます。それを読んでから、ご判断ください。以下の説明を訊いても同じもの
だと感じるのなら、それでは、あなたにとつては同じものなんでせうねとしか
応えられません。

 MindといふのはForthと同じスタック仕様言語です。
 データのやり取りは基本的にスタックを介して行はれます。外部変数を使つ
てスタック以外でデータをやりとりすることも出来ますが、それはあくまで例
外です(Cでも、引数を使わず外部変数を使つてデータをやりとりできますよね
それは例外だといふのと同じです)。

 処理単語といふのは、スタックからいくつかのデータを取り出し、スタックに
返すという形で動きます。Cの関数呼出しでいふ、引数や戻り値をやりとりする
ためにスタックを使います。
 そしてMindのプログラムといふのは処理単語の並びで出来ています。
 以前説明した例文の

   1と 2を 足して 3を 引いて aに 入れる。

 では「1と」「2を」「足して」「3を」「引き」「aに」「入れる」の
全てが処理単語です。
 「足」「引」「入」だけが処理単語なのではありません。「1」「2」
「3」も立派な処理単語です。
 そして、どう実行されるかといふと

 「1」を実行して「2」を実行して「足」を実行して「3」を実行して「引」
を実行して「aに 入」を実行する。
 といふやうに基本的には直列で実行されます。
(もちろん条件分岐や繰り返し構文を使えば流れを制御できますし、一部の
処理単語に対してコンパイラが行う逆転介入といふ例外もありますが)。

 「1」とか「2」のやうな数値を実行するつてどういふ意味だ?と思はれる
かもしれませんが、数値である処理単語は「数値をスタックのトップに置く」
といふ処理単語としてコンパイラに解釈されて、さういふ命令としてコード化
されます。

 最後に「aに 入」だけ組になつているのは、「入れる」といふのは、Cで
いふprintfやfprintfのやうに可変引数が扱へる特別な処理単語だからです。
「入れる」に関しては例外的に、コンパイラが直前の変数を見て、それぞれ
相応しいコードにコンパイルします。

 実は「入れる」といふのはとても強力な処理単語です。
 直前の変数が「aと bに」とか「aと bと cに」といふやうな並列表
記だつたら、並列表記された変数の分だけまとめて代入処理を行ひます。更に
変数の種別に応じた代入処理を行ひます。

・ 数値変数や文字列情報変数(Cでいふポインタ変数のようなもの)だつた
  なら、スタックにあるデータをそのまま変数に代入します。
・ 文字列実体変数だつたならスタックに置かれている文字列情報が示す先の
  実体である文字列そのものを文字列実体変数の示すアドレスへとコピー
  します(この場合はmemcpyのやうな動作になります)。
・ ファイル変数だつたならファイルの内容をファイルに出力します。
  さう、Mindでは「ファイルAを ファイルBに 入れる」といふことも
  出来るんですね(^^;)。この場合、ファイルBの現在のファイルポインタの
  位置に、ファイルAの現在のファイルポインタからファイル終端まで、が
  複写されます。

 と、こんな感じです。

 さて、先の例題の文がどう実行されるかを、スタックの動きとともに図示
しますと。

        命令                  スタック
        1と                  1
 「1」が実行され、スタック(のトップ)に1が追加される。

        命令                  スタック
        2を                  1、2
 「2」が実行され、スタックに2が追加される。

        命令                  スタック
        足して                 3
 「足」はスタックから2つの数値を消費して、1つの数値を返す。
1、2がスタックから消費され、演算結果の3がスタックに置かれる。

        命令                  スタック
        3を                  3、3
 3がスタックに追加される。

        命令                  スタック
        引いて                 0
 「引」は「足」と同じやうにスタックから2つの数値を消費し、1つの数値
を返す。3、3がスタックから消費され、演算結果の0がスタックに置かれる。

        命令                  スタック
        aに 入れる              (空)
 変数aに スタックの内容が代入されます。スタックは消費される。

 と、かういふ風に動作します。

 このやうに、それぞれの単語はスタックから必要な数だけデータを消費し、
必要な数だけスタックにデータを置きます。必要なデータや返すデータの個数
は処理単語によつて異なります。何も消費しなくてもいいし、何十個消費して
もいい。スタックに置く(返す)データの個数も可変です。何も返さなくても
いいし、沢山返してもいい。

 例えばスタック仕様言語であるMindに特徴的な処理単語として、「複写」
「交換」「捨てる」といふ処理単語があります。

 「複写」は、スタックトップにあるデータと同じものをスタックトップに
複写します。スタックを消費せず、スタックに1つのデータを返します。
(あるいはスタックトップのデータを1つ消費して同じものを2つスタック
に返すと考へてもいいです)
 「交換」はスタックのトップにあるデータと2番目にあるデータを入れ換え
ます。これは2つのデータを消費して2つのデータを返す処理単語です。
 「捨てる」は、スタックトップにあるデータを消します。1つだけスタック
を消費して何も返しません。

 スタックを介してデータをやりとりするといふことは、スタックに必要な
データが積んでありさへすれば、そのデータがいつ置かれたものであつても
構はないといふことです。

 例へば、

   5を 個数に 入れ 100を 単価に 入れる。

 の代わりに、先に数値だけをスタックに積むやうにして

   5を 100を 単価に 入れてから 個数に 入れる。

 と書くことも出来ます。

 この場合「5」をスタックに詰んだまゝの状態で、「100を」「単価に 
入れ」が 実行され、その後の「個数に 入れる」ではスタックに積んだまゝ
残つていた「5」が使用されます。
 まあ、かういふ単純な場合は、普通こんな書き方はしませんけどね(^^;)。
 でも、途中の作業結果を後で再利用したいときなどには「複写」でスタック
にデータの作業コピーを積んで置いてから、後でそのデータを取り出すといふ
この例に似た使い方をすることがあります。なお、スタックに積んだものは、
ちやんと忘れずに取り出す(または「捨てる」といふ処理単語でスタックから
消す)ようにしないとスタックずれを起こしてバグります。

 Mindの処理単語とはかういふ風に動作するものです。
 これを関数と同じと判断するかどうかは、くぼたさん次第です。
#私としては関数とは違ふものといふ感覚ですが。

> 私は学生のころ、化学が専攻だったのですが、研究室で、Windows パソコンの
> 前にすわって DOS 窓を出して、DIR と打ったら、神様扱いされてしまいまし
> た。マクロなんて言うに及ばず。文系理系というよりは、知ってるか知らない
> か、ということではないでしょうか。私がいた環境はおもいっきり理系だと
> 思いますが。
 さうですね。知つてゐるか知らないかの差といふ部分もあると思ひます。
 ただ、私が考える理系(または理系的な人間)といふのは、理系的なことに
対して、興味を示す(知らうとする努力を行う)度合いが強い人ぐらゐの意味
です。

> というか「判らないから誰か教えて」といって理系な人を頼るのは、
> 面倒なことを (理系な人なら得意だろうから、面倒だとは感じない
> だろう、という世間の偏見にかこつけて) 理系の人に押しつけてる
> だけのように思います。勉強したから知ってるのです。それを
> あたかも天性だから勉強しなくても簡単に分かるだろう、という
> ふうに思われるのは心外です。若干の個人差はあっても、その
> 助けを求める相手と同じだけ勉強すれば分かるようになるはず。
 
> Mind プログラミングなら OK でマクロはダメ、というのなら、それは
> 能力はあるのに「頭の中の亡霊」におびえてるだけ、ということに
> ならないでしょうか。

 まさにその通りぢやないかと思ひます。
 「頭の中の亡霊」に邪魔されて理系的な(と思はれる)ことに対して手を
出せないでゐるだけでせう。
 だから、さういふ人には、日本語表現など、その亡霊に対する恐怖を薄める
といふアプローチもあるんぢやないかなと思ひます。
 さういふ意味で表現といふのは大事なんぢやないかと思ふんです。
 アルゴリズムがちがちでなくするのもアプローチの一つだらうし、表記を
判りやすい母語で置き換へるのもまたアプローチとしてありなのではないで
せうか?

 表現が英語でも日本語でも、実質が同じなら変はらないぢやないかといふ
発想じたいが理系的発想に思へるんです。
 それを突き詰めて行くと、実質が同じなら表現は簡潔な方が合理的で便利だ
といふことで、単語を省略したり、記号を使つたりして。どんどん自然言語
から離れたものになつていく。さうなると、文系の人には意味不明なまるで
暗号のようなものになつてゐく。例へば、UNIXコマンドの "change directry"
は "cd" に "print working directry" は "pwd" にといふ合理的な省略法。
かういふものは凄く便利で私も好きだけど、かういふ省略や置き換への発想が、
いはゆる文系の人(といふか知らない人)に対する障壁(くぼたさんの言葉で
云へば「頭の中の亡霊」)になつてゐるのではないでせうか?

 あと、それから断つておきますが、私はマクロなら駄目だけどMindならOKだ
…とまでは思いませんよ。そこまでMindが文系向きで万能だ、などとは思つて
はいません。
 記号や英字の並びに比べれば少しは抵抗が少なくなる(亡霊を祓ひやすい)
のではないかとは思ひますが、プログラムと訊いただけでやつぱり駄目な人は
駄目でせうし。

> ちなみに、Debian JP Project の大事な仕事のひとつとして、さまざまな英文
> (www.debian.org とか) を和訳したり、日本語文 (www.debian.or.jp とか)
> を英訳したり、という仕事があります。これはけっこう量的にも大変な仕事
> で (たとえば、www.debian.org にはウィークリーニュースというのがあって、
> それを毎週翻訳しないといけない)、「私は文系的なセンスがある」と思って
> いる人にはがんがん参加してもらいたい分野です。翻訳以外にも、ほかの誰か
> が翻訳した文章をチェックしたり、より自然な表現に置き替えたり、といった
> 仕事もあります。
> 
> われこそはと思う方はどしどし参加してください。ウェブの翻訳は
> debian-www メーリングリスト、それ以外のドキュメントの翻訳は
> debian-doc メーリングリストになります。

 はい、Debian JP Projectの方々の日本語化の作業には、本当に大変な仕事
なんだらうなあ、凄いなあ、ありがたいなあと、尊敬の念とともに感謝して
ゐます。
 これは本当にもう、私のやうに英語が苦手な人間にとつて(Debian JPの方や
GNU JDOC、JF、JMなどの)ドキュメントの日本語化の作業を行はれてゐる方々
には、いくら感謝しても感謝しきれないものがあります。

 実際、何かお手伝いでも出来ればとは思いますが、やはり英語力のなさで
正直難しいかと……。

 最近はかなりの日本語ドキュメントが整備されてきてゐるのですが、それ
でもコマンドの詳しい仕様を知りたいとか思つたときに英文ドキュメントしか
なくて、しかたなく翻訳ソフトの助けを借りてそれらしい部分を翻訳してみた
りしてゐるのですが、翻訳ソフトで翻訳失敗したものを、自分で翻訳しようと
して、どの語がどの句に掛かるのが正しいのか判らなくて悩んだりと、もう
サッパリ状態です。
 こんな状態ですので、もう少しスキルを積まないとお手伝いは無理でせう(^^;)。

 でも、何もしないのも何ですし、どういふ作業を行つているのか、雰囲気
を見るためにMLを覗かせていただかうかなと思います。
 もしお手伝い出来さうなら名乗りをあげるかもしれませんが、あまり期待
はしないでください(^^;)(^^;)(^^;)。

 ではでは

★------------------------------------------------------------------★
 FROM:立山隆現(TATEYAMA Takaaki) 
 http://www.interq.or.jp/green/sta/bekkan/
★------------------------------------------------------------------★