エンジニアの働き方とかについてのエモい記事

κeenです。 非エンジニアのマネージャがエンジニアチームと上手くやる方法の記事に影響を受けてエンジニアとしての意見を書いてみようかなと。 非エンジニア向けのつもりです。

ここでいうエンジニアはソフトウェアエンジニアのことです。

Disclaimer

  • ある程度客観的になるように気をつけてますがあくまで私個人の意見です。エンジニアを代表するようなものではありません。
  • κeenはまだエンジニア3年目くらいの若造なのて「それは違うんじゃねーの」と思ったところがあったら多分あなたが正しいです。

仕事内容

エンジニアの仕事は外から見たら何してるかよくわからないらしいですね。 ふつう仕事の成果物はエンジニアの間でしか共有してないのでまあ、そうなるでしょう。 なので「何をしているか」を説明するのはやめて「仕事しているときにどんな気持ちか」を話しましょう。

エンジニアの仕事は頭脳労働です。 それも問題解決が主な仕事で、解決策を考えてはプログラムとして打ち込んでいくので、学校の試験を受けているときの感覚に近いでしょうか。 この感覚があればエンジニアの生態の謎の半分くらいは理解出来るようになるかと思います。

  • 部屋がうるさいと嫌なのは集中出来ないからです
  • 作業中に話しかけられると嫌なのは集中が途切れるからです
    • 一旦切れると「あれ、今何してたっけ」と思考が振り出しに戻ってしまいます
    • 会話や電話でなくチャットツールを好むのは自分のタイミングで見に行けるからです
    • この感覚がわからない人は3桁x3桁の掛け算をやってる途中で話しかけられると分かるようになるらしいです
  • お菓子やコーヒーを消費するのは集中力は長続きしないからです
    • ドラゴン桜によると90分が限界らしいです
    • 限界がきたらリフレッシュが必要です

試験のたとえを続けましょうか。 試験は人によって出来/不出来があったと思います。 プログラミングにもあります。 東大の入試のような難しい問題は優秀なエンジニアでないと解けず、凡人をいくら集めても解決できません。 難しい問題とは逆に夏休みの宿題のような簡単だけど量が多くて煩雑な問題もあります。 これもみなさんの経験にあるように頭のいい人は大体こういうのも手際よくこなしますね。 優秀なエンジニアも概ね量だけ多い作業も速く終わらせます。 さらにはエンジニアは簡単な機械的作業は自動化するので「機械的作業を自動化する問題」を簡単に解ける人、解けない人でまた差が付きます。 こうした解ける/解けない、手際がいい/わるいがあるのがエンジニアの生産性は人によって10倍、100倍違うと言われる部分です。

さて、仕事を試験に例えましたが教科はなんだと思いますか? 一見数学っぽいですが国語に近い部分もあります。扱っているのがプログラミング「言語」ですからね。 もちろん、やりたいことと現状のギャップを考えてどの手順を踏めば簡単に、確実に実現できるかを考えるのがエンジニアリングの大部分です。 そういった解法を考えるのは知識や論理的思考能力が試される部分でしょう。 でも、その解法はほとんどがプログラミング言語を通して記述されます。 プログラミング言語は人間が読むためのものなので読みやすいプログラム、読みづらいプログラムというのがあります。 作業の手順の説明が上手い人下手な人がいるようにエンジニアにも読みやすいプログラムを書く人、読みづらいプログラムを書く人がいます。 そこの上手さが優秀さの指標の一つですね。 ただし、この「読みやすい」が万人に読みやすいとは限りません。それなりの知識を要求することがあるからです。 これはどうでしょうか。

二次方程式 $ax^2 + bx + c (a \not= 0)$ の解は

  1. $b$を自乗したものから$4$と$a$と$c$を乗じたものを引いて開平したものを$b$の符号を反転したものに加減し、$2$と$a$を乗じたもので除すれば求められる
  2. 解の公式 $\frac{-b \pm \sqrt{b^2-4ac}}{2a}$ で求められる

上記の2つの説明、数式の知識があれば2の方がすぐに理解できるかと思います。 しかし数式がわからなければただの呪文です。 このように良いコードは読み手(=チームメンバー)のレベルに応じて変わります。 なので平凡な人の集まりに一人だけ優秀な人が交じると力をセーブしながらプログラミングしなければいけません。 この辺が採用や転職とも関わってくるところです。

