第8章スペシャリストになる
-Java機能のみを使用してJVMクラッシュを実現するにはどうすればよいですか?
答えは沈黙です。
「聞こえますか?」
-すみません、わかりませんでした。 質問を繰り返してください。
絶望は彼の声で聞こえた。 私は自分の経験から、質問を繰り返しても役に立たないことを知っていました。 それにもかかわらず、私は質問をゆっくりと大声で繰り返しました。
-Java機能のみを使用してJVMクラッシュを実現するにはどうすればよいですか?
-ええと...申し訳ありませんが、私は同様のタスクに直面したことがありません。
-私はそれが遭遇しなかったと確信しています。 この質問についてはどうですか:JVMがクラッシュすることのないプログラムをどのように作成しますか?
本当にいいJava開発者を探していました。 インタビューの始めに、私はこの人(およびその週にインタビューしたすべての人)に1から10のスケールで自分を評価するように頼みました。彼は9を言いました。 私の期待によると、彼は信じられないほどのスペシャリストでなければなりません。 この男が非常に高く評価している場合、JVMをクラッシュさせる単一のトリックを思い付かないのはなぜですか?
不十分な知識。
この人は、Javaを理解していると主張しています。 パーティーで彼に会って、パンの作り方を尋ねると、彼は答えます。「私はJava開発者です。」 しかし、彼はこの簡単な質問に答えることができませんでした。 彼は間違った答えさえすることができませんでした。 インドで空席の候補者を探して2週間半の間、この写真は例外ではなく、これがルールでした。 数千人のJavaスペシャリストが欠員を申請しましたが、Javaクラスローダーの仕組みを説明したり、Java仮想マシンがメモリを管理する方法を一般的な用語で説明したりする人はほとんどいませんでした。
さて、経験豊富な専門家の監督の下で簡単なコードを書くために、これらのニュアンスをすべて知る必要はありません。 しかし、これらの申請者は専門家であると想定されていました。 私たちの多くは、専門化とはあなたが他に何も知らないことを意味すると信じているようです。 たとえば、母親がLinuxやOS Xを使用したことがないため、Windowsの専門家と呼ぶことができます。また、他の音楽を聞いたことがないので、アーカンソー州の田舎の専門家から親relativeに電話することもできます。
あなたがあなたのかかりつけの医師と面会し、右手の皮膚の下に奇妙なアザラシを訴えていると想像してください。 医師が生検の専門医に紹介します。 この専門医が、生検に直接関係のない医学部で何も研究しなかったという理由だけで、そのような専門家と見なされた場合はどうなりますか? 私は彼が生検に関連するすべてを徹底的に研究したという意味ではありません。 おそらく、彼はこのトピックに関する資料をさりげなく調べただけで、他には何も知りませんでした。 このスペシャリストに尋ねた場合:
-操作中にそのデバイスが鳴り始めたらどうなりますか?
-うーん、私はこれが起こったことを覚えていません、これが今回起こる可能性は低いです。 この機器が何をするのかはわかりませんが、音が出たことはありません。
幸い、人生はほとんどの開発者の仕事の結果に依存しません。 彼らが台無しにした場合、雇用者は命ではなくお金を失う。
残念ながら、私たちの業界には、 スペシャリストという用語を他のことを何も知らないことの言い訳として使用するこのような狭いスペシャリストが多くいます。 医学では、専門家は特定の分野で本当に深い知識を持つ人です。 医師は患者を専門医に紹介します。状況によっては、専門医が一般開業医よりも質の高い支援を患者に提供するためです。
それでは、私たちの業界の専門家は誰でしょうか? 資格のある開発者を雇うために私が旅行で探していた人物を正確に伝えることができます。 私は、Java開発に精通しており、開発されたソフトウェアが動作する環境を志向している人々を探していました。 私は、開発時に取り組むことができる状況の80%で「知っている、やった」と言うことができ、知識の深さが不慣れな状況の残りの20%に対処できる人を探していました。 高レベルの抽象化を扱う場合、これらの抽象化を可能にするものの低レベルの詳細を理解する専門家を探していました。 開発した製品の実装に関連する問題に対処できる人、または少なくとも誰に助けを求めるべきかを知りたいと思っていました。
これは、不安定なソフトウェア業界で生き残る専門家です。 あなたが.NETの専門家である場合、これは.NET 以外のものを知らないことの言い訳にはなりません。 これは、.NETに関しては専門家であることを意味します。 ハングしていて、IISサーバーの再起動が必要ですか? 「問題ありません。」 バージョン管理システムをVisual Studioと統合していますか? 「それは行われます。」 顧客はあいまいなパフォーマンスの問題に激怒していますか? 「30分お願いします。」
この専門家の定義に同意しない場合は、その言葉を自分自身と呼ばないでください。
行動する!
1.仮想マシンで実行されるコンパイル済み言語を使用していますか? その場合は、この仮想マシンの内部構造を調べるのに時間をかけます。 Java、.NET、Smalltalkの場合、このトピック専用の多くの書籍とオンラインリソースがあります。 このトピックを理解するのは、思っているより簡単です。
言語が仮想マシンに依存しているかどうかに関係なく、ソースファイルをコンパイルしたときに何が起こるかを理解するのに少し時間がかかります。 入力したコードがテキストからコンピューターが実行できる命令に変わる過程で何が起こりますか? 独自のコンパイラを作成するには何が必要ですか?
サードパーティライブラリをインポートして使用する場合、どこからロードしますか? サードパーティのライブラリをインポートするとはどういう意味ですか? コンパイラ、オペレーティングシステム、または仮想マシンは、複数のコードを1つのコヒーレントシステムにどのように統合しますか?
これらの質問を研究することで、選択した技術の専門家の地位に近づくことができます。
2.(職場で、または勤務時間後に)深く理解したい技術の側面を希望する人に教える機会を見つけます。 「メンターになる」の章で見るように、他の人に教えることは自分で学ぶための最良の方法の一つです。