Bilmediğim bir dilde kodu gözden geçirmek etkili midir?


108

Ben deneyimli bir geliştiriciyim, ancak pek çok kod incelemesi yapmadım. Python ile yazılmış kodu incelemem isteniyor ancak Python'u tanımıyorum.

Bilmediğim bir dilde kodu incelemenin bir anlamı var mı?


62
Teğetsel olarak, CodeReview.SE'ye gidip python etiketine göz atmayı düşünün. Sadece soruya bakarken, koda ne gibi önerilerde bulunacağınızı düşünün ve cevaplarda temsil edilip edilmediğine bakın.


14
Python hakkında daha fazla bilgi edinmek için mükemmel bir yol gibi görünüyor. Komik görünen her şeyi sorgulayın - bazıları dili anlamadığınızdan bazıları da meşru kod inceleme öğeleri olacaktır.
Dan Pichelman

9
@RobbieDee Kesinlikle! Kodunuzu bir başkasına açıklamak, sadece bir oyuncak ayı olsa bile , genellikle faydalı olacaktır .
Kilian Foth

34
Sizden istendiğini söylüyorsunuz. Sizden rica eden kişi, bu görevi yerine getirdiğinizi kuruluşunuza değer katacağını düşünüyor. Bu değerin doğasının ne olduğunu bilmek istiyorsanız , internette yabancılara değil, o kişiye sorun ! O kişinin kafasının içinde neler olup bittiğini bilmiyoruz. Belki de kod, acemilerin bile sorun bulabileceği kadar düşük kalitededir. Belki de kod o kadar yüksek kalitede ki ondan iyi alışkanlıklar öğreneceksiniz. Kim söyleyebilir? Birisi bunun değerli olduğunu düşünüyor; bu kişiye değerin ne olduğunu sorun.
Eric Lippert,

Yanıtlar:


120

Herhangi bir anlamı var mı? Evet. Bir programlama dilinin anlambilimi hakkında hiçbir şey bilmeseniz bile , karakterleri okuyabilir ve tutarsız biçimlendirme, eksik yorumlar, yanlış seçilmiş tanımlayıcılar, belirgin çoğaltma vb.

Çok anlamlı ya da zamanınızın karşılığını ödemek için yeterli anlamda ? Emin değilim. Bu, konumunuza, ekibinizin iş akışındaki kod incelemelerinin önemine ve yeterince iyi ölçemediğimiz bazı diğer faktörlere bağlıdır.


50
Bazı kod incelemeleri yapmak, bir modülü, çerçeveyi veya hatta dili tanımak için harika bir yoldur, bu nedenle yine de zaman ayırmaya değer olabilir (ve belki de bundan kuşkulanıyorsunuzdur ...). Yine de böyle bir incelemeye imza atmam, hem dili hem de ona bakacak kodu bilen biri olmadan olmaz.
Ordous

