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”
“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”. Познаваем ли наш мир и до какой степени? В каких рамках мы знаем что-либо о Вселенной? Почему глазами математика “естественный отбор” - это никакой не закон или явление, а неизбежное следствие законов размножения. Это сборник обрывков мыслей о разном - тут можно возбудить себе любопытство и раздразнить себя на дальнейшие поиски по совершенно различным темам.

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

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

28 июня 2017 г.

Ювал Ной Харарі. Людина Розумна

Yuval Noah Harari. Sapiens: A Brief History of Humankind.

Мені завжди подобається коли заберешся трохи вгору - чи на реальну гору, чи на літаку, чи дивлячись на супутникові фото - є таке собі відчуття ландшафту, відчуття бачення взаємозв’язків і охоплення загальної картини. Так само коли досліджуєш певну тему, інколи, через деякий час та зусилля, з’являється бачення загальної та цілісної картини. Книга Ювала Харарі “Людина Розумна” дає можливість подивитись на історію людства, виду Homo Sapiens, поглядом ніби здалеку, згори, охоплюючи часи від неандертальців до наших днів. За останні десь 5-7 років це напевно другий чи третій текст з історії що мені надзвичайно сподобався.

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

На мій погляд цю книгу треба вводити в обов’язкову до прочитання програму в старших класах школи. Саме через світогляд. Також її було б корисно почитати абсолютно всім політикам та іншим людям що приймають впливові та масштабні рішення. Я б сказав навіть що якщо б вибирав людей з якими робити спільні справи чи ділити частину життя, то ця книга є однією з таких що можуть відсіяти або зблизити мене з іншими. В общєм всім бігом читати. Буде легко і кльово. Гарантую. :)

16 апреля 2017 г.

5×4 или 4×5 - как правильнее?

Задача для детей родителей детей второго класса:

На столе стоит 4 вазы, в каждой вазе по 5 цветков. Сколько всего цветков стоит на столе в вазах?

Как правильно записывать в решение “4×5” или “5×4”? Именно такой вопрос время от времени возникает на уроках в младшей школе в разных странах мира в разные времена. Учителя снижают детям оценки, родители паникуют, а дети что-то зубрят или впадают в беспомощность. Возник этот вопрос и весной 2017 года в фейсбук-группе “БАТЬКИ SOS” и потянул за собой череду разных обсуждений в комментариях и других постах. В этом тексте я попытаюсь привести немного своих мыслей на тему и около, которые у меня сложились уже ряд лет назад в процессе занятий с людьми разных возрастов.

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

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

  • Есть канава, нужно построить из подручных средств переправу чтобы перейти. Задача. 
  • Есть содержимое холодильника (или деньги + магазин), есть рецепт, вы хотите приготовить например беф-строганов. Задача. 
  • Вы играте в шахматы и наблюдаете ситуацию на доске. Нужно попытаться построить правдоподобные версии о замыслах соперника, придумать что выгодно вам, и сделать ход. Задача. 
  • У вас есть некоторая сумма денег и нужно их распределить по разным вложениям чтобы снизить риски и повысить выгоду. Задача. 
  • Вы делаете ремонт в квартире, и хотите соединить провода так чтобы при включении света в туалете или ванне автоматически включалась и вытяжка. Задача. 
  • Вы рисуете портрет и хотите сделать при помощи своего инструмента (например карандаша) максимально реалистичные глаза. Задача. 
  • Вы планируете поездку на большое расстояние и вам нужно прикинуть на какую сумму денег нужно заправить авто, и сколько времени у вас примерно займет дорога. Задача. 
  • Выборы в стране на носу, вы читаете речи политиков и вам нужно каким-то образом оценить кто из них больше обманывает или приукрашивает или манипулирует, а кто меньше. Задача.

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

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

Про законы и правила. Мне кажется многие люди (родителя и учителя) путают законы социальные или юридические с законами и правилами математики и физики. И то и другое в нашем языке мы называем одинаковыми словами “закон” и “правило”. Но это совершенно разные вещи. Если социальные правила сложились исторически или культурно, юридические законы придумываются и переписываются - источниками их формулировок являются люди, то источником законов или правил на уроках математики или физики является природа! Мне кажется это очень важный момент для осознания. Правила математики НЕ могут быть спущены постановлением из министерства, НЕ могут быть придуманы методистами, НЕ могут диктоваться прихотью или авторитетом учителя! Они не являются частью культурного наследия нации, нет особых украинских, финских, американских или российских правил или законов математики или физики. Правила математики и физики - это “подсмотренные” у природы образы и зависимости. Эти правила проверяются и оцениваются не учителем, и не авторитетом, не должностью, не научной степенью, не человеком, они проверяются и оцениваются природой. Учитель лишь может помочь подобрать более или менее подходящий пример для этого.

