2015/05/18
前回の続き、どうしてRailsのような優れた道具を活用する設計がうまくできないのかという話です。
私は、その原因はウォーターフォールのキャリア・パスにあると考えています。
ところで皆様、オブジェクト指向って、どうやって勉強しました?オブジェクトについて書かれた本を読んで?私は違います。たしかに本も読みましたけど、オブジェクト指向を正しく理解できたのは、オブジェクト指向言語でオブジェクト指向なプログラムを組んでいた時でした。突然コードからif
やswitch
がなくなってとても読みやすくなって、ああこれがポリモルフィズムなんだと唐突に理解しました。プログラムを組まずにオブジェクト指向を理解できるのは、よほど頭が良い人だけなんじゃないかな。
マーチン・ファウラーのリファクタリング本。本を読んだ時には難しくてなんだか分からなかったのですけれど、実際のプログラミングでリファクタリングしまくってみたら、気がついたら体が勝手に綺麗なコードを書くようになっていました。最初は本の通りに手順をなぞるのも大変だったのにね。今では、リファクタリングはあまり頭を使わなくて済む、それでいて効果が高い楽しい作業となっています。
クロージャー(言語機能のclosureの方)の使い方も、集合操作のmap
やreduce
の使い方も、リレーショナル・データベースのテーブル設計も、あとは車の運転もバイクの運転も、私は、何度も繰り返して実際にやることで学びました。
たぶん、Railsの流儀も同様で、実際にやってみないと身につかないんだと思います。
Railsを実際にやってみるのは、それほど大変ではありません。とても良く出来たチュートリアルがありますから、それをやればオッケー。実際にコードを手で入力して、いろいろ変えて試してみて、どうしてこのような仕様になっているのかを考えながらやれば完璧です。Railsの論理はとても優れていますから、チュートリアルが終わる頃にはWebアプリケーションがどうあるべきなのかを語れるようになっているでしょう。
でも、設計者と呼ばれる人たちは、それをやりません。彼らはプログラマーではなくて、プログラミングは業務範囲外ですから。だから、Railsの流儀をいつまでも理解できない。大昔に彼らがプログラマーだった頃に学んだVisual Basic 6.0の流儀、画面に処理をのせていく形で、今日も設計してしまいます。
昨日も今日も明後日も、そして10年後もCOBOLでメインフレームのバッチを組むなら、過去のプログラマー経験を活用しての設計は可能だったでしょう。売上ファイルと商品マスターをマッチングして売上レポート・ファイルを作る処理(SQLなら1行ですね)すらコードをガリガリ書かなければならないような生産性が低い状況なら、プログラマーと設計者を明確に分けることに生産性を向上させる効果があったのでしょう。
でも今は、新しい技術が次から次へと出てきていて、それらの技術を正しく使えばプログラミングの生産性は大きく向上します。
たとえば、この前ClojureでO/Rマッピング・ツールを作ってみたら、そのコードの行数は全部で453行でした。O/Rマッピング・ツールの設計書は、たぶん453行よりも多くなりますよね?いまどきの言語なら、内容が明確で無駄がない設計書として、コードが使えるんじゃないかな。
話を元に戻して、Railsの場合で考えてみます。前回書いたように、入力値の検証を実施するコードはとても簡潔です。設計書に「必須」と書き入れる作業と変わりません。そして、rails console
でRailsのコンソールを起動すれば、実際に動かして試すことができます。ユニット・テストのコードを書けば、繰り返してテストすることもできます。ツールを使えば、モデルをグラフィカルに見ることもできます。費用は同じくらいなのに、効果ははるかに大きいんです。
たったら、Excelでテーブル定義表を書く代わりに、画面定義書に入力チェックについて書き込む代わりに、Railsのモデルを定義(モデルのメソッドについては、これまで通りに日本語の設計書に書いても構いません)した方が得なのではないでしょうか?もしそうできるのであれば、前回挙げた問題が解消されてRailsの便利機能を活用できるようになりますから、システム開発は楽になるはずです。お客様への説明用の画面定義を別途書く必要があるかもしれませんけど、モデルがあるならその作業は楽になるはずです。少なくとも、項目の型や一般的な入力検証については書かなくて済みます。
このとても楽しそうなセカイの実現を邪魔しているのが、ウォーターフォールのキャリア・パスなんです。プログラマーを卒業して設計者になったのだから、プログラミングなどという下等な作業はやらないという考え方です。過去に様々な技術を経験した蓄積があるのだからRailsのチュートリアル程度は1週間もかからずにできるはずなのに、やらない。RailsやRubyというプログラマーと共通の道具を使っても設計という異なる作業はできるのに、やらない。ただ、それだけ。
実にもったいない話だと、思いませんか?