it-swarm.dev

Akıllılık bazı insanlar tarafından programlanırken neden zararlı kabul edilir?

Son zamanlarda farklı soyutlama teknikleri ile ilgili birçok soru fark ettim ve temel olarak söz konusu tekniklerin "çok zeki" olduğunu söyleyen cevaplar. Programcı olarak yaptığımız işlerin bir kısmının, çözmemiz için verdiğimiz sorunlara en iyi çözümleri belirlemek olduğunu düşünüyorum ve akıllılık bunu yaparken yardımcı olur.

Yani sorum şu: Bazı soyutlama tekniklerinin zekice kendi başına karşı çok zeki olduğunu düşünen insanlar mı yoksa itirazın başka bir nedeni var mı?

EDIT: Bu ayrıştırıcı birleştirici akıllı kod olarak kabul ediyorum ne bir örnektir. Bunu indirdim ve yaklaşık yarım saat boyunca baktım. Sonra kağıttaki makro genişlemesine adım attım ve ışığı gördüm. Şimdi anladığım kadarıyla, Haskell ayrıştırıcı birleştiricisinden çok daha zarif görünüyor.

89
Larry Coleman

Basit çözümler uzun süreli bakım için daha iyidir. Ve her zaman sadece dil aşinalığı ile ilgili değildir. Belirli bir dilde uzman olsanız bile karmaşık bir satırın (veya satırların) anlaşılması zaman alır. Bir dosyayı açıp okumaya başlıyorsunuz: "tamam, basit, basit, anladım, evet, WTF ?!" Beyniniz çığlık atan bir durma noktasına gelir ve şimdi karmaşık bir çizgiyi durdurup deşifre etmeniz gerekir. Bu uygulamanın ölçülebilir, somut bir nedeni olmadığı sürece, bu "çok zekidir".

Karmaşıklık akıllı bir yöntemden akıllı bir sınıfa ve akıllı bir desene dönüştükçe neler olduğunu anlamak gittikçe zorlaşır. İyi bilinen yaklaşımların yanı sıra, oldukça zor olabilen "zekice" bir çözüm yaratmaya giden düşünce sürecini anlamanız gerekir.

Bununla birlikte, birisinin anlayamayabileceği için bir kalıptan kaçınmaktan nefret ediyorum. Öğrenmeye devam etmek geliştiriciler olarak bize kalmış ve bir şey anlamıyorsak, öğrenmemek için bir sebep, bundan kaçınmak değil.

207
Adam Lear

KISS Prensibi

Basit, aptalca ol. Akıllı çözümler harika, ancak çoğu zaman en basit düz çö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

102
Josh K

Aptallar karmaşıklığı görmezden gelir; pragmatistler buna katılıyor; uzmanlar bundan kaçınır; dehalar onu kaldırır. - Alan Perlis

83
Martijn Verburg

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 sürdürülebilirlik açısından düşünmeniz gerekir. Eğer bir kod parçası onu koruyacak biri için çok zekiyse, zekiğin buna değmeyeceğini söyleyebilirim.

30
Geek

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

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

26
peterchen

akıllılık bir araçtır; kendi başına zararlı değildir. Sadece gerekli olmadığı durumlarda zararlı olur.

22
Steven A. Lowe

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

İyi, net, basit kod okumak yeterince zor. "Zeki" kodunu okumak, tekrardan Latin şiiri incelemek gibidir.

Karışıklık, bir kişinin niteliği olarak "zeki" nin tamamen farklı bir anlamı olduğu için ortaya çıkar. Bu durum, gerçek insanlar için yazılım tasarlamanın neden zor olduğunun bir örneği olarak da görülebilir: Çünkü belirsizdirler.

Ve bazı programcılar çoğu insanın izlediği sosyal protokolleri anlamakta zorlandıkları için, kodu doğrudan "gereksiz yere karmaşık" olarak kınamalarını yasaklarlar, Sözün iki anlamı arasında ayrım yapmayı zor bulabilirler zeki. Bazılarının düşünebileceğinin aksine, sonuçta daha iyi "insanlar" (yani: empati ve içgörü ve sabır olan insanlar) daha iyi geliştiriciler olduğunu düşünüyorum. Çünkü kimin için yazacağını biliyorlar.

