プログラミング

プログラミングが上達しないと悩む人を救いたい【10個のコツを伝授】

プログラミングが上達しないと悩む人を救いたい【10個のコツを伝授】
プログラミング初心者

「プログラミングを勉強しているけど、あまり上手くなっていない感じがする。コード書いているより分からないことを調べている時間の方が長い…。というか調べてしかいない…。いつも同じエラーでつまづくし。このままでいいのかな?上達するコツがあれば知りたいな。」

 

この記事ではそういった悩みを解決します。

 

得意技はNullPointerException、ドナ(@Twitter)です。

 

プログラミングをしているみなさんは、「プログラミングがもっと上手くなりたいなぁ」と思ったことがありますよね。

コードを書いてはいるもののあまり上手くなっている実感が湧かず、「勉強の仕方が間違っているのでは...」と不安になったり、上達する人だけが知っているコツみたいなものがあるのでは?と思って不安になりますよね。

 

ただ残念ながら「プログラミング 上達」で検索して見つかる情報って、本気で悩みを解決しようとしていない表面的なものが多いんですよね、、

なぜなら、プログラミングスクールを運営している会社が自社のスクールへ誘導するために書いているから。

 

よくある記事の流れ

プログラミングが上達しない

上達するためにはプログラミングスクールに行くべき

自社スクールの紹介

 

そういう記事は参考にしない方がいいですね、、豚の餌にもなりません故、控えめに言ってクソ and 糞です。

 

少し私の過去の話をさせてください。

今でこそチームをリードするポジションでメンバーのスキルアップを指導する立場にありますが、入社した頃からバリバリプログラミングができたわけではありません。同期の中でも低いレベルでした。

チームのメンバーではあるものの、プログラミングができなくて会社で惨めな思いをしていました。開発はスケジュール通りにいかず残業を重ねる日々。

 

クソが…!絶対見返してやる…!」という反骨精神から周りの人よりもプログラミングを勉強し続けた結果、今のポジションに立つことができています。

 

そんな私の経験を踏まえ、本記事では以下のことについて解説します。

 

  • 多くの人にプログラミングを楽しんでほしい
  • 効率的にプログラミングが書けるようになってほしい
  • 悔しい・惨めな思いをしなくて済むように…

 

過去の私と同じような状況に置かれているあなたに向けて、この記事を捧げます。

 

プログラミングが上手くなりたいとは?【実力レベルを定義】

プログラミングが上手くなりたいと言っても、人によって経験も違えばレベルも違いますよね。

レベルが違えば、上達のために必要な手順はもちろん異なりまして。

 

なので、今あなたがどのレベルにいるか分かるよう、5段階のプログラミングのレベルを定義します。

▶︎図示。人数とレベルの関係が分かるように

 

レベル1

  • 作りたいものが作れない。どうやってコードを書いたら良いか分からない。
  • 1つ目の言語を学習中。
  • エラーが発生すると自分の力でよく解決できないことがある。
  • 1000行以上のコードを書いたことがない。

 

レベル2

  • 作りたいものは調べながら自分で作り切れる。
  • 2つ目の言語を学習中。
  • フロントエンド&バックエンド等のように、複数の開発をできるようになりたい・活躍の場を広げたいと考えている

 

レベル3

  • 保守性・拡張性の優れたコードが書きたいと考えている
  • 性能面に気を配ったコードを書きたい人
  • 他の人が書いたコードを読める人・レビューする立場の人
  • コードだけではなく、設計・アーキテクチャに目を向けられるようになっている人

 

レベル4

  • 個々の力ではなくチーム力を上げたい人
  • 他の人がうまく書けるように教えたい人
  • チーム内のコーディングルールを作り適用する立場の人
  • 開発プロセスの自動化や技術選定を行う人

 

レベル5

  • エバンジェリスト。
  • 業界全体のレベルアップを考えている人。
  • 新しい仕組みや技術、考え方を世に浸透させる立場の人。

 

この記事では入門編〜初級編として、レベル1とレベル2の人を対象にして上達のコツをお伝えします。

