ばぁど・うぉっちんぐ

セキュリティに強いWeb屋。自由と春を求めて羽ばたく渡り鳥。

このブログはGoogle Analyticsを利用しています

社会人1年目の時に教わった「エンジニア」が「プロフェッショナル」として働くということ

どーも。ばぁどです。

藤井聡太棋聖がすごいなーとニュースを見て感心しております。

その藤井聡太棋聖の影響で将棋に少しハマっており、同様にプロの将棋棋士である香川愛生女流棋士YouTubeとか見ている4連休を過ごしています。

YouTubeを見ながらやはり将棋は面白い、奥が深いなー、(香川愛生女流棋士可愛いな)と思いつつ、将棋棋士のプロとしての姿勢を感じさせる部分もあり、ふと筆者が社会人1年目の時に教わった「エンジニアがプロフェッショナルとして働くということ」を思い出しました。

最近仕事中にこのプロフェッショナルとして働くということを考えることもあり、文章として自分の考えをまとめておこうと思いブログを書いております。

Who are you?

社会人7年目のITエンジニアです。

Webプログラムが得意であり、Ruby, Pythonが大好き。 またセキュリティエンジニアとしての知見も持っており、セキュリティ×Webアプリエンジニアというエンジニア像を追いかけています。

プロフェッショナルとは?

広辞苑より

《名詞・形容動詞》それを職業として行うようす。職業的。専門的。また、専門家。プロ。

広辞苑には、このように専門的な技能を持って仕事をしている人のことを指しているようです。

ITエンジニアとしてのスキルは、専門的な知識だと考えます。 理由としてはプログラムの構文だったり、ネットワークの知識は、大学で教わったり、専門書を読んで身に付けるような、専門的な知識ですよね。 アメリカであれば、IT系の大学における学歴がなければプログラマとして働けなかったり、最近日本でもプログラムスクールなど、専門的に学ぶような期間が増えている印象があります。 HTMLなどは高校で教えたりすることはありますが、ITエンジニアに必要な知識は決して一般的に常識的なレベルの知識ではないと考えます。

故にITエンジニアに必要な知識は、職業的に専門的な知識だと言っても良いと考えます。

エンジニアとしてのプロフェッショナル

個人的な考えになります。 個人的な考えとして、エンジニアがプロフェッショナルになるためには下記要素があると考えます。

  • 1日に終わると思われるタスクを、見積もり通り1日で終わらせることができること

一般的な1人前と言われるラインとして引かれているのはこのラインなのではないでしょうか? 先輩やリーダーから1md想定で渡されたタスク、自分で見積もって1mdで終わるなと思ったタスクをしっかりと見積もった範囲内で終わらせることができることはとても重要な能力だと思います。

この1mdで終わらせるという能力の中には複数の技能が必要だと考えます。

例えば、Webアプリケーションフレームワークを扱い画面を作成できる技術力。 このためにはWebアプリケーションフレームワークがどのようなルールでルーティングを行い、画面に描写しているかなどのルールを把握している必要があります。また、プログラム能力でも初歩的なところで躓きすぎないというのが重要です。

また、今までの経験からどこに落とし穴があるかを見極めて工数を見積もるという高等テクニックも割と重要になってきますね。

個人的な考えになりますが、1mdのタスクを1mdで終わらせることができるためには、3年ほどかかるのかなという感覚です(石の上にも三年と言いますし・・・)

  • エンジニアとして必要最低限の最新技術を常に情報収集していること

IT業界あるあるなのですが、IT業界の時代の移り変わりはとても早いなと感じております。

例えば、筆者が新人時代はちょうどソースコードの管理でGitがスタンダートになろうとしていた時期だった認識です。当時はまだコード管理はSVNだったかな・・・ それだけでなくCI/CD、aws、仮想化技術(docker)が立て続けに出てきたイメージがあります。

今では、これらは個人的には当たり前の技術であり、Webアプリケーション開発を行う上で必須の知識だと考えております。

理由としては、開発案件の受託だったりとか、準委任契約でお客様先で働くとなっても、これらの最新技術に関しては共通言語として会話ができるようになっている必要があるからです。

