2024’te Öğrendiğim Yeni Şeyler
Sabah Elliott’ın YouTube videosunu izlerken düşündüm. Acaba ben neler öğrendim diye.
Yılın ilk aylarında, devraldığım Python/Flask projesi için api
dokümantasyonu hazırlamam gerekti. Uygulama otomatik dokümantasyon yapamaya
müsait olmadığı için tüm enpodint’leri elle, manuel olarak dokümante etmek
zorunda kaldım. Bu zorlu süreç sayesinde OpenAPI Spec 2.0’ı sular seller
gibi öğrendim. Gözüm kapalı swagger yaml
’ları yazmaya başladım.
Bir süredir tüm yoğunluğum Go ile geliştirme yapmak olduğu için, ilk gözağrım Django’yu da unutmamak, melekelerimi kaybetmemek için geliştirmeler yapmaya devam ettim. Madem yeni şeyler öğreniyorum, haydi o zaman bu projede Tailwind CSS öğreneyim diyerek, önce bir TextMate bundle’ı yaptım. Projemde kullanırken gördüm ki standalone compiler’ı buggy. Mecburen Django projesi içinde sanki bir Node.js projesi gibi Tailwind’i entegre etmeyi de öğrendim.
TextMate’ten kopamayan adam olarak Ruff Linter ve Python Linter bundle’ları yaptım, bu esnada Ruby 1.8.6 (Tedavülden kalkalı en az 10 yıl oldu) ile mecburen uğraşmak zorunda kaldım :)
Django’dan kopamadığım için daha önce çalıştığım şirketin organizasyonundan yayınladığım ettiğim, ayrıldıktan sonra erişim sıkıntısı çektiğim bir Django Admin filtresi projem vardı, onu başlatan yazdım, bu esnada python paket reposunun manifestlerinin değiştiğini görüp yeni stili öğrenmek zorunda kaldım. Hatta ilk olarak eksik yayınlamışım, sağolsun Bahattin ikaz etti de düzelttim.
Her projemde, command-line otomasyonları için Rakefile kullanan biri olarak, aynı zamanda Ruby melekelerimi de korumamı sağlıyor, hep aklımda olan Rubocop ruby linter entegrasyonunu da hayatıma sokayım dedim, demez olaydım :)
Python için linter olarak Ruff’ı kullanıyorum, hızlı olduğu için. Ne yazık ki static check’leri yapamıyor. Yani olmayan bir paket import ettiğinizde Pylint gibi sizi doğal olarak uyaramıyor, böyle bir paket yok diye.
Mecburen Python/Django projeleri için Ruff ile birlikte çalışabilecek pylint entegrasyonu yapmayı da öğrenmem gerekti. Bu da yetmedi, bu işleri Pre-Commit ve GitHub Action’a da bağlamam gerekti. Keza rubocop’u da. Dolayısıyla kendimi iyi kötü bildiğimi düşündüğüm ama çok eksiğim olduğunu farkettiğim GitHub Action’ları bir tur daha pekiştirirken buldum.
Çok kullandığım bumpversion artık geliştirilmediği için yenisine geçeyim dedim; bump-my-version. Bir sürü şeyi öğrenmek, anlamak ve düzletme yapmam gerekti.
GitHub Action’lar da hızla güncelleniyor, tekrar depandabot entegrasyonu, action’ların güncel halleri, depricated olan direktiflerin düzeltilmesi vs derken yeni bilgilerle öğrenmeye devam ettim.
Yine Elliott’ın başka bir videosu beni acayip gaza getirdi ve bildiğimi sandığım Docker’da yeni level’lar açıldı. Neler mi geldi? Docker Swarm, sanal makineye cluster kurdum, kendi çapımda bir AWS, GCP ultra minimal versiyonunu kurdum. Traefik proxy/load balancer, Docker Networking, Docker Secrets, secure container images, Docker Stack gibi gibi bir sürü şeyi öğrendim ve production ortamı oluşturdum. Portainer diye harika bir orkestrasyon aracı ile tanıştım, hastası oldum.
Her şeyi minimum giderle yapmak için, GitHub’ın container registry’sini (GHCR) daha iyi kullanmayı öğrendim.
İmkanlar kısıtlı olunca kaynağı da doğru ve efektif kullanabilmek için hesap kitap yapmam da gerekti. Hangi servis, ne kadar memory, cpu tüketmeli, kaç replica ile işi çözerim, zero-down-time deployment’ı nasıl çözerim, custom servislerin metrikleri Grafana’ya nasıl akıtırım gibi gibi bir sürü branşım dışı şeyi de kurcalaya kurcalaya öğrendim.
Eski çalıştığım işlerde genelde devops konularını birileri çözerdi ve ben sadece tüketici olarak dashboard’lara bakar takip ederdim, şimdi hepsini kendim yapmak durumunda kalınca mecburen bunları da öğrenmek zorunda kaldım.
İş başa düşünce mecburen öğrenmek gerekiyor, zevkli de oluyor, kendi adıma acayip keyif aldım. Prometheus entegrasyonu, özel bir alarm yapıp bunu Slack’e göndertmek bu kadar zor olmamalı, korkunç bir kullanıcı deneyimi olan Grafana işini süper yapmasa gerçekten kullanması çok zor :) Belkide benim beceriksizliğim de olabilir ama sonuç olarak eliniz ayağınız oluyor Grafana!
Hazırladığım eğitimler bildiklerime cila çekmeyi de sağlıyor, hem unuttuklarımı hatırlıyorum hem de yeni şeyler ekliyorum. Bu doğrultuda, hazırladığım Docker eğitimi için basit bir endpoint’i olan http servisini her platformda yazıp dockerize ettim;
- Django
- Flask
- FastAPI
- Node
- Sinatra
- Go
- C
- C#
Dolayısıyla, C
, C#
benim için ilk kez kurcaladığım şeyler oldu, tam olarak
öğrendim diyemem ama biraz kasarsam istediklerimi yapabilirim gibi geliyor.
Bu arada hepsinin yaptığı iş bir tane endpoint var ve geriye json
olarak:
{"hello": "world"}
Dönüyorlar. Geliştirmesi bana göre en zor olan C
, ama tükettiği ram ve cpu
olarak bakınca hiç biri yanından bile geçemiyor. Neredeyse YOK denecek
kadar az.
Stack | Memory | Image Size |
---|---|---|
C | 108KB * |
69.3Mb |
Go | 2.95MB | 11.7Mb * |
Node | 13.8MB | 218MB |
DotNet | 15.92MB | 253MB |
Sinatra | 28.8MB | 97.7MB |
Flask | 34MB | 161MB |
FastAPI | 38.8MB | 122MB |
Django | 53.12MB | 203MB |
İnanılmaz düşük memory tüketimiyle C
açık ara ezdi geçti. En düşük container
image size olarak Go
affetmedi. Hepsi multi-stage build, kendi bilgilerim
dahilinde olabilecek en küçük image’lar…
macOS kullanıyorum, bu bakımdan Docker’la ilişkim çok arttığı için Orbstack’i de derinlemesine kullanmayı öğrendim.
Bu yıl, http katmanıyla çok ilgilendim, dolayısıyla yeni şeyler de öğrendim. Sene başında ilk commit’i yaptığım, geçtiğimiz günler cila çekip refactor ettiğim basit bir http request debugger’la uğraşırken yine RAW HTTP, isteklerin replike edilmesi gibi konularla uğraşıp basit bir araç yaptım.
HTTP Request ile uğraşınca, Accept
header’ının da derinlerine indim, lazım
olur diye hem öğrendim hem de mimik bir go kütüphanesi yaptım.
ngrok
süper bir tool ama her ay $9
ödememek için bunun free ve
open-source versiyonuna başladım, tcp katmanında beni bekleyen yeni
maceralara da giriş yaptım dolayısıyla. Bittiği zaman açık-kaynak ve ücretsiz
olarak, her developer’ın ihtiyacı bir tool olarak dağıtacağım.
Mobile client ile sunucu arasında güvenli iletişimi sağlamak için SSL REVERSE PINNING konularına girdim, dolayısıyla sertifika türleri, üretimi, verify etmek vs gibi konularda bu yıl boğuştuğum şeyler arasındaydı.
Mobil uygulama geliştiricilerinin çok sevdiğini düşündüğüm Supabase’i de bu yıl kurcalamak ve öğrenmek durumunda kaldım. Gerçekten bir çok problemi ücretsiz olarak çözmeyi sağlıyor.
Vercel hep bildiğim bir platform ama hiç kullanmamıştım, denemek için basit bir python app’i deploy ettim, eskiden bu tür işlerde Heroku kullanırdım, Vercel iyi bir alternatif oldu.
Webhook’larla uğraşırken tesadüfen requestcatcher.com diye bir ücretsiz servise denk geldim, çok işime yaradı.
En çok işime yarayan yeni öğrendiğim, daha doğrusu biliyordum ama kullanmamıştım, artık elim ayağım oldu, direnv. Environment Variable’larla uğraşanların çok işine yarar diye düşünüyorum.
GitHub’da hızlıca repo oluşturmak için minik bir tool
yaptım, Go’nun yeni embed
özelliklerini de bu sayede öğrendim.
Bu sene kitap açısından da (fiziksel kitap, ebook değil) verimli geçti; şu kitaplara başladım:
- Clean Code: Benim dünyamla pek örtüşmese de genel kültür açısından okuyorum.
- Test Driven Development With Python: Bu sene original kitabına sahip oldum, harika bir kitap.
- System Design Interviews I: Ufuk açıcı, harika şeyler var.
- System Design Interviews II: Serinin ikinci kitabı.
- Efective Go Recepies: Fena değil ama beklentimin altında çıktı.
- 100 Go Mistakes: Efsane bir kitap, başucu kitabı, şiddetle tavsiye ediyorum.
Dedim ya, asıl stack’im Go. Bir kısım yanlışlarımı da bu yıl öğrendim. Hatta biraz kendime de kızdım, bu hataları benim yapmamam lazımdı. Olsun, en azından artık bu tür hataları yapmam, tokadı yedim :)
Kendi çapımda biraz AI işlerine de baktım ama genel olarak tüketen tarafındayım, ilk kez bu sene local’de bir şeyleri ayağa kaldırıp kurcaladım. ChatGPT’yi çok kullanmaya başladım, bu iyi değil. Irgat gibi işi ona yaptırıp, şurayı düzelt burayı düzelt diyorum.
Şöyle dönüp bakınca bu yıl open-source 1-2 ufak şey yapmışım, bu da beni mutlu ediyor. Bol bol tuturial izledim (YouTube, LinkedIn Learning, O’Reilly, Frontend Masters), bildiğimi sandığım ama çok eksiğim olan şeyleri de görmüş oldum.
Özetle 2024 kendi adıma bol bol öğrenme, okuma, izleme ve geliştirme ile geçmiş. Umarım okuyucalar da benzer şeyleri yaşamıştır. Bakalım 2025 nasıl geçecek!
Linkler
Yazıda bahsi geçen kendi geliştirdiğim projelerin linkleri aşağıda: