Чи потрібна математика для програмування? [зачинено]


117

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

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

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


7
Через десять років я закликав свого вчителя математики, щоб сказати йому, що я ніколи не використовував просунуту математику всю свою кар'єру. Дік рухається, я знаю, але чудове питання! Плюс один.
Кріс МакКолл


Будь ласка, дивіться найвищу відповідь на це запитання .
Борис Стітнікі

Швидше ніж. Близько це слід перенести на програмістів.
Кріс Кадмор

Відповіді:


111

Щоб відповісти на ваше запитання, як воно було поставлене, я повинен би сказати: "Ні, математика не потрібна для програмування". Однак, як припускають інші люди в цій темі, я вважаю, що існує взаємозв'язок між розумінням математики та вмінням "мислити алгоритмічно". Тобто вміти абстрактно думати про кількість, процеси, відносини та докази.

Я почав програмувати, коли мені було дев'ять років, і було б натяжкою сказати, що я багато навчився математиці на тому етапі. Однак, доклавши трохи зусиль, я зміг зрозуміти змінні, для циклів, goto-висловлювань (пробачте, я був Vic 20 BASIC і я ще не читав жодного Dijkstra) та основної геометрії координати для розміщення графіки на екрані .

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

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

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

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


6
Хочеться додати, що математика - це не просто тренування з вагою для ваших розумових сил, але й відкриває двері до нових проблем та рішень. Наприклад, під час мого стажування з обробки зображень, я не зможу реалізувати наші алгоритми усунення шуму без глибокого розуміння PDE. Отриманий код був простим, але дуже точним. І математика - це те, що нас там зайняло. Ще дивовижнішою є краса цих формул. Одне невелике вираження PDE може перекласти на кілька сторінок коду. Без початкової формули важко зрозуміти, як ви коли-небудь закінчилися з цим.
Джо

Математика не потрібна для програмування, оскільки програмування - математика. Це може бути хороша математика або погана математика (наприклад, коли довгий дзвінок орангутану транслітерується на мову Оока ), але коли програміст розробляє об'єктну модель чогось, ze (зазвичай несвідомо) виконує акт математики. Отже, знову ж таки, не потрібно читати математичні книги, щоб програмувати, але це нічого не змінює на тому, що програмування є математикою, і що (як сказав Евклід), до нього немає королівської дороги.
Boris Stitnicky

56

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

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

Є дуже хороший шанс, що якщо ти добрий в одному, ти, ймовірно, будеш добрий в іншому.


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

Суворість і дисциплінованість вирішення задачі з математики перекладається на програмування. Потрібно мати здатність деконструювати проблему і підходити до неї спочатку очевидного напрямку, а потім з більш творчих напрямків в обох дисциплінах.
Брамха Гош

4
Двоє чудових програмістів, яких я дуже захоплююсь, не вивчали інформатику, а навчилися як математики і просто змінили шлях кар’єри: ​​Мігель де Іказа та Олександр Степанов. До речі, Степанов одного разу заявив, що працюючи над математикою, "ти не починаєш з аксіом: закінчуєш аксіоми". : D
Джо Пінеда

@Liam - йдеться про відповідність шаблонів та короткострокову пам’ятку речей у пам’яті. Обидві дії вимагають цих навичок.
jcolebrand

+1 за "Є дуже хороший шанс, що якщо ти добрий в одному, ти, ймовірно, будеш добрий і в іншому."
Thorbjørn Ravn Andersen

39

інформатика! = програмування

Гаразд, серйозно, я знаю хороших і поганих програмістів, які були спеціалістами з англійської та психології, а деякі - спеціалістами з інформатики. Деякі дуже відомі хлопці, якими я захоплююсь як розробники, не мали досвіду роботи з CS. Ларрі Уолл (Perl), наприклад, був лінгвістом. З іншого боку, це допомагає дізнатися щось про домен, над яким ви працюєте, оскільки тоді ви зможете принаймні побачити, чи мають ваші дані сенс, і допомогти вашому клієнту / користувачам зрозуміти, що вони дійсно хочуть. І так, виникає питання складності обчислень та ефективних структур даних та коректності програми. Це те, що ви дізнаєтесь з інформатики, і це корисно знати майже в будь-якій галузі, але це не є ні необхідним, ні достатнім.


