6 июля 2018 г.

Ричард Фейнман. КЭД – странная теория света и вещества

Richard Feynman “QED: The Strange Theory of Light and Matter”.

Собирался прочитать “КЭД – странная теория света и вещества” Ричарда Фейнмана уже лет 8, если не больше. Всё время что-то отвлекало и мешало купить. И вот, наконец, прочитал. Фейнман - один из любимейших мною авторов и лекторов, да ещё и крутой физик. И если от его автобиографических книжек получаешь просто хорошее настроение и вдохновение, от его курса лекций - вдумчивость и внимательность, то от этой научно-популярной книжки я получил огромадное удовольствие особого рода.

Вы знаете, практически все научно-популярные книжки, объясняя научные теории, бессовестно упрощают идеи и выбрасывают детали до такой степени, что часто остаётся лишь призрак понимания и пересказ законов природы на полумагическом уровне. Стивен Вайнберг по этому поводу однажды сказал, что большинство авторов научпоп-книг потакают лени читателей, желающих приобрести лишь иллюзию понимания и нахвататься умных слов для бесед на коктейльных вечеринках. Так вот, “КЭД” - не такая. Да, это не учебник, вы не сможете с помощью неё взять и рассчитать взаимодействия электронов и фотонов - это будет технически сложно и неосуществимо, чтобы рассчитать что-либо по этим теориям, нужно несколько лет учиться в университете приёмам высшей математики… Но что эта книжка делает - она не упрощает идеи лежащие в основе этих расчётов. Прочитав книгу, вы действительно сможете понять, как физики объясняют и предсказывают поведение природы. Фейнману абсолютно гениально удалось изложить идеи квантовой электродинамики в таком виде, что их понимание будет доступно и старшекласснику школы. Да, нужно будет читать внимательно, нужно будет напрягать воображение - эта книга не для вальяжного чтения, но все идеи объяснены безо всякого упрощения, при помощи картинок и логических рассуждений. Мне кажется, эту книгу могут продуктивно читать как неспециалисты - широкая публика, так и студенты, и профессиональные физики - и все смогут вынести для себя что-то ценное.

Но для чего широкой публике вообще напрягаться и читать про квантовую электродинамику? Для того же, зачем в принципе познавать природу - для удовлетворения любопытства, чтобы смотреть на мир более богатым и полноценным взглядом и чтобы быть способным объяснять мир детям. Как свет проходит сквозь стёкла? А как частично отражается? Как линза преломляет свет? Как возникают химия и её законы? Никто не мог этого объяснить до середины 20-го века. Условных 99% повседневного мира вокруг нас управляется взаимодействием электронов и фотонов. И квантовая электродинамика даёт исчерпывающий ответ, как именно это происходит.

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

29 мая 2018 г.

Про точность в науке, или чему действительно нужно учить детей

Довольно часто от адептов разных религий и течений, да и просто от обычных людей можно услышать фразы вроде “Наука не знает всего”, “Теория эволюции - это всего лишь теория”, “Учёные не доказали ...”, “Научное знание не абсолютно точное”, “Учёные не могут претендовать на истину” и тому подобные. Апологеты таких точек зрения пытаются навязать идею, что научные знания и теории стоит рассказывать и преподавать как равноправные к альтернативным знаниям - религиозным, философским и другим. Апофеозом такого восприятия и отношения стала петиция про внедрение в школьную программу креационизма и попытки её пропиарить в различных комьюнити учителей и родителей. Попробую разъяснить некоторые терминологические моменты и высказать в противовес этой петиции и её сторонников свою точку зрения насчёт того, что действительно нужно преподавать детям в школах.

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

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

Недопустимо говорить "теория торсионных полей", если хочешь быть точным в высказываниях. Это просто неправильно, поскольку торсионные поля не имеют экспериментального подтверждения. Это просто неправильная бытовая формулировка, как если бы сказать "теория гомеопатического лечения", "факт наблюдения инопланетян", "факт переезда поездом Анны Карениной" или “теория памяти воды”. Нужно быть честным и точным, и не употреблять слова “теория” или “факт” по отношению к вымышленным или непроверенным вещам.

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

