Есть вот такое творение http://bugtraq.ru/library/programming/badcode.html в котором автор сравнивает абстрактный процесс программирования с игрой в шахматы, т.е. по-сути с проблемой перебора возможных вариантов поведения на неких граничных(и не только) входных данных. Короче говоря, кто привил себе правильный рефлекс определенно-целенаправленного "брутфорса" во время созидания/реализации алгоритма, тот и в дамках. Ваше мнение ? PS: я почему спрашиваю.. я сам за собой порой замечаю подвисание в процессе алгоритмизации, казалось бы на не особо мудреных участках, заключающееся именно в неком умственном переборе значений.
Просмотрел статью. Не понравилось опускание некоторых вещей, которые действительно иногда совсем мешают, но иногда бывают очень полезны, в частности ООП и венгерской нотации. Согласен с некоторыми вещами так же.. например, с ненужностью стиля if(0==x) и с громоздкостью некоторых реализаций типа реестра в Windows. Насчет технологии "шахмат"... Мое мнение - программирование не сводится к брутфорсу..
Шахматы сводятся к перебору только в машинном варианте, да и то не в передовых програмах. Для человека же шахматы - тактическая игра, требующая воображения и абстрактного мышления, хотя и в некоторм смысле переборов тактических приёмов, и когда ни один известный не подходит, прямым перебором. В какой-то мере можно наверное и в программировании говорить о переборе алгоритмов для данной задачи. Возможно метод полного перебора и применяется скажем в системах автоматизированного программирования (не знаю, как такое точно называется), но опять-таки перебор характерен для систем, в которых не заложено представление об особеностях решаемой задачи, или таковой не существует. (как в случае с шахматами)
When in doubt use brute force (c) Ken Thompson хотя, не могу не признать, что использование этой цитаты применительно к данной статье притянуто за уши, поскольку томпсон имел ввиду несколько иное, но, тем не менее, в данном контексте тоже в тему. нет. там лишь написано, что этот рефлекс является одним из обязательных рефлексов хорошего программиста. ps. читаю и думаю: "кажется ещё один эрик раймонд родился"... а оказывается всё тривиально -- в конце ссылка на TAOUP. просто статью писал адепт-юниксоид, который твёрдым шагом идёт по Пути Юникс. отсюда и довольно-таки пренебрежительное отношение к ооп, и полное неприятие венгерской нотации, и восторги по поводу ограничения на размер функции в 24 строки, и неодолимое желание организовать обмен файлами между хостами в 10 строк скрипта, вместо 80k строк c++.
r90,dbrain +1 нипанравелась стотья... особенно недовольство венгерской нотации. конешно перегибать палку не стОит, но и совсем без нотации - херово, всетаки удобно, когда видно хде строка, хде указатель, какая строка в юникоде, какая нет. без просмотра места её объявления
Нет автор имел в виду преоебор не при составлении алгоритма, а при поиске его НАИЛУЧШЕГО варианта(при стремлении кол/ва ошибок к 0), а это действительно перебор. В доказательство приведу цитатку И кстати кроме перебора сложно чтонибуть придумать, не считая индивидуальных качеств, опыт, геометрическое зрение, мат мышление, IQ Т.е. автор не аспаривает творчествость программирования, нормальная статья.
я бы обозвал эту статью как "что делать прогеру, если писать код сразу без багов не получается". если не упускать такое название статьи из поля зрения, то все подобные измышления типа: начинают по другому восприниматься в общем, процентов на 70 согласен с автором.
значит с юниксом лучше даже и не связывайся хоть в *nix далеко не все читали раймонда, и есть деятели, которые не то что функции пишут длинною в 100-200 строк, но ещё и венгерскую нотацию используют (бывает и такое!). есть деятели которые ооп ни к месту используют: я уже три года плююсь на дизайн менагера пакетов gentoo, в работу которого осознанно вмешаться может лишь девелопер этого менагера, остальные нервно покуривают в сторонке. бывают всякие кодеры, но тем не менее есть тенденции к соблюдению перечисленных правил.
Видел бы ты как они её ищут... Цирк. Полпрограммы(если не больше) перепишут, понаделают таких конструкций... При кодинге на паскале. Код (Text): for i := 1 to 20 do[b];[/b] по теме: В эти строки можно и ОС поместить. =) Напомнило это: http://g60.livejournal.com/132521.html ([:]||[:])
в начале статьи идет разбор поиска среднего значения. вот финальный код: int avg(int a, int b) { if (sign(a) != sign(b)) return (a + b) / 2; else return a + (b - a) / 2; } хм, а нельзя ли считать вот так: int avg(int a, int b) { return a/2+b/2; } ?
r90 но ведь там int используется. он плохо делится пополам)) без погрешности в авторском решении avg(1,4)=2 avg(7,4)=6 также неверно, но решение более громоздкое, хотя автор как раз и призывает к минимизации и упрощению.
HuXTUS Вообще-то, X+Y=(X xor Y)+(X and Y)*2, где (X xor Y) - частичная сумма, а (X and Y) - переносы. Поэтому (X+Y)/2=(X xor Y)/2 + (X and Y), тогда нет переполнения, и при сложении нечетных чисел -- среднее получается без погрешности