8
Ayrıca, iyi bir alan bilgisine sahipseniz ve kod oldukça iyi adlandırılmış / yorumlanmışsa, yine de yanlış / yanlış anlaşılan / eksik işlevselliği yüksek düzeyde görebilirsiniz (yine de sözdizimi sorunları nedeniyle hataları
Dan

4
Bir yabancı olarak, en yanlış hataları veya doğru miktarda eşit işaretler ve bu tür şeyleri uygulamadaki hataları tespit etme olasılığınız daha yüksek olabilir .
KlaymenDK,

2
@KlaymenDK Boole bağlamındaki atamalar Python'da (en azından tipik olarak) sözdizimi hatalarıdır. Fencepost hatalarının daha az olması muhtemeldir, çünkü Python iyi yazılmış asla dizi / liste dizinleri ile doğrudan çalışmadı. (Siz bunu yaparken bile, genellikle enumerate.) Bence yorumunuz, aşina olmadığınız bir dili neden incelemeye çalışıldığının harika bir örneği olduğunu düşünüyorum.
jpmc26

1
@ Mawg - Ben otomatik test için bunun ne olduğunu söylemeye meyillidir. Dilin uzman bilgisiyle bile, kodun tasarım spesifikasyonunu sadece inceleyerek / çalıştırmadan ve sonucu gözlemleyerek gerçekten karşılayıp karşılamayacağını söylemek zordur (tasarım spesifikasyonunuz özünde kodun kendisi olduğu kadar ayrıntılı değilse) . Cevabın numaralandırdığı hususlar, kod incelemeleri yapmak için pek çok (tümü olmasa da) geçerli nedenleri kapsamaktadır. Bir kod incelemesi genellikle incelenen kodun yürütülmesini kapsamaz.
16'da

59

Code Review Stack Exchange'e düzenli olarak katkıda bulunan biri olarak, örneğin Dil ile ilgili sorunlardan muzdarip birçok soru ile karşılaşıyorum, örneğin:

  • Biçimlendirme, girinti
  • Dürbün
  • döngüler
  • Tip işlemleri

ve liste devam ediyor. Ancak dili bilmeme gerek kalmazken, hala bu sorunları / noktaları gözden geçirebilirim.

En iyi kullanıcılarımızdan birkaçının aktif olarak kullanmadıkları veya bilmedikleri dillerde en iyi cevapları var. İlk ondan iki tanesi bile bilmediğim dillerde ve makinemde derleyemiyor / çalıştıramıyor.

Birinin sahte kodunu gözden geçirmenin aynı olacağını bile söyleyebilirim. Anladığınız şeylerle ilgili şeyleri gözlemleyebildiğiniz ve yorumlayabildiğiniz sürece, iyi olacaksınız ve konuyla ilgili olacak.


2
Hatta bir PHP programına cevap yazdım . Bu en büyük cevap değil, ancak hala orijinal döngü bildiriminin çirkin olduğunu düşünüyorum.
Hosch250,

4
C # 'yi incelemeyi, yazmayı ve yazdıklarımın gözden geçirmesini bir arada kullanarak öğrendim.
RubberDuck

5
Python'u bilmiyorsanız, dilde çentiklenmenin önemini takdir edemezsiniz ...
Floris

2
En iyi cevaplarınızın 2 / 10'u bilmediğiniz dillerdedir. Seçmenlerin de onlar hakkında bir şey bildiğini kim söyleyecek?
Martin Smith,

Dilleri bilmeme rağmen, ifadelerimi hala kontrol ediyorum ve eğer karışırsam ... Güven bana, duydum
Quill

44

Genel tavsiye

İşte bence, en alt satırda:

  • Dili, özellikleri ve ortak deyimleri bilecek kadar iyi bilmiyorsanız, muhtemelen incelemeye fazla katkıda bulunmayacaksınız.
  • Dilin özelliklerini ve deyimlerini öğrenmek istiyorsanız , incelemeye katılabilirsiniz. Odak noktalarınız, deyimleri gözlemlemek ve sizin için anlamlı olmayan kalıplar ve organizasyon hakkında sorular sormak olmalıdır. Bu , sorunlu alanların belirlenmesine yardımcı olabilir , ancak yalnızca geliştiriciyi yaptıklarını savunmaya zorlayabildiğiniz anlamına gelir. Sorularınızı, bilginizdeki boşluğa yer bırakacak şekilde sorun. Bunun , incelemenin kendisinde net bir maliyet olabileceğini , ancak bu maliyetin bilginize bir yatırım olduğunu unutmayın.
  • Dilin özelliklerini, deyimlerini ve standartlarını tanıyana kadar katkıda bulunma yeteneğin sınırlı olacak. Ben aslında kadar bu değiştirmesini bekliyoruz olmaz yazılı dilde kod önemli miktarda.

Python'a özgü hususlar ve örnekler

Python'u bilmeme konusunda özel durum için, özellikle buna karşı temkinli olurdum . Python'un, Python'un diğer dillerde beklediğinizden çok farklı görünmesini sağlayan bir çok deyim ve standart uygulama vardır. (Aslında, Python benim kod bakmak yaptık vurgulayan şeyler düşünmek daha iyi de diğer dillere değil, başka bir yol etrafında.) PEP8 ötesinde tamamen Python teşvik zihniyeti kaçırabilir nasıl iyi bir örnek vardır.

Basit bir örneğe bakalım. Bu kodu al:

f = open('/home/me/something.txt')
try:
    content = f.read()
finally:
    f.close()

Bu kodla ilgili sorunu gördün mü? Python ile çalışmadıysanız, muhtemelen kullanmazsınız. Sorun Python'da tamamen aynı şeyi yapan çok tercih edilen bir tarzın bulunması :

with open('/home/me/something.txt') as f:
    content = f.read()

Bu bir içerik yöneticisidir. Ne için iyi olduklarını biliyor musun? Ne zaman kullanmanın uygun olacağını biliyor musunuz? Kendinizinkini yaratmanın ne zaman uygun olacağını biliyor musunuz? Hayır? O zaman muhtemelen Python'u incelemeye hazır değilsin.

Başka bir örneğe bakalım.

def add_fifty(other_list):
   result = list()
   for i in other_list:
       result.append(i + 50)
   return result

x = range(10)
y = add_fifty(x)

Sorunu gördün mü? Sorun, bu yöntemin tamamen gereksiz olmasıdır . Operasyon bu kadar basit olduğunda, muhtemelen sadece bir anlama kullanmalısınız:

x = range(10)
y = [i + 50 for i in x]

Bunu görmediysen, Python'un özelliklerini ve deyimlerini bilmiyorsun.


1
Son örneğinizde, son kodu görseydim, muhtemelen ne yapabileceği hakkında bir fikrim olur (Python'u bilmeden) ve sevdiğim dilde daha önce hiç düşünmediğim bir şey yapıp yapamayacağımı merak etmeye başlayabilirim.
gnasher729

1
@ gnasher729 "Gerçekten de, Python'un vurguladığı şeylerin kodumu diğer dillerde değil, diğer dillerde daha iyi gösterdiğini düşünüyorum." =) Hatta uzaktan benzer olacak başka dillerde bildiğim tek şey .NET'in LINQ ve Java 8'in olduğunu Akış s. Ruby'nin bir şeyleri olabilir ve işlevsel dillerin bir şeylere yaklaştığına eminim . Örneğe göre, Python'a aşina değilseniz bile, "kötü" versiyonuna meydan okumayı bile bilmeyeceksiniz bile.
jpmc26

x = 1 10; @y = harita {$ _ + 50} @x;
pipo

2
Kod gözden geçirme, mantık hataları hakkında, bazılarını (dış programcılara) belirli bir dilde gizli bir sözdizimi uygulamaktan daha fazladır. Mantık hataları bulmakla ilgili, tamamen yanlış bir algoritma uygulamak gibi (eklenmesi gerektiğinde bölme kullanmak gibi). Yani kod tam olarak özelliklere uygun olmayacak. Ortaya çıkan çıktı doğru olduğu sürece bu önemli değildir. En azından, bunun gibi belirli optimizasyonlardan endişe ediyorsanız, bir takım kodu incelemesi daha iyi olurdu.
phyrfox

3
@phyrfox Bu sadece doğru değil. Mantık hataları bulunabilir, ancak kod incelemesi ayrıca (veya öncelikle) en iyi uygulamalar, güvenlik, performans, güvenilirlik, okunabilirlik / bakım kolaylığı, vb. Hakkında da olabilir. Bir şey gözden geçirilmeden önce, gerçekten test edilmiş olması gerekir. StackExchange'in kod inceleme tanımı oldukça açık, imo. Python'da bahsettiğim örnekler "küçük optimizasyonlar" değil. Bu kalıpları kullanmayan bir Python geliştiricisi, zamanın gerisinde, ya da yetersiz kaldığında çok deneyimsizdir. Bunlar dilin temel unsurlarıdır.
jpmc26

21

Sizden Python kodunu tam olarak gözden geçirmeniz istenmiş olabilir çünkü Python'u tanımıyorsunuz . Bir takımda "aptal" olmasının faydalı olduğu bir yönetim teorisi var. Sana kötü bir isim demiyorum :) Fikir, bir ekibin grup düşüncesinden muzdarip olabileceği ve tünel vizyonu geliştirebileceği yönünde. Bundan kurtulmanın bir yolu, takıma, diğer takım üyelerinin bir "aptal" olarak kabul edeceği, yani konuyu bilmeyen birisini eklemektir. Kendinizi bilgilendirmek için sorular soracaksınız ve sorular, diğer ekip üyelerinin muhtemelen asla dikkate almadığı bir bakış açısıyla gelecek.

Python'u tanımıyorsunuz, bu yüzden Python kodlayıcılarına sıradan görünen şeyler size garip gelebilir. Takımın asla düşünmediği bir gelişme önerebilirsin.


1
Bu benim cevabımdı. Sadece herhangi bir günde, herhangi bir Python rutini ve herhangi bir Python gurusu grubuyla ... bu kodun GARBAGE olduğunu eklerdim.
dwoz

Ve sık sık, bir şeyi "aptal" olarak açıklama eylemi sadece "Doh!" aniden bir "uzman" dan aniden, kodun ne anlama geldiğini yapmadığını veya bazı önemli durumları özlediğini anlarlar. Aynı zamanda bilginin yayılmasını başlatmanın iyi bir yolu.
TripeHound

21

Kod inceleme, geçersiz yazım ve yanlış biçimlendirme içeren değişkenleri aramakla ilgili değildir. Bu tür şeyleri bulmak için kod incelemesi kullanıyorsanız, zamanınızı boşa harcamayı bırakın ve bir araç kullanın.

Kod incelemesi, acemi programcılar tarafından tasarımın iyileştirilmesi ve yaygın hataların tespit edilmesi ile ilgilidir.

C ++ 'da programladığımdan ve Python'u yeterince iyi bilmediğim için Python kodunu incelemeye cesaret edemezdim. Ancak bir Java kod incelemesinde yardımcı olabilirim.

Hangi dilde program yaptığınızı söylemediniz, ancak programlanan dili bilmiyorsanız, kod incelemesinde neye katkıda bulunabileceğinizi görmüyorum.


23
Gerçekten, kötü adlandırılmış değişkenleri iyi olanlardan ayıran bir aracınız var mı? Biriyle görüşmek isterim.
Davor Ždralo

1
@ DavorŽdralo Yarasa kapalı Java Checkstyle var biliyorum. Daha resmi statik analiz araçları birçok dil için ortaktır ve bir kodlama standardını uygulamalarını sağlamak tipik olarak görevlerinden en az olanıdır.
Shaz

9
Buradaki Kod İnceleme'nin tanımları arasında biraz fark olduğunu hissediyorum, biraz da CR Meta: Bu Kod İncelemesi Nedir? . Belirli bir şeyi dışlamayı bırakıp "Kod İnceleme XYZ ile ilgili değil" demem. Ayrıca, deneyimli programcıların kodlarını gözden geçirmeleri gerekmediğini, benim de kesinlikle aynı fikirde olmadığım bir şey olduğunu söylüyorsunuz.
Simon Forsberg,

3
@SimonForsberg Söylediğim şey bu değil. Üst düzey programcılar bile iyi bir kod incelemesinde bir şeyler öğrenebilirler. Fakat eğer tek yorum "burada bir değişkeni yanlış yazdınız" - yorumlar halinde, zamanlarını boşa harcıyorlar.
BЈовић

2
@ BЈовић Hayır, bulabileceğiniz en kötü şey değil, ancak "hala değerli olan en küçük şey" e oldukça yakın.
Vatine

11

Kod incelemeleri (aslında kusurları aramanın yanı sıra), bir ekip üyesinden diğerlerine kod eklenmesi veya değiştirilmesi için iyi bir tanıtımdır. Eğer varsa deneyimli geliştirici , çoğunlukla ne olup bittiğini anlamak için yeterli aracılığıyla okumak mümkün olmalıdır.

Bir takım liderinin bakış açısından bir kod incelemesine bakın: orada uygulamanın ne yapması gerektiğini (iş mantığı) anlayan biri var, orada kodun ne yaptığını anlayan biri var (uygulama mantığı) ve muhtemelen birkaç kişi daha var Tüm bunların nasıl bir araya geldiğine dair bir fikri olması gereken orada.


7

Kesinlikle sadece gözden geçiren kişi olmamalısınız, ancak hakemlerden biri olmanız için birçok iyi neden var . Dili bilmemek, kod incelemesinde cevaplanması gereken birçok soru için bir engel değildir. Örnek olarak, bu sitedeki C # etiketindeki ilk 20 cevaplayıcıdan biriyim ve C # dilinde derlenmiş bir merhaba dünyası değilim.

Dili bilmeden paylaşabileceğiniz bazı uzmanlıklar:

  • Etki alanı bilgisi.
  • Genel nesne yönelimli tasarım.
  • Genel programlama uygulamaları: adlandırma, netlik ve benzeri.

Aynı zamanda yeni bir ürüne hız vermek için iyi bir yoldur. Yeni bir takıma katıldım, dilleri oldukça iyi kullandım, ancak etki alanını bilmiyordum. Kod incelemelerine katılmak, henüz bu satırlar boyunca çok fazla katkıda bulunmamama rağmen, etki alanı tarafını daha iyi öğrenmeme yardımcı oldu.

Sizin durumunuzda, diğer eleştirmenlerin bıraktığı yorumları gördüğünüz gibi yeni bir dilin deyimlerini öğrenmek için iyi bir yol olacaktır. Bunlar başka türlü öğrenmesi çok zor olan şeylerdir, çünkü tercümanınız kodunuzun pythonic olup olmadığını umursamaz.


5

Bu bir kazan-kazan durumu olabilir. Özellikle Değerli bir inceleme uzmanı olabileceğinizi söyleyeceğim kadarıyla: Çünkü Bilgi Laneti tarafından lekelenmemiş bir Python bakiresiniz .

Bunu şu şekilde düşünün: Eğer bir Python bakiresinin bile anlayabileceği kadar net bir kod varsa, o zaman iyi bir kod olmalıdır. Anlaşmakta zorlandığınız kısımlar yeniden işleme veya daha iyi yorum yapmaya aday olabilir.

Açıkçası, bu sizin için de faydalı olacaktır, çünkü ilerledikçe yeni bir dil seçiyor olacaksınız. (Umarım, size verilen kod, öğrenmek için iyi bir örnektir.) Bu düzenleme, "çalıştırılabilir sözde kod" olma ününe sahip bir dil olan Python için özellikle iyi çalışmalıdır. Deneyimli bir geliştiriciyseniz, bir Python programının özünü anlamada çok fazla zorluk çekmemelisiniz.

Dikkat , dile özgü gettolardan kaynaklanan böcekleri tespit etmeniz beklenmeyecektir . Ancak hata bulma, kod incelemelerinin tek amacı değildir. Başka bir şey olmazsa, meslektaşınızın kodunda ne gibi şeyler olduğunu bilerek, bilgi aktarımına katılırsınız.


2

Bir zamanlar bir taşeron tarafından yürütülen ve ciddi performans sorunları yaşadığı ortaya çıkan bir projeyi denetlemem istendi. Kritik faktörün tek bir Perl modülü olduğunu oldukça hızlı bir şekilde tespit ettim. Daha önce hiç Perl'e rastlamamıştım ve organizasyonda bunu bilen hiç kimsem yoktu, ben de onu anlamaya çalıştım. Ayrıntıları anlamadığım kadarıyla hiç bir zaman anlamadım, ancak kullandığı algoritmanın veri boyutunda ikinci dereceden olduğu açıktı ve bu da tüm sorunların nedeni oldu. Yani evet, tamamen anlamadığınız bir dilde kod okumak kesinlikle verimli olabilir. Bonus, bununla ilgili yeni hileler öğrenmenizdir.


1

Birkaç gözlem:

1) Deneyimli bir geliştiriciyseniz, Python'u (ya da en azından bilmeniz gereken kadar), sadece onunla çalışarak seçeceksiniz. Bu "yaparak öğrenme" bir durum olacak. İlk başta zor olacak, ancak dili seçtiğinizde kolaylaşacak. Bunu başka bir dil öğrenmek için bir fırsat olarak düşünün (insanlar "daldırma" yoluyla genellikle "yabancı" dilleri öğrenir)

2) SE sitelerinde "teknik olmayan" ancak dilbilgisi, iletişim ve mantık konusunda uzman bir çok değerli insan var. Bu tür insanlar deneklere "taze bir göz" getirir ve materyalde çok "bağlanmış" oldukları için başkalarının özledikleri bazı "daha ince" düzeltmeler yaparlar. Muhtemelen mantık ve genel programlama bilgisine sahip olmayan "teknik" olmayan (yani Python olmayan) becerileriniz için danışılıyorsunuz.

Çok fazla sayıda kod incelemesi yapmadıysanız, hemen hemen her kod inceleme deneyimi bir geliştirici olarak size yardımcı olacaktır. Bu sizin yetenekleriniz ve ihtiyaçlarınız ve takımın arasında iyi bir eşleşme gibi görünüyor.


1
Kodları gözden geçirmenin anlamlı bir ölçüde "yaparak öğrenme" olup olmadığını sorguluyorum. Muhtemelen inceleme deneyimim sizinkinden farklı, ancak çok nadiren anlamlı veya önemli bir kod yazımı var ve neredeyse hiç uygulama yok.
Ezoterik Ekran Adı

@EsotericScreenName - Kodu yazan veya bilen birinden ne kadar geri bildirim aldığınıza bağlı olduğunu düşünüyorum. Ayrıca, başka bir dilde çalıştığınız bir etki alanı alanında bulunma olasılığı daha yüksektir ve bu da onu tipik kod örneğinden daha fazla kolaylaştırır. Kodlama örneklerinin çoğu, küçük bir parçanın küçük snippet'lerinin nasıl yapıldığını gösterir ve nadiren büyük bir projenin parçası olarak gösterilir.
JeffO

