Akıllılık neden bazı insanlar tarafından programlamada zararlı olarak kabul edilir?


89

Son zamanlarda farklı soyutlama teknikleriyle ilgili birçok soru fark ettim ve temelde söz konusu tekniklerin “çok akıllı” olduğunu söyleyen cevaplar. Programcı olarak işlerimizin bir kısmının çözmemiz için verdiğimiz sorunlara en iyi çözümleri belirlemek olduğunu ve zekâlılığın bu konuda yardımcı olduğunu düşünüyorum.

Öyleyse benim sorum şu: belirli soyutlama tekniklerinin kendi başına zekalığa karşı zekice olduğunu düşünen insanlar mı, yoksa itirazın başka bir nedeni var mı?

EDIT: Bu çözümleyici birleştirici , zeki kod olarak kabul edeceğim şeylerin bir örneğidir. Bunu indirdim ve yaklaşık yarım saat boyunca araştırdım. Sonra kâğıt üzerindeki makro genişlemeden geçtim ve ışığı gördüm. Şimdi anladım ki, Haskell ayrıştırıcı birleştiriciden çok daha zarif görünüyor.


116
Belki yanlış anlıyorsun düşünüyorum - Bir de akıllılık kişinin bir erdemdir, ama bir de zeka sistemine bir mengene olduğunu. Sistemler ve kodlar akıllı olmamalı, kristal kadar net olmalıdırlar. Böyle şeyler yaratması genellikle akıllı bir kişiyi alır.
nlawalker


15
@nlawalker: Sanırım şimdi anlıyorum. İçin bir antonym olarak kod bahsederken İnsanlar "zeki" sözcüğünü kullanmak "basit" "açık" ya da gerçekten bir kelime kullanmak demek çünkü olduğunu "açık" veya "basit" bir zıt anlamlı.
Larry Coleman,

2
@Larry: Bunun ne anlama geldiğinden emin değilim. Yaratıcı, orijinal, ingenius ve şeyleri daha önce hiç görmediğiniz bir şekilde kullanarak ima etmek gibi zekice . Bazen harikadır (birçok tasarım deseni zekicedir), ancak çözümün yabancı olması da çalışmayı zorlaştırabilir.
doppelgreener

2
Hiç kimse yorum yazmıyor mu? Akıllılığı burada açıklarsınız, böylece takip edenler anlayabilir. 6 ay sonra senin gibi.
Phil Lello

Yanıtlar:


207

Basit çözümler uzun süreli bakım için daha iyidir. Ve bu her zaman sadece dil tanıma hakkında değil. Karmaşık bir çizgi (veya çizgi), verilen dilde bir uzman olsanız bile, bunu çözmek için zaman alır. Bir dosyayı açıp okumaya başlayın: "Tamam, basit, basit, anladım, evet, WTF ?!" Beyniniz ciyaklayan bir durma noktasına gelir ve şimdi durup karmaşık bir çizgiyi deşifre etmeniz gerekir. Bu uygulamanın ölçülebilir, somut bir nedeni olmadığı sürece, "çok zekice".

Neyin olup bittiğini anlamak, karmaşıklık zekice bir yöntemden zekice bir sınıfa zekice bir desene büyüdükçe giderek daha da zorlaşıyor. İyi bilinen yaklaşımların yanı sıra, oldukça zor olabilen “akıllı” bir çözüm yaratmaya giden düşünce sürecini de anlamak zorundasınız.

Bununla birlikte, birisinin onu anlayamayacağı için bir kalıptan kaçınmaktan nefret ediyorum (kullanımı haklı olduğunda). Öğrenmeye devam etmek geliştiriciler olarak bize kalmış ve eğer bir şeyi anlamıyorsak, öğrenmemiz için bir sebep değil.


7
+1 Güzel dedi. Bence bu bir denge meselesi. Kendini iyi düşünecek kadar iyi bir bilgiye sahip birisinin kodu anlamasını bekleyebilirsem, akıllıca davranabilir ve bir yorum ekleyebilirsin. Sadece birisinin kodlama becerilerini kanıtlamak istediği için kodu anlaması dört kez sürerse - nah! Birisi akıllı bir çözüm bulabilecek kadar akıllıysa, anlaşılabilir olup olmadığına karar verecek kadar akıllı olmalıdır. Aksi halde sadece gösteriş yapıyor.
Anne Schuessler,

Sevdiğim son paragraf. Gerisi doğrudur, ancak talihsizdir.
Orbling

Zend PHP'nin kaynak kodunu görmüş gibisiniz :)
Tim Post

+1 Basit bir desen akıllı bir desen kadar iyi performans göstermeyebilir ve dediğiniz gibi, geliştiricilerin "akıllı" zarfı anlamaya devam etmeye devam etmesi bize kalmıştır.
Stephen Furlani

3
Gerçekten sadece "minimal, ortogonal olarak doğru" olduğunda "zekice" bir şeyi doğrulamak zorunda olan biri olarak, tam olarak neyin zekâsı olduğu konusunda bir öznellik olduğunu eklemek isterim. Örneğin, bazı insanlar her zaman yazmak ister if FuncX() then return true, else return falseve asla sadece yazmanızı istemez return FuncX(). Şaka yapmıyorum, tam anlamıyla bu konuşmayı yaptım. Çünkü insanlar sınır değerlerini asacakları bir yer isterler. :-)
Warren P

102

ÖPÜCÜK Prensibi

Basit tutun salak. Akıllı çözümler mükemmeldir, ancak genellikle en basit yalındır çözüm en iyisidir.

