プログラミングにセンスは必要?挫折したときに確認したい3つの学習手順

プログラミングにセンスは必要?挫折したときに確認したい3つの学習手順

プログラミングの学習をしていると、必ず「自分にはもうダメだ。センスがない。」と心が折れることがあります。

最近、プログラミング学習を始めた人はもちろん、エンジニアなら誰もが一度は通ったことのある道です。

学習を辞めることは簡単ですが、もし続けることができれば、あなたはプログラミングスキルをつけて自分の理想に一歩近づくことができます。

「とは言え、自分には本当にプログラミングのセンスがないから勉強をすることが辛い」

それは多くの場合、学習方法が間違っています。プログラミング初学者の9割は学習方法を間違えており、それゆえに辛い学習経験をしていると言えるでしょう。

正しいプログラミング学習はあなたのスキルを着実に高め、今よりも抜群に発生するエラーを減らすことが可能です。

今回は、プログラミングのセンスがないと過去に挫折経験があり、今は現役エンジニアとして活動する僕が、プログラミングのセンスについてお話します。

目次

プログラミングのセンスとは

多くのプログラミング初学者が間違っている点としては、あなたがエラーを解決できない理由はプログラミングのセンスがないからではなく知識が不足しているためです。

プログラミングのセンスとはエラーを簡単に解決できることではなく「機械と人間の両方にとって理解しやすいコードを書くこと」です。

機械にとって理解しやすいコードは、余計な処理をすることなく目的を達成できます。
また、人間にとって理解しやすいコードはレビュアーの理解を早めます。

これらのバランスが取れている人こそがプログラミングのセンスがある人と定義することができるでしょう。

例えば、下記のコードを例にとってみましょう。下のソースコードでは5よりも大きい最初の値を取得する処理を書いています。

let value = 0;
for (i = 0; i < 10; i++) {
    if (i > 5 || value != 0) {
      value = i;
    }
}

このソースコードでは以下の2つの点で機械と人間に優しくありません。

・余計なループを回している(本来であれば6回のループで十分)
・ifに不要な条件を書いている

例を出したコードは以下のように書き換えることができます。

let value = 0;
for (i = 0; i < 10; i++) {
    if (i > 5) {
      value = i;
      break;
    }
}

このように書くと余計な分岐もループ処理もなくなります。

これは簡単な例ですが、機械にも人間にもわかりやすいシンプルなソースコードを書く人こそプログラミングセンスがある人ということができるでしょう。

本当にあなたにプログラミングセンスはないのか?

前の章を読んでいただけると、足りないのはプログラミングのセンスではなく単純な知識ということがわかっていただけたでしょう。

そもそも、忘れてはいけないことはプログラミング学習は圧倒的に初学者に優しくないという事実です。

それは、プログラミング教材がだめといった理由ではなく、プログラミングを理解して使いこなせるようになるまでの壁が決して低くないということです。

実際、僕はプログラミングスクールのメンターをしていましたが、数十万円のお金を払っても卒業しない人が3割ほどいました。

プログラミング学習をこなしていくことは決して楽な道のりではないのです。

プログラミング学習は覚えることが圧倒的に多い

以前、PHPを独学で学ぶ10ステップを別記事でまとめましたが、正直かなり省略して10ステップにまとめています。

全てを網羅しようと思えば、本が1冊書けるくらいの量になりますし、事実、プログラミング関連で出版されている本を見るとかなりのボリュームになることが見てわかります。

よくわかるPHPの教科書 【PHP5.5対応版】304ページ

いちばんやさしいHTML5&CSS3の教本 人気講師が教える本格Webサイトの書き方296ページ

1冊でこのボリュームにも関わらず、プログラミング書籍のジャンルを挙げてみると

  • 言語に関する書籍
  • アーキテクチャに関する書籍
  • インフラやミドルウェアに関する書籍
  • クラウドに関する書籍
  • AIなどの技術に関する書籍

など、かなり豊富になります。

これら全てを覚える必要はないにしても、そもそも前提で要求される知識は他の職種と比較しても多いです。

これまでのベースとなるプログラミングの考え方だけでなく、日々新しい技術が出てくるとなると初学者エンジニアがその量に圧倒されるのは無理もないと言えます。

現役エンジニアも日々センスがないと苦しんでいる

ここで1つ知っておいていただきたいのは、エンジニアになれば全てが解決するわけではなく、エンジニアになっても日々学ぶことの連続で、もがき続けているという事実です。

いくら学習を進めても終わりが見える様子は全くありません。

それどころか、新しい技術や知識を知るほど今までつけた知識が邪魔になり、新しい技術の理解を阻んでいるケースすらあります。

エンジニアになったことがない方でも、AWSなどを触ったことがある人もいるかもしれません。しかし、現役のエンジニアでもAWSを触ったことがなく、いつまでも物理サーバーと向き合って仕事をしているエンジニアもいます。