12
Я думаю, що найкраща цитата, яку я чув, - це "Інформатика - це не більше про комп'ютери, а астрономія, а про телескопи". (Dijkstra)
tloach

5
Я думаю, що stackoverflow.com створений в основному для подолання цього однорівневого типу відповідей, але є 15 однодумців, які підняли цю марну відповідь на початок. Я не маю нічого особистого з вами, проте я позначив вашу відповідь "образливою". Так мені принаймні.
simsim

2
@simsim: Я вважаю образливим, що люди думають, що ступінь CS - це якимось чином програмування.
tloach

3
@simsim: Не має значення, що Джоел і Джефф мали на увазі, створюючи цей веб-сайт. Вся справа в створенні спільноти, де програмісти допомагають один одному. Я думаю, що коротка відповідь Девіда відповідає правильній меті. +1
Scottie T

@ Scottie: якби все було "про створення спільноти, де програмісти допомагають один одному", то форумів та списків розсилки було б достатньо. Можливо, я був трохи суворий у своїй відповіді, але було дивно, коли перед редагуванням, звичайно, 15 користувачів проголосували за абсолютно незрозумілу "відповідь". :-)
simsim

29

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

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

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

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


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

Досить справедливо! GrayWizardx та інші: Що ви, як самоучок, що ви рекомендуєте щодо читання матеріалів? Мене масово відключили жорстоко погані способи, в яких мені навчали математику, коли я був молодшим. Я не хочу покладати провини на іншому місці, але математика була представлена ​​злісно. Тепер прийшов час викупити. Наскільки ЛЕГКО самостійно засвоїти математику, викладену тут (числення, лінійна алгебра, дискретна математика тощо)? Чи рекомендований для цього підходу певний набір підручників? Ступінь коледжу вже не є варіантом!
Еммель

1
@Emmel, я насправді побачив "Посібник з Манги з математики" та "Посібник з Манги з обчисленням" у Барнса і Благородного там, і я знаю, що побачив "Повний довідник ідіотів до лінійної алгебри" на днях. Що стосується фактичних ресурсів, то тут існують чудові веб-сайти з математики (для студентів тощо), але я не впевнений, скільки їх ще існує. Одне, що я роблю раз у раз, - це перейти до загальноосвітнього коледжу та "перевірити" уроки математики (взяти це за пропуск / провал) і просто отримати оновлення. Гавент зробив це за 5-6 років, але це було дуже корисно в останній раз.
GrayWizardx

26

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

Більшість розробників лінійного бізнесу більшість часу не потребуватиме розширеної математики. Іноді знання тригонометрії може допомогти, і, безумовно, бути здатним зрозуміти достатню кількість математики для реалізації алгоритмів, описаних математично, може бути важливим - але поза цим? Ні.

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


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

@balabaster: Іноді - але я б сказав, що це трапляється не дуже часто. Так само вам не потрібно заздалегідь знати формулу, щоб використовувати її. Будучи компетентним в математиці добре, так що ви можете зрозуміти формули , коли ви бачите їх, але ви рідко потребуєте в математиці ступеня на рівні самого ІМ.
Джон Скіт

11
Математичний ступінь? Тоді ви знаєте, що це не просто числа. У мене є два математичні ступені, і часто використовую вміст: булева алгебра для аналізу / спрощення логіки, теорії автомати / мови для побудови DSL, алгебра для аналізу продуктивності великих виходів тощо.
joel.neely

14

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


14

Я піду тут проти зерна і скажу "Так"