Проблема в том, что мы в принципе не знаем о мире ничего абсолютно "точного" или "правильного". И никогда не узнаем. Начиная с того, что мы познаём мир через органы чувств, через электромагнитное воздействие на рецепторы нашего тела, а наш мозг на основе этой информации строит приближённую модель, интерпретацию внешнего мира. И мозг очень часто ошибается. Вспомните обманы зрения и слуха, игру в испорченный телефон и многочисленные ошибки в рассуждениях и восприятии. Всё, что мы в своей жизни видим, слышим, осмысливаем, переживаем, ... - это приближённые абстрактные модели - продукты жизнедеятельности нашего мозга. Люди издавна хотят узнавать мир, делать правильные предсказания природных явлений, управлять природными явлениями. Проблема в том, что чистое воображение людей мысленно строит ошибочные, неработающие модели мира. Наш мозг просто абсурдно сбоит ошибками восприятия. Да, это могут быть красивые или эмоционально сильные истории и объяснения, но они не позволяют уверенно предсказывать поведение окружающего мира. Воображение людей - это по большей части условный "бред" не имеющий никакого отношения к реальности, а только лишь метафорически её описывающий. Увы, но вот так мыслит наш мозг. Такова природа нашего сознания, что мы даже причинно-следственные связи можем нормально строить только лишь для примитивных визуальных бытовых вещей: когда учимся двигаться и двигать предметы; когда распознаём опасность в условиях дикой природы; в простейших социальных отношениях; к примеру, если типа тигр кого-то скушал, значит, нужно опасаться тигра и рассказать об этом другим. Наше воображение в целом находится на примитивном первобытном уровне и приспособлено под потребности выживания в дикой саванне и потребности простых социальных навыков.

За редкими фрагментарными исключениями практически все творения человеческого ума в истории ранее 16-17 веков - это вот такой метафорический не имеющий отношения к реальности бред. Они совершенно не позволяют, или позволяют крайне плохо, неточно и неуверенно предсказывать поведение явлений природы. Сказки для развлечения наших эмоций, не более чем. И Библия тут не является исключением. Ну невозможно на основе никаких древних текстов построить уверенный прогноз чего-либо - урожая, погоды, течения болезни человека, влияния продукта питания, положений планет на небе, течения беременности, экономического благополучия предприятия... Именно в этом смысле я употребляю слово “бред” - все эти модели и метафоры не работают, не предсказывают объективно и уверенно. Максимум на что способны старые тексты - это вызывать эмоции и переживания у отдельных людей и иногда, при благополучном стечении обстоятельств, давать зачастую субъективно верные прогнозы.

Всю свою историю человечество жило в таком вот неведении и угадывании относительно того, как работает природа. Да, оно методом проб и ошибок на периоде в несколько поколений постепенно училось делать что-то материальное - дома, корабли, механизмы… Но по-прежнему не было уверенности. Никакой человек не мог заранее уверенно сказать, что корабль поплывёт так-то и так-то, что мост простоит минимум столько-то лет, что пациент выздоровеет. Человечество продолжало самоуверенно играть в метафоры, поэзию, философию, чистое воображение и изредка наугад “щупать” природу. Понадобились тысячелетия для того, чтобы некоторые отдельные люди поняли и признали, что наш ум не может самостоятельно, сам по себе, понимать реальность, не может строить работающие модели, что нужен контролируемый эксперимент, постоянная и тщательная проверка на работоспособность вот этих метафорических измышлений из наших голов. Человечество начало усмирять своё эго, начало признавать своё несовершенство, понимать своё невежество и начало не доверять себе, а внимательно всё проверять. Вот так в 16-17 веках начинал развиваться научный метод познания. Зародилась наука.

