Programming
November 14, 2021

Одна неделя с Copilot

Во первых хочу отдельно заценить данную платформу для блогинга - teletype.in.

Давно уже всем надо перейти к блочному типу редактирования текста. Раньше были rich text editors, но они скорее всего останутся в прошлом.

А теперь поделюсь своим опытом работой с Copilot.

Нет, оно не заменит программистов. Как можно понять из названия, это утилита, которые работает с программистами.

Сравнение с Garbage Collector-ом.

Большинство современных языков программирования пользуются Garbage Collector-ом, то есть "сборщиком мусора". Если в двух словах этот сборщик занимается тем, что удаляет ненужные объекты и данные которые программист оставляет после себя при решений своих задач.

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

Но все оказалось не так просто. Теперь надо понять как работает этот Garbage Collector, как правильно им пользоваться. Чем больше мусора за собой оставляешь, тем тяжелее будет его работа. Но нам данные так и так нужны, что тогда поделать? Тогда надо распределять их так чтобы Garbage Collector не сильно нагружался. В общем, решения одной проблемы за собой навлек новую проблему. За то теперь у нас есть выбор. Мы можем либо писать на C++ и научиться как убираться за собой в ручную, или писать на таких языках программирования как C#, Java, JavaScript, Python, Ruby и т.д. и научиться как пользоваться сборщиком мусора, который за нас почистить наши данные.

С Copilot тоже самое. Да, какие то задачи она решает, но сначала надо научиться им пользоваться.

Чем же мне так понравился Copilot?

  • Она за меня делает часть рутинной работы. Да, не логической, а рутинной. Возможно на Youtube каналах вы часто увидите как она имплементирует какие то алгоритмы, это есть, но это не так часто пригодиться. Copilot в первую очередь - это рутинный работник.
  • Autocomplete. Это новое поколение autocomplete-а. Она на много круче технологии intellisense, правда в некоторых аспектах его не заменить, но они могут работать в месте и в какой то момент intellisense-ом все реже начинаешь пользоваться.
  • Стандартизация кода. Это скорее на будущее. Если в какой то момент Copilot станет стандартом и все большие компании станут предлагать своим работником пользоваться им, то в какой то момент все начнут писать код очень похожий друг на друга и понятный, потому как надо будет писать код, который "поймёт этот тупой робот", а этот робот у нас будет общий.
  • Документация. Мы пользуемся framework-ами и нам очень часто приходиться открывать браузер, их страницу, копировать и/или пересматривать какую то часть кода. Copilot-у доступны все экземпляры этих фреймворков. Если чего то и нет, то вы можете один раз скопировать, а дальше Copilot уже это увидит и за вас напишет.
  • Research. Сейчас мы тратим недели и месяцы чтобы изучать новый код и понять ее. Но в будущем, если код будет написан удобно для Copilot-а, скорее всего этого не понадобиться. Мы сможем просто написать чего ищем, и она все найдет за нас. Логическими предложениями.

Так как им пользоваться и как оно изменит нашу жизнь?

По первых мы будем писать комментарий, очень много и простых комментарий, и Copilot нам в этом поможет.

Приведу пример

// get user by id
const user = await manager.findOne(User, 1);

Я тут написал комментарий "get user by id", все остальное он дописал сам. И все правильно дописал. Но не часто так выходит. Может у вас функция называется searchOne например. Об этом надо подсказать Copilot-у. Для этого вам нужен пример данной логики, но с правильным для вас кодом. Дальше, если заменить слово user на book, то он все правильно сгенерирует.

// get book by id
const book = await manager.findOne(Book, 1);

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

Тем же самим можно пользоваться чтобы сгенерировать целые классы. Это такой гибкий и удобный snippet tool.

Так же, она помогает написать более логичные api для ваших классов. Например если у вас есть тест и в нем вы пишите afterEach она дополняется тем что вызывает await manager.close();

afterEach(async () => {
  await manager.close();
});

Если у вас, у класса manager нету такой функции, то вы задумываетесь, если робот так подумал, то может быть стоит иметь такую функцию? Раз робот так подумал, то и другие люди этого будут ожидать.

Итог

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