Bir yazılım mühendisi olarak, diğerlerinin kodunu okumak ne kadar önemlidir?


25

Tomurcuklanan bir yazılım mühendisiyim (şu anda ikinci sınıf öğrencisi, CS konusunda büyük) ve diğer insanların programlarını anlamak için gerçekten çok mücadele ediyorum. Bu yeteneğin (veya eksikliğin) benim için bir handikap olup olmadığını bilmek istiyorum, ve evet ise, o zaman onu nasıl geliştirebilirim?


1
Size de açıklandığında kodu anladığınızı mı hissediyorsunuz ya da sadece deneme yanılma yoluyla mı öğreniyorsunuz?
JeffO

1
Bu neden 'kodlama stili' olarak etiketlendi? Kötü biçimlendirilmiş olduğundan kod okumada sorun mu yaşıyorsunuz? Kod okuma yeteneği, çok zayıf biçimlendirilmiş veya karmaşık kodları anlama yeteneğine ihtiyaç duyduğunuz anlamına gelmez. Kodu, yardımcı olması durumunda önce bir biçimlendirme aracıyla çalıştırın.
Brandin

Sadece bu sabah bana bu soruyu hatırlatan bir makale okuyun. Neden Chrome üzerinde çalışmak beni kaynak kodunu okumak için bir araç geliştirdi
Eric King

Bu harika bir soru! Takip eden bir sorum vardı: öncelikle kendi kodunuzla (örneğin küçük bir projenin bilimsel programcısı olarak) kendi başınıza çalışırsanız, okumak için iyi kodu nasıl bulursunuz? Bu daha önce soruldu: softwareengineering.stackexchange.com/questions/69892/…
Gaurav

Yanıtlar:


49

Esastır.

Geliştirme yönteminiz kendi kodunuzu yazmanızdır (birçoğunu) ve evet, başkalarının kodlarını okumakta zorlanıyor.

Tabii ki sorun şu ki, herkes senin yaptığın gibi düşünmüyor. Çok uzun zaman önce birinci sınıf bir Java sınıfındaydım ve bize bir görev verildi. İnandığımın tersine (cevapların üç veya dört ortak çözüme göre birleşeceği yönündeydi), sınıftaki herkesin atamaya benzersiz bir çözümü vardı.

Bu, iyi bir kod okumanız gerektiği anlamına gelir .

Bu, Tasarım Desenlerinin bu kadar popüler olmasının nedenlerinden biri ve neden onları incelemelisiniz. Tasarım Kalıpları, programcıların iletişim kurmaları ve bilgi işlem sorunlarını çözmenin "daha iyi" yolları için zihninizi ayarlamaları için ortak bir kelime sağlar.

Ayrıca algoritmaları ve veri yapılarını incelemelisiniz.

Sonuç: Her zaman diğer geliştiricilerin kolayca anlayabileceği bir kod yazmak için çaba göstermelisiniz.


7
Doğal sonucu: O yazma koduna çabalayarak Başlangıç basit sen :-) kolayca anlayabileceği
gnasher729

4
Genellikle iyi bir cevap, kalıplarla ilgili kısımdan tasarruf edin. GoF kalıplarının çoğu (bu terimi kullandığınızda insanların ne düşündüğü) aşırı tasarlanmış, çok ince, çok fazla OO odaklı veya yalnızca düz olmayan kalıplardır. Ve sonra halk buraya gelir, bu kalıplardan hangisini kendi çözümlerinde kullanmaları gerektiğini sorar. Lütfen, asla devs'e zamanlarını kalıplarla boşa harcamalarını tavsiye etme
David Arno

Küçük problemler için (örneğin, listedeki sayıları tersine çevirin) olası cevaplar az sayıda olası çözüme yaklaşmalıdır. İyi ödevler, bu tür birçok sorunun çözülmesini ve bu sorunlara yönelik çözümlerin bir şekilde düzenlenmesini gerektirmelidir, bu nedenle ödev için olası toplam çözüm sayısı çok hızlı bir şekilde artacaktır.
Brandin

15

Bu çok önemli.

Mezun olduktan ve dünyaya girdikten sonra, üzerinde çalışacağınız çoğu projenin kodları başkaları tarafından zaten sağlanmış olacak. Lucky, tüm zamanlarını greenfield projelerine harcayan programcı!

Bu uygulama ve sabır ile elde edilen bir beceridir ve birçok durumda, o bir yetenektir birçok kişi gerçekten kadar çalışma çok fırsat alamadım sonra mezun ve bu ilk iş olsun. Rahatlayın!

(okulunuzda kooperatif bir program olsa da, bu size başkaları tarafından yazılmış olan büyük projeler üzerinde çalışmak için mezuniyet öncesi deneyimini verir ve size akademik krediler getirir! Varsa, araştırmanız gereken bir şey var)


7

Çalıştığınız yerin özelliklerine bağlı olarak, kod yazmaktan bile daha önemli olabilir.

Diğer beceriler gibi, pratik mükemmelleştirir! Diğer programcının kodunu okumaya çalışın, hata ayıklayın ve kişisel olarak bana yardımcı olan şey, küçük kod parçalarını yeniden düzenlemek veya iyileştirmek ve oradan genişletmek.


Ayrıca, kullandığınız açık kaynak kodlu bir projeyi tanımak ve iç kuralların nasıl çalıştığını anlamaya çalışmak
RMalke

4

