Чи потрібно бути хорошим в математиці, щоб бути хорошим програмістом? [зачинено]


78

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

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


1
@ Марк Не обов’язково. Вивчити предмет і сподобатися йому - це дві дуже різні речі.
Maxpm

3
Ти король? Або з’єднані близнюки? Якщо ні, я пропоную вам дотримуватися "Я", коли посилаєтесь на себе.
drxzcl

1
@jk - ти правдивіше, швидше за все, physics.about.com/od/alberteinstein/p/einsteinpro.htm все ще вважає, що вміє програмувати гарний вміст; p
Гарет Клаборн

3
Я думав, що ніколи не любив математику. Згодом у житті я зрозумів, що просто не задоволений синтаксисом.
MrFox

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

Відповіді:


83

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

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


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

133

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

Писання - це спілкування, а математика / програмування - це процес чіткого логічного мислення (таким чином, що ви не можете помилитися; рівняння не врівноважується або програма не компілюється). Зокрема, це логічне мислення проявляється у:

  • Можливість оцінити / зрозуміти різницю між числами: O (n ^ 2) проти O (lg (n)), інтуїтивне відчуття КБ проти МБ проти ГБ, наскільки повільний диск порівняно з ОЗП. Якщо ви не усвідомлюєте, наскільки маленький КБ порівняно з ГБ, ви витрачаєте час на оптимізацію речей, які не мають значення.
  • Функції / функціональне програмування (чи випадково, що рівняння f (x) = x ^ 2 настільки схоже на те, як ви б написали цей метод? Слова "алгоритм" і "функція" були навколо в світі математики задовго до народився перший комп’ютер :-))
  • Основна алгебра, щоб створити і змінити свої власні рівняння, взяти середні показники, основні статистичні дані

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


1
Математичний мажор проти математичного мислення: це як різниця між знанням усіх формул фізики та вмінням точно відскочити гумовий кулю з дошки за 20 ярдів!
TehShrike

9
Додам, що багато хороших програмістів знають, як грати в шахи чи йти :-)
xanatos

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

18
Математичне мислення - це ключ до програмування. Я додаю свій голос, щоб наголосити саме на цьому.
Гас

4
+1 Математика є життєво важливою для розуміння мов програмування, оскільки це основа нашого ремесла. Більшість конструкцій мови програмування, якими ми користуємось щодня, виходять з математичних дисциплін, таких як обчислення лямбда.
MattDavey

53

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

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

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

Коли я був у школі в середині 80-х, коли домашні комп’ютери, де не дуже часто, я часто писав програми для вирішення своїх домашніх завдань з математики. Я часто не міг зробити це в голові, але я міг застосувати будь-яку формулу, яка була потрібна як програмне забезпечення. Вам не потрібно бути іншим Піфагором, щоб обробити найдовшу сторону прямокутного трикутника, вам просто потрібно мати змогу кодувати a² + b² = h²на своїй обраній мові.


3
Фінанси та бухгалтерський облік не такі вже й погані, якщо ви не робите ціноутворення на варіанти чи щось подібне.

5
У вас є сенс, Кріс, але навіть із фінансовими додатками ви швидше використовуєте формули, ніж розробляти їх.
Dan Diplo

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

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

3
@Donal Fellows, формальна логіка - це математика. І філософи так чи інакше визнаються за їхній історичний внесок у математику, а також математики, які мстилися (наприклад, вигадуючи якісь дивні речі, такі як "монадологія").
SK-логіка

30

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


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

1
Ви впевнені, що ви хороший програміст? :)
Рассел

17

Я думаю, що важливо уважно придивитися, чому ви не любите математику.

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

Програмування! = Математика. Для мене він навіть не «відчуває» себе математикою (і мені сподобалось математика, не дивлячись на те, що я не дуже вдала до кінця офіційного навчання в ній). Багато навичок, які ви можете використовувати в математиці, є корисними, необхідними навіть при програмуванні, але багато програмістів навчають себе здебільшого. Якщо ви не любите математику в школі, це майже нульовий вплив на ваші здібності та задоволення від програмування.


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

16

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


