Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Флейм (http://www.flasher.ru/forum/forumdisplay.php?f=53)
-   -   Перфекционизм в коде (http://www.flasher.ru/forum/showthread.php?t=170926)

Dukobpa3 04.11.2011 22:17

Перфекционизм в коде
 
Собственно сабж.

Я в виду перфекционизма периодически лажаю по срокам. Пару раз было такое что сам путался в своих "гениальных" схемах и приходилось всё переписывать с нуля. В итоге код конечно в основном получается качественный и лаконичный, но только в основном и очень не всегда, ибо некоторые вот эти самые "гениальные" решения периодически получаются под одну задачу, а в реальных проектах зачастую приходится что-то добавлять и изменять и это всё обрастает костылями, редко, неприятно, но бывает.

Бывает ли у вас такое, как боретесь и боретесь ли, как посоветуете бороться с этим ну и в таком духе:)

Silicium 04.11.2011 22:36

Я в принципе только начал более-менее серьезно работать, но от этой проблемы тоже страдаю, причем очень сильно.За сегодняшний день, например, один класс трижды переписывал, "тщательно обрабатывая напильником". Хотя, с другой стороны, при таком подходе из паровозов порой вертолеты получаются...

Astraport 04.11.2011 22:38

Эффективнее быть разным.

goodguy 04.11.2011 22:42

Цитата:

Бывает ли у вас такое, как боретесь и боретесь ли, как посоветуете бороться с этим ну и в таком духе :)
Конечно бывает. Почти в каждом проекте :D
Вообще перфекционизм - это плохо. Ибо никогда не получится сделать идеально, а времени тратится гора. Но сам этим частенько грешу. В итоге ложу на все костыли большой и толстый и продолжаю делать проект )
И вообще, сдается мне, что невозможно сразу предусмотреть все детали и хорошо продумать всю схему. Все равно на разных этапах будут всплывать какие-то нюансы, которых ты и предположить не мог.

Psycho Tiger 04.11.2011 23:09

Я последнее время всегда ратую за то, что делать нужно под конкретную задачу.
3 уровня кода: полный реюз, частичный реюз, только под проект.
Полный реюз говорит о том, что эти классы могут перекочевать в проект вообще нетронутыми. Частичный - что в них надо будет внести правки. Конкретно под проект - то, что не будет перенесено никогда.

Dukobpa3 04.11.2011 23:27

Цитата:

3 уровня кода: полный реюз, частичный реюз, только под проект.
Да, а в конкретном проекте есть пачка похожих модулей. Не идентичных, а похожих. И можно даже в одном проекте наворотить абстракций на мешок геморроя)) Что я с успехом периодически и делаю))

i.o. 04.11.2011 23:41

Если классы не превращать в свалку или склад, то вполне можно облегчить себе и окружающим жизнь.

СлаваRa 05.11.2011 00:00

Иногда бывает так, что функционал появляется\изменяется в процессе, и тут главное время реализации, поэтому бывают моменты когда приходится пренебрегать "красотой".

Dukobpa3 05.11.2011 00:05

Цитата:

Если классы не превращать в свалку или склад, то вполне можно облегчить себе и окружающим жизнь.
Как бы да:)
Только бывает наоборот, свалка в одном классе. Написал что-то, потом нужнодопилить рюшечку, допиливаешь, а потом еще рюшечка, снова допиливаешь, а потом еще рюшечка и оказывается лучше было вот ту первую рюшечку вынести в отдельный класс изначально, так как третья и первая делают вещи похожие. Только когда делал первую рюшечку то и намеков не было на третью а выделять функцийку на 20 строк в отдельный класс не оч охота:))

Ну много вариантов ведь в реальной жизни. Если бы всё было идеально то и темы подобные не начинались бы:)

Остается только мечтать об адекватной документации не меняющейся в ходе проекта и неограниченному времени на разработку:)

fish_r 05.11.2011 00:07

Цитата:

Сообщение от Dukobpa3 (Сообщение 1043763)
Пару раз было такое что сам путался в своих "гениальных" схемах и приходилось всё переписывать с нуля.