Так вот, возвращаясь к смыслу слов "точный" или "правильный". "Точная теория" в науке - это модель, для которой выяснена область применимости. То есть, это модель, объясняющая и предсказывающая поведение некоего природного явления с наперёд известным уровнем достоверности, с заранее известной погрешностью или вероятностью. Вот это смысл слова "точный". Считать, что есть какой-либо другой смысл, более "точный", или в мире существует "абсолютная точность" - это тешить своё эго или самолюбие, заниматься самолюбованием и думать о возможностях человека больше, чем есть на самом деле. Только последние 3 века человечество сумело нащупать метод, который позволяет не тупо бредить, а учиться предсказывать с наперёд известной погрешностью. Какого-либо более "точного" метода у человечества просто нет. Точка. Точная ли теория гравитации Ньютона? Да! Это точная теория. Для неё известны границы, где она работает в рамках заранее известной погрешности. Точная ли теория гравитации Эйнштейна? Тоже да! Для неё тоже известны границы, в рамках которых проверено, что она работает. Теория Эйнштейна чуть точнее теории Ньютона. Но и то и другое - точные и работающие теории.

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

Почему меня откровенно бесит позиция "а давайте рассказывать детям и теорию эволюции и прямо рядом с ней какую-то религиозную историю, например, библейскую" да ещё и как “равноправные”? Потому, что это искажает саму суть положения вещей. Саму суть того, что человечество знает об окружающем мире. Это порождает в людях спесь и высокомерное убеждение, что якобы метафорический бред нашего разума сам по себе способен строить адекватные модели природы. Нет. Увы. Не может. К сожалению. И когда ставят в один ряд метод познания мира через метафорический библейский бред и метод познания через контролируемые проверки и эксперименты, то это приводит к тому, что люди потом неспособны отличить одно от другого, что люди мыслят магией, единорогами, гомеопатией и полагаются во всём на личные суждения, а не на тщательный анализ и проверку. И мы получаем мир, блин, сплошных экспертов во всём, начиная от политики, экономики и заканчивая астрономией и квантовой механикой.

Чему же на мой взгляд полезно учить детей? Чему их необходимо учить, принимая во внимание прогресс человечества за последние несколько веков?

Во-первых, нужно давать возможность на собственном опыте прочувствовать насколько наш мозг ненадёжен в своих суждениях. Каждый человек должен получить опыт обманов зрения и слуха, обманов органов чувств, ошибок восприятия и ошибок рассуждений. И нужно относиться к этому не как к очередному “развлечению”, а как к осознанию очень серьёзной вещи - наш мозг крайне плохо добывает информацию об окружающем мире. Люди должны вырастать не со спесью и самоуверенностью, а с отношением интереса и внимательности к своим выводам и воображению. С некоторой долей недоверия своим суждениям. С желанием проверять и перепроверять. С желанием не “бредить”, а действительно узнавать что-либо про мир в котором живут.

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

В третьих, нужно наконец прекратить поощрять уважение к старым текстам. Нужно наконец признать прогресс, не только технологический, но и ментальный, который совершает человечество на своём историческом пути. Знание и текст 17 века априори должны быть ценнее текстов тысячелетней давности. Статьи и учебники 21 века - должны цениться выше, чем более ранние. В “топку” поклонение старым текстам. У детей и вообще людей должно быть стремление к новому, переосмысленному, перестроенному - новые теории всегда лучше объясняют и более точны. В своих суждениях и принятии решений люди должны стараться искать самые свежие взгляды и объяснения, переосмысливать и обдумывать их. Только так происходит движение вперёд и развитие человечества.

22 мая 2018 г.

Программирование как дизайн

Нередко в команде software development проекта рано или поздно наступает момент, когда начинают вестись ярые споры и обсуждения вокруг соглашений о кодировании, об архитектурных решениях, о том, что важно, а что нет. Часто это переходит в формат холиваров или неконструктивной аргументации типа “надо делать так, потому что у ХХХ сделано так”, “надо делать так, потому что в YYY написано так”, “мне так кажется лучше и удобнее”. Попробую в этой статье немного порассуждать вокруг этих вещей. Как, мне кажется, лучше думать и рассуждать о коде и архитектуре? На что опираться в своих доводах? Начну издалека и немного в стиле капитана очевидность, но надеюсь, что к концу это прояснит мою мотивацию, поможет участникам диалога лучше понимать друг друга и конструктивнее договариваться.

