LLM Odaklı Programlama: Oh, gerçekten mi?

Feb 26 2023
Ne kadar olmak istesem de bilgisayar bilimleri akademisyeni değilim. Hiç de bile.

Ne kadar olmak istesem de bilgisayar bilimleri akademisyeni değilim. Hiç de bile.

Yine de farklı bir yol izledim.

25 yıldır günlerimin büyük bir bölümünü bilgisayar programlarını okuyarak, yazarak, değiştirerek ve hata ayıklayarak geçiriyorum. Bu süre zarfında, Veri İşleme alanında teknik bir derece kazandım, 3 yıldan fazla bir süre Bilgisayar Bilimleri lisans kursuna gittim (4. yılda okulu bırakmadan önce, mezun olmadan bir sömestr kadar önce) ve daha sonra takip etmeye başladım. Beslenme alanında lisans derecesi kazandıktan sonra Veri Bilimi ve Büyük Veri alanında yüksek lisans derecesi.

Son 25 yılda, kendimi eğitmek için dürüst bir çabayla epeyce kitap, makale, blog ve benzeri şeyler okuduğuma bahse girersiniz. Yine de, uzmanlık alanım dışında, yani İnternet için yazılım sistemleri tasarlamak gibi fikirler sunamayacak kadar eğitimsiz hissediyorum.

Bu yüzden her zaman benden daha iyi bilen insanlar ararım. Bu yüzden internette bedavaya kendimi rezil etmiyorum. Havalı olmayabilir ama entelektüel olarak dürüst. Onu alacağım.

LLM Heyecanı

Son zamanlarda LLM (büyük dil modelleri, örneğin GPT-3 ), özellikle ChatGPT konusunda bir abartı var . Bunu duymadığına göre bir kayanın altında yaşıyor olmalısın. Bu şey her yerde. İnsanlar bu konuda kafa karıştırıyor. Biraz sevmek, biraz nefret etmek ve aradaki her şey sanırım.

İşte buradayım.

Veri bilimi alanında yüksek lisans yapmış olmama rağmen LLM konusunda uzman olmaktan çok uzaktayım. Çok çok uzak. İnsan gözünün gözünde bile değil. Bu yüzden onun hakkındaki düşüncelerim, yıllar boyunca gözlemlerime ve bir yazılım mühendisi olarak gerçek dünya deneyiminin adil bir payına dayanıyor. Bir tuz tanesi ile al.

Bu konuda ne düşünüyorum?

Programcı araç kutunuzda kullanışlı bir araç olabileceğini düşünüyorum. Google ve Stack Overflow'a sahip olduğunuz gibi orada bulundurun. Bu kadar. Bu kadar basit.

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

Yani bu iddiayı biraz daha açayım.

Programlamaya ilk başladığımda, kitap ve dergi satın almam veya okuldan ve halk kütüphanelerinden ödünç almam gerekiyordu; ayrıca iş yerinde bana Clipper hakkında çok şey öğreten iyi bir arkadaşım vardı ve o kadardı. Sonra çevrimiçi tartışma forumlarını keşfettim (örn. GUJ ). Ve sonra kullanıcı grupları toplantıları hakkında bilgi sahibi oldum ve katıldım (örn. SouJava ). Ve sonra Stack Overflow, GitHub oldu ve İnternet'in her yerinde çok sayıda teknik içerik var ⎼ neden bahsettiğimi biliyorsunuz, sadece Google, en ezoterik programlama dili hakkında ne olursa olsun ve işte karşınızda.

Bunlar birbirini dışlayan şeyler değildi, bir binanın tuğlaları gibi birbirinin üzerine ekliyorlardı. Yoksa gökdelen mi demeliydim? Şekil git.

Her neyse, sanırım söylemeye çalıştığım şey, Stack Overflow'ta (veya daha doğrusu Google'da ve sonra işaretle ve tıklayın) herhangi bir şey arayabilmeme rağmen, blogları okuyabiliyor, YouTube'da her türlü ilginç konuşmayı izleyebiliyorum. , vb., hala kitap alıyorum ve okuyorum. Bir şey diğerini dışlamaz.

Aynı şey LLM araçları için de geçerlidir.

Önce Eğitim Programcısı Olun

Burada bir noktaya değinmek istiyorum: Ben “kaliteli” eğitime inananlardanım. Ve bununla, resmi üniversite kurslarına katılmayı ve "etli" kitaplar okumayı kastediyorum.

