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

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

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

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

Переход на Symfony в заскорузлом Yii2 монолите: подробный разбор

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

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

Читать далее

Новости

Программист за $4000 против ChatGPT за $20: кто победит в 2025?

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

Можно ли уже сейчас заменить команду разработчиков на нейросеть и шесть промпт-инженеров? Почему крупные компании до сих пор платят программистам по $4000, когда есть ChatGPT за $20? На дискуссии, которая прошла на Youtube-канале Ai4Dev менеджеры российских IT-компаний неожиданно разошлись во мнениях о будущем индустрии. Пока одни утверждают, что LLM способны писать код лучше людей, другие приводят неочевидные причины, почему полная автоматизация разработки невозможна. Но главный вопрос – действительно ли программисты сознательно тормозят внедрение ИИ, чтобы сохранить свои рабочие места, или есть объективные причины, по которым даже Google использует нейросети только для генерации 25% кода? Разбираемся вместе с экспертами, что на самом деле происходит на передовой борьбы человека и машины в IT.

Читать далее

Lombok в Java: избавляемся от бойлерплейта

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

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

Если вы писали на Java хоть раз, то знаете этот ужас — бесконечные геттеры, сеттеры, конструкторы, да ещё toString() и equals() на закуску. Одной только стандартной обвязки в классах моделей больше, чем самого кода.

Lombok — это библиотека, которая берёт всё это бойлерплейтное безумие оставляет только чистую суть.

Читать далее

Проводим идеальное собеседование разработчика. Советы от практика с тысячей собеседований за спиной

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

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

Тестовое задание

Перед собеседованием можно добавить этап выполнения тестового задания. Хорошее тестовое задание должно быть максимально приближено к реальным задачам. Чтобы оценить навыки, можно предложить что-то объёмное, например, разработку небольшого, но полнофункционального сервиса. Важно, чтобы кандидат сделал всё самостоятельно и в кратчайшие сроки — это покажет, насколько он заинтересован в позиции. Если человек отказывается от тестового задания, это говорит о недостаточной вовлечённости.

Собеседование

Сколько человек должно проводить собеседование? Оптимально 3-5. Один интервьюер может что-то упустить, а вот группа сможет задать вопросы с разных точек зрения.

Читать далее

Истории

Гармония железа и кода: ускоряем Go, проектируя приложение с учетом архитектуры процессора

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

Представьте, что ваш код работает на 30% быстрее, при этом вы почти его не меняли. Звучит как магия? На самом деле это может стать реальностью, если учитывать архитектуру процессора при проектировании приложения и данных. 

Привет! Я Александр Шакмаев — технический лидер в Cloud.ru. В статье предлагаю разобраться, как небольшие изменения, основанные на знании архитектуры процессора, могут привести к значительному ускорению Go. Готовы раскрыть потенциал вашего кода? Тогда переходите под кат.

Заглянуть под кат

Миграция на строгий TypeScript: наш путь и собственное решение

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

Наш проект имеет долгую историю. И за это время подходы к разработке фронтенда успели несколько раз измениться. В какой-то период в проекте можно было встретить код на JavaScript, CoffeeScript и TypeScript. Плюс сам TypeScript успел обновиться несколько раз за время существования проекта со второй до пятой версии.

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

В общем, если вам знакома эта ситуация, то статья для вас. Меня зовут Максим Овчарик, я ведущий фронтенд-разработчик в Selectel. Под катом расскажу, как мы строили процесс миграции кода на строгий режим TypeScript.
Читать дальше →

Model Context Protocol (MCP): Стандартизация взаимодействия AI-приложений

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

Где-то летом 2024 года в некоторых OpenAI сервисах появилась возможность использовать "инструменты".
Инструмент — это функция, которая выполняется на сервере и возвращает некий результат. Например, в ChatGPT можно было использовать инструменты для поиска информации в интернете, для генерации изображений и т.д.

Это был закрытый API, который использовался внутри OpenAI, и как и что там происходило было довольно туманно.

Anthropic (создатель Claude) совершил мини-революцию в AI инструментарии, создав открытый протокол Model Context Protocol (MCP) с расширенными возможностями для создания подобных инструментов и даже больше.

Уже сейчас можно подключать MCP серверы к IDE, например, Cursor AI или Cline, и значительно расширить их возможности. Так же это может рассматриваться как, как минимум, частичная замена RAG и fine-tuning.

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

Читать далее

Алгоритмы из теории графов: решаем сложную задачу из курса по Яндекс Практикума

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

Привет! Меня зовут Евгений, и сегодня я представляю курс «Алгоритмы и структуры данных» Яндекс Практикума. В этой статье хочу вам рассказать про задачу, которая долгое время была проблемой для многих наших студентов. В том числе расскажу про несколько вариантов решения и о том, как их можно доработать.

Также я дам решение с помощью теории графов, основная сложность которого заключается в чтении входных данных.

Читать далее

Range-v3 в C++

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

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

В этой статье рассмотрим Range-v3 — библиотеку, которая изменила подход к обработке последовательностей в C++ и стала основой для std::ranges в C++20.

Range-v3 — это библиотека, расширяющая стандартную библиотеку C++ возможностью работать с диапазонами вместо begin()/end(). В основе идеи лежат три концепции.

Читать далее

Параллельный A на Rust и Rayon: ищем путь для воробушка*

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

Привет, Хабр! Сегодня у нас задачка из мира природы: представьте, что маленький воробушек потерялся в городе. Ему нужно срочно найти путь домой, а дороги кишат кошками, людьми и прочими препятствиями. Разумеется, вручную искать маршрут — не вариант. Нам нужен алгоритм, а лучше параллельный, чтобы воробушек не ждал вечность.