Какую роль выполняют язык программирования, соглашения о кодировании, архитектура кода, вот это всё? Они выполняют роль посредника между человеком и компьютером, между программистом и алгоритмом. Это средство выражения и средство отображения мыслей, желаний человека и процессов реального мира в алгоритмы, в архитектуру железа компьютера. На это средство переноса человеческих идей в машину Тьюринга естественным образом налагаются ограничения. В первую очередь, налагаются ограничения со стороны компьютера - выполнимость, ресурсы, скорость и алгоритмическая сложность операций. Когда придумываешь программу - нужно беспокоиться о том, чтобы она остановилась, о контроле ресурсов и об алгоритмической скорости работы. Это вроде понятно. Но откуда возникла и продолжает возникать вся эта возня с языками высокого уровня, модульностью, декомпозицией, паттернами, стилями, архитектурой кода? Ведь ничего из этого в железе компьютера нет, там просто ячейки памяти и инструкции. Алгоритму ведь абсолютно не нужна архитектура или модульность, чтобы выполниться на машине Тьюринга. Зачем разработчики компилятора заморачиваются обнаружением мёртвого кода? Зачем нам средства обнаружения утечек памяти? Зачем счётчики ссылок или сборщики мусора? Зачем каждому языку программирования нужна стандартная библиотека структур данных и функций для работы с ними с гарантиями быстродействия? Зачем вот эта вся странная эволюция языков и средств разработки, длящаяся уже более полустолетия? На мой взгляд, это всё нужно из-за ограничений “архитектуры” на другом конце - из-за ограничений человеческого мозга, особенностей нашего мышления, особенностей работы наших органов чувств. Всё вышеперечисленное, языки высокого уровня, стили, паттерны, … - это всё следствия ограничений нашего мозга. Даже некоторые архитектурные решения на уровне кода, казалось бы, диктуемые практической целесообразностью, как, например, декомпозиция функций, препятствующая комбинаторному взрыву вариантов тестирования, - это тоже, как мне кажется, следствие взаимных ограничений алгоритмов и мозга. Наш мозг неспособен мысленно проверить сложный алгоритм на корректность и выполнимость, ему сложно обнаруживать мёртвые участки, нам сложно мысленно для большого алгоритма проконтролировать использование ресурсов, нам сложно отслеживать и гарантировать быстродействие - наш мозг абсолютно не приспособлен мыслить машинами Тьюринга, хотя последние и являются его творением.

У нас мизерная оперативная память - мы способны в один момент времени держать в уме не более 3-5 кусочков информации. Мы с трудом, после лет тренировок, способны мысленно, без подручных средств, отслеживать линейную логическую цепочку заключений и выводов длиной до десятка и более. Лишь малому проценту нормальных людей удаётся в уме отслеживать цепочку логических заключений одновременно по нескольким признакам - это хорошо демонстрирует известная Задача Эйнштейна и её разные вариации. Мы неспособны концентрироваться на нескольких смысловых контекстах одновременно - в этом смысле наш мозг однозадачен. Это из недостатков. Но что наш мозг умеет хорошо? Для чего он приспособлен эволюцией? Мы очень быстро привыкаем к любым однородным, регулярным и повторяющимся вещам, какими бы абсурдными они нам в начале не казались. Наш мозг прекрасно, на уровне подсознания, с параллельной обработкой, распознаёт уже знакомые / привычные образы (паттерны) в визуальной и речевой информации - и мы способны на уровне автоматизма реагировать на привычные вещи, и нам это, как правило, приятно. Наш мозг прекрасно выявляет неоднородности, отступления от правил, нарушения в однородных и привычных образах (визуальных и речевых) - вспомните это ощущение, когда само собой внезапно повышается внимание, происходит раздражение или возбуждение - глаз как будто сам цепляется за дисгармонию или исключение, не вписывающееся в общую закономерность или привычный фон. Это всё вероятно из-за того, что у нас в мозге есть специализированные “сопроцессоры” для анализа картинки (зрительная кора) и речи (области Брока и Вернике) - мозг людей специализируется на быстрой, бессознательной и эффективной обработке визуальной и речевой информации.

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

Хороший дизайн использует сильные стороны мозга - делает для пользователя привычными и бессознательными анализ ситуации и совершение типичных действий. Или наоборот, использует слабые - может специально вызывать нервозность и сознательное напряжение в ситуациях требующих повышенного внимания. Проектирование интерфейса - это как ориентация на существующие привычки пользователей, так и формирование у них новых. Продуктивный интерфейс должен помогать вырабатывать “полезные” привычки и препятствовать появлению “вредных”.

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

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

