見出し画像

プログラムの実装をスピードアップしたい

質問

プログラムを書くようになって一年になりますが、他人のコードを読んで理解するのが遅く、周囲と比べて実装が圧倒的に遅いです。何を勉強すると早くなるのでしょうか。

私はもともと数学が好きで「公式があっても証明できなければ使わない」というくらい「理解すること」に重きを置いています。そのため気がつくと「作ること」ではなく「理解すること」に重点を置いてしまうのがよくないのでしょうか。

だとすると、理解しなくてもいいことに何らかの納得感を持てば、実装が早くなるのでしょうか。

それとも、パターンやアルゴリズムをきちんと勉強すると早くなるのでしょうか……

結城浩のメールマガジン 2021年3月2日 Vol.466 より

回答

ご質問ありがとうございます。

質問の中にあったあなたの考えは「理解することの方に重きを置いているために作ることが遅くなっている」というものですね。

「作ること」と「理解すること」を相反するものだと考えるのはあまりよくありません。プログラマは、自分が理解したことを確かめるように実装しますから、理解と実装は表裏一体です。

基本的に「理解すること」は非常に大事ですし、理解しないで実装しても結局はデバッグなどで時間が掛かるものです。つまり、実装スピードをデバッグまで含めて考えるなら、どこかではしっかり理解しておく必要はあるのです。自分の理解の浅いところにバグは現れます。

その一方で、理解することが大事といっても程度問題ではあります。特にプログラムは「量との戦い」という側面がありますから、読むべき箇所を見極めて、必要なところを深く読む必要があります。さもないとキリがありませんから。何から何まで理解することはできません。

パターンやアルゴリズムを学ぶことは悪くありませんが、あなたはパターンやアルゴリズムをできていないので他人のコードを読むのが遅いのでしょうかね。自分が遅い理由をよく見極めないといけません。

* * *

やや散発的になりますが、あなたのコード読みが遅い原因をいくつか推測しつつあれこれ書いてみます。心当たりがあればいいのですが。

コードを読むときに、頭だけ(目だけ)で読もうとしていませんか。手を動かして理解したことを書きながら読んでいますか。たとえば、データ構造を図に描くこと、処理の典型的な流れをシーケンス図に描くこと、モジュールの依存関係を図に描くことなどを行っていますか。

プログラムを書くようになって一年ということですが、お使いになっているプログラミング言語の基本は理解して覚えていますか。コードを読む際に毎回プログラミング言語のマニュアルを調べ直さなければいけないとしたら非効率です。もちろん、必要に応じてマニュアルを調べるのはいいのですが、ごく基本的なことまで毎回調べているかどうかです。

あなたが行っている作業が具体的にはわかりませんが、設計を理解するのに時間が掛かっているのか、設計したものをコードに落とすのに時間が掛かっているのか、純粋にコードが何をやっているのかを読み取るのが遅いのか……もよく分析した方がいいです。

読むのが遅いという「他人のコード」が、大きなプログラムの一部なのか、それとも単体で動く小さなプログラムなのかで話は大きく変わります。大きなプログラムの一部なのであれば、そのプログラムが動く周りのことやアーキテクチャを理解する必要がありますし、小さなプログラムならば、先ほども書いた「プログラミング言語の基本」の理解が足りないのかもしれません。

これまたコードの長さによるのですが、もしも大きなプログラムの一部を読むのであれば、だらだらと上から下まで読むのではなく、読むべきポイントを押さえつつ進む必要があります。このプログラムの入力は何で、出力は何といったインタフェースを押さえることは基本です。

ご自身の「コードを読んでいるプロセス」を振り返りつつ、自分がコードを読むときにどこに時間が掛かっているかを分析してみてください。

以上です。大変でしょうけれど、がんばってくださいね。

※もしも、この文章を気に入ってくださったなら「オススメ」や「スキ」で応援していただければ感謝です。

質問はこちらからどうぞ。

結城浩はメールマガジンを毎週発行しています。

#結城浩 #仕事の心がけ #仕事 #プログラミング #プログラムの実装をスピードアップしたい

いただいたサポートは、本やコンピュータを買い、さまざまなWebサービスに触れ、結城が知見を深める費用として感謝しつつ使わせていただきます! アマゾンに書評を書いてくださるのも大きなサポートになりますので、よろしくお願いします。 https://amzn.to/2GRquOl