четверг, 28 апреля 2011 г.

Язык

Ничто так не ограничивает мысль программиста, как компилятор.
(С) точно не я.

С естественными языками относительно просто - просто надо обладать большим словарем (запасом). "Субъект-объект-отношение" и ваш ломанный итальянский поймут даже в Канаде. Грамматики знать не надо, ибо ломанная ваша понимать иногда языка всегда.

С языками программирования по-другому. Здесь все однозначно.

Если естественный языки пошли, по неоригинальной версии, от Вавилонской башни, то программные языки пошли от различных моделей вычислений.

Тьюринг породил имперосятину, Чёрч, Карри и Шейнфинкель породили функциональщину. Марков породил марковские алгорифмы. Из популярного другое малоизвестно (по крайне мере мне).

Сделаем небольшой оффтопик: меня, оказывается, можно считать "внуком" Маркова, ибо учитель одного из двух моих научруков и был Марков мл. Для справки, Марков мл. являлся зав. кафедрой мат. логики и теории алгоритмов на мехмате МГУ в 70-х. У меня есть какое-то врожденное уважение к этой кафедре :) . А все результаты Маркова в тервере и близких вещах относятся к Маркову ст.

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

С детства в нас формируют императивное мышление: скажи "мама", ложечку за папу, вымой руки и ложись спать. Выразить это декларативно понятное для ребенка затруднительно. Затем в школе будут показывать какую-нибудь процедурщину, так что к студенчеству в вас сидит закоренелый императивщик.

Функциональщина - нетипизированная лямбда, комбинаторы, типизация, лень, вывод типов, зависимые типы, куча абстракций для которых у меня пока не хватает мозга.

Рекурсия божественна.

Марковщина - выродилось в Рефал. Да, это не лямбда, но отнесем к функциональщине.
Каких-нибудь прологистов причислим к ним же. Побочная веточка, ибо близко.

Далее несколько слов о чистоте и нечистоте.

Чистых вещей очень мало. Если сложить две чистые вещи, то мы не получим чистую вещь. Поэтому есть с десяток чистых вещей, а все остальные десять тысяч языков - нечисть.

Что такое чистая имперосятина или функциональшина? Можно говорить лишь о степени фишек и чистоты. Про идеалы чистоты импреративщины как то сложно что-то сказать (это машина Тьюринга?), попробую высказаться про чистоту объектности.

Если не рассматривают пару пятен, то идеалом является smalltalk и self. Последний почти канул в реке, я лишь скачал/запустил образ машины и немного поигрался. С ST же можно полноценно играться, мне понравилось. Так вот - есть лишь понятие объекта, и ничего более. Даже Оккама с бритвой тоже нет. Объекту можем послать сообщение. Как я уже говорил, больше ничего нет. Просто, не так ли?

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

Исходный код - это объект. Его можно откомпилировать (послать сообщение), и запустить (послать сообщение). Классов нет - это тоже объекты (прототипная/акторная(?) модель, в js что-то такое же). Есть объект Boolean и еще два объекта True и False. Это все объекты. Нет даже циклов и условий - это все посылка сообщения.

Короче, можно поставить какой-нибудь dolphin ST и наслаждаться, наслаждаться и четыре раза.

Если взять любое г из ++/#/java и иже с ними, то там все сложнее и наслаждаться не хочется.

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

Элементы модульности/пакетности проникают и в ФП: какой-нибудь Typeclasses в haskell и какой-нибудь behavior в erlang можно рассматривать как интерфейсы. Проблема в том, что проникновение ФП в процедурщину меня все время толкает только на ха-ха.

А теперь главный философский вопрос: а зачем так много языков? Язык то на самом деле один, это та хрень, которая вертится у вас в голове. И если кто-то не сможет выразить эту мысль на любом языке программирования, то тут как минимум два варианта: или еще нет мысли, или все печально.

Конечно, нужны языки работающие на разных уровнях абстракции. В тех редких случаях, когда нужно выжать 10-20% скорости программы вам придется работать с чем-то низкоуровневым; с чем-то большим - то желательно типизированным; с чем-то маленьким - нетипизированным; но всегда хочется высокоуровневым.