レベル3以上の中級編はまたの機会に。

 

プログラミング上達のコツ10箇条

レベル1の人は、「xxxという処理を実現するためには、yyyを使って、zzzというコードを書いたら出来そうだな。」というイメージが出来るようになることを目指します。

「プログラミングができる」というのは、何か作りたいものがあるときに、作る必要があるコードを悩まずに反射的にイメージできる、という状態のことです。。

これは、四則演算、条件分岐、ループ処理などの基本的な文法の話から、標準入出力やファイル入出力、データベース操作などの、言語が標準で用意しているよく使われるAPI類が反射的に出てくることを意味しています。

できる人とできない人の違いはココ。まずはこのレベルを目指しましょう。

 

ではそのためにはどうしたらよいか?

私の経験を踏まえ、プログラミングが上達するために必要な10個のコツをまとめました。

 

プログラミング上達のコツ10箇条

  1. とにかく書く
  2. 学習する目的・作りたいものを決める
  3. 一緒に頑張る人を探す
  4. 簡単な言語から始める
  5. 小さな出来たを積み上げる
  6. 完璧を目指さない
  7. エラーと仲良くなる
  8. デバッグを極める
  9. 教えてグーグル先生!
  10. ツールを使い込む

 

上記について1つずつ解説していきます。

 

ドナ
いきなり全てを理解する必要はないです。ブックマークして何回も目に通してもらいながら繰り返し読み返すことで、自然と意識できるようになります。頭の片隅に置いて意識するだけで成長は全然異なりますよ!

 

1. とにかく書く

「何を言ってるんだコイツ…」と思うかもですが、基本的なことですし、一番効果のある方法です。

 

というのもプログラミングができないと感じる人は学習時間不足であることが多いです。

プログラミングはやり始めてすぐにできるようになりません。最低でも200〜300時間ぐらいの学習が必要です。

変数の宣言の仕方やループ処理、条件文の書き方など、基本的なことは無意識で書けるようにならないと話になりません。こればかりは書いて慣れるしかないです。

ドナ
ちなみに私は独学だったので500時間ぐらいかかりました。今はスクールとか分かりやすいオンライン教材がたくさんあるのでもっと効率的に短期間で学べるかもです。

>>関連記事:プログラミングを1ヶ月の独学で習得する方法【月200時間勉強する】

 

またこのとき、自分の頭で考えてプログラミングすることが大事です。

巷では写経と言われる、世の中にあるコードを書き写す練習方法が上達に良いと言われてます。ですが、写経はやり方を間違えるとただのコピーコードになってしまうので効果がありません。

写経とは、ある機能を実現するための参考になるコードがあるだけで、まずはその機能を実現するために自分の頭で考えて絞り出すことが大切。この訓練が成長のキモです。

考えずに書いた1000行より、悩んで考えて捻り出して書いて100行の方がスキル上達には効果的。脳みそを使いましょう。

 

そのためには、参考書とかネットである練習問題を愚直に取り組むのがシンプルで効果あります

ドナ
学生の頃の勉強で数学の演習問題たくさん解きませんでした?シンプルに、アレです。

 

いきなり何か作りたいものを決めてやってみるのもありですが、題材によっては必要なスキルのバラツキがあるし、なにより分からないことだらけでストレス感じます。禿げます。

まずは基礎を大事に。地味ですが、基本的なコードを書くことを繰り返しましょう。自分の中で、こういう時はこうやって書こうみたいなコードの書き方が自然とできるようになってきます。

ドナ
これが、プログラミングはインプットではなくアウトプットを増やせと言われる所以ですね。知っていることと、できることは違います。

 

勉強の秘訣として、インプットとアウトプットの割合は2:8ぐらいが良いです。

本を読んだり学習サイトで1つの文法の知識を学んだら、最低4回は自分でコードを書く、それぐらいの意気込みが必要です。

ドナ
たまにUdemyとか動画教材を見てなんとなく分かった気になっちゃう人がいますが、まったくスキルが身についてないのでやめましょう。自分で何も作れません。そういうのは胡散臭いコンサルタント()の人だけで十分。読むだけで出来るようになるならみんなプロのエンジニアですから(笑)

 

