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

Вниз

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

 
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.66 MB
Время: 0.018 c
15-1230566025
Quart
2008-12-29 18:53
2009.03.01
Просветите студента-дипломника


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


2-1231968156
Evgengold
2009-01-15 00:22
2009.03.01
escapecommfunction и работа com портом


6-1198685585
Lamer666
2007-12-26 19:13
2009.03.01
Проблемы с подсчетом трафика!!!


15-1230469106
NailMan
2008-12-28 15:58
2009.03.01
Вопрос владельцам балонных пневматических пистолетов