「最高のプログラマーは、優秀なプログラマーほど優れていません。 概念的思考、速度、視覚化、解決策を見つける能力など、どの標準よりも桁違いに優れています。 」-レンドールE.ストロス
おそらくこの引用は、 資格のあるプログラマーの概念をよく反映しています 。 しかし、世界では、すべてが美しいとは限りません。 プログラマとしての仕事の年数は、関連する経験と知識の可用性に常に正比例するわけではありません。
次に、 「最高の」プログラマーになるという目標に近づくために注意を払う必要があるものを(人生の例とともに)考えてください。
多くの人は、上級管理職がプロジェクトを実施するのに十分な能力を持っていないという状況に遭遇したことがあると思います。 解雇の問題が生じ、まだ十分な人員がいないため、誰かが管理職に任命され、より高い給料で新しい職位が作成されています。 研究所を卒業した(つまり、22〜23歳)ので、上級レベルのプログラマーにふさわしい十分な経験を誇ることはできないと思います。 そして、他の人々を導くには、幅広い技術的知識が必要です。そしてもちろん、リーダーの資質が必要です。
チームに入ると、他の人、特に上級の同僚の能力を無意識のうちに評価し始めます。 これは、参加するプロジェクトに自分自身を選択する機会がある場合に役立ちます。 だから、リーダーシップの地位(優れた開発者になる段階、つまり大学の後の停滞を回避する)を受け取った人は、単純にすべてを決定することができ、専門的な成長において彼に必要なものは何もない、あなたは大学で勉強しながら得た知識に満足することができますまた、2年の実務経験、パートタイム。 そのような人々のさらなる自己開発は、プロジェクトの必要性の過程で、そして会社が支払ったコースから得た知識とスキルによって制限されます。 そのような人々と仕事をしたいという欲求は全くありません。 確かに、スキルを向上させている間、リーダーは必要なときに何かを勉強したがりません。 そして、これは最良の場合です。なぜなら、「私はリーダーだから」です。だから私は他の誰かに負担を
私は、無能な上級プログラマーが見落としているいくつかの特定のことに注意を喚起したいと思います。
使用するプログラムについて知る必要があります。
会社の全員がバージョン管理システムを使用することを望みます。 SVNを使用します。 多くの人が一般的な用語で知らない悲しい事実の1つは、バージョン管理システムの動作方法、分散システムと集中型システムの違いです。 いくつかのプロジェクトでは、データベースの操作を行いました(Postgresを使用)。 ある日、ある友人から、Postgresがコミットの保存に特に使用されていると聞きました。 SVNが独自の情報ストレージ構造を持っていることを疑うことさえありません。 彼らは、追加、無視、コミット、更新、チェックアウトのコマンドがあり、それだけで彼の製品紹介が終わると彼に言いました。 特定のバージョンのプロジェクトを(すべてのコミットの履歴なしで)収縮するだけでよい場合、一部の人はエクスポートがあるとは思わないことさえあります(私はかつてこの問題を解決する4人の人々に出会いました)。
しかし、最もばかげた状況は、複数の人が同じファイルを変更する場合です。 そして今、どのようにコミットするのですか!? そして、あなたは聞く:「どのように? x.cppおよびY.cppファイルの何かも変更しましたか? コミットするまでお待ちください! 1つはそれを行い、もう1つは行方不明を追加します。」 反対の質問が発生します。それでは、なぜ紛争解決の機会が生まれたのでしょうか? とにかく、誰かがコミットした場合、最初にそれを出力し、次に変更を加えます。 バージョン管理システムは、変更がファイル/プロジェクトの特定の状態に割り当てられた変更の単なるダンプであるとは思わないでください。 コミットしようとしたときに競合が発生した場合、これはコミットを行って問題ファイルがバージョン管理システムに保存されたことを意味しません。 作業コピーで実行される操作とリポジトリで実行される操作を理解する必要があります。 操作を実行し、「魔法」が発生したと考えることは必要ありません。
OSI / ISOモデルに精通する必要がある
誰もが少なくとも何らかの形でネットワークモデルの概念と交差しました。 これは、無知といくつかの事柄の不完全な理解が残酷な冗談を演じる実際の物語です。 どういうわけか、RS-422インターフェースで作業するタスクが発生しました。 作業はCOMポートで行われるため、RS-422標準自体の機能についてはまだ読んでください。 そして、ここで上級プログラマーの一人が私に尋ねます:「RS422 / 485の経験はありますか?」私は答えます、いいえ、私はすでにシリアルポートで働いたので、私はそれを理解します。 そして、ここで私は、何らかの理由で交換がシリアルポート経由ではないことを明確にするために(明確にするためにRS422で作業したことがない)人の驚いた顔を見ます。 つまり、彼は一般に、交換を実装するために使用される物理層とインターフェースの標準が何であるかを知りません。
おそらく、プログラマーとしての経歴の全員がBluetooth、パイプ、共有メモリ、RS-422、イーサネットなどで作業したわけではありません。しかし、プログラマーはシリアルポートで作業できる場合、BluetoothとRS422を介して交換できることを理解する必要があります、しかし標準の機能に関するドキュメントを読むことを忘れないでください。 ISO / OSIレベルを区別する必要があります。 UDPを介して交換するためのプログラムを作成するタスクが発生した場合、問題(パニック)を起こす必要はなく、以前はTCPプロトコルを介して交換のみを作成しました。
テストなしで製品を書くのは悪い
十分な人員がなく、製品には数年間付属しており、ユニットテストをゼロから作成するのに時間がかかり、そのような人がいないという事実は言い訳にすぎません。 新しい機能のテストを作成できます。
あなたがいくつかのコースに行った場合、あなたはこの分野の良い専門家になりませんでした
すでに述べたように、偽のマネージャーは会社が支払ったコースから新しい知識のほとんどを取得します。 そして、彼らのコメントは知識を誇示しようとしていると思われる会話でどれほど不適切であるか、しかし実際には彼らは対談者が主題に非常に均一であり、スマートな外観で完全な異端を作ることは必要ではなかったとは思わない。
もちろん、このリストは継続することができ、かなり長い間ばかげた状況をリストすることができますが、私はそれについて話していません。 プログラマーおよびリーダーとして尊敬されるように、プロジェクトマネージャーとして選ばれることは非常に重要であると私には思えます。 空き時間がある場合は、シリーズを再生したり視聴したりするのに半日電話やタブレットに馬鹿に座る必要はありません。 あなたはすべてを知ることはできませんが、何らかの方法で、技術、建築などで啓発する必要があります。結局、2〜3年の若い仕事の経験が10年間のズボンに座った経験を覆い隠すのは非常に馬鹿げているように見えます。 私はさまざまなプログラマーに会いましたが、この記事では少数のプログラマーについて言及しています。 それでも、覚えておいて、あなたは若い世代の模範になるべきです(少なくともそうなるよう努力してください)。