Программируйте алгоритмами, а не словами

Язык и его возможности — лишь частности разработки.
26 сентября 2017326451Илья Бубнов5514658

Вы когда-нибудь задумывались над тем, чем высшее образование отличается от профессионального? Престижностью? Возможно. Качеством? Далеко не факт. Количеством профессий? Тут высшее образование даже проигрывает.

Основное отличие заключается в том, что учеба в ПТУ прекрасно подготовит вас к конкретной работе, но любые отклонения будут восприниматься болезненно. Высшее образование покажет вам направление, настроит мозг на постоянное совершенствование, но непосредственно прикладной части  вам придется обучаться самостоятельно.

Такая же ситуация с программированием. Можно обучиться конкретному языку и инструментам, а потом всю жизнь фильтровать резюме по куче ключевых слов. А можно понять основные алгоритмы программ, структуры, конструкции, и тогда все языки будут восприниматься только с точки зрения удобства применения под конкретную задачу.

О втором пути мы поговорим сегодня.

Личный опыт

В 6 классе я впервые попал на урок информатики. Как и любому мальчишке, мне было необычайно интересно посмотреть на то, как из букв на чёрном экране появляются программы и графика. Однако вместо доступа к компьютерам нам раздали перфокарты, на которых была написана мантра: «Компьютер похож на собаку. С ним можно играть, его можно дрессировать…» (дословная цитата). Две четверти ученики были вынуждены учить наизусть подобные «истины». В какой-то момент на уроках информатики я стал представлять себя героем культового фильма, только вышедшего в прокат: «Я вычислительная машина Джека…».

Прошло много лет, прежде чем я понял, что за столь отвратительной реализацией скрывался отличный план обучения. На карточках были выделены ключевые слова «если», «для», «переменные» и так далее. Образовательный текст был представлен в виде программных конструкций, и к тому времени, как мы включили компьютеры, в голове было четкое понимание, как код должен выглядеть.

Настоящее программирование

Когда мы говорим о пользе программирования в реальной жизни, речь идёт о применении алгоритмического способа мышления в быту. В этом ключевая разница между разработчиком и кодером. Первый мыслит, как решить задачу с помощью циклов, операторов, функций, второй — лишь о том, как применить опыт, не всегда свой. Это не значит, что кодеры не востребованы или они не программисты: выходить за привычные рамки им достаточно сложно.

Проверить, к какой группе вы относитесь, достаточно просто — попробуйте изучить второй, третий язык программирования. Если они даются вам просто — значит у вас в голове есть алгоритмы запоминания и построения конструкций, на которые накладываются ключевые слова языка. Если же каждый новый язык воспринимается как первый — вы кодер. Хотите стать настоящим разработчиком — возвращайтесь к обучению.

Виды алгоритмов

Перейдём от общих слов к делу. Три способа развить алгоритмическое мышление:

  • описание программы абстрактными языком;
  • блок-схемы;
  • отладка.

Первый заключается в описании конструкций без привязки к синтаксису. Простой пример — сортировка массива. В PHP, к примеру, есть несколько методов, один из которых имеет название natcasesort(). Найти аналоги в других языках, тем более с таким же именем — невозможно. Вот и получается, что ваш код смогут понять только PHP-специалисты.

Правильным решением будет использовать абстрактную функцию сортировки — sort(). Как альтернатива — расписать операцию через for и if. В этом случае, любой программист не только поймёт ваше описание кода, но и сможет реализовать его на своём профильном языке.

Второй способ описать будущую программу без перехода на частности — блок-схемы. Они важны не только для вашей команды, но и для заказчика, который ничего не знает ни про языки, ни про программирование. Список официальной документации, которая сдаётся вместе с программой, обычно содержит не только листинг и описание, но и хотя бы одну общую блок-схему. Из других плюсов такого представления: описание интерфейса пользователя, подробных алгоритмов отдельных операций, возможность создавать контрольные точки по блокам чертежа.

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

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

Проблемы обучения

На курсах и даже в университетах актуальна проблема преподавательского состава. Иногда крутой программист не способен объяснить даже простейшие вещи, в то время как человек с 1−2 годами опыта в профессии раскладывает всё по полочкам. Различие лежит всё в той же области психологии. Программисты, которыйе постоянно обучаются, не привязывают знания к конкретным языкам и ключевым словам. Джуниоры, как правило, как раз из этой категории, А вот человек с 10−15 годами в профессии может прекрасно знать свою экосистему, но переходить на общие понятия ему будет мучительно сложно.

Поэтому, записываясь на курсы или поступая в университет, удостоверьтесь, что обучать вас будут не только и не столько конкретному языку, сколько теоретической базе, на которую можно нанизывать будущие знания.