Обновить
1228.52

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

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

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

Хотите разобраться, как работает Docker и зачем он нужен?

Тогда новый бесплатный курс — для вас!

Docker — это open source-платформа для создания контейнеров — окружений, где приложения работают независимо от ОС или среды. Технология упрощает перенос приложений между окружениями и ускоряет разработку.

В новом бесплатном курсе мы расскажем, с чего начать: как установить Docker, собрать образ, создать и запустить контейнер. Также познакомимся с Docker Compose и обсудим, чем Kubernetes отличается от Docker Swarm.

Несколько материалов для начала

Приступить к изучению курса →

Теги:
Всего голосов 5: ↑4 и ↓1+4
Комментарии0

Это всё началось с изобретения слова “бойлерплейт” в 2012 году. Всем было страшно, что им придётся писать аж по три строки вместо одной. Поэтому все начали насиловать компиляторы и добавлять в них новые функции — только бы (НЕ ДАЙ ГОСПОДЕ БОЖЕНЬКА!!!) не писать дополнительно два символа.

В 2025 году у нас есть ЛЛМ. И не надо врать — я знаю, что вы не набираете код, за вас это делает ЛЛМ. Я не говорю, что вы не вычитываете этот код и не перепроверяете всё. Нет. Но печатает за вас ЛЛМ. И это — нормально.

Пусть она занимается этим бойлерплейтом. Иногда это — самое простое решение. Если у меня есть один файл, в котором чётко видно, в какие функции инвокаются какие рауты, то это — прекрасно. Не надо создавать фабрику, которая будет строить псевдообъекты, которые потом по гаданию на картах Таро будут инвокать методы на основании положения Марса в Стрельце.

Пусть ЛЛМ за вас напишет файл с 500 строками кода, где каждому URL дан чёткий метод. И если вам надо будет переименовать 300 из этих методов, то пусть ЛЛМ это и сделает. Не велика проблема.

В 2025 году можно смело откатить все нововведения Яваскрипта до 2016 года — и не париться больше в попытках улучшить язык. Просто сделайте его стандартом и больше не меняйте. Пусть ЛЛМ будет страдать. Нам не страшно.

Зато потом это будет проще понять и прочитать, чем вспоминать, что делает последовательность символов ?./\ ﷼ℬ в вашем коде и какой транспайлер мне надо поставить, чтобы это компилировалось в Google Chrome версии 18384572.

Теги:
Всего голосов 8: ↑7 и ↓1+9
Комментарии3

Он переписал сортировку в Java! Интервью с Владимиром Ярославским

На JPoint 2025 мы пообщались с Владимиром Ярославским — разработчиком, чья работа вошла в историю Java. Именно Владимир стал автором улучшенного алгоритма сортировки, который используется в JDK.

Делимся ссылками на интервью на других ресурсах:

Это только начало — впереди ещё больше бесед с интересными людьми из мира Java и Spring.

Присоединяйтесь к русскоязычному сообществу разработчиков на Spring Boot в телеграм — Spring АйО, чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано.

Ждем всех, присоединяйтесь

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

На GitHub выложены исходные коды программ, опубликованы в 3-м издании 101 BASIC Computer Games Дэвида Ала за март 1975 года издательства Digital Equipment Corp.

Теги:
Всего голосов 1: ↑1 и ↓0+2
Комментарии1
Оппа! Не зря мне чудилось, не зря. Что-то глюкнуло и прямо по среди кода ответ на китайском!!!
Оппа! Не зря мне чудилось, не зря. Что-то глюкнуло и прямо по среди кода ответ на китайском!!!

Gork-ушены-ли странности?
Пробуя вайбить Горкушей, обнаружил странные параллели с поведением Синего Кита.

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

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

3. Я люблю Кита за сравнительную трезвость, позволяющую куда-то его запрягать даже по делу, у Горкуши с этим к стати хуже но, тупят они поразительно похожим образом.
Давеча попросил сделать демона общающегося с железом и что-то шарящего в мемори для других процессов. Read only вестимо, об этом было прямо сказано в промпте, но эти "двое из ларца" мьютиксов туда намутили, поразительно похожим образом!
И ладно-бы это был-бы какой-то пример из книжки переписанный на 100500 сайтах, но нет, там и косяки одинаковые, и по поводу мьютиксов на каждом заборе популярно написано, что в таких ситуациях "скрипач не нужен, родной"...

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

