Açık Kaynak Görgü Kuralları


14

Codeplex'teki ilk açık kaynak projem üzerinde çalışmaya başladım ve korkunç bir kodla karşılaştım. (Ben C # hala "goto" deyimi vardır öğrendim) Ben "sahibi" istediği özellikleri eklemeye başladı ve kod tabanı inceledikten ve ne karışıklık olduğunu gördükten sonra (örneğin "goto" kullanarak) Ben temizlemek istedim biraz. Ama biraz endişeliyim ve bu yüzden hepinize dönüyorum: "kötü kodu" düzeltmek benim için uygun bir görgü kuralları mı yoksa izin vermeli ve yeni özellikler üzerinde çalışmalı mıyım? Daha önce söylediğim gibi, tüm OSS sahnesine yeniyim ve genel olarak bir ekip üzerinde çalışıyorum, bu yüzden onu karıştırmamak istiyorum.


13
gotomutlaka bir karmaşa değildir. Kullanımının mükemmel bir şekilde haklı gösterildiği birçok durum vardır.
SK-logic

1
@ SK-Logic - kaynağım önümde olmasa da, goto yerine bir yöntem kullanmanın daha anlamlı olacağı (ve daha açık olacağı) bir durum gibi görünüyordu. Ancak, geliştirme deneyimim sınırlıdır, bu yüzden yanlış olabilirim :)
Jetti

2
ilk yazarla iletişime geçip ona ne düşündüğünü sordun mu?
k3b

@ k3b - Henüz yapmadım. Bunu kesinlikle bu gece yapacağım ve ne düşündüğünü göreceğim.
Jetti

Yanıtlar:


18

Bunu yapmak için sorun yok, eğer mütevazıysanız ve hiçbir şey kırmazsa . Kodu yeniden biçimlendirmek ve hataları tanıtmak için dolaşamazsınız. İyi birim testleri var mı? Değilse, birim testleri ekleyerek katkıda bulunmaya başlarım ve daha sonra yapıyı düzeltmeye giderdim.


2
Katılıyorum. İyi dokümantasyon ve testler, zaten işe yarayan çirkin koddan daha değerlidir.
Filip Dupanović

