はじめに
このページはグローバルなソフトウェアエンジニアを目指すことにこだわったページです。
そして僕もグローバルなソフトウェアエンジニアになるために日々仕事、勉強をつづけています。
僕について
バックエンド系(主にJavaフレームワーク)を中心に仕事をしていましたが、最近はフロントエンド系も含めたフルスタックなアプリを構築することが多くなっています。
最近はモバイルアプリ(React Native)とコンテナ・クラウド(特にAWS/GCP/Azure/Kubernetes)を専門にしています。
対象読者
ここでは、初心者から中級者になるまでの勉強方法について記載します。
年齢層については、絞っていません。僕ももともとはSierで何とか管理とかの事務、管理仕事ばかりしていて、コーディングの経験は多くありません。なので、初心者であればどのような層でも参考になると思います。
レベルの定義について
上で、中級レベルと言っていますが、世の中に共通的に定義されたレベルは存在しませんので、以下のように定義します。(プログラミングスキルではなく、IT人材のスキルなどはIPAで定義されていますので、ご参考までに見ていただいてもいいと思います。)
ここでいう上級者というのはビジネスでプログラミングスキルを向上させるうえでのトップレベルという意味合いで書いています。
つまり、プログラミングスキルを向上させて顧客や関係者の価値を実現したいと考えている方が対象で、この定義に当てはまらない、コーディングのスペシャリストや、プロの方(自分でそう思っている方も含めて)はそもそもこのページを見ることはないと思いますし、上で述べている対象の読者とはなっていません。
ということで分類は以下のようにしました。
初心者
まず、初心者。
Hello World!から初めて、入門書に書いていることを一通り勉強するくらいになるかなと思います。
初級者
Jsonファイルを操作するだとか、DBアクセスするとか、単機能についてならある程度できるくらいだと思います。
簡単なアプリを作って、さらに機能を膨らましてだとか楽しめるレベルだと思います。
中級者
複数の単機能を組み合わせて、ある程度価値あるアプリを作ることができるレベルだと思います。
バックエンド系、フロントエンド系のフレームワークだとか、ネットで見かけて写経して覚えながらアプリ作成を楽しめるレベルだと思います。また、作りたい機能が明確になればネットで調べつつ作り上げていけるレベルだと思います。
中級者まで行くと、ネットで検索しながら、自分の知らないロジックも修得しながら価値あるアプリを作れるようになるので、プログラミングがだいぶ楽しくなるのではないかと思います。
あとは、上級者ですが、僕は以下のように考えています。
上級者(おまけ)
おそらく、上級者に至るにあたっては様々な道が存在するので一概に言えない気がしています。
しかし、あえて定義すると以下のような感じになると思います。
いろいろなフレームワークを使いながら商用のアプリを作ることができる人。また、フレームワークも特性や非機能面も理解しながら、アプリをカイゼンできる人になるかなと思います。
あとは、インフラ層や運用(CICDなど)も興味を持ち始めて、開発環境も独自に構築していくことにも可能なレベルなのかと思います。
ここまでくると、会社に入って(あるいは、事業主として)プロとしてのスキルを磨くことが自立的にできているはずです。つまり、できないことが存在していても、勉強を通してキャッチアップできるようになっていると思います。
もちろん、ここまでに至らないとプロになれない?ということもなく、経験値が少なくても雇ってもらって成長して稼げるようになることを見込んでということもありえます。
選択すべき言語について
言語は正直なところなんでもいいと思っています。
その言語によって得意不得意があるだけで、どの言語でも作りたいものは作れます。
得意不得意を決めるのは、サポートしているライブラリ、フレームワークで、Pythonであれば、AI系の処理を得意とするライブラリ、フレームワークが存在しますし、エンタープライズ向けの処理をサポートするフレームワークが強ければ、企業向けのシステムなどに採用されたりします。
極端に言ってしまえば、言語仕様の考え方自体は同じと考えてしまってもいいかもしれません。
なので、言語自体はなんでもよく、一度言語仕様を押さえてしまえばどの言語でも横展開できると思います。
特にやりたいことが明確でなければJavascriptをお勧めします。
理由は、Javascriptはフロントエンド系の開発で得意と思われていますが、NodeJsによりバックエンドの開発も可能です。フロントエンド、バックエンド両方得意となると、フルスタックなエンジニアになる近道になるといえます。
では、Javascriptをどのように勉強すればよいか。
Javascriptは以下のようによく使われている言語ということもあり、学習教材は豊富にあります。また、技術関連の情報は英語で発信されていることが多いので、英語のサイトで勉強することをお勧めします。
せっかくグローバルなソフトウェアエンジニアを目指すので、英語で勉強していきましょう。
無料で学べるおすすめな勉強方法
初心者向け
入門から
がとても分かりやすいと思います。初めて見る人にも大変わかりやすい内容と説明が記載されており、分量もすくなく、変数の定義から重要な配列・オブジェクト・CallBackを扱っているため見ておいたほうがいいと思います。
まず、Javascriptはどんなものなのかを見ることができると思います。
初級者向け
Javascriptについて、少しわかってきたら
がおすすめです。初めてJavascriptを触れるなら、十分すぎるほどの解説が書かれています。これが無料で存在することに驚きです。
ここで少し難しいなと思ったら、上で紹介しましたJavascript for catsや、Qiitaなどの入門者向けの解説ページなどを見て理解したら戻るといった勉強方法が考えられます。
中級向けにおすすめ
ここまでできれば言語仕様はある程度押さえているのだと思います。
ただ、個人的にはC言語から入ってきたので、高階関数とかはちょっと理解するのに苦戦しました。いえ、そもそもオブジェクト指向や、ECMAスクリプトの仕様すら難しかったです。
そういった苦手なところはネットで掘り下げたページを探しながら調べてみると理解が早まります。
紹介したページだけでなく、自分で調べるというのもソフトウェアエンジニアとしては重要です。
ここまでですと、教科書での勉強というよりもテーマを決めて、少し自由度を持たせた勉強することを考えてもいいと思います。そこでおすすめなのは
がおすすめです。
無料で学べる最強のページだと思っています。僕もすべてではないですが、実施しました。
Javascriptの文法は割と理解できて来たのですが、Webアプリを作ろうとするとHTMLやCSSが弱いことに気づいてここでJavascript含めて集中して勉強しました。
これらは、終了までの所要時間が多いため、興味のあるところを中心に進めていかれることをお勧めします。
もちろんすべて終わらせる必要はありません。ある程度進めていくと、ふと作りたいアプリをイメージできたりするので、そちらを優先にネットで調べながら作り上げることができるかもしれません。
実は、以上のような紹介した線路の道をはみ出してみると、聞いたことがないライブラリやフレームワークが登場するかと思います。
できれば、今後トレンドにならなくても、理解してみるのもいいかもしれません。なぜこのライブラリやフレームワークが存在するのか?を考えていくと将来いろいろなライブラリやフレームワークとであったときの選定で役に立つと思います。
最後に
ここまでできていると中級レベルと考えていいと思います。
以上、無料でプログラミングスキルを中級レベルまであげる方法について紹介しました。
中級以上はいろいろな選択肢がありますので、僕がとった選択肢については今後紹介したいと思います。