「これをすべて覚えれば、プログラマとして仕事できますか?」
🔷背景
はじめまして、Hibikiです。
この記事をご覧頂いているということは、あなたは今プログラミングを勉強中かこれから勉強しようと考えているところでしょう。
そして、勉強法に関して漠然とした不安を抱いているのではないでしょうか?
「このままで本当にプログラミングができるようになるだろうか…」
その気持ち、よく分かります。
もう30年近く前のことになりますが、私はプログラミングスクールに通っていた時期があります。
私が学習していたのはC言語です。
当時はJavaもまだメジャーではなく、Pythonなんて聞いたことありませんでした。
冒頭のセリフは、何回かスクールに通った後、私が講師に質問したものです。
安価なスクールを選んだからというのもあるのですが、そのスクールは動画で説明を聞いて、
練習問題を解くという当時では典型的なプログラミング学習のスタイルを採っていました。
動画で解説を聞くだけなので退屈だなと思いながらも、出された課題をこなしていましたが、これで仕事が出来るようになるという実感が持てずにいました。
結局、講師の方は私の質問にハッキリと答えてくれなかったような気がします。
(若干記憶が曖昧ですが)
しかし、ITエンジニアとして約25年働いてきた今なら自分で答えられます。
「文法などの説明を聞いて練習問題を解いたくらいでは、仕事で使える技術は身に付かない」
では、仕事で使えるプログラミング技術をマスターするにはどうしたら良いでしょうか?
私は、今まで仕事の中で13個のプログラミング言語でのプログラムを書いた経験がありますが、当然事前にプログラミングスクールに通って...なんてノンビリした時間はありません。
今思うと少し特殊だったのですが、「次のプロジェクト、〇〇という技術を使うから」と言われ、そのための学習リソースも時間も与えられることなく、次のプロジェクトがスタートする、という環境で仕事をしていました。
次のプロジェクトが始まるまでになんとか最低限の知識を身に着けて、仕事できるようにしておかないといけません。
そのような環境だったので、自然と最短で技術を学ぶ方法を身に付けてきました。
私の経験を基に、最短で技術を学ぶコツをご紹介します。
本記事をオススメする人
✅「仕事で使える」プログラミングを学びたいと強く願っている人
✅プログラミング学習に一度挫折してしまった人
✅文法は覚えたけど、まだプログラムを書けないでいる人
本記事をオススメしない人
☑趣味でプログラミングを学習している人
☑すでにプログラミングできる人
☑学ぶ意欲がない人
🔷最短で技術を学ぶコツ
1️⃣実践に近い形で学ぶ
ここで言う「実践に近い形」とは、要件を実現する方法と技術を合わせて学ぶということです。
仕事で使うことを前提とする場合、システム開発には必ず要件があります。
要件とは例えば次のようなものです。
- 消費税込の金額を出力してほしい
- 当局へ提出するレポートのフォーマットでデータを出力してほしい
- 倉庫の在庫状況が一目でわかるように出力してほしい
私たちITエンジニアは、お客様のこういった要望を実現するためにプログラミングを行います。
何か新しい技術を学ぶ際にも、このような要件の実現方法とセットで学習することにより、無駄なく必要最小限の技術を学ぶことができます。
私が新しいプログラミング言語を学ぶ際には、文法は後回しです。
最初に確認するのは、Hello, Worldの書き方とコメントの書き方くらいです。
大体どのプログラミング言語もHello, Worldのサンプルがあるので、最小限のプログラムの書き方はHello, Worldを見れば分かります。
あとは上記の通り「何を実現したいのか(=要件)」に必要な技術を1つずつ検証しながら学んでいきます。
2️⃣環境で悩む時間を最小限に
新しい技術を学ぶ際の一番の難関が環境でしょう。
環境構築でエラーが発生し、本当に学びたい技術に辿り着けないことはよくあります。
しかし、私がITの仕事を始めた頃と比べて今は仮想化技術が格段に進歩してきているので、環境問題の発生を避けることが出来るようになってきました。
初心者の方には仮想化の概念は少し難しいかもしれません。
例えて言うと「Windowsの中でMacを動かすことができる」技術のようなものです。
仮想化技術があるとなぜ環境問題がクリアされるのかというと、仮想環境はコピーすることが出来るためです。
例えばあなたがPythonを勉強したいとしましょう。
- Pythonをインストール、
- 必要なライブラリをインストール、
- 他にも必要なソフトウェアをインストール
と、インストールおよび設定している途中でエラーになると、初心者には解決が難しいケースがほとんどです。
しかし、最初から必要なライブラリやソフトウェアがインストールされた仮想環境があれば、自分のPCにコピーするだけです。環境構築中のエラーに悩まされることがありません。
このように仮想環境を積極的に利用することで、環境に悩む時間を最小限にすることが出来ます。
3️⃣全体から詳細に
プログラミングを学ぶ際には顕著ですが、どうしても細かいところから学習をスタートしてしまいます。
例えばプログラミング入門書では次のようなテーマが一般的でしょう。
- 変数
- 条件分岐
- ループ処理
これらはプログラミングの大事な要素ではありますが、この粒度からスタートしていては、最終的に作りたいものまでの道のりがとても長くなってしまいます。
私たちは義務教育で「1+1=2」からスタートして、高等教育まで積み上げ方式で学んできたので、細かい基礎的なところから学習することに慣れていますが、仕事で必要な技術はそのスピード感では間に合いません。
スピードを上げるには、多少乱暴に感じたとしても全体の把握からスタートすることが大事です。
例えばプログラムであれば、何をトリガー(きっかけ)として、どこからスタートして、どういう順番で処理が進んでいくのか。
条件分岐やループ処理などの文法は、全体を把握した後、詳細を確認する段階で確認すれば良いのです。
このように全体→詳細の順で確認していくと、
コンテキストの中でどのようにプログラムを書けば良いのか、またはどのような設定をすれば良いのか
を学ぶことが出来ます。
「コンテキストの中で」という表現は分かりにくいでしょうか。
英語学習において「get」を学ぶ例で補足説明しましょう。
getはご存じの通り、「手に入れる」という意味を持ちますが、同じ意味を持つ「obtain」という単語もあります。obtainはgetに比べフォーマルな表現なので、ビジネス文書などで使用されます。
get = 手に入れる
obtain = 手に入れる
と覚えると、どう使い分ければ良いか分かりません。
しかし、getやobtainを使った例文と共に覚えることで、どのようなケースでgetを使い、どのようなケースでobtainを使えば良いか、頭の中でパターン化されてきます。
プログラミングも同じです。
ある処理を実現する方法は通常、複数あります。
どういうケースでどのような書き方をするのかというパターンと共に覚えないと実践で役に立ちません。
だからこそ、細かい文法は後回しにしてでも、先に全体を把握することで「ケース(=コンテキスト)」を理解することが大事なのです。
🔷実際にどう学ぶか
- 要件と共に技術を学ぶ
- 仮想環境を積極的に利用する
- 全体把握から始める
「これらのコツは分かった。じゃ、具体的にどう学べばいいのか?」
とお考えではないでしょうか。
初心者の方がこれらをカバーする学習環境を自分で用意するのは、プログラミングを学ぶ以上に難しいはずです。
周りに詳しい方がいれば、相談してみるのが良いです。
そうでない方には、私がこれから学習リソースを用意していきます。
万人向けの方法では無いことは理解しています。
簡単に学べると主張するつもりもありません。
文法から1つ1つ丁寧に覚えていく学習法が合っている方は、すでに世の中にたくさんある学習リソースを活用していきましょう。
私のように短期間で技術を習得しないといけない方は、私が用意する学習リソースを試してみてください。