Здравствуйте, McSeem2, Вы писали:
MS>Рискну возразить. Правда, учитывая некоторую свою специфику, которая заключается вот в чем. Мне платят деньги не за программный код и даже не за функциональность (точнее сказать не просто за функциональность). Мне платят деньги за нетривиальные и эффективные решения, алгоритмические, инженерные и дизайнерские. На том и стоим. И вот с этой моей позиции, так называмое "просто улучшение кода при той же функциональности" является абсурдом. Если требуется улучшать код, значит я схалтурил раньше. Мне крайне неприятно возвращаться к халтурному коду, поэтому я стараюсь халтурить как можно меньше. Так получается дешевле. Конечно же, на стадии экспериментов с алгоримом я пробую всякие-разные промежуточные решения, в том числе и простейшие и заведомо неэффективные. Но эти промежуточные решения никогда не доходят до стадии релиза.
Везука!!!! А я вот, не особо могу. То ли не так делали, то ли ударился в детсве.

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

Иногда в процессе работы, переписываю некоторые куски на которые через некоторое время взглянул с другой стороны. Иногда делаю сначало примерно, чтобы работало, а потом рефакторю чтобы эффективно работало и расширялось. Особенно если это касается как раз, для более менее нетривиальных алгоритмов которые реализуешь в первый раз. Они просто в голове и на бумаге не умещаются.
MS>Бывают случаи, когда действительно имеет смысл заменить начинку на более эффективную, но они крайне редки. Ну, типа сообразил, как можно сделать слегка эффективнее.
Это вопрос времени и денег. Которых всегда не хватает.
MS>А вот с интерфейсами, что внешними, что внутренними, все гораздо сложнее. Очень часто по началу весь дизайн является неочевидным, выясняется по ходу работы. Соответственно, приходится вносить изменения и улучшения. Я никогда не поверю в то, что все можно решить и узаконить на стадии проектирования. Не бывает такого, не только в программировании, но и вообще в любой инженерной деятельности. Конечно же, за исключением типовых решений (шаблонов проектирования) — там это возможно. Но во-первых, типовые решения актуальны как правило лишь для тривиальных задач, во-вторых, такие задачи и решения мне не интересны.
На любой итерации для компонента (который конечно может быть библиотекой) выделяю интерфейс. Даже если этим компонентом буду работать только я и он не входит ни в какую официальную документацию. Именно эта вещь максимально продумывается чтобы не было изменений(насчет изменений это конечно сказка, но максимально уменьшаю вероятность и количество будующих изменений). По возможности пишу unit-тесты под этот интерфейс. Это также помогает его продумать. Ну а дальше, если задача сложная, то я пишу как придется. Главное чтобы работало. Многое действительно получается сразу оптимально(опыт все таки сказывается), ну а многое через пень-колоду. Ну а дальше, уже решаю, может ли кто-то кроме меня достигнуть того-же уровня просветления как и я, и сможет понять всю гениальность моего замысла. В процентах 30 — сразу отвечу что нет. Тогда и начинается рефакторинг. И кстати, в этом процессе появляются мысли о которых я почему-то не домыслил до этого и исправляются тараканы которых и в лупу не заметишь.
(Блин, какой-то ХП получилось. Хотя к его апологетам себя не отношу).
Как, наверно, ты уже заметил, что внутренние интерфейсы я за интерфейсы не считаю. Однажды дошло до смешного, посмотрел две версии файла, тот который делал четыре года назад, и тот который работал в данное время. Практически кроме интерфейса(который был только дополнен), ничего общего не осталось.
MS>Резюмируя, могу сказать следующее. Писать код, который практически не требует улучшений, на порядок проще, чем дизайнить грамотные интерфейсы (внешние, внутренние — не важно).
Кому как. Мне например наоборот. Но это еще вопрос относительности, смотря что имеется ввиду под дизайнить грамотные интерфейсы.
MS>И если приходится существенно (и главное — постоянно) улучшать существующий код, значит что-то не ладно в датском королевстве.
MS>То есть, я не приемлю подход, при котором надо по-быстрому напедалить абы-как, а потом долго и нудно улучшать и переписывать.
Я бы рад бы, да вот не получается. Я неумный?
С уважением, Gleb.
... << RSDN@Home 1.1.4 beta 4 rev. 358>>