16
fzwo

Çoğu kişi akıllıca "Kod ne yaptığını anlamak için çok fazla deşifre gerektirir" ve bununla birlikte gelen tüm kötü şeylere odaklanıyor.

  1. Başka hiç kimse anlayamaz, bırakmaz/ayıklar.
  2. Yazan kişi ne yaptığını bile bilmiyor.
  3. Aslında başlamak o kadar parlak olmayabilir
  4. vb....

Tüm iyi noktalar, ama akıllılığın başka bir olumsuz yönü var ve bu eski ego sorunu. Bu durum,

  1. Başkalarının çözümlerini kullanamayacak kadar "Akıllı" birisi. Aynı kediyi kendi teninizi yaratma yolunuzu icat edebildiğinizde neden başkalarının yaptıklarına bakalım
  2. Bir soruna en havalı çözümü icat ettiklerini düşünen biri genellikle herhangi bir girdi almayı reddeder.
  3. Belli sorunlar olsa veya önemsiz bir değişiklik gerekli olsa bile kimsenin "kodunu" değiştirmesine izin vermeyecektir.
  4. Tersine, akıllı olduklarını ve ne kadar akıllı olduklarını kanıtlamak için "en yeni" tekniği kullanmaları gerektiğini düşünüyorlar, ancak kişisel projelerde veya üretim dışı kodlarda sistemi.

Hepimiz bazen çok fazla egodan suçluyuz, ancak takımın önüne geçtiğinde bu bir problem.

9
MIA

İyi Zeki - zekice olmayan bir alternatifte zeki kod satırları ile zıt satırlar arasındaki yüksek oran. Sizi 20000 yazmaktan kurtaracak 20 kod satırı, Son Derece İyi Zekidir. İyi Zeki, işinizi kurtarmakla ilgilidir.

Kötü Zeki - Yazılan kod satırları ile kaydedilen kod satırları arasındaki düşük oran. Sizi beş satırlık kod yazmaktan kurtaran akıllı kodlardan biri Bad Clever. Kötü zeki "sözdizimsel mastürbasyon" hakkında.

Sadece not etmek gerekirse: Bad Clever neredeyse hiç "Bad Clever" olarak adlandırılmaz; genellikle "güzel", "zarif", "özlü" veya "özlü" takma adların altında seyahat eder.

8
user8865

Herkesin zeki tanımını merak etmeliyim.

Şahsen, zor, karmaşık bir problemi aldığımda ve bunu kabul edilebilir bir verimlilik seviyesini korurken çok basit ve basit bir şekilde uyguladığımda zeki olduğumu hissediyorum.

tl; dr bir kod inceleme sırasında, gözden geçiren "wow, bunun olacağını düşündüğümden daha kolay" dediğinde zeki hissediyorum, aksine "wtf hepsi bu .."

7
Avatar_Squadron

Bazen o kadar zekiydim ki yanılmışım.

6
John

Listelenen teori cevaplarının yanı sıra, bu genellikle herkes için çok zeki bağlamında kullanılır.

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

Teori argümanlarını çok zekice bırakmak, genellikle en az yetenekli ekip üyelerinin makul bir şekilde ne ile çalışabileceğine dayanır, bu yüzden çevreye çok görecelidir.

6
Bill

Performansı, bakımı kolay, zamanında ve ucuz bir çözümü ölçme yöntemlerimdir. Zeki, bu nitelikleri olumsuz etkilemediği sürece akıllıca bir çözümün parçası da olabilir.

4
Heath Lilley

Akıllı kod + anlaşılabilir kod <= basit kod yapmak için gerekli yorum miktarı varsa, o zaman akıllı kod için gitmek diyorum. Her zaman.

Bence "akıllı kod" yazan insanlar kasten düzgün yorum yapamadıklarında ortaya çıkar, çünkü sadece başlangıçta anlaşılmaz olması, karşılaşan gelecek nesillerin ne kadar akıllı olduğunu takdir etmek için zaman harcamak zorunda kalacaktır.

3
thesunneversets

İyi alıntılar sık ​​sık olduğu gibi, birçok farklı kişiye atfedilen bir teklif hatırlattı.

