Slide 1

Slide 1 text

日本語識別子の必要性 日本人がプログラマーとしてやっ ていくために大切なこと

Slide 2

Slide 2 text

この資料の対象者  よいプログラマーになりたい日本人  日本人をよいプログラマーに育てたい人  ここでよいプログラマーとは  複雑なロジックをプログラムにできる  生産性良くプログラムが組める  拡張性の高いプログラムが組める

Slide 3

Slide 3 text

よいプログラムとは  よいプログラムとは、  人間が読んで理解しやすいプログラムです  コンピュータにとってみれば、バグさえなけ ればどんなプログラムも同じです  コンピュータは識別子名を読みません  人間は識別子名を読みます  日本語か英語かは重大な違いとなります

Slide 4

Slide 4 text

識別子の重要性  識別子は重要です  昔ならiとかjとかでも十分だった  今はそれでは時代遅れです  例えば、名著と名高いCode Completeでは、 変数の識別子名に一章当てています  ほか、クラス名やメソッド名にもページを割いて います

Slide 5

Slide 5 text

Code Completeで推奨されている識 別子名  解読しやすい  読めば分かるので解読する必要もない  例:  numberOfPeopleOnTheUsOlympicTeam  maximumNumberOfPointsInModernOlympics  checkTotal  currentDate  linesPerPage  これは誤訳ではないでしょうか?

Slide 6

Slide 6 text

英語話者が読む英語の技術書  英語を母国語にした人にわかりやすい例 を英語で挙げている  日本人に説明するわかりやすさの例とし て適切ですか?

Slide 7

Slide 7 text

日本人読者が読む日本語の技術書  この例は、わかりやすさの程度を伝えるのに適切か?  numberOfPeopleOnTheUsOlympicTeam  maximumNumberOfPointsInModernOlympics  checkTotal  currentDate  linesPerPage  作者が伝えたかったわかりやすさはこちらでは?  アメリカオリンピックチームの人数  近代オリンピックでの最高点  小切手の総額  現在日付  ページあたりの行数 ⇒英語圏ではみんな、下の例くらいわかりやすくしなくてはな らないのだな、と思って読んでます

Slide 8

Slide 8 text

気持ち悪い?  プログラマーが気持ち悪いと感じる時  論理的な整合性が取れていない場合  単に自分が慣れてない場合 ⇒どっちなのか区別しないといけない  気持ち悪くなくなるまでが勉強です  私も日本語識別子が完全に気持ち悪くなくなるま で1年くらいはかかりました  初めての機能に慣れて気持ち悪くなくなるのに1 年くらいかかるのは珍しくない

Slide 9

Slide 9 text

推敲  詩や文章をよくしようと何度も考え、作り直して、 苦心すること。  詩の表現を推すにするか敲くにするか悩みながら歩 いていたら行列に突っ込んで捕まる  プログラムにも重要  無能でないプログラマーはみんなやってます  ただし英語圏ならね  日本人でもやっていると主張する人はいると思いま すが、本当に英語圏のプログラマーと同じだけ推敲 できてます?  一度日本語で推敲してみることをお勧めします  英語でやるのとは全く別物です

Slide 10

Slide 10 text

英語でわかりやすい識別子 Q.日本人には、英語でわかりやすい識別子 は書けないか? A.書けます  ただし、時間がかかって面倒です  いちいち辞書を引いたり  しかも、効果は薄いです  一生懸命に推敲した英語より、日本語で適当に書 いたほうが読みやすい ⇒実際にはやってもあまり意味がでないた め、気合を入れてまでやらない人が多い

Slide 11

Slide 11 text

ここまでのまとめ  よいプログラムとは、人間が読みやすい プログラムです  人間が読みやすくするためには、識別子 (単語)の選択は重要  よいプログラマーとして成長には、識別 子をじっくりと推敲することが必要です  日本人にはそれを理解するのが難しい環 境になっています

Slide 12

Slide 12 text

世界では  とはいっても、日本語識別子なんて世界 ではだれも使ってないし・・・  本当にそうですか?  重要となるのは、母国語を使っているこ とですよ?

Slide 13

Slide 13 text

世界での、母国語を使った識別子 の利用  英語圏(アメリカなど3億5千万人) ⇒母国語を使って当たり前 むしろ、使わないという選択肢が存在しない  英語公用語圏(インドなど14億)  多くの国は子供のころから英語を使っているらしい (特にインド)  ヨーロッパ圏(フランス・ドイツなど)  プログラムの学習時に英語識別子使っていると思い ます?  印欧語族圏は英語を覚えるのも簡単  母国語と同じように使える人が多い 変数名が小学生に簡単にわかって当たり前、と思って いないのは、日本人など上記以外の人だけですよ?

Slide 14

Slide 14 text

英語圏、英語公用語圏 (出典Wikipedia) 濃い青色は英語が第一公用語 または事実上の(de facto) 第一公用語となっている地域。 水色(薄い青色)は英語が公 用語の一つである地域。

Slide 15

Slide 15 text

インド・ヨーロッパ語族 参考 本土日本語 琉球語 1700 (出典Wikipedia)

Slide 16

Slide 16 text

アルタイ諸語(日本語の仲間?) (出典Wikipedia)

Slide 17

Slide 17 text

