2005-05-20 13:29:28

プログラムを分割することと図形に補助線を入れることはなんとなく似ている(気がする)

テーマ:ソフトウェア開発
著者: 三田 紀房
タイトル: ドラゴン桜 (1)

ドラゴン桜という漫画が面白い。受験漫画というよりは、勉強とは本来どうあるべきかについて、示唆に富んでいる。初心者プログラマが今後いろいろなことを学習するにおいても非常に参考になると思う。


初心者プログラマがプログラムを書く上で最初につまずくのは、自分でプログラムを書く時に分割できずに、一つの関数にべたーっと書いてしまうことである。最初はそれで構わないのだが、どんどん拡張していくに従って、何がなんだかわからなくなってきて、書けなくなってしまう。


そこで先輩プログラマが、「分割しないからだめなんだ。分割はプログラムを作る上での基本だぞ」と言ったところで、どう分割していいかわからないのだから意味がない。


その昔を思い出すと、中学や高校の数学(幾何)の時間に、図形に補助線を入れると簡単に解けると習ったが、どこに補助線を入れればいいのかよく分からないというのが最初の印象だった。


点と点を繋ぐ補助線なら誰でも引ける。だがそれ以上(点と線上のどこか、図形外のどこか)になると、どこにでも引けそうな気がして、動けなくなる。プログラムも似たようなものではないだろうか。分割された後のプログラムを見れば理解はできるが、いざ自分で分割するとなると、どこも同じように思えてしまう。


プログラムをどう分割するかは経験則だ、と言ってしまうとそれ以上先には進まない。数学の図形の補助線は、ある程度までなら学習を繰り返すことで、補助線の書き方もパターン化できる。プログラムの分割についても同じことが言えるのではないだろうか。


分割を考えるには、プログラムを処理の固まりとして考える必要がある。抽象化ではなく、具体的なプログラムにおける固まりである。処理速度を優先すると、なかなか固まりが見えてこないので、処理の中身に意識を向けたほうがよい。


オブジェクト指向言語だと固まりを固まりのまま扱いやすい。そこから一歩進むと抽象化なりデザインパターンという話にも繋がっていく。どういう固まりが他のどの固まりと繋がっているか、その固まりはもっと小さな固まりにしたほうがよいのかどうか。ポイントはいくつかあるが、要はプログラムを眺めた時に固まりを意識できるかどうかである。


固まりを意識できれば、固まりと固まりの間は分割できそう、と思えるようになる。そこから先はテクニックを要するが、やりたいことが決まっていれば、もし誰かに質問しても的確な答えが得られるだろう。「何を分割したらいいか分かりません」という抽象的な質問には答えにくいが、「こういう風に分割したいんですが、この変数はどうやって渡せばいいでしょうか?」は具体度が増している。


分割統治、分割統治とお題目のように言われて、分割することだけを意識していると、いつまでたってもプログラムを分割できない。分割ありきではなくて、固まりありきなのだ。何もないところに補助線は引けない。どうでもいいところを分割してもしょうがない。簡単そうなものは実は難しいという典型的な例だが、コツを掴んでプログラミングに励んでほしい。


AD
いいね!した人  |  コメント(146)  |  リブログ(0)
2005-05-12 08:33:05

設計が出来る人は管理者に、実装が出来る人は設計者になるため、実装できない人がプログラマになる

テーマ:ソフトウェア開発

ピーターの法則という有名な法則がある。「社会はあらゆるポストが無能な人間によって占められて安定する。」という趣旨の法則だが、有能な人は無能になるまで昇進し続けるので、役職的に無能な人ばっかりになるという恐ろしい法則だ。


ソフトウェア開発の現場で仕事をしていると、優秀な人がどんどん上の役職に上がっていって、プログラミング能力のある人がプログラムを書かなくなったり、ドキュメント書かせると非常に上手い人が管理職になってスケジュールと予算ばっかり管理していたりと、優秀な人が揃っているのに開発スタッフが足りない状態になることがある。


そうすると何が起こるかというと、人を雇い入れるわけだが、優秀な人は高いしそもそもいないので、安くて意欲のある人を採用する。しかしそれほど経験がないという場合がほとんどなので、プログラム経験があまり無い人がプログラムを書くことになる。まさにピーターの法則ぴったりだ。


ピーターの法則に従わないようにするにはどうすればよいだろうか。アジャイル開発モデルを見ると、チーム全員が設計と実装を分け隔てなく行うことで、チーム内のリソースが無駄にならないようにしている。なるべく優秀な人を第一線に残すという点において、アジャイル開発モデルは良く考えられている気がする。


