Главная страница
    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.64 MB
Время: 0.008 c
2-1231968156
Evgengold
2009-01-15 00:22
2009.03.01
escapecommfunction и работа com портом


2-1232317022
dreamse
2009-01-19 01:17
2009.03.01
Смена строки в генераторе отчетов


15-1230897293
Nic
2009-01-02 14:54
2009.03.01
Антивирусный марш


15-1231240044
Илья_
2009-01-06 14:07
2009.03.01
рукописный кириллический шрифт как в школьных учебниках


15-1230597130
Илья Корстин
2008-12-30 03:32
2009.03.01
"Спрятать" область диска или пометить как неиспользуемую





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