Ruby
AdventCalendar
初心者
RubyOnRails
adventcalendar2018

30代未経験からWEBエンジニアへなった私の1年間の学び

食べログAdventCalendar始まるよ〜。

こんにちは、食べログのDevOpsチームに所属する@mochikichi321です。

食べログAdventCalendar1日目は、「30代未経験からWEBエンジニアへなった私の1年間の学び」をお届けします。

勢いで自らトップバッターを名乗り出ましたが緊張しますね…。

さて、

異業種からエンジニアへ転職して1年が経ちました。(あっという間でしたね)

エンジニアへ転身する際は、どんな世界なんだろうというワクワク感と、全くの畑違いだった私がエンジニアとしてやっていけるのだろうかという不安があったのを覚えています。

いろいろありましたが、周りの皆さんのおかげでなんとかエンジニアとして仕事させていただいてます。

エンジニアになりたての頃には、本当にわからないことだらけで毎日知恵熱が出そうでしたw

エンジニアになりたての頃に私がつまづいたところ、苦労したところなどや、エンジニアの世界ってこんなところというのを私の主観でご紹介します。

これからエンジニアを目指される方、エンジニアになりたての方の参考になれば幸いです。


こんな方に読んでいただきたい


  • 未経験からエンジニアを目指している方

    エンジニアになるとこんな世界なんだという参考に


  • エンジニア歴の短い方

    ご自身の振り返りをするきっかけに(もう年末ですしね)


  • 未経験やエンジニア歴の浅い方の採用や育成をされている方

    異業種経験者やエンジニア歴浅い人はこんな風に見えてるんだなという参考に


※あくまでも、私の主観なので参考までに


経歴

高専卒業(プログラミングはやってない) → 大手メーカ9年勤務 → 息子誕生 → 半年間の育休中にプログラミング独学(Ruby on Rails) → 30歳未経験からエンジニアへ転身 (関西から上京)

いろいろ苦労した転職活動のエピソードなどはブログでも紹介していますのでご興味ある方は御覧ください。(エピソード1~4まであります)

30代未経験からIT / Webエンジニアへのリアルな転職体験談

未経験からエンジニアへ転職した際のロードマップはこちら↓

全くの未経験からIT/Webエンジニアに転職した私(30代)のロードマップ


1年間でやったこと、できるようになったこと

入社してからやったことをざっくり紹介します。


Rails Upgradeの取り纏め


変更点の影響評価


  • リリースノートや、ChangeLogを元にシステムへの影響を評価し、対応

  • Railsのソースコードを見るので、かなり知識が深まる。


テスト環境構築


  • 各開発チームが新バージョンでテストするようのブランチを用意


各開発チームのテスト進捗確認、調整


  • 全体のスケジュールとリスクマネージメント


テストで出た例外、警告に対する対応方針検討


  • 大量に同様の例外、警告が出ている場合は、一括で対応するか、方針を決めて指示


苦労した点とそれに対する対応


  • 大規模サービスなので、一つの事象が広範囲に影響する。

  • 局所最適ではなく、全体最適となる方法を選ぶ。複数チームにまたがるため連携が難しい。

  • こちらから積極的にコンタクトを取り、困っていることやリスクを早めにキャッチし、対処した。


食べログ流 - Rails Upgrade Practices

ここではあまり詳しく記載しませんでしが、食べログ流Rails Upgrade Practicesを下記イベントで紹介予定です。(@kamina_zzzさんが)

より詳しく知りたい方は是非参加してみてください。

項目
説明

タイトル
食べログ流 - Rails Upgrade Practices

概要
Rails のバージョンアップに食べログではどのように向き合っているか、実際のプロジェクト事例を交えながらGood / Bad ノウハウをご紹介します。

日時
12/8(土)10:40〜@トラックA

URL
Rails Developers Meetup 2018 Day 4 Nouvelle Vague


パフォーマンスチューニング


  • 高トラフィックなので、レスポンスタイム悪化の影響も大きい。

  • ソースコードも大量にあるため、まずは原因箇所の特定が難しい。

  • プロファイリングなどを活用して効率的に原因箇所を特定し、対応。


コードレビュー


  • 正しく動くかはもちろん、可読性(わかりやすさ)などをチェック。

  • 他の人の書き方を見て良い書き方をキャッチアップ


インフラ案件対応


  • 社内管理用のサーバのリプレースを対応中

  • システム全体の構造を理解(結構難しい。。。)


社内勉強会開催