人が増えてきたら管理職が必要という考え方は、古い会社組織構造だと思う。例えば漫画家は、節税対策のために会社を設立するケースが多いのだが、一番偉いのは漫画を描く漫画家で、社長でありながら漫画を書いている。当然社長(漫画家)が死んだらそこでコンテンツの生産は止まるが、今までのコンテンツを維持管理して社員が食いつなぐ事は可能だろうと思う。


ソフトウェア業界では、社長がプログラムを書いているうちはだめだというような意見も見かけるが、上記漫画家モデルを真似て、社長がプログラムを書きまくる会社があってもいいのではないかと思う。あとの社員は全員アシスタントだ。それでもソフトウェアが開発できるならなんの問題も無い気がするが。


20世紀の組織論を無視して、一番能力を引き出せるような組織構造は何か、ということをもう一度模索した方がよいと思う。せっかくのスキルを埋もれさせることなく、世の中に貢献するために。

AD
いいね!した人  |  コメント(7802)  |  リブログ(0)
2005-05-10 00:56:05

いい無駄わるい無駄、いい失敗わるい失敗

テーマ:ソフトウェア開発

ソフトウェア開発、特に受託して開発するような場合は、無駄の連続である。無駄を排除して効率よくしようとすると、なぜか無駄が多くなるという矛盾がある。なぜだろうか。


机上でソフトウェア開発を考える人(要するにあまり実経験のない人)は、顧客のニーズを最初に「ちゃんと」引き出して、「ちゃんと」確定できれば、作る際に無駄はないし、非常に効率的だと考えるのである。まさに理想論なのだが、根本的な問題として、顧客は見たこともないものを「ちゃんと」決めるのは無理なのである。


ハードウェアはまずモックアップを作って、ぱっと見を検証する。原寸大の大きさが無理な場合は、ミニチュアモデルを作る。これを無駄という人はあまりいないと思う。実物を作る事が確立されているからという理由もあるが、実際に作り始めてからイメージと違った場合のコストを考えるとよっぽど安いのである。いい無駄と言えるだろう。


それに引き換えソフトウェア開発では、試行錯誤のプロセスを無駄と考えて、とにかく早く後の工程に進みたがる傾向にあるように思う。仕様が確定しようがしまいが、顧客に不満があれば最後にどんでん返しが待っている。無駄を排除して効率よく進んだ先には、最大の無駄があるかもしれない。


たしかに一度動かしてから直すというのは、ある意味コストが2倍、3倍とかかるようにも思えるが、落ち着いて考えると、コスト=時間なのであり、仕様を決めるのにぐだぐだ長い時間をかけるのであれば、その分さくっと仕様を決めて2回、3回やり直した方が、同じ実時間で完成度は数倍高くなることは間違いない。


最初に無駄な過程を踏んで、顧客と開発側がお互いに仕様確定のやり取りの中で失敗を繰り返すことにより、両者が今回のプロジェクトについて精通し、最終的な成功へ繋がるのが本当の理想系の開発モデルかなという気がする。XPを始めアジャイル開発も、無駄と失敗を積み上げながら進める開発モデルのようである。


失敗を繰り返すことについて、設計者の発言-「As-is先行」か「To-be先行」か のコメント欄から引用
---
最終的に相手に気に入ってもらった「描かれた目」と相手の「目に関する発言」の間にある「因果関係」は相手にしかわかりません。気に入ってもらうまで、山ほど失敗を繰り返さねばなりませんが、そのときに必要なのが「似てないならアカラサマに似てないとわかるような図法」で、DFDやERDやパネルイメージはそのために適しています。高速に、サルのように失敗を繰り返す。これがカギです。
---
とあるが、いい無駄、いい失敗をうまく表現されている。顧客が決めるまで動かないではなくて、顧客が反応するまで動きつづけることで、真のニーズを探るというような形容がピッタリ来る気がする。


まとめると、無駄や失敗を繰り返す事で、ソフトウェア開発が成功に導かれる確率が高まる。それはいい無駄でありいい失敗である。逆に、最初に無駄や失敗を極力避けようとすると、ソフトウェア開発が失敗する確率が高まる。それはプロジェクトそのものが悪い無駄になり悪い失敗になる。最初が順調なプロジェクトほど疑ってかかった方がいいのかもしれないですね。

AD
いいね!した人  |  コメント(10)  |  リブログ(0)

AD

ブログをはじめる

たくさんの芸能人・有名人が
書いているAmebaブログを
無料で簡単にはじめることができます。

公式トップブロガーへ応募

多くの方にご紹介したいブログを
執筆する方を「公式トップブロガー」
として認定しております。

芸能人・有名人ブログを開設

Amebaブログでは、芸能人・有名人ブログを
ご希望される著名人の方/事務所様を
随時募集しております。