まずはとにかくコードを書くこと。基礎練習なくして上達はあり得ません。

 

2. 学習する目的・作りたいものを決める

そもそもなぜプログラミングを学びたいのか?学んで何がしたいのか?を明確にすることが大切です。

自分の思い・考えを実際に文章にして書き出してみてください。なんなら、パソコンでいつでも見えるように付箋にしておくとか、紙に書いてトイレに貼るとか。極端ですが、目に情報が入ってくるのは刺激になるので良いです。

 

というのも、プログラミング習得にはモチベーションが大きく関わってきます

極端な話、プログラミングを習得しないと命がなくなる、仕事がない、ぐらい追い込まれている人は習得できます。

逆に、まぁ身につかなくてもいいかな…他のこと頑張ろう。という考えの人は挫折しますね。

▶︎関連記事

 

じゃあモチベーションを上げるにはどうしたら良いかというと、環境を作るか目的や楽しみを見出すか、どちらかです。

ドナ
私が前者のタイプで、独学で成功できたのはプログラミングを習得しないと大学を卒業できなかった、研究室に居場所がなかった、という環境があったからだと思っています。最初の頃は辛かったですが、時間をかけて少しずつできるようになってきたら結構楽しくて、勉強も苦じゃなくなりましたね。
ドナ
また、会社に入ってプログラミングができず、上司やPLから「なぜ予定通りにできないの?遅れはどうやって挽回するの?」と人前で詰められた惨めな思いをして、そんな状況から抜け出したい…!という思いがあったこともプログラミングが上達したいというモチベーションになりました。

 

モチベーションが大事だと考えると、プログラミングスクールってのはお金を払って勉強する理由と環境を作ることができるので、理にかなってはいるんですよね。

とはいえ、勉強する目的がしっかりしている人や何か作りたいものがある人は楽しみながらモチベーション上げることができるのでスクールは不要

逆に自分に甘えてしまう人は、ある程度できるようになるまではスクールを使った方が確率が高い、というのが私の自論です。

>>関連記事:【プログラミングスクール vs 独学】たった1つの基準で判断できます

 

3. 一緒に頑張る人を探す

先ほどの学習目的を作ることと近いですが、一人で勉強するより誰かと一緒に勉強したほうがモチベーションを保てるので、結果的に上達に繋がります

 

実際、プログラミング勉強中に孤独を感じて挫折してしまった人は9割を超えるというデータがあります。

あなたは受験勉強で塾に通ったり、友達と一緒に勉強した方が捗ったタイプの人ですか?とすれば、この気持ちって分かるんじゃないですか?

ドナ
何を隠そう私も過去に2回独学に失敗しています。3回目でなんとか成功しました。その違いは周りに一緒に勉強する人がいたかどうか。些細なことでも相談できたことが意外と悩みをスッキリすることができました。

 

「とは言われても、一緒に勉強できる人なんていない…」

という人はSNSを活用してください。

  • Twitterでプログラミングを勉強している人を探す
  • オンラインコミュニティに入ってみる
ドナ
私もTwitterで日々のエンジニア業務のことやプログラミングのノウハウについて情報発信しています。よかったらフォローして一緒に上達を目指しませんか?

 

仲間を作った方が効率が良いという意味では、もしプログラミングスクールに通うおうかなと考えているなら、専用の教室を備えていて一緒に勉強する仲間が見つかるような環境があるところをおすすめしています。

>>関連記事:【プログラミングスクール】オンライン vs オフライン(通学制)【一択です】

 

4. 簡単な言語から始める

実はプログラミング言語には難易度があります。

どの言語から始めるべきか?というと、簡単な言語を選ぶべきです。

 

簡単な言語とは?

  • 簡単な言語:Ruby, PHP, Python, JavaScript
  • 難しい言語:C, C++, Java

 

