Kodlama ve bakım sırasında notlar, düşünceler, algoritmalar, kararlar yazmak normal mi / kabul edilebilir mi? [kapalı]


22

Bazı insanlar sözsüz düşünemeyecekleri bir problemi var. Düşüncelerini ve kararlarını not almak, ilerlemenin en etkili yoludur.

Yani - kodlama sırasında bazı Notepad ++ dosyalarına düşüncelerimi ve kararlarımı yazmam normal ve kabul edilebilir mi?

Bazen teknik dokümanları yeniden yaratırken veya daha karmaşık algoritmalar hakkında düşünürken kabul edilebilir olması gerekir, ancak bazen, örneğin tasarım seçeneklerini düşündüğümde ve yargılamaya çalıştığımda garip olabilir.

Bu uygulamanın verimlilik üzerindeki etkisi belirsizdir. Bir taraftan - iç kelimelerle muhakeme, yazılı kelimelerden daha hızlı olabilir. Diğer taraftan - daha karmaşık problemler yazmayı gerektirir. Ayrıca, eğer daha fazla tasarım seçeneğiyle sıkışmışsa, karar yazıldığında duygu daha iyidir, bu nedenle moral artar.


5
Bunu da yapma eğilimindeyim ve genellikle yapmadığım zaman pişmanlık duyuyorum. Neden belirli bir şeyi yaptığınızı hatırlamak veya daha sonra tünel vizyonuyla derinlemesine dirsek olmadığınız bir karar verebilmek için daha sonra tekrar bakmak için bir şeye sahip olmak gerçekten yararlıdır. Bir şeyi not almayı unuttuğum zaman, genellikle nedenini unutuyorum ve sonra adımlarımı geri alarak daha fazla zaman harcıyorum.
PsödoPsyche

21
Bağlamın bir parçasını kaçırdığımızı hissediyorum? Bu gözlem verimlilikle ilgili bir şikayette yapıldı mı? Çoğu zaman, eleştiri, alakalı olabilecek veya olmayabilir kök nedenden dolayı öneri ile birlikte gelir.
Jim Rush

9
"Yorumlar ve belgeler" kaynak koduna yazılmalı ve saklanmalıdır. Tasarım seçeneklerini değerlendirme konusundaki düşünceleriniz yazılabilir, ancak genellikle tutulmaz, bu daha sonra size nadiren yardımcı olacak şeyler olabilir (kaynak kodun kendisinden açık değilse bu düşünce sürecinin sonuçları hakkında not tutabilirsiniz, ancak sorduğun şey bu değil). Bir elektronik form, bir kalem-kağıt formunu tercih ediyorsanız veya bunları kafanızda yapabiliyorsanız, size kalmış, başka hiç kimse değil, ama size en iyi olanı söyleyebilirsiniz.
Doktor Brown

4
... PS: Genellikle bunlar için kalem ve kâğıt ya da beyaz tahta tercih ediyorum ve bence bunları zihnimde tam tersi şekilde yapmaya çalışırsam daha iyi bir programcı olamayacağımı düşünüyorum.
Doktor Brown

7
Neden kabul edilebilir olmasın? Kime kabul edilebilir?
Paul D. Waite

Yanıtlar:


62

Sadece normal değil, iyi bir fikir.

Ünlü bir alıntı var

"Bana bir ağaç kesmem için altı saat ver, ilk dördü baltayı keskinleştirmek için harcayacağım".

Düşüncelerinizi organize etmek ve kodlamadan önce çalışmanızı planlamak için zaman ayırmak, iyi harcanan zamandır. Bu düşünceleri kağıda koymak, planlarınızı yansıtmak, eleştirmek ve yalnızca "kafanızda" yapılırsa onları zor olacak şekilde organize etmek için zaman verecektir.


8
Hatalı atıfları kaldırabilirsem iyi bir alıntı. quoteinvestigator.com/tag/abraham-lincoln
Paul Draper

1
Elbette gerçek bir ifade ve iyi bir alıntı, fakat benim anladığım kadarıyla sorunun farklı bir odağı var. Anladığım kadarıyla, OP'nin önceden planlamanın önemi hakkında hiçbir şüphesi yoktur. Bu düşünceleri yazmanın / planlama yapmanın daha etkili olup olmadığını mı yoksa sadece hepsini kafasında tutmak mı istediğini soruyor.
Doktor Brown,

2
Bir saatlik bileme işleminin fazlasıyla yeterli olduğunu düşünün. Bu görev en fazla 3 saat olarak tahmin edilmiş olmalıydı, ancak durgunluk aşırı hazırlık için harcandı. Ahlak neydi? ;-)
Steve Jessop,

26

Evet, bu tamamen kabul edilebilir ve normal.

Karar verme sürecinizi belgelemek, kodun tekrar gözden geçirilmesi sırasında, neden kodun belirli bir şekilde yazıldığını belirlemeye yardımcı olmak için genellikle değerlidir.

Bu notlar yeterince kısaysa doğrudan koda yorum olarak dahil edilebilir. Genişletilmiş yorumlar genellikle harici teknik tasarım belgesinin bir parçası olarak tutulur.