Переписывать "с нуля" это, конечно, nonsense, но сам часто переписываю классы перекомпоную пакеты разношу, переименовываю... И это по-моему нормальная практика. Тут на первый план выходит чёткая структуризация, вернее четкое разделение задач между объектами-классами - вот здесь важна предусмотрительность. Если всё чётко разделено, то переориентация объектов, расширение проекта
доставляет даже удовольствие :). А предусмотреть все возможные изменения - нереально, и лишено смысла...

Лично для меня проблема - когда после многочасового кодинга начинаю терять концентрацию, понимание того что делаю, т.е. уже делаю как то подкоркой, не вполне осмысленно, вероятно это признак переутомления... Где-то даже читал про такие симптомы...

mooncar 05.11.2011 00:34

Недавно на Хабре обсуждалось.

Вообще я лично этим "страдаю". Вместо того, чтобы биться за скорость разработки и сроки, тяготею к написанию универсальных и "красивых" блоков.
Кое-что пригождается в последствии, кое-что задерживается навсегда, и КПД этого достаточно высок.
Но все-таки чувствую, что стоит больше времени и сил тратить на ускорение конкретного проекта. А то нередко выходит, что "ух, почти полноценная CMS получается.. еще подкрутить здесь и здесь.. и коментов побольше, и методы покрасивше (и поуниверсальней)". ... Проходит куча времени - ни CMS толковой не вышло, и проект по срокам почти пролетел.

-De- 05.11.2011 01:04

Божественная статья!
Цитата:

Пока вы будете стремиться сделать что-то очень хорошо, вас всегда будут обгонять на повороте те, кто делают лишь достаточно хорошо, чтобы этим можно было пользоваться.
Цитата:

Оптимизируйте, оптимизируйте, оптимизируйте, только не код, а время разработки + время исполнения.
Вообще добавить что-то тяжело, так, из менее важного.
Вы никогда не сможете верно оценить сроки разработки того, что вы ещё не разрабатывали.
Пока вы не закончили проект, вашего кода нет. Он хуже любого уже выпущенного.
Я, пожалуй, не страдаю совершенствованием кода, мне важен результат, код - это лишь средство.

Dukobpa3 05.11.2011 03:04

Статья крутая. Очень.

goodguy 05.11.2011 09:17

Цитата:

Переписывать "с нуля" это, конечно, nonsense, но сам часто переписываю классы перекомпоную пакеты разношу, переименовываю... И это по-моему нормальная практика.
Я как-то раз работал над проектом почти полгода, потом понял, что получилась хрень, и переписал все с нуля ) Причем потратил всего около месяца на то, чтобы догнать его до прежнего уровня, только с более красивой структуризацией и кодом =)

Статья да, в точку. Так что, товарищи, забьём коллективно на перфекционизм и будем *****кодить :D

iNils 05.11.2011 13:23

Цитата:

Сообщение от goodguy (Сообщение 1043866)
Я как-то раз работал над проектом почти полгода, потом понял, что получилась хрень, и переписал все с нуля ) Причем потратил всего около месяца на то, чтобы догнать его до прежнего уровня, только с более красивой структуризацией и кодом =)

Это потому, что за первые полгода в голове уже сложилось структура, видны ошибки, не надо придумывать новое.

На самом деле статья однобока.

crazyone 06.11.2011 02:11

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

На эту тему могу посоветовать статью одного из основателей stackoverflow.com Джоэля Спольски: http://www.joelonsoftware.com/articl...000000069.html
Никогда. Никогда не переписывайте код с нуля.

А про перфекционизм - у меня такая же фишка. Но знаете что? Это обычная лень. Лень потом разбираться с "плохим" кодом. И с этой ленью надо бороться. И с кодом в любом случае прийдется разбираться.

iNils 06.11.2011 03:06

Цитата:

Никогда. Никогда не переписывайте код с нуля.
Переписывайте. Переписывайте, если это надо.

goodguy 06.11.2011 10:09

Цитата:

Всегда можно отрефакторить, поменять интерфейсы объектов и подправить структуру приложения.
Далеко не всегда. Часто проще и быстрее переписать с нуля, чем переделывать существующее.
Цитата:

