こんにちは、新人プログラマーの岩本です。
今回は「小さく分割する」という考え方を紹介します。
僕自身初めて業務のコードを見た時、その情報量の多さに圧倒されました。個人で書いていたコードとは全く違う書き方をしていたので、最初は全然理解できませんでした。
しかし「小さく分割する」ことで、コードを変更できるくらいには理解できました。
個人的にはこの考え方は新人プログラマーであれば必須なのではないかと思います。
ぜひ最後までご覧ください。
コンピュータ科学に通底する「分割統治」
「小さく考える」という考え方は、コンピュータ科学では「分割統治」という言葉で表されます。
例えばソートアルゴリズムの「クイックソート」。
基準値よりも小さいか大きいかで分けることで、徐々にソートする範囲を小さく分割します。それを繰り返すことで最終的に、全ての要素がソートされます。
例えば探索アルゴリズムの「二部探索」。
徐々に探索する範囲を小さくすることで、最終的に目的のデータを見つけ出します。
どちらのアルゴリズムも大きな問題を小さく分割することで、目的を達成しています。
このようにコンピュータ科学の世界では「分割統治」という考えが根底にあります。
そしてその考えは日常業務の世界でも適応することができます。
日常・業務における「分割統治」
ではここから日常業務で「分割統治」をどう適応すればいいのかを考えます。
そもそもエンジニアとして多少コードを書いていれば、無意識に「分割統治」を行なっています。
ある一連の処理を関数にまとめ、その関数を組み合わせてある機能を実装する。
これはまさに「分割統治」です。
しかし無意識にできているからといって、意識的にできるとは限りません。
業務でコードを書くようになると、今まで出会ったことのない未知の問題に当たることがあります。
実装したことない機能、遭遇したことのないバグ、見たことのないコード。
そんな未知の問題に出会ったとき、意識的に「分割統治」ができると解決しやすくなるかもしれません。
実装したことのない機能
今まで実装したことのないXという機能を実装する必要に迫られたとします。どこから手をつかたらいいか、右も左も分からない状態です。
そこでXという機能をX1、X2、X3…とできるだけ小さい要素に分割します。
すると手がつけられないように見えたXが、コントロールできる要素の集まりになります。
あとはそれらを組み合わせれば、大元のXは完成です。
例えば「チャット機能をもったアプリを作りたい」とします。
チャット機能を実装しようと思うと、問題がデカすぎて手がつけられません。
そこでこのように問題を分割します。
- サーバにDBをインストール
- DBにデータモデルを追加する
- DBにアクセスするAPIを作成する
- アプリからAPIを通して、データを取得する
このように考えるとそれぞれの問題は、頑張れば解決できる、くらいのレベル感です。
これを組み合わせることでチャット機能を実装することができます。
現実はこんなに簡単に分割できるとは限りません。
しかし大きな問題に出会ったときは、小さく分割しようとすることで問題に対する姿勢が受け身から能動的になります。
コードの読み方
業務で使うコードは、大抵個人開発とは比較にならないほど大きいです。
僕は最初コードの全てを理解しようとしましたが、すぐに情報量に圧倒されてしまいました。
そこでコードを読む際にも「分割統治」を適応しました。
全てのコードを理解するというタスクを以下のように小さく分割しました。
- 1つのクラスについて理解する
- 1つの関数について理解する
- 1行について理解する
このように読むコードをできるだけ限定することで、結果的にコードの理解度が高まりました。
結局アプリの構成要素は1行1行のコードです。
1行を理解することを繰り返すことで、コード全体を理解できるようになります。
新人は(僕を含め)早く戦力になろうとして、最初からコード全てを理解したいと思うのではないでしょうか。
しかし最初から全てを理解しようとすると、結果的に多くの時間がかかったり、結局理解が深まらなかったりします。
ぜひ他人の書いたコードを読む時にも「分割統治」を意識してみてください。
勉強のやる気が出ない時
エンジニアは勉強がマストな職です。知識を常にアップデートし続けないと、すぐに取り残されてしまいます。
しかし勉強のやる気ができない時ってありますよね?
そんな時も「分割統治」の考え方が役に立ちます。
例えば「1時間勉強」というタスクはこんなふうに分割できます。
- 15でいいから勉強する
- パソコンを開く
- 勉強机に座る
どんなにやる気がなくても、机に座ることくらいはできます。(座れないくらいやる気がない日はいっそのこと休んだ方がいいかもです)
一度手をつけてしまえば、続けて勉強するのは容易になります。
勉強に限らずやる気が出ないときは、とにかく最初の一歩を小さくすることが大切です。
最初の一歩さえ乗り越えてしまえば、あとは流れに身を任せるだけです。
小さく分割する際のポイント
ここからは僕が「分割統治」を実践する中で感じた、ポイントを解説していきます。
期限を設定する
1つ目のポイントは「期限、締切を設定する」ことです。
例えばある機能Xを1ヶ月後までに実装したいとします。
するとそこから逆算して、半月後にまでに実装しないといけないことが明確になります。
さらにそこから1週間、1日、とXを実装するためのデイリータスクができます。
期限を設定することで、そこから逆算して1日単位でやるべきことが明確になり、問題を分割しやすくなるのです。
目的を常に意識する
2つ目のポイントは「目的を常に意識する」ことです。
問題を小さく分割するほど、目的を忘れやすくなります。
タスクをこなすことが目的となって、当初の目的を見失ってしまうのです。
目的を見失うと、挫折してしまったり、進む方向を誤ったりしてしまいます。
こうならないためにも、目的を忘れないように、定期的に振り返る必要があります。
まとめ
今回は「小さく分割する」という考え方を紹介しました。
この考え方が身につくと、大きな問題にも恐れず立ち向かえるようになります。
どんな大きな問題も小さく分割することができます。
どんな小さいことでもコツコツ継続すれば、大きなことを成し遂げられます。
ぜひ「小さく分割」を意識してみてください。
ここまでのご閲覧ありがとうございました!
コメント