エンジニア歴1年半のこれまでをアウトプットベースで振り返る
こんにちは、新卒エンジニア2年目の高橋です。 アドベントカレンダーのネタ探しに迷走し続け、自分が使っている技術の説明をしても中途半端な内容になりそうだなーと思い、自分にしか書けないことってなんだろうと考えた結果、プログラミングを始めてからこれまでに作成したコードやアプリについて振り返ってみようと思い立ちました。半分日記のような形式になりそうですが、ある技術についての記事が「点」での解説だとすると、エンジニアの成長という「線」の記事も需要あるかなと思ったのと、自分も書いていて楽しいだろうと思ったのでこの内容で行きます!
会社での業務については同期入社の中曽が書いた下記の記事で触れられているので、この記事では自分が業務外で作ってみたアプリなどを例に挙げながら、エンジニアを1年半続けたことによるスキルの変化や、そのとき考えていたことなどを中心にまとめたいと思います。
19新卒入社からの軌跡 未経験エンジニアは1年でどこまで成長できるのか
また面談の場や、友人と話していると以下の様な質問をよくされます。
- 入社するまでに何を勉強したらいいですか?
- まず何の言語を学習するのがいいですか?
- プログラミングができると、結局何が作れるようになるのでしょうか?
自分のこれまでの振り返りを通して、最後に上記質問に対しての自分なりの回答ができればと思います。興味があればお付き合いいただけると嬉しいです!
余談ですが、過去のFORCIA CUBEの記事をみると自分の同期が書いた「振り返ってみた系」の記事がたくさん出てきて、みんな振り返るの大好きだなと(笑)。
入社前 〜Hello, プログラミング〜
まずは自分がエンジニアを志望するきっかけとなった、大学院での出来事についてです。私は大学院までは化学専攻で分子の物性について研究していました。研究のプロセスは以下のような物です。
- 実験器具を用いて測定。取得したデータはCSV形式で出力
- データを取り込み、グラフや図に落とし込み人間が分析できるようにする
- 過去のデータや他の実験とデータを比較し、分析する
私がいた研究室ではデータの取り込みやグラフの作成は「Igor」というアプリケーションを利用していたのですが、このアプリでは独自のプログラミング言語によりマクロを作成して処理を自動化したり、GUI(ボタンなどで挙動を制御できる)を作成してグラフ作成や分析を簡易にしたりすることができるものでした。VBAでExcelのマクロを作るようなイメージですね。
それまでほとんどプログラミングに触れたことはありませんでしたが、測定では大量のデータを処理する必要があり、手作業で行うのは大変手間がかかっていたため、処理を自動化するためのマクロを作成してみることにしました。例えば、
- result.20201201_001.csv
- result.20201201_002.csv
- result.20201201_003.csv
・・・
- result.20201201_100.csv
という名前の測定データに対して、一連のデータを順に取り込み、必要な処理を施して、全てのデータを一つのグラフにプロットする、みたいな感じです。手作業でデータを処理していたときは100個のデータを全て処理しようと思うと途方もない時間がかかってしまいますが、一度プログラムを書いてしまえば以降はワンクリックで全て処理できてしまい、「プログラミングってすげー!」と感動したのを覚えています。単純ですね。またちょっとここをこうしたいんだけどな、と思ったときも自分でプログラムを書き換えて処理を変えることができるというのも、プログラムを自分で書けることは大きな強みになると実感しました。
このプログラムの作成では、
- forによる繰り返し
- ifによる分岐、例外処理
というまさにプログラミングの基礎となる概念を理解でき、また何よりもプログラムによって課題を解決できるという大きな成功体験を得ることができました。プログラミングを始めるきっかけは人それぞれかと思いますが、私の場合は必要に駆られて始めた結果、その便利さに惹かれていきました。
使用した技術
- Igor
入社1ヶ月 〜API、恐ろしい子〜
近年の(と言ってもかなり前からですが)Web開発において重要な要素に「API」があります。雑に解説すると「外部からサービスを利用できるような仕組み」のことです。例えばLINEは通常アプリから操作してメッセージを送りますが、LINEが提供するAPIを利用すると、アプリの外からプログラムによりメッセージを送る操作をすることができます。
入社後の研修でプログラムの勉強をしていく中でAPIという概念を知り、自分で試しに使ってみたい!と思い立って作成したのが、Slackの同期チャンネルで現在も稼働中の「お誕生日bot」です。ネーミングセンスのなさ(笑)。
このプログラムはGoogleが提供している、無料で外部サーバー上でプログラムを動かすことができるGoogle Apps Scriptで動いており、Slack APIを用いることで自分の同期の誕生日にチャンネルにメッセージを通知するbotです。 実装は非常に単純なものですが、APIを用いて簡単に外部サービスと連携できるというのはカルチャーショックでした。こんな便利な機能をなんで無料で使えるんだ・・・と不思議に思った記憶があります。
今時だとプログラムを動かすサーバーも無料で借りれたりして、何かを試しに作ってみるハードルはかなり低いですね。
使用した技術
- Slack API
- Google App Script
入社8ヶ月 〜アプリがないなら、自分で作ればいいじゃない〜
時は2019年年末。私が企画・運営を担当していたフォルシア忘年会の出し物で、社内タイピング競争を行うことになったのですが、メモ帳などに文章を入力してもらうだけだと誤字の判定も難しいし見る側も味気ないため、タイピングゲームのように文字の入力を判定できる形式が好ましいと考えていました。またタイピングの課題の文章を自分たちの選んだ文章にしたいという要望もあったのですが、課題の文章を作れるようなタイピングゲームはざっとみた限り見当たりませんでした。「じゃあ自分で作ったらええやん!」と思い立ち作成してみました。
この頃には一年目の研修もほぼ終わり、すでに実際の業務でも保守や開発を通してWeb開発の流れも一通りざっくりとは理解できていたつもりだったので、Webを構成するための最も基本的なプログラミング言語であるHTML, JavaScript,CSSを用いて0から簡易的なタイピングアプリを作成しました。
普段の業務ではすでにあるプログラムに対して改修や追加を行うので、0から自分でアプリを作り上げるのは良い腕試しになりました。企画の趣旨としては「誰が一番タイピングが早いのか」を競うもので主役はあくまでも人ですが、それを引き立てるために十分活躍してくれたと思うので個人的には満足できる出来でした。
このタイピングアプリの作成を通して、プログラミングの面白さは、
- 自分で考えた物を、自分で形にすることができる
- 目に見える物や動きのあるものも作れる
- だれかの役に立つものもアイデア次第で作れる
ということかなと考え始めます。フォルシアのエンジニアと話していると、競技プログラミングのようなアルゴリズムやデータ構造に興味がある人、サービスを安定的に運用するためのインフラに興味がある人など様々なタイプのエンジニアがいるなと思うのですが、この辺りから自分は人の役に立つ便利でいけてるものを作る、というプロダクトに対して興味があることに気が付きます。
使用した技術
- JavaScript + jQuery
- HTML
- CSS
入社1年半 〜Never Ending Catching Up〜
この頃は業務でReact, TypeScriptを使い始めていました。先ほどWebの基本的なプログラミング言語はHTML、JavaScript、CSSという話をしましたが、これらの言語をそのまま使うとコードが煩雑になったりメンテナンス性が低くなるため、大規模開発になるとなかなか辛いところがあります。そこで上に挙げたようなライブラリを使うことで、開発体験や保守フェーズでのメンテナンス性を向上させることができます。
簡単に説明すると、ReactはJavaScriptとHTMLを合わせたようなライブラリで、コンポーネントという単位でWebページに表示するパーツを分けることで部品の使い回しがしやすかったり、動的に変化する要素の描画が簡単にできたりします。TypeScriptはいわゆるAltJSと呼ばれるJavaScriptを拡張したようなライブラリで、JavaScriptに静的に型をつけることができます。型を付けることで予期せぬ値が関数に渡されることを防ぐことができるため、コードの信頼性が向上します。
素のJavaScriptと比較すると、これらのライブラリは初めは少しとっつきにくさがあります。もともと簡単に書けていたのにまどろっこしい書き方になることもありますが、それぞれのライブラリの思想が分かってくると合理的だと思えるようになりました。
世の中で流行っている技術というのはそれなりに流行る理由があるからで、それらをキャッチアップしていくことはエンジニアとして今後活躍していくためには重要です。業務中にそのような技術に触れる機会も多い一方で、そうでないものについては自分で時間を作って触ってみる、勉強する必要がありますが、これがなかなか億劫だったりします。
今年の秋のシルバーウィークに社内でリモート開発合宿が開催されたので、これを好機と思い、社内ではまだ利用されていなかったGraphQLに触れてみようと、ECサイトをイメージしたアプリを作ってみました。 GraphQLはAPIのインターフェイスを定義するクエリ言語で、これまでメジャーだったREST形式と違いクライアント側で必要なデータを柔軟に指定してリクエストできるのが特徴で、また型付けにも強い言語です。
タイピングゲームを作っていた頃から比べると、比較的新しい技術を使っており「今時のエンジニア感」を勝手に感じていました(笑)。
Webの技術の進歩は本当に早いと実感しており、1年前に使っていた技術が新しい物に取って代わることはざらにあります。絶えずキャッチアップし続ける必要があるのは大変ですがそれは逆にチャンスでもあって、経験が少ないエンジニアでも新しい技術にキャッチアップすることで最前線に立つことができるようになります。 何でもかんでも新しいものが優れているというわけではもちろんないですが、これまでの技術が含んでいた欠点を補う形で作られるライブラリも多く、それらを身に付けることが「イケてるサービス」を作るためには欠かせないと考えています。
使用した技術
- React
- Redux
- TypeScript
- GraphQL
まとめ
ここまで自分の振り返りにお付き合いいただきありがとうございます。一年の終わりにこれまでを振り返るのはとても有意義だと記事を書きながら感じていました。自分がこれまで何を考え、何をしてきたのかを振り返ることで、初心を思い出しこれからの方向性も見えてきたような気がします。 特に私はアルゴリズムやコンピューターサイエンスよりも「何をつくるか」「それがどんな価値をもたらすか」に興味があることに改めて気付きました。エンジニアとして今後のキャリアを考える際には、それらの軸を忘れないようにしたいです。
皆さんもぜひ時間を作って今年一年を振り返ってみてください。
さて、最後にはなりますが記事の冒頭で触れた以下のよくある質問に対して、簡単にではありますが回答します。
入社までに何を勉強すればいいですか?
入社後に研修があるのでプログラミング言語の書き方などはそこで身に付けることができますし、最新の技術は仕事を通して触れることができるので、その方が効率が良いのかなと思います。 個人的に勉強しておくとよかったなと思う内容はコンピューターサイエンスですね。興味があるないにかかわらずエンジニアをしていると避けては通れない道だと思うので。コンピューターがなぜ動くのかとか、ネットワークがなぜつながるのかとか、雰囲気だけでも知っておくとその後の内容が理解しやすくなるかと思います。もちろん、興味があるものがあるならまずそこから手を付けるのが一番だと思います!
まず何の言語を学習するのがいいですか?
言語ごとに特徴や思想があって、本当はやりたいことに応じて言語を選択する必要がありますが、初めに触れてみるにはどれでもいいかなーと思います(一部例外あり)。私の場合は前述のIgorというソフトに組み込まれているという利用が超限定的な言語から始まりましたが、プログラミングの概念自体は言語を超えてある程度共通しているので、まあ問題ないかなと思います。とっつきやすいものだと文法がすっきりしていて書きやすいPythonがおすすめでしょうか。
プログラミングができると、結局何が作れるようになるのでしょうか?
上に挙げたようなものです(笑)。文中でも書きましたが無料で提供されているAPIを活用すると、比較的簡単に便利なものが作れるので楽しいです。
髙橋優樹
2019年新卒入社。旅行プラットフォーム部エンジニア。
PS5の抽選はいつ当たるんでしょうか。
フォルシアではフォルシアに興味をお持ちいただけた方に、社員との面談のご案内をしています。
採用応募の方、まずはカジュアルにお話をしてみたいという方は、お気軽に下記よりご連絡ください。
※ 弊社社員に対する営業行為などはお断りしております。ご希望に沿えない場合がございますので予めご了承ください。