プログラミングを学習する上で気をつけるべきこと―コーディング・調査・質問
前置き
この記事はRails Girls Japan Advent Calendar 2020の2日目の記事です。昨日はsuperrino130さんのターミナル で文字化けしたら Git Bash を使おうでした。
概要
この記事では「プログラミングを学習する上で気をつけるべきこと」というテーマでいくつかのTIPSを書いていきます。
プログラミングを学習中の(業務歴がない)方あるいはプログラミング学習に興味がある方が主な対象ですが、業務歴がある方でも役に立つことはあるかもしれません。
また、RubyやRailsなどの言語やフレームワークに固有の話ではなく、あくまでプログラミング学習一般の話をしたいと思います。
本編
手を動かす
実際にコードを書くのが上達への最短ルートであることは間違いありません。本を読む・動画教材を見るなどの学習法はもちろん有効ですが、コードを書くことと併用することで更に効果が高まると思います。
ただ、闇雲にコードを書くと間違ったやり方を覚えてしまったりもします。コードを「正しく」書くためにはいくつかの方法があります。
写経する
まずは写経です。これは本などに出てくるサンプルコードをそのまま書き写す方法です。いわば「体で覚える」やり方ですので、合う合わないがかなりあります。私個人はあまり合わないようですが、もくもくと練習するのが好きな人にはうってつけです。
写経に慣れてきたら、写経したコードをベースに自分なりの改造を加えてみてもいいかもしれません。その際、Gitなどを使って元のコードにすぐ戻れるようにしておくとはかどります。
レビューを受ける
もう一つ重要なのがレビューを受けることです。どんなに完璧だと思っていても、自分が書いたコードには何かしらの改善点があるものです(プロの開発者ですらそうなので心配無用!)。あるいは、自信がないコードを見てもらいたいということもあるでしょう。
身近にコードレビューをしてくれる人がいるなら、その人にお願いしてコードを見てもらいましょう。お題は何でもよいのですが、課題にアクセスしやすく理解もしやすい競技プログラミングなどがおすすめです。
身近にレビュアー候補がいないなら、Exercismなどのサービスを利用するのも一手です。このサービスではメンターにコードを見てもらいながら徐々にコードを改善していくことができます。英語でのコミュニケーションになるのが難点ですが、英語に自信がある人におすすめできます。
同じ問題を何通りもの方法で解いてみる
もしレビューが受けられないのであれば、セルフでレビューをするしかありません。このときにポイントとなるのは、同じ問題には複数の解法があるということです。同じ問題を考えつく限りの方法で解こうとすることで、結果的にコードレビューを受けたのに近い効果を得られるかもしれません。
解く問題ですが、例えば伊藤淳一さんの問題などが良いでしょう。ネットに回答例があるものであれば自分で答え合わせもできます。
上手に調べる
ある問題について調べる能力はプログラミングをする上で欠かすことができません。調べ方にはコツがあり、コツを抑えることで効率的に調べることができます。
エラー内容をコピペする
なにかを調べる必要に駆られるケースはいくつもありますが。最も多いのはエラーに直面したときでしょう。
エラーメッセージはほとんどの場合英語ですが、恐れる必要はありません。エラーの出方もメッセージの種類もたかだか数十通りくらいしかありませんし、コピペすればかなりの確率で解決法がわかります。
その際、自分の環境に固有の問題との区別を付けることが重要です。例えば、以下のようなRubyのコードがあるとします。
hoge
ここで、hoge
はいきなり登場しているのでエラーになります。おそらく、NameError (undefined local variable or method
hoge'のようなエラーになりますが、メッセージに含まれる
hogeは今まさに問題となっている名前そのものです。これを除外して、例えば
NameError undefined local variable or method`とWeb検索できれば解説が載っているサイトまでたどり着けます。
基本的に、「名前」(今回はhoge
)は検索クエリに含めても意味がない場合が多いです。NameError
のようなError
で終わっている単語とuninitialize
やundefined
のような否定的な意味の単語を組み合わせて検索するのがコツです。
公式情報から探す
RubyやRailsのような成熟したソフトウェアは公式の情報が非常に充実しています。まずは公式情報から調べるようにすることで余計な手間を省ける可能性があります。
Webで検索する際は、"site: ruby-lang.org"のようにサイトを指定すると公式サイトからの情報のみに絞り込むことができます。
注意点としては、公式情報は(以下にあるように)英語で書かれている場合が多いです。「英語にビビらない」こともプログラミング学習におけるポイントの一つです。
日本語で出てこないときは英語で調べる
プログラミングに関する情報はほとんどが英語で出回っています(Rubyなどの少数の例外を除く)。エラーメッセージを検索する場合は結果的に英語での検索になりましたが、もっと抽象的な調べ方をする場合でも英語で検索するのは有効な手段です。
例えば、"How to reverse array in Ruby"(「Rubyで配列を逆転させる方法」)のように調べると、高確率で海外のQ&Aサイトがヒットします。そのサイト内でのベストアンサーを頼りにすれば、多くの場合問題を解決できるでしょう。
なお、比較的マイナーなライブラリについて調べようと思うと日本語での情報がほとんどない場合もあります。そのような場合は否応なく英語で調べることになります。
上手に質問する
なにかを学習するとき、質問をしたくなるケースがあると思います。プログラミング学習においては現役のエンジニアが質問に回答してくれる場所がオンラインに複数存在しますが、同じ質問でもいくつかの点に注意を払うことで回答を得やすくなります。
画像を貼らない
エラー画像を貼ってはいけません。繰り返します、エラー画像を貼ってはいけません!
エラーはテキストで表示されます。テキストはコピペできます。テキストは加工できます。テキストならタイポが見つかりやすくなります。エラーを画像で送るとこれらの利点がすべて消し飛んでしまいます。
エラーについて質問したいなら、エラー内容をコピペしてください。それだけで回答者はだいぶ楽になります。
5Wをしっかり記述する
質問をしたいときというのはなにかに困っているときです。その「困り方」は、質問者であるあなたはわかっていますが、回答者の人は全く知りません。この知識の差が困難を生みます。
質問をする際、"5W"をできるだけ正確に記述するように心がけてください。"5W"とは、
- When, 問題が起きたのはいつか(問題の直接の原因と思われる行動)
- Where, どのような環境で問題が起きたのか(OSの種類や言語のバージョンなど)
- Who, あなたはどこまで問題を理解しているのか(問題を修正するために何を試してみたのか)
- What, 問題となっている具体的なものはなにか(ライブラリやフレームワークの名前)
- Why, なぜそれが今問題になっているのか(何を達成したいのか)
です。
具体例を示します。例えば、
「画像アップロードがうまくいきません!」
はダメな質問です。一方、
「Mac環境でCarrierwaveというライブラリを使って画像をアップロードしたいです。ローカルにはアップロードできていますが、S3にアップロードしようとするとNoMethodError
が出ます。どうすれば修正できるでしょう。以下にログを貼ります。」
は良い質問です。
省略しない
質問をするときに、「重要でない」部分(ログの一部など)を省略する誘惑に駆られるときがありますが、これは罠です。というのは、どんな情報が重要なのかを判断するのは回答者であって質問者ではないからです。
質問には可能な限り多くの情報を載せましょう。断言しますが、情報量が多すぎて困る回答者はいません。ほとんどすべてのケースで情報が少なすぎるのが問題なのです。
まとめ
というわけで、コーディング・調査・質問の3つのサブテーマでプログラミング学習における注意点について解説してみました。
プログラミング学習は困難な道のりですが、この記事にあるような抑えるべきところを抑えればぐっと効率が上がるはずです。みなさんのプログラミング学習の道が実り多きものでありますように!