paint-brush
経験豊富なプログラマーの重要な属性: 仕事と行動by@ivandovhal
1,651
1,651

経験豊富なプログラマーの重要な属性: 仕事と行動

Ivan Dovhal12m2022/07/13
Read on Terminal Reader
Read this story w/o Javascript

プログラマーに必要な一連のスキルを定義するには、さまざまなアプローチがあります。要件は、一緒に働く会社、プロジェクト、チームによって異なります。経験豊富なプログラマーとは、理論を知っているだけでなく、実際の実際の問題に取り組む人です。非標準的な問題の解決策を見つける方法を知っています。プログラミングへの愛情や働きたいという欲求など、他にも重要な資質がいくつかあります。これから説明する機能の残りの部分は、技術的な知識と個人の特性の 2 つのカテゴリに分けることができます。フロントエンド開発者にとっては、React、Angular、および Vue です。

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - 経験豊富なプログラマーの重要な属性: 仕事と行動
Ivan Dovhal HackerNoon profile picture


この記事は、初心者のエンジニアだけでなく、エンジニアリングのリーダーシップを育成し、成長を求め、新たな高みに到達したい人に特に役立ちます。候補者は、技術面接で何が期待されているか、およびこれらの面接で採用されている選択基準についても知ることができます。


プログラマーの「生きた頭脳」または経験豊富な開発者の基本的なスキルセット


プログラマーに必要な一連のスキルを定義するには、さまざまなアプローチがあります。要件は、一緒に働く会社、プロジェクト、およびチームによって異なります。最も一般的なのは、「経験豊富な」プログラマーを、理論を知っているだけでなく、実際の実際的な問題にうまく対処できる人として定義するものです。非標準的な問題の解決策を見つける方法を知っています。


どうやら、すべての経験豊富なプログラマーには共通の重要な機能が 1 つあります。それは、関連情報を検索する機能です。プログラミングへの愛情や働きたいという欲求など、他にも重要な資質がいくつかあります。働きたいという気持ちがなければ、いくら素晴らしい経験や才能があっても役に立たない。職場では、テクノロジーに精通しているのに仕事に消極的な人たちと出会いました。


基本的なプログラマー スキルには、優れた記憶力、集中して新しいテクノロジを学習する能力、および論理的思考が含まれます。つまり、経験豊富なプログラマーは、うまく機能する「生きた頭脳」を持っている必要があります。あなたはそれなしでは続けることができません。これらの重要な特性は、子供の頃からの職業としてのプログラミングの傾向を決定します。


これから説明する残りの機能は、技術的な知識と個人の特性の 2 つのカテゴリに分けることができます。さまざまな研修やコースで専門知識を習得し、実践で磨くことができたとしても、人間の性質に反する個人の資質(またはソフトスキル)は簡単に習得できません。いずれにせよ、経験豊富なプログラマーは独自の方法で作成し、これら 2 つの分野で多くのことを学びます。


経験豊富なプログラマーは、1 つ以上のテクノロジといくつかのフレームワークに精通していることは明らかです。ただし、特定のテクノロジーを習得する前に、プログラマーはシステムとネットワークの基本アーキテクチャ、データ構造とアルゴリズムに関する知識を習得します。システム管理、およびコンピュータ サイエンス全般。システム管理者と DevOps の両方がこの道をたどります。プログラミング自体に関しては、データ構造とアルゴリズム、テクノロジーの抽象化、および OOP の原則を理解することが重要です。


特定の言語を学習した後、プログラマはフレームワークとライブラリの学習に進みます。これらは、より小さなものを結合するより高い抽象化です。フロントエンド開発者にとっては、React、Angular、および Vue です。


次のポイントは、理想的なプログラマーの「生きた脳」の内部の働きを概説しています。


🔴 テクノロジーに対する深い理解と最善のアプローチの発見


経験豊富なプログラマーは、いくつかのテクノロジを理解し、最適なアプローチを適用する必要があります。この知識は表面的なものではなく、実際に習得されます。体系的なアプローチにより、プロジェクトの全体像を見ることができます。部分的ではなく全体として認識し、開発に最適なアプローチを選択します。生産性と効率の概念は混同されることがあります。プロジェクトをすばやく完了することはできますが、多くの間違いを犯し、慎重な段階的な開発プロセスよりもデバッグに時間がかかります。


速度は必ずしもシニア エンジニアの資格を示すものではありません。代わりに、結果指向は不可欠な機能です。アクションと移動の効率は、多数のコード行と速度よりも重要です。品質とスピードのバランスがとれたプロジェクト開発へのアプローチを見つけることは、経験豊富なエンジニアの力の範囲内です。