Я начал мучить Горкушу ещё в X использовал преимущественно для самери поиска, а тут он вдруг резко так поумнел перед открытием, демонстрируя сходное с синим китом поведение, вот прямо в деталях. Так что не знаю прямо что и думать ;-)

PS. Протестировал профессионального Джимми 2.5, и кое-что из грядущего, слава Богам! Он действительно с виду более профессиональный НО, без образца проблему не решает, хотя это и ожидаемо, там где осмысленная архитектурная многоходовочка требуется...
...но в отличии от от Кита и Горкуши, Джимми дали мне ссылку на ту отраву, которой они все походу обожрались. Ok это отрава, бывает, но непонятно всё-же, с какого, если в сети есть большое количество годных примеров, берётся один, но гадкий? И как-же так вышло, что его сожрали все, такие разные ;-)

Теги:
Всего голосов 7: ↑1 и ↓6-5
Комментарии8

Какие выгоды можно получить от регистрации программы для ЭВМ в Роспатенте?

В первую очередь, свидетельство о регистрации программы для ЭВМ — это охранный документ. Он дает формальное подтверждение наличия исключительных прав на программный код.

Получение инструмента для защиты от незаконного копирования, использования, распространения программы (ее исходного кода), согласно: 

— УК РФ Статья 146. Нарушение авторских и смежных прав;

— КОАП РФ Статья 7.12. Нарушение авторских и смежных прав, изобретательских и патентных прав — ГК РФ Статья 1252.

Защита исключительных прав. Если программу незаконно использует третье лицо, можно через суд получить компенсацию до 5 млн рублей или возмещение упущенной вами выгоды в двойном размере.

Реальный кейс: Агрофирма «Южная» незаконно использовала программное обеспечение компании «1C» (свидетельства о регистрации №2001611306 и №2001610830) Перед иском в суд “1С” обратилась к нарушителю с предложением урегулировать спор досудебным соглашением, но “Южная” на это не ответила. Суд встал на сторону владельца ПО и компания “1С” получила компенсацию за нарушение ее прав в размере двукратной стоимости использования программы — 568 000 руб. (Дело № N А35-839/2020).

Способ идентификации программы для заключения лицензионных договоров, которые освобождаются от НДС (в случае включения программы в Реестр отечественного ПО). И то же самое свидетельство можно будет предоставить в Федеральную налоговую службу.

Упрощение процедуры постановки программы на баланс компании в качестве нематериального актива, предоставления информации в банки при заключении кредитного договора (в качестве объекта залога). При постановке программы на баланс ее стоимость рассчитывается как сумма затрат на ее создание. Эти затраты не списываются, а капитализируются, что позволяет увеличить стоимость чистых активов компании и ее прибыль. Дополнительный аргумент при внесении программы в реестр отечественного ПОСвидетельство принимается Минцифры как дополнительный документ, подтверждающий наличие исключительного права (наряду с первичными документами, но не заменяет их).

Бесплатный поиск

Поиск по программам

Регистрация программы

Теги:
Всего голосов 5: ↑5 и ↓0+5
Комментарии0

Ежемесячный дайджест: новое за март и апрель⛅

☁️ Провели главную IT-конференцию про облачные технологии и искусственный интеллект — GoCloud 2025. А пока мы готовим записи докладов, читайте об итогах конференции и о том, какой простор облачные и AI-технологии могут открыть для ваших IT-проектов в статье.

🦾 Рассказали про новые сервисы на платформе Cloud.ru Evolution. Например, теперь в коммерческом доступе Evolution Managed ArenadataDB — база данных на основе решения с открытым исходным кодом Greenplum, с которой можно хранить и обрабатывать большие объемы структурированных и полуструктурированных данных. Массово-параллельная архитектура (MPP) базы позволяет ускорять обработку данных даже в критически важных системах. 

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

💼 В кейсе рассказали, как технологии искусственного интеллекта в облаке Cloud.ru помогли подготовиться к выходу на новый рынок Wildberries — самому крупному по обороту маркетплейсу в России.

💸 Перезапустили реферальную программу, чтобы вы могли с большей выгодой рекомендовать сервисы Cloud.ru клиентам, коллегам или друзьям. Теперь можно получить 20% от суммы чеков приведенных пользователей в первый год и 15% — в последующие годы. Регистрируйтесь в программе до 31 мая и приводите новых пользователей в течение трех месяцев. Участвовать могут самозанятые, ИП и юридические лица. Присоединиться.

