exceed_er: (Default)
exceeder ([personal profile] exceed_er) wrote2005-06-05 05:49 pm
Entry tags:

программерско-маркетинговое (война ППИ | API war)

С удовольствием прочитал вот эту статью: http://www.joelonsoftware.com/articles/APIWar.html
(кстати, ППИ = прикладной программный интерфейс = API. Не знаю, пользуются ли этой аббревиатурой еще, вообще не завидую переводчикам программерских материалов)

Хотя статья обьясняет, почему и как Майкрософт проиграл одну весьма важную для него войну, она отнюдь не анти-майкрософт. Скорее она выражает взвешенную точку зрения программиста, который выбирает инструменты для программы, которой работать следующие 5-10 лет. Я не нашел места, где бы я был не согласен с автором. Плюс, отличное чувство юмора и много мест, где я ржал.

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

"В начале 90х многие из нас думали, что большая битва будет между процедурным и ОО-программированием, и мы думали что ОО резко улучшит продуктивность. Я тоже так думал. Многие люди все еще так думают. Оказалось, что мы не правы. ООП - очень удобный прикол, но это не то что было обещано. Настоящее значительное улучшение продуктивности исходит от языков, которые автоматически управляют памятью для вас." (VB, Java, C#, Lisp..)

Из статьи становится предельно ясно, почему Intenet Explorer уже несколько лет не развивается (и не будет), что происходит с C# и почему гораздо больше программ на C# для веба а компании не спешат переводить свои существующие программы на .НЕТ.

В конце статьи есть немного рекламы софта, который автор разрабатывал, и я уже совсем ржал на вот этом скриншоте:
http://www.fogcreek.com/FogBUGZ/40tour/06.html
Он в деталях показывает путь ошибки, найденной клиентом через менеджеров и программеров в новый релиз.

[identity profile] juan-gandhi.livejournal.com 2005-06-06 03:11 am (UTC)(link)
Ваше поколение вымирает. Хотите выжить - забудьте о том, сколько бит в мантиссе, сколько тактов занимает сложение, и как выглядит заголовок блока, захваченного malloc. Как забыли уже люди устройство триггера и феррит-транзисторной ячейки.

[identity profile] exceeder.livejournal.com 2005-06-06 03:26 am (UTC)(link)
В словах этих, конечно же, есть истина. Однако довелось мне на днях оптимизировать достаточно критичную структуру данных. На Джаве. Надо было написать наиболее быстрый и оптимальный по памяти контейнер для пар строка-обьект, причем таких пар не больше 20 на контейнер. Как отправная точка брался HashMap. Так вот, в первой паре тестов быстрее оказывался тот контейнер, который тестировался первым по ходу программы :) Пришлось вспоминать, как устроены процессорные кэши и думать, как оно вообще где выполняется. Ну и также пришлось вспоминать воркшоп с разработчиками GC, чтобы написать более-менее репрезентабельный тест всего цикла использования контейнеров, включая GC. Но, пожалуй, на этом уровне уже можно остановиться. Ибо знание ассемблера уже никак не помогает ничего отоптимизировать - даже самые крепкие уже согласились, что оптимизирующие компиляторы справляются лучше.

[identity profile] juan-gandhi.livejournal.com 2005-06-06 04:50 am (UTC)(link)
Пардон. Бенчмарк такого рода нужно сначала потренировать, этак 10 миллионов раз, на заданном участке кода, а потом уже начать мерять. Это же джава.

Вообще, в таком случае помогает (грустное) знание дебильного устройства двух вещей: хашмапа и хашкода строки.

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

Кстати, если 20 строк, и так уж критично, может быть, стоит попробовать trie (см Кнут, том 3).

А что за идея насчёт gc? От него, имхо, вообще лучше держаться подальше.

[identity profile] exceeder.livejournal.com 2005-06-06 02:19 pm (UTC)(link)
Не, trie не подойдут, я о них думал. Скорость хорошая, но память расходуется слишком сильно - одна буква и две ссылки на узел в дереве. Тут такое дело, что чем меньше расходовать памяти, тем больше влезет в кэш, а значит меньше I/O.
Из-за этого же не могу воспользоваться ХэшМеп напрямую - там десяток референсов хранится на внутренние transient структуры типа EntrySet, которые мне не нужны. Тут такое дело, что при 20 парах уже даже прямой перебор в массиве всего 80% проигрывает хэшмепу (миллион чтений из HM занимает секунду, а перебором из массива пар - 1.8 сек). А память экономится в 2 раза. У меня сейчас есть идея одна, если выгорит, напишу результаты.