Kelimeleri ifade etmek:

Herhangi bir akıllı kişi basit kompleksi yapabilir, kompleksi basitleştirmek için bir dahi gerekir.

Karmaşık bir fikir almak ve onu basitleştirmek için basitleştirmek, kurucunun akıllılığını gösterir, ancak basit bir fikir almak ve karmaşıklaştırmak, kurucunun zeki olarak görülmek istediğini gösterir.

3
Pickle Pumper

Benim düşünceme göre, zekice bir sorun değil. Genellikle "zeki" (alaysız) ve "içgörü" kodu hakkında kafa karışıklığı yapabiliriz. Bir sorun olarak gördüğüm şey, genellikle "zeki" (alay ile) kodu örtük görünür olmayan gereksinimleri içeren, hata ayıklamak ve zaman içinde korumak için zor olmasıdır.

Akıllı olan bilinen birkaç algoritma vardır. Quicksort birdir, IMO.

"Zeki" (iğneleme ile) kodu genellikle, ayarlanan değişkenler ve sistemin "akıllı" kodla neredeyse bağlantısı kesilmiş durumları (daha önce açılan dosyalar, ağ bağlantıları, veritabanları vb.) Hakkında varsayımlar yapar.

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

2
Machado

'Akıllı' çözümün anlaşılması zorsa, o zaman kullanılmamalıdır. Örneğin, yan etkiler yoluyla karmaşık bir hesaplamayı bir satıra daraltabiliyorsanız, zekidir. Ama bir başkasının dünyada ne yaptığınızı anlaması bir saat alırsa, bu çok zekidir.

2
Michael K

Bir erkek tanıyorum; muhtemelen tanıştığım en parlak insan. Kesinlikle inanılmaz bir kodlayıcı, muhtemelen tüm hayatımda saf programlama pirzola açısından benden daha iyi. Bir Word belgesi yazıyormuş gibi kod yazar ve inanmadığınız gibi bağlantılı bir listeyi tersine çevirebilir. Ciddi derecede karmaşık bir kod yazmaktan bahsetmek istiyorsan, o senin erkeğin ve eğer inanılmaz zor bir sorunla karşılaşırsam, daima ona yönelirim. Bununla birlikte, bir ekip ortamında onunla bir proje üzerinde çalışmak zorlayıcıdır. İş sorununu doğrudan hedefleyemiyor ve buna 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. IDE veya çerçeve aracılığıyla kendisine sağlanan araçları kullanmak yerine, kendi süper optimize aracını yuvarlayacak. diğer takım üyelerinin bir şeyleri bitirmek için onu beklemeleri ya da bir son teslim tarihimiz dışında her şey yolunda.

Bu karmaşık şeyleri yapma yeteneğine hayran kalırken, ihtiyacım olan şey sorunu çözebilecek ve devam edebilecek biri. Söylemek ya da itiraf etmek harika değil, ama bazen bir iş ortamında zaman her şeydir ve sadece sorunu çözmek ve hayatınıza devam etmek zorundasınız, her zaman daha sonra geri dönebilir ve iyileştirmek için cehennemden uzaklaşabilirsiniz. senin kodun. Akıllı olmak ve aynı zamanda popoda ağrı olmak arasında ince bir çizgi vardır. Ekibim için sloganım her zaman, bu durumda çalışacak ve oradan gidecek mümkün olan en basit şey nedir. Bazen daha basit her zaman cevap değil ama başlamak için çok iyi bir yer.

1

"Bu bağlamda" akıllı "," kendi iyiliği için çok zeki "anlamına gelir, yani şu anda çalışan ancak daha sonra anlaşılacak ve değişecek bir kabus olacak bir şey.

Özellikle programlama dilinin belirsiz bir özelliğini kullanan veya garip yan etkileri kullanan veya sorunu hedef dilde çözmenin tuhaf bir yoluysa bir hile ise.

1
Andres F.

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

Yine de, Nice, zeki, iyi performans gösteren bir bilmeceler bloğu, ancak deneyime sahipseniz, genellikle bu şeyi ortada tutmak için işinize (size, geliştiriciye değil) çok daha fazla mal olacağını fark edeceksiniz. veya uzun vadeli. Bu yüzden geliştirildiklerinde diğer geliştiricilerin zaferini sakinleştirmeyi tercih edersiniz.

