wrangler65
Модератор
Есть у меня один знакомый. Преподаватель. Примерно, раз в месяц принимает экзамены у студентов, с курсов повышения квалификации. Студенты решают задания на компьютерах, а он ходит между ними, вопросы задает и двойки ставит.
Вот только ходить приходится с бумажными ведомостями. Ведомости эти, постоянно падают на пол, студенты в них подглянуть норовят. Если в ведомости надо что-то исправить, то приходится зачеркивать и грязь разводить. А затем, результаты экзамена надо внести в компьютер.
И настолько эта возня с бумагой его достала, что знакомый решил:
"Хватит это терпеть! Говорят, в соседнем дворе бабушка сама написала себе приложение для продажи недвижимости (находясь под воздействием). А я что? Лысый что ли?!
Вон, даже курсы по вайбкодингу продаются! Напишу сам себе электронную ведомость!
Может ведь обычный человек написать любую программу.
Ну не будут же врать в Интернете."
Никакого знакомого нет
Это я сам.Большими языковыми моделями, в работе, пользуюсь постоянно. Правда специфика работы такая, что 90% программ, написанных за последние годы, умещаются в пол экрана. В основном - скрипты анализа логов, снятие дампов в нужный момент, запуск трассировки когда все стало плохо, простейшие мониторинги (на коленке) и т.д.
Иногда, даже специально придумываю, чтобы эдакое побольше написать руками. Расширение для PostgreSQL - было настоящей отдушиной.
И вот тут мир LLM я открыл для себя с лучшей стороны. Моментально перестаешь "красноглазить", запоминать 100500 параметров каждой команды, или вспоминать: "А как это на ...таком языке... сделать?".
Спросил - получил готовый ответ. И он работает. Вот прям реально работает.
Но как было написано выше, есть еще преподавательская деятельность.
А там они - бумажные ведомости.
Нужно войди в зону комфорта
К идее вайбкодинга я относился осторожно. С одной стороны, примерно понимаю как работают LLM и каких сюрпризов от них ожидать.С другой стороны, "вайбанутые" бегают кругами по всему Интернету и орут, что если ты не станешь как мы сегодня, то завтра уже опоздаешь.
Поэтому, разработку приложения для выставления оценок - воспринял как вызов. Хотел сам для себя понять, на сколько сейчас реально разработать нужное приложение под лозунгом: "Ни капли в рот, ни буквы в код!".
Допустим, проснувшись с утра, я осознал себя преподавателем ВУЗа. Вместо показа голых коленок (за "пятерку"), студентка установила мне Cursor и подключила к нему Claude.
Иностранный студент (за "тройку автоматом") оплатил со своей карты 20$ за месяц подписки.
Нужное делайте, не нужное - не делайте
Позволю себе дать один совет: делайте реально нужное (вам) приложение. Иначе вы попадете в ловушку "вау-эффекта" от первых шагов разработки.Читал тут, как один человек разработал за день приложение по переводу из одних единиц измерения в другие. И на этом опыте делал выводы, что всё, программисты не нужны!
Мил человек, оно тебе зачем? Ежедневно из сантиметры в килограммы переводишь? Нет? А вот когда будешь ежедневно, то вдруг окажется, что немного неудобно. Надо поправить интерфейс. Начнешь править, а там как поедет одно за другим...
Расслабьтесь и откиньтесь на спинку кресла
Для понимания уровня сложности приложения (очень кратко):- создаем экзамен (указываем суммарный балл прохождения)
- добавляем в него студентов
- указываем список вопросов на экзамен
- на закладке "Оценки" тыкаем в студента и за каждый вопрос ставим оценку от 2 до 5 и можно написать комментарий
- у студента на экзамене еще можно задать IP машины за которой он сидит
- можно назначить дату пересдачи экзамена
Весь процесс разработки я не буду описывать. Многие пробовали и знают, что это такое. Кто не пробовал - советую самому попробовать, а не полагаться на чужое мнение.
Началось все так, что я аж крякнул от удивления. Минут за 40, этот дурень сделал мне первую версию приложения, и запустил его на эмуляторе. Причем, Android SDK уже был, я просто сказал ему, чтобы не вздумал качать, а использовал текущий.
Ну че ты начинаешь? Все хорошо же было.
Первое, что я понял: на текущем этапе, юрист не сможет сделать себе приложение типа "СоветникМинус".Пока вы делаете приложение уровня "покажи мне котика из интернета", еще можно общаться на естественном языке. Но как только приложение должно делать что-то реальное - вы не сможете избежать терминов из программирования и особенностей языка (платформы) разработки.
Чтобы все было расставлено как надо, правильно нажималось\отжималось\показывалось, мне пришлось применять слова: Activity, ToggleButton, Text, ToolBar... и т.д.
По другому, "Он" просто не понимал.
Исправления одних ошибок генерируют другие.
"Вот новость!", воскликнет адепт, "надо было сказать, что не меняй эту часть.".
Сказал.
Все получилось гораздо хитрее: я запретил ему менять окно оценок, потом сказал исправить ошибку. Для исправления ошибки, "AIноагент" изменил структуру базы данных, и данные в одной из колонок, списка оценок, просто перестали показываться.
Нет, колонка там была (только пустая). Он действительно не тронул указанное окно.
Заметил я это уже на экзамене.
Ну я-то куда полез, я же читать не умею
А потом я полез в код.Вся логика приложения в одном файле MainActivity.
Там все в кучу. И composable-функции и большая часть логики.
Нет, он конечно применил эдакий MVC (разделил данные от активностей и то благодаря использованию Room), но никаким структурным мышлением там и близко не отдает.
Отлично используются различные паттерны и фремворки типа Room (как уже было сказано), хотя я бы предпочел sqldelight.
Но когда у тебя в приложении 4 вкладки в нижнем меню, то наверное логично не пихать это все в один модуль, а разбить каждую вкладку минимум на 2 логических блока: view и функциональность (а уж сколько под этим будет реальных классов...).
Еще немало удивило, что все формы ввода экзаменов, студентов, вопросов, оценок - это кастомные AlertDiaolg'и. И да, весь их код тоже в MainActivity.
Как бы ладно, но это не по человечески что ли.. Ах, да...
Получается, чтобы разработанное приложение было нормально структурированным - эту структуру надо описать самому (удачи той самой бабушке и хорошей погоды в "её" доме).
Настал тот день
И вот день экзамена. Специально не стал брать, доставшие до печенок, бумажные ведомости, взял только телефон и заветное приложение на нём.Выставил первую оценку, написал комментарии, по ответам студента. Все отлично. Пару раз ткнул в разные фильтры. И оценка пропала. Совсем. Полностью. Вместе с комментариями.
Хорошо, что я выставил только одну оценку и помнил за что завалил несчастного. Внёс данные снова.
После чего, на протяжении всего экзамена, дрожащими пальцами делал скриншоты каждой выставленной оценки.
А кто же это сделал...
Пришлось потратить немало усилий чтобы понять, что произошло.Сначала думал самое очевидное, что этот умник, в момент фильтрации списка, делает какую-то DML операцию. Но нет, тут он придерживается паттернов и фреймворков, что спасает.
Оказалось вот что:
Так как я не знаю IP машины студента, пока он физически за нее не сядет, то эти самые IP вношу "по ходу", открывая форму "Экзамена" и указывая там IP-адрес студенту.
А так как, таблица оценок связана с экзаменом внешним ключом, то у нее установлено onUpdate = ForeignKey.CASCADE. После перезаписи экзамена - все оценки затираются.
Но это не видно сразу, т.к. список оценок не получает уведомление об изменении данных.
И кажется, что оценки пропали после применения фильтра.
Достаточно было заменить, в описании внешнего ключа, onUpdate = ForeignKey.NO_ACTION и оценки перестали пропадать (да, тут не обрабатывается ситуация когда студента можно убрать из экзамена, но его запрещено убирать, если есть оценки).
Если бы я сам писал приложение, то вообще отказался бы от внешних ключей и всю целостность данных обеспечивал в коде, а не полагался на СУБД.
Что по времени
Чистого времени "вайбанутой" разработки у меня ушло, примерно, 6 часов. Делал по вечерам, в течении недели.Если делать самому, то (в силу привычки) сделал бы:
- на Java с xml-лейаутами - часов за 8
- на Kotlin + Compose - часов за 10
Какие мысли по итогу
За много лет, имею опыт программирования от микроконтроллеров AVR (до того, как они стали Arduino - эдаким 1С, в мире электроники), до разработки тиражных приложений на том же 1С. Ну и много чего там в промежутке, между низким уровнем и lowcode.Для себя понял следующее: пока ты находишься на "низком уровне": прошивки устройств, интеграции с оборудованием, собственная ORM (бывало и такое)... - оно или работает или нет (в 99,99% случаев). Практически всегда видно, где произошла ошибка и в чем ее причина.
А вот как только логика разработки поднимается на прикладной уровень (или не дай бог уровень "денег"), то количество ошибок и сложность их поиска\исправления стремиться в бесконечность. Эти ошибки не так очевидны, они выявляются не сразу, а их исправление требует немало времени на исследование (как бы не сломать, что ни будь другое своим исправлением).
Именно поэтому, мы слышим дикие вопли с "Вайбанутовских болот", как там все прекрасно. Но при этом, не видим "Кембрийского взрыва" приложений в "сторах". Ко мне постоянно обращаются знакомые с вопросами можно ли разработать приложение, которое "..." и дальше описывают функциональность, нужную ну... 1-2 людям из миллиона.
Есть огромный, скрытый пласт, крайне-узкоспециализированных приложений. Программисты не хотят за них браться, т.к. денег там нет. А пользователи, пока, не могут это сделать сами. Как в октябре 1917 - "верхи не могут, а низы не хотят".
Для себя я решил, что "Вайбонизм" победит, когда наступит эра индивидуальных приложений. Когда вместо того, чтобы изучать чужое приложение, человек сделает его себе сам. Лично под себя. С перламутровыми кнопками и дизайном стиля "Циклоп" (смотреть на это можно только прищурившись одним глазом). А пока этого нет - увольте.
Скоро не будет людей, будет один ИИ
Можно ли "вайбкодингом" разработать большое и сложное приложение. Да можно.Только для этого придется разбить структуру приложения на отдельные блоки и описать связь между ними.
И кто же на такое способен...? Ответ: "архитектор ПО", т.е. человек из высшей иерархии IT-специалистов. А тем временем, нам предлагают отказаться от джунов-мидлов, заменить их на ИИ. "Мы научим вас как! Деньги нести вот сюда..."
Этим самым, выбивается нижний пласт пирамиды профессионального роста. Откуда возьмется "архитектор" если он не был джуном?
Безусловно, ИИ повлиял и еще повлияет на процесс разработки. Но речь в статье была про "сейчас". И может показаться, что следом за этой фразой, я предлагаю...
Срочно всем вайбануться!
По моему мнению, курсы вайбкодинга, сейчас, сродни курсам "Научим вас правильно искать в Интернете, начала 2000-х" (олды помнят).Сам помню как объяснял тогда, своему другу (фрезеровщику по образованию), как правильно писать запросы в поисковике, чтобы найти нужное. Он все никак не мог найти, что хотел, а я находил очень быстро.
У вас, или ваших знакомых, сейчас есть проблема с составлением поисковых запросов? Уверен, что нет.
Вайбкодинг - это инструмент, пользоваться которым, можно научиться очень быстро (а скоро и не надо будет учиться совсем).
Если вы понимаете как разрабатывать приложения, то с ним или без него - вы приложение сделаете.
Если не понимаете, то пока - это все мошеннические сказки бабушки, из соседнего подъезда.
А вот когда бубушка сама сможет сделать себе приложение, то вайбкодер ты или нет - роли играть не будет.
Источник