プログラミング初心者→エンジニア就職→フリーランス までに学んだ内容、取り入れたツール

# はじめに
Tattyと申します。私は、プログラミングを学習しIT未経験からエンジニアに就職し、その半年後にフリーランスとして独立しました。
「どのタイミングでどういうことを学習したんですか？」「おすすめのツールありますか？」という質問を頂くことが増えてきたので、本記事ではここ一年で学んだ教材、取り入れたツールを時系列でご紹介します。

※Slackの導入など、技術的な話がないものについては割愛させていただきます

## IT未経験時代(プログラミング初心者 → エンジニア転職まで)
### [ツール] MacBook
「プログラミングを学習して、エンジニアになろう！」と思って最初にしたことは、MacBookを買ったことです。
プログラミングに関するネット記事を事前にざっと見たところ、

- Mac前提の記事が多い
- 「Windowsの場合は...」のような但し書きがよく書かれていて、Windowsのほうが手間のかかるパターンが多い

という点に気づき、「Macの方が初心者向けな気がする」と感じていました。
「初心者はMac買っとけ！」という記事もよく目にしていたので、それに後押しされる形で、Macを使うことにしました。

今思い返すとこの選択は間違いではなかったです。環境構築に詳しくないならMacを使うほうがいいですね。

### [教材] Progate
Railsエンジニアになることを目標にしていたので、この順番で学習しました。
- コマンドライン
- Git
- HTML&CSS
- SQL
- Ruby
- JavaScript
- Ruby on Rails
今思うと、JavaScriptは後回しでもよかったかも。

### [教材] RailsTutorial
スクールの課題を始める条件としてRailsTutorialを一通り学習する必要があったので、約1ヶ月かけてRailsTutorialを学びました。

RailsTutorial自体は無料なのですが、有料の解説動画を別途購入し、動画を見ながら学習しました。
動画では、RailsTutorialでは省略されている部分や初心者がつまづきやすい所が紹介されていたので、挫折することなく進められました。
動画を0.5倍速にし、「動画が終わるまでにコードを書ききる」というタイムアタック方式でコードを書いていました。

### [ツール] Vim
RailsTutorialはcloud9で開発しますが、実際の現場でcloud9を使うことはほぼ無く、ローカル環境で開発を進めます。
ローカル環境で開発をすすめるにあたり、エディタはVimを選びました。
以下の記事を見て、Vimに魅力を感じたからです。
http://www.manuelmagic.me/manuelsweb/geek/texteditors/index.html
半ばジョークのような記事ですが、
「身につけられたら生産性が爆上がりするかも」
というワクワク感が生まれたので、迷わずVimを選びました。

### [教材] ドットインストール vim入門
Vimの使い方を何も知らなかったので、ドットインストールの動画をざっと見ました。全体の3割くらいが理解できたら、早速使い始めました。
Vimmerになると心に決めていたので、これ以降Vim以外のエディタは一切触らず、Vim一本でプログラミング学習を続けました。
最初はコードを打つのに時間がかかりましたが、1ヶ月もすれば、cloud9でコードを書いてたときと比べ物にならないくらい爆速でコードを書くことができるようになっていました。

### [教材] EverydayRails
スクールでRSpecを書く課題が与えられました。
この際RSpecを一通り書けるようになっておきたいと思い、EverydayRailsを購入してRSpecを体系的に学びました。1,2週間はRSpecのことだけをひたすら学び、ModelSpec, SystemSpec, RequestSpecなどを書く事ができるようになりました。

### [教材] ドットインストール docker入門
ローカル開発環境といえばdocker。スクールでもdocker環境での開発が義務付けられていたので、docker環境構築のやり方を調べる傍ら、ドットインストールでdockerの基礎を学びました。
dockerとは何か、Dockerfileとは何か、docker-composeがどのような役割を持っているのか、このあたりの概念をなんとなく理解することができました。


