Re: Велосипеды и эффективность решений
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 25.10.05 23:04
Оценка: 60 (5) +1
Здравствуйте, gear nuke, Вы писали:

GN>Есть ли какие-то методики, позволяющие оценить необходимость и оправданность изобретения нового велосипеда?


GN>Скажем, есть задача А. Для её решения можно сделать Б, В и Г. Или Б, Д и Е. Как определить, что какая-то буква должна быть велосипедом, а другие — нет?

GN>Вариант: Б, В и Г — не велосипеды, потому что все так делают — не подходит, мы не попадём в 5%.
GN>Вариант: сначала делаем, а потом смотрим профайлером — не подходит, без учета необходимости велосипеда возможно были промахи в архитектуре.
GN>Вариант: 2 месяца чесал затылок, потом во сне увидел что нужно делать велосипед, и надо же (!) оказался прав — подходит, но на методику не тянет .

Мне кажется, что ключевой момент здесь -- это "2 месяца чесал затылок". На самом деле важно, что же дает возможность два месяца тратить время на это занятие. Какие условия позволяют делать столь длительные паузы в работе? Что заставляет человека думать эти два месяца, а не поддаться искушению: "чего тут думать, трясти нужно"? Откуда берется уверенность, что по прошествии времени появится достойный результат?

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

О велосипедах

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

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

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

Например, организуется взаимодействие двух процессов через IPC по какому-то протоколу. Если предлагается подключить их по TCP/IP и обмениваться PDU с самописной структурой (первые три байтика вот такие, следующие пять байтиков вот такие, дальше идет еще что-то), то с очень высокой степенью вероятности речь идет о велосипеде (даже если процессы запускаются в ограниченных по ресурсам встраиваемых системах, все равно есть ASN1 BER или даже PER, который уже давно используется в таких условиях).

Или если кто-то реализует собственную обработку регулярных выражений. Или предлагает собственный алгоритм подсчета контрольных сумм вместо CRC32 или Alder32. Или пишет собственную реализацию криптоалгоритма RSA. Или делает еще одну GUI-библиотеку. Или придумывает еще один формат конфигурационных файлов. Или реализует еще один текстовый редактор...

Заключение о степени "плохости" велосипеда делается априори, исходя из собственного опыта. Фокус в том, что наш опыт часто оказывается прав. Например, создание текстового редактора сейчас -- весьма авантюрная задача (имеется в виду именно standalone редактор, а не text-edit компонент для встраивания в другие приложения, хотя и с этим не все очевидно). Тем не менее, текстовые редакторы плодятся и размножаются, даже находят своих поклонников и соразработчиков.

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

А то ведь можно и не заметить, что мейнстрим повернул именно из-за развития какого-то смешного велосипеда. Каким был, например, первый Apple. Или Windows 1.0. Или терминал удаленного доступа, склепанный на коленке финским студентом Л.Торвальдсом.
А еще кто-то прикрутил к компьютеру клавиатуру от печатной машинки. И кто-то заставил монитор отображать графику. А кто-то решил, что информацию на экране нужно объединять в прямоугольные области, окна. И перетаскивать окна с помощью мыши.
А кто-то заменил одну из труб в велосипедной раме на стальной трос. А еще кто-то решил отказаться от задней втулки в пользу магнитной подвески.

Конечно, это слишком громкие примеры. Но можно взять что-нибудь более приземленное. Например, Jam. Многие ли с ходу скажут, что это такое? А если сказать Boost.Build? Или вот многие знают, что такое Cons? Между тем, SCons гораздо более известен. Да и Ant из той же оперы. Или сейчас NAnt более известен?

Как-то не получается назвать приведенные выше примеры "велосипедами", не так ли? Конечно, они уже переросли эту стадию.

О велосипедостроении

В контексте данной темы программистов можно разделить на две категории -- те которые хотят изобретать велосипеды, и те кто не хотят это делать. Вторая категория здесь не расматривается. Для тех же, кто хочет изобретать велосипеды важен вопрос -- позвляют ли им заниматься велосипедостроением на работе или нет.

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

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

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

Например, разработка SCADA системы с нуля может затянуться на несколько лет. Даже при наличии увлеченного и продуктивного коллектива. А сроки реализации АСУТП-проектов под ключ -- всего несколько месяцев. Сервер РСУБД может разрабатываться десятилетия. Компилятор C++ -- столько же, и все равно не будет удовлетворять стандарту.

