「車輪の再発明」とは何か?

車輪の再発明という言葉を聞いたことがありますか?慣用句としてプログラミングの世界では耳にすることがあります。Perlでは避けるべきこととしてこの言葉を上げることがあります。

ウィキペディアには次のように書かれています。

車輪の再発明(しゃりんのさいはつめい、reinventing the wheel)とは、「広く受け入れられ確立されている技術や解決法を(知らずに、または意図的に無視して)再び一から作ること」を指すための慣用句。

車輪の再発明 – wikipedia https://ja.wikipedia.org/wiki/%E8%BB%8A%E8%BC%AA%E3%81%AE%E5%86%8D%E7%99%BA%E6%98%8E

プログラミングの世界でこの言葉を耳にすることがありますが、このウィキペディアにもそのことに触れています。またウェブ上でも様々な意見があり、その中で「車輪の再発明は無駄とは言えない」等の趣旨が書かれていることを目にします。

車輪の再発明という言葉の意味が正しく理解されていないように感じた為、ここで少しまとめておきます。

発明とは?

車輪の再発明という言葉の内、再発明という言葉を誤解しているような人が見受けられる為、goo辞書で発明の意味を確認してみます。次のように書かれています。

はつ‐めい【発明】 の解説
[名](スル)
今までなかったものを新たに考え出すこと。特に、新しい器具・機械・装置、また技術・方法などを考案すること。「必要は発明の母」「蒸気機関を発明する」

goo辞書 https://dictionary.goo.ne.jp/word/%e7%99%ba%e6%98%8e/

発明とはアイデア自身を表します。しかし、形を伴わないと他の人から見えない為、試作機等の形あるモノにし、そのモノをもって発明と呼ぶこともあります。つまり、発明とは次のようになります。

  1. ある課題を解決するためのアイデアを考案する
  2. このアイデアを形にする

上記1が本質的な発明の意味になります。

車輪の再発明とは?

プログラミングの世界における発明とは次のようになります。

  1. 課題解決のためのアイデアを考える
  2. アイデアを実現するコードをプログラミングする

これを繰り返すことが再発明となり、車輪の再発明が無駄なことを意味します。しかし、上記2を繰り返すことを再発明とし「車輪の再発明は無駄なことではない」と主張する人を見かけます。次のような事が書かれていることが多いです。

  • 実際にあるプログラムのコードを一から書き直すことにより処理速度が上がった
  • 既存のコードを研究することによりより効率の良いコードを作った
  • コードの勉強のためコードを一から書いた

これらは再発明ではなく、再構築や効率化、研究等というように目的が異なっており、アイデア自体は使い回しになっていたりします。

そもそも車輪の再発明は良くないと言われるのは次の点からです。

  • 発明にかかるコストは高く、再発明は無駄である
  • 多くの人の目に触れたコードの方がバグが少なくなる

