Как стать автором
Обновить
1097.42

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

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

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

Flutter & Dart: Май 2025 — Главное за месяц

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров2.2K

Май принёс отличные новости для Flutter-разработчиков: обновления SDK, интересные статьи, пачка новых и полезных пакетов, а также видео на русском и английском языках.

Читать далее

Философия программирования зашла в тупик

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров20K

Никто давно не пытается выводить теорий о том как правильно писать код.

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

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

Читать далее

Что может пойти не так с merge() — дубли, потери, ошибки типов

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров2K

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

Тонкое скрещивание DataFrame-ов в pandas по-прежнему остаётся источником прелестных багов: случайных дубликатов, потерянных строк и неуловимых NaN-ов. В статье рассмотрим эти проблемы.

Читать далее

Mystical: визуальный язык программирования. Что это и как работает?

Время на прочтение4 мин
Количество просмотров9.8K

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

Читать далее

Великая иллюзия Copilot

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров26K

Глава 1: мой коллега, программист

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

«Постой-ка. У меня появилась идея. Дай мне клавиатуру.»

Идея. Ага. Как у младенца появляется «идея» засунуть вилку в розетку. Я почти доделал нечто прекрасное; стройную, изящную логику, пронзающую сложность подобно ножу, режущему масло. И тут появился он — бьёт по клавиатуре, как будто она ему деньги должна, копипастит код-франкенштейн из комментария на StackOverflow, написанный последователем Дяди Боба в 2014 году.

Знает ли он, что делает наша система? Нет.

Прочитал ли он тикет? Разумеется, нет.

Ощущает ли он уверенность, когда безрассудно корёжит глобальное состояние? Разумеется, да.

Читать далее

Возможное расширение языка C++ операцией скалярного произведения

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров4.6K

У меня возникла идея, как можно расширить синтаксис C++ операцией скалярного произведения. Если кратко, то произведение двух матриц в новых обозначениях будет выглядеть так:

C[>i][>j] = A[i][>k] * B[>k][j];

