Текущий архив: 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