Yazma yazılımı sıfırdan okumak ve anlamaktan daha kolay mıdır? [kapalı]


12

Ben ve bir arkadaşım dün büyük bir C ++ yazılımı yazmak ve onu yeni bir işe alım olarak anlamak arasındaki farklar hakkında tartışıyorduk.

Bir yazılım her seferinde bir satır yapıldığından ve bu işlemin (insanlar) bir şeyleri nasıl öğrendiğimize ve bir başkasının üstüne bir şey inşa ettiğimize benzediğinden, büyük bir yazılım yazmak aslında onu okumaktan ve ne yaptığını anlamaktan daha kolaydır (kodu atlamanız yardımcı olur, ancak birden fazla sınıfı / kaynak dosyasını birlikte hatırlamanız gerekir, ne için yazıldıklarını bile bilmiyorsunuz, çok iş parçacıklı kod malus noktaları ekliyor)?

Bu ilk başta garip geliyor ama biraz düşündükten sonra makul görünüyordu


1
Kapağın kısa açıklaması: Bu mükemmel bir soru olsa da, sadece cevaplanamayan, sadece tartışılan (kapsamlı) bir sorudur. Dikkate alınması gereken çok fazla faktör var, kod kalitesi ve tarzı, okuyucunun öğrenme becerileri ve proje ve dil ile aşinalığı, projenin büyüklüğü vb. Kapanış hakkında daha fazla tartışmak istiyorsanız, Meta sitemizde bununla ilgili bir soru zaten var .
yannis

"Çıraklık Desenleri" kitabı Acemi Ustadan Usta Zanaatkar'a Yolculuk hakkında konuşuyor. Kariyer gelişiminde acemi, çırak, kalfa düzeyindeki programcıların birçok sorusunu cevaplar. Desenlerin çoğunu kullanmak biraz zaman alır, ancak bu yolculuğun bir parçasıdır. Kalıplardan biri, üretim sistemlerini anlamaya ve karşılaştırmaya yardımcı olan 'Kırık Oyuncaklar' veya 'Prototipler' yazmaktır. Daha birçok faydalı desen var.
GuruM

Yanıtlar:


41

Deneyimlerime dayanarak, aşağıdaki aktiviteleri en kolaydan en zoruna doğru sıralayacağım.

  1. İyi kod okuma
  2. Hatalı kod yazma
  3. İyi kod yazma
  4. Hatalı kodu okuma

Yukarıdaki sıralama 2 sonuca götürür

  1. Kod yazmak kötü kodu okumaktan daha kolay olsa da, iyi kodu okumak kendi kodunuzu yazmaktan daha kolaydır
  2. Kötü kod yazmak, iyi kod yazmaktan daha kolaydır, ancak kötü kod yazmak sizi en zor şey olan kötü kodu okumak için ayarlar. Özellikle kötü kod yazıldığından daha fazla okunduğundan.

Tabii ki, iyi kod ve kötü kod geniş genellemelerdir. İyi kod hakkında daha fazla bilgi için Kod Tamamlandı ve Kodu Temizle'yi öneririm .


Diğer birçok şey "kötü kod" a yol açabilir - iç tutarlılığın olmaması, vizyonu birleştirmek veya planlama. Kodun planlanması veya uygun modülerleştirilmesinde genel bir eksiklik. Anlamsız iyi kod gördüm, çünkü aynı zamanda işe yarayacak yerleşik dil özelliklerini kullanmadı.
Ben DeMott

Ayrıca, iyi kod nasıl yazılır: cdn.thenextweb.com/files/2011/01/65987_700b.jpg
CurtisHx

2
Ölçeğimde, kötü kod okumak iyi kod yazmaktan daha kolay. En kötüsü, okumaya çalıştığınız bozuk kodda bir hata ayıklayıcı başlatabilir veya yeniden düzenleme aracıyla düzenleyebilirsiniz.
mouviciel

