Smalltalk でプロトタイピング

シミュレータとかで Python もちょっと使ったけれど、最近の仕事は C++ になっています。

今年に入ってからずーーーっと作っているこのプロジェクトだけれど、4ヶ月たとうというのに、去年の年末に 3週間で作った Smalltalk 製 プロトタイプの機能にまだ追いついていません。

プロトタイピングと本番ソフトでは品質やボリュームの違い(検討の本質じゃないので端折れた部分とか)があります。納品用ドキュメントも整備しましたし、また今回はゼロからの立ち上げだったので、開発の土台部分――ファームウェア開発なので「ターゲット用」と 「Windows上での UnitTest用」の両環境対応ですとか、諸事情で shared_ptr とかを手前実装したとか――に時間が掛かっています。他の仕事の割込も意外に多かったです。だからもちろん期間をそのまま単純に比較できないのだけれど、それでも体感する生産性の差にはちょっと焦れったさを感じます。

C++ は楽しいし好きなのですが。


* * *


Smalltalk でプロトタイピング、C++ で実装」というのはちょっとした憧れで一度はやってみたかったんです。

これは本当に私の趣味で、強引に「必要です、Smalltalkでやります」と押し切りました。新しいプロジェクトの開始に当たって設計工数として積み上げられる状況だったのと、周囲の理解があったのであっさり OK が出ました。(仕事の私物化は良くないなぁ)

それでも内心ではちょっと引け目を感じていて(笑)「RubyPython にしておいた方が良いかな?」と迷ったのだけれど、始めてみれば Smalltalkというチョイスは大正解だったな〜と実感です。システムブラウザーJITデバッグ の威力は凄いし、Smalltalkは生きているオブジェクトを直接こねくり回せるから、(この用途では)Python よりもさらにもう一段生産性が高いですね!

実装系は もちろん Squeak!フリーなのと、配布が「フォルダコピーでポン」だからなのですが、予想外に eToys の恩恵を受けました。

と言うのも、自分でアレコレ作っているときはWorkspace と Transcript と Inspector とか強力便利なツールで事足りていたのですが、設計をプレゼンする段になって、eToys で ビューを作ってみたら、これが凄い。単にモデルをチクタクするだけで 簡易ビューがパスパス組み立てられてるのは恐ろしく楽で、それでいて効果的で。Morphがスライド移動するだけのアニメーションでも装置が動いているイメージがわかりやすいですし、(作った後に気がついたのですが)対象を荒削りでも視覚化すると思わぬ穴に気がついたり、より深く考えをまとめられたり、設計自体にも とても有効です。



プロトタイピングは UMLや文章を一生懸命駆使して設計を検討するよりも、品質でも時間でも圧倒的に有利だという実感を深くしたのですが、私の周りの狭い世界じゃ(Smalltalkはともかく)プロトタイピングをやっているのを見たことがないのは不思議です。

Smalltalkは 作ったオブジェクトが実行毎に消えないとか、実行中のオブジェクトを改変できる仕組みが豊富なので、考えながらオブジェクトをダイレクトにこねくり回したいプロトタイピングには最適です。この生産性の高さは、他のLLよりも数歩先を行っていると確信します*1


ただ今の仕事を続ける限り、Smalltalk を仕事で使えるなんて幸運は、多分もう無いと思います。それは残念ね、と思うのです。

*1:それは諸刃の刃で、反面、日常のスクリプティングSmalltalkを使いにくくしてしまっているのですけど・・・