Bugünlerde popüler bir fikir olmadığını biliyorum, tüm eğitim kampları, hızlı video kursları ve nano içerikler sanki 21. yüzyılın penisilinleriymiş gibi yoğun bir şekilde reklamı yapılıyor, ama dürüst olmak gerekirse umurumda değil. Zaman testinden geçen bilgiyi sağlamlaştırmak, güçlü bir eğitim gerektirir. Bu yüzden acele etmeyin, sıkı çalışın, hızlı öğreticiyi geçin ve kendinizi eğitin.

Yalnızca yüzeysel bilgiyle bir Yığın Taşması yanıtının doğru mu yanlış mı olduğunu ayırt edemeyebileceğinizi unutmayın; ve eğer doğruysa ve beklendiği gibi çalışıyorsa neden çalışıyor. Ve bu durumda, işe yaramazsa ne yapardınız? Deneme yanılma reklamı mide bulandırıcı , değil mi? Bu da bizi tartışılmaz bir gerçeğe getiriyor.

Hiç kimse ofiste sürekli soru soran ve ter dökmek zorunda kalmadan her bilgiyi yutmak için çiğnenmek isteyen o adamdan/kızdan hoşlanmaz. Kesinlikle istemiyorum.

Size şunu söyleyeyim: kopyala-yapıştır odaklı programlama , en azından İnternet üzerinden araştırdığımız çoğu bilgi işlem sorunu için aday çözümler bulabildiğimizden beri oldukça uzun bir süredir bir şey olmuştur . Bu yeni bir şey değil. İnsanlar bu işi yıllardır yapıyor. Açık kaynaklı yazılımların ve güçlü arama motorlarının ortaya çıkışından sonra çok daha fazlası. Ve internetten kodu kopyala ve yapıştır ile yanlış bir şey yoktur. Hiç bir şey. En azından yapana kadar.

Ne de olsa, küçük kod parçacıklarını buraya kopyalayıp yapıştırabiliriz, çok fazla aşina olmadığımız veya henüz kullanmadığımız veya hızlı bir başlangıç ​​yaptığımız API'lerin örnek kullanımları. Hepimiz bunu yaptık ve yapmaya devam edeceğiz. (Regex? Cron? Evet, seni anlıyorum.) Ancak, programlama ve yazılım tasarımı konusunda sağlam bir temele sahip olmazsak, ne yaptığımızı anlamak için zaman ayırmazsak, hüsrana uğrarız. deneme yanılma döngüsü. Daha da kötüsü, millet, sonunda yazılımımızda bulunması zor hatalar, performans sorunları ve güvenlik açıkları ortaya çıkaracağız ⎼ ki bu arada, çoğu zaman bizim yazılımımız bile değil, işverenlerimizin yazılımıdır. Bunu bir saniyeliğine düşün.

Yazılım geliştirmede, bir SQL sorgusu yazmaktan veya bir API uç noktası oluşturmaktan veya bir mobil uygulamadan uzak bir hizmeti çağırmaktan veya derinlemesine aramayı kodlamaktan çok daha fazlası vardır. Eksiksiz bir yazılım çözümü bundan çok daha fazlasını içerir. Yazılım mühendisliği, bir alan olarak, bununla ilgili olan şeydir. Demek istediğim, ne soracağınızı bilmiyorsanız, ne tür cevaplar alacağınızı düşünüyorsunuz? Ve özel durumunuz için doğru cevabı ayırt edebilecek misiniz?

Söylendiği gibi, Çöp içeri, çöp dışarı

Stack Overflow'taki yanıtları okurken, makul ölçüde iddialı olmak için ne aradığınızdan oldukça emin olsanız iyi olur ⎼ orada da pek çok önemsiz içerik var, dikkat edin; ve “çöp” etiketiyle gelmiyorlar. Ardından, bazı kod parçacıklarını olduğu gibi kopyalayıp yapıştırmaya karar vermeden veya yerleşik kod parçacığını temel alarak kendi çözümünüzü yazmadan önce, orijinal sorunun tüm bağlamını ve verilen yanıtları hesaba katmalı, orada burada çöpleri atlamalısınız. bilgi ⎼ örneğin, çözmeye çalıştığınız spesifik problemin kendine has son durumları vardır. Ve bu şey, tekrar tekrar sana bilgi katacak.

Nereye gittiğimizi görüyor musun? Buradaki amacımı görüyor musun? ChatGPT'nin nasıl bir tuzak olabileceğini gördünüz mü? Soruyorsun, cevap alıyorsun. O kadar kendinden emin bir cevap ki, geniş ve sağlam bir programlama bilginiz yoksa, farkında bile olmadan mutlak saçmalık satın alırsınız. Twitter'da arkadaşlarımla falan pek çok şey gördüm. Yaygın olarak bilinen algoritmalarla bile.

Bu nedenle, bu "çok daha fazlası" önemsememiz gereken (temellerin yanı sıra) ve odaklanmamız gereken şeydir (temelleri yerine getirmemiz şartıyla). Bu da bizi başka bir acımasız gerçeğe getiriyor.

Neyi bilmediğimizi bilmiyoruz. Ve bu konuda yapabileceğimiz tek şey, tekrar tekrar yeni bilgiler edinmektir ⎼ önce geniş , sonra derinlik .

Yazılım Mimarisinin Temelleri, Mark Richards ve Neal Ford

Bu şekilde, umarız, ne aradığımızı bileceğiz ve cevabı bulduğumuzda en azından bir kavrayışa sahip olacağız.

- Kapsamlı bilgi bize cevaplar aramak için bir yön verir;
- Derin bilgi, bulunan cevaplar arasında ayrım yapmamıza yardımcı olur.

Tamam aşkım. Serin. Ama bunu nasıl yapacağız?

Bilinmesi gerekenler konusundaki bilginizi genişletmek için blogların ve YouTube videolarının harika olduğunu düşünüyorum. Günlük olarak hiç ter dökmeden tüketebileceğiniz kısa içeriklerdir. Ancak derin ve sağlam bilgi için bence (N=1), kitap ve resmi belge parçalarını okumaktan daha iyi bir şey yoktur. Ve eğer yapabilirseniz, henüz yapmadıysanız, kendinize bir üniversite kursunda (buna göre mezun veya lisansüstü) bir yer (fiziksel veya çevrimiçi) bulun.

Yine, popüler bir görüş değil. Ama ben de popüler değilim, kimin umurunda?

LLM araçlarına girer

Bununla birlikte, popüler olmayan birkaç görüşüm var, bence bu geçit törenini vuracak: LLM, sağlam bilgi edinmenize yardımcı olacak harika bir araç olabilir. Bu nasıl? Sana nasıl olduğunu anlatacağım.

ChatGPT'ye mobil uygulama geliştirme hakkında bilinmesi gerekenleri sorarak başlayın. Ardından, büyük resmi görmek için kısa eğitimler ve YouTube videoları isteyin. Ardından, bu konuda şiddetle tavsiye edilen kitaplar ve dersler isteyin. Çünkü nihayetinde, çalıştığınız konuyu sağlam bir şekilde anlamak için farklı yazarlardan, farklı bakış açılarına sahip birkaç derin makale okumak istiyorsunuz.

Bu bir şey için. Yararlı olabilecek başka bir şey de, bir kitabı baştan sona okurken ve belirli bir gerekli konu hakkında bilgi eksikliği nedeniyle takılıp kaldığınızda olabilir. ChatGPT'den söz konusu konuyu sizin için özetlemesini isteyin, böylece devam etmeden önce bir temel elde etmiş olursunuz. Google ile yaptığınız şeyin aynısı, bir veya iki kaynak okuyarak, ancak hızlı ve doğrudan konuya. Yine de, daha sonra, çalıştığınız genel konu için önemli bir şeyse, devam edin ve söz konusu konunun derinliklerine inin. Bunu yapmak sorun değil.

Ve yine çok yararlı olabilecek başka bir durum da, belirli bir alan adı için bir yazılım uygulaması geliştirmeye hazır olduğunuzda, tüm ayrıntılarına çok aşina değilsiniz. Bunu geçen gün gördüm ve oldukça akıllıca buldum.

Diyelim ki bir fitness mobil uygulaması geliştireceksiniz, çünkü fitness ile ilgileniyorsunuz ve insanların sağlıklı olmalarına yardımcı olma fikri ve her şey sizi çok heyecanlandırıyor. Tamam aşkım. Ama oradaki tüm uygulamaları, en sevilen özelliklerini ve nasıl para kazandıklarını vb. bilmiyorsunuz. Bunlar çok nesnel sorular. Hızlı bir şekilde başlamak için bu soruları ChatGPT'ye sorabilirsiniz. Uygulama gereksinimlerini soruyorsunuz. Örneğin, harika fitness uygulamanızın yeni abonelerine göndereceğiniz hoş geldiniz e-postasını yazmasını istiyorsunuz çünkü bu konuda pek iyi değilsiniz. Sağ. Şimdi ne olacak? Bu noktaya kadar neden bahsettiğimi anladıysanız, bundan sonra ne yapmanız gerektiği konusunda zaten iyi bir fikriniz var demektir. İyileştirirsiniz, güzelleştirirsiniz, özel sosunuzu sürersiniz. Diğer bir deyişle ataleti kırmak, Bu durumda tartışmasız en önemli şey bu, o zaman onu özellikle özel yapın ⎼ aksi takdirde, sahip olacağınız tek şey satılacak jenerik şeyler olacaktır. Havalı değil sanırım.

GitHub Copilot'a erişiminiz varsa ve bunu işinizde kullanmanın bir zararı yoksa, ondan bir dosyayı ayrıştırma yöntemi, tekrarlanan bir test senaryosu veya başka bir şey gibi size kod parçaları oluşturmasını isteyebilirsiniz. Bilirsiniz, ara sıra yapmanız gereken ve uygun kod tasarımı ve akıllı kitaplıklarla tamamen önlenemeyen sıkıcı şeyler. Bunda yanlış bir şey yok. Çalıştığınız yerde yürürlükte bir politika olmadığı sürece, bunu yapmazsanız ekstra puan almazsınız ⎼.

Buna benzer daha birçok uygulama olabilir, dikkat edin. Bunu bir düşün.

Bekle. Bunun bize sağlayabileceği en büyük faydayı düşündüm: Okul ödevlerine çözüm isteyen forumlara yazı yazmaktan hoşlanan adamları tanıyor musunuz? Mesela, soruyu okudunuz ve bu neredeyse tam anlamıyla atama ifadesi. Muhtemelen bunu daha önce görmüşsünüzdür. Evet, artık bunu ChatGPT'den isteyip bizi rahat bırakabilirler. Herkes bundan memnun.

LLM insan programcıların yerini alacak mı?

Hayır, sanmıyorum. "X'in insan programcıların yerini alacağı" konusunda çok şüpheliyim . 1997'de programlamaya başladığımdan beri, bunun gibi tuhaflıklar hakkında epeyce şey duydum.

Muhtemelen programlama konusunda eğitim alma şeklimizi, programlama sırasında takılıp kaldığımızda engelleri nasıl aştığımızı, sıkıcı şeylerle nasıl başa çıktığımızı değiştirecek, ama biz homo sapiens'leri CRUD'lardan ve yaygın olarak bilinen sıradan uygulamalardan daha fazlası için değiştirecek, hayır, ben bu konuda çok şüpheliyim. Yine de yanılıyor olabilirim.

Ve bilin ki, son olarak, bu makale beni onu yazmak için motive eden şeyle tam bir daire çiziyor.

Dün Amy J. Ko'nun okuması gerçek bir zevk olan harika bir makalesine rastlama zevkine eriştim . Birincisi, çünkü orada yazdığı her şeye çoğunlukla katılıyorum. İkincisi, çünkü benim aksime o bir akademisyen ve on yıldan fazla bir süredir bu konuyu takip ediyor. Bu yüzden, tüm bu tartışmada kendini utandırmadan kesinlikle işbirliği yapacağı bir veya iki şeyi var.

Öyleyse kendinize bir iyilik yapın, abartıyı bir kenara bırakın ve konuyu farklı bakış açılarından daha iyi anlamak için bu olağanüstü makaleleri okuyun:

- Büyük dil modelleri programlamayı biraz değiştirecek
- Büyük dil modelleri programlamayı değiştirecek ... çok

TLDR yok ; Orası. Acele etmeyin, yolculuğun tadını çıkarın.

Şimdi bu uzun parçayı komik bir şeyle bitirelim: Eskiden insanların akademinin gerçek dünyadaki yazılım geliştirmeden ne kadar uzak olduğunu söyleyerek akademisyenlerle dalga geçmesini izlerdim ve sonra birdenbire insanlar şaşırır ve korkardı. doğrudan akademi araştırmalarından hayata geçirilen bir şey. Ne büyük bir ironi. Akademisyen olmak için ne güzel bir zaman.

Her neyse, bir dahaki sefere görüşürüz millet.

Hype konusunda dikkatli olun.

⛧ Ayrıca, liedrosilva.com.br adresine bakın . Orada çok daha fazlası var .