Сама постановка вопроса “Какие математические правила дети должны выучить?” - она глубоко неправильна и ущербна в своей сути. Зачем? Чтобы учитель потом мог проверить зазубренное? Зачем? Это никак не поможет приобретению опыта мышления и опыта решения задач. Это бессмысленно и нужно только для сиюминутной оценки и самоутверждения учителя.

Более правильная и осмысленная постановка вопроса “Какими примерами и задачами нужно заниматься с ребёнком, какие ситуации или вопросы нужно перед ним ставить, чтобы он сам ясно увидел те правила и зависимости? Чтобы ему стало ясно и понятно почему они верны”.

Учитель вообще говоря не должен напирать на детей с вопросом “Почему вы не знаете правил?”. Учитель должен спросить себя, что он сделал для того, чтобы эти правила стали понятными и ясно видимыми для детей.

Например. Не нужно заставлять детей заучивать “a + b = b + a”. Нужно подумать как с ними заниматься чтобы они это ясно увидели сами. Если детей учить складывать кучки предметов вместе (камешки, карандаши, ...) и дать им время (!), заниматься с ними этим пару месяцев, то они сами заметят, что неважно какую кучку к какой докладывать - количество предметов в результате выйдет всегда одно и то же, что левую кучку взять и доложить к правой, что наоборот. Или, например, если у нас есть три кучки предметов, то дети со временем заметят что общее количество предметов не изменяется в зависимости от порядка в каком эти кучки складывать - порядка в каком пересчитывать... Таким образом, они могут открыть для себя (математичеcкое) правило природы “(a + b) + c = a + (b + c)”.

Например. Не нужно заставлять детей заучивать “a × b = b × a”. Нужно подумать как и чем нужно заниматься с детьми чтобы они ясно увидели что результат умножения не зависит порядка множителей. Для этого удобно выстраивать предметы в прямоугольники и тогда видно что 5 рядов по 4 предмета, это тоже самое что и 4 ряда по 5 предметов.

Например. Не нужно заставлять детей зубрить формулу “расстояние = скорость × время”. А также, как делают у некоторых учителей, сразу три формулы: s = v×t, v = s/t, t = s/v. Нужно подумать какие проблемы и вопросы нужно перед ними поставить, чтобы эта зависимость стала для них со временем ясной и очевидной. Один из возможных путей такой. Давать два-три месяца текстовые задачи вида “За 1 час машина проезжает столько-то. Сколько она проедет за 5 часов?”. И наоборот “За 7 часов проезжает столько-то. Какое расстояние проедет за один час?”

Замечание. В обсуждениях в фейсбуке некоторые люди высказывались что важен порядок в вычислениях со скоростью. Это чушь. 5 км/ч × 7 ч = 35 км = 7 ч × 5 км/ч. Проблемы могут быть только когда человек бездумно применяет формулу неправильно, например делит вместо того, чтобы умножать.

Замечание. Также в комментариях промелькнуло что-то вроде “в педагогических вузах рассказывают что порядок важен для какой-то науки из высших соображений”. Так вот, что действительно важно, и что нужно доносить детям ещё до школы и во время школы, что бывают действия для которых важен порядок. Классический пример - надевать трусы, а потом штаны, это не то же самое что штаны, а потом трусы. Классический пример из школьной математики - повороты. Если мы поворачиваем в плоскости, то например повернуть любую фигуру по часовой стрелке на 30 градусов, а потом на 40 - то это тоже самое что повернуть фигуру сначала на 40, а потом на 30. Но например для поворотов в пространстве это уже не так - результат зависит от порядка (вспомните кубик-рубик). Ещё один пример: что выгоднее - сначала получить скидку на 5%, а потом ещё на 15% или если у вас уже есть скидка на 15% и к ней будет дополнительная 5%? (подумайте, это классический развод в рекламе). Ещё пример: порядок очень важен при управлении - когда есть ряд работ разной сложности и объёма, которые нужно в каком-то порядке поручить работникам. Общая длительность будет зависеть от порядка. Важно осознавать сам факт, что бывают действия и ситуации в которых результат очень сильно зависит от порядка в котором эти действия производятся. И что нужно об этом (зависит или не зависит) думать. В обычном школьном умножении обычных чисел результат НЕ зависит от порядка, точка. Я привел выше пример из природы (выкладывание материальных предметов в прямогольники) почему это так.

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

Мы должны определиться ради чего мы учим детей? Ради оценок? Ради способа записи спущенного в методичках из министерства образования? Ради способа записи который субъективно нравится вашему школьному учителю? Ради заучивания кучи формул и правил без понимания откуда они берутся и почему они правильные? Или может быть ради тренировки остроты мышления в различных ситуациях и ради ясности и понимания законов природы.

P. S. Педвузы нужно уничтожить.