Rails、Rubyのバージョンアップ変更点の勉強会


  • 数ある変更点の中で、どれを紹介すべきか選定に苦労した。

  • 既存コードに影響のある、これは守ってほしいという事と、これ知っていれば開発がラクになるという事をピックアップして紹介。

  • 言葉では伝わりにくいのでサンプルコードを載せてイメージしやすく工夫した。


プロファイリングを用いたパフォーマンスチューニングの勉強会


  • 見せた方が理解が早いので、概要を説明したあとに、その場でプロファイリングを実践して見せた。


やらかし談

上記はやってきたこと(できたこと)ですが、当然いっぱい失敗してきています。失敗から学ぶことは多いです。


gitめちゃくちゃ事件(3回くらい)

とにかく、最初はgitがよくわからなくて、修復しようとしてgit resetとかgit rebaseとか乱発して開発環境のgit履歴が意味不明なことになって結局force pushするみたいなのが何回もありました。

また、これは入社する前ですが、自宅PCでデスクトップ配下全体をgit管理下においてしまい、pushしてなぜかローカルもgitリポジトリもファイル全部間違えて消してしまって、データ全部吹っ飛ばしてしまいました。。。


障害発生させちゃった

自分が書いたコードが原因で本番環境(サービス)で障害を発生させちゃいました。

障害発生時間は短時間だったけど、影響範囲はかなりのアクセス数でサービスの大きさと責任を痛感(ガクブル)。。。


知っておくと得するポイント


プログラミング言語そのものや、フレームワークのソースコードは勉強になる

フレームワークって便利ですよね?こうやればこうなるというのを暗記するだけでもとりあえず作れます。

でも、ソースコードを見にいくと内部でどういう処理が行われているかがわかります。

へぇ〜なるほど〜と思うようなことがよくあります。内部実装を知っていると単純に暗記するだけよりも理解が深まります。

それに、バグが発生したときの原因究明にも役立つこともあります。


ペアプロ(ペアプログラミング)

これは、かなり助けられました。

全くもって初めてやることなんかは、せっかく丁寧にいろいろ説明してもらっても(一生懸命聞いていたとしても)、わからない言葉や概念が多すぎてなかなか理解できませんでした。

「なにがわからないかが、わからない」状態ですね。

そんなときは、時間を作っていただいて、実際に横についてもらって「〇〇というコマンドを打って」と一つずつ順を追って、実際に手を動かしながら教えていただくと、おぉ〜なるほど〜となります。

逆に、やってる作業を横で見させてもらうのもおすすめです。

「え?今なんでそんなことをしたの?」とか、「今のショートカットコマンド何使ったの?」みたいな感じで、発見がいっぱいです。

早すぎてついていけないときはペースを落としてもらうようにお願いしましょう。(言わないと大体ついていけませんw)


コードレビュー

コードレビューには(めんどくさいとか思わずに)積極的に手を上げましょう。

他の方が書いたコードをレビューすることはかなり勉強になります。

「どういう意図でこう書いたの?」とか、「これはこうだと思うんですがいかがですか?」とか。

間違っててもいいので"質問welcome!"なカルチャーだったのでいろいろ勉強させてもらいました。


思ってたんと違うかったこと


Ruby on Rails以外のスキルがすごく幅広く求められる

これは、独学でプログラミングを学習していた際と、実際の開発現場でのギャップで一番大きかったところですね。

学習している際は、プログラミング言語やフレームワークを習得すればサービス作れるしOKだと思ってました。

入社してから、ネットワーク系の基礎がまったくわかってないことに気づきました。

もともと、学校で”情報処理”のようなものを学習してきて、そこからエンジニアになっている方にとっては当たり前の知識でも、異業種からエンジニアになった方はそこのネットワークの基礎などの知識が抜けている可能性が高いです。

(プロトコルって何?ポートって何?Linuxって何?みたいなこと)

参考:エンジニア初心者向けネットワーク用語の基礎


異業種出身の私から見たエンジニア業界の素晴らしいカルチャー

長くなってますが、これは私が異業種から見たエンジニア業界の素晴らしい!と思った点を紹介します。

もちろん、会社によるところはあると思いますが、交流会など他社のエンジニアからも聞く内容なので大きくずれてはないと思います。


シェアの精神

オープンソースでだれでも無料で使える言語、フレームワークはもちろん、ノウハウやナレッジもインターネット上でかなりシェアされています。

エンジニア業界の方なら当たり前と感じるかもしれませんが私は、このカルチャーに感動しました。