ここまでの説明で元の記事にある

  • コーディングは作業ではなく、「アート」らしい。「何行コードを書いて、どれくらいバグが少ないか」などという指標で評価しようとすると「お前は画家を書いた絵の数で評価するのか?」と怒られるし、良いエンジニアは辞めていく。
  • 数名の優秀な人が製品・サービスを動かしているという事実を受け入れる。非属人化は高いレベルでは無理。
  • 一緒に働いているエンジニアはお互いの技量がわかっているらしい。人事の人が外から見てもわからないのに。

あたりは理解できるんじゃないかと思います。 最後の技量についてはだいたいコードに現れるのでコードを見ないことには何も評価できないのは当然ですね。 そして簡潔に問題を解決できる(大抵短い)のが良いコードなので量で評価するのもナンセンスです。

人によって解ける問題が違うという話をしましたがこれは同じ人でも時々によって変わります。 寝不足だったり集中できてなかったりして頭が回ってないと問題を解決できないことがあります。それが次の働き方に関わってきます。

働き方

営利企業の従業員は会社の利益を最大化するのが役目ですね。 エンジニアにとってはいかに効率的に問題解決をするかが鍵です。 特にパソコンは人間の作業を効率的にするための道具ですからその使い手であるエンジニアは効率化の鬼です。 効率化できるはずなのにしてないもの、合理的理由のないものは蛇蝎の如く嫌います。 社員は利益の最大化のために働くべきですし、評価は仕事の成果でのみ行われるべきです。 成果は出してるけど残業しないから評価は低いなんてものは受け付けません。

勤務

たとえば朝遅い人が多いのはしっかり寝て集中力を発揮できる状態で仕事に取り組みたいからです。 先述のように集中できてないと出来るはずの作業も進まなくなります。 一日の中で最も集中できる8時間を仕事のために使おうとしてる訳なのでむしろプロ意識が高いんじゃないでしょうか。

会議が嫌いなのも会議に遅れないように時間に気をつけてたら集中できなくなるからですし、 「参加者全員の時給を考えたらこの会議はそれだけの価値を生み出したのか」と考えているからです。 その会議、本当に価値がありますか?

道具

椅子やパソコンやキーボードなど仕事道具が結構高いですよね。これはちゃんと合理的な理由があります。

まず、これは絶対なのですが椅子は安物を使ってはいけません。 毎日長時間座りっぱなしなので椅子がよくないと腰を痛めます。腰痛はエンジニアの職業病の最たるものです。 整体通いの人が少なくない数いる程度には深刻な問題です。

パソコンが高いのはプロの道具だからです。 もうちょっとちゃんとした説明をすると、エンジニアの作業は事務作業に使うよりもかなり多くの計算力を必要とするからです。 計算力の足りないパソコンで作業していると5秒に1回芯の折れるシャープペンで物書きをしている気持ちになります。 さらに作業は自動化すると書きましたが計算力の高いパソコンだと自動化されたタスクも速く終わるので結果仕事がよく進みます。

キーボードやディスプレイなど人とのインターフェースになる機器にお金が必要なのももちろん作業の効率化のためです。 いくらエンジニアが優秀でパソコンがハイスペックでも互いのやりとりのためのキーボードやディスプレイに限界があったら効率は上がりません。

エンジニアの給料とこれらの値段と寿命を考えるにお金を出した方が得なはずです。

少し脇道に逸れると、ソフトウェア(アプリ)にも自由を与えた方がいいです。これもプロの道具ですから。 「セキュリティのために…」というのであれば少なくとも社員のエンジニアよりもソフトウェアに詳しい人が決めたルールで運用して下さい。

嫌いなもの

先述のように効率的でないもの、合理的でないものが嫌いです。

書類は電子データであれば場所も取らないし手間もないはずなので嫌いです。 書類仕事が苦手なのは目の前の作業よりそういった理不尽さへの不満が頭の大部分を占めるからです。

スーツを着たくないのは着る合理的理由がないからです。 あれって見た目のために着心地を犠牲にしたものですよね。 見た目が業績に関係する仕事でもないのに着る意味はありません。 あと全く不合理なのにスーツを強要する組織そのものも嫌いです。

手作業も嫌いです。 これは嫌いというより嫌えと教えられるものです。 手作業は非効率的だしコストがかかるし人間なのでミスをするし同じミスを何度もするしどこでミスをするかもわからない代物です。 可能なら機械に作業をやらせるべきです。 また、「ミスがありました。改善策は注意することです。」というのも嫌いです。 どうせまたミスをするので解決策になってないからです。人間を介在させないようにするのが解決策なはずです。

メールが苦手なのは単純に社会人力が低いからです。 エンジニアはあなたが人と向き合ってきた時間を機械と向き合うのに使ってきた人たちなので対人能力が低めです。 社会人然とした文章を中々書けないのです。ごめんなさい。

