Programowanie oparte na LLM: Och, naprawdę?
Choć bardzo bym chciał, nie jestem informatykiem. Zupełnie nie.
Poszedłem jednak inną drogą.
Spędzam dużą część moich dni na czytaniu, pisaniu, zmienianiu i debugowaniu programów komputerowych od 25 lat. W tym czasie uzyskałem stopień techniczny w dziedzinie przetwarzania danych, studiowałem informatykę przez ponad 3 lata (przed wypadnięciem na 4. roku, mniej więcej semestr przed ukończeniem studiów), a później kontynuowałem studia podyplomowe w dziedzinie Data Science & Big Data, po uzyskaniu tytułu licencjata w dziedzinie żywienia.
Możesz się założyć, że w ciągu tych ostatnich 25 lat przeczytałem sporo książek, artykułów, blogów i tak dalej, uczciwie starając się edukować. Mimo to czuję się zbyt słabo wykształcony, aby oferować opinie spoza mojej specjalizacji ⎼, tj. architektury systemów oprogramowania dla Internetu.
Dlatego zawsze szukam ludzi, którzy wiedzą lepiej ode mnie. Więc nie ośmieszam się za darmo w internecie. Może to nie jest fajne, ale intelektualnie uczciwe. Wezmę to.
Hype LLM
Ostatnio zrobiło się głośno na temat LLM (duże modele językowe, np. GPT-3 ), zwłaszcza ChatGPT . Musiałeś mieszkać pod kamieniem, skoro o tym nie słyszałeś. Ta rzecz jest wszędzie. Ludzie wariują na ten temat. Trochę miłości, trochę nienawiści i chyba wszystko pomiędzy.
Oto jestem.
Mimo, że ukończyłem studia podyplomowe z dziedziny data science, daleko mi do bycia ekspertem w LLM. Daleko daleko stąd. Nawet w oczach ludzkich. Więc moje przemyślenia na ten temat opierają się na moich obserwacjach na przestrzeni lat i sporej części rzeczywistego doświadczenia jako inżynier oprogramowania. Dodaj szczyptę soli.
Co o tym myślę?
Myślę, że może to być przydatne narzędzie w przyborniku programisty. Miej to tam, tak jak masz Google i Stack Overflow. Otóż to. Proste.
To znaczy, pozwólcie, że rozwinę trochę więcej tego twierdzenia.
Kiedy po raz pierwszy zająłem się programowaniem, musiałem kupować książki i czasopisma lub wypożyczać je z bibliotek szkolnych i publicznych; Poza tym miałem w pracy dobrego kumpla, który wiele mnie nauczył o Clipperze i to wszystko. Potem odkryłem internetowe fora dyskusyjne (np. GUJ ). A potem dowiedziałem się i uczestniczyłem w spotkaniach grup użytkowników (np. SouJava ). A potem był Stack Overflow, GitHub i mnóstwo treści technicznych w całym Internecie ⎼ wiesz o czym mówię, po prostu Google cokolwiek o najbardziej ezoterycznym języku programowania i masz to.
Te rzeczy nie wykluczały się wzajemnie, dodawały się do siebie jak cegły w budynku. A może powinienem powiedzieć wieżowiec? Domyśl.
W każdym razie, myślę, że próbuję powiedzieć, że chociaż jestem w stanie wyszukać wszystko w Stack Overflow (a raczej w Google, a następnie wskazać i kliknąć), czytać blogi, oglądać wszelkiego rodzaju interesujące rozmowy na YouTube , i tak dalej, i tak dalej, wciąż kupuję książki i czytam je. Jedno nie wyklucza drugiego.
To samo dotyczy narzędzi LLM.
Zostań programistą nastawionym na edukację
Chciałbym tu zaznaczyć: jestem zdecydowanym zwolennikiem edukacji „jakościowej”. Mam na myśli uczęszczanie na oficjalne kursy uniwersyteckie i czytanie „mięsnych” książek.
Wiem, że nie jest to popularna opinia w dzisiejszych czasach, kiedy wszystkie bootcampy, szybkie kursy wideo i treści nano są mocno reklamowane, jakby były penicyliną XXI wieku, ale szczerze mówiąc, nie obchodzi mnie to. Ugruntowanie wiedzy, która przechodzi próbę czasu, wymaga solidnej edukacji. Więc nie spiesz się, wykonaj ciężką pracę, omiń krótki samouczek i sam się wykształc.
Pamiętaj, że przy powierzchownej wiedzy możesz nawet nie być w stanie stwierdzić, czy odpowiedź przepełnienia stosu jest poprawna, czy błędna; a jeśli to jest właściwe i jeśli działa zgodnie z oczekiwaniami, dlaczego tak jest. A w tym przypadku, co byś zrobił, gdyby to nie zadziałało? Metoda prób i błędów do znudzenia , prawda? Co prowadzi nas do niezaprzeczalnego faktu.
Nikt nie lubi tego faceta/dziewczyny w biurze, który cały czas zadaje pytania i chce przeżuć każdą informację, aby po prostu ją przełknąć bez konieczności upuszczania potu. Ja na pewno nie.
Powiem wam: programowanie oparte na kopiowaniu i wklejaniu jest czymś od dłuższego czasu , przynajmniej odkąd mogliśmy znaleźć potencjalne rozwiązania większości problemów komputerowych, które przeszukujemy w Internecie. To nic nowego. Ludzie robią to od wieków. Znacznie więcej po pojawieniu się oprogramowania open source i potężnych wyszukiwarek. I nie ma nic złego w kopiowaniu i wklejaniu kodu z Internetu. Nic. Cóż, przynajmniej do czasu.
W końcu możemy kopiować i wklejać małe fragmenty kodu tu i tam, przykładowe zastosowania interfejsów API, których nie znamy lub których jeszcze nie używaliśmy, lub które dopiero zaczynamy. Wszyscy to robiliśmy i nadal będziemy to robić. (Regex? Cron? Tak, czuję to.) Jeśli jednak nie mamy solidnych podstaw w zakresie programowania i projektowania oprogramowania, jeśli nie poświęcimy czasu na zrozumienie tego, co robimy, skończy się to frustrującym pętla prób i błędów. Co gorsza, w końcu wprowadzimy trudne do znalezienia błędy, problemy z wydajnością i luki w zabezpieczeniach w naszym oprogramowaniu ⎼, które, nawiasem mówiąc, przez większość czasu nie jest nawet naszym oprogramowaniem, ale oprogramowaniem naszych pracodawców. Pomyśl o tym przez chwilę.
Tworzenie oprogramowania to znacznie więcej niż pisanie zapytania SQL, budowanie punktu końcowego interfejsu API, wywoływanie usługi zdalnej z aplikacji mobilnej lub kodowanie wyszukiwania w głąb. Kompletne oprogramowanie składa się z dużo więcej. Inżynieria oprogramowania, jako dziedzina, jest tym, co jest zaniepokojone. Chodzi mi o to, że jeśli nie wiesz, o co pytać, jak myślisz, jakie odpowiedzi otrzymasz? I czy będziesz w stanie znaleźć właściwą odpowiedź w swoim konkretnym przypadku?
Kiedy czytasz odpowiedzi na Stack Overflow, lepiej bądź pewien, czego szukasz, aby być w miarę asertywnym ⎼ pamiętaj, że jest tam też dużo śmieciowej treści; i nie mają etykiety „śmieci”. Następnie musisz wziąć pod uwagę cały kontekst pierwotnego pytania i udzielonych odpowiedzi, pomijając śmieci tu i tam, zanim będziesz mógł podjąć decyzję o skopiowaniu i wklejeniu fragmentu kodu w obecnej postaci lub napisaniu własnego rozwiązania w oparciu o wbudowany wiedza ⎼ np. konkretny problem, który próbujesz rozwiązać, ma swoje szczególne przypadki brzegowe. I to właśnie, w kółko, doda ci wiedzy.
Widzisz, dokąd idziemy? Widzisz mój punkt widzenia? Widzisz, jak ChatGPT może być pułapką? Pytasz o to, dostajesz odpowiedź. Odpowiedź tak pewna, że jeśli nie masz szerokiej i solidnej wiedzy o programowaniu, kupujesz absolutne końskie gówno, nawet o tym nie wiedząc. Widziałem całkiem sporo tego z przyjaciółmi na Twitterze i tak dalej. Nawet z powszechnie znanymi algorytmami.
Jako takie, to „znacznie więcej” jest tym, na czym powinniśmy się troszczyć (poza podstawami) i na czym musimy się skupić (pod warunkiem, że mamy podstawy). Co prowadzi nas do kolejnego bezlitosnego faktu.
Nie wiemy, czego nie wiemy. I jedyne, co możemy z tym zrobić, to zdobywać nową wiedzę, raz za razem ⎼ najpierw szeroka , potem głęboka .
W ten sposób, miejmy nadzieję, będziemy wiedzieć, czego szukamy i przynajmniej pojmiemy odpowiedź, gdy ją znajdziemy.
- Szeroka wiedza wyznacza nam kierunek poszukiwania odpowiedzi;
- Głęboka wiedza pomaga nam rozeznawać wśród znalezionych odpowiedzi.
Dobra. Fajny. Ale jak to zrobić?
Uważam, że blogi i filmy na YouTube są świetne, jeśli chodzi o poszerzanie wiedzy o tym, co warto wiedzieć. Są to krótkie treści, które możesz spożywać na co dzień bez potu. Ale dla głębokiej, solidnej wiedzy , moim zdaniem (N=1), nie ma nic lepszego niż czytanie książek i oficjalnych dokumentów. A jeśli możesz, jeśli jeszcze tego nie zrobiłeś, zdobądź miejsce (fizyczne lub online) na kursie uniwersyteckim (odpowiednio dla absolwentów lub studiów podyplomowych).
Znowu nie jest to popularna opinia. Ale sam nie jestem popularny, więc kogo to obchodzi?
Wprowadza narzędzia LLM
Niemniej jednak mam kilka niepopularnych opinii, myślę, że ta trafi na paradę: LLM może być niesamowitym narzędziem, które pomoże ci zdobyć solidną wiedzę. W jaki sposób? Powiem ci jak.
Zacznij od zapytania ChatGPT, co należy wiedzieć o, powiedzmy, tworzeniu aplikacji mobilnych. Następnie poproś o krótkie samouczki i filmy na YouTube, aby uzyskać pełny obraz. Następnie poproś o polecane książki i wykłady na ten temat. Ponieważ ostatecznie chcesz przeczytać kilka głębokich artykułów różnych autorów, z różnymi punktami widzenia, aby uzyskać solidne zrozumienie tematu, który studiujesz.
To z jednej strony. Inną rzeczą, która może być pomocna, jest sytuacja, gdy czytasz książkę i utkniesz z powodu braku wiedzy na dany wymagany temat. Poproś ChatGPT o podsumowanie wspomnianego tematu, abyś miał bazę przed kontynuowaniem. To samo, co zrobiłbyś z Google, czytając jedno lub dwa źródła, ale szybko i od razu do rzeczy. Jednak potem śmiało zagłębiaj się we wspomniany temat, jeśli jest to coś ważnego dla ogólnej materii, którą studiujesz. Możesz to zrobić.
A jeszcze inną okolicznością, która może być bardzo pomocna, jest to, że gdy masz zamiar opracować aplikację dla danej domeny, nie jesteś zbyt zaznajomiony ze wszystkimi tajnikami. Widziałem to któregoś dnia i uznałem to za całkiem sprytne.
Załóżmy, że zamierzasz opracować mobilną aplikację fitness, ponieważ interesujesz się fitnessem i jesteś bardzo podekscytowany pomysłem pomagania ludziom w utrzymaniu zdrowia i wszystkim innym. Dobra. Ale nie znasz wszystkich dostępnych aplikacji, ich najbardziej lubianych funkcji, sposobu zarabiania itp. To są bardzo obiektywne pytania. Możesz więc zadać te pytania ChatGPT, aby szybko zacząć. Pytasz o wymagania aplikacji. Prosisz go, aby na przykład napisał powitalny e-mail, który wyślesz do nowych subskrybentów Twojej niesamowitej aplikacji fitness, ponieważ nie jesteś w tym szczególnie dobry. Prawidłowy. Co teraz? Jeśli zrozumiałeś, o czym mówiłem do tego momentu, już wiesz, co powinieneś zrobić dalej. Ulepszasz to, czynisz to lepszym, nakładasz swój specjalny sos. Innymi słowy, przełamać bezwładność, co jest prawdopodobnie najważniejszą rzeczą w tym przypadku, a następnie uczyń go szczególnie wyjątkowym ⎼ w przeciwnym razie wszystko, co będziesz mieć, to zwykłe rzeczy do wyprzedania. Chyba nie fajne.
Jeśli uzyskasz dostęp do GitHub Copilot i korzystanie z niego w pracy nie zaszkodzi, możesz poprosić go o przysłanie fragmentów kodu, takich jak metoda analizowania pliku, powtarzalny przypadek testowy lub cokolwiek innego. Wiesz, te nudne rzeczy, które musisz robić od czasu do czasu i których nie można w pełni uniknąć dzięki odpowiedniemu projektowi kodu i inteligentnym bibliotekom. Nic w tym złego. Jeśli tego nie zrobisz, nie otrzymasz dodatkowych punktów ⎼, o ile w miejscu pracy nie obowiązują żadne zasady.
Pamiętaj, że może istnieć wiele innych podobnych aplikacji. Pomyśl o tym.
Zaczekaj. Pomyślałem o największej korzyści, jaką może nam to przynieść: Czy znasz tych facetów, którzy lubią pisać na forach, prosząc o rozwiązania swoich zadań szkolnych? Wiesz, czytasz pytanie i jest to prawie dosłowne przypisanie. Pewnie już to widzieliście. Tak, teraz mogą poprosić o to ChatGPT i zostawić nas w spokoju. Wszyscy są z tego powodu szczęśliwi.
Czy LLM zastąpi ludzkich programistów?
Nie. Nie sądzę. Jestem bardzo sceptycznie nastawiony do tego, że „X zastąpi ludzkich programistów” . Odkąd zacząłem programować w 1997 roku, słyszałem już sporo o takich modach.
Prawdopodobnie zmieni sposób, w jaki uczymy się programowania, jak pokonujemy blokady, gdy utkniemy w trakcie programowania, jak radzimy sobie z nudnymi rzeczami, ale zastępuje nas, homo sapiens, czymś więcej niż CRUD i powszechnie znanymi aplikacjami, nie, ja bardzo sceptycznie do tego podchodzę. chociaż mogę się mylić.
I wiedz, w końcu, ten artykuł zatacza koło z tym, co zmotywowało mnie do napisania go.
Wczoraj miałam przyjemność natknąć się na niesamowity artykuł Amy J. Ko , który czytało się z prawdziwą przyjemnością. Po pierwsze dlatego, że zgadzam się w większości ze wszystkim, co tam napisała. Po drugie, ponieważ w przeciwieństwie do mnie jest naukowcem i zajmuje się tą tematyką od ponad dekady. Więc zdecydowanie ma jedną lub dwie rzeczy do współpracy w całej tej dyskusji bez zawstydzenia siebie.
Więc zrób sobie przysługę, przełam szum i przeczytaj te wyjątkowe artykuły, aby lepiej zrozumieć temat z różnych punktów widzenia:
- Duże modele językowe zmienią programowanie… trochę
- Duże modele językowe zmienią programowanie… bardzo
Nie ma TLDR; Tam. Nie spiesz się, ciesz się jazdą.
A teraz, aby zakończyć ten długi artykuł zabawną rzeczą: obserwowałem, jak ludzie cały czas naśmiewają się z naukowców, mówiąc, że środowisko akademickie jest daleko od rozwoju oprogramowania w świecie rzeczywistym, a potem nagle ludzie są zdumieni i wariują na temat rzecz powołana do życia prosto z badań akademickich. Cóż za wielka ironia. Cóż za dobry czas na bycie naukowcem.
W każdym razie, do zobaczenia następnym razem, ludzie.
Uważaj na hype.
⛧ Zobacz także na stronie leandrosilva.com.br . Jest tam dużo więcej .

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































