Günümüzde yapay zeka (YZ) teknolojileri, iş dünyasında ve günlük yaşamda devrim niteliğinde değişiklikler getiriyor. Verimliliği artırdığı, iş akışlarını hızlandırdığı ve bazı işleri otomatize ettiği yönündeki haberler sıkça duyulsa da, birçok organizasyon bu potansiyelin tam anlamıyla faydasını sağlayabilmiş değil. İnsanların YZ’nin potansiyelinden bahsederken, bu potansiyeli gerçek faydaya dönüştürmenin başlangıçta tahmin edilenden daha zor olduğu gözlemleniyor. Peki, YZ’nin mevcut durumu nedir ve yazılım geliştirme süreçlerinde nasıl bir rol oynuyor? Bu yazıda, yapay zekanın güncel durumunu, yazılım geliştirmedeki uygulamalarını ve hangi süreçlerde daha etkili olabileceğini inceleyeceğiz.
Yapay Zekanın Mevcut Durumu ve Sınırları
Yapay zekanın günümüzdeki en dikkat çeken temsilcileri arasında ChatGPT ve Gemini gibi büyük dil modelleri (Large Language Models — LLM) bulunuyor. Bu modellerin bazıları görüntü işleme yeteneklerine sahip olsa da, yeteneklerinin büyük bir kısmı dil ve metin tabanlı işlemler üzerine odaklanmış durumda.
Büyük Dil Modellerinin Yetkinlikleri ve Sınırlamaları
Güncel YZ modelleri, fiziksel dünyayı anlama, uzaysal ve konumsal ilişkileri kavrama konusunda henüz sınırlı kalıyor. Metinsel olarak ifade edilmesi güç olan kavramları işlemekte metin kadar başarılı değiller. Ayrıca, önceki deneyimlerini hatırlayarak bu deneyimlerden öğrenme konusunda da oldukça kısıtlılar. İnsanların sahip olduğu zihinsel esnekliklere henüz sahip olmamalarına rağmen, bu modeller büyük miktarda metin ve kod üzerinde eğitiliyorlar. Sadece bir sonraki kelimeyi tahmin etmek üzere eğitilmiş olsalar da, bir denklemi çözmek veya kod yazmak gibi görevlerde doğru sonuca ulaşmak için daha üst düzey düşünme ve anlama gerektiriyorlar.
Yazılım Geliştirmede Yapay Zekanın Durumu
Mevcut durumda YZ modelleri, bir yazılım geliştiricisinin yaptığı işin tamamını yapmaktan oldukça uzak. Bu iddiayı taşıyan sistemler olsa da, henüz bu teknolojilerin gerçek uygulamalarını yaygın şekilde görmek mümkün değil. Yazılım geliştirme süreçleri, sadece kod yazmaktan öte birçok sürecin doğru ve esnek şekilde entegre edilmesiyle oluşuyor. Yazılım geliştiren bir insan, aşağıda örnekleri verilen birçok aşamayı gerçekleştiriyor:
- Gereksinim Analizi: Sistemin gereksinimlerini belirleme ve gereksinim kırılımları oluşturma.
- Sistem Tasarımı: Mimari tasarım ve modül tasarımı yapma.
- Dokümantasyon: Kod ve sistem dokümantasyonu oluşturma.
- Test: Unit testler ve entegrasyon testleri gerçekleştirme.
- Kod Bakımı: Hata tespiti, çözümü ve güncellemeler yapma.
- İş Birliği: Kişiler ve gruplar arasında görev paylaşımı.
- İletişim: Bilgi aktarımı ve kolektif problem çözme.
Bu süreçlerin her birini belirli bir ölçüde yapacak teknolojiler geliştirilse bile, bu tecrübeleri ve kabiliyetleri esnek biçimde ve doğru yerde uygulamak, diğer kişilerle ve gruplarla etkileşim kurmak yazılım geliştirme sürecinin önemli bir kısmını oluşturuyor. Bu sebeple, özellikle çok kişinin çalıştığı büyük projelerde YZ kullanımı, yazılımcının yerini tamamen almaktan henüz uzak. Fakat bu aşamaların her birinde yapılan işin yükünü hafifletme kabiliyetine sahip.
Mevcut Yapay Zeka Teknikleri ve Verimliliği Artıran Araçlar
Yapay zeka, yazılım geliştirme süreçlerinde çeşitli teknikler ve araçlar aracılığıyla verimliliği artırmaktadır. Aşağıda, bu alanda öne çıkan bazı mevcut YZ teknikleri ve araçlar hakkında bilgi bulabilirsiniz.
- Kod tamamlama: GitHub Copilot gibi yapay zeka destekli araçlar, milyonlarca halka açık depo üzerinden öğrendiği kalıplar sayesinde kod parçacıkları, fonksiyonlar veya hatta tüm sınıfları önerir.
- Genel amaçlı dil modelleri: ChatGpt, Claude, Gemini gibi araçlar kod parçaları oluşturmak için kullanılabilir. Calude’un sağladığı artifacts ve ChatGpt’nin yeni canvas özellikleri kod geliştirmeyi özellikle kolaylaştırabilir. Aynı kabiliyetlere birebir sahip olmasalar da oldukça yakın kabiliyetlere sahip açık modellere örnek olarak da Meta’nın Llama3.1 ve Mistral AI’ın modelleri örnek olarak verilebilir.
- YZ Destekli DevOps araçları: Ansible ve Datadog gibi araçlar daha etkili CI/CD süreçleri oluşturmanıza yardım edebilir ve uygulamanızın otomatik şekilde kullanıma alınmasını ve takip edilmesini sağlayabilir.
- Dokümantasyon için Doğal Dil İşleme (NLP): OpenAI Codex gibi araçlar, metin tabanlı gereksinimleri koda dönüştürebilir veya kodun mantığını yorumlayarak dokümantasyon oluşturabilir.
- Otomatik test frameworkleri: Selenium (kullanıcı arayüzü testleri için) ve Testim.io gibi yapay zeka destekli test araçları, testlerin oluşturulmasını ve yürütülmesini otomatikleştirir, bu da manuel test için harcanan zamanı büyük ölçüde azaltır.
- Statik ve dinamik kod gözden geçirme/ kod analizi: Snyk Code (önceden DeepCode) veya CodeGuru gibi araçlar, kod tabanlarını yaygın hatalar, güvenlik açıkları ve performans darboğazları açısından analiz eder.
- YZ destekli proje yönetimi: Jira gibi platformlardaki yapay zeka destekli pluginler çeşitli konularda YZ destekli araçlarla sürecinizi otomatize etmenize yardımcı olabilir. Bu araçlar size projeler için zaman çizelgesi önerme, potansiyel olarak bloklayıcı görevleri tespit etme ve platform özelliklerine doğal dil kullanarak erişme gibi özellikler sunabilir.
Hangi Süreçler Yapay Zeka Kullanımına ve Otomasyona Daha Uygun Olabilir?
YZ kullanımında en önemli nokta, problemlere çözüm odaklı yaklaşmaktır. Otomatize edilebilecek veya destek alınabilecek süreçler, YZ’nin yanında klasik yazılım otomasyon süreçlerinden de faydalanabilir. Organizasyonların ve takımların yapısına göre hangi sürecin daha iyi otomatize edilebileceği veya verimliliğin artırılabileceği değişiklik gösterebilir. Zaten çözülmüş bir problemi YZ ile ele almaya çalışmak bunun için en doğru yol olmayabilir.
Kendi işlerinizde ve süreçlerinizde aşağıdaki özellikleri gözlemliyorsanız otomatizasyon için iyi adaylar olduğuna işaret olabilir.
1. Tekrarlama
Eğer yapılan bir iş sürekli tekrar ediliyorsa veya tanımlanabiliyorsa, bu otomatize etmek için uygun bir örnek olabilir.
Bazı Örnekler:
- Her seferinde çalışması gereken scriptler
- Kod üzerinde sürekli yapılan değişiklikler
- Stil denetimleri ve standartlara uygunluk
- Sürekli entegrasyon (CI) süreçleri
2. Tahmin Edilebilirlik
Süreçler net kurallar tarafından tanımlanabiliyorsa ve işletilebiliyorsa, bu kuralların uygulanması için geliştiricilerin zamanı yerine farklı araçlara güvenmek verimlilik artışı sağlayabilir.
Bazı Örnekler:
- Stil denetimleri ve standartlara uygunluk
- Performans kriterlerine uygunluğun ölçülmesi
- Bağımlılık analizi
3. İyi Tanımlanabilirlik ve Modülarite
Geliştirilmeye çalışılan yazılım parçasının, yazılımın geri kalanına olan bağımlılığı ve etkisi sınırlıysa, kendi için tanımlanan görevi yaparak önemli değişiklikler yapmıyorsa ve sistemle ilgili daha karmaşık ve üst düzey bilgileri kullanmıyorsa, bu kod parçalarının geliştirilmesi için YZ kullanımı daha uygundur. Özellikle iyi tasarlanmış ve soyutlamanın iyi sağlandığı yazılım projelerinde, fonksiyonalitenin bir kısmını tanımlanan iyi bir arayüzle geliştirmek, kodun yazılması için YZ kullanımını daha uygun kılar. Böylece sistemin geri kalanıyla ilgili çok fazla şey bilmeden veya varsayım yapmadan arayüzlere uyan ve düzgün çalışan parçalar için kodlar kolayca geliştirilebilir.
Bazı Örnekler:
- Yararlı fonksiyonların (utility) geliştirilmesi
- Çalışma akışını kolaylaştıracak scriptlerin geliştirilmesi
- Bir fonksiyonun API’a bağlanması
4. Zaman Alan, Zihinsel Yükü Düşük İşler
Bazı işler, belli bilgilere sahip olan herkesin vaktini harcayarak yapabileceği işlerdir. Teker teker göz atarak ya da deneyerek vaktimizi alan ama çok uzmanlık gerektirmeyen, her aşamada ya da gerekli olunca yapılacak işler, mevcut YZ modelleri tarafından yapılabilecek basitlikteyse, bunu yapmak için YZ kullanmak veya otomasyon kodu yazmak iyi bir fikir olabilir.
Bazı Örnekler:
- Bir veri kümesi içerisinde belirli özelliklere sahip örnekler bulmak
- Büyük log dosyalarının ilgili yerlerini ayıklamak
- İçinde çok miktarda bilgi olan dosyaları özetlemek
- Bir dokümanın içerisinde spesifik bir bilgiyi aramak
5. Örüntü Tanıma ve Anomali Tespiti
YZ, insanın fark etmesinin zor olduğu desenleri ve anomalileri tespit edebilir.
Bazı Örnekler:
- Güvenlik tehditlerinin otomatik olarak tespiti
- Kod tabanında potansiyel hataların veya anti-pattern’lerin belirlenmesi
- Sistem performans metriklerinde olağan dışı durumların izlenmesi
6. Hata Yapma Olasılığı Yüksek Olan Görevler
İnsan hatasına açık olan görevlerde otomasyon, hataları azaltmak ve süreçleri güvenilir hale getirmek için faydalıdır.
Bazı Örnekler:
- Manuel veri girişi işlemlerinin otomasyonu
- Konfigürasyon yönetimi ve altyapı otomasyonu
- Birden fazla ortama dağıtım işlemlerinin otomatikleştirilmesi
Yapay Zekanın Yaratıcı Kullanım Alanları
Yapay zeka, sadece tekrarlayan ve rutin işleri otomatize etmekle kalmayıp, aynı zamanda yaratıcı süreçlerde de önemli katkılar sağlayabilir. Bu konuda sınır kendi çalışma döngünüz ve yaratıcılığınız ama işinize yarayabilecek birkaç örnek.
- Beyin Fırtınası: Yaratıcı fikirlerin ortaya çıkmasında destek sağlamak.
- Araştırma Yapmak: Geniş veri setlerinden anlamlı bilgiler çıkararak araştırmaları hızlandırmak.
- Eleştiri-Düzeltme Döngüsü: Yazılım geliştirme süreçlerinde kodun eleştirilmesi ve iyileştirilmesi.
- Kütüphane Bulmak: Yapmak istediğiniz işe uygun kütüphane seçiminde yardımcı olmak.
Ne zaman kullanmalıyım?
Diğer işler gibi otomatize etmek ya da destek araçları oluşturmak vakit alan işlerdir. Temelde dikkat edilmesi gereken en önemli nokta bunu yapmanın gerçek bir fayda sağlayıp sağlamayacağıdır. Örneğin sadece bir kere kullanılacak bir iş için yapılan otomasyona problemin kendisini çözmek için gereken zamandan kat kat fazla zaman harcamak mantıklı bir tercih olmayabilir.
Yapay zeka ve otomasyon teknolojilerinin sağlayabileceği katkılar basitçe dört kategoride özetlenebilir. Vakit ve kaynak harcamadan önce bunlardan biri ya da birkaçına yönelik bir iyileşme olduğuna emin olmak iyi bir fikir olabilir:
- Daha Ucuz: Uygulanan teknoloji, insan kaynağı veya dış kaynak kullanımı açısından maliyetlerinizi düşürüyorsa.
- Daha İyi: Yapılan işlerin kalitesi ve sonucun doğruluğu artıyorsa.
- Daha Hızlı: Yapılan işler normalde aldığından daha kısa sürede tamamlanabiliyorsa.
- Daha Güvenli: Sistem, normal süreçte olan bazı risklerden sizi kurtarıyor veya problem çıkma olasılığını düşürüyorsa.
Öneriler
Bunlar dışında teknolojileri anlarken, kullanırken ve değerlendirirken aşağıda bahsedilen önerileri de değerlendirebilirsiniz.
- Problemi İyi Tanımlayın: Otomasyon veya YZ kullanımına geçmeden önce, çözmek istediğiniz problemi net bir şekilde tanımlayın. İyi tanımlanmış bir problem, doğru çözümün bulunmasını kolaylaştırır.
- Uygun Süreçleri Belirleyin: Yukarıda belirtilen kategorilere uygun süreçleri belirleyerek, YZ ve otomasyon teknolojilerinden maksimum fayda sağlayabilirsiniz.
- Kullanın ve Fikir Edinin: Teknolojiler hakkında fikir edinmek ve denemeler yapmak için vakit harcayın. Nasıl çalıştığına ve hangi konularda iyi olduklarına dair fikir edinin.
- Küçük Başlayın: İlk aşamada, otomasyonun faydasını gösterebilecek küçük projelerle başlayın. Bu, organizasyonunuzun YZ’ye olan güvenini artırır ve daha büyük projelere geçişi kolaylaştırır.
- Eğitim ve Adaptasyon: Ekip üyelerinizin YZ ve otomasyon teknolojilerini etkili bir şekilde kullanabilmeleri için gerekli eğitimleri sağlayın.
- Sürekli Değerlendirme: YZ uygulamalarının etkisini düzenli olarak değerlendirin ve gerektiğinde stratejilerinizi güncelleyin.
Yapay zeka ve otomasyon, doğru kullanıldığında yazılım geliştirme süreçlerinde büyük verimlilik artışları sağlayabilir. Ancak, bu teknolojilerin potansiyelinden tam anlamıyla faydalanmak için stratejik bir yaklaşım ve sürekli adaptasyon gereklidir. Organizasyonlar, YZ’yi sadece bir araç olarak görmek yerine, iş süreçlerinin ayrılmaz bir parçası haline getirerek, geleceğin teknolojisine bugünden yatırım yapabilirler.
Günümüz dünyasında, en azından benim fikrime göre, yapay zekanın yazılımcıların yerini alacağı günler henüz gelmedi ve bu yeni teknolojileri akıllıca kullanırsak daha önce yapamadığımız şeyleri yapabileceğimiz yaptıklarımızı da çok daha hızlı ve etkili geliştirebileceğimiz zamanlar yaşayacağız. Bunu yapacak olanlar da imkanları akıllıca ve gerçekçi şekilde kullananlar olacak. Bu yazının da bu doğrultuda çözüm bulmaya ya da soru sormaya yol açmış olmasını diliyorum.