Нематематическое программирование для кулхацкеров
Разработчики курсов для программистов, особенно на фоне заявлений, что "нам нужны тысячи программистов", все чаще задумываются, а важен ли курс высшей математики для обучения этой профессии, может, достаточно дать основы программирования - и вперед?
На форумах вузов и школ то и дело высказываются аналогичные сомнения: нужен ли студентам столь объемный курс математического анализа в их будущей профессиональной деятельности. Зачем нужны дифференциальные уравнения тем, кто будет программировать "1С:Бухгалтерию" и программу учета двух с половиной кофточек или глазированных сырков для тысяч российских ПБОЮЛ и ООО? Не говоря уже о тех, кто вообще не будет ничего программировать по окончании вуза. Более того, среди программистов немало выпускников гуманитарных вузов или людей вовсе без высшего образования. Во многих головах информационные технологии пополнили список "халявных" специальностей, где с минимальными усилиями можно занять довольно тепленькое местечко, а соломенное пугало под названием "математика" давно уже убрали с большого огорода, куда слетаются "компьютерные специалисты". Некоторые "бывалые" программисты даже авторитетно заявляют: "за все время работы максимум что мне понадобилось - это разность квадратов" или "все что нужно программисту - это школьный курс". Хорошо ли это, плохо ли, но подобные тенденции становятся все более заметными. Так, может быть, математика действительно не нужна программистам?!
В то же время информационные технологии никак не хотят делать паузу в своем изнурительном марш-броске. Это заставляет рынок труда из последних сил рваться вослед в поисках востребованных специальностей, с надеждой оглядываясь на плетущуюся следом старушку - систему образования. Меж тем именно от этой неторопливой (но уже бодрой на вид) бабульки во многом зависит судьба отечественного сектора ИТ. При этом рынок труда, уважая авторитет и преклонный возраст своей спутницы, тем не менее вынужден жить своей жизнью. Целиком полагаться на консервативную старушку было бы для него непозволительной роскошью.
Лирики российского программирования
Сверстать какой-нибудь "хоум пейдж" или переставить "винду" сможет любой мало-мальски смышленый гуманитарий. Спорить с этим не станут даже математические снобы, болезненно воспринимающие каждую удачу нематематика. Значит, человек без фундаментального математического образования легко устроит добрую половину российских работодателей. Разумеется, софтверные компании, провайдеры и прочие "требовательные" конторы в расчет можно не брать. Сейчас ИТ-зависимой является почти каждая организация, только запросы ее в большинстве случаев весьма скромны: поддерживать в работоспособном состоянии несколько компьютеров да помогать бухгалтеру мучить "1С".
Да и сами "корочки" в ИТ утратили свою магическую силу. Знакомый админ рассказывал, что удачно нашел себе помощника среди выпускников техникума. До этого ему пришлось пообщаться с десятком "специалистов", демонстрировавших вузовские дипломы и претендовавших на хорошие деньги. Однако их квалификация сильно не дотягивала до "парнишки из техникума". Таким образом, верить пенсионерке - системе образования - все опаснее: слишком уж неустойчива против ошибок стала комбинация из консерватизма и низкой зарплаты преподавателей.
Даже самые поверхностные тенденции на рынке труда заставляют задуматься о пользе математики. Зачем годами просиживать над решением дифференциальных уравнений, если эти знания окажутся мертвым грузом? Стоит ли проходить все круги "математического ада", если в дальнейшем придется конкурировать с каким-нибудь доморощенным кулхацкером?
Автор одного из учебников по такому сложному языку программирования, как С++, Ален Голуб, так говорит о роли гуманитарного и, в частности, лингвистического знания в процессе создания программ: "Программирование требует организаторских способностей и языковой подготовки, а не абстрактного мышления, необходимого для занятий математическим анализом". Далее Голуб развивает мысль в следующем направлении: зачастую в процессе подготовки специалистов в этой области слишком большое количество времени отводится предметам математического цикла, в то время как для проектирования необходимо как раз иное - "уметь написать последовательность действий на английском языке"[Цитата по php-coder.livejournal.com/22620.html, там же ссылка на оригинал в PDF]. И наконец делается вывод: "тот тип организационного мастерства и аналитических способностей, который нужен для программирования, связан полностью с гуманитарными науками".
Собака, которая зарыта слишком глубоко
Все это математическое богохульство наверняка уже вызвало у читателей-математиков желание отправить автора "фтопку". Программисты-математики в большинстве своем не мыслят жизнь вне "гимнастики ума", тем не менее со стороны эта уверенность кажется мало обоснованной.
Со времен Ломоносова нам известно, что "математика ум в порядок приводит". Однако этот аргумент напоминает больше хрестоматийную фразу. Почему нельзя шлифовать умы "компьютерщиков" чем-нибудь другим, скажем, изучением языков? Ведь сам процесс программирования - это написание кода.
Доступно и просто обосновать ценность математического образования - задача непростая. С ней сталкиваются еще школьные учителя математики, которым приходится втолковывать нерадивым ученикам, что без умения считать им - никуда. И если с младшими классами "прокатывают" примеры с деньгами, которые всем приходится считать во время похода в магазин, то со старшеклассниками, взявшимися за матанализ или геометрию, эта схема начинает давать осечки. Такому самоуверенному народу, как студенты, объяснить мировоззренческую ценность математики, как правило, вообще не удается. Поэтому никто особо и не пытается, следуя старой истине: вырастет - сам поймет.
Большинство удачливых "компьютерщиков", на самом деле, рано или поздно приходят к тому, что никакая математика в их жизни лишней не бывает. Знание это, похоже, чисто интуитивное, однако именно математическая броня есть основополагающее различие между "тяжелой артиллерией" и "криворукой пехотой". Сами преимущества, конечно, не в фундаментальных знаниях математики, а в том, что на этой почве выросло - умение решать нестандартные задачи, упорядоченный взгляд на вещи, склонность к универсальным решениям.
Математика в ИТ оказывается еще и предметом, который полезно изучать "про запас". Никогда не знаешь, когда в предстоящей работе возникнет необходимость в каких-нибудь экзотических математических познаниях. Многие потом с благодарностью вспоминают добросовестно отсиженные "бесполезные" лекции, прежние знания вдруг начинают "всплывать" и перестают казаться откровенным бредом.
Один знакомый чистосердечно признался, что в студенческие годы был не силен в дифференциальном исчислении. Став веб-программистом, он даже представить не мог, что пыльный университетский курс потребуется в одном из проектов. Так жизнь заставила его не просто воспользоваться "непрактичной" математикой, но и разобраться наконец в ее тонкостях.
Хотя, конечно, математика математике рознь. Какие-то разделы этой обширной науки жизненно необходимы в практике программирования, другие - складываются на "депозит", где и покоятся до поры до времени, пока очередной проект не вытащит их на поверхность.
Единственно возможное из реально доступного
Меж тем град упреков, который по привычке обрушивают на голову консервативной системы образования, вполне возможно, порожден отсутствием ясных альтернатив. Ведь искать виноватого чаще всего начинают тогда, когда ответа на вопрос "что делать?" попросту не существует.
Многие выпускники терзаются подозрением, что учили их не так и не тому. Однако предложить собственное противоядие затрудняются даже опытные айтишники, взирающие на преподавательскую возню с высоты своего практического опыта.
Хотя разрозненные мысли все-таки есть. Понятно, что абитуриенты, не способные мыслить логически, отсеются еще на этапе вступительных экзаменов. Тем не менее в число студентов попадают люди, по-разному знакомые с железом. Кто-то с детства паяльник из рук не выпускал, а кто-то боялся заглянуть в пыльные внутренности компьютера. Просвещать же "темный народ" в университете никто не собирается, а ведь любой мало-мальски квалифицированный человек понимает, что железо - это отдельная и бесконечная песня. Причем успех программ подчас сильно зависит от того, насколько эффективно они используют аппаратные ресурсы компьютера.
Вообще, отечественное ИТ-образование чрезвычайно гордится собственной абстрактностью (называя это фундаментальным характером). Конечно, преподавать основы на все случаи жизни - цель благородная, только именно в этом, быть может, и кроется причина его практической хромоты. Теоретико-математическая конечность ИТ-специалиста достигает должной длины, благодаря традиционным стимулам вроде зачетов и экзаменов, а вот практическая "нога" вырастает точно по логике "жизнь заставит". Вот и выходят в свет как уверенно стоящие на двух ногах профессионалы, так и хромые теоретики, вынужденные срочно осваивать инструменты, среды программирования и даже самые обычные утилиты.
Последний тезис особенно справедлив в отношении узких специалистов, для которых мир ограничен рамками небольшого числа программ. Почему бы не учить будущего консультанта-внедренца основам "1С"? Пусть это плохо вяжется с декларируемой фундаментальностью, зато очень хорошо - с его будущей работой.
Сами же выпускники взирают на профильное образование с привычным фатализмом: мол, при всем богатстве выбора другой альтернативы нет. Знаний не хватает, актуальность некоторых курсов оставляет желать лучшего, но идеал недостижим, это аксиома.
Если есть "моск", научишься
Большинство выпускников ИТ-специальностей заведомо не соответствуют требованиям работодателей. Интересно, что эта мысль многим кажется вполне естественной. ИТ-зависимый начальник хочет взять "программиста", который разом избавит его от всех "проблем с компьютером". А круг таких проблем частенько оказывается необъятным: тут бы и в железе разбираться надо, и сеть администрировать, и в "1С" ковыряться… А еще у шефа есть бредовая идея быстренько написать программку, по функциональности не уступающую ведущим CRM- или ERP-продуктам отрасли.
Потому-то ИТ-специалисту и приходится, подобно школьнику, грызть гранит науки, пользуясь одними и теми же раз и навсегда заложенными основами.
Учиться за пределами университета приходится еще в студенческие годы, иначе как предъявить работодателю солидный послужной список по окончании последнего курса?! То есть главным учебным заведением для отечественного айтишника оказывается не университет, а то, что называется "школой жизни", - подработки, шабашки и совместительства.
Кстати, обучать плаванию путем бросания в воду чуть ли не традиция в ИТ-среде. Работодатель охотно берет молодого (зато дешевого!) и подающего надежды специалиста, выдает ему проект и ждет результата. Новичок делает как умеет. Частенько невысокое качество первой работы остается незамеченным, поэтому "состоявшийся" специалист продолжает "клепать" дальше. Либо, если "религия не позволяет", он подключает мозги и жгучее желание сделать лучше и начинает действительно расти профессионально. При этом немало таких самоучек успевают застрять (из-за природной лени или упрямства) в одной из точек кривой, откуда сдвинуть их в более зрелом возрасте почти нереально.
Думаю, сейчас многие воскликнут: но ведь это же в любой области так! Стоит врачу перестать интересоваться медициной, и он станет врачевать на уровне Парацельса. Стоит переводчику забыть о развитии языка, и его переводы, оставаясь понятными, будут звучать старомодно. Принципиальное отличие ИТ, как известно, в том, что знания успевают устаревать в пределах одного человеческого поколения не один, а бессчетное количество раз. Разработчику приходится в буквальном смысле жить в рабочей реальности, иначе она обгоняет его.
Наверное, именно поэтому наша пожилая система образования топчется вокруг компьютера в полнейшей нерешительности. И ведь хочется тряхнуть стариной, запустить какой-нибудь новый курс или программу, да боязно: уж больно непредсказуемая это вещь. А математика - она стабильная, основательная и всегда актуальная, поэтому ей надолго гарантирован царский трон среди многообразия айтишных наук. Конечно, сказанное вовсе не отменяет ее метафизического статуса основы основ, дело лишь в том, что господство математических курсов для ИТ-специальностей - это еще и следствие обыкновенного человеческого консерватизма. Если же добавить сюда отсутствие внятных альтернатив, то картина становится вполне объяснимой.
Люди, у которых есть "моск", имеются и среди гуманитариев до мозга костей, и среди прирожденных математиков. Соответственно, и те и другие способны вырастить из себя неплохих айтишников. Первые, лишенные университетских основ, будут всегда оставаться немножко дилетантами, поэтому либо достигнут своего потолка, либо повернут в креативное русло, превратившись в постановщиков задач, технических писателей, менеджеров проектов. Для вторых же все зависит от "практической ноги" (не костыля!), от умения учиться и переучиваться, эффективно используя университетский базис.