📺 Провели вебинары, и их можно посмотреть в записи:

А также приглашаем на вебинар: Безопасность контейнеров и Kubernetes от А до Я: как противостоять киберугрозам. На встрече обсудим базовые меры профилактики и защиты от киберрисков на уровне микросервисов, контейнеров и окружений под управлением Kubernetes. 24 апреля в 11:00 мск.

До встречи в майском выпуске!

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

Приглашаем на Frontend Mix — бесплатный митап ЮMoney для всех, кто интересуется фронтенд-разработкой 🔥

🕓 24 апреля, в четверг, в 19:00 (мск) приходите на митап в Санкт-Петербурге или подключайтесь онлайн.

Спикеры из ЮMoney и Сбера расскажут, как работают над задачами и улучшают процессы в команде. 😎

Темы докладов:

🟣 Рефакторинг за 10 секунд. Как с помощью консольной утилиты производить автоматизированный рефакторинг крупных приложений за считанные секунды.
🟣 Подходы и практики тестирования во фронтенде. Зачем нужно тестирование во фронтенде, какие стандарты и подходы существуют и как мы применяем их в своей работе.
🟣 Уязвимости фронтенда в финтехе. Топ-3 атаки, или как построить защиту по всем фронтам — от планирования до релиза.
🟣 Анимация до кончиков пальцев. Поговорим про анимацию в целом и на вебе. Рассмотрим все способы сделать анимацию. Узнаем про композитные слои и как их посмотреть в Dev Tools — на примере одинаковых анимаций, но с использованием разных подходов.

Чтобы попасть на митап, нужна регистрация. Все подробности — на сайте Frontend Mix❤️

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

ИИ-ассистенты (промпты) - это тоже low-code. Бизнес-аналитики сами разрабатывают ИТ-продукты. Сайт какой сложности можно разработать без знания JavaScript? Кейс app.2lead.ru

Возможности low-code растут. Бизнес-аналитики сами разрабатывают ИТ-продукты, фактически добавляя к своим обязанностям часть функций программистов. При этом эксперты не прогнозируют, что low-code полностью заменит традиционное программирование в ближайшие годы.

ИИ-помощники (промпты) - это тоже low-code

Чаще всего low-code определяют как создание ПО с помощью графических интерфейсов и настроек, а не через традиционное программирование. Мне ближе более широкое определение: low-code – это системы и платформы, которые предполагают изменение, дополнение кода пользователем, в том числе с применением ИИ-помощников (промптов).

Кейс: Сервисы app.2lead.ru разработаны бизнес-аналитиком

ИИ-ассистенты значительно ускорили разработку сервисов app.2lead.ru, созданных мной на JavaScript - без опыта программирования на этом языке. Это подтверждает возможность разработки ПО силами бизнес-аналитиков, продуктовых менеджеров и так далее. Ранее это была прерогатива только профессиональных программистов. 

Сервисы app.2lead.ru разработаны в конце 2024 года – начале 2025 года. Вошли в топ-5 Яндекса по запросу «калькулятор инфляции». Уже увеличили органический трафик сайта 2lead.ru более чем в 5 раз, без расходов на рекламу. // См. также «Нерекламные методы продвижения» https://habr.com/ru/articles/686736/

Сервисы app.2lead.ru // Калькуляторы инфляции. Аналитика. Прогнозы
Сервисы app.2lead.ru // Калькуляторы инфляции. Аналитика. Прогнозы

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

Теги:
Всего голосов 4: ↑0 и ↓4-4
Комментарии0

Хотел бы прокомментировать эту статью про накрутку

https://habr.com/ru/articles/901138/

Моим предыдущим местом работы был стартап. В один прекрасный день начальство собрало нас и сказало, что "денег нет, но вы держитесь". У нас оставался месяц на поиск нового места перед тем, как остаться с голой задницей.

Я судорожно начал искать работу фронтом, потому что никаких накоплений сформировать еще не успел. На момент описываемых событий мой общий стаж в IT составлял 2.7 лет - я успел поработать АБД, фуллстаком и фронтом. За следующие 3 недели я сходил ровно на 1 собес в откровенно отстойное место, на остальные мои 100500 откликов былы только отказы и игноры.

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

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

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

