Başkalarının kodunu nasıl okuyorsun? [kapalı]


23

Neredeyse her gelişmiş programcı, diğer profesyonellerin kodlarını okumanın çok faydalı olduğunu söylüyor. Genellikle açık kaynak tavsiye ederler.

Okudun mu duymadın mı Bunu yaparsanız, ne sıklıkta ve kodu okuma prosedürü nedir? Ayrıca, yeni başlayanlar için SVN ile uğraşmak biraz zor - bir demet dosya. Çözüm nedir?

Yanıtlar:


25

Okudun mu duymadın mı

Evet.

Yaparsanız, ne sıklıkta

Günlük. Sürekli. Ben (çoğunlukla Python ile ilgili) çok sayıda açık kaynak projelerle çalışmak ve gereken en doğru dokümantasyon çünkü kaynağını okuyun.

ve kodu okuma prosedürü nedir?

Um. Aç ve Oku.

Ayrıca, yeni başlayanlar için SVN ile uğraşmak biraz zor - bir demet dosya. Çözüm nedir?

Aç ve Oku. O zaman daha fazlasını oku.

Kolay değil. Hiçbir şey kolay yapmaz. Anlaşılacak bir Kraliyet Yolu yok. İşe alır.


Cevabınız için teşekkürler. Kodun iyi olup olmadığını tanımlamanın yolu nedir? Çünkü her açık kaynaklı proje gerçek profesyoneller tarafından yapılmıyor mu?
Sergey

1
@Sergey: "Kodun iyi olup olmadığını tanımlamanın yolu nedir?" Kodu oku. "İyi" özneldir. İşe yararsa ve anlayabiliyorsan, iyi. Kafa karıştırıcıysa veya gerçekten çalışmıyorsa, iyi değil. Pek çok, pek çok kalite özelliği vardır: bakım yapılabilir, güvenli, uyarlanabilir, yüksek performanslı, vb., Vb. Kod bir veya bir başkasında daha az iyi olabilir.
S.Lott


@Sergey - Yazılan en büyük kod olsa bile, okuyamıyorsanız (deneyim seviyenizden dolayı), hiçbir işe yaramaz. Bunu zamanınızın en iyi kullanımı olarak görmese de, kötü yazılı kodlara maruz kalacaksınız, bu nedenle farkı öğrenebilirsiniz. S.Lott'un dediği gibi iş ve zaman alıyor.
JeffO

Arkanıza yaslanıp roman okuyanlar gibi kod okuyabilenlere hayran kalırken, zaman zaman biraz sıkıcı buluyorum. Benim için “kod okuma” nın aslında benim yaptığım aktiviteleri tarif etmediğini fark ettim - yaptığım iş için daha iyi bir ifade “kod anlama” ve belgelerin okunmasını, hata ayıklayıcısına adım atmanın ve hatta testleri okumayı içerdiğini gördüm. Kod okuma hakkında uzun bir yazı yazdım - technikhil.wordpress.com/2010/07/06/how-to-read-code-a-primer
Nikhil

9

Sahip olduğun bilmecenin birkaç katmanı var. İlk olarak, yüksek seviyede başlar, tabiri caizse kuş bakışı görünür. Bir projeye göz attığınızda, bir dizin yapısında bir sürü dosya olacak. İster açık kaynak ister kapalı kaynak arıyor olsanız da aynıdır (sonuçta kaynak kodu kaynak koddur). Öyleyse şununla başla:

  • Kaynak dosyalar nasıl düzenlenir? Dosyanın ismini veya içerdiği dizini bulabileceğinizi söyleyebilir misiniz? Programcılar öngörülebilir isimleri ve mantıksal yapıları sevme eğilimindedir. Belirli bir soruna nerede bakılacağı hakkında kabaca bir fikir edinebilirsiniz.
  • Uygulamanın doğası nedir, web tabanlı, komut satırı, GUI mı? Bunun önemli olmasının nedeni, infazı izlemeye nereden başlayacağınızı bilmek istemenizdir. Web tabanlıysa, uygulamanın isteği işlemeye başladığı yerden başlamak istersiniz. Bir çerçeve üzerine inşa edilmişse, daha iyisi. Çerçeveyi öğrendikten sonra, genellikle orada bulunan kodu iyi anlayabilirsiniz. Aksi halde, komut satırı / GUI uygulaması için ilgili giriş noktası ile başlayacaksınız.
  • Bir yaprak kağıt ve kalem alın ya da şanslıysanız bir beyaz tahta ve kuru silme kalemleri. Bileşenlerin adlarını verin (veya kodda verilenleri kullanın) ve işlerin nasıl işlendiğini görebilmeniz için oklarla kutular arasında çizgiler çizin. Alternatif olarak, bir algoritmaya bakıyorsanız, veri yapılarını nasıl işleyebileceğinizi anlayabileceğiniz ve taslak olarak çizebileceğiniz şekilde çizin.

Pratik yapar, ancak kesinlikle yapılabilir. Uygulamanın kullandığı kütüphaneler ve çerçeveler hakkında ne kadar çok şey bilirseniz, kodun nasıl düzenlenmesi gerektiğini ve belirli soruların cevaplarını nerede arayacağınızı da bilirsiniz. Bazı kodlar, özellikle de dolaylı ise, takip edilmesi biraz daha zordur. Bu yüzden kurşun kalem ve kağıda ihtiyacın var. Sonunda kafanızda bir ampul söner ve onu alırsınız. Bu, kodun kalanını okurken çok daha anlamlı olur.


