From: David Alan Black Date: 2001-08-03T22:13:47+09:00 Subject: [ruby-talk:19064] ANN: Code Amelioration Contest (presented by Ruby Conference 2001) announcing the first (annual?) --------------------------------- CODE AMELIORATION CONTEST --------------------------------- presented under the auspices of Ruby Conference 2001 Organizer and contact: David Alan Black dblack@candle.superlink.net Introduction Amelioration means "improvement" or "making better." Accordingly, participation in this contest involves making improvements to badly designed, obscurely written (but working!) Ruby code. As a first, non-competitive step, there will be a submission period for examples of "bad" code. These examples will then be publicly posted for downloading and rewriting -- amelioration -- by contestants. So there are two ways you can participate: submitting "bad" code examples, or doing ameliorations, or both. The only restriction is that any ameliorations you submit must be of bad code examples written by someone else, not your own. All of this will take place *before* Ruby Conference 2001. *At* the conference, the results of the judging will be announced. Matz, Andy Hunt, and Dave Thomas have most kindly agreed to judge the contest. (See "Judges and judging", below.) Why a Code Amelioration Contest? Inspired originally by some irc banter about the idea of "reverse obfuscation," the Code Amelioration Contest is designed as a challenging and enjoyable showcase for Ruby strengths. Ruby shines when it comes to conciseness, readability, and clarity. Programming in Ruby has a lot to do with recognizing and coaxing the simple and the transparent. The Contest aims to provide Ruby users a way to exercise and develop these skills, in a context which will appeal to anyone who enjoys a coding puzzle or challenge. Overview and timeline 1. Between now and August 20, people (you!) submit examples of badly written, but working, Ruby code. (See below for details.) These "bad" examples will be publicly posted. 2. Other people (or the same people, as long as they don't rewrite their own code) submit code ameliorations: improved, cleaned up, refactored, polished versions of one or more of the bad code examples. (Through September 10.) 3. The judges judge these rewrites, based on clarity, efficiency, and resourcefulness with the Ruby language. 4. The contest culminates at the conference, where the judges announce the winners, who get glory and possibly some small tangible reward. Judges and judging The judges for the first annual Code Amelioration Contest will be Matz, Andy Hunt, and Dave Thomas. Judging will be on the basis of precision (the rewrite must do what the original code did), conciseness combined with readability (not keystroke golf!), and whatever general, mystical, elusive Ruby-esque qualities the judges feel they have spotted. Winner(s) will be mentioned, and possibly given something, at Ruby Conference 2001. Judges will also present and discuss the judging process and the rationale for their selection(s). Submit your examples of bad code! The first thing needed is examples of poorly designed, badly written code. You are invited to write and submit such examples. There's definitely room to have fun with this part of the contest. Deadline for submission of examples of bad code: August 20. Please follow these guidelines: 1. The code you submit must be your own. Do NOT take something off of ruby-talk that you think is poorly written. We are not out to embarass anyone. 2. Your "bad" code must actually work. Its "badness" should reside in its design, appearance, lack of elegance, inefficiency, and unidiomatic approach to the Ruby language. (Getting the idea? :-) 3. Along with your code, submit some tests or demos to show what your code does. These tests will be re-used to judge the ameliorations of your code for compliance. They can be in RubyUnit format, or just made up of test methods with a clearly predicted output. 4. Send your code and tests to . Try to think of imaginative ways to write unattractive Ruby. Perhaps there's a language or two out there whose style you could imitate? Or ways to circumvent object-oriented design? Or... you decide!