例えば、常駐先で必要なスキルとしてDocker上での開発があるにも関わらず、Dockerという単語を知らないというレベルだと、まずはコンテナ技術に関する知識の吸収から必要であり、お客様が求めているレベルのサービスを提供できているとは言えないと考えているからです。

やはりこれらの技術は、能動的に知識を拾いに行こうと思わなければ、身に付けることができない知識です。 筆者もCI/CDの概念を必死に理解しようと新人時代に悪戦苦闘したり、aws、dockerに関しては自分で本を買って勉強をしました。(awsに関してはキャッチアップ遅れ気味です。。。反省)

ただ、常に最新の技術を扱えるようにしておくのではなく、アンテナを貼って業務で必要になった時にすぐにキャッチアップできるようにしておけば良いのかなと思っております。

エンジニアがプロフェッショナルとして働くのであれば、これらの最新技術に関する最低限のキャッチアップは必須でしょう。

プロフェッショナルであり続けるためには

エンジニアがプロフェッショナルであり続けるためには、日々の自己研鑽が重要だと考えます。

技術の流れが早いIT業界において、エンジニアがプロフェッショナルとして働くためには日々の自己研鑽を怠ることはできないです。

最初に筆者に対して、エンジニアのイロハを教えてくれた上司には、プロフェッショナルであるためには日々の自己研鑽を怠ってはいけないと教わりました。

よくメジャーリーガーのイチローを例としてお話をしていただけました。

プロ野球選手として観客からお金をもらうのは試合の時間。 試合の時間に素振りをしても、それは給与としては認められない。 だからこそ、試合以外の時間で自己研鑽(バットの素振りなど)を行い、試合の時間で最高のパフォーマンスを出せるようにする。

まさにその通りです。 イチローさんは昨年現役を引退されていますが、今でも色々な企業に呼ばれて名言を残してくれています。 やはりとても勉強になります。

これがエンジニアになると、お客様/所属している会社からお金をもらうのは業務時間になります。 業務時間に技術の勉強をしても、それは業務としては認められない。 だからこそ、業務以外の時間で自己研鑽を行い、業務時間で最高のパフォーマンスを出せるようにする。

イチロー選手で下記のような有名なやりとりがあります。

記者:「なんでそんなにストイックにできるんですか?」
イチロー:「僕いくら貰っていると思っているんですか?」

このイチローさんの新者に対する返しが非常にクールですよね。 早くこの返しができるようになるくらいまで、給与をあげたいです。

またこのプロフェッショナルの考えに関連することになりますが「お金をもらいながら勉強をしている」状態はプロフェッショナルだとは考えておりません。

理由は業務中は勉強ではなく、成果を上げる時間だと考えているからです。 とは言え、やはりエンジニアにはこう言った「お金をもらいながら勉強をする」タイミングが必要な場合もあるというのも知っております。

例えば新卒入社の会社における新人研修中だったり、未経験からの転職エンジニアだったりすれば、研修が充実している会社に入った場合は、このような「お金をもらって勉強をする」タイミングは少なからずあるでしょう。

ただ、その場合は現状に甘んじるのではなく、一刻も早くプロフェッショナルではなくとも一人前になれるように努力はしたほうがいいかなと考えております。

「お金をもらって勉強をする」状態は、一人前ではないため出される給与も満足いくものではないことの方が多いかなと思っております。

プロフェッショナルは対価としてお金をもらいます

プロフェッショナルとして働く場合は対価としてお金をもらいます。 これは当たり前です。 レストランに行ってお金を払わずにご飯を食べるなんてことはあり得ません。

だからこそ、筆者は大学時代の友人にWebサイト構築の相談などを受けますが、相談を超えて実際に手を動かす時はしっかりと対価をいただくことにしています。 友人だからといって自分が7年間自己研鑽した労力を無償で提供するのは、7年間努力を続けた自分に対する裏切り行為ですね。

芸術家のピカソの逸話としてもありますよね。

ピカソが30秒で描いた絵に100万ドルの値段をつけました。
その理由としてピカソは、「この絵を描くために使った時間は30秒ではない。30年と30秒だ。」と言ったそうです。

(逸話は30年が40年だったり、値段が100万ドルではなく1万ドルだという諸説あります)

この逸話は本当にその通りだと思っています。

