プログラミング学習に大切なこと
こちらでは、プログラミング学習に大切なことを書き留めていきますが、早速その三点を挙げると
- デバッグ
- 情報収集
- コーディング
となります。
この三つのスキルを意識して伸ばすことで、
- Youtube、Udemy などのチュートリアル動画をみないと新しいライブラリ、フレームワークの勉強ができない
- コードをコピペしているだけで、自分で考えてコードが書けない
- プログラミングの勉強を始めたは良いもののいつも最初の方で突っかかって勉強が進まない
- 一つの言語を覚えたけど、他の言語には手を出せない
といったことがなくなります。
ちなみに、未経験からのプログラミング学習の計画方法などについては以前書いた記事がありますので、こちらを参考にしてください。
プログラミングを行う際には、
- 情報収集
- コーディング
- デバッグ
-
- に戻る
と言うような順序でコーディングを行っていくのでこのそれぞのステップの質を意識的に高めていくことで普段のプログラミングの質を上げていくことができます。 それぞれのステップの質がそのままアウトプットに繋がるので自分が今どこができていないか?と言うところを考えてみると良いでしょう。
各ステップでやることと意識すべきこと
以下では、各ステップで意識すべきことと各ステップの最後には、OK行動とNG行動の例を書いていきます。
情報収集
情報取集とは、用はGoogle検索などで入念に情報収集をしましょうと言うことです。とはいえ、検索力を鍛えて自分の問題にあった答えを見つけられるようにしましょう と言うよりは、一次ソースを効率よく入手できるようになりましょうと言うことです。検索では、難しい内容を細かく噛み砕いて、検索キーワードに一致した耳障りの良い検索結果が出てきますが、 そこで見つかる記事は「必要な量を必要な分だけ、わかりやすく」と言うことを念頭に書かれているので必要な情報の全体像からすると至極絞られた情報しか目にすることができなくなってしまいます。
この問題を解決するのが一次ソースに当たる癖をつけると言うことです。そのほとんどは、公式ドキュメントになります。 React ならReact.js 、JSならMDNと言うようにそれぞれ公式のページがあるので それらの情報を参照するのが大切です。
これらのサイトは最低限の知識を前提に書かれているので、最初は読んで理解するのに苦労しますが、その苦労を乗り越えれば乗り越えるだけの価値があります。 JS であれば、それぞれのオブジェクトで実行可能なメソッドは解説されていますし、React であれば概念レベルから使用可能なメソッドまで一つずつ解説されています。
JS, React などなどの大きなトピックから自分が使用するライブラリまで、公式の情報(公式サイトやGithubのREADME)などを理解して使えるようになれば、コーディングの質やスピードは間違いなく上がっていきます。
NG行動
- 抽象的なキーワードで検索してしまう
- 一方面からみた検索キーワードのみで検索してしまう
- ヒットした記事を詳しく読んで理解しない
- 公式のドキュメントを避ける
- 理解が怪しい構文や用語などを調べずにそのままにする
- 疑問が生まれてもその場で調べない
- 何を理解したいのかをあやふやにしたまま記事や書籍を読んで、後に何も残らない
- 良質な記事、書籍を一度も読まない、あるいは一回程度しか読まない
OK行動
- 具体的なキーワードや複数の可能性を考えて検索する
- 答えが載っていそうな記事をじっくり読んで理解する
- 疑問が生まれたり、理解の不明瞭な概念をその都度調べて理解する
- 公式ドキュメントや良質な記事を繰り返し読んで隅々まで理解する
コーディング
こちらは、コーディングから実行までのアクションを含んでいます。どんなに情報して、記事の内容を理解しているつもりでも実際にコードを動かしてみないと自分のコードは動きません。 自分が頭で理解したことをコードにして、実際に動かしてみないことにはそれが本当に正しいコードなのかを確認することができません。
教材やドキュメントを読むだけで済ませてしまうことも多いのですが、そのドキュメントから受け取った内容をコードにして動かしてみて得られる情報も非常に多いです。 コードがうまく動かなければ、自分の間違いにも気づけますし、イメージと違うところがあればそこで軌道修正もできます。
その他、複雑なロジックが頭で考えられてもそれをコードにして動かしてみないことには、ロジックが正しいかはわかりません。 また、エンジニアの仕事自体がどれだけ質の高いコードを書けるかと言うところもあるので、コードを書いて動かしてと言うことを繰り返さない限りは永遠にその質を高めることはできません。
効率的な学び方みたいな話はいくらでもあるのですが、やはりどれだけコードを書いて動かしてそれを修正したかと言う経験がそのまま実力になると言う所もあるので、そのほかのデバッグ力や情報収集力も 高めつつバランスよくこちらも意識して高めておく必要があります。
NG行動
- 書籍を読んだり、記事を読むだけで実際にコードを動かさない
- コードを書く頻度が少なく、その間隔が長い
- 一つのロジックに対していつも同じ書き方をしている(より良い書き方を探さない)
- 書こうとしているロジックを分解せずに初めてしまい、動けなくなってしまう
- 一度コードが動いたらそれで満足してしまう
OK行動
- 新しい概念を学んだらすぐにコードを書いて動かしてみる
- 定期的にコードを書く習慣がある
- 一つのロジックに対して複数の書き方を考えながらコーディングする
- ロジックを小さい単位に分解して、言葉で説明できるようにした後にコードにする
- 3回程度コードを書き直し、コードの質を高めたものをアウトプットとする
デバッグ
デバッグは、エラーの原因の箇所を特定していく作業になります。
これが正しくできていないことが詰まってプログラミングで時間を溶かす多くの要因になります。 デバッグの最初のステップとしてはまずエラーメッセージを探すところからなのですが、自分が動かすコードに関しては 先にエラーメッセージの探し方を理解していると良いでしょう。HTML/CSS, JS周りを触っている場合はブラウザの検証ツール内のコンソールタブにエラーの内容が表示されます。 そのほか、Rails でも Go でも MySQL、Docker でもそれぞれログにエラーメッセージが表示されるのでそれをもとにコードの修正作業を行います。 ほとんどのエラーメッセージには、エラーの内容とエラーが起きている行とファイル表示されるのでこちらを確認することが大切です。
よくある間違いとしてこのエラーメッセージを確かめずに思い込みでコードを修正しようとしてしまうことです。 エラーになっている時の状態を正しく理解することがデバッグのスタートなのですが、ここを思い込みでやってしまうとスタートから方向がずれてしまっていてどんなに時間をかけても正しい方向には進んでいきません。 エラーの内容と箇所を誤解しているとそのほかの検索・コーディングの段階にも影響が出るので、エラーメッセージからエラーの内容を正しく理解すると言うことは必ず行いましょう。
そのほかでは、多くの学習者は console.log
などの標準出力などに変数の内容を表示して期待通り動いているか確認する「プリントデバッグ」はできるのですが、
別の方法の「ステップ実行」のやり方を知らない方が多いです。コードの実行順序やプログラミング言語への理解が十分にあればプリントデバッグだけでも開発することはできるのですが、
最初に一行一行目で追いながら変数の変わるタイミングやそれぞれの値の型などを理解していくことがコードへの理解を深めるステップとして必要です。
JavaScript では debugger
というキーワードをコード中に仕込めば一行一行順番に止めて変数を確認しながら実行していくことができますし、
Ruby なら byebug
や debug
、goなら delve
などのデバッグツールがあります。
デバッグはコーディングの中でも重要なステップなので、言語学習を始めたらまずはその言語のデバッグ方法を調べましょう。 デバッグが正しくを行えるとプログラミング言語の実際の動きを自由に見れるようになるので、学習の観点からみても第一にデバッグの仕方を学ぶくらいが丁度良いでしょう。
NG行動
- エラーメッセージをログやコンソールから探さない
- エラーメッセージが英語なので読まない(翻訳アプリなども使わない)
- メッセージの内容は理解しているそれが起こっている行数が特定できない
- 使っている言語でのステップ実行のやり方を知らない
- 思い込みでコードの修正やGoogle検索を繰り返す
OK行動
- エラーが起きたら、落ち着いてエラーメッセージを探す
- エラー内容とエラー箇所がスムーズに特定できる
- 新しい言語、技術を触る時にデバッグの方法を調べる
- ステップ実行やエラーメッセージで確認できている事実に基づいて、情報収集・コーディングを行う
まとめ
プログラミングにおいて意識する三つのことをこちらでは話をしましたが、この三つの質を上げていくことによって言語や技術分野に囚われない仕事ができるようになってきます。 これらははっきり言及されることも少ないですが、これまで色々な学習者の方を見てきた経験上、無意識的にこれらのレベルが高い方はスイスイ新しいことを覚えて進めていけますし、 そうでない方はどうしても最初の方から躓いてしまいそれを修正できずに挫折してしまうことが多いように思います。
経験者の中でもあまり意識していない方はその後の伸びにも関係してくるので今一度これらができているかは確認できると良いかと思います。
情報収集ができて自分が触ろうとする技術の全体像を理解してコーディングを行い、デバッグで自分の期待したコードと実際の挙動のずれを即座に理解できれば極論全くつまることなく開発を進めていくことができます。 プログラミング学びたてではどうしても「新しいことを覚える」と言うところに意識を取られがちですが、「どのように知識や経験を効率よく積んでいくか?」と言うメタ的なスキルを伸ばしていくことが重要です。 目先のやることに囚われすぎずにスムーズな学習を行える正しい習慣を身につけていきましょう。