読者です 読者をやめる 読者になる 読者になる

Kohaku Lab

ガジェットとカードが好きな人のブログです。

【電通生向け】プログラミングを学ぶ前に

私は、大学に入る前からプログラミングの経験があったので、いくらか他の学生のプログラムを読んでアドバイスしたり、バグの撲滅に協力したりもしてきた経験がある。 経験自体は数少ないが、その中には幾分か残念な経験もある。この記事では、そのような残念な事例を挙げることで、プログラミングを学ぶにあたって、言語の知識やらアルゴリズムの知識以前に必要な「何か」を感じ取ってもらえればと思う。

インデントが揃っていない

ソースコードを開くと、インデントがグチャグチャに崩壊していて、if文やfor文のブロックがどこまでなのかさっぱりわからなかった。 関数のスコープもかなりわかりづらくなっていた。

プログラミングをそれなりにやっている人からすれば、インデントが崩壊しているコードなど論外だが、 バグ取りに付き合っていると結構な頻度でこのようなコードを目撃する。 まともなエディタを使っていればこういうことは起きないはずだが、彼らはメモ帳でコードを書いているのだろうか。

インデントは必ず揃えるようにしたい。余計なバグを産まないし、見た目も綺麗になる。

エラーメッセージを読まない

英語だからという理由でエラーメッセージを読まない。
error: 'j' undeclared (first use in this function) とか。

電通生は、英語が嫌いな人が多いのか英語のエラーメッセージというだけで読まない人が多い。 英語自体は決して難しいものではないし、テンプレが多いので、覚えてしまえば割と簡単に読める。 C言語なら、gccじゃなくてclangというコンパイラを使うのも手である。clangはgccに比べれば親切なエラーメッセージを出してくれる。

変数名が適当

変数名がaやbなど適当な変数名である。 結果として変数がどのような役割を果たしているのか名前を見ただけではわからない。

プログラミングの演習で書くようなコードは使い捨てなので、適当な変数名にしたくなる気持ちもわかるが、 適当な変数名はあとのバグ取りをとてつもなくつらいものにする。 数百行あるコードに突然出てくるaという変数名の変数に何が入っているのか、コードを読まずに推測するのは並大抵の苦労ではない。

関数がでかい

100行ぐらいある巨大な関数が出てくる。 mainに全部の処理がぶち込まれている。

長い関数というのは、プログラミングの得意不得意にかかわらず読みたくないものだ (長い文を読むのは面倒くさいのと同じ)。 往々にして、長い関数と言うのはいろんな仕事をしすぎている。プログラミングを楽にする基本は、ひとつの関数はひとつの仕事だけをするように設計することだ。 ある関数が3つの仕事をしているのなら、それは3つの関数に分けるべきである。


ここからは、プログラミングを学ぶにあたって、おすすめしたいことである。

短いコードを書こう

コードというのは (読みにくくならない範囲であれば) 短いほうが良い。短いということは、書くのにかかる時間も、読むのにかかる時間も短くなるからである。 使いまわせる処理やアルゴリズムは、積極的に使いまわそう。手近な例で言えば、スタックやキューの実装、ソートの実装などは予めファイルに切り出しておいて、そこから引っ張ってくるだけで使えるようにすると楽だろう。

自分のしたいことが、先人が作ったライブラリによってできるならそれを使ったほうが良い。自分でコードを書くと、バグが出るし、面倒くさいし、いいことはほぼない。 偉い人が作ったライブラリは、自分で書くより高速に動くし、バグも少ないし、簡潔な実装になっていることが多い (悔しいけど) 。

バージョン管理システムを使ってみる

巨大なプログラムを作るような機会 (J科のプログラミング演習とかか?) が出てきたら、バージョン管理システムを導入してみるのも手かもしれない。 バージョン管理システムを使うと、コードの変更履歴を綺麗に残すことができる。 適当にコードを書いて失敗しても、瞬時に後戻りができるので、捗るだろう。 gitやmercurialあたりがメジャーなバージョン管理システムである。

バージョン管理システムは、レポートを書くときにも活用できるシステムなので、習得して損はない。卒業論文バージョン管理システムで管理することを推奨する研究室もある。