В этой статье мы оцениваем перспективы профессии IT-разработчика с учётом стремительного развития технологий искусственного интеллекта. Чтобы понять, как изменится работа программистов в ближайшем будущем, разберём, какие задачи способен полностью взять на себя ИИ, а какие процессы всегда будут требовать участия человека.
Уже сейчас нейросети умеют выполнять большой набор задач. Рассмотрим их и проверим, как с ними справляется нейросетевая модель от Сбера GigaChat.
Напиши программу на языке 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-технологии проигрывают человеку.
Ещё один важный аспект — отсутствие гарантий. Допустим, робот пишет программную библиотеку, в которой допускает ошибку. Разработчик использует библиотеку в своём приложении, что впоследствии приводит к утечке персональных данных пользователей. Возникает проблема с распределением ответственности: неясно, кто отвечает за безопасность и работоспособность конечного продукта.
Текущая стадия развития искусственного интеллекта — Narrow AI, что переводится как «узкий» или «слабый» ИИ. Нейронные сети этого уровня умеют решать прикладные задачи:
В решении этих задач нейросети часто превосходят человека. Однако Narrow AI использует только существующие правила, законы и алгоритмы. Ему недоступно творческое мышление, способность к саморазвитию, созданию кардинально новых концепций или проектов. Такие возможности будут у Artificial Super Intelligence — сверхразума, который сможет осознавать, перепрограммировать себя и эволюционировать. Когда это произойдёт, профессия разработчика ПО, несомненно, изменится, как и большинство других специальностей и процессов в мире.
Но пока появление Artificial Super Intelligence рассматривается только в теории. Если технологии продолжат развиваться по текущему вектору, в ближайшие годы революционного прорыва в виде появления сверхразума не произойдёт. В течение следующих 70–80 лет AI будет двигаться по пути усложнения выполняемых задач. Виртуальные помощники будущего смогут делать то же, что сейчас, только быстрее, качественнее и в большем объёме. Поэтому вернёмся к настоящему моменту.
Уже сегодня человек может делегировать нейросетям текучку: кодогенерацию, составление технической документации. Это позволяет IT-специалистам сосредоточиться на нестандартных задачах, например:
В такой работе можно частично использовать AI. Например, нейросетевая модель GigaChat помогает разработчикам в выборе методов реализации задачи, языков и инструментов программирования. Но функция управления и принятия решений остаётся за специалистом. Только человек способен продумать функциональность и архитектуру системы или приложения с учётом практической пользы и удобства для пользователей.
В ближайшие десятилетия нейросети не заменят программистов. Однако программисты, не использующие нейросети, уже сейчас теряют конкурентоспособность на рынке труда. Сотрудники, использующие ИИ, могут предложить работодателю высокую скорость работы, безупречный код, стабильную продуктивность. Поэтому важно постоянно осваивать ИИ-инструменты для кодинга и экспериментировать с привлечением AI к решению задач разной сложности. Начать можно с GigaChat: диалоговая модель доступна бесплатно, работает в формате чата, понимает русский и английский языки.