🔴 UXに気を配る


プログラマーの良い習慣は、常にユーザー エクスペリエンスに注意を払うことです。つまり、プログラムがユーザーの視点からどのように見えるか、便利でわかりやすいかどうかを考えることです。


機能がどのように機能するかを予測するのに、デザイナーである必要はありません。開発プロセスでのエラーを回避するために、コードのテストをマスターすることも役立ちます。


🔴 技術プロセスへのこだわり


技術的なプロセスに従うことは、プログラマー、特に経験豊富なプログラマーの良い習慣と見なすことができます。これは重要なニュアンスです。変数や関数を変更する前に、それがどこで使用されているかを確認する必要があります。

技術文書を詳しく調べる必要があります。これにより、ばかげたミスを回避し、時間を節約し、Tech Lead の神経を節約することができます。まあ、経験豊富な人はこれを知っていて、他の人に教えます🙂


🔴 他の人が扱いやすい読みやすいコードを書く


このスキルは前のスキルから派生したものです。技術的なプロセスが完全に守られているため、誰もが簡単にプロジェクトに取り組むことができます。他の人もあなたのコードで動作する可能性があることを忘れないでください。したがって、自分で行ったかのように記述してください。あなたの「松葉杖」はブーメランで戻ってきます。コードをテストして定期的にリファクタリングし、変数や関数と呼ぶものについてよく考え、他のものについて考えることをお勧めします。


プロジェクトに適したテクノロジーを選択することは、非常に重要なスキルです。経験豊富なプログラマーは、チームの他のメンバーが苦労する場合でも、慣れ親しんだテクノロジを使用することを主張することがあります。代わりに、チーム全体を考慮して決定を下す必要があります。あなたの行動を他の人と相談し、話し合い、調整してください。


🔴 アーキテクチャの定性分析と開発


建築を定性的に分析して理解するには、理論を知り、十分な実務経験を積む必要があります。シニア エンジニアは、包括的な要件分析を実行し、さまざまなレベルで効果的に実装できるソフトウェア アーキテクチャを開発することができます。


同時に、プログラムの可読性と開発効率のバランスを取ることが不可欠です。計画段階での問題を回避するために、経験豊富なプログラマーはさまざまなテクノロジを知っており、適切なテクノロジを選択できます。


🔴 模式的に説明する能力


経験豊富なプログラマーにとって、特にテック リードにとって、テクノロジーの原理に関する情報をグラフィカルに、また簡単な図を使用して説明する能力は、非常に役立つスキルです。

チャート、グラフ、およびダイアグラムは、テクノロジーとプロジェクトの両方の全体像を提供します。視覚化システムのアプローチにより、チーム全体の作業が簡素化されます。このようにして、テック リードは全体像を他の人に伝えることができます。


🔴 効果的なワークフローの作成


経験豊富なエンジニアは、チームのパフォーマンスと自分のパフォーマンスを区別します。チームの効率を高めるために、ワークフローを構築するか、自動展開などの新しいテクノロジを選択します。

また、チームの他のプログラマーがコード レビュー中に、より多くのことを学び、間違いを分析することを奨励しようとします。


健全な完璧主義、または質の高いコードを書き、仕事で死なない方法


経験豊富なプログラマーは、ビジネス目標を達成することの重要性を十分に認識しており、実装とコード品質のバランスを取ることができます。結局のところ、コードの品質を掘り下げると、1 つのタスクに 1 か月かかることもあり、最後の日までやり直しを続けることで、プロジェクト全体を完璧に仕上げることができます。しかし、ビジネスが成長するためには、品質と顧客の要求のバランスを見つける必要があります。


ビジネス タスクだけに集中し、コードを「松葉づえ」で埋め尽くすプログラマーがいます。以前は 1 つのプロジェクトに取り組んでいましたが、新しい機能を実装するのに 1 か月を要したため、2 年間の開発の後、完全にシャットダウンする必要がありました。アプローチとテクノロジーの「シチュー」を扱うのはまったく不可能でした。そうやって早くやりたいという欲求が悲しい結果につながるのです。


私は、コード品質に深く入り込み、1 つのタスクに 2 か月間行き詰まるプログラマーを知っていました。正直なところ、彼らが仕事を続けていることに驚きました。最終的に、このタスクは克服できないことが判明しました。つまり、バランスを見つけることが重要です。


完璧主義は私の心の近くにあります。ただし、無理をせずに健全なアプローチが必要です。通常、人は変わりません。面接でもそういう人がいて、一緒に仕事をするのは大変だなと思います。


以下のポイントは、健康的な完璧主義の利点を際立たせています


