Данный пост навеян статьей "Я, пользователь!", которая вызвала много споров, и была весьма прохладно встречена сообществом. Обсуждение в комментариях показало, что мысль, которую Автор высказал довольно жестко и агрессивно, была воспринята как призыв вернуться к ветряным мельницам. Однако, на мой взгляд, проблема затронутая автором, гораздо глубже.
По моим наблюдениям, многие считают, что программирование — это составление программ на компьютерном языке. Но мне кажется, что программирование — это, в первую очередь, способ мыслить, оперировать в уме абстрактными сущностями, эдакая «игра в бисер». Программист создает в уме сложные конструкции, используя различные модели и концепции, такие как императивное или функциональное программирование, или, вызывающий в последнее время много споров, объектно-ориентированный подход. Самые талантливые создают свои модели, и тогда мы начинаем обсуждать достоинства и недостатки динамической типизации или NOSQL баз данных.
Упомянутые концепции не связаны непосредственно с языком программирования. Хороший программист не ограничен языком, он может изложить свои мысли на любом языке, который включает в себя соответствующие понятия. Могут лишь возникнуть вопросы: а как на этом языке оформляются циклы? Этот язык поддерживает функции высшего порядка? Могу ли я использовать множественное наследование реализации?
Язык программирования может не поддерживать функции высшего порядка на уровне синтаксиса. Однако, это редко мешает программистам передавать функции в качестве параметров. Для воплощения этой идеи могут использоваться разные средства (впрочем, не всегда изящные). Но это лишь подчеркивает факт вторичности языка, по сравнению с идеями и концепциями программирования.
Язык программирования — это способ, с помощью которого программист воплощает в жизнь свои идеи. Язык воплощает в себе некоторые концепции, изучение новых языков программирования помогает программисту расширить свой «внутренний язык», использовать новые понятия в своей работе.
По мере развития способов и методов работы с абстракциям, развиваются языки программирования. Появляются новые модели, алгоритмы, идеи, ищутся способы упростить решение рутинных задач. Появляются языки более высокого уровня абстракции и библиотеки готовых решений. Это естественно и закономерно. Наличие языков высокого уровня, библиотек и фреймворков позволяет программисту сосредоточится на решении важных задач, не тратя времени на решение рутинных проблем. В идеале, это означает возможность создания более сложных, более эффективных, более удобных программ за существенно меньшее время, т.е. выход на качественно иной уровень.
Однако, давайте посмотрим на некоторые побочные эффекты этого явления.
Давайте вернемся лет на 15-20 назад. По сравнению с нынешней ситуацией, все языки программирования довольно низкого уровня. Их использовать довольно сложно, общедоступных библиотек немного. Это приводит к образованию высокого порога входа в профессию. Чтобы стать программистом нужно много чего изучить, начиная от стандартных алгоритмов и заканчивая средствами работы с операционной системой. Т.е программист — это специалист, который умеет программировать, он знает как устроены алгоритмы, может написать сложную программу, а если какая-то функция отсутствует в библиотеке — он напишет её сам.
Возвращаемся в наши дни. И видим чудовищную, на мой взгляд, ситуацию! Чтобы составлять программы для компьютера уже не требуется уметь программировать! Достаточно уметь складывать простенький конструктор, чтобы получилась программа, которая что-то делает. Какие такие паттерны проектирования, о чем Вы? Это все глупости и пережитки прошлого. Вот вам сайт, он работает, картинки красивые, что еще нужно? Архитектура, говорите, плохая? Зато я его сделал на суперсовременном движке! И всего за полчаса!
Языки высокого уровня и фреймворки создавались для того, чтобы иметь возможность создавать качественно более сложные программы, которые без них невозможно было бы сделать, поскольку есть предел сложности конструкций, которыми может оперировать человеческий мозг. Но для того, чтобы создавать такие программы нужно уметь программировать, т.е. переплетать в уме сущности и алгоритмы, опираясь на ту базу, которую нам дают фреймворки. Программист прошлого века умел это делать, так как без этого не мог даже начать работать. Уровень абстракции современных средств разработки позволяют создавать программы почти ничего не зная о программировании. И многие считают, что этого им и достаточно. Судя по сообщениям в программистских форумах, сейчас подрастает целое поколение программистов, которые даже не догадываются, чего они лишены.
Примечание.
К моему величайшему счастью, это явление, хотя и приобретает массовый характер, все таки не стало поголовным.
Я считаю, что современные средства разработки, фреймворки, скриптовые языки и множество доступных библиотек, решающих почти любую прикладную задачу — это просто чудо, которым, безусловно, нужно пользоваться. Но при этом, уж если Вас занесло в программисты, ни в коем случае не лишайте себя удовольствия программирования.
Чем для Вас является программирование?
По моим наблюдениям, многие считают, что программирование — это составление программ на компьютерном языке. Но мне кажется, что программирование — это, в первую очередь, способ мыслить, оперировать в уме абстрактными сущностями, эдакая «игра в бисер». Программист создает в уме сложные конструкции, используя различные модели и концепции, такие как императивное или функциональное программирование, или, вызывающий в последнее время много споров, объектно-ориентированный подход. Самые талантливые создают свои модели, и тогда мы начинаем обсуждать достоинства и недостатки динамической типизации или NOSQL баз данных.
Упомянутые концепции не связаны непосредственно с языком программирования. Хороший программист не ограничен языком, он может изложить свои мысли на любом языке, который включает в себя соответствующие понятия. Могут лишь возникнуть вопросы: а как на этом языке оформляются циклы? Этот язык поддерживает функции высшего порядка? Могу ли я использовать множественное наследование реализации?
Язык программирования может не поддерживать функции высшего порядка на уровне синтаксиса. Однако, это редко мешает программистам передавать функции в качестве параметров. Для воплощения этой идеи могут использоваться разные средства (впрочем, не всегда изящные). Но это лишь подчеркивает факт вторичности языка, по сравнению с идеями и концепциями программирования.
Язык программирования — это способ, с помощью которого программист воплощает в жизнь свои идеи. Язык воплощает в себе некоторые концепции, изучение новых языков программирования помогает программисту расширить свой «внутренний язык», использовать новые понятия в своей работе.
По мере развития способов и методов работы с абстракциям, развиваются языки программирования. Появляются новые модели, алгоритмы, идеи, ищутся способы упростить решение рутинных задач. Появляются языки более высокого уровня абстракции и библиотеки готовых решений. Это естественно и закономерно. Наличие языков высокого уровня, библиотек и фреймворков позволяет программисту сосредоточится на решении важных задач, не тратя времени на решение рутинных проблем. В идеале, это означает возможность создания более сложных, более эффективных, более удобных программ за существенно меньшее время, т.е. выход на качественно иной уровень.
Однако, давайте посмотрим на некоторые побочные эффекты этого явления.
Давайте вернемся лет на 15-20 назад. По сравнению с нынешней ситуацией, все языки программирования довольно низкого уровня. Их использовать довольно сложно, общедоступных библиотек немного. Это приводит к образованию высокого порога входа в профессию. Чтобы стать программистом нужно много чего изучить, начиная от стандартных алгоритмов и заканчивая средствами работы с операционной системой. Т.е программист — это специалист, который умеет программировать, он знает как устроены алгоритмы, может написать сложную программу, а если какая-то функция отсутствует в библиотеке — он напишет её сам.
Возвращаемся в наши дни. И видим чудовищную, на мой взгляд, ситуацию! Чтобы составлять программы для компьютера уже не требуется уметь программировать! Достаточно уметь складывать простенький конструктор, чтобы получилась программа, которая что-то делает. Какие такие паттерны проектирования, о чем Вы? Это все глупости и пережитки прошлого. Вот вам сайт, он работает, картинки красивые, что еще нужно? Архитектура, говорите, плохая? Зато я его сделал на суперсовременном движке! И всего за полчаса!
Языки высокого уровня и фреймворки создавались для того, чтобы иметь возможность создавать качественно более сложные программы, которые без них невозможно было бы сделать, поскольку есть предел сложности конструкций, которыми может оперировать человеческий мозг. Но для того, чтобы создавать такие программы нужно уметь программировать, т.е. переплетать в уме сущности и алгоритмы, опираясь на ту базу, которую нам дают фреймворки. Программист прошлого века умел это делать, так как без этого не мог даже начать работать. Уровень абстракции современных средств разработки позволяют создавать программы почти ничего не зная о программировании. И многие считают, что этого им и достаточно. Судя по сообщениям в программистских форумах, сейчас подрастает целое поколение программистов, которые даже не догадываются, чего они лишены.
Работодатель:
— Вот есть такие структуры данных, массив и список.
Как Вы считаете, какую из них лучше использовать в своих программах?
Соискатель:
— Ну, список, конечно, лучше!
Из личного опыта проведения собеседований.
Примечание.
К моему величайшему счастью, это явление, хотя и приобретает массовый характер, все таки не стало поголовным.
В заключение.
Я считаю, что современные средства разработки, фреймворки, скриптовые языки и множество доступных библиотек, решающих почти любую прикладную задачу — это просто чудо, которым, безусловно, нужно пользоваться. Но при этом, уж если Вас занесло в программисты, ни в коем случае не лишайте себя удовольствия программирования.