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

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

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

Теперь снова вернулся. Пусть продолжают.

Вы помните последний раз в своем проекте, когда вам приходилось выполнять какую-то обработку даты и времени? Я имею в виду обработку даты и времени с часовым поясом и переходом на летнее время. Ага! Я могу понять этот знакомый взгляд, который у тебя сейчас. Вы снова помните тот проект, который требовал уровня базы данных для сохранения данных? Но вы поняли, насколько ржавыми и непрофессиональными были ваши навыки SQL и MySQL для этой работы? Я видел, как вы прибегали к какой-то автономной библиотеке Active Record или той, которая поставлялась из коробки с выбранной вами средой разработки, такой как Laravel, Django, Codeigniter, чтобы помочь вам.

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

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

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

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

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

НА ПОЛУЧЕННОМ КОНЦЕ АБСТРАКЦИИ

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

Эти весьма абстрактные инструменты и библиотеки, такие как Socket.io, Pusher, SwiftMailer, Carbon и многие другие, всегда дают нам преимущество в том, чтобы держаться подальше от сложной логики и деталей реализации определенных технических функциональные возможности, такие как реализация функций в реальном времени, отправка электронных писем без каких-либо глубоких знаний SMTP и других связанных протоколов, таких как POP3.

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

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

НА ДРУГОМ РЕДКОМ КОНЦЕ АБСТРАКЦИИ

Теперь эйфорию и преимущества абстракции следует испытывать не только со стороны использования, но и со стороны реализации. Часть, в которой разработчик копается в сложной логике некоторых функций и пытается вывести более высокий абстрактный уровень тех же функций. Есть так много причин, по которым мы, как разработчики, должны подумать о том, чтобы уделить некоторое время тому, чтобы разобраться в технических деталях, поддерживающих некоторые функции, которые мы реализуем в наших проектах, и создать более высокие абстрактные уровни над этими иногда подавляющими техническими деталями. Целью здесь должно и всегда быть — я хочу абстрагироваться от деталей этой реализации; упростите эту функциональность и сделайте ее менее пугающей, но более доступной и полезной для других. Это также должно быть время, чтобы погрузиться и погрузиться в ошеломляющие технические сложности и детали, чтобы предоставить другим разработчикам и пользователям удобный и простой подход к решению тех же проблем или достижению тех же функциональных целей.

АБСТРАКЦИЯ — ЭТО ЖИЗНЬ

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

Я надеюсь, что каждый разработчик в один прекрасный день, который, надеюсь, настал сегодня, начнет развивать мышление в отношении этого принципа абстракции, который гласит:

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

Бенджамин С. Пирс в Типах и языках программирования (200)

Зачем разработчику склоняться к абстракции

  1. СУХОЙ
    Мы должны следить за тем, чтобы наш код оставался сухим, если мы намерены сэкономить время в наших проектах в качестве разработчиков. СУХОЙ, аббревиатура от НЕ ПОВТОРЯЙТЕСЬ СЕБЯ, принцип, который означает именно то, что означает его несокращенная форма. Каждый разработчик должен взять на себя обязательство выявлять дублирование в своей кодовой базе и реорганизовывать их в один или несколько разумных независимых методов, методов, которые абстрагируются от сложностей и общих черт в другой части его совместной дебазы.
  2. ПОРТАТИВНОСТЬ
    Лично мне нравится переносимость, которую предлагает мне абстракция различных реализаций повторяющейся логики и сложных частей моей кодовой базы. Это позволяет легко переходить к другим проектам с частями моих абстрагированных модулей. Затем эти модули можно использовать в контексте различного уровня сложности, поскольку я столкнулся с ними в новых проектах.
  3. ЗАХВАТЫВАЮЩИЕ И ПРИЯТНЫЕ
    Абстракция захватывает и доставляет удовольствие. Знание того, что ваша абстракция сложной системы, которая в конечном итоге стала модулем или библиотекой, помогает другим разработчикам, у которых нет подробных технических деталей, решить проблему, которую может помочь решить ваша библиотека, не утонув в деталях. как, захватывает дух. Также приятно оторваться на минутку от традиционного ритуала и ошибочного представления о том, что разработчики просто сидят за машиной и целый день нажимают на клавиши. Это волнительно — остановиться на несколько минут и обдумать правильный уровень абстракции для системы или выбрать сложную детальную реализацию и создать адаптер, который инкапсулирует эти детали, но предоставляет правильный и точный API, требуемый вашим вариантом использования.
  4. УМСТВЕННАЯ ТРЕНИРОВКА
    Для тех из нас, разработчиков, которым нравится решать сложные задачи по пути более высокой абстракции, этот процесс доказывает, что это умственная работа. Это дает разработчикам возможность пройтись по сложным системам и понять их без особой когнитивной перегрузки. Постоянные попытки абстрагировать уровень деталей реализации до высокого уровня красноречия развивают умы разработчиков.

Попытка и страсть к абстракции открывают глаза на новые обтекаемые, плавные способы, альтернативы выполнению той же сложной обыденной работы.

Абстракция создает в нас дух гибкости. Он открывает человеческое сердце для сложности, которая является воротами к инновациям.

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