Пример 1. При работе с кодом нужно быстро понимать предназначение любой именованной сущности (константы, переменной, функции, …). Для этого, во-первых, придумывают стили именования, использующие визуальную информацию, - правила смешения больших и маленьких букв, специальных символов. Тогда мозг вырабатывает привычку автоматически и бессознательно трактовать изображения названий на экране. Во-вторых, полезно использовать соглашения для грамматических форм слов - придумать паттерны для использования существительных, глаголов, причастий, суффиксов, префиксов и т.п. Это эксплуатирует возможности речевого распознавания мозга. Визуальный анализ и чтение названий должны быть осмысленны и однородны. Делать отступления от внедрённых правил - плохо, это будет вызывать когнитивное напряжение и нервозность, аналогично тому, как если бы в 90% интерфейса главные кнопки диалогов назывались глаголами с большой буквы (“Сохранить”, “Отменить”, ..), но в остальных 10% использовались бы другие визуальные и грамматические формы (“запуск”, “ЗАКРЫТИЕ”).

Пример 2. Что является аргументом в пользу правила, что функции нужно стараться делать не более 40-60 строк? Ограничения мозга. Хорошо, чтобы код функции или алгоритма помещался на один экран, чтобы была возможность анализировать его изображение охватывая взглядом целиком, на полную мощность задействуя визуальную кору. Что является аргументом в пользу того, что следует ограничивать цикломатическую сложность функции? Тоже особенность мозга - линейность мышления. Цикломатическая сложность - это как раз количество линейных путей через код, то есть количество ментальных путей логического анализа алгоритма.

Пример 3. Перед программистом часто возникает вопрос “А вот стоит ли вот этот повторяющийся кусочек функционала вынести в отдельную функцию или же стоит оставить дублирование кода?”. Много написано о вреде дублирования кода. Но я бы хотел сказать, что и чрезмерное увлечение декомпозицией и небольшими функциями - это тоже нехорошо. Легко впасть в крайность и заводить функцию на каждый чих, и потом сгибаться под тяжестью их поддержки и понимания. И главное - непонятно, на какие чувства или аргументы стоит опираться при решении. Мне кажется, что и тут стоит подумать о работе мозга и полезно представлять аналогии с графическим интерфейсом. Каждая новая функция - это как бы новая кнопка или контрол. И аналогичный вопрос в графическом интерфейсе звучал бы так “Стоит ли вот на это повторяющееся действие завести отдельную кнопку/контрол, со своим дизайном и изображением? Или же стоит оставить выполнение действия через старые, возможно, более привычные, контролы?”. Думаю, чтобы принять разумное решение, нужно подумать о таких вещах как осмысленность и понятность этого действия для человека - можно ли удачно назвать одним словом или словосочетанием, атомарность действия - могут ли в процессе возникать ошибки, повторяемость, необходимость модификации… В любом случае, впадать в крайность и заводить по умолчанию на каждое действие по отдельной кнопке или функции - на мой взгляд это было бы неразумно.

Пример 4. Хороший программист при работе с кодом находится в постоянном поиске улучшений и пересмотре концепций и абстракций. А если это ещё и надо для целей проекта - код с налётом истории, с рядом недостатков, подлежит рефакторингу - то такой постоянный поиск и пересмотр становится непосредственной обязанностью программиста. Для того, чтобы оценивать удачность декомпозиции, удачность того или иного архитектурного решения, человек при работе с кодом должен ясно понимать и отслеживать зависимости. Какая функция или объект из какого модуля импортированы - это в данном случае важная информация. Значит, нужно позаботиться о том, чтобы эта важная информация была доступна на визуальном изображении кода, в локальном контексте, прямо там, где она необходима - в самой строчке, где используется функция или объект. В разных языках программирования это делается специальным синтаксисом - вызовом через точку или двоеточие, например. Чтобы человек мог охватить взглядом экран, изображение кода и сразу же легко, на уровне подсознания анализировать зависимости, отсеивать валидные и выявлять проблемные. Можно ли не выражать зависимости в коде, а полагаться лишь на возможность IDE - кликнуть на функцию, чтобы показало её происхождение? Давайте опять проведу аналогию с графическим интерфейсом. Представьте, что вы делаете интерфейс с инфографикой или табличным отображением данных. И часть данных вы показываете сразу, а другую, не менее важную, часть вы делаете доступной только в контекстном меню, выпадающем по клику - адекватный ли это интерфейс? На мой взгляд, IDE в данном случае играет роль не более чем “костыля”, слегка сглаживающего недостатки самого кода, а уж никак не интерфейсного решения.

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

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

