レガシーフォビア

同僚、素晴らしいニュースがあります。素晴らしいプロジェクトを手に入れました。それは数年前から私たちの知らない開発者によって書かれたもので、そのアドレスは(「フィードバックを共有する」ために)見つけることはほとんどありませんでした。私たちは長い間書きましたが、サポートして開発します。 このプロジェクトは現在生産性のピークにあり、間もなく進行します。不正確な変更があればそれを置くことができますが、開発します。 やった!



同意して、奇妙に聞こえますか? 患者のプログラマの頭のせん妄のように。 誰がレガシーを愛していますか? それは常にgovnokod(結局、私たちだけが完璧に書く)、バグ(そして間違いなく書く)、ひどい決定(結局、私たちだけが適切なアーキテクチャを選択する)でいっぱいであり、ほとんど常に読むのが難しい(私たちだけが書くから)明確で美しい)。



私は、開発の分野に一般的に精通しているのと同じくらい、この恐怖の物語に精通しています。 レガシーコードで恐ろしいことは、プログラマーにとっては普遍的な恐怖の物語です。子供にとっては、バレルに噛み付くような灰色のトップに関する物語です。



したがって、すべてではありませんが、少なくとも一部の開発者について、レガシーに関する少しのステレオタイプを破り、レガシーがどれほど興味深いか、そしてあなたはそれを本当に恐れることができないが、それを愛することさえできないことを理解したいと思います。



私たちはすぐにコードについて話していると言いますが、それについてのみです。 美しいオフィス、魅力的な人事、クールなリード、素晴らしいPRについてではありません。 コード。



あなたがPHP開発者であり、「私たちのプロジェクトに来て、私たちは数年にわたってこのコードをPHPで書いてきました。数百メガバイトのコードがあり、OOPと手続き型プログラミングはほとんどありません」と言われます。 レガシーの点で疑わしいように聞こえますか? そして、「vkをコーディングしてください」と言われた場合。 違いがあり、それは重要です。



反対側に行きましょう。

「聞いてください、私はあなたに素晴らしい機会があります、あなたに馴染みのあるすべてのパターンを適用する必要があります、あなたはフレームワークとテクノロジーを使用できます、すべてをゼロから書くことができ、ちょうど私の犬のホームブログにします」 レガシー、思考の全範囲、行動の自由はありません。 トレンディなnode.jsですべてを完璧に美しく行うことができ、ajaxと彗星をねじ込み、redisにキャッシュを配置し、elastic'eにモルフォロジーを含むRT検索を追加しますが、なぜですか?



卑劣な番号1:

興味深いプロジェクトとは、原則として開発者にとって興味深いプロジェクトです。 言語から、技術から、建築から。 そして、これはレガシーとは何の関係もありません。



新しいプロジェクトを考えるときの気持ちを知っていますか?どのエンティティが何とやり取りするべきか、どのようなアーキテクチャのレイヤーを行うべきか、ボトルネックがどこに現れるのか、これを避けるために何をする必要があるのか​​を頭に描きますか? それは、その住人とつながりを持ち、徐々にコードに翻訳され、「存在」し始める具体的なものに変わる、住人とつながりのある一種のおとぎ話の世界です。

秘密をお伝えします。「アーティスト」でないとコードを書くことはできません。 しかし、アーティストはすぐに美しい絵を書くことはできません。 彼らは色をより調和的に選択し、遠近感を表示し、要素を組み合わせるなどを学びます。 プログラマーは、ソリューションを選択し、プロジェクトの将来を確認し、利用可能なリソースの範囲内で、便利でサポートされ、効果的なすべてを実行することを学びます。 そして、写真の生活の過程で、それに対する新しい要件が現れた場合-「そして今夜、それをやろう。 そして、ドラゴンが空を横切って飛ぶように。 実際は夏ではなく冬です。 そして、DinerisがバックグラウンドでGeorge Martinを殺すようにします」-そのような瞬間に、著者の元の創造的で、やや美しいデザインを保存することは困難です。



