文学部歴史学科出身の社会人がエンジニアになるまでやった事/やらなかった事

早いものでエンジニアとして働き始めてから今月でもう1年です。

1年前は時給1,000円ちょっとのバイトと派遣をやっていました。

先日ようやく正社員としてプロエンジニアになれたので、この機会に文学部出身のぼくが勉強し始めてからの3年半でやった事/やらなかった事を備忘録的に残していきたいと思います。

対象読者

  • 文系だけどIT業界ではたらきたい学生
  • これからプログラミングを勉強してIT業界への転職を考えている社会人
  • すでにプログラミングを勉強中の社会人(←エラい)
  • 未来の自分

ただの備忘録ではありますが、これからIT業界を目指す誰かの参考になれば嬉しいです。

サマリー

エンジニア以前

タイトルにもある通り大学では文学部歴史学科に所属しており、1行もコードを書いたことがありませんでした。

また最初の仕事も観光・宿泊業だったのでITに全く縁がありませんでした。

「会社のHPとかあればカッコいいなー」「ネットで集客できれば便利だなー」くらいのモチベーションで勉強し始めたのがきっかけです

沼への入口

エンジニアコミュニティの門を叩く

当時僕がいた京都にはCamphor-という学生ITコミュニティがあり(今もある)、そこのエンジニアを紹介してもらったのが沼への入口です。

(余談ですが、初めてエンジニアに会うのに予備知識が無いのは流石に失礼かと思いdotinstallでHTMLとCSSを勉強していきました)

このコミュニティに迎えてもらったおかげで素晴らしいメンターに巡り会えただけでなく、優秀なエンジニアを定点観測することで彼/彼女らが日頃どの程度のInput/Outputを行なっているのかを学ぶことができました。

「現在の地点」でInput/Outputに差が出るのは経験の差なので仕方ないですが、「半年後の地点」でInput/Outputの成長度合いに差が出るのは別の理由があるはずです。優秀なメンバーの「成長度合い」を学習のペースメーカーとして利用できた点で、始めにコミュニティに所属できたのは大きかったかなと思います。

0ヶ月目~: dotinstallでの自己学習

前述のエンジニアコミュニティに顔を出す前の予習としてスタート。やれるとこまでやって質問を1つ持って行こうと決めていたので、HTMLとCSSを修了し、「ローカルサーバーを立てる」章でつまづくまで進めました。

dotinstallには大抵の技術のいろはが揃ってるので、今でも新しい技術を身につけたあとに、タイトルだけ眺めて要点を抑えられてるか確認するため利用しています

この時学んだ事:

  • HTML/CSS
  • 黒い画面の触り方

2ヶ月目~: Wordpressでサイト制作

「Webサイトを作るにはWordpressを勉強すれば大丈夫」と聞いたので本を買ってブログサイトを作りました。

カスタムテンプレートを自作することで動的にサイトを組むという概念に触れられ、コピペでjQueryも使ってみたりしました。書籍だけでは当然情報不足なのですが、幸いにもWordpressの情報は日本語でも死ぬほどネットに落ちているためそちらも参考にしました。

この延長で自社の会社情報サイトも制作することになり、入り口としては良かったのかなと思います。サイトの公開作業はエンジニアに丸投げしました。

この時学んだ事:

10ヶ月目~: Ruby on Rails (Viewだけ)

社内でRailsを使ったWebサービスを作ることになりましたが、人材が不足していたのでMVCのView部分だけ担当しました。自分でもRails Tutorialにチャレンジしたのですが、巨大な壁にはじき返されたのを覚えています。

また、表示に必要なデータを自分でも用意するためController部分も少しだけ触らせてもらいました。

この時学んだ事:

  • hamlの使い方
  • Rubyの基礎
  • Gitの使い方

1年2ヶ月目~: Slack Bot

いわゆる"プログラム"的なものが作りたくてSlack Botを作りました。名目としては「業務効率化」のためでしたが実際はネタBotばかり作っていました。その時の記事がこちら。

tech.camph.net

この頃からJavaScriptで簡単なロジックを書いたりするのがだんだん楽しくなって来ました

この時学んだ事:

1年3ヶ月目~: クローラーの作成(コピペ)

業務でホテル予約サイトやAirbnbのデータを分析する機会があったのですが、MITの学生がクローラースクリプトを公開していたので(下記)そちらを参考にして(コピペして)自社向けのスクリプトを開発しました。

hamelsmu.github.io

