コンピュータのソフトを開発するために重要なものは何だと思われますか?それは人生においても重要なものです。
プログラミングのスキルでしょうか?それともセンスでしょうか?
スキルやセンスはかなり重要ですが、それよりももっと重要なものが有ります。コレがしっかりしていないと何も始まりませんし、絶対に満足のいくプログラミングは出来ません。
失敗するプログラミングは作る前から失敗している
人間が作るものですからバグは絶対に存在します。そのバグをいかにつぶしていくかがソフト開発で重要な問題だと思われています。実際に開発スケジュールを組む際にもバグをつぶすためのテスト期間を多く取れるかどうかが品質に影響してきます。
しかしもっと重要なものがあります。
「このプログラムはどういった目的で使用されるのか?」
こんなの知ってて当たり前ですよね。でも知らずに開発に着手するプロジェクトが多いのです。知ってて当たり前なのですが開発を依頼する方も請け負う方も明確にこの要件を定義することができていない事が多いのです。
例えば自動販売機のプログラムを作るとしましょう。お金を挿入されたりICカードをタッチされたら、その情報をもとにジュースの販売を行うプログラムです。何となく必要な機能は想像つきますから、開発をスタートさせましょうという話になります。
そして1カ月後ぐらいに設計書を作り、打ち合わせをすると凄い事が判明したりするのです。
「海外向けの製品なので、日本円の挿入口は要らないよ。」
「海外向けなんて聞いてません」
まあこの段階で判明すればまだ良い方です。全部作り終えてから判明する事もありますからね。
なぜ重要な要件が軽視されるのでしょう
日本人は常識という言葉に大きな影響を受けています。誰もが知っている物事で世界が満たされていて、みんなで同じように考えて同じように判断すると信じ込まされています。
多少の違いは個性だと容認できますが、他の人とかけ離れた事をすると非常識な人だと後ろ指を指されたり、常識も知らないバカだと笑われたりしがちです。
思いやりや他人に迷惑をかけるかどうかという判断基準ではなく、誰が決めたかも分からないし本当に正しいのかも分からない判断基準を常識だと思い込んでいる場合もあります。
伝わっていて当然だと思う事でも、伝わっていない可能性を考えて念押しすると、「そんな事も分からないやつだとバカにするのか」と気分を害する人すら出てきますので、小さな事をひとつづつ確認していくことはかなり困難なのです。
しかし、重要なポイントはどこ?ぜったに必要なものは?こういった要件を確認する癖を付けて行かないと、思い込みによる失敗は避けられません。注意してきましょう。