Почему сейчас стажеры и джуны знают больше, но пишут код гораздо хуже, чем раньше. Java.. Java. Kotlin.. Java. Kotlin. влияние ии.. Java. Kotlin. влияние ии. влияние ии на разработку.. Java. Kotlin. влияние ии. влияние ии на разработку. ИИ.. Java. Kotlin. влияние ии. влияние ии на разработку. ИИ. ии-ассистент.. Java. Kotlin. влияние ии. влияние ии на разработку. ИИ. ии-ассистент. искусственный интеллект.. Java. Kotlin. влияние ии. влияние ии на разработку. ИИ. ии-ассистент. искусственный интеллект. карьера.. Java. Kotlin. влияние ии. влияние ии на разработку. ИИ. ии-ассистент. искусственный интеллект. карьера. карьера в it.. Java. Kotlin. влияние ии. влияние ии на разработку. ИИ. ии-ассистент. искусственный интеллект. карьера. карьера в it. Карьера в IT-индустрии.. Java. Kotlin. влияние ии. влияние ии на разработку. ИИ. ии-ассистент. искусственный интеллект. карьера. карьера в it. Карьера в IT-индустрии. карьера программиста.. Java. Kotlin. влияние ии. влияние ии на разработку. ИИ. ии-ассистент. искусственный интеллект. карьера. карьера в it. Карьера в IT-индустрии. карьера программиста. Эдвард Де Боно. Серьёзное творческое мышление. Применение творческого мышления. Обучение.

Всем привет, меня зовут Михаил, я работаю senior Java/Kotlin разработчиком в ОТП Банке. В свободное от работы время я занимаюсь менторством. Ко мне приходят разные люди: кто-то уже работает на проекте, кто-то только учится.

Сейчас, в эпоху ИИ, найти информацию стало куда легче, чем раньше. Раньше ты гуглил и тыкал по ссылкам, а теперь все в одном приложении. Да еще и код можно не писать – ну красота же. Но что, если ты и до этого не умел писать код и решил “вкатываться в айтишку” (ненавижу эту фразу)?

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

Я написал небольшую задачу и попросил решить ее людей разного уровня – от стажера до сеньора. Кому-то разрешил пользоваться нейросетью, кому-то запретил.

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

Почему сейчас стажеры и джуны знают больше, но пишут код гораздо хуже, чем раньше - 1

!!!ДИСКЛЕЙМЕР!!!

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

Суть проблемы

Раньше, когда информация не лежала в одном месте, а код нейросеть не писала под твой проект, приходилось делать все руками. Ты гуглил, открывал 10 вкладок, читал статьи на Stack Overflow, смотрел примеры и думал: “А как это применить к моей задаче?” Иногда часами сидел над одним методом. Писал, переписывал, падал, вставал и снова писал.

Это было больно. Но это набивало опыт.

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

Сейчас все по-другому.

Перед разработчиком стоит искушение: скормить задачу нейросети и через 30 секунд получить готовый код. Красота же. И многие поддаются. Особенно те, кто только учится. Зачем думать, если можно просто скопировать? Зачем ошибаться, если нейросеть выдаст правильный вариант?

И люди обленились. Честно. Они перестали набивать шишки. Они перестали думать. Они разучились читать чужой код, потому что нейросеть написала свой. Они не знают, почему их код работает – просто потому что “нейросеть сказала, что так правильно”.

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

Почему сейчас стажеры и джуны знают больше, но пишут код гораздо хуже, чем раньше - 2

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

Именно об этом моя статья.

Задача и подопытные

Задача достаточно простая:

Задача
class NotificationRequest {
    private String requestId;
    private NotificationType type;
    private String recipient;
    private String message;
}
 
enum NotificationType {
    EMAIL,
    SMS,
    PUSH
}

Реализовать программу, которая:

1. Принимает список запросов и обрабатывает данные по одному

2. Не отправляет дубликаты

Дубликатом считается запись с одинаковым requestId.То есть если запрос уже обрабатывался – повторно не отправляем.

