Как увеличить скорость написания кода: ИИ, генерация кода и плагины
10:45, 29.05.2023
Генерация кода
Одним из эффективных подходов к сокращению объема написанного кода является генерация кода. Минимизация кода, написанного непосредственно в приложении, позволяет повысить его стабильность и уменьшить количество ошибок.
Java Annotation Processing (APT)
Известным методом генерации кода является Java Annotation Processing (APT), который широко используется в таких библиотеках, как Dagger, Hilt и Room. Тем не менее, у APT есть определенные недостатки, такие как увеличение времени сборки и ограничения на модификацию существующих классов Java.
Чтобы APT работал в проектах на языке Kotlin, используется KAPT (Kotlin Annotation Processing Tool), генерирующий Java-стабы, которые затем обрабатываются процессором аннотаций. Хотя APT позволяет избежать использования рефлексий и может быть оптимизирована, она вносит дополнительную сложность и влияет на время сборки.
Kotlin Symbol Processing (KSP) – это альтернатива APT, специально разработанная для кода Kotlin. Она устраняет необходимость в дополнительных шагах, таких как KAPT, и обещает более быструю генерацию кода по сравнению с APT. KSP построен поверх плагинов компилятора Kotlin, что обеспечивает потенциальную оптимизацию в будущих версиях.
Gradle Plugin
Помимо создания проектов, Gradle можно использовать для включения функций генерации кода. Различные плагины, такие как ViewBinding, DataBinding, Apollo GraphQL, protobuf и SQLDelight, могут помочь в генерации кода из источников, отличных от Kotlin/Java, таких как XML-ресурсы Android или SQL-запросы.
Плагины компилятора Kotlin
Плагины компилятора Kotlin предлагают уникальные возможности для генерации кода. Примерами плагинов являются Kotlin Serialization, KSP и Jetpack Compose. Эти плагины позволяют реализовать дополнительные возможности и модификации кода, выходящие за рамки того, что указано в исходном коде.
IDE
Интегрированная среда разработки (IDE) является одним из ведущих инструментов для ускорения написания кода. Android Studio или IDEA, основные IDE для разработки Android, предлагают также множество встроенных функций. Кроме того, функциональность IDE может быть расширена за счет использования плагинов.
Сode completion
Сode completion , предоставляемое IDE, значительно повышает скорость написания кода. Оно избавляет от необходимости запоминать имена конкретных классов или искать документацию. Автозаполнение предлагает подходящие классы или методы на основе контекста, делая кодирование более быстрым и эффективным.
Live Templates
IDE, такие как IDEA и Android Studio, предлагают функцию под названием Live Templates. Эти шаблоны позволяют разработчикам использовать сокращения или ярлыки для быстрой генерации часто используемых конструкций кода. Пользовательские живые шаблоны могут быть созданы на основе существующих или с нуля, что позволяет экономить время на написание повторяющегося кода.
Плагины
IDE могут быть расширены за счет плагинов, которые предоставляют дополнительные возможности генерации и модификации кода. Однако разработка и поддержка подключаемых модулей может быть сложной задачей, требующей совместимости с несколькими версиями API. Написание плагинов для IDEA облегчается обращением к исходному коду IDEA Community Edition.
Шаблоны Android Studio
Android Studio предоставляет собственный механизм генерации кода с помощью шаблонов. Хотя он предлагает различные возможности и регулярно пополняется новыми шаблонами, добавление пользовательских шаблонов в настоящее время не поддерживается. Однако это ограничение может измениться с будущими обновлениями.
Geminio от HH
Geminio, разработанный компанией HH, является достойным внимания решением для генерации кода. Оно позволяет генерировать шаблоны кода, известные как рецепты, которые могут охватывать несколько файлов и даже генерировать модули Gradle. Преимуществом Geminio является хранение шаблонов внутри проекта, что позволяет осуществлять версионирование и обзор кода.
Сode completion посредством ИИ
Ввиду распространения ИИ в различных областях, включая мобильные ОС и аппаратное ускорение, пришло время рассмотреть возможность использования ИИ для написания кода. Из решений в данной области, достойным внимания является AlphaCode, выпущенный дочерней компанией Google, нейронная сеть, преуспевшая в заданиях Codeforces, сочетающих критическое мышление, логику, алгоритмы, кодирование и понимание естественного языка.
Но в рамках данной статьи мы хотим рассмотреть технологии ИИ, предназначенные для помощи в написании кода, а не для замены реального разработчика.
Одним из подобных решений является GitHub Copilot – ИИ-компаньон для работы с кодом, обученный на проектах GitHub. Хотя поддержка Kotlin не является официальной, она все равно работает достойно. Однако код, на котором он обучается, также может содержать ошибки, что лишает нас гарантии релевантных результатов. Кроме того, он требует подключения к Интернету и отправляет ваш код на сервер, что вызывает опасения по поводу конфиденциальности.
TabNine – еще одно достойное упоминания решение. Хотя оно работает только онлайн, его можно захостить у себя (self-host), что позволит вам обучать модель на собственной кодовой базе. Это привлекает компании, уделяющие особое внимание целостности и безопасности данных.
Хотя кодирование с помощью ИИ может быть быстрее, важно отметить, что сервисы не гарантируют качество кода, и они могут предложить устаревший или несовершенный код. По этой причине наиболее вероятным сценарием развития событий будет то, что мы перейдем от инженеров-программистов к инженерам по качеству кода.
Заключение
В статье выше мы представили несколько инструментов, которые могут облегчить вам написание кода. Как вы сами увидели, посредством различных подходов они могут оказать большую помощь в ускорении написания кода. В частности, написание кода с помощью ИИ потенциально может взять на себя большую часть работы программистов. Однако пока ни один подход не может обеспечить нас безупречным кодом, который не нуждался бы в редактировании, поэтому компетентность в области кода является необходимым качеством, чтобы действительно извлечь пользу из обсуждаемых инструментов.
.