6 мая 2018 г.

Дік Свааб. Ми - це наш мозок

Dick Swaab “We Are Our Brains”.

Книгу всесвітньо відомого нідерландського дослідника мозку Діка Свааба “Ми - це наш мозок” я читав невеличкими шматочками протягом декількох місяців. Це виявилось одне з найдовших некинутих читань у моєму житті. Не знаю, через що так сталося - чи то через мій трохи пригнічений настрій цією весною, чи то стиль книжки для мене виявився трохи нетиповим та нелегким - але в будь-якому разі ця книга однозначно заслуговує на те, щоб бути прочитаною більшістю людей по всьому світу, і в українському суспільстві також.

Як мозок пов’язаний з абсолютно всіма аспектами життя людини, так і ця книга про мозок чіпляє надзвичайно багато важливих тем, важливих як для окремої людини, так і для суспільства. Як взаємодіє мозок матері з мозком дитини під час вагітності та народження? Стать, гендерна ідентичність та сексуальна орієнтація - на яких етапах розвитку плоду вони формуються? Яка хімія статевого дозрівання, закоханості та сексуального потягу? Агресія, аутизм, шизофренія - що про них відомо сучасним дослідникам? Механізми пам’яті. Яка біологія закладена в основу моральної поведінки? Які особливості розвитку мозку зумовлюють релігійність людей? Що спричиняє присмертні переживання: бачення “тунелю зі світлом”, згадування “всього життя перед очима” та відчуття виходу зі власного тіла? Наскільки ми вільні у своїх вчинках? Наскільки педофіл як людина з дуже особливою сексуальною орієнтацією чи маніяк, як людина з порушенням емпатії та особливою агресією відповідальні за те, ким вони є? Чи за це, може, більш відповідальна їхня мати, котра палила тютюн на стадії вагітності чи вживала інші шкідливі речовини? Наскільки люди вільні у виборі того, ким вони є чи ким вони стають? Які бувають порушення мозку та хвороби? Наскільки часто та різноманітно природа “помиляється” у своєму творенні людей з особливостями та порушеннями розвитку? Хвороба Альцгеймера - як деградує мозок? Про що варто подумати заздалегідь з приводу своєї смерті або смерті близьких? Що відомо про еволюцію мозку тварин та людини як одної з тварин? Оце неповний перелік тем з книжки, щодо більшості яких, на мій погляд, в суспільстві або майже відсутня сучасна інформація, або ця інформація та дискурс є надзвичайно недостатніми.

Якщо б мене спросили, яку найкориснішу ідею можна здобути з цієї книги, то я б сказав, що це наступне. Формування мозку починається на ранніх стадіях вагітності й завершується приблизно у 20-25 років. Що раніший етап взяти, то інтенсивніші біологічні процеси відбуваються і то більший вплив на розвиток мозку та особистості людини можна вчинити. Дуже багато речей і аспектів особистості та характеру, навіть тих, які проявляються лише в підлітковому віці, закладаються ще до народження. Ще на етапі вагітності недостатнім харчуванням або вживанням наркотичних (тютюн, алкоголь та інші) чи просто токсичних (свинець, …) речовин можна спричинити надзвичайно серйозний вплив - від простого відхилення в сексуальній орієнтації чи рівня агресії в характері до багатьох серйозних захворювань та порушень. У ранньому дитинстві на вроджені аспекти накладаються типові паттерни поведінки, сприйняття світу через рідну мову, релігійність - паттерни, які потім залишаться на все життя. Сформованою особистість варто вважати лише з 20-25 років. До цього періоду - все важливо, і що раніше, то важливіше.

