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


30

Наразі я програміст, мені майже 16 років, і я значно скоротив свою кар’єру до чогось, що стосується ступеня інформатики або ступеня електротехніки (я знаю, вони зовсім інші, але це питання стосується мого друга), але мій друг не такий впевнений.

Він дуже зацікавлений в математиці і дуже добре, і я думаю , що він буде користуватися програмуванням , але він не хоче , щоб спробувати ( змінити він є бажання спробувати , але ніколи раніше не робив). Хто-небудь може дати мені пропозиції щодо мови чи інструменту, який він міг би перешкоджати програмуванню (на досить базовому рівні, я вважаю) для вирішення математичних задач або залучення якоїсь математики.

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

Редагувати: Справа не в тому, що він абсолютно нецікавий - більше того, що раніше він активно не досліджував цей район, можливо, тому, що про нього не інформують. Я б не хотів змушувати його робити щось, чого він не хоче, я вважаю це ще трохи поштовхом, щоб він міг дізнатися про програмування. Якщо йому це не подобається - досить чесно, я не можу це контролювати і не хочу, але якщо виявиться, що йому сподобається - цей потік стане правильним.


17
Чому ти хочеш підштовхнути свого друга в той напрямок, який його не цікавить?
HLGEM

3
Для запису, багато програмістів, з якими я працював, мають ступінь математики. Крім того, вони непогані.
AngryBird

1
Я згоден з @HLGEM. Я б ненавиджу, якби хтось підштовхував мене до чистої теоретичної математики. Так само, ті, хто хотів би цей матеріал, ненавидять його, якби їх підштовхували до нудних застосованих речей.
Робота

4
Якщо поглянути на речі - Ти 16. Ти не програміст, ти студент, який займався програмуванням. Ваш друг не математик, він учень, який любить (і навчився трохи) математики. Хоча мені подобається відповідь від @ perl.j, я думаю, що ти можеш надмірно дійти до цього.
Джоель Етертон

2
@ perl.j: Поки хтось не має необхідного ступеня, щоб показати необхідну "первинну область навчання" як доказ, він не є математиком. Навіть хтось в університеті, чий основний напрям є математика, ще не є математиком.
Джоель Етертон

Відповіді:


60

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

Якщо ви хочете "схожу на математику" мову, Haskell - ваш найкращий друг (для вашого найкращого друга). Ви можете легко робити нові функції без клопоту. Це найкраща мовна рекомендація, яку я можу дати вам для вашого друга. Ось декілька посилань:

Математика

Математика Вольфрама - ще один інтерес, який він може мати.

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, він може пізніше навіть перейти до Агди , мови, що залежно від типу, підходить для доказів.
Пітер C

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

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

18

Функціональне програмування та мови в сім'ї ML або Haskell, як правило, добре підходять до думки математиків.


Дуже правильно! Нескінченні списки та все, що чудово підходить для математики.

14

Якщо він спеціалізується на математиці, то, без сумніву, в кінцевому підсумку робить зовсім небагато програм, якщо не мовами низького рівня, такими як C ++, то вищим рівнем, специфікою з математики, мовами, як Maple або Mathematica, залежно від того, що він робить.

Крім того, залежно від сфери його дослідження, він може закінчитися прикладною математикою або статичним аналізом, що вимагає значної кількості програмування. Він краще звик до програмування зараз незалежно від того, що він вирішить.


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

Ось ще одна мова вищого рівня, що відповідає математиці: math.uiuc.edu/Macaulay2
RyanTM

Я пропоную вам просто дозволити йому виявити програмування. Коли він йому піддається, і він, безумовно, вимагатиме зробити щось, що вимагає від нього зробити щось з математично визначеної мови, йому це буде подобатися або ненавидіти. Якщо йому це подобається, коли це станеться, він зможе вибрати мови, які йому найбільше підходять. Справа не в тому, що ви не повинні допомагати своєму другові, якщо він не виявив інтересу, то вам слід відмовитися.
Рамхаунд

12

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

  • Функція - це те, що відображає введення для виведення
  • Речі оцінюються за потребою
  • Введіть умовивід і систему божевільного типу
  • Зручний синтаксис
  • Велике співтовариство (наприклад, на StackOverflow )
  • Монади

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


11

Оскільки хтось, хто вивчав математику (я маю бакалавр з чистої математики і щойно отримав ступінь MS в галузі прикладної математики / статистики) і пізніше зрозумів цікавість / практичність / важливість програмування далі в моїй кар’єрі, я дуже ціную це питання. Я б хотів, щоб я мав такого, як ти, 10 років тому, щоб підштовхнути мене до програмування.