簡単な言語とは、いわゆるITエンジニアと呼ばれる人がWeb開発で使う言語です。文法もシンプルで、開発環境づくりもブラウザがあればできてしまう、最初に取り組むには失敗が少ないのでおすすめです。

ドナ
ちなみに僕はC言語から始めて見事に挫折しましたので、良い子は真似しないように。最初は簡単な言語から始めて、プログラミングってこういうものかーとイメージを掴むことが大事です。

 

言語選びで悩む人はこちらの記事が参考になりますよ。

>>関連記事:【初心者必見】プログラミング言語を勉強する順番【現役エンジニアのオススメ】

 

5. 小さな出来たを積み上げる

例えば100行ぐらいのプログラムを作ることになったとして、一気に100行書くのはナンセンスです。

このケースなら10行を10回繰り返して作ってください。

 

例えば、電卓のようなプログラムを作る場合。

  1. 入力を受け取る部分を作る
  2. 入力されたものが数値か、演算か判別するロジックを作る
  3. 入力値を演算する機能を作る
  4. 演算結果を表示する部分を作る

▶︎電卓をパーツに分解して、組み上がっていく様子を図示すると分かりやすい?

こんな感じで1つ1つ分解してコードを書きます。

分解した小さな単位で正しく動いているかを動作確認しましょう。1つ出来上がったら次のパーツに着手する。これを繰り返します。

 

世の中で動いているシステムやサービスはたくさんのコードから成り立っていますが、最初にリリースされるときから全てのコードが書いてあったかというと違います。

最初にリリース → 次の機能を追加 → 次の機能を… という小さな積み重ねを繰り返したことによって出来上がっています。

 

なぜ小さく分解したほうが良いか?というと、以下の通り。

なぜ分解して考えるべきか?

  • エラーが発生したときの解析をやりやすい
  • 少しだけでも思った通りにできた!という達成感を味わえる

学習のモチベーションアップにもつながって、精神衛生上も良きです。

 

例えば、人気学習サイトの1つProgate、HTML学習コースの進み方は次のようになっています。

  1. 完成物の全体形をイメージする
  2. ヘッダーやフッターなどの部分に分けて学習しながら作成する

つまり、最終的にどんなに大きなものを作る場合でも、まずは小さな部品単位で作っています。

 

またこの時、以下のようなことを試したりするとより理解が深まります。

  • Paddingを使うと説明があるが、Marginを使ったらどうなるのだろう?
  • h2見出しではなく、pタグにフォント設定をしても同じなのだろうか?

プログラミングスキルは人に教わったことよりも、自分で何かを試そうとした経験こそが一番知識として身につきます。何かを試そうとしたときは、大きなプログラムだとやりづらく、小さいプログラムが向いています。

そういった理由から、プログラミングを上達させるには小さく作って試そうとする力を大事にしてください。

 

6. 完璧を目指さない

プログラミングの勉強をし始めた頃、特に独学している人は、「自分の書いたコードは正しいのかな?きれいなコードが書けない…」と思うことがありますよね。

このレベルの人は「プログラミングが上手く書けない」とか、「同じ失敗ばかりする…」「エラーの解決方法が全然分からない…向いてないのかな?」とか、気にしなくて良いです。

というか気にしちゃダメ。そんなことはレベルが上がってから考えればOK。

きれいなコードは後のメンテナンスや機能拡張のフェーズで生きてくるものであって、初めて何かを作り上げるときは気にしなくて良いです。

悩んでいる時間があるなら、何かを作るためにどうやったらできるか?を頭悩ませて、振り絞ってコードを書くべし

 

たまに、「コードをコピーしてるからダメ」「写経ばかりじゃ意味がない」という、誰に向けた情報か分からないことを鵜呑みにしてしまう人もいますが、そんな戯言も無視してOK。

あなたがやるべきは、とにかくたくさんコードに触れて、たくさんアウトプットして、たくさん失敗すること。

「文法やライブラリの使い方は完璧に覚えなきゃ…!」という考え方もいりません。「xxxという処理はyyyライブラリを使えばできそうだな…使い方はググって確かめよう」というイメージができれば十分です。

