paint-brush
Motosiklet Bakımının Kodu ve Sanatı: Tipik Acemi Hatalarıile@shcherbanich
169 okumalar

Motosiklet Bakımının Kodu ve Sanatı: Tipik Acemi Hataları

ile Filipp Shcherbanich7m2024/08/16
Read on Terminal Reader

Çok uzun; Okumak

Kodlama aslında bir motosiklettir, çok güçlü ve hızlı bir motosiklet. Kodlamada, tıpkı sürüşte olduğu gibi, selede kalmak için sorumlu ve bilinçli olmanız ve kazanan olmak için bunu ikiye katlamanız gerekir. Bu makalede, hem yeni hem de deneyimli geliştiricilerin yazılım oluştururken hatırlamaları gerekenler hakkındaki düşüncelerimi paylaşmak istiyorum.
featured image - Motosiklet Bakımının Kodu ve Sanatı: Tipik Acemi Hataları
Filipp Shcherbanich HackerNoon profile picture
0-item


Kodlamanın kolay olduğunu söylerler, tıpkı bisiklete binmek gibi. Aslında programlama aslında bir motosiklettir, çok güçlü ve hızlı bir motosiklet. Kodlamada, tıpkı sürüşte olduğu gibi, selede kalmak ve kazanan olmak için bunu ikiye katlamak için sorumlu ve bilinçli olmanız gerekir. Gerçekten de, sürücüler ve kodlayıcılar aynı çaylak hatalarını paylaşırlar: acemiler genellikle hızlı, güçlü araçlara ve yenilikçi numaralara odaklanma eğilimindedir, bunun tek başına gerçek bir ustayı tanımladığına inanırlar. Bu zihniyet kısmen, acemilerin mesleklerinin karmaşıklığını ve önemini kavrayamadıkları "Dunning-Kruger etkisinden" kaynaklanır. Neyse ki, deneyimle birlikte, en ateşli acemi bile programlama sanatının sadece en iyi algoritmayı seçmekten çok daha fazlasını içerdiğini fark eder. Bu makalede, bir programcı için gerçekten neyin önemli olduğu ve hem yeni hem de deneyimli geliştiricilerin yazılım oluştururken ve kod yazarken hatırlamaları gerekenler hakkındaki düşüncelerimi paylaşmak istiyorum.

Okunabilirlik performanstan daha önemlidir, ancak her zaman değil

Tipik acemi motosikletçiler neyle başlar? Sayılar ve aletler. Güç, tork, çeyrek milde teorik milisaniyeleri ısırmak için performans parçaları... Tıpkı MotoGP başlangıç ızgarasına girmek üzereymiş gibi. Bu arada, birincil görevleri sadece güvenli bir şekilde sürmeyi öğrenmektir. Benzer şekilde, acemi geliştiriciler genellikle gereksiz olduğu yerde kod performansına takılıp kalırlar. Python'da `dict()` mi yoksa `{}` mi daha verimlidir veya performansı düşürme potansiyellerine rağmen çerçeveleri kullanmanın artıları ve eksileri hakkında tartışan makaleler bu saplantıyı körükler. Programlama dilinizin inceliklerini anlamak faydalı ve bazen hayati önem taşısa da (uçak yazılımları, borsa robotları veya tıbbi cihazlar gibi) günlük olarak oluşturduğumuz programların çoğu için her zaman kritik değildir. Performans açısından kritik yazılımlar üzerinde çalışıyor olsanız bile, kodun hangi bölümlerinin yüksek performans gerektirdiğini ve hangilerinin gerektirmediğini bilmek önemlidir.


Ancak her zaman önemli olan şey, kodun okunabilirliğidir. Çok sayıda çalışma ve anket, geliştiricilerin kodu yazmaktan çok okumaya ve anlamaya daha fazla zaman harcadığını doğrulamaktadır. Örneğin, çalışma "Geçen Yaz Ne Yaptığını Biliyorum – Geliştiricilerin Zamanlarını Nasıl Harcadıklarına Dair Bir Araştırma" IDE'de harcanan zamanın yalnızca %4'ünün kod düzenleme için kullanıldığını buldu. Küresel Kod Zamanı Raporu 250.000'den fazla geliştiricinin katıldığı bir ankete göre, katılımcıların günde yalnızca yaklaşık 52 dakikasını aktif olarak kod yazmaya harcadığı ortaya çıktı. Geri kalan zaman projeyi tartışmak ve planlamakla geçiyor ve yaklaşık 41 dakika IDE'de ve proje belgelerinde kod okumaya ayrılıyor.


