Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.03.01;
Скачать: [xml.tar.bz2];

Вниз

Перфекционизм vs. тяп-ляп.   Найти похожие ветки 

 
Alkid   (2008-12-29 20:47) [0]

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

Вопрос вызван некоторым диссонансом после перехода из фирмы "Acronis", где написание говнокода является почти что официальной политикой ("расстрелы" за рефакторинг - грустная действительность) в "Лабораторию Касперского", где, наоборот, много внимания уделяется чистоте решений и кода. В первом месте мне приходилось бороться за качество кода (не люблю писать write-only код), а сейчас приходится адаптироваться к более высоким стандартам разработки. Хочу услышать ваши мнения по этому вопросу. :)


 
@!!ex ©   (2008-12-29 20:56) [1]

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


 
Alkid   (2008-12-29 20:59) [2]


> @!!ex ©   (29.12.08 20:56) [1]

А с какой стороны не нравится? Вот я, например, одно время сильно ударялся в явный overdesign, после чего пришёл к выводу, что простота кода - это отдельная ценность, которая иногда "перебивает" соблазн замутить какой-нибудь паттерн. А сейчас столкнулкнулся с людьми, которые как раз готовы "ради идеи" делать то, что я бы счёт overdesign`ом и вообще, не считают его "грехом". Меня это несколько смущает.


 
Сергей М. ©   (2008-12-29 21:03) [3]


> "Acronis", где написание говнокода является почти что официальной
> политикой


> "Лабораторию Касперского", где, наоборот, много внимания
> уделяется чистоте решений и кода


Хм ..

У меня, конечно, невеликий опыт общения с продуктами той и другой контор, но "говнокод" от Акрониса при оказии не доставлял хлопот, чего, увы, не могу сказать о коде от Кошмалаб


 
Alkid   (2008-12-29 21:06) [4]


> Сергей М. ©   (29.12.08 21:03) [3]

А это и есть тот самый интересный аспект проблемы - стоит ли пытаться придумывать что-то лучше говнокода, если клиент доволен?

Справедливости ради надо отметить, что такое "перфекционистское" отношение к коду я пока наблюдал только в своём отделе, который занимается антивирусом для MS Exchange. Образцы кода, полученные из других отделов оставляли... м-м-м... неоднозначное впечатление.


 
clickmaker ©   (2008-12-29 21:09) [5]

> стоит ли пытаться придумывать что-то лучше говнокода

код должен работать. И работать адекватно. И удовлетворять клиента.
Остальное - душевный онанизм. Если есть время и желание


 
tButton ©   (2008-12-29 21:12) [6]

а я не понял что такое говнокод, овердизайн и паттерн


 
DVM ©   (2008-12-29 21:18) [7]


> Alkid

Продукты акронис - это как раз те продукты которые я бы оценил на 5. Удобно, понятно, быстро и красиво. Никогда бы не подумал что там говнокод.

Меня всегда гложат сомнения по поводу своего кода. Хочется сделать его более универсальным, быстрым, следующим каким-то паттернам и просто красивым. Но из-за нехватки времени как правило основным критерием становится - главное чтоб работало. А красоты по мере возможности.


 
Сергей М. ©   (2008-12-29 21:20) [8]


> что такое говнокод

http://govnokod.ru/


 
Alkid   (2008-12-29 21:22) [9]


> clickmaker ©   (29.12.08 21:09) [5]
> код должен работать. И работать адекватно. И удовлетворять
> клиента.
> Остальное - душевный онанизм. Если есть время и желание

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

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

Это приводит нас по такому понятию как "maintainability". Является ли его повышение "душевным онанизмом" или нет? В каком-то смысле его повышение - это стратегическая инвестиция, которая может окупиться, а может и нет.


 
tButton ©   (2008-12-29 21:22) [10]

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


 
Anatoly Podgoretsky ©   (2008-12-29 21:23) [11]

> Сергей М.  (29.12.2008 21:03:03)  [3]

Акронис вообще то очень кривая штучка.
Про К сказать тяжело, сталкиваюсь только со стонами на форумах, а реально не знаю. Правда в свое время тестировал McAfee и К (5) и плюнул, поскольку для К не смог дождаться конца, а до проверки на антивирусах да же и дело не дошло.


 
Игорь Шевченко ©   (2008-12-29 21:26) [12]


> Господа, хочу задать такой вопрос: какое какую политику
> лично вы исповедуете относительно качества кода?


Любая задача должна быть решена минимальным количеством максимально понятных строк кода :) У понятности приоритет выше, чем у минимальности.


 
DVM ©   (2008-12-29 21:26) [13]


> Anatoly Podgoretsky ©   (29.12.08 21:23) [11]


> Акронис вообще то очень кривая штучка.

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


 
Alkid   (2008-12-29 21:29) [14]


> DVM ©   (29.12.08 21:18) [7]
> Продукты акронис - это как раз те продукты которые я бы
> оценил на 5. Удобно, понятно, быстро и красиво. Никогда
> бы не подумал что там говнокод.

Ну, местами очень даже :)

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


> Меня всегда гложат сомнения по поводу своего кода. Хочется
> сделать его более универсальным, быстрым, следующим каким-
> то паттернам и просто красивым. Но из-за нехватки времени
> как правило основным критерием становится - главное чтоб
> работало. А красоты по мере возможности.

Но насколько стоит пытаться, например, обобщать решение? Я уже видел не раз, как попытка сделать слишком обобщённое решение приводила к нежелательным последствиям или краху проекта (кстати, в том же Акронисе).


 
Сергей М. ©   (2008-12-29 21:30) [15]


> Alkid


А не желаешь ли "прославить" Акронис ?

http://govnokod.ru/delphi/add

Или комм.тайна ?


 
Alkid   (2008-12-29 21:32) [16]


> Игорь Шевченко ©   (29.12.08 21:26) [12]
> Любая задача должна быть решена минимальным количеством
> максимально понятных строк кода :) У понятности приоритет
> выше, чем у минимальности.

На мой взгляд разумная позиция.
А как насчёт заботы о будущем? В смысле расширяемости и универсальности?


 
Anatoly Podgoretsky ©   (2008-12-29 21:34) [17]

> DVM  (29.12.2008 21:26:13)  [13]

Кривость проявляется в работоспособности, это чудо когда работает, зависит от компьютера, на одних работает, на других нет, вплоть до полного зависания. Я говорю про автономную, загружаемую версию. Проверено начиная не то с 6, не то с 7 версии. Приходится держать три последнии версии.

ЗЫ: это не про всю продукцию, а только про Acronis True Image и ее загрузочную версию.


 
Alkid   (2008-12-29 21:35) [18]


> Сергей М. ©   (29.12.08 21:30) [15]
> А не желаешь ли "прославить" Акронис ?

Лучше не буду, тем более, что с CVS перед увольнением копию не снимал :)
Скажу лишь намёками - кусок кода, который поддерживает LDM в некотором множестве продуктов был написан так, что вопрос о его рефакторинге решался как стратегический. Решали недели 3 и, в итоге, не решились его трогать :)


 
Сергей М. ©   (2008-12-29 21:40) [19]


> Alkid   (29.12.08 21:35) [18]


Стесняюсь спросить - ты, вероятно, стал жертвой подавления бунта ассенизаторов ?)


 
DVM ©   (2008-12-29 21:43) [20]


> Anatoly Podgoretsky ©   (29.12.08 21:34) [17]


> Кривость проявляется в работоспособности, это чудо когда
> работает, зависит от компьютера, на одних работает, на других
> нет, вплоть до полного зависания.

Странно, ни разу не сталкивался. Не знаю как последние версии, но те что были в 2004-2005 годах у меня работали отлично. На доброй сотне компьютеров использовал - все работало как часы. Я еще тогда подумал - надо же какой удобный продукт. А еще он тогда работал на порядок быстрее GHost-а.


> Но насколько стоит пытаться, например, обобщать решение?
>  Я уже видел не раз, как попытка сделать слишком обобщённое
> решение приводила к нежелательным последствиям или краху
> проекта

Ой не знаю. Из-за того что я никак не могу выбрать вот эту самую степень обобщения я уже год(!) думаю как переделать один проект. Но не начинаю переделку. Благо, время не критично.

Но не стоит увлекаться имхо этим. Вот как пример хочу привести Indy 10. Они создали такую гигантскую иерархию классов, что ей теперь стало невозможно пользоваться пока не потратишь уйму времени на изучение. Хотя все разложили по полочкам.


 
Alkid   (2008-12-29 21:46) [21]


> Сергей М. ©   (29.12.08 21:40) [19]
> Стесняюсь спросить - ты, вероятно, стал жертвой подавления
> бунта ассенизаторов ?)

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


 
Alkid   (2008-12-29 21:52) [22]


> DVM ©   (29.12.08 21:43) [20]
> Странно, ни разу не сталкивался. Не знаю как последние версии,
>  но те что были в 2004-2005 годах у меня работали отлично.
>  На доброй сотне компьютеров использовал - все работало
> как часы. Я еще тогда подумал - надо же какой удобный продукт.
>  А еще он тогда работал на порядок быстрее GHost-а.

Скажем так... от разработчиков слышал, что лучшим продуктом был True Image 8. Всё, что позже уже начинает деградировать. Сам я в его разработке не участвовал и не пользовался. За что купил, за то и продаю.


> Ой не знаю. Из-за того что я никак не могу выбрать вот эту
> самую степень обобщения я уже год(!) думаю как переделать
> один проект. Но не начинаю переделку. Благо, время не критично.
>
> Но не стоит увлекаться имхо этим. Вот как пример хочу привести
> Indy 10. Они создали такую гигантскую иерархию классов,
> что ей теперь стало невозможно пользоваться пока не потратишь
> уйму времени на изучение. Хотя все разложили по полочкам.

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


 
Anatoly Podgoretsky ©   (2008-12-29 21:54) [23]

> DVM  (29.12.2008 21:43:20)  [20]

А у меня была возможность сталкиваться, со множеством проблем, как то

1. Не видит Сетевые устройства, CD-ROM, RAID диски (ни разу).
2. Зависание, например 11 версии, 10 в тоже время запускается, но тогда пункт 1

Если же система загрузилась и видит нужные ресурсы, то работает стабильно. Компьютеры в основном Intel или гигабайт, но на основе Интел чипсет. Аналогичный продукт Norton Ghost на тех же системах работает нормально и влазит на дискету. С помощью его я архивировал сервера.


 
DVM ©   (2008-12-29 21:55) [24]


> Alkid   (29.12.08 21:52) [22]


> от разработчиков слышал, что лучшим продуктом был True Image
> 8.

вот как раз ее я и использовал вроде.


 
@!!ex ©   (2008-12-29 21:57) [25]

> [2] Alkid   (29.12.08 20:59)
> А с какой стороны не нравится? Вот я, например, одно время
> сильно ударялся в явный overdesign, после чего пришёл к
> выводу, что простота кода - это отдельная ценность, которая
> иногда "перебивает" соблазн замутить какой-нибудь паттерн.
> А сейчас столкнулкнулся с людьми, которые как раз готовы
> "ради идеи" делать то, что я бы счёт overdesign`ом и вообще,
> не считают его "грехом". Меня это несколько смущает.

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


 
Городской Шаман   (2008-12-29 21:57) [26]