どちらが良い悪いではありませんが、学ぶことを諦めなければそうしたエンジニアよりも価値が高いエンジニアになることも難しくないと言えるでしょう。

プログラミング知識を身につける正しい学習手順

プログラミング初学者の9割は効率的な学習手順を確立していないため、辛い学習を続けており、あなたも非効率的な学習を進めているかもしれません。

辛い学習を続けなければならない理由は、プログラミングの学習方法はトライアンドエラーであるため、自分にあった学習方法を確立することが難しいためです。

学習方法は、全く同じ技術を身に着けようと考えた場合でも、その人の

  • スキル
  • 経験
  • 身に付けた技術を通して実現したいこと

などが異なれば、適切な学習方法は異なります。

その中でもプログラミング初学者が最初から必ず押さえるべき学習ポイントを以下にまとめます。

  • エラー文を読む
  • コードを理解するまで読む
  • 細かくデバッグをする

エラー文を読む

初心者エンジニアでも、少し学習を進めている人はエラー文を読めと耳にタコができるほど言われているでしょう。

しかし、それだけ言われても初学者の人はエラーを読もうとしません。なぜなら、エラー文は英語で書かれていてなんとなく難しそうに思われるためです。

例えば、以下のエラーを見てみましょう。

ReferenceError: Can’t find variable: aleet

aleet という変数は存在しないというエラーであり、きちんと読むと初学者エンジニアでも理解ができるレベルの内容です。

しかし、真っ黒のターミナル画面によくわからないエラーが表示されると、初学者エンジニアはパニックになり今修正した箇所を急いで元に戻そうとします。

そして、元に戻し、再度処理を実装して今度は上手く動作するから次の機能追加に進むという動作をします。

その結果、エラーメッセージを読むことなく、プログラミング学習を進めていくことになります。自力でエラーを解決したわけではないので、当然難しいエラーに当たったときに解決できるわけもありません。

こうしてエラーが読めず、解決できずの学習を進めていき、辛い思いをすることになってしまうのです。

最初に当たるエラーは基本的に簡単なものばかりです。Googleでエラー文を調べると解決策が出てくるものばかりでしょう。

なぜ、このエラーは発生したのか?を理解できれば、次に同じミスをすることは減ります。必ずエラーメッセージを読んで、なぜエラーが発生したか?を理解しておくようにしましょう。

コードを理解するまで読む

意外に思われるかもしれませんが、初学者エンジニアはコードを書くこと以上にコードを読むことが勉強になります。

他人が書いたコードをきちんと動かしながら見ることで、

  • どんな設計でこのコードが書かれているか
  • どの粒度でファイル分割・メソッド分割をしているのか
  • 今の動作を実現しているソースコードはどう書かれているのか

など、学ぶことは書くこと以上にあると言えます。

初学者にありがちな例として、コピペで済ませて動いたから終わりといったケースも見られます。コピペは悪ではありませんが、必ず内部でどんな動作をしているのか読んで理解するようにしたほうが、あなたの成長速度は確実に早くなるでしょう。

また、さらにレベルアップを考えている人は実務レベルで書かれているコードであればなんでも構わないので読んでいくのがいいでしょう。

書籍やUdemyなどの動画で実装しているコードを写経して理解していくというやり方も効果的なので、合わせて覚えておくと効果的です。

細かくデバッグする

また、書いたコードに対して必ず細かくデバッグをするようにしましょう。

デバッグとは、コードが正しく動いているか表示を行っていくことです。一例ですが、言語別には以下のような方法があります。

  • JavaScript ・・・console.log(value)
  • PHP ・・・var_dump(value)
  • Go ・・・fmt.Printf(“%v”, value)

これらのように表示を適宜行っていくことで、自分が想定している動作を行えているかどうか?の確認を進めていくことができます。

どこまで「自分の想定通りの動作」で「自分の想定通りでない動作」はどこからなのか、見極めることはエラー解決の観点でもポイントになってくるので、デバッグのスキルを高めておいて損はないでしょう。

デバッグのイメージがつかみにくい人は以下のサイトがわかりやすいので参考にしてみてください。

デバッグ(debug)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

まとめ

ここまでの記事のポイントをまとめます。

  • プログラミングに必要なのはセンスよりも知識
  • プログラミング学習で覚えることは圧倒的に多いので着実にスキルアップをする
  • 細かく動作確認 -> エラー解決のサイクルを身に着けてスキルアップしよう

プログラミング学習は、不慣れなことの連続ですし知識的に終わりが見えないため、挫折する人も少なくありません。

しかし、それはプログラミングのセンスではなく、勉強し続けるか勉強を辞めたかの違いでしかありません。

今は辛いことも多いかと思いますが、学習を進めて自分のやりたいことを叶えていただけたらと思います。

関連記事

コメント

コメントする

目次