社内政治も嫌いです。「こっちの方が合理性がある、こうしよう」「データによるとこの方が効率的らしい」で決まるのが正しい姿だと思ってます。 営利企業が合理性以外で物事を進めようとするのは理解に苦しみます。

あとはルールや過度なマネジメントを嫌う人も多いです。私も嫌いです。 それなりに「干渉されたくない」というわがままも入ってるでしょう。 しかし合理的理由なしに「そういうものだから」「伝統だから」などの理由で存在し続けるルールは無意味ですね。 あるいは全体でみると合理的理由はあるけど比較的ITリテラシーの高いエンジニアには無意味みたいなルールも嫌ったりします。 他にも性悪説で運用されるルールは大多数にとってはただ単に不便なだけなので不満だったり。 人数が100人未満なら性善説、100人を超えたら性悪説になるらしいのでそういう人は小さな会社に転職したりします。 これに関してはあんまり客観的理由が思いつかないのでわがままだけどできれば理解してくれ、という気持ちです。

あとは対人能力が低いのでパーティや社員旅行など「みんなで集まってワイワイやろうぜ」なイベントは嫌う人がいます。 特に大勢集まるのが嫌という人もいます。 あるいは「その時間で勉強してた方がよっぽど身のためになる」というストイックな考え方も。 就活やインターンとかでの懇親会が嫌でその会社はやめたという人がちらほらいます。 因みに私はそういうのは好きです。

好きなもの

言わずもがなで技術のことは好きです。特に新しい技術は。 なぜ「新しい」技術が好きなのかは私の中でいくつか仮説があります。

1つにはそもそも知的好奇心からエンジニアになった人が多いからです。 新しいおもちゃを欲しがる子供のように知的好奇心を満たすために新しい技術を求める。

1つには生きるために必要と考えているからです。 IT業界は変化の速い世界なので泳ぎ続けないと死んでしまうマグロのように新しい技術を取り込まないと死んでしまうという考え方ですね。 私はこのことを説明するのに鏡の国のアリスの赤の女王の「その場にとどまるためには、全力で走り続けなければならない」の比喩が好きです。 これは個人だけでなく会社にも当てはまる考え方です。

1つには投資と考えているからです。今あるものをどうにかしてよりよくしたい。今はまだないけどもしかしたら将来解決できるかもしれない。 そんな期待を込めて新しい技術を調査する訳です。誰しも「今はまだ実用的でないけど1年後には使えるかもしれない技術リスト」のようなものがある筈です。 これも半分は個人のため、半分は会社のためですね。

現実的にはこれらの複合なんですかね。

綺麗に問題を解決したシステムも好きです。 どれだけ単純に問題を解決できているか、どれだけエラー(障害)に強いか、どれだけ速いか、どけだけ仕様変更に強いかなどなどが優れていれば興味深いシステムになります。 自社のシステムをもっと改善できると思うなら改善(リファクタリング)したくなりますし、もうどうしょうもないと思ってしまったら転職したくなります。 これは業績にかなり影響することもあれば、たまにただの自己満足なこともあります。 自己満足を窘めるのに「壊れてないものは直すな」なんて言われたりします。加減が難しいですね。

フリードリンクやフリーなおやつを求める人が多い気がします。 あるいはもうちょっといって卓球台などの軽く体を動かせる設備も。 これは先述のとおり集中が切れたときにリフレッシュするために必要ですが、別に自分で買うこともできるのでわがままの範疇かなと思ってます。 ただ、コスパよく社員を満足させられるので福利厚生を充実させたいならアリだと思います。 単純にうれしいだけでなく、こうすると作業が捗るんだよね?と理解があることのアピールになります。

文化

元の記事で指摘されているように仕事と趣味の境界がない人が一定数います。 そういう人は他人より技術に触れる時間が長いので優秀な人が多いでしょう。 優秀な人ほど目立つのでみんなそのように感じるかもしれませんが仕事は仕事、な人もそれなりにいると思います。 仕事でしか技術に関わらないけどすごく優秀な人もいるはずですが、恐らくそういう人は特にSNSとかには現れないので我々が目にすることはないでしょう。

「家に帰ってまで仕事をするのは理解できない」と思われるかもしれませんが、趣味と仕事でやってることが違います。 趣味は完全に自分の好きなことをやっています。 お金にならないからこそ面白いものがあったり仕事ではまだ使えないような尖った技術を試したり単純に自分が満足するためにやるものです。 仕事はワクワクするようなこともありますが基本は会社がお金儲けをするためのものです。運良く面白い仕事にありつけることもありますが大体は少し興味から外れたことだったりただの作業のようなものです。

