他の人々のコードと意図的な誤り


頻繁に他の人によって書かれたコードを読んだり、自分自身で十分な時間の前に書かれた時間を読むとき、私は一種のチョーク、ヘッドライトの瞬間の鹿に餌食になります.私はリファクタリングされていますreamはテストされています(うまくいけば)、レビューされています(うまくいけば)、エラーなしで(生産的に)十分に長い間、誰もがいくつかのことを覚えている可能性がありますが実行されている方法は、彼らが行う方法を動作します.すべてがソースコントロールの下にあるという事実にもかかわらず、ロックアップして解決策を削除したくないのは当然です.結局、それは働きます!それが生産で働いていて、それが特定の方法で書かれているならば、理由が読者に少しの意味もないとしても、そのように書かれた理由がなければなりません.
正しい?(悪い)

私、自分の古いコードを見つけようとして
それは私が認めたいと思っているよりも、私のために、私のために沈むためにこれを長くしました、しかし、働いて、テストされたコードがたくさんあります、しかし、それは特定の理由のために、それがある方法で書かれました.以下の簡潔なブロックを書くかもしれません.
function(x){
    return somethingElse(someOperation(x));
    // this is obviously a contrived example
}
以下の記述ブロックではなく、
function(x){

    var y = someOperation(x);

    var z = somethingElse(y);

    return z;

}
他の誰かが変数宣言を分割したり、不必要に関数を中断したりする必要があります.私は、しばしば、簡潔さと明快さの上で締め切りとゴールを優先させることに対して有罪であると感じました.しかし、その日の終わりに、安定した、テストされた、働くコードは「エレガントな」コード、きれいなコード、またはレビューされて、死に改訂されたコードよりよいです、しかし、それは決して公表されません.加えて、我々は試してみて、最適化、テスト、レビュー、一般的にすべてについての死に負けるだけでなく、ソフトウェア開発の一部の部分は、単に好みにダウン来る.これは家具ではなく、私たちは戻って来て、それを修正したくないかもしれません.

一部のものは本当に重要ではない
我々が必然的に戻って来て、古いコードを修正するとき、何が起こりますか?前述のように、私は個人的に古いコードを削除または再書き込みに苦労します.私は怠け者なので、私はそれを理解していないので、私はそれが理由を持っている方法を、書かれているので、計画では、誰かが問題に精通して書かれている.あまりにも頻繁に、私の経験では、その感情は間違っている.
すべての名前を欲しがることへの私の自然な傾斜は私にこの星のような感じの良い記述を探して残しました.最近、私は大きなカートリッジと呼ばれる大きなポッドキャストに感謝しています.
我々が話してきた感覚は、文学理論から生じる意図的な誤謬と呼ばれる概念とよく一致する.W . K . WimsattとMunroe Beardsleyによって考案された意図的な誤謬は、「作者のデザインや意図は、文芸作品の成功を判断するための基準として利用できないし、望ましいものではない」という考えです文芸批評の文脈では、彼らのポイントは、著者の意図は、テキストから再構成することはできません、部分は自分自身のために話すと逆の任意の並べ替えを得るために設計されていない著者が作成しようとしていた可能性がありますか、または書かれた作品のエイド.さらに、彼らは、作品についてのメモ、または作品の執筆時に著者からの現代的なジャーナルは、まだ正式な意図を引き出すための二次的なソースであり、最後の製品としての作品は常に主要なソースであると主張する.テキストは不完全な媒体であるかもしれません、しかし、我々が片の意図、意味、価値と影響を評価したいとき、それは我々が持っている唯一のものです.コードについて話すとき、これらの考えは全く同じことでないかもしれません、しかし、我々は韻体系を形成するのを始めることができますか?

私がこの点を作るように見えるもの
コードの部分を評価するとき、コード自体から実装詳細の意図を引き出すことはしばしば不可能です.つまり、私たちは、著者の意図を引き出すことを試みることができます.なぜなら、我々はデータの始まりと終わりの状態、呼び出されたメソッド、etceteraを見るからです.
彼らがそこにいるならば、コメントはその「理由」のいくらかを照らすことができます、しかし、コメントはしばしばコード近視の握りに書かれます.そして、あなたがあなたが全体的なゴールの跡を失ったように長い間何かで離れて接続していたあとにセットするトンネル視力です.彼らはまた、根本的に欠陥があるアプローチのまわりで意図を文書化して、codifyすることもできます、あるいは、より単純なものが存在するとき、解決された解決への信用を貸してください.結局のところ、我々は常に完璧な条件と明確な頭でコードを書いていない.コメントはまた、MIX通信のリスクを運びます.

この2年のコメントが何を意味するかについて理解する時間
ドキュメントが役立つかもしれませんが、コードのように頻繁に更新される必要がある脆弱なドキュメントにつながることができるので、実装の詳細を文書化するのは素晴らしい考えではありません.ドキュメントは、コードの一部が固執する契約を記述するために最もよく使われます.そして、特定のものが特定の方法でされる理由についての質問でありません.答えは、午前2時だったかもしれません、私が他の方法でそれをしたならば、変なバグは飛び上がっていました、私はそれをさせなければなりませんでした、そして、我々は二度とそれに決して触れませんでした.これらの答えはベストプラクティスではないかもしれませんが、私たちが解決したいと思っているものはありませんが、生産コードベースで働いている人は誰でも、このように見えます.
問題のこれらの種類を避ける方法の質問は、より多くの経験豊富な開発者により良い残っており、件名に多くの書き込みがあります.私の唯一の提案は、心のクリア、クリーン、フォーカスのコードトップを書くの懸念を維持することです.私は、役に立つために見つけました、しかし、アプローチは決して銀弾丸です.
私のより広いポイントは、コードは、一度書かれた、その機能と読者の理解によってのみ質問することができます.それは、元の著者にアクセスしても、任意の信頼性の方法で著者の意図のレンズを介して質問することはできません.自分自身を信頼し、コードが何らかの努力の後に意味をなさないならば、それはあなたの知性の起訴でありません.これは、コードベースのセクションを理解し改善する機会があることを意味します.もしある特定の方法で書かれたならば、あなたは必ずその制限に対して自分自身を実行するでしょう.その時点で、その制限を克服する機会を持っている可能性があります永久的にあなたのチームの作品を改善します.元の作者として、コードベースの所有権を同じくらいにしています.そして、ある特定の機能をリファクタリングしたり更新したりする場合には、変更を加える権限を持っているかもしれません.あなたがするとき、私はあなたがあなたが望むように、以前の実装の多くを掘り出すのを自由に感じていることをお勧めします.あなたが不透明に見える機能で連続的に遊んでいるのを恐れているならば、より大きくてより大きな問題を征服するのは難しいでしょう.誰かがあなたがいつか何かを特定の方法を実行した理由を尋ねることをあなたに来るかもしれないので😄.

If you enjoyed this post, please feel free to recommend it on dev.to, share it, and give me a follow!

Also if you liked this topic and want to see a regular stream of similar stuff, or just want to get in touch, follow me on Twitter ! Also, big shoutout to my friends and on Twitter for notes.