Programcı olmayanlara "güzel kod" u nasıl açıklayabilirsiniz? [kapalı]


44

Programcı olmayan bir arkadaşla konuşurken, "güzel kod" kavramından bahsettim ve bunun ne anlama geldiğini anlamak istedi, ama ben, kimseye sahip olamayacak birisine nasıl açıklayacağımı biraz kaybetmiştim. bağlam ne olursa olsun.

Tüm kodlar zaten birine saçma sapan gibi göründüğünde, bir kod parçasını diğerinden daha güzel kılan şeyleri nasıl açıklarsınız? Analojiler de faydalı olabilir.


12
Bir kodu programcıya kod göstermeden açıklayabilir misiniz ? Tanımın kendisi bir sanattır.
kojiro

9
Burada iyi bir fikir edinebilirsek, belki de matematikçi olmayanlara güzel bir kanıt tanımlamak için kullanabilirim.
David Thornley

Güzel bir kod, işi doğru yaparken daha basit ve daha az fikir kullanan kod olabilir. İronik olarak, basit fikirleri bulmadaki önceki görev karmaşık bir iş olabilir ve biz buna hayran kaldık. - Üzgünüm şu anda bunu birisine daha doğal bir şekilde açıklamanın bir yolunu bulamıyorum.
LatinSuD,

Güzel kod IDE fontunuzu Comic Sans olarak ayarladığınızda verilir. iç çekiş
Kirk Broadhurst

Yanıtlar:


88

Dil benzetmesi

En sevdiğin hikayeyi düşün. Muhtemelen güzelce yazılmıştır. İngilizce olmayan bir konuşmacıya, anlayamadıkları veya neden güzel olduğunu anlayamadıkları için güzelliğinden uzak durmadığı için.

İnşaat analojisi

Sert bir şekilde inşa edilmiş bir ev düşünün. Açıkça örülmüş olan kapı ve pencereleri var. Harç, temelin yetersiz olduğu bir köşede kırılmıştır. Ve hiç kimse neden var olmayan bir 2. kata çıkan bir merdiven boşluğunun olduğunu anlayamıyor. Tuvalet, mutfağın yanında egzoz fanı olmadan inşa edilmiştir ve hakim rüzgarların evin kötü kokularını evin geri kalanına üfleyeceği şekilde yerleştirilmiştir. Açık şömineden gelen baca, bazı ahşabın 5 cm uzağındadır ve ateş yakmaya hazırdır.

Her şeyin olması gerektiği yerde bir ev olması, düşük bakım gerektirmesi, mükemmel yalıtılmasının sağlanması için biraz güneş ısısının kışın sıcak kalmasını sağlamak, havalandırmadan enerji elde edilmesini sağlamak, böylece hem temiz hava hem de konforlu bir sıcaklık elde etmek için ve ihmal edilebilir elektrik faturaları. Yanıcı olmayan malzemelerden üretilmiştir, böylece yangından yanmaz. 9.0 deprem ve F5 kasırga dayanacak. Diğer evden inşa etmek sadece% 30 daha pahalı, ancak farkı 5 yıl içinde ödeyecek. Ve estetik olarak hoş.

GUI bir evin dış görünüşü gibidir. Bir kullanıcı bir GUI'deki güzelliği tanıyabilir, tıpkı güzel bir evi takdir edebilecekleri gibi. Fakat belki de daha da önemlisi, hem evlerde hem de programlarda tasarımdaki gerçek güzelliği, inisiye olmayanlar için görünmeyen, ancak önemli ve güzel olması gereken şeylerdir.


19
Bu inşaat benzetmesi mükemmel!
Daniel Vandersluis

1
+1 @ user21007: Uzun, çok uzun zaman önce, devasa siteler için bilgi mimarıydım - herkes yapı benzetmesini ve sadece çalışan ve doğru hisseden sistemler kavramını elde eder.
Blunders

1
GUI'li ürünler için iyi bir benzetme. Çerçeveler ve kütüphaneler için pek iyi değil.
Den

1
Bana bu reklamı hatırlatıyor: youtube.com/watch?v=p9tjs-6wbsI
JohnL

