はじめに
私が入社したSierでは新人研修が4か月間あり、その中でIT基礎知識やシステム開発の流れを学んでいきました。具体的には以下のようなスキルが対象になっています。
(おそらくどのSierでも似たような内容を学ぶと思います。)
- Java 基礎文法
- サーブレットを用いたWeb開発
- DBとSQL文の基礎
- フレームワークを用いたシステム開発
- システム基盤の基礎技術
- プロジェクト全体の流れを経験
研修自体もかなり刺激的な内容が多かったですが、あくまで全体のペースに合わせた内容だったため、自らIT知識を独学する必要性を感じました。
この記事では、私が4か月間の独学に用いた教材をまとめていこうと思います。
なおこの記事は「新米エンジニアが入社して半年で読んだ・読まされた本まとめ」に触発された書いた内容になります。
入社時点でのスペック
大学院は物理系であり粒子シミュレーションと流体シミュレーションを行う研究室に配属され、研究室に所属されて初めてプログラミングの学習を始めました。
修士2年からは機械学習に興味をもち、Kaggleに参加していました。
しかしWeb開発の経験などはなく、入社段階で基礎情報技術者試験相当の知識を有してはいませんでした。
前提
勤務中は本を読む時間は取れないので、基本的に勤務時間外に独学しました。
自宅やカフェで書籍や実装を行い、移動時間中はAnkiという暗記アプリで学習内容の復習してました。
Web開発全般
「プロになるためのWeb技術入門」ーーなぜ、あなたはWebシステムを開発できないのか
- 入社して初めて読んだ本です。Web開発の変遷や基礎の部分を知りたかったので購入しました。研修で出てきたJavaサーブレットに関して、CGIからどのように発達し、JSPのような画面と処理を分ける機能が生まれたのかが理解できました。
- ただ2010年に出版された書籍なので、内容が当時のWebアプリ開発でメインだったであろうJavaになっており、JavaScriptなどの説明はありません。
- 最近の開発状況を知るためには、また別の書籍が必要になると思います。
Real World HTTP mini(サイト)
- O’reillyの書籍版のエッセンスを抽出した本で、無料でダウンロード可能ということで読みました。
- 内容としては、HTTP/1.0からHTTP/2までのHTTPプロトコルの歴史と、ブラウザやサーバーでどんな情報がやり取りされているのかがまとまっています。
- 第5章では、「プロになるためのWeb技術入門」から進んでajaxやSPAの説明があり、現在のWeb開発の潮流を大まかに知ることができます。
- プログラミングを行う上で、ほかのメンバーも読みやすいコードを書いたり、冗長な業務処理の部分をすっきりさせるために読んだ本です。
- 命名作法やコメント作法だけでなく、ロジック部分を分割したりタスクを細かく分割したりと中身の部分の改善まで学ぶことができます。
- この手の本は、実践と伴わないことには身につかないと感じていたため、実際の模擬プロジェクトを行う際に読みながら実践していきました。
HTML&CSS&JavaScript
- HTMLとCSSの基礎を学習するために購入しました。
- HTMLのタグの基本的な使い方とCSSの調整方法などを学びました。ページ遷移も含めたWebサイトを1から構築していくので、サイト構築に必要最低限な知識は身に着けることができました。
- ただ出版年が2013年と少し内容が古いので、また適宜知識をアップデートしていく必要があります。
[HTML/CSS/JavaScript]フロントエンドエンジニアになりたい人のWebプログラミング入門(サイト)
- JavaScriptも含めたWebアプリの構築を学びたかったので購入したUdemyコースです。
- Udemyなどの動画教材は、書籍と比較すると網羅性は落ちるかもしれませんが、目的がはっきりしていて動画時間も短い場合は、短時間で成果物を作成できるのでお勧めです。
- HTMLとCSSの基本的な部分は知っていたので、JavaScript部分を重点的に学習しました。
- 全体の中でJavaScriptの比率は半々程度であり、またあくまでもいくつかの機能を使ってみるというスタンスのため、JavaScriptを包括的に学習したい人には向いていません。
VueJS入門決定版! jQueryを使わないWeb開発 - 導入からアプリケーション開発まで体系的に動画で学ぶ(サイト)
- 最近はJavaScriptのライブラリでの開発もあるので、試しに触ってみる目的で購入したUdemyコースです。
- jsFiddleを使用して、実際にVueJSの動作を確認しながらデータバインディングの説明などが行われるので非常にわかりやすかったです。
- 動画での講義ですが、ミニアプリ構築に必要な部分だけでなく、各種機能に関しても学ぶことができます。
- 最短でVueを学びたい人にもじっくり学びたい人にもおすすめです。
- Vueの知識を深めるために購入しました。
- Vueの基本機能を説明した後に、HTMLとVanilla JavaScriptで記述された内容をVueJSで置き換えるので、どういった変更点が存在しているのか理解しやすいです。
- 簡単なフォームや一覧機能などは実装できるようになったので、自分でアプリを製作するときにVueで書いてみようと思います。
情報処理試験対策
- 4月の基本情報対策用に購入した本です。
- 試験対策には本書籍と過去問道場のみを使用しましたが、無事余裕をもって合格することができました。
- ほかの書籍の情報を知らないので何とも言えませんが、基本情報はこれ1冊で十分な気がします。
- ただし午後の問題に関しては、各章の最後に1問ついているのみなので、別途対策が必要かと思います。
- 10月の応用情報技術者試験に向けて使用している書籍です。
- まだ第4章と第5章しか見ていませんが、感想としては基本情報の書籍と比較して網羅性を向上させた分、個々の説明は減っているなと感じました。
- 応用情報に関しては、1周した段階で過去問道場に移り、午後対策に関しては専門の書籍を使っていこうと思います。
Java
- Javaの基礎を学ぶために購入した本です。
- 前評判とかわらず、非常にわかりやすく各内容が説明されており、図や具体例も豊富なのでわかりやすかったです。
- Javaのファイル操作やラムダ式などを知るために購入した本です。
- 正規表現を用いた文字列操作やラムダ式、ファイル操作やネットワーク操作といったJavaの言語機能と、デザインパターンの紹介などがされています。
- 上で紹介した本と合わせてかなりJavaは書けるようになったと思います。
- Javaを用いたWebアプリ開発を学ぶために購入した本です。
- サーブレットやJSPの説明だけでなく、デザインパターンであるMVCを活用して実際に簡単なアプリを作成したり、DBとのやり取りをjdbcを使用して行う方法など、Webアプリ開発に必要な最低限の知識を得ることができました。
- スッキリわかるシリーズの中でも、実際に簡単なWebアプリが作成できるのでおすすめです
- Javaでのテスト技法を知るために購入した本です。
- Web+DB Pressの「JUnit実践入門」がかなりの分量だったので、時間がかからないことを考慮して購入しました。(こちらは270ページほど)
- JUnitを用いたテスト方法だけでなく、よいテストを設計するための考え方や、テスト駆動開発にどのように応用するのかが記載されており、テストの全体観をつかむにはよかったです。
- ただJUnitに関しては基本的なことしか載っていないので、網羅的に学習したい場合は「JUnit実践入門」を使用する必要があるのかなと感じました。最初の本としてはかなりおすすめです。
- Javaの試験用に購入した本です。
- Java文法の基礎に関しては上述の書籍で抑えていたので、過去問対策用に購入しました。
- ひっかけてきな問題もあり1週目はそれほど成績が良くありませんでしたが、繰り返すことで慣れていくことができました。
DB&SQL
- SQLの基礎文法を学ぶために購入した本です。
- 基本的なCRUD操作だけでなく、サブクエリや集合演算などもあわせて学習することができました。
- 書籍ではPostgreSQLを使用してしましたが、私の場合はMySQLの環境が整っていたので適宜MySQLに読み替えて実際に操作をしていました。
- 上述した本を読み終えたので、同じ著者のより専門的な内容を学ぶために購入した本です。
- 現在絶賛勉強中です。
- 第2部のリレーショナルデータベースの世界に関しては、単純に読み物として面白いです。RDBが階層型DBを置き換え、NoSQLがどのように登場してきたのかは、個々の技術を理解するうえで役に立つと感じました。
Network
- ネットワークの基礎を理解するための購入した本です。
- TCP/IPモデルを下層レイヤーから説明していき、助手と教授が疑問点を解決していくという流れなのでなぜその技術が必要だったのかがわかりやすかったです。
- また図も豊富で見やすかったです。
- ネットワーク関連の専門書を読むのに必要な最低限の知識が身についたと思います。
- 「3分間ネットワーク」よりも専門的な内容を学ぶために購入した本です。
- 内容構成自体は3分間ネットワークと同じで、最初に全体観を示して下層レイヤーから説明していく流れになっています。
- 3分間ネットワークと比較して、プロトコルが制定された背景が説明されていたり、説明されているプロトコル自体が豊富なので、より詳しい内容を知ることができました。
アルゴリズム
- 基本的なアルゴリズムを理解するために購入した本です。
- 計算量の考え方や様々なソート手法、再帰や幅優先探索などの難易度の高い手法を、イラストで説明していく流れであり、非常にわかりやすかったです。
- ただ後半の難しいアルゴリズムは概念説明しかないため、実際にAtCoderやAizu Online Jedgeの過去問を利用する必要があると思います。
- アルゴリズムを学ぶ最初の1冊としておすすめです。
Linux
6日間で楽しく学ぶLinuxコマンドライン入門 コマンドの基本操作を身につけよう
- Linuxの操作方法の基礎を学ぶために購入した本です。
- フォルダの閲覧や権限の付与などの簡単な操作しかしたことはありませんでしたが、複数のコマンドの組み合わせ方やシェルスクリプトの簡単な操作を理解することができました。
- より深い内容を学ぶための準備になったと思います。
- なお私はVirtualBoxとUbuntuを使用して読み進めました。
Git
- masterでpushぐらいしかしたことなかったので、より詳細にGitを理解するために購入した本です。
- コマンドラインを使ったGit&GitHubの操作を学べました。
- ブランチなどに関しても豊富に図が使用されており、初学者としては非常にわかりやすかったです。
Docker
Docker - Hands On for Java Developers(サイト)
- For Java Developersというタイトルにつられた購入したDockerに関するUdemyコースです。
- Javaとタイトルに含まれていますが、ほとんどDockerのみの内容です。
- このコースで最初にDockerに触れましたが、わかりやすくCompose、Swarmsなどの技術やEC2上に展開する手法を学ぶことができました。
- Java知らない人でもお勧めできますが、UdemyのDockerコースに関しては、ほかにいいコースがあるかもしれません。
AWS
Deploy Serverless Machine Learning Models to AWS Lambda(サイト)
- 業務外活動で、会社のAWSアカウントを自由に使用することができました。
- その活動で機械学習モデルを使ったSPAを構築するために購入したUdemyコースです。
- node.jsのSPA用フレームワークであるServerlessを用いて、Scikit-Learn、Scipy、Kerasを活用したアプリケーションを構築できるようになりました。
- 複雑な前処理や特定のライブラリに依存する処理は、また別個勉強していく必要があると感じました。
Python
Pythonスクレイピングの基礎と実践 データサイエンティストのためのWebデータ収集術
- Pythonでのデータ収集の方法を学ぶために購入した本です。
- 静的なウェブサイトのみではなく、JavaScriptが使用されてる動的なウェブサイトからもデータ収集ができるようになります。
- また海外の本らしくウェブサイトの構造自体から説明してくれるので、十分な基礎知識を構築することができました。
PythonによるWebスクレイピング ~Webアプリケーション編~(サイト)
- キカガクさんのUdemyコースはどれもわかりやすかったので、引き続いて購入したコースです。
- 私自身がQiitaにPythonの可視化ライブラリDashの記事を書いていたので、DashアプリをDBと連携させてデプロイするまでの流れを学ぶことができました。
【3日でできる】はじめてのDjango入門(Python3でうぇばぷりを作ってAWS EC2で公開!)(サイト)
- AWS LambdaだけではなくEC2上でアプリケーションを構築する方法を学ぶために購入した本です。
- Djangoでアプリ構築を行う際に、GunicornとNginxなどを使用しますが、それぞれの役割に関しては、「Real World HTTP Mini」で説明があったので理解しやすかったです。
数学&機械学習
- 統計学の内容を復習するために読んだ本です。
- この本の特徴は、各節で紹介した新しい概念に関して、具体例を用いてどのようにその知識が活用されているのかを示すため、各概念をどのように実問題に適用すればいいのかイメージしやすいことです。
- 統計学の初学者には特におすすめです。
- 業務外時間で自然言語処理を活用したText2Imageのアプリケーションを作成することになったので、高速で自然言語処理の技術を習得するために読んだ本です。
- 流行りのディープラーニングの説明に行く前に、カウントベースの手法の実装方法も説明してくれるので、NN以外の統計的手法も理解することができました。
- 各フレームワークの挙動を理解するうえで、自分で実装するということは非常に重要だと感じました。
- 勉強会にあわせて購入した本です。
- 現在第3章まで読み進めています。
- まだ統計的な知識が薄いため、非常に苦戦しています…
- PyTorchで面白そうな本を探しているときに購入した本です。
- 理論的な説明より前に、実際にコードで強化学習の実装を行うため、まずは動くものを作ってみたい人におすすめの本です。
- PyTorchを活用してDQNやA2Cの実装までできるようになりました。
- Deep Learningの理論的側面を補強するために購入した本です。
- 情報量という観点からKL Divergenceやクロスエントロピーなどを議論しており、統計的な観点からしかとらえたことがなかった身として、示唆に富んだ本でした。
論文
Text2Imageに関する論文とpaperswithcodeとArxiv Sanityでホットトピックとして挙がっていた論文を読みました。大体50本程度読んでいます。
アプリ開発に合わせて実装まで行った論文は以下になります。
-
MirrorGAN: Learning Text-to-image Generation by Redescription
-
AttnGAN: Fine-Grained Text to Image Generation with Attentional Generative Adversarial Networks
-
StackGAN++: Realistic Image Synthesis with Stacked Generative Adversarial Networks
-
StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks
-
Attention Is All You Need
-
Show and Tell: A Neural Image Caption Generator
-
Self-Attention Generative Adversarial Networks
感想
4か月間勉強したおかげでかなりの基礎知識を身に着けることができ、また実際のアプリ開発に関してもモダンな手法でのやり方を身に着けることができました。
一気に様々な分野を学習した弊害かもしれませんが、個々の知識を完全に理解したわけではないので復習をしながら、得られた知識を配属先で活かしていこうと思います。