近年、高収入や働き方の自由度から職種としてエンジニアが挙げられます。
- プログラミングの勉強がつまらない
- どうすれば楽しい学習に切り替えられるのか
プログラミングの需要増加からリスキリングなどでスキル獲得に励む人も多いはずです。
しかし、プログラミング学習を始めたものの、つまらないと感じる人が多いです。
本記事は、プログラミングがつならなくなる原因を始め、学習への対処法も踏まえて解説します。
【前提】プログラミングはつまらないのか?
前提として「プログラミングはつまらないのか?」といった疑問に対して、個人的な見解から展開していきます。
結論は、「プログラミング自体はつまらない」です。
- プログラミングはただの文字の羅列
- プログラミングはエラーばかりの闘い
- プログラミングは思っている以上に地味
エンジニアへどのように憧れるかは人それそれですが、万が一映画のようなプログラマーを想像していたのなら全て作り物だと思い直したほうが良いでしょう。
プログラミングはただの文字の羅列
そもそもプログラミングは仮想上で機能や画面を実現する文字の羅列です。
実際にプログラムを記述したことがあれば理解してもらえると思います。
プログラミングはあくまで何かを表現する手段であり、とても楽しい作業だとは思えません。
もちろん、コードの内容を読み取り頭の中で何が表現されているか経験を積むと想定できますが、プログラミング初心者の段階で想像するのは無理です。
プログラミングはエラーばかりの闘い
次に、プログラミングはトライアンドエラーとの闘いが常です。
特に、自身が作りたいものと一致したソースコードを寸分違わず見つけ出すのは至難の業です。
むしろ、オリジナルであればあるほど無いに等しいです。
検索すればプログラムを見つけられるかもしれませんが、学習の段階から基礎内容すら検索していると、ひと段落したタイミングで記憶の定着などなく、成果物だけ残り得られるものは少ないです。
スキルを習得するためには、「学習の先に何を目的とするのか」や、「継続的な学習」が不可欠です。
プログラミングは思っている以上に地味
もはやそんな人がいるとは思いませんが、映画のようなプログラマーはほぼ存在しないと言って差し支えないでしょう。
美しいほどのハッキングや高速ブラインドタッチによるアプリ開発、何も見ずに実施するなど一般人には困難です。
地道に基礎学習で理解したプログラミング言語の扱い方やライブラリ・フレームワーク・その他エコシステムを駆使して、泥臭く画面と向き合い一つずつ課題解決します。
後述する内容を確認してどのように感じるかはわかりませんが、少なくとも現役エンジニアはプログラミングを扱う中でどこかに楽しさや喜びを持っています。
プログラミングがつまらないと感じる原因
プログラミング学習中でも、学習レベルによってつまらないと感じる原因が変化します。
以下、プログラミングがつまらないと感じる主な原因になります。
- プログラミング学習の目的が設定できてない
- プログラミング学習していても達成感がない
- 学習状況がどれほどの基準かわからない
- 成果物を作る上でエラーが発生しつまらない
- そもそもプログラミング言語の選定から間違えてる
それぞれの原因は、「キャリア」「学習環境」「学習の進捗度」などに起因します。
プログラミング学習の目的が設定できてない
闇雲にプログラミング学習に取り掛かっても、目的が設定できていない場合につまらないと感じます。
ビジネスキャリアの迷いが生じてることが多く、「何のために学習を始めたっけ?」と意味が分からなくなるケースがあります。
キャリアチェンジ・キャリアアップを考えていたにも関わらず、曖昧な目的はやはりつまらない学習につながります。
プログラミング学習していても達成感がない
プログラミングに限らず、何かを学習する際に達成感がないとつまらないです。
学習の進捗度に関わっており、一つの学習内容に対して期間を定めたり、動作したりエラー解消などを完了とするなど、段階的な目標達成を設ける必要があります。
特に、冗長的な学習の進捗スケジュールを続けてしまうと、いつまでもステップアップしないため注意が必要です。
学習状況がどれほどの基準かわからない
特に独学によるプログラミング学習に励むと、自身の学習状況がどれほどの基準かわからずつまらないと感じます。
学習環境の整備ができておらず、他者と比較ができるように準備するか、学習コミュニティを利用するとよいです。
学生時代の模試や全国テストのように、自身の学習状況を周りの基準と判断できる状態が望ましいです。
成果物を作る上でエラーが発生しつまらない
成果物を作る際に、エラーが頻発することでつまらないと感じることもあります。
おそらく、あなた自身がエラーを発生させることは他者でも起こりえる箇所だと考えられます。
「つまらない」と考えるのではなく、「乗り越えれば課題解決力が身につく」と前向きな姿勢で取り組みましょう。
そもそもプログラミング言語の選定から間違えてる
実は、プログラミング言語の選定段階から、初心者向きと上級者向きが若干あります。
特に、初心者が複雑な特有の機能を理解するのはコンパイル言語やインタープリタ言語などで難しさを感じてしまいます。
初めてプログラミング言語を学ぶ人であれば、学習の取り組みやすさで選ぶのも大切です。
つまらないプログラミングへの考え方を変換する
つまらないと感じたプログラミングに対して、一度考え方を変換するとプログラミングへの捉え方がガラッと変化します。
実際に、プログラミングをビジネス道具の一部としてとらえ続けてしまう学習者も少なくありません。
プログラミングを継続的に楽しむためには、時にプログラミングへの考え方を別角度で捉えることも重要です。
- エンジニアは稼げる職業だから
- PC一台でリモートワークが実現できるから
上記のような考えを一度捨て、改めてプログラミング本来の楽しさを理解しておきましょう。
筆者自身が感じるプログラミングの楽しさは以下になります。
- 自身のアイデアを実現できた時
- 自身が作成したアルゴリズムが動作した時
- 開発したアプリやサービスがリリースできた時
- 社会の役に立つアプリが開発できた時
上記の共通点は、プログラミングによるモノづくりの喜びです。
その中でも大別すると、上記のようなタイミングでそれぞれの喜びがあると考えます。
自身のアイデアを実現できた時
プログラミング初心者がはじめに取り組むのが基礎学習になります。
基礎学習を終えて、いざアプリを開発する際に知らない技術・分からないエラー対処に幾度となく直面します。
その中で、ToDoアプリや簡易アプリであってもやはり自身で考え抜いたアイデアを追加したアプリケーションが実現できた時、プログラミングの楽しさや出来上がった喜びを感じます。
たとえネット上に落ちているアプリ開発の記事を模倣する、あるいは似たアプリを開発するだけであっても、一つ追加機能を付けるだけで達成感は全く違います。
なぜなら、一つでもオリジナルを入れたかどうかで考え抜いた時間と自身の力で取り組めたかが大きく異なるためです。
自身が作成したアルゴリズムが動作した時
自身のアイデアを実現できた時とセットで楽しさを感じるのが、自身で考えたアルゴリズムを実現できた時になります。
スクレイピングプログラムやWebアプリ/サービス上のサーバーサイドにおける各機能など、同じ機能一つとっても開発者によってアルゴリズムは異なります。
以下に最適な機能を追加できたか、何を考慮して開発できているかなど、自身でコードにアルゴリズムを組み込めたかによって楽しさは倍増します。
また、アルゴリズムが考える場合、どうやって実現できるか黙々と考えるタイミングがありますが、「これなら動作するかもしれない!」と思いつき実現できた時の充実感は半端ないです。
開発したアプリやサービスがリリースできた時
開発したアプリやサービスがリリースできる瞬間というのは、自身のアイデアとアルゴリズム・コード・インフラ環境含め、これまで取り組んだ内容がまとまり形になる瞬間でもあります。
たとえ、開発したアプリやサービスが誰かに利用されていなくても、リリースまで実現できる一気通貫なスキルはとても価値あるエンジニアスキルになります。
開発手法によって異なりますが、基本的に企業による開発だと作業工程を切り分け分担業務になるため、一気通貫な作業を経験することは年数が必要になります。
当然、企業が開発するアプリ/サービスはセキュリティの観点やリスクなども考慮するため、様々な観点から権限を持った人物しか触れられない事実があります。
しかし、どれだけ簡易なアプリ開発であっても、リリースまでの本質的な開発作業を経験できているかどうかはスキルの価値が違います。
コーディングによって0から1といったモノづくりを経験できるのもプログラミングの楽しさです。
社会の役に立つアプリが開発できた時
基本的に仕事は他者に対する価値提供であるため、プログラミングもソフトウェアを通じて価値提供する手段の一つになります。
そのため、社会問題に限らず、業務効率化・自動化、クライアントの悩みを解決する案件ひとつひとつがプログラミングが役立っているタイミングになります。
案件一つとっても金額や業務内容が違えど、クライアントの悩み解決であることは明白で自身のスキルで解決へ導けるとプログラミングの楽しさが違った形で感じられます。
上述してきた自身が取り組むプログラミングへの楽しさや喜びが他者へ提供できるようになるのも、プログラミングへのモチベーションを高めてくれる良さだと考えます。
内発的動機付けと外発的動機付けによる学習態度
プログラミングを始める際のきっかけは、取り組み始めだけでなく今後の学習態度に大きな影響を与えます。
- 内発的動機付け
- 外発的動機付け
例えば自身からくる「〇〇な個人開発を実施したい」「メガベンチャー企業のエンジニアになりたい」といった内発的動機は、足りない情報やスキルを獲得しつまらないといった感覚になりづらいです。
なぜなら、明確なゴール設定に対してがむしゃらに取り組める状況を望んで作り出しているためです。
むしろ、内発的動機からくるゴール設定があれば、つまらないよりも一つずつ吸収している感覚で積み重ねる技術がゴールに近づく楽しさになります。
内発的動機付けと外発的動機付けの関係性
ロチェスター大学のエドワード・デシ教授は、1975年に「内発動機付け」を提唱しました。
また、「外発的報酬は内発的な動機付けを低下させる」ものとして発表しています。
実験内容は、大学生グループを2つに分け、片方のグループにパズルを解くと1ドル支払う約束し、もう片方は何も約束しませんでした。
結果として報酬を約束していないグループは、特に変化がなありませんでした。
一方で報酬をもらった学生のほとんどは、自由時間にパズルを解かず別の作業を始める結果になりました。
一方でプログラミング学習を外発的動機によって「周りが勧めたからやってる」「ぼんやりと取り組み始めた」状況だと明らかにつまらないと感じるでしょう。
「これ好きかも」といった内発的動機でなく、半強制的にやり始めただけの外発的動機だと長期的な行動の持続は厳しいです。
勘違いしてほしくないのは、たとえ外発的動機であってもプログラミング学習の中で楽しさや面白さを一部でも実感できているのなら、きっかけとして問題ありません。
つまり、外発的動機をきっかけに始めた際、プログラミング学習全てがつまらないと感じ続けてる人は間違いなく挫折します。
まずは一部でもいいので、「アプリ開発は楽しい」や「〇〇の技術習得は興味深かった」といった喜びを一つでも感じることでしょう。
知識や技術が点から線になるまで期間を要する
個人的な見解として、プログラミングの基礎学習で学ぶ内容はどうしても苦痛になりがちです。
- 変数/定数
- データ構造(リストやタプルなど)
- for文やif文
- 関数
- クラス(オブジェクト)
- ライブラリの理解
- フレームワークの理解
一般的な基礎内容をまとめましたが、上記の内容だけどれだけ学んでも知識の点になるだけでアプリ開発につながるとはピンときません。
特にプログラミング未経験や初心者の場合、知識と技術の点が線になるまで一定の期間を要することになります。
プログラミングの基礎内容が実用的にどう扱われているのか理解するためには、やはりつまらないと感じる前に1日でも早くアプリ開発にたどり着くことをおすすめします。
プログラミングがつまらない時の具体的な対処方法
結局のところ、自分自身の目的達成へ忠実に取り組めるかが全てです。
それでも、プログラミング学習をつまらない時の対処方法を把握しておくことは重要です。
なぜなら、努力が自分の匙加減でどうにもできなくなったときに、学習方法や学習環境の変化によってハードルを乗り越えられる可能性があるからです。
以下、主な対処方法をご紹介します。
- プログラミングスクールやメンターを検討する
- プログラミング学習の目的と期間を設ける
上記の対策は、至ってシンプルですが効果的です。
プログラミングスクールやメンターを検討する
独学によるプログラミング学習者にとって耳が痛い内容かもしれませんが、すでに独学では限界を感じているはずです。
おそらく大半の初学者が「初めはネット環境もあるからお金をかけず取り組もう」と気合いを入れたことだと思います。
しかし、上述したように「質問環境がない」「エラー時の対処が不明」といった内容から単独による解決ができません。
これは、決してあなた自身の解決能力がないわけでなく、経験者でなければ辿り着けない”勘所”がどうしても存在します。
可能性として、金額をかけられる状態であれば少額からでも検討しましょう。
プログラミング学習の目的と期間を設ける
重要性がいまいちわからない人もいるかもしれませんが、「プログラミング学習の目的と期間」を設定することはとても重要です。
- 目的設定:学習範囲を取り決められる
- 学習期間:モチベーション低下を防ぐ
例えば、Webアプリ開発とゲーム開発では出だしから選択するプログラミング言語も開発環境も学習内容も違います。
他にも、転職なのかフリーランス独立なのかで学習レベルの基準が変わります。
このように、目的設定によって範囲も変われば学習内容と求められるレベルも変わるわけです。
また、学習期間はゴールした時の自身の姿をイメージするのに重要です。
「学習期間の設定がわからない」といった人も、ひとまずあなたが特定の期間内に学びきれると思う日程で構いません。
その期間満了が訪れた際に、現在と理想のギャップが分かるので、学習内容の修正と理解度が明確になるためです。
つまらないプログラミングを助けるおすすめ学習サイト
プログラミング学習で最も重要なのが、「体系的な学習」になります。
プログラミング初学者が陥りがちなのは、ネット検索によるつまみ食いで点ごとに学習を進めてしまうケースです。
残念ながら、「わからないことがわからない」状態に近い初学者にとって知識の点と点を線に結ぶ作業は難しいです。
そのため、プログラミング学習は「体系的な学習」ができる情報を優先的に取り組みましょう。
- Progate
- ドットインストール
- 体系化されたプログラミングスクールのブログサイトや個人サイト
正直なところ、エンジニア向けのQiitaやZennといったブログサイトがありますが、初心者にとって読みづらいことがあります。
知識が体系化されたタイミングになるまで利用するのは初学者向けブログサイトか体系化されたブログサイトにアクセスしましょう。
本サイトでTypeScriptに関する学習サイトをまとめているので興味があれば「【無料】TypeScript入門・練習できるサイトをまとめて紹介!」を一読ください。
また、ネットベースではなく書籍ベースでじっくり取り組みたい人は「TypeScriptの学習におすすめできる本を目的別に紹介!」を一読ください。
それでもプログラミング学習がつまらない場合
初期のプログラミング学習は、どう足掻いてもプログラミング言語の基礎学習になります。
そのため、学習方法による味の変化が効果的です。
- 参考書(本)
- 動画による学習教材(Udemyなど)
大半のプログラミング初学者はお金をかけたくないことから、ネット検索による記事情報がほとんどだと思います。
現在は、大学が体系化し無料公開するプログラミング言語の基礎学習サイトやYouTubeによる学習方法もあります。
また、著者や配信者によって盛り込まれているサンプル例も異なるため、しっくりくる内容であればつまらないと感じるケースも軽減します。
ぜひ、学習方法の変化もつけながらプログラミングの勉強をモチベーション高く取り組みましょう。
今なら、無料でZoom系ミーティングアプリ開発資料をメルマガで配布しているので、興味がある人は「TypeScript 10steps Program」を一読ください。