シニアエンジニアとして学んだこと (2021)
(luminousmen.substack.com)- 10年の経験を持つデータエンジニアが、酔った勢いでキャリア、技術、同僚、人生について率直に書いた文章で、もともと Reddit の r/ExperiencedDevs に投稿されていた文章の保存版
- 技術スタックそのものより、各分野の 10〜20個の中核原則 のほうが重要で、スタックはそれを容易にするための道具にすぎない
- キャリア成長の最も効果的な方法は 転職 であり、不満のある職場に居続ける理由はない
- 良いコードとはジュニアエンジニアでも理解できるコードであり、最高のコードは コードが存在しないこと
- 自分の価値を報酬や役職に結びつけるべきではなく、親切さと努力 が長期的にはキャリアと人生の両方を変えてくれる
酔っているし、たぶん後で後悔するだろうけど、この10年間でエンジニアとして学んだことを酔った勢いでランキングしてみる。
- キャリアを前に進める最良の方法は 会社を変えること
- 技術スタックはそれほど重要ではない — データ分野にはおよそ 15個の基本パターン があり、あらゆる分野には10〜20個の中核原則があって、技術スタックはそれをやりやすくする道具にすぎないので、あまり心配しなくていい
- みんなが転職を勧めるのには理由がある — 職場に不満があるなら 去る時 だ
- 会社で一生の友人になりそうな人に出会ったこともあるが、それがすべての職場の条件である必要はない — 友人がいなくても幸せだった職場もあれば、良い友人がいても 不幸だった職場 もあった
- マネージャーに対して適度に 正直になる方法 を学んだ — 正直すぎてはいけないが、職場で自分らしさを保てる程度には。最悪どうなる? 解雇? 2週間あれば新しい仕事は見つかる
- 四半期に一度以上、午前2時に オンコールで起こされる ようなら深刻な問題があるので、直すか辞めるかすべき
もう一杯注ぎながら
- 良いマネージャーの資質は 良いエンジニアの資質 と大きく重なる
- 始めた頃は技術やプログラミングやコンピュータサイエンスに魅了されていたが、今は その時期は過ぎた
- 良いコードは ジュニアエンジニアが理解できるコード、優れたコードは CS 1年生でも理解できるコード、最高のコードは そもそもコードがないこと
- エンジニアとして最も過小評価されているスキルは ドキュメンテーション — 良い文書の書き方を教えてくれる人がいるなら本気でお金を払いたい。1,000ドルの講座でも、良い文書が書けるようになるなら払う
- それに関連して、変更に対する良い プロポーザルを書くこと も優れたスキル
- ほとんどすべての宗教戦争 (vim vs emacs, mac vs linux など) は重要ではない… ひとつを除いて。下を参照
- 年を取るほど 動的言語 への感謝が増している。そう、私が言った。かかってこい
- 自分が部屋で いちばん賢い人 だと感じる瞬間があるなら、去るべき時だ
- フルスタック Web 開発者の給料がなぜこんなに低いのか理解できない — フロントエンド、バックエンド、ブラウザ互換性、ネットワーキング、データベース、キャッシュ、Web とモバイルの違い、次々に出てくる 新しいフレームワーク まで全部理解しなければならない。基本給50万ドルはもらうべきだ
- インターンをもっと 採用すべき — エネルギーにあふれ、アイデアも豊富だ。質問し、批判できるインターンが最高
ひと口
- 英雄には会うな — 憧れの人の5,000ドル講座を受けたが、その人は素晴らしい人でも、結局は他のみんなと同じように即興でやっていた
- 技術スタックは重要でもある — Python 開発者と C++ 開発者を思い浮かべればまったく違うイメージになる。特定のツールは特定の仕事に特化しているからだ。何をすべきかわからないなら Java をやればいい — いまひとつの言語だが、ほぼ何にでも無難
- 最高のプログラミング言語は Lisp。Lisp を学ぶべき
- 初心者にとって最も収益性の高い言語は SQL — 他の言語は全部いらない。SQL だけで稼げる。給与担当50k → SQL ができる給与担当90k。整理能力のある普通の会社員40k → SQL までできれば PM と呼ばれて 150k
- テストは重要だが TDD はカルト
- 安定した公務員の仕事は思うほど良くない (キャリア初中期の基準) — 120k + 福利厚生 + 年金は良さそうに見えるが、独自技術に魂を売ることになる。エンジニアの平均年齢が50歳超であるのには理由がある。政府請負職には当てはまらない
- サードパーティのリクルーターは 寄生虫 — ただし良いリクルーターを見つけたら関係を育てるべき。3年以上サードパーティのリクルーターをやっている人はだいたい微妙で、優秀な人は 大企業のリクルーター に移る
- ストックオプションは 無価値か、億万長者にするか のどちらか — エンジニアが100人を超えていないなら、たいてい無価値
- リモートワークは最高。ただし ホワイトボードがない のは惜しい
- FAANG で働いたことはない — 何を見逃しているのかわからないが、FAANG 出身者を面接して採用したことはあるし、彼らも同じように何をやっているのかわかっていない
- 自分の価値は総報酬と 無関係だし、無関係であるべき — 資本主義は自己価値を測る良い基準ではない
- マネージャーには思ったより ずっと権限がない — 誰かを解雇しない理由は、できないからだ
- 役職はたいてい重要ではない — どこかの会社の Principal Distinguished Staff Lead Engineer だろうが関係ない。重要なのは 何をやり、何を成し遂げたか
- 役職について補足すると、キャリア初期(10年未満)には 昇進 が良い — スキルと責任が伸びるから。キャリア後半では 役職を下げること が有利 — 同じ報酬を得つつ、次の昇進でまた給料が上がる
- 401k を最大まで積むこと
- 誰に対しても 親切であること — キャリアに役立つからではなく(実際役立つが)、親切そのものが報いだから
- この1か月でジュニアエンジニアやインターンから 何も学んでいない なら、注意を払っていなかっただけだ
しまった、ワインがなくなった。
- 授業や本やカンファレンスに お金を使う価値はある — いくつものカンファレンス、1.5k の講座、多くの本、サブスクリプションに投資してきたし、それだけの価値はあった。こうすると自分が何をしているか知っているふりが、より上手くできる
- 本当に、Web 開発者たちはなぜもっともらっていないんだ? あの人たちは全部知ってるだろ!!!
- 手根管症候群と腰の問題 は冗談ではない — 今すぐ1,000ドル使って良い装備をそろえるべき
- 一緒に働いた中で最も賢かった人は 数学の博士 — その人から本当に多くを学んだ。元気でいてほしい
- 高校時代に親友だった女の子の話 — 付き合っているという噂が流れ、彼女は私を無視し始めた。気分は良くなかったが悪意はなく、その時 もっとうまく対処すべきだった
- 8年生のとき、付き合っていた女の子と別れたかったのに言えず、無視し始めた — 本当にひどい行動だった。Lena に申し訳ない
- ソフトウェアエンジニアの最も良い点は、同じやり方で問題を考える人たち に出会って話せること。同じ趣味ではなく、同じ思考様式だ
- 技術業界には 女性が十分にいない — 組織内の女性エンジニアを励まし、助けてはいるが、これ以上何をすべきかわからない
- 黒人エンジニア についても同じ
- 技術は深く知る前に嫌いになったことはない — 嫌いでも同時にクライアントに勧められるなら、それは良い技術だ。Jenkins はひどいが、勧めてもソフトウェア上の過失にはならない
- git はひどいが、選択肢がない — GUI ツールは地獄で、コマンドラインのほうがまし。覚えるコマンドは7個くらいで、残りはググればいい
- データエンジニアなので、データ関連の教訓もひとつ。Pandas は使うな
- チームに 半技術的 (semi-technical) なアナリスト がいると仕事が楽になる — プログラミングはわかるがソフトウェアエンジニアリングは知らない人たち。彼らが理解できないなら設計が悪いということだ。最も優秀なエンジニアよりも アナリストたちから多く成長した
- ダークモード はライトモードに強制的に切り替わると苦痛 — だからライトモードを使っている
- セキュリティについて知っているのは、自分がセキュリティをよく知らないと知っていること くらいだ
しまった、ワインがなくなった。
- 良いエンジニアは ベストプラクティスを知っていること、シニアエンジニアは ベストプラクティスをいつ破るべきかを知っていること
- バグや障害に 責任転嫁しようとする 環境なら、去るべき時だ
- 進歩的な会社、とくにスタートアップは「本当の自分を持ち込め」と言うが — 本当の自分がポルノ視聴しかないなら? 仕事と私生活の間に 健全な境界 を保つことが重要
- 同僚とハッピーアワーで酒を飲むのは好きだが、それより 子ども、家族、友人 と時間を過ごしたい
- 最高のリーダーシップの例: リーダーが 100% 自分の責任であるミスの責任を肩代わりすること — そのリーダーのためなら火の中にでも飛び込める
- 同じ文脈で、最高のリーダーたちは自分の意見を 代弁する一方で、対立する別の意見も説明してくれる。そういう人になろうと努力している
- サイドプロジェクト はやめろ — 好きならやってもいい! 時間があっても Reddit に酔った投稿を書くので忙しすぎる
- アルゴリズムとデータ構造は重要 — ただし限度がある。薬剤師の面接で有機化学の小テストをしないように、業界の 面接プロセスには問題 がある
- DevOps エンジニアたちは本当に 賢い。少なくとも彼らはちゃんと報われているほうだ
- 好きなことをするより、嫌いではない仕事 をするほうが大事
- プロダクトに近いほど、売上に近いほど 価値を認められている感覚が強い — 技術レベルとは無関係で、最も進歩的な会社でも同じ
- Linux は重要 — Windows 環境でも。なぜか? 結局 Linux を使うことになるから。週末に Arch を入れて遊んでいた時間に感謝している
- 「ビッグデータ」のような あいまいなバズワード には警戒すべき — Spark/Kafka で10分ごとに1万行をストリーミングしたことも、Python/MySQL で1時間ごとに10億行をバッチ処理したこともあるが、ラベルに意味はない
- シリコンバレーの外にも良い仕事はあるが、多くの良い仕事はシリコンバレーに ある
ビールを見つけた。続けよう。
プログラミング言語について
- かつて嫌っていた言語(C#)を使い始めたら、今でも嫌いだが有用さは認める
- 嫌っていた言語(C#)を離れて戻ってきたら、大きく進化 していた
- 関数型言語の最大の利点は、関数が第一級オブジェクト であること、そしてすべてのプログラマがそれを知っていること
- どれほど優れていたり優秀な言語でも、人々が使わなければ意味がない
- 言語を学ぶことは難しくない — 難しいのは エコシステム を学ぶこと
同僚について
- ペアプログラミング は素晴らしいが、時間がかかる — そして会社はたいていその時間を使いたがらない
- 賢いエンジニアと働けば、より良い コーダー になれる。賢い非技術系の同僚と働けば、より良い エンジニア になれる
- 9時-5時以外は働くな — ただし、すばらしいプロジェクトが進んでいてフロー状態に入っているなら例外。それは最高だ
- チーム間のハッピーアワーや交流時間の 99% はただのおしゃべり。だが 1% は重要なプロジェクトの重要なコードの話で、社交の場で仕事の話を持ち出したおかげで大事を防げたことがある。別チームと仲良くしろという意味ではなく、単に つながり を求めているだけで、副次効果があるということ
リモートワークについて
- 半分リモート・半分出社の環境では、リモート社員が 二級市民扱い されていないか確認すべき — 重要な意思決定が「水を飲みに行くついで」に行われているなら、会社文化を変えるか(難しい)、リモート社員を一級市民として扱う 別の会社へ 移るべき
- リモートの二番目に悪い欠点は ホワイトボードがないこと
- リモート最大の欠点は 同僚から学びにくいこと — 自信を持って質問できて、リモート社員が現地社員と同等に扱われる文化でないなら、キャリア最初の5年は オフィス勤務 のほうが良かった
技術について
- 技術は変わることを誰もが知っているが、この10年で劇的に変わっても 基本原則はそれほど変わっていない — とくにその分野に適用される基本原則は
- Hacker News と r/programming は全体像や最新動向をつかむのにだけ有用で、コメントは ほとんど役に立たない
- 強い意見を持つアマチュアが多く、「尊敬されている」ジャーナルやブログの記事も同じ — 噂は把握しつつ、自分で判断すべき
- 最先端のスタートアップで働いているが、ABC 最先端企業が発表した 最新の XYZ 技術は使っていない — 彼らが発表するのはエンジニアリングのごく一部で、ほとんどは私たちと同じ技術を使っている
- ただし兆候は読むべき — モダンな技術を使いたいのに、会社がまだ jQuery 中心で開発しているなら再評価すべき時だ
データエンジニアリングについて
- データエンジニアなので、データ特化の助言/経験 を追加する
- SQL が王様 — MySQL, Postgres, Oracle, SQL Server, SQLite は今でも最強。新しい技術を使っても、その多くは移行可能
- ほとんどの会社は ストリーミングをしていない — 難しく複雑だからだ。10年の経験があっても秒間1万件処理できなくていい。仕事はある
- Airflow はいまひとつ、そうだ。他にも製品はあるが、Airflow が最も広く使われている
- 機械学習プロジェクト は失敗する可能性が高い — 複雑で実装が難しい。信じられない? ML モデルのユニットテストを書くのがどれだけ簡単か考えてみるといい
- この分野はまだ新しい — データエンジニアリングに良い本はない。とにかく自分でやるしかない。ブートキャンプでは無理。10年後には変わっているかもしれない
人生について
- 人は死ぬ — コードをレガシーにしたいなら時間を注げばいい。でも私のようにレガシーが家族や友人や周りの人なら、コードに執着しすぎるな
- 良い人も、賢い人も、良いコーダーも 悪いコードを書く — コードの品質を自己価値の従属変数にしてはいけない
- 趣味で始めた技術が仕事になると、趣味は消える — 技術がもう趣味ではないことを受け入れて新しい趣味を見つけるか、楽しみたいなら仕事を辞めるしかない
- プログラミングと CS は約 80年の歴史がある学問 — 他の工学分野に比べれば、私たちはみんな自分が何をしているのかよくわかっていない
- かなり良いお金を稼いでいる — 感謝し、節約し、貯めること
その他
- 複数チームが何年も使う大規模プラットフォームやライブラリを作ったこともあるが、最も誇らしかったコードは 自分しか使わない小さなスクリプト
- キャリアで最も誇らしい成果は 他の人たちがより良く仕事できるよう助けたこと — たぶん自分がピープルマネージャー向きだからで、他の人には役に立たないかもしれない
- 求職時に LinkedIn を作って更新もしたが、ろくでもない返信ばかりで削除した。今は LinkedIn で採用候補者を探している — LinkedIn はノイズが多く、そのノイズに貢献することが仕事の一部だからこそ価値がある
- 大学時代、自分に好意を持ってくれていた女の子がいた — 自尊心が低くて信じられなかったが、デートに誘われた。丁寧に断り、19歳で 成熟した形で「ノー」と言えたこと は人生で最も誇らしい瞬間のひとつだ
- r/cscareerquestions はエゴと誤情報の沼 — あの人たちを揺さぶって現実の世界がどういうものか説明したくなるが、たぶん信じないだろう
今感じていること
- 酔っているし、普段はあまり飲まないので、自分の言っていることは全部 気まずいか、ひどいもの に思える
- みんなは 貯蓄して投資すべき だと強く感じる — 6桁年収なら 401k を最大まで積むべき
- ずっと嫌っていたものになってしまった — 技術業界で働いているのに、実生活では技術を避ける人間。年を取るとそうなるのかもしれない
- r/ExperiencedDevs はかなり良いコミュニティ。モデレーターたちに感謝している。受けている評価よりずっと少ない感謝しか受けていない
- 自分のキャリア、年収、人生を Reddit に負っている — ガソリンスタンドで最低賃金をもらっていた状態から Linux, SQL, Python, C# などを学んで今の位置まで来た。Reddit はよく叩かれるが、コミュニティが貧困から抜け出す助けになる
- 子どもは好きだ — 選択の結果として子どもはいない。子どもは愛しているが、自分がどんな父親になるのか怖いからだ。この文章では個人的すぎる話だろうか?
- 誰を尊敬しているかと聞かれて Conan O'Brien と答えたら笑われた。でも本気だった — Tonight Show 最終回で彼が言った「親切で、よく働け」という言葉を、人生がしんどかった時期に聞いた。失うものもなかったので、そのまま実践した。10年以上親切でいたおかげで素晴らしい人たちに出会えたし、よく働いて新しいことに挑戦したおかげで 人生は無限に良くなった。深夜トークショーのおかげで人生の充実を得たなんて滑稽かもしれないが、これは自分の人生だし、どんな成功でも深夜テレビのコメディアンのおかげだと胸を張って言う
泥酔しているので、私の言ったことは無視してください。長文失礼。
4件のコメント
本文の内容が少しおかしいですね? 本来は Hacker News の意見として別にまとまって表示されるべき内容が本文に入っているのですが……方針が変わったのでしょうか。
ここ数日プロンプト改善中だったので、少し不安定でしたね。すぐに修正しておきました(泣)
generalist についての内容には共感します。私も新人の頃はジェネラリストにならなきゃ〜と思っていましたが、
Hacker News の意見
ソフトウェアエンジニアをやっていると似た考え方の人たちに出会えるという話は、自分の経験とは少し違っていた。自分が会った50人のうち1人くらいしか職人気質でこの仕事をしている感じはなく、ほとんどはただ9-to-5と可視性、インパクトのあるプロジェクトを求めているだけで、自分の問題や意見を深く共有することはなかった
「2週間で新しい仕事を見つける」みたいな話は、いかにもあの時代っぽい。当時は労働者側が市場を握っていて、みんな専門家ぶっていた雰囲気があった
「英雄に直接会うな、5,000ドルの講義を受けてみたら、その人も自分たちと同じように即興でやっているだけだった」という話には完全に共感した
エンジニアにとって最も過小評価されている能力はドキュメンテーションだという話に付け加えるなら、ドキュメントには何よりなぜを残すべきだ。コードは読めるが、200行もある
invert_parametersのような関数がなぜ生まれたのか、どんな問題を解いたのか、なぜそんな問題があったのか、このコードがどれくらい生き残る想定なのかが知りたい。自分はときどき、時間的プレッシャーや奇妙なupstreamの問題のせいでこう書いたという謝罪的なコメントまで残す。特に自明でないコードほど、書いた当時の思考を描いておかないと、コードだけでは見えない文脈が残らない。ジュニアでもシニアでも、職場でこういうことをもっとやってほしい20代で年収10万ドル以上稼いでいる人がいるなら、まず401kとHSAをできるだけ満額まで入れ、そのあとIRAも満額まで埋めろという助言は本当に重要だと思う。全部target date retirement fundに入れ、生活費6か月から12か月分はhigh yield savings accountに置けという基本原則も悪くなさそうだった。23歳から始めれば45歳での引退も可能だという趣旨で、あとに延ばすと45歳になってもまだ20年働く現実に向き合うことになるかもしれないという警告だった
自分が学んだ最も有用な教訓は、自分がわざと作った制約よりも、自分で選んでいない制約のほうがむしろ良いプロダクト判断につながるということだった。自分は共有ホスティング上でリンク短縮サービスを動かしているが、SSHもなく、FTPデプロイしかできず、バックグラウンドワーカーもRedisもない。ちゃんとしたキューやWebSocket、キャッシュレイヤーを入れようとするたびにホスティング側が対応していないので、結局やらなかった。だからクリック通知は1時間に1回PHP endpointを叩くcronで送っている。キューもリトライロジックもワーカーもなく、送れるか失敗するかのどちらかで、結果だけログに残す。6か月使ってみたが、問題なく動いていた。最初からVPSがあったら、今まで面倒を見るべき何かをもっと大きく作っていたはずだが、共有ホスティングが「cronとDBしか出しません」と線を引いてくれたおかげで、それで十分だと学べた
元記事にはかなりいろいろな問題点が見えた。ひとりでワインを飲むのは少し変わっていて、普通はウイスキーやウォッカやビールのほうが典型的だと思う。
ever thingのような綴りは、酒が入った状態のまとまりのない思考っぽくて、むしろその雰囲気には合っていた。そしてwebdevを専門家の代表格と見るのは難しいし、dark modeはブラウザ拡張で解決することも多いと感じる。薬剤師は学位と長い勉強、試験、有機化学が必要な職業で、HNコメントが無価値だという話も言いすぎだと思う。ひどい記事でもコメントのほうが本文より良いことはかなり多かった関連記事として、2021年5月の Drunk Post: Things I've Learned as a Sr Engineer を思い出した。コメントが494件も付いた投稿だった
これが2021年の文章だというのが驚きだった。SQLの話や2週間で転職できるという空気感があまりにも2014年っぽい感覚に思えた
「HNとr/programmingは大まかなアイデアや最新動向の把握には良いが、コメントはほとんど無価値だ」という話に関連して、自分はHN運営からrate limitをかけられてからコメントをあまり読まなくなった。1日に数回しか返信できず、参加そのものができないので、読む動機が減った。露骨にbanするのではなく速度を落とすやり方なので、より微妙に招かれざる客になった気分もあった。何か大事なものを見逃しているのではと心配したが、コメントを確認したくなるあの習慣的な引力を断つのも、思ったほど悪くないかもしれないと思った