なぜなら、私はもともと大手製造業に勤務しており、その業界はかなり閉鎖的でした。

何か新しいことをしようとしても、セキュリティが、ノウハウがと言って他社とは情報がシェアされない。

一方、エンジニア業界は、「車輪の再発明(他の人が一度作ったものと同じものを一から作る)」を避けようというカルチャーがあるように、ノウハウなどはシェアされて当然という感じです。業界全体として、世の中に良いサービスを提供していこうとカルチャーが私は好きです。

エンジニアの交流会や勉強会もオンライン、オフライン含め無数にあり、気軽に参加できるようになってきました。

以前の業界では他社との技術交流会なんて行ったことないです。(あっても表面的なものばかり)

他業界の批判ではなく、私はエンジニア業界のカルチャーが好きだということです。


スーパー合理主義

合理的なことは積極的にやるが、非合理なことはやりたくない。

「根拠はないけど、とりあえずがむしゃらに頑張れ!!」みたいな、根性論は嫌われます。

何のために?を意識する人が多いので議論も進めやすいです。

機械的なルーチンワークがあって、「これ自分でやる必要ないよな」と思った際に、ただ文句を言うのではありません。

「めんどくさいんで、スクリプト(自動化プログラム)書きました。」ですよ。「ちょーCOOL!!」って思いましたw

エンジニアに依頼する際は、「こうすることでこれだけ工数減らせますよ」って説明すると喜んでやってくれると思いますw


属人性を持たない

もちろん、高度な部分はどうしても属人性(その人じゃないとできない)が出てきてしまいますが、大部分はだれでもできるように仕組み化されています。

マニュアル化もそうですし、実行スクリプト(これを実行すると自動でこういう処理ができる)とかもそうですね。

だれかが急遽体調不良でお休みになっても、「気合で出てこい!」みたいなことはなく、他の方が代わりにやります。

休暇が取りやすい、あぁ、なんて素晴らしいんだ。


ヒューマンエラーはシステムで防ぐ

これも「すげーっ!!」て思ったことです。

業務してたら当然ヒューマンエラーって発生しますよね。(人間だもの)

じゃあ、今後の対策をどうするかと考えると思いますが、そのときに、ヒューマンエラーを起こした人が今後注意するのはもちろんなのですが、人が変わったり、状況が変われば再発する可能性は残ります。

以前の業界での対応策はどうしてたかっていうと、「ダブルチェックをする!!」です。

一人が抜けてももう一人見ていれば大丈夫だろうという精神。でも、やっぱり抜けちゃうんですよね。

じゃあ、次にどうするか?

「トリプルチェックをする!!!」です。

冗談のように聞こえるかも知れませんが、本当でした。

結果、無駄にやる作業が増えて、時間がなくなって他の箇所のチェックが甘くなり、別のところでミスが発生するという悪循環。。。

私は品質管理という立場だったので、「いやいやいや、しくみを変えろー!」と常に言ってましたw

エンジニア業界はどうか。そんなときは、「じゃあ、この動作をしようとしたら警告がでるようにシステムを改修しよう」となるんです。人間はミスをするものという前提なんですよね、実にすばらしい。


オタクである

オタクってあんまり良い印象ないかもしれないですが、ここで言う「オタク」は好きなことに夢中な人を指しています。

プログラミング技術が好きなオタクはやはり、スキル習得が早いですね。。。

自分が好きで興味あるから勝手にどんどん調べて勉強して詳しくなる。これって、簡単なことじゃないですよね。

カメラにしろ、アニメにしろ、車にしろ、好きなことを見つけて没頭するって素晴らしいですよね。

私はオタクになりきれてない気がするので、見習いたい。。。


まとめ

初めは本当にわからないことだらけで毎日知恵熱出そうで結構キツかったです。

でも、プログラミング自体はすごく楽しいし、周りの方に恵まれたのもあり、少しずつだけど着実に力が付いてきているのを実感できるのは嬉しいです。

まだまだこれからというレベルだけど、エンジニアとしてスタートを切れたし、もっと成長したいと思える。

未経験からだとなかなかイメージつかないし、結局入ってみないとわからないことはすごく多いけど、興味があるなら挑戦する価値はある!!

これからwebエンジニアを目指す方はぜひ一緒に頑張りましょう!

明日の食べログAdventCalendar2日目は@kamina_zzzさんによる「最強GPUを自由に触れる食べログの開発環境を紹介するよ」です。

そちらも楽しみにしておいてください!