ソフトウェアエンジニアのための「技術」ではなく、キャリアや学習方法、生産性、メンタルに関してなど、ソフトウェアエンジニアがより良い人生を歩めるようになるための本「SOFT SKILLS ソフトウェア開発者の人生マニュアル」についていくつか紹介します。
ソフトウェアエンジニアではなくセキュリティエンジニアなどであっても同様に使える内容となっています。
ソフトウェア開発のキャリアを事業として考える
自分自身の業績とはあまり関係のない「いつもの給料」をもらうことに慣れてしまうと、自分は会社の従業員に過ぎないというマインドセットに簡単に染まってしまう。
一時的なキャリアとして、あなたが特定の会社の従業員であることに間違いはないかもしれないが、そのときの肩書が自分や自分のキャリアを表していると考えないことが大切だ。
まず初めの一歩として、自分はただの会社の従業員だという考え方を改めることが必要になる。
事業として考えることで、他のソフトウェアエンジニアとどう違うのかを伝える必要性や専門性を磨くことを考えるようになる。
事業として考えるようになったら、次にやるべきことはビジネスの目標を決める。
しかし、多くのエンジニアは目標をはっきりとさせない、長期的なビジョンを立てることを恐れている、なぜだろうか。
どれかひとつの道を選んでその道をずんずん進むのが恐いため、あらゆるオプションを選べるように残しておきたいのだ。
選んで道が間違っていたら、どうしよう。
行った先が気に入らなかったら、どうしよう。
実際、これは恐ろしい問いではある。
ひとつの道を選び間違えることは恐いが、専門性を身につけるためには必要なこと。
間違えたらまたやり直せばいい。
目標の設定の方法は、大きな目標とその目標を達成するための小さな目標を決める。
設定した目標は定期的に見直して再設定する。
毎日見える所に大きな目標を貼っておき、常に思い出すのも良い。
面接をハッキングするコツ
最初に入社した会社があなたにとってベストな会社である可能性は低い。
また、自分の目標が変わったことで会社を変える必要性も出てくるかもしれない。
その時に、自分の入りたい会社に入れるようにするための技術も必要になる。
ベストなシナリオとしては、以下のようなものではないだろうか。
面接官と握手すると、面接官があなたを見たあと、一瞬、間をおいてあなたを認識し、顔をほころばせる。
「ああ、あなたのことは知っていますよ。ブログで写真を見ていますからね。あなたのブログポストはずいぶん読んでいますよ」
もちろん、 ベストなシナリオなのでこのようなケースは難しい。
ここで重要なことは、多くの応募者の中で合格するためには技術的な要因だけでなく、面接官に気に入ってもらえるかどうか、という点も重要であるということである。
面接が始まる前に多くのできることがある。
雇用形態
多くのエンジニアは会社の従業員であるが、それ以外のキャリアもある。
どのような選択肢があるのかを理解することで、将来の方向性を具体的に考えられるようになる。
従業員
メリット:安定、有給休暇
デメリット:自由が少ない、収入が頭打ち
道筋がはっきりとしているため、他の選択肢よりも選びやすいのも真実。
独立系コンサルタント
自分の会社を持っていて、クライアントと契約を結ぶが、特定のクライアントに縛られたりしない。
メリット:自由度が増える、収入が増える可能性がある
デメリット:自分で仕事を探すなどの負担が増える
独立系コンサルタントになることで、誰かの下につくことなく自分が自分の上司になれると思うかもしれないが、場合によって上司が一人からたくさんになるだけかもしれない。
しかし、時間の使い方は自由になり、自分でどの仕事をするかの選択もできる。
アントレプレナー
ソフトウェア開発者が選べるキャリアとしてもっとも難しく、もっとも不定形で、もっとも高収入が得られる可能性があり、プロのギャンブラーになるのと同じようなものとも言える。
ここでのソフトウェア開発者のアントレプレナーは、独自の事業か製品を開発している人を指している。
メリット:完全な自由、大儲けの可能性、やりたい仕事ができる、上司がいない
デメリット:とてもリスキー、完全に自己責任、ソフトウェア開発以外に非常に多くのスキルが必要、仕事に非常に多くの時間が取れる可能性
あなたはどのタイプのソフトウェア開発者か
スペシャリストになることが重要。
ジェネラリストになれば、クライアントの枠が大きくなるように見えるかもしれない。
しかし、実際にはスペシャリストが必要だということを知らないくらい事情に疎い人々しか、クライアントにならない。
スペシャリストになると確かにチャンスは減る(クライアントの絶対数は減る)が、チャンスを獲得する可能性は高くなる。
会社の規模による違い
会社の選択時に給料だけを見てしまうことがあるが、長い目で見た場合には職場環境が重要な意味を持ってくる。
小さな会社とスタートアップ
小さな会社ではコードを書いていれば良いというわけにはいかず、様々な役割を演じなければならないことが多い。
職務の定義が曖昧になりがちなので柔軟な対応が求められる。
どのような人に合うか
・いつも新しい課題に挑戦していたタイプには合う可能性が高い。
・また、自分が行ったことの会社への影響が大きくなり、自分の仕事の貢献が直接わかる。影響が目に見える方が好きな人には小さな会社がよい場所になる。
安定性は大企業よりも大きく劣り、給料が払えなくなる可能性もあれば、大きな報酬が貰えるようになる可能性もある。
ただし、ストックオプションでお金持ちになれるかも、という期待だけでスタートアップを選ぶことはお勧めしない、燃え尽きてしまうだけになる可能性が高い。
ペースが早くテンションが上がる環境が好きで、何かを作り上げるための一員になり、それが成長するのを見てみたいという理由で、小企業やスタートアップを選ぶ方がいい。
中規模の企業
中規模の企業では、小企業よりも職務がはっきりし、大企業よりも安定しているとも言える。
大企業は大規模な人員削減を行ったり、定期的に組織変更をしたちすることが多いので、中企業の方が大企業よりも安定しているとさえ言えるかもしれない。
安定性を求めるなら、中企業がもっとも合っているだろう。
(※ 海外の本であるためにこのような記述が書かれ、現在では日本の大企業も人員削減を行うことは稀にある。しかし、日本ではまだまだ大企業の方が安定していると私は思う。)
どのような人に合うか
・じっくり堅実なタイプの方が評価されやすく合っていると言える
・最先端の仕事がしたいという人には合わない。中企業ではリスクを取りにくいためだ。
大企業
大企業は面白い存在だ。個々の大企業は、お互いに大きく異なる。たいていの大企業には、会社のあらゆる側面に浸透している非常に深い企業文化がある。
どのような人に合うか
・大企業では決められた手続きが多く、確立された仕事のやり方に従う必要がある。そのような環境が好きな人は楽しく働くことができる。
・ 自分の貢献を感じにくい部分があり、不満を持ちやすい環境であるため、大きなプロジェクトの一部分しか関わらなくても満足できるという人には合うと思われる。
大企業では人の目につかないようにし、サボることも容易である。
(大企業で働いたことのある人であれば同意できると思う)
大企業については、最後にひとこと触れておかなければならないことがある。
政治だ。
大企業には、大きな政府に匹敵するほどの複雑な政治システムがあることが多い。
エンジニアの多くが政治は嫌い、苦手で避けたいと感じていると思う。
避けることも可能ではあるが、
大企業の出世階段を上るには、会社のなかの複雑な政治的環境を泳ぎ渡る方法を学ばなければならないはずだ。
政治的な動きが苦手で完全に避けたいと思っているなら、フラットな管理構造を持つ小企業を探すといい。
上記はあくまで一般的な話で、各会社ごとに独自の文化がある。
もし、就職先を選ぶのであれば、実際に中で働くエンジニアに話を聞き確かめる必要がある。
参考
Qiita 「【まつもとゆきひろ氏 特別講演】20代エンジニアのためのプログラマー勉強法のまとめ 2019/3/30」
こちらもエンジニアとしてどう過ごすべきかが書かれています。
Rubyの開発者まつもとゆきひろさんの講演をまとめたものとなっています。
(SOFT SKILLSの巻末にもまつもとさんの解説が短いですがあります)
TED 「How to find work you love」
今の仕事に不満がある、自分が本当にやりたいことが他にあるのでは、と思った時に見ると良い動画。
新しい仕事を始めようかなと思わされます。
同じ作者の新しい本「CAREER SKILLS ソフトウェア開発者の完全キャリアガイド」
Twitter アカウント