4
Dil benzetmesini geçmişte çok kullandım: "Bu çirkin kodla çalışıyorum ..." "Bekle, çirkinle ne demek istiyorsun?" "görüyorsun, yazıyor liek"
DistantEcho

28

Bir araba düşün.

Çoğumuz arabaya bakarız ve sadece vücudu görebiliriz. Birisi bazı şeyleri onarır ve arabaya yeni bir boya işi koyarsa, çok daha güzel görünecektir. Temelde aynı araba, ama tüm gördüğümüz bu.

Bir tamirci arabayı açar ve motora bakar. Motorun ne kadar iyi olduğunu görüyorlar. Her şeyin kolay ulaşılması, bakımı ve üzerinde çalışılması için düzenlendiğini görüyorlar. Parçaları görüyorlar ve ne kadar iyi tasarlandıklarını biliyorlar. Deneyimli bir tamirci için bakımlı yüksek kaliteli bir arabanın motoru güzel bir şey haline gelir. Size neyin güzel olduğunu neyin açıklayacağını açıklayamazlar, ancak güzellik anlayışlarının daha düşük bakım maliyetleri, daha uzun bir araba ömrü ve daha iyi performansa dönüşmesi muhtemeldir. Tüm bunlar göremeseniz de o arabanın değerini artırıyor.

Bir web sitesine veya bir uygulamaya baktığınızda, çoğumuzun araba gördüğü gibi bakıyorsunuz. Kodlara baktığımda, makinist arabanın motoruna bakar gibi bakıyorum. Benim yaptığım gibi bu kodun güzelliğini asla deneyimleyemezsin, kelimenin tam anlamıyla senin için görünmez. Ancak bu güzellik, tamircinin güzelliği gibi önemlidir. Yazılımın ne kadar iyi çalıştığını, ne tür sorunlarla karşılaşacağını, yazılımın ne kadar kolay geliştirilebileceğini vb. Belirler. Bunların hepsi göremiyor olsanız bile, bu yazılımın değerine katkıda bulunur.


11

Mevcut kodun tümü zorunludur ve hiçbiri açıklama gerektirmez.


2
@zdan: Onu güzel bulanların gerekli bilgiye sahip olduklarını söyleyerek karşı koyardım (dolayısıyla, bakanın gözünde). Ayrıca, zekice! = Güzel IMO.
Steven Evers,

2
@zdan: Böyle bir açıklama gerektirdiğinde, "güzel kod" değil, "akıllıca bir saldırı".
Mason Wheeler,

1
FFT çok akıllı bir kesmek, ancak güzel diyebilmen için bir yol yok.
Kyte

1
SnOrfus ile çoğunlukla aynı fikirdeyim. Ancak benim için güzel kod sadece gerekli, yeterli ve açıklayıcı olmamalı, aynı zamanda öznel olarak mükemmel ve hafif hissetmeli. Çok fazla kodun SnOrfus'un maruz kaldığı kriterleri belirleyebileceğini, ancak başka bir şekilde oldukça hantal ya da kusurlu hissettiğini düşünüyorum. Böyle bir kodu güzel arayabilirim.
asoundmove

1
“Temel ihtiyaçlara indirgenmiş bir şey değil, daha fazlası” fikrinin doğru yolda olduğunu düşünüyorum. Bununla birlikte, görev için yanlış bir dilde yazılmayacak ve yazılı bir şey de bu tanıma uyacaktır. Ayrıca, açıklama gerektirmemesini talep ederek, tanımınıza uyan görevlerin çoğunun da önemsiz olması muhtemeldir. "Merhaba Dünya" nın güzel denebileceğini sanmıyorum.
user21007

5

Şiirden bahsedeceğim:

İyi yazılmış bir şiir aynı konu hakkında kötü tercüme edilmiş bir el kitabından alıntıdan farklı bir his uyandırır.


Bu benim düşüncemdi, ama herkes şiirden hoşlanmaz ya da anlamaz. Müzik de aklıma geldi: iyi şarkı vs. kötü şarkı, ama bu da oldukça öznel.
PSU

Ne ... 25 arabirim +25 sınıf, hepsi soyut sınıflardan miras kaldı? Sadece kırmızı bir tekerlekli el arabası istedim. Ve belki bazı tavuklar.
Erik,