Хорошо, если повезет попасть в команию, делающую ставку на какой-то иновационный продукт. Да еще на ранней стадии, на стадии велосипеда. Да еще, если этот продукт является для компании центральным, приоритетным. Да еще если тебе дается карт-бланш. Есть где развернуться. За казенный счет.

Часто ли так бывает? Мне представляется, что нет. Поэтому мне и кажется, что велосипедостроение -- это, в основном, полуподпольное занятие. Затерялся где-то программист (от начальства, подчиненных или жены), урвал несколько свободных часов для собственного велосипедика, написал еще несколько строчек. И так изо дня в день. До тех пор, пока что-нибудь работающее не появилось. А дальше уже как карта ляжет. Повезет, перерастет проект стадию велосипеда -- один расклад. Нет -- ну тут уж от велосипедостроителя зависит.

О велосипедостроителях

Собственно, а из-за чего все это происходит? Да кто ж его знает. Я могу говорить только за себя.

Может быть "шило в заднице". Неуемное желание делать что-нибудь. Это необходимо. Ведь чем иначе можно объяснить 10-12-ти часовые рабочие смены в течении долгих недель, а иногда и месяцев?

Может быть я смотрю на окружающие вещи по другому. Кто-то видит make и спрашивает себя: "Как в Makefile описать мой проект?". А я вижу make и думаю: "Что за корявство, как мой проект вообще этом Makefile описать можно?". Но здесь важен еще и следующий шаг (в отличии от двух главных интеллигентских вопросов "Что делать?" и "Кто виноват?") -- я умудряюсь сказать: "Описание моего проекта должно выглядеть вот так". Плохо ли будет выглядеть это описание или нет, поймет ли его кто-то кроме меня, это уже совсем другое дело. Главное, что я могу придумать способ описания, который удобен для меня. И мне нравится процесс придумывания.

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

А еще я думаю, что нужно очень сильно любить результаты своего труда. Настолько, чтобы продолжать вкладываться в свою поделку снова и снова. Изо дня в день. Из месяца в месяц. Из года в год. Определенно могу сказать, что проекты, за которые мне платили, гораздо менее дороги для меня, чем создаваемые мной велосипеды. Даже если в оплаченные разработки было вложенно гораздо больше времени и труда. Казалось бы, какая-то вшивая утилитка, очередная замена make, а греет душу так, что и не передашь.




gear nuke, возможно, я слишком ушел в высокие материи, может ты хотел о чем-то более приземленном поговорить. Извини. Я могу лишь сказать тебе то, что сказали в Матрице: "Нельзя чувствовать себя чуточку влюбленным". Либо ты чувствуешь необходимость в велосипеде и берешь на себя ответственность по его созданию и внедрению, либо нет. Если нет, то тебе никакие советы не помогут, имхо.

Так что еще раз прислушайся к заповеди Сальвадора Дали: "Художник -- рисуй!".
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: Велосипеды :)
От: McSeem2 США http://www.antigrain.com
Дата: 26.10.05 00:25
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Вы поняли неправильно.

GN>О каком иммено велосипеде шла речь, не знаю, но гугль подсказывает, что каком-то из этих:
GN>Ripper
GN>fold-tech
GN>farmboy

Я понял все правильно. Просто надо представить, что произойдет с этим велосипедом при наезде на кирпич на большой скорости. У традинионного — сломается передняя вилка и в общем с минимально возможными повреждениями для человека. В случае этого "тросика" складывается весь велосипед. И вероятность того, что какая-то железяка пропорет кишки — гораздо выше. Уверяю вас, что проехаться мордой по асфальту — это гораздо меньшее повреждение, чем быть с пропорытыми кишками. Ну не верю я в безопасность такого решения.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[8]: Велосипеды и эффективность решений
От: c-smile Канада http://terrainformatica.com
Дата: 26.10.05 02:36
Оценка: :)
Здравствуйте, eao197, Вы писали:

... начать разработку HTMLayout в рамках реализации конкретного проекта для конкретного заказчика....

На самом деле htmlayout это не велосипед. Потому как других движков такого типа (встраиваемый HTML/CSS renderer)
я чего-то на рынке не наблюдаю. Мабуть бильше дурних нэмае на майдане?

Кстати лисапет лисапетом а с нового года уже наверное начну набирать разаработчиков на проект.
Пора делать очередной скажем так броузер , вот это будет лисапед. Хотя...