ドナ
実際私もそんなもんです。それでもエンジニアやれてます。

 

7. エラーと仲良くなる

ドナ
Welcome、エラー。また会おう、エラー。

「よしよし、今日もいっぱいエラー出たか、かわいいやつだなお前は」

 

プログラミングにはエラーが付き物。我が子のように愛情たっぷりに接するぐらいの気持ちが必要です。

なぜかというと、エラーにぶつかった時こそ1番成長できるチャンスだから。

 

物事は成功したことよりも、失敗して苦しんでなんとか解決しようともがいたことの方が記憶に残ります。

ドナ
私は入社したての8年前に作った、市場で不具合になりパッチを充てたコードのこと、今でも覚えています。その部分に関する知識は私の財産であり、武器になってます。

 

「エラーが分からないから自分はプログラミングに向いていないんじゃ...」と考えるのは勘違いです。

それはあなたがエラーに見慣れていないだけ、エラーが出た時の解決方法を知らないだけです。

 

よくあるエラーの例

  • print関数、printf関数を間違えて使う
  • セミコロンをつけ忘れる
  • 半角スペースのところを間違って全角スペースを入れてしまう
  • 「’」と「`」のシングルクォートを間違える

 

プログラミングができると言われる人は、あくびをする頻度ぐらいエラーに出会っているし、解決してきています。そしてエラーに対する拒絶反応みたいなものがありません。

プログラミングが上達したいなら、エラーちゃんと友達になりましょう。

>>関連記事:【超簡単】プログラミングが分からないときの解決法

 

8. デバッグを極める

デバッグ(debug)「de(否定,除去)+bug(虫)」とは、コンピュータプログラムや電気機器中のバグ・欠陥を特定して取り除き、動作を仕様通りのものとするための作業である。サブシステムが密結合であると、1箇所の変更が別の箇所でのバグを作り出すので、バグの修正がより困難となる。

引用:デバッグ - wikipedia

 

プログラミングが出来る人は書いたコードの品質を取る方法も知っているし、不具合が起こったときの解析も早いです。

その理由の1つがデバッグ力プログラミング上達においてデバッグは避けて通れません

プログラミングを学ぶ=作り方を学ぶとイメージしがちですが、実はソフト作りの半分は品質確保のためのテストやデバッグです。

 

デバッグとはどんなものか?というと、例えば、変数やコードの通過箇所を確かめるprintデバッグ。昔ながらの方法にして王道の方法です。

ここに見出しを入力

  • 変数の中身に何が入っているか?を確認する
  • たくさんあるコードの中で、この部分を意図通り通っているのか?を確認する

といったことを画面に出力して確認する方法です。エンジニアなら誰しもやってます。

 

また、デバッガーと呼ばれるツール類の活用もします。代表的なデバッグツールを紹介します。

デバッグツール

  • C言語: gdb
  • Python: pdb
  • Webページ作成:ブラウザのディベロッパーモード
  • Java:Eclipse

 

デバッグを極めるものこそがプログラミングを制します

 

9. 教えてグーグル先生!

エンジニア力=ググリ力といっても過言ではありません。分からないことは知っている人に聞けばOK。

 

プログラミングでググるとは?

  • xxxということがしたいけど作り方が分からない
  • yyyというメソッドの使い方を忘れてしまった
  • zzzというエラーが出たけどどういうことだろう

 

 

基本的な文法ができるようになれば、あとはググリ力があればなんとかなります。

個人的にググるときに意識していることなポイントは以下の4つです。

 

ググり方の4つのコツ

  1. やりたいことのキーワードをたくさん入れて検索する 例:Webページ ユーザー認証 やり方 JavaScript
  2. エラーの英語をそのまま全文検索する
  3. 1)で見つからないときは英単語にして検索する→ stackoverflowから探す 例:web page user authentication javascript
  4.  英語に負けない。出てきた英文をGoogle翻訳にぶち込む。

 

10. ツールを使い込む

プログラミングをするには必須のツール群。特にエディタはエンジニアの3種の神器のうちの1つ。自分色に染めて使いこなすエディタを作ってこそ一人前です。

 

ツールを使うことで何が変わってくるか?というと、必要なタイピング量が圧倒的に減ったり、覚えないといけないことが減らすことができるので、本来やるべきロジックを考えることに専念できます。

 

ツールの活用例

  • インテリセンス・補間機能;変数の先頭数文字を入力するだけで予測候補を出してくれる
  • ジャンプ機能:変数の宣言場所や、クラスやメソッドの定義場所にショートカットキーでジャンプできる
  • コード解析機能:変数の未初期化や未到達コードなど、不具合に繋がるコードを未然に防ぐことができる

 

代表的なツールの1つが、現在多くの人に使われる人気の開発環境Visual Studio Code。通称VSCode。

VSCodeはプラグインと呼ばれる拡張機能を入れることで便利な使い方ができるとともに、自分の使いやすいようにカスタマイズすることができます。

 

ツールの使い方によって作業効率は大きく変わります。

プロなら、仕事道具に拘るべし。

 

なぜプログラミングが上達したいの?

最後に、1人のエンジニアとして常に悩み葛藤していることをお伝えさせてください。

 

プログラミングが上手くなりたい!と考えているあなたは、なぜプログラミングが上手くなりたいのでしょう?プログラミングが上手くなると何か良いことはありますか?

 

一般的にプログラミングは目的ではなく手段と言われています。これは多分真理です。

  • ライブなどの予約を個々人がインターネットを使って便利に行う
  • 予約受付業務の負荷を減らしてコストを削減する

上記のような解決手段が「webサービスを作る」「作業を自動化する」であって、プログラミングをすることが目的ではないですよね。

評価されるのは出来上がった「サービス」およびサービスが提供する価値であり、中身のコード自体が世間から評価されることは少ないですよね?

 

コードをきれいに書きたいとか、保守性に優れたプログラムを作りたいとか、早く描けるようになりたいとか。

プログラミングの上達は本当に必要ですか?

 

プログラミングが上達する価値とは?

と、意地悪な質問をしてみましたが、私の中での答えは、必要プログラミング上達する価値は大いにあります。

 

例えば、みずほ銀行のシステム障害

エンジニアの人材を切ってしまったことと、既存の構造が複雑すぎることが原因と言われていますが、それは過去のエンジニアの人達が原因です。

私は医療機器ソフト・システムを作ってますが、年に何回も不具合を出すなんてあり得ません。品質を確保することがエンジニアの責務ですから。

ソフトの不具合=ビジネスへの悪影響や売り上げ低下に直結します。

安定したサービスを生み出せる=プログラミングが上達する価値そのものです

 

また、社内のエンジニアチーム、さらには上司や役員といった人達から評価や信頼を勝ち取ることも繋がります。

ドナ
あなたの周りでチームの中でプログラミングができる人って頼りにされていません?

 

何より、ポジションが高くなると自分の裁量で仕事がしやすくなります

ドナ
最近転職活動をしていて感じるのですが、エンジニア業界はスキルの高さが給与の高さにダイレクトに結びつくなと。スキルマッチした企業を選考中なのですが、残業代なしで850万を提示いただいてます。自分でも驚いてます(笑)

 

なので、エンジニアであるならばとにかくスキルを磨くこと、それがエンジニアとしての価値に直結する、というのが私の持論です。

もちろん、賛否両論あると思います。スキルをいくら磨いても所詮は開発の一員でしかなくて、大きな仕事をしたり課題を解決できる人に比べて給与面で恵まれた待遇を得られないこともあります。

それでも、私は自分のスキルを磨くことをやめません。だってエンジニアなんですから。

 

ここまで読んでいただきありがとうございます。

記事が良いなとか面白いなと思っていただいた人、ぜひTwitterやQiitaとかで拡散してもらえると喜び回ります。

また反対意見もぜひぜひ。むしろ反対意見もあるべきです。より良い答えを探すならいろんな視点で議論すべきですからね。

コメントやTwitterでのご意見、お待ちしております。

-プログラミング