Все потоки
Поиск
Написать публикацию
Обновить
994.23

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга

Я исследовал тему связности и связанности в построении кода и вот к чему пришел:

Не существует плохих\хороших\идеальных связности и связанности кода.

Мне кажется проблема и решение глубже - сколько людей столько и вариантов осмысления и построения "модели", столько вариантов же coupling & cohesion. У каждого что-то свое.

Строить приложение от архитектуры - такое себе. Архитектура для приложения, а не приложение для архитектуры. Тогда архитектура будет основана на реальных задачах а не на поиске идеала.

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

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

Т.е. решение кроется в здравом смысле - описываешь приложение плюс-минус понятными человеку структурами и нужная связность и связанность образуются сами собой как следствие.

Ну и когда я говорю ООП, это не значит что я буду писать абстракцию на каждый чих, влоть до Int, Long и т.п., нет, это значит что я начну с самых больших MyApp { UserClient, ServerClient, DeviceClient } и законтачу их между собой логикой приложения, а там дальше буду создавать абстракции по необходимости, если будет удобно и полезно что-то добавить и переиспользовать то я добавлю и переиспользую (вот кстати хороший критерий - моделировать сущность когда надо что-то передавать между главными абсракциями(надсистемами)).

ООП рулит :)

P.S. И не надо стремиться к идеалу, иначе тут можно скатиться в подмену задач, и начать делать не данное конкретное приложение, а предложенный кем-то идеал архитектуры.

Теги:
-2
Комментарии3

Email и бухгалтерия: почему заголовки писем всё ещё угрожают деньгам компаний

Недавно я писал в одной из новостей про новый стандарт электронной почты — RFC 9788. Тогда это выглядело как чисто техническое обновление: поправили старый костыль, добавили пару параметров, придумали новые заголовки. Но если посмотреть на это глазами бизнеса, особенно глазами топ-менеджмента и бухгалтерии, картина оказывается совсем другой.

Электронная почта — это не только переписка с коллегами или рассылка клиентам. Это канал, через который каждый день проходят платёжки, инвойсы, запросы на переводы. И именно эта часть коммуникаций десятилетиями оставалась в зоне риска, потому что заголовки писем (From, Subject, To) никак не защищались. Мы могли шифровать тело письма, подписывать вложения, использовать все возможные фильтры, но если злоумышленнику хотелось заменить тему на «Срочный перевод контрагенту», он мог это сделать.

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

И вот только в 2025 году IETF принял новый стандарт — RFC 9788. Он наконец-то говорит очевидную вещь: защищать нужно не только тело письма, но и заголовки. Теперь все поля копируются внутрь зашифрованной части, наружу выходит только технический минимум, а тема письма может заменяться на […]. Если кто-то попробует подделать заголовок, клиент сразу покажет рассинхрон.

Для разработчиков это очередная спецификация, набор правил и тестов. А для бизнеса это история про деньги и риски. Потому что каждый случай, когда бухгалтер ошибся и отправил платёж по фейковому письму, — это прямой убыток. Каждый подобный инцидент — это ещё и риск для репутации: в новостях упоминают не мошенников, а именно ту компанию, которая «повелась».

Да, внедрение будет постепенным: сначала open source-клиенты и энтузиасты, потом корпоративные почтовики, потом массовый рынок. Но уже сейчас очевидно, что компании, которые раньше внедрят RFC 9788, снизят риски быстрее. Это история не про «технологическую моду», а про то, сколько денег вы теряете или экономите.

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

Теги:
+3
Комментарии5

RFC 9828: стандарт, который, странным образом, опоздал лет на двадцать

JPEG 2000, появившийся ещё в начале нулевых, давно используется в задачах, где требуется высокое качество изображения, а RTP как транспорт для данных реального времени уже более двадцати лет обеспечивает надёжность. Однако, и это удивительно, всё это время отсутствовал формализованный стандарт, позволяющий передавать JPEG 2000 с минимальной задержкой, по кускам кадра, не дожидаясь его полной готовности, — и лишь в 2025 году он был наконец принят. Можно только гадать, почему в мире, где запускают ракеты в космос по подписке, инженеры продолжали смиренно ждать, пока кадр целиком упадёт в буфер.