> Alkid   (29.12.08 20:47)
>
> Вопрос вызван некоторым диссонансом после перехода из фирмы
> "Acronis", где написание говнокода является почти что официальной
> политикой


Ясно. User-orient. Интерфейс конечно понятный и гламурный, но по функционалу продукты этой фирмы создают впечатление студенческой лабы.


 
DVM ©   (2008-12-29 21:58) [27]


> Anatoly Podgoretsky ©   (29.12.08 21:54) [23]

Мое общение с акронисом в основном заключалось в том, что я клонировал им диски и системой. Ни сеть, ни RAID ни прочего ничего кроме HDD IDE и кажется SATA мне не требовалось. Может поэтому и проблем не заметил.


 
Anatoly Podgoretsky ©   (2008-12-29 21:59) [28]

> DVM  (29.12.2008 21:55:24)  [24]

Ну 8 меньше всего давала проблем, но она не видела современные Интелловские платы, а это уже не позволяло архивировать раздел на сервер.


 
Kerk ©   (2008-12-29 22:06) [29]


> Сергей М. ©   (29.12.08 21:20) [8]
>
> > что такое говнокод
>
> http://govnokod.ru/

Я добавлял :)
http://govnokod.ru/54


 
Anatoly Podgoretsky ©   (2008-12-29 22:07) [30]