Вообще смотрю я на свой engine, на Максов AGG, если бы наверное нам кто-то сейчас сказал —
типа давай забодяжим нечто подобное — послали бы. Хотя...
Re[2]: Советы 5), 6) и 7)
От: c-smile Канада http://terrainformatica.com
Дата: 26.10.05 02:51
Оценка: 14 (1) +1 :)
Здравствуйте, c-smile, Вы писали:

5) Проект должен быть сделан за 9 месяцев максимум. Как минимум — ядро. И не важно — работаешь ли ты над ним
по ночам "в свободное от работы время" или full time.

6) Серьезный проект "выходит на редан" 2 года минимум. Правила игры на рынке, нужно быть к этому готовым.

7) Делая свой проект ты всегда выигрываешь. Наличие проекта (любого большого или маленького — не важно) отличает тебя от кодера.

Короче, как сказал Сальватор Eao: "Живописцы — живописайте!"
Re[4]: Велосипеды :)
От: Skipy Rich Россия  
Дата: 26.10.05 03:19
Оценка:
Здравствуйте, McSeem2, Вы писали:

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


[offtop]
Попробуйте на листочке расписать векторы сил, действующих на раму велосипеда в различных ситуациях...
[/offtop]
[offtop^2]
За 15 лет практически жизни на велосипеде падал только один раз, и то не на своем агрегате с плохо закрепленным рулем.
[/offtop^2]

...добивая ногами психиатра: "Это кто нервный?! Это я нервный?!!"
fb2k: silent
Re[9]: Велосипеды и эффективность решений
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 26.10.05 04:56
Оценка: 10 (1) :)
Здравствуйте, c-smile, Вы писали:

CS>Вообще смотрю я на свой engine, на Максов AGG, если бы наверное нам кто-то сейчас сказал -

CS>типа давай забодяжим нечто подобное — послали бы. Хотя...

Если бы мне тоже самое сейчас сказали про мою ObjESSty... Хотя...

... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: Советы 5), 6) и 7)
От: gear nuke  
Дата: 26.10.05 05:26
Оценка: :)
Здравствуйте, c-smile, Вы писали:

CS>Короче, как сказал Сальватор Eao: "Живописцы — живописайте!"


Он так же неоднократно повторял про "нюх". А Вы отвечаете на вопрос, который я ещё не задавал . Думаю, тут не обошлось без способности к эзотерическому получению информации . Это вселяет уверенность, что моя информация окажется тоже верной .

P.S. ответы 1..7 я в общем-то знал, имеется ввиду другой, более глобальный ответ между строк .
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[5]: Велосипеды :)
От: McSeem2 США http://www.antigrain.com
Дата: 26.10.05 18:02
Оценка:
Здравствуйте, Skipy Rich, Вы писали:

SR>[offtop]

SR>Попробуйте на листочке расписать векторы сил, действующих на раму велосипеда в различных ситуациях...
SR>[/offtop]

Я был неправ в своем предположении о замене верхней трубы тросиком. Конечно же, передняя часть рамы — и она действительно работает на растяжение при обычной езде. Но вот только при наезде на препятствие — нет жесткости. В этом случае, как ни крути, "тросик" должен работать на сжатие. Треугольник — фигура жесткая и это много чего дает в плане безопасности.

SR>[offtop^2]

SR>За 15 лет практически жизни на велосипеде падал только один раз, и то не на своем агрегате с плохо закрепленным рулем.
SR>[/offtop^2]

А я в детстве как только не летал. Как жив остался — до сих пор удивляюсь. Полностью убил три велосипеда производства Советского Союза.
Самая хохма была, когда я однажды решил форсировать в деревне большую лужу на грунтовой дороге. Переднее колесо завязло в глине и я упал. А на скамейке сидел мужик и наблюдал за этой картиной. Рассказывал потом — разгоняется, влетает в лужу и красиво летит через руль, плашмя в лужу. Когда фонтан грязной воды угомонился, смотрю — из лужи высовывается голова и ручка от велосипеда. Голова с недоумением лупает глазами, потом начинает реветь благим матом.

При таком экстриме велосипед с тросиком точно сложится. Моему же не было ничего, не считая переборки, промывания и смазывания всех узлов.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[6]: Велосипеды :)
От: gear nuke  
Дата: 27.10.05 00:26
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Конечно же, передняя часть рамы — и она действительно работает на растяжение при обычной езде. Но вот только при наезде на препятствие — нет жесткости. В этом случае, как ни крути, "тросик" должен работать на сжатие. Треугольник — фигура жесткая и это много чего дает в плане безопасности.


