経験豊富な開発者が愚かなコードを書く理由とキロメートルごとに初心者を認識する方法

Habrahabrの読者に、Scott Shippによって書かれた出版物「なぜシニア開発者が馬鹿げたコードを書くのか、そしてマイルから離れてジュニアを見つける方法」の翻訳を提供します。




私のお気に入りの引用の1つは、Javaの世界で最も賢い人物であるBrian Goetzです。これは、特にJava Concurrency in Practiceの著者の1人です。 この引用は、Oracle Webサイトの「 Write Dumb Code 」という見出しの下に公開されているインタビューから引用されています。 Getzは、適切に機能するコードの書き方を尋ねられました。



彼の答えは次のとおりです。



「多くの場合、高速なJavaコードを記述することは愚かなコードを記述することを意味します。コードはシンプルでクリーンで、最も明白なオブジェクト指向の原則に従っています。」



残りの1000の単語は、コードを最適化する試みと賢くしようとする試みが、一般的なプログラミングエラー、初心者の間違いである理由を説明しています。



経験豊富な開発者のコ​​ード



あなたが私のようにかつて後輩だったなら、あなたが最初に上級コードを調べて考えたことを覚えているだろう。「私はそのように書くことができます。 なぜ私は先輩ではないのですか?」



長い間、私はそのようなコードを書き込もうとしましたが、うまくいきませんでした。



先輩のコードで不思議なのは、それを理解できないということではなく、すぐに理解できることでした。 彼は特に愚かであり、何か他のものがあるはずでした。 私は思った:「残りはどこですか? このコードはこれをどのように行うのですか?」



それ以来、私はそれを馬鹿にするコードのすべての原則と機能の名前を研究しました:YAGNI、唯一の責任の原則、DRY、単一レベルの抽象化の原則、弱いエンゲージメントなど。そして私はシニアになりました。 実際、「シニア」という言葉は嫌いで、自分をソフトウェア開発者と呼んでいますが、それは別の話です。



私が学んだ主な教訓は、愚かなコードを書くのは難しいことですが、それは指数関数的な利点をもたらします。



キロメートルごとのジュニアを区別する方法



リファクタリング:既存コードの設計の改善の本で、Kent Beckは次のように述べています。



「誰でも、コンピューターが理解できるコードを書くことができます。 優れたプログラマーは、人々が理解できるコードを書きます。」


「スマート」な単一行ファイル、疑わしい抽象化、多くの特定の言語構成要素で満たされたコードを見れば、いつでも初心者の開発者を見つけることができます。 後者が最も特徴的だと思います。 コードが言っているように見える:「私を見て! 私の作成者は言語を非常によく知っています! セキュリティが強化された多機能JAXB Lombokコードジェネレーターと共に、既定のインターフェイスとカスタムジェネリックの未チェックの例外を使用して、ローカルストリーム同期JavaBeanコピーコンストラクターを使用します!



はい、私はナンセンスに言った、なぜならナンセンスは人間の側面ではなくコンピュータの側面のみを考える人々の手でコードに変わるからだ。



コードは、人コンピューターの指示との間のコミュニケーションですが、2番目よりもはるかに多くのことが第一です。 コンパイラーは、プログラマーが書いたものをマシンコードに変換します。 多くの場合、このような変換には複数のレイヤーがあります。たとえば、Javaがバイトコードにコンパイルされ、仮想マシンによって読み取られ、結果としてゼロと1に変換される場合です。



しかし、コードは人間の言語です。 彼は、タスクの「誰」、「何」、「いつ」、「どこで」、「どのように」、「なぜ」をすべて説明すると同時に、コンピューターに指示を出します。 5年後、会社が売却されたとき、それは理にかなっているはずです。このコードを見たことのない新しいチームは、改善と修正のためにそれを開きます。



はい、愚かなコードを書くのは難しいです。 私はこれをますます確信しています。 次のようなコメントを受け取ったとき、私は満足しています。 私のチームと将来のコードメンテナーのためにできる最善のことは、愚かなコードを書くことです。



デイブ・カーハートに起因する考えは次のとおりです。



「あなたのコードをサポートしてくれる人のように常にコードを書くことは、自由な精神病質者であり、彼はあなたがどこに住んでいるか知っています。」




All Articles