🔴 チームで働く能力


デフォルトでは、どのプロジェクトでもチーム プレーヤーが評価されることは明らかです。これは、彼らの非対立的な性質と、責任を負い、コミュニケーションを取り、信頼できる能力を物語っています。

自分の意見を持ちながら、他人の意見を聞くことができます。


🔴 複雑なタスクに対する自信


経験豊富なプログラマーは自信がありますが、頑固ではありません。彼らはすでにある程度の専門知識と十分な技術的知識を持っているため、複雑な作業に対処できるため、困難な作業を恐れません。


経験豊富なエンジニアは、フレームワークの開発からコーディングまで、さまざまな観点からプロジェクトを計画し、適切なアドバイスを提供し、結果志向であり続けることができます。そのような人々はチームで高く評価されています。彼らとプロの戦いに参加できることを嬉しく思います。いつでも何かを学ぶことができます。


🔴 必要な情報を開発し、見つけたいという絶え間ない欲求


繰り返しになりますが、経験豊富なエンジニアは、いくつかのフレームワークに精通しており、多数のテクノロジーを扱うことができます。そのためには、常に進化し、仕事以外で新しいことを学ぶ機会を探す必要があります。経験豊富な人はすぐに学び、仕事に必要な新しいトレンドを把握します。一部のエンジニアは、自分の過ちから学ぶだけで十分だと考えています。確かに、実際には多くの知識を得ることができますが、他の人の経験に基づいてそれを深める必要があります。今日、オンラインで十分な情報があり、本当に多くのことを学ぶことができます。


おそらく、プロジェクトのドメインをマスターすることは、追加の利点になるでしょう。たとえば、Fintech プロジェクトに参加している場合、ビジネスの観点からソフトウェアの価値を理解し、その分野の特定の機能プロセスを知っていることが期待されます。


🔴 バランスを保つ能力


プロジェクトの開発中は、さまざまな不測の事態が発生し、バグが表面化する可能性があります。彼らは経験の浅いプログラマーを驚かせ、追い詰めます。経験豊富なエンジニアは、パニックに陥ったり怒鳴ったりしても役に立たないため、冷静にすべてを解決しなければならないことを知っています。おそらく、バグは純粋に人的要因によって引き起こされました。

経験豊富なプログラマーは、バランスを保ちながら代替ソリューションを見つけます。感情的になるよりも、冷静に問題の非標準的な解決策を見つける方が簡単です。


🔴 知識を共有し、フィードバックを提供する能力


経験豊富なプログラマーが他の人と知識を共有するのが理想的です。ウェビナー、会議、ハッカソンに参加します。本や他の人の理論から知識を共有することと、自分の経験、つまり過去の「苦痛」を提供することは別のことです。ネットワーキングは本当に役に立ちますが、それを楽しんでいない人もいます。


経験豊富なプログラマーは、他の人の作業にフィードバックを与えることがいかに重要かを知っています。これにより、ジュニア プロフェッショナルは、潜在的な成長分野、何を修正し、どのミスを避けるべきかを理解する機会を得ることができます。


タイムリーなフィードバックは、透明な管理と効果的なコミュニケーションに関するものです。チームリーダーの立場にあるプログラマーがこれを理解し、実践してくれるとよいです。


🔴 自分の過ちを認める能力


経験豊富なプログラマーのもう 1 つの優れた特徴は、間違いを認めることです。この能力は、責任を取る方法を知っていることを意味します。間違いは、教訓を学び、将来のための貴重な経験を得る機会です。 Tech Lead は、他の誰かのバグの責任を負う代わりに、コード レビュー中に有用な洞察を提供し、特定の問題を解決する方法を教えてくれます。


経験豊富なプログラマーは、間違いなく後輩を「バスの下に」放り込んで、初心者のせいに指を向けたりはしません。チーム全体が機能し、誰もが独自の責任範囲を持っています。誰かの浮気はチーム全体に影響を与えます。それを心に留めておくことで、信頼と透明性のある関係を築きやすくなります。


先輩が許せない失敗


失敗は、技術的なものと人間的なものの両方で発生する可能性があります。たとえば、従業員が定期的に出勤しない場合、それは人的要因です。

重要な技術的障害については、シニア レベル以下のプログラマーと一緒に仕事をすることがあまりなかったので、そのようなことはありませんでした。明らかに、シニア エンジニアとジュニア エンジニアの失敗の可能性は、さまざまな次元にあります。


テストを実行せずにコードをリポジトリに送信するのは失敗だと思います。当社で行われているように、このプロセスを自動化するのが最善です。もう 1 つの失敗は、コードの「クラッチング」です。時にはコードを早く作りたいという欲求もありますが、この加速されたプロセスが品質を低下させるなら、それは将来明らかになるでしょう。


