Comments 174
Самое главное чтобы по итогам этого «рефакторинга» изначальная «Hello World» программа не превратилась в симулятор большого адронного коллайдера.
+36
Я думаю, что «Весёлый багфиксинг» было бы поярче
+4
Я участвую. Только чур — чтобы код был умеренного размера.
+1
Не ведитесь. «Ведущий» устроился на новую работу и скинет вам код который «осталось от предыдущего разработчика»
+188
И после игры его тихо «уйдут» за слив кода. Начальство тоже хабр читает иногда :)
+2
думаю, что умное начальство понимает, что ничего страшного не произойдет даже если 30-50 процентов кода компании сольётся вовне
-1
Почему? Объясните?
И как же договор о неразглашении? Любое умное начальство заставляет его подписывать.
И как же договор о неразглашении? Любое умное начальство заставляет его подписывать.
+1
Да успокойтесь вы, этот код не имеет никакого отношения к моей работе.
+4
я говорил с изрядной долей иронии, но я действительно так думаю. Попробую обосновать.
1) Согласитесь, что полезный и работающий код сам по себе — вещь ненамного более понятная, чем его скомпилированная версия. Обучение нового сотрудника архитектуре проекта и костылям, оную поддерживающим, занимает около месяца — это если решения были как-то документированы, а все сотрудники, их реализовавшие, все еще работают в компании.
2) в большинстве программных продуктов лишь пара процентов кода делает что-либо шибко умное, например реализует какой-нибудь сложный и хитрый алгоритм. Сам по себе этот алгоритм — это, как выразился Хоар, «маленькая программа, старающаяся пробиться наружу большой» и вы многое бы отдали не за быстрый работающий костыльный код, а за медленный и ясный псевдокод и блок-схему на бумажке, плюс объяснения дяди, который это придумал.
3) я просто пытаюсь придумать, что великое я или моя компания могла бы сделать, если бы нам был доступен некоторый чужой замечательный код. Код исходников гуглопоисковика (без статистики поисковых запросов), код EMC'шного Clarion'а, код IBM Watson, код Siri, код Windows, World of Warcraft. И не вижу способов не только причинения вреда гигантам-владельцам кода, но и даже принесения себе пользы. Разве что для code-review семинаров использовать и опыт получать.
1) Согласитесь, что полезный и работающий код сам по себе — вещь ненамного более понятная, чем его скомпилированная версия. Обучение нового сотрудника архитектуре проекта и костылям, оную поддерживающим, занимает около месяца — это если решения были как-то документированы, а все сотрудники, их реализовавшие, все еще работают в компании.
2) в большинстве программных продуктов лишь пара процентов кода делает что-либо шибко умное, например реализует какой-нибудь сложный и хитрый алгоритм. Сам по себе этот алгоритм — это, как выразился Хоар, «маленькая программа, старающаяся пробиться наружу большой» и вы многое бы отдали не за быстрый работающий костыльный код, а за медленный и ясный псевдокод и блок-схему на бумажке, плюс объяснения дяди, который это придумал.
3) я просто пытаюсь придумать, что великое я или моя компания могла бы сделать, если бы нам был доступен некоторый чужой замечательный код. Код исходников гуглопоисковика (без статистики поисковых запросов), код EMC'шного Clarion'а, код IBM Watson, код Siri, код Windows, World of Warcraft. И не вижу способов не только причинения вреда гигантам-владельцам кода, но и даже принесения себе пользы. Разве что для code-review семинаров использовать и опыт получать.
+1
Я не согласен с этим комментарием дважды. Во первых не понимает. Во вторых — вплоть до 99%.
+2
Шикарная идея. Пару месяцев назад на работе планировали создать «брусок», который соискатели должны были рефакторить в качестве тестового задания.
+3
… тебе показывают то, что осталось от предыдущего разработчика.
Я один представил себе кучку пепла, или изнеможённое трясущееся бледное тело предыдущего разработчика в лохмотьях, который уже даже стакан воды поднять не может?
+29
Я представил себе почти чистый С-код в Qt C++ проекте, а потом что-то внутри одумалось, сказало: «БРРР! Не может этого быть! Программеры же хорошие!!!» и перед глазами всплыл образ вмеру понятного, почти не откомментированного кода без документации, методы и классы которого на 70% соответствуют своим именам. Пара торчащих с боля брани костылей, флагов и трэша.
Может, это я так свой код представляю? :)
Неее… программеры же хорошие :)
Да и на чистом C я не пишу )
Может, это я так свой код представляю? :)
Неее… программеры же хорошие :)
Да и на чистом C я не пишу )
-2
Ой, а можно я тоже подкину немного кода? Я вот недавно устроился в новое место, и тут работы по рефакторингу по горло, не справляюсь) можете порефакторить и мне вернуть.
+7
«Привет, %habrausername%. Я хочу сыграть с тобой в игру.» — кто то насмотрелся фильма «Пила»?)))
+20
Помню, на форумах по игре Цивилизация была такая фишка, что одну игру играли по очереди по одному ходу, сосиски это называлось, вроде как, или сосисочные игры :-)
+3
Вероятно это преобразованное название от Succession Games =))
В Dwarf Fortress тоже есть подобные игры, с веселыми описаниями событий, и руганью в адрес предыдущего правителя.
В Dwarf Fortress тоже есть подобные игры, с веселыми описаниями событий, и руганью в адрес предыдущего правителя.
+2
Что-то мне подсказывает что термин «сосисочный» уходит корнями горадо дальше, чем вам кажется. В до-компьютерную эпоху. Многие знакомые лет так 50и рассказывали что еще в их время была версия пинг-понга для большой компании. И называлось это Колбаса, или Сосиска (где как). Игра проста: все встают вокруг тенисного стола, один игрок подает, тот кто напротив — отбивает, потом вся «колбаса» из любей смещается по часовой стрелке, так что мяч принимает не тот кто подавал, а человек по правую руку от него. Кто пропустил мяч — выбывает, кто остался последним — выигрывает.
+1
Сосисочный рефакторинг. Это же великолепно!
+4
Java знаю плохо. Использовал мало. Зато программирую больше 15 лет и знаю кучу языков. Хочу играть O_O.
+7
А почему бы не взять несколько языков? Так сказать, вести параллельно несколько игр. Java, C++, Objective-C, Ruby, JS, Go…
Мне кажется, желающих поучаствовать было бы больше.
Мне кажется, желающих поучаствовать было бы больше.
+9
Классная идея! Нет желающих поиграть на js?
+8
Есть.
+3
да
+3
Да. Плюс появилась мысль,
1) а не сделать ли трекинг хода рефакторинга с общей инфо: «изменено XX байт, всего YYY байт».
2) И сам код должен тестироваться на исправность
3) и, желательно, иметь смысл. Какой-нибудь плагин к jQuery и несколько демо-тестов к нему.
4) и лучше, чтобы проверялся jslint-ом, иначе превратится в переливание из одного стиля в другой.
5) размером строчек на 150. Меньше — делать будет нечего.
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
Трекинг сделаем на Гитхабе, чтобы в readme.md был виден прогресс каждого шага. Только если режим работы закрытый с 1 ведущим, то сам код не выкладывается, а ведущий только отчёты пишет на 2-3 сроки по каждому шагу в 1-2 дня.
Итак,
kabzon
medved13
termi
spmbt
ariser
ahmpro
0
можно к вам?
0
Записал всех сюда, в ветку обсуждения, чтобы не заниматься рассылкой ЛС и решить вопросы по выбору материала и правил.
0
Тоже впишусь.
0
айда
0
На js было бы отлично.
+2
если код не очень большой, то запишите меня тоже
0
Имеется игра на JS + HTML5 + Box2d. 483 строки на JS (исключая библиотеки). Говнокод 100%. Кроме рефакторинга, можно поправить производительность.
0
Если будет на js — я бы поиграл :)
0
Присуммируйте единицу.
0
Пожалуй, тоже запишусь к вам…
0
«Сделай западло следующему участнику — напиши код в стиле JAPH!»
+5
сыграл бы на Java
+2
Есть желающие на C#?
Автору спасибо, идея очень хорошая!
Автору спасибо, идея очень хорошая!
+10
готов поиграть на C++ и C#
+2
Есть!
+1
Я бы на C# или JS сыграл.
0
Поучаствовал бы на шарпе.
0
Я тоже за «шарп».
0
Yep. Если что, мыло: nsinreal at gmail.com
0
новичкам C# можно?
0
Тоже готов поучаствовать.
0
Я тоже готов на C#
mug0ft10 gmail.com
mug0ft10 gmail.com
0
и мне пожалуйста.
0
неистово плюсую, на досуге поиграл бы на шарпе
0
Count me in.
0
UFO just landed and posted this here
готов к участию на любом языке busyrev gmail.com
0
Главное чтобы начальник не увидел чем вы занимаетесь, а то еще подкинет действительно «веселый» рефакторинг.
+6
готов. координаты в личке
0
Есть кусок качественного говнокода на JS. Кому? Налетай!
+2
Было бы на C++ поигрался бы.
+5
C, C++ или Питон — поиграл бы с удовольствием!
+8
C++, тоже готов поиграть
+4
Полагаю, что первая итерация внесет существенный вклад, а последующие — малозначительный.
+1
по-участвую, раз уж java, запрос отправил :)
0
ребят, я только на PHP умею
-3
Ветку на PHP? О_о xD xD
+1
И «Первой итерацией» будет: Написать Хэлло Ворлд на %фашЛюбимыйПХПфреймворк%. Всё. Победа. :)
Но, если что — я в деле.
Но, если что — я в деле.
-2
Ну, собственно, поддерживаю.
0
На пхп было бы хорошо. Осталось отыскать вменяемый код для него.
0
поддерживаю. запишите меня, если игра начнется. shmaltorhbooks@gmail.com
0
участвую :)
0
участвую :)
0
Рефакторинг ради рефакторинга это плохо. Ведь если участнику прийдет код, который в рефакторинге не нуждается, он все равно будет его рефакторить (не зря же он соглашался на участие), чего в реальной ситуации он бы не сделал. Поэтому анализ будет не объективным
+8
Полагаю он может сказать, что его все устраивает и оставить как есть
+2
И мне кусочек!
0
Учавствую. Уже выслал контакты. Будет интересно посмотреть потом итоги и итерации рефакторинга.
0
Два дня, отпущенные участнику «на все про все» — это слишком мало, чтобы что-то серьезное сделать в сложном коде.
А в простом типа «ХеллоВорлд» даже непонятно что делать — скобочки и табы расставлять и доксижен-каменты вписывать?
И еще надо учитывать, что у участника как правило нет возможности начать сразу по получении задания и закончить жестко за двое суток- семья, работа, сон…
Вот мне лично было бы интересно поучаствовать… Но…
Не менее интересно будет потом почитать чужие результаты, запасясь поп-корном.
А в простом типа «ХеллоВорлд» даже непонятно что делать — скобочки и табы расставлять и доксижен-каменты вписывать?
И еще надо учитывать, что у участника как правило нет возможности начать сразу по получении задания и закончить жестко за двое суток- семья, работа, сон…
Вот мне лично было бы интересно поучаствовать… Но…
Не менее интересно будет потом почитать чужие результаты, запасясь поп-корном.
+1
Имхо, было бы лучше всем участникам выслать одновременно оригинальный вариант, собрать их результаты и разослать всем все решения, кроме их собственных.
Тогда не будет такого, что первые 1-3 человека сделают основной объем + все будут видеть все подходы других участников.
Тогда не будет такого, что первые 1-3 человека сделают основной объем + все будут видеть все подходы других участников.
+12
Участвую!
0
участвую :)
0
Участвую! :)
0
Предлагаю еще одно правило: каждый участник может изменить не более 25% строк кода (величина с потолка, можно другую).
-2
Только чур придерживаться какой то единой code conventions! А то сейчас начнутся разные скобочки, переносы и именование переменных. Коль пишем на Java то предлагаю Oracle'скую.
+3
нууууу, так не интересно…
+2
Ну тогда каждый перед рефакторингом будет делать что-то типа: Ctrl+Shift+F. И отследить собственно что поменял товарищь по diff'чику будет совсем сложно :) Никогда никто у вас не пушил класс на 6к+ строк применив свое форматирование кода? Ух и матерились же мы :)
0
Просто отформатируйте код под свои соглашения перед началом работы. Делов-то.
0
Ну вот тогда будет проблема, описанная комментарием выше
0
… которая, что самое смешное, ни разу не отвечает даже на извечный вопрос «табы vs пробелы».
0
И я хочу код порефакторить
0
И я, и я!
icqkill at gmail
Предпочел бы C++, но на худой конец и джавка сойдёт.
icqkill at gmail
Предпочел бы C++, но на худой конец и джавка сойдёт.
-1
200 строк кода это… как-то сферично и вакуумно. Такой код можно рефакторить бесконечно, так как задание, как правило, слишком расплывчато, и каждый будет делать свои собственные допущения.
Главное, чтобы не получилось как в этом гк: govnokod.ru/12678
Главное, чтобы не получилось как в этом гк: govnokod.ru/12678
0
200 строк, имхо, оптимальный размер… такие объемы рекомендуются и для группового код-ревью и т.п.
0
В групповом ревью понятен контекст, там как эти 200 строк являются честью целого. А рефакторить независимых 200 строк кода — не практике бессмысленно. Либо этот код и так понятен, тогда, возможно, и трогать его не стоит, либо проще написать заново, возможно с копипастом алгоритмов, если там была какая-то алгоритмическая задача.
0
В топике идет перепись людей, которых нельзя брать на работу, если речь идет о сопровождении крупного старого проекта.
Если у вас есть какой-то неизвестный код, то в первую очередь надо узнать, что он делает. Например пользователей спросить, или сейлзов, или админов. А ломать — уже совсем потом, когда все станет ясно и очевидно
Если у вас есть какой-то неизвестный код, то в первую очередь надо узнать, что он делает. Например пользователей спросить, или сейлзов, или админов. А ломать — уже совсем потом, когда все станет ясно и очевидно
+9
не согласен. можно начать с чисто механических действий, не требующих глубокого понимания назначения кода. например, просто убрать дублирование -> улучшится структура кода -> улучшится понимание, необходимое для более углубленного рефакторинга.
0
которых нельзя брать на работу, если речь идет о сопровождении крупного старого проекта.
если речь идет о сопровождении крупного старого проекта, то на такую работу лучше не устраиваться
если речь идет о сопровождении крупного старого проекта, то на такую работу лучше не устраиваться
0
jezinka@zoho.com — бросайте, поучаствуем. Skype: krugliak.im
0
Заявка: nsinreal@gmail.com.
Практики вообще не имею, просто прямо-таки интересно поучаствовать.
Практики вообще не имею, просто прямо-таки интересно поучаствовать.
0
UFO just landed and posted this here
namc@tut.by
0
Не хватает тега «Том Сойер».
+9
Мы на работы проводили рефакторинг документооборота. После этого программа в 3.5 млн строк кода уменьшилась на 850 тыс. строк. Справедливости ради отмечу, что скорость загрузки документов заметно увеличилась.
+2
Как насчет Brainfuck ???
+1
Тебе хочется кричать, хочется бежать из этого проклятого места, но трудовой договор сковывает тебя по рукам и ногам
Насколько я помню, на испытательном сроке можно уволиться за три дня.
+1
dair.targ@gmail.com
0
3 месяца назад оказался в такой же ситуации, код запутан, тестов нет, именование объектов непривычное(по-моему так пишут стандартно на С#, когда объект — oObject, строка sString). Первое что сделал — написал тесты, после чего стал понимать предыдущего разработчика, переделал именование объектов под привычную мне верблюжью нотацию и понял что вообще-то все не так плохо, да есть ошибки, непонятки и недоделки, но в целом стала ясна основная идея.
Мне просто почему-то кажется, что любой программист относится к чужому коду(предшественника или кого-то другого) с недоверием, вроде не я писал, и непонятно как оно там внутри работает. После того как разгадал, планы и идеи другого программиста, все становится гораздо проще. Не знаю как у других — у меня так.
Мне просто почему-то кажется, что любой программист относится к чужому коду(предшественника или кого-то другого) с недоверием, вроде не я писал, и непонятно как оно там внутри работает. После того как разгадал, планы и идеи другого программиста, все становится гораздо проще. Не знаю как у других — у меня так.
0
Идея интересная, я бы хотел поиграть на C++, если кто-то организует. А еще неплохо бы сделать сайт, на котором можно такие мероприятия устраивать автоматически.
+1
UFO just landed and posted this here
Ну насчет предприятий не знаю, но могу сказать, что на своих проектах, которые для души пишутся, я пишу юнит-тесты.
0
>хочется бежать из этого проклятого места, но трудовой договор сковывает тебя по рукам и ногам.
Не совсем понял. Если не нравится работа-пишеш заявление и через две недели уходишь. Если у тебя испытательный срок-так это три дня
Не совсем понял. Если не нравится работа-пишеш заявление и через две недели уходишь. Если у тебя испытательный срок-так это три дня
0
А прогон через тесты после каждой итерации будет? =)
+1
Если заявку на почту написал — подтверждения ждать нужно?
0
Не согласен с основным тезисом статьи, когда смотришь в некоторые опенсорсные библиотеки, то слеза наворачивается от того, что ты не работаешь вместе с этим человеком! Имена, структура, все прекрасно! Тут все зависит от упоротости.
0
На рубях либо на java с удовольствием поучаствую! tuykin@gmail.com
0
Хитрый хантинг :)
0
Я тут еще подумал на досуге (есть у меня, знаете ли такая привычка)
И вот что хотел бы тезисно сказать:
Не бывает «рефакторинга в вакууме»
Рефакторинг всегда делается для достижения определенной цели.
Целью может быть
— устранение багов (реальных и теоретически возможных),
— оптимизация по скорости, памяти и другим ресурсам
— подготовка кода к расширению функциональности
— выкидывание части функциональности, которая оказалась дублирующейся/ненужной
и так далее — могут быть *разные* цели для рефакторинга.
Без знания цели «сосисочный рефакторинг» не сойдется. (По-моему, это предположение хочет на практике подтвердить топикстартер)
Одни программисты будут запиливать в код расширение функциональности (пример: чтоб программа считала бы не только синус и косинус, но и могла быть доточена до расчета тангенса с котангенсом), другие будут старательно выпиливать ненужные на их взгляд методы, которые «только занимают память и тормозят выполнение, а по ТЗ не нужны»
Пример из жизни — заходит сосед по даче ко мне, просит топор. Я ему даю топор, он внимательно смотрит и говорит: «ну как этим можно пользоваться? его нужно отрефакторить, тьфу! заточить! я не смогу рубить им дрова!»
А мне не нужен острый топор — я его использую для своих нужд — колю им кокосовые орехи или подкладываю под ножку качающегося стола, так как дровяной печки у меня нет. И острый топор мне наоборот не нужен — мало ли что? Так что попеременное пользование одним топором без четкой цели будет попеременное затачивание и затупление топора.
И вот что хотел бы тезисно сказать:
Не бывает «рефакторинга в вакууме»
Рефакторинг всегда делается для достижения определенной цели.
Целью может быть
— устранение багов (реальных и теоретически возможных),
— оптимизация по скорости, памяти и другим ресурсам
— подготовка кода к расширению функциональности
— выкидывание части функциональности, которая оказалась дублирующейся/ненужной
и так далее — могут быть *разные* цели для рефакторинга.
Без знания цели «сосисочный рефакторинг» не сойдется. (По-моему, это предположение хочет на практике подтвердить топикстартер)
Одни программисты будут запиливать в код расширение функциональности (пример: чтоб программа считала бы не только синус и косинус, но и могла быть доточена до расчета тангенса с котангенсом), другие будут старательно выпиливать ненужные на их взгляд методы, которые «только занимают память и тормозят выполнение, а по ТЗ не нужны»
Пример из жизни — заходит сосед по даче ко мне, просит топор. Я ему даю топор, он внимательно смотрит и говорит: «ну как этим можно пользоваться? его нужно отрефакторить, тьфу! заточить! я не смогу рубить им дрова!»
А мне не нужен острый топор — я его использую для своих нужд — колю им кокосовые орехи или подкладываю под ножку качающегося стола, так как дровяной печки у меня нет. И острый топор мне наоборот не нужен — мало ли что? Так что попеременное пользование одним топором без четкой цели будет попеременное затачивание и затупление топора.
0
UFO just landed and posted this here
Я поначалу хотел ревьюить каждое изменение, но внезапно участников так много, что индивидуально к каждому подойти не получится — физически столько времени нет. Автоматизации никакой у меня пока нет. Я только пробегаюсь глазами по коду, чтобы откровенную лажу исключить, но такого пока не было. Перед составлением отчёта я сделаю автоматизированное тестирование, благо выходные данные строго детерминированы входными.
0
Ну что, пора тем, кому уже удалось поучаствовать, обмениваться впечатлениями :)
Мне письмо пришло вчера вечером, сегодня днем отправил назад. Кстати! Письмо имеет очень не дружественный человеку вид (тема вида [X-CY] и аттачмент). Так что будьте внимательны и проверяйте спам.
По поводу задачи. Во-первых, задача очень простая, нетривиальной логики нет. В той ветки, что досталась мне, была работа с файлами, пропертями, internationalization, logging и немного работы с коллекциями.
Единственный вопрос, который висел в воздухе все время — в какую сторону двигаться. Смотря на каждый кусок кода, думаешь «является ли это частью исходной задачи или инициатива кого-то, кто рефакторил до меня?». Поскольку правилами этого не описано, думаю, каждому вначале придется выбрать, упрощать программу выкидывая что-то «лишнее», или, наоборот, довешивать еще больше enterprise подходов и технологий. Будет очень смешно, если программа из 20 строчной (без мусора) превратится в монстра со спрингом, мавеном, хибернейтом и 20+ классами.
В общем, спасибо большое автору, мне понравилось, очень жду результатов и статистики. Очень хочется посмотреть, что было до меня и что будет после меня =)
Мне письмо пришло вчера вечером, сегодня днем отправил назад. Кстати! Письмо имеет очень не дружественный человеку вид (тема вида [X-CY] и аттачмент). Так что будьте внимательны и проверяйте спам.
По поводу задачи. Во-первых, задача очень простая, нетривиальной логики нет. В той ветки, что досталась мне, была работа с файлами, пропертями, internationalization, logging и немного работы с коллекциями.
Единственный вопрос, который висел в воздухе все время — в какую сторону двигаться. Смотря на каждый кусок кода, думаешь «является ли это частью исходной задачи или инициатива кого-то, кто рефакторил до меня?». Поскольку правилами этого не описано, думаю, каждому вначале придется выбрать, упрощать программу выкидывая что-то «лишнее», или, наоборот, довешивать еще больше enterprise подходов и технологий. Будет очень смешно, если программа из 20 строчной (без мусора) превратится в монстра со спрингом, мавеном, хибернейтом и 20+ классами.
В общем, спасибо большое автору, мне понравилось, очень жду результатов и статистики. Очень хочется посмотреть, что было до меня и что будет после меня =)
0
Эх! Пропустил такую веселуху.
Кстати, если бы код был на JS, было бы куда веселее.
Кстати, если бы код был на JS, было бы куда веселее.
0
Автор, напишите, пожалуйста, текущий статус. Интересно же.
+3
А когда ориентировочно будут результаты?
+1
UFO just landed and posted this here
Автор, отпишитесь, пожалуйста, о статусе тут или сделайте где-нибудь и регулярно обновляйте страничку. То, что вас уже месяц не слышно, выглядит некрасиво.
+2
Каррент статус: мне внезапно пришло письмо счастья. Регистрировался я 15 Mar 2013 13:09:57
+2
Каков статус проекта?
+1
Очевидно, проект умер.
+1
Sign up to leave a comment.
Весёлые (сосисочные) рефакторинги