126

ここ数ヶ月、型のコーディングにかなり興味を持っています。それらは私のプログラミングスキルを磨き、仕事で書くコードの品質を向上させるための素晴らしい方法だと思います。

カタスを見つけることができる場所はたくさんあります。お気に入り..

http://codekata.pragprog.com/

http://schuchert.wikispaces.com/Katas

http://www.codingdojo.org/

私はこれらがカタスの優れたリポジトリであることに気づきました...それらのいくつかでの私の試みは非常にやりがいがありました。

しかし、これまでに見たカタには、1つの欠点があると感じています。それらのどれも私が悪いコードのリファクタリングを練習することを可能にしないようです。初めてクリーンなコードを書く方法を学ぶのは素晴らしいことです...しかし、私の現在の仕事では、新しいコードを書く機会はあまりありません。むしろ、私はしばしばレガシーコードと戦い、モジュールをリファクタリングし、依存関係を排除し、結合を減らす方法を見つけようとしています。

そのため、レガシーコードをリファクタリングしてクリーンなコードに変換するスキルを磨くために使用できるいくつかのカタを探しています。

誰かがすでに存在するものを知っていますか?仕事中にたくさんの練習をしていることは知っていますが、依存関係を分解し、関心の分離を行う方法をすぐに理解できるようになるまで、スキルを磨きたいと思います。やりすぎ。

4

3 に答える 3

95

それらを直接カタログ化するサイトを知りませんが、私が時々使用した戦略の1つは次のとおりです。

  1. sourceforgeで、古くて小さく、メンテナンスされていないオープンソースプロジェクトを見つけてください
  2. ダウンロードして、コンパイル/ビルド/実行してください
  3. ドキュメントを読んで、コードの感触をつかんでください
  4. レガシーコードを効果的に使用する方法を使用して、その一部をテストします
  5. その部分をリファクタリングし、おそらくバグを修正し、途中で機能を追加します
  6. 手順4〜6を繰り返します

特にやりがいのある部分を見つけたら、それを捨てて数回繰り返し、スキルを強化してください。

これは、リファクタリングを練習するだけでなく、コードの読み取り、テスト、ビルドプロセスの処理などの他のスキルも練習します。

最も難しい問題は、あなたが仕事を続けるのに十分興味のあるプロジェクトを見つけることです。私が最後に取り組んだのは遺伝的プログラミング用のPythonライブラリで、現在取り組んでいるのはJava用のIRCライブラリです。

于 2009-09-25T06:02:15.530 に答える
21

ネクロマンサーがそのような古いスレッドに返信しているような気がしますが、価値のある追加に役立つことが1つあります。それは、レガシーコードリトリートです。

レガシーコードを使ってコードリトリートを行い、そのためのテクニックを実践しようとするのがアイデアですが、準備したコードを自分で使用して実践することを妨げるものは何もありません。ゴールデンマスターを作成するためにそれを使用するだけで、1時間の作業になり、さらに多くのことができます。カタが通常2時間程度続く場合、LCRで通常発生することをカタに分割するだけで、4つの異なる作業が可能になります。

アイデアの作者であるJBRainsbergerによるGitHubリポジトリがあります。このリポジトリには、使用するシンプルなレガシーシステムであるTriviaGameが含まれています。

主催者/参加者としての私の経験から、人々はこれを本当に気に入っており、レガシーコードで何が問題になる可能性があり、リファクタリングがどこであなたを迷わせる可能性があるか(そしてどのように!)を見ることができました。Andreas Leidigによる、それがどのように見えるかについてのさらに別の説明があります。

于 2013-02-09T12:02:55.420 に答える
20

Emily Bacheには、いくつかのリファクタリングカタを備えたgithubリポジトリがあります:EmilyBacheのリファクタリングKataRepo 。リファクタリングするKataYahtzeeとKataTennisのバリアントがあります。また、彼女はリファクタリング型として設計されたGildedRoseKataの変種を持っています。

また、彼女のリポジトリにはレーシングカーカタがあります:レーシングカーカタ。レースカーカタスには、リファクタリングのための優れた演習も含まれています。

それらのカタには、複数の言語のコードがあります。

  • C ++
  • C#
  • Java
  • Javascript
  • Python
  • ルビー
于 2013-10-12T15:38:02.480 に答える