私はジュニア開発者で、業界に5年しかいません。私の現在の会社では、シニアが彼をインフェストゥスと呼んでいます。時々、まったく新しい何かを輝かせ、ゼロから始める機会が与えられます。
最近の例の1つは、マルチスレッドアプリケーションでシングルトンを作成する必要があったことです。 this メソッドを使用することにしました。 Infestusがそれを見るやいなや、彼はすぐに私を愚かだと呼び始め、 このアプローチ を使用するように私に言いました。これがより良いのでなぜ彼がそれを刷新したのか彼に尋ねると、これとこれがこの方法とJavaについてのこの本はより良いと述べています。
そして、それは一般的なパターンです。何か新しいことをする機会があると、すぐにインフェストゥスに撃ち落とされます。彼の方法が優れている理由は、それらの本が有名なプログラマーによって書かれたからです。彼はいつも私に本を読んでもらい、私がプログラムする方法を「学ぶ」ようにしています。
私は5年間だけお金を使ってプログラミングをしていますが、問題を解決するための最善の方法について本を盲目的にたどるのは常に良い考えですか、それとも時々実験してみる必要がありますか? Infestusからの不満が絶え間なく発生しているので、私は何も新しいことに挑戦したり、本の例に従うことはありません。
[〜#〜] edit [〜#〜]:私は完全に迷っています。はい私は盲目的に何かに従うことは悪い考えであることを知っています。しかし、この神のようなプログラマーであるInfestusは、多くのことを知っているようで、適切にプログラミングする唯一の方法は、本を読んですべてをTまで追跡することだと教えてくれます。本が唯一の正しい方法である場合。
EDIT2:Infestusは私のボスではありません。彼はコードのレビューを担当する上級開発者の1人にすぎません。そして、レビュー後の彼のコメントのほとんどは、そのような方法が間違っている本の名前で構成されています。
あなたはこのようなプログラマーと出会うことになります。自分で実験や学習をすることに問題はありません。確かに本は素晴らしいです。多くの場合、例はクリーンな環境で機能しますが、別の会社の開発者である場合、クリーンな(他人からの干渉がない)環境などはありません。
「正しい」方法で物事を行う方法を知ることは常にいいことですが、意見は年々変化します。だからあなたができることを学びましょう。上級開発者からできることを取り出し、それを自分で学んだ知識とブレンドします。最終的には、あなたは上級開発者になり、これらの経験から学び、ジュニア開発者を指導します。
ただそれについてジャークしないでください。
彼は本当にあなた愚かと呼んだのか、それとも単にコードを非難したのか?愚かなことを言うのは無意味ですが、それは提案を無効にするものではありません。 Infestusは貴重な提案をしてくれたと思います。将来的には、彼の提案を真剣に検討する必要があります。彼は多くの読書をしているようで、少なくともこの場合、彼の意見はよく知られています。同期は高価で扱いにくいものです。彼の推奨する実装は、あなたよりも効率的でシンプルであり、動作することが保証されています。
彼はいつも私に本を読んでもらい、私がプログラムする方法を「学ぶ」ようにしています。
それは彼のようなものです。彼は積極的にあなたを助けようとしていますが、あなたはあなたの自我を邪魔させているようです。あなたのコードを個人的に批判しないでください。コードは安価に作成でき、変更も簡単です。誰かが何かを行うためのより簡単な方法を示した場合は、感謝します。
そして、はい、読書はあなたをはるかに優れたプログラマーにします。私が知っているすべての専門家は広範囲にわたって読んだ。あなたが多くを読んでいない場合、あなたはせいぜい平凡であり、そしてさらに5年であなたはもはや市場性がないことに気付くかもしれません。
本を読むことは盲目であってはなりません:著者は彼がそれを提示するときに彼/彼女のアプローチのメリットをあなたに納得させるように努めるべきです。自分で説明するように依頼するのではなく、自分の好みのアプローチを説明する本を先輩に紹介するのは理にかなっています。本に頼らずに自分の好みの利点を説明できるはずですが、それは努力の重複でもあります。その本の著者はすでに作った。
だから、本を読んで、本の作者が言っていることを見て、それがあなたを混乱させるか、あなたの理解を確認したいのか、あなたが同意しないのなら、それについてあなたの先輩に話しなさい、しかし今あなたはそうなるでしょうより生産的な議論をすることができます。
健全な関係には3つの重要な要素があります。コミュニケーション、誠実さと信頼。それは、すべての関係、さらには実際の関係にも当てはまります。これらの懸念については、上司に相談する必要があります。
特定のデザインを支持する彼の理由がわからない場合は、-それを伝えてください。あなたはその本を読んだことがなく、なぜ彼のやり方が優れているのかを理解したいと彼に伝えます。重要なのは、あなたが彼の物事のやり方を理解しようとしているべきであるということです。
この人ももっと尊敬するべきだと思います。あなたの頭の中で、あなたは彼を軽蔑的な名前と呼び、あなたが「学習する」と考えるものへの彼のアプローチを批判しています。気をつけて。一方、あなたは彼があなた愚かだと言ったでしょう。それはクールではありません、そしてあなたは彼に誰かを愚かに呼ぶのはクールではないことを伝えるべきです.
アイデアはばかげている可能性があります。私たちは皆、ミスを犯し、物事を逃しています。デザインに欠陥がある場合、尋ねるのに最もよい質問は、「なぜあなたはこのようにそれをしているのですか?それは状況X、Y、Zで壊れませんか?デザインBはもっと良いのではないですか?」です。
あなたは他の人とこのソフトウェアに取り組んでいることを覚えておいてください。それは学ぶのが難しいスキルです。最初から何も書いていないことは問題ではありません。コードを可能な限り最高のコードにすることで、常に輝かせる余地があります。
また、「最高」とは、読み取り可能および理解可能を意味することがよくあります。私たちプログラマーは他の人のコードを読むのに多くの時間を費やしています。そのコードが明確で読みやすい場合、それはコードを本当に価値のあるものにします。優れたコードを書く方法の1つは、優れたコードをたくさん読むことです。あなたは本の中で非常に良いコードを見つけることがよくあります。したがって、1冊または2冊の優れたプログラミングの本を読むと、より優れたプログラマーになるでしょう。
あなたが働いている会社ではそうでしょう。これは彼らがあなたにすることを要求するものです。
このエンジニアのインフェストゥスは、「これは本に書かれており、それが理由です」と言って、ジュニア開発者を教育するという非常に貧弱な仕事をしています。彼は説教者ではなく、エンジニアであり、それを分解して概念を提示し、後輩が彼の経験から学ぶことができるようにする必要があります。
あなたの会社の知識豊富な開発者と話をして、さまざまなプログラミング手法の長所と短所などについて質問することをお勧めします。これは、本やブログを読むことと一緒に(Joel on Softwareを勧めます-Googleだけです、それは必須です)理解を深める必要があります。
私見、ここには2つの側面があります。これらは個別に扱う必要があります。
これで彼のレベルに屈しないようにしてください。彼をいじめたり、上司などに「彼に告げる」ことを試みないでください。彼の行動のこの側面を無視するように最善を尽くしてください。極端になりすぎる(つまり、生産性などに影響を与える場合)ことに注意して、それについて何かをする必要があります。
多くの場合、私は最初に「私の完璧なコード」だと思っていたものを誰かに修正してもらいましたが、彼がずっと正しいこと、後で私のバージョンが悪かったことを理解するためだけに何をすべきかを男が教えてくれたことに怒りましたよかった、そして彼がそれを見た神に感謝します! :)それで、私は「ねえ、何をすべきか教えてくれない、ミスタ!」という私の最初の衝動を和らげることを学びました。代わりに、誰かが私を修正するたびに、まず私は本当に客観的に、コードを再確認し、次に彼をチェックして、彼が本当に正しくないことを確認し、失敗を犯しているのは私です。それが私のせいだった場合は、助けを借りて彼に感謝し、彼の解決策がどのように機能するかを理解するようにします(コピー/貼り付けではなく)。
そして、ちょっと、私は時々私は提供された修正が実際に私が最初にしたことより悪いことを発見します、その時点で私は他の男とこれすべてを話し合ってみます。正直なところ、間違いを犯したときに修正を受け入れることができると認められるよりも早く、他人からの尊敬を得るものはないことに気づきましたが、同時に、あなたが本人だと言うことを恐れません。エゴだけでなく、実際の研究に基づいて肯定を示していることをすぐに証明できれば、そうだと思うときに正しいのは誰でしょう。
この点については、彼が何を提案しているのか、何を提案しているのかなどについて、実際にその人に話しかけてみるべきだと思います。あなたがどう思うか、どのようにして特定の解決策にたどり着いたのか、なぜそれが彼よりも優れていると思うのか(正直に、そして客観的にそう思うとき)を彼に示してください。または、彼の命題があなたの命題よりも優れていることがわかった場合は、その旨を伝えて、感謝の意を表してください。これはいくつかの焼けた橋を再建するかもしれません。
本やブログの投稿を読むことは、プログラミングに非常に役立ちます。すべての開発者が読むべき本がいくつかあります。
ただし、さまざまなプログラミングの概念やテクノロジーを学ぶための情報源は本だけではありません。今日、オンデマンドのビデオベースのトレーニングは非常に人気があります。 Pluralsight をチェックして、専門家に高品質のトレーニングを提供できます。
実際には、あなたも助けにならない本だけを読んだら。読書以外にも、私たちがやらなければならないことが他にもあります。詳細は こちら をご覧ください。
自分で実験して、できることをすべて学んでください。十分な数の本を読んだ後、特定の主題に関する複数の本があり、それらが互いに矛盾する可能性があることに気付くでしょう。時間がある場合、または比較/対比したい場合は、最良と思われる方を試してください。
上司への対応は、まったく異なるテーマとアプローチです。本に書いてあるとおりの方法で誰かに何かしてもらいたいのなら、私は彼らに話します。私はマインドリーダーとは関係がないので、それは私だけです。あなたの上司はこれを習慣にします。新しいプロジェクトを取得するときに、本や参考文献を勧めるかどうか尋ねてください。
何をするにしても、新しいプロジェクトに取り掛かるのをやめないでください。私たち全員がこの状況に対処する方法についてのヒントを与えるのは簡単であり、それらが機能する場合と機能しない場合がありますが、あなたはそれとともに生活し、否定性に苦しむ人です。あなたは良くなるでしょうが、それは通常、新しいことについてより多くのコードを書き、成功と失敗から学ぶことから来ます。
本を盲目的にフォローすることは悪い考えですが、本をフォローするexactlyとフォローするblindlyには違いがあります。
本の内容を理解しようとするとき、一般的にisを最初から正確に理解するのが適切ですが、それが何を教えようとしているのかを感じ取ることができます。奇妙なことに、完了してもすべてを理解することはできません。つまり、このようなことは通常行われますが、最初に本に正確に従うと、質問を理解しようとするときに何かを試すことができます。本の内容に同意できない方法が見つかる可能性も高いですが、本が対処しようとしていた問題を理解できるので、独自のコードを書くときに、これらの問題を後で取り上げるだけにするのではなく、独自の方法で(またはおそらく少なくとも一部はその方法で)それらに対処します。
本質的にJavaに固有ではないが、そのコミュニティーで特に一般的であるもう1つのこと。私はあなたが話している本を推測できると思います、そしてそれらはJavaコミュニティの辞書の主要な部分を形成します。それらを理解し、彼らが物事を説明する方法は、あなたが見つける他のJava=コードを理解する必要があります。それはそれ自体で価値あるスキルです。
本についてのことは、彼らが-ほとんどの場合-改訂を通過するということです。また、「ビッグネーム」は、本を売って余分なお金を稼ぐのに良いことを当てにしている経験豊富な人々であり、したがって、彼らが言うことについていくつかの最低限の品質保証があります。
とはいえ、本や論文、その他の情報源を読むことは、もちろん実践によって確認されれば、専門家として成長するための良い方法です。そのため、それらの本(Infestusが推奨する本でも)を読むのは良いことです。ただし、同じ問題を解決する他の方法はほとんど常にあるため、本は主に主題に関する理解を深める必要があります。
「自分で行く」アプローチについてのポイントは、自分の視点を維持できるかどうかです。ソリューションが他のソリューションよりも優れていることをどのように証明しますか?自分で明るい解決策を考案できる場合もありますが、他の既知の解決策と比較すると、他の解決策が少なくともユースケースを支持しているため、自分の解決策が優れている理由を議論できる必要があります。次に、創造的で思慮深くなるが、最も重要なのは効果的であることです。
もしそうなら、あなたはそれらの本を読むでしょう。それはあなたにもっと多くの議論を与えることであなたを助けるでしょう、そして同時に、あなたはおそらくインフェストゥスが誤ってそれらの本を議論として取っていることに気付くかもしれません、そして誰もそれらの本の内容を知らないので彼はまだ発見されていませんでした。または、彼が実際にk
特にあなたの方法の何が悪いのか彼に尋ねるべきです。彼がはっきりと答えられない場合、あなたはそれが優れていると感じるのが好きな普通の男だとかなり確信しているかもしれません。
私はそれぞれのアプローチのメリットを調査し、あなた自身の判断に行きます。あなたのアプローチの方が良いと思う場合は、一方が他方を説得するまでInfestusと話し合ってください。合意に達しない場合は、セカンドオピニオンを求めるか、Infestusのアプローチを受け入れることができます。
シングルトンの場合、列挙型アプローチに対して行うことができる1つの引数は、列挙型はクラスを拡張できないということです。私はよくこのようなコードを書きます:
public class DateSerializer extends AbstractSerializer<Date> {
public static final DateSerializer SINGLETON = new DateSerializer();
private DateSerializer() {}
public byte[] serialize(Date date) { ... }
}
これは列挙型では実行できません。 enumアプローチはすべてのケースで機能するわけではないので、一貫性を保つために、extends
句が必要ない場合でも回避する必要があると主張できます。
列挙型の使用に反対する可能性のある他のいくつかの引数:
私は知識の源として本に大きく依存しています-これらは優れた基礎であり、Infestusは、スキルを本当に加速するので、暇な時間に大量の本を消費する必要があるという点で正しいと思います。本はあなたが消費するべきであると私が思う情報の唯一の情報源ではありません-ローカルユーザーグループに参加し、関連するテクノロジーニュースレターをあなたの受信箱に届けてもらい、ブログを読んでください。
しかし私はそれが本の中である方法で書かれているのでそれがその方法であるという主張には同意しませんmust行われる。はい、本は優れたアドバイスを提供し、専門家によって書かれ、専門家によって査読されますが、比較的単純な本に関与していたため、通常、本の執筆、編集、リリースには少なくとも2年かかります。 。テクノロジーの変化のペースは速く、2年前のアドバイスは、今日の正しいアドバイスではなくなっている可能性があります。一般的なプリンシパルは時の試練に耐えることが多いですが、特定のアクティビティの最適化は、ハードウェアの新しいビットまたは新しいソフトウェアのリリースによって無効になる可能性があります。
Infestusにあなたと一緒に提案をするように依頼するという提案は素晴らしいものです-離れて、すべてを読んで、あなたのためにあなたがすでに答え/解決しようとしている考え抜かれた質問の束と、あなたの裏付けとなる証拠を返してください方法。
5年経ってもなぜあなたがまだジュニアだったのかという質問がありました。私にとって、誰かがジュニアであるかどうかの重要な基準は、長年の経験ではなく、スプーンフィーディングがどれだけ必要かです。中級レベルの開発者は、比較的自給自足で、それに基づいて行動し、自分たちの状況に拡張できる知識ソースの思慮深い消費者であることを期待しています。彼らはまた、彼らが物事を明確に説明できるように彼らのトピックをしっかりと理解しているので、彼らがジュニアを教えることを始めることができる段階にあるべきです。他のコアコンピテンシーは自信です。仕事を終えて内容を読み、適切なものを作成した場合は、ジュニアが検証を必要とするため、法廷でそれを受け入れることを恐れないでください。開発者はコンセンサスを要求します。
職場のマナーを脇に置き、上級開発者が持つメンターの役割の現実を脇に置き、自分の探求意欲を脇に置き、侮辱的な態度を脇に置き、本のフェチを脇に置きます...
チームでのコードレビューの目的は、1)コードを検証すること、および2)コードの作成者がコード改善の背後にある意味を確実に理解することです。 「マーティンファウラーがGoFの本でそう言ったので、これを変えてください」と言う場所ではありません。ただし、「[簡単な説明]のため、これを変更してください。これについてはGoFの本で詳しく説明しています」と言っている場所です。
あなたの上級開発者が、少なくとも単純かつ微妙に、変更についての説明を提供しておらず、「[本のため]」という表現を使用するよう主張している場合、彼は少し頭の悪い人であり、ぎくしゃくしています。どのように対処しますか?チームミーティングで口頭でそれについて言及し、有益な本の参考資料とともに、変更の利点または必要性を簡潔に説明するステートメントを1つか2つ提供するようにチームメイトに依頼してください。本の参照については必ず彼に感謝してください。
それに直面して、あなたの目標は、変更の提案を高く評価することであり、あなたの仕事やあなたの仕事のために意欲を失わないようにすることです。彼に言ってください。 「私のコードをレビューするときに、変更の利点または必要性を簡単に説明できれば、変更の提案をさらに感謝します。それは、書籍の参照だけでもややわくわくするものであると思うからです。」
彼が彼の本の参照で簡単な説明を提供することを拒否し続ける場合、別の本または業界で同じかそれ以上の悪名のあるリソースに別の意見を提供でき、それがシナリオに一致する場合、独自の本を追加できる可能性があります元のコードを保持することを考慮して、レビューコメントで参照してください。これを十分に行うと、彼は後退するかもしれません。反論が正しく重要であることに非常に注意してください。上級開発者に間違いを犯させても、それでも彼の道を歩んでも大丈夫です。これは私が学んだことであり、学ばなければならないことです。
本だけでプログラミングを学ぶことは不可能だと思いますが、良い本はあなたに大きな後押しを提供します。それは空手のようなものです-それについて読むだけで黒帯を取得することはできません;)私はこの珍しい事件でインフェストゥス氏がジョシュア・ブロッホの「Effective Java」について言及していたと思います。これは本当にJava開発についての素晴らしい本です。もしまだ読んでいなければ、ぜひ読んでください。
私の経験では、主題をプログラミングする場合、インターネットで同じ主題情報を検索する場合よりも、本で適切に説明された情報の質とプレゼンテーションの方がはるかに優れています。多くの場合、インターネットには適切な説明、コンテキスト、品質が欠けています。
インターネット上の上記の情報の量はより多いです。
したがって、私の一般的な戦略は、本から学び、より深い理解を得て、その後インターネットから学び、さまざまな実装に触れ、私の経験を広げることです(そして、多くの場合、何をしないかを参照してください)。