Ви повинні перевірити Project Euler . Що це?

Проект Ейлер - це низка складних проблем математичного / комп’ютерного програмування, для вирішення яких потрібне більше, ніж просто математичне розуміння. Хоча математика допоможе вам досягти елегантних та ефективних методів, для вирішення більшості проблем знадобиться використання комп’ютера та навичок програмування.

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

Щодо того, якою мовою користуватися, у мене є досвід C ++, R, Matlab та Mathematica, які всі чудово і широко використовуються в математичному співтоваристві. Але більш конкретно, я настійно пропоную вивчити Python, який є дуже корисним для математики, але не так обмежений математикою, як деякі інші (на випадок, якщо він хоче більше варіантів у подальшому в житті). Початок роботи з Python легко, але є багато речей, про які слід дізнатися. Він також безкоштовний на відміну від деяких інших. C ++ також може бути хорошим вибором, але може мати більше перешкод з самого початку.


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

10
  • Для математиків найбільший поворот - це алгоритми. Ваш друг повинен почати впроваджувати їх у Python (дружньому).

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


10

Це залежить від галузі математики, яка його цікавить.

Якщо він більше звертається до абстрактної алгебри чи комбінаторики, він, мабуть, хотів би Хаскелл, оскільки система складного типу дозволяє безпосередньо програмувати різноманітні математики. ОВС також може бути варіантом.

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

Якщо він більше звертається до матричного аналізу, диференціальних рівнянь чи динамічних систем, я рекомендую Matlab , NumPy або Octave . APL через Dyalog також може представляти інтерес; хоча я б не починав його з цього. Цифрові рецепти , хоча в C ++ можуть бути адаптовані, щоб слугувати хорошим посібником до алгоритмів.

Якщо він хоче робити статистику, то R - це природний вибір.


5

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

З іншого боку, у своєму блозі я розглядаю такі проблеми, як розпізнавання обличчя (зовсім небагато лінійної алгебри), методи шифрування, машини Тюрінга та стільникові автомати, моделі прогнозування активності серійних вбивць, пошукові системи та купу інших математичних концепцій . Найкраща частина полягає в тому, що я можу реалізувати ідеї, і будь-які свої власні!

