karino2


南よ! 海の見える方!


Previous Entry Add to Memories Share Next Entry
ソフトウェアを作るのは、意外と難しい
karino2
プログラマ同士で話している時には当たり前の事だけど、非プログラマと話すと意外と共有されてない事に、これがある。
ここ最近、プログラマでない人とソフトウェアを作る、という話が三回あった。
一度はその人の為にツールを作る、という奴。もう一つは私のアプリのデザインを一部変更する、という話で、けれどデザイナがソフトウェアのデザインやった事無い、という奴。もう一つはアプリの素人だけど、アプリのアイデアとかはあるからアプリが書けるようになりたい、という人に話をする、という奴。
ちゃんと作ったのは最初のツールだけで、残り二つは辞退したけれど、どのケースでもソフトウェアを作るというのは結構難しい、という事があまり共有されていない。

私は結構ソフトウェアを作るのは難しいから、XXXみたいな事が必要だ、というような提案をする。
例えば、リモートの開発はかなり困難で、メールのみでソフトウェアの振る舞いの話をしあうのは、双方にそれなりの技術と経験が無いと難しい。最低でもskypeなり何なりの、もう少しリアルタイム性の高いコミュニケーションツールを使う方がいいんじゃないか、とか。
または何が欲しいかをちゃんと記述して、その通りに作ってもらう、というのは非常に難しくてうまく行かないから、そういうやり方は辞めて、まず作ったプロトタイプを見てから、このまま品質が上がるだけでは解決しないと思われる所を指摘する、というやり方にしてくれ、とか。

でもこういう話をしても、毎回信じてもらえない。私が相手をバカにしているのかのように扱われる事もある。
俺は自分に必要な物はちゃんと分かってる。だから何をするアプリを作って欲しいかをメールで書けば、あとはあなたが実装すれば良いだけじゃないか、と。
最初に大きく完成品を目指してもうまく行かないから、まずは小さい所から始めよう、という話も全く理解されない。
どうしてそんな事言うんだ?最初から完成品を作っていけばいいじゃないか。俺が必要な事を理解してないっていうのか?バカにしやがって。

プログラマなら、この辺の主張は別に相手をバカにしているのでは無く、本質的にソフトウェアを作るというのは難しいからだ、という事を、当然のように納得してくれるだろう。決して変な理屈をつけてるけど内心相手をバカにしている、とかでは無い。
でも、自分はちゃんと仕様を記述する事が出来る、と結構多くの非専門家は信じていたりする。だからソフトウェアの開発の難しさとは、仕様を記述する自分の側には存在せず、コードを書く私側の能力が足りるかどうかでしか無い、と固く信じていたりする。
そういう相手に対し、何故仕様を最初に記述して、それを受け取った私が延々とコードを書く、おしまい、というスタイルではきっとうまく行かないか、を説明するのは難しい。
そこを説明出来ないと、何故間のコミュニケーションはかなり頻繁に行わないとうまく行かないのか、という事も、納得してもらうのは難しい。

ソフトウェアの仕様を一発でそれなりに正確に記述する、というのは、ほとんど不可能ごとだ。
これはほとんどのプログラマが同意してくれる事と思う。
特に仕様を決めるのが、ソフトウェアを作った事無い人で、自分が何が欲しいのかを良く理解していない状況の場合、一発で正確に欲しい物を記述する、なんて事は、その人が有能か無能かを通り越してあり得ない事だ。この件については、私が過度に悲観的なのでは無く、皆が当然のようにそう思う事だ。
でもこの事は、プログラマ内部でしかあまり同意が無いように思う。

ある程度経験を積んだプログラマなら、これはほぼ確実にうまくいかない、という上記のようなノリのプロジェクトを見分けるのは、とても簡単に出来る。
こりゃダメだ、というのが明白過ぎるほど明白で、じゃあ私は降りる、となる。
どうしてダメかは分かるけれど、それを説明するのは結構大変で、何故降りるのか?と問われるとなかなか説明が難しい。
ソフトウェア開発は難しい物だからだ、と言った所で、何か言い訳しているだけで本当の理由を隠しているんじゃないか、とか思われたりする。
別に何も隠していないのだが、その誤解を解くのも大変なので、あまり関わらないようにしつつ、何故それではうまく行かないかを説明したりするのは諦めて、そっと身を引く感じを目指す。
こういう感じというのは結構多くのプログラマに通じるんじゃないか。
会社でプロフェッショナル同士で物を作っていると、あまりこういう経験はしないから、意外と会社に居る頃には無かったりするが。

根底にあるのは、ソフトウェア開発というのは結構難しい、という事だ。
もっというと、素人が適当にやるとほぼうまく行かないくらい難しい。
うまく行ってるプロジェクトがたくさんあるように見えるのは、それらには結構高度な技能と経験が使われているからだ。
特に前提条件を定めないと、予想される結末は、特にトラブル無く普通に進むのでは無く、きっと泥沼で全くうまく行かない、の方だ。

個人的にはプロジェクトをただそこそこちゃんと終わらせる、というのは大した仕事とは思わない。
私らの世代でそれが期待出来ない奴は、さすがに居ないだろう。
他人に凄い事だと自慢する気も起こらないし、自分はそんな凄いスキルを持ってるんだ、と自慢する気も起こらない程度の、誰にでも出来るように思える、とるにたらない技能。

でも、非プログラマにも出来るか、というと、そんな事は全く無い。
ソフトウェアを作るというのは凄い難しい事で、やってはいけないたくさんの事があって、容易に失敗する方向に進むのを豊富な経験やノウハウやツールを駆使して避けていく、という、高度に専門的な事なのだ。
それは素人とソフトウェアを作ろう、という時にならないと明らかにならないけれど。

You are viewing karino2