本記事のテーマ
未経験からエンジニアに転職して大変だったこと
読むべき理由
未経験から転職した際に、本記事の内容について学習していなかったことを後悔した。
筆者について
2020年の夏頃から学習を開始、2021年1月頃に転職活動をして、同年3月から自社開発のWeb系エンジニアとして勤務しています。この記事を執筆するタイミングで2ヶ月程度の業務経験になります。
私の能力ですが、スクールに行ったりして誰かから教えてもらったことがないので、技術も知識もあまりありません。勢いだけで未経験からIT業界に飛び込みました。
実務未経験から転職すると覚えることが多くて大変です。しかし、事前にどんなことを学習しておく必要があるか知っていれば、ある程度対策が打てます。私が入社前に知っておきたかったなーと思うことをまとめてみました!
もちろん、企業によって求められることに差異はありますが、今回は更にどこでも使う基本技術だと思うものを選定してピックアップしてみました。エンジニア転職をされる方は、是非ご参考にしてみてください!
※今回はプログラミング以外で必要な知識をまとめてみました。
「エンジニアはプログラミングができれば良いんでしょう??」と思っている方は、ここらで目を覚ましましょう。そう思っているのは、近年の過度なエンジニア広告に惑わされているだけの可能性があります。
それらは否定しませんが、本当に「プログラミング言語だけ学習していればエンジニアとしてやっていけるのか」というと恐らくNO!!です。
なぜなら、過度なエンジニア広告に感化され、プログラミング言語だけを勉強して転職した私が苦労しまくっているからです!(ドン)
そういった観点で読んでみてください!
それではいきましょう!
gitのブランチを使った開発

gitでバージョン管理を使うことによって、各個人が安心して効率的にチーム開発を行うことができます。もし、gitがなければ今Web上に配信されているコンテンツに変更を加える際に、ローカル開発から一気に本番環境へアップすることになり、事前の確認が不十分なままリリースすることになるかもしれません。それでもしバグが見つかったらgitのバージョン管理を行っていないと元の状態に戻すのも大変ですし、どの時期の変更により発生したバグであるのかを探すのが困難です。
こういった問題が起きないように、本番用ブランチ・テスト用ブランチ・開発用ブランチなどに分けて、それぞれのフェーズでテストや検証をしながら、開発からリリースまで持っていく流れで運用しています。
また、gitには各企業の独自の運用ルールがあります。入社してから運用ルールは教えてもらうことになると思いますが、最もポピュラーな運用方法として「git flow」といものがあるので、一度調べてもらえればgit初心者にもイメージが湧くのではないかと思います。
私は転職前は完全独学で学習しており、個人開発しかやったことがなかったので、ブランチをあまり切ったことがありませんでした。「ブランチを自分で切って、自分でコンフリクトして修正する」みたいな経験をしておくと、転職後慌てないので少し気が楽になると思います。
また、gitの基本コマンドは必須なので覚えておくべきです。クライアントツールを使ってGUI操作をすることもあると思いますが、コマンド操作の基礎を知っておくことは何かと役立ちます。思いつくものをあげると
git -add, -commit, -push, -branch , -stash, -status, -clone, -log, -pull, -merge, -diff, -checkout
などがあり、これらにはオプションで更に細かく処理の指定ができます。また、誤った操作をしてしまった時に、取り消すコマンドも存在します。(リモートリポジトリにpushしたものを取り消すコマンドなど)
gitは便利なのですが、間違うと大事故になる可能性を秘めているので、エンジニア転職前に勉強しておくと安心です。
SQL

SQLは何を使うのかは企業によって異なりますが、基本的なSELECT, INSERT, UPDATE, DELETEの考え方は変わりません。実際に手を動かして理解しておきましょう。
その中でも最も使用頻度が多い処理はSELECT文によるデータ抽出になります。MySQLを使っている私の場合だと下記のようなコマンドはよく使用しています。
WHERE : 抽出条件
GROUP BY : グループ化
ORDER BY : ソート順の並び替え
LIMIT : レコード数の指定
SUM, AVG, MAX, MIN, COUNT: 集約関数
BETWEEN : 範囲指定
JOIN ON : テーブル結合
趣味などで開発している開発者本人ならどのテーブルに何のカラムがあるかは把握できていると思います。しかし、勤めた会社の誰かが作ったテーブルを見て、何の情報があるのか、初心者が即座に把握することは困難です。そこにSQLの基礎も身についていない初心者だったりすると、頭がパンクします。
特に初心者がSQLでつまづき易いと思うのは、テーブル結合の構文ではないかと思います。実務では、AテーブルとBテーブルを結合させて、欲しいデータだけを抽出させる!のようなことをよくやります。テーブルの結合は何度か書くことで、やっと慣れてくるので学習しておいた方が良いです。
例を出すと、INNER JOIN(内部結合)・LEFT JOIN(左外部結合)の挙動の違いは分かりますでしょうか?独学で学習していた私はあまり意識せずにINNER JOINばかり使っていました。
INNER JOIN はAテーブルの指定した値をとってきて、ついでに結合する条件に一致したBテーブルの値もとってきて1つのテーブルにしてね。といった挙動をします。結合する条件に一致しなかった値は削除されます。
これに対してLEFT JOINも同様にテーブルを結合して1つのテーブルにしますが、Aテーブルにしかない値は全て表示させ、更にBテーブルの結合条件に一致するものは表示して、一致しないものはNULLと表示させるといった挙動になります。
このようにJOINにも様々な使い分けがあり、抽出される値が異なるのでしっかり学んでおく必要があります。詳しくはググって、沢山問題を解いてみてください!
実務では、一つのクエリ文でこの結合が2個使われていたり、if文で条件分岐したり、同じカラム名を使っていて結合するとエラーが出たり、何十行もクエリ分が続いていたりと、、、
初めはナメていましたが、SQLは勉強するとめっちゃ面白いです!
Linuxコマンド

