image

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

Вот где сомневающиеся думают: «Здесь не удастся срезать углы! Каждый должен практиковаться, чтобы стать хорошим!» И это действительно так, но что практикуют специалисты чтобы ускорить разработку программного обеспечения, и есть ли одна ключевая вещь, которая может иметь огромное значение?

Да! Есть!

Но даже если я поделюсь им с вами — даже если я подробно изложу его для вас — вам может потребоваться 10 лет, чтобы вырасти и полностью оценить его простоту.

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

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

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

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

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

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


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

«Простота — это вычитание очевидного и добавление значимого».
— Джон Маэда: The Laws of Simplicity

Абстракция это не улица с односторонним движением. Она сформирована двумя дополнительными понятиями:

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

Рассмотрим следующий код:

const doubleList = list => {
  const newList = [];
  for (var i = 0; i < list.length; i++) {
    newList[i] = list[i] * 2;
  }
  return newList;
};

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

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

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

«Если вы трогаете одну вещь с глубоким осознанием, вы касаетесь всего».
— Тхих Нхат Хань

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

const doubleList = list => list.map(x => x * 2);

Джуниор разработчики думают, что им нужно написать много кода, чтобы получить большую ценность.

Старшие разработчики понимают ценность кода, который никому не нужно было писать.

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

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

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

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

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

«Дайте мне достаточно длинный рычаг и точку опоры, на которую я мог бы опереться, и я сдвину с места весь мир.»
— Архимед

Ключ к простоте: секрет, который мы ищем, — это как уменьшить объем кода, который мы создаем, — как сделать намного больше с гораздо меньшим количеством. Когда вы овладеете этим, вы станете программистом в 10 раз лучше. Я гарантирую это.


image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:



Читать еще