CodeGym /Java Blog /ランダム /初心者プログラマが犯すよくある間違いの分析、pt. 2
John Squirrels
レベル 41
San Francisco

初心者プログラマが犯すよくある間違いの分析、pt. 2

ランダム グループに公開済み
皆さん、またこんにちは!私たちは、若くて未熟なプログラマーが最初の仕事で直面する可能性のある問題について引き続き検討していきます。最初の部分はここに あります。初心者プログラマが犯すよくある間違いの分析、pt.  2 - 1続けましょう。

13. コーディングスタイルのガイドラインに準拠していない。

開発チームは通常、単一のコーディング スタイルに固執します。つまり、個々の開発者は、自分のコーディング スタイルが他の開発者と異なっていないことを保証するために、特定の明文または不文律のルールに従います。独特のコーディング スタイルで自分を差別化しようとしないでください。これでは見栄えが良くなりません。プロジェクトを初めて使用する場合は、一般的なコーディング スタイルのガイドラインを定義するドキュメントがあるかどうかをすぐに確認する必要があります。特定のプロジェクトには、IDE が正しいコーディング スタイルのヒントを提供できるように、要求して IDE にインポートする必要があるスタイル ファイルがいくつかある場合があります (IntelliJ IDEA など)。たとえば、スタイルでは可能な限り、final 修飾子の使用が必要になる場合があります。スタイル ファイルにより、IntelliJ IDEA はこれが尊重されない変数を黄色で強調表示します。

14. 間違いをすると落胆する

初心者プログラマが犯すよくある間違いの分析、pt.  2 - 2間違いは慣れる必要があるものです。彼らはこれまでも、そしてこれからもそうなるでしょう。あなたが初心者であろうと、真剣な建築家であろうと、常に間違いを犯すことはあります。間違いの数や重大さは変わるかもしれませんが、間違いはキャリアを通じてつきまといます。ときには、一週間ずっと仕事を進めるのに苦労し、間違いを犯してしまい、そのひどい間違いを修正できないまま金曜日の夜になって、殴られた犬のようにそそくさと家に帰ることもあります。それは言葉では言い表せない感情ですが、落胆する必要はありません。結局のところ、経験豊富な開発者と初心者のもう 1 つの重要な違いは、間違いにどのように対処するかです。経験豊富な開発者は、それらを鵜呑みにするのではなく、経験として捉えます。間違いを犯しても誰も叱ってはくれません。これは正常なことです。誰もが時には混乱に陥ることがあります。ここでも、同僚に助けを求めることができます。プロジェクトマネージャー (PM) のような人々のことも忘れないでください。何かで行き詰まった場合は、すぐに PM に連絡してください。問題のある分野の専門家を見つけるのを手伝ってくれます。いずれにせよ、プロジェクトで発生した問題については常に PM に知らせる必要があります。PM の仕事は、チームメンバー間のコミュニケーションや交流など、あらゆる種類の問題の解決を支援することです。要約すると、間違いは起こるものです。間違いに命を奪われないようにしてください。代わりに、それらをあなたとあなたのスキルに対する挑戦として受け入れてください。結局のところ、それは仕事の一部にすぎません。

15. スレッドセーフの実装に失敗する。

良いものは簡単には生まれません。すべての開発者は、モジュールであろうと単なるメソッドであろうと、特定の機能を記述するには、何をどのように行うかについての計画が必要であることを理解する必要があります。原則として、複雑な機能を開発する場合は、次の手順に従う必要があります。
考える -> 分析 -> 計画を立てる -> コードを書く -> コードをテストする -> リファクタリング
初心者プログラマーが作成したコードで発生するエラーの多くは、この手順のステップに関連しています。もちろん、タスクが見えたらすぐにためらうことなく、迅速にコードを記述する必要がある瞬間がある可能性を排除することはできません。ただし、これは通常、実装が明白であまり考える必要のない、特定の小規模なタスクやメソッドに対してのみ機能します。上記の開発手順は、サブタスクに分割できる複雑で大規模なタスクに適しています。何を書きたいのかを明確に理解せずにコードを書き始めるのは得策ではありません。まず、すべてを慎重に考えて計画する必要があります。紙と鉛筆を用意して、実装のアイデアをスケッチしてみるのも役立ちます。複雑な機能を計画するときは、常にこれを実行します。プログラマーは、コードを書くことにほとんどの時間を費やすのではなく、必要な機能をどのように構成するかを考えることに費やします。実際、すべてを計画して検討すると、コードの作成は手間のかからない純粋に機械的なプロセスになります。

16. 過労

