- Üniversite yıllarından başlayan 25 yıllık programlama yolculuğuna dönüp bakarken, teknoloji yerine insanlara, ilişkilere ve deneyime odaklanan bir retrospektif
- Üniversitenin bilgisayar laboratuvarında tesadüfen öğrenilen 10 dakikalık kaynak kodu görüntüleme deneyimi, kişisel bir web sitesini kurup yıllarca sürdürmenin başlangıç noktası oldu
- 8086 işlemcisinin reset vektörüne atlayarak sistemi yeniden başlatan küçük bir deney, bir arkadaşının zihnine meraktan doğan öğrenme yaklaşımını kazıdı
- Spagetti kod hata ayıklama, set-top box animasyonlarının gerçek dünyadaki başarısızlığı, CTF yarışmasında üst sıralar gibi deneme-yanılmalar ve gelişim tekrar tekrar yaşandı
- Zamanla problem çözme becerisinin yetenekten çok deneyimin sonucu olarak görülmeye başlamasını fark ediyor ve sonunda geriye kalan şeyin uzmanlık, etik ve insanlara yaklaşım biçimi olduğunu söylüyor
Web'in başlangıcı: Kaynağı Görüntüleme(Viewing the Source)
- 2001'de üniversiteye girdikten kısa süre sonra, akşam saatlerinde bilgisayar laboratuvarında web'e göz atarken adres çubuğuna
susam.com yazarak web ile ilk kez karşılaştı
- Omzunun üzerinden izleyen bir üst sınıf öğrencisi, Internet Explorer'da View > Source menüsünü açıp bir web sitesinin HTML ile yazılmış metinden ibaret olduğunu anlattı
- Notepad'i açıp
<BODY><FONT COLOR="RED">HELLO</FONT></BODY> gibi basit HTML'leri doğrudan yazdı ve bunların tarayıcıda nasıl göründüğünü gösterdi
- O dönemde
FONT etiketi yaygın olarak kullanılıyordu ve HTML etiketlerini BÜYÜK HARFLERLE yazma alışkanlığı genel kabul görüyordu
- Yazı tipi boyutunu ve rengini değiştirme, ortaya hizalama, arka plan rengini değiştirme gibi şeyleri göstererek web'in nasıl çalıştığını kısaca tanıttı
- Açıklama yalnızca yaklaşık 10 dakika sürmüştü, ama World Wide Web bir anda daha az gizemli ve çok daha ilgi çekici gelmeye başladı
- Anlatımı bitiren üst sınıf öğrencisi koltuğu geri vermeden web'i kullanmaya devam etti; yer sıkıntısı yüzünden yurda dönmek zorunda kaldı
susam.com alan adı zaten Türk mutfağıyla ilgili bir işletme tarafından kullanıldığı için kaydedemedi ve bunun yerine .net alan adını seçti
- Bu kısa karşılaşma, sonrasında kişisel web sitesini kurup sürdürdüğü uzun yolculuğun başlangıcı oldu
Reset vektörü(The Reset Vector)
- Üniversite yıllarında bilgisayar laboratuvarında Intel 8086 tabanlı bir MS-DOS makinede assembly diliyle asansör kontrol programı yazarken yaşanan bir olay
- Derste öğrendiği, 8086 resetlendiğinde CS:IP'nin FFFF:0000 olarak ayarlandığı bilgisini hatırladı
DEBUG.EXE içinde o adrese atlanırsa ne olacağını merak edip doğrudan denedi
C:\>DEBUG -G =FFFF:0000 komutunu çalıştırır çalıştırmaz sistem anında yeniden başladı
- Bunu izleyen ve her dönem birinci olan arkadaşı büyük şaşkınlıkla bunu nasıl akıl ettiğini sordu
- Bir hafta sonra yurda gelip, notlarda hep birinci olsa da küçük bir bilgiyi hatırlayıp bizzat deneyecek meraka sahip olmadığını itiraf etti
- Artık birinciliği hedeflemeyeceğini, bunun yerine öğrendiklerini araştırıp deneyerek ve keyif alarak çalışacağını söyledi
- Sonrasında da üst düzey notlarını korudu, ama gerçekten bir daha hiç birinci olmadı
- İşlemcinin reset giriş noktasına atlayan tek bir deney, birinin öğrenme yaklaşımını rekabetten keşfe çeviren bir dönüm noktası oldu
Ortadaki adam saldırısı ve ilk mühendislik görevi(Man in the Middle)
- Üniversiteden mezun olduktan sonraki ilk işinde e-banking ürünü teknik destek ekibine yerleştirildi ve belirli bir bileşeni dağıtmak için installer çalıştırma görevini üstlendi
- Python ile yazılmış installer, hedef ortamla ilgili varsayımları zayıf olduğu için sık sık başarısız oluyordu; ilk haftasında installer'ı kararlı hale getirip adım adım kullanıcı kılavuzu yazdı
- Kod iyileştirmesinden çok kullanıcı kılavuzu daha büyük ilgi gördü
- Tekrarlayan destek işlerinde sınır hissetti ve daha ciddi geliştirme işi istediği için birkaç kez ekip değişikliği talebinde bulundu
- Sonunda başka bir şehirdeki Archie(mimari) ekibi için mülakat fırsatıyla tanıştırıldı
- Archie ekibi, e-banking ürününün tamamını destekleyen web framework'ü ve çekirdek mimari bileşenlerden sorumluydu
- API routing, kimlik doğrulama ve yetkilendirme, cookie yönetimi gibi şeyleri Java Servlet ve JSP ile kendi içinde geliştirmişlerdi
- Yapı, Spring ya da Django gibi açık kaynak framework'ler ortaya çıkmadan önce oluşturulmuştu
- Banka ortamında kullanıldığı için sıkı güvenlik testleri ve düzenli denetimler zorunluydu
- 2006'daki telefon mülakatında SQL injection ve XSS önleme gibi güvenlik sorularını yanıtladı, ancak MITM(ortadaki adam saldırısı) terimiyle ilk kez karşılaştığı için bilmediğini kabul etti
- Görüşmeci, “PKI ve MITM'i derinlemesine çalış. Kurumsal bankacılık ürünü için dijital imza özelliği geliştireceğiz.” diye açıkladı
- Sonraki birkaç hafta boyunca RFC belgeleriyle açık anahtar altyapısı(PKI) ve açık anahtarlı kriptografi standartlarını yoğun biçimde çalıştı
- Başta zor ve göz korkutucu geldi, ama zamanla giderek sezgisel ve zarif bir sistem olarak anlam kazandı
- Yeni şehre taşındıktan yaklaşık bir ay sonra, açık kaynak Bouncy Castle kütüphanesini kullanarak dijital imza özelliğini tamamladı
- Sonrasında ürünün başka birçok kritik bölümünü de geliştirerek, yüzlerce banka ve milyonlarca kullanıcının kullandığı olgun bir sistemde kodunun yer alması deneyimini yaşadı
- Yöneticisi mükemmel bir mentordu ve onun desteği uzun yıllar boyunca özgüveninin temeli oldu
- Yaklaşık 20 yıl sonra bile ilgili ürün hâlâ çalışıyor; bazen müşteri gözüyle tarayıcı geliştirici araçlarını açtığında o dönem yazdığı kodun izlerini görüyor
Spagetti kod(Spaghetti Code)
- 2007~2008 civarında, OpenTV set-top box için widget geliştirmeye yönelik bir kavram kanıtlama(PoC) çalışmasına katıldı
- Aşırı derecede kısıtlanmış bir C ortamında kod yazarken widget'ın aralıklı olarak çökmesi sorunu ortaya çıktı
- Karmaşık biçimde dolaşmış mantık ve kontrolsüz pointer işlemleri nedeniyle, kendi yazdığı kodu bile anlamakta zorlandığı bir spagetti kod durumuna gelindi
- Dört kişilik ekibin lideri ve mimarına kodu bir tarball olarak iletti
- Saatlerce çözemediği sorunu mimar, kodu aldıktan yalnızca 5 dakika sonra belirli bir dosyadaki pointer hatası olarak tam isabetle tespit etti
- O tek satır düzeltilince çökme anında ortadan kalktı
- Bu deneyim, kendini oldukça iyi sanmasına rağmen iyi bir yazılım geliştirici olmaya daha çok yolu olduğunu fark etmesini sağladı
- Sonraki yıllarda gelişmeye devam etti ve bugün, o dönemle kıyaslanamayacak ölçüde yazılım karmaşıklığını yönetebilme becerisine sahip olduğunu söylüyor
Animasyonlu televizyon widget'ları(Animated Television Widgets)
- Aynı dönemdeki başka bir projede Java ME(Micro Edition) tabanlı bir set-top box platformu için widget geliştirdi
- Proje, üç tarafın birlikte çalıştığı bir yapıdaydı
- Kendi şirketi: yazılım tedarikçisi rolünde
- Büyük telekom şirketi: DTH televizyon hizmeti markasının sahibi
- Set-top box üreticisi: donanım ve platform sağlayıcısı
- Telekom tarafı, widget'lara slide in/out gibi animasyon efektleri uygulanıp uygulanamayacağını sordu
- Ortak toplantıda set-top box üreticisi, “Bu set-top box animasyonu desteklemiyor; imkânsız.” diye kesin konuştu
- Widget çizilebiliyorsa konumunu azar azar değiştirip tekrar tekrar yeniden çizerek animasyon yapılabileceğini düşündü
- Bu ilkeyle emülatörde düzgün çalışan bir demo geliştirdi
- Bir sonraki toplantıda demo paylaşılınca set-top box üreticisi sert tepki verdi ve çalışmanın derhal durdurulmasını istedi
- Bunun, daha önce resmî olarak imkânsız dedikleri pozisyonla çeliştiğini savundular
- Telekom temsilcisi araya girip, “İmkânsız dediğiniz şeyi bunlar çalıştırıyor;
üretici olarak kendi ürününüzün performansını bilmemeniz nasıl mümkün olabilir?” diyerek sert biçimde çıkıştı
- Sonrasında gerçek donanım üzerinde test edilince, emülatörde akıcı olan animasyonun TV ekranında belirgin takılmalarla göründüğü ortaya çıktı
- Birkaç hafta boyunca frame rate ayarı, buffering yöntemleri ve rendering loop optimizasyonları denendi
- Sınırlı gömülü donanım performansının hesaplama ve render yükünü kaldıramadığı anlaşıldı
- Sonunda telekom şirketi, “Yarım yamalak bir animasyon olacağına hiç olmasın.” diyerek özelliği tamamen iptal etti
- Sonuçta set-top box üreticisinin değerlendirmesinin pratikte doğru olduğu doğrulanmış oldu
İyi lütuflar(Good Blessings)
- 2009'da RSA Security'de yaklaşık bir yıl çalıştıktan sonra, matematik ve algoritma ağırlıklı daha entelektüel bir iş aramaya başladı
- RSA Laboratories'in baş bilim insanı Dr. Burt Kaliski, kariyer yönü hakkında tavsiye vermek için bizzat görüşme teklif etti
- Bu tavsiyenin ardından yeni bir ekibe katıldı ve orada 6 yıl çalıştı
- Parser generator'lar, biçimsel dil belirtimleri ve bunların implementasyonu
- Petabayt ölçeğindeki veritabanları için indeksleme ve query engine geliştirme
- Neredeyse her gün yeni bir şey öğrenerek kariyerinin en keyifli dönemini yaşadı
- Yıllar sonra, kısa süren o görüşmenin kariyer rotasını değiştirdiğini fark edip teşekkür e-postası gönderdi
- Dr. Kaliski'nin yanıtında şu düşünce yer alıyordu
- Başkaları kendi kariyerine nasıl yatırım yaptıysa, kendisinin de gelişim yolundaki insanlara cesaret vermeyi amaçladığı
- İyi lütufları bir nesilden diğerine aktarmak
CTF skor tablosu(The CTF Scoreboard)
- 2019'a gelindiğinde artık 20'li yaşlarının başındaki yeni mezun bir mühendis değil, yıllardır C/C++ tabanlı düşük seviyeli ağ ve veritabanı sistemleri geliştirmiş orta kıdemli bir staff engineer durumundaydı
- Kariyeri, Go ve Python tabanlı mikroservis geliştirmeye öncülük ettiği yeni bir aşamaya geçti
- Kişisel projelerinde zaten Python ve Go kullandığı için bu geçiş nispeten doğal oldu
- Ekim ayındaki siber güvenlik farkındalık ayı kapsamında şirket içinde CTF(Capture the Flag) yarışması düzenlendi
- SQL injection, zayıf kriptografi, binary reversing, stack overflow exploit'leri gibi çeşitli teknik bulmacalardan oluşuyordu
- Rekabet ve zaman sınırlı problem çözme baskısından hoşlanmamasına rağmen katıldı; yaklaşık 8 saat içinde soruların yaklaşık %90'ını çözüp birinci oldu
- Yarışma boyunca çalışma arkadaşları sık sık yanına gelip gidişatı izledi ve şaşkınlıklarını dile getirerek ofiste bunu konuştu
- Saygı duyduğu iki genç mühendis arkadaşının bu başarı hakkında konuşmasına tesadüfen kulak misafiri oldu
- İçlerinden biri sonucu överken diğeri, “Tabii ki, 10 yıldan fazla C yaptı.” diye yanıt verdi
- Gençliğinde bu tür problem çözme yeteneği ‘zekâ’ olarak görülürken, artık bunun doğal biçimde deneyimin sonucu olarak yorumlandığını fark etti
- Teknik başarılar deneyime bağlansa da, bundan sonra uzmanlık, etik ve ekip arkadaşlarına yaklaşımıyla iyi bir izlenim bırakmak istediğini söylüyor
Genel değerlendirme
- 25 yıla yayılan bilişim yolculuğu, merakla başlayıp deney, işbirliği, minnettarlık ve içe bakışla devam eden bir akış
- Dikkat çekici teknik başarılardan çok, süreç içinde kurduğu insan ve öğrenme ilişkileri daha kalıcı oldu
- Her dönemin deneyimi birbirine eklenerek sürekli gelişim ve alçakgönüllü bir tutum oluşturdu
- Yazılım geliştirme kariyerinin özü, sonunda kodun kendisinden çok, öğrenilen ve birlikte çalışılan insanların hikâyesi oluyor
1 yorum
Hacker News yorumları
Eskiden insanlara iş verildiğinde onu kendi başlarına iyi şekilde halledeceklerine dair bir güven vardı
Ama bugünlerde junior mühendisten Twitter ölçeğinde sistem tasarımı isteniyor ve Leetcode sorularının çözümlerini ezberlemesi bekleniyor
Bunlar eskiden gereksiz prosedürlerdi ve artık LLM'lerin bu kültürü ortadan kaldırmasını umuyor
Ben de benzer şekilde başladım
İlkokul 3. sınıftayken, okul kitap fuarında “Make Your Own Web Page! A Guide for Kids” adlı kitabı görüp annemden almasını istemiştim
O zamanlar internet sanki şirketlere özel bir şey sanıyordum ama kendi web sayfamı yapabileceğimi öğrenince tamamen kaptırdım
HTML öğrenirken hacker olmuş gibi hissediyordum ve öğretmenim o kadar şaşırmıştı ki ailemi bile aramıştı
Sonrasında “Sams Teach Yourself C in 24 Hours”, Flash MX 2004 için bir ActionScript kitabı ve bir C++ kitabıyla programlama öğrendim
Bugün bunun sayesinde fena olmayan bir kariyer kurdum ve yakın zamanda o kitabı eBay'den tekrar bulup okurken gülümsedim
Telekom şirketindeki çalışanın set-top box sorumlusuna “sadece çeneni kapat” dediği kısımda kahkaha attım
Tüm durum saçma ama komik bir sahne gibiydi. İnsanlar çoğu zaman gereksiz şeylere takılıp kendilerini zor duruma sokuyor
Boş yere kendini aptal gibi göstermiş oldu. Yine de gerçekten çok eğlenceli bir yazıydı
Python ile yazılmış kurulum programının ortam varsayımları yanlış olduğu için her zaman elle müdahale gerektirdiği kısmına katılıyorum
Ben de SDR geliştirme ortamını kurmak için yarım gün harcadım. Bağımlılık cehennemi hâlâ sürüyor
Sonunda çalıştı ama gerçekten berbattı
Server-side gibi ortamı container ile kontrol edebildiğiniz yerlerde iyi ama onun dışında asla kullanmak istemem
Eski ticari yazılımlar ile bakımsız OSS projeleri birbirine karışmıştı ve birkaç ayda bir rastgele bozulup geliştirmeyi durduran krizler çıkıyordu
Sonunda bazı şirketler geliştirici başına AMI tabanlı EC2 instance açma yöntemine geçti ama bunları yöneten CLI bile sık sık bozuluyordu
Gerçekten “eğlenceli” zamanlardı
Ben de artık 20 yıllık kariyer noktasına geliyorum ama sadece web geliştirme yaptığım için olsa gerek, çok ilginç anım yok gibi geliyor
Yaş ilerledikçe teknik bir sorunu çözseniz bile insanlar artık şaşırmıyor
Yine de bir gün yaşlı bir insan olarak hâlâ kod yazıyor olursam, belki o zaman yeniden etkileyici görünebilir
“İşlemcinin reset noktasına atladı” cümlesini okuyunca, sadece CPU'nun değil, kişinin öğrenme tutumunun da resetlenmiş olabileceğini düşündüm
DevOps'a ilginiz varsa Davide Bianchi'nin "Tales from the Machine Room" yazısını tavsiye ederim
“susam.com” alan adını eskiden alamadığını söylemiş ama şu anda satışta
Liste fiyatından daha ucuza bile alınabilir. Tabii .net de gayet iyi ama duygusal bir bağ varsa denemeye değer
Bu güzel hikâyeleri paylaştığın için teşekkürler
LLM öncesi yazılım sektöründe çalışmış olmak, ancak bizzat yaşanarak anlaşılabilecek bir deneyim