2014-03-05
На StackExchange недавно появился вопрос от новичка-программиста: «Правда ли, что с опытом становится легче читать, писать и понимать код?». Вот как звучал этот вопрос:
«Я начал заниматься программированием. Читаю книги, изучаю курсы, читаю статьи, вот это вот всё. Когда я только приступил к изучению, я думал, что уже знаю почти всё, но чем дальше я углубляюсь в сферу программирования, тем больше понимаю, насколько трудна эта область.
Сейчас я знаю основы трёх языков, и на среднем уровне владею одним. Стоит мне посмотреть на более продвинутые вещи вроде MySQL, OpenGL или даже на Visual Studio C++, мой мозг потихоньку начинает разрываться. Всё, что поначалу кажется простым, при ближайшем рассмотрении вызывает только удивление: как можно вообще столько всего знать?
Суть моего вопроса: станет ли мне легче читать, понимать и самому писать код с использованием тех же MySQL или OpenGL? Как бороться с ощущением, что махина программирования просто раздавит тебя и твои способности, как букашку? Принесёт ли опыт больше ясности и понимания предмета?».
Короткий ответ-спойлер: нет.
Длинный ответ:
Да, читать код, написанный другими людьми, станет легче. Но по мере того, как будут расти ваши собственные навыки и опыт, будут расти и требования к самому себе.
Вы не захотите просто писать код. Вы захотите писать красивый код.
Вы потеряете оптимизм. Вы начнёте заранее думать обо всём самом плохом, что может случиться при исполнении вашего кода; думать об исключениях, параметрах железа, сетевой производительности, уязвимости…
Вы не сможете читать и писать код, зная только один язык. Когда вы станете опытным разработчиком, вы будете знать, что для решения конкретной проблемы, возникшей прямо сейчас, необходимо функциональное программирование. Поэтому идите и изучайте язык функционального программирования.
Вы не будете ограничивать себя парой-другой библиотек. Если вы пишете на C#, вы захотите узнать и попробовать сотни .NET-библиотек.
Вы не будете писать в блокноте. Вам понадобится мощное IDE, вы будете использовать модульные тесты, стандарты кода и вообще все сотни опций, которые вам предложит IDE.
Вы не сможете ограничиться стандартным набором инструментов того языка, на котором пишете. В одном проекте C# вы будете ковыряться в параметрах настройки, использовать методы событийной разработки, функциональные аспекты с помощью LINQ, реактивные расширения и асинхронные операции и тысячи других возможностей.
Вы не сможете просто сесть и начать писать код. От 80 до 90% вашего времени вы будете посвящать сбору требований из ТЗ, созданию архитектуры приложения, написанию модульных тестов, написанию документации, и только оставшиеся 10%-20% – написанию самого кода.
Вы начнёте переживать о безопасности. Вы узнаете о всех юридических тонкостях, связанных с используемыми вашим приложением данными. Ежедневно вы будете применять в своей работе стандарты ISO.
Да, с приобретением опыта и освоением навыков вам станет проще решить проблему с помощью своих знаний и интеллекта. Но вместе с вами растёт и ваше отношение к проблемам. Вы можете решить её так же, как пару лет назад, но это вам не принесёт никакого удовольствия.
По мере своего профессионального роста вы будете открывать для себя всё новые аспекты программирования, и вы не сможете побороть в себе желание применить все эти знания на практике.
На примере простой задачи: вывести на экран все чётные числа от 1 до 100.
- Первый день изучения программирования. Задача кажется достаточно сложной, ведь вы знаете только как сделать цикл и выводить значения на экран, но не имеете ни малейшего представления о том, как определить чётность числа.
- Десять лет спустя эта же задача кажется вам предельно простой. Но на этот раз вы уже думаете о том, как захостить приложение, использующее эту задачу, на нескольких серверах, как распределить между ними нагрузку, и как грамотно хранить данные пользователей. И вопрос «Как же это, чёрт возьми, сделать» сияет перед вашим разумом точно так же, как и десять лет назад.
Не стоит забывать и об известном эффекте Даннинга-Крюгера. Это искажение осознания собственной компетентности, свойственное людям, имеющим низкий уровень квалификации. Зачастую новички склонны переоценивать собственные умения, не способны по достоинству оценить высокий уровень других и осознать глубину собственной компетентности. Иными словами, высококвалифицированные люди зачастую не уверены в собственных способностях и считают других более компетентными.
От этого когнитивного искажения лечит время. С опытом каждый новичок непременно приходит к пониманию, насколько некомпетентен он был поначалу.
А вот если вы уже набрались опыта, и ваша деятельность кажется вам простой, значит, вы либо достигли совершенства, либо вам на неё наплевать.
Учитывая, что совершенство в принципе недосягаемо… Ну, вы поняли.
Ссылка в тему: Научитесь программировать за десять лет от Питера Норвига.
Перевод: Люся Ширшова. Спасибо топику с StackExchange.