英語の学習  個人的に英語を学び、英語圏の情報や人に接 することは素晴らしいことです  しかし、それを全員に強要できますか?  情報収集やコミュニケーション以外の、日々の作 業を使ってやりますか?  ましてや、全員の日々の作業を英語でやるよう強 要しますか?  英語の勉強はいいこと ≠英語を使うのは全ていいこと

Slide 18

Slide 18 text

外国文化の学習  明治時代の日本  外国文化を取り入れようと努力  最初のうちは先生も教科書も外国語  後に、外国語をすべて漢字で表現  日本語が読める人なら誰でも勉強できる  多くの非先進国  教科書は外国語  大学出のエリートは、みんな英語ぺらぺら  でも、大学についていける人は少ない ⇒プログラム業界に関しては日本は後者に近い

Slide 19

Slide 19 text

コメント  コメントは、プログラムでは表せないこ とを書くものです  プログラムの説明をすべて書くものではあり ません  少なくとも英語圏のプログラマーにとっては  現代の有力なライブラリのAPIは、コメン トなしでも読みやすい  Ruby on Rails  .NET Frameworkの先進的な部分とか

Slide 20

Slide 20 text

ツールの対応について  Unicodeに対応していないツールが多いか ら仕方がない ⇒対応してないのは誰のせいですか?  既存ソフトウェアをUnicode対応にするコ ストはなぜ出るのでしょうか?  日本人、中国人などがUnicode対応の必要 性を主張しないで、誰が代わりに主張し てくれるのでしょうか?

Slide 21

Slide 21 text

日本語識別子の命名規約  日本語を使わない人によって作られた命 名規約は日本語識別子に対応していませ ん  日本語識別子を使う人が考える必要がありま す  ある程度試行錯誤を繰り返さないとわかりま せん

Slide 22

Slide 22 text

命名規約の例  助詞・助動詞はつける  ×購入確定()→○購入を確定する()  助詞・助動詞を省くと意味が足りなくなる  昔から日本人は実用より見た目を重視して外来語(中国語)っぽい書き方で仕事をしてきたのだなあと思う  決まり文句的な単語は英語でいい  Get購入履歴()、購入失敗Exception  決まり文句が2種類あると分かりにくい  むしろ決まり文句であることがわかってよい  標準ライブラリにある単語は日本語にしない  訳した単語と訳さない単語が両方出てくると分りに くすぎる  利用しない無関係なクラス名などではなく、実際に 関連して使う場合

Slide 23

Slide 23 text

プログラムの練習  詩とか論文を書いたことがない日本人が、い きなり英語で詩とか論文で推敲の練習をして、 身につくと思いますか?  プログラムで識別子の意味で表現しなくてはなら ない内容は詩や論文に劣るものではない  日本語で詩や論文の推敲を繰り返したことの ある人が、英語で挑戦するならできそう  せめて練習用に何割かは日本語で書くべきな んじゃ?

Slide 24

Slide 24 text

英語識別子を使うべき場合  英語識別子が必要な場合  世界に公開するオープンソース開発  開発メンバーに日本語が話せない人が多い  開発ツールがまだ日本語識別子に全然対応し ていない ⇒英語を使うにはコストがかかるが、コストを かける必要がある場合は計画的にかければよい だけ

Slide 25

Slide 25 text

客観的に考えてみましょう  慣れたやり方を横に置いておいて論理的根拠に従い客観的に 考えてみましょう  みんなそう言っているからという意味での客観的ではなく  仕事の内容  複雑な内容を扱う仕事があります  仕事のメンバーはほぼ日本人です  仕事は複雑で内容は毎回違います  複雑な内容を皆で共有する必要があります  毎回の仕事の内容はメモに残し、皆で回覧することで共有しま す  そのメモを英語で書く職場ってどうなんでしょうか?  かっこつけることばっかり考えてまじめに仕事してないんじゃ ないの?  プログラム以外ならそうなりません?

Slide 26

Slide 26 text

なんか反対者が多いんですが  なにやら日本語識別子に親でも殺されたんかという人が結構  とりあえず細かいデメリットを並べる人が多い  これは感情的に反対している状況証拠では?  細かい問題点があるのは当然  メリットとデメリットはすべて総合して考えないと結論は出せない  日本人に説明する時には日本語を使うほうがわかりやすいってのは総 合的な話だと思うんだが  自分が今やっている手順の一部がうまくいかなくなるとか  いやそういうこともあるのは当然だと思いますよ?  一切ないと私が言っていたら詐欺師と思ったほうがいいんじゃないですかね?  気持ち悪いと思う人が多いのはわかるが  私も最初は気持ち悪かったですしね  せめて教育目的くらいは採用したい  オブジェクト指向プログラミングを理解するには特に、識別子 の名前の重要さは理解していないといけない

Slide 27

Slide 27 text

日本語識別子を使う理由  よいプログラマーになるために必要  英語識別子を使うときは使ってよいが、それ だけではよいプログラマーになれない  ずっと仕事を片言でやっていて、専門性の高 い、思考力が必要な仕事が覚えられますか?  たまには母国語でわかりやすさを徹底的に考 慮して推敲する経験が必要  単純な仕事の場合はコストに響く

Slide 28

Slide 28 text

日本語識別子を使う理由  自社だけが導入したなら、競争力の切り 札になると思うんですけどね  せめて教育目的で一部だけでも  オブジェクト指向の理解にはある意味必須