Я переходжу з цивільного будівництва на програмування (Бетонний відстій!). Мій математичний фон складається з звичайних матеріалів першого курсу, обчислення другого та третього курсу (Diff EQ, інтеграції обсягів, серії, перетворення Фур'є та Лапласа) та курсу числового аналізу.

Я вважаю, що моєї математики неймовірно не вистачає для комп’ютерного програмування. Є цілі області дискретної математики та логіки, яких мені не вистачає, і я виживаю лише завдяки великій бібліотеці підручників, Вікіпедії та Вольфрама. Більшість вдосконалених алгоритмів засновані на просунутій математиці, і я не в змозі розробити розширені алгоритми, не роблячи обширних досліджень (По суті, еквівалентній роботі на півкурсі.) Я, безумовно, не в змозі придумати НОВІ алгоритми, як це я просто роблю Математичні основи не матимуть плечей гігантів, на яких стояти.


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

@dbkk: Найпоширенішим завданням середнього програміста є розробка об'єктної моделі, "бізнес-логіка" деякого домену. І такий процес - це не що інше, як математика, хоча це не часто відображається тими, хто виконує завдання.
Борис Стітнікі

14

Це залежить від того, що ти робиш. Якщо ви багато займаєтеся програмуванням 3D, знання 3D-геометрії, безумовно, необхідні, чи не згодні ви? ;-) Якщо ви хочете створити новий формат зображення, як JPG, або новий аудіо формат, як MP3, ви також сильно загубитесь, якщо не можете зрозуміти косинусну або фур'єрну трансформацію, оскільки саме на цих основах ґрунтується найбільше втрата стиснення . Багато інших проблем можна вирішити краще, якщо ви досить добре знаєте математику.

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


13

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


9

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

Однак при роботі з хардкорними речами, такими як:

  • Обчислення траєкторій управління роботом
  • Створення AI-подібних додатків для підтримки невизначеності та автоматичного міркування
  • Гра з тривимірним рухом і графікою

Деякі передові знання з математики можуть стати в нагоді. І це не так, як вони є проблемами поза цим світом.

Мені довелося створити програмне забезпечення, щоб спробувати «передбачити» необхідну кількість паперу для офісу (і це було пекло просто для того, щоб знайти найкращий спосіб наблизити значення).

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


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

4
Як він використовував Тьюрінга для цього? Дошка ouia або сеанс?
Джаред Updike

8

Який тип програмування?

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

Комп'ютерна графіка вимагає великої кількості передової математики. Багато академічного комп'ютерного програмування вимагає передової математики.

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

Я сподіваюся, що ця бажання відповісти допомагає.


6

Математика потрібна розробникам у деяких галузях, але в інших майже не потрібна.

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

З іншого боку, за останні 5 років у мене було лише 2 або 3 проекти, де взагалі потрібна БУДЬ-яка кількість математики. З них було лише 1 випадки, коли пошук Google не допоміг.

Зрештою, навіть фінансові розрахунки дуже часто роблять для вас ваші клієнти і дають вам формули для їх втілення.

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


До "розробника ігор" я б додав "розробник моделювання". Я пам’ятаю ще в 1993 році, коли їхав по всьому місту, намагаючись знайти математичну книжку, достатньо просунуту для пояснення того, як на мене працюють Quaternions, щоб я міг правильно кодувати мертвий алгоритм перегляду. Дякую Богові за Інтернет сьогодні!
ТЕД

6

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

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

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


6

На мій досвід, математика в програмуванні потрібна, ви не можете від неї піти. Все програмування базується на математиці.

Випуск не чорно-білий, але більш колоритний. Питання не в тому, чи потрібна вам математика чи ні, а скільки. Більш високий рівень математики дасть вам більше інструментів і відкриє ваш розум на різні шляхи, хоча.

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

І не забувайте про рідних братів з математикою, логікою та філософією. Логіка допоможе вам ефективно використовувати caseабо switchзаяви. Філософія допоможе вам зрозуміти мислення хлопця, який написав той код, який ви змінюєте.

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


6

