Pull to refresh

Программирование и математика

Studying in IT
В последнее время на Хабре появилось несколько постов на тему важности математики для программистов, выскажу и я свое мнение.
Не согласен с тем, что каждому программисту нужно фундаментальное математическое образование в объемах 5 университетских курсов. Оно не нужно в таком объеме большинству программистов, за исключением специалистов по вычислительным методам. Конечно же, изучение математики развивает мышление. Но есть и другие дисциплины, изучение которых развивает мышление и способствует формированию разносторонне развитой личности. Однако же, эти дисциплины не читают программистам в советских ВУЗах вообще, или читают только основы. Согласен, что математика в объемах первого курса университета (математического факультета) нужна как базис. Но учить программиста математике 5 лет именно как основной дисциплине — это неправильно.
В СССР, где были заложены принципы существующей по сей день программы обучения программистов на постсоветском пространстве, не понимали, что такое программирование и смотрели на него узко, как на специфический раздел математики. Отсюда и перекос в методике обучении программистов, когда 5 лет их учат именно математике, а собственно программированию уделяют мало внимания. Раньше программирование изучали вообще по остаточному принципу даже на программистских факультетах и специальностях (сужу по ПМПУ СПбГУ, как сейчас учат в ВУЗах я доподлинно не знаю, но вижу косвенно по уровню специалистов).
В Советском Союзе программирование сводили к вычислительным методам, видя для него применение в обсчете и моделировании физических процессов, типа полета ракеты или взрыва ядерной бомбы. Ну и еще советскую власть интересовала цифровая обработка сигналов, прежде всего для целей, описанных в «Круге первом» у Солженицына. Действительно, для специалиста по вычислительным методам или конкретно по цифровой обработке сигналов отличное знание математики играет ключевую роль в дальнейшей карьере. Поэтому программа обучения программистов являлась вариацией классического университетского курса математики.
В СССР не понимали главного — вычислительные методы это не только не основной раздел программирования, это вообще смежная дисциплина на стыке двух наук. Основные же разделы программирования читались между делом. Хорошо еще, если выбрав одно из направлений, студент мог углубленно заняться им в рамках кафедры — если на ней были харизматические преподаватели, энтузиасты своего дела. Но полноценного программистского образования он обычно не получал. Зато отлично мог брать интегралы и решать дифференциальные уравнения.
Основная задача, с которой будут сталкиваться программисты с фундаментальным образованием в своей практике — это обработка информации. Соответственно учить нужно в первую очередь структурам данных и алгоритмам, моделям данных для СУБД, способам организации вычислений, принципам организации сетевых протоколов и так далее. Многие программисты так же будут заниматься разработкой инструментальных средств, «программированием для программирования» в чистом виде. И математику им следует давать в том объеме, в котором она нужна для этих основных областей деятельности будущих специалистов в computer science. Математика должна сопровождать курс программирования, а не наоборот.
Конечно, никто не пострадает от того, что прослушает 5-летний классический советский фундаментальный курс математики. Если сможет его осилить в полном объеме, а не просто кое-как сдать экзамены. Только эти знания в основном лягут мертвым грузом, а лет через 10 выветрятся из головы практически полностью (да, человек сможет их «подновить» при необходимости — но большинство этого никогда не сделают за ненадобностью). Конечно, изучение математики в таких объемах полезно для развития мозга. Но упущенное время никак не вернуть! А мозг можно развивать не только через глубокое, на уровне университета, изучение дифференциальной геометрии или топологии.
Для развития разносторонней личности, чтобы раздвинуть рамки своего мышления, было бы полезно (гипотетически) изучить не только математику, но и физику, химию, биологию (особенно генетику), медицину, психологию, юриспруденцию, экономику, менеджмент, лингвистику, английский и иврит. :) И еще десяток других направлений. Знания в ряде перечисленных областей скорее пригодятся в реальной жизни и принесут больше пользы, чем дифференциальное исчисление, например. Однако же если узкую выборку из этих дисциплин и читают программистам в университетах, то далеко не 5 лет, а урывками, на ознакомительном уровне. Ведь всем прекрасно понятно, что нельзя объять необъятное.
Так же я считаю и с математикой для программистов — не нужно перегружать ей мозг программиста настолько, что собственно изучение самого программирования становится какой-то побочной, сопутствующей веткой. Нужно читать математику по мере столкновения с проблемами при изучении самого программирования. Да оно и интересней. Например, программисту обычно не интересно в чистом виде слушать курс комбинаторики. Но прослушать его на фоне анализа быстродействия только что изученных алгоритмов обработки данных намного интересней!
Tags:
Hubs:
Total votes 114: ↑89.5 and ↓24.5 +65
Views 52K
Comments Comments 108