この為、課題を解決するための必要十分なプログラムがあるならそれを利用するほうがいいでしょう。そのため、先人が開発したライブラリを集中して管理するシステムも有り、PerlならCPAN(https://www.cpan.org/)、RならCRAN(https://cran.r-project.org/)、PythonならPyPI(https://pypi.org/)などを調べることで先人の知恵を得ることが出来ます。

検索のシステムも強力になった現在、ちょっとしたことを調べるのが便利になりました。作りたいものがあるのなら少し調べてから開発するようにしたほうがいいでしょう。

モノの寿命

モノの寿命

モノには寿命があります。多くのものは2段階の寿命でモノは役割を終えます。その2つは次のようなものです。

  1. モノが壊れる時
  2. 壊れたモノが修理できない時

この他には、インタフェースが合わなくなり使えなくなる等もありますが、概ね上記のような段階を踏みます。

モノが壊れた時、そのモノが必要かどうかを考えます。不要であればそのままは処分するだけになります。必要なら修理するか買い換えるかを考えます。修理費用や時間、耐久性等を考慮し判断することになります。
以後、故障の度に検討を行うことになります。

修理の検討

修理しない事によりモノの寿命となります。家電では非常に簡単な仕組みのモノもあればコンピュータのような精密機械もあります。 接触不良など修理が容易な状態でも、実際は修理することなく処分されることが多くあります。

動かなくなるとモノの故障を疑います。人によっては故障を断定する人もいますが、コンセントが抜けている等、故障しているわけではないときもあるので慎重に判断する必要があります。

動作不良の原因を見つけ、自分で直せるかどうか、修理に出すかどうか、買い換えるかどうか等を判断し、対応を決めます。買い換えならその時に寿命が来たと言えるでしょう。また、動作不良の原因を見つけるのはなかなか難しい作業ですので、動かないとすぐに買い換えることを考える人もいます。

寿命を長くしよう

機器が複雑になれば部品も多く、不具合を起こす場所もバラバラになります。個々の部品の耐久性や負荷状況が異なるのでしょうがありません。ですから、多くの部品の中の一つに問題が発生すれば、1つ目の寿命が来たことになります。

出来れば自分で修理した方が時間的にも金銭的にもいいでしょう。ただ、複雑な機器の修理は修理後の品質が保たれるかわかりません。機器の機能が複数に渡っているのなら、もう少し細かく分けて機器を単純化してあったほうが修理しやすく、ゴミ問題にもいいでしょう。

ノートパソコンの様に モニタ、キーボード、CPU等の本体 などが一つになっていると、どこか一つが不調であれば全体を修理に出すか廃棄することになります。たとえ、その他の箇所は正常に動作するとしても。個々の機能が別々に出来るのであれば、一部分だけを修理するだけで問題は解決します。出来ることなら、少しづつ修理を行う形で同じ機器を長く使っていければと思います。

今と始まり

存在する様々な商品やルール、仕組み等は少しづつカタチを変え今に至っています。現状に沿わないものは消えていき、今残っているものはそれなりの意味があると考えられます。

以下ではあまり使われていないツールや非難をあびがちなツールを少し紹介します。

コンピュータの分野で言えば、sed(1974年)やawk(1979年)等のコマンドはUNIX(1969年)に搭載された古いコマンドで、今なおUNIXで重要なプログラムです。強力なテキスト処理が行なえ有用ではありますが、コンピュータ利用者全体から見れば利用する人は殆どいないでしょう。UNIXでは様々なファイルがテキスト形式であるためにこれらのツールは非常に有用です。古くから使われ続けていますが、多くの人に使われているとは言えないでしょう。

TeX(1978年)も重要なシステムではありますがあまり使われていない状況です。日本ではTeXというとLaTeX(1985年)の事を指すことが多く、LaTeXを使うことが多いでしょう。一緒に扱われることが多いですが実際は異なるものです。TeX は Donald E. Knuth が開発し、LaTeX は Leslie Lamport が TeX にマクロを組み込む形で開発しました。
LaTeX は TeX がもっと手軽に使えるようにという考えのもと作られています。
TeX は出版物にきれいな文字や数式を使うために作られました。
その為、現在における使いたい用途と合わないことがあります。LaTeX等のTeX派生物はその用途に合うように開発がされています。
TeXは数式を綺麗に印刷することが出来る為、論文等の作成にLaTeXはよく使われています。

Perl(1987年)は Larry Wall が開発したプログラミング言語です。一時期はCGIで掲示板等を作るためによく使われていました。
Perlは簡単なスクリプトで業務を効率よく行えるようにするため開発されました。それまでに存在していたプログラミング言語や自然言語等を参考にして作られていることもあり非常に多くの人に使われました。
現在の日本では古い言語としてあまり利用されていません。自由度が高い為他の人が書いたプログラムが読みづらい所もデメリットとして考えられています。

ここで取り上げたプログラムはUNIX哲学を持って作られています。それは一つの機能に特化していること、他のプログラムと協働させることで作業を行うことです。その為、何に向いていてどんなことを補助する必要があるかを知っておくとうまく使うことが出来ます。しかし、単一の機能に特化しているとはいってもうまく使う為に学習しておくべきことが多い為、不勉強な人が使うと使いにくいと思われます。これらを避け他のプログラムを使うことも出来ますが、長い期間使われているプログラムはバグも少ないと考えられる為コンピュータを使いこなすためには勉強することが必要でしょう。

コンピュータの話だけではありません。法律やルールも不要に思われるものもあります。しかし、始まりがどの様な理由でその法律やルールが出来たのかを知り、その理由は今後も考慮するべきであればそのルールは無駄ではないでしょう。
今だけを見て判断するのではなく、始まりを知っておくことは今後どの様に扱うかを決める上で重要となります。今と始まりを同時に評価することがこれから先を考える為に必要となるでしょう。

人とインタフェース

インタフェース

インタフェースとは、ある物と外部との境界であり外部からの接触を受ける部分のことを指します。これが転じて、コンピュータ分野ではソフトやハードウェアが外部と情報の受け渡しをする手順等を指します。

例えば、旅館に宿泊する時に予約の電話をかける場合、宿泊しサービスを受ける為に「電話をし受付に宿泊する日を伝える」ということが旅館のインタフェースとなっています。この時、宿泊台帳がインタフェースということも出来ますし、電話自身もインタフェースということも出来ます。どこまでが旅館となるのかで前密な意味でのインタフェースは変わります。

多くのコンピュータにおいて、GUIと言われるインタフェースが用いられています。GUIとはGraphical User Interface(グラフィカルユーザーインタフェース)の略で、カラフルな画面とマウスでの操作を主とします。マウスの少ないボタンでの操作を行う為に画面には色々な説明が表示されます。初めて触る人にとっては理解しやすくコンピュータを扱う為の必須のインタフェース とも言えます。

GUIに対してコンピュータにはもう一つ無愛想なインタフェースもあります。
CUI(Character-based User Interface, キャラクタベースユーザインタフェース)やCLI(Command Line Interface, コマンドラインインタフェース)と呼ばれ、画面に文字が表示されるだけのインタフェースです。CUIでコンピュータを操作していると物凄く詳しいと思われがちです。
実はCUIで操作するほうが簡単なことも多く、CUIはとても便利です。しかし、GUIと違い処理させたいことをどうやってコンピュータに指示するかはある程度知っていないといけません。この為、初心者にとっては敷居の高いインタフェースと言えます。

人とインタフェース

人がコンピュータを操作する時、インタフェースを介して行います。GUIであればマウスを用いて画面のいろいろな情報を見ながら操作します。CUIであればキーボードでコマンドを入力し情報を引き出します。

コンピュータの果たす仕事の範囲を広げて人よりの部分までコンピュータに処理させるならGUIというインタフェースになり、コンピュータの範囲を狭く見て人がコンピュータに寄って操作するならCUIということになります。

初心者にとってわかりやすいのはコンピュータが人に寄り添ったGUIです。しかし、わかりやすいというのは多様な選択肢がない状態で迷わせないということですから、様々な処理を扱うのは向いていません。
CUIはコンピュータよりで人が操作するために様々な処理が行いやすいです。ただし、操作するためには知識が必要なため初心者が扱うには難しいです。

今では様々なインタフェースが人寄りになれば人の負担は減りますが、人が学ぶ機会が失われます。コンピュータだけではなく日本の様々なサービスがお客様目線でという事を言いますが、過度の客よりなサービスであれば客が学ぶ機会が失われていると思われます。「日本人は優秀である」とか「日本の教育水準は高い」と言われますが、身の回りの様々なサービスや製品は人の能力が低くても利用できるように作られている為それに甘んじていては能力が低いままになりかねません。もっと、不便なもの理解しがたいものに触れて楽しむ余裕が持てないと人の成長ができないのかもしれません。

新しい物好き

日本人は新しい物好きです。
古いものに固執する人もいるが、多くの場合新しいものを選択します。
これは日本のものづくりの影響が大きいと考えられます。

日本では製品の改善点を見つけてより良い製品にする事が当たり前でした。ですから、古いものより新しいものの方が改善されたものになる為、わざわざ在庫数の少ない古いものを選ぶ必要はありません。同じ様な機能であれば価格もそんなに変わらずにつけられます。日本ではより良いものが安く手に入る状態になります。

しかし、ソフトウェアにおいては、新しいものが優れているとは限りません。
プログラムには常にバグが潜んでいると考えられており、改善の為の修正が新たなバグを生じさせているかもしれないのです。バグが無いことを示すのは困難ですが、同じソフトウェアが不具合なく正常に動作した期間が長いほどバグは無いと考えられます。その為に新しいものがいいとは言えないのです。

日本ではまだまだセキュリティに関する意識は低いです。
不便だからと言う理由で管理者権限でシステムにログインしたり、よく考えずに様々なソフトをインストールしたりとセキュリティに気を使わないことが多くあります。

大工や料理人は自分が使う道具は把握し管理するものです。コンピュータを使う仕事であればコンピュータという道具をきちんと把握し業務にあたってもらいたいものです。