私も今年7年目になり、後輩や部下を持つようになりました。 7年間まともにやっていれば、プログラムの表面的な問題であればエラー文などを見れば一瞬で解決するのですが、後輩や部下に驚かれる場面があります。

そりゃ。そうですよね。 僕、真面目に7年間エンジニアをやってきたつもりですもの。 fizzbuzzだろうが、どんな簡単なアルゴリズムであれ、そのコードにたどり着くために要した時間は、僕にとっては7年間 + 所要時間です。

全てのエンジニアはプロフェッショナルであるべきなのか?

個人の自由だと思います。

決して常に自己研鑽を行う必要はなく、最新の情報をキャッチアップする必要はないと思います。

あくまでこのエンジニアとしてのプロフェッショナルは個人的な考えです。

決して誰かに押し付けるつもりはありません。

それに常に自己研鑽を行うことができる環境や、キャッチアップができる状態に全ての人がいる訳でもないと思っています。

人生には様々なイベントが起きます。 結婚、子育て、etc...

そんなライフイベントが起こっている中、独身時代と同じ時間を確保して勉強するなんて無茶振りだと考えます。 自分が納得できる範囲で、プロフェッショナルとして自覚をもち努力を続ければいいんじゃないですかね。

努力の量は他人と比較するようなものではないです。 結局は個人の自由だと思います。

プロフェッショナルでもミスはするよ

ここまでつらつらとプロフェッショナルであるためにはと偉そうに語りましたが、プロフェッショナルでもミスはします。 人間なのでミスをしない人なんていません。 たまにここを勘違いされている方がいらっしゃるので困ります。

プログラムでバグはつきものですし、 リリース手順を間違える事はあるし、 DBのデータを吹っ飛ばすこともあります。

そう言った人為的なミスを少なくするためにミスをしないような仕組みづくりや、ミスの影響を極小化するなどが、プロフェッショナルとしての仕事になるかなと思います。

これらのミスを防ぐためにも近年のエンジニアリングの流れがあるんですよね。 Gitを用いたプログラムのコードレビューを行いましょう、 リリース手順をできるだけ自動化しましょう(CI/CD)、 DBが壊れた時でもすぐに再構築できるように仮想化技術、コンテナ技術を用いましょうなどがあるんですよね。

やはりミスをなくすというためにも、日頃のアンテナをなるべく広げて最新情報のキャッチアップをすることは忘れてはならないですね。

とはいえ、ミスをするときはミスするよ!人間だもの!

つい数年前のことですが、受託開発でWebアプリケーションを開発していた時のお話です。受託開発であったにも関わらず明示的に仕様書を作成しなかったという案件がありました。色々と理由があり仕様書を作成しなくてもお客様先と仕様が握れていると勘違いしてしまったのですね。

しかし、そんなことはなかった。 人間の記憶というのは曖昧なもので急に仕様に関する掌返しが起こるんですね。 開発側として当時話した資料や議事録を突き合わせて説明をしても、結局Webアプリケーションの画面に大幅な仕様変更を行うことになり開発スケジュールにそれなりの影響が出てしまいました。

やはり仕様書って重要なんだなと痛感したお話でした。 仕様書を作るなんて本当に基本的なことなのに、その程度の基本的なことをやらないという痛恨のミス。 あの時は私より10年以上経験のあるベテランの人と一緒に大反省会を開きました。 次からは絶対仕様書作ります!!(固い意志)

ミスはするんです。だって人間ですもの。

まとめ

少し自意識過剰かもしれませんが、7年間IT業界で仕事をやらせていただいており、プロフェッショナルとして働かせていただいている自負があります。

また本記事で書いたことは、あくまで個人的な考え方であり、この考え方を周りに押し付ける気はありません。 ただ、私はプロフェッショナルという自覚で働いている以上、無償で働くということは絶対しませんし、プロフェッショナルとして働き続けるためにも自己研鑽を怠ることはしないように日々精進していこうと思います。

本記事は最近自己研鑽のモチベーションが持たなかったため筆者への発破を含んでおります。

モチベーション下がるときだってありますよね!人間ですもの。

4連休も終わることだし、心が折れない程度にまた頑張ろうと思います。