Весёлые (сосисочные) рефакторинги



    Привет, %habrausername%. Я хочу сыграть с тобой в игру.

    Ты устроился на новую работу. И в первый же день, сразу после подписания NDA, тебе показывают то, что осталось от предыдущего разработчика. Тебе хочется кричать, хочется бежать из этого проклятого места, но трудовой договор сковывает тебя по рукам и ногам. Поэтому ты лишь еле слышно материшься.

    От предыдущего разработчика осталась кучка кода и домашние тапочки. Ты осторожно кладёшь тапочки в мусорную корзину и начинаешь рефакторинг.

    Этот код ужасен. Во-первых, нет никого, кто мог бы сказать, зачем этот код писался. Во-вторых, нет никакой документации. Нет даже комментариев, не говоря уже о юнит-тестах. В-третьих, код не структурирован, а имена классов и методов ни о чём не говорят. И, наконец, работать это должно начать не сегодня, и даже не вчера, а внезапно.
    Ну как, %habrausername%, пробежал холодок по спине?

    В такой ситуации каждый программист считает, что сейчас-то он сделает лучше, чем было. Но так ли это? Объективно ли код становится лучше после рефакторинга? Если да, то в чём критерий улучшения кода? А может быть рефакторинг служит удовлетворению амбиций разработчика?

    Я предлагаю вашему вниманию TB MMOG под названием «Весёлые рефакторинги».

    Суть в следующем. Имеется некий код, ведущий и N участников. Ведущий высылает на почту первому участнику исходный код. Участник проводит рефакторинг и отправляет результат обратно ведущему. Затем ведущий отправляет результат второму участнику и так далее, пока участники не закончатся. Передача кода происходит анонимно, то есть ни один из участников не знает, чей код он рефакторит.

    Цель — получение представления о «совершенном коде» и методах, которые используют разные разработчики для его достижения. Ну и конечно же, это будет весело. По итогам Весёлых рефакторингов будет написана статья с анализом сделанных изменений, а все исходные коды будут выложены в общий доступ.

    Если вы хотите принять участие в Весёлых рефакторингах, отправьте заявку на почту recrowding@gmail.com. В заявке укажите свой емейл (будет использоваться исключительно для отправки вам исходного кода) и пару слов о себе (будут опубликованы в итоговом отчёте, сюда могут включать контакты, ссылка на сайт и тп).

    Чтобы не настал хаос, вводится несколько правил:
    1. Не задерживайте у себя код слишком долго. Если от вас не будет ответа более двух суток, вы будете исключены из игры.
    2. Не стоит писать в коде какие-то личные данные, дабы не искушать следующего участника обратиться к вам за помощью. Емейлы, имена, явки и тп из исходного кода будут безбожно вырезаться.
    3. Нельзя менять язык программирования. В остальном участнику представляется полная свобода действий в рамках понятия «рефакторинг». Да, откровенный треш будет исключаться.
    4. Общее ревью будет опубликовано на Хабре, а работы всех участников конкурса будут выложены в общедоступный репозиторий вместе с парой слов себе, указанной в заявке.


    Для этих Рефакторингов выбран язык Java (потому что рефакторить программу на Яве можно бесконечно). Заявки принимаются до 18 марта.

    UPD Раз уж зашла речь, скажу, что исходная кучка кода собрана в одном файле и имеет длину не более 200 строк.

    UPD2 Сказать, что мне пришло много заявок — это ничего не сказать. Ответить всем у меня чисто физически времени не хватит, да и не надо это, наверное. Главное, что все поступающие заявки записываются, а исходные коды уже пустились в плавание. Наберитесь терпения, всем, отправившим мне емейл, со временем придёт архив с кодом.
    Поделиться публикацией

    Комментарии 174

      +36
      Самое главное чтобы по итогам этого «рефакторинга» изначальная «Hello World» программа не превратилась в симулятор большого адронного коллайдера.
        0
        Всё к лучшему, Hello World уже как-то поднадоел ;) Но да, риск превратить пару строчек в монстра есть всегда.
        +4
        Я думаю, что «Весёлый багфиксинг» было бы поярче
          +5
          Это будет уже после весёлых рефакторингов).
            0
            … с кучей веселых пуллреквестнигов
            +1
            Я участвую. Только чур — чтобы код был умеренного размера.
              +2
              Я думаю, есть смысл писать сразу в личку, т.к. всё равно придётся для передачи контактов и прочей инфы.
              +188
              Не ведитесь. «Ведущий» устроился на новую работу и скинет вам код который «осталось от предыдущего разработчика»
                +2
                И после игры его тихо «уйдут» за слив кода. Начальство тоже хабр читает иногда :)
                  –1
                  думаю, что умное начальство понимает, что ничего страшного не произойдет даже если 30-50 процентов кода компании сольётся вовне
                    +1
                    Почему? Объясните?

                    И как же договор о неразглашении? Любое умное начальство заставляет его подписывать.
                      +4
                      Да успокойтесь вы, этот код не имеет никакого отношения к моей работе.
                        +1
                        я говорил с изрядной долей иронии, но я действительно так думаю. Попробую обосновать.
                        1) Согласитесь, что полезный и работающий код сам по себе — вещь ненамного более понятная, чем его скомпилированная версия. Обучение нового сотрудника архитектуре проекта и костылям, оную поддерживающим, занимает около месяца — это если решения были как-то документированы, а все сотрудники, их реализовавшие, все еще работают в компании.
                        2) в большинстве программных продуктов лишь пара процентов кода делает что-либо шибко умное, например реализует какой-нибудь сложный и хитрый алгоритм. Сам по себе этот алгоритм — это, как выразился Хоар, «маленькая программа, старающаяся пробиться наружу большой» и вы многое бы отдали не за быстрый работающий костыльный код, а за медленный и ясный псевдокод и блок-схему на бумажке, плюс объяснения дяди, который это придумал.
                        3) я просто пытаюсь придумать, что великое я или моя компания могла бы сделать, если бы нам был доступен некоторый чужой замечательный код. Код исходников гуглопоисковика (без статистики поисковых запросов), код EMC'шного Clarion'а, код IBM Watson, код Siri, код Windows, World of Warcraft. И не вижу способов не только причинения вреда гигантам-владельцам кода, но и даже принесения себе пользы. Разве что для code-review семинаров использовать и опыт получать.
                          0
                          Ну это зависит от области. Я так думаю, если бы код Watson попал не к вам, а к разработчикам Siri (например), они бы пользу извлечь в принципе могли.
                        +2
                        Я не согласен с этим комментарием дважды. Во первых не понимает. Во вторых — вплоть до 99%.
                          0
                          я согласен с вашим несогласием, это должно быть чертовски умное начальство :)
                    +3
                    Шикарная идея. Пару месяцев назад на работе планировали создать «брусок», который соискатели должны были рефакторить в качестве тестового задания.
                      +29
                      … тебе показывают то, что осталось от предыдущего разработчика.

                      Я один представил себе кучку пепла, или изнеможённое трясущееся бледное тело предыдущего разработчика в лохмотьях, который уже даже стакан воды поднять не может?
                        –2
                        Я представил себе почти чистый С-код в Qt C++ проекте, а потом что-то внутри одумалось, сказало: «БРРР! Не может этого быть! Программеры же хорошие!!!» и перед глазами всплыл образ вмеру понятного, почти не откомментированного кода без документации, методы и классы которого на 70% соответствуют своим именам. Пара торчащих с боля брани костылей, флагов и трэша.

                        Может, это я так свой код представляю? :)

                        Неее… программеры же хорошие :)
                        Да и на чистом C я не пишу )
                        +7
                        Ой, а можно я тоже подкину немного кода? Я вот недавно устроился в новое место, и тут работы по рефакторингу по горло, не справляюсь) можете порефакторить и мне вернуть.
                          0
                          Рефакторю за пиво, либо спортивного интереса :)
                          +20
                          «Привет, %habrausername%. Я хочу сыграть с тобой в игру.» — кто то насмотрелся фильма «Пила»?)))
                            +3
                            Помню, на форумах по игре Цивилизация была такая фишка, что одну игру играли по очереди по одному ходу, сосиски это называлось, вроде как, или сосисочные игры :-)
                              +2
                              Вероятно это преобразованное название от Succession Games =))
                              В Dwarf Fortress тоже есть подобные игры, с веселыми описаниями событий, и руганью в адрес предыдущего правителя.
                                +1
                                Что-то мне подсказывает что термин «сосисочный» уходит корнями горадо дальше, чем вам кажется. В до-компьютерную эпоху. Многие знакомые лет так 50и рассказывали что еще в их время была версия пинг-понга для большой компании. И называлось это Колбаса, или Сосиска (где как). Игра проста: все встают вокруг тенисного стола, один игрок подает, тот кто напротив — отбивает, потом вся «колбаса» из любей смещается по часовой стрелке, так что мяч принимает не тот кто подавал, а человек по правую руку от него. Кто пропустил мяч — выбывает, кто остался последним — выигрывает.
                                  0
                                  Всё так, только называется это не «колбаса», а «солнышко» и выбывающий игрок кладёт свою ракетку на стол, добавляя излишней сложности оставшимся.
                                +4
                                Сосисочный рефакторинг. Это же великолепно!
                                +7
                                Java знаю плохо. Использовал мало. Зато программирую больше 15 лет и знаю кучу языков. Хочу играть O_O.
                                  +9
                                  А почему бы не взять несколько языков? Так сказать, вести параллельно несколько игр. Java, C++, Objective-C, Ruby, JS, Go…
                                  Мне кажется, желающих поучаствовать было бы больше.
                                    0
                                    Да собссно и один кусок можно на разные языки переписывать, еще веселее будет
                                      +1
                                      Я бы поучавствовал в Objective-C!
                                        0
                                        Присоединяюсь.
                                          0
                                          Присоединяюсь.
                                            0
                                            +1
                                          +8
                                          Классная идея! Нет желающих поиграть на js?
                                            +3
                                            Есть.
                                              +3
                                              да
                                                0
                                                Да. Плюс появилась мысль,
                                                1) а не сделать ли трекинг хода рефакторинга с общей инфо: «изменено XX байт, всего YYY байт».
                                                2) И сам код должен тестироваться на исправность
                                                3) и, желательно, иметь смысл. Какой-нибудь плагин к jQuery и несколько демо-тестов к нему.
                                                4) и лучше, чтобы проверялся jslint-ом, иначе превратится в переливание из одного стиля в другой.
                                                5) размером строчек на 150. Меньше — делать будет нечего.
                                                  0
                                                  Может лучше не плагин для jquery, а что-нибудь, связанное с приложениями? Но без крутых библиотек, типа KO и Angular.
                                                    0
                                                    Можно. vooD внизу предлагает порефакторить игру примерно на 500 строк кода. Возьмёмся?
                                                    Трекинг сделаем на Гитхабе, чтобы в readme.md был виден прогресс каждого шага. Только если режим работы закрытый с 1 ведущим, то сам код не выкладывается, а ведущий только отчёты пишет на 2-3 сроки по каждому шагу в 1-2 дня.
                                                    Итак,
                                                    kabzon
                                                    medved13
                                                    termi
                                                    spmbt
                                                    ariser
                                                    ahmpro
                                                      0
                                                      можно к вам?
                                                        0
                                                        Записал всех сюда, в ветку обсуждения, чтобы не заниматься рассылкой ЛС и решить вопросы по выбору материала и правил.
                                                          0
                                                          Отписался в ветке. Уходим туда.
                                                0
                                                Тоже впишусь.
                                                  0
                                                  айда
                                                    +2
                                                    На js было бы отлично.
                                                      0
                                                      если код не очень большой, то запишите меня тоже
                                                        0
                                                        Имеется игра на JS + HTML5 + Box2d. 483 строки на JS (исключая библиотеки). Говнокод 100%. Кроме рефакторинга, можно поправить производительность.
                                                          0
                                                          Если будет на js — я бы поиграл :)
                                                            0
                                                            Присуммируйте единицу.
                                                              0
                                                              Присуммировал и разослал всем 11 js-никам письма одинакового содержания.
                                                              0
                                                              Пожалуй, тоже запишусь к вам…
                                                              +5
                                                              «Сделай западло следующему участнику — напиши код в стиле JAPH!»
                                                                +2
                                                                сыграл бы на Java
                                                                  +4
                                                                  Ничего, и ваш час придёт когда-то ;)

                                                                  А если серьёзно, то внимательно прочитайте пост…
                                                                  +10
                                                                  Есть желающие на C#?

                                                                  Автору спасибо, идея очень хорошая!
                                                                    +2
                                                                    готов поиграть на C++ и C#
                                                                      +1
                                                                      Есть!
                                                                        0
                                                                        Я бы на C# или JS сыграл.
                                                                          0
                                                                          Поучаствовал бы на шарпе.
                                                                            0
                                                                            Я бы поучаствовал
                                                                            upd: в ветку с C#
                                                                              0
                                                                              и мне шарп!
                                                                              frodonmu@gmail.com
                                                                              0
                                                                              Я тоже за «шарп».
                                                                              0
                                                                              Yep. Если что, мыло: nsinreal at gmail.com
                                                                                0
                                                                                новичкам C# можно?
                                                                                  0
                                                                                  Тоже готов поучаствовать.
                                                                                    0
                                                                                    Я тоже готов на C#
                                                                                    mug0ft10 gmail.com
                                                                                      0
                                                                                      и мне пожалуйста.
                                                                                        0
                                                                                        неистово плюсую, на досуге поиграл бы на шарпе
                                                                                          0
                                                                                          Count me in.
                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                            0
                                                                                            готов к участию на любом языке busyrev gmail.com
                                                                                              +6
                                                                                              Главное чтобы начальник не увидел чем вы занимаетесь, а то еще подкинет действительно «веселый» рефакторинг.
                                                                                                0
                                                                                                Я эти занимаюсь исключительно в нерабочее время.
                                                                                                  +2
                                                                                                  Так может это и есть «хитрый план» начальника, придумавшего способ сэкономить на рефакторинге?
                                                                                                  0
                                                                                                  готов. координаты в личке
                                                                                                    +2
                                                                                                    Есть кусок качественного говнокода на JS. Кому? Налетай!
                                                                                                      +5
                                                                                                      Было бы на C++ поигрался бы.
                                                                                                        +8
                                                                                                        C, C++ или Питон — поиграл бы с удовольствием!
                                                                                                          +1
                                                                                                          Да, я тоже именно за эту тройку.
                                                                                                          +4
                                                                                                          C++, тоже готов поиграть
                                                                                                            +1
                                                                                                            Полагаю, что первая итерация внесет существенный вклад, а последующие — малозначительный.
                                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                              0
                                                                                                              по-участвую, раз уж java, запрос отправил :)
                                                                                                                –3
                                                                                                                ребят, я только на PHP умею
                                                                                                                  +1
                                                                                                                  Ветку на PHP? О_о xD xD
                                                                                                                    –2
                                                                                                                    И «Первой итерацией» будет: Написать Хэлло Ворлд на %фашЛюбимыйПХПфреймворк%. Всё. Победа. :)
                                                                                                                    Но, если что — я в деле.
                                                                                                                      –2
                                                                                                                      Нее в том то и дело что никаких Hello World. Это же рефракторинг)))
                                                                                                                        +1
                                                                                                                        Ну… если тебе придет спагетти-пхп… то создать пустой проект на текущих фреймворках — дело пары минут. Потом копипаста.
                                                                                                                          +1
                                                                                                                          А если условие only etc?
                                                                                                                      0
                                                                                                                      Ну, собственно, поддерживаю.
                                                                                                                        0
                                                                                                                        Можно взять какой нибудь относительно сложный парсер. Этакую махину в одном PHP файле спагетти вида. И Разобрать его нормально привести к корректному виду. Разделить на классы. И оптимизировать. Есть у кого в закромах такое «добро»?
                                                                                                                        0
                                                                                                                        На пхп было бы хорошо. Осталось отыскать вменяемый код для него.
                                                                                                                          0
                                                                                                                          поддерживаю. запишите меня, если игра начнется. shmaltorhbooks@gmail.com
                                                                                                                          0
                                                                                                                          участвую :)
                                                                                                                            0
                                                                                                                            участвую :)
                                                                                                                              +8
                                                                                                                              Рефакторинг ради рефакторинга это плохо. Ведь если участнику прийдет код, который в рефакторинге не нуждается, он все равно будет его рефакторить (не зря же он соглашался на участие), чего в реальной ситуации он бы не сделал. Поэтому анализ будет не объективным
                                                                                                                                +2
                                                                                                                                Полагаю он может сказать, что его все устраивает и оставить как есть
                                                                                                                                  +7
                                                                                                                                  Ну конечно же. Хотя я не встречал программистов, которым не хотелось бы изменить чужой код.
                                                                                                                                    +3
                                                                                                                                    Думаю, в этом и есть основной поучительный момент игры.
                                                                                                                                    После публикации результатов всем будет очевидно, что в какой-то момент этот код нужно было оставить в покое. Но нет же!
                                                                                                                                0
                                                                                                                                И мне кусочек!
                                                                                                                                  0
                                                                                                                                  Учавствую. Уже выслал контакты. Будет интересно посмотреть потом итоги и итерации рефакторинга.
                                                                                                                                    +1
                                                                                                                                    Два дня, отпущенные участнику «на все про все» — это слишком мало, чтобы что-то серьезное сделать в сложном коде.
                                                                                                                                    А в простом типа «ХеллоВорлд» даже непонятно что делать — скобочки и табы расставлять и доксижен-каменты вписывать?
                                                                                                                                    И еще надо учитывать, что у участника как правило нет возможности начать сразу по получении задания и закончить жестко за двое суток- семья, работа, сон…
                                                                                                                                    Вот мне лично было бы интересно поучаствовать… Но…
                                                                                                                                    Не менее интересно будет потом почитать чужие результаты, запасясь поп-корном.
                                                                                                                                      0
                                                                                                                                      Ну два дня — это срок пропадания. Если вы за это время откликнитесь и скажете, что вам не хватает ещё столько-то времени, то я вас конечно же подожду
                                                                                                                                      +12
                                                                                                                                      Имхо, было бы лучше всем участникам выслать одновременно оригинальный вариант, собрать их результаты и разослать всем все решения, кроме их собственных.
                                                                                                                                      Тогда не будет такого, что первые 1-3 человека сделают основной объем + все будут видеть все подходы других участников.
                                                                                                                                        +1
                                                                                                                                        Тут есть одни хитрость, ещё увидите
                                                                                                                                        0
                                                                                                                                        Участвую!
                                                                                                                                          0
                                                                                                                                          участвую :)
                                                                                                                                            0
                                                                                                                                            Участвую! :)
                                                                                                                                              –2
                                                                                                                                              Предлагаю еще одно правило: каждый участник может изменить не более 25% строк кода (величина с потолка, можно другую).
                                                                                                                                                +1
                                                                                                                                                Ну, бывает такой код, что при рефакторинге приходится менять 100% строк ) И не потому, что код написан не так, как мне нравится, а потому, что там код реально ужасен.
                                                                                                                                                +3
                                                                                                                                                Только чур придерживаться какой то единой code conventions! А то сейчас начнутся разные скобочки, переносы и именование переменных. Коль пишем на Java то предлагаю Oracle'скую.
                                                                                                                                                  +2
                                                                                                                                                  нууууу, так не интересно…
                                                                                                                                                    0
                                                                                                                                                    Ну тогда каждый перед рефакторингом будет делать что-то типа: Ctrl+Shift+F. И отследить собственно что поменял товарищь по diff'чику будет совсем сложно :) Никогда никто у вас не пушил класс на 6к+ строк применив свое форматирование кода? Ух и матерились же мы :)
                                                                                                                                                      0
                                                                                                                                                      При сравнении в diff пробелы и прочее форматирование можно не учитывать. Есть специальная настройка.
                                                                                                                                                    0
                                                                                                                                                    Просто отформатируйте код под свои соглашения перед началом работы. Делов-то.
                                                                                                                                                      0
                                                                                                                                                      Ну вот тогда будет проблема, описанная комментарием выше
                                                                                                                                                        0
                                                                                                                                                        У SVN, например, в настройках просмотрщика изменений есть опции игнорировать форматирование. Если всё включить, на разницу в пробелах, tab-ах и перехода строк он внимания не обращает.
                                                                                                                                                      0
                                                                                                                                                      … которая, что самое смешное, ни разу не отвечает даже на извечный вопрос «табы vs пробелы».
                                                                                                                                                        0
                                                                                                                                                        Ну, эта эпохальная битва мнений. Тут филосовский вопрос «как удобнее и как лучше?» сколько разработчиков, столько и мнений :) В этом и была идея привести к единому стандарту. А какому не суть важно :)
                                                                                                                                                      0
                                                                                                                                                      И я хочу код порефакторить
                                                                                                                                                        –1
                                                                                                                                                        И я, и я!

                                                                                                                                                        icqkill at gmail

                                                                                                                                                        Предпочел бы C++, но на худой конец и джавка сойдёт.
                                                                                                                                                          0
                                                                                                                                                          200 строк кода это… как-то сферично и вакуумно. Такой код можно рефакторить бесконечно, так как задание, как правило, слишком расплывчато, и каждый будет делать свои собственные допущения.
                                                                                                                                                          Главное, чтобы не получилось как в этом гк: govnokod.ru/12678
                                                                                                                                                            0
                                                                                                                                                            200 строк, имхо, оптимальный размер… такие объемы рекомендуются и для группового код-ревью и т.п.
                                                                                                                                                              0
                                                                                                                                                              В групповом ревью понятен контекст, там как эти 200 строк являются честью целого. А рефакторить независимых 200 строк кода — не практике бессмысленно. Либо этот код и так понятен, тогда, возможно, и трогать его не стоит, либо проще написать заново, возможно с копипастом алгоритмов, если там была какая-то алгоритмическая задача.
                                                                                                                                                            +9
                                                                                                                                                            В топике идет перепись людей, которых нельзя брать на работу, если речь идет о сопровождении крупного старого проекта.
                                                                                                                                                            Если у вас есть какой-то неизвестный код, то в первую очередь надо узнать, что он делает. Например пользователей спросить, или сейлзов, или админов. А ломать — уже совсем потом, когда все станет ясно и очевидно
                                                                                                                                                              0
                                                                                                                                                              не согласен. можно начать с чисто механических действий, не требующих глубокого понимания назначения кода. например, просто убрать дублирование -> улучшится структура кода -> улучшится понимание, необходимое для более углубленного рефакторинга.
                                                                                                                                                                0
                                                                                                                                                                которых нельзя брать на работу, если речь идет о сопровождении крупного старого проекта.
                                                                                                                                                                если речь идет о сопровождении крупного старого проекта, то на такую работу лучше не устраиваться
                                                                                                                                                                0
                                                                                                                                                                jezinka@zoho.com — бросайте, поучаствуем. Skype: krugliak.im
                                                                                                                                                                  0
                                                                                                                                                                  Заявка: nsinreal@gmail.com.
                                                                                                                                                                  Практики вообще не имею, просто прямо-таки интересно поучаствовать.
                                                                                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                                      0
                                                                                                                                                                      namc@tut.by

                                                                                                                                                                        +9
                                                                                                                                                                        Не хватает тега «Том Сойер».
                                                                                                                                                                          +2
                                                                                                                                                                          Мы на работы проводили рефакторинг документооборота. После этого программа в 3.5 млн строк кода уменьшилась на 850 тыс. строк. Справедливости ради отмечу, что скорость загрузки документов заметно увеличилась.
                                                                                                                                                                            +1
                                                                                                                                                                            Как насчет Brainfuck ???
                                                                                                                                                                            +1
                                                                                                                                                                            Тебе хочется кричать, хочется бежать из этого проклятого места, но трудовой договор сковывает тебя по рукам и ногам

                                                                                                                                                                            Насколько я помню, на испытательном сроке можно уволиться за три дня.
                                                                                                                                                                              0
                                                                                                                                                                              Зависит от договора.
                                                                                                                                                                                0
                                                                                                                                                                                Зависит от ТК.
                                                                                                                                                                              0
                                                                                                                                                                              dair.targ@gmail.com
                                                                                                                                                                                0
                                                                                                                                                                                3 месяца назад оказался в такой же ситуации, код запутан, тестов нет, именование объектов непривычное(по-моему так пишут стандартно на С#, когда объект — oObject, строка sString). Первое что сделал — написал тесты, после чего стал понимать предыдущего разработчика, переделал именование объектов под привычную мне верблюжью нотацию и понял что вообще-то все не так плохо, да есть ошибки, непонятки и недоделки, но в целом стала ясна основная идея.
                                                                                                                                                                                Мне просто почему-то кажется, что любой программист относится к чужому коду(предшественника или кого-то другого) с недоверием, вроде не я писал, и непонятно как оно там внутри работает. После того как разгадал, планы и идеи другого программиста, все становится гораздо проще. Не знаю как у других — у меня так.
                                                                                                                                                                                  0
                                                                                                                                                                                  Может быть автор и хочет показать, что надо сначала разобраться в коде и понять его суть, а не придираться к красивости решения? Ведь по сути, каждый к кому будет приходить код из 200 строк, будет считать, что он «обязан» его отрефакторить и будет это делать.
                                                                                                                                                                                  +1
                                                                                                                                                                                  Идея интересная, я бы хотел поиграть на C++, если кто-то организует. А еще неплохо бы сделать сайт, на котором можно такие мероприятия устраивать автоматически.
                                                                                                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                                                      0
                                                                                                                                                                                      Ну насчет предприятий не знаю, но могу сказать, что на своих проектах, которые для души пишутся, я пишу юнит-тесты.
                                                                                                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                                                          0
                                                                                                                                                                                          Ну в документации я смысла не вижу, потому как в совем коде почти всегда могу разобраться. Просто я адепт подхода «Test First» и для меня проще сначала написать тест, а потом класс.
                                                                                                                                                                                      0
                                                                                                                                                                                      >хочется бежать из этого проклятого места, но трудовой договор сковывает тебя по рукам и ногам.
                                                                                                                                                                                      Не совсем понял. Если не нравится работа-пишеш заявление и через две недели уходишь. Если у тебя испытательный срок-так это три дня
                                                                                                                                                                                        +1
                                                                                                                                                                                        А прогон через тесты после каждой итерации будет? =)
                                                                                                                                                                                          0
                                                                                                                                                                                          Если заявку на почту написал — подтверждения ждать нужно?
                                                                                                                                                                                            0
                                                                                                                                                                                            Не согласен с основным тезисом статьи, когда смотришь в некоторые опенсорсные библиотеки, то слеза наворачивается от того, что ты не работаешь вместе с этим человеком! Имена, структура, все прекрасно! Тут все зависит от упоротости.
                                                                                                                                                                                              0
                                                                                                                                                                                              На рубях либо на java с удовольствием поучаствую! tuykin@gmail.com
                                                                                                                                                                                                0
                                                                                                                                                                                                Хитрый хантинг :)
                                                                                                                                                                                                  0
                                                                                                                                                                                                  Я тут еще подумал на досуге (есть у меня, знаете ли такая привычка)
                                                                                                                                                                                                  И вот что хотел бы тезисно сказать:

                                                                                                                                                                                                  Не бывает «рефакторинга в вакууме»
                                                                                                                                                                                                  Рефакторинг всегда делается для достижения определенной цели.
                                                                                                                                                                                                  Целью может быть
                                                                                                                                                                                                  — устранение багов (реальных и теоретически возможных),
                                                                                                                                                                                                  — оптимизация по скорости, памяти и другим ресурсам
                                                                                                                                                                                                  — подготовка кода к расширению функциональности
                                                                                                                                                                                                  — выкидывание части функциональности, которая оказалась дублирующейся/ненужной
                                                                                                                                                                                                  и так далее — могут быть *разные* цели для рефакторинга.

                                                                                                                                                                                                  Без знания цели «сосисочный рефакторинг» не сойдется. (По-моему, это предположение хочет на практике подтвердить топикстартер)

                                                                                                                                                                                                  Одни программисты будут запиливать в код расширение функциональности (пример: чтоб программа считала бы не только синус и косинус, но и могла быть доточена до расчета тангенса с котангенсом), другие будут старательно выпиливать ненужные на их взгляд методы, которые «только занимают память и тормозят выполнение, а по ТЗ не нужны»

                                                                                                                                                                                                  Пример из жизни — заходит сосед по даче ко мне, просит топор. Я ему даю топор, он внимательно смотрит и говорит: «ну как этим можно пользоваться? его нужно отрефакторить, тьфу! заточить! я не смогу рубить им дрова!»
                                                                                                                                                                                                  А мне не нужен острый топор — я его использую для своих нужд — колю им кокосовые орехи или подкладываю под ножку качающегося стола, так как дровяной печки у меня нет. И острый топор мне наоборот не нужен — мало ли что? Так что попеременное пользование одним топором без четкой цели будет попеременное затачивание и затупление топора.
                                                                                                                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                                                                      0
                                                                                                                                                                                                      Я поначалу хотел ревьюить каждое изменение, но внезапно участников так много, что индивидуально к каждому подойти не получится — физически столько времени нет. Автоматизации никакой у меня пока нет. Я только пробегаюсь глазами по коду, чтобы откровенную лажу исключить, но такого пока не было. Перед составлением отчёта я сделаю автоматизированное тестирование, благо выходные данные строго детерминированы входными.
                                                                                                                                                                                                        0
                                                                                                                                                                                                        А может, нужно было в несколько параллельных потоков рефакторинг запустить, раз участников так много?
                                                                                                                                                                                                          +1
                                                                                                                                                                                                          Так и сделал, 20 потоков сейчас
                                                                                                                                                                                                      0
                                                                                                                                                                                                      Ну что, пора тем, кому уже удалось поучаствовать, обмениваться впечатлениями :)

                                                                                                                                                                                                      Мне письмо пришло вчера вечером, сегодня днем отправил назад. Кстати! Письмо имеет очень не дружественный человеку вид (тема вида [X-CY] и аттачмент). Так что будьте внимательны и проверяйте спам.

                                                                                                                                                                                                      По поводу задачи. Во-первых, задача очень простая, нетривиальной логики нет. В той ветки, что досталась мне, была работа с файлами, пропертями, internationalization, logging и немного работы с коллекциями.

                                                                                                                                                                                                      Единственный вопрос, который висел в воздухе все время — в какую сторону двигаться. Смотря на каждый кусок кода, думаешь «является ли это частью исходной задачи или инициатива кого-то, кто рефакторил до меня?». Поскольку правилами этого не описано, думаю, каждому вначале придется выбрать, упрощать программу выкидывая что-то «лишнее», или, наоборот, довешивать еще больше enterprise подходов и технологий. Будет очень смешно, если программа из 20 строчной (без мусора) превратится в монстра со спрингом, мавеном, хибернейтом и 20+ классами.

                                                                                                                                                                                                      В общем, спасибо большое автору, мне понравилось, очень жду результатов и статистики. Очень хочется посмотреть, что было до меня и что будет после меня =)
                                                                                                                                                                                                        0
                                                                                                                                                                                                        Спасибо за отзыв. Ждать ещё прилично, даже треть участников не прошла ещё.
                                                                                                                                                                                                          0
                                                                                                                                                                                                          Кстати да, письмо, содержащее единственный файл с именем [X-CY] и без каких-либо комментариев — верный кандидат на отправку в спам. Я вообще не сразу понял, что это и откуда.
                                                                                                                                                                                                            0
                                                                                                                                                                                                            Ок, учту. Я думал, имени отправителя достаточно
                                                                                                                                                                                                          0
                                                                                                                                                                                                          Эх! Пропустил такую веселуху.
                                                                                                                                                                                                          Кстати, если бы код был на JS, было бы куда веселее.
                                                                                                                                                                                                            +3
                                                                                                                                                                                                            Автор, напишите, пожалуйста, текущий статус. Интересно же.
                                                                                                                                                                                                              +1
                                                                                                                                                                                                              А когда ориентировочно будут результаты?
                                                                                                                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                                                                                  0
                                                                                                                                                                                                                  Я, судя по всему, был одним из первых. Отправил письмо 17.03.2013.
                                                                                                                                                                                                                    0
                                                                                                                                                                                                                    Мимо меня проплывало 3 апреля. Причем показалось, что до меня это никто не трогал и код портили намеренно.
                                                                                                                                                                                                                    Подозреваю подвох из разряда «как сделать так, чтобы человек выполнил тестовое, да еще и сам этого захотел».
                                                                                                                                                                                                                  +2
                                                                                                                                                                                                                  Автор, отпишитесь, пожалуйста, о статусе тут или сделайте где-нибудь и регулярно обновляйте страничку. То, что вас уже месяц не слышно, выглядит некрасиво.
                                                                                                                                                                                                                    +2
                                                                                                                                                                                                                    Каррент статус: мне внезапно пришло письмо счастья. Регистрировался я 15 Mar 2013 13:09:57
                                                                                                                                                                                                                      +1
                                                                                                                                                                                                                      Каков статус проекта?
                                                                                                                                                                                                                        +1
                                                                                                                                                                                                                        Очевидно, проект умер.

                                                                                                                                                                                                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                                                                                                                                                        Самое читаемое