Сегодня в “Голубятне” мы помедитируем над одним очень загадочным явлением – т.н. университетским кодом, то есть программными продуктами, исходящими из недр высших учебных заведений.

Мне всегда казалось, что самое страшное, что только может выйти из рук программиста, носит гордое имя “индийского кода”. Причем оценка эта, как говорят американские люди, ubiquitous, повсеместно принятая и ставшая нарицательной. Причина “популярности” программного кода, выходящего из-под пера моих почти что уже родных индусов, в том, что индусы пишут наверное 70 % всего кода в мире. Пишут для всех и вся – начиная от России и заканчивая Латинской Америкой. Что касается американских компаний, то они, похоже, давно уже поголовно перешли на индийский аутсорсинг.

Почему индусы пишут для всех? Потому что а) просят очень недорого и б) индусов-программистов очень много. То есть – ну ОЧЕНЬ: похоже, в каждой деревне есть свой брамин, свой пастух и свой персональный программист. Нация, безусловно, чрезвычайно талантливая, однако страдающая от двух недугов.

Первый недостаток индийского программирования объясняется отсутствием полноценного образования. Наверное, 90 % индийских программистов – самоучки. Полные. Плюс – наколенный стиль работы: компы у них ужасные и устаревшие лет так на 10 (банально нехватает денег на апгрейд).

Второй недостаток – и на мой взгляд, главный: запредельная расхлябанность и неорганизованность, которая лежит в основе отнюдь не индийских программистов, а всей индийской нации. Чтобы объяснить, откуда берется эта тотальная энтропия, мне пришлось бы написать монографию (кстати, запросто: над этой темой размышлял долго и обстоятельно!). Если одной фразой, то причина индийской неорганизованности – в отсутствии индукции на уровне мышления. Частное знание не сводится к общему, а принципиально остается на частном уровне.

То есть, если у вас есть сто (тысяча) разных богов, вы, будучи европейским человеком, рано или поздно задумаетесь: а может, на самом деле богов не так много? Может, все эти разные боги реализуют нечто общее в различных ипостасях? В конце концов вы придете к духовному дуализму (манихейству) или, на худой конец, к монотеизму.

Для индуса подобное мышление пагубно и оскорбительно. Богов должно быть именно что тысяча, а лучше – десятки тысяч. И каждый – неповторимый и любимый. И так – во всем, включая программирование. Когда индийский программист решает любую стоящую перед ним задачу, он даже не пытается выработать какой-то один оптимальный алгоритм и свести к нему все множество вариантов. Для индийского программиста такой подход противоестественен, поэтому он, чаще всего, будет действовать следующим образом: сначала реализует первый попавшийся под руку вариант решения задачи, затем задумается, найдет альтернативный ход и добавит его тоже, потом задумается снова, найдет еще десять разных способов решить задачу и все десять добавит в код.

В результате на выходе получится чудовищная, бесформенная, неструктурированная, никак не формализованная и не организованная куча кода вперемешку с мусором. Все это будет стоить копейки и при этом даже работать. Хотя об эффективности программного решения и оптимальном использовании ресурсов лучше даже не задумываться.

Как видите, с индийским кодом все просто. Зато с университетским наоборот – очень сложно. Мне в руки в разное время попадалось много разных программ, написанных в университетах: и медицинских, и финансовых, и для обработки аудио/видео, и широкого пользования (утилиты, текстовые редакторы, конверторы форматов и т.д.). Если вы попросите меня сейчас назвать хотя бы одну из этих программ по имени, я в беспомощности разведу руками: ни одну из них по имени я не помню!

Причина амнезии отнюдь не в старческом склерозе (хочется надеяться :), а в совершенной бесцветности и незапоминаемости этих программных поделок. То, что я хорошо помню: у всех них был жуткий устаревший интерфейс, предельно неудобные алгоритмы выполнения задач (вот хорошее слово – перректальные алгоритмы) и баги, которые лезли изо всех щелей. Я уже не говорю о том, что программы, написанные в университетах, удивительно нестабильны и постоянно вылетают.

Иными словами: если существует что-то хуже индийского кода, так это код университетский. И здесь возникает серьезное недоумение: как такое возможно?! Ведь университет – это вершина образовательной пирамиды нашей цивилизации! Университет per se должен выдавать на гора самые лучшие, оптимальные решения – и потому, что в его стенах обучаются самые талантливые и перспективные студенты (будущие профессиональные программисты и инженеры IT), и потому, что здесь преподают лучшие специалисты в области кодостроения (в других областях – тоже лучшие). Во всяком случае так должно быть, и таковы представления мира о сущности университета.

Взгляните на эту картинку:

485_1

Это титульная страница портала святая святых отечественного знания – моей дорогой альма матер МГУ! Все про этот портал можно сказать уже визуально, но если кто-то не верит, сходите по линку и посмотрите исходный код. Полюбовались? Вопросы есть? Да, вы правы: ТАК писали сайты лет 20 тому назад (в середине 90-х).

Но позвольте, позвольте! Это же портал МГУ! Это же символ науки и все наши надежды на будущее! Может, проблема в том, что в МГУ учится много диких и необразованных гуманитариев, которые перекрыли талантливым программистам-гоблинам все дыхательные пути? Что ж, давайте заглянем на специализированные порталы “правильных” факультетов. Начнем с мехмата (механико-математического):

485_2

Упс, что-то не срослось! “Такой страницы нет”. Линк на портале МГУ есть, а страницы нет. Наверное, у математиков нет времени на занятия таким ничтожным пустяком как оформление визитной карточки своего гениального факультета. Посмотрим, может, больше повезет с факультетом вычислительной математики и кибернетики (кому же как не им владеть высшим пилотажем HTML):

485_3

В сравнении со “страницей нет” прорыв космический. Еще бы – Drupal и даже седьмой. Правда, “из коробки”. Такими, видимо избыточными, понятиями как дизайн, пропорции, цветовое решение никто не озабочивался. Видимо, тоже некогда.

В качестве развлечения предлагаю напоследок скриншот портала моего родного факультета МГУ – филологического:

485_4

Зацените особо перспективу на фотографии – какая волшебная, переполненная смыслами асфальтовая грядка на первом плане, эффектно оттеняющая параллелепипед учебного конкурса. Я когда в первый раз увидел, долго-долго плакал. То ли от ностальгии, то ли от жалости.

Итак, кто же мне объяснит: что творится с университетами? Может, я как-то не понимаю самого главного? Может, программирование, Web, Интернет – штуки глубоко маргинальные, лишенные какой-либо значимости для высоколобых гаудеамусов? Откуда такое презрение к IT-технологиям? Откуда демонстративное нежелание работать красиво, с блеском, с фантазией? Поражать окружающих изящным кодом, оригинальным решениями, гениальными алгоритмами? Вместо всего этого – пошлая посредственность, неряшливость, тяп-ляп программирование на уровне даже не ученика, а подмастерья.

У меня нет ответов на эти вопросы. Может, вы подскажете?