“Hata ayıklama, kodu ilk etapta yazmaktan iki kat daha zor. Bu nedenle, kodu olabildiğince akıllıca yazarsanız, tanımı gereği, hata ayıklamak için yeterince akıllı değilsiniz. ”

Brian Kernighan


8
Diğer taraftan, olabildiğince zekice bir kod yazarsanız, o zaman hata ayıklamayı öğrenmelisiniz ve bunu yaparken daha zeki olursunuz. Ya da böyle bir şey.
James McNell,

11
@James: Ya da sadece başarısız. ;)
Josh K

10
@Josh K: KISS'i her zaman "Basit Tutun, Aptal!" Olarak tanıdım . - en.wikipedia.org/wiki/KISS_principle
Orbling

1
@Orbling: Ben farklı hatırladım, oh iyi, şimdi biliyorum.
Josh K

1
"Basit tutun ve aptal olmak" göre, Wikipedia ? :) Bu basit tutmanın aptalca olduğu anlamına mı geliyoryoksa basit tutmak için de aptal olmalısınız ? : P
Mateen Ulhaq

83

Aptallar karmaşıklığı görmezden gelirler; pragmatistler acı çekiyor; uzmanlar bundan kaçınır; dahiler onu kaldırır. - Alan Perlis


5
Güzel teklif için ve bir şeyin hem basit hem de akıllıca olamayacağı iddiası olmadan ilk cevap olmak için +1
Larry Coleman

15
Önemli olan kodun değil zekice olması gereken programcının olmasıdır.
Kristopher Johnson

Daha iyi bir alıntı, sonra akıllıca bir şekilde zekice kelimeyi kötüye kullanan bir aptal.
Derek Litz 30:13

30

En iyi çözüm her zaman en akıllı çözüm değildir. Bazen basit çözümler eşit derecede iyidir.

Yazılım'da her zaman bakım açısından düşünmeniz gerekir. Eğer bir kod parçası onu koruyacak biri için çok zekiyse, zekaletin buna değmeyeceğini söyleyebilirim.


3
Karmaşık bir soruna basit bir çözüm, herkesin alabileceği kadar akıllıdır.
JeffO,

Her zaman, bakımcının kodlayamadığı (veya okuyamayacağı için) fazla basitleştirmek istemediğiniz bir uyarı vardır.
Ken Henderson,

@confusedGeek - ancak bakım programcısının işleyemediğini biliyorsanız, akıllı çözüm bir saatli bomba haline gelir. Burada denge önemlidir - ve bu sadece bakım ekibini tanıyorsanız geçerlidir. Hiç bir fikriniz yoksa, zekanızda açık olmak yapabileceğiniz en iyi şeydir.
Michael Kohne

1
@Michael, performans kısıtlamaları kodunuzun akıllıca olmasını gerektirebilir. O zaman, bakıcının öğrenmesi ve eğer yapamazsa, yeni bakıcıları işe almasıdır.
Stephen Furlani

@Stephen, eğer kod zeki olması gerekiyorsa, programcı NEDEN olması gerektiğini açıklamak için büyük özen göstermelidir, bu nedenle bakıcı sıfırdan başlamak zorunda değildir.

26

Brian Kernighan'dan alıntı yapmak için:

“Hata ayıklama, kodu ilk etapta yazmaktan iki kat daha zor. Bu nedenle, kodu olabildiğince akıllıca yazarsanız, tanımı gereği, hata ayıklamak için yeterince akıllı değilsiniz. ”


“... Akıllıca doğru tanımı kullanmamışsan ve kodun anlaşılması ve hata ayıklaması çok basittir.”
Derek Litz

Sanırım baş parmak sözlüğüne bağlı. Tecrübelerime göre, "akıllı" bir kod - anlaşılması kolay veya anlamayacak kadar - hala teknik özellikte şanslı bir kombinasyondan yararlanıyor. Çok açık olsa bile, böyle bir varsayımın değişip değişemeyeceği işaretlenmeli ve kodun farklı kısımlarına sızmamalıdır.
peterchen

Haklısınız, ancak dilin ve uygulamanın okunmasının ve anlaşılmasının ne kadar kolay olduğuna bağlı olduğunu belirtmek istiyorum. Yorumlarınız yalnızca yararlı bir şey yerine kod gürültüsü olabilir. Ve bunun tersini söylemek için akıllıca kullanmak yaygın olsa da, daha net olmak için çaba sarf etmeliyiz, böylece başkaları işleri kendi avantajları için yanlış yorumlayamazlar.
Derek Litz

Buna itiraz
etmeyin

22

zekâ bir araçtır; tek başına zararlı değildir. Sadece gerekmediği durumlarda zararlıdır.


16

"Zeki", koda uygulandığında, neredeyse her zaman "gereksiz yere karmaşık" için bir örtmecedir.

İyi, açık, basit bir kod okumak yeterince zordur. "Zeki" kod okumak, tekrar tekrar latince şiir okumak gibi.

Karışıklık, bir kişinin niteliği olarak "zekice" tamamen farklı bir anlama sahip olduğu için ortaya çıkar. Bu durum, gerçek insanlar için yazılım tasarlamanın neden zor olduğunu da gösterebilir: Çünkü belirsizdirler.

Bazı programcılar çoğu insanın takip ettiği sosyal protokolleri anlamak için acı çektiler ve bu da kodları doğrudan "gereksiz yere karmaşık" olarak kınamalarını yasaklıyor, zeki kelimenin iki anlamını birbirinden ayırt etmeyi zor bulabilirler . Bazılarının düşündüğünün aksine, nihayetinde daha iyi "insanlar insanlar" (yani: empati ve iç gözlem ve sabrı olan insanlar) daha iyi geliştiriciler yaptığını düşünüyorum. Çünkü kimin için yazacağını biliyorlar.