Теперь же, с появлением RFC 9828, ситуация меняется: простое на первый взгляд решение — передавать кадр частями, а не целиком, — становится официальной нормой. Как только кодер начинает производить данные, пакеты уже могут быть отправлены в сеть, а приёмник, не дожидаясь окончания всего кадра, начинает сборку изображения. И именно это означает, что впервые JPEG 2000 становится пригодным для таких сценариев, где маркетинговый термин «low latency» оборачивается критическим требованием: телевещание в прямом эфире, дистанционная хирургия или работа со сверхкачественным изображением в реальном времени.

Вместо прежнего порядка «сначала кадр, затем поток» появляется обратный — «сначала поток, затем кадр». Благодаря этому сеть получает ту самую гибкость, о которой раньше говорили как о недостижимой: лишние уровни разрешения и качества можно отбрасывать на лету, даже не вскрывая содержимое. Приёмник, в свою очередь, обретает resync-точки, благодаря которым потеря пары пакетов больше не превращается в катастрофу, а разработчики, наконец, могут избавиться от бесконечных костылей, изобретённых в обход RFC 5371.

Выгоды для бизнеса очевидны, хотя каждый сектор формулирует их по-своему. В телевидении по IP режиссёр теперь видит кадр практически сразу, а не спустя полсекунды, и значит — работа в реальном времени перестаёт быть фикцией. В медицине появляется возможность стримить эндоскопию или МРТ с качеством вплоть до lossless и при этом не терять драгоценные секунды, от которых зависит исход операции. Кинопроизводство перестаёт таскать гигабайты по дискам, потому что мастер-кадры наконец-то могут пересылаться по сети. Даже государственные сервисы, включая суды и видеоконференции, приобретают шанс выглядеть не как мем из 2008 года, а как инструмент XXI века.

Да, пока это лишь бумага. Но, как обычно бывает: сначала RFC, затем — первые SDK и FPGA-решения, а чуть позже — перепакованные в отраслевые документы SMPTE и ITU стандарты. В горизонте двух-трёх лет мы увидим первые реальные внедрения в телевидении и медицине, в горизонте пяти — широкое распространение. А дальше, возможно, даже lossless-видеозвонки без лагов перестанут казаться фантастикой.

RFC 9828 — это не просто ещё один формат. Это признание индустрии в том, что ждать конца кадра всё это время было, мягко говоря, глупо.

Ссылки, как обычно, в моём канале

——————
Менеджер? Давай сюда!
Ищи работу здесь
Технологии и архитектура

Теги:
+4
Комментарии2

Дайджест: новое за лето ☀️

🤖 Запустили AI-помощника Клаудию — она доступна в вашем личном кабинете. Клаудия поможет создать ВМ, уточнит задачу и подберет конфигурацию, подскажет команды в консоли. А еще настроит виджеты, алерты и нотификации для контроля ВМ, поможет найти нужное в документации и выступит как co-pilot. Попробуйте бесплатно — новым пользователям дадим 4 000 рублей на облачные ресурсы.

🖥️ В Evolution Foundation Models открыли доступ к новым open source моделям, в том числе к OpenAI 120b, Qwen-3, GigaChat, GLM-4.5 и другим. Всего доступно 20+ LLM, ранжировщиков и эмбеддеров, а до 31 октября вы можете бесплатно потестировать их на своих проектах.

Участвовали в крупных мероприятиях:

  • Провели митап Cloud․ru Tech Lab: AI&ML, где рассказали, как автоматизировали пользовательские сценарии с помощью AI-агента, разобрали устройство агентов, RAG и Ragas. А еще слушатели могли вживую пообщаться с экспертами, «прожарить» свое резюме и посетить демозону AI-решений на базе Cloud․ru Evolution.

  • Организовали конференцию GoCloud Tech 2025 о создании решений на базе AI и облаков. Обсудили кейсы внедрения AI&ML, тренды в создании облачной инфраструктуры, актуальные практики для работы с данными в облаке.

  • Во второй раз приняли участие в крупнейшей AI-выставке в мире — World Artificial Intelligence Conference в Шанхае 🇨🇳 На нашем стенде мы показали платформу Cloud․ru Advanced, провели встречи с Geely, Tencent, Baidu, IFlytek, GAC, TikTok, Alibaba, Li Auto и другими зарубежными компаниями.