Я займаюся програмуванням 8 років професійно, а з 12 років я хобі.

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

Є пара голих мінімумів, які ви вже повинні зустріти. Вам потрібно знати основні алгебраїчні вирази та позначення, а також загальні комп’ютерні еквіваленти. Наприклад, потрібно знати, що таке експоненція (від 3 до 3 - це 27), а загальний комп’ютерний вираз - 3 ^ 3. Загальні позначення алгебри змінюються між мовами, але багато з них використовують дещо уніфіковану методологію. Інші (дивлячись на вас LISP) цього не роблять. Також потрібно знати порядок операцій.

Вам потрібно зрозуміти алгоритмічну думку. Спочатку це, потім це, виробляє це, що використовується в цьому розрахунку. Швидше за все, ви це розумієте чи не знаєте, і стрибати досить важко, якщо ви цього не розумієте; Я виявив, що це щось, що ти отримуєш, а не насправді те, чого ти можеш навчитися. І навпаки, деякі люди не "отримують" мистецтво. Вони не повинні стати малярами. Також у навчальній програмі CS були студенти, які не можуть зрозуміти, чому це не працює: x = z + w; z = 3; у = 5; Це не те, що вони не розуміють доповнення, це те, що вони не сприймають вимоги однозначного вираження. Якщо вони це розуміють, комп’ютер теж повинен, правда? Якщо ви не можете бачити, що трапляється з вищезазначених трьох рядків, тоді не станьте програмістом.

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

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

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

