プログラミングに挑戦したいけど、独学はやっぱり難しいのかな…。成功できる自信がない…。
ITキャリアに興味はあるけど、独学の難しさに対して不安を感じている方も多いですよね。成功するための正しい道筋が見えないと、なかなか踏み出せないものです。
この記事では、私自身が経験したプログラミング独学の成功・失敗の経験を元に、成功に必要な条件を解説します。さらにその条件を満たす、実践的な学習プランもお伝えしますよ!
この記事を読むことで、具体的なステップが明確になり、自信を持ってプログラミング学習を始められるようになりますよ!
- IT 歴 20 年のエンジニア
- 大学、研究所、自社開発企業でプログラミング、サーバ、ネットワーク、クラウド、社内情シスなどの多種の業務を経験
- 安定志向な性格で安心や安全が大好き
- 未経験者向けに 安定志向の IT キャリア入門 という情報発信中
- エンジニアに興味がある人に安心して IT キャリアを歩んでほしい!
プログラミング独学成功の条件 = 具体的で小さい・役に立つ目標
プログラミング独学が成功するかどうかは、次の 2 つを満たす目標をいかに上手に設定できるかにかかっています。
- 具体的で小さな目標
- 役に立つ目標
小さい中間目標によって行動のハードルを下げる
あなたがプログラミングを学ぼうとする場合、何かしらの目的を持っているでしょう。手に職を持つためだったり、キャリアチェンジを有利に進めるためかもしれません。あなたがプログラミングを学ぶキッカケとなったのであれば、その目標自体はとても素晴らしいものです。
しかし、大きく抽象的な目標は、日々の学びのモチベーションを維持するのには不向きです。その理由は、進捗を自覚できず成功体験が得にくい ことでしょう。何ヶ月後、何年後にならないと結果が判断できない目標だけで学び続けられる人は非常に稀です。
大切なのは、具体的で小さな中間目標を作ることです。次のような、数分から半日程度で完結できる目標を立て、それを積み重ねて本来の目標に近づいていくようにすると、自分の努力や成長を自覚しやすくなり、モチベーションも高まります。次のような、1 つ 1 つは「たったそれだけ?」と思えるぐらいに簡単なものを設定しましょう。
- どのプログラミング言語を学ぶか、ウェブや SNS で検索して参考になるサイトを 1 つピックアップ
- 面白そうなプログラミングの書籍を買う
- オンライン学習プラットフォームにアカウントを作る
- 学習コースのレッスンを 1 つ取り組む
- プログラムを 1 行書く
- プログラミング関連書籍を 1 ページ読む
小さい目標はあなたの学習への心理的ハードルを下げ、スキマ時間に取り組む余裕も生みます。1 時間を勉強に充てるのは結構な気力が必要ですが、5 分程度であればちょっとした待ち時間に済ませることも可能ですよね。
また、当初は結果ではなく行動そのものを目標にするのもコツです。『〇〇ができるようになる』という目標を立てるのも良いのですが、それだけだと今日も目標を達成できなかった…、という日々が続き、いずれ辛くてやめてしまう可能性が高まってしまいます。
もちろん最終的には結果につなげるためではありますが、継続のためには「今日は〇〇をやった!」と行動目標の達成感を得ることはとっても大切です。
役に立つ目標によって感謝を意欲につなげる
もう一つの重要なポイントが、目標が誰かの役に立つものである、ということです。
「誰か」はあなた自身でも周りの人でも OK です。また、「役立つ」といっても立派なものである必要はありません。ハードルを上げてしまうと目標が「大きく」なってしまって先ほどの条件と矛盾してしまいますからね。世の中に既にあるサービスでは難しい、ニッチでちょっとしたニーズに応えるもので良いのです。
りもじい自身の実践例を挙げると、プログラミング学習期は次のようなものを作っていたりしました。
- プレゼンソフトから出力した画像ファイルをウェブブラウザで見やすい形式に自動加工するツール
- ソースコード中のコメントからドキュメントを生成する構文分析ツール
- 無線 LAN 機能付きの SDHC カード (FlashAir) から写真の転送とアーカイブするツール
- ゲームのキャラクターのパラメータ育成値チェッカー
思い出しながら書いていますが懐かしいですね。今はもう使っていないものばかりです。しかし当時の自分にとっては確かに役立っていました。また、人に使ってもらえるのも嬉しかったですね。頑張って勉強したというより、楽しんで遊んでいるうちにプログラミングを身に着けていた感覚でした。
誰かの役に立つ目標は、モチベーションの点でメリットがあるだけではありません。この経験は将来あなたが他者に貢献し、IT エンジニアとして人から評価される体験をちょっと先取りしていることにもなります。
役に立つ目標の設定によって、あなたの新しい技能の学びは、自分や周りの人へ役立つものを提供できるという体験へつながります。この成功体験の積み重ねはプログラミング独学の成功率を高め、IT キャリアを有利にスタートするための足がかりとなるでしょう。
プログラミング独学に対してこのような考えを持つに至ったのは、りもじい自身がプログラミング習得に成功した経験、失敗した経験がそれぞれあるためです。ここからはりもじいの実体験を詳しく解説します!
りもじいのプログラミング学習の成功事例と失敗事例
失敗に終わった Java や Scala の習得
私がプログラミング学習に失敗したものとして Java と Scala の習得があります。これらの言語は業務上習得が望ましいということから学習を始めたのですが、身にならないまま学習活動も立ち消えてしまいました。
失敗の理由を振り返って分析してみると、① Java/Scala のソースコードを読み書きできるようになるという大きく漠然とした目標設定だったこと、②自身がそれを習得することでどのようなメリットが生じるか明確ではなかった、という 2 点が挙げられます。
時系列で言うと、この後にお話する成功例の方が実は若い頃の経験で、この失敗体験は既にベテランになりつつある時のものでした。自分には既に一定のプログラミング経験があるし大丈夫、と甘く見ていたんですね。新しいことを学ぶ際の目標設定の重要性を改めて思い知った経験になりました。
習得に成功した Perl、 Ruby、Python
りもじいが習得に成功したプログラミング言語には Perl、Ruby、Python といったものがあります。これらは振り返ってみると、目標が具体的で小さく、また誰かの役に立つものになっていました。ここではこれらのプログラミング言語の独学をりもじいがどのように進めたのかをご紹介します。
Perl での初のプログラミング独学
プログラミング言語として始めて触れたのが Perl になります。Perl はファイル処理やテキストの解析が得意な言語で、少ないコードで実用的なツールを作ることに優れています。学び始めたキッカケは、大学の研究室の先輩が学部の教員や学生に向けて作っていたサーバの利用申請システムをちょっと触ってみない?とお誘いを受けたことでした。このシステムが Perl で書かれており、そういったものに興味を持っていた当時のりもじいは書籍やウェブの情報を参考に手探りで Perl を学び始めることになります。
しかし、プログラミングそのものについて初心者であったりもじいが、いきなり既存のシステムを解読できたわけでありません。数行程度のコードを書いて動かしてみて、ちょっと面倒だったことが少し楽できる、という具体的で小さい、自分に役に立つ体験を繰り返していきます。
慣れてくると、プレゼンソフトから出力した画像ファイルをウェブブラウザで見やすい形式に自動加工する、といったちょっと凝ったこともできるようになります。これは研究室の仲間たちにも使ってもらえるようになりました。周囲の人の役に立つモノづくり体験 は学習意欲を飛躍的に高めることになります。そうこうしているうちにサーバの利用申請システムの解読と改修も行えるようになり、Wi-Fi 利用申請といった新機能を追加できるまでになりました。
Ruby を教材としたオブジェクト指向の独学
Ruby を学んだきっかけは、オブジェクト指向でのプログラミングが面白そうという興味を覚えたからでした。
オブジェクト指向プログラミングとは?
オブジェクト指向プログラミングって何? という方向けに、このプログラミング手法のメリットを簡単に説明しますね。ここでは食器と衣類という異なる「モノ」に対しての「洗う」という動作を例に挙げてみましょう。
「洗う」という動作でも、食器を洗うのと衣類を洗うのでは手順が異なりますよね。プログラムは本来、この違いを細かく指示しないと期待した通りには動いてくれません。でも人であれば「洗っておいて」と伝えるだけで、対象物に応じた動作をしてくれますよね。Rubyでは、この「対象物」を「オブジェクト」と呼び、それぞれのオブジェクトに対して適切な動作(洗う手順)を組み込むことができます。
これにより、食器のオブジェクトと衣類のオブジェクトを用意しておけば、「洗う」という一つの指示で、それぞれに合った動作が自動で行われるわけです。オブジェクト指向プログラミング言語では、対象物とそれに対しての動作を「オブジェクト」という単位でまとめて扱いやすくなっているため、プログラムの作成や変更がとてもやりやすくなっています。
なお、Ruby は全てのデータ型がオブジェクトとして表現されており、純粋なオブジェクト指向プログラム言語と言われています。Perl の後継言語として開発されていたこともあり、その時 Perl について一定の習得を行っていたりもじいがオブジェクト指向プログラミングについて学ぶには最適でした。
この時も概念の理解はそこそこに、身近な課題の解決に Ruby を使おうと考えました。ちょうどその頃、科学技術計算向けのプログラミング言語 Fortran で書かれたプログラムのドキュメント生成の手間が問題と考えていました。これを解決するために、Ruby を使ってオブジェクト指向プログラミングで Fortran プログラム解析とドキュメント生成を自動化しようと試みました。
目標を具体的で小さく、役立つものに設定できていたおかげで、この時は問題の解決とオブジェクト指向プログラミングの独学の両方に成功しました。もともと Ruby はソースコードを解析してドキュメントを自動生成する仕組みを持っていたのですが、りもじいはこの仕組みに Fortran 用の解析機能を追加するというアプローチを採りました。その結果、Fortran プログラムのドキュメントの自動生成が可能になっただけでなく、オブジェクト指向プログラミングの活用方法を理解し、その便利さを実感する機会を得ることもできたのでした。
既存ツール連携による効率的なプログラミングを学んだ Python
Python の独学を始めたのは、当時扱っていたシステムとの親和性が高く、また人気がありユーザが多いことに興味を持ったからでした。
りもじいはこの Python のプログラミング独学を業務フローの効率化に活かすことにしました。当時、運用報告フローは Excel と紙を用いたものであった上、長く携わった経験がないと円滑に進められない問題があったためです。
忙しさもありゼロから全てを作れる状況ではなかったため、データ分析ツールやプログラムの共同管理プラットフォーム、ワークフロー管理サービスなどの既存ツールを組み合わせ、運用報告の仕組みのウェブ化を進めました。日頃の業務の忙しさもありまとまった時間の確保が難しかったため、ログデータの収集、報告テンプレート生成、報告内容入力、報告書生成、申請から承認までのフローの実現といった、ウェブ化に必要な様々な機能についてのサブ目標をかなり細かく設定しました。
チームに役立つ目標を設定できたことと細やかな目標管理のお陰で、Python 独学も成功に繋がりました。特に既存ツールとの連携をせざるを得ない状況は、プログラミング作業を最小化すべきという良いプレッシャーとなり、Python そのものの学習に加えて、実践性のある効率的なプログラミングの学習にも繋がりました。新しい運用報告システムのリリースにも成功し、社内で広く活用されることになります。
りもじい自身は、プログラミングの独学と「こんなことができたらいいな!」がちょうど組み合わさったタイミングでは独学に成功する経験を得ることができました。ここからは未経験者に向けたプログラミング独学への実践的おすすめプランをお伝えしますね!
未経験者のための実践的なプログラミング独学成功プラン
ここからは、未経験者が独学に成功するためのプログラミング学習の具体的な方法をご紹介します。
プログラミング言語の選択は興味・学習環境の豊富さ・ユーザーの多さで選ぶ
プログラミング言語を選ぶ際には、あなたが何に興味を持っているかが最も大切です。興味に近いものの方が自分にとって役に立つ目標を見つけやすく、それだけ独学の成功確率が高まります。例えば、ウェブサイトの開発に興味があるなら JavaScript、データ分析や機械学習に興味を持つなら Python を選ぶ、というのも 1 つの選択肢です。
次に、学習環境の豊富さやユーザーの多さも重要なポイントになります。人気のある言語は、学習リソースが豊富で、わからないことがあったときにウェブ上で解決策を見つけやすくなります。また、ユーザーが多い言語はコミュニティが活発で、初心者でも質問しやすい環境が整っています。
興味と実用性のバランスを考えつつ、学びやすい環境が整っている言語を選ぶと、独学の成功に近づくことができます。
りもじいが大学で Fortran を学び始めた頃、既にかなり古い部類の言語だったため、ハマった時の解決策を調べるのはけっこう大変でした。よほど明確な目的がない限りは、マイナーな言語を選ぶのではなく、ぜひメジャーなものを選んで下さいね。
基礎はオンライン学習プラットフォームで学ぶ
プログラミングの独学を始める際は、まずはオンライン学習プラットフォームを活用してみるのがオススメです。
オンライン学習プラットフォームには、有名なところだと、Progate、 Paiza、 ドットインストール などがありますね。どれも IT 未経験者や初心者を想定としており、基礎の基礎から学ぶことが可能です。スライド形式になっていたり、解説動画が3分と短いものだったり、ゲーム感覚で学習できるなど、独学に向いた工夫がなされています。
この 3 つはどれも無料で始める事が可能な上、すべてのコンテンツを学ぶための有料プランも月額 1,000 円程度で済みます。いつでも解約も可能なので、気軽に始められるのではないでしょうか。
すぐにプログラムを動かせる素晴らしい環境を活かそう
少し昔話になってしまいますが、以前はプログラミングを始める前に、ハードウェアの準備や OS のインストール、ネットワークの設定など、事前に多くの準備が必要でした。しかし、今ではオンライン学習プラットフォームやクラウド環境の普及により、すぐにプログラムを動かせる素晴らしい環境が整っています。アタリマエに思えるかもしれませんが、いきなりプログラミングの学習から始められるというのは IT 人材養成の環境の飛躍的な改善と言えるでしょう。
初めてのプログラムを実行するまでのハードルは 20 年、いや 10 年前と比べても格段に低くなりましたね。ブラウザとネットさえあればプログラミングが学べるわけですしね。
動くプログラムを作った経験が得られれば OK
プログラミングはどこまで学習すれば身についたことになるのか、これに明快な答えはありません。実務でバリバリとプログラミングしている人であっても、プログラミングのあらゆる技法や、言語仕様の全てを把握しているわけではありませんしね。多くの人が賛同してくれそうなのは、実際に作ったプログラムがなにかの問題解決に寄与できた時、かもしれません。ただ、オンライン学習プラットフォーム上で勉強を続けている限り、残念ながら 実世界の問題を解決する機会は得られません。
りもじいがオンライン学習プラットフォームで得られる最大の経験は、動くプログラムを作った経験 だと考えています。実世界の問題解決であったり、プログラマーとしての実績を積む、というその先の経験は求めても難しい環境であるためです。
したがって、オンライン学習プラットフォーム上での学習は、知ることが面白いと感じる間はどんどん続けることをオススメする一方で、飽きてきたりしんどいと感じたらそこでスパッとやめてしまって OK です。
用意されたカリキュラムを全部終わらせねば!と思われるかもしれませんが、それはゲームをクリアする、ぐらいの意味合いのものです。プログラマーの実績として認められることは普通はないので、最後まで無理して頑張ろうとなくても大丈夫です。プログラムを動かすことを知り、プログラムでできそうなことに想像が働くようになった、というだけでオンライン学習プラットフォーム上で得るべきものは十分に得られていますからね!
誰かの役に立てる目標を見つける
プログラミングを作り、動かすという経験が一定程度得られたら、飽きたり忘れたりする前にその応用先を見つけてみましょう。
自分や家族や友人にとってプログラミングで解決できる課題はある?
プログラミングで実世界の問題を解決する、ということは独学を成功させるために極めて重要な体験になります。しかし、いきなり世の中の問題を解決しようとするのはハードルが高すぎます。まずは自分の生活をちょっとでも改善する何かを探してみましょう。あなたは既にオンライン学習プラットフォーム上で課題をこなす中で、プログラミングでどのようなことができるのかを知り、実際にプログラムを書いて動かす経験を得ています。仕事などに限らず、食事や運動、趣味や娯楽など、対象は何でも OK です。
少しハードルは上がるかもしれませんが、家族や友人の課題解決ができそうならぜひチャレンジしてみて下さい。もし成功すれば、そこで感謝されることで、もはや IT エンジニアとしての実務で得られるのと同じ充足感を得られるでしょう。仮に失敗したとしても、あなたが「できそう」と思った事と実際に「できる」事との間にどの程度の隔たりがあるかを知ることは実務に近い学びになるでしょう。
ここで1つ気をつけてほしいのは、プログラミング以外の手段での解決策をあまり熟慮しない ことです。今は様々な便利なサービスがあるため、ちょっと視野を広げるとプログラミングせずとも解決できてしまったりするんですね。独学している時期はそういった熟慮を敢えてせず、とりあえずプログラミングしてみる、というのが良いですね。
一方で、IT エンジニアとして実務を始められるようになったのなら、その時はプログラミングは最後の手段、ぐらいにしっかり他の解決策を検討してみて下さいね。
IT エンジニアとして企業に就職するのも 1 つの近道
解決できる課題が見当たらない…、と思っても慌てる必要はありません。そんな時は IT エンジニアとして企業への就職を考えてしまいましょう。それってもう「プログラミング独学」ではないんじゃない?というツッコミを受けそうですね。確かに独学の範疇からは出てしまいますが、それだけ誰かの役に立つ目標なしに独学を成功するのは困難だとりもじいは考えます。
オンライン学習プラットフォームで学び始めた方の中には、学習が全く面白くなかった、という方もいらっしゃるでしょう。そういう方が IT エンジニアになるのは厳しいかもしれません。しかし、もしあなたが「面白い!」と感じたの瞬間があるのなら、あなたには IT エンジニアとして活躍できる素養が十分あります。
IT 人材の不足は続いており、未経験であっても意欲と行動力があれば IT エンジニアとして採用してくれる企業は少なくありません。また、どのような企業であれ、中には解決すべき課題が山積しています。あなたが情熱を傾けられる課題に出会い、それをプログラミングで解決できるのなら、あなたは必ずプログラミングの学習に成功することができます。
あなたが IT キャリアを歩むことを前提にプログラミングの独学を考えているのなら、一人で学ぶことにこだわらずに企業で仲間と一緒に課題解決するアプローチも検討してみて下さいね。チームで働くことは、プログラミング能力を高めるだけではなく、プロジェクト管理スキルやコミュニケーション能力、業界知識なども得る機会になります。それらはあなたのプログラミングの価値をさらに高めることにつながっていきます。
なお、就職活動で企業へプログラミング経験をアピールする際は、いくつかのコツがあります。次の記事では面接成功の実践方法を詳しく解説しているので、気になる方はぜひチェックしてみてくださいね!
目標は日々細かく分解して小さく小さく
プログラミングの学習では、目標に向かって進む途中で予期せぬ問題に直面することがよくあります。例えば、プログラムを書いている最中に、予想外のエラーや実行不能な状態に陥ることがあります。こうした場合、当初の目標のまま進めようとすると、挫折してしまう可能性が高くなります。ここで重要なのは、目標をその場の状況に応じて手前に引き寄せ、小さく設定し直すことです。
自らの実力は実際に取り組んでみないと分からないものです。あなたが初めに設定した目標の手前で問題にハマってしまうとしたら、あなたが今取り組むべきは、元々の目標ではなく、その手前で生じている問題を解決することです。例えば、とある機能をプログラムで作ろうとしていて、その実行でエラーが生じてしまう、となったとします。あなたがそのエラーの解消方法をパッとは思いつかないなら、目標を1つ手前の「プログラムの実行を成功させる」に切り替えて、その問題解決に集中しましょう。
このように目標を柔軟に見直すことができれば、つまずきを少しずつ解消し、前進する感覚を得ることができます。取り組んでいる学習の内容自体は同じであっても、「(元々の)目標にいつたどり着けるか分からない」よりも「(小さくした新しい)目標を日々クリアしている」状況の方がはるかに独学成功への近道になるでしょう。
自ら設定した目標というのは、想像する以上に自分に対して心理的な強制力を及ぼしてしまいます。成長意欲から高い目標設定をすること自体は素晴らしいことなのですが、その強制力がマイナスの結果を招くことも少なくありません。心理的に重荷を感じるようなら、ぜひ目標をより簡単ですぐできそうなものに切り替えてみて下さいね。その積み重ねがいずれ本来の目標達成にも繋がっていきます。
成功体験を積み重ねて未知のステージを楽しもう!
今回の記事では、プログラミング独学がなぜ難しいと言われるのか、りもじい自身の体験談も踏まえて、その理由と解決方法をお伝えしました。
独学はその目標設定が自分の自由になることが最大のメリットです。目標設定を適切に行えば成功体験を着実に積み上げることができ、あなたは必ず次のステップに進むことができます。
あなたがプログラミング独学は難しいのではないか?と疑問を持っていたのだとしたら、それは目標の立て方に不安を持っていたのかもしれません。今回お伝えした、① 具体的で小さい、② 役に立つ、目標を設定することを心がけ、安心してプログラミングの学習を始めてみて下さい。
プログラミング独学に成功するということは、単にプログラミング能力を得るだけに留まりません。あなたがそれまでできなかった未知のことに挑戦し、それに成功したという体験は、さらに未知の領域へ踏み込む際の意欲を高めてくれるでしょう。あなたがプログラミング独学を楽しみ、あなた自身の成長を実感してくれることを期待しています!
この記事で、あなたの「プログラミング独学って難しいんじゃない?」という不安がポジティブな意欲につながったのなら幸いです! 他にも学習継続への不安や、 IT キャリア全般について不安を感じる場合はこれらの記事も参考にしてみて下さいね。あなたの不安を解消し、安心して IT キャリアへの歩みを進めたくなる内容になっています!
コメント