🧠 Запустили бесплатный курс про создание ML-моделей и их внедрение в бизнес. Будет полезно менеджерам продуктов и проектов, DS-, backend- и frontend-разработчикам, продуктовым дизайнерам. Можно учиться в комфортном темпе, а в конце дадим именной сертификат.

✨ Предлагаем бесплатно протестировать сервисы Evolution Data Platform — новой платформы для полного цикла работ с данными:

  • Evolution Managed BI для визуализации и анализа данных в облаке, в стадии public preview;

  • Evolution Managed Airflow поможет управлять рабочими процессами. Находится в стадии private preview — напишите своему аккаунт-менеджеру, чтобы начать тестирование.

Запустили в публичное превью и другие сервисы Evolution Data Platform:

  • Evolution Managed Metastore — сведения о данных для клиентских приложений;

  • Evolution Managed Trino — массивно-параллельный аналитический SQL-движок Trino;

  • Evolution Managed Redis — кеширование данных, управление очередями и работа с данными в реальном времени.

🎁 А еще до 31 декабря 2025 года дарим юрлицам 35 000 бонусных рублей на Evolution Managed Trino, Evolution Managed Metastore и Evolution Managed Spark.

🔝 С радостью делимся успехами наших клиентов:

🎙️ Провели несколько интересных вебинаров и подкастов — каждый из них вы можете посмотреть в записи: 

💳 Упростили регистрацию в реферальной программе: теперь подать заявку можно в несколько кликов, а на каждом этапе вы можете получить помощь менеджера. Присоединяйтесь к программе до 30 сентября, рекомендуйте сервисы Cloud.ru, получайте 20% от суммы их чеков в первый год и 15% — в последующие.

До скорой встречи!

Теги:
-1
Комментарии0

Вопрос: оцени сколько времени займет выполнение задачи?

Оценка - это, по определению, предположение.

Так что какое число ни назови столько и будешь работать до следующего такого вопроса 😁

Теги:
-1
Комментарии3

Приглашаем на Java Jam — бесплатный митап ЮMoney для Java-разработчиков

Спикеры из ЮMoney и главный эксперт по технологиям Сбера расскажут о своём опыте и пообщаются с аудиторией. Вот какие темы будут на митапе:

🟣 Как мы уменьшали нагрузку на базы данных в очередях задач. Расскажем, как реализовать надёжное асинхронное и отложенное исполнение задач.

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

🟣 Уязвимости не пройдут. Обсудим, как повысить безопасность разработки с помощью SAST и SCA.

25 сентября, в четверг, в 18:30 (мск) — приходите на митап в Санкт-Петербурге или подключайтесь онлайн!

Подробности — на сайте митапа Java Jam 

Теги:
-1
Комментарии0

Привет!

Рады поделиться с сообществом отличной новостью: теперь Explyt доступен для скачивания с JetBrains marketplace.

Установить Explyt 4.2 с AI агентом для написания кода, тестирования и дебаггинга можно в один клик из вашей IDE (IntelliJ IDEA 2024.1+, PyCharm 2024.1+, GoLand 2024.1+).

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

Всем отличной пятницы 🖖

Теги:
+2
Комментарии0

Решил посмотреть курс по обучению нейросетям, и вот что я осознал:

Курсы по нейросетям - это по прежнему бизнес продающий курсы.

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

Само же обучение работе с нейросетями не требует какого-то специального обучения.

По сути работа с нейросетями требуют прокачать три навыка: давать понятный запрос, понимать результат, внедрять полученный результат для решения своей задачи.

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

Шаги те же: выбираю задачу что хочу решить, декомпозирую(выбираю ряд маленьких шагов), делаю эти шаги сам или ставлю/делегирую задачу кому-то(человеку, гуглу, программе, сервису, нейросети), получаю и обрабатываю результат, перехожу к начальному шагу.

Скорость получения результата стала сильно выше, и инструменты новые появились, просто надо привыкнуть к таким скоростям и к таким инструментам.

В общем не надо особо чему-то новому учиться.

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

В своей предметной области, в своей теме, для своих задач.

Вот и всё :)

P.S. Основная польза курса как мне кажется - это история "Путь героя", которая подсвечивает варианты как это может быть и дает новую инфу(для кого-то), которая может подсветить какие-то новые инструменты. Все это есть как в платных курсах так и в свободном доступе. Ну еще автор работал над структурой. Но в жесткой структуре есть как свои плюсы, так и свои минусы.

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