5

Kodlama problemleri kavramsallaştırma ile ilgilidir, bu yüzden güzel kod problemin dikkate değer bir kavramsallaştırmasını temsil eder.

Tek sorun varolan sorun çözülecek indirgenebilir Örneğin, biz kredi, hoşuna fikir içine sorunun kendisinin doğası .

Bazen problemin yeniden kavramsallaştırılması çok kolay görünmesini sağlayabilir; Zor bir işi kolaylaştıran basit numaralar gerektiren zarif çözümlerden bahsediyoruz .

Bana göre, Quicksort güzel bir örnektir: diziden rastgele bir öğe seçin ve dizideki diğer tüm öğeleri karşılaştırın; sayı ondan azsa, A kümesine koyun; sayı ondan büyükse, küme B'ye koyun. Şimdi, üçgen eşitsizliği ile, küme A'daki hiçbir öğenin küme B'deki herhangi bir öğeyle karşılaştırılması gerekmeyecek ve işiniz bitti. .


5

Bana bunu hatırlatıyor:

http://imgs.xkcd.com/comics/lisp.jpg

Kaynak: XKCD - LISP


5
Özellikle vurgulu metninin eksik olması gibi bir bağlantıya sahip olmak daha iyidir.
user151019,

1
Hovertext bu durumda şakanın yarısıdır.

4