2
Hatalı kod yazmak, yalnızca entegre olması ve çalışması veya değişen gereksinimlere göre değişmesi gereken noktaya kadar kolaydır. "Kendinizi bir köşeye programladığınızda" artık o kadar kolay değil.
Kaz

@mouviciel Kötü kod yazmaması gereken çok akıllı programcılar tarafından yazılan kötü kodu okumak zor olabilir. Saf programcılar tarafından yazılan kötü kodu okumak kolaydır. Sadece "saf şapka" koymak ve kod başarmak için neyi başarısız açıktır. :)
Kaz

13

Bu soru Yanlış Fikir birliğine hitap ediyor. http://en.wikipedia.org/wiki/False-consensus_effect

Farklı insanlar bilgiyi farklı şekilde öğrenir ve özümser. İşitsel öğrenenlere, görsel öğrenenlere ve kinestetik öğrenenlere benzer. Bazıları için kodu okumak daha kolaydır, bazıları için kod oluşturmak daha kolaydır. Benim için ikincisi. Ekibimdeki diğerleri için bu eski. Bir tür fikir birliği veya çoğunluk bulmanın yararlı olduğuna inanmıyorum. Beyninizin bilgiyi nasıl emdiğini ve öğrendiğini anlamak ve bu bilgiyi kendinizi daha iyi hale getirmek ve farklı olanları kabul etmeyi öğrenmek daha iyidir.


1
Şüphesiz soruyu sormak ve görüş bildirmek, bu (veya başka herhangi bir) hipotezin otomatik olarak doğru olduğuna inanmaktan çok daha iyidir. Çeşitli insanların aynı soruna nasıl yaklaştıklarını bilmek, takımların nasıl performans gösterdiği ve sosyal etkileşimleri geliştirdiği üzerinde olumlu bir etki yaratabilir.
Robbie Dee

7
Kesinlikle haklısın. Sormak başlangıçtır. Ve Yanlış Bir Konsensüs olduğunu anlamak, anlayış için faydalıdır. Bu yüzden soruyu basitçe görmezden gelmek yerine "cevapladım".
mawcsco

7

büyük bir C ++ yazılımı yazma ve yeni bir işe alma olarak anlama arasındaki farklar

Bu, okuma ve yazma yazılımı arasındaki farkla aynı şey değildir. Bir projede yeniyseniz (ve özellikle bir şirkette yeniyseniz), kodun ne yaptığından çok daha fazlasını öğreneceksiniz. Anlamak neden kodu genellikle işletme projesi organizasyonun kesimleri ile nasıl çalıştığını ve nasıl bir anlayış gerektirir gelmez yapar. Kısacası, arka plan bilgisinin yararı olmadan kodu okumak, kodun çalıştığı bağlamı tam olarak anladığınızda, kodu okumaktan daha yavaş, daha zor bir iştir.

Orada olan bir marka yeni bir kod yazma arasında bir fark yeşil alan projesi ve okuma ve mevcut kodunu değiştirme, ama bir ille olduğunu söyleyemem kolay , sadece farklı diğerinden daha. Yeni bir şey oluştururken, kodunuzu zaten orada olanlarla nasıl çalıştıracağınız konusunda endişelenmenize gerek yok, ancak projenizi geleceğe yararlı kalacak şekilde yeterince genişletilebilir ve uyarlanabilir hale getirme konusunda endişelenmeniz gerekiyor . Mevcut bir proje üzerinde çalışırken, zaten orada olanı bir rehber olarak kullanabilirsiniz, ancak önce orada ne olduğunu anlamalısınız.

"Yeni bir işe alım" olarak, özellikle bilmediğiniz her şeyi öğrenmenize yardımcı olduğu için mevcut bir projede çalışmak genellikle daha iyidir: işin nasıl çalıştığı, çeşitli projelerin birlikte nasıl çalıştığı, kodlama standartları ve uygulamaları ve hatta (özellikle) geliştirilebilecek şeyler.