Отже, зміст цієї книги має важливе суспільне значення. З ним варто знайомити людей. Але є одне “але”. Особисто мені дуже не сподобався стиль, в якому ця книжка написана. Якщо коротко, то, на мій погляд, автор веде розповідь не з позицій обґрунтування та аналізу, не від бажання пояснити читачеві звідки береться те чи інше твердження, а скоріше з позицій простого викладення кінцевих фактів від авторитетної людини. Тобто я як читач не отримав абсолютно ніякого задоволення від дійсно розуміння, як науковці дійшли того чи іншого висновку, мені довелося покладатися на авторитет Діка Свааба і приймати багато речей на віру, а я цього не люблю. Так, автор - дійсно класний науковець, один з провідних дослідників мозку у світі. І дійсно, в багатьох моментах він дає для своїх тверджень начерки обґрунтувань, трошки розповідає, що були проведені такі й такі досліди, зустрічалися такі патології… Але все одно, на мій погляд, він постійно дозволяє собі надзвичайно багато категоричних необґрунтованих тверджень. Якщо б я не читав ще книжки та наукові статті на цю тему і багато фактів не знав вже заздалегідь, то, чесно кажучи, в мене як у інколи доволі прискіпливого читача виникли б претензії на кшалт “автор забагато собі дозволяє у висновках та твердженнях”. Хочу ще раз уточнити, що в мене отакі претензії лише по стилю, я не зустрів у книжці жодної неузгодженої з іншими джерелами інформації. Тобто книжка, дійсно, корисна і правдива, але на жаль для впливу на читача, мабуть, потрібна певна неабияка довіра до автора. Такі справи.

Але в будь-якому разі зміст, теми та цінності, що несе книга “Ми - це наш мозок” варті того, щоб познайомитися з ними.

28 декабря 2017 г.

Генрі Марш

Henry Marsh “Do No Harm: Stories of Life, Death and Brain Surgery”.
Henry Marsh “Admissions: A life in Brain Surgery”.

Про Генрі Марша, англійського нейрохірурга, я дізнався, прочитавши дві його автобіографічні книжки - “Історії про життя, смерть і нейрохірургію” та “Ні сонце, ані смерть. Зі щоденників нейрохірурга”. Також подивився документальний фільм “Англійський хірург”. Чесно кажучи не знаю до пуття, як описати. Просто почитайте і подивіться. У будь-якій діяльності зустрічаються люди, що можуть виступати еталоном чесності, взірцем відвертості та відданості своїй справі. Мені наївно здається, що щодо лікарняної справи, нейрохірургії такою людиною є цей англієць. Операції на мозку - це завжди межа між каліцтвом та видужанням, між повноцінним життям, життям “овоча” та смертю. Головний принцип медичної допомоги “не зашкодь” в життєписі Марша виступає центральним. Щоб стати досвідченим хірургом, будь-якому лікарю треба пройти крізь успіхи та помилки. Всі люди, всі помиляються. Що мені сподобалося, так те, що ця людина всю свою професійну кар’єру не втрачала чуйності, здатності до співчуття та переживання за пацієнтів, залишилася людяною попри подекуди фатальні вироки, що мусила виносити. Також цікаво, що Генрі Марш пов’язаний з Україною, він регулярно приїздив сюди з 1992 року та допомагав досвідом, обладнанням, проводив консультації та операції. В книжках згадуються його враження від України в різні часи. Мені подобаються справжні, невигадані історії. Особисто я їх здатен переживати значно сильніше, ніж просто художню літературу. Місцями, читаючи ці книжки та дивлячись фільм, в мене мимоволі намагалися стати вологими очі. Рідко так щось настільки зачіпає. Відвертість та чесність, людяність та професійність, життя та смерть. Вартісні речі.

23 декабря 2017 г.

Джордан Елленберґ. Як ніколи не помилятися

Jordan Ellenberg “How Not to Be Wrong”.

Книга Джордана Елленберґа “Як ніколи не помилятися” вперше привернула мою увагу десь півтора роки тому, коли я зустрів її на сайті Quora в одній з відповідей на питання “Які декілька книг має прочитати у житті кожна освічена людина?”. Потім подивився відгуки на Амазон і вже тоді закортіло прочитати. А цього року на конференції Brain&Ukraine був стенд видавництва "Наш Формат" у якому несподівано лежав свіженький переклад українською, який я одразу купив.