Önemsiz olmayan hiçbir kod mükemmel olamaz, çünkü mükemmel kod aynı anda çoğu zaman birbiriyle çelişen hedefleri tatmin etmeyi gerektirir. Bu nedenle, güzel kod, eldeki görev için tüm önemli özellikleri mükemmel bir şekilde dengeler ve bunların hepsini, çoğu kişinin düşündüğünden daha aynı anda yerine getirmeye yaklaşır. Belirli bir sırada değil:

  • Okunabilirlik
  • Özlülük
  • verim
  • Esneklik
  • anlaşılırlık
  • sağlamlık
  • Emniyet / aptal-proofness
  • tamlık
  • Tutarlılık
  • Kullanım kolaylığı (API'ler için)

2

Jackson Pollock resimleri, bazıları için güzel, bazıları için saçma bir şeye örnektir.


Hmmmm ... Hissetmiyorum.
Dinamik

Programlama sanattan (veya bu konuda bilimden) daha zanaattır. Ben de vurduğumdan değil.
Erik Reppen

1

Eğer kişi matematikte ustalaşmışsa, güzel kodu bir problemin şık bir çözümü ile karşılaştırmayı seviyorum.


1

İyi kodun bazı yönleri:

  1. Hepsi aynı yöne işaret eden çok sayıda küçük detaya sahiptir.
  2. öyle yapısında tutarlı , her bölüm aynı yolu izleyerek
  3. fakat kendisini tekrar etmiyor , bunun yerine her bölüm farklı
  4. o da davranışı izin vermez edilir geçersiz kabul
  5. mümkün olan en az sayıda farklı duruma sahiptir
  6. yapabilecekleriniz bütün davranışlarını anlamak kod işlevi prototipler okuyarak
  7. sahip olduğu hiçbir yan etkisi
  8. yürütmenin durdurulması garanti edilir
  9. o herhangi gelişmiş özellikleri kullanmaz programlama dillerinde kullanılabilir
  10. öyle çok karmaşık değil çözüm getirdiği soruna karmaşıklığı ile karşılaştırıldığında
  11. orada herhangi bir hata veya içinde tanımsız davranış
  12. o derlenmiş edilebilir birkaç farklı satıcılardan derleyiciler ile
  13. sahip olduğu hiçbir bağımlılıkları kullanılmaz koduna

0

Bana göre dil (ler) benim araçlarım.

Ve her zanaatkâr gibi ben de aletlerimin nane şeklinde olmasını tercih ederim.

Kavramın netliği, bakım kolaylığı ve okunabilirlik açısından kodun durumu daha iyi. kod ne kadar iyiyse

Bu yüzden, benim için iyi yazılmış kodları okumak, iyi hazırlanmış araçlara sahip bir araç kutusunu açmak gibidir.

Bu analojiyi birkaç kez başarı ile kullandım. Özellikle daha pratik veya sanatsal bir geçmişe sahip insanlar, temiz / güzel kod kavramını bu şekilde anlamış görünüyorlar.


0

Ben ne bağlı olduğunu düşünüyorum Eğer güzel koduna göre demek.

Bana göre, okunabilir olduğunda kod çok güzel. Programlama kavramlarıyla ilgili olası sorunların yanı sıra, bir meslekten olmayan kişi okuyabilir ve en azından yüksek seviyede kodun ne yaptığını anlayabilir.

Diğer bazı cevapların tartıştığı gibi, kod birkaç basit kavramı birleştirerek karmaşık bir işlevsellik elde ettiği anlamında da güzel olabilir. Bunu programcı olmayanlara açıklamak için ne tür bir analojinin en iyisi olacağından emin değil, bu işten çıkarmaya bağlıdır. Bulmaca oyuncakları , NeoCube gibi akla geliyor .


0

Alçakgönüllü ve kişisel görüşüme göre, güzel kod güzel bir roman kitabı gibidir:

  • baştan sona okuyabilirsiniz / geçerli sayfayı anlamak için kitabın gelecekteki sayfalarına atlamanıza gerek yoktur.
  • Gereksiz tekrarları yoktur / her zaman aynı şeyleri söylüyorsa bir kitap sıkıcıdır.
  • Her bir bölümün amacı hemen hemen her zaman açıktır / bir kitabı okumak için her zaman yanınızda bir sözlüğe sahip olmanıza gerek yoktur (şiir / kod golf oynamadığı sürece).
  • uygun büyüklükte ve karmaşıklıktaki alt yapılarda (modüller, fonksiyonlar, açıklamalar vb.) düzenlenir, çok fazla 'yuvalama' / bölüm yoktur, paragraflar ve cümleler uygun şekilde dengelenir; çok fazla cümle sübvansiyonu vs. kullanmaz.
  • estetik bir şekilde (hoş bir şekilde girintili, düzgün bir şekilde ayrılmış bloklar, vb.) göze hoş gelmesi / uygun dizgi içeren bir kitap gibi.

0

Herkesin rolünü bildiği yalın, kötü bir şirket gibi, kimin neyin iyi olduğunu bulmak kolay, ve çabanın tekrarı yok

Vs.

Sıradanlığın şampiyon olduğu Ofis Alanı, üç yöneticinin TPS raporları hakkında sizi rahatsız etmekten daha iyisi yok !, # $ ing FAKS MAKİNESİ ASLA ÇALIŞIR !!! ve herhangi bir çalışan, haftada yalnızca 15 dakikalık bir fiili çalışma yapabilir. Bir çalışan orada teknik olarak çalışmayabilir bile çünkü biri onu kovmayı unuttu (gerçekten söylemek zor, çünkü kimse verimli bir şekilde çalışmıyor ve neyi başarmaya çalıştıklarını değerlendirmek zor). Ve pratik bir şeyler yapmak için, birinin okuduğu ve düşündüğü, gerçekte sahip olduğu bir sorunu çözmese de özgeçmişinde temiz görünecek, aşırı derecede karmaşık bir sistemde gezinmeyi gerektirir.


-1

"Güzel Kod" yoktur, "zarif algoritmalar" ve "zarif tasarımlar" vardır. Tasarım programlayıcı olmayanlar tarafından anlaşılabilir.

"Güzel kod" hakkında tartışan programcılardan nefret ediyorum, çünkü bir şekilde ya da bir tercümanın ya da bir derleyicinin onu nasıl sindireceğini ve makinenin ne yapacağını bilemiyorlar. onun hikayesi harika, ama gerçekten değil.


-1

İnsanlara güzel bir fotoğrafın neden güzel olduğunu açıklar mısınız? Hayır. Onlara resmi gösterirsiniz (çünkü, bir resim 1000 kelimeden fazla diyor). Bu yüzden en iyisi, onlara gerçekten zarif, güzel, mükemmel (ve belki de Joe Ortalama'nın nasıl kodlayacağı karşılaştırmasıyla) küçük bir kod parçası göstermektir.

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.