5
Bunu, sosyal protokoller ve "insanlar" [sic]] hakkında vaaz etmediğiniz hallerde telafi edecektim.
Jason Baker

2
Sorun değil- ve hatırlattığın için teşekkürler. Ben çok vaaz etme eğilimindeyim. Fakat bazı (birçok?) Programcıların sıradan insan davranışlarıyla başa çıkmadaki yetersizlik ve / veya isteksizliği ve alanımızda gördüğüm genel empati ve içgüdü eksikliği yüzünden rahatsız oldum. Belki "insanlar" ı italik yerine alıntılara koymalıydım. İngilizce benim ilk dilim değil, daha iyi bir geliştirici olmak için sadece kodu değil, insanları da anlamalısınız; BENİM NACİZANE FİKRİME GÖRE.
fzwo

Cevabımı düzenledi. Şimdi daha açık / daha az saldırgan mı?
fzwo

İlk birkaç cevap için +1, ilk birkaç cevabı bulduktan sonra tamamlamıştım.
Larry Coleman,

Evet, bu bağlamda aptal insanlar tarafından ne kadar akıllı kullanıldığını açıkladığınız için teşekkür ederiz!
Derek Litz

9

Çoğu insan “Kodun ne yaptığını anlamak için çok fazla şifre çözme gerektiriyor” ve “bununla birlikte devam eden tüm kötü şeyleri” yönünden zekiliğe odaklanıyor

  1. Başka kimse çözemez, yalnız bıraksın / hata ayıklayın.
  2. Yazan kişi ne yaptığını bile bilmiyor.
  3. Başlangıçta o kadar da mükemmel olmayabilir.
  4. vb....

Tüm iyi noktalar, ancak zekâ başka bir olumsuz yönü var ve bu eski ego sorunu. Bu, çizgiler boyunca sorunlara neden olur.

  1. Başkalarının çözümlerini kullanamayacak kadar "Akıllı" olan biri. Aynı kediyi kendi cilt tipinizi icat ederken neden başkalarının yaptıklarını araştırıyorsunuz?
  2. Bir soruna en havalı çözümü bulduklarını düşünen birileri çoğu zaman herhangi bir girdi almayı reddeder.
  3. Açık bir sorun olduğunda veya önemsiz bir değişiklik gerektiğinde bile kimsenin "kodunu" değiştirmesine izin vermeyin.
  4. Biraz tersine, akıllı olduklarını ve ne kadar akıllı olduklarını kanıtlamak için "en yeni" tekniği kullanmaları gerektiğini, ancak kişisel projelerde veya üretim dışı kodlarda kritik parçalara girmeden önce iyi bir şekilde ele almayı başaramadıklarını düşünüyorlar. sistem.

Bazen hepimiz çok fazla egodan suçluyuz, ancak takımın önüne geçtiğinde bu bir sorun.


8

İyi Zekice - zeki kod satırları arasında zekice olmayan bir alternatifin satırları arasındaki yüksek oran. Sizi 20000'den kurtarabilmenizi sağlayan 20 kod satırı, Son derece İyidir. İyi Zeki, kendini işe almakla ilgili.

Zayıf Zeki - yazılı kod satırları arasında kaydedilen düşük kod oranları arasındaki oran. Beş satırlık kod yazmanızı engelleyen akıllı kod satırı Bad Clever'dir. Kötü zeki "sözdizimsel mastürbasyon" hakkında.

Sadece not etmek gerekirse: Kötü Zeki neredeyse hiç "Kötü Zeki" olarak adlandırılmaz; sık sık "güzel", "zarif", "özlü" veya "özlü" takma adları altında seyahat eder.


İlginç bir cevap, ancak "Kötü Zekice" olarak adlandırdığınız kod, söz konusu kodu yazan kişi dışındaki kişiler tarafından "güzel", vb. Olarak adlandırılan kod mu?
Larry Coleman,

2
Bağlı olmak. Amaç-C / C ++ / C 'de, fenomen genellikle bir kişiyle sınırlıdır. Perl ve Ruby'de genellikle tüm topluluk, "Zeki", "şık" vb. Kötü Zeki olmakla ilgili ortak bir değere sahip olacaktır.
user8865

1
@ user8865: ayrıca, "İyi Zekice" kodu, tanımınız gereğince 3 dereceden daha az olduğu için orijinalden daha fazla hata ayıklamaktan daha kolaydır.
Larry Coleman,

2
Ah, bu yüzden Perl programları - şimdi neredeyse tanımı gereği - Son derece iyi akıllı :) bilmek güzel!

7

Herkesin akıllıca tanımını merak etmeliyim.

Şahsen, zor, karmaşık bir sorunla karşılaştığımda zekice davrandığımı ve kabul edilebilir bir verimlilik seviyesini korurken çok basit ve anlaşılır bir şekilde uyguladığımı hissediyorum.

tl; dr, kod incelemesi sırasında, eleştirmenimin "vay, bunun olacağını düşündüğümden daha kolay" olduğunu söylediğinde zekice hissediyorum.


1
Program hakkında LOL, dr, programcıların ne kadar yavaş okuduğunu düşünüyorsun? Evet, zekâdaki kötüye kullanımın, gerçekte ne olduğunun tam tersini kastettiğini kesinlikle umursuyorum. Dumb / Ignorant / Evil geliştiricileri ve yöneticileri bunu “çok akıllı” olduğunu düşündüklerini işe almamak için kullanıyorlar.
Derek Litz

