суббота, 24 марта 2018 г.

Почему функциональное программирование считают противоположностью ООП, а не дополнением?

Это перевод ответа Алана Кея на вопрос "Why is functional programming seen as the opposite of OOP rather than an addition to it?" на Quora.
В конце 50х Джон МакКарти стал всё сильнее интересоваться штукой, которую называл «Искуственный Интеллект». Он также занимался консалтингом, и благодаря этому он познакомился с SAGE air defense system: большой системой огромных компьютеров, подключенных к радарным станциям и соединенных между собой. У них был графический дисплей с указательным устройством.
Реакция Джона была «Такая штука будет в каждом американском доме». Он понял, что сеть компьютеров — это по сути «информационная коммунальная услуга» (как вода, газ и т.д.)., и что домашние терминалы могут предоставлять разные виды «информационных услуг». Эти идеи, наряду с другими, помогли ему убедить MIT делать “time-sharing” их больших машин.
Он также понял, что компьютерный мир 50х годов — машинный код и новый Фортран — не особо вязался с «обычными людьми в американских домах». Это заставило его написать научную работу в 1958 — “Programs With Common Sense” («Программы со здравым смыслом»), и предложить, что для пользовательского интерфейса необходим активный полу-интеллектуальный агент — “Advice Taker” — который бы взаимодействовал с пользователями на понятном им языке, мог учиться, получая советы, мог решать проблемы от лица пользователей и от своего лица, и так далее (MIT AI Memo 17).
Он задумался, как реализовать такого агента, главными механизмами которого были бы различные логические обобщения, включая те, что требуют действий. В то время потенциальных действий было немного. Среди них, например, «обработка списков» (“list processing”). Так что он решил изобрести язык, который бы использовался для создания агента Advice Taker (и других видов роботов). В более общем смысле, язык позволил бы выполнять символические вычисления наряду с уже существующими тогда численными операциями.
Джон был отличным математиком и логиком, и он хотел придумать «математическую теорию вычислимости» (“A Mathematical Theory of Computation”) чтобы хорошо скрепить старые и новые идеи.
Результатом стал LISP (“LISt Processing”). Я писал о его важности в других местах.
В то же время он думал о том, какие виды логики, математики и программирования (он считал их сильно связанными) могут быть использованы для робота в реальном мире.
Опуская детали: проблема была в at (robot, philadelphia) и at (robot, new york) — это не могло работать одновременно, но могло случиться «со временем». Это похоже на проблему современных языков программирования, где переменные могут быть перезаписаны (а иногда даже файлы). Грубо говоря, внося в контекст процессора понятие «время».
Деструктивные вычисления допускают состояние гонки (race conditions) и делают сложными рассуждения о коде и логике. Джон начал думать о модальной логике, но потом понял, что простое сохранение истории изменений и индексации их с помощью «псевдо-времени» (где «факты» сохраняют значения) может позволить функциональному и логическому вычислению работать. Все факты, являющиеся истинными в определенное время он назвал «ситуациями» — некое подобие «слоя», разрезающего мировые линии и истории. (McCarthy “Situations, Actions, and Causal Laws” Stanford, 1963 prompted by Marvin Minsky for “Symbolic Information Processing”)
Один из способов совладать с этой схемой: «логическое время» просто включается в ситуации, а «время процессора» (cpu time) не будет учитываться в вычислениях.
Опуская детали: эта идея не умерла, но и не попала в стандарты вычислительных систем того времени, и даже сегодняшнего дня. Актуальная на тот момент идея была такой: процессор работает как хочет и старается защититься семафорами и т.д. (У этого подхода есть проблемы с блокировкой системы и др., но этот слабый стиль все еще является основным сегодня).
Системы, которые частично или полностью использовали идеи Джона это Strachey’s CPL, Lucid, Simula и другие. Также взгляните на Dave Jefferson’s TimeWarp schemes, Reed’s NetOS, Lamport’s Paxos, the Croquet system и др.
Например, возьмем Strachey. В начале 60х они поняли, что хвостовая рекурсия в Lisp равносильна «циклу с одним одновременным функциональным присвоением». И такая реализация будет намного чище: вычисление следующих значений можно делать за раз.
Состояние гонки невозможно, так как правые части присвоений вычисляются используя старые значения переменных, и само присвоение делается чтобы предоставить новые значения для переменных за раз. (Циклические повторения и присвоения могут быть чистыми если поддерживать отдельные «временные зоны», и т.д.).
Большие системы использовали версии вместо перезаписи и атомарные транзакции чтобы избежать состояния гонки.
Вернёмся к МаКарти и — теперь — к объектам. Мы в Parc поняли, что реализовать максимум идей Джона вроде “situations” и “fluents” — это хорошая идея. Даже если истории не будут храниться очень долго.
К примеру, это позволит «реальным объектам» быть мировыми линиями их стабильных состояний, и они смогут дойти до своего следующего состояния в полностью функциональном стиле. Терминами Strachey, они будут «видеть себя» без состояния гонки на пути к следующей своей версии.
Это также было бы полезным для множественных представлений, которые мы начали использовать. Представления можно разрешать только для стабильных объектов (/взаимоотношений), и этого можно добиться, ограничивая представления только уже высчитанными «ситуационными слоями».
В Parc экспериментировали с “UNDO”, и сообщество специалистов стало задумываться о “parallel possible worlds reasoning”.
Само программирование желало быть выраженным в терминах «историй и версий», и системы должны были иметь возможность откатываться к предыдущих версиям (включая значения, не только код).
Это была еще одна из причин работать над "deep John" в будущих системах. То есть делать все через мировые линии и «симулированное время». Недавняя публикация Алекса Уарта демонстрирует насколько детальными могут бытб «миры» http://www.vpri.org/pdf/tr2011001_final_worlds.pdf.
Последняя мысль: “Histories R US”. То есть нам нужно и движение во времени для большинства наших идей, иодновременно с этим мы хотим видеть как каждая деталь оказалась в том состоянии, в котором оказалась (и как двигаться дальше).
Джон МакКарти показал нам как сделать это 60 лет назад и записал это чтобы мы все могли прочитать и понять.
Итак: и ООП и функциональное программирование могут быть полностью совместимыми (и должны быть!). Нет никаких причин закапывать состояние в объектах, и нет причин изобретать «монады» в ФП. Нам лишь нужно понять, что «компьютеры — это симуляторы» и разобраться, что же симулировать.
Я буду выступать по этой теме в Июле в Амстердаме на конференции “CurryOn”.
— Алан Кей

