こんにちは、システム開発部部長の菅野です。
以前に「サンエルエンジニアが思うエンジニアに向いている人」という題材で、エンジニアの向き不向き、エンジニア適正について私なりに書かせていただきました。
今回はその続編として、「エンジニアになろうとしている人に向けて」どのように学習すればいいか、いろいろお話させてもらおうと思います。
というのもMieL編集部から、「具体的にどういう準備をすべきか」や「自分自身の体験」、「おすすめの書籍」について語ってくれと依頼がきたからです。
「うーん、どう話そうかな…」と思考を巡らせつつ、こういった質問を過去にも何度か受けたことがあるなと思い出しました。
たとえば、
- 「エンジニアになるには何を勉強したらいいですか?」
- 「システムが分かるようになるには何から勉強すればいいですか?」
といったような質問です。
とくに、非エンジニアの方からの質問や相談は多いですね。
私のエンジニア経験も交えて、これからエンジニアになろうとしている人に向けて、アドバイスできたらいいなと思います。
100ページ本を読むより100行コードを書くべし!
全く開発をしたことがない人は、何からどう始めたら良いか分からないと思います。
そうした人からは、「どんな本を読めばいいですか?」と聞かれることが多いです。
ですが、ひたすら本を読むよりも、実際に動くプログラムを作ってみる方が、圧倒的に早くスキルが身につきます。
その際に作るモノは、なるべく自分が欲しいものや興味があるものだと更に良いです。
たとえば、単に参考書についている学習用コードを入力したって、全然楽しくありませんよね。
楽しくないと、なかなか知識やスキルは身につかないと思います。
なので、たとえばゲーム好きな人は簡単なゲームでも良いですし、普段LINEを使っていて不便だと思うことがあるなら、それを解決するLINEのBotを作っても良いです。
例えばこんなものを作りました
私の場合は、まだプログラミング…というかシステムが全く分からないときに、家計簿をつけるWebサイトを作りました。
当時(20年くらい前)は今のような家計簿アプリが全然無かったんですよね。
サーバーを自宅に置いて、外部から接続できるようにルータの設定をいじったりしていました。
私の年代のエンジニアだと、自宅にサーバーを置いて色々ためした人は結構いると思います。
他にも、弊社のCTO(最高技術責任者)は宇宙が大好きで、20代の頃に月の軌道をシミュレーションするソフトを作っていましたね。
あとは以前の職場の同僚が、Flashゲームを作る部署の部長になったとき、自分がゾンビになって人を襲うゲームを作っていたのが印象的でした。
理由を聞いたら
「エンジニアをマネージメントするなら最低限のことは知っておきたい。だけど、いちから勉強する暇がないから、自分の好きなゾンビになれるゲームなら面白そうだし、続けられるかなと思って」
と言っていました。
このエピソードはすごく好きで、印象に残っています。
何かを覚えようと思ったら、モチベーションが保てる内容じゃないとダメなんですよね。
ということで、プログラミング初心者の場合、本を読むより実際にプログラミングをする方が圧倒的におすすめです。
実際に作りたいもの(ジャンル)を決めたら、そこから作り方を検索して調べたり、必要に応じて本を読むなり、「楽しさ」を軸に知識を習得していくのが良いと思います。
検索スキルは超重要
Google検索が仕事のツールとして当たり前になった現在、検索スキルは重要なスキルです。
欲しい情報に対していかに速く、正しい情報にたどり着けるのかは、かなり仕事の成果に差がでます。
これはエンジニアに限った話ではないですが、なかでも以下の2つが非常に重要です。
検索するときのポイント2つ
- 欲しい情報にたどり着ける検索の仕方
- 正しいサイトの選び方
自力でプログラミングできない人の多くは、たとえ作りたいものがあっても、作るために必要な目的の情報にたどり着けていません。
そして、たどり着けないから「難しい」「分からない」となってしまうのだと思います。
おすすめの検索の流れを紹介します
たとえば、プログラミングを覚えるためにゲームを作りたいとします。この場合、検索ワードは何にしますか?
「プログラミング ゲーム 初心者」
といったところでしょうか?ですが、このようなワードでの検索はやめた方が良いです。
まず、「初心者」というワードを「プログラミング」とか「ゲーム」といった広く使われる言葉と組み合わせて使うのはおすすめしません。
検索してみると分かりますが、これだと
- 初心者向けのプログラミング学習サイトへの、アフィリエイトサイト
- プログラミング学習におすすめのゲーム
なども多くヒットするので、学習に有益な情報が得にくいんですよね。
私がおすすめする検索の流れを紹介します。
まず、「ゲーム開発」で検索しましょう。
すると、検索結果のあちこちで「Unity」というワードが出てくるはずです。
この結果から、Unityというのがどうやらゲーム開発するのに使うらしい、ということを推測します。
そこからさらに「Unity 初心者」といった具合に検索します。
「Unity」という開発ツール名を検索ワードに含めると、より具体的な内容が掲載されたサイトが検索結果でヒットして、学習するのに有益な情報にたどり着きやすいです。
最低限のインフラ知識は無いとダメ
最近は仮想化技術が発達し、クラウドサービスも充実しているため、実際にサーバーやネットワークを構築する機会が減っています。
しかし最低限のインフラ知識が無いと、困るシーンが多々あるんですよね。
ただ、機会が減ってるがゆえに、学習ハードルが昔よりもあがっている気がします。
「経験2年の脱初心者」というくらいの人が、サーバーやネットワークの基礎知識を持っていない印象です。
もう少し具体的に言うと、「HTTPステータスコードをよく知らない」とか、「NATが分からない」といった相談を受けることがあります。
そういう人は普段コーディングしてる分には困らないですが、トラブルが起きたときに、自己解決できない問題に直面します。
以前にこんなトラブルがありました
開発を覚えたての子から「(開発中のシステムが)動かなくなりました」と相談されたときのことです。
調べてみたら、メモリを使い切ってOOM Killerが炸裂していました。
それで私が
メモリ使用率100%になっとるやん。しかもSwap効いてないやん
と言ったら、メモリもSwapも何かあまりよく分かっていなかったらしく、ポカ~ンとしてました。
OOM Killerとは 空きメモリが不足して新しいメモリが確保できないとき、使用中のプロセスを強制停止してメモリを空ける機能 Swapとは メインメモリとストレージ(外部記憶装置)でデータの交換を行い、物理的なメモリ容量より広いメモリ空間を使えるようにするメモリ管理機能
このように、最低限のインフラ知識が無いと、開発中に自身が書いたコード内容以外が原因で動かなくなったとしても、自分で解決することができません。
基本情報技術者試験はちゃんと勉強すればおすすめ
一言にエンジニアといっても、何のエンジニアになるかによって、必要なスキルは異なります。
しかし、どんなITエンジニアになっても、プログラミングとインフラに関する最低限の知識は必要です。
では、これらを学ぶにはどうしたら良いでしょうか?
私は基本情報技術者試験を受けることをおすすめしています。
業務に直接役に立つことはありませんが、体系的に広く浅く学ぶことができますし、何より国家試験ですから資格を持ってると、会社によっては手当が出たりします。
誤解のないように言いますが「取得」を目的にしてはダメです。
目的は合格レベルの知識を持つことなので、合格教本とかで語呂合わせで暗記するような覚え方は全くおすすめできません。
合格のために知識を詰め込んでもすぐ忘れるくらいなら、その時間を別の事に使った方が良いです。
これからエンジニアを目指す人におすすめの本
最後に、エンジニアを目指す人におすすめの本についても、よく聞かれるのでご紹介します。
今までITエンジニア本大賞でベスト10 に入ったことがある書籍はおすすめです。
サンエルでもエンジニア向け必読書を設定していますが、なかでも私が重要視しているのは、以下の3冊です。
エンジニアにおすすめの書籍
- リーダブルコード
- 達人プログラマ
- マスタリングTCP/IP
特にリーダブルコードは、エンジニアにとっての必読書だと思います。
以前知り合った会社のCTOの方も「転職の面接でこの本読んだこと無いエンジニアは採用しない」と言っていたほどです。
まとめ|これからエンジニアを目指す人におすすめの学習方法
これからエンジニアになろうとうしてる人に向けての私からのメッセージは、
- とにかく手を動かしてコードを書く
- 最低限のインフラ知識は必要
でしょうか。
特に、これまで全く経験のない人が仕事としてエンジニアを目指す場合、「学習!本を読む!知識をつける!」という部分に注力しがちです。
ただ、それよりも大切なのは「楽しいと思う気持ち」や「実際に手を動かしてみる」ことだったりします。
「楽しめるかどうか」はエンジニアになるだけでなく、その後エンジニアという職を続けていくうえで非常に重要だと思います。