Я аспірант математики, а також магістратуру з інформатики. Я тримаю блог під назвою Math ∩ програмування, в якому вивчаю застосування математики до програмування (і навпаки), і я повинен визнати, що я знаходжу більшість менш математичних аспектів інформатики досить сухими та не натхненими (в основному, моє протиставлення усі смішні хаки, які входять в системне програмування з мого досвіду в галузі).
З іншого боку, у своєму блозі я розглядаю такі проблеми, як розпізнавання обличчя (зовсім небагато лінійної алгебри), методи шифрування, машини Тюрінга та стільникові автомати, моделі прогнозування активності серійних вбивць, пошукові системи та купу інших математичних концепцій . Найкраща частина полягає в тому, що я можу реалізувати ідеї, і будь-які свої власні!
Щоб ваш друг любив програмування, як і решта нас, знайдіть його по-справжньому цікавимпроект. Аграрний аспект не буде залишатися без його роботи над продуктом, який він вважає прекрасним. Щодо мов, то я рекомендую Mathematica, Racket (дуже дружню, але все ще потужну похідну схему), Python та Haskell. Математика - це, мабуть, найкраще, тому що він може вибірково реалізовувати власні математичні функції та використовувати вбудовані Mathematica в бібліотеках для завершення проекту (наприклад, написати функцію, яка обчислює коефіцієнти Фур'є, а потім використовувати Mathematica, щоб зробити решту аналізу, наприклад як фільтрація, генерування зображень тощо). Навіть основні теми, такі як інтеграція, дають захоплюючі проекти (різні правила квадратури, інтеграція Монте Карло, легкий перехід до машинного навчання з великими наборами даних).
Крім того, здається, що багато відповідей тут є від людей, які не займаються математикою, або які не використовували мови, які вони пропонують робити з математичним програмним забезпеченням. Причина, по якій люди рекомендують Хаскелл, полягає в тому, що він максимально наближений до буквальної реалізації теорії категорій і добре відповідає деяким математичним визначенням деяких базових понять. Але якщо ваш друг близький до вашого віку, то він не готовий до теорії категорій математично (ця зрілість є більш-менш марною до аспірантури, і нечестиво важко вчити себе), і як перша мова Хаскелл має найрізноманітніші.крива вивчення запропонованих мов (можливо, Пролог крутіший). Я використовував Haskell для реалізації компілятора Javascript, і в мене вийшов дуже гарний елегантний фрагмент коду, але для інтуїтивно зрозумілих речей, таких як мінлива мутація, вам вже доведеться задиратися в нетривіальних монадах.
Python та Mathematica будуть набагато приємнішими, а Mathematica має найменшу криву навчання просто тому, що всі бібліотеки упаковані в приємний інтерфейс користувача з приголомшливою документацією (просто натисніть F1!). З іншого боку, є одна книга, про яку я чув (але не читав), яка забезпечує як перехід до передової математики, так і вступ до Хаскелла одночасно . Здається, є позитивні відгуки про Амазонку, тому ви можете перевірити це. Він може перейти до таких мов, як C # та Java, якщо він коли-небудь захоче займатися галузями, але, швидше за все, йому ніколи не потрібно буде входити в ці джунглі (і багато матеріалів з галузевої математики все одно є чистим Matlab).
Але, як я вже сказав, при правильному проекті вивчення мови стає радістю, яким би не був проект.