gracetory’s blog

東池袋にある合同会社グレストリのエンジニアブログです

35歳、未経験からエンジニアに転職して思うこと。

f:id:gre_yamaura:20181117232808j:plain

こんにちは、プログラマのyamauraです。

突然ですが表題にもある通り、私は35歳業務未経験にしてエンジニアの世界へ飛び込みました。
初めてのIT業である今の会社に入社してもうそろそろ5ヶ月を迎えますので、ここで一度振り返り、エンジニアというお仕事について思ったことや感じたことを業界未経験者の観点からご紹介します。

ちなみに業務未経験ではありますが一応、過去6年ほど個人開発者としてJavaやC#で10数本のアプリを開発・公開してきた経緯があります。
この経験が果たして業務の中で活かせるのか否か。
願わくば本記事が年齢関係なく、これから未経験IT業界へ挑戦する方々の参考になれば良いなぁと思います。

※冒頭ではプログラマという自己紹介をしましたが、厳密に言うと私の職種はサーバサイドエンジニアと呼ばれていて、WEBサービスやソーシャルゲームなんかのサーバ側の仕組みを担当することが主なお仕事です。

サーバサイドの基本スキル

内定のご連絡を頂いてから入社までは約1週間ほど時間がありました。
担当者いわく主な業務内容がゲームサーバ(PHP+MySQL)の実装ということで、準備期間中に学んでおくべきと言われたのがだいたい以下の項目。

  • PHP独自のオブジェクト指向プログラミングとCakePHPやLaravelといった定番フレームワークの考え方
  • MySQLについてACIDモデル・レプリケーション・トランザクション処理・インデックス・正規化・ロックレベルなどの理解
  • Linuxの知識やクライアントとサーバの違いについての知見など……

正直、1週間でどうにかできる分量じゃないと思いましたが、そんなこと言ってられません。
とりあえず評判の良い書籍を片っ端から購入して、その中で自分の状況にあった理解しやすいモノだけを重点的に読むことに。
一応、簡単にご紹介しておきます。

◆ php7+MariaDB/MySQLマスターブック
簡単な会員管理システムを作りながらPHPやMySQLを学んでいく内容。
Windows, Mac, Linuxの環境にそれぞれ対応しているため私はこの書籍を軸にわからない部分についてはネットで調べることでLinuxも同時に勉強しました。
読みやすいのですが誤字や表記の古い部分があるため、迷ったらサクっとネットで調べてしまうほうが良いと思います。

◆ おうちで学べるデータベースの基本
厚めの本ですが文字が大きくイラストも豊富で初学者の私でも読みやすかったです。
内容についても上記ACIDモデルの理解・レプリケーションなど抜けることなく解説されていて最初の学習にはオススメです。

◆ おうちで学べるサーバの基本
こちらも文字が大きくイラストも豊富で読みやすいので初学者にオススメ。
ですが扱っている内容が基礎知識ですのでどうしても実際に現場で使われる具体例が少なく、イメージは付きづらいかなと思います。


他にもいくつかの書籍を利用しましたが、初学者としてとっつきやすかったのは上記の3点です。
これらサーバサイドのプログラム言語・データベース管理システム・Linux・サーバの知識あたりがサーバサイドエンジニアの基本になるかと思います。

またあとで言及しますが、いま思い返せばこの時点でいわゆる情報技術そのものの基礎知識を学ぶことで、土台を固める作業に時間を割くべきだったかもしれません。

Macを使えないとダメかも?

入社して最初に行ったのは業務に必要なツールのインストールや各種webサービスのアカウントを作ったりといったPCの環境構築。
会社で使用するPCはMacなのですが、私はMacを触るのが20年ぶりだったので初っ端から大苦戦でした。

  • ツールをダウンロードしたは良いがインストールの仕方がわからない。
  • ローマ字と日本語入力の切り替え方がわからない。
  • そもそもマウス(マジックマウス)が操作できない。
  • Ctrlキーどこ行った。