Теги:
0
Комментарии3

Уже неоднократно и не только на Хабре жаловался на мелочность работодателей в объявлениях и ненужности указания всех библиотек, технологий и даже их версий. Сегодня в LinkedIn увидел предельный случай - ищут Java профессионала, который "strong in JSON,...". Факин JSON! Зa сколько учится этот формат? Секунд за 30? А если с возможностями формальной проверки на правильность содержания, то минут за 15? Зачем кто-то вообще указывает такие мелочи, как JSON, в описании требований к вакансии? И так со всем. Вместо принципиальных технологий пишут конкретные реализации и даже их версии. Зачем? Зачем?... Ничего не ответила золотая рыбка)

Теги:
+2
Комментарии9

Какая должна быть длина у функций?

Щас скажу кое-что неочевидное. На эту проблему нельзя смотреть в статитке. Вот правильно 4 строки, 10, 100, поэтому разбиваем как-только доходим до предела. Я смотрю на это в динамике.

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

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

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

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

p.s. Смог тут загуглить исследование сотен миллионов строк на гитхабе: https://arxiv.org/pdf/1806.04556 (на скрине выдержка)

Больше про разработку в моем телеграм-канале Организованное программирование

Теги:
+2
Комментарии3

Из сегодняшнего. Давно уже напрашивается MCP registry. Появился MCP реджистри. Не знаю, насколько аудитория погружена, поэтому если нет, то я подробнее распишу

Model Context Protocol (MCP) — это не классическое API, а новый слой взаимодействия между LLM и источниками данных: вместо того чтобы самому писать запросы, интеграции и «велосипеды», бизнес просто подключает MCP-серверы, которые находятся у провайдеров данных. Провайдер отвечает за подготовку промптов, функций, агрегацию источников и поддержку версий, а компания получает централизованный доступ к данным и готовым описаниям. Важно: MCP разводит зоны ответственности — финансы за работу LLM остаются у вас, а ответственность за качество данных и промптов несёт провайдер; таким образом, вы оптимизируете бюджеты, снижаете риски и можете гибко строить оркестрацию (через LangChain или свои пайплайны) без затрат на «ручные» интеграции с контролем версий отпровайдера

Раньше каждая команда или компания искала MCP-сервера вручную, через частные списки или разрозненные каталоги, что замедляло внедрение и поддержку клиентов. Теперь MCP Registry выступает единым «источником правды», где можно быстро находить, подключать и проверять сервера

Думаю, что ближайший год-два мы будем наблюдать, как наровне с публичными АПИ, будут появляться публичные MCP для интеграций. Что уж там, они есть уже у 1С даже, хотя там нюансы, конечно

Source

Теги:
+2
Комментарии0

Привет, Хабр!

Всего две недели назад вышла версия Explyt 4.1 с поддержкой Python, MCP серверов, новыми Rules и Workflows, а уже сегодня мы рады поделиться новым релизом Explyt 4.2 с поддержкой Go. Теперь все фичи AI агента доступны в GoLand.

Важное обновление

Начиная с версии Explyt 4.2, мы вводим процедуру регистрации новых пользователей. Этот процесс займёт 30 секунд и позволит: 

  • повысить стабильность и доступность инфраструктуры из любой точки мира 

  • корректно соблюдать правовые требования 

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

Запуская бесплатный 30-дневный триал Personal версии, вы сразу получаете 4000 кредитов, которые можно использовать для запросов к LLM.

Возможность пользоваться своими моделями без регистрации в версии Community по-прежнему остается.

Скачать Explyt 4.2 можно с нашего сайта. Для багрепортов и фичриквестов - GitHub Issues и чат с командой плагина. Будем рады вашей обратной связи и философским вопросам 🖖

Теги:
+3
Комментарии2

Конкурс open source проектов, которые способны изменить мир 🌏🖥️

Зовем вас на «Код без границ» — грантовую программу для развития open source проектов, которую совместно с Cloud.ru и Хабром подготовили GitVerse. Поделитесь своими разработками на GitVerse, получите шанс выиграть 💸💸💸 и получить поддержку в масштабировании идеи.

Номинации конкурса:

  • AI-инновации.

  • Наука и образование без границ.

  • Для всех и каждого (приложения и сервисы).

  • Разработка для разработчиков — инструменты и библиотеки.