6

Listelenen teori cevaplarının yanı sıra, bu genellikle herkes için çok akıllıca bağlamda kullanılır.

"Çok zekice" olan gerçek yaşam farklılıklarını görmek için bazen üst düzey performans yoğun bir ekip ile orta seviye bir bakım ekibi arasında hareket edin.

Teori argümanlarını dışarıda bırakmak, çok zekice, genellikle en az yetenekli ekip üyelerinin makul olarak ne ile çalışabileceğine dayanır, bu yüzden çevreye çok bağlıdır.


Mükemmel: "Çok zeki genellikle en az yetenekli ekip üyelerinin makul bir şekilde ne ile çalışabileceğine
dayanır

Bulunduğunuz yere bağlı olarak bu, bazen "mükemmel" den biraz daha azdır :-)
Bill

Takımın en az yetenekli üyesini kim umursar ki? Hemen hemen her takımda (birkaç istisna olduğundan emin olduğum halde) kendisini programcı olarak adlandıran hiçbir işi olmayan en az bir üyesi var.
dsimcha

1
İnşallah onları daha iyi olmalarına ikna edersiniz, ancak bu başarılı olmasa bile, yine de onlarla bir ekip üyesi olarak ilgilenmeniz gerekir ve bazı çalışmalara katılabilmeleri gerekir. Şu anda bunu lambda ifadelerinde görüyorum. Çalıştığım birçok insan onları henüz anlamadı, bu yüzden onları çok zeki görüyorlar. Sorunlarımızı oldukça verimli ve zarif bir şekilde çözdükleri için bu talihsiz bir durumdur, ancak orta kademe çalışanlardan hiçbiri bu sorunu çözmezse, yazılımın desteksiz olması için yönetime gideceklerdir.
Bill

@Bill: Lambda fonksiyonları ??? O kadar basit bir şeyi anlamayan kimseden, açıkça onlardan öğrenilmesi istendikten sonra bile, profesyonel bir programcı olma işi yoktur.
dsimcha

6

Bazen çok zekiydim, yanıldım.


1
Bu olabilir. Bazen bir şeyler çok yanlış olur, doğru.
bobobobo

Bu teorilere John diyorlar. Teoriler bir süre ve bir süre yanlış olabilir ve olmalı :), zeki olmayı ve mümkün olduğunca zeki olmaya çabalamayı bırakmamız gerektiği anlamına gelmez. Bu dünyada başka nasıl lider olacağız! “Ah, ama bir adamın ulaşabileceği yer kavramasını geçmeli - yoksa cennet ne olabilir?”
Derek Litz

4

Performanslı, bakımı kolay, zamanında ve ucuz bir çözümü ölçmemdir. Zekice, bu nitelikleri olumsuz etkilemediği sürece bir çözümün parçası da olabilir.


Açısından "ucuz" u pozitif olarak kullanmak için +1
Gary Rowe

Performansı çok fazla olan 'zeki' bir kod gördüm!
HLGEM

Daha değerli ölçütler var, ancak bunlar projeye bağlı olarak iyi olabilirler ve çoğu zaman birbirleriyle çelişir, bu yüzden başarılı olmak için diğerini vurgulamanız gerekir.
Derek Litz

3

Eğer akıllı kod + anlaşılır kod yapmak için gereken yorum miktarı <= basit kodsa, o zaman zeki kod için gidin derim. Her zaman.

Sanırım, "akıllı kod" yazan insanlar kasıtlı olarak doğru bir şekilde yorum yapamadıklarında ortaya çıkıyor, çünkü yalnızca başlangıçta anlaşılamayacak şekilde gelecek olan nesiller, ne kadar akıllı olduklarını takdir etmek için zaman harcamak zorunda kalacaklar.


Ya da bir sonraki adam hakkında ya da her neyse düşünmezler. Düşünülemeyen bir tembellik ve kötü alışkanlıkla yeterince açıklanabilecek olan, entelektüel benciliğe atfedileceğime emin değilim. Ancak gerçek şu ki, kodunuz ilk bakışta anlaşılamıyorsa, yorumlara ihtiyacı vardır ve kod + yorumlar başka bir yoldan daha uzun (LOC veya zaman içinde) ise, gerekenden daha çok çalışıyorsunuz demektir.
Dan Ray

İyi cevap, (+ 1 olamaz, hiç kimse kalmaz, sonra gelir). İnsanlar akıllı kod yazmak için zaman harcamazsa ve diğerleri bunu anlamak için zaman harcamazsa, daha az verimli olsalar bile, daha az karmaşık basit kodları tercih edin. O zaman beceride ilerleme olmaz.
Orbling,

En iyi cevap. Mantra: basit bir başlangıç, başlangıçta yavaş ve zekice başlayan bir başlangıç ​​kodu yaz ... ve okunamayan bir astarın üzerine indirirken onu yorum yap. Dilindeki bütün kirli numaralarını böyle öğreniyorsun!
Droogans,

Eğer zekice kullanıp kullanmadığınızı söylemek için akıllıca kullanırsam, şahsen kayıt yoluyla anlaşılabilir hale getirilmiş bazı açık kodları yazdım. Yoğun kod yazmayı planlamıyorken, o zamanlar bana biraz zaman kazandırdı, fakat # TODO'yu ekledim, eğer büyük ölçüde değiştirmemiz gerekirse basit olması için muhtemelen yeniden yazılmalıydı.
Derek Litz