コードの品質にはさまざまなアプローチがあります。 SOLID の原則は必ず考慮する必要があります。ポリモーフィック関数を実行する場合は、既に使用されている領域を壊さないようにする必要があります。コードの修正を行うときは、結果がどうなるか、および一般的にどのように影響するかを考慮する必要があります。


技術的なプロセスに従わないことは、プログラマーの失敗です。私のチームでは、プル リクエストの作成、コード品質テストの実行、機能テストの実施、および自分で行うタスクのチェックを行っています。社内で設計された技術プロセスに従えば、失敗は最小限に抑えられます。ただし、すべての企業がプロセスを適切に構成しているわけではなく、これが将来の失敗の前提条件になる可能性があることも認めざるを得ません。


一般的に、シニアの失敗は怠惰から来ており、ジュニアの失敗は経験不足と不注意から来ていると思います。ジュニアのエラーは、思いがけないところで表面化します。ジュニアの仕事は、最初は失敗の連続であり、常に修正する必要があります。でも、それこそがジュニアの役目です。

先輩の怠惰は、プロセスに慣れて、「まぁ、あとで直そう」と信頼しているように見えます。多くの場合、常にうまく終了するとは限りませんが、それでもジュニアの場合よりもうまく終了します🙂


「フェイカー」、または経験豊富なプログラマーと経験の浅いプログラマーの区別


経験の浅いプログラマーは 2 つの段階で識別できます。1 つ目は面接中、2 つ目は最悪の場合、「フェイカー」を見落とした場合の作業中です。


プログラマーの経験を評価するのに役立つ質問:


  • 長年の経験
  • それらのうち、特定のテクノロジーの使用に専念した人は何人ですか。
  • テクノロジーとフレームワークの知識の深さを判断することを目的とした、高度に専門化された一連の質問。
  • 語学力の基礎に関する質問です。


これは、その人がどの程度知識があり、一緒に働く可能性があるかを判断するのに役立つ質問の最初の部分です。この段階で候補者が混乱すると、事態は悪化するだけです。

たまたま、プログラマーは 5 年の経験があり、10 のテクノロジに精通していますが、このリストから基本的な質問をしても答えがない場合があります。次のブロックの一連の問題でも同じことが起こりそうです。


技術面接では、複雑なアルゴリズムのタスクは与えません。面接は常にストレスがたまり、悪化させたくないからです。開発者が特定のテクノロジの使用に慣れていても、特定のタスクの実行方法を忘れるのは普通のことです。誰も完璧ではありません。知識の深さと迅速な問題解決は、焦点を当てるべきものです。

全体として、面接ではソフトスキルとハードスキルの両方を評価します。質問の技術ブロックは、テクノロジーとプロジェクトによって異なります。


ジュニアからシニアへの進化: 開発のヒント


一部のプログラマーには、アドバイスやガイダンスを提供するメンターがいます。私はそれをすべて持っていませんでした。独学で必要な情報を自分で見つけました。経済サイバネティックスの学位を取得し、基本的なことはすでに理解していましたが、Java の哲学を読みながら、新しい抽象化を理解するのは困難でした。


かつて、Java Rush コースは私を大いに助けてくれました。すべてが簡単に説明され、すぐに練習できました。しかし、それはフロントエンドについてではありません。


これが私がプログラマーになったきっかけです。残りは公式の技術文書から学び、無料のビデオ コースで情報を探しました。私にはそれで十分でした。

同時に、コースで学位を取得することが IT 企業への扉を開くと考えるのは間違いです。知識がなければ、この紙は無意味です。卒業証書のためにコースに参加することは意味がありません。


ある程度、構造化された情報を取得することはできますが、それを覚えておく必要があり、将来の成長の基礎となるものでなければなりません。優れたプログラマーの特徴の 1 つは、質の高い情報を見つける能力です。


それができれば、すべてうまくいきます。しかし、誰かがあなたのためにそれを綴ってくれると期待するなら、あなたは非常に間違っています.自己啓発と利用可能なオンライン コースの閲覧をお勧めします。また、すでにプログラマーとして働いている場合は、仕事に必要な Udemy コースを受講できます。


開発者が経験を積むほど、エンジニアリング リーダーシップの分野における開発の重要性が認識されます。これは、すでにチームを管理しているエンジニアだけの問題ではありません。常にトレンドに遅れず、新しいことを学び、ハードスキルとソフトスキルを包括的に開発して、知識と能力を他の人と共有する人についても。