Кажется, что общепринятая мудрость предполагает, что хорошие программисты также хороши в математике. Или то, что эти два как-то неразрывно связаны. Многие книги по программированию, которые я прочитал, содержат много примеров, которые являются решениями математических задач или каким-то образом связаны с математикой, как если бы эти примеры имели смысл для большинства людей.
Итак, вопрос, который я хотел бы задать: вы должны хорошо разбираться в математике, чтобы быть хорошим программистом?
Ответы:
Я думаю, это зависит от того, какой тип программирования вы хотите сделать. Что касается программиста в мире бизнеса, я бы сказал, что ответ - нет. Вы можете стать великим программистом, не зная продвинутой математики. Когда вам в конечном итоге приходится иметь дело с математикой, формулы обычно определяются в бизнес-требованиях, поэтому становится только вопросом их реализации в коде.
С другой стороны, если вы хотите стать программистом низкого уровня или, скажем, создавать трехмерные графические движки, математика будет играть огромную роль.
источник
Я иду против зерна и говорю да, вам нужно математическое мышление . Большинство людей думают о математике как об арифметике или заучивании тайных формул. Это все равно что спросить, нужно ли вам отличное правописание или необычный словарный запас, чтобы стать хорошим писателем.
Письмо - это общение, а математика / программирование - это процесс ясного, логического мышления (таким образом, что вы не можете делать ошибки; уравнение не уравновешивается, или программа не компилируется). В частности, это логическое мышление проявляется в:
Итак, я скажу, что вам нужно математическое мышление , умение строить и манипулировать ментальными моделями того, что делает ваша программа, а не набор фактов и теорем. В некоторых областях, таких как графика или базы данных, также есть определенные факты, которые вам нужны, но для меня это не суть «хорошего в математике».
источник
Существует много различных областей программирования, и многие из них не требуют особо высокого уровня математических знаний. Вы никогда не сможете написать 3D-движок, но вы наверняка сможете разрабатывать бизнес и веб-приложения. Посмотрим правде в глаза - самая распространенная математическая операция в большинстве компьютерных программ - это увеличение числа на единицу.
Я с радостью признаю, что мне никогда особенно не нравилась математика или я был в ней хорош (на самом деле я получил диплом по английской литературе!) И проработал профессиональным разработчиком уже более 12 лет. Я разрабатываю в основном веб-приложения, которые редко требуют столько математики. Более важным является способность логически мыслить, разбивать проблемы на куски и иметь широкое понимание различных задействованных технологий и структур.
Как программист, вам, скорее всего, придется реализовывать существующий алгоритм, а не разрабатывать совершенно новый . Нужно выработать, скажем, сложный интерес? Вам не нужно разбираться в этом самостоятельно, просто найдите формулу и примените ее. Большинство проблем уже решены, вам просто нужно знать, как реализовать решения на выбранном вами языке. Это не значит, что знание математики не будет преимуществом ; просто это не совсем необходимо .
Когда я был в школе в середине 80-х, когда домашние компьютеры были не очень распространены, я часто писал программы для решения домашних заданий по математике. Я часто не мог сделать это в своей голове, но я мог применить любую формулу, которая требовалась в качестве рутины программного обеспечения. Вам не нужно быть еще одним Пифагором, чтобы проработать самую длинную сторону прямоугольного треугольника, вам просто нужно уметь писать код
a² + b² = h²
на выбранном вами языке.источник
Вы не должны быть хороши в математике. Тем не менее, вы должны быть хороши в логике и решении проблем. Тем не менее, люди, которые хорошо разбираются в логике и решении проблем, обычно тоже хороши в математике. Я бы сказал, что это действительно зависит от типа математики. Вы можете быть ужасным в исчислении (как я), и все же быть хорошим программистом (как я). Но если у вас возникнут проблемы с дискретной математикой и теорией множеств, вы, вероятно, найдете много аспектов программирования довольно сложными.
источник
Я думаю, что важно внимательно посмотреть, почему вы не любите математику.
Нелюбовь к учебной дисциплине обычно происходит в школе и может быть вызвана каким-либо конфликтом с учителем, отсутствием уверенности в своих собственных способностях в предмете или давлением группы сверстников.
Программирование! = Математика. Для меня это даже не «похоже» на математику (и я любил математику, несмотря на то, что к концу моего обучения в школе у меня не получалось). Многие навыки, которые вы можете использовать в математике, полезны, необходимы даже в программировании, но многие программисты учат себя по большей части. Нелюбовь к математике в школе почти не влияет на ваши способности или удовольствие от программирования.
источник
Математика и программирование очень тесно связаны, так как математика действительно универсальный язык между людьми и компьютерами. Вам не нужно много разбираться в математике для программирования высокого уровня, так как многое за кадром, но это поможет в понимании многих более сложных концепций программирования. Если вы планируете выполнять более низкоуровневое программирование (программирование систем или устройств), вам нужно знать гораздо больше математики.
источник
Хороший один? Очень маловероятно. Большинство шаблонов проектирования имеют, по крайней мере, некоторую основу в математических понятиях. Вещи, которые необходимы для программирования, такие как переменные, циклы, процедуры и объекты, являются аналогами понятий в математических областях, таких как алгебра, исчисление и теория множеств.
Учтите также, что информатика - это подмножество математики: алгоритмы и формальная логика, на которых основано все программирование, являются в основном математикой .
Если вы ненавидите математику, вы будете ненавидеть программирование.
источник
Почти все ответили: «Вам нужно знать математику, чтобы быть хорошим программистом?» Правильный ответ на этот вопрос: «Нет, не совсем, но это помогает», как уже говорили многие.
Но моя интерпретация вопроса такова: "существует ли сильная корреляция между математическими способностями и способностями программирования?" Правильный ответ на это: «Да, есть». Если вы боретесь с помощью алгебры, геометрии и исчисления, то вы, вероятно, не очень хорошо разбираетесь в абстракциях и / или мыслите логически. Если вы плохо разбираетесь в математике, вы, вероятно, никогда не будете хорошим программистом. (Не то, чтобы вы не пытались.)
источник
Это зависит от того, что вы программируете. Например, игровой движок 3D было бы чрезвычайно трудно (если не невозможно) осуществить с какой-либо степенью согласованности без знания соответствующих математических понятий.
источник
«Как» и «быть компетентным в» совершенно разные вещи - так до тех пор , как вы правильно подсчитывать , то я не вижу причин , почему вы должны иметь полюбить математику.
Но давайте будем здесь абсолютно ясны - программирование имеет прочную основу в математике, и рано или поздно почти любая нетривиальная разработка будет включать вычисления - вы не можете от этого скрыться.
Любое программирование включает в себя логику (основа математики), большинство современных программ, вероятно, включают в себя вещи (например, SQL), которые включают теорию множеств (даже если это не очевидно), и если это не так, то вполне может быть, что вы в сферы (например, программирование игр), которые еще более явно основаны на математике (рендеринг - математика, AI -> вероятность и случайность - математика ...) и так далее.
Результатом вышеизложенного является то, что вам должно быть удобно с числами - вы, безусловно, должны понять, почему «в мире есть 10 типов людей, тех, кто понимает двоичный код, и тех, кто не понимает». Но вы, вероятно, извините "2 + 2 = 5 ... для очень больших значений 2".
источник
Фундаментальная концепция математики - это разработка, понимание, реализация и использование алгоритмов. Если вы не можете заниматься математикой, то это потому, что вы не можете делать такие вещи, а если вы не можете делать эти вещи, то вы не можете быть эффективным программистом.
Обычные задачи программирования могут не нуждаться в каких-либо специальных математических знаниях (например, вам, вероятно, не понадобится векторная алгебра и исчисление, если вы не выполняете такие задачи, как, например, 3D-графика или моделирование физики), но базовые наборы навыков идентичны и не имеют способности в одном домене будет соответствующий недостаток возможностей в другом домене.
источник
Честно говоря, я был ужасным учеником по математике в школе. Алгебра была полностью вне меня в то время, и я не думаю, что когда-либо был выше, чем D в ней.
Однако несколько лет спустя, после работы в качестве профессионального разработчика программного обеспечения, я вернулся в колледж и прошел курс алгебры. К моему изумлению, это был самый лёгкий урок, и я получил оценку «А».
Правда была в том, что программирование научило меня алгебре, потому что практически все это просто алгебраическое выражение.
Так что нет, вам не нужно это начинать. Это помогает, но это не обязательно. Прекрасная вещь в разработке программного обеспечения как средства обучения математике состоит в том, что компилятор, отладчик и исполняющая программа являются прекрасными способами убедиться, что вы получили правильный ответ. В этом отношении отладка, в частности, является огромным благом для обучения, потому что вы можете шагать по коду и наблюдать за каждым шагом оценки вашего алгоритма.
источник
Это в некоторой степени зависит от того, что именно вы делаете, хотя определенно не может повредить.
Например, кто-то, кто специализировался в области компьютерных наук, должен был пройти много математики, чтобы получить свою степень. CS, как правило, уделяет большое внимание алгоритмам и их корректности, что подтверждается доказательствами в математическом стиле. Многие программы CS Университета настолько близки к их математике, что двойная специальность находится всего в нескольких курсах. Даже будучи главным специалистом по разработке программного обеспечения, я был на 2 курса ниже по математике.
Тем не менее, как я уже говорил, многие доказательства, структуры данных, методы поиска и правильность алгоритмов, которые я изучил, на самом деле не использовались для непосредственного использования с тех пор, как я закончил школу. Но мне было бы трудно сказать, что это, по крайней мере, не дало мне хорошей основы и лучшего понимания того, что я делаю на низком уровне.
Потому что независимо от того, как вы смотрите на это, на самом низком уровне все, что вы делаете, сводится к математике.
источник
Можете ли вы стать хорошим разработчиком программного обеспечения без математики? Да, я так думаю. Можете ли вы стать таким героическим программистом, о котором все время говорят люди? Думаю, нет.
Проблема заключается в том, что большинство, если не все, героические программисты (считают Деннис Ритчи) имеют опыт работы в области компьютерных наук или математики. Чтобы стать действительно великим программистом, вам нужно понимать алгоритмы на уровне, который больше, чем просто поверхностный, что означает, что вы вынуждены углубляться в формальную информатику. А информатика - это просто прикладная математика.
Точно так же понимание лямбда-исчисления было бы неоценимо для архитектора ОС или дизайнера языка.
источник
Я видел, как эта тема обсуждалась взад и вперед. Я работал с людьми, у которых были степени по математике, которые думали, что они могли учиться, и в течение года или двух изменили карьеру. Один из лучших программистов, с которыми я когда-либо имел удовольствие работать, имел докторскую степень по биохимии и никогда не брал формальных занятий по программированию / CS в школе, но самообучался и основал успешную компанию по разработке программного обеспечения!
В конечном счете, что хорошо для великого программиста, так это тот, кто способен понимать логику, рабочие процессы, может учиться на собственном примере и готов искать решения. Кроме того, вы ДОЛЖНЫ УЧИТЬСЯ БИЗНЕСОМ, для которого предназначены ваши заявки. Я ненавижу программистов, которые не любят бухгалтерский учет, но пишут приложения для учета. Они всегда делают неверные предположения и действительно замедляют развитие.
Независимо от того, в какую школу вы ходите, вы узнаете, что за один год вне школы вы узнаете больше, чем за 4 года. Школа учит вас, как учиться с базовым набором навыков, но опыт реального мира гораздо ценнее с течением времени.
Опыт - лучший учитель, и когда вам придется применять математику в разработке программного обеспечения, пока вы изучаете бизнес, у вас все будет хорошо. Кроме того, помните, как говорилось в предыдущем посте, если вы не пытаетесь работать с трехмерным графическим движком или графическими системами координат, такими как ГИС-приложение, математика, которую вы изучали в старшей школе, - это все, что вам действительно нужно.
Я работал над системами учета и выставления счетов - и мне никогда не приходилось разбираться в Log (x), SIN, COS и т. Д. Для обработки главной книги или разрешения ввода данных. «Aging Journal» - это не «высокая математика», но критически важный для оценки проблем AP.
Если подумать, я никогда не встречал бухгалтера с научным калькулятором на своем столе!
источник
Короткий ответ: нет. Я думаю, что это немного миф, но он распространен, потому что математические задачи обычно хорошо подходят для решения с помощью компьютеров.
Таким образом, в универе / колледже люди получат математические задачи, которые им нужно решать по предметам compsci, но обычно вы обнаружите, что математику на самом деле сложнее решить, чем код, необходимый для реализации решения.
Как только вы попадаете в реальный мир, вы все чаще обнаруживаете, что проблемы в значительной степени решены для вас, ваша задача будет просто реализовать их в коде.
источник
Вы должны либо изучать математику, либо создавать свои собственные. В любом случае важно быть хорошим в той или иной форме.
Пока вы можете работать с ценностями и понимать, что они делают, почему и что вы можете заставить их делать, традиционная математика может не всегда быть необходимой. Иногда это даже мешает.
Существуют альтернативные способы визуализации значения байта, кроме чисел, но они, безусловно, являются наиболее продуманным методом. Например, было бы целесообразно написать программу, в которой все значения представлены в виде цветов.
Сегодняшнее программирование имеет большую ценность из способности представлять 1 и 0 как различные типы данных. Хотя на самом деле эти 1 и 0 вовсе не являются числами, но электрическая длина волны меняется, математика играет не столько в игре, сколько в физике, но , тем не менее , она очень важна для понимания того, что другие программисты говорят и кодируют.
Тем не менее было бы возможно быть хорошим программистом без математики, какой бы сложной она ни была.
источник
Я только что закончил вводный курс по дискретной математике и обнаружил, что уже знал почти все о логике предикатов благодаря программированию; все, что было новым, - это синтаксис - он просто работал с логическими значениями.
Короче говоря: возможно, вам не нужно изучать математику явно , но, просто будучи программистом, вы, вероятно, изучили математику, не осознавая этого. То есть, будучи «хорошим программистом», вы также действительно математик (в некоторой степени).
Карри-Говард Корреспонденция показывает , что я имею в виду: в основном, в нем говорится , что математические доказательства и некоторые компьютерные программы «изоморфные», то есть, они разные способы написать то же самое. Конечно, на самом деле все сложнее, но я не математик, так что это лучшее объяснение, которое я могу дать. Надеюсь, это не слишком далеко от цели.
Таким образом, не только многие области в CS и программировании включают в себя много математики, но даже базовые идеи программирования (например, булевы значения) в основном скрыты от математики.
источник
Это очень трудный вопрос, и он, вероятно, вызовет много споров.
Одна из причин, почему этот вопрос настолько сложен, заключается в том, что он частично зависит от того, какую работу вы выполняете. В большинстве бизнес-приложений не так много математики, так что вы можете обрести твердое понимание алгебры и бизнес-математики. Однако более сложные приложения требуют более сложной математики, и вы начинаете нуждаться в четком понимании исчисления, линейной алгебры и тому подобного.
Тем не менее, это только одна часть уравнения в том, что вам все еще нужна определенная степень математики для практики программирования. Само собой разумеется, что вы должны быть знакомы с логикой, чтобы иметь возможность писать как базовую программу, так и базовую алгебру. Смотря немного дальше, чем просто заставить работать основную программу, вам нужно иметь представление о некоторых аспектах дискретной математики, чтобы иметь возможность определить, что делает хороший алгоритм для использования в данной задаче.
Чтобы вернуться к сути вопроса, хотя. Лично я не думаю, что вам нужно быть математиком, чтобы быть хорошим программистом; Тем не менее, я думаю, что вы должны быть знакомы с математикой, чтобы быть хорошим программистом общего профиля.
источник
Да, безусловно.
Даже обычное программирование бизнеса требует определенных навыков в математике.
Бизнес-программирование на заводе требует навыков работы с базами данных. Чтобы быть хорошим программистом баз данных, необходимо понимать, как работают базы данных, и какие алгоритмы использует процессор запросов при преобразовании ваших запросов. Без понимания пределов и производных (или даже базового понимания того, что линия y = x дважды пересекает линию y = x ^ 2), невозможно точно сравнить план запроса внутреннего соединения с хеш-соответствием и объединением с вложенным циклом план запроса.
Кроме того, хороший программист может работать практически в любой области, при условии, что он немного изучит: игры, симуляторы, встроенные разработки, компиляторы, операционные системы, веб-ресурсы, базы данных и т. Д. Возможность делать все эти вещи (или даже больше). для того, чтобы быстро научиться делать все эти вещи), требуется достаточное количество знаний по математике.
Я бы сказал, что в какой-то момент нужно было иметь некоторый опыт со следующим:
источник
Математика - это больше, чем просто формулы. Понимание некоторых математических принципов теории множеств очень полезно для понимания сложных понятий в системах типов, так как понимание сложности имеет первостепенное значение для эффективного использования структуры данных.
Теория графов также чрезвычайно полезна, так как многие задачи программирования могут быть смоделированы графом. Когда я разрабатывал бизнес-приложение, я был очень удивлен, обнаружив, что теоремы о кратчайшем пути обеспечивают элегантное решение сложной проблемы, которая у меня была!
источник
Я всегда считал , программирование не должно быть ничего , но математики.
Это просто не похоже на алгебру средней школы.
источник
Математика - это зал программирования.
Будучи способным работать со слоями за слоями абстракции, моделей, «объективации» функций, преобразований и временных понятий, математика является идеальной тренировочной площадкой для всего этого.
Можно разработать правильный подход к программированию без математики, но это намного сложнее.
Тем не менее, если оставить в стороне специалиста, важно только понимание математики, зная название всего и как можно доказать данную теорему, это не так. Таким образом, даже если у вас хорошие оценки по математике, потому что вы изучили все это без реального понимания, вы все равно будете бороться с программированием.
источник
Знание математики хорошо для некоторых приложений (таких как игры, искусственный интеллект, компьютерная графика и т. Д.), Но математика научит вас чему-то помимо формул или сложных уравнений.
Изучение математики похоже на изучение нового языка программирования. На самом деле в программировании применяется математика. Когда вы изучаете новый язык, вы узнаете много вещей, которые делают вас лучшим программистом. Это не отличается от математики, но если вы действительно овладеете математикой, вы всегда будете лучшим программистом, даже если вы не используете продвинутую математику в своей работе.
Причина проста: математика научит вас видеть мир другими глазами. Он учит вас решать проблемы с разными подходами без необходимости программирования. Этот новый способ мышления, безусловно, помогает вам лучше выполнять свою работу.
Программирование - это искусство. Математика - это искусство. Если вы объедините их обоих, вы станете лучшим художником.
источник
Нет.
Подобно большинству научных дисциплин, хорошее понимание математических понятий будет полезным, особенно при оценке таких вещей, как эффективность. Но для большинства задач программирования ваши математические способности актуальны только в том случае, если решаемая вами проблема связана с математикой.
Компьютеры отлично разбираются в математике, поэтому имеет смысл, что ранние компьютеры широко использовались для выполнения «тяжелой работы», связанной со многими сложными математическими работами. Многие программы все еще решают сложные математические задачи, в этом случае знание математики поможет вам написать лучшую программу, но это не то, что делает вас хорошим программистом.
источник
Обычно, не в том смысле, что вам нужно знать, скажем, исчисления или триггерные уравнения, чтобы выполнять большую часть работы. Если вы занимаетесь тяжелой графикой / программированием игр, тогда да. Известная математика хак для Quake является хорошим примером этого. Тем не менее, мышление, в которое вы должны войти, имея дело с математикой более высокого уровня, безусловно, применимо к программированию; с программированием вы разрабатываете свою собственную логическую структуру, свои собственные функции, свои собственные «доказательства».
Единственный раз, когда я сталкиваюсь с математикой в своей работе (внутренний рабочий процесс и приложения), это когда я делаю некоторые приложения для составления отчетов, которые требуют знания статистики, но это только потому, что это непосредственно применимо к требованиям.
источник
Я бы сказал, не обязательно. Определенные дисциплины программирования (крипто, графика, физические движки и т. Д.) Определенно имели бы явное преимущество для математически склонных, но я не думаю, что хорошее понимание дифференциальных уравнений было бы особенно полезно, например, для веб-программирования.
Булева логика, вероятно, является требованием быть хорошим программистом, но меня не удивит, если многие люди, не достигшие хороших оценок по математике в средней школе, окажутся хорошими в программировании.
источник
Я бы сказал, что вам не обязательно быть хорошим математиком, чтобы быть хорошим программистом.
Моя первая работа программистом заключалась в создании трехмерной графики для планирования миссии B-52 и крылатой ракеты. Это было интенсивное математическое приложение, но мне действительно нужен был доступ только к тем, кто хорошо разбирался в математике. Мне не нужно было знать формулу для вычисления расстояния большого круга между двумя точками. Мне нужно было знать, как преобразовать формулу, чтобы она работала на языке программирования. То же самое с симуляцией полета. Боинг сделал всю математику, которую мы только что применили.
Этот опыт также помог мне понять, кто будет хорошим программистом, а кто нет. На этой работе пилоты и штурманы выполняли обязанности программистов и помогали программистам понять потребности миссии. Обычно вы можете сказать в течение нескольких недель, какие пилоты и штурманы будут хороши в этом. Математические специальности обычно сразу начинали программировать.
Так что я бы сказал, что хорошее знание математики повышает вероятность того, что вы станете хорошим программистом, но я знаю много хороших программистов, которые не так хороши в математике.
источник
Я не люблю математику, и я всегда получаю низкие оценки по математике. Я не хочу сказать, что я хороший программист, однако я нахожусь в индустрии программного обеспечения в течение 10 лет с большим успехом.
источник
Нет, нет-нет, нет, да и нет!
Нет, потому что часто тебе это нужно.
Почему это не работает?
это может быть переписано более абстрактным способом?
968 мс больше или меньше 0,7 с? Сколько МБ вам нужно, сколько ГГц у машины, будет достаточно байта - математика - это повседневная часть работы. Иногда явно и выше математика.
Всегда неявно ниже математика.
Математика - это широкое поле, от вычисления до матрицы, до геометрии, логики, статистики, теории категорий, теории графов. Так что, если вы верите, что программируете без математики - возможно, вы ошибаетесь.
Если вы посмотрите на проблемы на странице Project Euler , вы найдете загадки, где у меня нет идеи, как математика используется для ее решения. (Не то чтобы я мог решить их без математики.) Обратите внимание, что размер задачи обычно настолько велик, что вы не можете решить их грубой силой.
Однако - поскольку я не могу решить большинство из них (около 2/3 к настоящему времени), значит ли это, что я не люблю математику?
Если вы не изучали математику, вы, вероятно, не будете знать, где вы можете найти математику в вашей повседневной жизни, включая программирование.
Даже если вы просто специализировались на перемещении GUI-компонентов на экране, чтобы хорошо выглядеть, вы в некотором роде занимаетесь математикой.
источник