Какой алгоритм взять? Конечно же A*. Он и кратчайший путь найдёт, и с умом его построит. Но в одиночку он справляется медленно. Поэтому подключаем Rayon — библиотеку для многопоточных вычислений в Rust.

Читать далее

Spring Security: разберём по полочкам токены, фильтры и авторизацию (с диаграммами!)

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

Команда Spring АйО перевела статью, в которой подробно рассматривается процесс регистрации и аутентификации пользователей с использованием Spring Security.

Читать далее

Как обойти гору: эффективные приёмы обработки пользовательских данных

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

Умный в гору не пойдёт, умный гору обойдёт. А если это гора пользовательских данных? Тогда тоже обойдёт — но не в смысле «вокруг», а буквально заглянет под каждый камень, чтобы ничего не упустить. Разберём в статье, как быстро и эффективно обойти данные, если требуется, к примеру, перенести их в новое хранилище или сделать анализ содержимого.

Меня зовут Андрей Баталов, я старший программист в VK Музыке. Расскажу об эффективных приёмах, которые помогают нам в переобходах аудиообъектов и других данных всех пользователей ВКонтакте.

Читать далее

Суть Go: Time

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

Как не утонуть в параллельных вызовах и держать время под контролем? В статье разберём throttle и backpressure, научимся использовать таймеры, тикеры и таймауты без лишних задержек и зависаний — всё на простых примерах.

Читать далее

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

11 – 13 февраля
Epic Telegram Conference
Онлайн
27 марта
Deckhouse Conf 2025
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань

Клон ChatGPT в 3000 байтах на C, основанный на GPT-2

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

Эта программа представляет собой свободную от зависимостей реализацию GPT-2. Она загружает матрицу весов и файл BPE из оригинальных файлов TensorFlow, токенизирует вывод при помощи простого энкодера, работающего по принципу частотного кодирования, реализует базовый пакет для линейной алгебры, в котором заключены математические операции над матрицами, определяет архитектуру трансформера, выполняет инференс трансформера, а затем очищает вывод от токенов при помощи BPE-декодера. Всё это — примерно в 3000 байт на C.

Код достаточно эффективно оптимизирован — настолько, что малый GPT-2 на любой современной машине выдаёт отклик всего за несколько секунд. Чтобы этого добиться, я реализовал KV-кэширование и применил эффективный алгоритм перемножения матриц, а также добавил опциональный OMP-параллелизм.

Взяв это за основу, можно создать некий аналог Chat GPT — при условии, что вас не слишком волнует качество вывода (объективно говоря, вывод получается просто ужасный… но решение работает). Здесь есть некоторые глюки (особенно с обработкой символов в кодировке UTF-8), а для эксплуатации модели размером XL с широким контекстным окном может потребоваться ~100 ГБ оперативной памяти. Но, если вы просто набираете текст в кодировке ASCII при помощи малого GPT2, то такая модель должна нормально работать примерно везде.

Я выложил весь код на GitHub, поэтому можете свободно брать его там и экспериментировать с ним.

Читать далее

Windsurf vs Cursor IDE: кто лучший AI-редактор кода?

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

Две популярные IDE (среды разработки) с поддержкой искусственного интеллекта: Windsurf и Cursor. Оба инструмента заявляют, что ускорят процесс написания кода, но какой из них лучше подойдет именно вам? Я тщательно изучил обе, и ниже расскажу к каким выводам пришел.

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

Что же там классного в этих IDE?

Еще раз о забытом. Roslyn Source Generators

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

Каждый разработчик часто сталкивается с написанием большого объема рутинного и повторяющегося кода, который имеет один и тот же смысл. Начиная с C# версии 9 появилась возможность генерации кода, которая интегрирована напрямую с компилятором. Такой подход позволяет избавиться от множества строк шаблонного кода. О нём сегодня и поговорим.

Читать далее

Гид по IT-сообществам: форматы, особенности и очень много ссылок

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

Привет! Меня зовут Юля. Я разработчик интерфейсов и ментор на курсах по фронтенду, в том числе на курсе «React-разработчик» в Практикуме. Последний год я активно занимаюсь организацией профессионального сообщества Tbilisi JS в Тбилиси: мы делаем митапы и конференции для разработчиков. 

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

Читать далее

Обработка ошибок REST API: лучшие практики

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

Привет, Хабр! Меня зовут Екатерина Саяпина, я Product Owner платформы МТС Exolve. Коды ошибок — последнее, что хочет видеть разработчик в ответе API. И означают они одно из двух: либо есть проблема в запросе, либо что-то сломалось на стороне API.

В любом случае трафик останавливается: нужно найти причины и решения. И коды ошибок в этом случае — полезный диагностический элемент. Сегодня я расскажу про подходы к их обработке и дам пример распространенной классификации.

Читать далее

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

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

ML‑модели применяются в сервисах Яндекса уже много лет, мы накопили большой опыт в их обучении. Статьи об этом коллеги регулярно публикуют, в том числе на Хабре. Но сегодня хочу обсудить другую не менее важную задачу — ускорение инференса (процесса работы на конечном устройстве) моделей. Скорость зависит от разных условий, главным образом от архитектуры и железа, но есть множество интересных способов повлиять на неё. Особенно актуальна проблема тяжёлого инференса при использовании больших языковых моделей (LLM) — на то они и large!

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

Читать далее

Создание файлового сервера на c++ и Boost

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

В этой статье я описал процесс создания файлового сервера — инструмента для организации доступа к файлам по сети. В статье представлен пример реализации файлового сервера на C++ с использованием библиотеки Boost.Beast и Boost.Filesystem. Сервер позволяет просматривать содержимое указанной директории и поддиректорий, скачивать файлы.

Читать далее

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