Sistemin genişlik / derinlik ve deneyim altındaki temel API'yı anlama. Sistemin mantıksal bileşenleri nelerdir? Bu bileşenler birbirleriyle nasıl etkileşime giriyor? Temel yapı taşlarında hangi mekanizmaları kullanıyorlar? Altta yatan yapı taşları farklı yollarda nasıl davranır? Sistemin kısıtlamaları / hedefleri nelerdir? Neden diğer adaylara göre belirli yollar seçildi? Yeni bir bileşen eklemeniz gerekiyorsa, neyi yeniden kullanabilirsiniz ve yeniden eklemek için neye ihtiyacınız var? 'Sistemin içinden' görebiliyor musunuz? Pragmatik Düşünme ve Öğrenmeyi görmek için süper bir kitap.
GuruM

Bir 'Prototip' ya da 'Kırık Oyuncak' (bilinen eksikliklerle ve sadece alternatifleri keşfetmek için) oluşturmak, yukarıdaki soruları düşünmek için kendini "zorlamaya" yardımcı olur. Yeniden ekleme ve ardından bileşen ekleme ve özellik ekleme, kişinin eldeki sorunlar ve aday çözümler ("forum araması yoluyla") için bir "his" elde etmesine yardımcı olacaktır.
GuruM

4

Bu ilginç bir soru, ama onu okumaktan ve okumaktan daha kolay olduğu tarafına yaslanmaya meyilliyim.

Tecrübeli, tecrübeli bir programcıysanız, kodları okuyup "Evet, iyi seçim, kontrol edin, oh, Y yerine X yapmış olabilirim" vb. sıfırdan yazmaktan büyük zaman kazanın (Bunu yapmak için nedenler olmadığı sürece).

Daha yeni bir programcıysanız, o zaman "ne bilmediğinizi bilmiyorsunuz" ve bu yüzden tüm küçük şeyleri icat etmek / öğrenmek zorunda kalacaksınız ve büyük olasılıkla programda bazı verimsizliklere sahip olacaksınız. kodu. Bununla birlikte, muhtemelen dili daha iyi anlayacaksınız.

Ancak her iki durumda da, kodu okumak ve oradan gitmek, tamamen sıfırdan yazmaktan daha kolay olacaktır.


2

Çoğu programcı, kendi yazdıkları kodu, diğer insanların yazdıkları koda kıyasla daha kolay bulur. Bunun nedeni hem bahsettiğiniz satır satır öğrenme hem de yalnızca bireysel bir stil ve yetenek meselesidir. Bu yüzden çok fazla tekerlek yeniden icadı gerçekleşir.

Ancak, ağaçların görünümü budur. Orman görünümü, kodu okumayı sıfırdan yazmaktan çok daha kolay olmasıdır. Örneğin, sıfırdan yeni bir kelime işlemci yazmak ya da mevcut bir kod tabanını iyileştirmeler yapacak kadar iyi öğrenmek daha mı kolay?

Kodu okumaya başladığınızda, kodu kendiniz okumayı kolaylaştırmak için bazilyon bir yol düşünebilirsiniz. İlkini sadece kodu izleyerek, arazinin yerleşimini anlamaya çalışarak, bazen nasıl yapmak istediğinize tamamen anathemada geçirirsiniz. Ancak gerçekten büyük kod tabanlarında bile, bu uygulamayı oluşturmak için yatırım yapmış yüz binlerce adam saatine kıyasla, tekerleklerinizi döndürmek için belki 40-80 saat harcayacaksınız.


Kod yazabilir ve anlayamaz mısınız? Kopyala belki.
JeffO

@JeffO Her zaman - lol ...
Robbie Dee

1

Yazılım parçasını yazan kişi, yazarken mantığı ve düşünme sürecini bilerek neredeyse her zaman programın en iyi anlayışına sahip olacaktır.

