Этот пост (Основные принципы программирования - 1. Цель - О чем эта серия) изначально был опубликован на сайте Sargalias.

Эта статья является частью серии «Первые принципы программирования»:

  1. Цель - о чем эта серия (эта статья)
  2. Аудитория - Для кого этот сериал
  3. Требования к ПО
  4. Помещение - Минимум информации
  5. Предпосылка - мы должны понимать, что делаем
  6. Предпосылка - минимизация распространения изменений по всей системе
  7. Предпосылка - Сложность экспоненциально возрастает с увеличением масштаба
  8. Первый принцип - Доказательство того, что код работает
  9. Первый принцип - принцип наименьшего удивления
  10. Первый принцип - принцип наименьшего знания
  11. Первый принцип - разделение проблем
  12. Первый принцип - Абстракция
  13. "Побочные эффекты"

Также предлагается:

О чем этот сериал?

Речь идет об изучении и усвоении принципов работы с программным обеспечением, начиная с первых принципов.

Оглавление

  • Зачем нужны принципы программирования?
  • Традиционный способ изучения принципов программирования
  • Мои проблемы с традиционным способом изучения принципов программного обеспечения
  • Изучение принципов программирования из первых принципов

Зачем нужны принципы программирования?

Принципы программирования очень полезны.

Они помогают нам писать более качественное программное обеспечение, которое работает и которое легко изменить.

Изучая их, мы, по сути, становимся на плечи гигантов и сообщества.

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

Традиционный способ изучения принципов программирования

Что ж, есть много способов узнать, как писать хорошее программное обеспечение, и о принципах хорошего программного обеспечения.

Есть масса материалов в виде книг, видео, сообщений в блогах и т. Д.

Один из лучших способов для меня - учиться у Роберта Мартина (дяди Боба), особенно смотреть его видео на YouTube.

Его видео потрясающие, потому что он:

  • Объясняет проблему, с которой мы сталкиваемся в коде (мотивация).
  • Объясняет хорошее решение этой проблемы.

Мотивация

Видео дяди Боба особенно хороши, потому что он объясняет мотивацию, лежащую в основе этого принципа.

Мотивация помогает, потому что без нее мы просто доверяем случайному человеку и тому, что он говорит.

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

Однако, по крайней мере, в моем случае этого было недостаточно.

Мои проблемы с традиционным способом изучения принципов программного обеспечения

Да, я смутно знал о принципах разделения ответственности, принципе разделения интерфейса, принципе единой ответственности и т. Д.

Но столкнулся с множеством проблем:

1. Во многих ситуациях я не знал, как их применять.

Занимаясь фронтенд-разработкой, я особо не использую ООП.

Большинство принципов, о которых я смутно узнал, были основаны на ООП. В частности, все примеры их применения были с использованием ООП.

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

Я думаю, что это можно преодолеть только опытом и практикой.

Щелчок

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

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

В результате я мог лишь смутно применять эти принципы.

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

Например, в React (интерфейсный фреймворк) у нас была концепция контейнеров (теперь их заменили хуки React, но они выполняют ту же функцию отделения логики от глупых компонентов).

Я знал, что это полезное решение. Я мог понять, почему это так сильно помогло, и его приложения.

Но у меня возникли вопросы:

  • Какие принципы применялись?
  • Почему это было сочтено хорошим решением?
  • Неужели было бы намного хуже, если бы логика была смешана с компонентом?
  • А как насчет того, чтобы мы сохранили тупой компонент, но удалили контейнер, а затем заставили вызывающий обработать логику для вызова тупого компонента с правильными реквизитами. Да, это означает, что могло быть дублирование, если у нас были разные вызывающие, но стоил ли дополнительный уровень абстракции (контейнер)?

У меня было ощущение, что здесь дело в разделении интересов. Но это было расплывчато.

3. Я не смог привести убедительных аргументов в пользу их использования.

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

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

Я бы сказал что-то вроде:

  • «Это общепринятые принципы» или «это стандартная практика» в случае с контейнерами React.
  • «Я вижу, что они были бы полезны в случаях X и Y».

Но в целом это не очень веские аргументы. Это было бы больше похоже на «мне кажется, что это правильно, и вот несколько примеров, почему».

Изучение принципов программирования из первых принципов

Все меняется, когда мы учимся на первых принципах.

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

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

Зная, почему и как, мы также узнаем, как их применять.

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

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

Процесс

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

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

В целом это поможет лучше понять принципы.

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

Эта статья является частью серии «Первые принципы программирования»:

  1. Цель - о чем эта серия (эта статья)
  2. Аудитория - Для кого этот сериал
  3. Требования к ПО
  4. Помещение - Минимум информации
  5. Предпосылка - мы должны понимать, что делаем
  6. Предпосылка - минимизация распространения изменений по всей системе
  7. Предпосылка - Сложность экспоненциально возрастает с увеличением масштаба
  8. Первый принцип - Доказательство того, что код работает
  9. Первый принцип - принцип наименьшего удивления
  10. Первый принцип - принцип наименьшего знания
  11. Первый принцип - разделение проблем
  12. Первый принцип - Абстракция
  13. "Побочные эффекты"

Также предлагается:

Первоначально опубликовано на https://www.sargalias.com.