Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.03.01;
Скачать: CL | DM;

Вниз

Перфекционизм 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]

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


 
Jeer ©   (2008-12-30 11:18) [41]


> Alkid   (29.12.08 20:47)  


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

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

Понятность ( самодокументируемость кода ) стоит почти во главе угла.


 
Alkid   (2008-12-30 11:25) [42]


> clickmaker ©   (30.12.08 11:11) [40]

Аналогия не совсем верна. Стол сдаётся в эксплуатацию и требования к нему не меняются. И баги в нём не правятся Максимум - сделают другой стол с учётом пожелания заказчика.


 
tButton ©   (2008-12-30 11:27) [43]


> О том, что код - вообще без хинтов, вразумительные имена,
>  правильное форматирование и прочее я промолчу, это, наверно,
>  у всех так.

от случая к случаю...


 
Alkid   (2008-12-30 11:36) [44]


> Jeer ©   (30.12.08 11:18) [41]
> Практически не пишу с нуля, предварительно делается постановка
> даже небольшой задачи ( типы данных, алгоритмы, объектность
> и пр),

В смысле - делаешь прототипы или в теории стараешься всё продумать?


 
Jeer ©   (2008-12-30 11:39) [45]

Ну да, если даже нужно - делаются некие тестовые задачи

Приведу пример..

В своих задачах мне часто приходится заниматься обработкой данных ( стат и пр )
Есть такой класс регрессионных функций, как класс двухпараметрических.
Например:  y = a + b*x; y = a*x^b; y=a*Ln(b*bx)  и тд

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

type
 TFuncRegress = function(value: TFloat): TFloat;

type
{========================== TRegression ==============================}
 TRegression = class(TObject)
 protected
   fRegType: integer;
   fCount: integer;
   fMaxX, fMinX: TFloat;
   fMaxY, fMinY: TFloat;
   fFirstX, fLastX: TFloat;
   fFirstY, fLastY: TFloat;
   fSumX, fSumY: TFloat;
   fSumXX, fSumYY: TFloat;
   fSumXY: TFloat;
   fA, fB: TFloat;
   fR: TFloat; // covariation X <-> Y
   farX, farY: TFloatArray;

   TransX: TFuncRegress;
   TransY: TFuncRegress;
   TransA: TFuncRegress;
   TransB: TFuncRegress;

и т.д

Ну и сами трансформирующие функции:

function LinearTransform(value: TFloat): TFloat;
begin
 Result := value;
end;

function ParabolicTransform(value: TFloat): TFloat;
begin
 Result := value * value;
end;

function CubicTransform(value: TFloat): TFloat;
begin
 Result := value * value * value;
end;

function BackTransform(value: TFloat): TFloat;
begin
 Result := 1 / value;
end;

function LgTransform(value: TFloat): TFloat;
begin
 Result := Log10(Value);
end;

и тд

Установка нужного вида регрессии осуществляется назначением нужных трансформирующих функций на обработку потока входных данных и получения коэффициентов.

procedure TRegression.SetRegression(idx: integer);
begin
 Clear;
 fRegType := idx;
 case fRegType of
// y = a + b * x
   0: begin
       TransX := @LinearTransform;
       TransY := @LinearTransform;
       TransA := @LinearTransform;
       TransB := @LinearTransform;
     end;
// y = a + b * x^2
   1: begin
       TransX := @ParabolicTransform;
       TransY := @LinearTransform;
       TransA := @LinearTransform;
       TransB := @LinearTransform;
     end;

и тд.

В результате имеем легко расширяемый класс под любую новую регрессионную двухпараметрическую функцию.
Сам процесс получения искомых коэффициентов a и b довольно тривиален и известен - метод наименьших квадратов.

Да, на это дело ушло пара дней, но зато теперь.. :))


 
Alkid   (2008-12-30 11:43) [46]


> Jeer ©   (30.12.08 11:39) [45]
> Да, на это дело ушло пара дней, но зато теперь.. :))

Ну да, я примерно об этом же. Соотношение времени на заточку топора и рубку леса :)


 
Jeer ©   (2008-12-30 11:46) [47]

И еще..

Можно вот так сократить код метода SetRegression

procedure TRegression.SetRegression(idx: integer);
begin
Clear;
fRegType := idx;
TransX := @LinearTransform;
TransY := @LinearTransform;
TransA := @LinearTransform;
TransB := @LinearTransform;
case fRegType of
// y = a + b * x
  0: begin
    end;
// y = a + b * x^2
  1: begin
      TransX := @ParabolicTransform;
    end;

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


 
Jeer ©   (2008-12-30 11:49) [48]


> Соотношение времени на заточку топора и рубку леса :)


Тут тоже важно не переборщить :))

Хорошая стамеска точится порой дольше, чем работаешь ей в конкретной задаче :))


 
Alkid   (2008-12-30 12:00) [49]