Насколько мне известно, сочетания операторов [> и [< вроде бы нигде не используются. Их можно применить для декларации индексов, которые существуют только в пределах данного выражения. Сочетание [> используется для декларации индекса, который пробегает от начала до конца массива в прямом направлении, а сочетание [< для декларации индекса, который пробегает в обратном направлении. Для повторяющихся индексов в произведении подразумевается суммирование - они аналогичны немым индексам в тензорных обозначениях.

Разберём на примерах, как это будет работать.

Читать далее

Как я учил жёлтый ИИ торговать и обманывать друг друга

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров995

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

Читать

Новая проблема с ИИ?

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров14K

ИИ шагает по планете и входит в нашу повседневную жизнь. Но иногда преподносит сюрпризы.  Некоторые из них - неприятные.

Моя заметка - об одном таком сюрпризе.

Читать далее

Как устроен reflect.Value и что происходит, когда вы вызываете .Field(i)

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров1.6K

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

Сегодня разберём, как устроен reflect.Value изнутри и что на происходит, когда вы вызываете .Field(i).

Читать далее

Плохие паттерны в типах — «Утка-дублер»

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров4.1K

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

Читать далее

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

Время на прочтение2 мин
Количество просмотров1.6K

Кажется, ещё вчера искусственный интеллект был чем-то из фильмов и фантазий. А сегодня - он везде: в чатах, в рабочих инструментах, в личных помощниках. Мы удивительно легко впустили его в свою жизнь - с интересом, с восхищением, с доверием. И, казалось бы, что может пойти не так?

Читать далее

Покрытие процедурного кода в ООП проекте юнит-тестами в C++

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров1.1K

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

библиотеки, поставляемые как ООП решение (Некоторые модули boost, SOCI как пример)

библиотеки, реализованные в функциональном стиле (OpenGL через С API, POSIX как пример)

Из-за этого в итоговом проекте появляются сущности, которые внутри реализованы через классы, но внутри методов класса идет обращение к обычным функциям. Некоторые библиотеки имеют специфичные функции, которые для своей работы требуют первоначальную инициализацию. Как пример: поиск подключенных устройств и получение на них ссылок для дальнейшей работы или функции, которые требуют инициализации большого количества памяти.
Вследствие этого возникает вопрос - как лучше реализовать покрытие юнит-тестами специфичных объектов, которые внутри себя имеют функции, требующие специальных условий для своей работы?

Читать далее

Чем опасен apply() и почему его стоит заменить

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров12K

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

Сегодня рассмотрим почему DataFrame.apply() — это так себе инструмент в 2025 году, чем его заменять и как писать dataframe-логику так, чтобы она летала вместо того, чтобы жечь CPU и бюджет.

Читать далее

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

Функции и методы в Go

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров3.7K

Go — язык, который ценится за простоту и чёткость. Однако даже при минимальном синтаксисе здесь есть нюансы. Особенно это касается работы с функциями и методами. В этой статье хочу поделиться личными наблюдениями и выводами по нескольким ключевым темам: выбор типа получателя, использование именованных параметров результата, распространённые ошибки при возврате nil, проблемы с файлами в качестве входных данных и поведение defer.
ps. Обложку нейронка сгенерировала. Очень странно, но мне понравилось.

Читать далее

Архитектурные принципы Spring Security. Часть вторая

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров4.4K

Команда Spring АйО перевела и адаптировала доклад Даниэля Гарнье-Муару “Spring Security Architecture Principles”, в котором на наглядных примерах рассказывается, как пользоваться возможностями Spring Security, не запутываясь на каждом шагу и не зарабатывая себе головную боль. 

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

Читать далее

SmartCaptcha Yandex на iOS: инструкция по внедрению

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров616

Привет! Меня зовут Александр, я iOS-разработчик в IT-компании SimbirSoft. В этой статье я расскажу, как интегрировать Yandex SmartCaptcha в iOS-приложение — от подготовки до решения возможных трудностей.

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

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

Читать далее

8 ошибок в лицензировании софта, которые могут обходиться дорого

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров1.4K

Привет, Хабр! Сегодня хочу поговорить о том, как компании-разработчики сами себе «ставят палки в колеса» — выбирают неэффективные модели лицензирования собственного ПО и теряют выручку. Казалось бы, что сложного? Настроил защиту от несанкционированного использования, прикрутил проверку лицензий, добавил пару условий в договор — и готово. Но на практике ошибки в лицензировании обходятся дорого: теряется выручка из-за пиратства и негибких продаж, растут операционные расходы, а клиенты уходят к конкурентам. Почему это важно? Лицензирование — не просто «замок» на софте. Это инструмент монетизации, который защищает код от нелегального использования, формирует стабильный доход (подписки, продажа обновлений и модулей ПО), автоматизирует процессы и делает конечных пользователей счастливыми.

Читать далее

Template Method в Go без наследования

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров1.9K

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

В статье рассмотрим, как реализовать Template Method-паттерн в Go без наследования, зачем он вообще нужен.

Читать далее

Как service discovery ломается в Kubernetes (и почему DNS не всегда помогает)

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров1.9K

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

В этой статье рассмотрим, как и почему в Kubernetes может сломаться service discovery — даже когда DNS вроде бы работает.

Читать далее

Nocode с MWS Tables: кейсы объединения разных команд в одном пространстве, системы выдачи пропусков и геймификации

Время на прочтение6 мин
Количество просмотров648

Привет, Хабр! Меня зовут Александр Антипов, я продакт-оунер MWS Tables.

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

В прошлом посте я рассказал, как MWS Tables помог внедрить единый реестр для работы с качеством данных, централизовать управление проектами и заменил таск-трекер. Сегодня будут еще три кейса: создание общего календаря и списка задач в распределенных региональных командах, единая система допусков и внедрение механики рейтингов.

Читать далее

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