Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
— Мне пофиг, почему задачи не закрыты?А вот с этого момента — поподробнее: почему классов x, y и z не было в списке задач?
Заглянуть в будущее на столько далеко чтобы прозреть в точности будущую экономию — мне кажется далеко за пределами возможностей не только ПМ-а, но и вообще человека.Надо понимать, что в большинстве случаев эффект от «вспомогательных классов» разработчик будет завышать, а время на их разработку — занижать. И если он даже в таких, «тепличных» условиях не может «заглянуть в будущее» настолько далеко, чтобы показать, что от его действий будет какая-то экономия, то, стало быть, все эти действия точно никакой экономии не несут и, соответственно, бессмысленны. Если хотя бы теоретически что-то такое вырисовывается — тогда можно уже и обсуждать сценарии.
Однако когда дойдёт до дела хрен его знает как повернётся, может они с геймплеем будут активно вяло экспериментировать, а со статистикой и рекламой активно. тогда половина наших наворотов останется не у дел.
Закладываюсь на то что в игре будет резво добавляться правил и геймплея и под это код, котоырй управляет моделью данных более сложен и содержит возможности для быстрого увеличения количества правил и варианта геймплея в разы.Ну вот вы и привели некоторое обоснование. Добавить сюда пару цифр — и можно говорить с PMом.
Сейчас этого не знают ни они, подвязавшиеся ждать когда эта архитектура будет, ни мы, взявшиеся её делать. Но если будут с геймплеем экспериментировать — экономия будет о-го-го.А это уже риски, которые оценивает как раз PM. Если он оценивает вероятность развития событий так, что вариант, для которого вы собираетесь «соломки подстелить» весьма высоковероятен — он вас поддержит, если он решит, что «мы туда ходить не будем» — он вам скажет делать что-то другое.
Прожект менеджер должен знать где требуются архитектурные решения, а где требуются 2 гвоздя с доской.Не совсем так. Его задача скорее помочь разработчикам перевести требования задачи, сформулированные в терминах предметной области на требования к коду и наоборот.
Как вы заглядываете в будущее и показываете полезность метода N, если начальство при любом раскладе смотрит на вас уставшим взглядом и говорит «да ну, когда ещё сортировка нам пригодится»?Ответ на это люди дали сотни лет назад. «То что случилось однажды, больше может никогда не случится, но то что случилось дважды, обязательно произойдёт в третий».
1) на большом проекте люди не в курсе, что эта копипаста и вообще где-то есть ещё, поэтому каждый раз — второй.В этом случае вам уже ничего не поможет. У вас будет либо 150 сортировок пузырьком «по месту», либо 150 (ну хорошо, пусть 100) сортировок, каждая из которых разработана так, как если бы она была «последней и окончательной реализацией сотрировки пузырьком».
2) 2 одинаковых копипасты не бывает. Их нельзя просто взять и обобщить не пойдя, как минимум, по третьему варианту.Вот потому я и предлагаю ваш «универсальный класс» писать после появления третей реализации. А для того, чтобы этот момент заметить при копировании кода из одного места в другое в обоих местах нужно добавить комментарий, объясняющий, где находится второе место. Ну или если случай простой, то вместо копирования можно уже на втором разе выделить общий класс, описать его интерфейс и т.д. и т.п.
Как это получилось — не суть важно (те люди тут уже не работают).В таком случае нужно это обсудить с теми, кто работает и, возможно, даже переписать заново пару компонент.
Нельзя, ПМ рефакторинг не одобрял. Обоснуйте экономию?Да раз плюнуть. По условиям задачи у нас уже есть 150 (да пусть даже 12) мест, где эта самая сортировка пузырьком используется. Берём историю проекта, грубо оцениваем сколько таких мест мы порождаем за год, дальше смотрим сколько времени уйдёт на рефакторинг, сколько мы получим от того, что нужно будет вместо XX строчек кода поставить один вызов функции, получаем экономию. COCOMO вам в помощь.
1) Если игнорировать грустный взгляд ПМ и его слова о YAGNI, то вы обосновали «сделать функцию», но не «рефакторинг старого».Истинная правда — и более глубокая, чем вам кажется. Действительно — решить нужно ли переводить существующий код на новую функцию куда сложнее.
2) Любая новая копипаста не имеет истории и к ней такой подход не применим.Ну это вы уже начинаете рассказывать сказки. Да, отличия бывают, но если бы мир был устроен так, как вы его хотите представить, то никто вообще ничего бы не смог спланировать. В первом приближении любая новая копипаста устроена так же, как и все предыдущие, для грубой оценки большего и не нужно.
3) Я могу сделать достаточно оптимистичные допущения, что бы срослось.Но сможете ли вы убедить в них PM'а? Учтите, что ведь по окончании работ он будет иметь возможность сравнить то, что вы обещали с тем, что реально получилось…
Вместо этого он находит промежуточное звено, ну или выделяет это промежуточное звено из имеющихся у него программистов, и делает из него крайнего за принятие и обоснование таких решений.
Заглянуть в будущее на столько далеко чтобы прозреть в точности будущую экономию
Мой код никого не интересует.
Скорее всего вы говорили не о качестве
Качество совершенно сложное определение…
Да, в ряде случаев маркетинг может продвигать некачественный продукт, как например Internet ExplorerВот только не нужно на Internet Explorer баллоны катить. Там были вбуханы безумные деньги в разработку и в те времена, когда он занимал 90% рынка он был, вполне себе объективно, лучшим браузером. Это потом, когда его развитие было заморожены на годы (до версии 6 каждый год выходило по версии, а версия 7 вышла через 5 лет и была очень-очень слабым изменением по сравнение с MS IE 6) он стал «притчей во языцах».
а версия 7 вышла через 5 лет и была очень-очень слабым изменением по сравнение с MS IE 6
Это что, значит, можно писать отстойный код? Нет, не значит.
Так же как работа столяра не заключается в использовании молотка или пилы — она заключается в производстве чего-либо при помощи этих инструментов.Инструменты: молоток и пила — IDE и компилятор. А качество кода — это качество дерева. Если дерево гнилое, то результат работы столяра сломается при первом же прикосновении.
Если есть выбор из двух и более вариантов — я сначала загляну в код библиотек, а уже только потом попробую те, чей код меня удовлетворил.
По многим признакам видно, что код там куда лучше, чем, скажем, в Android'е.
Я разве говорил, что они не должны соблюдаться или что они крайность?
Программисты по большему счету соревнуются друг с другом в том, как быстро они выполняют задачи, потому как от этого зависит зп, бонусы и т.п.
Поэтому, если ввести метрики, программисты будут работать на метрики.А разве это плохо? Просто метрики должны соответствовать состоянию проекта. Если у нас клиенты жалуются на то, что продукт всё время падает — поощряем тех, кто фиксит баги, если у нас скоро релиз — тех, кто допиливает фичи, если у нас код такой, что его править невозможно — вводим плюшки за покрытие тестами (по согласованию с PM'ом, конечно) и т.д. и т.п.
Бизнесу не нужен код, бизнесу нужен функционал и выбор приоритетов — это задача руководителя, а не разработчика.Именно поэтому бизнес не должен принимать технических решений. В частности о том, делать рефакторинг или нет.
Рефакторинг должен быть постоянным процессом, идущим совместно вместе с любыми задачами.
Именно поэтому бизнес не должен принимать технических решений. В частности о том, делать рефакторинг или нет.
Привыкайте, что рефакторинг бизнесу нужно уметь продавать.Кстати обратной стороной медали будет то, что люди бизнес-стороны начнёт задумываться и о том, что иногда стоит «сделать правильно» с самого начала.
Кстати обратной стороной медали будет то, что люди бизнес-стороны начнёт задумываться и о том, что иногда стоит «сделать правильно» с самого начала.
Ко всему остальному это тоже относится. Прекращайте решать, как нужно думать бизнесу, это подростковый эгоцентризм.Похоже тут опять столкнулись представители разных миров. Если ваш бизнес заключается в разработке софта «под заказ», то да, может быть бизнесу и не стоит об этом задумываться. А вот если речь идёт о «коробочном» ПО, то это чуть ли ни основное о чём в принципе должен думать бизнес. Как уже говорилось выбор может быть совсем не таким, как хочется перфекционистам, но его нужно делать и это именно бизнес-решение.
В результате «самопального» рефакторинга вы скорее всего после очередного просранного срока просто окажетесь на улице.Я не встречал проектов, в которых над уровнем когда следят и при этом хронически фейлящих сроки. Зато встречал проекты, где всё делалось «побыстрее», на технический долг регулярно забивалось и в итоге в один прекрасный момент оказывалось, что для исправления накопившихся проблем проще (и быстрее) всё выкинуть и переписать с нуля. Удивительно, правда?
Да, но ответственность за этот процесс лежит на техническом руководителе / архитекторе и договариваться с PM должен он, а не конечный разработчик.Это дОлжно быть оговорено им (архитектором/техлидом) и всей командой в целом один раз и навсегда, еще на старте проекта. PM-а это касается только косвенно. Поддержка качества кода проекта должна присутствовать в каждой задаче, а не делаться задним числом. Это как сначала писать приложение, а потом добавлять в него «безопасность».
Вариант «знаешь, я тут решил отрефакторить кое что и потратил 3 лишних дня и еще пару дней уйдёт на то, чтобы этот функционал стабилизировать» — хреновый звоночек, хотя бы потому, что разработчик не подумал, сколько времени еще понадобится на то, чтобы это протестировать, исправить мелкие баги и т.д.То, что вы описываете — это не проблема, а следствие проблемы. Если функционал приходится «стабилизировать» — значит он изначально был сделан хреново. Это значит, что либо код не проходил ревью (ССЗБ), либо проходил, но ревьюеры это пропустили (вдвойне ССЗБ).
Любым, кто имеет право делать code review и применять по итогам животворящий паяльник. В некоторых компаниях для этого даже есть специальный человек в QA подразделении.Если ревью занимаются по сути сторонние люди, а не другие члены этой же команды, то вы теряете канал передачи между разработчиками ифнормации о том, что вообще на проекте происходит, как именно что делается, какие были обнаружены ошибки/недочеты/замечания по коду и т.д. Ревью должны делать все. В том числе джуниору весьма полезно ревьювать то, что делает техлид/архитектор ибо это весьма способствует улучшению понимания проекта джуниором.
Нельзя назвать срок «неделя», а делать три, пояснив потом, что вы решили рефакторинг сделать.Соверешенно верно. Называя срок «неделя» вы должны в том числе учитывать, что вы точно будете делать рефакторинг. Потому что вы всегда должны делать рефакторинг. Как часть каждой задачи. Постоянно.
Привыкайте, что рефакторинг бизнесу нужно уметь продавать.Еще раз: бизнесу не нужно и не положено знать про рефакторинг вообще. Оценки времени — да. Риски — да. Как именно оно «внутре» работает и что именно входит в оценку реализации конкретной задачи — нет.
Клиент — не в курсе что там будет. А если думает, что в курсе — то скорее всего ошибается. Разработчик, если он опытный — понимает что будет в этих мутных местах лучше клента, но тоже не владеет всей полнотой информации.Погодите — а что в этой связке делает PM? Вообще-то это как раз его задача поговорив с разработчиков и [потенцильными] клиентами нарисовать некую «картину мира», которую потом разработчики будут воплощать.
Ну и я говорю о мире номер один. Который ширпотреб в русском варианте и Shrinkwrap в английском.Тогда совершенно неясно откуда взялся «клиент» и ещё более неясно почему нельзя понять чего вы хотите сделать в версии продукта номер N без ежедневных «вихляний задом».
А если это не так, то слишком подробную картину мира лучше не рисовать — это незибежно влечёт за собой горы работы впустую.Картина мира (настолько подробная, насколько получится) рисуется на один релиз. Потом собираются отзывы, проводятся исследования и выпускается следующий релиз. Так как сбор достаточного количества отзывов занимает несколько месяцев (а то и год), то всякий аджайл отпадает, уж извините. Некому там высказывать мнения каждый день или даже каждую неделю.
Может быть слово заказчик тут лучше подходит.Тут много слов подходит. И очень мало цензурных.
Клиент один, потому что он один в данный момент времени. Нельзя же разрабатывать например сайт Сбербанка для нескольких клиентов.Если мы говорим о мире номер один? Можно и нужно, конечно. Ибо главное в [этом мире] том, что такое ПО будет установлено и будет использоваться тысячами или миллионами людей. Сколько у вашего чуда-юда пользователей — неважно: если у этих пользователей по существу нет никакого выбора, так что им придётся как-то уж с ним уживаться, то это второй мир. Ну или, может быть, Консультационное ПО, которое хотя и притворяется ширпотребом, но высокая стоимость реализации означает, что оно больше похоже на внутреннее.
Когда цилы релизов долгие, с аджайлом тяжеловато, да. Но в идеале релиз можно выпускать каждый месяц, а сбором отзывов заниматься перманентно, постоянно корректируя направление разработки согласно результатам.И что вам даст этот «сбор отзывов»? Его ещё обработать нужно. А то у вас любители Linux'а в первый приоритет попадут: они составляют 1% пользователей, причём если по деньгам взять, то, скорее всего, ещё и меньше, а вони от них столько, как если бы они составляли 90% всех посетилей какого-нибудь YouTube.
Подумайте, откуда говорящий. Стив МакКоннелл, Стив Магуайр и я все из одной песочницы: мира ширпотребных электронных таблиц, написанных в Редмонде, штат Вашингтон. И у таких у нас высокая планка на лёгкость в использовании и низкая для ошибок. Большинство других гуру методологии зарабатывают свой кусок хлеба, консультируя внутренние корпоративные разработки, поэтому о них они и говорят.Аджайл — это для низкой планки на лёгкость в использовании и высокой — для ошибок, а никак не для «ширпотреба».
Возвращаясь к аналогии с плотником, грязный молоток забьет гвоздь не хуже начищенного до блеска,, если не выскользнет из рук и не пробьет потолок при размахе, а грязный молоток намного легче это сделает, чем чистый.
Написание кода не является работой программиста. А является ей создание приложения для решения определенных задач.
Твой код никого не интересует