### [教材] Webを支える技術
「PUTリクエスト、POSTリクエストの違いは？」
「RESTfulとは？」
「ステートレス通信とは?」
エンジニア転職の面接でこのような質問をよく受けると聞き、webの基礎知識を学ぶために読みました。
面接で聞かれることは一度もありませんでしたが、読み物として面白く、webのことを広く学ぶことができました。

### [教材] リーダブルコード
言わずと知れた名著。スクールで推薦されたので読みました。
「コードを読みやすくする」ということに今まで意識がいってなかったのですが、この本を呼んで考えを改めさせられました。
エンジニアに転職した今でも、コードレビューをする際に呼んでいます。

## エンジニア正社員時代(エンジニア転職 → フリーランス独立まで)
### [教材] Amazon Web Services 基礎からのネットワーク&サーバー構築
入社した会社では、新人研修として技術書の輪読会が開催されていました。
好きな本を選んでいいとのことだったので、インフラの知識を身に着けたいと思い、サーバー構築の知識を身につけられる本を読みました。

IPアドレスとは何かという超基礎的な内容から、実際にAWSでサーバーを構築するところまで、幅広い知識を身につけられました。
### [教材] プロを目指す人のためのRuby入門
いわゆるチェリー本。Rails学習中の方にオススメのRuby入門書です。
オンラインサロンの方でも輪読会をしたいと思い、当時まだ読んでいなかったチェリー本を題材にして輪読会を開きました。
私が主催者になったため読まざるを得ない状況になり、結果的に全て読むことができました。
クラスやモジュールなど、今まで理解が曖昧だったところを学び直すことができ、Railsのコードを読む際にも非常に役立ちました。

### [ツール]Alfred
無料版を導入されている方は多いかと思いますが、私はWorkflowを使うために有料版を購入しました。詳細は省略しますが、Workflowはすごく便利です。

- 開発に必要ないくつかのツールを一括で起動する
- 職場からお得意先に行くまでの最速ルートをコマンド1つで検索する
- どこにあるかわからなくなったファイル、フォルダを検索して開く
- ウィンドウを最大化したり、左半分と右半分に分ける

などの操作を、ショートカットキーを駆使してキーボードだけでできるようにカスタマイズしました。
### [ツール]Dash
プログラミング言語の公式リファレンスを検索するアプリ。
「このメソッドって、どんな引数を入れればいいんだっけ...」
と思ったときは、Dashでキーワード検索すればそのキーワードに関するリファレンスを取ってきてくれます。
有料版(買い切り)を購入すれば、リファレンスをダウンロードできるようになるので、検索が爆速に。

### [ツール]tmux
vimをメインエディタにしていたこともあり、全ての開発作業をターミナル上でしていました。
ターミナルで複数のタブ、ウィンドウを開いて作業していたのですが、「Tattyさんの開発スタイルなら、tmuxというツールがオススメですよー」と職場の先輩からアドバイスを受け、tmuxを導入しました。

tmuxを導入した結果、ターミナルウィンドウのブラウジングがとてもスムーズになりました。
自分専用のカスタマイズをしたことにより、開発環境が一変。体感1.5倍くらいのスピードで開発ができるようになりました。
ショートカットキーも豊富で、コピペ作業なども少ない手数でできるようになります。

# おわりに
この他にも学んだもの、取り入れたものはたくさんありますが、この1年間で特にインパクトの大きかったものをご紹介いたしました。

これまでの学習履歴を振り返ってみると、
- 必要最低限のことだけ学んだら開発を始めてみる
- 開発をする上で必要になった部分だけ深く学ぶ
- ある程度開発スキルが身についたら、体系的に学び直す
という方針で学習していることがわかりました。

効率よく開発スキルを身につけたい、という思いが強かったんだと思います。

開発効率を上げるためのツールをガンガン導入しているところからも、この一年は作業効率を良くすることを一番に考えていたことに気づきました。

この内容がプログラミング学習中の皆様の参考になれば幸いです。