11
+1. Вам також знадобиться математика, якщо ви хочете займатися "високим рівнем" таких речей, як обробка сигналів, машинне навчання, комп'ютерний зір, 3D-рендерінг, фізичні симуляції, анімація, обчислювальна геометрія, криптографія та, мабуть, багато інших сфер, про які я не можу думати правильно зараз.
nikie

2
@nikie: Так, але це прикладна математика. Величезна різниця. ^^
габлін

Тьфу. Насправді математика - це не універсальна мова. Логіка є. А Логіка - це домен Філософів. У будь-якому випадку, як насправді працюють комп'ютери, вам краще знати електричну / електронну техніку та формальну філософію, ніж математику. Математика сама по собі потрібна лише в тому випадку, якщо ви займаєтеся інформатикою, що насправді не програмує в контексті кар’єри.
RibaldEddie

14

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

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

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


13

Майже всі відповіли: "чи потрібно знати математику, щоб бути хорошим програмістом?" Правильна відповідь на це: «Ні, не дуже, але це допомагає», як багато хто вже говорив.

Але моя інтерпретація запитання полягає в тому, "чи існує сильна кореляція між математичною здатністю та здатністю до програмування?" Правильна відповідь на це: «Так, є». Якщо ви боретеся за допомогою алгебри, геометрії та обчислення, то ви, мабуть, не дуже добре справляєтесь з абстракціями та / або мислите логічно. Якщо ти поганий у математиці, ти, мабуть, ніколи не будеш чудовим програмістом. (Не те, що не варто намагатися.)


11

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


11

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

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

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

Підсумок вищесказаного полягає в тому, що ви повинні бути комфортними з числами - ви, звичайно, повинні зрозуміти, чому "У світі є 10 типів людей, тих, хто розуміє бінарне, а тих, хто цього не робить", смішно. Але ви, мабуть, вибачили "2 + 2 = 5 ... за дуже великі значення 2".


+1, це справді гнітюче; Я насправді сміявся з цього жарту.
Бен

10

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

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


9

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

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

Правда, програмування навчило мене алгебри, тому що практично все - це лише алгебраїчний вираз.

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


Після 10 років розробки програмного забезпечення я повернувся до школи і переживаю те саме. Я вважаю обчислення та статистику набагато простішими, оскільки я можу пов'язати більшість концепцій з деякою функціональністю, яку я написав роками. Я розлючуюся, коли думаю про невідомі діаграми Венна, коли я навчав себе, як приєднується SQL. Це як обман.
Хіт Ліллі

7

Це дещо залежить від того, що саме ви робите, хоча це точно не може зашкодити.

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

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

Бо як би ти не дивився на це, на найнижчому рівні все, що ти робиш, зводиться до математики.


7

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

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

Аналогічно, розуміння обчислення лямбда було б неоціненним для архітектора ОС або дизайнера мови.


7

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

Зрештою, те, що робить корисним для великого програміста, - це той, хто здатний розуміти логіку, робочі процеси, може вчитися на прикладі та готовий дослідити рішення. Крім того, у вас є НАВЧАННЯ БІЗНЕСУ, для якого ваші заявки. Я ненавиджу програмістів, які мріють, що вони не розуміють бухгалтерський облік, але пишуть програми обліку. Вони завжди роблять неправильні припущення і дійсно сповільнюють розвиток.

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

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

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

Подумайте над цим, я ніколи не зустрічав бухгалтера з науковим калькулятором на їхньому столі!


5

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

Таким чином, в uni / College люди отримають математичні проблеми, які їм потрібно вирішити в предметах compsci, але те, що ви зазвичай знайдете, - це те, що математику насправді важче вирішити, ніж код, необхідний для реалізації рішення.

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


5

Ви повинні або вивчити математику, або створити свою власну. Так чи інакше, важливо бути добрим у тій чи іншій формі.

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

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

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

Тим НЕ менше , було б можливо , щоб бути хорошим програмістом без математики, однак важко.


1
Мислення всіх значень як кольорів майже має ДУЖЕ сенс. Коли ви переходите занадто далеко на один кінець спектра, ви закінчуєтесь на протилежному кінці ...
Maxpm