Кстати, вспомните советские велосипеда типа Салют/Скиф или Кама. Там как раз была оставлена нижняя труба . У знакомого рама со временем изогнулась заметно.

MS>При таком экстриме велосипед с тросиком точно сложится.


Ну так сломать всё что угодно можно. Но дело не в этом. Треккерные велосипеды расчитаны на сильные ударные нагрузки, наверняка и краш тесты проходят соответствующие. И сделаны они не из мягкой дешёвой стали, как те же советские, а из сплавов, прочность которых должна быть солидной. Диаматр трубы тоже многое даёт. В общем, я думаю, они не складываются. К тому же, верхняя труба там не горизонтально расположена, а хитро под углом — видимо, для того, что бы тросик даже при въезде в стену на растяжение работал.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[6]: Велосипеды :)
От: c-smile Канада http://terrainformatica.com
Дата: 27.10.05 02:13
Оценка:
Здравствуйте, McSeem2, Вы писали:

SR>>[offtop]

SR>>Попробуйте на листочке расписать векторы сил, действующих на раму велосипеда в различных ситуациях...
SR>>[/offtop]

MS>Я был неправ в своем предположении о замене верхней трубы тросиком. Конечно же, передняя часть рамы — и она действительно работает на растяжение при обычной езде. Но вот только при наезде на препятствие — нет жесткости. В этом случае, как ни крути, "тросик" должен работать на сжатие. Треугольник — фигура жесткая и это много чего дает в плане безопасности.


Макс ты опять не прав
Смотри вот лисапед (T — руль)

Г          T
|----------|
|\        /|
  \      /  
   \    /  <- вот это работает только на растяжение
    \  /    
-----\/
  (педали)


А вот лисапет великого Леонардо (что-то около 1470 года)
Вернее одного из его студентов.



Продуктивный был мужик
Re[7]: Велосипеды :)
От: McSeem2 США http://www.antigrain.com
Дата: 27.10.05 03:59
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Макс ты опять не прав

CS>Смотри вот лисапед (T — руль)

CS>Г          T
CS>|----------|
CS>|\        /|
CS>  \      /  
CS>   \    /  <- вот это работает только на растяжение
CS>    \  /    
CS>-----\/
CS>  (педали)


Продолжение линии "T" вниз — это передняя вилка, заканчивающаяся колесом. При наезде на препятствие что произойдет?

CS>А вот лисапет великого Леонардо (что-то около 1470 года)

CS>Вернее одного из его студентов.



CS>Продуктивный был мужик


Продуктивный. Левая картинка — весьма эротична. Доктор, да вы маньяк!
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[8]: Велосипеды :)
От: c-smile Канада http://terrainformatica.com
Дата: 27.10.05 04:03
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Здравствуйте, c-smile, Вы писали:


CS>>Макс ты опять не прав

CS>>Смотри вот лисапед (T — руль)

MS>
CS>>Г          T
CS>>|----------|
CS>>|\        /|
CS>>  \      /  
CS>>   \    /  <- вот это работает только на растяжение
CS>>    \  /    
CS>>-----\/
CS>>  (педали) 
MS>


MS>Продолжение линии "T" вниз — это передняя вилка, заканчивающаяся колесом. При наезде на препятствие что произойдет?


А что происходит сейчас?
Хинт: две трубы на руле сходятся в одну точку (плюс/минус) — ось рычага.


CS>>А вот лисапет великого Леонардо (что-то около 1470 года)

CS>>Вернее одного из его студентов.

CS>>Продуктивный был мужик


MS>Продуктивный. Левая картинка — весьма эротична. Доктор, да вы маньяк!


Это не я, это Леонардо
Re[9]: Велосипеды :)
От: McSeem2 США http://www.antigrain.com
Дата: 27.10.05 05:16
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>А что происходит сейчас?

CS>Хинт: две трубы на руле сходятся в одну точку (плюс/минус) — ось рычага.

Не совсем. Нижняя труба в "нормальном" велосипеде приварена несколько ниже и она как раз защищает всю конструкцию от передних нагрузок. Да, теоретически это уже не треугольник, а трапеция. Но за счет большой жесткости "патрона" передней вилки, мы можем смело считать это "слегка обрезанным треугольником". Там две точки крепления. А в случае с нижним тросиком — точка крепления одна. И это очень слабое звено.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.