Как участвовать? Рассказываем:

  1. Разместите репозиторий вашего проекта на GitVerse или импортируйте его с другой git-площадки.

  2. Подайте заявку до 31 октября. В ней должна быть ссылка на уже размещенный конкурсный проект.

  3. Подождите, пока жюри — опытные спецы из СберТеха (GitVerse), Сбера, Cloud.ru и лидеры отрасли — посмотрят работы и выберут финалистов.

  4. Узнайте результаты в декабре.

Что по призам и плюшкам?

  • Гранты 150, 100 и 50 тысяч рублей — для первого, второго и третьего места.

  • Облачные ресурсы Cloud.ru для реализации ваших масштабных идей.

  • Помощь с масштабированием проекта, поддержка экспертов и нетворкинг.

Регистрируйтесь, принимайте участие и покажите силу открытого кода 💪

Теги:
+4
Комментарии0

Ближайшие события

С праздником, профессионалы!

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

Теги:
0
Комментарии1

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

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

А зря.

Скоро никто не ответит с ходу, почему счёт начинается с нуля, а не с единицы. Да уже сейчас многие испуганно полезут в ChatGPT.

А ведь за этим стоят фундаментальные решения, архитектурные баталии и гениальные озарения, которые определили всё, с чем мы работаем сегодня. Помнить о них — значит не наступать на пусть и симпатичные, но всё-таки грабли прошлых ошибок.

Мы в Профи.ру решили, что День программиста — идеальный повод устроить себе исторический reset --soft. Проверить, насколько мы, айтишники, помним и ценим своё прошлое.

Поэтому сделали тест, в котором погуляем по разным эпохам в ИТ.

Актуалочку тоже добавили — нагенерили красивых ИИ-картинок в Sora для каждой эпохи.

👉 Пройти тест

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

А вы как думаете? Мы слишком забываем о прошлом? Или это естественный ход вещей? Делитесь мнением и своими результатами в комментах.

А ещё советуйте интересные вопросы, которые можно было бы добавить в этот тест :)

Теги:
+3
Комментарии0

С Днём программиста

Сегодняшний День программиста - это повод вспомнить, что большая часть человечества до сих пор не понимает, чем мы занимаемся. С точки зрения стороннего наблюдателя: человек сидит, смотрит в монитор, иногда хмурится, бьёт по клавиатуре ("клац-клац-клац"), пьёт кофе и что-то бормочет. При этом: не взаимодействует с клиентом, не строит дом, не лечит людей, а зарплату получает.

Учёные из института когнитивных странностей опубликовали предварительное исследование:

"Представители вида Homo programmatus проводят до 10 часов в день за ритуальным стучанием по плоской коробке. Цель действия неясна, но, судя по всему, связано с укрощением невидимых существ по имени NullPointer и Segmentation Fault. Иногда вместо слов они пишут “if (true) { while(true) { ... } }” - вероятно, заклинание бесконечной защиты".

В этот День программиста - честь и уважение всем, кто:

  • пишет код, который никто не видит;

  • чинит то, что никто не ломал;

  • объясняет нетехнарям, почему "просто добавить кнопку" - это три спринта.

Пусть ваши функции возвращают нужное, логи будут читаемы, дедлайны гибкими, а код будет элегантным, рабочим и читаемым (Update ver 1.1).

С праздником вас, Хранители кода!

Теги:
+7
Комментарии1

Linkedin писали русские

Перевод: https://www.linkedin.com/pulse/observe-dont-just-see-sergey-derevyago-cbj7f

Ватсон: Я думаю, мои глаза не хуже ваших.
Холмс: Да, это так. Но вы смотрите и не видите...

Сколько лет вы уже смотрите на эту картинку?

Нет, там не аудио компонент. А простое понятное русское слово...

С днём программиста!

Теги:
+5
Комментарии2

Как научиться программировать лучше

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

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

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

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

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

Мой личный топ того, что учит писать грамотный код на высокоуровневых языках, где мы фокусируемся на создании правильных абстракций это SICP/HTDP + попрактиковаться в написании кода на одном из популярных функциональных языков.

За мою довольно длительную карьеру, самый большой сдвиг произошел именно в тот момент, когда от изучения фаулеров, мартинов и банд я взялся за более серьезный фундамент. Было это году в 2013, с тех пор, что бы я не изучал, оно накладывается и дополняет, а не переворачивает мой мир внутри, как было 5 лет до того. Тогда, в первые годы моего программированияб каждый раз смотришь на свой код или читаешь что-то и думаешь, блин, надо проектировать по другому.