3

İyi alıntıların çoğu kez olduğu gibi, birçok farklı insana atfedilen bir alıntıyı hatırlatıyorum.

Kelimeleri ifade etmek:

Herhangi bir zeki insan basit kompleksi yapabilir, kompleksi basitleştirmek için bir dahi alır.

Karmaşık bir fikir almak ve basitleştirmek için anlaşılır hale getirme, yapıcının zekasını gösterir, ancak basit bir fikir edinmek ve karmaşık hale getirmek yapıcının zekice görünmesini istediğini gösterir.


Evet, kod üssünüzü kıvrımlı kılan akıllı olmak istemek çok merkezli bir fikir. Ya öyle ya da zekisin. Ne yazık ki, ilk öğrenme aşamalarında insanlar, olduklarından daha akıllı olduklarını düşünüyorlar. Daha sonra ne kadar akıllı olmadıklarının farkına varırlar ve aslında bilgideki boşlukları doldurduklarında akıllı kodlar yazarlar.
Derek Litz

2

Eğer akıllıca bir çözüm bulmak zorsa, kullanılmamalı. Örneğin, yan etkiler sayesinde tek bir satıra karmaşık bir hesaplama yapabilirseniz, bu akıllıca olur. Ama başkalarının dünyada ne yaptığını öğrenmesi bir saat sürerse, bu çok zekice.


2
Yeterince adil, ancak cevabı bulamayan kişi dilin tüm özelliklerini bilmese de cevabınız değişiyor mu?
Larry Coleman,

2
Bu farklı, en azından IMO. Bir insan bir dilin özelliklerini bilmediğinde, neyin zeki olup olmadığına karar verecek durumda değildir.
Joe D

@Larry: Zorunlu değil. Bunu okuyan kişinin temel / düşük ileri düzeyde bir yeterlilik düzeyinde olduğunu varsayardım. Ve onarılamaz bir karmaşıklık kazanmaya başlarsa, o zaman kodun ne yapması gerektiğini açıklayan bir blok yorum yapma zamanı geldi; bu, aslında ne yaptığını anlamak için bir referans çerçevesi oluşturmaya yardımcı olacak. Yorumun üst düzeyde olması gerekir, ancak - hesaplamayı yazın, işlemi açıklayın; Kodu tekrarlama. İhtiyacı olan bir kişi (ideal olarak) kodu okurken anlayabilmelidir. Zaten amaç bu.
Michael K,

2

Benim düşünceme göre, zekice bir sorun değil. Genellikle "zekice" (alaysız) ve "içgörülü" kod hakkında kafa karışıklıkları yapabiliriz. Bir sorun olarak gördüğüm şey, genellikle "zeki" (alaycı) kodunun, görünmez gereklilikleri içermesi, zaman içinde hata ayıklamayı ve sürdürmeyi zorlaştırması.

Zeki olan bilinen birkaç algoritma vardır. Hızlı bağlantı bir, IMO.

"Zeki" (alaylı) kodu genellikle ayarlanan değişkenler ve sistemin "zeki" kodla tamamen bağlantısı olan durumları (önceden açılmış dosyalar, ağ bağlantıları, veritabanları, vb.) Hakkında varsayımlarda bulunur.

"Akıllı" bir kodu doğru şekilde korumak için beyninize yüklemeniz gereken veri miktarı genellikle iyi bir maliyet-fayda oranına sahip olmak için büyüktür.


1

"Zeki kod", programcının gerçekten zor düşünmesi veya yazmak için bazı ileri beceriler kullanması gereken herhangi bir koddur. Bununla ilgili sorun, Brian W. Kernighan tarafından en iyi ifade edilen, belirli bir "zekâ marjı" ihtiyacını göz ardı ediyor:

"Hata ayıklama, kodu ilk etapta yazmaktan iki kat daha zor. Bu nedenle, kodu olabildiğince akıllıca yazarsanız, tanımı gereği, hata ayıklamak için yeterince akıllı değilsiniz."


1

Çünkü bir yaratıcılık patlamasındaki bir geliştiriciye zekâ gibi görünen şey , basit bir şekilde karışıklık olarak geçebilir ve diğerleri için okunamayan , sürdürülemez bir bilmeceler bloğu olabilir.

Yine de, hoş, zeki, iyi performans gösteren bir bilmeceler bloğu, ancak deneyiminiz varsa, bu şeyi ortada tutmak için işinize (geliştiriciye değil) çok daha fazla mal olacağını biliyorsunuzdur. veya uzun vadeli. Bu nedenle, geliştiricilerinizin taşındıkları zamanki alanını sakinleştirmeyi tercih edersiniz.

Tabii ki, zekâ için bir gerekçe varsa, tabii ki. Ve az önce yazmış olduğunuz şaşkınlıkla birlikte gelen iyi bir dokümantasyon varsa. Bu akıllı kod parçasını yorum yaptın, değil mi? Niyetini, neden böyle olması gerektiğini ve nasıl davrandığını açıkla.

Gerekçe yoksa, o zaman muhtemelen sadece erken optimizasyon, fazla mühendislik veya YAGNI tür bir problemdir. Basit bir şeyi yapmak 15 seviyeye indirilme gerektiriyorsa, o zaman önceki kategorilere girme şansın da yüksek. Ve belgelenmemişse, o zaman sadece sorun.