CLI(コマンドラインインターフェース)に慣れておきましょう。あの黒い画面ですね!(実際色は変えられますが…)
ローカル環境でアプリ開発をする場合には、ドライブやFinderなどでディレクトリ構造を確認しやすかったり、Linuxコマンドを使わずに新しいファイルを作ったりもできます。しかし、実際にアプリをサーバーに設置したりすると、基本的にLinuxコマンドで操作することになります。Linuxの理解は避けては通れないと思うので勉強しておくのが良いです。
また、常用のコマンドは調べずとも使えるくらいに馴染ませておきましょう。実務2ヶ月のペーペーである私がよく使うコマンドを例に出すと
ls, pwd, cd, mkdir, touch, cp, rm, mv, cat, grep, >, >>, xargs, |(パイプ), find, diff, chmod, history, man, ssh
これらは間違いなく使用することになるので必須です。特に実務に入ると検索系のコマンドを使えないとディレクトリに到達するのに手間取ります。自分で開発したものならディレクトリの構造も頭に入っていると思いますが、良く分かっていない大規模開発においてcdコマンドを叩いて一つずつ探していくのはやばいです。。汗
基礎IT知識
未経験から転職して最も困ることは、自分の知識不足で先輩との会話がままならないことです。一生懸命説明してもらっても、IT用語の意味が分からないと仕事になりません。下記の用語については最低限のベースだと思うので理解しておくことをお勧めします。
・サーバーにはどのような種類があるか
・サーバーとクライアントの処理のイメージ
・Apache, Nginx
・ディストリビューション
・VPS
・プロトコル(http, https, ftp, ssh, smtp, pop, imap)
・IPアドレスとDNS
・ポート
・メモリ, キャッシュ
・ストレージ
・CPU
・暗号化方式
・セキュリティ関連
知識の深さレベルとしては基本情報技術者の試験レベルは知っておいて損はないと思います。転職の面接時には、ITパスポートレベルまで勉強しておいて、内定をもらってから入社までに基本情報技術者の勉強をするという作戦もありだと思います!
かく言う私も基本情報技術者の資格は取っていません。資格は取らなくても、内容の理解はしておいた方や良いのではないかというのが私の見解です。
SSH接続
せっかくサーバーを立ててアプリを開発したのに、悪意のあるユーザーが勝手にログインしてきて、サーバー内を荒らされると困りますよね。。
SSHは Secure Shellの略で、決められた人しかサーバーに入れないようにして安全性を高めているサーバー接続方法です。
SSHの認証方法には二つあって「パスワード認証方法」と「公開鍵認証方法」です。私が今回知っておいた方が良いと思うのは後者の「公開鍵認証方法」になります。
公開鍵認証とは簡単に言うと、「クライアント側とサーバー側で鍵を作ってお互いに事前に鍵を保管しておき、その組み合わせが一致していることをサーバー側確認できた時に、ユーザーはサーバーにログインできる」という仕組みです。
この仕組みは理解できれば簡単ですが、入社直後の初期の接続設定でやる可能性があるので、知っておいた方が良いと思います。私は突然、暗号鍵とか、公開鍵とか、configファイルを設定して〜とか、権限エラーとかにぶち当たってパニクりました!
興味を持った方は、是非調べて見てください!結構面白いです!
エラーログの確認

基本にはなりますが、エラーログの確認方法を知らないと困ります。アクセスログやエラーログの出力先が分かっていればエラーの解決時間が短縮されますし、詰まったときに解決の糸口になります。PHPやLaravelでは設定ファイルでエラーをブラウザ上で表示するようにできますが、ApacheなどのWebサーバー側のエラーだったりすると、エラー文の詳細が書かれておらず不親切だったりします。
エラーログの確認方法を調べて、確認する癖をつけておきましょう。
(番外編)質問の仕方

質問の仕方はどんな仕事にでも悩むと思いますが、エンジニアは特に難しいと思います。初心者のうちは用語の意味も分からないので、どこで質問すべきか、どれくらい自分で調べてから質問すべきかなどを悩みます。
更に現在はコロナウィルス拡大の影響もあり、リモートワークになっている企業は多くなっています。対面だとサッと聞いて解決できることが、リモートだと聞くのが少し難しかったりします。リモートワークでも画面の共有をしながら質問することはできますが、やはり説明の難しさや質問するタイミングの難しさなどは感じています。
ついつい、「1人でググりながら悩んでいたら30分経過していた」なんてことはよくあります。進捗が少なくて焦る日も少なくありません。思い切って、どれくらい悩んだら質問すべきかを先輩に聞いてしまうのもありだと思います。
1人で解決できればもちろんそれが良いのですが、初心者のうちは調べるために必要な情報をそもそも持っていない可能性があるので、質問の仕方は是非とも考えてみてください。
プログラミングのエラーであれば、
「○○を実装したくて、○○をやったけど、エラーログがこうなっている。だから、〇〇が悪いと推測して、○○のような対応しようとしたが、解決できない。」
みたいなイメージでしょうか?こういった話をするためにもエラーログを調べる力は最低限身につけておかなければなりませんね。
以上です。
いかがだったでしょうか。エンジニア転職後は大変な毎日が続きますが、日々できることが増えていく感覚は非常に面白いですよ!エンジニア転職に役立つ情報を発信しているので、良かったらご参考にされてください!
コメント