[identity profile] level42.livejournal.com 2005-06-06 03:40 am (UTC)(link)
I know... :-( именно поэтому смотрю в сторону embedded или чего-нить подобного... вот Symbian OS, к примеру... ;-)

[identity profile] exceeder.livejournal.com 2005-06-06 03:44 am (UTC)(link)
А еще есть такое огромное поле деятельности, как адаптация виртуальных машин - под процессоры мобильников, под те же embedded системы. Грамотные системщики в этом направлении тоже ценятся и всегда будут.

[identity profile] level42.livejournal.com 2005-06-06 03:54 am (UTC)(link)
yup... :) но тем не менее, я слышал неоднократно что с тех пор как для blackberry стали все писать на Java, медленнее они стали значительно...
:-P
и никто меня не переубедит насчет эффективности... согласен, в 85% случаев оно не критично, но в остальных 15% без С никуда. а в С++ многое лишнее... вернее не лишнее, но многие вещи замедляют сильно. Inheritance,Virtual functions и прочий OOP-related junk.

[identity profile] msh.livejournal.com 2005-06-06 04:00 am (UTC)(link)
Inheritance вообще ничего не замедляет, ибо это просто концепция, а virtual functions в современном ABI замедляет на одно обращение к памяти.

really?

[identity profile] level42.livejournal.com 2005-06-06 04:08 am (UTC)(link)
Object Construction: Inheritance does increase the object construction overhead, as constructors for all the parent classes in the class hierarchy are invoked. There is the additional overhead of setting up vtable in the constructor.


Object Destruction: Inheritance does increase the object destruction overhead, as destructors for all the parent classes in the class hierarchy are invoked. There is the additional overhead of setting up vtable in the destructor. Virtual destructors also increase the overhead of object destruction.

Re: really?

[identity profile] msh.livejournal.com 2005-06-06 04:16 am (UTC)(link)
Really, really

Все равно включен объект или унаследован - конструктор и деструктор придется вызывать.

А overhead на создание vtable совершенно пренебрежимый на фоне создания объекта вообще.

Re: really?

[identity profile] level42.livejournal.com 2005-06-06 04:18 am (UTC)(link)
угу... вот и вопрос тогда - зачем они вообще нужны - объекты?...

Re: really?

[identity profile] msh.livejournal.com 2005-06-06 04:23 am (UTC)(link)
Это чрезмерно философский вопрос. Объекты - это одна из методик проектирования и программирования, сама по себе не good и не evil

:-)

[identity profile] level42.livejournal.com 2005-06-06 04:28 am (UTC)(link)
согласен.
я к тому что у меня всегда настольной книгой был Керниган и Ричи, а не Страуструп.
Естественно - это не лучше и не хуже. это просто как оно есть... :-)

Re: really?

[identity profile] juan-gandhi.livejournal.com 2005-06-06 04:52 am (UTC)(link)
В критичных кусках, имхо, ничего не надо ни создавать, ни разрушать. Пользоваться имеющимися. Имхо.

Re: really?

[identity profile] exceeder.livejournal.com 2005-06-06 04:57 am (UTC)(link)
Абсолютно правильно. Для этого и были придуманы object pools.

[identity profile] msh.livejournal.com 2005-06-06 03:58 am (UTC)(link)
Это ерунда. ВОТ, например, рядом со мной есть вакансия для человека, который знает про битики, байтики, заголовки блоков и телефонные протоколы 1968-го года. А для джавы - все в бангалоре. Пусть там выживают.

[identity profile] level42.livejournal.com 2005-06-06 04:10 am (UTC)(link)
а "рядом со мной" - это где? :-)

[identity profile] msh.livejournal.com 2005-06-06 04:17 am (UTC)(link)
В городке North York. А что?

[identity profile] level42.livejournal.com 2005-06-06 04:20 am (UTC)(link)
not much... it happened so that I'm looking for a job right now... :-)

[identity profile] juan-gandhi.livejournal.com 2005-06-06 04:55 am (UTC)(link)
Кроме вашей холодной торонтовщины и жаркого бангалора, есть ещё такие благословенные края, как силиконовая. Здесь вряд ли кто интересуется, как правильно имплементировать atdp.

Но, с другой стороны, верно: Знатоки Ядра тоже в почёте.

[identity profile] msh.livejournal.com 2005-06-06 05:01 am (UTC)(link)
Такой работы в Торонто как раз мало, а гораздо больше в Оттаве. А уж в SFBA просто таки ужасно больше чем и там и там.

Не знаю, правда, что такое atdp.

[identity profile] level42.livejournal.com 2005-06-06 05:14 am (UTC)(link)
одна проблема - в Оттаве делать ну совершенно нечего... город-призрак.