Çoğu durumda, hedefimiz karmaşık destek gerektirmeyen ve rekabetçi bir ortamda gelişecek sürdürülebilir bir ürün yaratmaktır. Bu, performansı tamamen göz ardı edebileceğimiz anlamına gelmez; sürdürülebilirlik ve performansın bir arada var olduğu bir denge bulmalıyız. Yüksek performanslı koda ihtiyaç duyulursa, projenin lansmanından sonra yavaş bölümleri optimize edebiliriz.


Ayrıca derleyicilerin ve yorumlayıcıların evrimleştiğini, ancak kodunuzun aynı kaldığını unutmayın. Bir derleyici sürümü için yazılmış süper-hiper-optimize edilmiş büyülü bir kod parçası, bir diğeri için alakasız bir fiyasko olabilir. Ayrıca, gelecekteki geliştiricilerin -veya hatta sizin- bu kodla çalışması gerekecektir. Peki, performans için okunabilirliği ne zaman feda etmeliyiz?


Performansa okunabilirlikten daha fazla öncelik vermenin ne zaman gerekli olduğunu belirlemek, uygulamanızdaki darboğazları tespit etmeyi gerektirir:


  • Uygulamanın Profilinin Oluşturulması : Profil oluşturma, belirli kritik kod bölümlerinin performansı önemli ölçüde etkilediğini ortaya koyarsa, bu parçaların optimize edilmesi okunabilirliğin azaltılmasını haklı çıkarabilir.

  • Yük Testi : Yüksek yüklerin simülasyonu, gerçek dünya sorunlarına dönüşmeden önce performans darboğazlarının belirlenmesine yardımcı olabilir.

  • Kullanıcı Geri Bildirim Analizi : Kullanıcılardan geri bildirim toplamak, zayıf performansın olduğu alanları vurgulayabilir.

  • Günlük Kaydı ve İzleme : Yürütme günlüklerini ve ölçümlerini analiz etmek, uygulamanın gerçek dünyadaki çalışması sırasında sorunlu alanları belirleyebilir. Bu aşama, uygunsuz API kullanımının performans sorunlarına neden olması gibi beklenmeyen sorunları ortaya çıkarabilir.

  • Statik Kod Analiz Araçları : Bazı araçlar kod incelemeleri sırasında performans iyileştirmeleri önerebilir. Bu araçları görev incelemeleri sırasında otomatik olarak çalıştırmak iyi bir uygulamadır.


Bu ipuçları, uygulamanızın zayıf noktalarını belirlemenize yardımcı olarak gerekli optimizasyonlara odaklanmanızı sağlayabilir. Kişisel deneyimime dayanarak, bu optimizasyonların egzotik dil yapılarını içerme olasılığı daha düşük ve veritabanı etkileşimlerini veya harici API kullanımını optimize etmeyi içerme olasılığı daha yüksektir.

Belgeleme, yapılan işin anlaşılmasına yardımcı olur

Yoldayken, en önemli güvenlik becerilerinden biri öngörülebilir olmak ve benzer şekilde başkalarının niyetlerini okumaktır. Kodlamada, tıpkı sürüşte olduğu gibi, diğer insanların zihinlerini doğrudan okuyamazsınız. İki tekerlek üzerindeyken, ince hareketleri fark etmeli ve diğerlerinin bir sonraki saniyede ne yapacağını tahmin etmelisiniz. Programcılar telepatiyi değiştirecek güçlü bir araca sahiptir (ancak her zaman kullanmazlar): evrak işleri. Çoğu geliştirici, anketler gibi, bir proje için dokümantasyonun çok önemli olduğu konusunda hemfikirdir. Stack Overflow Geliştirici Anketi 2023 , katılımcıların %90,36'sının düzenli olarak teknik dokümantasyon kullandığı bir çalışma. Ancak, çoğu zaman tüm cevapları orada bulamıyorlar, bunun yerine Stack Overflow'a (%82,56) ve çeşitli bloglara (%76,69) yöneliyorlar. Başka bir çalışma, Microsoft Araştırması: Yazılım Geliştiricilerinin Günlük Yaşamı , geliştiricilerin günlerinin %1-2'sini dokümantasyona harcadığını, katılımcıların %10,3'ünün ise kötü veya güncel olmayan evrak işleri nedeniyle çok fazla zaman kaybettiğini gösteriyor.


Belgeleme, Confluence gibi sistemlerdeki ayrıntılı proje açıklamalarından kod yorumlarına ve otomatik veya yarı otomatik olarak oluşturulan proje açıklaması web sitelerine kadar birçok biçim alabilir. Hatta projenin kök dizinindeki bir README dosyası kadar basit olabilir. Biçimden bağımsız olarak, belge oluşturma süreci yalnızca ürünün nasıl çalıştığına dair bilgi iletmenin çok ötesine geçer. Bu süreç , yaptığımız şeyi yeniden düşünmemizi sağlar ve bu da genellikle API'de ve genel mimaride iyileştirmelere yol açabilir. Oluşturduğum işlevselliği belgelendirirken, bununla çalışmanın zor olabileceğini sıklıkla fark ettim ve bunu düzeltmenin yollarını buldum.


Belgelemenin sürdürülmesinin her zaman önemli bir çaba gerektirdiğini, özellikle de proje sık sık değişen bir aşamadaysa, hatırlamak önemlidir. Bu gibi durumlarda, tüm riskleri tartmalı ve hangi mantığı belgelendireceğinizi dikkatlice düşünmelisiniz. Projeniz olgun bir duruma ulaştıysa, iyi bir belgeleme zorluklardan daha fazla fayda getirecektir: yeni geliştiriciler işe katılabilir ve daha hızlı ivme kazanabilirken, uzun süredir çalışanlar belirli özelliklerin nasıl çalıştığını hızla anlayabilir. Ek olarak, birçok ekibin olduğu büyük bir projede iyi bir arama işlevine sahip belgeleme, özellik çoğaltılmasını önleyebilir.

Başkalarına ne yaptığınızı söylemek utanılacak bir şey değil

Sinyal kullanmak, öngörülebilir bir sürücü olmanın en temel biçimidir. Benzer şekilde, kod yorumlama muhtemelen başkalarına ne yaptığınızı söylemenin en kolay ve en basit yoludur. Ve, sinyal vermekte olduğu gibi, sizi daha az havalı yapmaz. Biliyorum, yorumların gereksiz olduğuna dair yaygın bir inanış var çünkü kod kendini açıklayıcı olmalı. Ama hayır, buna tamamen katılmıyorum. Kaliteli kod, iyi değişken ve işlev adlandırma, net yapı ve temiz kod ilkelerine bağlılık sayesinde genellikle sezgisel olarak anlaşılabilir. Ancak, bu gibi durumlarda bile, iyi düşünülmüş yorumlar paha biçilmez bilgiler sağlayabilir.


Yorumlar, anlaşılması için ek bağlam gerektiren karmaşık algoritmalar veya çözümler söz konusu olduğunda önemli bir rol oynar. Bir yaklaşımın ardındaki "neden"i açıklayabilirler, bu her zaman kodun kendisinden belli olmaz. Bu, özellikle kod performans için optimize edildiğinde, ancak niyetleri ve mantığı hemen net olmadığında önemlidir. Yorumlar ayrıca seçilen algoritmanın doğru yönde hareket edip etmediğini yeniden değerlendirmeye yardımcı olabilir.


Yorumlar, yeni ekip üyeleri için veya uzun vadeli proje desteği durumunda belirgin olmayabilecek karmaşık iş mantığı veya projeye özgü gereksinimlerde hayat kurtarıcıdır. Ekip içinde bilginin korunmasına yardımcı olur ve geliştiriciler arasında proje transferini kolaylaştırır.


Elbette, yorumların apaçık olanı belirttiği veya güncelliğini yitirip yanıltıcı hale geldiği aşırı yorumlardan kaçınmak önemlidir. Amaçları, kodu gereksiz bilgilerle karıştırmak değil, netlik sağlamak ve kodun anlaşılmasını desteklemektir.