> DVM  (29.12.2008 21:58:27)  [27]

Я точно также клонировал, образ на сервере. С этим есть другая проблема, через некоторое время Акронис сообщает, что образ разрушен. Проверено несколько раз. Есть проблема и 4 гб, из-за чего образ приходилось разбивать на части. SATA иногда узнавал, иногда нет.

В общем проблемы с оборудованием и ФС


 
DVM ©   (2008-12-29 22:15) [31]


> Kerk ©   (29.12.08 22:06) [29]


>
> Я добавлял :)
> http://govnokod.ru/54

Смешно. Я сразу подумал наш человек добавил! :)


 
Игорь Шевченко ©   (2008-12-29 22:23) [32]

Alkid   (29.12.08 21:32) [16]


> А как насчёт заботы о будущем? В смысле расширяемости и
> универсальности?


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

Я посмотрел, что я написал один раз и использую в разных проектах - в основном, три класса - список объектов, написанный еще до TObjectList, класс-обертку, позволяющую работать с файлами, отображаемыми в память, и класс, позволяющий получать список файлов по маске, включая обход подкаталогов.

И все :)

Остальные классы уже отражают специфику предметной области.


 
oxffff ©   (2008-12-29 23:34) [33]


> Alkid   (29.12.08 20:47)  


Страюсь писать код наиболее универсальный.
Совершенно не боюсь глубокого рефакторинга, в том числе и фундаментального.
Но!!!

