Bu gönderi, Martin Fowler’ın gönderisine kısa bir yorumdur, Programlama için LLM Bilgi İstemi Örneği. Tek yaptığım sana o yazıyı okutmaksa, işimi yapmışım demektir. Öyleyse devam edin – bağlantıya tıklayın ve isterseniz buraya geri gelin.
GPT modellerinin ve haleflerinin programlamayı nasıl değiştireceği konusunda çok fazla heyecan var. Bu heyecanı hak ediyor. Ancak, programlama sürecinin “ChatGPT, lütfen bana ayakkabı satmak için kurumsal bir uygulama oluşturun” haline gelmediği de açık. Diğer pek çok kişi gibi ben de ChatGPT’ye bazen doğru bazen doğru olmayan küçük programlar yazmasını sağlasam da, şimdiye kadar ChatGPT ile profesyonel gelişim yapmak için gerekenleri gösteren birini görmedim.
Bu gönderide Fowler, Xu Hao’nun (Thoughtworks’ün Çin Teknoloji Başkanı) ChatGPT ile bir kurumsal uygulamanın parçasını oluşturmak için kullandığı süreci anlatıyor. Bir bakışta, Xu Hao’nun çalışma kodu oluşturmak için kullandığı istemlerin çok uzun ve karmaşık olduğu açıktır. Bu istemleri yazmak, hem ChatGPT kullanımında hem de yazılım geliştirmede önemli bir uzmanlık gerektirir. Satırları saymasam da istemlerin toplam uzunluğunun ChatGPT’nin oluşturduğu kod satırı sayısından daha fazla olduğunu tahmin ediyorum.
İlk olarak, Xu Hao’nun bu kodu yazmak için kullandığı genel stratejiye dikkat edin. “Bilgi Üretimi” adlı bir strateji kullanıyor. İlk istemi çok uzun. Mimariyi, hedefleri ve tasarım yönergelerini açıklar; ayrıca ChatGPT’ye açıkça herhangi bir kod oluşturmamasını söyler. Bunun yerine, bir eylem planı, amaca ulaşacak bir dizi adım ister. ChatGPT’nin görev listesini iyileştirmesini sağladıktan sonra, ondan adım adım kod istemeye başlar ve devam etmeden önce bu adımın doğru şekilde tamamlandığından emin olur.
İstemlerin çoğu test etmeyle ilgilidir: ChatGPT’ye ürettiği her işlev için testler oluşturması talimatı verilir. En azından teoride, test odaklı geliştirme (TDD), profesyonel programcılar arasında yaygın olarak uygulanmaktadır. Bununla birlikte, konuştuğum çoğu insan, bunun gerçek uygulamadan daha çok lafta olduğu konusunda hemfikir. Testler çok basit olma eğilimindedir ve nadiren “zor şeylere” ulaşır: köşe vakaları, hata koşulları ve benzerleri. Bu anlaşılabilir bir durumdur, ancak açık olmalıyız: AI sistemleri kod yazacaksa, bu kodun kapsamlı bir şekilde test edilmesi gerekir. (Yapay zeka sistemleri testleri yazıyorsa, bu testlerin kendilerinin test edilmesi gerekiyor mu? Bu soruyu cevaplamaya çalışmayacağım.) Kod oluşturmak için Copilot, ChatGPT veya başka bir araç kullanan tanıdığım herkes kelimenin tam anlamıyla kabul etti. teste dikkat ister. Bazı hataların tespit edilmesi kolaydır; ChatGPT genellikle var olmayan “kütüphane işlevlerini” çağırır. Ancak, dikkatli bir şekilde incelenmez ve test edilmezse doğru görünen yanlış kod üreterek çok daha ince hatalar da yapabilir.
Fowler’ın makalesini okuyup ChatGPT ile herhangi bir endüstriyel güçte yazılım yazmanın basit olduğu sonucuna varmak imkansızdır. Bu özel problem, önemli bir uzmanlık, Xu Hao’nun neyi başarmak istediğini ve bunu nasıl başarmak istediğini mükemmel bir şekilde anlamayı gerektiriyordu. Bu anlayışın bir kısmı mimaridir; bazıları büyük resim (yazılımın kullanılacağı bağlam) ile ilgilidir; ve bir kısmı, bir program yazarken her zaman keşfettiğiniz küçük şeyleri, spesifikasyonun söylemesi gereken ama söylemediği şeyleri önceden tahmin etmektir. İstemler, teknoloji yığınını biraz ayrıntılı olarak açıklar. Ayrıca bileşenlerin nasıl uygulanması gerektiğini, kullanılacak mimari kalıbı, ihtiyaç duyulan farklı model türlerini ve ChatGPT’nin yazması gereken testleri açıklar. Xu Hao açıkça programlama yapıyor, ancak farklı türden bir programlama. 1950’lerden beri “programlama” olarak anladığımız şeyle açıkça ilgili, ancak C++ veya JavaScript gibi resmi bir programlama dili olmadan. Bunun yerine mimariye, sistemi bir bütün olarak anlamaya ve test etmeye çok daha fazla vurgu yapılıyor. Bunlar yeni beceriler olmasa da, önemli olan becerilerde bir değişiklik var.
Ayrıca (en azından şu anda) kendisine önemli bir engel oluşturan ChatGPT’nin sınırlamaları dahilinde çalışmak zorundadır. ChatGPT’ye verilen bilgilerin diğer kullanıcılara sızmayacağını varsayamazsınız, bu nedenle ChatGPT ile programlama yapan herkesin istemlerine herhangi bir özel bilgi eklememeye dikkat etmesi gerekir.
ChatGPT ile geliştirme, JavaScript’i elle yazmaktan daha mı hızlıydı? Muhtemelen – muhtemelen. (Gönderi bize ne kadar sürdüğünü söylemiyor.) Xu Hao’nun bu kodu kütüphane işlevlerinin ayrıntılarını aramakla zaman harcamadan geliştirmesine olanak sağladı mı? Neredeyse kesin. Ama bence (yine bir tahmin), kodu oluşturmak için gereken süreyi %90 değil, %25 ila %50 oranında azaltmaya bakıyoruz. (Makale, Xu Hao’nun çalışan kod oluşturacak istemleri almak için kaç kez denemek zorunda kaldığını söylemiyor.) Yani: ChatGPT yararlı bir araç olduğunu kanıtlıyor ve şüphesiz zamanla daha iyi hale gelecek bir araç. Nasıl kullanılacağını öğrenen geliştiricileri daha etkili hale getirecek; % 25 ila 50 hapşırmak için bir şey değildir. Ancak ChatGPT’yi etkili bir şekilde kullanmak kesinlikle öğrenilen bir beceridir. Kimsenin işini elinden almayacak. İşleri tek bir görevi tekrar tekrar yapmak olan insanlar için bir tehdit olabilir, ancak programlamanın çalışma şekli bu değildir (ve hiçbir zaman olmamıştır). Programlama, sorunları çözmek için becerileri uygulamakla ilgilidir. Bir işin tekrar tekrar yapılması gerekiyorsa, bir senaryo yazmak ve çözümü otomatikleştirmek için becerilerinizi kullanırsınız. ChatGPT, bu yöndeki başka bir adımdır: Belgelere bakmayı ve StackOverflow’ta soru sormayı otomatikleştirir. Hızla, genç programcıların öğrenmesi ve anlaması gereken başka bir temel araç haline gelecektir. (Zaten “temel eğitim kamplarında” öğretiliyorsa şaşırmam.)
ChatGPT, şu anda tasarladığımız programlama için bir tehdit oluşturuyorsa, bu şudur: ChatGPT ile önemli bir uygulama geliştirdikten sonra, elinizde ne var? Bir insan tarafından yazılmamış ve kimsenin derinlemesine anlamadığı bir kaynak kod gövdesi. Tüm pratik amaçlar için, sadece birkaç dakikalık eski olsa bile “eski kod”dur. Üyeleri artık şirkette çalışmayan bir ekip tarafından 10, 20 veya 30 yıl önce yazılmış, ancak sürdürülmesi, genişletilmesi ve (hala) hatalarının ayıklanması gereken bir yazılıma benzer. Neredeyse herkes sıfırdan projelerini yazılım bakımına tercih eder. Ya bir programcının işi daha güçlü bir şekilde bakıma doğru kayarsa? Hiç şüphe yok ki ChatGPT ve halefleri, kaynağı ne olursa olsun eski kodlarla çalışmak için bize daha iyi araçlar sunacak. Kodu açıklamakta zaten şaşırtıcı derecede iyi ve büyük bir kod tabanını keşfetmesine izin verecek uzantıları hayal etmek kolay, hatta muhtemelen bu bilgiyi hata ayıklamaya yardımcı olmak için kullanıyor. Bu araçların inşa edileceğinden eminim ama henüz mevcut değiller. Var olduklarında, programcıların yazılım geliştirmek için kullandıkları becerilerde kesinlikle daha fazla değişiklikle sonuçlanacaklardır.
ChatGPT, Copilot ve diğer araçlar, yazılım geliştirme şeklimizi değiştiriyor. Ancak yazılım geliştirmenin ortadan kalkacağını düşünme hatasına düşmeyin. Asistan olarak ChatGPT ile programlama yapmak daha kolay olabilir ama basit değildir; hedeflerin, bağlamın, sistem mimarisinin ve (her şeyden önce) testin kapsamlı bir şekilde anlaşılmasını gerektirir. Simon Willison’un sahip olduğu gibi söz konusu“Bunlar düşünmenin araçları, düşünmenin yerini alacak şeyler değil.”