> Jeer ©   (30.12.08 11:49) [48]
> Хорошая стамеска точится порой дольше, чем работаешь ей
> в конкретной задаче :))

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

Я, кстати, наблюдал в Акронисе былинный отказ именно по такому сценарию :)


 
Jeer ©   (2008-12-30 12:02) [50]

Мне проще - давно работаю в одиночку :))


 
Alkid   (2008-12-30 12:07) [51]


> Jeer ©   (30.12.08 12:02) [50]

Freelance? Или просто один над задачей пашешь?


 
Jeer ©   (2008-12-30 12:09) [52]


> Alkid   (30.12.08 12:07) [51]
>
>
> > Jeer ©   (30.12.08 12:02) [50]
>
> Freelance? Или просто один над задачей пашешь?


И так, и так :)


 
Alkid   (2008-12-30 12:29) [53]


> Jeer ©   (30.12.08 12:09) [52]

Вот, кстати, твоё мнение становится интересным в этом смысле :)
Ибо являясь фрилансером ты одновременно и технический специалист (разработчик) и бизнесмен, т.е. смотришь на этот вопрос с двух точек зрения.


 
boriskb ©   (2008-12-30 12:35) [54]

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

проф. Перлис
Software Engineering Tech niques. p. 33.
70-е года прошлого века


 
Alkid   (2008-12-30 12:39) [55]


> boriskb ©   (30.12.08 12:35) [54]

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


 
Jeer ©   (2008-12-30 12:48) [56]


> Ибо являясь фрилансером ты одновременно и технический специалист
> (разработчик) и бизнесмен, т.е. смотришь на этот вопрос
> с двух точек зрения.


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

Кроме того, я уже говорил, что делаю, в основном, штучные заказы и там где 1С, SAP и т.п. не помогут никак.

"От штучной работы надо получать удовольствие, а не только деньги" (С)


 
Jeer ©   (2008-12-30 12:51) [57]


> Если, положим, не очень квалифицированный новичок попадает
> в команду, где уже сложился некоторый высокий стандарт на
> качество кода,


Это основа его будущего успеха.

P.S.
Когда я попал на фирму молодым специалистом, то три года таскали "мордой об стол" более старшие товарищи. Натаскали и приучили к порядку во всем.
Сейчас даже трудно представить такое.


 
Alkid   (2008-12-30 13:13) [58]


> Jeer ©   (30.12.08 12:51) [57]

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


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

Jeer ©   (30.12.08 12:51) [57]


> Когда я попал на фирму молодым специалистом, то три года
> таскали "мордой об стол" более старшие товарищи. Натаскали
> и приучили к порядку во всем.


Аналогичный случай. Ну разве что я не молодым специалистом попал, но от таскания мордой по столу это не избавило. За что я коллективу таскающих премного благодарен.


 
boriskb ©   (2008-12-30 13:32) [60]

Jeer ©
Игорь Шевченко ©

> "мордой об стол"


А можно узнать: в чем конкретно это выражалось?


 
Игорь Шевченко ©   (2008-12-30 13:43) [61]

boriskb ©   (30.12.08 13:32) [60]


> А можно узнать: в чем конкретно это выражалось?


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


 
boriskb ©   (2008-12-30 14:05) [62]


> Игорь Шевченко ©   (30.12.08 13:43) [61]

Чего то я недопонял.

То, что ты описал - это цели
А "мордой об стол"  - это метод

Суть метода раскрой пожалуйста.
:)


 
Alkid   (2008-12-30 15:02) [63]


> boriskb ©   (30.12.08 14:05) [62]

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


 
clickmaker ©   (2008-12-30 15:12) [64]

> Суть метода

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


 
boriskb ©   (2008-12-30 15:16) [65]


> clickmaker ©   (30.12.08 15:12) [64]


Натурально?

Ужас какой.
Сомневаюсь, что они дожили бы до своих лет.
При такой методе :))


 
Jeer ©   (2008-12-30 15:29) [66]

Да не вопрос - расскажу:

"Басни старого моремана"
Притча №1

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

Итак - я, молодой специалист, закончивший весьма престижный в нашем регионе ВУЗ ( сейчас Бакинская нефтяная академия, а тогда - АзиНефтеХим )
Закончил его по специальности, которая позволяла мне стать инженером-разработчиком морских автоматизированных систем, в частности - навигации и управления.
Увы, стать морским офицером, а это было моей мечтой, не позволили глаза - слишком много читал, говорили врачи :)

