ホームページ >バックエンド開発 >PHPチュートリアル >若いプログラマーが最も学ぶ必要があることは何ですか?自制心!
過去 7 年半にわたり、私は Ronimo Games で 12 人のプログラマー インターンを指導し、何百もの履歴書をレビューしてきました。彼らのほとんどは学ぶ必要があることが1つあると思います。それをある種のテクノロジー、アルゴリズム、数学、またはその他の形式の知識として考えるかもしれません。もちろん、この知識を補う必要もありますが、私の意見では、これらは最も重要ではありません。彼らが学ぶ必要がある最も重要なことは自己規律です。この自己規律は、可能な限り明確なコードを作成すること、その後の開発での変更によって生じる混乱を排除するためにコードをリファクタリングすること、およびコメントを追加することによって現れます。
私がインターンを指導するほとんどの時間は、高レベルの技術やエンジンの詳細を説明することではなく、より良いコードを書いてもらうことにあります。私はいつもインターンシップ応募者にこう尋ねます。優れたプログラマーになるためには何が重要だと思いますか?彼らの答えは通常、「コードは明確で、理解しやすく、保守しやすいものでなければならない」です。これは確かに私が聞きたいことですが、これを一貫して実践している若いプログラマーはほとんどいません。
これを行うには自制心が必要です。これは、コードが「関数の実装」で停止できないことを意味するためです。すべての変数に任意の名前が付けられていると仮定すると、コードは引き続き完全に実行されますが、読みにくくなります。短期的には、「関数型コード」から「クリーンなコード」への見返りは小さいです。コードはそのままで動作し、クリーンアップした後も引き続き動作します。これが、このステップを完了するには自制心が必要な理由であり、インターンシップに参加することが役立つ理由です。優れたメンターは、コードの品質に十分な注意を払います (ただし、「良いコード」の定義は人によって異なります)。インターンシップに応募する 学生たちはさらに磨きをかけて次のステージへ進みます。
ここでは、初心者プログラマーが作成したコードでよく見られる問題の例をいくつか示します:
その名前にふさわしくない関数/変数/ クラス
これらの関数、変数、クラスは、その名前が示すとおりの機能を実行せず、これらの名前は欺瞞的です。名前が実際に起こっていることを反映している必要があるのは明らかですが、そうでないことがどれほど多いかには私は驚きます。
たとえば、私は最近、元インターンによって作成された 2 つのクラスに出会いました。EditorGUI と EditorObjectCreatorGUI です。このコードブックは、エディターでインターフェイスを処理するために使用されます。驚いたことに、新しいオブジェクトを作成するボタンのコードは EditorGUI に配置されますが、EditorObjectCreatorGUI は異なるオブジェクト間の操作を処理します。これは、名前が示すものとはまったく逆です。コードは比較的単純ですが、クラス名から完全に間違った思い込みをしてしまったので、理解するのに時間がかかりました。この場合の解決策は簡単です。名前を EditorObjectCreatorGUI と EditorObjectNavigationGUI に変更するだけで、読みやすさが大幅に向上します。
私は不正確な命名をたくさん見てきました。コードは常に進化しているため、この問題は頻繁に発生します。最初に選択したときはその名前が正しかったかもしれませんが、コードが完成すると、名前が不正確になったり、間違っていたりする可能性があります。この罠は、コードを追加するときは常に名前を念頭に置いて、それが関数またはクラスの名前と一致するかどうかを確認する必要があることを思い出させます。
難読化されたクラス
もう 1 つの問題は、クラスが無関係な処理を多数行う難読化クラスです。この問題は、コードの同じブロックに長時間注目すると発生する可能性があります。新しい関数は最も単純な方法で実装されるため、クラスはある程度肥大化し、多くの無関係な処理を実行します。コードのサイズが原因ではなく、クラスが肥大化することがあります。クラスには数百行しかない場合がありますが、クラスの機能の一部ではないコードが含まれています。
たとえば、GUI クラスが「利用可能なテクスチャを分析する」必要がある場合 (テクスチャを選択するためのボタンがあると想像してください)、GUI クラスがこの分析の結果を必要とする唯一のクラスである場合、それをGUIクラス 非常に合理的です。ただし、現時点ではまったく関係のないゲームプレイ クラスでもこの解析結果情報が必要となるため、ゲームプレイ クラスに GUI クラスを渡してテクスチャ情報をクエリします。現時点では、GUI クラスにはもう 1 つあります。それは GUI クラスであり、TextureAnalyser クラスでもあります。この場合の解決策は簡単です。TextureAnalyser クラスから別のクラスを分離します。このクラスは GUI クラスとゲームプレイ クラスの両方で使用できます。
この問題を回避する最善の方法は、コードを記述する前に毎回よく考えることです。ここで追加する関数はクラスの名前と一致しますか?準拠していない場合は、クラスの名前を変更するか、独立したクラスに分割するか、このコードを他のクラスに配置する必要があります。
クラスによく一致する名前が思いつかない場合、これは通常、コードの匂い (悪臭) です。このクラスを説明する適切な名前が見つからない場合は、おそらく、そのクラスの動作がわかりにくいためです。この時点で、いくつかの部分に分割し、各部分に適切な名前を付けることができます。
かさばるクラス
この問題は、上記の難読化されたクラスと非常によく似ています。時間の経過とともに、クラスにコードがどんどん追加され、クラスが肥大化していきます。この場合、クラスに入れるのが合理的ですが、クラスのサイズが非常に大きくなります。非常に大規模なクラスを扱うのは非常に面倒で、多数のコードが同じプライベート メンバー変数上で動作する場合、バグが発生しやすく、多くの詳細を見落としがちです。
非常に大規模なクラスを分割するのは非常に退屈な作業です。コードが高度にインターリーブされている場合、これは非常に困難です。コードの分離は、元の機能を変更せずに既存のコードを追加または変更するだけであるため、高度な自制心が必要です。
Ronimo Company では、クラスコードは 500 行以下、関数コードは 50 行以下に抑えるというルールがあります。場合によっては、これが実現不可能または合理的でない場合もありますが、一般的には、どのクラスや関数がこの仕様を超えていても、それをリファクタリングするか、より小さくて管理しやすい部分に分割する方法を見つけるでしょう。 (これが気になります。この制限は何行あると思いますか?コメントにメッセージを残してください。)
コードコメント
インターンシップ応募者から送られてきたほぼすべてのサンプルコードコメント付きのコード ブロックがありますが、このコメントが作成される理由は説明されていません。コードに修正が必要なエラーはありますか?それともコードが古すぎるので更新する必要がありますか?コメントアウトされたコードがここにあるのはなぜですか?応募者に聞いてみると、コメント化されたコードについても戸惑っているようでしたが、不思議なことに、必ず原因不明のコメント化されたコードが存在します。
コードの重複
私がよく目にするもう 1 つの問題は、同様の機能を持つコードの重複です。
たとえば、TreeBackground.dds などのテクスチャ名から、このものの目的がわかる場合があります。このテクスチャが木に使用できるかどうかを確認するには、Tree で始まるファイル名を確認します。 SDK を使用すると、beginsWith("Tree") を使用するだけですぐに見つけられるかもしれません。このコードは非常に短いので、使用する必要がある場合は、そこに貼り付けるだけです。これはコードの重複であり、繰り返されるコードが短い場合、コードの重複を避ける必要があることは誰もが知っています。最も魅力的な方法は、単にコピーして貼り付けることです。ここでの問題は明らかです。後でこのテクスチャが他のものに適用されるかどうかを確認したい場合は、一度に 1 か所ずつ、分散的に修正を行う必要があります。
通常、より良いアプローチは、コードに特別な関数がある場合、それをコピーせずに関数に入れることです。コードは短く、関数を呼び出すには貼り付けるよりも多くのコードを記述する必要がありますが、その方法を学ぶ必要があり、これには高度な自己規律も必要です。
この記事で説明するトピックは非常に単純で、ほとんどの人は大学 1 年目にすでに学習しています。難しいのは、これらのことを知るところから、実際に時間をかけてそれをたどり、記憶に定着させることです。だからこそ、ロニモでインターンした人全員が学んだ最も重要なことは知識ではなく、自己鍛錬なのです。
LAMP Brothers オリジナルの PHP ビデオチュートリアル CD/「Essential PHP in Detail」を無料でプレゼント 詳細については、公式 Web サイトのカスタマーサービスにお問い合わせください:
http://www.lampbrother.net
http:// yun.itxdl.cn/online/cto/index.php?u=5 この、は素晴らしいXコースです CTO コース
http://yun.itxdl.cn/online/server/index.php?u=5 モバイルインターネットサーバーサイド開発コース
http://yun.itxdl.cn/online/weixin/index.php?u=5 WeChat開発コース
http://yun.itxdl.cn/online/yingxiao /index.php?u=5マイクロマーケティングコース
http://yun.itxdl.cn/online/phpcms/index.php?u=5phpcms二次開発コース
|