Как стать автором
Поиск
Написать публикацию
Обновить
87.14

Качество кода *

Как Макконнелл завещал

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

Pro Деньги. JSR-354

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

Достаточно часто в реализации сервисов есть необходимость оперировать денежными единицами, хранить их в БД, обмениваться по API и выполнять конвертацию

Читать далее

Новости

Зачем CEO рискует всем ради хакатона с AI? История MergeSensei

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

Глубокой ночью CEO инициирует хакатон — за 48 часов команда собирает MVP AI-ревьювера кода. Безумие? Возможно. Но теперь мы ищем CTO и тимлидов, чтобы протестировать MergeSensei и сделать его настоящим помощником в code review. Подключайтесь — и помогите нам улучшить инструмент, который реально снимает боль ревью.

Читать далее

Типы и тесты

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

В статье про тестируемость я косвенно упоминал подход "разработка через тестирование" (TDD); сейчас же хочу поделиться переводом статьи от гуру TDD, Роберта Мартина. Он обсуждает с Марком Симаном, нужно ли при динамической типизации больше тестов. Симан утверждает, что статическая типизация исключает многие недопустимые состояния, и поэтому часть тестов становится просто ненужной. Мартин же доказывает, что тесты необходимы для проверки поведения независимо от языка. При использовании методологии TDD типизация не обеспечивает дополнительной надёжности.

В итоге оба подхода приводят к рабочему коду, но разными путями: TDD шаг за шагом строит поведение через тесты, а статическая типизация формально исключает ошибки на уровне структуры программы.

Читать далее

It's a match

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

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

Давайте вспомним как мы строим роутинг в наших приложениях. В примере ниже – react-router-dom, но в других фреймворках/библиотеках все примерно также:

Читать далее

Вайб-кодинг глазами старого разработчика

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

Здорово, когда ты получаешь готовое работающее приложение с одного запроса. Пусть даже долго оттачиваемого, как меч самурая. Это апофеоз одновременно профессионализма и лени: ты смог сформулировать задачу так, что ИИ тебя понял и с первого раза сделал всё верно.

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

Эта статья содержит разбор эксперимента по вайб-кодингу, проведённого oldschool-разработчиком с 20+ летним стажем (Assembler, 1C, C/C++, Go, Pascal, Perl, PL/SQL, Python). Я покажу:

• В каких случаях вайб-кодеру достаточно минимальных знаний предмета, а в каких необходимы экспертные навыки и опыт?

• Что изменилось в инструментах вайб-кодинга за текущий год, и что изменится в ближайшем будущем?

• Сравним обычные и «премиум» языковые модели.

• Поймём, есть ли предел у диалога с ИИ-ассистентом, и как понять, что он достигнут?

Читать далее

Обработка исключений на JS – неудобная, но не безнадежная

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

Ситуация: пишешь код на JS, хочешь обработать исключение, пробрасываешь throw, ловишь его с помощью try‑catch. Но добавим нюанс: пусть это нужно сделать для setTimeout. Эта функция использует окружения браузера — не JS‑функция, асинхронная.

Загвоздка: catch не сможет поймать ошибку.

Этот пример — одна из нескольких особенностей JS, из‑за которых я считаю обработку исключений «из коробки» на этом языке неудобной. Но есть и хорошие новости — для JS существуют альтернативные способы работы с исключениями, с которыми дела обстоят получше; например, паттерн «контейнерный тип».

Давайте разбираться.

Читать далее

Как правильно вайбкодить! Советы от QA, который запустил свою песочницу

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

Привет, заводчане! В этой статье вы найдете реальные технические советы по особенностям общения с бездушными ИИ моделями, в частности я расскажу про GPT 4o и свежую 5, но эти советы также применимы и к другим AI.

‼️Сразу внесу ясность: рекомендации предназначены для личных пет-проектов и
не призывают нарушать политику конфиденциальности вашей компании!

Я инженер по тестированию и уже около года поддерживаю работу своей песочницы по практике тестирования и подготовке к собеседованию на позицию Full Stack QA. Опыт вайбкодинга повлёк за собой понимания работы JS, CSS и HTML, если говорить конкретно про веб-проект. Благодаря такому проекту и подходу вайбкодинга, я собрал технические инструкции и заметки как выжать максимум из ответа ИИ моделей, здесь будет больше технических особенностей работы с моделями, нежели готовые промпты. Ниже указал 12 советов, которые упростят вам написание кода, разработку своего проекта, изучение нового стека или учебную практику.

Читать далее

QA-инженер в продукте: как я ушёл из аутсорса и перестал паниковать перед релизом

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

Полгода назад я испытал культурный шок. Всю карьеру — я QA Automation Engineer — пилил фичи в аутсорсе: стабильно, предсказуемо, местами даже комфортно. Но на январских каникулах впервые за долгое время задумался: мне скоро 30, я уверенный сеньор — а будто бы стою на месте.