Градуси (як у 0 - 360, за винятком 0 - 256) іноді теж допомагають =) Вам не потрібно думати в числовому сенсі про кольори або градуси настільки, наскільки значення "повне".
Гарет Клаборн

5

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

Коротше кажучи: можливо, вам не потрібно чітко вчитися математиці , але, просто будучи програмістом, ви, мабуть, навчились математиці, не усвідомлюючи. Тобто, будучи «хорошим програмістом», ви також справді єте математиком (певною мірою).

Каррі-Говард Кореспонденція показує , що я маю в виду: в основному, в ньому йдеться , що математичні докази і деякі комп'ютерні програми «ізоморфні», тобто, вони різні способи написати те ж саме. Звичайно, насправді це складніше, ніж це, але я не математик, тому це найкраще пояснення, яке я можу дати. Сподіваємось, це не надто далеко від позначки.

Підсумовуючи це, не тільки багато полів у CS та програмуванні передбачають багато математики, але навіть основні ідеї програмування (наприклад, булеві) в основному є математикою в маскуванні.


4

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

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

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

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


4

Так, звичайно.

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

Проведення бізнес-програмування заводу вимагає навичок роботи з базою даних. Будучи хорошим програмістом бази даних, потрібно зрозуміти, як працюють бази даних та які алгоритми використовуються процесором запитів, коли він переводить ваші запити. Без розуміння обмежень та похідних (або навіть основного розуміння того, що рядок y = x перетинає лінію y = x ^ 2 двічі), неможливо точно порівняти внутрішній план запитів хеш-відповідності внутрішнього плану запитів приєднання з вкладеним циклом приєднання план запитів.

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

Я б сказав, що у певний час слід було мати певний досвід із наступним:

  1. 3 семестри Calc
  2. Diff Eq
  3. Лінійна алгебра
  4. Сучасна алгебра
  5. Основна ймовірність, підрахунок та статистика

4

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

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


4

Я завжди вважав програмування не що інше, як математику.

Це просто не схоже на алгебру середньої школи.


4

Математика - це передпокій програмування.

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

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

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


4

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

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

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

Програмування - це мистецтво. Математика - це мистецтво. Якщо ви поєднаєте їх обох, ви будете кращим художником.


Програмування є принципово просто прикладною логікою, а насправді математика - це просто лише застосована логіка.
RibaldEddie

3

Немає.

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

Комп'ютери відмінно займаються математикою, тому має сенс, що ранні комп’ютери широко використовувались для виконання «грубої роботи», пов’язаної з великою кількістю складної математичної роботи. Багато програмного забезпечення все ще вирішує складні задачі з математики; у цьому випадку, якщо ви добре володієте математикою, ви допоможете написати кращу програму, але це не те, що робить вас хорошим програмістом.


3

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

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


3

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

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


3

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

Першим моїм завданням як програміста було робити 3D графіку для планування місії B-52 та Cruise Missile. Це був інтенсивний математичний додаток, але мені справді потрібен був лише доступ до людей, які були хорошими / великими в математиці. Мені не потрібно було знати формулу для обчислення великої відстані кола між двома точками. Мені потрібно було знати, як перетворити формулу, щоб вона працювала мовою програмування. Те саме з імітацією польоту. Боїнг зробив усю математику, яку ми просто повинні були застосувати.

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

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


3

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


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

@Bryan, я можу пов’язати це
jasonco

3

Чи можливо людям, які не люблять математику, стати хорошим програмістом?

Ні, ні-ні, ні, так і ні!

Ні, тому що часто вам це потрібно.

(! (a | (! (b && c) || d) && (! e)))

Чому це не працює?

foo ('a', 'b', 19, g(h))
bar ('c', 'd', 44) 

чи можна це переписати більш абстрактно?

Чи 968 мс більше або менше 0,7 с? Скільки МБ вам потрібно, скільки ГГц у машини, буде достатньо байта - математика є щоденною частиною роботи. Іноді явно і вища математика.

Завжди неявно нижча математика.

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

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

Однак - оскільки я не можу вирішити багато з них (приблизно 2/3 на даний момент), це означає, що я не люблю математику?

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

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

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