Перевод статьи из блога Enfranchised Mind.
Недавно мне на глаза попалось два текста, на которые я просто не мог не ответить. Первый, самый ужасный, — это статья на Daily WTF «Программирование — отстой! Или что-то вроде того». Второй — пост о том, почему функциональное программирование не получает распространения.
Попробовав себя так или иначе почти во всех областях ИТ-индустрии, я убеждён, что неинтересных нетривиальных проблем не существует. По очень простой причине: любой скучной, тривиальной, механической работой должна заниматься машина. Нет, серьёзно! Мы же программисты. Кто, если не мы, способен облегчить себе работу с помощью компьютеров, если мы делаем то же самое для других?
Программирование может быть отстоем только для полных тупиц. Пять строк кода, повторяющиеся снова и снова, чтобы выставить свойства пользовательского интерфейса? Боже! Вы когда-нибудь слышали о подпрограммах? Абстракции? Как насчёт генерации кода или, может быть, стоит написать DSL? Ладно, если вы скопировали эти пять строк всего пару раз, ничего страшного. Но если вы делаете это снова и снова (иногда слегка редактируя эти строки), наверное, стоит задуматься о том, как абстрагироваться от этого.
Абстракции помогают увеличить соотношение интересной и рутинной работы, сокращая объём нудного кода. Если вместо пяти строк кода, повторенных десять тысяч раз, вы смогли написать одну строку, повторенную те же десять тысяч раз, проект сократился с пятидесяти до десяти тысяч строк кода, которые можно написать минимум в пять, а то и в двадцать пять раз быстрее. Избавьтесь от грязной работы как можно скорее, и у вас будет больше времени, чтобы заняться действительно интересными вещами.
Я слова не сказал о том, чтобы изменить язык разработки, я говорю лишь о нестандартном мышлении, ну или хотя бы просто мышлении. Но изучение новых языков делает программирование привлекательнее, потому что как минимум даёт вам новые инструменты и способы абстракции. Некоторые языки программирования на самом деле лучше других, и чем больше вы их знаете, тем больше вероятность, что вы знаете какой-нибудь хороший язык. Если вы не знаете ничего лучшего, вы не можете использовать его преимущества.
Моим первым впечатлением от статьи на Daily WTF было, что это очередное проявление синдрома голодающего ребёнка в Африке. Ну вы видели фотографии. Ребёнок в какой-то чёртовой дыре третьего мира, обычно в Африке, но пойдёт и Азия или Южная Америка. Голодные дети, измученные болезнями и паразитами, обречённые на недолгую жизнь, полную лишений и жестокости. Но они счастливо улыбаются, потому что не знают ничего, кроме такой жизни. Они не видели ничего другого, не слышали о лучшей доле. Такова их жизнь. Я часто ловлю себя на мысли, что многие программисты похожи на этих детей. Они смирились, и не видят ничего страшного в том, чтобы написать полдюжины строк кода, устанавливающих свойства интерфейса, — потому что не знают, что можно по-другому. Кишащее багами и вирусами, раздутое, медленное, абсолютно неподдерживаемое ПО — таково программирование для них.
Но второй пост убедил меня, что на самом деле ситуация гораздо хуже. Это не просто неведение. Многие программисты не только не знают, но и не хотят знать ничего лучшего, и изыскивают любые оправдания, чтобы оставаться в невежестве. Как если бы голодный ребёнок отказывался от предлагаемой еды.
Дело в том, что я уже слышал все до единого аргументы из того поста. Видите ли, я был свидетелем последнего Великого Сдвига парадигмы, когда индустрия перешла от процедурного программирования к объектно-ориентированному. Кроме того, я слышал отголоски предыдущей революции — перехода от неструктурного к процедурному программированию. Я слышал все эти аргументы, точнее, отмазки, от людей, не желающих учить C++ и Java.
Эти оправдания не лезут ни в какие ворота. Смотрите сами:
Я занимался «скучной» обработкой данных. Оказывается, в этом «скучном» коде можно найти интересную и глубокую проблему. Когда я восхваляю тот или иной язык или парадигму, я не пытаюсь впихнуть вам какой-то продукт, я просто предлагаю способ избавиться от отстойного программирования. Идите со мной, если решитесь, — в волшебную страну интересных задач, где быдлокодерством приходится заниматься изредка и недолго. Загадочная страна, где всегда кипит жизнь, Ватсон! Как прийти к этому, как сделать жизнь лучше? Идите со мной туда, где программирование — великое искусство и инженерное чудо эпохи, а вовсе не отстой.
Как сделать первый шаг? Для начала выучите новый язык.
Недавно мне на глаза попалось два текста, на которые я просто не мог не ответить. Первый, самый ужасный, — это статья на Daily WTF «Программирование — отстой! Или что-то вроде того». Второй — пост о том, почему функциональное программирование не получает распространения.
Попробовав себя так или иначе почти во всех областях ИТ-индустрии, я убеждён, что неинтересных нетривиальных проблем не существует. По очень простой причине: любой скучной, тривиальной, механической работой должна заниматься машина. Нет, серьёзно! Мы же программисты. Кто, если не мы, способен облегчить себе работу с помощью компьютеров, если мы делаем то же самое для других?
Программирование может быть отстоем только для полных тупиц. Пять строк кода, повторяющиеся снова и снова, чтобы выставить свойства пользовательского интерфейса? Боже! Вы когда-нибудь слышали о подпрограммах? Абстракции? Как насчёт генерации кода или, может быть, стоит написать DSL? Ладно, если вы скопировали эти пять строк всего пару раз, ничего страшного. Но если вы делаете это снова и снова (иногда слегка редактируя эти строки), наверное, стоит задуматься о том, как абстрагироваться от этого.
Абстракции помогают увеличить соотношение интересной и рутинной работы, сокращая объём нудного кода. Если вместо пяти строк кода, повторенных десять тысяч раз, вы смогли написать одну строку, повторенную те же десять тысяч раз, проект сократился с пятидесяти до десяти тысяч строк кода, которые можно написать минимум в пять, а то и в двадцать пять раз быстрее. Избавьтесь от грязной работы как можно скорее, и у вас будет больше времени, чтобы заняться действительно интересными вещами.
Я слова не сказал о том, чтобы изменить язык разработки, я говорю лишь о нестандартном мышлении, ну или хотя бы просто мышлении. Но изучение новых языков делает программирование привлекательнее, потому что как минимум даёт вам новые инструменты и способы абстракции. Некоторые языки программирования на самом деле лучше других, и чем больше вы их знаете, тем больше вероятность, что вы знаете какой-нибудь хороший язык. Если вы не знаете ничего лучшего, вы не можете использовать его преимущества.
Моим первым впечатлением от статьи на Daily WTF было, что это очередное проявление синдрома голодающего ребёнка в Африке. Ну вы видели фотографии. Ребёнок в какой-то чёртовой дыре третьего мира, обычно в Африке, но пойдёт и Азия или Южная Америка. Голодные дети, измученные болезнями и паразитами, обречённые на недолгую жизнь, полную лишений и жестокости. Но они счастливо улыбаются, потому что не знают ничего, кроме такой жизни. Они не видели ничего другого, не слышали о лучшей доле. Такова их жизнь. Я часто ловлю себя на мысли, что многие программисты похожи на этих детей. Они смирились, и не видят ничего страшного в том, чтобы написать полдюжины строк кода, устанавливающих свойства интерфейса, — потому что не знают, что можно по-другому. Кишащее багами и вирусами, раздутое, медленное, абсолютно неподдерживаемое ПО — таково программирование для них.
Но второй пост убедил меня, что на самом деле ситуация гораздо хуже. Это не просто неведение. Многие программисты не только не знают, но и не хотят знать ничего лучшего, и изыскивают любые оправдания, чтобы оставаться в невежестве. Как если бы голодный ребёнок отказывался от предлагаемой еды.
Дело в том, что я уже слышал все до единого аргументы из того поста. Видите ли, я был свидетелем последнего Великого Сдвига парадигмы, когда индустрия перешла от процедурного программирования к объектно-ориентированному. Кроме того, я слышал отголоски предыдущей революции — перехода от неструктурного к процедурному программированию. Я слышал все эти аргументы, точнее, отмазки, от людей, не желающих учить C++ и Java.
Эти оправдания не лезут ни в какие ворота. Смотрите сами:
- Любой пример короче нескольких тысяч строк кода несерьёзен и поэтому не может приниматься во внимание. Реальные программы состоят из десятков и сотен тысяч строк, и экономия пары строчек там и тут не играет никакой роли. Любой пример длиннее пары десятков строк никто не будет читать, и поэтому он тоже не принимается во внимание.
- Любой пример, который использует продвинутые возможности языка, доказывает, что язык слишком сложный и тяжелый в изучении. Любой пример, который не использует такие возможности, отвергается, потому что на самом деле на этом языке так не пишут.
- Любой пример, который не относится непосредственно к области, в которой прямо сейчас занят данный программист, отвергается. 3D-графика для разработчиков игр, серверные приложения и доступ к БД для занимающихся бизнес-логикой, графический интерфейс для разработчиков десктопных приложений. «Что мне толку от ваших россказней, если вы не пишете мой код?»
- Нельзя напрямую сравнивать эффективность разных команд разработчиков, потому что способности у всех разные. Сравнивать эффективность одних и тех же разработчиков на разных языках тоже нельзя, потому что способности к конкретному языку у всех разные. Нельзя использовать одинаковые способы для решения одной проблемы, потому что этот способ тяготеет к конкретному языку, и на другом языке надо решать по-другому. Но если вы всё же применили разные способы, то нечего сравнивать тёплое с мягким. У вас вообще нет готового сравнения? Значит у вас нет никаких доказательств и ваше мнение предвзято.
- В компилятор моего языка вложены сотни человеко-лет, и он генерирует гораздо более быстрый код по сравнению с компилятором вашего языка, оптимизатор которого написал какой-то хакер на выходных. Так было и так будет всегда.
- Язык может стать популярным только когда полки в книжных магазинах ломятся от пособий по нему, его упоминают в глянцевых журналах, которые читает ваш босс, и тысячи программистов выстраиваются в очередь на тысячи вакансий с требованием этого языка. Т. е. единственный способ стать популярным — это быть популярным. А раз ваш язык не популярен, он никогда таким не станет.
- Ваш язык сложен в изучении. Мой язык прост, потому что я его уже знаю. Люди не будут изучать то, чего они ещё не знают.
Я занимался «скучной» обработкой данных. Оказывается, в этом «скучном» коде можно найти интересную и глубокую проблему. Когда я восхваляю тот или иной язык или парадигму, я не пытаюсь впихнуть вам какой-то продукт, я просто предлагаю способ избавиться от отстойного программирования. Идите со мной, если решитесь, — в волшебную страну интересных задач, где быдлокодерством приходится заниматься изредка и недолго. Загадочная страна, где всегда кипит жизнь, Ватсон! Как прийти к этому, как сделать жизнь лучше? Идите со мной туда, где программирование — великое искусство и инженерное чудо эпохи, а вовсе не отстой.
Как сделать первый шаг? Для начала выучите новый язык.