Прихожу на работу чуть позже, чем многие из моих сокурсников - в конце августа.
Тому была причина - поехали после окончания ВУЗ-а отдыхать в Крым и попали в неприятную историю с поножовщиной.
С трудом, но выкрутились :(

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

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

Несу схему на отзыв моему наставнику ( Саша Кнопф, на три года всего старше меня, а какая пропасть в реальном умении..)

Черкает, аккуратно так, буквально все и набрасывает схему... на тумблерах с небольшим количеством логических микросхем серии 133.
Идея лежала на поверхности, но, главным было то, что я понял из этого экзерсиса - надо не накручивать схему в соответствии с "незыблемыми" теориями, а достигать нужного результата более простыми средствами, впрочем тоде вразрес с теориями не идущими.

Это был первый урок - можно сказать, мне его хватило на всю оставшуюся.

Да, кстати - Саша вообще ничего не говорил в тот момент - просто накидал от руки функционал.

Это было, как сейчас сказали бы, зачетно - он ни словом не принизил мою разработку, но показал, что есть и другие варианты.
А, казалось бы, всего на три года старше :)


 
boriskb ©   (2008-12-30 15:42) [67]


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


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

Моя обида (выражена исключительно мордой лица, никак не словами) была воспринята с весельем и удовлетворением: "Обижается? Это хорошо"
Не скажу, что метода применима ко всем, но на меня она действовала так, как и жидали "воспитатели"
:))


 
Alkid   (2008-12-30 15:48) [68]

Хех. У меня воспитание старшими товарищами началось с того, что меня - самоучку-хоббиста, преисполненного иллюзиями о собственной крутизне, стали тыкать носом в пробелы в образовании :) По-началу обижался сильно, ибо привык быть самым компетентным в программировании среди своего круга общения, а тут такое! :))))


 
Kerk ©   (2008-12-30 15:49) [69]

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

:)


 
boriskb ©   (2008-12-30 15:57) [70]


> Kerk ©   (30.12.08 15:49) [69]


:)
А в меру, Роман, всё хорошо.
В меру и цианистый потребляют :)

Вот по поведению многих на форуме, видно, что недопороты они в своё время
:))


 
Городской Шаман   (2008-12-30 16:26) [71]


> Jeer ©   (30.12.08 15:29) [66]


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


 
Jeer ©   (2008-12-30 16:41) [72]


> Городской Шаман   (30.12.08 16:26) [71]
>
>
> > Jeer ©   (30.12.08 15:29) [66]
>
>
> Прикольно. У меня почему-то всегда было так, что я оказывался
> умнее сотрудников более старших по опыту. Наверное карма
> такая.


Видишь ли.. тут есть нэбольшая разница между умнее и практичнее.
Как потом выяснилось, я точно был умнее (подкованнее)  Сашки-еврея :))
Но это было потом.


 
MsGuns ©   (2008-12-30 16:49) [73]

>Городской Шаман   (30.12.08 16:26) [71]
>У меня почему-то всегда было так, что я оказывался умнее сотрудников более >старших по опыту. Наверное карма такая.

Только круглый дурак считает себя самым умным (с)
:)


 
Городской Шаман   (2008-12-30 16:52) [74]


> MsGuns ©   (30.12.08 16:49) [73]


Я не считаю себя самым умным. Просто мои решения по эффективности (сумма критериев) оказывались обычно лучше чужих. Никто не мог предложить лучше.


 
Jeer ©   (2008-12-30 17:00) [75]


> Городской Шаман   (30.12.08 16:52) [74]
>
>
> > MsGuns ©   (30.12.08 16:49) [73]
>
>
> Я не считаю себя самым умным. Просто мои решения по эффективности
> (сумма критериев)


Шо ?
Неужели с яслей ?

А как ты разобрался с родителями, когда еще.. ну сам понял/


 
вернулся из ссылки   (2008-12-31 00:45) [76]

выскажусь.

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

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

в качестве примера - я нахожу в своем проекте прикладные вещи, которые написал еще в середине 90х, и они служили верой и правдой, хотя в них явно были ошибки граничных (практически невозможных в практике) случаев. а время прошло 12 лет - нареканий не слышал.

тут, видимо, некая середина должна быть.

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


 
matt ©   (2008-12-31 12:05) [77]

"Быстро, дешево, хорошо. Выберете два из трех"  (с) как часто говорит Игорь Шевченко...
и не всякий руководитель делает правильное решение...


 
jack128_   (2008-12-31 12:29) [78]

Удалено модератором


 
Kerk ©   (2008-12-31 12:57) [79]

Удалено модератором


 
Jeer ©   (2008-12-31 13:19) [80]


> Kerk ©   (31.12.08 12:57) [79]


Достаточно последнего, все остальное - подмножество :)



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

Текущий архив: 2009.03.01;
Скачать: CL | DM;

Наверх




Память: 0.72 MB
Время: 0.006 c
2-1231995906
b@v
2009-01-15 08:05
2009.03.01
Вопрос по DBGrid


15-1230473367
Кое кто
2008-12-28 17:09
2009.03.01
Как учить английские слова?


6-1199709224
maxistent
2008-01-07 15:33
2009.03.01
Принудительное "обновление" TServerSocket...


2-1232023261
Гость
2009-01-15 15:41
2009.03.01
Unit not found: System.pas .


2-1231925230
Б
2009-01-14 12:27
2009.03.01
Что значит вывести растр в режиме <B>XOR</B>?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский