Хорошая ли идея использовать ChatGPT как личного репититора для изучения, например проектирования архитектуры ПО и Тестирования?
Здравствуйте, я программист, разрабатываю на языках C++/C#, считаю что знаю данные языки достаточно хорошо, сейчас оцениваю свой уровень навыков на уровне около junior+ (официальный опыт 2+ лет). Но на моей текущей работе я нахожусь в ситуации, когда мне не у кого перенимать опыт по стеку разработки, с которым я работаю, на работе я сам себе команда разработки в одном лице.
Я пытаюсь изучать Паттерны проекттрования, SOLID принципы, правильное разделение отвестственности, DDD, TDD, с помощью ChatGPT и отдельно взятых статей в интернете по интересующим темам, уже примерно пол года как, и вроде как мне кажется боле-менее успешно, но я постоянно в чем-то сомневаюсь и натыкаюсь на пробелы в своих знаниях, в попытках собрать всю картину в целом у себя в голове. Сложность коенчно в том, чтобы вовремя увидеть когда ChatGPT пишет не лучшие практики, а галюцинирует и все нужно перепроверять, может быть в этом есть хоть какой-то плюс, в том, что я иду разбираться более глубоко, хотя у меня так же есть ощущение что это расшатывает мою психику, ощущения от его использования у меня в целом смешанные. Около года оплачиваю подписку и какой-то подход к его использованию выработал, но так и не понял - он ускоряет мое развиите или замедляет? В общем я наверно пытаюсь считерить, желая изучить все побыстрее, в обход больщих и сложных, как мне кажется книг, но может я наоборот заблуждаюсь и было бы гораздо быстрее и эффективнее учиться по правильным книгам.
К вайбкодингу у меня прям отвращение выработалось, в смысле использованию как: "хочу спихнуть работу и не вникать, побыстрее закрывая рабочие задачи" - это же так совсем не работает, особенно со сложными и комплексными приложениями (из-за отсутствия архитектуры поддерживать и постоянно наращивать функционал становится невозможно, а ещё код так пишу не я и я быстро забуду как приложение работает), да и какой смысл так делать, если опыт и знания я так не получу, как расти как разработчик (если что, это мои мысли ещё годовалой давности по этому поводу)?
В общем поделитесь пожалуйста своим опытом в изучении подобных тем и возможности применения ChatGPT и других нейронок для самообучения. Как вы их используете? Какие границы применимости у них есть, как вы думаете? В чем они хороши судя по вашему опыту, а в чем плохи и как их не стоит их использовать?
Идея нормальная, но я бы воспринимал ChatGPT не как репетитора, а как «резиновую уточнялку» и тренажёр для мышления.
Хороший режим такой:
1. Просите объяснить тему на простом примере.
2. Потом просите дать контрпример: где этот паттерн/принцип будет вреден.
3. Затем просите разобрать ваш конкретный код или дизайн.
4. После этого проверяете выводы по книге, документации или ревью живого разработчика.
Главная проблема не в том, что модель иногда ошибается, а в том, что она звучит уверенно даже там, где несёт чушь. Поэтому её лучше использовать не как источник истины, а как собеседника, который помогает быстрее сформулировать вопросы.
Для архитектуры я бы ещё советовал чаще проектировать маленькие учебные задачи руками: взять простую предметную область, сделать 2–3 варианта дизайна, потом сравнить, где проще тестировать, менять требования и читать код. Это обычно полезнее, чем абстрактно читать про SOLID/DDD/TDD подряд.
Вы, по сути, уже используете ChatGPT правильно: не просите написать всё за Вас, а разбираете свои решения, задаёте вопросы и проверяете слабые места.
Особенно полезна модель там, где у практиков часто есть пробел: она может разложить формальную сторону — как сформулировать требования, какие ограничения выявить заранее, какие критерии использовать при выборе решения и чем этот выбор обосновать. Многие опытные разработчики умеют сделать хорошо, но гораздо хуже объясняют, почему именно так и при каких условиях решение перестанет быть хорошим.
Я бы только не делал ChatGPT главным источником знаний. Книги и документация задают основу, собственный проект даёт практику, а модель хорошо работает как собеседник для разбора конкретных решений и альтернатив.
Нет, идея плохая, потому что результат будет на уровне индусов или даже ниже. Лучший способ изучения процесса проектирования ПО — читать книги, статьи, бесплатные курсы от мировых ВУЗов и создавать это самое ПО с начала и до конца. Проектирование, планирование, разработка, тестирование, работа над ошибками, сопровождение и прочее-прочее. Всё это вместе и даст нужный вам опыт и знания. Если на вашем текущем месте работы вы не получаете нужный вам опыт — имеет смысл найти более подходящее место работы. А ещё всегда можно завести пет-проект или два.
Разве работа в опытной команде в этот список не входит, чтобы делать конкретные хорошо сформулированные задачи более опытными коллегами и понимать почему такие решения по ходу работы? Статьи часто читаю, а вот книги нет. Сыграло во мне что задать вопрос ГПТ быстро, а книгу читать долго.
Есть какие книги, курсы, которые можете посоветовать по тому, как научиться проектировать?
Сыграло во мне что задать вопрос ГПТ быстро, а книгу читать долго.
Чтение итогов не имеет смысла, т.к. не получаете путь, который и привёл к этим итогам. То же самое, что и учиться строить дом по результатам осмотра фасада. Если вам не интересно много читать — имеет смысл рассмотреть возможность смены области деятельности, т.к. чтение и учёба — неотъемлемые части жизни разработчика.
Сыграло во мне что задать вопрос ГПТ быстро, а книгу читать долго.
Дмитрий Зеленев, обучение - это формирование связей в тканях мозга, поэтому оно больше похоже на накачивание мышц, а не на загрузку файлов на флешку. И происходит это, как и с накачиванием мышц, только под продолжительной нагрузкой. Нельзя нарастить бицуху, если гантели будет тягать робот.
всё работает нормально, если ты сам понимаешь как это ДОЛЖНО работать. как это спроектировать, что за чем должно идти итд...
пример - ты не сможешь спроектировать сложное сетевое приложение и написать его с помощью ГПТ, если ты не занешь как работает сеть.
Сугубо моё мнение - у тебя банальная нехватка практического опыта, впрочем это проблема большинства прогеров - у них нет тех знаний, которые нарабатываются из практики у сисАдминов
Насчет ГПТ - я считаю что код он пишет плохо. едиснтвенный кто по моему мнению пишет его прилично, это Claude Opus при том с размышлением Extra Hight или Max. в том числе и сложные проекты. в том числе и можно обсуждать проектировать и архитектуру.
проблема ГПТ и гугла, для примера - он почти всегда с тобой соглашается. "подтирает" тебе жопку, "ты такой хороший умный, ах как ты догадался итд..." а в ИТ работе эт зло в чистом виде
у Клода тож есть такая проблема, но она намного менее выраженна, и это обычно видно прям по чату \ тексту.
Лично мой выбор это - vscode + плаги Клода в авторежиме, привязанный к папке проекта
PS - не являюсь програмистом, являюсь сисадмином с сильно различным и достаточно большим (более 10+ лет) опытом поднятия всякой "фигни", в том числе из говна и палок и выпуска готовых решений из связки нескольких продуктов \ софта
И да - я не люблю ентерпрайз потому что он "медленный", неповоротливый и неудобный
Гемени, это вообще странная фигня.
Он сначала утверждал что утилиты 3 proxy не существует, потом он утверждал что нельзя настраивать на каком интерфейса слушать, а через какой Будут ходить клиенты, без изменения маршрутизации в самом линуксе. И только на пятой попытке оказалось что в конфиге можно указать интерфейсы где слушать и через какой ходить;)
всё работает нормально, если ты сам понимаешь как это ДОЛЖНО работать. как это спроектировать, что за чем должно идти итд...
- с этим согласен конечно, проблема в том что многие сейчас считают что можно просто вайбкодить не вникая, обесценивая реальный опыт, а еще есть руководство кампаний, которое не видит разницы.
у тебя банальная нехватка практического опыта
- здесь тоже согласен, т.к. столкнулся с ситуацией, когда мой код стал не готов к добавлению нового функционала, а потом я упрямо начал пытаться в srp, плохо понимая как достаточно разделить ответственность и какие именно компоненты нужны, на что потратил много времени, и моя работа перестала приносить быстрые результаты. И нет более старших колег, которые бы поставили бы наиболе точную формулировку конкретной узкой задачи, чтобы я сам пришел к правильному решению и не шел бы не верным путем, или так не бывает и я слишком многого хочу?). А у меня получается что я ответственен за все этапы разработки и задачи сам себе ставлю. В начале это казалось простором для развития, но нет.
Например было дело когда библиотека читающая excel файлы падала при чтении файлов на нескольких компьютерах пользователей из ~60+ чел, оказывается она подгружала всю информацию по шрифтам в системе, а в папке windows/fonts была скрытая папка mysql и у пользователя не было на неё прав, решалось через консоль. ChatGPT говорил что в windows/fonts не должно быть ничего кроме шрифтов, так что похоже на последствия работы какого-то вируса, а инициализировать данную библиотеку без подтягивания шрифтов сказал что нельзя.
Потом было ещё когда библиотека, которая проверяет обновления моего приложения и предлагает пользователю установку, оказывается тянула за собой MS WebView2, о чем я узнал только на одном компьютере пользователя с поломаной обновлением виндой и нигде об этом сказано не было, что библиотека тянет WebView2 и только Visual Studio в обзоре nuget пакета показал зависимости (наверно автор хотел добавить поддержку markdown для вывода changelog, но забил и никому не сказал).
Примерно так я узнал что лучше писать абстракции для таких внешних зависомостей, чтобы можно было их подменять и заменять.
проблема ГПТ и гугла, для примера - он почти всегда с тобой соглашается. "подтирает" тебе жопку, "ты такой хороший умный, ах как ты догадался итд..." а в ИТ работе эт зло в чистом виде
- здесь тоже согласен, бесит, по-этому я задаю один и тот же вопрос по-разному и иду гуглить сомнительные части из его ответа. Пришел к примерно такому подходу, пишу примерно как в математических учебниках ставится задача:
Дано:
- Примеры исходных данных, например типичное содержимое имен файлов.
Условия и ограничения входных данных:
- например максимальное количество обрабатываемых файлов.
Условия и ограничения применения решения:
- например сколько раз за сессию работы с приложением требуется применение данной обработки.
Задача: например группировка файлов документов по номерам документов.
Вопрос:
- подходит ли такая структура данных для задачи, например trie (префиксное дерево)
Затем внимательно читаю его ответ, спрашиваю по сомнительным местам, критикую и пытаюсь не располагать к определенному ответу из разряда: "ты плохо это сделал, переделай", заменяю на пирмерно "тут ты сделал так. Почему?" или "Я думаю лучше... Или я не прав?". Причем если вижу что он пишет чушь, то не припираюсь с ним, а возвращаюсь к своему промпту и корректирую с учетом его галюцинаций, которые я явно вижу. И по его изначальному развернутому ответу задаю отдельные вопросы в отдельных "ветках чата", собирая эти ветки в стек, каждую из которых можно вести отдельно дальше, (нажимаю "редактировать" свой промпт и меняю вопрос, ответы складываются в стопку, основной контекст не засирается), в конце боле-менее точно уже понятно что именно нужно и можно продолжить основной чат, снова отредактировав тот же промпт. Так вроде хоть как-то экономятся нервы, но долго, хотя часто лучше простого "загуглить". Но чем специфичнее, менее популярнее тема или библиотека и т.д., тем хуже конечно ответы.
Из полезного что прям хорошо может ГПТ, так это анализ огромных текстовых файлов (десятки миллионов символов и точно не знаю сейчас какой там предел) и изображений, например больших логов или har файлов для реверса, изучения api или помощь в настройке и починке линукса (хотя последенее не всегда хорошо, особенно с недостатком собственных знаний, но тут как и везде).
Да курсов же полно вы бери подходящий, Курсы они как раз для таких как ты. Работа уже есть и хочется расти. Там же есть у кого опыт перенимать. И не так что бы прям дорого.
Может быть можно найти качественный курс, но когда мне его проходить? На работе? У меня довольно неприятный график работы, такие себе условия для развития. Но это уже чуть другая история.
Есть что на примете, где посмотреть лучше?
VoidVolker, частично соглашусь. Большинство курсов - шлак, но нормальные тоже есть. Плюс курсов в том, что они достаточно понятно разжевывают базу, подают информацию структурированно и порционно. Некоторым людям просто не хватает самодисциплины, и при самостоятельном изучении материала они быстро забредают в дебри.
Да, а почему нет-то? Подходите к начальнику и говорите: "Я хочу повысить свою квалификацию для улучшения выполнения моих рабочих обязанностей. Что можете предложить? Или может самостоятельно что-то следует найти?". Нормальный работодатель всегда пойдёт навстречу, оплатит и выделит время.
У меня довольно неприятный график работы
Печально, понимаю, что поделать. Обязательно следите за здоровьем и режимом отдыха. И при первой возможности поменяйте график или работодателя.
Плюс курсов в том, что они достаточно понятно разжевывают базу, подают информацию структурированно и порционно.
Конечно, правильная структура и база важны. Увы, но этой логики часто не придерживаются продавцы курсов. База и структура свойственны курсам от ВУЗов и тех, кто хотя бы более-менее пытаются их копировать. А чаще просто бездумно надёрганные куски из разных источников и авторов. Ну, что поделать.
Простого ответа не будет.
ChatGPT меняется непрозрачно, сегодня 'нет', завтра почему бы и не 'да'.
Топовые модели ИИ сами по себе более чем компетентны в обучении (больше чем средний человек и не только в программировании).
Причина проблемы исходит из основного недостатка ИИ на основе gpt - отсутствие нормальной памяти. Представьте что у вас каждый день меняется преподаватель, оставляя друг другу короткие заметки вида: 1+2?; не понимает абстракции; повторить про сложности. И дай бог, у каждого будет один и тот же план обучения.
Теоретически,
все ваше обучение может вместиться в одно контекстное окно, на практике не советую вести с ИИ диалоги на десятки и сотни тысяч токенов,.. сформулировать сложно, что с моделью происходит в этом случае.. что то типа гиперакцентировании на контексте.
Вам нужен не чат с ИИ, а агентский цикл (agent или agentic loop, он есть наверное у всех крупных компаний, может и у openai, важно, с памятью, но это можно промптом доделать), с очень грамотно составленным системным промптом. В принципе в современном мире этот промпт - аналог приложения из мира до ИИ. Поищите готовый, напишите его сами, попросите составить такой промпт ИИ... может что то и получится. Но от него зависит качество результата полностью.