На эту тему могу посоветовать статью одного из основателей stackoverflow.com Джоэля Спольски
Это его личное мнение.
Цитата:

Но знаете что? Это обычная лень.
Перфекционизм == Лень O_o.
Совсем нет.
Мне просто не нравится, когда у меня бардак где-либо, хоть в коде, хоть на столе.

crazyone 06.11.2011 12:15

Цитата:

Сообщение от iNils (Сообщение 1044032)
Переписывайте. Переписывайте, если это надо.

Определи слово "надо".

Цитата:

Сообщение от goodguy (Сообщение 1044051)
Далеко не всегда. Часто проще и быстрее переписать с нуля, чем переделывать существующее.

Это его личное мнение.

Перфекционизм == Лень O_o.
Совсем нет.
Мне просто не нравится, когда у меня бардак где-либо, хоть в коде, хоть на столе.

1. Ни разу в жизни не видел такого кода. Очень редко бывает проще написать что-то свое, чем разбираться с существующим чужим кодом, но если код твой - разбираться в нем не может быть настолько сложно, разве что у тебя раздвоение личности.
2. Конечно же это его личное мнение. Иначе не бывает. Но это мнение аргументировано, разжевано и положено на блюдечко.
3. Тут я спорить не буду, это мое мнение и его мне аргументировать лень. Да и смысла нет.

i.o. 06.11.2011 12:37

Цитата:

1. Ни разу в жизни не видел такого кода. Очень редко бывает проще написать что-то свое, чем разбираться с существующим чужим кодом, но если код твой - разбираться в нем не может быть настолько сложно, разве что у тебя раздвоение личности.
Вы код в темплатовских (или им подобных) флэшках когда-нибудь видели? :)

iNils 06.11.2011 12:46

Цитата:

Определи слово "надо".
В смысле? Это каждый сам решает, когда проект стоит переписать с нуля или когда не стоит.
Это может быть чужой проект, который написан "боже, как это вообще может работать?"
Это может быть свой проект, у которого, по изначальному ТЗ, было четкий функционал, но в течении некого времени его расширили так, что теперь там заплатка на заплатке и каждая новая задача требует массу времени на интеграцию, и ты знаешь, что задач будет еще не один десяток. И тогда, зная уже текущие потребности можешь спроектировать проект так, что он будет гибок к новым задачам. И суммарно будет выигрыш по времени.
Если я писал проект 2 месяца + куча дополнений, которые пришлось вставить в обход архитекторы, а сейчас я смогу его переписать с нуля всего за неделю, я его перепишу.

А может быть так, что все что выше не будет аргументом, так как переписывание займет полгода-год.
Зависит от ситуации с проектом и времени.

goodguy 06.11.2011 13:09

Цитата:

1. Ни разу в жизни не видел такого кода. Очень редко бывает проще написать что-то свое, чем разбираться с существующим чужим кодом, но если код твой - разбираться в нем не может быть настолько сложно, разве что у тебя раздвоение личности.
Не верю. Ни единому слову )
Этого мог не видеть только:
1) Начинающий программист, который еще нифига не писал толком.
2) Человек, каким-то чудом сразу ставший продвинутым проггером, минуя все этапы развития )

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

crazyone 06.11.2011 15:38

Ну, когда нужно сменить реализацию - это совсем из другой сказки. Плохой код тут не при чем.

goodguy 06.11.2011 15:41

Цитата:

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

crazyone 06.11.2011 15:50

Цитата:

Сообщение от iNils (Сообщение 1044065)
В смысле? Это каждый сам решает, когда проект стоит переписать с нуля или когда не стоит.
Это может быть чужой проект, который написан "боже, как это вообще может работать?"
Это может быть свой проект, у которого, по изначальному ТЗ, было четкий функционал, но в течении некого времени его расширили так, что теперь там заплатка на заплатке и каждая новая задача требует массу времени на интеграцию, и ты знаешь, что задач будет еще не один десяток. И тогда, зная уже текущие потребности можешь спроектировать проект так, что он будет гибок к новым задачам. И суммарно будет выигрыш по времени.
Если я писал проект 2 месяца + куча дополнение, которых пришлось вставить в обход архитектору, а сейчас я смогу его переписать с нуля всего за неделю, я его перепишу.