Büyük kod, bakıcının anlaması için sürekli olarak% 100 olmasını gerektirmemelidir. İyi kod zekice. Büyük kod, neredeyse kadar verimli olabilir, ancak birçok açıdan daha iyi olabilir. Harika kod, uygulamanızın tasarımını takip etmek için 15 manzaralı bir IDE gerektirmemelidir.

Not: hey, zekice olduğumu düşündüğüm birkaç şey yazdım ama bu WTF'i çekti? dışında - ortak geliştiricilerim değilse - yöneticimin ağzı. Bakış açılarına bakmak zorunda.


Cevap için teşekkürler. "Zeki" nin, düşündüğüm şey anlamına gelmediğini söyleyen diğerleriyle aynı fikirde gibi görünüyorsun.
Larry Coleman,

1

Zeki olmaya meyilliyim ama zarif olmaya gayret ediyorum .

Kod geliştirin şimdi diğerleri denemek ve önlemek olmayacağını sonra .


1
Hadi ... zekice şıklığın eş anlamlısı, beyniniz işaretlendi. Evet, ben bu kelimeyi uydurdum, yani beyniniz gerçek değil pazarlamadan etkilenir.
Derek Litz 30:13

Zarif: basit ve akıllı. Cromulent herhangi bir şey için @DerekLitz +1.
kevpie

1

Bu benim tecrübelerime ve diğer cevaplara dayanarak konuyu anlıyorum:

  1. Yazmak zekice geçen, ancak okunabilir ve sürdürülebilen kod zararlı olarak kabul edilmez. Bununla birlikte, çoğu geliştirici bu tür bir kodu "akıllı" olarak adlandırmaz; "zarif" gibi farklı bir terim kullanabilirler. Bu kodun var olup olmadığı hakkında bazı tartışmalar olabilir veya olmayabilir.
  2. Dili tanıyan tecrübeli bir geliştirici tarafından bile anlaşılması gereken önemli bir zaman ve çaba gerektiren üretim kodu "akıllıdır" ve herkes tarafından zararlı olarak kabul edilir.
  3. Deneyimsiz geliştiriciler tarafından önemli bir zaman ve çaba gerektiren üretim kodu, bazıları tarafından zararlı olarak kabul edilir. Her iki şekilde de cevaplar gördüm ve her şeyi "en düşük ortak payda" tutmayı tercih ettiklerini açıkça söyleyen geliştiricilerle çalıştım.

Modern batı kültürünün tamamı LCD'dir, sanırım programlama da olmalı; iyi değil.
Ocak'taki

@Orbling: Evet, ama anında tatmini unutma.
Larry Coleman,

Tecrübe puanlarını beğendim. İnsanların, bilgiyi ve anlayışı paylaşarak yinelemeli gelişim için çaba harcamamaları ve birbirlerine yatırım yapmaları üzücü. Bunun yerine, bir çarkta çark dişi olmayı tercih ederler, böylece zaman geldiğinde kolayca değiştirebiliriz. Bunu yaparak ilerlemeyi engelliyoruz. Kendimizi de kısa satıyoruz ...
Derek Litz

1

Bir erkek tanırım; Muhtemelen tanıştığım en zeki insan. Kesinlikle inanılmaz bir kodlayıcı, muhtemelen tüm programlama programlarında hayatım boyunca yaşayacağımdan daha iyi. Bir sözcük belgesi yazdığı gibi kod yazıyor ve inanmayacağınız gibi bağlantılı bir listeyi tersine çevirebiliyor. Eğer ciddi bir şekilde karmaşık bir kod yazmak hakkında konuşmak istiyorsanız, o sizin adamınız ve inanılmaz derecede zor bir sorunla karşılaşırsam, her zaman ona dönerim. Ancak onunla bir ekip ortamında bir proje üzerinde çalışmak çok acı verici. Doğrudan iş sorununu hedefleyemiyor ve bu konuda mantıklı, verimli ve özlü bir çözüm sunamıyor. Onun için 1000 satırlık bir kod listesi 100'den daha iyi olurdu. Kendisine IDE veya çerçeve yoluyla sağlanan araçları kullanmak yerine, kendi süper-optimize edilmiş aracını kullanacak.

Bu karmaşık şeyleri yapma yeteneğine hayran kalırken, ihtiyacım olan şey sorunu çözebilecek ve devam edebilecek biri. Söylemesi ya da itiraf etmesi harika değil, ama bazen bir iş ortamında zaman her şeydir ve sadece sorunu çözmek ve hayatınıza devam etmek zorunda kalırsınız, daha sonra her zaman geri dönebilir ve iyileştirmek için cehennemi yeniden şekillendirebilirsiniz senin kodun. Zeki olmakla popo arasında bir acı olmak arasında ince bir çizgi var. Takımım için sloganım her zaman, bu durumda çalışacak ve oradan gidecek en basit şey nedir. Bazen basit her zaman cevap değildir, ancak başlamak için çok iyi bir yer.


Üzgünüz, tanıştığınız bu kişinin kalitesine rağmen karmaşık şeyleri kodlayabilmeniz aptalca. İnsanlar, diğer özelliklerinden bağımsız olarak olabilir ve aptaldırlar. Gelişimden gerçekten istediğin şeylerin ifadeleri yetenekli bir kişi için açıktır. Eğer gerçekten zeki ise, ona bir iyilik yapmalı ve onun yeteneği ile aptalca şeyler yapmasına izin vermek yerine onunla yüzleşmelisin. Boşta ve arkasından şikayet ederek ona ve çevresindeki herkese bir kötülük yapıyorsun. Eğer zeki değilse, onu kovmalısınız, o zaman belki de alır.
Derek Litz 30:13

On yıllardır her gün akıllı insanlarla uğraşan birincil bir kaynakla ilişkim var ve bazıları takım ortamında üretken olmak için birkaç bilgiyi kaçırıyor. En azından sorunu bilmelerine izin verirseniz, kendi başlarına çözebilirler.
Derek Litz

1

Bu bağlamda "zeki", "kendi iyiliği için çok zekice" anlamına gelir, yani şimdi çalışan ancak daha sonra anlamak ve değiştirmek için bir kabus olacaktır.

Özellikle, programlama dilinin belirsiz bir özelliğini kullanan veya tuhaf yan etkilerden yararlanan bir numaraysa veya sorunu hedef dilde çözmenin gerçekten tuhaf bir yoluysa.


0

Basit çözümleri tercih ederim, yakut tarzını gerçekten seviyorum. Örneğin istediğiniz zaman listedeki ilk 2 öğeyi toplayın. önce size = 2 yapmak için listeyi kestiniz ve sonra toplamı yaptınız.

Bir zamanlar 3 yerine 1 liste kullandığımı ve bakımı / değiştirmesi çok zor olan büyük bir işlev yarattığımı hatırlıyorum.

günümüz dünyasında performans için kod açıklığından ödün vermemiz gerekmiyor (c ++ hariç, mecbur değiller ama yapacaklar).


0

Genellikle 'zeki' olmanız gerektiğinde, koddaki bir sorunu gidermek için kullanılır. Bir geçici çözüm varsa ve çok basit değilse, o zaman (bazı kodları yazarken% 100 doğru olabilir), belirli koşulları varsayarken çok sayıda karışık yüz veya diğer zamanların garip yan etkileri olur.

