Умеют ли программисты программировать? Казалось бы странный вопрос! Миллионы программистов во всем мире ежедневно пишут программы. В этом нет сомнений.
И эти программы работают… А вот здесь сомнение уже появляется. Все мы сталкиваемся с программами, которые работают как-нибудь или когда-нибудь. За примерами далеко ходить не надо. Из тех программ, которым я пользуюсь ежедневно, нареканий у меня нет только к пасьянсам. Все же остальные программы…, впрочем, не буду говорить о грустном.
Мы уже приучены к тому, что с программами всегда так. Это настолько сложные изделия человеческого гения, что они не могут работать так же надежно, как работает, скажем, телевизор или компьютер.
Возникает ли у вас сопротивление в ответ на мои слова? Или они принимаются, как соответствующие действительности?
А если принимаются, то соответствуют ли они действительности на самом деле? Может быть, нас приучили к тому, что это так? И мы смотрим на мир из жесткого образа, который надели на себя. Мы так образованы.
Действительно ли программирование настолько сложное дело, что сделать надежно работающую программу почти невозможно?
Или программисты не умеют программировать? А если так, то умеют ли они учиться программировать? И вообще учиться?
Давайте подумаем.
Но прежде чем пойти дальше, скажу несколько слов о себе, чтобы мои слова, звучали обосновано.
Я начал программировать 25 лет назад. Я работал в исследовательских институтах, кандидат физ.-мат. наук по программированию, я создавал программистские компании, работал в России и в Канаде, делал продукты на продажу, занимался оффшорным программировании, работал в одиночку и руководил большими группами разработчиков.
На моем счету две операционные системы, десяток компиляторов, десятки заказных работ, конструкторы сайтов, графические редакторы, текстовые редакторы, Интернет приложения.
Компиляторы, которые я делал, используются для создания программ для спутников системы ГЛОНАСС и правительственной связи. Программы "Сайткрафт" и "Картмейстер", сделанные мной и под моим руководством в компании «Вебеби», разошлись по России тиражом в несколько десятков тысяч дисков.
Я программист, я знаю программирование изнутри, и я могу с уверенностью сказать: «Программисты не умеют программировать». Это утверждение основано на очень простой мысли.
Посмотрим на компьютер. Это сложнейшее устройство, которое работает. Да, компьютеры тоже ломаются, но это бывает очень редко. Каждый сбой компьютера – это чрезвычайное происшествие. Если компьютер сломался, то программы не будут работать. Это понятно.
Но если компьютер работает, то программы исполняются в идеальном мире. В мире, где нет трения и сопротивления материалов. Программу нельзя разбить или поцарапать, повредить любым способом.
Программы работают в таких условиях, которые невозможно создать для «вещественного» устройства, работающего в настоящем мире. А это значит, что все недостатки программ скрываются в них самих.
И если раньше программисты могли сослаться на то, что компьютеры недостаточно быстрые и в них не хватает памяти, то теперь и эта отговорка не применима. Для подавляющего большинства программ современные компьютеры достаточны или даже избыточны.
Все недостатки программы скрываются в них самих. И мы знаем, что программы невероятно сложны. Любопытно, что это знают не только программисты. И это наводит на мысль, что тут не обошлось без рекламной компании. Но об этом чуть позже.
Приведу несколько цитат из работ классиков программирования:
«Существенной чертой индустриально организованных программных средств является их большая сложность <…> Грубо говоря, сложность таких систем превышает возможности человеческого интеллекта. Увы, но сложность о которой мы говорим, является, по-видимому, необходимым свойством всех больших программных систем»
Гради Буч, «Объектно-ориентированное проектирование», М.: Конкорд, 1992, стр. 11.
«Сложность программного обеспечения – отнюдь не случайное его свойство, скорее необходимое»
Питер Брукс, цитирую по Гради Буч, стр. 11
«Эйнштейн утверждал, что должно существовать простое объяснение всех природных процессов, так как Бог не капризен и при нем невозможен произвол. Вера в это не может утешить программиста: сложность создаваемых им программ целиком зависит от него самого»
Питер Брукс, цитирую по Гради Буч, стр. 10.
Классики современного американского программирования говорят – сложность необходима и зависит целиком от программиста. Удивительные слова, если в них вдуматься.
Если сложность необходима, то для чего?
Выскажу крамольную мысль: сложность программных продуктов необходима для того, чтобы программисты хорошо зарабатывали и смотрели на всех не программистов сверху вниз.
Сложность программирования – это результат хорошо выполненной рекламной компании, который позволяет процветать программистскому сообществу.
И тогда становится ясно, что программистам не надо учиться программировать. Это попросту вредно, так как подрывает устои сообщества.
Программистам надо получать образование, чтобы соответствовать образу программирования. Для этого не надо учиться, и не надо думать. А надо помнить.
Учиться – это меняться. А для того, чтобы меняться, надо отбросить старое и подумать.
Если хотя бы несколько программистов научаться программировать просто…