こんにちは。
デカチワです。
この記事は、プログラミングについて、
- プログラミングを始めたい。
- けど、何から初めて良いか分からないし、
- どの言語を勉強すれば良いか分からない。
こういった悩みに答えていきます。
この記事を読めば、プログラミングの学習手順が理解できるだけでなく、個人の方向性にあったプログラミング言語が分かります。
私自身、学生時代に独学でプログラミングを学習し、新卒でシステムエンジニアとして就職しました。システムエンジニアとして4年間、プログラミングやシステム設計の業務を経験して、現在はシステム監査人として働いています。
その経験を元に、初心者向けにプログラミングの学習手順と個人の方向性にあったプログラミング言語を解説していきます。
目次
【背景を知る】プログラミングの必要性とは
まず、IT業界全体のお話しです。
中長期的に見ると、システムエンジニア、プログラマー、データサイエンティストの需要は今後さらに高まると言って間違いないでしょう。
ビジネスとITの境目がなくなり、より一体化していくためです。
むしろ、ITがなければ成立しないビジネスしか生き残っていけません。
カーシェアリング、クラウドソーシングを初めとするソーシャルエコノミー、AmazonGoなどの無人コンビニ、成長しているビジネスは、ITを基盤としたビジネスです。
例えば、カーシェアリングだと、人は目的地に移動できれば良く、車を保有することは目的ではありません。(もちろん、車好きは除きます。)
クラウドソーシングにおいては、企業の目的は、IT専門の従業員を雇うことではなく、ビジネスをIT化することです。反対にIT化をするエンジニアやプログラマーも企業に雇われることが目的ではなく、自分の技術を提供して対価がもらえれば良いわけです。
無人コンビニはもっと単純で、人はコンビニでレジの行列に並ぶことが目的ではなく、商品を持ち帰って消費できれば良いわけです。
このようにビジネスとITが一体化することで、より消費者ニーズの本質に迫っていくことができます。
その利便性に消費者が気づくと、それ未満のサービスを利用しなくなるため、企業はさらにIT化を推進していくでしょう。
そして、それらビジネスの裏には、コンサルタントをはじめプログラマー、システムエンジニア、データサイエンティストがいるわけです。
その上で、プログラミング学習は、ITの基礎という位置づけとなっています。
ITに関わる大半の人は、まずプログラミングを学び、そこからコンサルタント、データサイエンティストなどの派生した分野に進んだり、システムエンジニアやプログラマーとして経験を積んでいきます。
その経験で培った技術を活かし、フリーランスとして個人で稼ぐ人も増えており、働き方も多様化しています。
また、着目すべきは教育の変化です。
イギリスを初めとした海外では、アルゴリズムやプログラミングの科目が学校の授業へすでに取り入れられています。
日本でも、2020年から小学校でのプログラミング教育が必修化されます。
このことから、日本国内だけでも、長期的にみて、ITリテラシーに世代間ギャップが生まれてくると判断できます。
そして、その変化についていけない人は取り残されていきます。
このことから、プログラミング学習を始めるということは、人間の生存戦略において、必然的な選択なのだと私は思います。
【目的別】プログラミング言語の選定方法
プログラミング学習の最初の関門は、個人的に、プログラミング言語の選択だと思っています。
プログラミング言語と一口にいっても、今では多くの言語が登場し、乱立しています。
なので、どの言語を選択すべきか迷ってしまうのは、多くの選択肢を提示されると選べなくなってしまう人間の特性上、至極当然のことなのです。
一方で、最初に選ぶプログラミング言語は、その人のキャリアに大きな影響を与えます。
ですから、初期段階で個人の方向性(キャリア)にあったプログラミング言語を選ぶことが重要だと言えるのではないでしょうか。
では、個人の方向性は何で判断すべきなのでしょうか。
その判断基準とは、個人の価値観です。価値観は言い換えると、最上位の目的を意味します。ひたすら何のためにプログラミングを学習するのかを問うことで導き出されます。
そして、その価値観に沿ったキャリアにおいて、シェアの大きい(需要の高い)プログラミング言語を選択することが、無駄のないプログラミング学習と言えるのではないでしょうか。
下記に、プログラミング言語の選定方法を用意しました。
手順に従い、各質問に順番に答えていくと、あなたに合うプログラミング言語にたどり着きます。※ただし、プログラミング言語をすべて網羅しているわけではありません。あくまで特定のキャリアにおいて、一般的によく利用されている言語を抽出しています。
それでは、進んでいきましょう。
下記に沿って、自分に合ったプログラミング言語を選択してみてください。
あなたの価値観に近いのは?
以下に、ITエンジニア(システムエンジニア、プログラマー、データサイエンティスト)としての価値観を列挙しました。
複数に当てはまる人もあるかと思いますが、自分の考えに最も近い価値観を選択してください。
- 安定した環境と収入が欲しい
- 独立して個人で稼ぎたい
- 社会に大きな影響を与える仕事がしたい
- 最も需要のある職種で働きたい
いかがでしょうか。
あなたの価値観は、どの項目に最も近いですか?
選択できたら、次に進みます。
あなたの現在の状況は?
次に、あなたの現状がどれに当てはまるかを選択してみましょう。
- IT未経験 × 現職有り
- IT未経験 × 学生
- IT未経験 × 現職無し
- IT経験有り × 現職有り
- IT経験有り × 学生
- IT経験有り × 現職無し
IT経験有りの該当期間は、2年以上が目安です。
2年未満は、IT未経験を選択してください。
選択すべきキャリアは?
ここまで、あなたの「個人の価値観」と「現在の状況」を選択してきました。
次に、「個人の価値観」と「現在の状況」を加味して、あなたに合ったキャリアを提示していきます。
ただし、これから提示するキャリアは、あくまで現時点において、あなたの価値観に近づくための一般的なキャリアです。
企業によっては、より細かく分類されていることもありますが、大枠の分類的には変わりません。
キャリアの分類は、下記です。
「あなたの価値観 ー あなたの現状 」という体系で、どのキャリアに該当するか確認してみてください。例)「独立して個人で稼ぎたい(2)ー IT未経験 × 学生(b)」
- システムエンジニア
- プログラマー
- データサイエンティスト
「1ーb」「1ーd」「1ーe」「2ーd」「2ーe」「3ーb」「3ーd」「3ーe」は、iに該当します。
iは、中~大規模のSler(システムインテグレータ)でシステムの設計、コーディングをおこなう、システムエンジニアを想定してます。
新卒(学生)であれば、未経験でも入社できたりします。また、IT関連の経験があれば、中途でも入社が可能です。
企業の基幹システムをメインに仕事をするので、その規模から予算も大きく、ゆえに安定(相対的な安定)しています。
基幹システムとは、その企業のビジネスの中核をなすシステムと言えます。
銀行であれば、勘定系(口座の入出金)のシステムであったり、製造業メーカーであれば、生産管理のシステムがこれに該当します。
このことから、安定的な環境や収入を希望する人、あるいは社会に大きく影響する仕事がしたい人に最適な仕事です。
ただし、担当する基幹システムの規模によっては、かなり大きいプレッシャーに遭遇するというデメリットがあります。
「2ーa」「2ーb」「2ーc」「2ーd」「2ーe」「2ーf」は、ⅱに該当します。
ⅱは、Webアプリやスマホアプリを設計、コーディングするプログラマーを想定しています。
企業によっては、フロントエンドエンジニアやバックエンドエンジニアなど、より細分化した職種で区分されていることが大半ですが、ここでは分かりやすいように、プログラマーとひとまとめにしています。
この職種はとても汎用性が高いです。
なぜなら、システムエンジニアで関わる基幹システムと比較して、我々が普段利用するアプリケーションに携わるからです。
具体的に言うと、Webサイト、ブログ、スマホなどで利用される技術に触れることができるため、仮にフリーランスとして独立したとしても、仕事にある程度の需要があります。(もちろん、個人の力量によります。)
このことから、独立して個人で稼ぎたいと考えている人に最適な仕事だと思います。
「4ーb」「4ーd」「4ーe」は、ⅲに該当します。
ⅲは、事業会社や専門会社において、データ分析や機械学習を仕事とするデータサイエンティストを想定しています。
難易度は高いですが、今最も需要が高く、この需要はしばらくの間は続くと思われます。
一昔前までは、IT化と言えば、業務プロセスをシステムに置き換えることで人件費を削減することが主な目的でした。
しかし今では、その定義自体が様変わりしてきており、コスト削減だけでなく、ビックデータを利用し、新たなビジネスを創出する、或いは劇的に改善することを目的にするまでにレベルが上がってきました。
その進歩を支えるのは、統計学や機械学習の理論の発展だけでなく、その理論を実現できるPython等のプログラミング言語などのソフトウェア面、大量なデータを高速に処理できるハードウェア面の進化によるものです。
さらにソフトウェアはオープンソース、ハードウェアはクラウドサービスが利用できるため、企業に限らず、誰でもその技術を使って、再現できるようになりました。
このことから、最も需要のある職種で働きたい人は、データサイエンティストが最適です。
最後に
「1ーa」「1ーc」「1ーf」「3ーa」「3ーc」「3ーf」「4ーa」「4ーc」「4ーf」の人は、どれにも該当しません。
どれにも該当しない人は、まずⅱを目指してみてください。
ⅱは汎用性が高く、個人の力量がものを言う傾向があるので、未経験であっても実力さえあれば、挑戦できる可能性があります。
まずは、独学 ⇒ プログラミングスクール ⇒ 就職 という流れで、考えてみてください。
プログラミングスクールは、就職までサポートしてくれるものもあるためです。
選択すべきプログラミング言語は?
ようやくプログラミング言語までたどりつきました。(笑)
少し長かったですかね。。ですが、「価値観」と「現状」に沿った「キャリア」を導きだすことで、ひとつの方向性が定まります。
この方向性を定めるという行為は、意外とやっていない人が多いです。しかし、最も重要なプロセスだと言っても過言ではありません。
これはよくよく考えると分かることですが、例えば、ある手漕ぎのボートに複数人が乗っていて、それぞれがオールを持っているとします。
そして、そのそれぞれがオールで別の方向へ向かおうとするとどうなるか。
どこにも進めないですよね。
空から見ると、湖の真ん中で行ったり来たり、漂っているように見えます。
この場合の方向性はキャリアを示し、オールを漕ぐ人は、プログラミング言語にあたります。
なので、キャリアを定め、そこで一般的に利用されているプログラミング言語を選択することが正しい選択方法と言えると思います。
それでは、キャリア毎によく利用されるプログラミング言語を一覧にしていきます。
プログラミング言語の詳細は、別途記事にしたいと考えています。
システムエンジニア
- Java
- Python
- VB.net
プログラマー
Webアプリ
- HTML
- CSS
- JavaScript
- PHP
- Ruby
- Python
スマホアプリ
- Java ← Androidアプリ
- Swift ← iosアプリ
- Objective-C ← iosアプリ
データサイエンティスト
- Python
- R
【初心者向け】プログラミング学習手順
【初心者向け】プログラミング学習手順
【Step1 PCを用意する】プログラミング学習に使用するPCはコスパで選ぶ
プログラミングを始めるには、PCを用意する必要があります。
正直、256GBのSSDでメモリ8GBのスペックであれば、何でも良いかなと思います。
メルカリだと、同スペックで4万~5万円くらいで中古品を購入できます。
わざわざ新品で十何万のPCを購入するより、初期費用が抑えられて経済的です。
私も実際にメルカリで5万程度でPanasonicのLet’sNoteを購入し、使用しています。
【Step2 教材を用意する】プログラミング学習のおすすめ教材
何で学習するのかはとても重要です。
初めからプログラミングスクールに通うのも有りだとは思いますが、まずは独学である程度勉強した方が良いかなと思います。
インターネットで学習するのであれば、ドットインストールなど、無料で、ある程度のことを学べるコンテンツがありますし、参考書などの紙媒体も、初期費用としてそこまで高くはありません。
あくまで参考程度ですが、実際に使用してよかった書籍を紹介します。
よくわかるHTML5+CSS3の教科書【第3版】
HTMLとCSSについて、網羅的に解説されています。
初心者でも十分理解できる内容になっていて、実際に私もブログを作成する際にリファレンスとして使用しています。
基礎からのJava 改訂版 (基礎からのシリーズ)
学生、SE時代にお世話になりました。
Javaの文法やオブジェクト指向について、基礎から分かりやすく解説されています。
Javaの勉強はこれ一冊で十分です。
東京大学のデータサイエンティスト育成講座 ~Pythonで手を動かして学ぶデ―タ分析~
これはPythonの上級者向けです。
Pythonは急速に重要が伸びており、文法や機能(ライブラリ)の使い方はネットで調べれば、特に困ることはありません。また、機能の数がかなり多いので、Pythonはネットで学ぶのが良いです。
この本は実践に役立つデータ分析の手法を、書籍の題名通り手を動かして学ぶことができます。Pythonについて少し踏み込んで学びたい人におすすめです。
新装版 達人プログラマー 職人から名匠への道
この書籍は、少しプログラミングに慣れてきた人におすすめです。
主に、より良いコードを書くためのプログラマーとしての考え方について言及されています。
自分の書くコードと照らし合わせて、ギャップを把握するのも有効です。
【Step3 目標設定】プログラミング学習の目標設定
目標設定のメリットは、自分でフィードバックができることです。
フィードバックにより、学習の効率が上がります。
目標は、長期目標、中期目標、短期目標に分けます。
それぞれの期間の目安は下記です。
- 長期目標 :6ヶ月
- 中期目標 :3ヵ月
- 短期目標 :1ヶ月
次に目標の設定条件ですが、
中期目標、短期目標の設定条件は、測定可能であることです。
そのためには、目標が数値で表現されている必要があります。
具体例を記載します。
長期目標(例)
Webサービスの会社に就職する
中期目標(例)
〇〇向けのWebサイトを2つ構築し、実績を作る
短期目標(例)
HTML、CSS、JavaScriptを月当たり各30時間し、知識と技術を身につける
こんな感じです。
中期目標はWebサイトを2つ構築すること、短期目標はWebサイトを構築するためにHTML、CSS、JavaScriptをひと月で30時間ずつ勉強することです。
そして、重要なのはフィードバックです。必ず、目標の期間毎に目標を達成できたかどうか振り返りましょう。
これにより、なぜ目標を達成できなかったのか、或いは目標を達成できたのか要因を把握できるようになります。
このフィードバックのサイクルは短ければ短いほど効果があります。
その場合は、1週間毎に短期目標をさらに細分化してみてください。
プログラミング学習のマインドセット
挫折するのは当たり前です
プログラミング学習を始めると、一度は挫折を経験するかと思います。
ですが、重要なのことは、挫折したとしても、立ち直ることです。
「挫折しても立ち直ること」を言い換えると、粘り強さが必要となります。
粘り強さを発揮するためには、問題分析が欠かせません。
「問題は何か」⇒「原因は何か」⇒「対策可能か」という順序で考え、
「問題を解決するための目標(課題)」と「対策の具体的手順」を洗い出します。
そして、その対策を実践します。
このようなプロセスを着実に踏むと、対策が具体化されるので、「なんかできそうかも感」がでてきます。
この「なんかできそうかも感」が実は非常に重要で、挫折から立ち直るための起爆剤となります。
アラサーなので、まだ人生経験は豊富ではありませんが、周りで成功している人を見てみると、共通して「問題分析」を徹底しているという印象を受けます。彼ら彼女たちはあきらめません。
これはプログラミング学習だけでなく、物事全般に共通するのではないでしょうか。
プログラミングは手段であって目的ではない
最後に、プログラミングは手段であって、目的ではないです。
あくまで最上位の目的は、あなたの価値観を実現し続けることです。
ですから、企業やあなたの考えていることを実現する手段(ツール)として、プログラミングは存在しています。
この最後まで読んでいただき、ありがとうございました。
ぜひ、プログラミング学習を始めて、あなたの価値観を実現し続けてください。