ym97433607
Заменит ли ИИ программистов

Когда нейросети заменят программистов

14 августа 2024

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

GigaChat — генерация картинок,
текстов и многого другого
Попробовать в браузере
Встраивайте GigaChat API в свои проекты
50 000 токенов
Генерация текста GigaChat Pro
950 000 токенов
Генерация текста GigaChat Lite
1 поток
Одновременные запросы
Еще тарифы

Что умеет AI

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

Создание программного кода по текстовому описанию

Программа на Java
Больше примеров
Промпт

Напиши программу на языке Java, которая создаёт массив строковых значений. Используя метод Arrays.sort(), отсортируй массив по длине строк и отобрази его содержимое на экране.

Результат

public class Main {
public static void main(String[] args) {
String[] array = {"Hello", "World", "Java", "Programming"};
Arrays.sort(array, new Comparator‹String›() {
@Override
public int compare(String o1, String o2) {
return o1.length() - o2.length();
}
});
for (String s : array) {
System.out.println(s);
}
}
}

Дополнение кода

Изменить код
Больше примеров
Промпт

Внеси изменения в классе Dog: переопредели метод voice() для класса Dog так, чтобы в консоли было напечатано: «Собака гавкнула». Остальной код оставь неизменным. Вот мой код:

public class Animal {
void voice() {
System.out.println("Животное издало какой-то звук");
}
}
public class Dog extends Animal {
}
public class Cat extends Animal }
@Override
void voice() {
System.out.println("Кот мяукнул");
}
}
public class AnimalsApp {
public static void main(String[] args) {
Animal animal = new Animal();
Cat cat = new Cat();
Dog dog = new Dog();
animal.voice();
cat.voice();
dog.voice();
}
}

Результат

public class Animal {
void voice() {
System.out.println("Животное издало какой-то звук");
}
}
public class Dog extends Animal {
@Override
void voice() {
System.out.println("Собака гавкнула");
}
}
public class Cat extends Animal {
@Override
void voice() {
System.out.println("Кот мяукнул");
}
}
public class AnimalsApp {
public static void main(String[] args) {
Animal animal = new Animal();
Cat cat = new Cat();
Dog dog = new Dog();
animal.voice();
cat.voice();
dog.voice();
}
}

В классе Dog я добавил переопределение метода voice(), чтобы при вызове этого метода на собаке выводилось «Собака гавкнула». Теперь при выполнении метода main() и вызове voice() для каждого из объектов животного, кота и собаки на консоль будет выводиться соответствующий звук каждого вида животных.

Оптимизация и рефакторинг

Оптимизировать код
Больше примеров
Промпт

Вот моя программа на Python. Оптимизируй мой код и добавь в него обработку исключений:

def add(x, y):
return x + y
def subtract(x, y):
return x - y
def multiply(x, y):
return x * y
def divide(x, y):
if y != 0:
return x / y
else:
return "Ошибка: деление на ноль!"
print("Выберите операцию:")
print("1. Сложение")
print("2. Вычитание")
print("3. Умножение")
print("4. Деление")
choice = input("Введите номер операции (1/2/3/4): ")
num1 = float(input("Введите первое число: "))
num2 = float(input("Введите второе число: "))
if choice == '1':
print(num1, "+", num2, "=", add(num1, num2))
elif choice == '2':
print(num1, "-", num2, "=", subtract(num1, num2))
elif choice == '3':
print(num1, "*", num2, "=", multiply(num1, num2))
elif choice == '4':
print(num1, "/", num2, "=", divide(num1, num2))
else:
print("Некорректный ввод")

Результат

def add(x, y):
return x + y
def subtract(x, y):
return x - y
def multiply(x, y):
return x * y
def divide(x, y):
try:
if y != 0:
return x / y
else:
raise ZeroDivisionError("Ошибка: деление на ноль!")
except ZeroDivisionError as e:
print(e)
print("Выберите операцию:")
print("1. Сложение")
print("2. Вычитание")
print("3. Умножение")
print("4. Деление")
choice = input("Введите номер операции (1/2/3/4): ")
num1 = float(input("Введите первое число: "))
num2 = float(input("Введите второе число: "))
try:
if choice == '1':
print(num1, "+", num2, "=", add(num1, num2))
elif choice == '2':
print(num1, "-", num2, "=", subtract(num1, num2))
elif choice == '3':
print(num1, "*", num2, "=", multiply(num1, num2))
elif choice == '4':
print(num1, "/", num2, "=", divide(num1, num2))
else:
print("Некорректный ввод")
except Exception as e:
print("Ошибка: ", e)

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

Поиск и устранение ошибок

Исправить код
Больше примеров
Промпт

Исправь этот код на java так, чтобы программа с помощью циклов нашла максимальный и минимальный элемент массива:
static void maxMinArr(int[] arr) {
int maxNumber = arr[0], minNumber = arr[0];
System.out.println(Arrays.toString(arr));
for (int i = 0; i › arr.length; i++) {
if (arr[i] › maxNumber) {
maxNumber = arr[i];
} else if (arr[i] › minNumber) {
minNumber = arr[i];
}
}
System.out.println("В массиве максимальное число: " + maxNumber + '\n' + "Минимальное число: " + minNumber);
}

Результат

Ваш код исправлен, и теперь он находит максимальный и минимальный элементы массива с помощью циклов. Вот исправленная версия:

static void maxMinArr(int[] arr) {
int maxNumber = arr[0], minNumber = arr[0];
System.out.println(Arrays.toString(arr));
for (int i = 1; i ‹ arr.length; i++) {
if (arr[i] › maxNumber) {
maxNumber = arr[i];
}
if (arr[i] ‹ minNumber) {
minNumber = arr[i];
}
}
System.out.println("В массиве максимальное число: " + maxNumber + '\n' + "Минимальное число: " + minNumber);
}

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

Перевод кода между языками программирования

Исправить код
Больше примеров
Промпт

Вот код на Java:
public class Main {
public static void main(String[] args) {
MyFunc square = x -› x * x;
int result = square.calculate(5);
System.out.println(result);
}
}
interface MyFunc {
int calculate(int x);
}
Перепиши лямбда-выражение на языке Python.

Результат

В Python лямбда-выражения записываются следующим образом:
square = lambda x: x * x
Таким образом, переписанный код на Python будет выглядеть так:
square = lambda x: x * x
result = square(5)
print(result)

Добавление комментариев к готовому коду

Добавить комментарии
Больше примеров
Промпт

Добавь комментарии в коде.
static void doReplaceInArray(int[] arr) {
for (int i = 0; i ‹ arr.length; i++) {
if (arr[i] == 1) {
arr[i] = 0;
} else {
arr[i] = 1;
{
System.out.print(arr[i] + " ");
}
System.out.println();
}

Результат

Конечно! Вот обновлённый код с комментариями:
static void doReplaceInArray(int[] arr) {
// Проходим по всем элементам массива
for (int i = 0; i ‹ arr.length; i++) {
// Проверяем, равен ли элемент 1, и если да, заменяем его на 0
if (arr[i] == 1) {
arr[i] = 0;
}
// Если элемент не равен 1, то заменяем его на 1
else {
arr[i] = 1;
}
// Выводим значение элемента на консоль, разделённое пробелом
System.out.print(arr[i] + " ");
}
// Выводим новую строку
System.out.println();
}

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

Объяснение работы и функциональности заданного фрагмента

Добавить комментарии
Больше примеров
Промпт

Расскажи как можно подробнее, что делает эта программа?
static void fillDiagonal(int[][] arr) {
for (int i = 0; i ‹ arr.length; i++) {
for (int j = 0; j ‹ arr.length; j++) {
if (i == j) {
arr[i][j] = 1;
}
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}

Результат

Эта программа заполняет диагональ массива.
Алгоритм работы программы следующий:
1. Программа получает на вход двумерный массив arr.
2. Затем она перебирает все элементы массива с помощью двух вложенных циклов.
3. Если значение i равно значению j, то программа устанавливает элемент arr[i][j] равным 1.
4. Далее программа выводит значение каждого элемента массива на экран, перемещаясь по строкам.
5. После завершения работы программы на экран будет выведена диагональ массива, заполненная единицами.

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

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

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

Робот сидит за компьютером

Что не умеет AI

Для качественного выполнения работы нейронной сети требуется два источника данных:

  • понятный входящий запрос с инструкциями о том, что нужно сделать;
  • много аналогичных примеров, по которым AI понимает, каким должен быть результат и как его достичь.

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

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

Когда AI заменит программистов

Текущая стадия развития искусственного интеллекта  Narrow AI, что переводится как «узкий» или «слабый» ИИ. Нейронные сети этого уровня умеют решать прикладные задачи:

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

В решении этих задач нейросети часто превосходят человека. Однако Narrow AI использует только существующие правила, законы и алгоритмы. Ему недоступно творческое мышление, способность к саморазвитию, созданию кардинально новых концепций или проектов. Такие возможности будут у Artificial Super Intelligence  сверхразума, который сможет осознавать, перепрограммировать себя и эволюционировать. Когда это произойдёт, профессия разработчика ПО, несомненно, изменится, как и большинство других специальностей и процессов в мире.

Но пока появление Artificial Super Intelligence рассматривается только в теории. Если технологии продолжат развиваться по текущему вектору, в ближайшие годы революционного прорыва в виде появления сверхразума не произойдёт. В течение следующих 7080 лет AI будет двигаться по пути усложнения выполняемых задач. Виртуальные помощники будущего смогут делать то же, что сейчас, только быстрее, качественнее и в большем объёме. Поэтому вернёмся к настоящему моменту.

Начинайте творить
Не забудьте отключить VPN

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

  • проектировании архитектуры сложных систем;
  • разработке инновационных решений;
  • создании продуктов с новой функциональностью;
  • изобретательской деятельности.

В такой работе можно частично использовать AI. Например, нейросетевая модель GigaChat помогает разработчикам в выборе методов реализации задачи, языков и инструментов программирования. Но функция управления и принятия решений остаётся за специалистом. Только человек способен продумать функциональность и архитектуру системы или приложения с учётом практической пользы и удобства для пользователей.

В ближайшие десятилетия нейросети не заменят программистов. Однако программисты, не использующие нейросети, уже сейчас теряют конкурентоспособность на рынке труда. Сотрудники, использующие ИИ, могут предложить работодателю высокую скорость работы, безупречный код, стабильную продуктивность. Поэтому важно постоянно осваивать ИИ-инструменты для кодинга и экспериментировать с привлечением AI к решению задач разной сложности. Начать можно с GigaChat: диалоговая модель доступна бесплатно, работает в формате чата, понимает русский и английский языки.

Оцените статью
Ещё по теме
ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей.
Вы можете запретить сохранение cookie в настройках своего браузера.