3.Регистрация считается невалидной если:

requestId == null
recipient == null
message == null

Email невалидный если:
не содержит “@”

SMS невалидный если :
номер телефона не содержит “+” и не содержит ровно 11 символов после плюса.

PUSH невалидный если:
Сообщение пустое

4. Эмулирует отправку(просто вывод в лог информации)
Создать сервис:

NotificationService

Метод:

void send(NotificationRequest request)

Sending EMAIL to user1@mail.com
Sending SMS to +79990001122
Sending PUSH to device-123

После обработки вывести:

Processed: 3
Duplicates skipped: 2
Failed: 0

ВАЖНО! Используем только Java, ничего больше!

В качестве подопытных будут следующие лица:

Кто

Пользование нейросетью

Нейросеть (DeepSeek и ChatGPT, их самые доступные версии)

Да

Стажер

Да

Стажер

Нет

Мидл, который больше не пишет код сам (вайбкодер)

Да

Сеньор

Как захочет (почему так, узнаем позже)

Для нейросети я взял самые доступные – deepseek и chatgpt их самые доступные версии.

Нейросеть

Я сказал просто: «Реши задачу». Без сложного промта, получил следующее решение –

Решение нейросети
class NotificationService {
    private Set<String> processedIds = new HashSet<>();
    private int processedCount = 0;
    private int duplicatesSkipped = 0;
    private int failedCount = 0;

    public void send(NotificationRequest request) {
        if (processedIds.contains(request.getRequestId())) {
            duplicatesSkipped++;
            return;
        }

        if (!isValidRegistration(request)) {
            failedCount++;
            return;
        }

        if (!isValidByType(request)) {
            failedCount++;
            return;
        }

        emulateSending(request);
        processedIds.add(request.getRequestId());
        processedCount++;
    }

    private boolean isValidRegistration(NotificationRequest request) {
        return request.getRequestId() != null 
            && request.getRecipient() != null 
            && request.getMessage() != null;
    }

    private boolean isValidByType(NotificationRequest request) {
        switch (request.getType()) {
            case EMAIL:
                return request.getRecipient().contains("@");
            case SMS:
                String phone = request.getRecipient();
                return phone.startsWith("+") && phone.length() == 12;
            case PUSH:
                return !request.getMessage().trim().isEmpty();
            default:
                return false;
        }
    }

    private void emulateSending(NotificationRequest request) {
        switch (request.getType()) {
            case EMAIL:
                System.out.println("Sending EMAIL to " + request.getRecipient());
                break;
            case SMS:
                System.out.println("Sending SMS to " + request.getRecipient());
                break;
            case PUSH:
                System.out.println("Sending PUSH to " + request.getRecipient());
                break;
        }
    }

    public void printStatistics() {
        System.out.println("nProcessed: " + processedCount);
        System.out.println("Duplicates skipped: " + duplicatesSkipped);
        System.out.println("Failed: " + failedCount);
    }
}

Видим следующие решение – оно в лоб, ничего сложного, нет абстракций, паттернов или чего-то еще Видим следующие решение – оно в лоб, ничего сложного, нет абстракций, паттернов или чего-то еще

Оно в лоб. Ничего сложного. Нет абстракций, паттернов или чего-то еще. Оно работает, но нет гибкости. Нет архитектуры. Просто код, который делает то, что просили, и не более.

Дальше я не буду вставлять код каждого решения. Считаем, что этот код – основа, которую мы будем совершенствовать.

Стажер, который решал задачу с чатом.

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

Стажер, который решает задачу сам.

Здесь для меня было удивление. Решение заняло куда больше времени, чем я ожидал. У стажера без ИИ ушло в районе 2-3 часов на решение.

И знаете что? Я горжусь его решением.

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

  • Фабрика – для создания объектов NotificationService.

  • Синглтон – для создания одного экземпляра на каждый тип.

  • Фабричный метод – так как логика везде одинаковая, была сделана абстракция с одним абстрактным методом validate.

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

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

