異業種からの未経験エンジニアが勉強していること

##はじめに##
　現在、わたし自身が異業種からの実務未経験で転職活動をしていることもあり、企業の方や他の未経験から転職活動中のエンジニア志望の方などの話を聞いて、他の人はこんな勉強をしていますよー、という記事です。自身の学習記録となります。自身の観点で役に立つのかどうか、実際はどうなのか、ということを現役の方に聞いたり、自身で調べた内容に基づいて述べています。（つまり根拠は実質なし）
　実際選考実績などはありませんので、こういう勉強をしている人がいるよ。と参考程度にごらんください。また、わたしが通っている職業訓練校のカリキュラムにも一部触れていますので、未経験からの転職で、職業訓練校の受講を視野に入れている方の、参考にもなるかと思います。

##もくじ##

- 着手した勉強内容
- 現在の勉強内容とその方法
- 他の人から聞いた勉強方法


##着手した勉強内容##
　わたしが未経験からまず勉強を始めようと思って着手した勉強の項目です。進めていく中で習得を捨てたもの、範囲を絞ったものなどありますので、そうしたことも含めて記載していきます。

- 資格試験
- Linux基本操作
- Linuxネットワーク構築
- データベースについて
- 職種について
- 言語の勉強

###資格試験###
　はじめにてをつけたのは資格試験です。IPAがやっている[基本情報技術者試験(FE)](https://www.jitec.ipa.go.jp/1_11seido/fe.html)です。数字なんて、日常的に目にするもの以外、学問的には文系を選択した高校２年生の時から全く触れておらず、前職でも触れていなかったので前提知識もゼロ。そういった理由から、知らない事象を知らない単語で説明されている状態で、なにからなにまでさっぱりでした。
とりあえず一番わかりやすいと評判の[キタミ式イラストit塾 基本情報技術者](https://www.amazon.co.jp/%E3%82%AD%E3%82%BF%E3%83%9F%E5%BC%8F%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88IT%E5%A1%BE-%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85-%E5%B9%B3%E6%88%9031-01%E5%B9%B4-%E6%83%85%E5%A0%B1%E5%87%A6%E7%90%86%E6%8A%80%E8%A1%93%E8%80%85%E8%A9%A6%E9%A8%93/dp/4297102110)という書籍を購入し、知識をインプットしています。また、基本情報技術者試験の基数変換やネットワーク基礎などは訓練校のカリキュラムにも含まれており、訓練校側も資格取得を強く推奨しています。

####現役エンジニアの人に聞いてみた####
　とりあえず資格試験の勉強から始めたものの、この資格は実際に約に立つのか？　という部分が大変疑問でしたので、セミナーや説明会などを利用して現役エンジニア、企業の人事の方に話を聞いてみました。

####実務には役に立たない####
というのが、現役の方の答えでした。
　具体的には、「まったく役に立たないわけじゃないけど、資格の勉強をするなら、もっと実務的な勉強をした方が役に立つ。そもそも基本情報技術者試験は過去問をひたすら解けば合格できるレベルの試験なので、その資格を持っている人が本当にその知識を身に着けているかは怪しいところ。IT技術者ではない人が人事担当なら影響はあるかもね。」（意訳）
とのことらしいです。

　そして説明会で企業の人事の方に伺ったところ、「ウチは資格がなくても全然大丈夫。もちろんやる気という面では評価するけど、実務においては必ずしも必要ではないよ。本当は技術手当とか、資格の補助制度とかもつくりたいけどなかなか難しくてね。もちろん資格ある子は評価に影響あるよ」（意訳）
とのことらしいです。

上記は単なる一例で、求人票には資格取得による技術手当ありの企業もありますし、エンジニアの方や人事の方の言う通り、ある一点的にはアピールになるのかな？　というのがわたしの印象です。

###Linux基本操作###
　続いてはLinuxの基本操作です。といってもこちらは自身で選んだわけではなく、わたしが現在通っている職業訓練校のカリキュラムのひとつです。基本的にはコマンド操作を覚えるというだけで、Linux環境で開発などもせず、とりあえず操作に慣れるということだけのものでした。
　具体的にはLPIの[Linux標準教科書](https://linuc.org/textbooks/linux/)をさらっとなぞる程度のものです。

####カリキュラム導入は企業の要望####
　職業訓練校ということもあり、基本的には企業に就職することが主目的となります。その中で、ハローワーク経由で就職する受講生もいらっしゃいます。Linuxがカリキュラムに導入されたのは、そういったハローワーク経由で受講生が就職した企業側からの要望のようです。未経験からの就職であれば最低限触っていてほしい、との要望でしたので、Linuxを触ることは、少なからず必要な勉強なのではないか、と個人的におもっています。（特に職種さえ定まっていない場合なら）
　LinuxというOSはMAC OSと同じUNIX系ですし、開発環境においてもMAC OSを使用しているエンジニアの方は多い印象ですし。（実際はわかりません）


###Linuxでネットワーク構築###
　ネットワーク構築も同じくカリキュラム内のものです。基礎知識から実際に最低限の構築（DMSサーバ、webサーバ、mailサーバ）を行いました。基本的にはサーバサイド側の技術だとは思いますが、ネットワークの構築がないとそもそもプログラムが作動しないという環境も多いので、最低限の知識を、構築しながら体系的に理解できるという点でもよいかと思います。


###データベースについて###
　Linuxと同様、カリキュラム内のものです。リレーショナルデータベースを座学と実習で学びます。データベースは業務系であれば必須という話をよく聞きます。しかし、書籍などで学習しようと思っても、なかなかわからないというのが書籍を購入してから後悔したわたしの感想です。実務前に実際につかえるというのは強いかと考えています。とはいえ期間は一瞬レベルですので、学びました、とアピールするにはカリキュラムだけでは厳しいかと思います。こちらもLinuxと同様企業様からの要望のようです。

###職種について###
　いざ就職のことを考えようとなった時、就職支援サイトなどをみると、プログラマーでもかなり細分化されています。自分がやりたいことができるのはどれなのか、実際の実務内容は？　未経験でも入りやすいのはなんなのか。そういった知識が全くない状態で転職しよう！　としていました。youtubeやコラムなどを読んでわかった気になっていたわけです。慌てて業界分析を行いました。カリキュラムにはそういった職種の説明はなく、ふんわりとネットワーク系と開発系程度にわかれている程度で、その説明もありません。自分で調べるしかないわけです。具体的な調査方法については勉強方法の節で記述します。


###言語について###
　おそらくほとんどの方が躓くのが何の言語を勉強すればいいんだろう？　ということだろうと思います。具体的になりたい職によって必要な言語は異なりますし、一つの言語だけで仕事ができるわけでもないようです。いろいろと調べてもわからなかったので、こちらも現役の方に伺ってきました。ちなみにカリキュラム内の言語はJavaです。

####現役エンジニアの方に聞いてみた####
　まずおっしゃっていただいたのが、現役の方が現在実務でつかっている言語です。伺ったのはweb系のエンジニアの方でしたので、Ruby on Railsなどのweb系言語を複数。企業によって使用言語は異なる、という前提でニーズの高い言語、人気の言語、汎用性の高い言語を教えていただきました。まず、ニーズの高い言語はデータベースに近ければ近いほどニーズが高くなるとのことです。ツールとしてではなく、データ分析などですね。明確な言語は答えていただけませんでしたが、当てはまるとしたらPythonなどでしょうか。次に人気の言語。これは先にも述べたPython、Java含め、Goなどの比較的新しい言語が多いようです。そして汎用性が高い言語はJava言語、とのことみたいですので、どの言語からやればいいか迷っている方はとりえあえずJava言語から着手するのもいいかと思います。

##現在の勉強内容とその方法##
　上記の着手した項目に目を通していただけた上で、現在どのように学習しているかについてまとめさせていただきます。現在の学習内容は基本的には上記に挙げた内容のまま、学習しています。異なるのはどれだけリソースを割いているか。勉強方法とともに述べさせていただきます。

####資格取得####
　基本情報技術者試験については、あまりリソースを割いていないのが現状です。全くやめてはいません。役に立たないだろう、という現場の意見を実際に聞いても完全にあきらめないのはなぜか？　それは異業種からの転職故の知識不足を少しでも補うためです。情報系の学校からの新卒や、文系からの新卒でも変わりませんが、基本的には異業種から転職という点で大きく遅れて歩みだしているのが現状です。当然実務で学べる知識はなく、訓練校でカバーできる範囲は（失礼ながら）たかがしれています。そのギャップを少しでも埋めるための内容理解のために勉強は続けています。学習方法はテキストを用いてわからない単語は即ググる。

####Linux含めたその他カリキュラム####
　カリキュラム内容についてはまとめて記述します。これは復習あるのみ。役に立つ立たない関係なく、身に着けやすい環境にいるのだから最低限ここだけはキープしていたいというのがあります。当然復習ですのであまりリソースを割いてはいません。学習方法はカリキュラム配布テキストの復習と関連書籍を読む。学習した内容を前提知識としたうえで勉強会やセミナーなどに参加をしています。そして時々Qiitaに吐き出して間違って覚えている内容の訂正をさせていただいています。

####職種調査####
　基本的には就職支援サイトやgoogle先生に聞く形をとっています。しかしそれだけではどうしてもイメージがわかないので、実際の各項目で検索を行い、その企業から何をつくっているか、などを確認する。現役エンジニアの方に話を聞いて、把握できない部分を埋めています。

####言語の取得####
　選択した言語はJava、JavaScriptです。HTMLとCSSは趣味でwordpressをいじっていたり、fc2で自身でデザインをしていたりするので基本は抑えています。ですので汎用性が高く、他の言語を学習する際にも理解が深まりやすい最初の言語としてのJava、ウェブ上でプログラムを作動させるJavaScriptを選択しています。学習方法としては無料で学習できるサイトが多くありますのでそちらを利用させていただいています。同時につくりたいサービスを決め、いろいろ調べながらそのサービスを実際につくりあげてみる。ということなどもしています。技術書を買ってみても、実際に動かしてみないと楽しくない、イメージできないという高いハードルがありますので、初めてプログラミングに触れる方はまずは動かしてみる！をしてみるとモチベーションが高く保てます。

####勉強方法まとめ####
　基本的には動かせるものはまず動かす！　わからないことがあったら調べる！　それでもわからなければわかる人に聞く！　それができたら技術書もなんとなくイメージがつきやすくなります。そしてできれば自分でまとめたり、このようにqiitaに吐き出したりしてみると、自分的にはとても理解が深まります。


##他の人から聞いた勉強方法##
　どこの説明会に行っても、セミナーに行っても言われるのはアウトプットしろ！　ということです。ブログで書くのもよし、Qiitaで記事を作成するのもよし、実際に作品をつくってみるのもよし。特に実際に作品をつくっているとポートフォリオとして企業に提出する際に未経験であっても必須レベルとのことですので、とりあえずでもなんでもやっていた方がいいかと思います。
　では、他の未経験からの転職を目指す方はどういう勉強方法をとっているのか。

　職業訓練校での学習で多いのは資格の取得勉強です。というのは置いておき、実際に勉強会などで出会った方に聞いたものを述べていきます。

####多いのはやっぱり作品作り####
　最も多かったのは実際に作品をつくっている、という方です。つくっているうちに知識も自然に身につくそうです。完璧は技術的に厳しいから、自分のできる限りの技術で、期限を決めてつくる。訓練校で一番多い、資格の取得勉強をされている方はほとんどいませんでした。

　次に多いのがメンターを利用して勉強する方法。知り合いの現役エンジニアの方などに聞きたいときに聞ける環境をつかって勉強する。プログラミング版家庭教師のようなものですね。知り合いにいなくてもメンターを探せるサービスもあるので、わたしも利用してみようかな？　と考えています。

##まとめ##
　わたしの勉強方法と実際に出会った方から聞いた勉強内容について述べさせていただきました。勉強方法はひとつではないと思いますが、とりあえず人に教えられる程度であれば習得したと考えてもいいのではないでしょうか。学習したことがものになったら、アウトプットするのがなによりも大切ではないかと思います。技術があればハッカソンなどで様々な方と一緒に作品をつくることもできますし、未経験であっても勉強会を主催することなどもできます（人が集まるかはともかく）。これから異業種から未経験でエンジニア転職されるという方の参考になれば幸いです。また、もっとこうした方がいいよ！　という勉強方法、勉強内容がありましたら教えていただけるとありがたいです。