今回はエンジニアになりたい学生に向けて、現役フリーランスエンジニアである著者が「もし学生に戻ったら絶対にやっておくなぁ」という学習内容について紹介します。
前提として把握しておくべきこと
前提としてですが、エンジニアになるためにはプログラミング学習が欠かせません!
プログラミングはエンジニアとは切り離せない関係にあります。
しかし、プログラミングというのはあくまで「何か作りたいものがあって利用するもの」であるため「手段」でしかありません!
つまり、プログラミングさえできていれば完璧なエンジニアであるとは言えないのです!
ただ、今回は将来エンジニアになりたい学生に向けての記事になりますので、プログラミングの学習法について紹介していきたいと思います。
学生のうちにすべきこと
では、将来エンジニアになりたい学生に向けて、もし著者である私が「学生に戻ったらこれはする!」といったことについて紹介します。
それは競技プログラミングです!!
巷では、、、
仕事で競技プログラミングで書くようなコードは使えないよ!
仕事で役立たないと思うなぁ
など、ネガティブな評価が多くあります。
しかし、実際はその逆で、競技プログラミングは仕事にめちゃめちゃ活きてきます!
かの有名なIT企業であるGAFAMなどでは入社の際に競技プログラミングで出題されるような試験を課す場合もあります。
なぜ競技プログラミングをやった方がいいの?
競技プログラミングを行うことで得られる最大のメリットは「アルゴリズムの構築が早くなること」です!
アルゴリズムというのは問題解決に際して論理的にゴールまでの道筋を紐解いていく手段になります。
アルゴリズムの構築が早くなることで得られるメリットとしては以下の項目が挙げられます。
- 実装力が身に付く
- 物事を論理的に考えられるようになる
- 製造工程以外にも設計であったり、要件定義の能力向上にもつながる
実装力が身に付くというのはいわずもがな、何かアプリやシステム開発を行う際にスムーズにプログラミングを行い完成まで到達することができるようになります。
また、競技プログラミングとは問題となっている物事を論理的に解決する能力を競うものであるため日常的に物事に対して論理的に考えられるようになります。
さらに、競技プログラミングには副次的な効果もあり、設計であったり、要件定義の工程の能力向上の恩恵を受けることができるのです!
↓
実際に何かを作る際に、どのように実装するかをイメージできるようになる
↓
設計書をどのように作成するかイメージできるようになったり、クライアントと話す際にできることできないことの判別や、どの程度の時間が必要になるかなど判断ができるようになる
こういったようにプログラミング以外にも得られるメリットは多く、エンジニアとして必要な能力を全体的に押し上げることができるのです!
おすすめの学習本紹介
アルゴリズムとデータ構造の基本については本から学ぶことができます。
初心者が取り組みやすい順に載せておきます!
問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)
競技プログラミングの鉄則 (Compass Booksシリーズ)
プログラミングコンテスト攻略のためのアルゴリズムとデータ構造
おすすめの学習サイト
また、実際に手を動かして問題を解くためにおすすめのサイトを2つ紹介しておきます。
まずは、AtCoderです!
Googleで「AtCoder」と検索すれば一番上に出てくるはずです。
AtCoderではあらゆる企業が定期的に開催している競技プログラミングで出題された過去問が大量に掲載されています。
難易度も表示されているので簡単なものから解いてみるといいでしょう!
次にLeetCodeです!
こちらもAtCoder同様に、Google検索で「LeetCode」と検索すると一番上に出てくるはずです。
LeetCodeの特徴としては以下が挙げられます。
- 全て英語表記
- サイト側で大量のテストデータが用意されている
全て英語表記というのは英語が苦手な方にとっては少し取り組みづらい原因でもあるかもしれませんが、英語学習も兼ねると思ってプラスに捉えるのもいいでしょう!
また、サイト側で大量のテストデータが用意されているというのは実際にサイト内でコードを書いて実行をするとサイトで用意した数百のデータが裏側で投入されるため、自分が書いたコードに抜け穴がないかを確認する良い機会ともなります。
まとめ
実際に何か作りたいものがあってプログラミングを始めるという人はぜひ自分の作りたいものを作ってください。
今回は何か作りたいものはないけどプログラミングを学習したい方や、プログラミング力を向上させたい方向けにとって競技プログラミングは適切な学習方法であると思い、薦めます。
※またIT全般の勉強については以下の記事を参照してみてください。