Мудрость из книги
Программы формулируются на основе трех парадигм.
В моду вошло ФП.
Главный принцип функционального программирования — иммутабельность данных. То есть запрет за изменение значений.
Это даёт кучу бенефитов. Например, программы можно безболезненно выполнять на разных компьютерах, а потом результаты соединять в один. Легче держать в голове программу, когда в ней ничего никогда не изменяется
Короче, функциональное программирование накладывает ограничение на присваивание.
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование #фп
Программы формулируются на основе трех парадигм.
В моду вошло ФП.
Главный принцип функционального программирования — иммутабельность данных. То есть запрет за изменение значений.
Это даёт кучу бенефитов. Например, программы можно безболезненно выполнять на разных компьютерах, а потом результаты соединять в один. Легче держать в голове программу, когда в ней ничего никогда не изменяется
Короче, функциональное программирование накладывает ограничение на присваивание.
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование #фп
Мудрость из книги
Эти три парадигмы программирования не добавляют нам новых возможностей. А напротив, ограничивают нас в чем-то. Вынуждают разработчиков делать больше работы.
Это позволяет строить более надёжные программы, которые легко адаптировать к новым требованиям.
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Эти три парадигмы программирования не добавляют нам новых возможностей. А напротив, ограничивают нас в чем-то. Вынуждают разработчиков делать больше работы.
Это позволяет строить более надёжные программы, которые легко адаптировать к новым требованиям.
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Проектирование
Во фронтенде редко концентрируются на архитектуре больших приложений. Нам, в Breadhead, пришлось этим заняться.
Потратив полгода на конструирование действительно большого приложения на React, мы заметили, что скорость доставки новых фич сильно упала. Это было связано с подходом. Код писался стихийно.
Но мы поняли проблемы и начали их исправлять. Сейчас уже стало много проще.
Подробно расскажу об этой истории на Городе IT в Томске 10 ноября.
#фронтенд #проектирование
Во фронтенде редко концентрируются на архитектуре больших приложений. Нам, в Breadhead, пришлось этим заняться.
Потратив полгода на конструирование действительно большого приложения на React, мы заметили, что скорость доставки новых фич сильно упала. Это было связано с подходом. Код писался стихийно.
Но мы поняли проблемы и начали их исправлять. Сейчас уже стало много проще.
Подробно расскажу об этой истории на Городе IT в Томске 10 ноября.
#фронтенд #проектирование
Мудрость из книги
Принцип единственной ответственности многие понимают не так как надо.
Он не про то, что каждый модуль должен делать что-то одно (хоть это и правильная мысль, она просто не имеет отношения к этому принципу).
На самом деле, он постулирует что только у одной группы заинтересованных лиц должна быть причина изменять модуль.
Пример: есть класс пользователя. На нем определены методы: сохранить, рассчитать зарплату, рассчитать отработанные часы. Проблемы: сохранение важном для администраторов базы данных, рассчет зарплаты — для бухгалтерии, расчет отработанных часов — для отдела кадров. Тогда появляется опасность, что при выполнении требований одной из групп (их ещё называют акторами) разработчики что-то сломают для другой группы. Потому таких ситуаций следует избегать.
Запах: часто если принцип единственной ответственности нарушается, в репозитории образовываются мердж-конфликты. Это индикатор, что в коде есть проблемы.
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Принцип единственной ответственности многие понимают не так как надо.
Он не про то, что каждый модуль должен делать что-то одно (хоть это и правильная мысль, она просто не имеет отношения к этому принципу).
На самом деле, он постулирует что только у одной группы заинтересованных лиц должна быть причина изменять модуль.
Пример: есть класс пользователя. На нем определены методы: сохранить, рассчитать зарплату, рассчитать отработанные часы. Проблемы: сохранение важном для администраторов базы данных, рассчет зарплаты — для бухгалтерии, расчет отработанных часов — для отдела кадров. Тогда появляется опасность, что при выполнении требований одной из групп (их ещё называют акторами) разработчики что-то сломают для другой группы. Потому таких ситуаций следует избегать.
Запах: часто если принцип единственной ответственности нарушается, в репозитории образовываются мердж-конфликты. Это индикатор, что в коде есть проблемы.
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Мудрость из книги
Программные сущности должна быть открыты для расширения и закрыты для изменения.
Важно строить систему так, чтобы для добавления нового поведения не нужно было изменять старого кода. Идеальный вариант — написанный код не нужно модифицировать никогда, а только писать новый.
Пример: система выводит на веб-странице какие то данные. В какой-то момент нужно выводить такие же данные в формате CSV. Если для этого нужно вносить изменения куда-то — это проблема. По хорошему, нужно просто написать ещё один модуль, который будет заниматься CSV.
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Программные сущности должна быть открыты для расширения и закрыты для изменения.
Важно строить систему так, чтобы для добавления нового поведения не нужно было изменять старого кода. Идеальный вариант — написанный код не нужно модифицировать никогда, а только писать новый.
Пример: система выводит на веб-странице какие то данные. В какой-то момент нужно выводить такие же данные в формате CSV. Если для этого нужно вносить изменения куда-то — это проблема. По хорошему, нужно просто написать ещё один модуль, который будет заниматься CSV.
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Исследуя GitHub
Уверен, многие тут часто делают какие-то простые сайты. Я люблю делать такие сайты статическими. Они быстрые, они безопасные.
Но на них не очень удобно добавлять формы обратной связи. Погрустил и сделал сервис, который позволяет отправлять уведомления из формы обратной связи прямо в Телеграм без какого-либо бэкенда.
Можно взять исходники и собрать самому, а можно пользоваться этим сайтом — usenotify.info.
#фронтенд
Уверен, многие тут часто делают какие-то простые сайты. Я люблю делать такие сайты статическими. Они быстрые, они безопасные.
Но на них не очень удобно добавлять формы обратной связи. Погрустил и сделал сервис, который позволяет отправлять уведомления из формы обратной связи прямо в Телеграм без какого-либо бэкенда.
Можно взять исходники и собрать самому, а можно пользоваться этим сайтом — usenotify.info.
#фронтенд
Мудрость из книги
Принцип подстановки Барбары Лисков — код должен иметь возможность работать с любым подтипом, так будто это базовый тип.
Классическая ошибка — квадрат, как наследник прямоугольника. В таком случае клиентский код может попытаться изменить длины сторон прямоугольника независимо. Для квадрата это невозможно. Значит нельзя квадрат наследовать от прямоугольника.
Простой принцип, который часто нарушают. Если соблюдать, можно избежать огромного числа ошибок.
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Принцип подстановки Барбары Лисков — код должен иметь возможность работать с любым подтипом, так будто это базовый тип.
Классическая ошибка — квадрат, как наследник прямоугольника. В таком случае клиентский код может попытаться изменить длины сторон прямоугольника независимо. Для квадрата это невозможно. Значит нельзя квадрат наследовать от прямоугольника.
Простой принцип, который часто нарушают. Если соблюдать, можно избежать огромного числа ошибок.
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Мудрость из книги
Принцип разделения интерфейсов.
Не стоит включать в программу зависимость от слишком большого модуля (если не используются все его функции).
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Принцип разделения интерфейсов.
Не стоит включать в программу зависимость от слишком большого модуля (если не используются все его функции).
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Мудрость из книги
Принцип инверсии зависимостей.
"Наиболее гибкими получаются системы, в которых зависимости в исходном коде направлены на абстракции, а не на конкретные реализации.
Лучше не зависеть от деталей, потому что они нестабильны. Абстракции меняются реже.
Но полностью соблюсти этот принцип не получится. Все равно кто-то будет знать о конкретной реализации. Лучше чтобы это был кто-то один.
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Принцип инверсии зависимостей.
"Наиболее гибкими получаются системы, в которых зависимости в исходном коде направлены на абстракции, а не на конкретные реализации.
Лучше не зависеть от деталей, потому что они нестабильны. Абстракции меняются реже.
Но полностью соблюсти этот принцип не получится. Все равно кто-то будет знать о конкретной реализации. Лучше чтобы это был кто-то один.
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Ссылка
Однажды писал о важности Docker для разработчика. На днях нашел на Hexlet ультимативный гайд "Как и для чего использовать Docker". Очень подробный.
#docker
Однажды писал о важности Docker для разработчика. На днях нашел на Hexlet ультимативный гайд "Как и для чего использовать Docker". Очень подробный.
#docker
Мудрость из книги
Архитектура — форма программного продукта. Цель этой формы — как можно долше иметь как можно больше вариантов.
Хорошая архитектура позволяет разрабатывать приложение максимально ровно (скорость разработки замедляется незначительно), легко доставлять его клиентам, поддерживать и сопровождать код.
Одна из самых важных частей архитектуры — разделение бизнес-правил и деталей. Бизнес важне, детали — нет. Нужно сохранять направление зависимотей. Детали зависят от высокоуровневых бизнес-политик, не наоборот.
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Архитектура — форма программного продукта. Цель этой формы — как можно долше иметь как можно больше вариантов.
Хорошая архитектура позволяет разрабатывать приложение максимально ровно (скорость разработки замедляется незначительно), легко доставлять его клиентам, поддерживать и сопровождать код.
Одна из самых важных частей архитектуры — разделение бизнес-правил и деталей. Бизнес важне, детали — нет. Нужно сохранять направление зависимотей. Детали зависят от высокоуровневых бизнес-политик, не наоборот.
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Мудрость из книги
В приложении есть важная часть (бизнес логика) и детали (интерфейс, база данных, внешние API). Детали часто меняются, они нестабильны. Потому следует защищать бизнес логику от них. Для этого выстраивают границы, не давая деталям вмешиваться в работу важной части приложения.
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
В приложении есть важная часть (бизнес логика) и детали (интерфейс, база данных, внешние API). Детали часто меняются, они нестабильны. Потому следует защищать бизнес логику от них. Для этого выстраивают границы, не давая деталям вмешиваться в работу важной части приложения.
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Проектирование
Часто люди вокруг рассказывают, что копирование код — чистое зло. Мол, DRY во все поля. Копировать код, действительно, почти всегда плохо.
Но иногда все же стоит. Поля в ответе API и в базе данных сейчас одинаковые. Так как мы не хотим повторять кода, для этих двух мест приложения следует создать только один класс и использовать его дважды. Логично? Вроде да. Но только меняются эти две части системы в разное время и разными людми.
DRY — это про копирование логики. Код иногда нужно копировать.
#проектирование
Часто люди вокруг рассказывают, что копирование код — чистое зло. Мол, DRY во все поля. Копировать код, действительно, почти всегда плохо.
Но иногда все же стоит. Поля в ответе API и в базе данных сейчас одинаковые. Так как мы не хотим повторять кода, для этих двух мест приложения следует создать только один класс и использовать его дважды. Логично? Вроде да. Но только меняются эти две части системы в разное время и разными людми.
DRY — это про копирование логики. Код иногда нужно копировать.
#проектирование
Мудрость из книги
Бизнес правила в приложении бывают двух видов.
1. Критические бизнес-правила. Они существуют и вне приложения. Если бы его не было, специалисты бы все равно из использовали. Например, расчет процентов по кредиту. Программное обеспечение упрощает этот процесс, но не создаёт.
2. Варианты использования. Они возникают благодаря приложению. Это некоторые правила, которые должно соблюсти ПО. Например, отображение вип-клиентов выше в списке.
Первые важнее и стабильнее вторых. Потому варианты использования должны зависеть от критических бизнес-правил.
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Бизнес правила в приложении бывают двух видов.
1. Критические бизнес-правила. Они существуют и вне приложения. Если бы его не было, специалисты бы все равно из использовали. Например, расчет процентов по кредиту. Программное обеспечение упрощает этот процесс, но не создаёт.
2. Варианты использования. Они возникают благодаря приложению. Это некоторые правила, которые должно соблюсти ПО. Например, отображение вип-клиентов выше в списке.
Первые важнее и стабильнее вторых. Потому варианты использования должны зависеть от критических бизнес-правил.
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Мудрость из книги
Фреймворк — детали. Приложение должно зависеть от фреймворка минимально. Нужно не писать "на фреймворке", а писать "с использованием фреймворка".
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Фреймворк — детали. Приложение должно зависеть от фреймворка минимально. Нужно не писать "на фреймворке", а писать "с использованием фреймворка".
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Мудрость из книги
Признаки чистой архитектуры:
+ Независимость от фреймворков
+ Простота тестирования
+ Независимость от пользовательского интерфейса
+ Независимость от базы данных
+ Независимость от любых внешних агентов
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Признаки чистой архитектуры:
+ Независимость от фреймворков
+ Простота тестирования
+ Независимость от пользовательского интерфейса
+ Независимость от базы данных
+ Независимость от любых внешних агентов
Конспект книги Роберта Мартина "Чистая архитектура".
#чистая_архитектура #проектирование
Нужная книга
Дочитал "Чистую архитектуру" дядюшки Боба.
Очень хорошо. Читается легко, все принципы рассматриваются на конкретных примерах. Стоит прочитать всем причастным к разработке программного обеспечения.
#чистая_архитектура
Дочитал "Чистую архитектуру" дядюшки Боба.
Очень хорошо. Читается легко, все принципы рассматриваются на конкретных примерах. Стоит прочитать всем причастным к разработке программного обеспечения.
#чистая_архитектура
Развитие
Изучать разные языки программирования полезно. В каждом свои техники, подходы. И даже поверхностное знакомство позволяет усвоить их и использовать в будущей деятельности.
Начал читать книгу — "7 языков за 7 недель". В ней рассмотрены очень разные языки программирования. В каждом есть какая-то идея.
#языки
Изучать разные языки программирования полезно. В каждом свои техники, подходы. И даже поверхностное знакомство позволяет усвоить их и использовать в будущей деятельности.
Начал читать книгу — "7 языков за 7 недель". В ней рассмотрены очень разные языки программирования. В каждом есть какая-то идея.
#языки
Языки
Ruby странный. Очень дружелюбный и удобный. Но полный магии.
Я не люблю магию. Она затрудняет чтение кода. А читаем мы его чаще, чем пишем.
Ruby позволяет слишком многое. Если объявить класс с именем, которое уже занято, ошибки не будет. Просто второе объявление модифицирует первое. Это супер-магическое поведение.
Зато, при должной сноровке получается действительно семантический код.
#языки
Ruby странный. Очень дружелюбный и удобный. Но полный магии.
Я не люблю магию. Она затрудняет чтение кода. А читаем мы его чаще, чем пишем.
Ruby позволяет слишком многое. Если объявить класс с именем, которое уже занято, ошибки не будет. Просто второе объявление модифицирует первое. Это супер-магическое поведение.
Зато, при должной сноровке получается действительно семантический код.
#языки
Ссылка
В компании, где я раньше работал, принято по утрам писать короткий отчет по итогам прошлого дня. В нем всегда должна была быть секция "Что сделал". Но многие писали туда "Что делал".
Сделать ≠ делать.
Интересно, что программист сделал, а не что он делал. Если он весь день смотрел сериалы и ел печенье, но работа сделана, то хорошо. А если работа не сделана, то уже плевать, что он делал.
Тематическая статья: Что значит «сделать»
#softskills
В компании, где я раньше работал, принято по утрам писать короткий отчет по итогам прошлого дня. В нем всегда должна была быть секция "Что сделал". Но многие писали туда "Что делал".
Сделать ≠ делать.
Интересно, что программист сделал, а не что он делал. Если он весь день смотрел сериалы и ел печенье, но работа сделана, то хорошо. А если работа не сделана, то уже плевать, что он делал.
Тематическая статья: Что значит «сделать»
#softskills
Языки
Io. Готов поспорить, большинство даже не слышало о нем.
Этот язык основан на прототипах, как и JavaScript. Он имеет динамичкую строгую типизацию, аскетичный синтаксис и полную свободу.
Пример кода (поиск n-ого числа Фибоначчи):
Все конструкции в нем равны, программист волен переопределять любую из них. При этом доступен крутой механизм рефлексии (копания в кишках чужого кода).
Io крутой. Как минимум, потому что, не такой как привычные языки. Пользоваться им в реальной жизни странно. А вот для образовательных целей он подходит отлично.
#языки
Io. Готов поспорить, большинство даже не слышало о нем.
Этот язык основан на прототипах, как и JavaScript. Он имеет динамичкую строгую типизацию, аскетичный синтаксис и полную свободу.
Пример кода (поиск n-ого числа Фибоначчи):
fib := method(n, if(n == 2 or n == 1, 1, fibR(n - 1) + fibR(n - 2)))Все конструкции в нем равны, программист волен переопределять любую из них. При этом доступен крутой механизм рефлексии (копания в кишках чужого кода).
Io крутой. Как минимум, потому что, не такой как привычные языки. Пользоваться им в реальной жизни странно. А вот для образовательных целей он подходит отлично.
#языки