четверг, 22 марта 2018 г.

Павел Дуров: «Игнорируйте мнение авторитетов»

10 октября отмечает свой день рождения основатель социальной сети «ВКонтакте» и мессенджера Telegram Павел Дуров. По этому случаю «HBR – Россия» публикует самые яркие высказывания Дурова о саморазвитии, ценностях и будущем.О собственном мнении. Собственное мнение есть от силы у 10% людей. Остальные просто повторяют то, что где-то прочитали... Помните те случаи, когда ваше мнение шло полностью вразрез с мнением окружающих? Это – самые ценные моменты, в которые нужно вцепляться мертвой хваткой. Мир вокруг нас развивается так быстро, что общепринятые убеждения на наших глазах становятся издевательством над здравым смыслом. Сопротивление шума вокруг – устойчивый ориентир для всех желающих внести весомый вклад в развитие человечества. Слушать внутренний голос не означает оставаться глухим к мнению окружающих. Однако забудьте про демократию среди тех, кто вас окружает, – голос деятельного мыслителя, меняющего мир, должен быть для вас стократ более значим, чем голос праздного обывателя с его правом на мнение. Но менее значим, чем ваш собственный. Ваша вера в возможность иного пути намного важнее для человечества и для всех нас, чем ваше умение приспосабливаться и вторить безличному эху конформистов.
О концентрации. Способность к многочасовой концентрации на одном занятии – навык, который в нашу мобильно-онлайновую эпоху встречается все реже. Но именно этот навык необходим для интеллектуального, творческого или духовного прорыва. Будущее за теми, кто выработает иммунитет к технологическим ловушкам внимания и сохранит способность к длительной концентрации.
О деньгах. Уже более 10 лет – со времен, когда я был очень небогатым студентом, – я не устаю повторять: деньги переоценены, потому что созидание намного интереснее потребления, а внутреннее состояние несоизмеримо важнее внешнего. Как только вы делаете из денег культ и обмениваете «быть» на «казаться», вы отправляете себя в добровольное рабство. Долги из-за статусной мишуры, скучная работа с унылыми трусами, необходимость лгать и предавать свой мир – вот лишь часть той цены, которую вы заплатите за чрезмерное стремление к бумаге.
О Стиве Джобсе. Стив Джобс был не просто изобретателем, бизнесменом или дизайнером. Прежде всего, он был свободным человеком. Свободным от груза предрассудков, которые накапливает и воспроизводит человеческое общество. Во всех сферах своей деятельности этот человек имел смелость нарушать правила, которые казались незыблемыми окружающим. Буддист, сириец по происхождению, Стив Джобс был лишен главного страха представителей западной цивилизации – страха смерти. Он говорил, что неприятие и непонимание смерти не дает нам – европейцам – стать по-настоящему свободными. Стив был лишен и другой черты, характерной для западного сознания, — нашего стремления к раскладыванию всего по полочкам. Ему было чуждо строгое разделение науки и искусства, бизнеса и религии, финансового отчета и шоу. Он обладал восточным, единым, комплексным восприятием мира, идущим вразрез с традицией западной науки, культуры и образования. Стив Джобс – Леонардо да Винчи нашей эпохи.
О скепсисе. Скептики, материалисты, кухонные интеллигенты, которые не уверены ни в чем, кроме одного: проблемы вечны, мир сложен, все решено за них. Это неверие в возможность менять мир страшнее лени, пьянства или наркомании. Потому что именно оно является их причиной. Часто скепсис подается под видом "опыта", "знания жизни" или логики; часто камуфлируется словами "это не профессионально", "так никто не делает" или "так не принято". Сегодня мы знаем, что изменить можно все, и каждый из нас обладает возможностью реализовать любую идею.
О преимуществах молодости. Молодые в среднем быстрее, талантливее, энергичнее старых. Меньше предрассудков, фантомных страхов, попыток решить несуществующие проблемы... Тысячелетиями люди рождались великанами, и общество превращало их в карликов. Наше поколение – другое. Мы не откажемся от мечты из-за шума мнений окружающих. И мы не променяем творчество, поиск и дух свободы на уют сосисочно-телевизионного мирка.
О пользе одиночества. Коммуникация переоценена. Час одиночества продуктивнее недели разговоров.
О порядке и хаосе. Считается, что порядок – это всегда хорошо, а хаос – всегда плохо. Это одно из тех заблуждений, благодаря которым добрую половину XX века человечество страдало от репрессий, застоя и войн. На самом деле, в основе любого творческого поиска, открытия, инновации находится беспорядок. Новое может рождаться только из хаоса – из непредусмотренного, неожиданного несоответствия привычному. Разумеется, в условиях абсолютного беспорядка это "новое" не имеет возможности закрепиться и принести пользу; поэтому между хаосом и порядком нужен баланс. Но без доли беспорядка прогресс останавливается полностью.
О проблемах и их решении. Большая часть окружающих нас проблем либо не могут быть решены в принципе, либо решаются сами без нашего участия.
О бюрократических структурах. Бюрократическая структура, которая призвана с чем-то бороться, едва ли станет устранять корень проблемы. Более вероятно, что она будет незаметно стимулировать то, что должна уничтожить. Только так она сможет расширять свое влияние и финансирование.
О конкуренции. Есть два способа отвечать на конкуренцию. Первый – совершенствовать себя и свой проект. Второй – пытаться вредить конкурентам. Первый способ долгосрочно работает, второй – нет. Как только вы смещаете фокус с саморазвития на конкурентов, вы впускаете в себя страх перед ними. вы неосознанно приближаете то, чего боитесь. Страх – это самосбывающееся пророчество.
Об алкоголе и табаке. С точки зрения биохимии, алкоголь и никотин - такие же наркотики, как кокаин и марихуана. Меня не прельщают рекламные бюджеты наркоторговцев, которые разрушают разум и подрывают здоровье россиян.
О будущем образования. Будущее среднего образования лежит в играх – компьютерных, спортивных, интеллектуальных.
Об изучении языков. Из всех языков, на которое было потрачено время, окупилось только то, которое было инвестировано в английский. Стоит фокусироваться на нем.
Об изменениях и их скорости. Все можно делать быстро. Первую версию «ВКонтакте» в 2006 году я собрал за месяц. Расти она стала сразу. Вопреки расхожему мнению, работа делается либо быстро и качественно, либо долго и плохо. Все *нужно* делать быстро. Вместе с «ВКонтакте» в 2006 году возникло еще несколько сайтов с той же концепцией. Сейчас они забыты только потому, что «ВКонтакте» развивался быстрее.
О совмещении ролей. Cовмещать несколько ролей – эффективно. Первые месяцы существования «ВКонтакте» я создавал весь код, графику, формулировки, интерфейсы, маркетинг. Совмещение позволило устранить расход времени на коммуникацию.
Об интуиции. Слушать стоит только свою интуицию. Всякий раз, когда я прислушивался к мнению «старших и разумных», я терял время. Если вы чувствуете, что надо делать, – игнорируйте мнение авторитетов.
О доверии. Доверять на 100% никому не стоит. Не имеет значения, насколько вы считаете кого-либо заслуживающим доверия и сколько лет его знаете – ключевые вопросы лучше контролировать лично.
О страхе. Страх не имеет смысла. За время управления «ВКонтакте» было многое – DDoS-атаки, уголовные дела, акционерные войны, плавящиеся сервера, медийные войны, иски, интриги. Эмоции не продуктивны – делайте то, что нужно сделать.
Эти и другие цитаты Павла Дурова вы можете найти на его странице во «ВКонтакте» vk.com/durov.


