コードを書くに至るまでの道筋を5段階に分けてみました。実は"コードを書く"コーディングというのは、プログラミング作業全体の内の一部分に過ぎません。
コードを書くまでの間に相応の下準備があり、いきなりエディタやIDEに向かっても書けない、ということを理解する必要がありますが、そのような言及は多くの本には載っていないです。
じゃあ、どのようにコードを書くのか?ということについての考察をしていきます。
※より明快な文章になるよう改訂しました。(2017/8/22)
1. まずは要件定義!
何がしたいのか。どうしたいのか。ということであり、プログラミングを利用して実現したい、具体的な目標を決めます。ゲームを作るにしても、どういうゲームにしたいか、アクションなのか、RPGなのか。どんなアクション、システムにしたいか、という部分であり、"やりたいこと"を明確にする作業です。
2. ファクタリング "factoring"
問題の分割を行う作業になります。人間がやりたいこと、コンピュータに代わりにやって欲しいことというのは、コンピュータにとっては実はかなり抽象的です。コードとして書き表すには困難なほど様々な要素が絡み合い、複雑な構造になっています。
なので、要件定義で定めた"具体的な目標"を更に細かい"解決すべき諸問題"へと分解する必要があります。
プログラミングの作業において、リファクタリングというものがありますが、これはファクタリングをやり直す、ということであります。つまりはプログラミングをやる際に、ファクタリングという作業があるということです。
ファクタリングは数学的に言えば、因数分解。じゃあプログラミングにおける因数分解とは何だろう? それは、物事の仕組み、あるいは"状態"の遷移を解析して、各要素に分解するということです。これをすることで、コンピュータに対して、どういう命令をすればいいのか、ということが明らかになっていきます。ある意味では、物事の本質を見極める作業と言えます。
3. プログラミングにおける道具、部品を選ぶ。
遠くにある目標を見据えつつ、目の前にある"細分化された諸問題"を解決するための道具を選んでいく作業です。
プログラミングにおいて、どの"道具"を使うべきかは誰も教えてくれない。そういう意味では自由度高く、高すぎる故に迷います! 何を使うべきか、自分で考えないといけません。これが最初の関門のような気がします。
変数はどれくらい必要なのか?それとも配列を使った方がいいのか?同じような処理を繰り返すけど、for文とwhile文どっちがいいのか?というようなことです。適切な道具を選ぶ、ということになります。もしかしたら、APIの中に求める動作をしてくれる部品があるかもしれないし、ネットに転がってくるかもしれない・・・。あるいはアルゴリズムから、自分で具体的なコードを書かなければいけないかもしれない。
4. ロジックを組み立てる。筋道を立てる。
問題を解決するために必要な道具を選んだら、その道具を実際どう使うか、どう組み合わせるかということを考えないといけません。
その道具、部品をどう使うか、ということを論理的に組み立てていきます。疑似コードで書き出してみたり、図表を描いてみたりして、とにかく目に見える形にしてみる。
コードというのはテキストです。文字では表現できない概念、手法、関連性なども絵で書いてみたら、案外簡単だった!ということもあるかもしれません。
コードとはあくまで、この作業によって生み出したロジックを各々の言語に落とし込んだものに過ぎないと思うので、ここをしっかりやれば、もうコードを書いたも同然!とはなりませんが、問題を解決するための準備は整ったと言えます。
5. 実際にコードを書く!
以上の準備を持って、積み上げてきたものをコードへと落とし込みます。準備したとはいえ、そのまま一回で成功するわけはないので、その後の試行錯誤も大事!
多くの場合は、今回の5つのプロセスをさかのぼって、それぞれやり直す、というような反復作業も必要になると思います。しかし、何も考えずにコードを書き始めるよりかは確実な方法です。
まとめ
実際のコードというものは乱暴に言ってしまえば"結果"でしかなく、プログラミングという作業における一部分に過ぎないということ、それを表層的に読むだけではコードを読んだとは言えない、ということを理解することが大切だと思います。
じゃんけんゲームを作るには、"じゃんけん"というものの構造を分解し、その本質を理解しなければならない、というと仰々しく感じますが、プログラミングはそのような作業が求められるということになります。
残念なことに、今回の記事で書いたようなことを説明してくれた本はほとんどありませんでした・・・。プロのプログラマの方々は、実際の業務などを通じて、先輩から教わるんでしょうね。必ずしも自分で1からコードを書くのが良い訳ではないですが、しかし自分でコードを書くために必要な能力というものをまとめてみました。
コードを書く、ということとプログラミングをするということはイコールではないということです。