Я просто включил «open to work» на LinkedIn — и неожиданно получил оффер в продукт. Пошёл на собеседование «чисто посмотреть» и остался.

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

Читать далее

Если ваш запрос на слияние сгенерирован ИИ, я его отклоню. Объясню, почему

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

Иногда запрос на слияние (merge request) даже не стоит отправлять на код‑ревью, так как при его составлении кто‑то злоупотреблял искусственным интеллектом, и это повредило как проекту, так и команде. Например:

1. Удалив часть кода, можно значительно улучшить запрос на слияние.
2. Вы не знаете основ языка, на котором подавали запрос.
3. Спам в документации.
4. Вопиющая несогласованность материала.
5. Чрезмерно подробно рассмотрены пограничные случаи.
6. Вы добавили бессмысленные или нежелательные зависимости и сами не понимаете, зачем.

Если я прислал вам обратно ваш запрос на слияние с невычищенным ИИ и без всяких прочих комментариев — значит, какие‑то из этих пунктов вы выполнили.

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

Читать далее

TDD и цикл обратной связи

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

Есть небольшая книжка написанная более 20 лет назад, переведенная на русский как «Экстремальное программирование». При обсуждении этой книжки с коллегами я часто встречал мнение, что она только про то, что надо сначала тесты писать, а потом код и больше в ней нет ничего полезного. Когда у самого добрались руки до нее, я понял, что видимо читают выжимки из статей на Хабре или просто статьи википедии, потому что там есть и паттерны проектирования, и правила написания тестов и практические примеры. А все запоминают только мантру «Утром тесты — вечером стулья код».

Читать далее

Как мы автоматизировали код-ревью за 48 часов на хакатоне: от боли техлидов до рабочего MVP

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

«У чат-GPT спросил?» — эта фраза стала мемом в нашей команде. Техлид Иван постоянно экспериментировал с AI, а коллеги подшучивали над его энтузиазмом. Вдохновлённые энтузиазмом техлида, мы решили протестировать возможности искусственного интеллекта для автоматизации код-ревью. За 48 часов хакатона мы создали рабочее MVP, которое уже упрощает работу разработчиков. Читайте, как AI помог нам сократить время на ревью кода и какие результаты мы получили всего за два дня.

Читать далее

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

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

Привет, Хабр! Меня зовут Владимир Добрынин, я ведущий разработчик в МТС Web Services. Наша команда занимается плагинами DevTools, которые упрощают и ускоряют создание софта, в том числе за счет сокращения рутинных операций.

У нас уже есть целое семейство внутренних инструментов. Один из них — DevTools Copilot, который непосредственно из среды разработки позволяет взаимодействовать с LLM в режиме чата. А теперь мы реализовали DevTools Code Review, который помогает проводить самостоятельное код-ревью. В этой статье расскажу, как работает плагин и чего мы с его помощью добились.

Читать далее

Скрытая грамматика: почему len() — это полисемия, а хороший код — набор идиом. Как филология объясняет «чистый код»

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

Оживленная дискуссия под моей первой статьей (https://habr.com/ru/articles/940782/) показала: разговор о единстве языка со сферой программирования задевает многих за живое. Тем не менее, cпасибо всем за сотню комментариев, сохранений и невероятно полезного и ценного опыта!

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

Вместе с тем один из наиболее сильных и частых аргументов от скептиков звучал примерно так: «весь код — это чистая, бездушная логика для машины». На мой взгляд, это самое большое заблуждение в этой индустрии. Знали ли вы, что оператор + в вашем коде семантически богаче, чем многие слова в русском языке? Или что конструкция if not my_list — это не просто синтаксис, а настоящая идиома, которая отделяет «носителя языка» от «иностранца»? Задача настоящей работы — исследовать, как в строго детерминированной среде кода возникают сложнейшие семантико-прагматические явления, свойственные живому языку. 

Давайте забудем про имена и заглянем в самое сердце кода — в его грамматику и риторику. Пристегните ремни безопасности :-)

Читать далее

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

Рассуждение о Легаси

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

Сегодня хотелось бы поговорить с вами о такой теме как Легаси.

Давайте дадим определение, что такое легаси.

Легаси - это тот код, который писали до нас и который пришел нам от других.

Легаси - это не всегда «плохой» код, а просто код, который устарел по технологии, по структуре или по пониманию.

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

На своем опыте разработки я могу классифицировать легаси на три категории. Опять же я не претендую на абсолютную объективность. Это только моя классификация, на основе того, с чем лично я столкнулся.