Источник: http://hbr-russia.ru/liderstvo/psikhologiya/p18244/#ixzz5AURYoK6S

воскресенье, 11 марта 2018 г.

Приемы копирайтинга, о которых пора забыть


 Длинные «полотна текста» без графики и разделений на абзацы
Раньше считалось — чем больше текста на сайте, тем лучше продажи. Или чем качественнее товар или услуга, тем больше информации должно быть о них. Частично это работало, и пользователи читали все это до конца. Но недолго…
 Обманные страшилки
Еще пару лет назад потенциального клиента запугивали тикающими таймерами с обратным отсчетом. Аудитория давно раскусила этот трюк, и теперь он только раздражает.
 Магия одной таблетки
Волшебства не бывает — хватит считать свою ЦА полоумной. Тем более нет таблеток от всего сразу. Не презентуйте свой товар как волшебство. Возьмите курс на конкретную аудиторию и предложите решить ей конкретную проблему.
 Зашкаливающие эмоции
Забудьте о сотне искрящихся прилагательных – клиент боится слишком громких заявлений и страшится того, что скрывается за помпезным описанием.
 Активное давление на проблемы аудитории
У тебя нет денег? Мечты не сбываются? Жизнь проходит мимо? Почувствуй себя ущербным и приходи на наш семинар.
Не надо так! Аккуратно формулируйте проблему и сразу давайте решение. По делу и кратко!