Да мы получили решение куда дольше, но зато его можно легко поддерживать!

Мидл – вайбкодер

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

Есть NotificationService, который занимается отправкой и проверкой дубликатов. Есть отдельный ValidationService, который содержит методы smsValidation, pushValidation, emailValidation.

Оно лучше, чем у нейросети. Но не идеальное.

Что хорошо: есть разделение ответственности. NotificationService занимается отправкой, ValidationService – валидацией. Не все в одной куче. Есть разделение на подметоды в основном коде.

Что плохо: нет гибкости. Чтобы добавить новый тип уведомления (например Telegram), придется лезть в класс ValidationService и добавлять новый метод. И в NotificationService тоже. Нет абстракции, нет паттернов, нет расширяемости.

Это среднее решение. Оно работает. Но развивать его страшно.

Хотя при использовании ИИ и просмотра его кода качество было всегда куда лучше.

Сеньор

Почему я написал в таблице загадку – “Как захочет (почему так, узнаем позже)”?

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

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

На все про все у сеньора ушло 30-40 минут. Из них непосредственно ревью кода нейросети с правками заняло около 10 минут. Понадобилось 3 итерации правок. Все замечания были в основном архитектурные: добавление гибкости, расширение логирования.

Итоги конкурса

Давайте подведем небольшой итог в виде таблицы

Участник

Время

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

Моя личная оценка решения(очень субъективно)

Нейросеть

30 сек

Примитив, нет гибкости

3/10 Работает – и ладно. Но развивать страшно.

Стажер с чатом

5 минут

Тупая копипаста

1/10 Даже не пытался что-то исправить

Стажер без чата

2-3 часа

Паттерны, гибкость, абстракция

8/10 Для стажера отличная оценка, он проделал хорошую работу и показал самостоятельность. Горжусь!!

Мидл вайбкодер

1-2 часа

Разделение ответственности, но нет гибкости и расширяемости

5/10 Оно лучше, чем у нейросети, но есть свои проблемы.

Сеньор без нейросети

30-40 минут

Присутствует архитектура, разбиение на пакеты, логирование, константы, гибкий код.

9/10 Код лаконичный, просто, гибкий, читаемый.

10 не ставлю – всегда есть куда стремиться

Сеньор с нейросетью

10 минут

Все преимущества, что и без нейросетей

9/10 Все преимущества, что и без нейросетей

Итог

Нейросеть – это ускоритель. Он дает вам 5x к уму и скорости. Ваши знания, ваш опыт, ваше умение мыслить – это база. А нейросеть умножает эту базу.

Формула простая:

Ваш уровень * 5x = результат

Если ваш уровень – 0, то извините. 0 умножить на 5 равно 0. Профита вы не получите.

Если ваш уровень – 1 (вы новичок, который хочет разобраться), то 1 * 5 = 5. Уже что-то.

Если ваш уровень – 2 (вы уверенный джун), то 2 * 5 = 10. Вы уже далеко впереди.

А если ваш уровень – 10 (вы сеньор с горящими глазами), то 10 * 5 = 50. Вы бог.

Нейросеть не делает вас умнее. Она делает вас быстрее. Но если нечего ускорять – пользы особо не будет.

Проблема начинающих в том, что они пытаются заменить свой 0 на нейросеть. Но нейросеть не заменяет базу. Она умножает ее.

Так что сначала наберите свой уровень. Пишите код руками. Ошибайтесь. Ищите сами. А потом подключайте ускоритель.

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

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

А если вы пользуетесь нейросетью для помощи в нужные моменты или делегируете на нее рутину – велком в мой лагерь. Именно так я и пользуюсь нейросетью. Не так, что скармливаю все ТЗ и жду, откинувшись на стуле. Нет, я люблю писать код. Но писать DTO или миграции на создание таблиц я уже давно устал – пусть это сделает помощник. А что-то посложнее оставит мне!

Пользуйтесь нейросетями с умом. Всем спасибо!

Автор: MishaBucha

Источник