Bu yüzden zekice == kafa karıştırıcı == kötü :( Ama sınırlı problemlere pratik çözümler için onları kullandığım kadar da harika.


0

Bağlam için tekrar alıntı yapmak ve kolay anlaşılması:

"Hata ayıklama, kodu ilk etapta yazmaktan iki kat daha zor. Bu nedenle, kodu olabildiğince akıllıca yazarsanız, tanımı gereği, hata ayıklamak için yeterince akıllı değilsiniz."

Brian Kernighan'ın burada yazdıkları açıkça açıkça bir evrimleşme anlamına geliyor ve yanlışlıkla akıllıca kelimesini kullandı.

"Hata ayıklama, kodu ilk etapta yazmaktan iki kat daha zor. Bu nedenle, kodu olabildiğince [kıvrımlı] yazarsanız, tanımı gereği, hata ayıklamak için yeterince akıllı değilsiniz."

Evrişim:

A thing that is complex and difficult to follow.

Zeki:

Showing intelligence or skill; ingenious

Eğitimli programcılar basit kodun zekice olduğunu bilirler. Mümkün olduğunca zeki kod, tanım gereği basit olmalıdır. Eğitimli programcılar ayrıca veba gibi kıvrımlı kodlarla çalışmaktan ve yazmaktan kaçınacaktır. Ayrıca, çağrıştırılmış kodu, şansları ne zaman olursa olsun akıllı bir koda dönüştürürler. Kod genellikle sarsılmaya başlar ve programlamada insan bilişsel kabiliyetinin alanı ve alanı hakkında bilgi sahibi olduğu bilgiliğe yaklaşır, tecrübe ve paylaşılan bilgi ile daha iyi anlaşılır.

Bu alıntıların popülerliği ve Brian Kernighan'ın sektörde oldukça popüler olmasından dolayı bu kelimenin kötüye kullanımı olumsuz bir sosyal etkiye sahiptir ve dürüst bir şekilde insan tarafından ele alındığını görmek isterim. Bu makaleyi yazmadan önce ona basit bir şekilde e-posta gönderebilip gönderemediğimi görmeye çalıştım, ancak anladığım herhangi bir e-posta iletişim bilgisini bulamadım :(.

Gördüğüm olumsuz sosyal etki, diğer programcıların daha akıllı akranlarını dışladıkları, çünkü şimdi zekayı bir problem olarak görüyorlar. Asıl sorun, şeyleri yeni ve sıradışı bir şekilde yaparak zeki olduklarını düşünen ve daha büyük bir toplumu kazanmak ve anlamak ve zekice fikirleri mümkün olduğunca tekrar kullanmak yerine bir avantaj olmadığında sürekli olarak yeni şeyler icat eden aptal akranlardır.

Anlaşılmaya ihtiyacım var ki, genellikle bir anlayış kazanmanın kendinize ait bir şeyi icat etmekten daha zor olduğu anlaşılıyor. Sanayideki yaygın sorunlardan dolayı gerçekçi olmayan son tarihler için kendinize ait olan küçük niş probleminiz için zaman kazandıracaktır. Bu, faydalı, yeniden kullanılabilir şeylerin genellikle daha büyük bir niş hedeflediğini veya buluş için faydalı bir soyutlama sağladığını gözlemlemeye dayanır. Aynı zamanda , insanların daha fazla para kazanmak için büyük nişleri hedef almaları gerçeğine dayanmaktadır, bu durum genellikle bu aracı geniş bir uygulama alanı için kullanılabilir hale getirme konusundaki karmaşıklığı nedeniyle kullanımı oldukça zorlaştırmaktadır.

Diğer olumsuz sosyal etki, ilerlemeyi ve anlama arzusunu önler. Çünkü bence dünyamızda, kendi anlayış eksikliğimizi hemen inkar edeceğiz ve bir zamanlar anlaşılsa bile, aslında fikir birliği olsa bile toplanılan kodunu yazacağız. oldukça zeki.

TODO Referanslardan bazılarını alıntılamak istiyorum, ancak aynı zamanda, bilgi paylaşma yeteneğimi engellemeyen referansların bulunmamasını istiyorum, böylece bilgilerimin kaynağı olarak hatırladığım şeyleri hızlı bir şekilde alıntılayacağım ve belki de gerçek bilgileri bazılarını bulacağım. gün (ya da benim için bulabilirsiniz! :)

  • Guido Van Rossum'un olay döngülerinden bahsettiği ve onları anlamaya nasıl geldiği
  • Y-Combinator'de akıllı insanları işe almaktan kaçındıklarını belirten bir GitHub çalışanı
  • Python topluluğunda devam eden tartışma ve öğrenmenin çoğu. Python topluluğu özellikle yeni fikirler için kritik öneme sahiptir, ancak elden anlamadıkları yeni fikirleri reddetmez ve tipik olarak ilk başta günün ışığını bir ana dil özelliği / paketi olarak görürsünüz.
  • 10000 ayak gözlemime dayanan kendi tecrübem ve profesyonel görüşüm. Gerçi orada en baştan aydınlatmak için gereken özellikleri gerçekten göremiyorum :( Umarım deneyiminiz ve gözleminiz size aynı şeyi söyler ve bu cevabı biraz değer vermek için başkası yorum yapabilir.

Kendi alıntılarını eklemek için çekinmeyin! Ayrıca, benim metin virgül eklemek için çekinmeyin. Bir süredir İngilizce’de virgül kullanma bilgimi yenileyemedim ...


-1

Çünkü çoğu zaman insanlar bir dil, deyimler ve kalıplar bilmiyor. Bir kitap alıp öğrendiler, ama bilmiyorlar. Ve bu insanlar yüzünden basit bir kod yazmalısınız.

Bu bir zekâ değil. Bu bir bilgi.


2
Buna kesinlikle katılmıyorum (-1 değerinde olmasa da). Bu argümanla, Undo / Redo işlem yığınını ele almak için Komut modelini uygulayamayacağınızı söyleyebilirsiniz, çünkü bakımcılar okuldan yeni çıktılar ve neler olduğunu anlamadılar. Bir noktada şunu söylemelisin ki eğer bilmiyorlarsa öğrenmeleri gerekir.
Ken Henderson,

@confusedGeek Oldukça doğru, cehalet hattını nerede çiziyorsun?
Orbling

@Orbling, dürüst olmak gerekirse bu zor kısmı ve bir dereceye kadar duruma bağlıdır. Kullanmaya meyilli olduğum genel rehber, eğer makul bir tecrübeye sahip bir geliştiricinin (kullanılan teknolojilerde bilgili) geliştirici kullanabiliyorsa, muhtemelen sorun değil. Eğer yapamıyorlarsa, yeniden yapılandırılması gerekir (veya işe alım uygulamalarını gözden geçirin).
Ken Henderson,

@confusedGeek Aye, mantıklı geliyor. Litmus testi muhtemelen, aynı kalibre geliştiricisini, yeterince hızlı bir şekilde ne yaptığınızı kolayca anlayabiliyor olabilir. Olmazsa ve daha kolay bir yol varsa, o zaman değişmesi gerekir. Bazen daha kolay bir yol yoktur.
Orbling

-1. En düşük ortak payda kodlama yapmayın. Gereksiz karmaşıklık kötüdür, ancak bazı zekâlar kodu büyük ölçüde KURU, vb. Yaparsa buna değer olabilir.
dsimcha

-1

Buralarda her yerde bahsedilen kelime disiplinini bulamadık, bu yüzden ben göndermek istemiyorum. Çip olacak cevabı, ama belki, konuyla ilgili özgün soru akılda yoktu Şunu farklı bilgiler paylaşmaya .

Akıllı bir geliştirici iyi bir şeydir.

Ancak akıllılıktan önce başka özellikler gelir. Sizin de fark etmiş olabileceğiniz gibi, disiplin hakkında konuşacağım . Akıllı ve disiplinsiz bir geliştirici, sistemin uzun vadede sürdürülebilirliği için çok kötü olabilir.

Bir hatanın ortaya çıktığını veya yeni bir gereksinimin ortaya çıktığını varsayalım. Akıllı bir geliştirici yakında birkaç yerel düzeltmenin işi 2 dakikada halledeceğini fark edebilir. Eğer geliştirici disiplinli ise, bu düzeltmeleri kaynak koduna uygulamaktan çekinir ve bunun yerine, istenen davranışı sisteme oluşturmak için anlamlı bir yol bulur. Bu şekilde, bir dahaki sefere belirli kod parçalarını değiştirme ihtiyacı ortaya çıkacaksa, bakımcının kodu anlamak ve yeni değişiklikleri hiçbir şey kırmadan uygulamak için kolay bir zamanı olacaktır. Değilse, resmi alırsınız.


"Moral İyileşinceye Kadar Dayaklar Devam Ediyor"
gnat

@gnat Anlamı? İşleri biraz temizlemek; Geliştiricilere zorlanan bir şey olarak disiplini almıyorum. Bu iyi bir kişilik özelliğidir. Genellikle akıllı insanlar tarafından yazılımın bakımı bir süre sonra geliştirilen bir tanesi. Sorun, bakıcı konumunda yeterince bulunmayan ve başkalarının bulması için her yerde akıllı bombalar bırakan zeki insanlar ile birlikte geliyor.
dkateros
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.