Comments 9
В этот раз я решил пойти по трендам и подключить в процесс AI
Это скорее минус, чем плюс (учитывая, что в программировании Вы новичок). С LLM-агентами программированием занимаются именно LLM-агенты, а не оператор :) Так гораздо сложнее научиться важным концепциям программирования, которые послужат фундаментом для дальнейшей карьеры программиста, просто потому что соблазн перекинуть всю интеллектуальную нагрузку на LLM-агентов велика.
Он сразу выдал готовый набор инструкций, и приятно удивило, что всё это можно было выполнить прямо в интерфейсе, не копаясь вручную.
Ключевое предложение тут "не копаясь вручную". Сейчас популяризируется мысль о том, что копание в программировании "вручную" (в т.ч. IDE, редакторах кода, инструментах разработки) - это уже устарело, да и не эффективно. Гораздо ведь проще переложить эту задачу на LLM, верно?
Такие моменты, на самом деле, и делают разработчика разработчиком. Если Вы новичок, то без самостоятельного разбирательства в том, как лучше обустраивать файловую структуру проекта, какие конфигурационные файлы в проекте используются (и как они используются) и т.д. - дальше новичка не уйти. Вдруг окажетесь в ситуации, когда кроме Vim'a или максимум VSCode (без LLM-агентов) ничего не будет, что тогда? Правильно, не сможете разобраться с чего начать.
Профессиональный программист (если он именно профессионал, эксперт, хакер) умеет развернуть проект в рамках своего стэка с нуля - будь то с использованием VS Code или Vim, без LLM-агентов. И лучше этому учиться сразу, без помощи LLM. В долгосрочной перспективе это даст свои плоды. В краткосрочной - LLM конечно всё это ускоряет, однако экспертом с LLM не стать. Для этого нужно самостоятельно преодолеть определённый путь (и он не лёгкий).
В чате поддержки подсказали, что часть из этого — известные баги, которые скоро должны поправить.
В целом, статья выглядит как просто реклама Kode, а это сообщение только это подчёркивает. Думаю моя догадка верна, но для читающих новичков, кои по своей неосторожности решились также начать программировать с "вайб-кодинга", думаю мой комментарий будет полезен. Сделаю вид, что статья не рекламная :)
Но уж исправлять я её не буду.
А стоит, если хотите научиться программировать :)
Но вот поиск и объяснение ошибок «не в коде, а рядом с ним» у AI пока что вызывает настоящий отвал башки
Вывод: становитесь экспертом в программировании и не уповайте на "AI" :)
Вообще, Вы уже сейчас можете внести свой вклад в данный проект (чтобы он уж совсем не был LLM написан). Например, вот эта строчка может быть доработана (и дальнейшие с ней связки):
private initializeElements() {
this.noteTitleInput = document.getElementById('noteTitle') as HTMLInputElement;
this.noteContentInput = document.getElementById('noteContent') as HTMLTextAreaElement;
this.addNoteButton = document.getElementById('addNoteBtn') as HTMLButtonElement;
this.notesList = document.getElementById('notesList') as HTMLDivElement;
}
Тут нет обработки ситуаций, когда document.getElementById не нашёл элемент. В случае, если он не найдёт элемент он просто ничего не вернёт (кроме null), а его и приводить к конкретному типу HTML-элементов нет смысла. Это можно (и нужно) доработать. И дальнейшие "связки" тоже требуют доработки. Вот эта например:
private attachEventListeners() {
this.addNoteButton.addEventListener('click', () => this.addNote());
}
Тут нет проверки на то, что this.addNoteButton вообще существует. Он может быть равен null (или undefined), и тогда вызов метода addEventListener вызовет ошибку (ведь null или undefined не может иметь методов). Хотя бы оператор ? использовать тут было бы хорошим тоном:
this.addNoteButton?.addEventListener(...)
Да и зачем нужен этот самый оператор ? - это уже тема для разбора новичком :)
Такими вот подобными ошибками код пестрит, но в тоже время является неплохой возможностью для саморазвития как программиста :)
LLM/IDE with agents - являются неплохим инструментов для уже опытного разработчика, который повидал в своей карьере всякое. Для начинающего же (Junior-, Junior, Junior+) это скорее лишний отвлекающий фактор, чем что-то полезное. LLM лучше использовать не для программирования, а в качестве источника информации о программировании. Например, у него можно поинтересоваться какие проекты можно сделать и делать их потихоньку, запрашивать у него информацию по каким-либо концепциям и их реализовывать самостоятельно и периодически руководствоваться примерами программного кода на какую-либо тему. Это реально может помочь в быстром освоении каких-либо концепций из программирования.
присоединяюсь
Полностью согласна. Я пока ученик и стараюсь пользоваться им как подсказчиком именно в теоретической части, чтобы понимать как это все работает под капотом, с более простыми объяснениями, скажем так. Тоже считаю, что если уж запрашивать код, то человеку, который посмотрит и видит, что в нем верно, а что нет сразу. Иначе смысл программирования вообще, даже если взять его чисто как кодинг. То же самое, что изучить иностранный язык, но в другой стране на постоянной основе пользоваться переводчиком.
Спасибо за развернутый комментарий, будем пробовать)
По поводу программного кода (чтобы никого не запутать): я не обратил внимание на то, что в TypeScript класс NotesApp определён с атрибутами, в которых встречается Non-Null Assertion Operator (!):
private noteService: NoteService;
private noteTitleInput!: HTMLInputElement;
private noteContentInput!: HTMLTextAreaElement;
private addNoteButton!: HTMLButtonElement;
private notesList!: HTMLDivElement;
И при выполнении следующего программного кода:
private initializeElements() {
this.noteTitleInput = document.getElementById('noteTitle') as HTMLInputElement;
this.noteContentInput = document.getElementById('noteContent') as HTMLTextAreaElement;
this.addNoteButton = document.getElementById('addNoteBtn') as HTMLButtonElement;
this.notesList = document.getElementById('notesList') as HTMLDivElement;
}
Если document.getElementById() вернёт null, то приведение к HTMLInputElement (и другим типам элементов) приведёт к ошибке (будет вызвано исключение):
Conversion of type 'null' to type 'HTMLInputElement' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
Мои замечания были бы справедливы для JavaScript, в TypeScript с проверкой на null / undefined всегда всё +/- ясно (разумеется, если не использовать ts-ignore).
Да и при таком раскладе:
private noteService: NoteService;
private noteTitleInput?: HTMLInputElement;
private noteContentInput?: HTMLTextAreaElement;
private addNoteButton?: HTMLButtonElement;
private notesList?: HTMLDivElement;
TypeScript обычно просит какие либо функции и свойства у атрибутов с ? вызывать через ?, как тут например:
this.addNoteButton?.addEventListener(...)
Однако для надёжности ПО такие вот конструкции: document.getElementById('noteTitle'), следует тщательно проверять и преждевременно не приводить к типам HTML-элементам, т.к. они могут быть равны null и в таком случае могут возникнуть исключительные ситуации (ошибки).
Пару лет назад пробовал TS
Примерно такие же проблемы. То есть на эти грабли вы бы вероятно наткнулись всё равно, LLM тут не виновата, просто не помогла
Статья выглядит откровенной рекламой - но если это вдруг реальный человек писал, то вопрос - какие именно навыки и знания вы покажете на собеседовании с таким пет-проектом? Навыки просить нейросеть сделать работу за вас? А они точно ценные?
Работаю в разработке с 2018 года. В те года для "вкатывания" в it нужно было очень много учить. Каким-то чудом я прошёл тогда собеседование и получил работу в it (для вчерашнего студента это была большая радость)
Если не погружаться в специфику проектов, то до 2022 занимался разработкой на java и отрисовкой фронта на jQuery.
Потом я открыл для себя одну из gpt моделей и понеслось... с помощью ии получилось изучить react/vue (использование js на сервере), а сейчас я полноценно использую nuxt и очень быстро решаю бизнес задачи в рамках фулстек.
Могу дать следующий совет. Вайбкодинг это круто, но лучше с помощью ИИ не просто копипастить код, а именно разбирать с ИИ. Задавать кучу вопросов: "почему так", "а как лучше", "покажи альтернативное решение".
Ну и читать книги/документацию. По одной причине: там все структурировано от простого к сложному. ИИ не всегда хорошо сможет объяснить. Нужно комбинировать классический подход (книги/статьи) и практику с помощью ии)
Пет-проект с AI-помощником: мой первый опыт вайбкодинга