July 6th, 2014

moose, transparent

книги: love and math

Edward Frenkel, Love and Math: The Heart of Hidden Reality

Книга американского математика Эдуарда Френкеля - нечто среднее между автобиографией и научно-популярным изложением той области математики, в которой работает Френкель - программы Ленглендса.

Френкель родился и вырос в СССР, не попал на мехмат из-за антисемитизма, учился в "Керосинке" (Московский институт нефти и газа) на отделении прикладной математики и одновременно неофициально занимался чистой математикой и ходил на семинар Гельфанда; в 1989 году в возрасте 21 года получил приглашение в Гарвард на визит длиной в несколько месяцев, и уже не возвращался из США.

После прочтения книги ее название - "Love and Math" - напоминает разве что старый советский анекдот, ну помните -
В клубе объявили лекцию на тему "Народ и партия едины". Никто не пришел. Через неделю была объявлена лекция "Три вида любви". Народу набилось - тьма.

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

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

Автобиографическая часть книги довольно интересна, особенно главы о жизни в СССР, об экзаменах в МГУ, об учебе в Керосинке и начале самостоятельной математической работы. После переезда в США мы не узнаем почти ничего о жизни там (кроме первого впечатления от американского супермаркета), о разных местах в США, где автор жил и работал, или разных странах, в которых он побывал. Он рассказывает почти исключительно о конкретных математиках и физиках, с которыми работал (Ленглендс, Виттен, Виктор Кац...), и в этом есть немало интересного, но все-таки жаль, что о американской жизни автора, об университетах, о преподавании и студентах, обо всем этом нет практически ни слова.

Вместо этого Френкель пытается подробно рассказать нам "на пальцах" о том, чем занимается современная математика - эти объяснения приводятся не отдельно от автобиографического текста, а паралелльно с ним: поначалу небольшими вставками, а к концу книги уже превращаются в основной материал. К сожалению, эта попытка обречена на неудачу. Мне не хочется долго и подробно разбирать эту неудачу, потому что я искренне уважаю его старания и стремления добиться этой достойной, благородной цели. Френкель действительно старается, подбирает интересные аналогии, подбадривает читателя, чтобы тот не пугался незнакомых терминов, и старается объяснить самыми простыми словами самое важное. Но увы, главное впечателение, которое по-моему останется у неискушенного читателя, который продерется сквозь все эти главы - это восхищение столь очевидным и неиссякаемым энтузиазмом и глубокой любви самого Френкеля к его предмету. Это тоже что-то, это тоже немало, но это совсем не понимание, пусть даже поверхностное, того, чем занимается алгебраическая геометрия и программа Ленглендса.

Одна из главных проблем этого объяснительного материала - это что Френкель недостаточно хорошо ощущает то, насколько даже самый тривиальный для него математический язык все равно останется непонятным и пугающим для читателя, если он в последний раз видел математику в школе или на первом курсе университета. Автор как бы понимает это и не понимает; он напоминает читателю о том, что такое рациональные числа и корень из двух и комплексные числа, но при этом не ощущает, что когда он пишет, просто походя, "если у m и n есть общий делитель d (т.е. m=dm', n=dn')", что кто-то может за этим не уследить; а у такого читателя, для которого он собственно написал книгу, в глазах при этом двоится: что за m', что за n' ниоткуда взялись? Или при обсуждении групп симметрий в начале книги - Френкель красиво и понятно вводит симметрии с помощью картинок вертящегося квадратного и круглого столов - но совершенно не ощущает никакой сложности для читателя с тем, чтобы сами симметрии сделать элементами другого математического объекта, с операциями между ними; для него это настолько само собой разумеющееся действие, что он не пытается даже как-то подробно его суть объяснить. Вполне возможно, что некоторые из наиболее простых научно-популярных частей книги можно было бы сделать более понятными для широкого читателя, если бы автор, скажем, попросил отзывов у школьных учителей математики, да поциничнее. Хотя до программы Ленглендса все равно, мне кажется, таким путем не дойти.

Что мы имеем в итоге? Интересный мемуар, хоть и довольно краткий, о советских годах и изучению математики в Москве 80-х; еще более краткий и уже не столь интересный мемуар о последующей половине жизни в Америке; и много научно-популярной математики, до конца которой вы не дочитаете, если у вас нет высшего математического образования, и из начала-середины которой вы поймете лишь, что современная математика изучает симметрию абстрактных объектов на очень глубоком уровне, тесно связана с квантовой физикой, и Эдуард Френкель очень заразительно ее любит. Большего от этой книги не стоит ожидать, меньшего тоже.
moose, transparent

hacker's delight (программистское)

Читаю Hacker's Delight, которая оправдывает свое название. Много трюков с битами, простых и не очень. Кстати, из тех, что попроще, можно настрогать легко разминки для ума. Например, у вас есть два беззнаковых целых числа x,y, и вы хотите вычислить их среднее арифметическое, округленное вниз. Докажите себе в уме, что это равно

x&y + (x^y)>>1

(здесь ^ это xor, конечно. Кстати, та же формула работает для знаковых x,y, только нужно, чтобы >> было арифметическим сдвигом. В Джаве это так и есть автоматически, в C/C++ можно >>1 заменить на /2).

Вы спросите, а зачем это нужно, почему просто не написать (x+y)/2? Ну хотя бы потому, что может случиться переполнение, если числа достаточно большие. А что, это реально мешает в жизни?

И это хороший повод напомнить об истории с багом в алгоритме двоичного поиска в массиве, которую обнаружили и починили в Джаве аж в 2006 году. Вот отличная запись Джоша Блоха об этом. Если вкратце, то вычисляя середину отрезка mid = (low+high)/2 в двоичном поиске, мы получим переполнение, если массив достаточно большой, больше примерно миллиарда элементов, что в наше время 64-битных процессов уже вполне случается. Однако этот код провисел в знаковой книге Programming Pearls, не говоря уж о куче библиотек и других книг, десятки лет, пока кто-то не обратил внимание. Эта история, кстати, поучительна и притом довольно малоизвестна.

Конкретно двоичный поиск починить легче, потому что известно, что low меньше или равно high, и можно просто написать: low + (high-low)/2. Но в случае, когда неизвестно, кто из x,y больше другого, вышеуказанная формула - наверное, самый экономный способ вычислить среднее арифметическое без переполнения.