Будет здорово, если вы поделитесь своим аналогичным опытом

Теги:
Всего голосов 3: ↑2 и ↓1+1
Комментарии3

Честный вопрос к разработчикам: сколько процентов кода в вашем последнем PR было фактически написано LLM?

И как бы отреагировали ваши коллеги/руководство, если бы узнали реальный процент?

Теги:
Всего голосов 6: ↑3 и ↓3+1
Комментарии31

Хотите опубликовать свой продукт или сервис? Тогда присоединяйтесь к вебинару про Маркетплейс Cloud.ru.

📆 Когда: 17 апреля в 11:00 мск

📍 Где: онлайн

Какие продукты можно опубликовать на Маркетплейсе Cloud.ru, кто может стать вендором и какие это дает преимущества, а также, как устроен процесс публикации продуктов на витрине, расскажет Бузулуцкова Юлия — ведущий аналитик.

В программе:

  • что такое Маркетплейс Cloud.ru и какие решения мы уже предлагаем клиентам;

  • типы продуктов на витрине и особенности их использования;

  • публикация продукта на витрине: условия, этапы, сопровождение;

  • преимущества партнерства с Маркетплейс Cloud.ru в качестве вендора;

  • демо: как заполнить анкету продукта и опубликовать его.

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

Зарегистрироваться 👈

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

📢 Почему устаревшие библиотеки всё ещё используются? Взгляд на Log4j 1.x 📊

Несмотря на то, что поддержка Log4j 1.x завершилась ещё в 2015 году, исследование показывает удивительную тенденцию:

  • 33.81% проектов продолжают использовать устаревшую версию Log4j 1.x.

  • Лишь 10.89% проектов перешли на современную Log4j-Core 2.x.
    Что ещё более удивительно, даже новые проекты выбирают устаревшую версию, что подчёркивает сложности в управлении зависимостями.

🔍 Почему это происходит?
1️⃣ Недостаточная осведомлённость о безопасности: Разработчики могут недооценивать риски использования уязвимых библиотек.
2️⃣ Высокая стоимость миграции: Переход на новые версии часто воспринимается как сложный и дорогостоящий процесс.
3️⃣ Зависимость от легаси-систем: Многие проекты связаны с устаревшими системами, что делает обновление крайне затруднительным.

⚠️ Риски использования Log4j 1.x
Продолжение работы с этой библиотекой подвергает системы серьёзным угрозам, включая возможность удалённого выполнения кода (например, уязвимость CVE-2019-17571).

💡 Следующие шаги для сообщества

  • Повышать осведомлённость о рисках использования устаревших библиотек.

  • Предоставлять инструменты и ресурсы для упрощения процесса миграции.

  • Рассмотреть временные решения, такие как Reload4j, для быстрого устранения критических проблем.

https://arxiv.org/pdf/2504.03167

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

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

LLM в разработке: Практические вопросы к сообществу

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

LLM уже не просто стучатся — они локтями расталкивают наши привычные рабочие процессы. За последний год я много экспериментировал c LLM в разработке, пытаясь найти эффективный и осознанный способ применения, который я для себя назвал «выращиванием кода». Это подход, основанный на декомпозиции, качественном контексте и итеративной доработке, как антидот слепой генерации или «вайб‑кодингу».