Tabii ki, zekâ için bir gerekçe varsa. Ve yazdığınız gizlenmiş şeyle birlikte gelen iyi bir belge varsa. Zeki kod parçasını yorumladın, değil mi? Niyetini, neden böyle olması gerektiğini ve nasıl davrandığını açıklayın?

Bir gerekçe yoksa, muhtemelen sadece erken optimizasyon, aşırı mühendislik veya YAGNI tür bir sorun. Basit bir şey yapmak için 15 dolaylı seviye gerekiyorsa, önceki kategorilere de girme şansınız yüksektir. Ve eğer belgelenmemişse, sadece sorun.

Büyük kod, anlayıcının bunu anlamak için her zaman% 100 olmasını gerektirmemelidir. İyi kod zekidir. Büyük kod neredeyse verimli olabilir, ancak diğer birçok açıdan daha iyi olabilir. Mükemmel kod, uygulamanızın tasarımını takip etmek için IDE 15 görüntülemeli) gerektirmemelidir.

Not: hey, zeki olduğunu düşündüğüm birkaç şey yazdım ama bu WTF'yi çekti - eğer ortak geliştiricilerim olmasa da - yöneticimin ağzı. Onlara bakış açısından bakmak zorundayım.

1
haylem

Ben zeki olma eğilimindeyim, ama zarif olmaya çalışıyorum.

Kod geliştirin şimdi diğerleri denemek ve kaçınmak olmaz daha sonra.

1
kevpie

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

"Hata ayıklama ilk etapta kodu yazmaktan iki kat daha zordur. 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
Alex

Deneyimlerime ve diğer yanıtlara dayanarak bu konuyu anlamam:

  1. Yazmak için akıllılık gerektiren ancak okunabilir ve bakımı kolay olan kod zararlı olarak kabul edilmez. Ancak, çoğu geliştirici bu tür kodu "zeki" olarak adlandırmaz; "zarif" gibi farklı bir terim kullanabilirler. Böyle bir kodun mevcut olup olmadığı konusunda bazı tartışmalar olabilir veya olmayabilir.
  2. Dile aşina tecrübeli bir geliştirici tarafından bile anlaşılması gereken önemli zaman ve çaba gerektiren üretim kodu "zekidir" ve herkes tarafından zararlı olarak kabul edilir.
  3. Deneyimsiz geliştiriciler tarafından önemli 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" olarak tutmayı tercih edeceklerini açıkça belirten geliştiricilerle çalıştım.
1
Larry Coleman

Genellikle 'akıllı' olmanız gerektiğinde, koddaki bir sorunu çözmek için. Bir geçici çözüm varsa ve çok basit değilse, belirli koşulları kabul ederken çok fazla karışık yüz veya başka tuhaf yan etki elde edersiniz (bu, kodu yazarken% 100 doğru olabilir)

