Текст позаимствован из поста хабропользователя arielf. Очень советую прочесть статью полностью, речь идет о высшем образовании.
--------
У каждой специальности есть свой минимальный набор обязательных знаний. У информатики и программирования такой основой служат математические курсы; так что вопрос: «нужно ли программисту образование?», обычно превращается в «нужна ли программисту математика?» или «нужно ли программисту так много математики?» Учитывая, что программист в классическом смысле – это инженер, вопрос можно сформулировать и иначе: «нужно ли образование инженеру?» Споров на этот счёт обычно не возникает. Проблема разве что вот в чём: не все хотят быть учёными и инженерами. Если предел ваших мечтаний – успешная игра в App Store, а не проектирование искусственного интеллекта, криптографического алгоритма или программ трёхмерной анимации, вы можете смело минуя вуз приступить к её выполнению, но и в этом случае знания не испортят вам карьеру. В вузах не знают, кем вы себя видите через много лет и чем планируете заниматься – не говоря уже о том, что вы сами в семнадцать лет можете ещё этого не знать. Считается, что лучше заранее научить вас всем основам, чем упустить что-то важное. Кроме того, основные курсы, как правило, взаимозависимы и нельзя просто взять и изъять некоторые из них. И их главная цель – не научить вас всему на свете, что в принципе невозможно, а предоставить вам примерную карту современных научных и инженерных знаний, чтобы при столкновении с неизвестным, вы смогли принять верное решение, в каком направлении идти.
Вернёмся к математике. Практически все книги по алгоритмам требуют от читателя некоторой математической культуры. А алгоритмы и структуры данных – как сказал Никлаус Вирт – являются программами, и не умея работать с ними, нельзя называться программистом. Причём это не обязательно умение разрабатывать свои алгоритмы, намного чаще нужно изменять чужие, приспосабливая их к частным случаям, но также и умение доказывать их корректность и применимость в различных условиях, и умение анализировать их поведение в некоторых ситуациях. Математика активно применяется таких областях как криптография, графика, распознавание образов, работа с видео, звуком и изображениями, математическое моделирование реальных процессов. В таком, казалось бы, приземлённом системном программировании без серьёзных математических знаний невозможно написание компиляторов, планировщиков и файловых систем.
Математика является тем каркасом, на который нанизываются все прочие знания. Увы, многие начинают осваивать профессию с конца. Программист, изучивший языки программирования, инструменты разработки, различные технологии и паттерны, но не освоивший математические основы, напоминает художника, научившегося в совершенстве разбираться в красках и кистях, освоившего множество приёмов, но при этом не знающего композиции, перспективы, анатомии и прочих основ. У него может быть много гениальных мыслей, но выразить их он не сможет, и всё, на что ему остаётся рассчитывать – это работа ассистентом или раскрашивание чужих картин. Изредка незнание основ формирует новые стили, как, например, в случае с Ван Гогом (к его чести нужно сказать, что он осознавал свои проблемы и брал уроки живописи у профессионалов), но чаще становится препятствием в творчестве. И если в искусстве это ещё можно оправдать тем, что автор так видит, то в промышленности неправильный алгоритм генерации случайных чисел, приведший к тому, что миллионы долларов честных налогоплательщиков промахнулись мимо цели, не оправдан ничем.
При этом нельзя забывать, что для большинства программистов математика является скорее инструментом, чем наукой, и преподавать её нужно именно так, особенно первые курсы, всякий раз объясняя студентам, зачем им это нужно.
Математика не так важна как логика. Я говорю не о решении квадратных уравнений или составлении уравнений с несколькими неизвестными...
Мне за 7 лет работы программистом "вышка" не пригодилась ни разу. Я как фрилансил, клепая сайты и скрипты, изредка решая экстраординарные задачи, так и работал у крупнейшего провайдера интернета в городе, разрабатывая биллинг и систему финансового учета всего холдинга.
На наукоемкость проекта скорее влияет не его размер, а задача, на решение которой он направлен. Файловый менеджер, даже уровня TC вряд ли потребует глубокой математики, а простейший графический редактор с "эффектами" - скорее всего.
если к графическому редактору прикрутить готовые библиотеки и решения, то вопрос в 5 минутах кодинга. Не надо стрелять из гранатомета по мухам, вручную все реализовывая.
Нам нужна инновация, новый хитрый алгоритм. Из чего вы хотите его выпиливать? Да и (по сценарию) вы не умеете выпиливать математические алгоритмы, вы умеете заниматься их композицией)
хм, тогда берется математик и озадачивается. Естественно все это оговаривается с заказчиком. Если заказчик платит мало - он идет лесом, если платит нормально, то в чем проблема ? К чему трудности на ровном месте ? Не в деревне живем.
математика без практики очень быстро забывается. Большинство прогеров достаточно редко сталкиваются с математикой, в основном идет умение работать с паттернами и выстраивать грамотную логику программы. Имхо, лучше разделить работу, быстрее и качественнее получится, чем вешать все на одного человека. Скупой платит дважды как говорится.
Математика - как велосипед, если знать ее хорошо, то заново въехать можно за пару вечеров в любую проблему. А если ты ее не знал никогда, то при необходимости осилишь только ценой времени и большой крови.
Большинство современных программистов - это кодеры, занимающиеся компоновкой готовых блоков. Только если их так назвать, они искренне обижаются =)
Вы даже сейчас "компонуете" решение математической задачи из труда математика и кодера, вместо одного инженера по разработке ПО =) В ответ на ваше "скромное мнение": в реальных крупных продуктовых конторах это один человек. Для некоторых задач привлекаются инженеры по областям (физики, химики), но обычные математические задачи решаются инженерами-программистами.
да еще бы им не обижаться, прогу написали, интерфейс написали, архитектуру проги продумали, протестили, ночи не спали - баги ловили, а их тут обзывают недопрограммистами из-за того, что не смогли разработать пару модулей с математикой. Так и хочется чего-нить тяжелое кинуть. Вобщем все это - холивар обыкновенный, все при своем мнении.
Статья была как раз о том, что программист программисту рознь, прикладные области и задачи разные. Нельзя однозначно говорить, что математика нужна или не нужна.
От себя же я добавил, что лучше знать и не использовать, чем как-нибудь уткнуться в проблему, на решение которой не способен.