Знакомство с программированием для математика [закрыто]


30

В настоящее время я программист, мне почти 16 лет, и я в значительной степени сузил свою карьеру до степени, включающей степень информатики или электротехники (я знаю, что они совсем другие, но этот вопрос касается моего друга), но мой друг не уверен

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

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

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


17
Почему вы хотите подтолкнуть своего друга в направлении, которое ему не интересно?
HLGEM

3
Для записи, многие программисты, с которыми я работал, имеют математические степени. Кроме того, они довольно хороши.
AngryBird

1
Я согласен с @HLGEM. Я бы ненавидел это, если бы кто-то подтолкнул меня к чистой теоретической математике. Точно так же те, кто хотел бы этот материал, возненавидели бы это, если бы их подталкивали к скучным прикладным вещам.
Работа

4
Чтобы взглянуть на вещи - вам 16. Вы не программист, вы студент, который занимался программированием. Ваш друг не математик, он студент, который любит (и выучил немного) математику. Хотя мне нравится ответ от @ perl.j, я думаю, что вы можете переборщить с этим.
Джоэл Этертон

2
@ perl.j: Пока кто-то не имеет необходимой степени, чтобы показать необходимую «основную область изучения» в качестве доказательства, он не математик. Даже кто-то в университете, чья специализация - математика, еще не математик.
Джоэл Этертон

Ответы:


60

Математический логотип

Если вы хотите «математически подобный» язык, Haskell - ваш лучший друг (для вашего лучшего друга). Вы можете легко создавать новые функции без хлопот. Это лучшая языковая рекомендация, которую я могу дать вам, ваш друг. Вот несколько ссылок:

Mathematica

Mathematica Вольфрама - еще один интерес, который он может иметь.

Mathematica is a computational software program used in scientific, engineering, and mathematical fields and other areas of technical computing. It was conceived by Stephen Wolfram and is developed by Wolfram Research of Champaign, Illinois.

Хотя это дорого, оно того стоит. Вот несколько ссылок:

Алгоритмы

Алгоритмы важны для любой программы, но ваш собеседник должен начать с них, когда он освоится с языком. Вот еще несколько ссылок:

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



2
Я - специалист по математике, и я могу рекомендовать Haskell как классный с точки зрения математики. Мне также нравится читать некоторые теоретические вещи, которые идут с этим, намного больше, чем большинство языков.
Тео Белер

2
Если он изучит Haskell, он может позже даже перейти к Agda , языку с зависимой типизацией, подходящему для создания доказательств.
Peter C

4
@ SK-логика Как ты можешь так говорить? Математика - это изучение новых логических систем и их рассуждение (не забывайте, что математики изобрели машину Тьюринга). Вы честно думаете, что кто-то, кто может справиться с математикой, не может справиться с идеей переменной мутации? И моя точка зрения заключается в том, чтобы сделать что-то столь же простое, как переменная мутация в Haskell, требуется монада магазина! Сказать, что это проще, чем x = x + 1просто смешно.
JeremyKun

2
@Bean, это была моя первая реакция на оператор присваивания (и тогда я ничего не знал, кроме примитивных линейных уравнений из математики). С тех пор я неоднократно видел одну и ту же реакцию. Я сознательно пытался представить концепции функционального программирования тем, у кого нет опыта программирования, постепенно переходя к императивным вещам. Сначала было всегда легко, и все такое "WTF?!?" внешность всегда начиналась только с внедрения концепций императива и ООП.
SK-logic

18

Функциональное программирование и языки в семье ML или Haskell, как правило, вполне соответствуют уму математиков.


Очень верно! Бесконечные списки и все, что отлично подходит для математических умов.

14

Если он специализируется в математике, то он, несомненно, в конечном итоге будет заниматься программированием, если не на языках низкого уровня, таких как C ++, то на более высоком уровне, специфических для математики, таких как Maple или Mathematica, в зависимости от того, что он делает.

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


1
Вы также можете попытаться проникнуть в его сознание с помощью Sage ( sagemath.org ).
Антон Барковский

Вот еще один высокоуровневый, специфичный для математики язык: math.uiuc.edu/Macaulay2
RyanTM

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

12

Научи его Хаскеллу. Это язык, на котором вы можете думать так же, как в математике:

  • Функция - это то, что отображает входные данные в выходные.
  • Материал оценивается по мере необходимости
  • Вывод типа и сумасшедшая система типов
  • Удобный синтаксис
  • Отличное сообщество (например, на StackOverflow )
  • Монады

Я бы посоветовал вам показать ему http://learnyouahaskell.com , один из лучших учебных пособий для Haskell.


11

Как человек, который изучал математику (я получил степень бакалавра по чистой математике и только что получил степень магистра по прикладной математике / статистике), а затем осознал интересность / практичность / важность программирования в дальнейшей карьере, я очень ценю этот вопрос. Я бы хотел, чтобы у меня был такой друг, как ты, 10 лет назад, чтобы подтолкнуть меня к программированию.

Вы оба должны проверить проект Эйлера . Что это такое?

Project Euler - это серия сложных задач математического / компьютерного программирования, для решения которых требуется нечто большее, чем просто математическое понимание. Хотя математика поможет вам найти элегантные и эффективные методы, для решения большинства задач потребуется использование компьютера и навыков программирования.

Хотя это не предложение для конкретного языка, это было бы хорошим стимулом для начала программирования (особенно если уже есть интерес к математике). Проблемы начинаются очень легко и доступно, но быстро становятся очень сложными и / или трудными. Хороший вызов и мотивация, которые вы оба, вероятно, понравится.

Что касается того, какой язык использовать, у меня есть опыт работы с C ++, R, Matlab и Mathematica, которые все великолепны и широко используются в математическом сообществе. Но, в частности, я настоятельно рекомендую изучать Python, который очень полезен для математики, но не настолько ограничен математикой, как некоторые другие (на случай, если он захочет иметь больше возможностей в дальнейшей жизни). Начать работу с Python легко, но есть множество вещей, которые нужно выучить. Это также бесплатно в отличие от некоторых других. C ++ также может быть хорошим выбором, но с самого начала может иметь больше препятствий.


+2 для Project Euler, собирался добавить в качестве комментария к основному вопросу, пока я не увидел ваш ответ. ОП и его друг должны обязательно ввязаться в это вместе.
cobaltduck

10
  • Для математиков наибольшее включение - это алгоритмы. Ваш друг должен начать реализовывать их на Python (это дружелюбно).

  • Числовые вычислительные среды, такие как MATLAB, будут полезны для матричных манипуляций, построения графиков функций и данных, реализации алгоритмов.


10

Это зависит от области математики, которая его интересует.

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

Я бы порекомендовал Learn You a Haskell для отличного блага для вводного руководства и чисто функциональных структур данных для алгоритмов.

Если он больше интересуется матричным анализом, дифференциальными уравнениями или динамическими системами, я бы порекомендовал Matlab , NumPy или Octave . APL через Dyalog также может представлять интерес; хотя я бы не стал его начинать. Численные рецепты , хотя в C ++ можно адаптировать, чтобы служить хорошим руководством по алгоритмам.

Если он хочет делать статистику, то R - естественный выбор.


5

Я аспирант по математике, и сделал мой студент в области компьютерных наук. Я веду блог под названием Math ∩ Programming, в котором я исследую приложения математики к программированию (и наоборот), и я должен признать, что большинство менее математических аспектов информатики я считаю довольно сухими и не вдохновленными (в основном, моя оппозиция все смешные хаки, которые идут в системное программирование в моем опыте в промышленности).

С другой стороны, в моем блоге я рассматриваю такие проблемы, как распознавание лиц (довольно много линейной алгебры), методы шифрования, машины Тьюринга и клеточные автоматы, модели для прогнозирования активности серийных убийц, поисковые системы и куча других математических концепций. , Самое приятное то, что я могу воплотить идеи и любые свои собственные!

Чтобы ваш друг любил программировать, как и все мы, найдите его по-настоящему интереснымпроект. Программный аспект не останется без его работы над продуктом, который он находит красивым. Что касается языков, я рекомендую Mathematica, Racket (очень дружелюбный, но все же мощный производный Scheme), Python и Haskell. Mathematica, вероятно, лучший, потому что он может выборочно реализовывать свои собственные математические функции и использовать встроенные библиотеки Mathematica для завершения проекта (например, написать функцию, которая вычисляет коэффициенты Фурье, а затем использовать Mathematica для выполнения оставшегося анализа, например, как фильтрация, генерация изображения и т. д.). Даже базовые темы, такие как интеграция, дают интересные проекты (различные квадратурные правила, интеграция Монте-Карло, плавный переход к машинному обучению с большими наборами данных).

Кроме того, похоже, что многие ответы здесь получены от людей, которые не занимаются математикой, или которые не использовали языки, которые они предлагают для создания математического программного обеспечения. Причина, по которой люди рекомендуют Haskell, заключается в том, что она максимально приближена к буквальной реализации теории категорий и хорошо согласуется с некоторыми математическими определениями некоторых основных понятий. Но если ваш друг близок к вашему возрасту, то он математически не готов к теории категорий (эта зрелость более или менее бесполезна до окончания школы, и его трудно учить самому), и в качестве первого языка у Haskell самый крутойКривая изучения предлагаемых языков (возможно, Пролог круче). Я использовал Haskell для реализации компилятора Javascript и в итоге получил очень красивый элегантный кусок кода, но для таких интуитивно понятных вещей, как переменная мутация, вам уже приходится копаться в нетривиальных монадах.

Python и Mathematica будут намного дружелюбнее, а Mathematica имеет самую малую кривую обучения просто потому, что все библиотеки упакованы в приятный пользовательский интерфейс с потрясающей документацией (просто нажмите F1!). С другой стороны, есть одна книга, о которой я слышал (но не читал), которая одновременно обеспечивает переход к продвинутой математике и введение в Хаскелл . Кажется, у вас есть положительные отзывы Amazon, так что вы можете проверить это. Он может перейти на такие языки, как C # и Java, если он когда-нибудь захочет заняться промышленными делами, но, скорее всего, ему никогда не нужно будет входить в эти джунгли (а многие отраслевые математические науки в любом случае - чистый Matlab).

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


3

Если ваш друг пользуется формальной логикой и находит искусственный интеллект интересным, он может захотеть взглянуть на Пролог .

На этом языке вы формулируете свои предикаты (исходные предположения, «факты») и правила вывода («отношения»), а затем задаете вопросы.

Затем Пролог уходит и выясняет, можно ли ответить на вопрос, используя только данные факты и отношения, и, если да, говорит вам ответ.

Итак, вы говорите, что "Том - это кошка" и "Все кошки - животные" и спрашиваете "Том ли это животное?" и вы получите ответ "правда".

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

Конечно, синтаксис немного сложнее, но вы поймете общую идею.


Пролог разочарованно близок к логике первого порядка, но на самом деле несовместим, так как не может различить «недоказанное» и «ложное». В некотором смысле это аккуратный язык, но я бы не стал толкать его на математику и называть это логикой программирования.
Дэвид Торнли

Разве вы не можете просто проверить отрицание?
Билл Мичелл

2

Лучший способ побудить вашего друга попробовать - это заставить его начать программировать, не слишком задумываясь о том, что он программирует.

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

SICP можно свободно просматривать на веб-сайте MIT Press. .

Если ваш друг склонен к математике, Lisp не представляет трудностей и освобождает вас от необходимости изучать какой-либо специальный синтаксис. Я думаю, что Лисп легче учить, чем Хаскелл.


1

Я согласен с Хаскеллом, но с практической точки зрения ему следует также изучать язык на широко используемой абстрактной машине. Я имею в виду язык JVM или язык .NET, конечно.

На этих платформах есть языки, которые немного интереснее флагманских языков. На JVM взгляните на Clojure и Scala. На платформе .NET взгляните на F #.

Был также язык .NET от Microsoft Research под названием c-omega, который был очень интересным, но это был просто исследовательский проект.


1

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

Программная инженерия и электротехника могут быть объединены в компьютерную инженерию.


0

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

Но, как говорится, лучше всего было бы создать небольшую программу и показать ее ему. Возможно, оставьте некоторые его части незавершенными и посмотрите, сможете ли вы заинтересовать его, чтобы он помог вам закончить. Я знаю, что алгоритмы и логика, стоящие за программой, гораздо интереснее, чем написание синтаксиса, поэтому, возможно, постарайтесь, чтобы он помог вам с логикой программы, а затем вы идете и кодируете объект и позволяете ему увидеть результаты этого.

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


0

Есть целая бесплатная математическая библиотека и сообщество, построенное вокруг Python. Я бы начал с «Мудреца», ему должно действительно понравиться его использование, и он научится программированию на Python.


0

Я думаю, что вы должны показать своему другу несколько разных вариантов, например:

  • С
  • LISP / Схемы
  • Бейсик
  • Bourne-оболочки
  • пролог

Я думаю, что C и LISP являются хорошими отправными точками, показывая, что разные языки могут лучше подходить для разных задач. Я не верю в использование Haskell или Erlang для всего.

Машинный код (или ассемблер) для простого процессора тоже может быть интересен. Я всегда был счастлив, что начал с машинного кода на своем первом C64 . ( MOS 6510 ) Практический опыт, который трудно получить, будучи взрослым, с ограниченным временем, которое нужно «тратить».


Я должен не согласиться. Почему юношу, интересующийся математикой, привлекает машинный код? А почему клиент? Сборка предполагает слишком много знаний о процессорах. C аналогичным образом предъявляет множество требований, которые лучше всего оставить тем, кто хочет изучать серьезное программирование: указатели, регистры, область видимости, типы. Для первого введения в программирование для такого человека гораздо лучше то, что фокусируется на алгоритмах или приложениях математических идей (вероятность, случайность, симуляции). Python, Lisp / Forth, Basic даже. Борна-оболочки ?? Почему? ...
Асад Эбрахим

0

Для меня программирование начинается с желания «что-то сделать», «что если?» вопрос:

  • «Я хотел бы создать свой собственный веб-сайт», поэтому изучите HTML и т. Д.

  • «Я ненавижу, что мне приходится нажимать X или видеть Y на этом веб-сайте каждый раз, когда я посещаю. Разве нет способа автоматизировать это?» Итак, вы узнаете о букмарклетах или написании расширений для браузера.

  • «Я хочу каталогизировать всю свою музыку, и ни один из инструментов, которые я видел, не делает это так, как я хочу», чтобы вы узнали о базах данных.

  • «Я хочу отслеживать расходы на мой математический клуб», чтобы вы узнали о электронных таблицах, макросах программирования или, возможно, даже базах данных.

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


-2

Хаскелл и Mathematica - путь, по моему мнению. Большинство функциональных языков также хороши для математики. Python тоже хорош, ознакомьтесь с математической документацией .

Этот модуль всегда доступен. Он обеспечивает доступ к математическим функциям, определенным стандартом C.

Эти функции нельзя использовать с комплексными числами; использовать функции с тем же именем из Cmath модуля если вам требуется поддержка комплексных чисел. Различие между функциями, которые поддерживают комплексные числа, и функциями, которые не выполняют, так как большинство пользователей не хотят изучать математику настолько, насколько требуется для понимания комплексных чисел. Получение исключения вместо комплексного результата позволяет раньше обнаружить неожиданное комплексное число, используемое в качестве параметра, так что программист может определить, как и почему он был сгенерирован в первую очередь.

Следующие функции предоставляются этим модулем ...

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.