Адаптация мобільных інжынераў: ад напісання коду на Kotlin да керавання агентамі
Як агенты для кодавання пераключаюць работу інжынера Android на сабліквіднацыю, контекст, архітектурныя обмежэння і перакананне, а таксама якія фундаментальныя прынцыпы маюць большое значэнне, чым будзь-колі раней.
Агенты для кодавання больш часу не проста ўтвараюць вашы кадры. Яны доследжваюць хранільню коду, плануюць змяны, рэдагуюць калькі файлаў, запускаюць процес стварэння продукту, чытаюць паведамленні пра адмошчанняя і пробуюць знову. Для інжынера, які працуе з мобайльнымі прыстроямі, гэта паднімае непрыемны вопыт: якщо агент пішае большую частку коду на Kotlin, чы ўсё ж такі це застаўся розвіццельнік для Android, чы ён таямна ператварыўся на стварэнне запитоў у інтеграваных средах разработкі? У гэтым артыкуле ставится, што жадна з гэтых катэгорыяў не падходзіць, і апісваецца, у што на самай працоўніцы ператварываецца гэта аднос: стварэнне точных спецыфікацый, проектаванне контэксту, у яком працюе агент, кодаванне архітэктуры як абмежэнняў і перакананне рэзультатаў, якія вы самі не пісалі.
Прыклады даныя для Android, але логіка можа быць застосаваная без проблем да React Native, а таксама до команд, якія працуюць у вебе і на бэкенде, і якія выкарыстоўваюць тыя ж засобы.
Як далека прыйшлі асистэнты для кодавання
Класычны ўраджок Android знаёмы: ачыніце Android Studio, створыце клас, напісце код на Kotlin, працавайце з Gradle, вышукайце прычыны краха праз Logcat, апробавайце на прыстрое і запускіце pull request.
Падтрымка AI паступова увайшла ў гэты ўраджок. Спачатку яя завершала адзіныя лініі коду, потым цэлыя функцыі, а пасля — цэлыя класы. Чырвоныя інструменты выступаюць як агенты. На момент напісання калькі продуктов явна описваюць гэтыя можлівасці:
- Gemini Agent Mode у Android Studio прымае высокага рэвэля ціль разработкі, складае план, запускае інструменты, рэдагуе калькі файлоў, стварае проект і перадумвае практыку, калі якаясь з ступеней не выйшла.
- Cursor's Agent дакладна аналізуе кодавую базу, зменяе калькі файлоў, запускае команды тэрміналу і лагодзіце адказы, выкананняя задачу, уместо таго каб проста запрасіць напісаць наступную лінію коду.
Магчымасці продуктам у гэтый сферы быстра зменяюцца, таму пераканайцеся ў актуальной даследчыцкай документацыі таго інструмента, які викорыстоўвае ваша каманда. Аднак напрамак ясны.
Роба прасуваецца вышэй у іерархію
Корыстным ментальным моделю ёсць лесвіца інжынерных задач, ад найбольш механічных у ніжней частцы да найбольш апартантных у верхней частцы:
Write code
↓
Understand code
↓
Design architecture
↓
Define requirements
↓
Make engineering decisions
↓
Validate behavior
↓
Own the product
Агенты становяцца дужа спакульнымі ў простых задачах. Гэта не робіць набіранне та чытанне коду беспрагоднай, але зміняе ўжоць яго цэннасць. Стандартную реалізацыю хранальніка, якая за руку трэба стварыць па паловай гадзіны, можна створыць за секунды. Дзесять майже ідэнтычных экранаў Compose ёсць клопачлівымі для ручнага напісання; агент можа зменіць неабходныя файлы і стварыць тыя часткі, якія павтараюцца. Простая памылка компіляцыі може з’ядзець калькі хвілін вашага часу, тады як агент прачытае паведамленне, знайдзе вінаваты код, выправіць яго, перазбудуе і працюячы далей.
У суме гэта значыць, што інжынер витрачае менш часу на стварэнне коду і больш часу на выбір таго, калькі коду ўзагалі трэба існаваць.
Хорашы запит ў сутнасі яўляецца спэкіфікацыяй
Возьмем типовыя запатраненнія на продукт: дадзець можлівасць завантажэння ў дапынг. Апытны інжынер Android у своіх думках ператварае гэтыя словы на болей складную структуру дизайна:
Database
↓
Repository
↓
Use Cases
↓
ViewModel
↓
UI State
↓
UI
↓
Background execution
↓
Notifications
Тепер агент можа рэалізаваць большую частку гэтай структуры, але якасць результата значна залежыць ад таго, калякія запатраненні былі заданы. Порашчыльце трохворачовай інструкцыі (“дадзець можлівасць завантажэння”) з чымось падобным да гэтаго:
Створыце абэркту, яка можа запускать калькі завантажэнняў і застаецца актуальной пасля кожнага запуску, пры чым для аховання дадзэнняў будзе выкарыстоўваны Room у поўнай саавесці з WorkManager. Следзіце за прыбылью завантажэнняў у памяці, а не зберагаючы кожную актуалізацыю ў базе дадзэнняў. Калі процес будзе завершаны, вярніце незавершаныя та актыўныя завантажэння. ViewModel должен выдаваць толькі для чытання StateFlow. У слою домэна не выкарыстоўвайце жадных элементаў фрэймворку Android. За дапамогою тэстаў на елементах пакрыйце змены стану абэркты та вяснаванне пасля неудач. Не зменяйце элементы Room, якія не маюць нічога спакульнага з завантажэннямі.
Называць другую версію „лепшым запитам“ — значыць недаць яй належнага значэння. Це інжынерныя спецыфікацыі: у яй названы тэхналогія стойкасці, механізм выконання на фоне, рашэнне па кантэксту прыдатнасці (не запісваць кожныя апдэйты прыгону на дыск), трэбаванні да стойкасці (выжыванне пасля зупінкі процэса), контракт API (незменны StateFlow), правіла стратыфікацыі, дыяметр тэстаў і чыткая ахватна зона ўплыву. Кожны з гэтых пунктав адбіваеся ў ведомасцях пра Android, якія агент не можа вывести з фразы „дадзіць калэндар дазволаў на завантажэнне“.
Галоўны вывод такі: інжынер не зникае. Інжынер стае тым, хто можа пераклаць нечыткі запит ад продукту на точны апіс працоўнай системы.
Запиты проты інжынерыі
Два гэтыя адзінства ставяць разныя запытанні. Тыя, хто сфокусаваны на стварэнні падказакоў, спытваюць, як заставіць модель стварыць пэўны выхад. Інжынер жа хоча знайсці, што трэба стварыць, з якой метай, пад якімі абмежэннямі, і як будзе вядома, што гэта працуе.
Падазроўваючы, што агент дае вам гэты ViewModel:
class DownloadViewModel(
private val repository: DownloadRepository
) : ViewModel() {
val downloads = repository.downloads
}
Ён скомпілюецца і чытаецца без проблем. Але апытны разрабік Android усё раве мае ряд запытанняяў пры ўзьмэнні яго:
- Чы ў
downloadsяе холадныFlowчыStateFlow, і што спрычынае кожны колектар? - Дзе знаходзіцца едынайшы адказ пра статус завантажэння?
- Што застаецца пасля завершэння процесу?
- Чы кожная апошнёвае інформацыя пра прагрэс спрычынае збіранне дадзеных у Room?
- Што адбываецца, калі два завантажэння завершаюцца адночасова?
- Як моделюецца анулюванне?
Стварэнне класа — гэта проста. Але аналіз системы, якая яго викорыстоўвае, — гэта складная частка, і яе значна сложней автаматызаваць.
Цікл разработкі з агентамі
Традыцыйны цікл заставляе разработчыка браты участь у кожным кроцы:
Requirement
↓
Developer writes code
↓
Build
↓
Error
↓
Developer investigates
↓
Fix
↓
Test
↓
PR
Калі ў центры ёсць агент, цікл змінюецца. Разработчык задае мету на пачатку і адпавядае за перагляд та атрыбутызацыю на заканчэнку, тады як агент керуе цікламі дакладнага аналізу, рэдагавання та выправлення бягунковых проблем:
Developer defines goal
↓
AI Agent explores codebase
↓
AI creates plan
↓
AI modifies files
↓
AI runs build/tests
↓
AI observes result
↓
AI fixes problems
↓
Developer reviews
↓
Developer validates behavior
↓
Ship
Дасяжыні вэндара описваюць той самы патэрн. Режым агента ў Android Studio практыкуецца як процес планавання, вызову інструментаў, змены файлоў і павтарэння роботы на адпаведных рэзультатах. Cursor описвае свой агент як модэль, якая прыменяе логіку, інструменты, якія дазволяюць яму шукать і рэдагаваць файлы або запускати команды тэрміналу, а таксама цикл, у яком агент спостерагае за рэзультатамі і выбирае наступны крок. Гэта вучоўка автадаптавання; гэта больш супамінае делегаванне часткі інжынернай роботы.
IDE як шар кіравання
Гэтае змена перакладвае функцыю IDE. Раней гэта была робочая плошча для адного разработчыка. На момент напісання інструменты AI ў Android Studio адкрываюць такія можлівасці:
- Режым агента
- Калькольванне паралельных дыялогаў агентаў
- З’язкі з серверамі MCP
- Інструкцыі у файле
AGENTS.mdна рэвэле проекта - Даступ да спецыфічных для Android знанняў
Google прызначае режым Agent Mode для адрабаткі заведамоў на розных стадыях разработкі і працоўнае месца MCP сервероў і AGENTS.md як спосабы ўраджэння та керавання ім. IDE больш не ўсё толькі месца для напісання коду на Kotlin, а стае месцам для запуску та нагляду за інжынерным сераўам, які падтрымліваецца AI.
Фундаменталы маюць больш значэння, а не менш
Было б прыродна думаць, што якщо агенты пішуць код, інжынеры можаюць знаць менш. Але рэальнасць іншая: агенты дазволяюць швайна працаваць некоректныя рэалізацыі, таму патрэбны моцнейшыя фундаменталы, каб іх выкрываць.
Kotlin
Вам яшчэ патрэбна моцная ахватаўка функцыяй яго мовы, якія часта маскуюць тонкія багі:
Flow
StateFlow
SharedFlow
coroutines
structured concurrency
inline functions
sealed classes
value classes
delegation
generics
null safety
Мета не ў тым, каб самостайна пісаць кожны рядок. Мета — з’явіць, калі створены код на Kotlin незначна адхиляецца від правил, напрыклад, коли викорыстоўваецца модель «гарячага» потоку там, дзе трэбаў «холадны», або коли корутіна запускаецца паza рамкамі структурованай паралельнасці.
Платформа Android
Самэй поведання платформы — гэта тады, калі створены код часта выглядае правільным, але не працюе ў рэальных умовах:
Lifecycle
Process death
Configuration changes
Services
WorkManager
Room
Navigation
Permissions
Storage
Background execution
Notifications
Compose
Views
Performance
Агент можа стварыць клас Worker за калькі секунд. Але гэта нічога не гаворыць пра тое, чы робітнік дотрымліваецца циклу жыцця вашага дапрынтку, а таксама вимог да перепробавання і обмежэнняў.
Архітектура як обмежэнняя агента
Знанняя архітектуры прагчаюць новага значэння. Такія патэрны, як MVI і MVVM, Clean Architecture, межы модуляў, репазітарыі, DI, кантроллі стану і раздзелэнне домэны, — гэта не проста способы арганізацыі коду; гэтыя прынцыпы стаюць правіламі, якія вы задаеце агенту. У зменшэнне на „стварыць функцыю“ вы можете даваць такія інструкцыі:
Стварыце гэтую функцыю, выкорыстоўваючы нашу існуючую архітектуру MVI. Адпаведайце патэрнам з Функцыі A і Функцыі B. Не дагаўляйце новых залежнасцяў. Бізнес-правілы павінны знаходзіцца ў шаре домэны.
Апісанне існуючых функцый є особа які эфектыва, таму што гэта паказвае агенту конкрэтныя, пераглянутыя прыклады ў кодбазе, замест таго каб паслужыць толькі гэнерычным уявленням пра „MVI“. Архітектура стае часткай мовы, яку вы вжываеце для керавання агентамі.
Інструкцыі на рэвэле репазітарыяў з AGENTS.md
Багато команд змушаны ў кожнай сесіі павтараць тэ ж самае нагадванні: проект выкарыстоўвае Kotlin і Hilt, бізнес-логіка не падлягае включэнню ў Composables, стан адкрываецца за дапамогою StateFlow, павінны быць сягледзаны правіла называння, неабходны тэсты, а створаныя файлы забараненыя.
Гэтыя вакліканні могу знаходзіцца ў самым репазітарыі. У момент напісання інструмент Gemini ад Android Studio чытае файлы AGENTS.md, у якіх зафіксаваны такія прагпаты, таму агент бачыць іх як контекст проекта. Іншыя агенты чытаюць падобныя файлы; тая ж ідея дэтальна раскрываецца ў практычным посібніку па стварэнню эфектыўного файла CLAUDE.md.
Это маленькія змены, але з великімі наследкамі. Репазітарый традыцыйна меў:
source code
configuration
tests
documentation
Тепер ён таксама можа мець:
AI engineering instructions
База коду пачаткова описвае як сам прыграма, так і тое, як агент павінен з яго працаваць. Ставіцеся да гэтых інструкцыйяў як да коду: пераглядайце змены ў іх, робіце іх кароткімі та конкрэтнымі, а таксама вычышайце правілы, якія больш не паслужаюць.
MCP спаявае агента з рэштой ланцуга інструментаў
Протакол Model Context Protocol дазволяе системам AI падключацца да зовнішнях інструментаў та служб, што значыць, ўжо агент не прыкреплён толькі да панелі чату. Через серверы MCP ён можа потэнцыйна дасягнуць:
GitHub
Databases
Design tools
Documentation
Issue trackers
CI systems
Cloud services
Internal APIs
Інструменты AI ў Android Studio наразе падтрымляюць з’яўленне ў сувязі сервераў MCP, укладаючы і даляжлівыя. Рассмотрзіце адзін запит, які прасіць агента стварыць новы экран Profile на аднойчынку з файлам Figma, перадаць у практыку існуючыя элементы дизайну, з’яўліць цей экран у сувязі з канцэмам profile, кераваць станамі завантажэння і аббыўчынства, дадаць тэсты і падготавіць запрос на перагляд. Выпанавэнне такога заведамства афектуе многія системы адразу:
Developer
↓
AI Agent
├── Figma
├── Codebase
├── Documentation
├── API
├── Tests
├── Git
└── CI
Калі інструмент координуе файлы дизайну, код, дакументацыю, API, тэсты, Git і CI, адзначэнне яго як „генератора коду“ є некоректным. Це інжынерны агент, і самэ ўзаемадзейства з разнымі системамі ёсць прычыной таго, чаму важлівы права доступу і перагляд: кожная з’яўленае ў сувязі система ёсць тым, што агент можа чытаць або зменяць.
Пастка: залежны, але неспроможны
У гэтай новай схеме ёсць характерны спосаб абярошэння. Разработчык можа стаць залежным ад AI, не набуўшы практычных навыкаў у яго викорыстоўванні. Працэгальна можліва стварэнне коду, які выкарыстоўвае ўсе гэтыя элементы:
Flow
StateFlow
SharedFlow
CoroutineScope
SupervisorJob
Channel
без розумення таго, што самэўчынае кожны з іх. Усё запускаецца, робота здаецца шырокай, а чырвоны месцы пазніяй сталкнуцца з проблемамі, якія выкалікаюцца па збіранні жыцёвага циклу, і якія ніхто з команды не можа паспрацаваць.
AI прышвытчыў швальцаванне; але ён не зробіў разработчыка кращым. Самэ гэтая прычына, чаму аналіз таго, што створыў AI, можа стаць цяжэйшым за саму здатнасць яго ствараць. Практычная правіла для команд: ніхто не мае права адключыць створаны код, які ён не можа паспрацаваць лінія за лініяй пад час аналізу.
Кантэкст — гэта справжнія рычаг
Агенты для кодавання сильна залежнаць ад контэксту, які яны отрымаюць. Напрыклад, дакументацыя Cursor описвае систему агентоў чераз контэкст, інструменты, інструкціі та моделі. Гэта паводзіць да прыбліжная мультиплікатывная звязь:
Agent Quality
=
Model
× Context
× Tools
× Instructions
× Verification
Мультыплікацыя ёсьць важлівай часткай. Сильная модель, якая працуе з слабым контэкстам, стварае некалітасны програмны код, адколі практычна нулевы каляр знижвае загальны результат. Адлічная модель, якая працуе ў добра структураваным репазітарыі з чыстай архітектурай, надзеянымі тэстамі, корыстнымі дакументацыямі та точнымі інструкціямі, можа прадстаўляць ся набаго краща. Навык, які трэба развіваць, — гэта інжынерыя контэксту, пры чым формулюванне запита ёсьць толькі часткаю яго.
Чаму „інжынерыя запитаў“ занадта вузкая
Разлік лёгка побачыць, якшто пракставіць іх адна ля другой. Просты запит выглядае так:
"Create a login screen."
Запит, створаны з урахоўваннем контэксту, выглядае так:
Here is our architecture.
Here are our design rules.
Here is the API contract.
Here are existing authentication patterns.
Here are the tests.
Here are the project constraints.
Here is the expected behavior.
Now implement the feature and verify it.
Другая версія передае агенту архітектуру, правілы дизайну, контракт API, існуючыя шаблоны аутентыкацыі, тэсты, обмежэння і адказваную поведэнку, пасля чаго просіць яго як іх рэалізаваць, так і пераканацца ў ўсаснаем. Гэта значна бліжэй да таго, як вы бы інструктавалі новага колегу, прычаму запит ёсць толькі аднай з складовых. Калі агент парадксаваецца, корыстна запытаць, який з эых слоёў быў нехватны; наша інструкцыя па дыягностыцы AI-агентаў па слоях детальна расказвае пра гэтую дыягностыку.
Інжынер праектуе весь цикл
Найбольшыя змены можаць быць у распадзеле адпаведнасцяў. У старым падходзе адносы былі прымітныя:
Developer → Code
Новы падход складаецца з калькі этапаў, і інжынер несе адпаведнасць за ўсе яны:
Developer
↓
Specification
↓
Agent
↓
Tools
↓
Code
↓
Tests
↓
Verification
Контроль за цыклам значыць ведаць, яка інструкцыя неабходная ў данай ситуацыі:
- "Выконайце гэта", калі задача чыткая і рызык мінімальны.
- "Спачатку спланавайце", калі змяны стосуюцца кальколька модуляў.
- "Зараз не чапайцеся за код, а спачатку вывучыце архітектуру", калі пагадаецца розумець ситуацыю пры внесенні змян.
- "Павтарыце апылківу", прыемна якога-небудзь паспелення.
- "Стоп; ваша прыпуск правильная", калі агент упэўнена двіжыцца неправым кірмом.
Гэтае апошнее втручанне можа стаць адной з найцэннейшых навыкаў усага, і гэта ўсяго залежыць ад дастатковага ведання платформы, каб з’явіцься можласць адгукнуцца на некоректную прыпуск.
Ні разработчык Android, ні інжынер запрошэнняў
Ніяка з аплякацый сама па сабе не выказвае всю ролю. Разработчык Android, який піскае код на Kotlin толькі вручную, будзе атрымляць у эфектывнасці. Людзі, якія можаць запытаць AI пра Kotlin, але не разумяюць архітектуру Android, раней чым пазней затрапіць у скрутную ситуацыю. Адпраўныя спалучанні выглядаюць так:
Android Engineering
+
AI Agent Skills
+
System Design
+
Context Engineering
+
Verification
=
AI-Augmented Android Engineer
У практыцы гэта значыць неабходнасць падтрымання своіх знанняў пра Android, паглыблення розумення архітектуры, навучэння точна выражаць трэбованні для машын, а таксама звыкання да агентаў, іх інструментаў, MCP, інструкцый для хранення дадзэнняў і автаматызаваных перакрыцчаў. Галоўнае — гэта значыць ведаць, калі AI памыляецца. Агент можа з упэўненасцю напісаць два тысячі ліній коду; але інжынеру трэба вырашыць, чы рэальна ўсе гэтыя лініі неабходны.
Болей рэалістычныя перспективы — не замена разработчыкаў штучным інтэлектам, а замена рабочых процесаў, якія не функцыонуют эфкарэсна, разработчыкамі, якія добра работаюць з агентамі. Аднам інжынеру з моцнымя фундаментальнымі ведамасцямі і належна настроеным агентскім распадам можаць быць магчыма аддасты нарадзіць тое, што раней трэбавалася набагато большай колькасці ручной працы. Інжынерыя не зникне; яна пераходзіць на вышэйшы роўень, дзе разумаванне, вяліканне абмежэнняў і перакананне рэзультатаў маюць большое значэнне, чым проста нажатыя клавішы, а архітектура выступае як карта, якая не дазволяе агентам блукаты.
Ключовыя выводы
- Спрыятлівае да агента інструкцыі як спэцыфікацыі: называйце тэхналогіі, рашэнняя па канцэрантыям, трэбаванні да стойкасці, контракты, меры працэў тэставання і тое, што не павінна змяніцца.
- Адзначайце створаны код, аналізуючы систему, якая яго отачвае (власнасць стану, жыцёвы цикл, заканчэнне працэсу, канкурэнцыя, анулюванне), а не перакананням у тым, што ён компілюецца.
AGENTS.md, і пільнуйце ўсё як код.