Щоб ваш друг любив програмування, як і решта нас, знайдіть його по-справжньому цікавимпроект. Аграрний аспект не буде залишатися без його роботи над продуктом, який він вважає прекрасним. Щодо мов, то я рекомендую Mathematica, Racket (дуже дружню, але все ще потужну похідну схему), Python та Haskell. Математика - це, мабуть, найкраще, тому що він може вибірково реалізовувати власні математичні функції та використовувати вбудовані Mathematica в бібліотеках для завершення проекту (наприклад, написати функцію, яка обчислює коефіцієнти Фур'є, а потім використовувати Mathematica, щоб зробити решту аналізу, наприклад як фільтрація, генерування зображень тощо). Навіть основні теми, такі як інтеграція, дають захоплюючі проекти (різні правила квадратури, інтеграція Монте Карло, легкий перехід до машинного навчання з великими наборами даних).

Крім того, здається, що багато відповідей тут є від людей, які не займаються математикою, або які не використовували мови, які вони пропонують робити з математичним програмним забезпеченням. Причина, по якій люди рекомендують Хаскелл, полягає в тому, що він максимально наближений до буквальної реалізації теорії категорій і добре відповідає деяким математичним визначенням деяких базових понять. Але якщо ваш друг близький до вашого віку, то він не готовий до теорії категорій математично (ця зрілість є більш-менш марною до аспірантури, і нечестиво важко вчити себе), і як перша мова Хаскелл має найрізноманітніші.крива вивчення запропонованих мов (можливо, Пролог крутіший). Я використовував Haskell для реалізації компілятора Javascript, і в мене вийшов дуже гарний елегантний фрагмент коду, але для інтуїтивно зрозумілих речей, таких як мінлива мутація, вам вже доведеться задиратися в нетривіальних монадах.

Python та Mathematica будуть набагато приємнішими, а Mathematica має найменшу криву навчання просто тому, що всі бібліотеки упаковані в приємний інтерфейс користувача з приголомшливою документацією (просто натисніть F1!). З іншого боку, є одна книга, про яку я чув (але не читав), яка забезпечує як перехід до передової математики, так і вступ до Хаскелла одночасно . Здається, є позитивні відгуки про Амазонку, тому ви можете перевірити це. Він може перейти до таких мов, як C # та Java, якщо він коли-небудь захоче займатися галузями, але, швидше за все, йому ніколи не потрібно буде входити в ці джунглі (і багато матеріалів з галузевої математики все одно є чистим Matlab).

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


3

Якщо ваш друг користується формальною логікою і вважає штучний інтелект цікавим, він, можливо, захоче поглянути на Prolog .

За допомогою цієї мови ви формулюєте свої предикати (початкові припущення, "факти") та правила умовиводу ("відносини"), а потім ставите запитання.

Потім Пролог вимикається і розбирається, чи можна відповісти на питання, використовуючи лише дані факти та відносини, і якщо так, то вам відповість.

Тож ви кажете йому, що «Том - кішка» і «всі коти - тварини» і запитуєш: «Том тварина?» і ви отримаєте відповідь "правда".

Або ви можете попросити його "перерахувати всіх тварин, про яких ви знаєте", і ви отримаєте єдиний список "Том".

Звичайно, синтаксис трохи складніший за це, але ви отримуєте загальне уявлення.


Пролог неприємно близький до логіки першого порядку, але насправді несумісний, оскільки не має можливості розрізнити "недоведене" та "помилкове". У чомусь це акуратна мова, але я б не натискав її на математика і називав її логікою програмування.
Девід Торнлі

Ви не можете просто перевірити заперечення?
Білл Мішель

2

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

Після того, як він буде готовий більше займатися "програмуванням", ви могли б почати з тієї самої книги і вивчити програмування з більш математичної основи. Дві мої улюблені книги:

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

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


1

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

На цих платформах є мови, які трохи цікавіші, ніж флагманські мови. На JVM подивіться на Clojure та Scala. На платформі .NET подивіться на F #.

Була також мова .NET від Microsoft Research під назвою c-omega, що було дуже цікаво, але це був лише дослідницький проект.


1

Matlab зазвичай використовується для математичного та наукового програмування. Це мова, що базується на сценаріях, її не важко вивчити, а всі проблеми пам'яті приховані від користувача.

Програмне забезпечення та електротехніка можуть бути об'єднані в комп'ютерну інженерію.


0

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

Але, маючи на увазі, найкращим може бути створення невеликої програми і показ її перед ним. Можливо, залиште частину його незакінченою і подивіться, чи зможете ви зацікавити його, щоб допомогти вам закінчити це. Я знаю для мене, що алгоритми та логіка програми є набагато цікавішою, ніж написання синтаксису, тому, можливо, спробуйте, і він допоможе вам допомогти вам з логікою програми, а потім ви підете і зашифруйте те, що дозволить йому побачити результати цього.

Якщо він взагалі проявляє інтерес до вихідного коду, то покажіть йому, як писати власні речі. Особисто я думаю, що мова сама по собі не має значення, доки її легко вивчити та має багато документації.


0

Навколо Python існує ціла безкоштовна математична бібліотека та громада. Я б почав із "Sage", він повинен із задоволенням користуватися ним і навчиться програмуванню на Python до речі.


0

Я думаю, ви повинні показати своєму другові кілька різних варіантів, як-от:

  • С
  • LISP / Схема
  • ОСНОВНІ
  • бурно-оболонка
  • Пролог

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

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


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

0

Для мене програмування починається з того, щоб хотіти "щось робити", а "що робити?" питання:

  • "Я хотів би створити власний веб-сайт", тому дізнайтеся про HTML тощо.

  • "Я ненавиджу, що мені потрібно натискати X або що я бачу Y на цьому веб-сайті кожного разу, коли я відвідую. Хіба немає способу автоматизувати це?" Так ви дізнаєтесь про закладки або написання розширень для браузера.

  • "Я хочу каталогізувати всю свою музику, і жоден із побачених інструментів не робить це так, як я хочу", тому ви дізнаєтесь про бази даних.

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

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


-2

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

Цей модуль завжди доступний. Він забезпечує доступ до математичних функцій, визначених стандартом С.

Ці функції не можна використовувати зі складними числами; використовуйте однойменні функції з модуля cmath, якщо вам потрібна підтримка складних чисел. Розмежування функцій, які підтримують складні числа, і тих, які не робляться, оскільки більшість користувачів не хочуть вивчати стільки математики, скільки потрібно для розуміння складних чисел. Отримання винятку замість складного результату дозволяє раніше виявити несподіване комплексне число, яке використовується як параметр, щоб програміст міг визначити, як і чому він був сформований в першу чергу.

Наступні функції надаються цим модулем ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.