Mutlaka karmaşık kod yapılarını nasıl belgeleyebilirim?


9

Matematiksel veya yapısal olarak oldukça karmaşık ve indirgenemez bir kod parçam varsa, bu kod parçasını belgelemeye nasıl devam edebilirim? Özellikle, yaptığım matematik veya mimari becerilere sahip olmayan birinin bunu belgelerden anlayabilmesini nasıl sağlayabilirim? Tüm matematiği de belgelemeli miyim? Bir öğreticiye bağlantı? Karmaşık yapılarda görsel yardım bağlantısı var mı?


1
Bu, büyük ölçüde, kişinin matematiksel karmaşıklıktan mı yoksa mimari karmaşıklıktan mı bahsediyor olduğuna bağlı olacaktır. Aynı şekilde belgelenmemişlerdir. Hangisi?
Edward Strange

2
related: Bir programcı kodun arkasındaki genişletilmiş mantığı nerede açıklamalıdır? . Özellikle cevaplardan birinde önerilen test olarak doktor yaklaşımını seviyorum.
sivri

1
@Gnat, neden teşekkürler. Genel olarak, bu soruya cevabımın bu soru için de işe yarayacağını düşünüyorum.
Mark Booth

@MarkBooth doğru, çoğunlukla ilgili soruyu önerirken aklımdaki cevabınızdı. Cevap genel olarak iyidir, ancak testlerle ilgili nokta özellikle karmaşık bir algoritma uygulaması için bir kez kullandığım için bir zil çaldı
gnat

Yanıtlar:


8

Bu gerçekten kodun ve matematiğin ne kadar karmaşık olduğuna bağlıdır. Kodun kendisi - her zaman olduğu gibi - mümkün olduğunca kendi kendini belgelemelidir. Değişkenleri doğru bir şekilde adlandırın, mantıksal ve özlü yöntemler (mega işlevler yerine) uygulayın, uygun durumlarda satır içi belgeleri ekleyin (yani, kodun gerçekten ne yaptığını açık değilse).

Açık olmayan bir algoritma kullanıyorsanız, kaynağa bir referansa bir bağlantı ekleyin. Bu makul bir uygulamadır, çünkü geliştiriciye ne yaptığınızı öğrenmek için çok hızlı bir yol sağlar. Dediğim gibi, bu açık olmayan ama karmaşık bir algoritma ise yararlıdır. Bu, (a) mantıklı bir şey yaptığınızı ve (b) birisinin işe yaradığını gösterdiğini kanıtlamalıdır.

İyi bir örnek, bulanık metin eşleşmesi etrafında yaptığım bazı çalışmalardır. Algoritmalar üzerinde önemli araştırmalar yaptım ve 'Smith-Waterman algoritması' olarak bilinen şeyi uyguladım (aslında DNA dizileri için kullanılır, ancak genellikle 'eşleştirme' için geçerlidir). Bu yüzden sadece algoritmayı uygulamak yerine, çevrimiçi referanslar buldum ve bir veya iki bağlantı ekledim. Yukarıdaki gibi, bu, (a) algoritmamın yayınlanan algoritma ile eşleştiğini ve (b) algoritmanın incelendiğini ve işe yaradığını gösterir.

Ancak bu, kodun nasıl çalıştığını ve çeşitli sınıfların ne yapması gerektiğini açıklamak zorunda değildir. Bazı 'gerçek' dokümanları (sistem için bir geliştirici kılavuzu) yazmaya başladığınızda, ne yaptığınızı açıklamalı ve gelecekteki destek için yeterli bilgi sağlamalısınız. Kanımca bu belge teknik olarak agnostik bir kişi tarafından okunabilir olmalıdır; 'küçültülmesine' gerek yoktur, ancak jargonu dışlamalı ve varsayılan bilgiye dayanmamalıdır.


3

Yapmanız gereken ilk şey kaynağı çevreleyen yorumlar. Bu, doğrudan kodla belgelere doğrudan bir bağlantı olmasını sağlar. Dokümantasyon çok karmaşıksa, yorumlarda yalnızca bir özet göndermeyi ve ardından mimari / karmaşık algoritmanın daha eksiksiz bir açıklamasını içeren bazı harici dokümanlara bir bağlantı göndermeyi düşünün. Ancak, çok karmaşık değilse, tüm belgeleri tek bir yere dahil etmeyi düşünün. Bu, kodunuzun / belgelerinizin senkronize kalma olasılığını en üst düzeye çıkarır ve birlikte okunur.


0

Kodu, ekibinizin / şirketinizin ihtiyaç duyduğu ölçüde belgeleyin. Eğer bir jr. dev kodunu korumak için gerekli olacak, bazı matematik hakkında ayrıntılı olarak gitmek zorunda kalabilirsiniz. Bu bir yönetim kararıdır ve size gerekli zamanı vermeleri gerekir.

Kodu daha az geliştirici tarafından değiştirildiğini hesaba katacak kadar belgelemeniz gerektiğini düşünmüyorum. Bu bir endişe kaynağıysa, belgelemeniz için zaman tanıyın.

Onlar için web araması yapmak zorunda değilsiniz.


1
"Kodun korunması için bir jr. Dev gerekiyorsa ..." Benim tecrübelerime göre sadece yorumlarınızı okuyan herkesin jr olduğunu varsaymak daha iyidir. dev. Eğer öyle değilse, yorumlarınızı okumazlar. Jr olmasalar bile. ve hala yorumlarınızı okuyor, jargon ve varsayımlar yanlış iletişim kurulmasına neden oluyor. Sonunda ... çoğu geliştirici, insanoğlunun bildiği her alanda olduğu gibi, gerçekten bir lanet vermeden hayattan geçer ve asla "jr" den daha iyi olamaz.
Edward Strange
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.