пятница, 11 июня 2010 г.

[prog.flame] Свежие высказывания Торвальдса о C++ навели на мысли о причинах маргинальности Lisp-а и Haskell-я

Ув.тов.z00n поделился ссылкой на свежую критику языка C++ от Линуса Торвальдса. Вкратце, Торвальдс говорит вот о чем (ниже идет пересказ того, что я понял):

Производительность разработчика определяется не только количеством строк кода. Производительность так же сильно зависит и от коммуникаций между разработчиками. Чем больше нужно общения, тем хуже. Лучше всего, когда коммуникаций нет вообще. Но для этого нужно, чтобы разработчики следовали определенной культуре разработки. В разработке ядра Linux такая культура сформировалась не в последнюю очередь из-за простоты языка C. Код на C легко читать, в нем нет неявных зависимостей от “контекста”. Если человек видит вызов sctp_connect(), он сразу понимает, о чем идет речь. Тогда как обращение к connect() в C++ном коде может означать все, что угодно. Этим-то C++ и плох. Если кто-то находится “в теме”, то в C++ном коде ему будет разобраться несложно. Но вот всем остальным на это потребуется гораздо больше времени и сил для того, чтобы сначала разобраться с контекстом, а затем уже с самим кодом. Плюс к вышеперечисленному разработка ядра – это очень специфическая вещь, для которой C является очень хорошим инструментом. Но это вовсе не значит, что C должен использоваться везде и всюду без разбору.

Во-первых, меня в очередной раз поразило, насколько разумные вещи говорят многие заслуженные программисты (Торвальдс, Страуструп (не смотря на то, что многим стиль его речи не нравится), Кнут, Вирт и др.).

Во-вторых, эти слова, на мой взгляд, очень хорошо описывают не только то, почему C++ слабо представлен в Linux-овом ядре. Но и почему, например, Lisp не завоевал весь мир. Слишком сильная привязка к контексту. Один разработчик напишет себе на Lisp-е собственный DSL, а другому нужно будет сначала разобраться с этим DSL, а уже потом с конкретным кодом.

Этим же, имхо, определяется и успех Java – язык таков, что все пишут однотипный код. Посему чужой код на Java понять проще, чем чужой код на C++.

Этим же, имхо, определяется и то, почему всякие Haskell-и и OCaml-ы пока не захватили весь мир: хардкорные функциональщики не задумываются о читабельности своего кода. Желающие могут, например, посмотреть на реализацию Data.Tree – обилие однобуквенных идентификаторов и операторов непривычного для обычного программиста вида (<$>, <|, |>, :<).

Вот кто захочет придти на проект, который развивался в течении 5-7 лет средней руки программистами, в условиях меняющихся требований, цейтнотов, исправленных на скорую руку просчетов, с кучей workaround-ов для сторонних компонентов, исходник которого будет представлять из себя плохозакомментированную многоэтажную математическую формулу?

четверг, 10 июня 2010 г.

[prog] Novell Pulse – отличный success story для Scala

Компания Novell анонсировала свою новую разработку – Novell Pulse. Это нечто для совместной коллективной работы, оно объединяет в себе почту, обмен мгновенными сообщениями, совместное редактирование документов, поддержка Google Wave. В общем, какой-то супер-пупер комбайн для Ынтырпрайза. Но суть не в этом.

Гораздо интереснее то, что весь фронт-энд (веб-приложение) для Novell Pulse был разработан на Scala с использованием вэб-фреймворка Lift. Вот это действительно внушаить. Scala потихоньку обрастает реальными проектами. А Novell Pulse чуть ли не самый громкий из них.

Но меня в данном случае больше интересует Mono. Как я понял, в Pulse фронт-энд на Scala, бак-энд, по большей части, на Java плюс, местами, Scala. Лишь какая часть административных утилит на C# (или еще на C#, поскольку разработчик высказался так: “There are some administrative tools still written in C#”).

Так почему Scala и JVM, а не C# и Mono?

Я, конечно, понимаю, что Novell – это большая компания, в которой одна команда может работать совершенно независимо от другой команды. Но все-таки, если уж Novell серьезно инвестирует в Mono, то как-то странно выглядит выпуск нового продукта на конкурирующей технологии. Ну это как если бы Sun пару лет назад вдруг выбрала для своей новой разработки не Java, а C#.

среда, 9 июня 2010 г.

[prog.flame] Как прослыть никчемным программистом в моих глазах

Например, высказаться вот так (выделение жирным мое):

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

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