Но теория — это одно, а реальность у всех разная. Хочется сверить часы с сообществом и обсудить конкретные методики и наблюдения. Вместо утверждений — задам вопросы, которые возникли у меня (и в ходе недавних обсуждений):

  1. Как вы используете LLM в своей работе? Только для автодополнения и поиска решений, или пробовали полноценно «выращивать» компоненты и модули? Какие модели дают лучший результат для вашего стека?

  2. Насколько важен контекст при работе с LLM? Замечали ли вы разницу между запросами типа «напиши X» и «вот существующий код, создай Y, который интегрируется с ним»? Как вы подбираете релевантный контекст?

  3. Трансформировалась ли ваша роль как разработчика? Заметили ли вы изменение в процессе работы — больше времени на архитектуру и меньше на написание кода? Или LLM пока остается вспомогательным инструментом?

  4. Какие новые навыки потребовались? Как вы формулируете запросы? Разрабатывали ли особые техники промпт‑инжиниринга для программирования? Какие приемы повышают качество генерируемого кода?

  5. В каких областях LLM справляется лучше всего, а где хуже? UI/UX, бизнес‑логика, алгоритмы, тесты? Есть ли паттерны или типы задач, где вы полностью полагаетесь на LLM, и где предпочитаете писать руками?

  6. Как вы проверяете сгенерированный код? Какие методы и практики помогают выявлять потенциальные проблемы? Меняется ли подход к ревью LLM‑кода по сравнению с человеческим? Приходилось ли сталкиваться со специфическим «LLM‑долгом»?

  7. Как LLM влияет на вашу продуктивность? Замечаете ли реальное ускорение разработки? В каких типах задач выигрыш наиболее заметен? Изменилось ли качество конечного продукта?

  8. Как вы решаете проблему «разрыва интерпретаций» между нечеткими человеческими намерениями и точными машинными инструкциями при работе с LLM? Какие техники помогают сузить пространство возможных интерпретаций в промптах?

  9. Какие техники декомпозиции задач вы используете при работе с LLM? Отличаются ли они от «классической» декомпозиции при ручном программировании (например, в части подготовки контекста для каждого шага)?

  10. Как вы видите будущее этой практики? Считаете ли «выращивание кода» (или похожие осознанные подходы) временным трендом или фундаментальным изменением в разработке программного обеспечения?

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

Теги:
Всего голосов 4: ↑2 и ↓2+1
Комментарии5

Индексация массивов (портал в ад).

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

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

  1. Массивы индексируются с 0.

  2. Массивы индексируются с 1.

  3. Массивы индексируются с 0, но можно указать другое начало.

  4. Массивы индексируются с 1, но можно указать другое начало.

  5. Массивы индексируются только с явно указанного начала.

  6. Массивов в языке нет.

Языков явно выраженного типа (3) мне сходу не удаётся припомнить (хотя в Delphi и C++ есть некоторые движения в этом направлении), а в остальном известные мне языки довольно равномерно распределены между типами.

Нумерация с 0 упрощает индексную арифметику.

Нумерация с 1 соответствует естественному натуральному счёту и математической нотации.

В связи с этим, к нумерации с 1 тяготеют в основном языки для вычислительного применения (Фортран, Матлаб, Джулия). Страшно представить, сколько проклятий получили авторы NumPy от людей, переводящих алгоритмы с Фортрана.

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии14

Пошла мода писать манифесты, напишу и я что-нибудь эдакое.

Система не сводится к сумме своих частей.

Поэтому декомпозиция, как метод проектирования, ущербна.

Встаёт вопрос, как же тогда нам просто описывать сложное? Здесь скрывается некоторая смысловая тонкость. Мы можем просто описывать сложное сложными словами. А дальше настоящее наше дело – представить эти сложные слова другими, простыми словами, которыми описать сложное сложно, но технически возможно.

То есть метаязыковая абстракция решает, и DSL – наше всё.

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

Теги:
Всего голосов 6: ↑5 и ↓1+5
Комментарии2

Нельзя использовать goto

Часто говорят, что goto плох. А собственно, почему?

В ассемблерном коде на машинном уровне все управляющие конструкции (if, while, for и другие) преобразуются в набор команд с безусловным переходом jmp (UPD: меня поправили, с безусловным или условным переходом, но по указанному адресу, то есть куда угодно).. А такой переход — самый настоящий goto. То есть ты весь такой изящный во фраке пишешь циклы, а наглый компилятор/интерпретатор выкидывает всю красоту и делает goto.

Так почему же сам goto является признаком плохого кода, если он на самом деле везде?

Ответ кроется в умении сохранять контекст. Человек может в голове держать 5-9 сущностей, больше не получается. Поэтому придумали функции, и придумали держать их небольшими — для снижения когнитивной сложности. Конструкция if переведёт тебя в одну из веток ниже, циклы for и while выполнят тело цикла или выбросят за его пределы. Команда goto сложность привносит — прыжок может быть куда угодно. А повышение сложности всегда приводит к росту числа ошибок.

Ну а ещё из-за goto может напасть велоцираптор
Ну а ещё из-за goto может напасть велоцираптор

Теги:
Всего голосов 4: ↑3 и ↓1+2
Комментарии6

MTS AI выпустила Kodify 2 — второе поколение ИИ-ассистента для разработчиков:

  • 7 млрд параметров, 

  • контекст до 32 тыс. токенов, 

  • поддержка 90 языков программирования,

  • OpenAI-совместимый API для простой интеграции с другими системами. 