実行は手動で行わなければならずシンプルなCSVを出力するだけのものでしたが、自動で大量のデータを集めることができるのが面白く、いろんなサイトのクローラーを20種類くらい作成しました。DOMを解析したり、HTTP通信の仕組みを勉強できて楽しかったです。

この時学んだ事:

  • Pythonの基礎の基礎
  • HTTP通信の仕組み
  • DOMの仕様

1年5ヶ月目~: Ruby on Rails

3回くらい挫折したTutorialをようやく終えて自分でもサービスを作りたくなってきました。初めてスクラッチからアプリケーションを作り、メンターにボコボコにレビューしてもらいながら一応のリリースまで持って行けて良かったです(すぐクローズしたけど)。

このときはRubyクローラーも書きましたが、デプロイとインフラは相変わらずリードに丸投げ。

この時学んだ事:

2年2ヶ月目~: Vue.js (SFCだけ)

リードがRailsアプリにVue.jsおよびモダンJSの開発基盤を整えてくれたので、コンポーネントファイルのメンテだけ担当しました。世間的にはちょうどv2.0が出て来てVueが注目され始めたころです。RailsAPIで通信してUIゴリゴリ動かすのめっちゃ楽しいやんけ、ってなりました。

この時学んだ事:

2年6ヶ月目~: Docker (エンジニアデビュー)

メンタル病んだりいろいろあって会社を離れたものの、手につく職も特になかったのでエンジニアデビュー。 事務作業の片手間でやってたプログラミングがどれだけ世間で通用するか分からなかったので、修行のつもりでWeb制作会社でWordpressのバイトをさせてもらいました。

Wordpress周りのタスクならそれなりにできるようになっていたので、新たにインフラに手を出したくなりDockerの勉強開始。

なんとなくでしか理解していなかったLinuxをもう一度勉強してDockerfile書いたり、docker-composeで複数のミドルウェアを組み合わせたりできるようになってエンジニアとしてレベルアップした気がします

この時学んだ事:

  • MySQLの基礎,
  • 開発環境構築とデプロイの自動化
  • VPSへのサービスデプロイ

2年7ヶ月目~: モダンフロントエンド

環境の整ったRailsアプリでVueのコンポーネントを書いたことはありましたが、初めてゼロから環境構築するのはこの時が初めて。Webpack、Babel、ES6、Promiseやnpmの使い方などをザックリと理解して最低限のモダンフロントエンド開発環境をスクラッチで組めるようになりました。

この頃は狂ったようにRails + Vueのアプリ作って遊んでいました。だんだんRailsが面倒になってFirebaseのようなBaaSの使い方も覚えました。

この時学んだ事:

2年7ヶ月目~: Perlでソシャゲ開発

バイトだけでは食べていけないので派遣に登録してソシャゲの下請けでPerlを書くように。

はじめての言語かつオレオレのフレームワークでしたが、MVCを理解してたのでなんとか仕事ができました。それなりの規模のサービスではありながら、実質3~4人で保守と新規開発を全部見てたので死ねました。

それまでORMしか触ったことがなかったので生SQLを書くときに死ぬほど怒られたし、DBやメモリのパフォーマンスなど気にしたこともないままコードを書いていたので本番障害も引き起こしてしまうなど、大規模サービスならではの経験ができて良かったです。(その節はご迷惑をおかけしました)

これがきっかけで「動けば良い」という思考から少し成長し、パフォーマンスやスケーラビリティを考慮した設計をするようになりました。

何十万行もあるクソコ温かみのあるコードベースから気合のgrepでバグを見つけ出すスキルも身につきました。

この時学んだこと:

  • パフォーマンスへの意識
  • 保守の大変さ
  • バッチの運用方法
  • CIの使い方
  • チーム開発のいろは
  • RDBMSの仕様

3年目~: React Nativeでモバイルアプリ開発

バイトと派遣を継続する傍ら、受託案件もいただけるようになりました。フロントエンドが足りていないとのことだったので「よっしゃVueやるぞー!」と意気込んだものの、アプリ開発もやってほしいとのことで泣く泣くReactおよびReact Nativeで開発することに。

社内はおろか周囲にもReduxやReact Nativeの知見を持った人がいなかったので、海外のチャットコミュニティや掲示板で情報収集しながら開発を進めるのはなかなか楽しい経験でした。レールのない世界でスケーラブルなアーキテクチャを模索するのは面白かったです。

まだ開発中でリリースまではいけてないのですが、Xcodeを触る中でモバイルアプリのパラダイムも学ぶことができてとても勉強になりました。