Kod yazmanın, anlama kolaylığı açısından kod okuma ile hiç karşılaştırılabileceğini düşünmüyorum. Bir yandan, sadece yazılım yazmak, kodun her bir bölümü, kullanılan kütüphane vb. İle ilişkili bağlam bilgisi nedeniyle bu belirli yazılım parçasının daha iyi anlaşılmasını sağlar. Ancak, başkalarının yazdığı kodu okumak, anlaşılması zor olabilir. ancak dili anlama açısından, yaşamayı yazma kodunuzu kolaylaştırmanıza yol açabilecek, kullanmayı düşünmediğiniz yeni bir kitaplık veya kullanım yolu hakkında fikir verebilir.

Yapı bilgisi açısından, okuma kodu ve yazma kodu çok bağlantılı ve birçok yönden birbiri üzerine inşa edilmiştir. Deneyim kodu yazma, başkalarının kodunu anlama kolaylığı sağlar ve kodu okumak, kod yazma konusunda daha kolay zaman geçirmenizi sağlar (yeni mantık kavramları, kütüphane kullanımı vb.).


1

Bu kişisel olarak kendimi apaçık hissettiğim bir şey, ama programlama popülasyonu için bir bütün olarak tuttuğundan asla emin olamadım. Örneğin, belgeleri okumak yerine, diğer insanların kodlarını mutlu bir şekilde seçip sanki kendilerine aitmiş gibi kavrayabilen çok yetenekli kodlayıcıları tanıyorum.

Bu şu soruya yol açar: bu önemli mi?

Kodu okuyorsanız, yeniden yazmak yerine değişiklik yapma şansınız vardır. Yeniden yazıyor olsanız bile, bunu yeni bir dilde / sürümde yazıyorsunuz ve bu nedenle kodu aynı şekilde oluşturmayabilirsiniz. Demek istediğim, her zaman tüm kodları anlamak her zaman gerekli değildir.

Tüm bunlar doğrudur, örneğin BDD gibi yeni geliştirme metodolojileri , kodun makineyi sürmek için bir araç olmaktan ziyade iş mantığının koddan net olmasının önemli olduğunu kabul eder. Elbette bu yeni bir şey değil - konsept Donald Knuth'un seminal çalışmasından bu yana var: Literate Programming .


1

StMotorSpark'ın cevabına girdim, sadece şunu ekliyorum:
Evet ya da hayır sorusu olamayacak kadar çok faktöre bağlıdır, örneğin:

  • Mevcut kod iyi belgelenmiş ve iyi yazılmış mı yoksa herhangi bir anlamı veya yorumu olmayan bir spagetti gibi mi görünüyor?
  • Nasıl çözüleceğini öğrenmek için sonsuz zamana mal olan çok nadir durumlara sahip küçük bir uygulama mı yoksa daha büyük ama basit bir uygulama mı?
  • vb.

1
Çok iyi noktalar; ancak bunun kişiye daha bağımlı olduğunu iddia ediyorum. Örneğin, neredeyse hiçbir belgeye sahip olmayan bir kod olsa bile, yine de "Bunun ne olduğunu merak ediyorum" şeklinde fikir verebilir. Birisi gerçekten öğrenmek istiyorsa, programın veya belgelerin boyutuna bakılmaksızın yararlı bir şey bulacaklardır. Bununla birlikte, en iyi boyutta olmayan iyi belgeler ve kodlar önemli ölçüde yardımcı olur.
StMotorSpark

1
Tamamen katılıyorum, bu da kişiye çok bağlı. Owr iş gereksinimleri nedeniyle bazılarımızın sıfırdan çok fazla geliştirme yaparken, diğerlerinin çok fazla bakım yaptığını unutmayın. Bu, her ikisi de aynı iyi organize edilmiş düşünce tarzıyla, aynı düzeyde mantık ve dil özellikleri anlayışıyla
başlasalar da
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.