初心者プログラマが犯すよくある間違いの分析、pt.  2 - 3
映画「ファイトクラブ」(1999年)より
おそらくすべての初心者は、夜遅くまで働くことで、より多くのタスクを完了し始め、より多くの責任を任されるようになると考えています。私も以前はそう思っていましたが、今はそうではありません。限界に達すると、適切に考えることができなくなる時点が来ることに気づきました。あなたはかなり鈍くなり、精神的に霧を経験し始めます。心が新鮮であれば10分でできることをするのに1時間かかります。ほぼ例外なく、疲労の一線を越えると、乗り越えられないと思われる問題に遭遇します。しかし、翌朝出勤すると、あっという間に解決してしまいます。ですから、ここまで来たと感じたら、夜更かししないでください。ただ家に帰ってゆっくり休んでください。結局のところ、夜遅くまで机に座っていれば、この苦痛の時間中に特に優れた成果を達成できないだけでなく、同時に、次の仕事の日までに十分な休息が得られない危険性があります。また失敗するだろう。自分の健康について考えてみましょう。キャリアの初期にこのように健康を損なう価値があるでしょうか? そうではないと思います。病気になるとお金がかかる時期です。そして雇用主のことを考えてください。自分を酷使すると、自分自身だけでなく雇用主にとっても状況が悪化します。絶えず眠くて、疲れ果てて最も単純な並べ替えアルゴリズムを実装できない従業員を誰が必要としますか? 確かに、締め切りに追われているとき、すべてがうまくいかないとき、そして、これが私の個人的な好みですが、「これは昨日必要だ」というときも間違いなくあります。しかし、このような状況は一般にまれであり、一度それを乗り越えたら、どのようにしてそのようなことが起こったのか、そして今後どのように回避するかをじっくりと検討する必要があります。

17. 英語力を軽視する

多くの意欲的な開発者はテクノロジーの学習を優先し、英語の学習を後回しにしています。プログラマーは下級職 (またはインターンシップ) に最適であるにもかかわらず、英語力が弱いためにその仕事に就けないことがよくあるため、これは重大な間違いです。はい、もちろん英語がなくても大丈夫な場合もあります。原則として、そのような人材は非英語圏の国のプロジェクトのために現地で雇用されます。しかし、地元企業は外国企業と同じ賃金を払っていません。そして、たとえ時間が経っても、まともな給料を得るのは非常に困難になるでしょう。だからこそ英語を無視してはいけません。英語を後回しにするのではなく、すぐに英語のプロジェクトに集中できるように英語を学ぶ必要があります。実際、少し考えてみてください。現在、英語は国際ビジネスの言語です。どの国に行っても、英語ができれば他の人と共通の言語を見つけることができます。開発プロジェクトでも同様です。プロジェクトの拠点がドイツ、オーストラリア、フランスなどどこであっても関係ありません。すべてのコミュニケーション、すべてのタスク、ドキュメントなどは英語で行われます。少し考えてみれば、これは非常に便利であることに同意するでしょう?

18. トレンドテクノロジーの追求

開発者は、その道を歩み始めると、最新のテクノロジーに追いつこうとすることがよくあります。それは正しいことなのでしょうか?一方で、そうです:最新のテクノロジー、プロジェクト... しかし、これを最優先事項にする価値はあるでしょうか? おそらく、あなたの分野の専門家向けの「古典的なツールキット」を追求する方がよいでしょうか? 新しいことは確かに良いことですが、その分野の基礎技術を忘れてはなりません。そして、基本に関する少しの経験と深い知識を積んで初めて、何か新しいことに挑戦できるようになります。新しいテクノロジーは、いくつかの微妙な点では優れているかもしれないが、他の点では利点を失う可能性があることも考慮してください。初心者の開発者がこれらのトレードオフを理解するまでは、実績のあるソリューションを使用することをお勧めします。たとえば、プログラマーが何らかのデータと対話するアプリケーションを開発している場合、流行しているからといって、急いで最新の NoSQL ソリューションを使用しないでください。通常の実証済みの SQL データベース (MySQL、PostrgreSQL など) には、潜在的な問題に対する詳細なドキュメントと解決策が StackOverFlow に用意されている可能性が高くなります :)

19. 複数の異なるテクノロジーや言語を同時に学習する

