- 私たちは、技術とソフトスキルの向上に努めています。しかし、私たちの性格や考え方は、当然のことだと思っています。私たちが誰であるかの生まれつきの固定された部分。したがって、自動操縦で実行させます。
- この考え方は有害です。あなたのマインドセットは、ソフトウェア開発のキャリアを成功させるために重要であるだけでなく (スキルよりも重要かもしれません)、コントロールすることもできます。
- 真の上級開発者は、キャラクターの特性が順応性があり、自分の考え方を自覚しており、意図的にそれに取り組んでいることを認識しています。これは、彼らを群衆から際立たせ、キャリアを加速させる超大国です。
- この投稿では、成功する開発者の最も重要な 10 の特徴と、それらが重要な理由について説明し、それらを形成する方法に関するいくつかのヒントを共有します。
専門的なソフトウェア開発は複雑な分野であり、成功するにはさまざまな能力が必要です。それらを 3 つの主なカテゴリに分類できます。
これは最も明白なグループです。開発者として成功するためには、プログラミング言語とフレームワーク、クリーン コードの原則、アーキテクチャ、テスト、デバッグなどを得意とする必要があります。また、ツール (バージョン管理、コマンド ライン、IDE) についても熟知している必要があります。
ただし、技術的なスキルだけでは、プロのチームベースのセットアップではうまくいきません.そのため、ソフトスキルも必要です。
大規模な商用プロジェクトに取り組むには、チームワーク、コミュニケーション、プロジェクトの管理と計画、リモートワーク、自己組織化、学習、個人の生産性などの一連の確かなソフト スキルが必要です。
私たちの多くは、これらのスキルは技術的なスキルよりも楽しくないと感じているため、無視することがよくあります.しかし、少なくとも私たちはそれらを認めています。
ただし、3 番目のカテゴリもあります。これも同様に重要ですが、他の点では優秀な開発者でさえ、ほとんどすべてのレーダーの下を飛んでいます。
マインドセットはソフト スキルに似ていますが、それを構成する「スキル」は、好奇心、忍耐力、共感力、根性、適応力など、より基本的でコアな特性です。
あるレベルでは、これらの特性がソフトウェア開発のキャリアを成功させるために重要であることを知っています。しかし、それらは私たちのパーソナリティの生来の固定された部分であるように見えるため、プロジェクト管理や個人の生産性テクニックを学ぶのと同じ方法でそれらを意図的に学ぼうとはしません.
これにより、スキルセットの巨大で重要な部分が見えなくなり、進歩が著しく損なわれる可能性があります。
[プロの開発者としてのキャリアを前進させるためのさらに包括的な視点については、GitHub の「真のシニア開発者になるための決定的なガイド」をチェックしてください]
ソフトウェア開発は複雑で、時には苛立たしく、非常に動きの速い分野です。開発者として学習し、成長し、関連性を維持する (そしてその過程で燃え尽きない) には、特定の性格特性の組み合わせが必要です。
同時に、それは 100% チーム ゲームです。一匹狼のハッカーは、技術的にどれほど優れていても、プロのソフトウェア開発に参加することはできません。そして、チーム内でうまく機能するには、一見正反対の別の特性セットが必要です。
マインドセットはスキルとは別のものです。アジャイル開発の原則を理解することは、順応性があり、頻繁な変化を受け入れることと同じではありません。
また、デバッグ手法を知ることは、燃え尽きたり落胆したりせずに数時間問題を追跡することを実際に楽しむ好奇心と粘り強さを持っていることと同じではありません。
しかし、これらの特性は私たちの性格に固定されて生まれつき備わっているように見えるかもしれませんが、スキルとして同様に学習可能です。
プログラマーにとってどのような特性が重要なのかを理解し、時間をかけて意図的に磨き上げなければ、潜在能力を最大限に発揮することはできません。真の上級開発者はこれを知っており、自分の考え方を自覚しており、継続的に改善に取り組んでいます。
これが差別化要因であり、最高の開発者を群衆から引き離す超大国です。
わかりましたが、どの特性が最も重要ですか?詳細をもう少し掘り下げてみましょう。
ソフトウェア開発とは何かを一言で表すなら、それは学習だと思います。絶えず進化するテクノロジーとソフトウェア開発プロセスを常に最新の状態に保つ必要があります。
複雑なビジネス ドメイン (キャリアを通じていくつかのドメイン) の詳細を学ぶ必要があります。要件を分析して明確にすることは学習です。研究は学びです。
パフォーマンスの最適化とデバッグ、つまりコードの内部の仕組みを深く掘り下げることも一種の学習です。
ソフトウェア開発は、人と (そして人のために) 作業することでもあります。
さまざまな専門分野やバックグラウンドを持つ多様な人々 (現在はリモートの時代であり、おそらく複数の国や文化から来ている可能性が高い) を持つ、機能横断的なチームで作業します。
「ビジネス」を理解する必要があります。ユーザーのペインポイントと問題を理解し、解決する必要があります。
健全な好奇心がなければ、これらすべてのことで効果が低下するだけでなく、すぐに燃え尽きてしまいます。
ソフトウェア開発は巨大なパズルであり、解決すべき問題の無限の流れです。あなたが開発者として雇われる理由は、あなたの会社や顧客の問題を解決するためです。
そのためには、組織の問題 (チームとして機能する方法、作業を整理する方法、使用するプロセス) と技術的な問題 (ロジック、アーキテクチャ、パフォーマンスなど) を解決する必要があります。
これらの問題は、特定の関数や単体テストを設計して名前を付ける方法などのアトミックな問題に至るまで、さらに小さな入れ子になった問題で構成されます。
このようなパズルを解くのが好きでなかったり、問題を分解したり解きほぐしたりするコツがなければ、ソフトウェア開発のキャリアは苦労するでしょう。
真の上級開発者になるには、何年にもわたる慎重な練習が必要です。また、途中で多くの挫折を経験するでしょう。キャリア開発はやりがいがありますが、時間がかかり、時には苦痛を伴うプロセスでもあります。
卓越性を達成してトップに立つには、生涯にわたる献身の準備ができていなければなりません。そして、これには多くの忍耐が必要です。
技術サポートの処理、技術にあまり詳しくないユーザーとの共同作業、組織の官僚主義への対処など、私たちの仕事に関連する多くのことでも忍耐が重要です。さらに、問題解決の大きな助けになります。
そして、忍耐力がなければ、テクノロジーのように急速に変化し、変化し続ける業界で働き続けることはできません。
ソフトウェア開発には多くの持続性が必要です。ハンティング バグ。十分に文書化されていない API とライブラリの解読。レガシー コードのもつれを解きます。パフォーマンスのボトルネックを追跡します。深い集中力を長時間維持するだけでも。
どんなに年上であっても、苦労し、失敗し、立ち往生し、イライラすることがよくあります。そして、燃え尽きないようにやり抜くには、多くの気骨が必要です。
しかし、適切なグリットの量も理解する必要があります。非生産的に何時間も何日も壁に頭をぶつけることと、道路の小さな段差にぶつかったときにすぐに助けを求めてチームを常に混乱させることとの間のスイートスポットは何ですか?
ソフトウェア開発は、人とチームを中心に展開します。同僚と個々のレベルで非常に緊密に連携します。プログラムをペアにし、一緒にデバッグし、コードをレビューします。
また、チーム構成で彼らと協力します。グループとしてブレインストーミング、計画、決定を行います。そして、この共同作業は厄介です。作業が重複したり、衝突したりして、意見が異なることになります。
経営陣とロードマップについて交渉します。最後に、優れた製品を構築するには、ユーザーの立場に身を置く必要があります。
その上、これらの人々はすべて、技術的および非技術的の両方の多様なバックグラウンドを持っています。彼らは情熱的です。彼らは強い意見を持っています。たまに難しいキャラもいます。
そして、開発者としての成功は、開発者との信頼関係をどれだけうまく構築できるかにかかっています。高度な心の知能指数がなければ、それは不可能です。
ソフトウェア開発 (および一般的にチームで作業すること) は、バランスを取る作業です。一方では、あなたはあなたの専門知識のために雇われています。強い意見を持ち、技術にあまり詳しくない人や若い人を導くことが期待されます。
一方で、同じように経験豊富で自分の意見を持っているチームメイトと一緒に仕事をすることになり、彼らはあなたの視点に異議を唱え、グループの意思決定を行う必要があります。
その過程であなたの自我は傷つくことがよくあります。あなたはそれを抑えることができなければなりません - しかし、引きこもって解放されることはありません.
あなたは独断的である必要がありますが、熱狂的ではありません。強い視点を持っていますが、それを弱く保持しています。それ以外の場合は、納得することを受け入れてください。あなたは自分の意見を擁護する準備ができている必要がありますが、いつ手放すべきかを知っていなければなりません。
チーム、ビジネス、顧客を尊重する必要があります。反対することはできますが、コミットすることができます。そして、建設的な (そして純粋に否定的な) フィードバックを優雅に受け取ります。そうでないと、チームで効果的に仕事をすることができません。
ソフトウェア開発のすべてが非常に速く進んでいます。テクノロジーは常に変化しています。新しい方法論が普及します。企業はピボットします。
キャリアを通じて、プロジェクト、チーム、会社、ビジネス ドメインも変更します。 1 つのプロジェクトでさえ、調査と適応の絶え間ない行為です (特にアジャイル アプローチでは)。そして、あなたのチームも常に自己再編成します。
ほとんどの人は変化にアレルギーを持っています。変更は難しいです。不快です。ストレスです。順応性があり、変化に対してオープンであることは、すぐにあなたを際立たせます。年功序列のはしごのてっぺんに登れるだけでなく、そこに長くとどまることができます。
うんざりするほど繰り返しますが、ソフトウェア開発はチーム ゲームです。あなたの同僚、マネージャー、そして会社は皆、あなたがあなたの役割を果たすことを期待しています。
あなたの技術的な専門知識に関係なく、マイクロマネージされずにあなたの仕事を引き受け、約束を果たすことに頼ることができなければ、誰もあなたを真の上級開発者とはみなしません。
決して間違いを犯してはいけないというわけではありません。失敗は起こります。そして最高の企業は、それらを貴重な学習機会と見なしています。
しかし、これを可能にするには、落としたボールを拾い上げ、優雅に回復し、失敗から学び、将来同じことを繰り返さないと信頼される必要があります。
プロのソフトウェア開発はトレードオフの芸術です。開発速度と品質の間で常に妥協する必要があります。新しくて有望なものと、実績のある安定したものとのバランスをとります。
アンダーエンジニアリングとオーバーエンジニアリングの間の細い線をたどってください。
プロのソフトウェア開発で成功するには、非常に実用的である必要があります。黒か白かということはなく、すべての状況に当てはまる原則やパターンなどないことを理解する必要があります。
さまざまなアプローチ、テクノロジ、およびソリューション間のトレードオフを行うには、優れた直感が必要です。手抜きを快適に感じますが、どれだけ良い感覚があります。
プログラマーとしてのあなたの人生は、太陽と虹だけではありません。迷惑なお客様に遭遇します。厳しい締め切りに直面します。プロジェクトがキャンセルされる場合があります。チームや経営陣と意見が合わないかもしれませんが、それでもコミットして実行する必要があります。
また、醜いコードも扱います。 (はい、Google のようなトップ企業であっても、すべてのコードベースには良い部分と悪い部分があります。)
疲れたり、イライラしたり、動揺したりするでしょう。
否定的な考えに支配され、批判や不平を言い始めると、自分自身のやる気をなくすだけでなく、チームの士気も殺してしまいます。これでは、キャリアに大きな影響が及ぶことはありません。
ポジティブに偏る必要があります。楽観的で陽気になりましょう。常に銀色の裏地を探してください。チームを結集し、機嫌を消し、士気を回復する人物になりましょう。注目されて昇進するだけでなく、キャリアをより快適で持続可能なものにします。
明らかに、スキルはトレーニングすることができます-ソフトとテクニカルの両方です。コミュニケーションだけでなく、デバッグも上手にできます。しかし、好奇心や前向きな見方など、生まれつき備わっているように見える特性についてはどうでしょうか。もっと楽観的になったり、好奇心旺盛になったりするように自分を訓練できますか?
はい、できます!これは膨大なトピックであり、数冊の本に値します (Carol S. Dweck の「Mindset」は出発点として最適です)。しかし、いくつかのヒントを簡単に共有させてください。
また、認知バイアスと習慣形成について少し学ぶことをお勧めします.これはよく発達した分野であり、膨大な知識があり、探索するのはとても楽しいものです。
真の上級開発者になりたい場合は、完全な開発者になる必要があります。技術スキル、ソフト スキル、キャラクターの特性を適切に組み合わせなければならず、このトリオのどの部分も無視することはできません。
キャラクターの特徴は最もトリッキーな部分です。ほとんどの開発者は、それらを認識していないか、どれが重要かを知らないか、それらが順応性があると信じていないため、それらを無視しています。
しかし、この欠陥のある考え方を克服でき、考え方を変えることができれば、それをスーパーパワーに変えて、キャリアを向上させ、真に際立たせることができます。