1) Технологии, которые еще работают, но есть обновленные версии пакетов, фреймворков и инструментов. Просто в данный момент код работает на предыдущих версиях. Самый очевидный пример  проект написанный на Vue2, когда есть Vue3. Переписать его на новую версию с одной стороны не так уж и трудно. А с другой это связано с подводными камнями. Если мы переходим с Option Api на Composition Api то простой заменой одного кода на другой не обойтись. Некоторые вещи работают иначе. И придется отлавливать локальные проблемы. Если проект небольшой и сложной логики там мало, то это делается быстро. Если же она есть то проблемы точно будут. Кроме того не стоит забывать, что часть пакетов и библиотек, которые работают с Vue2, не работают с Vue3. Следовательно придется искать аналоги. В целом проблемы и способ перехода здесь прозрачны и это самый легкий вариант.

2) Нельзя переписать, но можно работать. Это проекты написанные на старых технологиях, как jquery и других. Они не могут быть быстро и легко переведены на современные инструменты. Так как для этого придется все писать заново. Однако код, который был написан, достаточно понятен и его не так сложно поддерживать. А переезд на новый вариант это параллельная разработка нового. Здесь тоже все понятно. Мы не имеем возможности бесшовно перейти на новые версии, потому что их просто может не быть. Поэтому приложение пишется с нуля на новом стеке. 

Читать далее

Как внедрить автоматическое ревью кода с помощью ИИ: опыт Microsoft, Google и ByteDance + практическое руководство

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

TL;DR

Автоматическое ревью кода с помощью ИИ уже работает в продакшене крупнейших компаний. Microsoft обрабатывает 600 000 пулл-реквестов в месяц, экономя сотни тысяч часов. ByteDance достигла 75% точности с 12 000 активных пользователей еженедельно. Google автоматизировал 7,5% всех комментариев ревьюеров. В статье — детальный разбор архитектур, метрики эффективности и пошаговое руководство по внедрению с расчётом окупаемости.

Читать далее

Знакомство с Bolt: подходит ли этот инструмент профессиональным разработчикам?

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

Дэвид Истман, разработчик ПО для Oracle Corp. и British Telecom, тестирует ИИ-инструмент для кодинга под названием Bolt. Совместно с ИИ-ассистентом он пробует разработать простенький проект блога, попутно рассуждая о сильных сторонах, ошибках и нюансах сервиса. Статья будет полезна новичкам и желающим приобщиться к вайб-кодингу работе с ИИ-помощниками.

Читать далее

Вы не знаете TDD

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

Кажется, про TDD давно всё известно: сперва тест — потом код — получаем покрытие. Но на деле его суть понимают неправильно — как критики, так и сторонники.

Эта статья — не инструкция и не религиозная проповедь. Это разбор заблуждений. Причём речь пойдёт не только о критиках TDD, но и о его сторонниках.

TDD часто воспринимают как способ добиться максимального покрытия или как дисциплину «писать тесты вперёд». Но настоящая цель — не в тестах, а в итеративном проектировании поведения и архитектуры.

Если вам кажется, что TDD — это занудно, медленно, не подходит к реальному коду или убивает гибкость — возможно, вы всё делали правильно.
Но с совершенно другими целями.
Именно поэтому вам не понравилось.

Разберёмся, что такое TDD на самом деле — и почему вы, скорее всего, не знаете TDD.

Читать далее

Девиртуализация в C++, компиляторах и вашей программе

Уровень сложностиСложный
Время на прочтение16 мин
Количество просмотров8.1K

Привет, Хабр! Меня зовут Илья Андреев, я старший программист в компании Syntacore. Вы, наверно, слышали, что виртуальные функции в C++ пользуются дурной славой — а может, и сами придерживаетесь о них не самого лучшего мнения. В этой статье, подготовленной совместно с Константином Владимировым, я в некоторой степени выступлю адвокатом виртуализации.

Мы начнем с вводной части о статическом и динамическом полиморфизме, рассмотрим факторы, влияющие на девиртуализацию, и ее примеры разной сложности — в том числе те, что мы используем в реальной разработке. А напоследок познакомим вас со спекулятивной девиртуализацией и дадим рекомендации, как подходить к виртуальным функциям в разработке на C++.

Читать далее

Революция вайб-кодинга отменяется

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

Не торопитесь пролистывать эту статью. Я не собираюсь, подобно множеству других статей на Хабре, рассказывать о плюсах или минусах вайб-кодинга и сравнивать это с плюсами и минусами традиционного программирования. Потому что сравнивать нечего, ведь не случилось ничего такого, что бы как-то значительно изменило ситуацию. По сути, я буду говорить о том же, о чём говорил в предыдущей статье ( https://habr.com/ru/articles/938028/ -Михаил Елисейкин «IT-лягушка и новая нормальность» ) - о том, что мир меняется, а наши о нём представления от этих изменений отстают.

Читать далее

Улучшаем JavaScript-код с помощью стрелочных функций

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

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

Привет! Меня зовут Александр Дудукало, я автор базового курса по JavaScript. В этой статье расскажу, как стрелочные функции помогают сокращать записи функций, делают код визуально чище и как использовать их без потери смысла. Также покажу, чем обычные функции проигрывают стрелочным и почему одно нельзя заменить другим.

Читать далее
1
23 ...

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