Böylece zeki == kafa karıştırıcı == kötü :( Ama aynı zamanda ben bunları sınırlı sorunlara pratik çözümler için kullandığım gibi harika.

0
user2528

Basit çözümleri tercih ederim, Ruby yolunu gerçekten çok seviyorum. Örneğin, listedeki ilk 2 öğeyi toplamak istediğinizde. önce listeyi size = 2 yapmak için kesersiniz ve sonra toplarsınız.

Bir kez 3 yerine 1 liste kullandığımı ve bakımı/değiştirilmesi çok zor olan büyük bir işlev oluşturduğumu hatırlıyorum.

günümüz dünyasında performans için kod netliğini feda etmek zorunda değiliz (c ++ hariç, zorunda değiller, ama olacaklar).

0
IAdapter

Bağlam ve daha kolay anlama için yeniden alıntı yapma:

"Hata ayıklama ilk etapta kodu yazmaktan iki kat daha zordur. 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ığı şey açıkça evrimi ifade ediyor ve yanlışlıkla Word'ü akıllıca kullandı.

"Hata ayıklama ilk etapta kodu yazmaktan iki kat daha zordur. Bu nedenle, kodu mümkün olduğunca [kıvrık] olarak 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 ustaca olduğunu bilir. Mümkün olduğunca akıllı olan 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, kıvrımlı kodu, şansları olduğunda akıllı koda dönüştürürler. Kod genellikle kıvrımlı olarak başlar ve programlamadaki insan bilişsel yeteneğinin alanı hakkında bilgi ve anlayış, deneyim ve paylaşılan bilgi yoluyla daha iyi anlaşıldığı için akıllılığa yaklaşır.

Bu teklifin popülaritesi ve Brian Kernighan'ın endüstride oldukça popüler olması nedeniyle, Word'ün bu yanlış kullanımı olumsuz bir sosyal etkiye sahiptir ve dürüstçe adamın kendisi tarafından ele alındığını görmek isterim. Bu makaleyi yazmadan önce, ona e-posta gönderip alamayacağımı görmeye çalıştım, ancak anladığım herhangi bir e-posta iletişim bilgisini bulamadım :(.

Gördüğüm olumsuz sosyal etki, daha zeki akranlarını dışlayan diğer programcılar, çünkü şimdi zekayı bir sorun olarak görüyorlar. Asıl sorun, yeni bir unidiomatik yolla bir şeyler yaparak zeki olduklarını düşünen ve daha büyük topluluğun kazanılması ve anlaşılması ve akıllı fikirlerin olabildiğince yeniden kullanılması yerine avantaj olmadığında sürekli yeni şeyler icat ettiğini düşünen aptal akranlardır.

Yine de açıklığa kavuşturmaya ihtiyacım var çoğu zaman bir anlayış kazanmak, kendiniz icat etmekten daha zordur. Endüstrideki ortak sorun nedeniyle gerçekçi olmayan süreler için daha küçük niş probleminiz için kendi icat zaman kazanmak için kullanılacaktır. Bu, yararlı ve tekrar kullanılabilir şeylerin genellikle daha büyük bir nişi hedeflediği veya buluş için yararlı bir soyutlama sağladığı gözlemine dayanır. İnsanların daha fazla para kazanmak için büyük nişleri hedefledikleri gerçek 'a da dayanmaktadır, bu da çoğu zaman bu uygulamayı geniş bir uygulama alanı için kullanılabilir bir şey haline getirme karmaşıklığı nedeniyle kullanımı son derece zorlaştırır.

Diğer olumsuz sosyal etki, bu ilerlemeyi ve kavrama arzusunu önler, çünkü benmerkezci dünyamızda, kendi anlayış eksikliğimizi derhal reddedeceğiz ve bir kez anlaşıldığında bile fikir gerçekten de olsa, kıvrılma kodunu yazacağız. oldukça zeki.

YAPILACAKLAR Bazı referansları belirtmek istiyorum, ancak bilgi paylaşma yeteneğimi engellememek için referans eksikliğini de istiyorum, böylece bilgilerimin kaynakları olarak hatırladığım şeyi hızlı bir şekilde göstereceğim ve belki de gerçek bilgileri biraz bulacağım gün (ya da benim için bulabilirsin! :)

  • Guido Van Rossum'un olay döngüleri ve onları nasıl anlamaya geldiği konusundaki konuşması
  • Y-Combinator'da 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 yeni fikirleri özellikle eleştirir, ancak yaptıkları yeni fikirleri göz ardı etmez) elden anlayamazsınız ve genellikle ilk başta kıvrımlı olarak görülen özellikleri, günün ışığını temel bir dil özelliği/paketi olarak görebilirsiniz.
  • Kendi deneyimim ve profesyonel görüşüm 10000 ayak gözlemime dayanıyor. Gerçekten oraya kadar aydınlatılacak özellikleri göremiyorum :( Umarım deneyiminiz ve gözleminiz size aynı şeyi söyleyecektir ve başka biri bu cevaba biraz değer vermek için aşağıda yorum yapabilir.

Kendi alıntılarınızı eklemekten çekinmeyin! Ayrıca, metnime virgül eklemekten çekinmeyin. İngilizcede virgül kullanımı konusundaki bilgilerimi bir süredir yenilemedim ...

0
Derek Litz