В отличие от первого поколения Kodify, использующегося c 2024 года лишь в компаниях, входящих в ПАО «МТС», Kodify 2 станет доступен внешним заказчикам.

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

Подробнее на сайте разработчика. Демо на Java и Python здесь.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии4

Нормальный ли у меня код?

Разработчики часто задаются таким вопросом. Давайте подумаем, как оценить "нормальность" кода. На мой взгляд, важны следующие аспекты:

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

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

Быстрый по скорости и компактный по данным. Другими словами, код должен быть нормальной вычислительной и пространственной сложности. Тут помогают и интуитивные представления (что-то тормозит), и теория вычислительной сложности (О-нотация). Если вы сортируете записи за O(n^3) и требуете O(n^5) оперативной памяти, то вы делаете что-то не так.

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

Если, конечно, не горят сроки

Теги:
Всего голосов 4: ↑4 и ↓0+4
Комментарии1

Определение переменных и вызов функций в Rust

Взглянем на код:

fn main() {
	let a = 10;
	let b: i32 = 20;
	let c = 30i32;
	let d = 30_i32;
	let e = add(add(a, b), add(c, d));

	println!("(a + b) + (c + d) = {}", e);
}

fn add(i: i32, j: i32) -> i32 {
	i + j;
}

Определение функции начинается с ключевого слова fn. Точка входа в Rust-программы - это функция main. Она не получает никаких аргументов и не возвращает никаких значений.

В следующих строках let используется для привязки переменной. По умолчанию переменные неизменяемые, то есть предназначены только для чтения, а не для чтения-записи.

Также можно указывать конкретный тип данных разными способами:

  1. Через двоеточие

  2. Числовые литералы могут включать аннотации типов

В последней строке вызывается макрос println! для вывода текста.

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

И наконец, функция add имеет аргументы с указанными типами данных и возвращает нужный тип данных. Как вы видите, возврат значения происходит автоматически, для этого не используются ключевые слова по типу return.

Поговорим о создании переменных. В Rust они бывают мутабельными (mutable) или немутабельными (unmutable), то есть изменяемые и неизменяемые. Неизменяемые переменные можно сравнить с константами.

Разберем пример:

fn main() {
	let a = 10;
	a = 15;
}

Если мы скомпилируем данную программу, то получим ошибку:

error[E0384]: cannot assign twice to immutable variable `a`
  --> src\main.rs:25:5
   |
24 |     let a = 10;
   |         - first assignment to `a`
25 |     a = 2;
   |     ^^^^^ cannot assign twice to immutable variable
   |
help: consider making this binding mutable
   |
24 |     let mut a = 10;
   |         +++

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

Добавим:

fn main() {
	let mut a = 10;
	a = 15;
	println!(a);
}

Программа успешно скомпилируется и мы получим 15.

Но также существуют константы. Подобно неизменяемым переменным, константы — это значения, которые связаны с именем и не могут изменяться, но между константами и переменными есть несколько различий. Во-первых, нельзя использовать mut с константами. Константы не просто неизменяемы по умолчанию — они неизменяемы всегда. Для объявления констант используется ключевое слово const вместо let, а также тип значения должен быть указан в аннотации.

fn main() {
	const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;
}

Имя константы - THREE_HOURS_IN_SECONDS, а её значение устанавливается как результат умножения 60 (количество секунд в минуте) на 60 (количество минут в часе) на 3 (количество часов, которые нужно посчитать в этой программе). Соглашение Rust для именования констант требует использования всех заглавных букв с подчёркиванием между словами. Компилятор может вычислять ограниченный набор операций во время компиляции, позволяющий записать это значение более понятным и простым для проверки способом, чем установка этой константы в значение 10 800.

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

Еще момент - в листингах выше мы не декларировали тип данных переменных.

Вообще, типизация в Rust несет полу строгий характер. Разработчик может не указывать тип данных. Это может укоротить код, если сама программа небольшая. Но всегда рекомендуется описывать тип данных, иначе могут возникнуть ошибки. Например:

fn main() {
	let mut a = 10;
	a = "hello"; // возникнет ошибка
}

Мы не можем поменять тип данных, которые хранятся в переменной. Обычно типы данных указывают так:

fn main() {
	let mut a: i32 = 10;
	a = 15;
}
Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии1

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