最新の技術ニュースに向けて常にアンテナを張っているのでSNSをよく使います。業務中も。 遊んでいることもありますが新しいニュースが流れてこないかなと待ち構える意味もあります。

勉強会をよくします。有志で集まって好きな人が登壇してなんか喋るやつです。 勉強会とはいっても「うちはこんなシステムでやってるんだぞ、すごいだろ」「最近こんなこと考えたんだけどみんなどう思う?」といった自慢大会みたいな側面があります。 あるいは同業者で集まる同窓会だったり。それを以って勉強会に行くくらいなら家で勉強してろなんて意見もあります。 個人的にはすごいシステムや最新技術の解説を自慢されると参考になりますし、失敗事例も他山の石になるので有益かなと思ってます。 特に社内勉強会はそういう情報共有の場になってるので非常にためになります。 社外に向けては採用の機会に、社内に向けては横のつながりの促進と技術の向上につながるので可能なら会議室やセミナールームを貸してくれると嬉しいなと思います。

年収の話を他職種より、よくする気がします。全体的に売り手市場で転職すれば年収が上がる傾向にあるから、というのが一因と思います。 しかしそれだけでなくて年収を戦闘力のように一種の技術力のステータスとして使ってるような気もします。 「あそこは年収2000万円のエンジニアをずらりと集めてる」「あなたはもっと年収が高くて然るべき。転職したら?」など。 年収を高くすると他職種以上に喜ぶかもしれませんね。

キャリア

エンジニアは転職が多いですね。 先述の通り売り手市場というのも原因の一端でしょう。あるいは新しい会社がどんどん出来てくるので興味を惹かれて。 もう一つにはもし現状に満足していても「今が本当に最適な形なのだろうか」という疑問を払いきれないからかなと思います。 最適な技術構成、最適な職場、最適な組織を探す旅に出る感覚で組織を変えている気がします。 「同じ組織に10年”も”居てしまった」なんて言葉はよく耳にします。 この文化は基本的には個人の利益のためのものです。 会社のメリットがあるかと言われるとうーん。 業界全体で多様な見識を持った人が育つとはいえ採用コストや最初の業務に馴れるまでのスロースタート期間のコストを払う訳です。 そのコストはどうなるの?と考えてみると他社との競争コストになるのかなと考えます。 ここが最適解だと思わせる職場を作るか競争コストとして受け入れるかしかないのかなあと思います。

1つ重要な話に昇進をしたくないというのがあります。 正確にいうとマネジメントをする側になりたくない。 野球少年が夢見るのはイチローであって監督ではありません。 そして優れた選手であっても監督に向くとは限らないように優れたエンジニアであってもマネジメントがうまいとは限りません。 マネージャーにはマネジメントに向いた人がなるべきで、プレーヤに向いているだけでマネジメントは出来ない人を割り当てても全員が不幸になるだけです。 なので、

  • エンジニアリング能力を評価されると何故かマネージャーにされる会社
  • 同じ話ですがマネジメント能力を評価されてる訳でもない人が何故かマネージャーをやってる会社
  • 何故かマネージャーにならないと給料が上がらない会社

はとことん嫌います。昇進の機会を増やすために中間管理職を一杯作って結果意思決定が遅くなってるような会社は見向きもしないでしょう。 「昇進する=人の上に立つ=偉い=給料が高い」と考えはしません。 技術力で利益に貢献して対価として給料が上がればそれで満足です。 もし別の形で実力を認めたいとしても「スキルレベル」のような技術力を元にした評価が求められています。 たとえばS1からS7までのランクがあってある程度実力が認められると昇格するなど。

もちろん現場への理解のあるマネージャーが必要というのも分かってます。 エンジニアの中にはマネージャーを目指すような人もいますしあるいは現場サイドのリーダー、スポーツチームでいうキャプテンくらいならやれるという人もます。 それでもやっぱり現場への理解とマネジメント能力両方を備えている人は稀有で優秀なエンジニア以上に求め難いのかなーと感じてます。 多分本人の意思を聞きつつ社内で育てるのが一番確実なんですかね。

最後に

元記事の補完をしつつ被りつつ脱線しつつという感じですかね。 もうちょっと書きたいこともありますが十分すぎるほど長いのでここまで。

本当に拙い文章で思いの丈を綴ったら長くなってしまって恥ずかしい限りです。 特に「エンジニアは」などと主語の大きい書き方ばかりしているので随分炎上しそうな気がしますね。 本当に公開したくない。でも書いたからには公開します。

最後までお読みいただきありがとうございます。

Written by κeen