Blog

  • Why isn’t a neural network a good solution for code and algorithm analysis?

    Russian version below.

    Modern neural networks aren’t about intelligence and innovation, but about finding matches from existing knowledge. Using them to generate new algorithms that the world doesn’t yet know about isn’t a good idea. In any case, it would be a compilation of existing versions, and there are, of course, no guarantees that these algorithms will work.

    A neural network as a coding assistant is a great idea for typical, routine tasks: writing a large number of getters and setters, writing numerous obvious unit tests, and formatting code according to requirements. I can’t say I often use them for such tasks, but it does happen sometimes.

    However, using neural networks to find errors in algorithms is a pretty bad idea, and here’s why. If the algorithms are new, developed for a highly specialized task and have no analogues, then you risk leaking your code and intellectual property. Ultimately, all of this will likely be available to all users, and the neural network itself is unlikely to help you achieve acceptable results. There have been plenty of examples of this in the news in recent years. If the algorithms are classical, a neural network can certainly find and fix an error, but what value will it have? Based on the experience of students, I can confidently conclude that the constant use of neural networks for developing and finding bugs in classical algorithms significantly reduces cognitive abilities: finding bugs, maintaining legacy code, and writing your own algorithms becomes increasingly difficult.

    The basic rules should be as follows.

    1. No neural networks for analyzing new algorithms or new unique code.
    2. No neural networks for programming that compromises your abilities: use them only for routine operations and information retrieval.
    3. Trust, but verify.

    And Russian version.

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

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

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

    Основные правила должны быть такими.

    1. Никаких нейросетей для анализа новых алгоритмов и нового уникального кода.
    2. Никаких нейросетей для программирования в ущерб своим способностям: используем только для рутинных операций и поиска информации.
    3. Доверяй, но проверяй.