И это не только мое наблюдение, почти все ребята с кем мы тогда активно тусили в разных комьюнити, пересекались на конфах и дружили, в целом отмечали как фп (в частности clojure, haskell, ocaml, erlang) значительно сдвигали понимание программирования.

Почему это так? А потому что в остатке мы упираемся в побочные эффекты, барьеры абстракции (тут сикп) и грамотное управление состоянием. Вот такие пироги

Больше про разработку в моем телеграм-канале Организованное программирование

Теги:
+6
Комментарии2

Российская компания Selectel, развивающая Linux-дистрибутив Selectel OS на пакетной базе Debian, представила инициативу OpenFix, в рамках которой начнёт выплачивать энтузиастам денежные вознаграждения за участие в работе над задачами, связанными с развитием и исправлением ошибок в открытом ПО. Код выполненных проектов будет публиковаться под пермиссивной лицензией с сохранением авторства участников.

Вознаграждения назначается индивидуально и выплачивание после принятия изменения в Debian или Ubuntu и закрытия сообщения об ошибке.

Предложено три направления деятельности, выполнение задач в которых Selectel готов оплачивать:

  • переписывание известных открытых проектов на язык Rust. В настоящее время доступны три задачи, связанные с переписыванием с языка С на Rust кода проектов xz, c‑ares и libxml2 c сохранением поведения оригинала.

  • вознаграждение за переписывание библиотек libxml2 и c‑ares и определено в 350 тысяч рублей, а библиотеки xz в 200 тысяч рублей, но в случае xz указано, что достаточно переписать критические части библиотечных обвязок и связать с существующей Си‑реализацией алгоритма LZMA.

  • формирование и последующее сопровождение (подготовка обновлений) пакетов для Debian GNU/Linux. Приложения для которых предлагается создать deb‑пакеты (c опциональным продвижением созданного пакета в Debian Unstable): apache‑pulsar, bash‑it, bazel, bitwarden‑cli, composefs, cve‑bin‑tools, doh‑cli, dupd, dyff, firecracker, griddb, jailhouse, keycloak, oauth2-proxy, phoronix‑testsuite, photodedupe, purritobin, shh, skim, sssh‑tpm‑agent, uv, vaultwarden. Размер вознаграждения от 30 до 160 тысяч рублей. Премии меньше 50 тысяч рублей определены для uv, dyff, doh‑cli, purritobin и bash‑it, а больше 100 тысяч для jailhouse, bazel, sssh‑tpm‑agent, keycloak, griddb, firecracker и apache‑pulsar.

  • Исправление ошибок в существующих открытых проектах. Участники на своё усмотрение могут выбирать проблемы, подтверждённые в системах отслеживания ошибок Debian и Ubuntu (Launchpad), после чего согласовать возможность получения вознаграждения за их исправление с Selectel. Вознаграждения назначается индивидуально и выплачивание после принятия изменения в Debian или Ubuntu и закрытия сообщения об ошибке.

Теги:
+12
Комментарии4

Полиморфизм и наследование

Каждый раз, когда я слышу от кого-то описание или определение полиморфизма, там присутствует слово "наследование".

> Объясните что такое полиморфизм? Ну это когда базовый класс и наследники...

Давайте по порядку. Полиморфизмов вообще существует больше чем один. Но, все таки, когда речь идет про массовое программирование (простите функциональщики), по умолчанию говорят о полиморфизме подтипов (subtyping). Упрощенно, в этом полиморфизме мы заменяем иф на общий метод для разных типов объекта. Таким образом сам объект (его тип) определяет реальное поведение, а вызывающий код про это не знает, он просто дергает метод (или методы):

function doSomething(logger) {
  // Где-то снаружи выбирается конкретный логгер
  // Разные логгеры могут работать сильно по разному
  logger.info('hey');
}

Что мы тут получили? Возможность менять поведение конфигурированием приложения (меняем тип объекта во время настройки), а не тем, что ходим по ифам где выбирается конкретная реализация и меняем там код.

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

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

Больше про разработку в моем телеграм-канале Организованное программирование

Теги:
-1
Комментарии2
1
23 ...

Вклад авторов