4
Zar zor öneriyoruz değil hakkında notlar içerecek şekilde dizayn seçenekleri göz önünde ve yargıda çalışan kaynak kodunda yorumlar gibi "kısa yeterince" asla oldukları gibi. Bu düşünce sürecinin yalnızca nihai sonuçları, ancak bu OP'nin sorduğu şeyden oldukça farklı.
Doktor Brown

3
Kendimi sık sık "neden bu kararı verdik?" Tartıştığımız alternatifler de dahil olmak üzere bağlam sağlamak için günlük proje notlarıma dönmem inanılmaz derecede yararlı. Sanırım iyi bir şirketim var: Her Şey Mağazasına göre Jeff Bezos da aynı şeyi yapıyor.
kdgregory

8
@DocBrown - bazen o did nedenlerini eklemek iyi bir fikirdir değil gelecekteki bir geliştirici yaptığına değiştirmeye çalışmayın böylece diğer olası yöntemler / algoritmaları kullanmak
HorusKol

1
@HorusKol: Elbette, bazı nadir durumlarda, bu önemsiz sağduyudur. Ancak bu “karar alma sürecini belgelemek” ten oldukça farklı .
Doktor Brown

1
@DocBrown doğru, kimsenin kaynak kodunda not sayfalarını istediğini sanmıyorum. :)
mcknz

20

Bu çok iyi bir fikir. Ertelemek için bir yol haline gelinceye kadar.

Anahtar dengedir. Kendimi içeri almazsam ama geldikleri gibi fikirleri yakalarsam en üretken olduğumu düşünüyorum.

Eğer düşük bir seviyede öğütürsem ve yüksek seviyede bir fikir gelirse onu not edin ve daha sonra geri geliyorum.

Çalışmayı planlamak iyi bir fikir ancak bir izleyici önünde iletişim kurmanız veya sunmanız gerekmiyorsa en iyi araçlar kalem ve peçetedir. Fikri yakalamak. Güzel yapmak için zaman harcamayın.


Markdown, bu notları almanın başka bir harika yoludur. Ellerinizi klavyede tutar, böylece düşünce işleminde minimum bozulma olur.
RubberDuck

1
Bir editöre ateş vermek veya bir kalem ve peçeteyi kapmak daha iyi bir alternatifse tamamen kişisel dokunma yazma ve el yazma becerilerinize bağlıdır. Benim için en iyi çözüm açıkça editördür.
cmaster

9

Herhangi bir profesyonel durumda, sadece "normal ve kabul edilebilir" değildir, zorunludur. Tipik geliştirme döngüsü, herhangi bir kodlama başlamadan önce iki dokümantasyon aşamasından oluşur:

  1. İşlevsel Gereksinimler Belgesi: genellikle uygulanacak işlevselliği belirten iş analistleri tarafından yazılmıştır.

  2. Detay Tasarım Dokümanı: hangisinden bahsediyorsunuz, neredeyse daha resmi, sistemin işlevsel ayrışmasını (faktoring), algoritmaları, vb. Belirtiyor. Eskilerimden bazıları çevrimiçi, örneğin bu .

Daha az resmi belgeler için,% 110'u satır içi yorumlar hakkında önceki açıklamalara katılıyorum. Gitmenin tek yolu bu; Öyle ya da böyle, her şey sonunda kaybolur. Ancak temiz ve düşünceli satır içi yorumlama, başka herhangi bir beceri gibi, çaba ve pratikle geliştirilen ayrı bir kodlama becerisidir. Eski şeylerimin bazılarını görebilirsiniz, örneğin bu . Bu tarz size çekici gelebilir veya olmayabilir. Öncelikle, hoşunuza giden bir stille iyi yorumlanmış bir kod bulmanızı ve kendi kodunuzda öykünmenizi öneririm. Bir süre sonra uygun gördüğünüz şekilde adapte edin.


4

Bu tür bilgileri koymak için harika bir yer, doğrudan sürüm kontrol sisteminizin (SVN, git, vs.) taahhüt mesajındadır. Bu sayede değişimleri ve sebeplerini aynı yerde görebilirsiniz.


1
Aynı zamanda onları aranabilir yapar. Komut satırında git ve sourcetree komut satırlarında arama yapabilirsiniz. Sadece not defteri kullanıyorsanız, büyük olasılıkla dosyalar bir daha açılmayacak ve kapsamlı bir bash bilgisi olmadan ve tüm ilgili yerleri araştıran bir senaryo yazmadan arama yapmak zor olacaktır.
Umarım

Bunu hem taahhüt beyanlarımda hem de taahhüte bağlanan hata veya özellik isteğinde yapmaya çalışıyorum. Ayrıca, kodu neden değiştirdiğimin nedenleriyle kod içinde satır içi yorumlar da yaptım. Bu, yorumların büyük oranda bilinmediği creaky old code base sistemimizde çarpıcı biçimde yardımcı olur.
delliottg