新しいプロジェクトで作業を開始するとき、実際にはあなたはクリエイターであり、発明者です。 いい感じ。 サポートプロジェクトであるレガシーコードを入手すると、何らかの理由で、実際にコードを調査する前であっても、まるで彼らがオーギュアンstable舎を受け取ったようなイメージがあります。 これはレガシーだと思ってください。



プロジェクトが何であれ、それは写真にも基づいています。おそらく、そのストロークはもはやそれほど調和して組み合わされていませんが、写真はそうでした。 そして、あなたがレガシーを読んでいる間、あなたは研究者としてそれを頭の中で復元することができ、それだけでなく、プロとして、あなたはそれを本当に美しくすることができます。 不足している詳細を追加し、以前の「マスター」から非常に美しくなったものを完成させ、すでにあなたのものであり、最初からさえもより良くするためにあなたの力でのみ新しい画像を取得する能力があります。



バナリティーナンバー2:

レガシーはいという意味ではありません。 これはそれをさらに美しくするチャンスです。



多くの人が「愚か者は自分の過ちから学び、賢い人は見知らぬ人から学ぶ」というフレーズをよく知っています。 それにもかかわらず、TDDを実践している人がいれば、何百万の再保険があっても、すべてのプロフェッショナリズムで常にバグなしでコードを書くことは不可能であることをよく知っています。 これは自然なことです。

したがって、本物の探偵、研究者、さらには演ずる人のように、他の誰かのコードを掘り下げ、頭の中でそのイメージを作成し、隠されたパターンを見つけることができる十分な経験と能力があれば、そこから多くの有用な情報を抽出することもできます。 実際に配置されていた奇妙なソリューションがいくつかありますが、突然それについて考えて、すでに最適ではないソリューションをすでに作成し、実際に動作しているのを見ただけで、より最適なソリューションを知っていることがわかりますより良い方法。 リファクタリングは無限であることは誰もが知っていますが、リファクタリングしてコードについて新しいことを学ぶには、何かが生きており、すでに記述されている必要があります。

新しいアプローチを見つけるのが好きで、枠の外で考えるのが好きな人だけがこれで私を理解することに注意したいだけです。 経験の浅いために、古いプロジェクトと会うとき、バナーを受け取って叫ぶ準備ができている開発者がいます。「はい、これは確かにたわごとです。これらはすべて%my_favorite_framework%で実際に異なって記述されています。書き換えてください!!!」。



適切なアプローチとスキルを備えたレガシーコードで学ぶべきことがたくさんあります。 まず第一に、他の開発者がコードをどのように見ているのか、そしてそのアプローチの良い点と悪い点。 テンプレートソリューションに焦点を合わせない場合、世界の写真を拡大することで常により完全になります。

実際、ほとんどの一般的なフレームワーク、ライブラリ、およびコンポーネントのコードは、多くの点ですでにレガシーになっています。 そして、このコードを勉強しても開発者にとって価値のある新しいものが決して得られないことを否定する可能性は低いと思います。 どんな本でも読まないもの。



陳腐な番号3:

レガシーは、それを行う方法としない方法に関する優れたチュートリアルです。



あなたが知覚するのが非常に難しい本を読んだことがありますか? たとえば、ダンテの詩、ヘルマンヘッセ、アインランドの物語、または少なくともロシアのコードを取り上げます。 思考プロセスの歯車が2ページ目で歯を砕き始めたときの感覚はおなじみですか? しかし、これは何らかの形で作品のセマンティックな価値を低下させますか?

そのため、他の人のコードを読むこともときどき激怒します。 もちろん、CodeStyleなどの概念は長い間発明されてきました。 ただし、何らかの理由で、多くの遺産は非常に読みにくいものに関連付けられており、長い間すべてのルールに違反して書かれています。 実際、このコードを書いた人は単に「ルール」に従っており、どんなスタイルでもコードを読むことを学ぶことはそれほど難しくありません。