Test: Kod anlama ve doğrulama için bir araç

Tamam, şimdi nihayet nasıl sürüleceğini öğrendiğimizi ve şansımızı gerçek bir yarış pistinde denemek istediğimizi hayal edin. Yakında gerçek yarışın sadece 'pedalları sonuna kadar çevirmek' olmadığını göreceğiz. Alışkanlıklarınıza ve yarış koşullarınıza uyması için makinenizi eğitmek, test etmek ve ince ayar yapmak anlamına gelir. Aynısı kod için de geçerlidir: Gerçek bir dönüş için başlatılmadan önce iyice denenmeli, test edilmeli ve gerekirse düzeltilmelidir. Bu yüzden kod testine maksimum sorumlulukla yaklaşmak çok önemlidir. Testler genellikle yalnızca bir hata bulma aracı olarak görülür, ancak rolleri daha geniştir:


  • Hata ve Kusur Tespiti : Test, ürün kullanıcıya ulaşmadan önce hataları ve öngörülemeyen davranışları belirleyerek kaliteyi artırır ve kullanıcı sorunlarını azaltır.
  • Kod Anlayışı : Test senaryoları oluşturmak, kodun yapısı ve işlevselliği hakkında derin bir anlayış gerektirir; bu da programın mantığının ve etkileşiminin daha iyi anlaşılmasını sağlar.
  • Belgeleme Eki : Testler, fonksiyonlar ve yöntemler için kullanım örnekleri olarak kullanılabilir, projenin işlevselliği hakkında bilgi bulmaya yardımcı olabilir ve gerçek kullanım durumları sağlayarak yeni uzmanlara yardımcı olabilir.


Yüksek kaliteli, güvenilir ve anlaşılır kod üretmek için etkili test hayati önem taşır. Ancak, dokümantasyon gibi, test de özellikle projenin erken aşamalarında kaynak yoğun olabilir. Test etme gerekliliğini zaman ve kaynak kısıtlamalarıyla dengelemek esastır.


Karmaşık kod için mutlak test kapsamının basitçe elde edilemez olduğu da açıktır. Bu nedenle geliştiriciler, sonsuz bir test döngüsünden kaçınmak için ne zaman duracaklarını bilerek, anahtar işlevleri ve kritik kod bölümlerini test etmeyi önceliklendirmelidir.

Kodunuzu arkadaşınızı sevdiğiniz gibi sevin ve ona iyi bakın

Son olarak, hiçbir motosiklet uygun bakım yapılmadan güvenilir olamaz. Sürüşün bu yönünü ihmal eden oldukça fazla insan var, ancak kesinlikle parçası olmak istemediğimiz hikayeler (komikten korkutucuya ve üzücüye kadar) uyduruyorlar. Programlama dünyasında, tıpkı motosiklette olduğu gibi, kod bakımı sadece bir öneri değil, özellikle uzun vadeli projeler için bir zorunluluktur. Bakım ve güncelleme eksikliği, ürünün eskimesine ve güvenlik açıklarına yol açar.


Kod, en son derleyiciler ve yorumlayıcılarla uyumluluk için güncellenmediğinde, onu güncellemek giderek zorlaşabilir (ve aslında zorlaşacaktır). Masaüstü veya mobil uygulama geliştiriyorsanız ürününüz yeni işletim sistemi sürümleriyle çalışmayı durdurabilir. Bir web sitesi için, güncel olmayan araçlar ve teknolojiler nedeniyle işlevini yitirebilir. En basit sorun, süresi dolmuş bir güvenlik sertifikası veya yenilenmesi için güncel olmayan bir yazılım olabilir.


Düzenli güncellemeler ve yeniden düzenleme, kod okunabilirliğini sürdürmek için de önemlidir. Bu, projeyi yönetilebilir tutar, gelecekteki değişiklikleri ve özellik eklemelerini basitleştirir.


Kısacası, kodunuzu sevin ve ona zaman ayırın - ama aşırıya kaçmayın, yoksa "Sıfır Teoremi"nin kahramanı gibi olursunuz. İyi şanslar!