birim testi yok. Gerçekten test edilecek sınıf yok. Tüm kod şu anda kullanıcı arayüzü kodunda. (örn. button1_click () {// tüm kod})
Jetti

5
@Jetti - birim testleri eklemek ve daha sonra kodu GUI kod arkasından çıkarmak, o zaman değerli bir katkı olacaktır. Bundan sonra, kalbinizin içeriğine yeniden bakabilirsiniz.
Scott Whitlock

13

Açık kaynağın amacı, bir projeye daha fazla göz atmak ve onu geliştirmektir. Bu, kodu daha iyi hale getirmeyi içerir. Bununla birlikte, listede ne yapmak istediğinizi tanıtmak iyi bir formdur. Biraz geri itebilir veya bir sürü + 1 alabilirsiniz. Bu gotoifadeler orada olabilir, çünkü orijinal yazar işi yapmanın daha iyi bir yolunu düşünemezdi. Geri iterseniz, basıncın nereden geldiğini öğrenmek için bir iletişim kutusuna girmek iyi olur. Kişiselleşmesine izin vermemeye çalışın ve endişeleri gidermeye çalışın.

Sonuç olarak, birim testleri dogmadan daha yüksek sesle konuşur. Kodun bazı durumlarda şimdi olduğu gibi arızalanacağını kanıtlayabilirseniz, başparmakları kaldırırsınız veya orijinal yazar girer ve bir şeyleri düzeltir.

Unutmayın, açık kaynak kodlu topluluk, koddan daha önemlidir. Topluluk yoksa (hem kullanıcılar hem de geliştiriciler), o zaman proje yoktur.


1
Topluluk için +1 koddan daha önemlidir. Bunu almak için bir sürü insan.
Wyatt Barnett

6

Kodları hakkında kıskançlıkla savunma yapan insanlar genellikle dünyanın incelemesini göndermezler ve eğer yaparlarsa çevresindeki topluluk çok uzun sürmez. Dokunsal olun, ancak duygulara zarar vereceğinizden korkmayın.

Çok fazla zaman harcamadan önce onlara ne yapmak istediğinizi söyleyin. Bazen belli olmayan şeylerin tarihsel nedenleri vardır. Goto'lardan kaçınılmasının nedeni, kod aracılığıyla beklenmedik yollar üretebilmeleridir. Buna göre, goto'ları kaldırma tehlikesi, yararlı yollardan birini fark etmemeniz ve yanlışlıkla refraktörden atlamanızdır.

Öte yandan, belki de orijinal yazar o zamanlar yazmak için daha temiz bir yol düşünemezdi. Burada kod kelimelerden daha yüksek sesle konuşulur, çünkü siz onları gösterene kadar daha temiz yapılabileceğine inanmayabilirler. İlk açık kaynak katkılarımdan biri, performansı önemli ölçüde artıran geri alma yığını düzeltmesiydi, ancak bazı çekirdek geliştiricilerin bunu ilk tarif ettiğimde çok karmaşık geldiğini söyledi. Kısa kod örneği onları gemiye getirdi.

Eğer ortaya çıkması için gerçekten iyi nedenler ortaya çıkarsa, en azından bu nedenleri açıklayan bir yorum için iterdim.


6

Deneyimden bahsetmişken ...

Katıldığım ilk Açık Kaynak projesi, ilk başladığımda hep işemek ve sirke ile doluydum.

Hemen yaptığım şey, bir grup kaynak dosyadan geçmek ve kişisel tercihlerime göre stilize etmeye başlamak, büyük bir yama oluşturmak ve göndermekti.

'İyi' (benim gibi) olan biriyle çalışıyorsanız yamayı hemen reddeder. Çoğunlukla, açık kaynaklı bir projeye katkıda bulunduğunuzda, düzeltmelerinizi tek bir sorunu ele alan ısırık boyutunda parçalara ayırmanız beklenir. 'Tüm gotolar kaldırıldı' bir atomik işlem için iyi bir örnek değil. İlk önce daha küçük, iyi belgelendirilmiş taahhütlere ayırsanız bile reddedilebilir.

Bunun nedeni, kodun zaman içinde birden fazla kişi (farklı stillerle) üzerinde çalıştığından, bir geliştiricinin stiline uyacak şekilde tüm kitaplıktaki değişiklikleri kabul etmek gerçekten mümkün değildir. Stili hatırlamak için stil değiştirmek mümkün olsaydı, her açık kaynak projesi asla ilerlemezdi, çünkü kod sürekli olarak farklı devs stillerine uyacak şekilde düzenlenirdi.

Kodu yeniden düzenleme ve işlevsellik ekleme (veya kullanımdan kaldırılmış hammaddeyi kaldırma) genellikle 'temizleme' kodundan önceliklidir.

Açık kaynak kodlu bir projede çalışmanın en zor ve ödüllendirici kısmı, gönderdiğiniz değişiklikleri neden önerdiğiniz sorulur . Eğer iyi bir neden verebilirseniz, yamanızın gönderilme şansı daha yüksektir.

Benim tavsiyem, ilk önce yapmaya çalıştığınız şeylerin tadına bakmak için bu değişikliklerden birkaçını tek bir kaynak dosyada yapmanızdır. Değişiklikler iyi gerekçelendirilmiş ve kabul edilmişse, bunun gibi daha fazla değişikliğin projenin kalitesini iyileştirip iyileştirmeyeceğini sorun. Bu şekilde, yamalarınız gelecekte reddedilirse, hiçbir şey için çok çaba harcamayacaksınız.

Açık kaynak geliştirmek kod yazmaktan daha fazlasıdır. Sen bekçisi (kontrol itme erişim kim DEVS) çünkü bir güven ilişkisi kurmak için çalışıyoruz olacak projenin bütünlüğünü korumak için gerekeni yap. Daha fazla yama gönderdikçe, ağ geçidi denetleyicisi tarzınız için daha iyi bir fikir edinir ve değişikliklerinizi haklı çıkarmanıza gerek kalmaz.

Bu zaman alan bir süreç ama çok faydalı. Sadece bakabilmek ve bir başkasının kodunu eleştirmekten çok şey öğrenmekle kalmayacak, aynı zamanda kendi tarzınıza da eleştirileceksiniz.

'Başkalarının kodlama stilindeki hataların adaletsizliğini düzeltmeye' çalışırken çok zaman kaybetmeden kendinize şunu sorun:

Önerdiğiniz değişiklikler projeye değer katmaya mı, yoksa kendi iç üslup dininize mi dayanıyor?

Stack Overflow (ve ilgili Stack Exchange siteleri) konusunda çok fazla din vardır . Ben demek çok . İnsanlar stil hakkında durmadan düşünür ve konuşurlar, sanki onun hakkında ne kadar çok konuşursanız, 'mükemmel, ideal, yıkılmaz, yanılmaz' kodlama stiline o kadar yaklaşırsınız. Bunun hakkında çok konuşuyorum çünkü eğlenceli.

Açık Kaynak dünyasında, stil çok önemli değil. Fonksiyon olduğunu .

Not: Bu tavsiyelerin tümü, bekçinizin makul ve yetenekli bir programcı olduğunu varsayar. Eğer öyleyse, tek endişesi 'bebeklerini' korumak olan whiny b & # & es'den birine takılmadığınız için kendinizi şanslı sayın. Onlar do birini karşılaşmanız durumunda şaşırmayın, dışarı vahşi mevcuttur.


1

Kalite> Görgü Kuralları

Kanımca, kalitesinin düşük olduğunu fark ettiğiniz anda başkalarının kodlarını düzenleme konusunda endişelenmemelisiniz. İyi bir yazılım kalitesi elde etmek için temiz kodlara dikkat etmeniz yeterlidir. Diğer insanların kodlarında iyileştirmeler yapma konusunda herhangi bir sorun görmüyorum, diğer insanların kodlarında çalışan kodlayıcılar olduğunun farkında ve minnettar olmalıdır.


0

"Git" i kullanmadan sorunu çözmenin daha iyi bir yolunu bulabilirseniz, bunun için gitmenizi öneririm. Kodu bugün daha iyi hale getirmek için biraz çaba göstermeniz, gelecekte çok daha fazla çabadan tasarruf etmenizi sağlayabilir.

Orijinal yazarla iletişim kurmak da iyi bir fikirdir.


0

Bunda yanlış bir şey yok goto. Montaj koduna bakın - her yerde çok sayıda gotos (atlar ve dallar).

gotoBugünlerde kötü bir isme sahip olmasının nedeni , goto ifadesini çok kötü bir şey olarak belirleyen zararlı olarak kabul edilen Dijkstra gazetesi Go To ifadesinden kaynaklanıyor .

Bunun 50 yıl önce yazılım mühendisliğinin henüz adlandırılmadığı ve programlama dillerinin çoğunun temelde temel makinenin soyutlamaları olduğunu ve makine dilinin goto içerdiğini unutmayın. Bu zihniyetin nasıl olduğu hakkında fikir edinmek için Microsoft Basic'te (orijinali Apple'da) [veya Commodore 64) programlamayı deneyebilirsiniz.

Dijkstra'nın tartıştığı şey, işleri basit tutmak için her yere atlamak değil, ortak bir sonla daha basit bir program yolunu tutmaktı. Örneğin, bir yöntemden geri dönüş. Başka bir deyişle - sadece yerel atlamalar, küresel olanlar değil.

Bu, yazılım geliştirmenin karmaşıklığını çözmek için tanıtılan argümanlarla yöntem çağrıları, kodun modülerleştirilmesi, paketler vb. Şeyleri getirmeye yönelik bir adımdı. Goto ifadesi bu savaştaki ilk seyirci oldu.


Bu şu soruyu cevaplamıyor: "" kötü kodu "düzeltmek benim için uygun bir görgü kuralları mı yoksa izin vermeli ve yeni özellikler üzerinde çalışmalı mıyım?"

@ Kod gotos ile kendiliğinden ve otomatik olarak kötü değilse, o zaman soru "Kırık veya değil kodu düzeltmek gerekir"
Thorbjørn Ravn Andersen
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.