Стоит сказать, что сейчас понятие язык слилось с понятием платформы/framework-a/среды_разработки/документирования/etc. И выбирать язык не приходится, приходится выбирать все остальное.

воскресенье, 24 апреля 2011 г.

Отложенный мармелад



Уже раза три за последние полгода натыкаюсь на одну и ту же вещь. Теперь, вроде, почти дошел до первоисточника.

Детям дает сладость/мармелад/шоколадку. И говорят, что если они сдержатся и не съедят ее в течение 15 минут, то они получат еще одну. Их оставляют наедине.

Проходит 10-20..50 лет, и те кто сдержался - тот успешен в жизни, а те кто наоборот - наоборот.

Независимо от пола/возраста/уровня интеллекта/национальности.

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

Это не значит, что надо бить детей, в случае если они не сдержались. Другой вопрос - воспитуемо ли это? И следующий нетривиальный вопрос: можно воспитать во взрослом состоянии, изменить(ся)?

И еще важный вопрос риска. Готовы ли рисковать?

Пусть вы очень упорно трудились в течение 5 лет и заработали миллион (мало) 5 миллионов рублей. И вы можете поставить все средства и удвоится. Или потерять все. Что бы вы стали делать?

ИМХО, категорический ответ "нет" так же ущербен как и категорическое "да". Правильный ответ должен быть во встречном вопросе "А какова вероятность? Возможные исходы." Ответ при отсутствии информации является главной ошибкой.

Тут во мне есть некоторое противоречие. С одной стороны я в школьные и студенческие годы трижды был в гипсе с ногой + 2-3 раза тоже серьезно (не без гипса, и тоже с ногой). Это довольно сильно выбивает из статистики.

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

А с третьей стороны - я слышал себя в звуковой записи, там было 18-20 минут непрерывного текста. И если бы я не знал себя и текст, то я бы просто офигел (на самом деле, и правду, чуток офигел). Я и не знал, что я могу так быстро говорить.

четверг, 21 апреля 2011 г.

Зачем?

Опять некоторая интроспектива... Таки зачем я сюда пишу. А зачем вообще люди пишут?

Ну, у некоторых, наверное, талант есть. А остальные, за исключением этих трех человек, зачем? Я - в остальных.

У меня есть такая особенность, что я не читаю того, что я пишу :) . В unix-ах этого легко добиться, можно разрешить писать, и запретить читать. Есть во мне что-то от unix-a.

Преследую чисто эгоистические основания. Около половины постов составляют "личные сопли", и я понимаю, что это никому не интересно (походу и рефлексивно тоже). Так зачем же?

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

Собственно, и этот пост прочитают человека полтора, максимум корень из трех.

Вот пройдет еще пятьдесят (или более) лет, будет откуда пару цитат на плиту кинуть (блог и некролог посимвольно не очень далекие слова). Не из СМС/твиттера же.

Эпик фэйл: постом "зачем же я пишу?" так и не суметь объяснить, "зачем же я пишу". Опять что-то из Гёделя.

понедельник, 18 апреля 2011 г.

Квадратная абстракция

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

Или что-то похожее. Не хватило абстракции, и пока набираюсь сил на следующую попытку.

Алфавит конечен, но каждый следующий бор строится на основе предыдущего, где в качестве узла выступает некоторый путь в боре. И так на 3-4-5-6 и более уровней. Даже не квадрат.

Какой же чай курил Рамануджан? И мне 100 гр.

понедельник, 11 апреля 2011 г.

Как женщина

Потерял 15 минут. Искал в гардеробе летние брюки, отвалился по таймуату.

Ладно бы гардероб был большой. Не люблю я новые вещи/одежды. Оказалось 4 белые рубашки с коротким рукавом, штук 15 футболок (все, кроме 2-х, однотонные), 2 свитера (основной и запасной), летний и зимний комплект брюк, пара шорт, нижнее и носки.

*Риторически* Куда можно было засунуть брюки?

суббота, 9 апреля 2011 г.

Кто кого порождает

В интернете полно рекламы про увеличение размера груди или длины полового члена.

Но совершенно нет рекламы по увеличению мозга.

Видимо, совсем нет спроса.