バナリティーナンバー4:

CodeStyleが壊れていても、レガシーはそれほど難しくありません。 さらに、主要な最新のIDEは、適切なレベルでコードの自動フォーマットをサポートする方法を既に学習しています。



むかしむかし、フリーランスで、よく知られているある顧客が、よく知られているフレームワークで簡単なプロジェクトを完成させるように頼みました。 彼は最近、1人のフリーランサーによって作られましたが、支払いを受け取った後に姿を消したため、些細なことを修正する必要があります。

プロジェクトコード全体(!)が配置された1つのビューファイルで単純なコントローラーを起動するためのコピーアンドペーストを発見したときの驚きを想像してください。 男性が「ファッショナブルなフレームワークで」プロジェクトを作成しましたが、彼はそれを行いました(!)。 このコードが1〜2年にわたって回復され、サポートのために誰かに届いた場合、彼は「これはどんな遺産ですか?!」と恐怖で言いました。 しかし、私にとって、このコードには「誕生週」がありませんでした。 それはごくありふれたgovnokodでした。

現在、私はコードが12年目から開発されており、成長を続けるプロジェクトに取り組んでいます。 そして、あなたは、いくつかの欠陥にもかかわらず、非常に古い作品でさえ非常によく見えて読むことを知っています。 これはレガシーであり、優れた堅実なレガシーであり、何度も修正されますが、レガシーによって読みやすく維持されます。



バナリティ番号5:

「レガシー」は「govnokod」と同等ではありません。



数年前にプロジェクトを開いたときに、コードを見て、ちょっとしたデジャヴを感じることがありましたか? 霧のように、痛みを伴う身近なもの、ほとんどネイティブのものの輪郭が徐々に現れ始めます。 そして、最後の疑念を払拭するために、非難と注釈が使用され、ここではすべてが適切に配置されます。 彼です。 彼が一番です。 そして、「どうやってそれを書くことができますか?! ええ、緑があった。 ああ、でも私はそれをクールでシンプルで上品にした。 だから、しかし誰もそれを見ないようになるまで素早く修正する必要がある。」 おなじみですか?

何らかの理由で多くの人々が、レガシーは他の誰かに起こることだと考えています。 数か月/数年経ってもコードを見ない、またはレガシーのように見えるものを書いているとは思わないでしょうか(あるいは、すでにそのように見えますか)。 しかし、これはそうではありません。



バナリティーナンバー6:

あなたもレガシーを書きます。



上記のすべてを要約すると、レガシーという用語は「ホラーストーリー」であることの名誉に値するものではありません。 それには独自の素晴らしい側面があり、コードを書いた人だけでなく、時にはそれを使って作業する人だけでなく、開発者の経験不足だけが彼にそのような栄光をもたらします。 多くのレガシーコードが私の手に渡り、ほとんどのコードを扱うのが本当に楽しかったです。 それがどのように機能するかを理解し、著者の意図を理解しようとする、より適切な解決策を見つける、または反対に、著者の決定が明白ではないが非常に効果的であることが判明する。 すでに機能しているもの、使用しているものを変更し、より良くすることは素晴らしい経験です。 常にテンプレートを使用して、または常にゼロから作成する場合、コードを適切に作成することはできません。 人は比較によってすべてを学び、比較のための情報源が多ければ多いほど、書くのが上手になります。







広大な開発と、より優れた堅牢なレガシーコードでの成功をお祈りしています。 このフレーズが記事の開始前とは異なって認識されることを望みます。



まだ読んでいない場合は、書籍のリスト形式のボーナス:



リファクタリング-既存のコードの設計の改善

レガシーコードを効果的に使用する

パターンへのリファクタリング

クリーンコード:アジャイルソフトウェアのクラフツマンシップハンドブック



All Articles