суббота, 10 марта 2018 г.

Почему программисты ненавидят работать с чужим кодом.

Почему программисты ненавидят работать с чужим кодом. Долго думал, как донести до обычного пользователя всю суть пиздеца. Решил привести небольшую аналогию:
Вот представь, что тебе доверили достроить за другим прорабом лабораторию на острове. Ты приходишь на объект, а там кроме недостроенного здания: огромный вентилятор (размером со здание), большой воздушный шар и комната набитая швабрами. Почесав голову, ты разбираешь этот хлам и доделываешь лабораторию. Сдаешь объект ученным, но через 5 минут они выбегают с криком: "УТЕЧКА ЯДОВИТОГО ГАЗА!!!".
- Как так-то, блять! Должно же работать! - в отчаянии кричишь ты и звонишь прошлому прорабу:
- Вася, у нас ядовитый газ потёк! В чем проблема?
- Не знаю, должно было все работать. Что-то в проекте менял?
- Немного, швабры вынес...
- Швабры потолок держали!
- Что??? Что, блять, извините???
- Говорю, швабры потолок держали. Над ними цистерны с газом были. Очень тяжелые, пришлось в комнату снизу швабры напихать.
- Ты хотя бы записку на двери повесил бы, что швабры для держания потолка! У нас тут ядовитый газ течет! Что нам делать?
- Включай вентилятор. Он сдует газ с острова.
- Я его, блять, демонтировал сразу же!
- Зачем?
- Зачем ты построил 120 тонный вентилятор? Ты не мог положить ящик блядских ПРОТИВОГАЗОВ?
- Ящик противогазов искать нужно, а вентилятор у меня с прошлого заказа оставался.
- Вася, я убрал твой вентилятор! Мы тут задыхаемся!
- Херли вы тогда там делаете? Садитесь на воздушный шар и уебывайте!