LLM-Driven Programming: О, правда?

Feb 26 2023
Как бы я ни хотел быть, я не академик компьютерных наук. Нисколько.

Как бы я ни хотел быть, я не академик компьютерных наук. Нисколько.

Хотя я пошел другим путем.

Я провожу большую часть своего дня за чтением, написанием, изменением и отладкой компьютерных программ вот уже 25 лет. За это время я получил техническое образование в области обработки данных, более 3 лет прослушал курс бакалавриата по информатике (до того, как бросил учебу на 4-м курсе, за семестр или около того до выпуска), а позже закончил аспирантуру в области науки о данных и больших данных, после получения степени бакалавра в области питания.

Готов поспорить, что за эти последние 25 лет я прочитал довольно много книг, статей, блогов и многого другого в честной попытке самообразования. Тем не менее, я чувствую себя настолько недостаточно образованным, чтобы высказывать мнения вне моей области знаний ⎼ т.е. разрабатывать программные системы для Интернета.

Вот почему я всегда ищу людей, которые знают лучше меня. Так что бесплатно в интернете я себя не смущаю. Это может быть не круто, но интеллектуально честно. Я возьму это.

Магистр права Хайп

В последнее время поднялась шумиха вокруг LLM (большие языковые модели, например GPT-3 ), особенно ChatGPT . Вы, должно быть, живете под скалой, если не слышали об этом. Эта штука есть везде. Люди сходят с ума по этому поводу. Некоторые любят, некоторые ненавидят, и все, что между ними, я думаю.

А вот и я.

Несмотря на то, что я получил аспирантуру в области науки о данных, я далек от того, чтобы стать экспертом в области LLM. Далеко-далеко. Даже не в поле зрения человеческих глаз. Так что мои мысли об этом основаны на моих многолетних наблюдениях и значительной доле реального опыта инженера-программиста. Возьмите это с недоверием.

Что я об этом думаю?

Я думаю, что это может быть удобным инструментом в вашем наборе инструментов программиста. Имейте это там, как у вас есть Google и Stack Overflow. Вот и все. Просто как тот.

https://commoncog.com/content/images/2018/12/Paper.Commonplace.37.png

Я имею в виду, позвольте мне подробнее остановиться на этом утверждении.

Когда я впервые занялся программированием, мне приходилось покупать книги и журналы или брать их в школьных и публичных библиотеках; Кроме того, у меня был хороший приятель на работе, который многому меня научил о Clipper , вот и все. Затем я обнаружил дискуссионные онлайн-форумы (например, GUJ ). А потом я узнал о собраниях групп пользователей (например, SouJava ) и посетил их. А потом были Stack Overflow, GitHub и изобилие технического контента в Интернете — вы понимаете, о чем я говорю, просто погуглите что-нибудь о самом эзотерическом языке программирования, и вот оно.

Эти вещи не исключали друг друга, они складывались друг с другом, как кирпичи в здании. Или лучше сказать небоскреб? Иди разберись.

В любом случае, я думаю, что я пытаюсь сказать, что, хотя я могу искать что-либо в Stack Overflow (или, скорее, в Google, а затем указать и щелкнуть), читать блоги, смотреть всевозможные интересные выступления на YouTube. , и так далее и тому подобное, я до сих пор покупаю книги и читаю их. Одно не исключает другого.

То же самое относится и к инструментам LLM.

Будьте программистом в первую очередь в сфере образования

Я хотел бы отметить здесь: я твердо верю в «качественное» образование. И под этим я подразумеваю посещение формальных университетских курсов и чтение «плотских» книг.

Я знаю, что это не популярное мнение в наши дни, когда все буткемпы, короткие видеокурсы и наноконтент активно рекламируются, как будто это пенициллин 21-го века, но, честно говоря, мне наплевать. Закрепление знаний, прошедших проверку временем, требует качественного образования. Так что не торопитесь, выполняйте тяжелую работу, пройдите краткое руководство и получите образование самостоятельно.

Имейте в виду, что даже с поверхностными знаниями вы даже не сможете определить, является ли ответ переполнения стека правильным или неправильным; и если это правильно, и если это работает так, как ожидалось, то почему. И в этом случае, что бы вы сделали, если бы это не сработало? Метод проб и ошибок до тошноты , верно? Что приводит нас к неоспоримому факту.

Никто не любит этого парня/девушку в офисе, который все время задает вопросы и хочет, чтобы каждая часть информации была пережевана, чтобы просто проглотить ее, не вспотев. Я, конечно, нет.

Позвольте мне сказать вам: программирование, основанное на копировании и вставке, существует уже довольно давно , по крайней мере, с тех пор, как мы смогли найти возможные решения для большинства вычислительных задач, которые мы ищем в Интернете. В этом нет ничего нового. Люди занимаются этим уже много веков. Намного больше после появления программного обеспечения с открытым исходным кодом и мощных поисковых систем. И нет ничего плохого в копировании и вставке кода из Интернета. Ничего. Ну, по крайней мере, пока это не произойдет.

В конце концов, мы можем копировать и вставлять небольшие фрагменты кода здесь и там, примеры использования API, с которыми мы не очень хорошо знакомы, или которые мы еще не использовали, или которые мы быстро начинаем. Мы все это делали и будем делать. (Regex? Cron? Да, я вас чувствую.) Однако, если у нас нет прочной базы в области программирования и разработки программного обеспечения, если мы не потратим время на то, чтобы понять, что мы делаем, мы в конечном итоге окажемся в разочаровании. цикл проб и ошибок. Хуже того, ребята, мы в конечном итоге примем трудно обнаруживаемые ошибки, проблемы с производительностью и уязвимости безопасности в нашем программном обеспечении, которое, кстати, в большинстве случаев является даже не нашим программным обеспечением, а программным обеспечением наших работодателей. Подумайте об этом на секунду.

В разработке программного обеспечения есть гораздо больше, чем написание SQL-запроса, или создание конечной точки API, или вызов удаленной службы из мобильного приложения, или кодирование поиска в глубину. Полное программное решение состоит из гораздо большего. Программная инженерия как область деятельности — это то, что касается этого. Следовательно, моя точка зрения здесь такова: если вы не знаете, о чем спрашивать, какие ответы, по вашему мнению, вы получите? И сможете ли вы разглядеть правильный ответ для вашего конкретного случая?

Как говорится, мусор на входе, мусор на выходе

Когда вы читаете ответы на Stack Overflow, вам лучше быть совершенно уверенным в том, что вы ищете, чтобы быть достаточно настойчивым ⎼ заметьте, там тоже много нежелательного контента; и на них нет ярлыка "мусор". Затем вы должны принять во внимание весь контекст исходного вопроса и предоставленных ответов, пропуская мусор здесь и там, прежде чем вы сможете принять решение скопировать и вставить какой-либо фрагмент кода как есть или написать свое собственное решение на основе встроенного знание ⎼ например, конкретная проблема, которую вы пытаетесь решить, имеет свои конкретные пограничные случаи. И именно это снова и снова будет прибавлять вам знаний.

Видишь, куда мы идем? Видите мою точку зрения здесь? Видите, как ChatGPT может быть ловушкой? Вы спрашиваете его, вы получаете ответ. Ответ настолько уверенный, что, если у вас нет глубоких и глубоких знаний в области программирования, вы покупаете абсолютную чушь, даже не подозревая об этом. Я видел довольно много подобного у друзей в Твиттере и еще где-то. Даже с широко известными алгоритмами.

Таким образом, это «гораздо больше» — это то, о чем мы должны заботиться (помимо основ) и на чем мы должны сосредоточиться (при условии, что у нас есть основы). Что подводит нас к другому беспощадному факту.

Мы не знаем, чего мы не знаем. И единственное, что мы можем с этим поделать, — это приобретать новые знания снова и снова ⎼ сначала в широком смысле , во вторую — в глубине .

Основы архитектуры программного обеспечения, Марк Ричардс и Нил Форд

Таким образом, мы надеемся, мы будем знать, что мы ищем, и, по крайней мере, получим представление об ответе, когда найдем его.

- Широкие знания дают нам направление для поиска ответов;
- Глубокие знания помогают нам различать среди найденных ответов.

Хорошо. Прохладный. Но как мы это делаем?

Для расширения ваших знаний о том, что нужно знать, я думаю, что блоги и видео на YouTube отлично подходят. Это короткий контент, который вы можете потреблять ежедневно, не задумываясь. Но для глубоких твердых знаний , на мой взгляд (N=1), нет ничего лучше чтения книг и официальной документации. И если вы можете, если вы еще этого не сделали, найдите себе место (физически или онлайн) на университетском курсе (выпускнике или аспирантуре соответственно).

Опять же, не популярное мнение. Но я сам не популярен, так что кого это волнует?

Входит в инструменты LLM

Тем не менее, у меня есть несколько непопулярных мнений, я думаю, что это станет хитом парада: LLM может быть отличным инструментом, который поможет вам получить твердые знания. Как так? Я скажу вам, как.

Начните с того, что спросите у ChatGPT, что нужно знать, скажем, о разработке мобильных приложений. Затем попросите короткие учебные пособия и видео на YouTube, чтобы получить общую картину. Затем попросите настоятельно рекомендуемые книги и лекции об этом. Потому что в конечном итоге вы хотите прочитать несколько глубоких статей от разных авторов с разными точками зрения, чтобы получить четкое представление об изучаемой теме.

Это с одной стороны. Еще одна вещь, которая может быть полезна, — это когда вы читаете книгу и застреваете из-за отсутствия знаний по заданному предмету. Попросите ChatGPT резюмировать указанную тему для вас, чтобы вы получили базу, прежде чем двигаться дальше. То же самое, что вы сделали бы с Google, читая один или два источника, но быстро и точно по делу. Тем не менее, после этого продолжайте и углубитесь в указанный предмет, если это что-то важное для общего предмета, который вы изучаете. Это нормально.

И еще одно обстоятельство, которое может быть очень полезным, заключается в том, что, когда вы собираетесь разрабатывать программное приложение для данной области, вы не слишком хорошо знакомы со всеми входами и выходами. Я видел это на днях и нашел это довольно умным.

Допустим, вы собираетесь разработать мобильное приложение для фитнеса, потому что вы увлекаетесь фитнесом и очень увлечены идеей помогать людям становиться здоровыми и все такое. Хорошо. Но вы не знаете обо всех существующих приложениях, их самых любимых функциях, способах их монетизации и т. д. Это очень объективные вопросы. Таким образом, вы можете задать эти вопросы ChatGPT, чтобы быстро начать работу. Вы спрашиваете о требованиях к приложению. Вы просите его, например, написать приветственное письмо, которое вы собираетесь отправить новым подписчикам вашего замечательного фитнес-приложения, потому что вы не особенно хороши в этом. Верно. Что теперь? Если вы поняли, о чем я говорил до этого момента, у вас уже есть хорошее представление о том, что вам следует делать дальше. Вы улучшаете его, вы делаете его лучше, вы добавляете свой особый соус. Другими словами, сломать инерцию, что, возможно, является самым важным в данном случае, затем сделайте его особенно особенным ⎼ иначе все, что у вас будет, это обычные вещи, которые можно продать. Не круто, наверное.

Если у вас есть доступ к GitHub Copilot , и вы не повредите использовать его в своей работе, вы можете попросить его создать для вас фрагменты кода, такие как метод анализа файла, повторяющийся тестовый пример или что-то еще. Вы знаете, те скучные вещи, которые вам приходится делать время от времени, и которых нельзя полностью избежать с помощью правильного дизайна кода и умных библиотек. В этом нет ничего плохого. Вы не получите дополнительные баллы, если не сделаете этого ⎼ до тех пор, пока в месте, где вы работаете, не действуют правила.

Имейте в виду, что может быть много других подобных приложений. Подумай об этом.

О, подожди. Я подумал о наибольшей пользе, которую это могло бы нам принести: знаете ли вы тех парней, которые любят писать на форумах, спрашивая решения своих школьных заданий? Например, вы знаете, вы читаете вопрос, и это почти буквальное утверждение о присваивании. Вы, наверное, видели это раньше. Да, теперь они могут попросить об этом ChatGPT и оставить нас в покое. Все этому рады.

Заменит ли LLM программистов?

Нет, я так не думаю. Я очень скептически отношусь к тому, что «Х заменит людей-программистов» . С тех пор, как я начал заниматься программированием в 1997 году, я уже много слышал о подобных причудах.

Скорее всего, это изменит то, как мы получаем образование в области программирования, как мы преодолеваем блоки, когда застреваем во время программирования, как мы справляемся со скучными вещами, но заменим нас, гомо сапиенс, на нечто большее, чем CRUD и обыденные широко известные приложения, нет, я очень скептически к этому отношусь. Хотя я могу ошибаться.

И знайте, наконец, эта статья завершает круг тем, что побудило меня написать ее.

Вчера я имел удовольствие наткнуться на замечательную статью Эми Дж. Ко , которую было очень приятно читать. Во-первых, потому что я согласен практически со всем, что она там написала. Во-вторых, потому что, в отличие от меня, она академик и занимается этой тематикой более десяти лет. Так что у нее определенно есть кое-что, что можно обсудить во всей этой дискуссии, не смущая себя.

Так что сделайте себе одолжение, избавьтесь от шумихи и прочитайте эти выдающиеся статьи, чтобы лучше понять тему с разных точек зрения:

- Большие языковые модели изменят программирование... немного
- Большие языковые модели изменят программирование... сильно

нет TLDR; там. Не торопитесь, наслаждайтесь поездкой.

Теперь, чтобы закончить эту длинную часть забавной вещью: я привык наблюдать, как люди все время высмеивают ученых, говоря, что академические круги далеки от реальной разработки программного обеспечения, а затем, внезапно, люди удивляются и сходят с ума по этому поводу. вещь, воплощенная в жизнь прямо из научных исследований. Какая большая ирония. Какое хорошее время, чтобы быть академиком.

В любом случае, увидимся в следующий раз, ребята.

Будьте осторожны с хайпом.

⛧ См. также на сайте leandrosilva.com.br . Там гораздо больше .