Okuma kodunun bir yönü de soyutlamadır. Kaynakların nasıl organize edildiğini bulmak gibi şeyler kesinlikle kod okuma sürecini soyutlayacaktır.
David Gao,

5

Bir roman okuyormuş gibi okumak değil, daha çok bir referans kitabı okuduğunuz gibi okumak. İyi bir yol, yakın zamanda düzeltilen bir hatayı bir check-in mesajından seçmek, nelerin değiştiğini yapmak ve hem sorunu hem de çözümü anlayana kadar ilgili kısımları okumaktır. İyi duyurulmuş güvenlik açıkları, forumlarda onlar hakkında çok fazla tartışma olduğu için seçilmesi gereken eğlenceli hatalardır. Sonra böcek izleyiciden "düşük asılı meyve" böceklerinden birini seçin ve kendiniz nasıl düzelteceğinizi anlayana kadar okuyun. Kod okuma profesyonellerinin çoğu, hataların giderilmesi veya özelliklerin eklenmesi sırasında tesadüfidir.

Genellikle en iyi kod örnekleri zar zor farkedilir. Bir kereden fazla okumadan onları anında anlayacaksınız. İyi kod genellikle taslaklardan geçse de, yazması son derece kolay gibi görünüyor. Elbette verilen kodun, düşündüğünüz ilk yol olmasa da, bunu yapmanın açık bir yolu olduğu gibi paradoksal bir his yaratır.

Buna benzer bir kodla karşılaştığınızda, içine giren içgörüyü ve ilgili tasarım ilkelerini anlamaya çalışın, böylece gelecekte benzer bir durumda kendinizi bulduğunuzda, aynı ilkeleri uygulayabilmenizi umarsınız.


4

Bazı karmaşık fonksiyonlar okurken oldukça sık kullandığım bir numara, kod segmenti, mantığı değiştirmeden daha okunaklı bir şey haline getirmeye başlamasıdır.


1
+1: Ben de. // Bir zamanlar yeniden yapılanmayı farkeden ve beni zaman kaybetmekle suçlayan bir patronum vardı. Anlayamadı. Ne aptal.
Jim G.

2

"Bir sürü dosya" ile nasıl uğraşmak zor? Belgelendirilmedikçe, kuruluş hakkında önceden bilgi sahibi olmamanız dışında, kendi kodunuzu yazdığınızdan farklı değildir.

Talep edilen bir programcı olarak, proje yapısını "bir sürü dosyadan" çözemezseniz, ya çok kötü bir şekilde organize edilmiş bir projedir ya da beceriksiz bir programcısınız (ya da her ikisinde de).

Okumaya başlayın, bazı giriş noktaları veya başka bir temel pivot sınıf / yöntem bulmaya çalışın ve her şeyin oradan nasıl bir araya geldiğini anlayın. Anında olmayacak, zaman alacak, ancak hiçbir dokümantasyon olmasa bile yapılabilir.


3
"Anlayacağınız" "zaman alacak" hemen hemen "zor" un tanımıdır. Sırf her gün başa çıkmamız beklenen bir zorluk olduğundan daha az zorlaştırmaz. “Bu değişikliği nerede yapabilirim?” profesyoneller arasında bile yaygın bir sorudur. Ayrıca, kaynak kontrolü ve büyük kod tabanlarıyla uğraşmak, üniversite eğitimindeki en büyük deliklerden biridir. Sanırım üniversitede birden fazla kaynak dosyası gerektiren bir ya da iki proje yaptım ve sadece 10 dosyaya kadar çıktılar.
Karl Bielefeldt

0

Başka bir projenin kodunu okurken umut edebileceğiniz en iyi şey, bir API veya yazılım parçası olması, değişkenlerin, işlevlerin ve makro adlarının belirsizce kısaltılmaması veya amaçlarını anlayabilmeniz için adlandırılmamasıdır.

Ancak bunun dışında, dil, programlama teknikleri ve ayrıca kodun amacı hakkında karmaşık bir koda dalmak için iyi bir bilgi birikimine ihtiyaç vardır.

Şu anda Lua'nın bazı sihirlerini nasıl yaptığını görmeye çalışıyorum , ancak tanımlayıcıların birçoğunun belli belirsiz olarak adlandırıldığı ve daha çok hangi hattın çalıştığını anlayamadığım noktaya kısaltıldığı noktaya geliyorum. Bildiğim şeyi yapmak için fonksiyon kodunun bir noktasında yapılması gerekiyor ... Sık sık tek harfli değişkenler ve daha çok kısaltılmış makro / fonksiyon isimleri kafamı karıştırıyor.


0

@Berin Loritsch'in önerdiği gibi, "İlk önce, yüksek seviyeden kuş bakışı görünümü" nü gördükten sonra eğer varsa en içtenleri ve / veya bütünleşikleri arayabilirsin.

unittests (api-) çalışmalarını detayları görmek ilginç.

integrationtest genellikle işletme süreçleri hakkında iyi bir genel bakış sunar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.