1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

超インテリがクラスを理解できなかった理由

Posted at

私の職場は 3 月から当面のあいだ、原則は在宅勤務となった。新型コロナウイルスの感染拡大防止のせいだ。職場でないとできない仕事もあるから、仕事の量は減る。時間ができたから Qiita に記事を書いて、あとで役に立つものを残そうと考えている。

#Python の勉強会が失敗した原因

何年か前、職場で週 1 回の Python の勉強会を主催した。私なんかよりはるかに頭のいい方たちが数人出席してくれた。これからは Python が流行るから先回りしてスキルを身につけておこう、というクールな企画になるはずだった。だが、うまくいかなかった。最大の原因はクラスの理解が難しいことだった。世界一のスパコン・京を使う超インテリも、クラスの概念を理解できなかったのである。

#クラスを説明しきれなかった無力感

まず、古い言語を使ったことがある人はクラスの理解に苦労するようだった。この勉強会に出席した人は、FORTRAN77 を使う古参や、学生時代に c 言語の演習を取っただけ、という人たちが多くいた。工学分野には、いまでも FORTRAN を使う人が普通にいるのだ。手続き型の言語をメインにやってきた人には、クラス定義がとても冗長で不要なものにみえる。オブジェクト指向のメリットを説明しても「でもそれって、頑張れば FORTRAN でもできるでしょ」という反応が返ってくる。そう言われたら「それはそうなんですけど・・・」となってしまい、せいぜい大規模開発でのメリットを説く以外に反論ができない。

次に、プログラムをあまり書いた経験がない人にとっては、例題が親しみにくいらしい。自動車クラスから救急車クラスを派生させる例題は、オブジェクト指向の入門書の定番だ。しかし、この話をすると「だから何が言いたいんですか」という反応が返ってくる。「救急車の話は分かるが、それとプログラミングとはどういう関係があるのか分からない」と言われると「それもそうだよな・・・」という気がしてくる。

#なぜクラスは難しいのか

オブジェクト指向の説明で苦労したのは、用語の意味を伝えきれないことだった。テクニカルライティングでは、対応する日本語訳が見当たらない場合、基本的に英単語をカタカナで訳出する。だが抽象度が高い話の場合、これが新しい概念の理解の妨げとなる。「オブジェクト指向」という言葉を初めて聞いたとき、はたして感覚的にイメージが湧くだろうか。普通の日本語感覚の持ち主には絶対に無理だ。でも英語を母国語とする人が object-oriented と聞けば、その語感が引き金になって「処理の手順よりもプログラムが扱う対象物についてもっと時間を割いて苦労する方が、何かイイことあるんじゃない?」みたいなイメージが脳内に湧くのだろう。

同様にクラスと聞いても、日本人なら小学校のクラスのイメージが最初に来てしまう。そのイメージを引きずったまま次に救急車の話を聞いても、脳内のイメージが焦点を結ばなくて当然だ。まして、インスタンスだのオブジェクトだのオーバーライドだのにいたっては、ゲシュタルト崩壊を起こして中二病アニメの武器の名前にしか聞こえない。

#笑いごとではなく大問題なのでは

このことは、私の主催した勉強会だけの問題ではなく、古参や未経験者の問題でもなく、プログラミング学習に共通の問題なのではないか。それに加え、意味不明な翻訳で勉強している日本人は、プログラミング習得の難易度を無駄にあげてしまっているのではないか。もしかしたら、我々はとてつもない時間の損失をしているのかもしれない。

#では、どうすればいいのか

オブジェクト指向の概要をもっとクリアに説明することが必要だ。プログラ厶とはコンピュータへの指図なのだから、命令を時系列に並べたものを思い浮かべるのは当然だ。それなのに違うやり方を説明しようというのだから、学習の早い段階で親しみやすい鳥瞰図を示し「確かにこういうやり方もありだな」と理解をしてもらった方がいい。大きなストーリーを納得しきってもらったあとで、演算子や変数定義といった詳細に入る方が、ハードルが低くなるはずだ。

もう少し実践的な例題を使うことも必要だ。自動車から救急車を作るとか、従業員からマネージャを作るとかいう例は、すでに理解してしまった人にとっては簡単明解だ。だが、まだ理解をしていない人にとって、ソースコードと救急車は無関係だ。抽象的な概念を伝える最後の手段は、具体例を複数挙げて共通する何かを把握してもらうことだ。もう少しリアリティのある例を使ったほうがよいだろう。

プログラミングに出てくる抽象的な概念を指す用語には、もっと分かりやすい日本語訳が必要だ。目に見えないものの話をしているのだから、意味を把握しようがないカタカナ言葉を並べても説明にはなりえない。和語が漢語を使えば、少しは初見のイメージを形成するのに役立つかもしれない。あと、一般的なやり方ではないが、私の主催した勉強会のように超インテリが相手の場合は、原著で勉強してもらうことも選択肢の一つだ。

これからは小学生だってプログラミングをやろうという時代なのに、現状では舶来の「オブジェクト指向パラダイム」の輸入に完全に失敗しているとしか思えない。

1
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?