エンジニアのひよこ_level10

【毎日更新!】新卒2年目エンジニアブログです! プログラムだけじゃなく、マネジメントとかも書いていきたい!

大きなプログラムを作る時は、機能を細かく分割する【168日目】

はじめに

初心者の友人向け

プログラムうまくうごかねぇ!

function Osero {
    showBoard();
    putPiece();
    turnPiece();
    judgeEnd();
}

function showBoard() {
    ....
}
function putPiece() {
    ....
}
...
...
...

ゲームは正しく終われるのに、コマがうまく置けない、コマがひっくり返らない!

一気に作ろうとするから・・・

プログラムなんで動かないんだわーーーー!

って初心者陥りがち。

ちょっとまってくれと。
作れそうなものから作って、全体を同時に作ろうとするなと。

なぜ一気に作っちゃだめなのか

  1. どこにバグがあるのかわからなくなる
  2. どこまで完成しているのかわからなくなる
  3. 他の人が読めない
  4. 情報量多すぎて、頭パンクして、プログラミング嫌いー!ってなる

とかいろいろデメリットが・・・

ではどうするのか

いろいろやり方はありますが、ひとまず私のやり方を。

  1. 何を作るかを『アバウトに』決める(オセロ作る)
  2. どんな機能あるか細かく考える(盤面出す、コマ置く、裏返す)
  3. それらを『コメントだけ』書く
  4. さらに細かくする
  5. 一つ一つを完璧にしてから次に移る(大量の関数を同時に作り始めない)

1. 何を作るかを『アバウトに』決める(オセロ作る)

function Osero {

}

これだけ。中身考えちゃだめ。
まずは、『これを作ります!』って、プログラミングがわからない人にもわかるレベルで、考える。

2. どんな機能あるか考える(盤面出す、コマ置く、裏返す)

  1. 盤面を表示する
  2. コマを置く
  3. コマをひっくり返す
  4. ゲームが終了か確認する ....

とか、作らなきゃいけない機能を考える。
この時も、プログラミングわからない人でも、どんな機能かな?ってわかるレベルで考える。
だから、データベースに保存する、とかまで考えちゃダメだよ。
入力をする・・・は微妙だけどセーフ。

3. それらを『コメントだけ』書く

ちなみに、紙に図を書くとかでも良い。

function Osero {
    // ボードを表示させる

    // コマを置く

    // コマをひっくり返す

    // ゲームが終了するかを判断する
}

こんなレベル。

4. さらに細かくする

    // ボードを表示させる
    // ・1行目として、8マス表示させる
    // ・8マスを8つ表示させる
    // ・真ん中に初期のコマを置く

    // コマを置く
    // ・ユーザーに置く場所を入力させる
    // ・コマがおける場所か確認する
    // ・コマを表示させる

こんな感じ。細かくしていくと、それぞれ作れるような気がしない?

5. 作る。一つ一つを完璧にしてから次に移る

大量の関数を同時に作り始めないこと。

『あ。この機能も作らなきゃ!こっちの方が簡単だし、先につーくろ!』

とかで全部、中途半端に作るは絶対にダメだからね。
『動かない!なんで動かないんだ!どこが悪いんだ!』とかなるので。

「Aの機能ないと、Bの機能作れないや。Aの作業を止めて、Bを作ろう」
はセーフ。ただし、Aの機能は、後で再開する時に『このコード、何書こうとしてるんだろう・・・』ってなったりするので、ちゃんとキリいいようにね。

大きなプログラムは、小さなプログラムの集まり

覚えてほしいのが、

『オセロは小さなプログラムの集まり』

『大きなプログラムは、小さなプログラムの集まり』

ということ。
歯車を一つ一つ組み合わせて、大きな車があるのです。

大きな車をいきなり作れるのがエンジニアじゃないです。

歯車を少しずつ作って、それを少しずつ組み立てていってください。

作業方法

じゃあ実際にどう作るの?

っていうのは、前回のgitのブランチと絡めて、今度一緒にやりましょう。