メンターをしていただいた先輩社員に教えてもらいながらどうにかPCの準備が完了。
おっさんだからなのか、私の記憶ではMac=デザイナーの構図だったのですが、どうやら今はエンジニア=Macのようです。

HTMLとCSSとJavaScriptと……

さて、2日目からは研修がスタート。
まずはじめにPHPの分厚い技術書(独習PHP)を手渡され、それをひたすら読み込んでいきました。
理解しづらい部分は実際にコードを書いて動かして確認。それでもわからない場合はメンターさんにまとめて質問という形式。

1週間ほどかかって技術書をようやく読了。
PHPというプログラム言語にどんなメソッドや書き方が存在するのかを大体把握したところで、次に出された課題はフレームワークを使って掲示板を作成することでした。

せっかくなので準備期間中に勉強していたLaravelで掲示板を作ることに。
まずはせっせとノートに作りたい掲示板の機能やレイアウトを下書き。
そこから1週間ほどかかって、はじめの構想から大幅に下方修正した質素な掲示板が完成しました。

どうやら使いやすく、かつ見栄えの良いWEBサービスを作るにはPHPやMySQLの知識だけでなく、HTMLはもちろん、CSSやJavaScriptの知識も要求されるようです。
サーバサイドエンジニアの領域と完全に合致するわけではありませんが、このあたりの技術を学んでおくと1つの強みになりそうな予感がします。

基礎知識が大事

兎にも角にも掲示板が完成し、次に課せられたのは実際のゲームに使われている機能と同じ動きをするプログラムを作成するということ。
その前準備として「SSH接続するので認証用の鍵を作ってください」という指示を受けましたが、言っている意味がわからなかったので雨に濡れた子犬のような瞳でメンターさんの顔を見つめました。

研修が進んでいくにつれて、このあたりから英字3文字の専門用語がいたるところに登場するようになったと思います。
何か質問をするたびに新しい英字3文字が登場し、それを質問するたびにさらなる英字3文字が登場するという無限ループ。
ITに関する基礎知識の少なさから、質問するたびに質問する項目が増えるという悪循環に悩まされました。

ちなみにSSHとはセキュアシェルと呼ばれる安全性の高いプロトコル(データをやりとりする際の約束事)で、このSSHを使って外部にあるサーバ(リモートと呼ぶ)に接続することをSSH接続と呼びます。
今回はこのSSH接続の際にパスワードではなく秘密鍵と公開鍵という2種類のデータを使用して認証するために、その鍵を作れという指示でした。

結局メンターさんに鍵の生成方法を教えてもらい、真っ黒な背景に文字だけが浮かぶ、いわゆるコンソール画面にコマンドを入力すると特に問題もなくSSH接続に成功。
サーバサイドの開発では出来上がったプログラムのテストを自分の手元のPCではなくリモート環境で行いますので、これで開発する環境も整ったということになります。

プログラムを書くだけじゃないお仕事

その後もいくつか課題をこなし、気づけば入社からはや1ヶ月。
とうとう研修が終了し、業務としてソーシャルゲームのプロジェクトに参加することになりました。

詳細な業務内容については省きますが、参加してみてわかったことは、どうやらサーバサイドエンジニアのお仕事はただプログラムを書くだけじゃないということ。
プログラムを書く前には設計という工程がありますし、出来上がったプログラムをテストしたり、他の方が書いたプログラムを互いに読んで質を高めるコードレビューという作業もあります。
また、作成したプログラムをまとめて1つの機能としてゲーム内で利用できるようにする実装も行います。

他にもこういった「開発」と呼ばれる業務以外に、ユーザがいつでも安心してサービスを利用したりゲームを楽しむために必要な「運用・保守」と呼ばれる重要な業務もあり、プログラムを書いている時間は全体の1/3もないような気がします。
この部分については純粋にコーディングをしていたいという方にはギャップがあるかもしれません。