[life.history] Правители тоже люди или “а вот водка и коньяк были выпиты в пути”

Люди масштаба Сталина, Черчилля, Рузвельта не воспринимаются как обычные люди. Слишком уж велики дела и проблемы, слишком уж важны их решения. Тем интереснее читать исторические байки о них. Вроде того, что пишет главный маршал авиации А.Е.Голованов в своих мемуарах “Дальняя бомбардировочная…”:

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

А дальше еще круче:

Сколь велико было пристрастие британского премьера к нашим спиртным напиткам, можно судить и по тому, что посланные Сталиным через Черчилля различные подарки Рузвельту — черная икра, балык, рыба — были доставлены в целости, а вот водка и коньяк были выпиты в пути, о чем сам Черчилль и сообщил Сталину, присовокупив свои извинения...

Блин, представляю себе эту картину: многочасовый перелет из Москвы в Лондон над оккупированной Германией территорией, собственные запасы спиртного уже выпиты.
-- Наливай еще!
-- Прошу прощения, сэр, но больше нечего.
-- Что, вообще все выпили?
-- Да, сэр.
-- И подарок Сталина?
-- Да, сэр, свой подарок вы уже выпили.
-- Что значит “свой”? Что, у нас есть еще чей-то?
-- Да, сэр, мы везем подарок Рузвельту.
-- Ну так открывай его и наливай!
-- Но сэр…
-- Открывай, говорю, ща законы военного времени, дипломатические правила на хер! Перед Рузвельтом и Сталиным я потом извинюсь, если долетим. Наливай, говорю!

[prog.thought] По-моему, это может убить Web-приложения

Одним из главных достоинств Web-приложений всегда называли их централизованное обновление. Выкатили новую версию на сервере и вуаля – у всех пользователей сразу все обновилось. И пользователям, вроде как удобно: без шума, без пыли и лишних хлопот.

А уж про разработчиков и говорить не приходится. Куда сложнее обновлять серверную часть клиент-серверного ПО, с автономными, самостоятельными клиентами (особенно когда эти клиенты продаются за хорошие деньги). Сколько усилий нужно приложить, чтобы совместимость со старыми версиями клиентов сохранить. Сколько нужно пользователей уговаривать на то, чтобы они перешли на новые версии клиентов… А тут раз! Поменял одну настройку на сервере и все пользователи одним махом на новой версии оказались. Кому-то что-то не нравится? Ну так пройдите в сад, дорогой товарищ, ваши привычки и пристрастия никого не интересуют :/

Собственно, все это было бы хорошо, если бы не одна уже далеко не новая тенденция: стабильных новых версий софта не бывает. Это когда-то давно можно было взять Turbo C 2.0 и пользоваться им годами, не встретив ни одной ошибки. Сегодня же стремно переходить на самую свежую версию Visual Studio, не дождавшись первого сервис-пака. Не говоря уже про новые версии Opera :/

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

Вот, скажем, англоязычная Wikipedia сменила свой дизайн и перенесла строку поиска в другое место. Лично мне очень неудобно. Предыдущая версия была хоть и не такой гламурненькой, зато искать с ее помощью было проще. Но альтернативы нет, приходится пользоваться тем, что дают. Хотя осадочек-то остался. Или, вот люди жалуются на нововведения от Google. Тенденция, однако…

Так вот, в связи с тем, что качество ширпотребного ПО в обозримом будущем улучшаться не будет, пользователям Web-приложений все чаще и чаще придется материть Web-разработчиков и жалеть о том, что у приложений нет автономных клиентов. Чтобы на привычной тебе версии клиента можно было просидеть несколько лет не обращая внимания на то, что где-то есть новые версии, с красочными свистелками и перделками… И тогда (а может уже сейчас?) главное достоинство Web-приложений станет их главным недостатком.

вторник, 8 июня 2010 г.

[prog] Разработчики из MIPS-а слегка ускорили Java приложения под Dalvik VM – всего в пять раз :)

С удивлением для себя узнал, что Java приложения в Android-е работают на собственной (т.е. Google-овской) виртуальной машине – Dalvik VM. Главное отличие этой виртуальной машины от традиционных в том, что ее работа основана не на стеке (что является родным для Java от Sun), а на регистрах. Соответственно, Dalvik VM использует на Sun-овский байт-код для Java, а свой собственный: готовые class-файлы обрабатываются специальным инструментом и на выходе получаются dex-файлы. Это и есть байт код для Dalvik VM.