0

Bu, incelemenin amacının ne olduğuna bağlı; yani ne demek etkili .

Hala bazı problemleri tespit edebileceksiniz. Gözden geçirmeleri gereken tek şey sizseniz ve sadece bir göz atmanızı umuyorlar, bazılarına ve muhtemelen bir şeyleri yakalamaya yardımcı oluyorlar, o zaman kesin. Birçok yapı kavramı, diller arasında benzerdir. Bir tanesi özellikle yorumu gözden geçirebiliyor. Belirli bir dilde olmayan bir programcının hala olanları iyi bir şekilde öğrenebilmesi gerektiği yeterince iyi yorumlanmalıdır. Değilse ... o zaman onlara yorumlarının nerede olmadığını söyleyebilirsiniz. Eğer bu kadar iyi yorumlanmışsa ... o zaman gerçekten neler olup bittiğini kodunu okumak yerine, neler olup bittiğinin açıklamaları aracılığıyla yapısının bir kısmını gözden geçirebilmelisiniz.

Ancak pek çok başka problemi de algılayamazsınız. Bu nedenle, gözden geçirmenizin, bunun iyi yapılmış / uygulanabilir bir program olup olmadığına dair ayrıntılı bir tespit olma niyetindeyse, hayal kırıklığına uğrayacaklardır.

Bu sonucun sizin yaptığınız zamana değip değmeyeceği büyük oranda projeye bağlıdır.

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.