サーバサイドエンジニアの大変なこと

多岐に渡る業務の中で個人的に最も大変だと思っているのは(おそらくほとんどの仕事でもそうかと思いますが)問題が発生した際の対応です。
IT業界では障害と呼びますが、この間はサービスが停止して売上が発生しなくなってしまうため早期の復旧が必要ですし、場合によっては損害賠償で次の日から公園で暮らすことになります。
ですので障害が発生しないように普段の業務から徹底することは、サーバサイドエンジニアの宿命とも言えるかもしれません。

それともうひとつ、日々新しい技術が登場するIT業界ではそれらにキャッチアップするための情報収集や勉強が欠かせません。
ITに関する基礎知識をきちんと土台で持っている状態ならばそこまで時間を取られないのかもしれませんが、私はまだまだ勉強不足のためこの部分が課題です。

結局、どういうことなのか

ここまで私の実体験とサーバサイドエンジニアのお仕事について簡単にご紹介してきました。
結局何が言いたいかというと、ITに関する基礎知識が本当に大事だという当たり前のこと。

何事も基本知識が身についている人間とそうでない人間とでは成長速度が違いますし、対応力も段違いです。
特に学ぶべきことが多いIT業界ではそれが顕著かと思います。

ですのでもしこれからエンジニアを目指す方は、実際の業務で使うプログラム言語など技術ももちろん大切ですが、土台が出来上がっていないならまずその部分から固めるべきです。
まだまだエンジニアとして未熟な自分がいうと説得力に欠けますが、名言風に「知識は裏切らない」という一言に尽きます。

あとは一応ブログタイトルに未経験と書いているので、未経験のおっさんでも何とかやっていけてるよ!っと報告させていただきます。
(でも正直、4ヶ月以上働いているのに毎日の緊張と不安感がすごいです。知識と経験を積んでクールなエンジニアになりたい……)

f:id:gre_yamaura:20181117232749j:plain

最後に

今回のブログを書くにあたって、同じようなテーマのブログ記事をいくつか読みました。
みなさんが勉強内容や参考になるサイトを具体的に紹介しているなか、あえて外してみようと考えに考えた結果が「知識は裏切らない」という何処にでもある結論になってしまったのは少し残念です。

本当は実際の業務についてのトピックや先輩方の不思議な性癖なども書きたかったのですが、膨大な分量になってしまいますので、続きはまたの機会に回したいかと思います。
代わりと言ってはなんですが、最後に転職して良かった点をご紹介します。

◆ 土日祝日が休み
転職前に予想していたことの中で一番大きなギャップ。
休日出勤、泊まり込み当たり前の世界かと思っていました。
もちろん障害が発生すれば休みでも夜中でも対応しますが、そうならないように普段まじめに頑張ってます。

◆ 勤務中にゲームできるらしい
各々が普段の業務のお手すきの時間にアプリを作ったりしています。
なので参考にするということで仕事そっちのけでゲームできるらしいです。
らしいと言ったのは、私は通常業務で精一杯でまだそんな余裕ないからです。

◆ 仕事でゲームショウとかに行ける
仕事だけど仕事じゃないです。
新作ゲームやアクティビティで遊んだり、コンパニオンさんとかコスプレイヤーさんとかの写真撮りまくれます。

◆ 野菜ジュースとかカップラーメンとか常備
IT業界もしくは大きな会社にはあるあるかもしれませんが、ご自由にお取りくださいというやつです。
もし会社の扉が気づかないうちに溶接されたとしても、助けが来るまで生き残れると思います。

※上記はあくまで個人的な感想ですので、入社した会社がまるで違かったとしても苦情は送らないでください。


それでは、最初にも書きましたが今回のブログが年齢問わず、これから未経験IT業界に挑戦しようと考えている方々の参考に少しでもなれば幸いです。