Книга являє собою збірку історій з життя, з різних історичних періодів, коли перед людьми поставали цілком прикладні задачі, для розв’язку яких застосовували математичні міркування. Якщо ви не досить добре уявляєте, як у житті можна використовувати математику - ця книга точно для вас! Як захищали бронею літаки під час другої світової війни? Податки доцільно збільшувати чи зменшувати? “1 - 1 + 1 - 1 + 1 - …” - це скільки? Чи можна спрогнозувати середнє ожиріння населення? Чи можна зрозуміти з кидання монетки як правильніше порівнювати та висвітлювати в пресі наслідки убивств та геноцидів у різних країнах? Чи справді у Торі можна знайти пророцтва? Як легко можна змусити деяких людей повірити у те, що ти здатен передбачати випадкове майбутнє, наприклад, поведінку на ринку акцій? Чи дійсно мозок мертвого лосося здатен розпізнавати емоції людей за фотографіями? Що таке "доведення від супротивного", "доведення від неймовірного" та що таке "нульова гіпотеза"? Яким чином у сучасній науці робляться висновки щодо успішності досліджень (наприклад, чи діють певні ліки) та за яких умов ці методи можуть помилятися? Яким чином можна спробувати обчислити ймовірність існування Бога чи гіпотези матриці? Як деякі люди в США в 2000х роках заробили мільйони, використовуючи математику для гри в лотерею? Випадкові події та очікувана цінність (математичне сподівання), малювання картин та проективна геометрія, пакування куль та коди, що виправляють помилки, регресія до середнього та кореляція, а також які парадокси та вади мають існуючі виборчі системи та все ж таки як так мислити, щоб ніколи не помилятись.

Цей пречудовий путівник по найрізніших застосуваннях математики у житті особисто я дійсно радив би почитати абсолютно всім освіченим людям. Особливо би радив вчителям - тут ви знайдете багато прекрасних тем для задач та розмов з учнями. Книга не вимагає ніяких знань, що виходять за межі шкільної математики. Якщо у вас у школі із математикою було добре, то, на мій погляд, книжку буде читати легко та приємно. Якщо ж ви трошки прогулювали шкільну математику, то буде місцями важкувато, але все одно раджу спробувати. Автор на різноманітних прикладах ілюструє як правильне мислення, так і типові помилки, які робить більшість людей, тож, якщо ви будете читати, трохи обдумуючи написане, не поспішаючи, пробуючи спочатку самотужки відповісти на питання, а лише потім заглядаючи, що там у автора, то, думаю, ви дійсно навчитеся помилятися трохи менше. :) І, можливо, полюбите оточуючий світ трохи більше. :) І, напевно, зрозумієте, що математика є скрізь навколо нас, лише потрібно вчитися помічати та мислити нею.

1 ноября 2017 г.

Миша Громов. Кольцо тайн: вселенная, математика, мысль

Прочитал книгу Миши Громова “Кольцо тайн: вселенная, математика, мысль”. Никогда бы обратил внимание на книгу с таким названием :), если бы не автор - лауреат премии Абеля (это один из аналогов Нобелевки в математике). Меня всегда привлекало, как думают люди такого масштаба, и очень классно, что некоторые из них делятся своими мыслями на совершенно разные темы посредством книги в более-менее популярном стиле.

Книга состоит из двух частей. Где-то треть занимают мысли автора о самых разных аспектах окружающего мира - от чисел и науки до эволюции, жизни и мозге. Эта часть пестрит цитатами всяких известных людей, историческими отсылками, и здесь Миша Громов задает кучу интересных ему вопросов про мироздание и “42”. Познаваем ли наш мир и до какой степени? В каких рамках мы знаем что-либо о Вселенной? Почему глазами математика “естественный отбор” - это никакой не закон или явление, а неизбежное следствие законов размножения. Это сборник обрывков мыслей о разном - тут можно возбудить в себе любопытство и раздразнить себя на дальнейшие поиски по совершенно различным темам.

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

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