вторник, 12 января 2010 г.

[comp.prog.flame] Можно программировать и не зная математики

Вчера, сначала в комментариях к заметке “Краткие впечатления от статьи “Элементы функциональных языков”” начали спорить beroal и Skynin о роли и месте математики в программировании. А затем в RSDN-овской разборке я прочел интересное заявление (автор этого заявления окончил БГУ (Минск), факультет прикладной математики, если я правильно расшифровал ФПМ):

Невозможно знать математику и не научиться программировать.
А то, что муж за нее писал и не знал математику тоже ложь, там же лабы
все с математическими алгоритмами.

Т.е. четко прослеживается мнение о том, что математики не могут не программировать, а не математики программировать не могут. Или, в более простой и категоричной форме – математик может программировать, не математик – не может.

Данный тезис легко опровергается примерами. Взять, например, меня. Имхо, я как раз очень яркий пример того, как не зная математики (практически вообще), можно нормально программировать.

В школе, класса до 9-го, с математикой у меня было все нормально. Но это было до тех пор, пока шли вещи, которые можно было как-то вообразить – корни чисел, прямые и плоскости, повороты и преобразования и пр. Даже с логарифмами еще все было нормально. Но вот когда начались пределы, производные и интегралы, наступило начало конца :)

Для того, чтобы учиться на программиста, мне пришлось поступать на математический(!) факультет. Хорошо еще, что на специальность “Программное обеспечение ВТ и АС”. Но все равно, математики было много, особенно на первых курсах. Тут уже был конкретный приплыздец, полное непонимание того, что мне читают (за исключением, разве что, дискретной математики). Выплывал я только за счет тупого зазубривания каких-то формул (вроде производных и интегралов основных функций). Ну и плюс нас натаскивали на решение однотипных задач, в которых нужно было только запомнить, в каком месте подставить подходящую формулу. Если же попадалась нестандартная задачка – все, суши весла.

Вероятно, здесь было всего поровну – и моей лени+разгильдяйства, и моей тупости, и отсутствия простых и понятных демонстраций смысла математических конструкций. Хотя я больше склоняюсь к другому объяснению – у меня не достаточный для занятия математикой уровень абстрактного мышления + особенности памяти, поскольку я быстро забываю все, чем не пользуюсь. А в математике такое не проходит – стоит забыть, скажем, что такое базис пространства в аналитической геометрии, и после этого уже не поймешь какую-нибудь очередную тему в матанализе.

Но как бы то ни было, если в математике я был ни в зуб ногой, то в программировании все шло совершенно по другому. На своем курсе я был в числе лучших программистов. Да и потом не потерялся, как мне кажется ;)

Так что, если у кого-то есть сомнения в том, что программировать можно и не зная математики, то просто посмотрите на меня :)

Другое дело, что я не знаю, программировал бы я настолько хорошо, если бы в школе и в универе меня не тренировали усиленно математическими дисциплинами. Все-таки битиё определяет сознание и такое количество математики, конечно же, привело к какому-то (пере)упорядочиванию моих мозгов. Но в любом случае – учить не означает знать.

Для меня же очевидно (да, это большое и жирное ИМХО), что математика и программирование требует различного склада ума. По большому счету математика – это наука. И ученый не обязан уметь класть кафель. Тогда как программирование (в подавляющем большинстве случаев) – это ремесло, временами на грани с искусством. И от программиста как раз требуется умение “класть кафель”, а вот разлагать функцию в ряд Тейлора – отнюдь. Поскольку программирование сейчас – это очень обширная область деятельности, в которой существуют отдельные направления, сильно завязанные на математике (та же верификация программ). Смею, однако, предположить, что такими задачами занимаются считанные проценты от общего числа программистов.

Тема явно флеймовая и еще много можно было бы сказать, но, как в анекдоте “нутром понимаю, что 0.5 и 0.5 будет литр, а математически выразить не могу” ;)

Отправить комментарий