この記事では
Web系エンジニア転職を目指し学習を始めたい、プログラミング学習に興味がある
でも、どの言語を学べばいいのかわからない、悩んでいる迷っている方
を対象に記事を書いています。(細かい技術解説はしていません。)
自己紹介
2020年10月、29歳未経験からRuby/Ruby on Railsを完全独学で学び、エンジニアへ転職しました。現在はWeb系自社開発企業でPHP/Laravel、AWSやDockerを使用した開発環境で新米バックエンドエンジニアとして奮闘中です。
独学でプログラミングを学習する際に経験したことや、あればもっと効率よく学べたなといった情報を発信しています。
はじめに
学習するプログラミング 言語選びは初学者にとって最初の難関ですが、難しく考える必要はありません。とはいえ、初学者は言語の違いを理解することはできず、しかしながら言語は無数にあるので何を学ぶべきか混乱してしまうのだと思います。
また言語の違いをGoogleなどで検索すると、特徴はオブジェクト指向であるとか、インタプリタ言語やコンパイラ言語です、と言われても初学者にはチンプンカンプンだと思います。(それらが何を意味するのか、どんな違いを生むのか知ることはとても重要ですが、優先すべきことではありません)
この記事ではなるべく簡潔に、学習者のタイプ別に学ぶべき言語を述べた後に、各言語について簡単にご紹介していきます。
学習者タイプ別オススメ言語
入社したい企業をある程度決めている方
このタイプの方は、入社したいと考えている企業の求人情報から、使用している言語やフレームワーク、ツールなどを調べて、それらを学習していくべきです。
悩む必要はありません。この記事を読む必要もありません。早速手を動かして調査、学習を始めましょう!複数の企業を候補に考えている場合は、自分が最も働きたいと思える企業の言語を学べば問題ないです。どの言語を学んだとしても、良質なポートフォリオの作成や基礎学習ができていれば、例え学習した言語と違う開発環境の企業でも入社することは十分可能です。
AI・機械学習、データサイエンスの分野に進みたい方
このタイプの方も迷う必要はありません。Pythonを学習することをオススメします。
Pythonは現在最も人気、需要がある言語といって過言ではないです。AI開発などの専門分野から一般的なWebサービスまで幅広く使用されています。ただし、PythonでWebサービスそのものを作ることは稀です。多く場合Webサービスの一部として使われています。
R言語もありますが、データ分析の研究などの学問系を目指しているのでなければ、汎用性の高いPythonを選択すれば良いと思います。
Webサービスを作りたい、エンジニアになりたいけど、これといって決めてがない方
このタイプの方が一番多いのではないでしょうか。エンジニアなってこれがしたいが決まっている方から、IT業界は成長産業だし、在宅ワークできそうだし、エンジニア足りてないと言われてるし、など目指す理由はさまざまだと思います。
エンジニアになりたい理由はひとそれぞれなので、気にする必要はないです。特に決め手がないという方はRubyを学ぶことをオススメします。
Pythonを学ぶことも一つの手だと思いますが、PythonでWebサービスを作ることは稀です。対してRubyはRuby on Railsというフレームワークを使用することで簡単にWebサービスを作ることができます。プロゲートなどの学習サイトで教材が豊富であったり、ネット上に情報も多いので、学習し易いので独学で学ぶことも十分に可能です。
もしくはPHPを学ぶのもアリだと思います。こちらもフレームワークのひとつLaravelを使用することでWebサービスを簡単に構築することができます。ただ特に理由を見つけれられなければRubyを学習すれば間違いはないと思います。
20代前半、もしくは学生で将来の選択肢として学習したい方
すぐにはエンジニアに転職しようとは考えていないが、将来的に検討している。学生でそれなりに学習時間が取れる方、もしくは自己投資として学習したい方はGoをオススメします。
Googleが開発した言語で、これから人気・需要が高まることが期待されています。現在はメガベンチャーなど一部の企業が採用しているのみで、求人などは少ないですが、採用する企業も徐々に増えてきており、学習する価値は高いと思います。
AR・VR、ゲームに興味がある、スマホアプリもできたらいいなという方
JavaもしくはC++、またはC#を学ぶことをオススメします。OS構築や組み込み系システム開発、スマホアプリやAR・VRの開発など幅広く使用されている言語です。しかし、環境構築が難しかったりと学習難易度は高めです。
Javaは幅広いサービス開発で使用されています。GoogleやAWSなどのサービス構築にも大きく貢献しています。またAndroid系のアプリ開発にも使用されているほか、Android・iOS両方に対応したアプリ開発が行えるFlutterではDartという言語が使用されていますが、Javaに近い言語で学習し易いと言われています。
C系はC、C++とC#ありますが、全て別々の言語です。CとC++は互換性がまだありますが、C#は全く別言語として考えても問題ありません。ゲームやAR・VR開発に使用されるゲームエンジン:UnityではC#が使用されており、同じくゲームエンジンのUNREAL ENGINEではC++が使用言語となっています。
それぞれの言語について
ここからは、簡単に各言語について紹介していきます。
Ruby(ルビー)
学びやすく、独学で未経験からエンジニア転職を目指す方にオススメの言語です。
Rubyは日本人のまつもとゆきひろ(通称:Matz)さんが開発した言語で、日本はもちろん世界でも人気のある言語です。(1995年12月公開)
Rubyが人気の言語である理由の一つに、Ruby on Rails(後述:RoR)の存在があります。webアプリケーションフレームワークのRoRのおかげで、Rubyのことをあまり知らなくても(良くも悪くも)簡単にWebサービスを作成することができます。
学習の容易さ、規模にかかわらず多くの企業でRubyを採用しているなどのことから、プログラミングスクールの多くがメインの学習言語としています。
次のような特徴が挙げられます。
- 柔軟性が高く、コードが短く簡潔
- 日本語で参照できる記事や書籍が多い
- Ruby対応の学習サイトが多い
- Ruby on Railsという強力なWebアプリケーションフレームワークがある
これらの特徴により未経験であっても独学でプログラミング学習を進めるのにピッタリな言語であることは間違いありません。
しかし、今後需要が伸びることはあまり期待できない言語であることは否定できず、エンジニアになるために学び、一定の開発経験を積んだらPythonやGo、もしくはJavaやC系の言語などを学んで引き出しを増やしていくことが必要になると思います。
Rubyで作られている有名なサービス
AirbnbやHuluなどの世界的webサービス、クックパッドや食べログなど、皆さんも使用したことがあるのではないかといったサービスで採用されています。現在はScalaに移行していますが、TwitterはもともとRuby/RoRで開発されたサービスです。
プログラミング学習を進める上で必ずお世話になるであろう、プログラミングに関する知識を記録・共有するためのサービスQiita、転職・求人サイトのWantedly、そしてソースコードのバージョン管理システムであるGithubもRuby/RoRで作られています。
Ruby学習のオススメ教材
全くプログラミングに触れたことのない初学者の方はプロゲートで学習を始めるのがオススメです。環境構築というつまずきやすいポイントを回避して学習を始められますし、学習コースが用意されているので、順番に沿って進めていけるところも良い点です。
Progate(https://prog-8.com)の『Web開発パス(Ruby on Rails)』がオススメです。
最初からローカルに環境構築して学習を始めたい方はドットインストールがオススメです。プロゲート同様に基礎学習を行うことができます。
ドットインストール(https://dotinstall.com)『Rubyでウェブサービスを作れるようになろう』を学ぶと良いです。
基礎学習を終えたのちにオススメなのがUdemyでの学習です。紹介するレッスンは英語ではありますが、ハンズオンでアプリ開発を学ぶことができるのでオススメです。
8 Beautiful Ruby on Rails Apps in 30 Days & TDD – Immersive Ruby/RoRのバージョンが古いですが、このレッスンは無料です。独学初学者にとって最高の教材の一つであることは間違いありません。
The Complete Ruby on Rails Developer Course こちらは有料ですが、最新のRoRバージョン6で開発を学ぶことができます。
Python
Pythonは今最も注目を集めており、需要も非常に高い言語です。
TIOBEの言語ランキングで20年以上、JavaとCが1位2位を独占してきましたが、2020年11月ついにその牙城をPythonが崩しました。(Cが1位、Pythonが2位といった結果でした。)
グイド・ヴァン・ロッサム氏が開発したプログラミング言語で、1991年にリリースされました。
特徴は次のようなことが挙げられます。
- シンプルで覚えることが少ない構文
- 1行で多くの処理を記述可能
- 標準ライブラリとして、言語に多くの機能があらかじめ用意されている
- 幅広い用途に使えるPython向けの外部ライブラリが豊富に存在する
AI・機械学習・データサイエンスなどの分野に進みたいのであれば、Pythonを学ぶのが良いと思います。他分野のエンジニアを目指すのであっても学ぶメリット(需要の高さなど)は大きいですが、WebサービスそのものをPythonで作成することは、通常ほとんどないようです。(UdemyなどPython/Djangoで作られているサービスもあります。)
Webサービスの大枠がPythonで書かれていないだけで、FacebookやInstagram、SpotifyやNetflixなどの世界的なサービスを始め、数多くの幅広い種類のサービスの一部として使用されています。
PythonのオススメQiita記事
データサイエンティストについての記事ですが、データ系の仕事がPythonの主流だと思うので、1度目を通して見ることをオススメします。
【保存版】データサイエンティスト転職を決めるポートフォリオのガイドライン
こちらの記事も一読してみてはいかがでしょうか。
【保存版・初心者向け】独学でAIエンジニアになりたい人向けのオススメのAI勉強方法 (2019年改定版)
私がPythonを選択しなかった理由
AIや機械学習、特にデータサイエンスに興味はありましたが、それらの開発はプログラミング以外の知識(数学や統計学、その他)も必要であり、私の基礎学力や短期間で学習・転職を望んでいた状況を鑑みると学習コストが高いと考えたからです。そして、学歴・職歴を考えても未経験からAI技術などの開発に携わる会社に転職することは難しいと考えたからです。
Go(Golang)
GoはGoogleが開発した言語で、注目度が非常に高い言語です。
“Golang”とも呼ばれる理由は、公式のドメインが”golang.org”であることが起因しています。(”go.org”が取得できなかったため)
2009年11月に最初のバージョンがオープンソースで公開されています。開発された目的は、Google内の課題解決のためだそうです。
下記のような特徴があります。
- 強力でシンプルな言語設計と文法
- 並行プログラミング
- 豊富な標準ライブラリ群
- 周辺ツールの充実
- シングルバイナリ・クロスコンパイル
初学者の方にオススメはしませんが、20代前半でエンジニアへの転職を焦っていない方や、英語のドキュメント読むことができる方、メガベンチャーなどの企業への入社を志望している学生さん、などは初学者でも学ぶ価値は非常に高い言語だと思います。
Goが優れた言語であることはもちろんですが、Googleという影響力の計り知れない企業が開発していることなど、今後採用する企業が増え、需要が高まることが期待されています。(TIOBEで2020年11月は13位でした。ちなみにRubyは15位)
日本だとメルカリやサイバーエージェント、世界ではNetflixやUberで使用されています。DockerがGoで書かれていることは非常に有名です。
Go(Golang)が学べるサイト
メルカリエンジニアリングが提供している『プログラミング言語Go完全入門』は必見だと思います。完全無料で公開されています。(2020年11月執筆時)
『A Tour of Go』は公式チュートリアルです。
あとこちらのQiitaの記事『Go言語の初心者が見ると幸せになれる場所』でメルカリエンジニアのかたが、情報をまとめてくれています。
初学者にオススメしない理由
まだ新しい言語の一つであるため、採用している企業が少ない、そのほかの言語と比較すると学習する上での情報が少ない、などの点から基本的にはオススメはしません。
また、RubyのRailsや、PythonのDjango、PHPのLaravelといった地位の確立されたフレームワークが存在しないため、ひとつの言語を学んだ後の、次に学ぶ言語として捉えるのが良いのではないかと考えているからです。
PHP
WordPressという強力なCMSのおかげで、現在も根強い需要がある言語です。
TIOBE(2020年11月)で8位と先に紹介したRubyやGoよりも上位に位置している言語です。世界のWebサイトの内、約35%はWordpressで作成されていると言われており、圧倒的なシェアを誇ります。そこで使用されている言語がPHPのため、依然として需要が高いひとつの理由となっています。
また、PHPのフレームワークのひとつLaravelは非常に人気が高く、RubyのRuby on Rails同様に簡単にWebサービスを作成することができます。
特徴として下記のようになります。
- 構文がシンプルで簡単
- PHPは人気言語ためWEB上に情報が多い
- 比較的習得難易度が低い
- 需要が高いので、案件が豊富
地方のIT企業の大半はPHPを採用しているのではないかと思うほど、多くの求人を目にします。現在はアプリ開発をしていても、HP制作からスタートしている会社が多く、Wordpressで使用してきたPHPをそのまま採用しているのではないかと考えています。
またPHPを使えるエンジニアの数は比較的多いため、採用を行いやすいメリットがあるのだと思います。(最先端のスキルを持つエンジニアは東京などに集中するため、地方ではエンジニアを採用するのが一苦労です)
PHPとRubyどちらを選ぶか
もしPythonを切り捨てた時に、RubyとPHPどちらを学ぶか迷うと思います。私も非常に悩みました。今だからわかりますが、どちらを学んでも大きな差はないと考えています。
私はRuby/Ruby on Railsを独学で学び、現在の会社ではPHP/Laravelで開発を行なっています。逆ももちろん可能ですし、言語がどうのこうのではなく、どれだけ学習を頑張れるか、良質なポートフォリオを作れるかがポイントだと思います。
私がPHPを選択しなかった理由
ではなぜ私はRubyを選択したのかをお話しします。
私の場合は未経験ですが29歳とエンジニア転職するにはギリギリの年齢であったことから、とにかく学習の容易さが必要、さらに独学でも学習できる言語を選択する必要がありました。個人的な感覚ですが、Rubyの方がネット上に学習情報が多いです。また、私は学習を始めるにあたってドットインストールに行き着けませんでした。Progateで学習を進めようと考えており、PHP/Laraveはコースがなく、Ruby/Ruby on Railsは学習コースがあったことが大きな決めてになりました。
またDockerやAWSなどモダンな技術を使用している会社で経験を積んでいきたいと考えていて、Rubyを採用している企業の方が、そのような技術を取り入れた開発環境であることが求人から読み取ることができたためです。
結果として現在PHP/Laravel、AWSやDockerなどを使用した開発環境でエンジニアとして働けているので、後述した内容は言語を選ぶ基準という意味では間違いでした。学習の容易さについては、現在PHP/Laravelでコードを書いていて、やはりRubyが勝るなと思うので間違っていなかったと思います。
Java・C#・C++
Web系組み込み系システムから、ゲームやAR・VR、スマホアプリ、OS開発など多くのサービスで使用されている言語です。
Pythonがついに牙城を崩しましたが、JavaとCはTIOBEの言語ランキングで20年以上、1位2位を独占してきました。2020年のTIOBEランキングは1位C、2位Python、3位Java、4位C++、5位C#でした。
このように、JavaとC系の言語は非常に需要が高い言語であることは確かです。この需要については今後も継続すると考えられますが、環境構築の難しさや、学習難易度が上述している言語等に比べて高く、手軽にWebサービスを作れるといった言語ではないこともあり初学者が独学で勉強していくには少しハードルが高いです。
しかし、今後需要が高まると予想されているARやVR、もしくはモバイルゲーム開発にとても興味がありその分野に進みたいと考えている場合、JavaやC#を学習する必要があります。自分が本気進みたいと考えているのであれば、学習難易度が高くても頑張って学んでいくべきです。
4つの言語をまとめて書いていますが、C++はC言語を拡張して開発された言語で、JavaはCとC++を元に開発された言語で、C#はC++とJavaをベースに開発されました。そして、CとC++、C#は別々の異なる言語ですので注意しましょう。(C++はCの拡張言語なので、CのソースコードをC++で書くことは可能なようです。詳しく知りたい方はGoogle先生に聞いてみてください。)
Java・C++・C#を使用している有名なサービス
GoogleのサービスはJava、C++、Pythonが基本言語として作られてきた歴史があります。AWSの構築にもJavaは大きく貢献しており、Javaの生みの親と言われているジェームス・アーサー・ゴスリンはAWSに在籍しています。
Adobe Systems、Amazon、Paypal、ChromeなどはC++で構築されています。
ポケモンGoはゲームエンジンのUnityを使っているという条件でC#で作られていると言えます。マイクロソフトが開発している言語なので、マイクロソフトのサービスの多くで使用されています。
自分が使っているサービスがどの言語を使用しているか調べる方法
例えばNetflixやInstagramなど自分が普段使用しているサービスがどんな言語を使用しているか気になりますよね。そんな場合、ネットで調べたり、その企業の求人を見れば使用してる開発環境がわかります。ただ少し面倒であるので、そんな場合Chromeの拡張機能「Wappalyzer」などを使用すれば、調べたいサイトを訪問するだけで簡単に使用技術がわかります。
※全てがわかるわけではないので、気になる企業の場合、面倒でも企業HPを訪問して使用技術を確認しましょう。
まとめ
Web系のエンジニアを目指している初学者の方はPython、Ruby、PHP(もしくはGo)の中から言語を選択するのがオススメです。基本的にこの4言語とJavaやC系言語を除くとマイナーな言語ですので、除外しても問題ないです。(選び方はここまでの内容や、他の方が発信している情報を参考にしてください。)
繰り返しになりますが、エンジニア転職において言語は最も重要な要素ではありません。どの言語を学んだとしても、しっかりと学習を行い良質なポートフォリオを作ることができれば、応募企業の言語が自分の学んだ言語と異なっても大きな問題にはなりません。
企業が事業を行う目的は、提供するサービスで顧客の何かしらの問題を解決したり改善することです。プログラミングはそのサービスを作るツールの一つでしかありません。結果が同じであれば、どの言語を使用するかは問題ではありませんよね。
そもそも未経験の方が即戦力でないことは重々承知の上で企業側は採用しようとしているわけで、Pythonちょっとできます、Rubyできます、というだけで雇いたいと考えませんよね。
あなたはなぜエンジニアを目指し、どのように考え学び、応募する企業でどのようにその目標を叶えようとしているのかを示せるかどうかが、未経験からエンジニア転職を成功させる鍵になります。(これはエンジニアへの転職に限った話ではなく、全ての職種の転職と同じです。)
ここまでお読みいただいた方は、学ぶべき言語は定まっているのではないでしょうか。言語のこと細かい違いなどを理解することは不可能ですし、無駄な努力です。腹をくくって学習を初めてみてください。時は金なりです。頑張りましょう!
最後までお読みいただきありがとうございます。
今後は学習の進め方、ポートフォリオの作成、学習内容より大切なこと、応募や面接の対策などをお伝えしていきます。