За это можно еще и отгрести устно.
Причем с этим кодом работаю либо я, либо напарник. Однако начальство не любит универсализм и высокие абстракции.
Мне причины понятны, не нужно писать высокий по абстрактности код последователи могут потратить много времени чтобы понять что это за код.
Однако сложные, и особо сложные выкрутасы я документирую через комменты, либо схемы, либо UML. Чего нельзя сказать о начальстве.
Все схемы БД (а CУБД это несколько систем на foxpro, несколько систем на acess, несколько систем на mssql, несколько систем на oracle) знает по факту один человек. Начальник.
Причем нам приходиться самим шерстить таблицы, view, триггеры, процедуры чтобы понять, что это за данные. Часто это телепатия.
А НФБК там и не пахнет. Ни документации, ни хрена.


 
oxffff ©   (2008-12-29 23:42) [34]


> oxffff ©   (29.12.08 23:34) [33]


Одно радует сейчас мы с напарником большую часть времени пишем на ABAP. Переводим часть функционала локальных систем на R3.
Причем изучили(и изучаем) с напарником все самостоятельно.
Ни на какие курсы нас не отправляют. Инициативу не поощряют.
А пишем мы на всем. Даже VBA. За ногу его.


 
oxffff ©   (2008-12-30 00:06) [35]