この時学んだこと:

3年2ヶ月~: データ分析と機械学習

バイト先まで片道2時間ほどかかっており、ゲームや読書で時間を潰すのも飽きたのでデータサイエンスを勉強し始めました。

そもそも数1Aの記憶すら怪しい文系マンなので、まずは数3Cまで勉強し直すところから。その後UdacityのData AnalystコースとCourseraのMachine Learningコースを受講しました。ライブラリを使えば簡単な画像判定ツールくらいは作れますが、スクラッチで実装しろと言われると厳しいレベルです。

3ヶ月ほど勉強してみましたが他のことに興味が移ったので学習はストップしています

この時学んだこと:

3年6ヶ月目: 現在とこれから

2018年3月1日よりmerpay, Inc.でフロントエンドチームの立ち上げに参画しています。

mercari本社はReactの会社なのですが、merpayではVue.jsを採用して会社全体で新たなチャレンジを行なっている最中です。 BFFサーバーとしてNuxt.jsも採用しているため、「フロントエンドチーム」と名乗りつつバックエンドに踏み込んだ仕事もできる魅力的な環境だと思います。

疑いの余地なく日本で最高のメンバーと最高にBoldな未来を創っていける職場なので、この場所でもっとディープにWeb技術全般を学習・検証していくつもりです。

エンジニアリングを始めてからの数年間、様々な経験を公私ともにさせてもらって本当に恵まれていました。 これからは積極的にイベント等に登壇してコミュニティに還元していきたいと思います。

やらなかった事

これまでで自分がやってきた事を書き終わったので、最後に自分が「やらなかった事」を簡単に紹介します。

ハッカソンに出る

ハッカソンは一度だけ出てもう良いかなって思いました。良くも悪くもいろんなレベルの人がいるので必ずしもプラスにならないのと、ハッカソン常連の仲良しコミュニティ感が肌に合わなかったです。技術力だけじゃなく参加回数や業界年数を加味したコミュニケーションを強いられてバチバチ勝負出来なかったので、やや消化不良気味でした。

魅力的な景品や、同レベル以上のライバルがいる事が保証されてるならアリだと思います。

勉強会を主催する

コミュニティに参加するのは大好きですが、勉強会の企画・運営はあえて避けていました。キャリアの浅いうちから外の人を巻き込んでしまって責任ばかり肥大すると、自分自身のフットワークを殺してしまうかなと思ったからです。

勉強会やイベントの運営ノウハウを学ぶのも大事なのでこの辺りはトレードオフですね。

本を読む

始めこそWordpressの教科書みたいな本を買いましたがそれ以来ほとんど買っていません。他にもRubyクローラー本やインフラ関係の本を買いましたが、ほぼ流し読み。

情報が体系的にまとまってるのはありがたいですが、勉強したてのころは必要に応じて様々な情報に網羅的に目を通すのが僕には合っていました。普段からブラウザのタブを常に40個くらい開いて横断的に参照しているタイプなので、同程度の本を複数回し読みする運用はキビしかったです。

おかげで(?)海外のフォーラムを覗くのに抵抗がなくなりましたし、複数の著者(情報の提供者)の意見を統合して最終的な情報の良し悪しを判断するクセみたいなものがつきました。

逆にリーダブルコードのようなバイブル的なやつは読んどくべきだったかも、と最近反省しています。

最後に

エンジニアになる以前も営業、経営企画、経理、法務、労務、マーケ、CS等々いろいろやっていましたが、結局今の仕事が一番肌にあっている気がします。

IT業界の面白いところは、会社の枠を超えて業界全体で知識の共有とアップデートが文字通り秒単位で行われている点です。自分がどれだけ勉強しても天井が見えず、「もっともっと勉強してやろう」というモチベーションを他者から得られます。これは他の業界ではなかなか見られない現象です。

ようやくテックカンパニーに就職することはできましたが、チームではブッチギリで経験の浅いペーペーなので、遠慮なく先輩方のスキルを盗ませていただこうと思っています。

繰り返しにはなりますがぼくはコミュニティのお陰で様々な恵まれた経験をしてこられたと思っているので、今後はそこに恩返しもしつつ更に成長速度を加速させていきたいです。

以上!!年度末のエモい記事終了!!!!

おまけ

merpayの求人サイトが新しくなったので是非見てみてください。めちゃんこオシャレです。

www.merpay.com

弊社に興味ある方がいれば気軽に声かけてください。肉やりましょう。