Наконец-то освободилось время написать что-нибудь новенькое. Есть ряд тем, которые хотелось бы осветить в ближайшие дни, но начать с того что вызвало в моей голове наибольший «отклик». В мою историю становления забрел человек, решивший открыть мне наконец-то глаза, и сообщить важнейшую информацию – «программисту математика реально не обязательна» Особенно печально, что человек представился как «путь программиста». Ну что же – я, пожалуй, опишу несколько своих мыслей насчет этого посыла.
Моя школьная жизнь прошла под портретом Михаила Васильевича Ломоносова с цитатой:
Математику уже затем учить надо, что она ум в порядок приводит.
Если принять данную цитату за абсолютную истину – то дальше писать данную статью в принципе бессмысленно. В противном случае вы предлагаете заниматься разработкой программного обеспечения с кашей в голове. Но поскольку мир не делится на черное и белое – придется продолжить и добавить некоторое количество доводов в свою защиту.
Переходим к реальному миру, и сразу хочется сделать небольшую оговорку. Я ни в коем случае не хочу сказать, что без знаний математики не получится работать программистом. Можно. В конце концов, собеседования проводятся как попало, и найти компанию, которая посчитает вас достаточно квалифицированным – не нереально. Другой вопрос – какие задачи вы способны решать, занимая данную должность.
Хотите вы или нет – но весь процесс разработки опирается на дискретную математику. Компьютеру плевать что кругом «все-личности» и «каждый имеет право на мнение». Он работает по принципам формальной логики. Не знаете логику? А как насчет графов? Как ни странно – такая задачка как «построение маршрута навигатором» - это решение математической задачки коммивояжера (TSP) . Получается что? Не знаем математику – будем красить карту и расставлять значки по координатам. Наверное, с этим можно справиться и без знаний о математике. Хотя там же надо понимать, что такое координаты? А если копнуть поглубже – окажется еще и что компьютер не знает что такое «красный», «зеленый» или «желтый». К счастью не придется объяснять это современному компьютеру – можно обойтись стандартными абстракциями. Но понимание что под ними кроется, скорее всего, ускользнет.
Перейдем к чему-нибудь попроще. Возьмем самую примитивную задачку – нарисовать списочную форму каких-нибудь данных. Неважно каких – просто найти в БД набор данных для отображения и показать на экране (ну или просто вывалить клиенту API – в данном примере это не принципиально). Как будем искать? Писать скрипт с кодом Where like ‘%%’ ? Почему бы и нет. Если данных около тысячи строк. А если миллионы? А тут уже придется разбираться, что такое SQL. А к нему в нагрузку идет понимание реляционной алгебры. Разумеется – разработку таких скриптов можно передать более квалифицированному сотруднику, лучше разбирающемуся в SQL. Но только встает вопрос – а вас полностью устраивает роль менее квалифицированного сотрудника? Хотите подскажу кто будет стоять первым в очереди на увольнение?
Давайте еще проще. Наверняка все знают, что такое XML или JSON? А сколько из этих всех смогут объяснить что это математический граф? Боюсь что не все. А какое количество знают, что такое красно-черное дерево – я боюсь задумываться. Мне можно тут же возразить – «да это просто теории и на практике практически не встречаются». Эмм, ну предположим. А оно не встречается, потому что неприменимо или люди не знают, что существует такая оптимизация поиска? А как быть с ассоциативными массивами, которые встречаются повсеместно? Ну да, я знаю – вам такие задачи решать не надо. Встает только вопрос – а какие задачи вам вообще надо решать? Решение каждой первой задачи – алгоритм, у которого есть вычислительная сложность. Вот, кстати, полезная статеечка на тему.
Разумеется, я считаю, что изучение математических дисциплин для программиста – обязательно. Однако мои личные взгляды расходятся с желаниями работодателей. Подготовка квалифицированного специалиста требует долгих лет, а люди нужны еще вчера. Следовательно уровень знаний и навыков для работы падает с каждым днем. И вот из-за такого падения и рождается волшебная мысль что «математика не обязательна». Ну действительно – не обязательна. Подумаешь – будет неуклонно падать качество программных продуктов и бесконечно расти требования к железу. Главное же создать «продукт» и выбросить его на рынок. Но это я уже убегаю в другие темы, которые хотелось осветить отдельно