13.プログラミングしましょ



ここまで勉強してきた知識でプログラムを作る下地は出来たはずです。ただ、あくまでも下地でありプログラムを組む為の勉強はこれからなのです。
現状を外国語の勉強に例えれば、基礎的な単語と言語の概念を覚えただけであり、文章を組み立てて話したり書いたりする事は出来ていないと言った所でしょうか。
ここからがプログラムの本題であったりします。昔の言葉(?)で「習うより慣れろ」というものがありますが、プログラムを覚える最短の勉強法も「習うより慣れろ」です。数行の簡単なプログラムからで十分なので試行錯誤をしながらチャレンジを繰り返すのがもっとも効果的だと思います。
自転車に乗りたい人がいくら「自転車に乗れる本」とかいう文献で勉強したとしても、実際に自転車に跨り転んで擦り傷を作りながら体で覚えた方が早く乗る事を覚えるとか、中学高校と何年も英語を勉強をしているのに(成績が良くても)実際に外人と話せる人は僅かであり、全く勉強しなくても実際に海外で生活した人の方が英語力に優れる場合が多いのと似ています。
何が言いたいかといえば、単語の勉強は早々にに切り上げて、何でもいいから実際にプログラムを構築して行きましょうって事です。

では、プログラムを始めるとして何から始めたら良いのかを、私の経験からまとめてみます。

☆1.何を作るのか?(製品決定)
まず最初にする事は「何を作るのか?」と言う事を考える事です。当然の事ですが、結構重要なポイントです。「自分の為に作る」「人に頼まれて作る」「販売の為に作る」とプログラムを作る動機は人それぞれです。その動機によって「プログラムのジャンル」「プログラムの規模」「作り込む完成度」などが大きく変わってくるでしょう。
製品側から見て自分の為に作るのならば、画面の見た目よりも使い勝手に時間をかけたいと思うかもしれませんし、自分以外の人に使ってもらうのならば、画面の見た目は奇麗な方が好まれるでしょう。操作性に関しても、配布するターゲットとなる相手の事を考えて作る出来でしょう。
かといって、作り手側から見れば、作り手の技術力や、作るのに掛けれる作業時間、作り手の人数などによって作るものが限定されがちです・・・
目標をどこに置くのかという事なのですが、自分(またはメンバ)の力量や作業時間(時には性格当の観点も)を考慮して、考えてください。

☆2.まずは完成イメージを(仕様決定)
作るもの(作りたいもの)が大まかに決まったら、まずは完成品のイメージを頭の中で作り上げてみてください。実際に操作しているイメージを出来る限りリアルに思い描いてください。そして、そのイメージを文章や画面のスケッチでまとめてください。特に複数人数で開発する場合には必須の作業です。これは全員の意識を合わせる為にとても重要な作業なので中途半端には行わず、とことんまで話し合いをしたりして煮詰めてください。プロジェクトが成功するかしないかはここでほとんど決まると言っても良いでしょう。個人で作る場合にも同ような事は言えるかもしれません。

☆3.工程の進め方(工程管理)
工程の進め方には幾つものパターンが存在します。これは、より良い物を効率的に作りたいと言う欲望から多くの個人又は企業が頭を絞ってきた為です。その中でも最近の傾向の中から2つの大きな分けでの考え方を選んで紹介してみます。
1つは上であげた手順を1つずつ完璧にしてから次に進む方法。もう1つは一気に最終的な製品を作るのではなく少し作っては試し、少し作っては試すというように、一連の手順を何度も繰り返して積み重ねる方法です。
前者の場合、工程の最後の方になってから手の付けられない問題が見つかり、最初に戻ってやり直さなければならなくなるというような手戻りが少ないという事が利点であり。後者は、少し作っては試してもらい手直しをするので、ユーザーの希望を反映しやすいという利点があります。(出来てからユーザーにダメ出しをされるとどうしようもなくなるので)
2つは相反する性質の物ですのでどちらを選ぶのかは開発者の好みになります。

☆4.詳細設計
これから作るものが決まりイメージもつかめたら、プログラムをどのような構造で作るのかを考えます。
最初の頃の章でプログラムは順番に処理されると書いたように、処理をさせたい順番を考える事が詳細設計の第一歩になります。例えば電卓を作るとすると次のようになります。

@画面を表示する
Aボタンからの入力を待つ
B数字が押されたらその数字を覚えてAに戻り、記号が押されたらCに進む
C押された記号毎の演算を行う
D結果を画面に表示する
EAに戻る

上ではプログラムを6ステップに分けてみました。さらに@の「画面の表示」に注目すると、次のように細分化できます。

@−@ウインドウを準備(大きさや色など)する
@−Aウインドウをきれいに塗りつぶす
@−B各ボタンを表示する

いきなり「電卓ろうと」思い立ても何から始めて良いのか分からないだろうし、思い付きで作って行くと機能の作り忘れをしたりというミスを犯す事にもなるでしょう。
そういう時は上であげたように大まかな所から段々に詳細な所を考えて纏め上げる事が重要になってきます。
また、この作業を行う事で、複数のプログラマで1つの製品を分担する時の割り振りの手助けになるでしょうし、機能の作り忘れを防ぐ事も出来ます。
製品のジャンルや規模に関わらず、詳細設計は重要な項目です。

☆5.プログラム
詳細設計で分けた機能をプログラムに作り上げて行きます。詳細設計がちゃんと出来ていれば、プログラムは機械的に作る事が出来ます。まあ、ここは実際にプログラムを作る中で覚えていってください。

☆6.テスト
個人で使うぶんには最低限のテストでも良いのでしょうが、他人に提供する場合には重要な工程になります。いきなりパソコンが止まったり、最悪システム破壊を起こしOSの再インストールを要する事になったりでもしたら大変な事ですから。
現在、私が仕事で担当している製品は汎用コンピュータの通信プログラムですが、この製品(関連製品も含め)を使うのは省庁であったり銀行、某交通機関であったりと、プログラムに誤りがあったら新聞沙汰になったり、最悪人命に関わる事もあるので、製品の品質管理には厳しいものがあります。
私の所ではありませんが、最近でも銀行のキャッシュディスペンサが止まったり、証券システムが止まって商売が止まったり、切符の発券が出来なかったり・・・・ハ〜
それでも、所詮人間の作るものですからプログラムミスの無い完璧なものが出来る事はありませんが、ないにこした事ありませんしね。
ちなみに私の仕事で一般的な日程の割り振りは、仕様決定(仕様書作成を含める)40%、プログラミング10%、テスト50%って所です。
パソコン部隊では、汎用コンピュータ程品質にこだわる製品も少ない、というより品質も重要だが、開発コストを押さえなければならないので、仕様決定(仕様書作成を含める)40%、プログラミング30%、テスト30%って所です。
蛇足ですが価格の話がでたので、汎用コンピュータのプログラムの価格についてですが普通レンタルで「数万〜数十万円/月」って所です。が、OS/通信/データベース/端末管理/アプリケーションとそろえなければならないものは数知れず。OS一つとっても特殊なハードなどをつなげれば別途オプションソフトを追加せねばならないし、通信ソフトも基本以外のプロトコルは別途オプションとなったりと、総合計では「百万円/月以上」かかる所もあったりします。ハードもレンタルだから、ハード込みで「千万円/月」のシステムを10台近く置く所もあります・・・・まあ、割引しますから、もう少し安くなるけど(^^;)