Hayır, bu başka bir şey. Taahhüt mesajları neden yapıldığını açıklamalıdır. Neden dokümantasyon kod açıklamalarına, beraberindeki dokümantasyona ve sorun izleyici çözümüne giriyor. Beş sayfa notu ve tasarım çalışmasını kararlı bir mesaja koyamazsınız ya da istemeyebilirsiniz.
Monica ile Hafiflik Yarışları

Sürüm kontrol sistemine koymak harika. Daha iyi bir yer olsa içindeki düz metin dosyasıdır. Bunlar mesaj iletmekten daha kolaydır.
Thorbjørn Ravn Andersen

2

Diğer iyi cevaplara ek olarak, yapmaya çalıştığım şey hakkında sık sık düşüncelerimi yazdığımı da ekleyeceğim.

Yapmaya çalıştığım şeyi ifade etme konusunda çok açık olmak, zorunlu olarak öngörülmeyen varsayımları, varsayımları ve / veya şartları anlamama yardımcı oluyor.

Bu daha sonra her birini daha iyi ele alabileceğim alternatiflere işaret ediyor; başka bir şey düşünürsem bu yerimi kurtarmaya yardımcı oluyor.

Nefes ve derinliği keşfetmek için kısa notlar alıyorum; bu nedenle özyinelemeli bir şekilde çalışarak çözüm ağacını hazırlamamda, aramda bulunmama, karar vermemde, desteklememde, keşfetmeme, keşfetmeme ve karar vermeme yardımcı oluyor.


1

Size / (yeni) ekip üyelerine zaman kazandırabilecek herşeyi yazmak, iyi zaman harcamaktır. Bunun birisinin daha sonra ihtiyaç duyabileceğinden ve gerçek bir uzun vadeli bir proje olmadığı sürece fazla düşünmediğinizden emin olun.

Aynı zamanda hiçbir zaman almamalı. Düşünerek zaman harcarsanız düşüncelerinizi 1'e 1 yazabilirsiniz (birisine faydalı olabileceği sürece).

Asıl sorun ne yazdığınızı çok fazla düşünebilir. Sırf yazdığınız için, mevcut bir formata uymanız gerektiği veya tam bir dokümantasyon oluşturmanın tüm yoluna gitmeniz gerektiği anlamına gelmez.

Seçiminiz bir şeyi not almama ve sadece bir not defterine biçimsiz notlar yazmak arasındaysa, o zaman sadece normal notları yazın.


1

Diyorsunuz: "Bazı insanlar kelimeler olmadan düşünemedikleri bir problemi var. Ve fikirlerini ve kararlarını not almak ilerlemenin en etkili yoludur."

Düşüncelerinizi ve kararlarınızı not almak, ilerlemenin en etkili yoluysa, en etkili yoldan ilerlemek neden normal ve kabul edilebilir olmasın? Sizin için en iyi olanı yaparsınız. Başkası için en iyi olan şey olmayabilir. Bu durumda bir başkasının sizin için neyin en iyi olduğunu size söylemesine izin vermezsiniz ve onlara onlar için neyin en iyi olduğunu söylemezsiniz. Herkes kendileri için en iyisini yapar.


1

İnsanlar aynı anda kafasında sadece yedi “şeyi” tutabilirler. Yedi basamaklı telefon numaralarının nedeni bu. Programcıların verimli çalışabilmesi için, şeyleri hafızasından boşaltmak ve gerektiğinde hızlı bir şekilde almak için bir tür sistem bulmaları gerekir. Not almak açık ve doğrudan bir yoldur, ancak orta derecede karmaşık herhangi bir şey üzerinde çalışan herkes bir şekilde bunu yapmak zorundadır . Programı birisiyle eşleştirdiğinizde, yöntemlerini aramaya özen gösterin.

Ortak yollardan biri teste dayalı gelişimdir. Bu metodolojide bir başarısızlık testi yazarsınız, bu başarısızlık testini geçmek için sadece yeterli miktarda kod yazarsınız, daha sonra mevcut tüm sınavlarınızı geçerken daha güzel görünmesi için kodunuzu yeniden yansıtırsınız. Bu metodoloji tüm notlarınızı testlerin içinde kodlu tutar. İnsanlar not almaya gerek kalmadan bu şekilde çok hızlı çalışabilirler, çünkü sadece bir sonraki teste odaklanırlar.

Başka bir yaygın yol, notlarınızı yalnızca kodunuza sahte kod yorumlar veya saplamalar olarak yazmak ve ardından yavaş yavaş gerçek şeyle değiştirmektir. Genelde algoritmalar böyle yazıyor. İlk taslağım sözde kodu olan sadece temel bir işlev, sonra yavaş yavaş daha derin ve daha derin soyutlama seviyelerine kadar doluyor.

Sizin için uygun olan yöntemi kullanmaktan çekinmeyin, ancak "verimli" iş arkadaşlarınızın hangi yöntemleri kullandığını fark etmeye çalışın. Senin yaptığın aynı insan sınırlamaları var.


1
TDD not alma alıştırması mıdır? Sanmıyorum
Robert Harvey
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.