プログラミングセンスは継続したら身につくものではなく自ら磨くもの
自分にはプログラミングセンスがあるかどうか悩んでいる人「プログラミングにはセンスが必要とか聞くけど、本当なのかな?プログラミング学習を始めてはみたものの、少し行ってはつまずいて進まない、、、自分ってプログラミングのセンスないのかな?」
こんなお悩みにお答えします。
この記事を読めば、自分にはプログラミングのセンスがないと思ってしまう理由、プログラミングのセンスとはどういうことか、どうやったらプログラミングのセンスを身につけられるか、がわかるようになります。
本記事の内容
- 自分にはプログラミングのセンスがないと思ってしまう理由
- プログラミングのセンスとはどういうことか
- どうやったらプログラミングのセンスが身につけられるか
- まとめ:プログラミングセンスは継続したら身につくものではなく自ら磨くもの
この記事を書いている人は
- 組み込み系エンジニアとしてプログラミング歴20年以上
- 新入社員教育のプログラミング講師として多くのプログラミング初学者と接した経験あり
自分にはプログラミングセンスがないと思ってしまう理由
プログラミング初学者に多いのですが、自分にはプログラミングのセンスがないと思ってしまうことが多いようです。
プログラミングの学習や作業が行き詰ることによるものと思いますが、なぜ、そのような考え方をしてしまうのでしょうか?
その理由について、考えてみます。
基礎学習ばかり続けてしまうから
プログラミング初学者を見ていると、プログラミングの入門書や初心者向け学習サイトで、最初から最後まですべて理解するまでやっている人を見かけます。
要するに、プログラミングの基礎学習ばかり続けてしまっている状況です。これはセンス以前の問題で、学習のやり方が間違っているんです。
それで、自分にはプログラミングセンスがないと思っても検討違いです。
プログラミングは暗記するものではない
バリバリにプログラミングをしている人で、すべてを暗記している人いますかね?
僕でも今だにわからないところが出てきた時には、その都度調べます。プログラミングとはそういうもので、なんとなくこういう書き方できたよなぁレベルの理解でよいのです。
一から始めてすべてを理解しようとする必要はない
日本の学校教育の弊害(?)かと思うんですけど、本に出てくるすべてを完璧に理解する必要はないです。
入門書に出てくる項目でも、人によっては将来1度もお世話にならない命令や構文があったりします。中間テストや期末テストがある学校教育ではないので、すべてを理解する必要なんてないです。
基礎的なところだけおさえて、理解あやふやなところを残して先に進んでも、将来、ふとわかるタイミングが来ます。
コードの動きを理解せずコピペしてしまうから
人が書いたコードをコピペして利用するのは悪いことではないですが、注意して欲しいことがあります。
写経がよいからと誤解していませんか?
インターネットでプログラミングはこうして学びましょうみたいな情報があふれています。その中にプログラミングコードを写経するのがよいとされている記事をよく見かけます。
確かに間違いではないです。でも、写経する人がやり方を間違えると効果のない学習方法になってしまいます。
例えば、本に掲載されているサンプルをそのまま打ち込んで動作させる。動いた、動いたで終わっていませんか?
それでは、キーボードのタイピング練習になっています。必ず考えながら、写経することが大切です。
人が書いたコードを利用するときは内容を理解していますか?
僕が組込み系エンジニアとして、開発現場で作業していた時によく言われた言葉です。
プログラムのある機能が欲しくて、すでに先人が書かれたコードがあった時、コードの動作、仕組みをしっかり理解した上で、プログラムコードをコピペして使いましょうということです。
ブラックボックス的に使ってしまうと、将来、エラーが出たときに追えませんし、自分自身のスキルアップにもなりません。
エラーメッセージを理解せずに思い込みでエラー個所を探してしまうから
エラーメッセージの出ないプログラム開発環境ならともかく、エラーメッセージをちゃんと読まない、内容をくみ取ろうしない方を見かけます。
エラーが出ると自分が書いたコードのエラー個所を自分で想像して直しにいってしまう
デバックをしててエラーメッセージが出た時に、感覚的にエラーを想像して今自分が書いた所などを探しに行ってしまう。一見すると早道のようですが、効率悪いです。
たまたま予想が当たれば、すぐに直ります。しかし外れると闇雲に時間を消費することになります。ちゃんとエラーメッセージの意味をくみ取って、論理的にエラーに対応するべきです。
ググって調べようとすることをしないから
今はホント便利な時代で、ググれば(Google検索すれば)同じようにエラーにハマってしまった人がその対処方法を記事に書いてくれたりしています。
そこで学び、吸収すればエラーはスキルアップのチャンスなんです。
自分でエラーの仮説を立てて原因を追求しないから
エラーメッセージが理解できても、ググってもエラーが直らない時もあります。
まずエラー(不具合)が出たときは、自分なりに今ある知見を使ってエラー原因の仮説を立てて追いましょう。この論理だてて考えるクセがプログラミングには大切だったりします。
エラー箇所の切り分けをしないから
エラーが発生したとき、闇雲にコード全体でエラーを探しても日が暮れてしまいます。
どこまでがちゃんと動いてて、どこからがおかしいのか、切り分けをするべきです。
調べる範囲が広ければ、当然時間もかかります。効率悪いですよね。
プログラミングのセンスとはどういうことか
そもそもセンスとは何か?
センスとは?
一般に言うセンスとは、「物事の感じや味わいを微妙な点まで悟る働き。感覚。また、それが具体的に表現されたもの。判断力。思慮。良識。」とありました。
これを単純にプログラミングセンスに当てはめると、「プログラミングの微妙な部分までわかる働きや感覚。それを具体的に表現されたコードそのもの。プログラミングに対する判断力、思慮、良識。」ということになるのでしょうか。
センスがないという人はどういう人か?
センスがないという人は、まさに前にあげたこのセンスを持ち合わせていない人ということになります。
私のプログラミング経験から、「開発現場で感じたこんな人はプログラミングセンスない人だな」と思ったタイプを列挙します。
- プログラミングのわからない所を教えても常に受け身な姿勢の人
- プログラミングをコツコツと継続して学ぼうという姿勢が感じられない人
- 他人が読んだ時に読みやすいよう書かれていないコードを見た時
- プログラムコードに自分なりの創意工夫が見られない時
それでは、センスがあるという人はどういう人か?解説します。
受け身ではなく能動的に考えられる
プログラミングはクリエイティブな作業です
よいものは取り入れ、改善できることは改善する。プログラミングにはこの思考が大切です。
継続して続けられる
スキル(センス)を身につけるには時間がかかります
プログラミングセンスに限らず、新たに何かのスキルを身につけるには時間がかかります。
例えば、子どもが自転車を補助輪なしで乗れるようになること。
いきなり乗れるようになった人はいないですね。転んでは起きて、試行錯誤しながらも身体と頭で覚えて行きました。だから、継続して続けられることが大切です。
気配りができる
自分が書いたコードを誰かが読んだ時のことを想像しましょう
プログラムを自分で書いて、自分のパソコンの中だけで動かしている分にはどんな書き方をしても問題ありません。自分さえ読めれば、将来エラーが出たとしても仕様を変えようとしたとしても、変更する時に読めればいいんです。
これが会社とかチームなどで複数の人とプログラミングしている場合はどうでしょうか?可能な限りプログラム中にコメントつけたり、インデントをしっかり整えたり、論理的に筋の通った記述で読みやすく書くべきです。
他人が書いた到底理解できない記述方法や、コメントのないプログラムほど読めないものはないです。別に仕様書や設計書などのドキュメントがあれば多少救われはしますが、可読性の悪いコードに出くわした時ほど悲しいことはないです。
そういう気配りができない人ほど、センスないなと思います。
創意工夫ができる
コードはただ書けばいいというものではありません
コードで同じ処理を繰り返しダラダラと書いていたり、まとめられる処理をまとめず書いたりしてる人がいます。
これもセンスないなという人になりますね。
プログラムはコンピュータが人間に代わって仕事を楽にしてくれるための手段ですから、楽したいという考え方が大事です。
効率化を考える習慣が必要で、創意工夫ができることが大切です。
どうやったらプログラミングのセンスが身につけられるか
プログラミングのセンスについてお伝えしてきました。
では、どうやったらプログラミングのセンスを身につけられるのでしょうか?
目標を見つける
モチベーションを長く維持するために、目標となるものを見つけましょう。
こういう人になりたい目標設定する
身近に自分の目標となる人(メンター)を見つけるべきです。
社会人や学生であれば職場や学校でプログラミングのできる先輩でもいいですし、周りにいない方はスキルマーケットやプログラミングスクールなどがよいでしょう。
» スキルマーケット【ココナラ】無料登録してさがす[PR]
コンテストなどに応募する
何の目標もなしに学び続けるというのは、厳しいものです。
プログラミングのコンテストなど何か具体的に目に見える形で目標となるものを設定しましょう。
環境を整える
プログラミングのセンスを身につける上で大切なのは、環境を整えることです。
継続的に学ぼうとしても、途中でわからないところが出てきたりと壁にぶつかります。特に自己管理の環境下でやらなければならない人は、挫折しやすくなります。
プログラミング学習、挫折する理由と挫折しない方法【無料対策あり】
「プログラミング学習してるけど、挫折しそう。挫折しない方法があったら、教えてほしい。」こんな悩みをお持ちの方も多いはず。この記事ではプログラミング初学者が挫折しがちなポイントに焦点をあて解説し、その回避方法についても紹介しています。
先人の知恵を借りる
最近はオンラインで学べるプログラミングスクールなども増えて来ています。プログラミング初学者は特に何から始めるべきかも含めて迷いやすいです。
環境を整えることも含めて、プログラミングスクールを利用するのも一つの考えです。
» 自宅で学べるオンラインのプログラミングスクール【TechAcademy】[PR]
» 侍エンジニア塾|無料体験レッスンあり[PR]
継続できる仕組みをつくる
仕事などであれば、一定期間単位で進捗を管理されるのでよいですが、そうでないと継続することのハードルが高くなります。
プログラミング学習サイトはほとんどが無料【独学には天国だった話】
「プログラミングを学びたいけど、プログラミング学習サイトってどうなのかな?できれば無料とかがあるといいな。」こんなお悩みをお持ちのプログラミング初心者の方に、プログラミング学習サイトを選ぶときのポイントと、おすすめのプログラミング学習サイト10選をお伝えします。
プログラミング学習サイトと言われるものの中に、学習の進捗状況がわかるものや、ゲーム性を取り入れて継続しやすい仕組みのものがあるので利用するとよいでしょう。
経験値を上げる
習うより慣れろ的な発想で、経験値を上げましょう。
圧倒的な作業量
圧倒的な作業量で経験値を上げるべきです。
プログラミングのスキルがあるなと思える人は、たいていかなりの作業量をこなしています。プログラミング言語によって違いはありますが、言語ごとに言われている習得するための時間量は最低限こなしましょう。
つべこべ言わず手を動かす
行動する前からあれこれ考える人がいます。
まず行動して結果から考えるという思考の方が、問題が明確になりやるべきことがわかりやすいです。
技術は盗むもの
技術は盗むものと昔よく先輩から言われました。盗むと言ってもコピペして盗みとるという意味ではなく、どのようにやっているか理解し勉強して真似るということです。
人が書いたコードをひたすら読む
僕は人が書いたコードをひたすら読むということをひたすらやりました。
教材になりそうなソースを探しては、自分なりに動作を解析して、コメント欄に内容を書いていく。
わからないところは自分で調べて理解する。使えそうなコードは、実際使ってみる。
「真似るから学ぶ」のが一番早いです。あとは応用してオリジナリティ出していけばよいだけです。
まとめ:プログラミングセンスは継続したら身につくものではなく自ら磨くもの
そもそも、プログラミングの技術は日々進化しているわけだから、立ち止まっていたら、いずれ今持っている技術は陳腐化します。
強いて言えば、あらゆる言語に共通した基礎的なプログラミングの技術は使えますが、それを基本に新しく出てきた技術を吸収する姿勢が必要です。
だから、学び続けるということができない人は、プログラミングのセンスがないとも言えます。
プログラミングのセンスは、継続した学びから生まれるもの、正しい方法で根気強く磨きましょう。