Kod okuma ve yazmada farklı beceriler vardır.

  • Bir tanesi sözdizimi. Bir yöntem bildiriminin nasıl olduğunu bilmek.
  • Diğeri niyettir. Yöntemin neden orada olduğunu ve hangi amaca hizmet ettiğini bilmek.

Okumaya karşı yazma gibi. Evet okuma esastır.
Bu konuda çoğumuza yardım eden azami rakam:

  • Kod yazıldığı her seferde 10 kez (en az) okunur.
  • Biri kodu okuyor, sık sık ... gelecekte ben kodu okuyorum.
  • Kod stilimi 1 yıldan daha uzun bir süre önce savunmuyordum, o zamandan beri gelişti.

TAMAM. Demek hepsi harika. Şimdi, muhtemelen yaşadıklarınıza göre.

OMG, onlarca uzun çılgın bağımlılıkları ve her zaman çizgilerin yüzlerce kaynak kod satır ve sınıfların binlerce ile bu heyecanlanıyorum büyük kod temeli ı vb vb Kafamda 10 seviyesini düşük tutmak zorunda şey, takip etmeye
tanıdık Ses ? Evet. Derin nefes. Rahatlayın. Bu normal. Üretim sistemlerinin yapıldığı şey budur. İnsanlar görünüşte anlaşılmaz durumlarda hayatta kalırlar (ve yaşarlar) çünkü:

  • Testler (umarım) vardır ve ayrıca sistemin belgelenmesine de yardımcı olurlar.
  • programcılar eşleşir ve sık sık sonucu iki katından fazla getirir.
  • iyi bir programcı yapana kadar anlamadıklarını söyleme konusunda başarılı olurlar.
  • değişiklikler genellikle test edilecekleri izole etmeye yardımcı olan yalnızca bir veya birkaç kod satırıdır.
  • kod tabanlarının aşina olması aylar hatta yıllar alır

Ve son olarak, iyi programcılar, kaynak versiyon kontrol sistemlerinde değişiklikler yaparken anlamlı taahhüt mesajları yazarlar. (Cevaplamaya eklemek için çekinmeyin)
rwong

1

Bu cevapların çoğu, kendini geliştirmeye kod okumanın önemine odaklanıyor. Tüm kalbimle katılıyorum ve onaylıyorum.

Dikkat edilmesi gereken başka bir açı daha var - başka yaklaşımları okumaktan faydalanamayan bir dahiyseniz bile (imkansız, ancak tartışma uğruna ....), kodun nasıl okunacağını bilmeniz gerekir. Temel olarak üniversite ortamında bulunmayan kavram: Endüstri projelerinin büyük çoğunluğu kahverengi alan projeleridir (önceden var olan bir kod tabanında ya da bütünleşerek).

Yalnızca varolan kod tabanını ve işlemlerini anlamak için kod okuma ihtiyacı gerçek. Kod hakkında başka bir geliştiriciye soru sormak her zaman mümkündür, ancak bu yalnızca çok uzun sürebilir. İnsanlar ayrılıyor, projeleri değiştiriyor veya zaman geçiyor. Düşük seviyeli detaylar hafızada kaybolur ve bakım programcıları yama uygular. Bir noktada, kodun kendisi dışında tek bir gerçek kaynağı yoktur.

İyi kod hijyeni, stil kılavuzları, kod incelemeleri ve dokümantasyon yardımı, ancak bir noktada kod olan bitenlerin gerçeği kaynağıdır ve cevabı bulmanın tek yolu onu kendiniz almak olacaktır. Kendini geliştirmedeki kullanımlarının yanı sıra, kod okuma kabiliyeti onu yazmaktan ayrı bir beceridir.


0

Başkalarının kodunu anlamak, takımda olmasanız bile takımda çalışırken muhtemelen farklı şeyler google'a gideceğiniz ve örnek kodları anlamanız gerekeceğinden, kaçamayacağınız bir şeydir. Yani evet bu bir zorunluluktur.

Hissettiğim, herkesin bu hissi başlangıçta özel olarak diğerlerinden daha az olabileceği kanısında, kendi kodunuzla yalnızca okuduğunuz, yazdığınız ve yaptığınız gibi başka bir koddan çok daha fazla zaman geçirdiğiniz için kodunuzu daha iyi anlıyorsunuz. aklında. Başkalarının kodu ile daha fazla zaman geçirmeye başlarsanız ve ilk önce ne tür bir yapı / akış kullanıldığını görmeye çalışırsanız, bu kesinlikle kodu daha iyi anlamanızı sağlayacaktır.

Bir yıl önce yazmış olduğunuz bir kodunuz varsa, bu konuyu daha da ikna etmek için, tekrar anlamaya çalışın ve diğer kişilerin kodundan daha az zaman harcayacağınızdan emin olabilirim. kodu.

Umarım bu yardım, hayal kırıklığına uğramayın, tamamen normal. Kod ile daha fazla zaman harcayın ve sonunda alacaksınız.


0

Şey, daha önce farklı bir ülkedeki bir ekip tarafından yazılmış yaklaşık 100.000 kod satırı içeren bir proje aldım ve önümüzdeki aylarda kodlarının bir kopyasında bazı kodlarda çok önemli değişiklikler yapmak zorundayım. mümkün olduğunca ortak.

Diğer insanların kodlarını hızlıca okuyamazsan, işimi nasıl yapabildiğimi söyle. Başkalarının kodunu okuyamıyorsanız, tamamen, tamamen sıkışmışsınız demektir.

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.