Прочитал книгу «Элегантные объекты» Егора Бугаенко: http://amp.gs/6WRa
Автор описывает свой взгляд на «правильное ООП», даёт практические рекомендации и показывает наглядные примеры, итоговая цель которых — хорошо поддерживаемый код! Я полностью разделяю эту ценность: поддерживаемость — это одна из важнейших характеристик кода.
Например, из хорошо известных и зарекомендовавших себя практик, в книге описаны преимущества неизменяемых объектов, разделение на команды и запросы, понятные советы по именованию классов и методов, разделение больших классов на маленькие, более сфокусированные, тесты как документация, внедрение зависимостей и инверсия управления.
А также, чего следует избегать при написании поддерживаемого кода: недостатки моков, проблемы статических методов, классов-утилит и синглтонов, NPE ошибка и применение null vs optional vs пустой объект.
Кстати, интересный вопрос, над которым я раньше не думал: чем отличаются синглтоны и классы, целиком состоящие из статических методов? Синглтон в тестах можно подменить, если есть метод `setInstance()`.
Но есть много радикальных идей, которые вызывали у меня сопротивление и отрицание.
На сколько я понял, материал книги основан на блоге автора: http://amp.gs/6WRo. Зачастую, когда у меня возникал очередной вопрос-возражение, в конце главы я обнаруживал свой вопрос в виде вставленного комментария от одного из читателей блога и тут же ответ Егора. Удивительно, на сколько мои вопросы совпадали с приведёнными комментариями. К сожалению, ответы меня так и не убедили, многие вопросы остались. Чтобы лучше прояснить позицию Егора, думаю, стоит более глубоко изучить его блог, почитать комментарии, возможно влиться в тусовку в телеграме http://amp.gs/6WRM и http://amp.gs/6WRc.
В итоге, станет ли код более поддерживаемым, если писать ПОЛНОСТЬЮ по описанным рекомендациям? Книга меня не убедила. Но, по крайней мере, я получил удовольствие от чтения. Рекомендую.
Автор описывает свой взгляд на «правильное ООП», даёт практические рекомендации и показывает наглядные примеры, итоговая цель которых — хорошо поддерживаемый код! Я полностью разделяю эту ценность: поддерживаемость — это одна из важнейших характеристик кода.
Например, из хорошо известных и зарекомендовавших себя практик, в книге описаны преимущества неизменяемых объектов, разделение на команды и запросы, понятные советы по именованию классов и методов, разделение больших классов на маленькие, более сфокусированные, тесты как документация, внедрение зависимостей и инверсия управления.
А также, чего следует избегать при написании поддерживаемого кода: недостатки моков, проблемы статических методов, классов-утилит и синглтонов, NPE ошибка и применение null vs optional vs пустой объект.
Кстати, интересный вопрос, над которым я раньше не думал: чем отличаются синглтоны и классы, целиком состоящие из статических методов? Синглтон в тестах можно подменить, если есть метод `setInstance()`.
Но есть много радикальных идей, которые вызывали у меня сопротивление и отрицание.
На сколько я понял, материал книги основан на блоге автора: http://amp.gs/6WRo. Зачастую, когда у меня возникал очередной вопрос-возражение, в конце главы я обнаруживал свой вопрос в виде вставленного комментария от одного из читателей блога и тут же ответ Егора. Удивительно, на сколько мои вопросы совпадали с приведёнными комментариями. К сожалению, ответы меня так и не убедили, многие вопросы остались. Чтобы лучше прояснить позицию Егора, думаю, стоит более глубоко изучить его блог, почитать комментарии, возможно влиться в тусовку в телеграме http://amp.gs/6WRM и http://amp.gs/6WRc.
В итоге, станет ли код более поддерживаемым, если писать ПОЛНОСТЬЮ по описанным рекомендациям? Книга меня не убедила. Но, по крайней мере, я получил удовольствие от чтения. Рекомендую.
Forwarded from adelf on programming
Пётр Мязин, автор пятиминутки PHP, добрался до книги Бугаенко "Элегантные объекты" (https://t.me/tg_5minphp/827). Как у любого разумного человека, у него возникло много возражений. Там предлагается много радикальных вещей, и мало кто согласится свой продакшен код серьезного проекта подвергать таким изменениям.
Смысл в том, что к книге надо относиться не как к руководству к действиям, а как к сборнику вопросов к вашему коду. Могу подсказать прямой аналог - объектная гимнастика. Оригинал статьи, перевод на хабре. Там тоже очень интересные и радикальные практики (достаточно даже одного "не больше двух полей на класс"), но не надо бежать и начинать их применять в своём коде. Надо просто задуматься "как изменился бы мой код, если бы пришлось разрабатывать с такими ограничениями?". Среди возникших в голове изменений могут найтись те, которые сделают ваш код намного более объектным, более связным, менее связанным и т.д. И вот эти изменения вполне можно и внедрять.
Полностью же писать код используя эти практики можно лишь на тренировочном проекте, развивая свои ООП-навыки. На следующей неделе на оффлайн митапе в Казани буду делать доклад и в самом начале буду говорить о том же самом. Об этом еще напишу.
Смысл в том, что к книге надо относиться не как к руководству к действиям, а как к сборнику вопросов к вашему коду. Могу подсказать прямой аналог - объектная гимнастика. Оригинал статьи, перевод на хабре. Там тоже очень интересные и радикальные практики (достаточно даже одного "не больше двух полей на класс"), но не надо бежать и начинать их применять в своём коде. Надо просто задуматься "как изменился бы мой код, если бы пришлось разрабатывать с такими ограничениями?". Среди возникших в голове изменений могут найтись те, которые сделают ваш код намного более объектным, более связным, менее связанным и т.д. И вот эти изменения вполне можно и внедрять.
Полностью же писать код используя эти практики можно лишь на тренировочном проекте, развивая свои ООП-навыки. На следующей неделе на оффлайн митапе в Казани буду делать доклад и в самом начале буду говорить о том же самом. Об этом еще напишу.
Telegram
Пятиминутка PHP
Прочитал книгу «Элегантные объекты» Егора Бугаенко: http://amp.gs/6WRa
Автор описывает свой взгляд на «правильное ООП», даёт практические рекомендации и показывает наглядные примеры, итоговая цель которых — хорошо поддерживаемый код! Я полностью разделяю…
Автор описывает свой взгляд на «правильное ООП», даёт практические рекомендации и показывает наглядные примеры, итоговая цель которых — хорошо поддерживаемый код! Я полностью разделяю…
Forwarded from HighLoad++
🔥Благодаря поддержке генерального партнёра конференции ECOMMPAY на HighLoad++ Весна 2021 вас ждёт бесплатная трансляция главного зала.
17 и 18 мая 2021 вы сможете увидеть трансляцию 14 классных докладов. Для того, чтобы сделать это, нужно только зарегистрироваться 👉 bit.ly/3oatEDh
😎Присоединяйтесь, зовите коллег. Не упустите шанс получить новые знания от лучших IT-специалистов современности!
17 и 18 мая 2021 вы сможете увидеть трансляцию 14 классных докладов. Для того, чтобы сделать это, нужно только зарегистрироваться 👉 bit.ly/3oatEDh
😎Присоединяйтесь, зовите коллег. Не упустите шанс получить новые знания от лучших IT-специалистов современности!
Forwarded from PHP Digest
🔴 Прямо сейчас в эфире трансляция PHP-митапа из Казани
https://www.youtube.com/watch?v=8Cfz_39fbfU
Жду доклад от Аделя, автора Laravel Idea, уж очень он заинтриговал: https://t.me/adelf_on_programming/52
Также в программе доклады про превращение PHP-скриптов в статические бинарники, тестирование и Codeception, devops и Kubernetes, PHP/Go/микросервисы.
https://www.youtube.com/watch?v=8Cfz_39fbfU
Жду доклад от Аделя, автора Laravel Idea, уж очень он заинтриговал: https://t.me/adelf_on_programming/52
Также в программе доклады про превращение PHP-скриптов в статические бинарники, тестирование и Codeception, devops и Kubernetes, PHP/Go/микросервисы.
YouTube
2-й казанский PHP-митап: тесты, трейты, devops в монолите, работа с kphp и опыт перехода на go
Казанский PHP-чат при информационной поддержке Пых, PHP-дайджеста и PHPPoint проводит митап с докладами от разработчиков Skyeng, ВКонтакте, FindMyKids, iSpring и LaravelIdea - https://phpcommunity.ru/kazan-php-2
Подписывайтесь на наши каналы в Telegram:…
Подписывайтесь на наши каналы в Telegram:…
Теоретически, работа с MySQL по UNIX сокету должна иметь меньше накладных расходов, чем через TCP подключение. Но на сколько сокет эффективнее? Свежее исследование от Percona показывает значительные результат: http://amp.gs/bvBA
Ротация ключей шифрования — известная практика. Применительно к Laravel, что нужно учитывать при смене APP_KEY?
Небольшая заметка на тему: http://amp.gs/bEy2
Что учесть при смене ключа:
— Зашифрованные Cookie отвалятся, как следствие и сессии
— Encrypted Jobs — дождаться их завершения
— Зашифрованные поля в Eloquent — сначала нужно расшифровать старым ключом и пересохранить зашифровав новым
— Подписанные URL статут не валидны
— Прочие данные, которые вы шифровали в своём коде с помощью класса Encrypter и аналогичных Laravel хелперов нужно расшифровать и пересохранить
Беглое гугление показало один инструмент для graceful обновления APP_KEY: http://amp.gs/bEyw
Знаете еще инструменты/пакеты? Делаете ротацию ключей на своих production серверах?
Небольшая заметка на тему: http://amp.gs/bEy2
Что учесть при смене ключа:
— Зашифрованные Cookie отвалятся, как следствие и сессии
— Encrypted Jobs — дождаться их завершения
— Зашифрованные поля в Eloquent — сначала нужно расшифровать старым ключом и пересохранить зашифровав новым
— Подписанные URL статут не валидны
— Прочие данные, которые вы шифровали в своём коде с помощью класса Encrypter и аналогичных Laravel хелперов нужно расшифровать и пересохранить
Беглое гугление показало один инструмент для graceful обновления APP_KEY: http://amp.gs/bEyw
Знаете еще инструменты/пакеты? Делаете ротацию ключей на своих production серверах?
В свежем выпуске подкаста php[podacast] обсуждали Vagrant, Homestead, Docker, Laravel Sail. Все мы знаем, как тормозит Docker на macOS из-за файловой системы. Говорят, если запустить Docker внутри Vagrant (Virtual Box?), то будет быстрее! http://amp.gs/bVuj
Forwarded from Вебня (Sergey Rubanov)
Разработчики Flow о будущем проекта
Flow приоритезирует потребности Facebook (ещё больше? 🙃) перед остальным сообществом, собирается добавлять (видимо, несовместимий с JavaScript и TypeScrip) новый синтаксис, а также будет (ещё меньше?) уделять внимания внешним контрибьюшнам.
https://medium.com/flow-type/clarity-on-flows-direction-and-open-source-engagement-e721a4eb4d8b
Flow приоритезирует потребности Facebook (ещё больше? 🙃) перед остальным сообществом, собирается добавлять (видимо, несовместимий с JavaScript и TypeScrip) новый синтаксис, а также будет (ещё меньше?) уделять внимания внешним контрибьюшнам.
https://medium.com/flow-type/clarity-on-flows-direction-and-open-source-engagement-e721a4eb4d8b
Medium
Clarity on Flow’s Direction and Open Source Engagement
Summary: Flow prioritizes the Facebook codebase’s need for more type safety and fast performance on very large codebases. Flow’s…
Как оптимизировать запрос выбирающий три случайные записи `SELECT * FROM repositories ORDER BY RANDOM() LIMIT 3`? В статье рассмотрены несколько способов с описанием плюсов и минусов. Неожиданное решение: использовать SP-GiST индекс (PostgreSQL): http://amp.gs/jIG1v
ALTER TABLE repositories ADD COLUMN randomness point;
UPDATE opendor SET randomness = point(random(), random());
CREATE INDEX repositories_randomness on repositories using spgist(randomness);
SELECT * FROM repositories ORDER BY randomness <→ point(0.753,0.294) LIMIT 3;
ALTER TABLE repositories ADD COLUMN randomness point;
UPDATE opendor SET randomness = point(random(), random());
CREATE INDEX repositories_randomness on repositories using spgist(randomness);
SELECT * FROM repositories ORDER BY randomness <→ point(0.753,0.294) LIMIT 3;
Краткая выжимка обновлений ожидаемых в PHP 8.1 из свежего PHP Дайджеста:
- Enum они же перечисления
- Новый тип never для возвращаемых значений
- Файберы
- Финальные константы в классах
- Оператор распаковки поддерживает массивы со строковыми ключами
- Объявлено устаревшим преобразование float в int, где теряется дробная часть
- Интерфейс Serializable объявлен устаревшим
- Запись восьмеричных чисел с префиксом 0o
- Ограничено использование $GLOBALS
http://amp.gs/jIeKi
- Enum они же перечисления
- Новый тип never для возвращаемых значений
- Файберы
- Финальные константы в классах
- Оператор распаковки поддерживает массивы со строковыми ключами
- Объявлено устаревшим преобразование float в int, где теряется дробная часть
- Интерфейс Serializable объявлен устаревшим
- Запись восьмеричных чисел с префиксом 0o
- Ограничено использование $GLOBALS
http://amp.gs/jIeKi
Хабр
PHP Дайджест № 205 (1 – 15 июня 2021)
Подборка свежих новостей и материалов из мира PHP. В выпуске: первая альфа PHP 8.1.0, Composer 2.1, Symfony 5.3 и другие релизы. Обзор новых предложений для PHP 8.1: Partial Function Application,...
Соревнования по программированию на платформе All Cups
Пятиминутка PHP
В гостях Дмитрий Санников (https://t.me/sannikovdmitry) рассказывает про соревнования по программированию, ИИ, машинному обучению и высоконагруженным системам на платформе All Cups (https://cups.mail.ru/ru/).
- All Cups - платформа для проведения соревнований
- Кто является автором и инициатором соревнований?
- Визитная карточка - интересные задачи
- Online или Offline?
- Призовой фонд?
- Какие языки программирования популярны на соревнованиях?
- Как взаимодействует код участника соревнования с платформой?
- Локальная отладка?
- Запуск в Docker под самописным оркестратором на Django
- Пытались ли участники взломать платформу и как?
- Какой KPI стоит перед командой?
- Зачем участвовать в соревнованиях по программированию?
- Образовательная часть проекта, бесплатные курсы
- Ближайшие мероприятия
- All Cups - платформа для проведения соревнований
- Кто является автором и инициатором соревнований?
- Визитная карточка - интересные задачи
- Online или Offline?
- Призовой фонд?
- Какие языки программирования популярны на соревнованиях?
- Как взаимодействует код участника соревнования с платформой?
- Локальная отладка?
- Запуск в Docker под самописным оркестратором на Django
- Пытались ли участники взломать платформу и как?
- Какой KPI стоит перед командой?
- Зачем участвовать в соревнованиях по программированию?
- Образовательная часть проекта, бесплатные курсы
- Ближайшие мероприятия
Forwarded from PHP Russia Channel
🔥Благодаря поддержке генерального онлайн-партнёра конференции AvitoTech трансляция главного зала PHP Russia 2021 доступна для всех.
📍28 июня вы сможете увидеть трансляцию докладов от лучших спикеров вселенной РНР! Для того, чтобы сделать это, нужно зарегистрироваться по ссылке 👉 bit.ly/3qf0mol
Присоединяйтесь, зовите коллег. Не упустите шанс послушать доклады об устройстве фреймворков от их разработчиков и опыт реализации крупных проектов на PHP.
📍28 июня вы сможете увидеть трансляцию докладов от лучших спикеров вселенной РНР! Для того, чтобы сделать это, нужно зарегистрироваться по ссылке 👉 bit.ly/3qf0mol
Присоединяйтесь, зовите коллег. Не упустите шанс послушать доклады об устройстве фреймворков от их разработчиков и опыт реализации крупных проектов на PHP.
Forwarded from Тимлид Очевидность | Евгений Антонов
#минуткарекламы
5 июля старт Podlodka Soft Skills Crew – нашей новой конференции про софт-скиллы для инженеров!
🟢 Интенсив продлится две недели. Встречаемся дважды в день: утром и вечером
Вас ждут: крутые спикеры, сессии в лайве, ламповое общение и обмен кейсами в слаке, записи (для тех, кто не успевает на лайв).
🟢 Тема первой недели: Коммуникации
Во время неё узнаем, как общаться с другими людьми без стресса, даже если вы "интроверт". Обсудим принципы хорошей обратной связи руководству и коллегам. А ещё научимся распознавать манипуляции и защищаться от них.
🟢 Тема второй недели: Problem solving
Познакомимся с моделями мышления, научимся проходить поведенческие и проблемные интервью (типичные для FAANG). А также расширим своё видение и узнаем, как думают топ-менеджеры и предприниматели.
Подробности нашего свежего формата уже на сайте, смотри и успевай на ознакомительные бесплатные сессии!🔥
P.S. От себя добавлю, что тематика выглядит довольно похоже на первые, очень полюбившиеся мне, сезоны тимлидкрю. Надеюсь на много полезных мыслей, позитивные впечатления, новые знакомства:)
5 июля старт Podlodka Soft Skills Crew – нашей новой конференции про софт-скиллы для инженеров!
🟢 Интенсив продлится две недели. Встречаемся дважды в день: утром и вечером
Вас ждут: крутые спикеры, сессии в лайве, ламповое общение и обмен кейсами в слаке, записи (для тех, кто не успевает на лайв).
🟢 Тема первой недели: Коммуникации
Во время неё узнаем, как общаться с другими людьми без стресса, даже если вы "интроверт". Обсудим принципы хорошей обратной связи руководству и коллегам. А ещё научимся распознавать манипуляции и защищаться от них.
🟢 Тема второй недели: Problem solving
Познакомимся с моделями мышления, научимся проходить поведенческие и проблемные интервью (типичные для FAANG). А также расширим своё видение и узнаем, как думают топ-менеджеры и предприниматели.
Подробности нашего свежего формата уже на сайте, смотри и успевай на ознакомительные бесплатные сессии!🔥
P.S. От себя добавлю, что тематика выглядит довольно похоже на первые, очень полюбившиеся мне, сезоны тимлидкрю. Надеюсь на много полезных мыслей, позитивные впечатления, новые знакомства:)
podlodka.io
Онлайн-конференция Podlodka Soft Skills Crew, сезон #7
Недельное мероприятие от команды Podlodka: ежедневные интерактивные сессии в Zoom, нон-стоп общение с экспертами и звёздами индустрии, закрытое профессиональное сообщество в Telegram.