プログラミングを始めると、やっぱり最初の壁が大きいです。プログラミングしてやりたいことができず、つまらなくなってしまう人もいると思います。
そこで、自分でプログラミングを進めるとき、わたしが重要と考えているテクニックを3つ紹介します。
- やりたいことをWeb上で検索するテクニック
- デバッグするテクニック
- ユニットテストするテクニック
順に説明します。
1. やりたいことをWeb上で検索するテクニック
たとえば、Pythonで回帰分析をしたいとしましょう。このとき、Googleで 「Python 回帰分析」 と検索するのは、あまり賢くありません。問題が大きすぎるのです。問題をできるだけ小さく分割してから検索するとよいです。
たとえば、回帰分析をする といっても、
- データを読み込む
- データの前処理をする
- 回帰モデルを構築する
- 回帰モデルで使って予測をする
- 結果を保存する
といったプロセスに分けることができます。さらに、「1. データを読み込む」 についても、どんなデータ形式かによって異なりますね。たとえばデータ形式が、csv でしたら、やりたいことは Python で csv ファイルを読み込む、になります。
ここまで分割できれば検索しやすいです。Googleで 「Python csv 読み込み」 とかで検索すると、やり方の書かれた web ページが見つかると思います。それを参考にするのです。
ただ、そこに書かれたことをすべて鵜呑みにするのは危険です。間違えがあるかもしれませんし、古い情報かもしれません。たとえば、Python で csv ファイルを読み込むとき、pandas の read_csv を使うのが一般的ですが、ちゃんと pandas のオリジナルのページで read_csv を解説している箇所を読みましょう。たとえば、「pandas read_csv」 で検索すると、上の方のページに出てくるはずです。pandas の read_csv について網羅的な情報があります。
このように、やりたいことをできるだけ小さくしてから検索して参考になる web ページを探し、そこで使われているパッケージ・ライブラリ・関数があれば、そのオリジナルのページで確認するようにしましょう。これで基本的にはできないことがなくなるはずです。
2. デバッグするテクニック
プログラミングにおいては、プログラム上の間違い・エラー・ミスのことを 「バグ」 と呼びます。そして、そのバグをとることを、「デバッグ」 と呼びます。つまりデバッグとは、プログラム上の間違えを修正することです。
最初から完璧なプログラムを作れる人なんていません。間違えは誰にでもあります。
分かりやすい間違えですと、コンパイラがエラーメッセージを出してくれます。そのエラーメッセージをよく読んで、その通りに修正すればよいのです。エラーメッセージは英語で出てくることが多いので、英語が苦手な人は頑張ってください。
(英語は理解できても)、エラーメッセージの内容が理解できなかったり、修正の仕方が分からなかったりするとき、どうしたらよいでしょうか?
その場合は、エラーメッセージをコピペして、そのまま Google で検索してみましょう。英語のページが多いですが、大体はエラーメッセージの内容を説明していたり、修正案を載せたりしている web ページが見つかるはずです。これを参考にして、デバッグしましょう。
問題なのは、バグがあるのに、エラーメッセージが出ないときです。プログラムを実行すると、エラーなく終了するので、一見 問題なさそうで、バグに気づかないのです。
このときはどうするか?
次のユニットテストが重要になります。
3. ユニットテストするテクニック
先ほど 「Web上でやりたいことを検索するテクニック」 のところで、一例として回帰分析を
- データを読み込む
- データの前処理をする
- 回帰モデルを構築する
- 回帰モデルで使って予測をする
- 結果を保存する
というプロセスに分けられるという話をしました。ただ実は、ユニットテストを省いていました。
ユニットテストを入れると、
- データを読み込む
- (読み込めたか確認する)
- データの前処理をする
- (前処理できたか確認する)
- 回帰モデルを構築する
- (構築できたか確認する)
- 回帰モデルで使って予測をする
- (予測できたか確認する)
- 結果を保存する
- (保存できたか確認する)
となります。( ) 内がユニットテストです。このように、分割したプロセスごとにきちんと動作したかチェックすることをユニットテストといいます。
ユニットテストをしていないとき、たとえばエラーなく回帰分析の結果が出てきて、その結果が予想と違うとき (予測値におかしな値があったり、予測値がすべて同じ値だったり)、
- バグがあるのかないのか?
- どこにバグがあるのか?
わからなくなってしまいます。
そこで、ユニットテストしながらプログラミングすることで、ここのプロセスの動作確認はしたので問題ない!、と判断しながら進められ、結果的にバグを減らせるわけです。もちろん完了したユニットテストについては、テキスト化などで省いてしまって構いません。
確かにユニットテストしながらプログラミングするのは面倒です。ただ、最終的なバグを減らせるため、結果的に完成までの時間は短くなりますし、信頼度の高いプログラムになります。
以上の3つのテクニックがあれば、自分でプログラミングを進めることができ、どんどん上達するはずです。
質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。