上では、ファッショナブルなテクノロジーを学ぼうとする初心者について話しました。では、同時に多くのテクノロジーや言語を勉強するのはどうでしょうか? 複数のプログラミング言語を理解し、多くのテクノロジを習得しているプログラマーのことを聞いたことがあるでしょう。ただし、これらの人々はプログラミングの初心者ではないことをすぐに指摘します。これらは長年の経験を持つ人々です。彼らは独自の技術を習得し、さらにその先を目指しました。すべてを一度にマスターしようとしている初心者は、「二兎を追うも一匹も捕まえることはできない」という素晴らしいことわざを思い出してください。その結果、どのトピックも上手に習得できず、表面的にしか学べなくなる可能性があります。すべてについて少しだけ知っている専門家よりも、1 つの言語を深く知っている専門家の需要が高まるでしょう。したがって、多くの言語やテクノロジーを知りたい場合は、それらに賢くアプローチする必要があります。始めるには、深く学ぶ必要がある基本的なコア言語を選択する必要があります。そしてそれから初めて、他の分野の勉強を始めるべきです。たとえば、Java の達人になってから、第 2 言語として Python を学びます。その後、フロントエンドの React/Angular について何かを学ぶかもしれません。この場合、C# や Java などの互換性のないテクノロジーについて話していますが、むしろ補完的であり、キャリアの機会を拡大します。しかし、もう一度繰り返しますが、一度にすべてを学ぼうとするべきではありません。順番に行く必要があります。いわば、一度に一羽ずつウサギを捕まえます。

20. 間違って策定された目標

自分自身の目標をどのように設定しますか? クールな開発者になりませんか? これをきっぱりと覚えておいてください。具体的な目標、言い換えれば、達成可能な目標を設定する必要があります。私は何を話しているのでしょうか?たとえば、「お金持ちになりたい」という目標を自分に設定したとします。しかし、この目標を達成したかどうかはどうやってわかるのでしょうか? あるいは、達成にどれだけ近づいているかをどのように測定しますか? そうですね、「100万ドル稼ぎたい」という目標を立てれば、もう少し明確になりますね。10,000 ドルを獲得したら、目標まであと 10,000 ドル近づいたことになります。残りはわずか 990,000 ドルです。達成すべきことはまだたくさんありますが、自分の進歩を感じ、ゴールラインがどこにあるのかを理解できるので、継続する意欲が高まります。キャリアに関して、もっと具体的な目標を設定してみてはいかがでしょうか。例: チームのリーダーになりたいです。または上級開発者。あるいは最終的には建築家。そうですね、大きなタスクはすべて小さなサブタスクに分割する必要があります。キャリアのスタート時にチームのリーダーになれるわけではありません。可能かつ適切であれば期限を設定し、現在の段階に集中してください。
  1. 上級開発者になることについて話している場合、最初の小さな目標は、企業でインターンシップやジュニア開発者としての仕事を見つけることです。
  2. 次に、特定のテクノロジーについての知識を深めるための目標を設定できます。Java に関しては、Oracle のレベル 1 認定の準備をすることができます。準備期間を定めて目標に取り組みます。
  3. 次に、たとえば、英語を 1 レベル向上させる (たとえば、B1 から B2 に) という目標を設定するとします。学習計画を立て、時間をスケジュールし、目標に向かって進みます。
このようにして、(ソフトウェア開発の経験を積みながら) 最終的な目標を段階的に達成することができます。

21. 実践なき理論

新しいテクノロジーを研究し、すでに知っているトピックをさらに深く掘り下げることで、私たちがより優れた専門家になることは、議論の余地のない事実です。しかし、開発者は、新しい知識を実際に試してみなければ、技術書を次々とむさぼり読んでも大きなメリットが得られないことに、旅の初めにはほとんど気づきません。私は個人的にこれに何度か遭遇しました。ある本に多くの時間を費やしても、その本から何も実践しなかった場合、新しく獲得した知識はほとんどすべて忘れられてしまい、すべてがどのように機能するかについての一般的な漠然とした記憶だけが残ります。その結果、目に見える成果が得られずに多くの時間が無駄に費やされてしまいます。なぜ時間を無駄にしなければならないのでしょうか?人生は永遠に続くわけではありません。重要なのは、新しいテクノロジーを学習するときは、理論に囚われるべきではないということです。読書と並行して、与えられた例を書き出し、新しいテクノロジーを試してください。これが脳に情報を保持させる唯一の方法です。確かに、新しい資料を摂取するのは遅くなりますが、読んだ内容をより多く吸収することになります。さらに、1 つのテクノロジーをうまくマスターすれば、次のテクノロジーもさらに簡単にマスターできます (言語の学習と同じです)。

22. 過度の完璧主義

