Я аспирант по математике, и сделал мой студент в области компьютерных наук. Я веду блог под названием Math ∩ Programming, в котором я исследую приложения математики к программированию (и наоборот), и я должен признать, что большинство менее математических аспектов информатики я считаю довольно сухими и не вдохновленными (в основном, моя оппозиция все смешные хаки, которые идут в системное программирование в моем опыте в промышленности).
С другой стороны, в моем блоге я рассматриваю такие проблемы, как распознавание лиц (довольно много линейной алгебры), методы шифрования, машины Тьюринга и клеточные автоматы, модели для прогнозирования активности серийных убийц, поисковые системы и куча других математических концепций. , Самое приятное то, что я могу воплотить идеи и любые свои собственные!
Чтобы ваш друг любил программировать, как и все мы, найдите его по-настоящему интереснымпроект. Программный аспект не останется без его работы над продуктом, который он находит красивым. Что касается языков, я рекомендую Mathematica, Racket (очень дружелюбный, но все же мощный производный Scheme), Python и Haskell. Mathematica, вероятно, лучший, потому что он может выборочно реализовывать свои собственные математические функции и использовать встроенные библиотеки Mathematica для завершения проекта (например, написать функцию, которая вычисляет коэффициенты Фурье, а затем использовать Mathematica для выполнения оставшегося анализа, например, как фильтрация, генерация изображения и т. д.). Даже базовые темы, такие как интеграция, дают интересные проекты (различные квадратурные правила, интеграция Монте-Карло, плавный переход к машинному обучению с большими наборами данных).
Кроме того, похоже, что многие ответы здесь получены от людей, которые не занимаются математикой, или которые не использовали языки, которые они предлагают для создания математического программного обеспечения. Причина, по которой люди рекомендуют Haskell, заключается в том, что она максимально приближена к буквальной реализации теории категорий и хорошо согласуется с некоторыми математическими определениями некоторых основных понятий. Но если ваш друг близок к вашему возрасту, то он математически не готов к теории категорий (эта зрелость более или менее бесполезна до окончания школы, и его трудно учить самому), и в качестве первого языка у Haskell самый крутойКривая изучения предлагаемых языков (возможно, Пролог круче). Я использовал Haskell для реализации компилятора Javascript и в итоге получил очень красивый элегантный кусок кода, но для таких интуитивно понятных вещей, как переменная мутация, вам уже приходится копаться в нетривиальных монадах.
Python и Mathematica будут намного дружелюбнее, а Mathematica имеет самую малую кривую обучения просто потому, что все библиотеки упакованы в приятный пользовательский интерфейс с потрясающей документацией (просто нажмите F1!). С другой стороны, есть одна книга, о которой я слышал (но не читал), которая одновременно обеспечивает переход к продвинутой математике и введение в Хаскелл . Кажется, у вас есть положительные отзывы Amazon, так что вы можете проверить это. Он может перейти на такие языки, как C # и Java, если он когда-нибудь захочет заняться промышленными делами, но, скорее всего, ему никогда не нужно будет входить в эти джунгли (а многие отраслевые математические науки в любом случае - чистый Matlab).
Но, как я уже сказал, с правильным проектом изучение языка становится радостью, каким бы он ни был.