#最初に
初学者に対してプログラミングを良きものにするために必要なことは何か?ということを述べている書籍は少ない、と私自身はこれまでの経験から単に感じているだけかもしれない。
ある程度慣れ、効率的で、可読性に優れ、再利用性に優れたような素敵なコードを書きたいなと感じだしたような人向けの書籍は多々あるだろう。
なので、このシリーズではそういった人は対象にしない!と断言はしないが、特に初学者がどんな視点を持ってプログラミングをすると良いかに焦点を当てていく。
一般的な仕事や勉強するときにも役に立つフレームワークを用意しているので、冒頭だけでも読んでみると何かを発見できるかもしれないと前置きをし、さっそく具体的な内容に入っていこう。
#5W1Hで考えよう!
と書いたものの、いきなり全てを利用することはお勧めしない。
その理由は単純で、5Wで考えることは物事の大枠を考える時に最適
で、さらに切り込んでどうやったらいいのか(Howが出現!)という物事の詳細化は1Hで考えるという段階を踏む方がスッキリと考えられることが多いからだ。
それを踏まえ、これ以降の流れは以下のようになっているのでそのつもりで読んで欲しい。
(1) Why(&Because)でそれを実行する理由を考える
(2) 残りの4Wで大まかに必要な情報収集方法を考える
(3) 1Hで手段を具体化する
#最初は5Wで考える
例えば、
こんなゲームを作ってみたい!
手作業を省略したい!
効率よく勉強したい!
といった問題に出会った時、まずは5Wを武器に解決すべき問題の大枠を組み立てると良いだろう。
なぜか?(さっそくWhyが出てきた!)なぜならば、それによって目的が明確化するからである。そうするとそこに意味が発生する。そのように考えて取り組んだ事は忘れないし、人に伝える事もできる、人が容易に理解することができる(もしかすると、あなたがいてもいなくても)、さらにそこから発展させることも容易になるだろう。
では、少し具体的にしていこうと思う。
#この記事はあくまでプログラミングについてなのでそこから脱線はしないような内容をチョイスして…
まずは目の前に
Excelやcsvファイルのデータを手作業でcopy&pasteする作業が面倒だ
という問題が転がっているとする。それをプログラミング(もしくはExcelの関数のみ)で解決しようとあなたは考えた。
何も考えずに取り組めば、それは時間を大幅に短縮できるのか?実は必要ないことでは?と人からのWhyの雨にさらされることになる。
そこであなたはそのWhyを振り払うような理由(Because)を考える必要がある。
Why
なぜそれをしようと考えたのか?
Because
毎日1時間の手作業を10分にできるはずだ、そうすれば他の作業ができる。
それが1週間に5日働くとして約4時間/週、ということは約216時間/年の時間削減になる。
さらに同じチームメンバーが n 人いると...(以下略)
実際にはもっと掘り下げる必要はあるかもしれないが、これで誰もWhyの雨を降らせることはなくなるだろう。
#ここで気が付く方もいらっしゃるかもしれないが、スタートはWhy(&Because)であることがほとんどだと考えて良い。
では次に別のWで具体化していこう。
What(Which要素も含む)
どのOS上で動作させるか?
どのプログラミング言語を使うか?
どのデータが対象か?
どのデータが必要か?
Who
誰が開発するか?
誰が恩恵を受けるか?
誰が用意するデータか?
When
いつ制作するか?
いつ実行するか?
いつテストするか?
いつ手に入れられるデータか?
Where
どこからデータが来るのか?
どこにデータが移動するのか?
どのサーバーで実行するのか?
他にも項目はあるだろうが、こんな感じで大枠をかんがえたら次は1Hの出番となる。
#1Hは最後に考える
なぜ最後に1Hに取り組むのか?という疑問に対する答えは"Howは具体的手段へのブレイクダウン"ということに直結しやすいからである。
プログラミング的には、問題解決のために利用するアルゴリズムとデータ構造を考える、というとわかりやすいかもしれない。
では、早速取り掛かってみよう。
How
どんなアルゴリズムで処理できるか?どうすればデータを取得できるか?
初めからどうやって解決する?を考えていると井の中の蛙大海を見ず状態になり、別の注意すべき問題に気がつかなかったり、構築したHowが別の要因が原因で崩壊する可能性が高まることはよくあることだろう。
#大枠を捉えていないと、大枠の一部が変更した時に柔軟に対応できなくなる、とでも言うべきかもしれない。
#課題
以下の課題は自由に設定を考え、自分で想定できる範囲で5W1Hを書いていこう。その際、マインドマップや木構造等の構造化ツールを利用すると便利かも知れない。
#####課題1 : 郷土の名産品を使った料理を作り、イベントで周知することになった。何を作るかは自由に考え、それを達成するために必要なことを5W1Hで考えてみよう。
#####課題2 : 複数の CSV ファイルの内容を1つのファイル(CSV, Excel, txt 等は自由)に集約することになった。それを達成するために必要なことを5W1Hで考えてみよう。
#####課題3 : 数学ではお馴染みの食塩水を混ぜる問題を考えてみよう。3%の濃度の食塩水と8%の食塩水を混ぜて5%の濃度の食塩水を500g作りたい。その時に連立方程式では以下のような式となるが、なぜこのような式になっているか、それぞれの式が何を表しているのか、を考えて実際に解いてみよう。
\left\{
\begin{array}{ll}
\frac{3}{100}\times x+\frac{8}{100}\times y=\frac{5}{100}\times 500\\
x+y=500
\end{array}
\right.