Время от времени возникает вопрос: Следует ли программистам изучать математику? вопрос возникает в хабах в интернете. Сегодня, как часто, это на HackerNews. Обсуждение обычно такое же:

Программист: Что это за странные закорючки XIX века, которые я не могу найти на своей клавиатуре, и почему бы вам просто не написать компилятор для математики?

Математик: Написание компилятора на 2 тысячи лет устаревшего кода с быстро развивающимися стандартами было бы пустой тратой времени и, вероятно, никому не пригодилось бы. Также непонятно даже, что означает «компилятор для математики», когда любой волен изобретать свою собственную нотацию и приписывать ей произвольное семантическое значение. И вы говорите мне, что это не было полностью произвольным решением поместить {} и `на клавиатуре, но не найти места для ∞ и ∩? Вы используете emacs / vim и имеете 3-4 вида ключевых модификаторов, и вы говорите мне, что не можете просто написать плагин для этих символов? Мы, безусловно, отлично поработали, включив ~ 2 тыс. Смайлов в повседневные пользовательские интерфейсы.

Программист: Математические обозначения похожи на C ++, но в 50 раз сложнее. Он оптимизирован для старых мертвецов-белых мужчин, знающих латынь и пишущих на бумаге. Он не оптимизирован для использования с компьютером.

Математик: Кто утверждает, что математику нужно делать на компьютере? Это человеческий язык (в основном английский, а не латынь). Чтобы ваш аргумент был последовательным, вы также должны утверждать, что английский является ломаным, потому что он оптимизирован для письма и разговора, а не для использования с компьютером. Фактически, все, что не является программированием, сломано, потому что оно не оптимизировано для использования с компьютером! Возможно, вместо этого вам следует изучить математику без клавиатуры или сделать компьютеры лучше в качестве интерфейса для изучения математики (обратите внимание на то, что компьютер является инструментом, а не мастером). Но если бы вы выучили математику, вы бы обнаружили, что она позволяет вам писать отличные программы и понимать, почему они работают. Если ваш аргумент состоит в том, что математика слишком чужда, страшна и громоздка, чтобы оторваться от компилятора, улавливающего ваши опечатки и ошибки типа, то мне очень жаль. Продолжайте наслаждаться своими интеллектуальными ограничениями, которые вы сами себе наложили, и давайте надеяться, что они никогда не узнают, как автоматизировать написание приложений CRUD.

Программист: Системные программисты потратили так много лет на размышления о том, как создавать абстрактные логические системы, удобные для использования людьми, математики должны уловить намек!

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

Программист: Требуется много работы, чтобы придумать эстетику CS, а когда она у вас есть, в вашем мозгу остается место только для «хороших» систем, которые действуют по вашим правилам.

Математик: Это просто ... неправда. Тот факт, что вы можете иметь дело с нормальным человеческим языком, опровергает ваше утверждение.

Программист: Но вы все еще живете в том, что программисты до смерти боятся математики!

Математик: Вы меня там поняли.

Лично я думаю, что если бы математика была представлена ​​большинству программистов в том же возрасте и в том же стиле, что и программирование, это не было бы проблемой. Проблема в том, что преподаватели молодежи даже больше боятся математики и математической записи, чем программисты! Они не знают, к каким ресурсам направить заинтересованных детей или как развить «естественную беглость» в математике за пределами базовой механики алгебры. (Я был одним из тех детей)

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

И по мере того, как вы изучаете математику, вы опираетесь на предыдущую математику. Если вы учитесь читать и видите слово «диккенсовский», но вы находитесь на уровне чтения «см. Спот-бег». Конечно, вы не сможете произнести это слово и даже не начнете понимать его семантическое значение, которое относится к качеству определенных книг, которые вы не можете прочитать! Все это означает, что язык действительно сложен, отчасти потому, что он сложен, а отчасти потому, что за многими словами стоит большая культурная история. Но это определенно не свидетельство против английского как полезного инструмента.

Я не говорю, что математика идеальна, и я не говорю, что математики прекрасно пишут о математике для широкой аудитории. Это действительно разные вопросы, и я серьезно ненавижу то, как читают большинство «вводных» учебников! Но математика здесь не враг. Оправдания, которые всплывают снова и снова, - это отвлекающий маневр, чтобы не признать, что «математика - это сложно, и у меня нет времени на ее изучение, и она мне не нужна в достаточной степени, чтобы оправдать приобретение и поддержание справедливой беглости». Очевидно, существуют способы, которыми преподаватели математики и писатели могли бы облегчить учащимся обучение, но, честно говоря, это не сделало бы всю математику так намного проще. Это сложный по своей сути предмет. Если вы хотите этому научиться, привыкните к тому, чтобы идти очень медленно и проверять себя на каждом шагу.