Fıkra
Syntax check, autocomplete, type inference, refactoring, debugger, Stack Overflow, framework, compiler olmadan üretkenliği dramatik biçimde düşecek bir yazılımcı, yapay zekâ tarafından üretilmiş çalışan kodu “gerçek yazılım geliştirme değil” diye küçümsüyor.
Fikra bu kadar!
Yazılım geliştirme hiçbir zaman çıplak insan zekâsıyla yapılan bir faaliyet olmadı. Hep araçlarla genişletilmiş bir zihinsel faaliyet oldu. Yapay zekâ sadece bu araç zincirindeki en yeni ve en güçlü katman.
Yazılımcının işi kod yazmak değil, çalışan bir sistem meydana getirmektir. Kod bunun için kullanılan ara temsillerden yalnızca biridir.
Programcı Mesleği Değer Üretmiyor
Kıymetli olan kodun kendisi mi yoksa canlıda onun çalışan hali mi?
Günün sonunda kimse yazılmış kodla ilgilenmez. Önemli olan tek şey, onun çalışıyor ve görevini yerine getiriyor olmasıdır.
Bu sebeple kodun çalışacağı ortamı hazırlamak ve onu çalışır hale getirmek çok daha önemli bir iştir.
Yapay zeka öncesi kod yazmak çok maliyetli ve zahmetli bir işti. Bu yüzden yazılım kod yazma olarak algılanırdı.
Yapay zeka ile bu durum değişmiş durumda.
Kod yazma derdi ortadan kalktı.
Ama şu problemler aynı hızda ortadan kalkmıyor:
- Bu kod nerede çalışacak?
- Nasıl deploy edilecek?
- Veritabanı nasıl migrate edilecek?
- Secret’lar nasıl yönetilecek?
- Sistem çökerse ne olacak?
- Logları kim okuyacak?
- Backup var mı?
- Restore gerçekten çalışıyor mu?
- Trafik artarsa ne olacak?
- Yeni sürüm eski sürümü bozarsa nasıl geri dönülecek?
Dolayısıyla değer zincirinde ağırlık merkezi kod üretmekten çalışan sistem üretmeye kayıyor.
Bir programcı ile bir yazılım mühendisini ayıran nokta da her zaman bu olmuştur.
Programcı: Kod üretir.
Yazılım mühendisi: Çalışan sistem üretir.
Hangisine artık ihtiyaç kalmadı ve bu yüzden kısa bir zaman sonra tamamen ortadan kalkmış olacak?
Programcı mesleği yok olmak zorunda, çünkü artık bir değer üretmiyor.
Merak
Siradan bir Java yazilimcisi JVM icinde ne dolaplar döndügünü pek bilmez.
Sadece merakli olanlar bunu bilirler ve bu merak onlari daha iyi bir yazilimci yapar. Ama bilmeseler de iyi kod yazabilirlerdi.
Hicbir yazilimci bir derleyicinin nasil calistigini umursamaz bile.
Sadece merakli olanlar bunu bilir ve bu merak onlari daha iyi bir yazilimci yapar. Ama bilmeseler de yazdiklari kod derlenirdi.
Çoğu yazılımcı yapay zekânın nasıl çalıştığını bilmez. Ama yapay zeka ile yazilim gelistirebilir.
Sadece meraklı olanlar bunları öğrenirler.
Ve evet, bu merak onları yine daha iyi bir yazılımcı yapar.
Ama burada önceki örneklerden farklı bir durum var. JVM’i bilmemek, yazdığın Java kodunun ne olduğunu değiştirmiyordu.
Derleyiciyi bilmemek, programlama biçimini kökten değiştirmiyordu.
Yapay zekâyı anlamamak ise onunla nasıl çalıştığını doğrudan etkiliyor. Çünkü yapay zekâ sadece altta çalışan yeni bir teknoloji katmanı değil. Aynı zamanda seninle birlikte düşünen, üreten ve karar süreçlerine dahil olan yeni bir çalışma katmanı.
Bu yüzden mesele artık bir LLM’in matris çarpımlarını bilmek değil.
Onun neyi iyi yaptığını, nerede yanıldığını, nasıl bağlam kurduğunu, neden bazen emin bir şekilde yanlış konuştuğunu ve senden nasıl yön beklediğini anlamak.
Bir yazılımcının JVM’in garbage collector algoritmasını bilmesine gerek olmayabilir.
Ama yapay zekâ ile çalışan bir yazılımcının, yapay zekânın sınırlarını bilmemesi ciddi bir problem olabilir. Çünkü artık kullandığımız araç sadece komutlarımızı yerine getirmiyor.
Yorumluyor.
Tamamlıyor.
Tahmin ediyor.
Bazen de bizim yerimize düşünüyor.
Dolayısıyla yapay zekâ çağında iyi yazılımcı olmak için yapay zekâ mühendisi olmak gerekmiyor.
Ama yapay zekânın çalışma karakterini anlamak gerekiyor.
Eskiden merak, bizi daha iyi yazılımcı yapıyordu.
Şimdi ise merak, oyunda kalmamızı sağlıyor.
Yeni Podcast: Yazılımcılar işsiz mi kalacak?
Tutunacak Bir Dal
Eskiden yazilim yapiyordum. Simdi yazilim yaptiriyorum.
Peki eskiden yazilim yaptiranlar simdi ne yapiyor?
Eskiden yazilim yaptiranlar katmani ortadan kalkiyor. Dip dalga olarak gelen bu degisiklikler yekünü yapanlarin yaptiran olmasina, yaptiranlarin ise issiz kalmasina neden olacak.
Bu gidisati karsi korunmanin en iyi yolu, her daim yapan / üreten pozisyonunda kalabilmek. Yapay zeka ile calisabilen yazilimcilar yine yapan / üreten pozisyonunda olacaklar.
Yapmak birseye tutunmak anlamina geliyor. Dip dalga geldiğinde tutunacak bir dalın yoksa, dalgayla birlikte sürüklenirsin.
Asil mesele her daim birseylere tutunabilmek olmustur.
Büyük dönüşümler gürültüyle değil, dip dalgalarla gelir. Fark edilmezler; fakat geride bıraktıkları dünya artık eskisi değildir.
Hayatta kalanı en güçlü olanlar değil, tutunacak yeni dalları en hızlı bulanlar olur.
En Büyük Güç: Zihinsel Esneklik
En büyük güç zihinsel esnekliktir. Zihinsel esneklik perspektif değiştirebilmeyi sağlar. Perspektif her seydir. İnsan onunla yaşar, algılar, mutlu ve mutsuz olur, görür ve karar verir.
Hayata hep aynı pencereden bakılmaz. Gerektiğinde perspektif değiştirmek zaruridir. Yeni bir perspektif bir anda her şeyi başka türlü görmeyi kolaylaştırır. İnsan çoğu zaman olayların değil, kendi perspektifinin mahkûmudur.
Zihnin esnek kalabilmesi için sürekli olanlarla değil, kendisiyle meşgul olması gerekir. Dış etkenler zihni şekillendirir ve her şeye onların dayattığı perspektiften bakmayı öğretir.
Zihinsel esnekliği kazanmanın en etkili yolu olanları olduğu gibi kabullenmek ve teslimiyettir, cünkü direnç, zihni tek bir gerçekliğe hapseder. Kabulleniş ise zihni yeniden hareket ettirir. Bu kabulleniş zihnin zaman içinde solmasını engeller. Solmayan bir zihin ise aynı olaya her seferinde başka bir pencereden bakabilecek kadar canlı kalır.
Zihninizi bir gül gibi düşünün. Onu solduran fırtınalar değildir; her fırtınaya direnmeye çalışmasıdır. Kabulleniş rüzgâri durdurmaz, ama kökleri güçlendirir. Güçlü kökleri olan bir gül nasıl kolay kolay solmazsa, kabullenmeyi öğrenmiş bir zihin de perspektifini kaybetmez.
Belki de en büyük güç, fırtınaları durdurmak değildir. Onlara rağmen solmayan bir gül olabilmektir.
Hayata Dair Prensipler Part II.
- Hicbir seyi kisilestirmeyin, tepki vermeyin, sinirlenmeyin.
- Sizinle ayni yasam felsefesi, zihniyet ve kültürde olan insanlarla birlikte olun.
- Insanlari gereksiz yere yüceltmeyin, hayatinizin merkezine koymayin.
- Zerre icinde zerre oldugunuzu unutmayin. Yildiz tozundan yapildiniz, ama hicbir sey degilsiniz.
- Alcak gönüllü olun.
- Tensel ask tinsel askin kücük ölcekli provasidir. Asik olmayan hakikatleri sezemez.
- Kamil insana giden yolda teslimiyet insanin kendisinedir. Baskalarindan medet ummayin.
- Her kurulu düzenin bir sahibi oldugunu unutmayin. Yaratana inanmayin, onun var oldugunu bilin.
- Insani insan yapan onu tasiyanlar degil (araba, yat, taht), onun tasidiklaridir (vicdan, merhamet, ahlak).
- Para insani bozmaz, var olan bozuklugu ortaya cikarir.
- Size verilen güzelliklerin diyetini hizmet ederek ödeyin.
- Canliyi, cansizi yaratandan ötürü sevin.
- Karsilastiginiz zorluklar gercek potansiyelinizi ortaya cikarir. Zorluklarla mücadele etmekten vazgemecmeyin.
- Sikayet etmeyin, cözüm üretin.
- Maneviyatinizi güclendirin.
- Düsüncelerinize ve agzinuzdan cikanlara dikkat edin. Düsündükleriniz yasadiginiz gercekligi olusturur.
- Insanlardan bir beklentiniz olmasin. Aksi taktirde hep hayal kirikligina ugrarsiniz.
- Arzusu olmayan özgürdür, bir seye, istege, ihtiyaca bagimli degildir, serbesttir, serbest düsünür.
- Kitlik bilincinden vazgecin. Bu evrenin temeli bolluktur. Kitliga düsüncelerinizin neden oldugunu bilin. Bir seyi
- istemek, arzulamak, pesinde kosmak kitlik bilinci isaretleridir.
- Dünyada varligini artirmaya calisanlar degil de hep hiclige ulasmaya calisanlar var olmuslardir.
- Ahlak insanin en somut tarafi ile en soyut tarafinin iliskili hale gelmesidir. Insanim özü ile sözü arasindaki bosluk bir ahlak boslugudur. Ya kapatilir ya da ucurum acilir.
Yaratan nezdinde hersey yasandi ve bitti. Rahat olun.
Hayata Dair Prensipler:
- Kimseye planlarinizi anlatmayin. Sessizce calisin, basariyi da sessizce yasayin.
- Sadece özgüven yoksunu insanlar ilgi ve övgü beklerler. Genel olarak kimsenin sizi övmesine izin vermeyin. Bildigiiniz seylerin size anlatilmasinin bir anlami yoktur. Insanlari sizin eksiklerinizi dillendirmeye tesvik edin.
- Kendinizi anlatmayin. Birakin baskalari konussun. Herkes kendisini anlatmaya meraklidir. Dinleyin ve ögrenin. Masadan kaltiginizda siz karsi tarafin herseyini bilirken, karsi taraf sizin hakkinizda hicbir fikir sahibi olamayacaktir.
- Hergün kisisel gelisiminize yatirim yapin.
- Bosa vakit harcamayin. Ölünce dinlenmek icin yeterince vaktiniz olacak.
- Hayati bir bilgisayar oyunu gibi görün. Tek bir sansiniz var ve gelebileceginiz en iyi levele gelmeye calisin. Kaybedecek hicbir seyiniz yok.
- Hayatta anlam aramayin. Kendinize bir hedef secin ve onu gerceklestirmek icin en üstün gayreti gösterin.
- Para, mal, mülk anlamsiz degerlerdir. En kiymetli degerleriniz size en yakin olan insanlardir. Onlar ile mümkün olan en yüksek seviyede kaliteli vakit gecirin.
- Kendinizden vazgecmeyin. Hayatinizin basrolü hep siz kalin. Figüranlar hayatiniza cokca dahil olup, ayrilacaklar. Siz kendi filmizi cekmeye devam edin, kimseye hayatinizda basrolü vermeyin, özellikle karsi cinse.
- Bir gün öleceginizi hatirlayin. Mezarliklara ugramayi aliskanlik haline getirin. Ölümü yeni bir baslangic olarak adledin ve merakla bekleyin, ama bu hayatinizdaki potansiyelinizi en son raddesine kadar kullanin ve icinden gecin.
- Spor yapin, yürüyün, kas kütlenizi artirin. Protein ve takviye alin.
- Iyilik yapin, iyilik iyidir.
- Yaptiginiz her isi severek yapin. Ayni isi o hali ile bir daha yapmayacaksiniz.
- Hep sükredin.
- Kontrolünüzde olmayan hicbir seye kafa yormayin. Sadece düsünceleriniz kontrolünüzdedir. Bunun haricinde bu dünyevi yasamda hicbir sey kontrolünüz altinda degildir. Kontrol etmeye calismak beyhude bir cabadir. Kendinize ve düsüncelerinize odaklanin.
- Her olani oldugu gibi kabul edin. Olmasi gereken olur, olmasi gereken olacak.
- Kitap okuyun.
- Hayati dengeli yasayin. Fazla vermeyin, cok almayin.
- Hayatinizin ilk yarisindan almaniz gerekenleri alin, diger yarisinda verin.
- Olumlu düsünün.
- Sevin, yarin yokmus gibi sevin.
- Huzur arayin, huzur verin.
- Sizden daha bilgili, cesur, zengin, akilli insanlarla biraraya gelin, düsük seviye insanlarla zaman kaybetmeyin. Birlikte oldugunuz insanlarin ortalamasi haline geleceksiniz.
- Bir gün bu dünyadan ayrildiginizda, arkada biraktiginiz sevdiklerinizin sizin hakkiniizda ilk akillarina gelen hos bir sada birakmis olmaniz olsun.
- Amaciniz hayatta kalmak degil, insan kalmak olsun.
- Gidenin arkasindan üzülmeyin. Ders cikarin ve eksiklerinizi tamamlayin.
- Mutlulugu aramayin. Mutluluk dengeli bir hayatin yan ürünüdür.
- Paranin pesinde kosmayin. Hicbir seyin pesinde kosmayin.
- Kalp kirmayin. Özür dilemeyi bilin.
- Alcak gönüllü olun.
Kim Senior Yazılımcıdır?
Senior yazilimci ne anlama geliyor, ondan bahsetmek istiyorum.
Senior anlam olarak icinde ne barindiriyor?
Senior tecrübeden gücünü alan sezgi demektir.
Suna sahit olmussunuzdur. Bir problemi cözmek icin ugrasirsiniz, ama cözümü hemen göremezsiniz. Senior birisine sorarsiniz, “söyle yapacaksin” diiye aninda tepki verir. Düsünmeden, merminin tabancadan cikmasi gibi bu cevap ve ihtiva ettigi cözüm nereden gelmektedir sizce? Sezgi!
Bu sebeple yapay zeka ile olan calisma tarzina da en yatkin olanlar senior yazilimcilardir, cünkü yapay zekaya ilk dokunduklarinda o sezgi onlara isin nereye gidecegini aninda göstermistir.
Bu sebeple yapay zeka ile yazilim yapabilmek icin iyi bir senior yazilimci olmak gerekiyor. Iyi bir yazilimci olma yolunda o sezgisel gücü edinmis olanlar, yapay zekanin nelere kadir oldugunu bilenlerdir.
Nasil senior yazilimci olunur?
10 sene boyunca degisik yazilim alanlarinda ihtisas yaparak! Ayni seyi 10 sene tekrar etmis olmak ayni sey degildir, hele hele 3-5 sene sonra profile senior yazilimci ibaresini eklemek hic degil!
Benim icin senior yazilimcilik 10+ ile baslar. 1-5 sene tecrübe ciraklik, 5-9 sene tecrübe ile kalfa olunur. Buradaki en önemli nokta bu 10 senenin hangi tecrübeler ile dolduruldugudur. Programci ile yazilim mühendisini ayirt eden en büyük farklilik buradaki bilgi ve tecrübe yelpazesidir.
Bizde ne kadar üniversite ve yazilim mühendisi enflasyonu varsa, bir o kadar da senior enflasyonu var.
Bu yazi nereden kaynaklandi diye sorarsaniz, aciklayayim.
Ben senior yazilimcilardaki o sezgiye cokca sahit olmus birisiyim. Burada kendini senior fullstack ya da senior backend yazilimci ünvanlari ile yorum yapan yazilimcilara denk geliyorum. Yorum olarak verdikleri tepkiler o kadar o bahsettigim sezgilere ters ki, senior olmadikarini ifsa etmis oluyorlar.
Almanca’da bir deyim var: Namen sind Schall und Rauch. Türkce’ye isimler ses ve dumandir yani bir anlam ifade etmezler seklinde tercüme edilebilir. Insanlarin kendilerine ya da baskalarinin insanlara verdikleri ünvanlar birsey ifade etmezler. Önemli olan insanin tasidigi inherent degerlerdir.
Yazılım Konusunda Artık Yapmadığım Şeyler
Artik aklima gelmeyen ve aramadigim seyler:
- Yeni Java versiyonlari ve özellikleri
- Yeni catilar ve kullandigim catilarin yeni versiyonlari
- Yazilim hakkinda makaleler
- Yeni programlama dilleri
- Cevik sürec yöntemleri
- Tasarim sablonlari, tasarim prensipleri
- Konferanslar, toplantilar
Artik aradigim seyler:
- Yazilim konusunda hicbir sey ;-)
Tamamen gereksinim odakli yazilim yaptirma üzerinde yogunlasiyorum. Hangi dil, hangi teknoloji, hangi cati, umrumda degil.
Lakin genel olarak kullandigim stack:
- Backend -> Java
- UI -> Angular
- Mobil, Web, Desktop -> Flutter, Dart
- DI -> Spring
- Console -> Go
- CI / CD -> Jenkins, Gitea
- Monitoring -> Grafana, Prometheus, Zipkin, Graylog
- HA -> Cloudflare, Nginx, HAProxy
- DB -> H2, postgres
- Proje yönetimi -> Jira
Video: Forward Deployed Engineer
Yapay Zeka ve Production
Iyi bir yazilimciyi vasatindan ayirt edici en önemli özellik canli tecrübesidir, yani bütün resmi görebilmek. Proje yapmak, kod yazmak insani bir yere kadar yetistiriyor. Asil is, projeyi yazilim ürünü olarak canliya tasimak ve orada isletebilmek.
Simdiye kadar yapay zeka araclari ile nasil yazilim ürünü gelistirilir sorularini tartistik. Projemi henüz teknik olarak bir ürün haline dönüstürme safhasini tamamlamadim. Ama aklim simdiden yapay zeka destekli canli isletme modeline kaymaya basladi. Bu yapay zekaya yazilim yaptirmaktan cok daha heyecan verici bir alan.
Bu model ile:
- Realtime log analizi
- Hatalarin loglar üzerinden tespiti ve dev staging alaninda giderilmesi
- Runtime memeory leak ve yük analizleri ve otomatik kapasite optimizasyonu
- Realtime monitoring ile sistemsel ve mimari sorunlarinin kesfi ve girelimesi
- Kendi kendini runtime icinde tamir eden uygulamalar
gibi konulara birlikte isik tutacagiz.
Yapay zeka araclari ürün gelistirme konusunda muazzam potansiyelleri olduklarini kanitladilar. Canlida calisan bir ürün icin CI yani continious improvement konusunda potansiyellerinin cok daha büyük oldugunu düsünüyorum.
Daha yapay zeka ile veri analizi konusuna girmedik bile. Ücüncü kademe de bu konuya da egilecegiz.
Bu konularin hepsini birlikte burada inceliyor olacagiz. Tecrübelerimi sizlerle paylasamaya devam edecegim.
Video: Yazılımcı Rolleri Değişiyor
Vibecoding ile Neler Yapılamaz?
Yazilim bilgisi olmayan bir vibecodingcinin yapamayacaklari:
- Veritabani ve index nedir bilgisi eksikligi yüzünden olusan veritabani performans problemlerini cözmek
- Canlida yük dagitimi yapmak (HA)
- Veritabani replikasyonu
- Uygulamayi bulut bilisim ya da klasik sunuclarda isletmek
- Bu sunucularin güvenlik ayarlarini (firewall; ufw) ayarlarini yapmak
- Canlida olusan teknik ve network problemlerini cözmek
- Network konfigürasyonu
- Prometheus ve Grafana ile monitoring altyapisini kurmak ve canlida metrik ölcümlerini yapmak
- CI / CD pipeline olusturmak
- Memoryleak analizleri yapmak
- Yazilim ve network mimarisi kurgulama
- Artan yükle altyapiyi scale ettirmek
- Veri migrasyonlari ve backuplar yapmak
- Efektiv git ve branch yönetimi yapmak
- API tasarlamak
- Event driven design yapmak
- Code review yapmak
- Test yazmak
- ERD veri modelleri olusturmak
Daha onlarca konu sayabiliirim.
Yani kod yazdirabilmek, kaldi ki onu da dogru yapamaycaktir, tek basina hicbir anlam ifade etmemektedir.
Bu alanlarin hepsine hakim olan senior yazilimci arkadaslara selamlarimi gönderiyorum.
Sky is the Limit
2022 yilina kadar 25 sene boyunca programci olarak calistim. Yapay zeka araclari kullaniminda sifir kod yazma, sifir kod review, sifir test yazma evrelerine kadar geldim. Yazilimda her zaman müsterinin ve onun isteklerinin ön planda olmasi gerekliligine inandim ve bunu hep savundum. Ama günün sonunda hep masa basina dönüp, kod yazmak zorunda kaldim.
Artik böyle bir zorunluluk yok. Simdi tamamen müsteri odakli calisiyorum ve yapay zeka ile ortaya cikan ürünler daha önce teknik olarak belki hayal edilir ama yapilamaz türden.
Ürünler bir tebesir ile kara tahtada cizilir kadar kolay ortaya cikiyor. Bu satirlari yazarken Fable 5 arka planda su saniyede onlarca belki yüzlerce satir kod yazdi. Ben bu yaziyi tamamladigimda, istedigim uygulama özelligi de calisir durumda olacak.
Hayal edebilene artik hayat bu kadar kolay.
Not: hayallerinin gercekleseceginden emin olsaydin, ne kadar büyük hayal kurardin?
Kod Yazarken Uygulama Gelistirilmez
1.5 yildir bir Java sinifi, tasarim sablonu, algoritma ya da hangi veri yapisini kullanacagim aklima bile gelmiyor. Ben bütün gün uygulamanin faal olacagi alan (domain) icinde takiliyorum ve ne sorusunun cevabini ariyorum:
- müsteri ne istiyor?
- sürec abc ne anlama geliyor ve nasil isliyor?
- beklentiler neler?
- riskler neler?
- böyle yapsak ya da yapmasak ne olur?
Beni daha iyi bir programci yapan hicbir zaman teknik bilgim olmadi. Nasil sorusuna cevap bulmakla yükümlü yapay zekayi yönlendirirken bu teknik bilgi elbette cok faydali. Bu teknik bilgi ile giris ve cikis kapilarini tutmus oluyorsunuz ve giren ve cikan sizin kontrolünüzde oluyor. Ama bundan daha önemli olan sey, icerde olup, bitenleri tayin edebilmek, yani nasil sorusunun dogru cevaplarinin yapay zeka tarafindan bulunmasini saglamak. Bunun yolu sadece alan hakimiyetinden ve o alanda yasanan süreclerin idrak seviyelerinden geciyor.
Bir programciyi iyi bir programci her daim ne sorusunun pesinde olmasi yapmistir. Isin nasil kismi yani kod yazmak cok kücük bir alanla istigal etmekti. Eskiden de iyi programcilar müsterilerine iyi kulak verenlerdi, simdilerde de ayni sey gecerli.
Bir uygulama cikarmak icin gerekli en önemli yetiler analitik düsünme, gereksinim analizi ve iletisim olmustur, kod yazmak degil.
Kisaca kod yazarak uygulama gelistirilmez. Bir uygulama düsünerek ve sorgulayarak gelistirilir. Artik kod yazmamiza gerek kalmadigina göre, asil isime konsantre olabilliriz.
Hayirli düsünmeler.