Но суть, собственно, не в этом. Дело в том, что недавно компания MIPS (один из крупнейших производителей микропроцессоров и прочего) анонсировала собственный вариант Dalvik VM под названием Dalvik Turbo VM. Этот Dalvik Turbo заточен под MIPS. И обеспечивает, по словам MIPS-овцев, ускорение в пять раз для т.н. real-world (надо понимать самых обычных, повседневных) Java-приложений.

Сдается мне, дело тут в том, что у исходной Dalvik VM не было JIT-компилятора для MIPS-ов, а был только интерпретатор байт-кода (что не удивительно, если учесть, что я слышу о продвижении Android-ов только на ARM-ах и, местами, на x86). Посему Java на Dalvik VM и MIPS-ах тормозила. MIPS-овцам это не понравилось и JIT для MIPS-ов они прикрутили. Получившемуся же результату дали громкое имя – Dalvik Turbo VM.

Зацепила меня эта новость. Во-первых, она холиварная ;) Отличная демонстрация к спорам о том, что Java не тормозит :)) Да, на некоторых платформах теперь уже не тормозит :)))

Во-вторых, проникновение Android-а на разные платформы располагает к тому, чтобы запастись попкорном и понаблюдать, что же будет дальше. Интересно и то, как Android будет соперничать с MS-овскими и другими платформами (вот, скажем, HP после покупки Palm-а может вывести на рынок производное от webOS). И то, как Java (JVM) будет бороться с .NET-ом. Вроде как Java (JVM) уже старая, а .NET пока молод и активно обрастает новыми плюшками. Но Java есть везде. И ее активно поддерживают. Тот же MIPS написал Dalvik Turbo именно для Java, а не для какого-нибудь Mono.

В-третьих, сдается мне, что мобильные платформы становятся очередным мейнстримом на моем трудовом веку. Сначала были десктопы под MS-DOS, OS/2 и Windows и программирование для персоналок. Потом пришло Web-программирование. Теперь вот приходят мобильные платформы (iPhone/iPad, Android-ы, MeeGo и пр.). Что не может не радовать, т.к. Web-программирование, на мой взгляд – это то еще занятие ;)

PS. Новость была найдена в рассказе о Linux-овых новинках на Computex 2010 на OpenNET.ru. Рекомендую туда заглянуть, там есть интересные новости и грядущих iPad killer-ах планшетах от самых разных производителей.

[prog] Серия интервью “The A-Z of Programming Languages”

В прошлом году в журнале http://www.computerworld.com.au была начата публикация серии интервью “The A-Z of Programming Languages” – в ее рамках авторы или принимавшие непосредственное участие в разработках языка люди рассказывали о том, как язык возник, что было интересного, что он могут посоветовать начинающим программистам и много чего еще. Ранее я уже пытался давать оглавление этой серии. Сейчас обнаружил еще парочку новых интервью и, чтобы не поднимать прошлогоднюю заметку, сделаю новое оглавление (упорядоченное по алфавиту, для простоты):

Насколько я могу судить, за прошедшее время появились рассказы о Coldfusion и MATLAB.

понедельник, 7 июня 2010 г.

[work] По поводу biggest working problems

Навеяно темой Biggest working problems. Читаешь и завидуешь молодости, задору и энтузиазму :(

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

Увы, чем дальше в лес, тем меньше все это цепляет. Может быть слишком долго на одном месте работаю, может задач из категории “интересных” не попадается (все сплошняком из категории “нужных”), может забабахало все, может возраст…

Но самое сложное – это довести себя до состояния “Я хочу сделать XYZ”, поскольку вот именно XYZ делать ну совершенно не хочется :)

воскресенье, 6 июня 2010 г.

[life.photo] Пейзажи Тамары Вербовой

Сегодня в рубрике “Знакомство с фотомастером” пейзажи Тамары Вербовой. На мой взгляд, в некоторых их них зафиксирована тонкая грань между спокойствием и чем-то приближающимся (шквалом или дождем, или грозой). Какой-то удивительный миг между тем что есть сейчас и тем, что вот-вот все изменится.

Ветреный декабрь
«Ветреный декабрь»

Странник
«Странник»

Хаос
«Хаос»

Брод
«Брод»

Не воин..
«Не воин..»

Exit
«Exit»

B&W
«B&W»

***
«***»

***
«***»

***
«***»

/////
«/////»

***
«***»

***
«***»

***
«***»

Стожки
«Стожки»

Другие фотографии Тамары Вербовой можно посмотреть на photosight.ru и photoline.ru.