ハクソク

世界を動かす技術を、日本語で。

酔っ払いの投稿:シニアエンジニアとして学んだこと(2021年)

概要

  • r/ExperiencedDevsで話題となった、10年間のエンジニア経験から得た本音リストの日本語訳
  • 転職、技術スタック、マネージャー、ドキュメント作成など幅広いテーマ
  • エンジニアとしての成長やキャリア形成に関する率直な意見
  • 業界の課題や人間関係、働き方への洞察
  • 飲酒による本音トークならではのユーモアと実用的なアドバイス

10年間のエンジニア経験から学んだこと

  • キャリアアップの最良の方法は、会社を変えること
  • 技術スタック自体に過度なこだわりは不要。どの分野にも10〜20の基本原則が存在
  • 仕事に不満があるなら転職活動を。満足度の低い職場は早めに見切りをつける
  • 職場での友情は必須ではない。友人ができなくても幸せな場合も多い
  • マネージャーとの正直なコミュニケーションが大切。解雇されても2週間で新しい職を見つけられる自信
  • オンコールで四半期に2回以上深夜対応があるなら、仕組みが破綻している証拠
  • 良いマネージャー良いエンジニアの資質には多くの共通点
  • 技術やプログラミングへの憧れは最初だけ。今は冷静な視点
  • 良いコードは新人が理解できるコード。最良のコードは「書かない」こと
  • 最も過小評価されているスキルはドキュメント作成。良いドキュメントの書き方は高額でも学びたい
  • 提案書の作成能力も重要なスキル
  • 技術論争(vim vs emacs等)はほぼ無意味。ただし、動的言語への評価は年齢とともに上昇
  • 自分が一番賢いと感じたら、その場を去るタイミング
  • フルスタックWebエンジニアの給与は低すぎる。多岐にわたる知識が必要であるべき
  • インターンの採用は大賛成。新鮮な視点とエネルギー
  • ヒーローには会わない方がいい。憧れの人も実際はみんなと同じ
  • 技術スタックは「適材適所」。迷ったらJavaを選べ。万能だが微妙
  • Lispこそ最高の言語。学ぶべき
  • 初心者が稼げる言語はSQL。他の言語を知らなくても高収入が狙える
  • テストは重要だがTDDは宗教的
  • 公務員エンジニアは若手には不向き。技術の古さと年齢層の高さ
  • リクルーターは玉石混交。良い担当者はキャリアの助けになる
  • ストックオプションは人数100人以上の会社でないと価値が出にくい
  • リモートワークは最高だが、ホワイトボードが使えないのは不便
  • FAANG出身者でも万能ではない。採用・不採用の経験から
  • 自己評価と報酬は比例しない。資本主義と自己価値の切り離し
  • マネージャーの権力は意外と小さい。解雇の決定権も限定的
  • 肩書きは重要ではない。実績が全て
  • キャリア初期は昇進、後半は降格で給与アップの余地を作るのも手
  • **401k(確定拠出年金)**は最大限活用
  • 親切であることはキャリアにも人生にもプラス
  • 新人やインターンから学ぶ姿勢を忘れない
  • 自己投資(講座・書籍・カンファレンス)は価値あり
  • Webエンジニアの待遇改善を再度強調
  • 健康投資(椅子・キーボード等)は惜しまない
  • 優秀な上司や同僚から多くを学ぶこと
  • 人間関係の失敗も自己成長の糧
  • エンジニアの醍醐味は、思考法が似た人と出会えること
  • 女性・黒人エンジニアの少なさは業界の課題。変化の必要性を痛感
  • 嫌いだけど勧める技術は本当に有用なもの
  • gitのコマンドライン派。GUIツールは不要
  • データ分析特有の苦労(例:pandasへの愚痴)
  • セミテクニカルなアナリストの存在がチームを強くする
  • ダークモードは便利だが、強制されるならライトモード派
  • セキュリティは奥が深い。自分はまだまだ未熟
  • ベストプラクティスを知ることが良いエンジニア、破る判断力がシニアエンジニア
  • 責任追及文化の職場は離れるべき
  • 「本当の自分」を持ち込む職場文化への疑問
  • 飲み会は好きだが、家族や友人との時間を大切に
  • リーダーシップの真価は、部下のミスをかばう姿勢
  • 意見の対立を説明・調整できるリーダーを目指す
  • サイドプロジェクトは好きな人だけやればいい
  • アルゴリズムやデータ構造の面接偏重への違和感
  • DevOpsエンジニアへのリスペクト。高給も納得
  • 好きな仕事より嫌いじゃない仕事を選ぶ重要性
  • プロダクトに近い仕事ほど評価されやすい
  • Linux経験は後々役立つ
  • **曖昧なバズワード(例:ビッグデータ)**に警戒
  • シリコンバレー以外にも良い仕事は存在
  • 嫌いな言語も使い込めば評価が変わる。C#の例
  • 関数型言語の本質は関数が一級市民であること
  • どんなに優れた言語も、使われなければ意味がない
  • 言語の習得よりエコシステムの理解が難しい
  • ペアプログラミングの有用性