Величина також змінює речі. Якщо ви сортуєте набір фінансових даних з 1000 позицій, це не велика річ. Якщо б це було 10 мільйонів записів, ви б великою користю від того, щоб насправді знати векторну математику та глибоке розуміння сортування на бінарному рівні (як система сортується за алфавітом? Як вона знає, що "a" менше, ніж "b '?)

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

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


5

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


5

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

Тож відповідь на ваше запитання - це залежить від того, що ви намагаєтеся зробити.


5

Розширені знання з математики життєво важливі, якщо ви збираєтеся писати нову мову програмування. Або вам потрібно написати власні алгоритми.

Однак для більшості повсякденних програмувань - від веб-сайтів до заявок на обробку страхуванням - потрібна лише основна математика .


5

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

  • Не кожен може розробити інтерфейс користувача.
  • Не кожен може зробити ефективний код.
  • Не кожен може чітко коментувати та документувати.
  • Не кожен може зробити хороший алгоритм

Математика допоможе тобі до точки, але лише до точки.


5

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


5

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

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


5

Math - це інструментарій для створення програм. Я рекомендую вступ Кормена до алгоритмів. Це стосується більш "математичних" речей.

- Greatest lowest limit (managing resources) 
- Random variables (game programming)
- Topological sort (adjusting spreadsheets)
- Matrix operations (3d graphics)
- Number theory (encryption)
- Fast fourier transforms (networks)

4

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

Звичайно, якщо ви займаєтеся графічним програмуванням 3D, вам знадобляться матриці та інше. Як автор бізнес-програмного забезпечення, напевно, вам знадобиться математика статистики.

Але бути професійним програмістом майже 10 років (і ще 10 років любителем) "вища математика" - це не те, що мені потрібно було регулярно. Приблизно в 99,8% всіх випадків це просто плюс, мінус, ділення та множення в деяких інтелектуальних комбінаціях - у більшості випадків мова йде про алгоритми, а не про математику.


4

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

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


4

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

Але я б насторожено ставився до програміста, який не міг би займатися математикою. Більше того, ніж той, хто не міг малювати.


4

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

Наприклад, існує велика кількість CS-теорії планування теорії та оптимізації, яка стоїть за багатьма планувальниками в сучасних ОС. Це приклад того, що вимагало б математики, але не щось надто складне.

Але якщо чесно, для більшості матеріалів математика вам не потрібна. Те, що вам потрібно, - це навчитися вміння мислити в базі 2 та 16, наприклад, здатності розумово АБО / ІН. Наприклад, якщо у вас є байт і всередині цього байта є два 3-бітні поля та 2 марні біти, знаючи, які біти є, в яких полях активні, коли значення байту - це щось на зразок 11, зробить щось трохи швидше, ніж використовувати ручка і папір.


Ви коли-небудь вивчали теорію черг? Чи вивчали ви коли-небудь менеджери пам'яті та статистичні моделі, які змушують розробників вибирати одне за іншим? Я не обов'язково не згоден з головною вашою відповіддю, але з вашим надмірним спрощенням.
Сан-Хасінто

@San: Я впевнений, що я надто спрощую, але думаю, що більшості розробників систем ніколи не потрібно знати ці речі на цьому рівні. Я вивчав її на базовому рівні в своїх перших двох ступенях, і дещо глибше під час доктора наук, але це ніколи не було моїм форте, я вважаю за краще залишити це фахівцям. Люди з ОС, яких я знав, мали математичні навички, які мене відірвали.
Урі

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

4

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

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

Також переконайтеся, що ви знаєте, як обчислити що-небудь у будь-якій базі, особливо на базі 2, 8 та 16.

Крім того, один клас, який дійсно приніс для мене деякі концепції, був цей клас передпрограмування. Нас вчили профспілки, перехрестя та все це задоволення, і це майже рівно паралелі побіжної математики. І ми дуже сильно висвітлювали булеву логіку. Що я вважав найкориснішим, коли ми дізналися, як зменшити складні булеві заяви. Це було дуже зручно:

(x|y) & (x|z) & (x|foo)

можна спростити до

x | (y & z & foo)

Якого раніше я не зовсім зрозумів.


4

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

Ні в якому разі не виходячи з форми та форми, вам не потрібно брати чи проходити клас математики для будь-якого з цього.

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

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

Моя суть полягає в тому, що я вірю в силу волі, якщо ви хочете навчитися цьому, можна і хочете, це так просто. Вам не потрібно приймати заняття або витрачати багато грошей, наприклад, Linux і qemu, наприклад, можуть зайняти вас досить тривалий час, різні мовні програми ASM та ін. Збиваються середовища для розробки ядра, вбудовані тощо. Ви цим не обмежуєтесь , але я не вірю, що вам доведеться бігти і приймати будь-які заняття, якщо ви цього не хочете. Якщо ви хочете, тоді обов'язково пройдіть кілька електронних класів, деякі класи Cs та деякі математичні класи ..


Це не принада полум'я, а реальність. Все, що потрібно знати про цифрову електроніку та інженерію програмного забезпечення з точки зору програмування, можна підсумувати. 0, 1 і, або, ні. ці п’ять речей - це те, на чому працює цифрова електроніка та всі програми. Ви можете побудувати що завгодно за допомогою великої коробки з швидкими воротами.
old_timer

4

Вам потрібна математика. Програмування - це не що інше, як математика. Будь-які висновки теоретичної фізики не набувають практичного (застосовного) наслідку, якщо їх не пояснити з точки зору математичних рішень. Жоден з них не може бути вирішений обчислювальним шляхом, якщо їх неможливо інтерпретувати на комп'ютерах, а точніше на мовах програмування. Таким чином, різні мови створені для вирішення конкретних проблем. Але для загальних цілей та широко розповсюджених мов програмування, таких як java, c, c ++, більшість наших завдань програмування передбачає повторне (безперервне) вирішення тих самих проблем, як вилучення значень із бази даних, текстових файлів, розміщення їх у Windows (робочий стіл, веб), маніпулювання однакові значення, іноді отримуючи доступ до деяких даних з подібних пристроїв (але з урахуванням різних фірмових найменувань, різних портів і головного болю) тощо, які не передбачають більше, ніж унітарний метод,


3

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

Але взагалі, я не можу пригадати, коли останній раз я використовував будь-яку вдосконалену математику в повсякденному програмуванні, так що ні.

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