ほとんどの開発者は完璧主義者、つまり完璧を追求する人々です。これは、コードも完璧でなければならないことを意味します。コードの作成、テスト、微調整が完了し、メイン ブランチに送信する時期が来たようです。しかし、まだコードに満足していないため、コードをあれこれ工夫し始め、この作業に多くの時間を費やします。そしてこの場合、時間はクライアントのお金です。初心者プログラマは、この完璧さの追求に影響されやすいです。経験豊富な開発者は、コードが完璧になることは決してないので、より良いコードを作成する必要があると感じることに慣れています。しかし同時に、彼らは「理想」に近づくために極端な行動をすることはありません。したがって、幸せな媒体を実現する方法を学ぶことを忘れないでください。ずさんな方法ではなく、コードでモナリザを再現しようとしないでください。

23. アーキテクチャについて考えていない

もう一度言いますが、乱雑なコードを書くべきではありません。読みやすさとパフォーマンスに加えて、コードがアプリケーション全体の残りの部分にどのような影響を与える可能性があるかについても考慮する必要があります。たとえば、コードを拡張するのはどれくらい難しいかなどです。問題は、初心者の開発者は経験が不足しているため、新しい機能が将来アプリケーションにどのような影響を与えるかをすぐに理解できない可能性があることです。この先見の明を身につけるには、確かに多くの訓練が必要です。しかし、それでは初心者は何をすればよいのでしょうか?コードを書かないのですか? このような状況では、さまざまなプログラミング パラダイムが役に立ちます。たとえば、有益な実践を伝えることができる SOLID 原則やさまざまなデザイン パターンなどです。これらのパラダイムも慎重に扱う必要があり、行き過ぎないよう注意してください。しかし、やりすぎたときのポイントはどうやって判断すればいいのでしょうか?この場合、経験豊富な同僚によるコード レビューが役に立ちます。新鮮で客観的な目を持ち込むことで、同僚はあなたに正しい方向を示すことができます。

24. 詐欺師症候群

初心者プログラマが犯すよくある間違いの分析、pt.  2~4インポスター症候群は、人が自分の成果を個人の資質、能力、努力によるものだと考えることができない心理現象です。一貫したパフォーマンスを示す外的証拠にもかかわらず、この症候群にかかりやすい人々は、自分は詐欺師であり、達成した成功に値しないと信じ続けます。 多くの開発者がこの症候群を抱えています。おそらくそれは、私たちに新しい知識やテクノロジーへの前進を促す粘り強さを与えてくれるでしょう。経験豊富で実績のある同僚を見ると、自分には給料に見合っていないのではないかと不安になります。信じてください、これは真実ではありません。あなたよりも優れている開発者も、あなたより劣っている開発者も存在します。他の人はあなたを見て、自分は決してあなたのようにはならないのではないかと不安に感じます。そしてこれは正常です。チームからのフィードバック、コード レビュー、ディスカッションは、この感情を少し和らげるのに役立ちます。信じてください、部外者の意見はあなたを楽しく驚かせるでしょう、それはあなたが本当に自分の仕事と専門能力の開発を怠らない場合に限ります。それらのことを無視するなら、あなたは間違った職業を選んだことになります。この職業では、常に何か新しいことを学び、最高のものを目指して努力する必要があります。しかし、ここに集まる人々は決して怠け者ではないと思います。その代わりに、ここの人々は自分たちの大切な目標に向かって着実に進んでいます。それがあなたを表しているのなら、何も恐れる必要はありません。

25. コミットをほとんど行わない

コミットを頻繁に実行することを忘れないでください。30分ごとではありません、念のため。ある機能の実装に 1 週​​間を費やす場合は、金曜日の夜に 1 つのコミットを実行するのではなく、たとえば 5 つのコミットを実行する必要があります。ほとんどすべての大きなタスクは、便宜上、小さなタスクに分割できます。したがって、これらの小さなタスクを完了してコミットします。これらのコミットをすぐにリモート サーバーに送信することを忘れないでください。そうしないと、1 週間ずっとコミットを行った後、金曜日の昼休みにコンピューターにハードウェア障害が発生し、1 週間丸々無駄になってしまう可能性があります。ただし、コミットをリモート サーバーにアップロードした場合は、最後のコミットを含むブランチを別のコンピューターにプルして作業を続行するだけです。もう 1 つ注意してください。金曜日の夜に新しい機能を稼働中の運用サーバーに送信しないでください。ただ私を信じてください。そんな必要はありません。予期せぬエラーが判明する可能性が高く、週末をかけて修正することになります。そしてそれは楽しくありません。週末は休む必要があります。今日はこれで終わりだと思います。 PS最後のヒント: 大量のコードを作成してください。 PPS非常に大量のコードを記述します。それが、必要な経験を得る唯一の方法だからです。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION