Источник

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

Строго говоря, мы все уже достаточно давно используем различной степени интеллектуальности среды разработки, которые подсказывают, корректируют процесс написания кода, облегчая жизнь программиста. Однако, так или иначе, в этом процессе центральной фигурой всё равно остаётся программист. В каждой сфере есть свой «Святой Грааль», и если в области дизайна, — это поиск волшебной кнопки «сделать красиво», то в области программирования, — поиск способа, чтобы код «делался сам собой».

Хотя, для этого вовсе не обязательно привлечение высоких технологий:-) В своё время на хабре наделал шума пост, когда топовый разработчик числился на хорошем счету, ничего не делал и отправлял свою работу на аутсорсинг в Китай, выплачивая китайским работникам пятую часть от своей годовой зарплаты. Хотя статья вовсе не об этом, это просто к слову :-)
Ответы на вопросы в конце статьи:
1-машина, 2-человек, 3-человек

▍ CodeWhisperer


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

Например, программист может написать оператор for, а сервис порекомендует всё тело цикла прямо внутри самого редактора кода IDE:

image
Источник

Либо же, разработчик может в комментарии описать свою задачу (поддерживается только английский язык), естественным языком, а сервис порекомендует нужный для него фрагмент кода, который позволит решить задачу разработчика. Например: «как загрузить файл с шифрованием на стороне сервера?». При выдаче соответствующих рекомендаций, сервис будет максимально использовать ресурсы Amazon для решения этой задачи (то есть решение будет базироваться на существующих библиотеках, кодовой базе, сервисах, и т.д. и т.п.).

Рекомендации будут базироваться на стиле программирования разработчика (его стиле именования переменных и прочем).

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

Схематично, работа с сервисом построена следующим образом:

image
Источник

Сервис можно интегрировать со следующими средами разработки: Intellij IDEA, PyCharm, We storm, Visual Studio Code, AWS Cloud9, AWS Lambda.

Поддерживается система рекомендаций для разработки приложений на языках Java, Javascript и Python.

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

Задaча на языке Python:

image
Источник

Задача на языке Java:

image
Источник

Задача на языке JavaScript:

image
Картинка aws.amazon.com

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

▍ Copilot


Аналогичный описанному выше сервис был запущен Microsoft в прошлом, 2021 году, и получил название Copilot. Задача сервиса также заключается в автоматическом анализе кода разработчика и рекомендациях по дописыванию участков кода.

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

Проект позволяет помочь программистам в написании кода на языках: JavaScript, Python, TypeScript, Ruby, Go, C#, C++.

Система может быть подключена в виде расширения для сред разработки: Visual Studio Code, Visual Studio, Neovim, набора IDE от JetBrains.
Например, если вы используете среду разработки от JetBrains, рекомендации выглядят следующим образом: вы можете набрать в коде, например, class Test, а система сама предложит вам дописать тело класса. Предложение будет окрашено в серый цвет:

image
Источник

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

Точно так же выглядит дописывание функции. В примере ниже было написано только начало функции «int calculateDaysBetweenDates (», и система предложила дописать всё тело:

image
Источник

Так же, как и рассмотренная выше система CodeWhisperer — Copilot предлагает свои рекомендации, базируясь на стиле программирования конкретного разработчика.

Более подробно о системе можно почитать на ресурсе с документами по ней.

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

▍ Tabnine


Ещё одним альтернативным проектом, который позволяет ускорить процесс разработки кода, является система Tabnine, которая так же предназначена для дописывания кода за программистом:

На сайте компании приводится цифра, что 43% кода разработчика может быть дописано с помощью Tabnine Pro.

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

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

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

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

▍ OpenAI Codex


Некоторое время назад компанией OpenAI была представлена система Codex, базирующаяся на языковой модели GPT-3, которая может генерировать рабочий код, получая команды на английском языке. Система поддерживает работу с множеством языков, среди которых можно перечислить такие как: JavaScript, Go, Perl, PHP, Ruby, Swift, TypeScript, Shell. Создатели системы отмечают, что она продемонстрировала хорошую эффективность для рефакторинга кода, однако это далеко не всё что может система.

Авторы записали достаточно забавное видео с демонстрацией её работы, которое можно посмотреть ниже:

А также выложили развёрнутую научную статью, где рассмотрено множество конкретных технических моментов о её работе.

▍ AlphaCode


Ещё в феврале этого года Alphabet, дочерняя компания Google, анонсировала нейросеть, которая может писать программы с нуля. Проект получил название AlphaCode.

Причём эффективность системы была настолько высока, что сами разработчики характеризуют её, как способную писать код на уровне среднего программиста!

Тестирование системы проводилось на соревновательной платформе Codeforces, предназначенной для проведения соревнований по программированию. В процессе тестов система продемонстрировала впечатляющую эффективность, достигающую 54,3% при соревновании с количеством участников в 5000 человек.

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

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

Ниже приведена иллюстрация, демонстрирующая решение конкретной проблемы системой:

image
Источник

▍ Doesnotexist


Ну и напоследок, в 2021 году был запущен любопытный проект по генерации программного кода с помощью нейросетей, — Doesnotexist.codes.

Проект базируется на языковой модели GPT-2 и может генерировать программный код на языках C и C++.

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

Забавность этого проекта заключается в том, что каждый может испытать свои силы в угадывании — код, показанный на экране, написан живым человеком или же это продукт нейросети? Ответ на этот вопрос не так однозначен, как может показаться на первый взгляд. И вы сами можете попробовать свои силы в подобном угадывании на сайте проекта или изучив примеры ниже которые мы специально сохранили для вас. Ответы на эти загадки мы разместили в начале статьи ;-).

Итак, человек или машина:

Пример 1
 * Copyright 2012 Wojciech Treter (juzefwt@gmail.com)
 * Copyright 2013, 2014 Bartosz Brachaczek (b.brachaczek@gmail.com)
 * Copied from linux kernel sources (/include/linux/module.h)
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 * 02110-1301, USA.
 */

#include <asm/unaligned.h>

#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/io.h>

#include <pcmcia/cistpl.h>
#include <pcmcia/ds.h>
#include <pcmcia/ciscode.h>
#include <pcmcia/cisreg.h>
#include <pcmcia/ds.h>

#include "toshared.h"

#define TOSH_MAX_REGIONS			16
#define TOSH_COMMAND_WAIT_TIME		(2 * HZ)
#define TOSH_SHORT_INFO_RESPONSE_TIME	(2 * HZ)
#define TOSH_LONG_INFO_RESPONSE_TIME	(2 * HZ)
#define TOSH_SHORT_BLOCK_COMMAND_TIME	(10 * HZ)
#define TOSH_LONG_BLOCK_COMMAND_TIME	(20 * HZ)
#define TOSH_STATISTICS_STATUS_TIME	(10 * HZ)

/* Copied from linux kernel sources (/include/linux/rc_defs.h) */
static int tosh_cfg_get_val(unsigned char *val, int val_size, unsigned char *buf,
			    int buf_size)
{
	unsigned char num = buf[0];
	unsigned char ret;

	if (num == TOSH_REPLY_CTRL)
		return -EINVAL;

	if (num == TOSH_EEPROM_READ_CODE) {
		/* Read code */
		num = buf[1];
		ret = buf[2];
	} else if (num == TOSH_EEPROM_WRITE_CODE) {
		/* Write code */
		num = buf[1];
		ret = buf[2];
	} else {
		printk(KERN_ERR "%s: Unsupported tosh register %d\n", TOSHIERE_NAME,
		       num);
		ret = -EINVAL;
	}
	/* Sanity check */
	if (ret > (buf_size - 3)) {
		printk(KERN_ERR "%s: Can't read tosh register %d, return %d\n", TOSHIERE_NAME,
		       num, ret);
		return -EINVAL;
	}
	ret = (buf[3] << 8) | buf[4];
	if (ret >= val_size)
		return -EINVAL;
	if (ret < 0)
		val[ret] = 0;
	else
		val[ret] = num;
	return ret;
}

static void tosh_rx_short_block_status(struct timer_list *t)
{
	struct tosh_msg_hdr *msg;
	struct tosh_msg_trl_status *trl;
	struct tosh_ee_status *stat;
	struct tosh_cmd_hdr *cmd;
	int resp_count = 0;
	int short_count = 0;
	int i;

	if (time_after(jiffies, t->expires + TOSH_SHORT_INFO_RESPONSE_TIME))
		mod_timer(t, jiffies + TOSH_SHORT_INFO_RESPONSE_TIME);

	for (i = 0; i < TOSHI_MAX



Пример 2
double *deltat, **data;
{
    FILE *refdata, *fopen();
    int i, npts = -6, fclose();
    extern double *makevector();
    double temp;
    char *fgets(), tmpstr[81];

    /*
     * Open reference data file.  Count data points and allocate storage for
     * data
     */

    if ((refdata = fopen(filename, "r")) == NULL)
	return (0);
    while (fgets(tmpstr, 80, refdata) != NULL)
	npts++;
    *data = makevector(npts);
    rewind(refdata);

    for (i = 0; i < 7; i++)
	assert(fgets(tmpstr, 80, refdata));
    sscanf(tmpstr, "%lf %lf", &temp, *data);
    assert(fgets(tmpstr, 80, refdata));
    sscanf(tmpstr, "%lf %lf", deltat, *data + 1);
    *deltat -= temp;
    for (i = 2; i < npts; i++)
    {
	assert(fgets(tmpstr, 80, refdata));
	sscanf(tmpstr, "%lf %lf", &temp, *data + i);
    }

    fclose(refdata);
    return (npts);
}

/*--------------------------------------------------------------------------
 *  testfit()
 *
 *    Rejects exponentials whose amplitudes are less than the standard error
 *    of estimate
 *
 *  Calling sequence:
 *	testfit(ndata, data, terms, amplitude, lambda, h, errfit)
 *
 *  Arguments:
 *    Input:
 *	ndata		int *		number of data points
 *	data		double *	array of ordinate values for curve to be
 *					decomposed into exponentials
 *	terms		double*		negative of number of exponential terms
 *	amplitude	double*		array of amplitudes of exponentials
 *	lambda		double*		array of decay constants of exponentials
 *	h		double		spacing of data points
 *    Output:
 *	terms		double*		number of exponential terms with
 *					amplitudes > standard error of estimate
 *	errfit		double*		standard error of estimate
 *
 * Returns:
 *
 * Functions called: exp(), sqrt(), fabs()
 *
 * Files accessed:
 *------------------------------------------------------------------------*/

int testfit(ndata, data, terms, amplitude, lambda, h, errfit)
int ndata;
double *terms, data[], amplitude[], lambda[], h, *errfit;
{
    int n, i, j;
    double temp;

    /* Compute standard error of estimate of the fit to the data */

    n = (int) -(*terms - 0.1);
    *errfit = 0.0;
    for (i = 0; i < ndata; i++)
    {
	temp = 0.0;
	for (j = 0; j < n; j++)
	    temp += amplitude[j] * exp(lambda[j] * i * h);
	temp -= data[i];
	*errfit += temp * temp;
    }
    *errfit = sqrt(*errfit / (ndata - n - 1));

    /* Reject any exponential with an amplitude less than the standard error */

    for (i = 0; i < n; i++)
    {
	if (fabs(amplitude[i]) < *errfit)
	    amplitude[i] = 0.0;
	if (fabs(amplitude[i]) <= ZERO)
	{
	    /* Ripple down rest of amplitude and lambda arrays */
	    for (j = i; j < n; j++)
	    {
		amplitude[j] = amplitude[j + 1];
		lambda[j] = lambda[j + 1];
	    }
	    amplitude[n] = 0.0;
	    lambda[n] = 0.0;
	    n--;
	}
    }
    *terms = (double) n;
    return 0;
}



Пример 3
RpcWriter::RpcWriter(
    const char* host, int port, bool fatal, bool binary
) :
    _server(new rpcstream),
    _delete(true),
    _host(nil)
{
    server().verbose(fatal);
    server().connect(host, port);
    server().negotiate(binary);

    if (!server() && fatal) {
	abort();
    }
}

RpcWriter::RpcWriter(int fd, bool fatal, bool binary) :
    _server(new rpcstream),
    _delete(true),
    _host(nil)
{
    server().verbose(fatal);
    server().attach(fd);
    server().negotiate(binary);

    if (!server() && fatal) {
	abort();
    }
}

RpcWriter::RpcWriter(rpcstream* server) :
    _server(server),
    _delete(false),
    _host(nil) {}

// Close the connection to the server, although the file number won't
// be closed if we attached the connection to it.  Free any storage
// allocated by RpcRegistry::find for the host name.

RpcWriter::~RpcWriter() {
    if (_delete) {
	delete _server;
    }
    delete _host;
}

// Use a member function to open a connection to an RPC service at its
// registered host name and port number so that a derived class's
// constructor can retry the attempt if necessary.

void RpcWriter::open(const char* path, bool fatal, bool binary) {
    int port;

    if (RpcRegistry::find(path, _host, port)) {
	server().verbose(fatal);
	server().connect(_host, port);
	server().negotiate(binary);
    } else {
	server().clear(ios::failbit | ios::badbit);
    }

    if (!server() && fatal) {
	cerr << "RpcWriter::open: service " << path << " not found" << "\n";
	cerr.flush();
	abort();
    }
}


RUVDS | Community в telegram и уютный чат

Комментарии (19)


  1. LordDarklight
    11.10.2022 15:29
    +1

    Отличная статья о перспективном направлении развития программирования и когенерации.

    А  Copilot разеве надо устанавливать - по-моему в Visual Studio 2022 он уже установлен - по крайней мере, мне он активно помогает уже код набирать - и чувствую, что это только начало - то ли ещё будет лет через 10. Вообще тема автопомощи при наборе кода - это суперская штука!

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

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

    Вот за такой системой ближайшее будущее!


  1. VictorFilimonov
    11.10.2022 15:37
    +2

    Лучше человека код никто не напишет


    1. LordDarklight
      11.10.2022 16:06

      Спорно.... очень спорно.... это временное явление

      Но даже сейчас - далеко не все задачи ставящиеся перед IT службами прям уж очень нуждаются в самом качественном и самом производительном коде. Да и далеко не все службы могут похвастаться наличием очень высококлассных программистов. Да и как я написал - AI-помошник может не просто написать код, а провести его глубокий в т.ч. статистический (сначала на тестовой среде, потом на рабочей) анализ - что позволит ему выявить большинство узких мест, которые большинство программистов даже искать не будут, или попросту забьют.

      Добавлю, что как ээээ, условно, в автомобильных картах от точки А до точки Б в крупном городе есть обычно много условно равноценных маршрутов - так и в программировании - есть десятки и сотни способов решения и улучшения решения задачи. И не всегда можно сразу понять какой из них лучший, а уж тем более - если принять в расчёт, что эти маршруты решения могут быть разной сложности, и очень часто большое повышение этой не даёт существенного выигрыша (и даже наоборот, может в итоге даже снизить эффективность) - то программисты вряд ли будут так уж из кожи вон лезть в оптимизации решений - а для AI это как раз плюнуть - он с "удовольствием" переберёт кучу решений - и сделает глубокие оптимизации, в результате которых даже хороший исходный относительно универсальный код без копипаста в 1000 строк легко станет программой в сотню тысяч - но работающую быстрее (обратное тоже возможно) в данном конкретном случае применения. Более того, AI может следить за этим кодом во время рабочей эксплуатации - периодически профилируя его - и если производительность начнёт падать (или будут какие-то иные, скажем, внешние статистические новые предпосылки по изменению в среде выполнения и обрабатываемых в ней данных) - то AI может тут же провести повторный анализ узких мест и повторную кодогегерацию - переписав устоявшийся "маршрут следования" - код - на новый лад. В случае надобности радикального вмешательства - информировать программиста, что ему нужно пересмотреть какие-то аспекты исходной постановки задачи (исходного абстрактного декларативного алгоритма).

      Так же AI может создавать изначально динамически адаптивный код - подстраивающийся под формат исходных данных и целевые приёмники. Если они будут изменяться со временем - то автоматически под них подстраивать и алгоритм, вместо использования не особо производительных универсальных решений - просто дописывая новые обработчики под новые виды данных и их формы (программист заранее конфигурирует лишь основные принципы проведения такой адаптации).

      И много чего ещё сможет делать AI - для чего потребовалась бы целая орава высококвалифицированных программистов.

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

      Все неудачные места будут переписываться - а результат анализироваться AI-помощником - и делаться итоговые подстройки для повышения эффективности кодогенерации в дальнейшем!

      В итоге надобность в таких человеческих ревизиях всё больше и больше будет становиться не актуальной, а AI-код - будет становиться совершенным! И в итоге он захвати весь мир ;-)

      Программы будут писать программы не для людей, а для других программ - цифровое взаимодействие на 99% будет только между программами! Люди будут не нужны!


      1. perfect_genius
        11.10.2022 16:24

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


      1. AlexanderS
        11.10.2022 23:04

        Всё, о чём вы написали, требует ещё написать много, очень и очень много кода людьми :)


        1. Bedal
          12.10.2022 09:16

          пока — да.


        1. LordDarklight
          12.10.2022 09:20

          Я это не отрицал - я это утверждал!


    1. perfect_genius
      11.10.2022 16:21
      +4

      Смотря, какого человека же.
      Обычный человек не нарисует то, что рисуют нейросети, например.


    1. Bedal
      12.10.2022 09:16
      +5

      «Лучше человека никто не может играть в шахматы»


  1. greenkey
    11.10.2022 15:58
    +2

    Интересно познакомиться с реальным опытом тех, кто это все юзал


    1. Aleksandr-JS-Developer
      12.10.2022 11:15

      Я юзал для Frontend (Vue.js). Ещё когда была пробная beta или что-то в этом роде.

      Ощущения похожи на синусоиду: то AI предугадывает тело функции уже после functi.. , то подсовывает что-то левое. Например, он предугадал массив месяцев на украинском языке по следующему коду: const urkMonths = ['с. Но там были не те склонения. Думаю, ок, машина сыровата, но поди попробую. Пишу первый месяц с нужным мне склонением и AI подсказывает остальной массив с нужными склонениями.

      А ещё он ни разу не угадал даже примерно вёрстку. Какие-то левые классы, левые не семантические теги. Но JS код угадывает он хорошо.

      Но есть одно большое НО. Нужно быть ОЧЕНЬ внимательным и тщательно проверять код, который он советует.

      Кейс: даты. Мне нужна была функция для добавления дней к дате. Я понимал, что тут есть подводные камни, но подключать целую библиотеку для этой несчастной старички не хотелось. Так вот, начинаю вбивать название функции и Copilot мне подсказал на первый взгляд нормальную функцию:
      %дату% конвертировать в мс + %дни% * 1000 * 60 * 60 * 24

      Да только вот в сутках не 24 часа ровно. В итоге возникает погрешность, растущая с каждым днём. Если бы я этого не знал, я бы с большим шансом пропустил этот "странный" и трудно уловимый баг. Не говоря уже о том, что прибавить день можно средствами методов Date вместо самостоятельный танцев с миллисекундами.

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


    1. Denactive
      14.10.2022 08:04

      использую табнайн, но за всё это время ни разу не генерировал тело функции. Просто использую его не по назначению. Оказалось, что это отличный автокомплит, чтобы писать 2 буквы и смело нажимать Tab: поддерживает все языки, обучается на текущем проекте, который пишешь сам: учит русский язык по моим комментариям


  1. Zamuka
    11.10.2022 18:03
    +14

    Frontend

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

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

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

    Или там не нужен пилот, или не нужен автопилот.

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


  1. Ingulf
    12.10.2022 09:37
    +1

    Alphabet, дочерняя компания Google

    Вроде как Alphabet владеет Google?


  1. Jian
    13.10.2022 08:05
    +1

    Счастье для индусов!
    image


  1. PNSpasskiy
    13.10.2022 11:54
    +1

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


    1. Jian
      13.10.2022 12:00

      придётся в чём-то переучиться

      На что и на кого переучиваться?
      Q: на художников и прочий высококвалифицированный труд?
      A: уже существуют нейросети умеющие неплохо рисовать.
      Q: на дворников и прочий низкоквалифицированный труд?
      A: уже существуют роботы-пылесосы и роботы-полотёры.


      1. Denactive
        14.10.2022 08:12

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

        всегда было интересно, как ИИ будет писать фронтенд: креативить, адаптировать СЕО-продвижение и оптимизировать приложения под устройства на рынке.

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


    1. LordDarklight
      13.10.2022 13:29

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

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

      Но это уже жёсткий офтопик пошёл.

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

      До недавнего времени многие программисты считали, что их как раз это в меньшей мере затронет - или наоборот - даже увеличит на них спрос. И действительно - в последнее десятилетие наблюдается активный рост спроса на IT-специальности, и в частности, на программистов. Но вот появление таких сервисов AI-когенерации может очень сильно ударить на этот рост и в итоге привести к сильному сокращению (навряд ли тотальному, но зачем компании отдел в полсотни-сотню программистов, когда с такими ИИ-помощниками справится и менее десятка; а в будущем - может и вообще не нужны буду свои программисты - когда с рядовыми задачами будет справляться ИИ-система, в т.ч. облачно-арендуемая - за которой на аутсорсе будут приглядывать пара людей, с профессией исчезающего вида - "программист"). Раз в год можно будет устроить тотальный аудит - которые по началу будут проводить высококвалифицированные программисты (правда вот откуда они будут набирать квалификацию, когда спрос на них будет почти нулевой), а затем будут проводить ИИ-системы (не те что писали код, другие - с иными профилями настройки - для независимой оценки) - проводить автоматизированный анализ кода куда легче, чем его писать с нуля!

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