> oxffff ©   (29.12.08 23:34) [33]


Есть очень хороший знакомый. Я называю его Oracle монстр - сейчас Т. Кайт для него как букварь для школьника.
Если у меня есть вопросы по Oracle я знаю кто мне точно поможет.
Он тоже сидит на работе и деградирует. Изучает только для собственного удовольствия. А так цены этому человеку нет. Провинция одним словом.


 
Дмитрий Белькевич ©   (2008-12-30 00:11) [36]

Видимо, еще от проектов зависит. Мы свои уже седьмой год будем "тащить", и, как говорится, конца и края не видно. Код периодически от мусора чиститься, иначе уже закопались бы давно. Сразу не всегда получается закономерности увидеть. Поэтому когда немного посвободнее, причёсываем сырцы. Ну и по ходу, конечно, если мелочь какая. Такое, как на http://govnokod.ru, конечно, никто не пишет. У нас сроков, обычно, нет. Спешки нет, поэтому говнокод просто не пишется. Времени думать, а потом делать хватает. Зато потом переделывать по 10 раз не нужно.
О том, что код - вообще без хинтов, вразумительные имена, правильное форматирование и прочее я промолчу, это, наверно, у всех так.

p.s. В противовес http://govnokod.ru/ сделали бы сайт с хорошими решениями, кстати. Какой-нить IdealCode. Добавлять туда либо какие-то красивые решения, либо отрефакторенный код, с упором на "что стало". Дарю, так сказать, бизнес идею ;)

p.p.s. http://govnokod.ru понравился, да :)


 
Alkid   (2008-12-30 10:56) [37]


> Игорь Шевченко ©   (29.12.08 22:23) [32]
> Если код понятен, его легко расширить, а стремление к универсальности
> в большинстве своем есть зло, так как снижает понятность.
>  Исключая конечно примитивные универсальные решения типа
> списков, разбора командной строки, но их уже давно придумали
> :)

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


 
Alkid   (2008-12-30 10:57) [38]


> oxffff ©   (30.12.08 00:06) [35]

А ты где территориально? И какой профиль конторы?


 
Alkid   (2008-12-30 11:03) [39]


> Дмитрий Белькевич ©   (30.12.08 00:11) [36]
> О том, что код - вообще без хинтов, вразумительные имена,
>  правильное форматирование и прочее я промолчу, это, наверно,
>  у всех так.

Эх, твоими бы устами, да мёд пить :)
Например я видел код, где не было единого стиля форматирования и наименования (при том, что его писал один человек!). Этот код изобиловал "магическими числами", которые автор кода получил при помощи реверс-инжиниринга кой-какого чужого кода. Кроме того, этот код изобиловал функциями на много-много разворотов экрана с закомментированными кусками. И прочая, прочая.

Я видел и другой код, ещё на позапрошлой работе. Это было достаточно большое приложение запутанное до такой степени, что на определённом этапе попытка что-то добавить или исправить приводила к тому, что начинало сбоить в другом месте программы. Этот код обогатил мой опыт, например, тем, что можно сделать две-три копии одной и той же функции на 40+ разворотов экрана, различающихся парой-тройкой строчек :) Там ВСЮ программу можно было постить на govnokod.ru. Без шуток.
:-/


 
clickmaker ©   (2008-12-30 11:11) [40]

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



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2009.03.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.007 c
15-1230810936
Slider007
2009-01-01 14:55
2009.03.01
С днем рождения ! 1 января 2009 четверг


2-1232190104
ТАГ
2009-01-17 14:01
2009.03.01
Отчеты Rave


2-1232217220
Б
2009-01-17 21:33
2009.03.01
Как сделать монохромный растр?


2-1232095406
vegarulez
2009-01-16 11:43
2009.03.01
работа в горячей клавишей...


15-1230517403
Хост
2008-12-29 05:23
2009.03.01
Как предотвращать Out of memory при SetLength?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский