программистское: посмотрите и сравните
Oct. 6th, 2009 03:08 pmПитер Норвиг, автор (помимо множества прочих заслуг) знаменитых книг об AI и Лиспе, автор эссе Teach Yourself Programming in Ten Years, которое следует прочитать каждому программисту, рассказывает, как написать программу, решающую любую задачу Судоку. 100 строк на Питоне.
Рон Джеффриз, один из изобретателей системы XP Programming, один из духовных отцов движения Agile и авторов Agile Manifesto, пытается написать программу для решения Судоку: раз, два, три, четыре, пять. На Руби, с использованием TDD (test-driven development).
Прочитайте эти два описания двух разных попыток - включая все пять записей Джеффриза, не поленитесь, чтобы как следует их оценить - сравните, и вы будете знать все, что вам надо знать, об XP и Agile.
Бонус:
Роберт Мартин ("Uncle Bob Martin"), один из главных создателей Agile, специалист по Agile, XP и UML, автор книг обо всех этих методологиях, пишет код на Clojure, с помощью TDD, вычисляющий результат игры Bowling Game, простого варианта боулинга. Вот его код.
Матиас Джованнини пишет код на OCaml, без TDD, для решения той же проблемы. Вот его код.
Сравните, и вы будете знать все, что следует знать об XP, Agile и TDD.
Все всегда звучит очень заманчиво. Все всегда звучат очень убедительно. Все полемики и манифесты можно просто не читать, а если читать, то ни в коем случае не воспринимать всерьез. Читайте код. Или, если есть время и желание, пробуйте сами. А манифесты и методологические книги - пусть себе скрипит губерния.
Рон Джеффриз, один из изобретателей системы XP Programming, один из духовных отцов движения Agile и авторов Agile Manifesto, пытается написать программу для решения Судоку: раз, два, три, четыре, пять. На Руби, с использованием TDD (test-driven development).
Прочитайте эти два описания двух разных попыток - включая все пять записей Джеффриза, не поленитесь, чтобы как следует их оценить - сравните, и вы будете знать все, что вам надо знать, об XP и Agile.
Бонус:
Роберт Мартин ("Uncle Bob Martin"), один из главных создателей Agile, специалист по Agile, XP и UML, автор книг обо всех этих методологиях, пишет код на Clojure, с помощью TDD, вычисляющий результат игры Bowling Game, простого варианта боулинга. Вот его код.
Матиас Джованнини пишет код на OCaml, без TDD, для решения той же проблемы. Вот его код.
Сравните, и вы будете знать все, что следует знать об XP, Agile и TDD.
Все всегда звучит очень заманчиво. Все всегда звучат очень убедительно. Все полемики и манифесты можно просто не читать, а если читать, то ни в коем случае не воспринимать всерьез. Читайте код. Или, если есть время и желание, пробуйте сами. А манифесты и методологические книги - пусть себе скрипит губерния.
no subject
Date: 2009-10-06 05:30 pm (UTC)в одной из систем у нас, например, несколько критически важных классов были вообще вне тестов. сознательно :) потому что писать тесты на них заолбаешься, а если что в них поломать - слетает вся система, так как ими пользуются ВСЕ оставшиеся ;)
(no subject)
From:(no subject)
From:(no subject)
From: (Anonymous) - Date: 2009-10-08 05:03 am (UTC) - Expandno subject
Date: 2009-10-06 05:39 pm (UTC)no subject
Date: 2009-10-06 05:45 pm (UTC)no subject
Date: 2009-10-06 05:47 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-10-06 05:50 pm (UTC)no subject
Date: 2009-10-06 05:53 pm (UTC)Хотя сам-то я считаю, что всех, кто любит любые методологии, нужно заставлять выучивать "Нет серебряной пули" Брукса наизусть, окраплять святой водой и отпускать с миром.
(no subject)
From:no subject
Date: 2009-10-06 05:56 pm (UTC)Это даже как-то нечестно.
(у Рона отвратный Руби)
Бонус про дядю Боба вообще убойный, кошмар.
(no subject)
From:no subject
Date: 2009-10-06 05:59 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-10-06 05:59 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-10-06 06:11 pm (UTC)no subject
Date: 2009-10-06 07:08 pm (UTC)(no subject)
From:(no subject)
From: (Anonymous) - Date: 2009-10-06 08:52 pm (UTC) - Expand(no subject)
From:no subject
Date: 2009-10-06 07:18 pm (UTC)Насчет того, что XP - это вариант для средних программистов в средних конторах - это просто бред, конечно. Это показывает и опыт, и логика. XP также хорош и для сильных, чтобы под этим не подразумевали.
Просто здесь нужно рассуждать в другом контексте. Т.е., говоря о эффектах XP, нужно иметь ввиду не код и не архитектуру, а процесс разработки и деланья бизнеса. Как-то так.
no subject
Date: 2009-10-06 08:54 pm (UTC)Напоминает грустный анекдот о паттернах проектирования.
Разработчики пишут письмо Э. Гамма: "Мы реализовали в нашей системе уже двадцать шаблонов, а теперь думаем, как нам еще впихнуть в нее оставшиеся три. Уже весь мозг сломали, пытаясь придумать. Может вы взглянете на архитектуру и чего-нибудь посоветуете?"
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From: (Anonymous) - Date: 2009-10-09 06:39 am (UTC) - Expandno subject
Date: 2009-10-06 08:56 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-10-06 09:06 pm (UTC)Матиас Джованнини пишет код на OCaml, без TDD, для решения той же проблемы.
По-моему, у Вас тут передергивание. Мартин изучает Clojure (I’m trying to learn Clojure) и сомневается в своем решении (tests, especially, look bizzare and backwards to me).
Выбрал он неудачный пример, который на OCaml решается проще. Но делать на этом основании какие-либо выводы о чем бы то не было не слишком разумно.
(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-10-06 10:33 pm (UTC)no subject
Date: 2009-10-06 10:55 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-10-07 04:32 am (UTC)Но если посмотреть шире, то сама TDD является сознательным полномасштабным нарушением YAGNI: она буквально построена на написании кода который в данный момент не требуется - тестов.
(no subject)
From:no subject
Date: 2009-10-07 07:20 am (UTC)Sudoku is "a denial of service attack on human intellect"
no subject
Date: 2009-10-07 08:09 am (UTC)(no subject)
From:no subject
Date: 2009-10-07 02:15 pm (UTC)Что касается TDD я буду осторожен: Некоторое время тому назад написал review на Амазоне о "Test Driven: TDD and Acceptance TDD for Java Developers" by Lasse Koskela. Немножко перебрал с оценкой: книга вовсе не плохая, много хороших примеров, техники тестирования и т.д. Меня почти единогласно побили ногами и обещали не брать на работу за ересь.
В целом проблема на мой взгляд заключается в том, что когда принцип (даже хороший) возводится в ранг религии, внимание переключается от проблем к поддержанию чистоты принципа. Тесты хороши и дизайн ой как нужен, особенно, если большое и надолго.
добавлю свои 5 копеек
Date: 2009-10-07 03:06 pm (UTC)Отметил для себя, что в первом примере про Судоку, чем отличаются представленные решения.
Да ведь тем, что первое решение написано тем человеком, который не поленился изучить эту самую головоломку (по тексту там чувствуется что у него есть некоторый уровень эрудиции по этому вопросу), отлично знает правила и выигрышные стратегии игры. А сама статья, это окончательный и выверенный результат работы, которая вообще-то осталась за кадром.
Второй же случай -- практически прямая противоположность.
Человек с самого начала признается что ни в одном глазу о Судоку. Только правила прочитал.
И вот, на основе этих правил, пробует хоть и методично, но все равно с большой долей случайности двигаться по новой для него местности.
То есть, выражаясь прямо -- это два примера которые некорректно сравнивать, тем более без оговорок.
Почему я обратил на это внимание?
Потому что раз было сталкивался на своем личном опыте с таким подходом.
Когда передо мной была поставлена задача в области в принцыпе мне не особо известной.
И где я был вынужден двигатся вот такими маленькими шажками как в примере.
А в результате, используя выше примененную логику, мою работу забраковал -- мол "видиш как мало ты сделал, и как намного больше можно было бы сделать по-другому", глупо игнорируя тот факт, что времени прошло недостаточно для результата, независимо от того какую кто методологию использует.
Еще.
Есть у Гаррисона такая повесть. http://ru.wikipedia.org/wiki/Фантастическая_сага
Где сценариста отправляют машиной времени куда-то в мезозой, и он там несколько месяцев пишет сценарий фильма.
А по времени студии проходит всего один час, и директор студии на радостях, порывается оплатить не несколько месяцев работы над сценарием, а только этот один час, на что режисер ему аргументировано отвечает --
http://lib.web-malina.com/getbook.php?bid=1438&page=9
""- Сценарий за час! - на лице Л.М. появилась счастливая улыбка. - Да
это же настоящая революция в кинопромышленности! Давай не будем скупиться,
Барни. Дадим этому парню самую высокую ставку, какая у нас есть, а затем
увеличим ее в два раза! Я не скупердяй. Мне хочется поступить по
справедливости, и уж я позабочусь о том, чтобы Чарли Чанг получил самую
высокую почасовую оплату, которая когда-либо была выплачена сценаристу за
один час его времени!
- Вы не совсем поняли меня, Л.М. Может быть, это с вашей точки зрения
прошел всего один час, но Чарли Чанг трудился как ишак над этим сценарием
более двух месяцев, включая субботы и воскресенья, и ему придется
заплатить за все это время.
- Он не сможет этого доказать! - Л.М. сделал свирепую гримасу.
- Нет, сможет. Каждый день он пробивал карточку на часах-табеле, и к
сценарию приложены все его карточки.
- Тогда пусть обращается в суд! На работу потребовался один час, и я
заплачу ему за один час.
- Сэм, - взмолился Барни, - поговорите с ним. Скажите ему, что в этом
мире ничего нельзя получить даром. Ведь деньги за восемь недель работы -
это гроши за такой великий сценарий!
- Мне больше нравится одночасовой сценарий, - заметил Сэм.
- Нам всем они больше нравятся, только одночасовых сценариев на свете
не бывает. Это просто новый метод работы, однако нам придется платить ту
же самую сумму за работу, что бы ни случилось.""
Классный пост!
Date: 2009-10-07 07:07 pm (UTC)наброспост.2. Тем не менее - самый главный (IMHO) элемент успеха работы Норвига - что он работал ОДИН (и для собственного удовольствия, а не в коллективе с половиной команды из Индии и - сдать работу за две недели....). И еще, по поводу ТДД - а кто-то проверил что это действительно работает на всех квадратиках? Или это должно быть так поскольку само решение так построено?
One more egghead jumps into the brawl
Date: 2009-10-08 06:01 am (UTC)http://bramcohen.livejournal.com/70250.html
no subject
Date: 2009-10-09 12:27 am (UTC)XP, Agile и всякий Скрам мне видятся чем-то вроде сект, не скрою. Но все же это перебор -- доказывать, что тестирование не нужно, на примере бесполезных олимпиадных задач. Все-таки количество строк в коде слабо коррелирует с его понятностью.
Если вспомнить Брукса, тесты -- это одна из тех вещей которая отличает программный продукт от программы.
Или я опять-таки чего-то не понял.
(no subject)
From: