В настоящее время я программист, мне почти 16 лет, и я в значительной степени сузил свою карьеру до степени, включающей степень информатики или электротехники (я знаю, что они совсем другие, но этот вопрос касается моего друга), но мой друг не уверен
Он очень заинтересован в математике и очень хорошо, и я думаю , что он будет пользоваться программированием , но он не хочет , чтобы попробовать ( изменить он есть желание попробовать , но никогда раньше не делал). Может ли кто-нибудь дать мне совет относительно языка или инструмента, который он мог бы использовать в программировании (на достаточно базовом уровне, который я предполагаю) для решения математических задач или использования какой-либо математики.
Поскольку я говорю, что ему очень нравится математика, но я думаю, что ему бы понравилось программирование, проблема в том, что я не хочу, чтобы его отталкивали вещи, не относящиеся к вводным уровням, такие как распределение памяти и др. Я знаю, что это очень важно, но суть в том, что я хочу, чтобы он немного изучил программирование с математикой, и, надеюсь, если он достаточно заинтересован, он может начать изучать программирование как программирование.
Изменить: Дело не в том, что он совершенно не заинтересован - более того, он не активно изучал этот район раньше, возможно, потому что он не проинформирован об этом. Я не хотел бы заставлять его делать то, чего он не хочет, я вижу в этом небольшой толчок, чтобы он мог научиться программированию. Если ему это не нравится - достаточно справедливо, я не могу это контролировать и не хочу, но если он получит удовольствие - этот толчок будет правильным.
Ответы:
Если вы хотите «математически подобный» язык, Haskell - ваш лучший друг (для вашего лучшего друга). Вы можете легко создавать новые функции без хлопот. Это лучшая языковая рекомендация, которую я могу дать вам, ваш друг. Вот несколько ссылок:
Mathematica
Mathematica Вольфрама - еще один интерес, который он может иметь.
Хотя это дорого, оно того стоит. Вот несколько ссылок:
Алгоритмы
Алгоритмы важны для любой программы, но ваш собеседник должен начать с них, когда он освоится с языком. Вот еще несколько ссылок:
Надеюсь это поможет! Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь комментировать! Кстати, все эти ссылки ведут на бесплатные ресурсы. Если вы хотите печатную книгу, у меня есть несколько рекомендаций, просто оставьте комментарий!
источник
x = x + 1
просто смешно.Функциональное программирование и языки в семье ML или Haskell, как правило, вполне соответствуют уму математиков.
источник
Если он специализируется в математике, то он, несомненно, в конечном итоге будет заниматься программированием, если не на языках низкого уровня, таких как C ++, то на более высоком уровне, специфических для математики, таких как Maple или Mathematica, в зависимости от того, что он делает.
Кроме того, в зависимости от области его исследований он может закончить прикладной математикой или статическим анализом, которые потребуют значительного объема программирования. Ему лучше привыкнуть к программированию сейчас, независимо от того, что он решит.
источник
Научи его Хаскеллу. Это язык, на котором вы можете думать так же, как в математике:
Я бы посоветовал вам показать ему http://learnyouahaskell.com , один из лучших учебных пособий для Haskell.
источник
Как человек, который изучал математику (я получил степень бакалавра по чистой математике и только что получил степень магистра по прикладной математике / статистике), а затем осознал интересность / практичность / важность программирования в дальнейшей карьере, я очень ценю этот вопрос. Я бы хотел, чтобы у меня был такой друг, как ты, 10 лет назад, чтобы подтолкнуть меня к программированию.
Вы оба должны проверить проект Эйлера . Что это такое?
Хотя это не предложение для конкретного языка, это было бы хорошим стимулом для начала программирования (особенно если уже есть интерес к математике). Проблемы начинаются очень легко и доступно, но быстро становятся очень сложными и / или трудными. Хороший вызов и мотивация, которые вы оба, вероятно, понравится.
Что касается того, какой язык использовать, у меня есть опыт работы с C ++, R, Matlab и Mathematica, которые все великолепны и широко используются в математическом сообществе. Но, в частности, я настоятельно рекомендую изучать Python, который очень полезен для математики, но не настолько ограничен математикой, как некоторые другие (на случай, если он захочет иметь больше возможностей в дальнейшей жизни). Начать работу с Python легко, но есть множество вещей, которые нужно выучить. Это также бесплатно в отличие от некоторых других. C ++ также может быть хорошим выбором, но с самого начала может иметь больше препятствий.
источник
Для математиков наибольшее включение - это алгоритмы. Ваш друг должен начать реализовывать их на Python (это дружелюбно).
Числовые вычислительные среды, такие как MATLAB, будут полезны для матричных манипуляций, построения графиков функций и данных, реализации алгоритмов.
источник
Это зависит от области математики, которая его интересует.
Если он больше интересуется абстрактной алгеброй или комбинаторикой, ему, вероятно, понравится Хаскель, поскольку система сложного типа допускает прямое программирование различных математиков. ATS также может быть вариантом.
Я бы порекомендовал Learn You a Haskell для отличного блага для вводного руководства и чисто функциональных структур данных для алгоритмов.
Если он больше интересуется матричным анализом, дифференциальными уравнениями или динамическими системами, я бы порекомендовал Matlab , NumPy или Octave . APL через Dyalog также может представлять интерес; хотя я бы не стал его начинать. Численные рецепты , хотя в C ++ можно адаптировать, чтобы служить хорошим руководством по алгоритмам.
Если он хочет делать статистику, то R - естественный выбор.
источник
Я аспирант по математике, и сделал мой студент в области компьютерных наук. Я веду блог под названием Math ∩ Programming, в котором я исследую приложения математики к программированию (и наоборот), и я должен признать, что большинство менее математических аспектов информатики я считаю довольно сухими и не вдохновленными (в основном, моя оппозиция все смешные хаки, которые идут в системное программирование в моем опыте в промышленности).
С другой стороны, в моем блоге я рассматриваю такие проблемы, как распознавание лиц (довольно много линейной алгебры), методы шифрования, машины Тьюринга и клеточные автоматы, модели для прогнозирования активности серийных убийц, поисковые системы и куча других математических концепций. , Самое приятное то, что я могу воплотить идеи и любые свои собственные!
Чтобы ваш друг любил программировать, как и все мы, найдите его по-настоящему интереснымпроект. Программный аспект не останется без его работы над продуктом, который он находит красивым. Что касается языков, я рекомендую Mathematica, Racket (очень дружелюбный, но все же мощный производный Scheme), Python и Haskell. Mathematica, вероятно, лучший, потому что он может выборочно реализовывать свои собственные математические функции и использовать встроенные библиотеки Mathematica для завершения проекта (например, написать функцию, которая вычисляет коэффициенты Фурье, а затем использовать Mathematica для выполнения оставшегося анализа, например, как фильтрация, генерация изображения и т. д.). Даже базовые темы, такие как интеграция, дают интересные проекты (различные квадратурные правила, интеграция Монте-Карло, плавный переход к машинному обучению с большими наборами данных).
Кроме того, похоже, что многие ответы здесь получены от людей, которые не занимаются математикой, или которые не использовали языки, которые они предлагают для создания математического программного обеспечения. Причина, по которой люди рекомендуют Haskell, заключается в том, что она максимально приближена к буквальной реализации теории категорий и хорошо согласуется с некоторыми математическими определениями некоторых основных понятий. Но если ваш друг близок к вашему возрасту, то он математически не готов к теории категорий (эта зрелость более или менее бесполезна до окончания школы, и его трудно учить самому), и в качестве первого языка у Haskell самый крутойКривая изучения предлагаемых языков (возможно, Пролог круче). Я использовал Haskell для реализации компилятора Javascript и в итоге получил очень красивый элегантный кусок кода, но для таких интуитивно понятных вещей, как переменная мутация, вам уже приходится копаться в нетривиальных монадах.
Python и Mathematica будут намного дружелюбнее, а Mathematica имеет самую малую кривую обучения просто потому, что все библиотеки упакованы в приятный пользовательский интерфейс с потрясающей документацией (просто нажмите F1!). С другой стороны, есть одна книга, о которой я слышал (но не читал), которая одновременно обеспечивает переход к продвинутой математике и введение в Хаскелл . Кажется, у вас есть положительные отзывы Amazon, так что вы можете проверить это. Он может перейти на такие языки, как C # и Java, если он когда-нибудь захочет заняться промышленными делами, но, скорее всего, ему никогда не нужно будет входить в эти джунгли (а многие отраслевые математические науки в любом случае - чистый Matlab).
Но, как я уже сказал, с правильным проектом изучение языка становится радостью, каким бы он ни был.
источник
Если ваш друг пользуется формальной логикой и находит искусственный интеллект интересным, он может захотеть взглянуть на Пролог .
На этом языке вы формулируете свои предикаты (исходные предположения, «факты») и правила вывода («отношения»), а затем задаете вопросы.
Затем Пролог уходит и выясняет, можно ли ответить на вопрос, используя только данные факты и отношения, и, если да, говорит вам ответ.
Итак, вы говорите, что "Том - это кошка" и "Все кошки - животные" и спрашиваете "Том ли это животное?" и вы получите ответ "правда".
Или вы можете попросить его «перечислить всех животных, о которых вы знаете», и вы получите единый список «Том».
Конечно, синтаксис немного сложнее, но вы поймете общую идею.
источник
Лучший способ побудить вашего друга попробовать - это заставить его начать программировать, не слишком задумываясь о том, что он программирует.
Как только он будет готов больше заниматься «программированием», вы можете начать с одной и той же книги и изучать программирование на более математической основе. Две из моих любимых книг:
НИЦ «Структура и интерпретация компьютерных программ» (Абельсон / Суссман)
"Земля Лиспа: научись программировать на Лиспе, по одной игре за раз!" (Барский) , преподает программирование через упражнения по программированию игр.
SICP можно свободно просматривать на веб-сайте MIT Press. .
Если ваш друг склонен к математике, Lisp не представляет трудностей и освобождает вас от необходимости изучать какой-либо специальный синтаксис. Я думаю, что Лисп легче учить, чем Хаскелл.
источник
Я согласен с Хаскеллом, но с практической точки зрения ему следует также изучать язык на широко используемой абстрактной машине. Я имею в виду язык JVM или язык .NET, конечно.
На этих платформах есть языки, которые немного интереснее флагманских языков. На JVM взгляните на Clojure и Scala. На платформе .NET взгляните на F #.
Был также язык .NET от Microsoft Research под названием c-omega, который был очень интересным, но это был просто исследовательский проект.
источник
Matlab обычно используется для математического и научного программирования. Это язык, основанный на сценариях, его не сложно изучить, и все проблемы с памятью скрыты от пользователя.
Программная инженерия и электротехника могут быть объединены в компьютерную инженерию.
источник
Если ваш друг не желает попробовать программирование, я не понимаю, почему вы хотите вызвать проблему. Я думаю, что ключом к тому, чтобы быть программистом, является желание учиться, и если он не хочет учиться, то программирование, вероятно, не для него
Но, как говорится, лучше всего было бы создать небольшую программу и показать ее ему. Возможно, оставьте некоторые его части незавершенными и посмотрите, сможете ли вы заинтересовать его, чтобы он помог вам закончить. Я знаю, что алгоритмы и логика, стоящие за программой, гораздо интереснее, чем написание синтаксиса, поэтому, возможно, постарайтесь, чтобы он помог вам с логикой программы, а затем вы идете и кодируете объект и позволяете ему увидеть результаты этого.
Если он вообще проявляет интерес к исходному коду, то покажите ему, как писать свои собственные вещи. Лично я думаю, что сам язык не имеет значения, поскольку его легко изучать, и у него много документации.
источник
Есть целая бесплатная математическая библиотека и сообщество, построенное вокруг Python. Я бы начал с «Мудреца», ему должно действительно понравиться его использование, и он научится программированию на Python.
источник
Я думаю, что вы должны показать своему другу несколько разных вариантов, например:
Я думаю, что C и LISP являются хорошими отправными точками, показывая, что разные языки могут лучше подходить для разных задач. Я не верю в использование Haskell или Erlang для всего.
Машинный код (или ассемблер) для простого процессора тоже может быть интересен. Я всегда был счастлив, что начал с машинного кода на своем первом C64 . ( MOS 6510 ) Практический опыт, который трудно получить, будучи взрослым, с ограниченным временем, которое нужно «тратить».
источник
Для меня программирование начинается с желания «что-то сделать», «что если?» вопрос:
«Я хотел бы создать свой собственный веб-сайт», поэтому изучите HTML и т. Д.
«Я ненавижу, что мне приходится нажимать X или видеть Y на этом веб-сайте каждый раз, когда я посещаю. Разве нет способа автоматизировать это?» Итак, вы узнаете о букмарклетах или написании расширений для браузера.
«Я хочу каталогизировать всю свою музыку, и ни один из инструментов, которые я видел, не делает это так, как я хочу», чтобы вы узнали о базах данных.
«Я хочу отслеживать расходы на мой математический клуб», чтобы вы узнали о электронных таблицах, макросах программирования или, возможно, даже базах данных.
Для того , чтобы диск , чтобы действительно быть там, основная проблема имеет должны исходить от него . Я попытался бы найти проблему, которую он хочет решить, и затем выбрать инструмент / язык / систему, которая позволяет ему автоматизировать / запрограммировать решение.
источник
Хаскелл и Mathematica - путь, по моему мнению. Большинство функциональных языков также хороши для математики. Python тоже хорош, ознакомьтесь с математической документацией .
источник