А может быть так, что все что выше не будет аргументом, так как переписывание займет полгода-год.
Зависит от ситуации с проектом и времени.

Может у нас разное понимание слова "переписывать"? Вот не верю я, что через два месяца работы ты просто берешь и трешь папку с исходниками.
Скорее всего создаешь новую архитектуру и размазываешь по ней макро- и микрорешения изначального кода.
Тогда у нас просто разный подход. Я предпочитаю более локализированные изменения, чтобы не поламать нечаянно что-нибудь. За счет чего приходится гораздо меньше заниматься дебагом.

Если действительно весь изначальный код стирается, то... Даже не знаю. Странно.

Добавлено через 11 минут
Цитата:

Сообщение от goodguy (Сообщение 1044127)
Я не понимаю этих выводов.
Иногда ни при чем, иногда при чем.
Вот написал я однажды редактор карт для игры, потом мне понадобилось изменить генерируемый им на выходе код. Но сам код редактора был настолько заморочен и полон косяков, что его изменение привело бы еще к большей путанице. В итоге я решил его полностью переписать, и получил вполне нормальную реализацию.

Вот у меня тоже бывали подобные проекты. Но в итоге я:
а) разгребал все без удаления исходников и получал нормальную реализацию;
б) в особо злых случаях заворачивал весь спагетти-код в человеческий интерфейс, который позволял сделать все необходимые изменения.

И на вариант а и на вариант б (который я никому не рекомендую) просто физически не могло уйти столько же времени, сколько на перепроектирование, переписывание и отдебаживание всего проекта.

goodguy 06.11.2011 16:11

Цитата:

Вот не верю я, что через два месяца работы ты просто берешь и трешь папку с исходниками.
Бывает и не через 2 месяца, а через полгода работы просто берешь и трешь папку с исходниками.

СлаваRa 06.11.2011 16:13

Цитата:

Бывает и не через 2 месяца, а через полгода работы просто берешь и трешь папку с исходниками.
Да, и у меня бывает.

mooncar 06.11.2011 18:46

Цитата:

Сообщение от goodguy (Сообщение 1044145)
Бывает и не через 2 месяца, а через полгода работы просто берешь и трешь папку с исходниками.

- Как там исходники?
- Тру!
:)

Dukobpa3 06.11.2011 19:50

Цитата:

Сообщение от iNils
Это может быть чужой проект, который написан "боже, как это вообще может работать?"
Это может быть свой проект, у которого, по изначальному ТЗ, было четкий функционал, но в течении некого времени его расширили так, что теперь там заплатка на заплатке и каждая новая задача требует массу времени на интеграцию, и ты знаешь, что задач будет еще не один десяток. И тогда, зная уже текущие потребности можешь спроектировать проект так, что он будет гибок к новым задачам. И суммарно будет выигрыш по времени.
Если я писал проект 2 месяца + куча дополнение, которых пришлось вставить в обход архитектору, а сейчас я смогу его переписать с нуля всего за неделю, я его перепишу.

Подпишусь под каждым словом))

Но вот в какой момент это будет адекватным решением а когда перфекционизмом?:) Можно ведь себе нашифровать и постоянно что-то улучшать, докручивать в уже существующих модулях.

etc 06.11.2011 19:54

Перфекционизм это тру, если итераций по переписыванию не бывает больше одной.

carrotoff 06.11.2011 22:06

Я думаю здоровый перфекционизм - это очень хорошо. Самое главное без фанатизма.
Цитата:

Вот не верю я, что через два месяца работы ты просто берешь и трешь папку с исходниками
Такое было, ни капли не жалею.

Просто нерельно рефакторить, если пересмотрел саму архитектуру.

nuran 07.11.2011 20:28

Цитата:

Сообщение от mooncar (Сообщение 1044169)
- Как там исходники?
- Тру!
:)

)))))


Часовой пояс GMT +4, время: 15:31.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.