Hackerたちの意見

「2週間後に新しい仕事があるんだ。」ふふ、当時はみんなが市場を支配してたから、専門家ぶってたよね。
何を引用してるの?その文章が記事の中に見当たらないんだけど!?
> 401kを最大限活用しよう もしここに6桁の収入がある20代の人がいたら、よく聞いてね: 1. 401kを最大限に活用して、ターゲットデートリタイアメントファンドに全部投資しよう。(中には自社株ばっかり割り当てる会社もあるから、株価が下がったらリタイア資金が吹っ飛ぶ…配分を確認してね) 2. HSAを作って、それも最大限に活用しよう。全部ターゲットデートリタイアメントファンドに投資して、使わないで現金で医療費を払って、領収書を保存しておこう。リタイアしたらその領収書で払い戻しを受けられるよ。 3. IRAにも寄付して、最大限に活用しよう(必要ならバックドアロスもね)。それもターゲットデートリタイアメントファンドに全部投資しよう。 4. 生活費の6〜12ヶ月分を高利回りの貯蓄口座に入れておこう。23歳から始めて年収が10万ドルなら、45歳でリタイアできるよ。今はすごく年寄りに感じるかもしれないけど、後で貯金しようと思っても、45歳になった時には、リタイアするまでにこのクソみたいな仕事を20年も続けなきゃいけないことに気づくかもしれないよ。
ここが時々どれだけズレてるか、信じられないよ。
この戦略でも、節約して、趣味が安くて、子供も持たず、働いてない配偶者もいない限り、45歳でリタイアは無理だよ。それに、頼ってくる親や兄弟、親戚がいないことも気をつけてね。あと、キャンプが好きじゃない限り、どこか高い場所に住むことを期待しないでね。
HSAの払い戻しを後で取っておくのは良いアドバイスだね。それに、65歳を過ぎたらHSAから引き出してもペナルティはないし、その時点では普通の所得税がかかるだけだよ。
これは一体何を意味してるの?ヨーロッパからの挨拶。
> 2. HSAを作って、上限まで使い切るのがいいよ。それをターゲットデートリタイアメントファンドに全部投資して。使わずに、医療費は現金で払って、レシートを取っておくんだ。退職したら、そのレシートで払い戻しを受けられるからね。大事なポイントだけど、FSAはHSAじゃないからね、笑。
これって、いろいろな前提を仮定してるけど、実際には当てはまらないことも多いと思う。人はよく技術的に正しい(またはほぼ正しい)金融アドバイスをすぐに言うけど、実際の金融管理って、誰かの人生の中で単なる技術的な問題じゃないことがほとんどだよね。
今の「AIのせいでみんなクビにして、数ヶ月後に半額で再雇用する」っていう経済では、これらの方法はもう無理だと思う。もしあなたが上級管理職じゃないなら、こういう長期投資はもう現実的じゃないんじゃないかな。
退職した45歳で年収約10万ドルだった人、これが正しいアドバイスだって証明できる人いる?
> 45歳でリタイアできる でも、59.5歳まで引き出せない退職金制度にお金を全部ロックアップしちゃってたら、それは難しいよね。
これに対するネガティブなフィードバックはちょっと狂ってるね。これは新卒の大学生が良い給料の仕事に入るための非常に貴重なガイダンスだよ。
関連: 酔っ払い投稿: シニアエンジニアとして学んだこと - https://news.ycombinator.com/item?id=27333260 - 2021年5月(494件のコメント)
> ヒーローに会うな。俺は自分のヒーローの一人からコースを受けるために5千ドル払ったんだ。彼は素晴らしい人だけど、結局のところ、彼も俺たちと同じようにその場しのぎでやってるって気づいた。ハハ、これには共感したわ :D
みんな推測してるけど、ちょっと上手い人もいるよね。
子供の頃、思春期の頃、いつか大人になったら何かがパッと閃いて、物事が得意になって世界を理解できるようになるって想像してた。でも、それは起こらなかったし、誰にとってもそんなことは起こらないって気づいた。俺たちはみんな大きな子供みたいに、歩き回って物事を理解しようとしてるだけだ。早く理解する人もいれば、理解するのをやめる人もいるけど、全体的に見ればみんな同じくらい無知だよね。物事がうまくいくのは奇跡であり、俺たちの忍耐と野心の証だと思う。逆に、俺は何人かのヒーローに連絡を取ったけど(実際に会えたのは少ない)、それはいつも刺激的で成長を促す経験だった。良い理由があれば、ぜひやってみてほしいな。(まだ連絡を取ってないヒーローのリストがあるけど、面白い問題を提案する機会がまだないんだ。残念ながら、彼らの中には近い将来に期限がある人もいる。)
一度、私の周りで有名な人と一緒に働いたことがあって、その人は講演をしたり、ブログを運営したり、他の人の本を引用したり編集したりしてた。でも、彼のコードはその評判には全然見合ってなかった。彼のSDLCはさらにひどかったし。有名であることには、チームでの仕事と合わないエゴがあるんだと思う。彼は、コードレビューやPRの基本的なことを、ハーグに連れて行かれるようなものだと言って、他のチームメンバーを官僚の集まりだと見なしていた。
投稿にはかなりの問題があるね: - 一人でワインを飲むのは変だ。ウイスキー、ウォッカ、ビール(ロシア人なら)ってのが普通だよ。‘ever thing’みたいなスペルミスは、アルコールによる混乱した思考を示してるね、いい感じ。 - ウェブ開発者は専門家とは言えない最後の方だと思う。 - ダークモードは使わないけど、ブラウザ拡張が未対応のウェブページを解決してくれる。ダークモードは昔、黒/緑の画面でしか選べなかったから、変わってよかった。 - 薬剤師は学位とかなりの年数の勉強と試験が必要で、有機化学もたくさんやる。 - HNのコメントが無価値ってのは微妙な意見だね。たくさんの投稿(例えば、AppleのCEO交代)には無駄な情報がいっぱいだけど、コメントの方が投稿より良いことがよくある。
あなたの飲み物に関するコメント、変だね。
POV: ソノマの近くには住んでない。
> たくさんの投稿(例えば、AppleのCEO交代)には無駄な情報がいっぱい 誰かが気づいたのを読むのは面白いね :) トピックの広い魅力が大きな影響を与えたのかも。
個人的には、飲むことってすごくプライベートなことだから、ほとんどいつも一人で飲んでた。ピアノを弾くのと同じで、公の場で演奏するのはすごく変だと思ってたし、ほぼ公然と裸でいるのと同じくらいの感覚だった…
うわ、これ2021年なの?2014年みたいだ。SQL、2週間で新しい仕事、などなど。
SQLはなんか relevancy が薄くなったの?
どういうこと?2021-22年は雇用市場のピークだったよ。少なくともヨーロッパではね。仕事を得るためには、息をしてるだけでよかったんだ。マジでクレイジーだった。SQLは今でもすごく重要だよ。特にデータ関連の分野ではね。
> エンジニアとして学ぶべき最も過小評価されているスキルは、ドキュメントを書くことだよ。なぜ書くのかをドキュメントに残しておこう。コードは読めるけど、「invert_parameters」っていう200行もある曖昧な関数がなぜ存在するのか、その理由を知りたいんだ。この関数が解決した問題は何だったの?そもそもその問題はなぜあったの?コードベースの意図された寿命について意見を書いてみて。正直、未来の読者が、私が書いたコードが素晴らしいものを目指していたわけじゃなくて、時間に追われていたり、上司にプレッシャーをかけられていたり、あるいは何か狂ったことが起きていたことを理解できるように、謝罪のコメントを書くこともあるよ。特に明白じゃないものを書くときは、自分の考えを描写しておくと、コードを読むときに追加の文脈が得られるから、これをもっとやってほしいな、特に職場では。
残念ながら、こういうことをやっている人はほとんど見たことがないよ。こういう影の知識は、持ち主が会社を辞めると一緒に消えちゃって、他の人は頭を抱えることになるんだ。
別の考え方として、電気設計には回路図、部品リスト、基板レイアウト、動作理論が含まれるべきだよね。ソフトウェアでも同じことをしよう。コードだけじゃなくて、コードに加えてたくさんのUMLもいらない。動作理論を書いてほしい。主要なコンポーネントは何? なんでそれが主要なコンポーネントなの? どうやって相互作用するの? なんでそのように相互作用するの? システムは最も一般的なアクションをどうやって実行するの? 新しい開発者が最も可能性の高い変更をどうやって行うの?
AIがいる今、これがさらに重要だよね。AIはどんなコードでも読んで説明するのは得意だけど、何かがなぜそうなったのかを逆に解析するのは簡単じゃないから。
エンジニアとして学ぶべき本当に過小評価されているスキルは、テストの仕方だと思う。ドキュメントは色んな形を取ることができる:ADRs、システム図、仕様書、JIRAチケット、コミットメッセージや説明、PRの説明、コードコメント、慣用的で直感的なコードなどなど。これらの多くは、最新の状態を保つためにメンテナンスやレビューが必要だよね。古くなったテストはすぐに壊れたテストになってしまうし、ドキュメントとしての役割も果たすけど、TDDやBDDみたいなバズワードを使うだけで、明示的に育てられるスキルではないことが多い。もしかしたらSDETに任せられることもあるかもね。実装がリファクタリングされても生き残れる decent なテストセットを作ることが大事で、実行時のコードに結びつけたり、モックやスタブで埋めたりするのではなく、複雑なルーチンを説明するための良い方法が得られるよ。そうすれば、コードにコメントする時に「どうやって」や「何を」気にする必要がなくなるし、コードからコミット、イシュートラッカーを経て、さまざまな「なぜ」を持つことができる。
すごく同意する。コーダーには意図をドキュメントするように促してるんだ、そういう言い方をしてる。時には意図が明らかで説明がいらないこともあるけど、機能を実装してる時とかね。でも、意図が明らかでない場合、例えば何かの障害に対処するためとか、明らかでないビジネスニーズに応えるためとか、後で修正する予定の一時的なものを入れる時とか、読者にはそれを知ってもらう必要がある。読者やレビューアーの視点やニーズを考える人がこんなに少ないのは frustrating だよね、機械だけじゃなくて。
> ソフトウェアエンジニアの一番の魅力って何だと思う?自分と同じように考える人たちと出会って話せることだよね。必ずしもスポーツやテレビ番組みたいな同じ趣味があるわけじゃないけど、問題に対する考え方が似てるんだ。それってめっちゃクールだよね。けど、実際はそうでもなくて、出会う50人のうち1人くらいしか本当にこの仕事が好きな人はいない。残りは9時から5時まで働いて、職場での目立ちを求めたり、影響力のあるプロジェクトに関わりたいって言うけど、自分の問題や意見を深く話すことはほとんどないんだよね。
それ、わかる。どこに行っても1人か2人は見つかるけど、それだけだね。深い繋がりはほんとに少ない。
学術界で「似たような考え方を持つ人」を見つける方が運が良かったな。
それがソフトウェアエンジニアに特有だとはあまり思えないけどね。でもOPはその時酔っ払ってたから、ちょっとラブラブな気分だったのかも。
> キャリアを進める一番の方法は、会社を変えることだと思う。これって面白いよね。うちの会社では、転職を悪いことと見なしてるんだ。5年以上前の自分のコードが実際に動いてるのを見ることで得られる独特の視点があると思う。他の人のコードについて話すとき、短期間しか働いてない人ってわかるんだよね。
たぶん、彼らはもっと収入を得てるんだろうね。昇給が頻繁にあるから、スキルを磨くための自由な時間を買えるわけで、固定給と企業からの最小限の株式を集めて、5年間ほとんど報われない仕事の満足感を得るよりもずっといいよね。
ほぼフィボナッチ的な感じかもね。最初の1年の変更はまあいいとして、2回目も大丈夫かも。でもそれ以降は、仕事の長さが上がり始めないとまずいよ、アラームベルだね(契約じゃない限り)。
1年以上何かを続けられないなら、誰にとっても厳しく見えるよね。18〜24ヶ月が収入を改善するためのちょうどいい期間だったみたい。特に、4年後の株式の約束がほとんど意味がないことが多いし、昇進やインフレやパフォーマンスに対するまともな昇給もほとんど見ないからね。もし雇用主が市場を利用することで評価を下げるなら、十分な報酬を提示して長くいてもらう必要があるよ。
> Hacker newsやr/programmingは、一般的なアイデアを得たり、最新情報を追ったりするにはいいけど、コメントはほとんど役に立たないよね。HNのモデレーターに制限されちゃって、今は1日に数回しか返信できないから、もうコメント読むのもやめちゃった。参加できないのに続けるのもなんか気持ち悪いし、完全に禁止されるんじゃなくて、ペースを落とすことで優しさを示そうとしてる感じ。これで自分が何かを逃してしまうのか心配だったけど、コメントをチェックしたいっていう「引き」も、実はそんなに悪い習慣じゃないかもって思えてきた。自分が思ってたほど価値を得てなかったのかもしれないし(少なくともそう願ってる)。
ちょっとした視点: ここに参加してる気はするけど、ほとんどの日はコメントすら書かないんだよね。コメントするときも、1日に2つ以上書くことはめったにない。
わからないな、Lobstersの招待状はもらったことないけど、定期的に見てるよ。参加できなくても、面白いリンクやコメントが見つかるし。