Главная

О повышении качества кода.

Простота есть совершенство.

Поделиться:
 

23+

Есть ли какой-то способ стать 10х разработчиком, то есть работать в десятки раз эффективнее? Есть ли какой-то волшебный секрет, который — если бы вы его знали — открыл бы для вас тайну мастерства и производительности в сфере разработки программного обеспечения?

Скептики говорят: «Простого пути нет! Нужно много практиковаться, чтобы стать мастером своего дела!» И это действительно так, но как правильно практиковаться, чтобы стать более производительным? Может, есть какой-то секрет?
Да, есть!

Но правда состоит в том, что даже если я поделюсь им с вами — даже если я буду трубить о нем со всех сторон – вам все равно может потребоваться около 10-ти лет, чтобы полностью осознать и оценить простоту этого секрета. По крайней мере, так было со мной. Этот секрет рассказал мне мой учитель по программированию еще в средней школе. Я очень долго шел к полному осознанию тех вещей, о которых он мне тогда рассказал. И, действительно, на это ушло не менее 10-ти лет. Сегодня я хочу поделиться этим секретом с вами.

Этот секрет является ключевым отличием между средней производительностью и 10ти-кратной производительностью. Используя рычаги, предоставляемые этим секретом, вы сможете стать на порядок эффективнее. Вы сможете писать код, который будет более поддерживаемым, гибким и читабельным.

Итак, секрет 10-ти кратной производительности заключается в овладении абстракцией. Многие разработчики относятся к «абстракции» как к ругательству. Часто можно услышать советы по типу: «не абстрагируйтесь слишком рано» или знаменитая фраза из Zen Python «явное лучше, чем неявное», которая подразумевает, что конкретное лучше, чем абстрактное. Это отнюдь не плохие советы, но применять их стоит в зависимости от контекста.

Современные приложения состоят из огромного количества строк кода. Если вы возьмёте топ 10 приложений и распечатаете их исходный код, то это будут стопки высотой в небоскреб. Обслуживания программного обеспечения стоит больших денег, а это значит — чем больше кода, тем больше затрат требуется на его поддержание.

Абстракция — ключ к простоте кода.

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

«Простота — это уменьшение доли очевидного и увеличение доли значимого»

John Maeda: The Laws of Simplicity

Абстракция — состоит из двух понятий:
• Обобщение — удаление повторяющихся (очевидных) частей и скрытие их за абстракцией.
• Специализация — применение абстракции для конкретного варианта использования, добавление только того, что значимо.

Давайте посмотрим на следующий код:

По сути, в этом коде нет ничего плохого, однако он содержит много деталей, которые не важны для конкретной реализации:
• Сведения об используемой структуре данных контейнера(массив), что означает, что код будет работать исключительно с массивами и ни с чем другим. Код зависим от формы состояния.
• Он включает в себя логику итерации, а это значит, что, если вам нужно будет применить другие операции к каждому элементу в структуре данных, то нужно будет писать еще одну логику итерации, что в итоге приводит к повторениям и нарушает принцип DRY — do not repeat yourself.
• Явное присвоение, а не декларативное описание выполняемой операции.
Все вышеописанные вещи — излишество. Их можно спокойно упаковать в абстракцию. Абстракция значительно упростила бы код, уменьшила количество повторений и повысила читабельность.

«Если вы касаетесь одной вещи с глубоким осознанием, вы касаетесь всего».

Тхит Нхат Хань

Применяя map, мы можем сократить код до однострочного, убрав очевидное (части, которые мы, вероятно, повторим в аналогичном коде), и сосредоточившись на значимом (том, что должно отличаться в данной реализации).

Junior разработчики думают, что им нужно писать много кода, чтобы их код был более ценным.
Senior разработчики понимают ценность кода, в который никому ничего не нужно добавлять.
Map абстрагируется от таких деталей, как используемый тип данных, тип структуры данных, содержащей данные, и логики итерации, необходимой для перечисления каждого узла данных в структуре данных. Это повышает эффективность каждого приложения.

Джереми Ашкенас популяризировал несколько подобных функций в JavaScript и проложил путь для многих великолепных синтаксических ярлыков, которые мы теперь считаем стандартными в JavaScript, впервые применив их в CoffeeScript. Он создал Underscore, которая породила Lodash (по-прежнему самый популярный пак утилит для функционального программирования в JavaScript), и Backbone, который популяризировал архитектуру MVC в JavaScript и заложил основу для Angular и React.

Джон Резиг создал jQuery, которая стала настолько популярной и влиятельной, что сформировала самую большую коллекцию повторно инкапсулированных модулей JavaScript (плагинов jQuery), пока через несколько лет не появились стандартные модули Node и модули ES6API селектора jQuery был настолько влиятельным, что стал основой современных selection API DOM. Я почти ежедневно пользуюсь selection API jQuery, когда тестирую компоненты React.
Правильные абстракции — это мощные рычаги, которые могут существенно повлиять на производительность. Абстракция — это не ругательство. Модули, функции, переменные, классы — все это формы абстракции, и вся причина, по которой они существуют, состоит в том, чтобы упростить абстракцию и ее составление.

Вы не можете создавать сложные программы без абстракций. Даже в ассемблере используются абстракции — имена для инструкций, переменные для адресов памяти, поинты для перехода к подпрограммам (например, к вызовам функций) и т.д. Современное программное обеспечение имеет целые слои полезных абстракций, которые значительно упрощают жизнь.

Заключение

Подводя итог, можно сказать, что секрет простоты кода состоит в абстракции. Именно с помощью ее можно создавать гораздо больше полезного при меньшем количестве написанного кода. Овладейте мастерством абстракции, и вы станете в 10 раз производительнее. Я вам гарантирую.

АвторЭрик Эллиотт — является автором «Создание программного обеспечения». Как соучредитель EricElliottJS.com и DevAnywhere.io, он обучает разработчиков основным навыкам разработки программного обеспечения. Он создает и консультирует группы разработчиков для криптопроектов, а также вносит свой вклад в разработку программного обеспечения для Adobe SystemsZumba FitnessThe Wall Street JournalESPNBBC и ведущих артистов, включая UsherFrank OceanMetallica и многих других.

23+