“Akıllı” kod yazmamak için kendinizi nasıl eğitin? [kapalı]


75

Bu yeni numarayı sadece üç farklı prosedürle göstermeniz veya genelleştirmeniz gerektiğinde bu hissi biliyor musunuz Expression? Bunun Mimarlık Astronot ölçeğinde olması gerekmez ve aslında yardımcı olabilir, ancak yardım edemem ama aynı sınıf veya paketi daha net, anlaşılır (ve bazen de sıkıcı) bir şekilde uygulayacağını fark ettim.

Sık sık , sorunu kasten ve bazen de sıkıntıdan uzaklaştırarak programları tasarladığımı fark ettim . Her iki durumda da, dürüst olmak gerekirse, çözümümün tersine kanıt görene kadar çok net ve zarif olduğuna inanıyorum, ancak genellikle çok geç. Aynı zamanda, bir kopyasını kodlamak için belgelenmemiş varsayımları ve sadeliğe zekâyı tercih eden bir parçam da var .

“Zekice” kod yazma dürtüsüne karşı koymak için ne yapabilirim ve ne zaman yanlış yaptığımı zil çalmalı mı?

Sorun şu an deneyimli geliştiricilerden oluşan bir ekiple çalıştığım için daha da zorlanıyor ve bazen akıllı kod yazma girişimlerim zaman zaman zarafet yanılsamasını dağıttıktan sonra bile kendime bile aptal görünüyor.


5
biraz konu dışı ama thedailywtf.com/Articles/...

@Joe: Bu çok konuyla ilgili, teşekkürler! Makaleyi okudum ama şimdi yeniden keşfetmek bir zevk.
Dan

33
Bir çok zekice hata ayıkla ... hile yapmalı.
Dan Olson

@Joe bu makalede yer alan veritabanlarının veritabanına bağlantı için ölmek.
jnewman

Kısa cevap: en kısa, en basit kod kazanır. Çoğaltmayı ortadan kaldırın, ancak "sadece çünkü" katmanlarını eklemeyin. Fowler's Refactoring size biraz fikir verebilir.
kevin cline

Yanıtlar:


54

Sorun şu an deneyimli geliştiricilerden oluşan bir ekiple çalıştığım için daha da zorlanıyor ve bazen akıllı kod yazma girişimlerim zaman zaman zarafet yanılsamasını dağıttıktan sonra bile kendime bile aptal görünüyor.

Çözümün burada yatıyor. Bu bağlamda "deneyimli" nin "senden daha deneyimli" olduğunu farz ediyorum. En azından, onlara açıkça saygı duyuyorsunuz. Bu değerli bir öğrenme fırsatıdır - egonuzun etkilenebileceğini varsaymak. (Çok sıkıcı şeyler, egolar. Onlara ihtiyacımız olan bir yazık.)

Bu kişilerle kod incelemeleriniz var mı? Eğer öyleyse, zaten yapmıyorlarsa, açıkça saçma sapaktan sizi aramalarını isteyin. Basit bir pençe çekiçinin fazlasıyla yeterli olacağı durumlarda, kendinize aşırı tasarım yapma, titizlikle tasarlanmış birinci sınıf bir pnömatik kırıcı (tercihen bir çeşit otomatik yol işçisi android tarafından kullanılan) kullanma eğiliminde olduğunuzdan bahsedin. .

Kod incelemeleri sırasında yüzünüz kırmızıya dönerken sık sık kendinizi koltukta kıvranırken bulabilirsiniz. Tahammül et. Öğreniyorsun

Sonra, bunlardan birkaçını kemerinizin altına soktuğunuzda, fazla abarttığınızdan şüphelendiğiniz anlara dikkat edin. Bu anlar geldiğinde kendinize sorun: "Kod incelemesi sırasında biri beni bu konuda çağırırsa, çözümümü mevcut en iyi çözüm olarak savunabilir miyim? Yoksa bıraktığım daha basit bir çözüm var mı?"

Bazen, meslektaş gözden geçirme kendi işinize iyi bakmanın en iyi yoludur.


Gerçekten iyi bir cevap için teşekkürler. Hayır, kod incelememiz yok, çünkü çoğunlukla proje büyük ve müşteri kaynakları çok sınırlı. Fakat sanırım her günün sonunda "çözümümü en iyi çözüm olarak savunabilir miyim?"
Dan

7
Kod incelemesi yok mu? Urk. Tamamen kendine özgü ve dehşete kapılmış bir şeyler yazardım ama o ortamda da çalıştım. Zaman alıcı ve herkesin kıçında bir tür acı çekiyorlar, ancak eldeki proje ve kendi kişisel gelişiminiz için gerçekten değerli. Eğer "Belki kod incelemeleri yapmalı mıyız?" her zaman gelir, aşağı indiğinizden emin olun "cehennem evet!" Ve kendi belirsiz son teslim tarihlerine çarpmazlarsa, gayrı resmi bir kod-inceleme-lite konusunda emin olmadığınız bir işten saygı duyduğunuz iş arkadaşlarınızdan isteyebilirsiniz.
BlairHippo

1
Proje bir başlangıçtır ve bazı planlama hataları nedeniyle, müşteri tarafında da, hızlı bir şekilde teslim etmemiz gerektiğinde duruma çarptık, aksi halde bu çabaya değmez. Ben sadece Başbakanımızla konuştum ve en azından şu anda kod incelemeleri yapmamamızın tek nedeni olarak agresif bir son tarih olduğunu doğruladı. Başlangıç ​​başarılı olursa ve zaman kısıtlamaları daha da gevşerse, gelecekte incelemeleri yapıyor olabiliriz.
Dan

2
Aman. Kulağa heyecan verici geliyor - kelimenin taşıdığı tüm iyi ve kötü çağrışımlarla. :-) İyi şanslar dostum; Burada harika bir şeyin başlangıcında olduğunuzu umuyorum.
BlairHippo

8
@BlairHippo: Tavsiyenizi yeni takip ettim, sakinleştim ve nazikçe, benimle gayrı resmi incelemeler yapmak için yaptığım değişikliklerin işaret ettiği sorunu işaret eden iş arkadaşına sordum ve kabul etti. Bu aynı zamanda konuşmamızdaki bazı garipliklerin giderilmesine de yardımcı oldu ("karmaşık kod yazıyor ve düzeltmem gerekiyor .." gibi). Teşekkürler!
Dan

20

Yapılacak en iyi şey, Brian Kernighan'ın makamını akılda tutmak:

“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
Gönülden alıntıya katılıyorum ama soru zeki çocuk olma isteğinin nasıl üstesinden gelineceği ? Hasta olduğunuzda dondurma yememeniz söylenebilir ancak bazen işe yaramaz.
Dan

13
Her kod maymununun yüreği tarafından bilmesi gereken maksimum değer için +1, fakat OP'ye kendi çalışmasına nasıl uygulanacağı hakkında bir fikir vermemesi için -1. Bu yüzden hepsi ok tıklamasıyla dağılıyor.
BlairHippo

2
Harika bir alıntı, ancak OP'nin sorusuna gerçekten bir cevap değil.
Jim G.

5
Merhaba Daniel, tekliflerden çok daha fazlasını arıyoruz: site yalnızca sorular, deneyimler, gerçekler ve referanslarla dolu uzun, düşünceli cevaplarla eşleştirildiğinde kullanışlıdır. Kendi deneyimlerinden ekleyebileceğin başka bir şey var mı?

2
-1: OP'nin sorusuna en küçük cevap vermiyor.
Thomas Eding

15

Herhangi bir önemi olan yazılım sorunlarına genellikle en az üç çözüm vardır: açık yol, açık olmayan karmaşık bir yol (akıllı) ve açık olmayan basit bir yol (zarif). Yazarlar hakkında bir fiyat teklifi burada geçerlidir:

Kafana gelen her şeyi bırak, sonra sen yazarsın. Ancak bir yazar, kendi değerinin değerini merhametsizce yargılayan ve çoğunu tahrip edebilen bir yazardır. - Colette

Kendi kodunuzun değerini yargısız olmadan yargılayamaz ve çoğunu yok edinceye kadar zarif kod yazamazsınız. Sonuç olarak zarif kodu yargılarsanız, aldatıcı bir şekilde kolay görünür, ancak yavaşlamanız, birçok taslaktan geçmeniz, başkalarının tavsiyelerine başvurmanız ve sayfada tam olarak neyin bulunmayacağını kesmeniz gerekir. Bu, kodunuz kusursuz çalışıyor olsa bile, kendinizden veya bir iş arkadaşınızdan neden bir şeylerin doğru hissetmediğini sorabilirsiniz, cevaptan memnun kalana kadar. Belki de çok uzun ya da tekrarlayan bir duygudur, ya da derleyicinin belirli bir hatayı yakalayabilmesi gerektiğini düşünürsünüz. Deneyimli bir deneyime sahip programcıların çoğu inelegant kodunu kolayca tanıyabilir . İşin püf noktası, nedenini bulmak .

Daha zarif bir kod yazmanın yöntemsel yolu budur. Aynı zamanda, bir soruna yeni bir şekilde bakmanıza yardımcı olacak bir bakış açısı flaşı gerektirir. Bunu elde etmek daha zordur, fakat kodlamaya dalmadan önce yavaşlamak ve sadece bir problemi düşünmek için yardımcı olur. İyi bir çözüm bulduğunuzda daha iyisini bulun. Diğer kodları okumak yardımcı olur. Sınıf almak veya en iyi uygulamalarla ilgili kitap okumak yardımcı olur. Diğer programlama paradigmalarını öğrenmek yardımcı olur. Koduna yardım ettiğin meslektaşlarından tavsiye istemek.


3
Bu bana eski bir matematikçinin teklifini hatırlatıyor: "Her sorun için basit, zarif ve yanlış bir çözüm var."
Joris Timmermans

9

Mevcut cevaplara ekler, TDD tarzında geliştiririm, bu nedenle ilk önce kodunuzun ne yapması gerektiği hakkında testler yazıp ardından testlerinizi yeşil yapmak için uygularsınız. Bu şekilde, yalnızca testlerin uyguladığı gereksinimleri yerine getirmiş olursunuz. Testi yazacağınız için, disiplinli bir yaklaşım geliştirmek için iyi bir yoldur.


Kesinlikle zamanım olduğunda bunu kendime dayatmaya çalışıyorum.
jnewman

Sonradan test yazmak, kodunuzdaki büyük hataları tespit etmenin iyi bir yoludur. Bir şekilde kendini gözden geçiriyor. Ancak TDD, yeni başlıyorsanız açıkça en iyi yaklaşımdır.
vanna

6

Birçok farklı beceri setine ve yıllara yayılan büyük ve dinamik bir ekip için çalışırken, geliştirme, mevcut veya tarihi ekibin en muhafazakar veya en entelektüel yetersizliği olan üyesinin en düşük seviyesine "düşürülecek" bir doğal ilerlemeye sahiptir.

Bu, mutlaka kötü bir şey olmayabilir, çünkü akıllı kodun hata ayıklaması daha zor, teknik şartnamede iletilmesi daha zor olabilir ve geliştirme süresini yavaşlatarak yazması daha uzun sürebilir.

Akıllı kodun önemli olduğu zamanlar vardır, örneğin akıllı kodun verimlilik sağlaması ve performansın bir gereksinim haline gelmesi durumunda yazılımın vade döngüsünde daha sonra performans kazanması gibi.

Akıllı kod ayrıca, yeni bir dil özelliğine veya kütüphane çağrısına maruz kalmayacak bir takıma daha hızlı ve daha okunaklı ve anlaşılabilir bir kod iletme yöntemine sahiptir. Örneğin, Linq'a küçük bir geliştirici tarafından ilk girdiğimde, gereksiz, hata ayıklaması zor, aptalca ve "zeki" olarak hemen iğrenmiştim. Kendimle oynadıktan ve Linq sorgularının ne kadar yararlı ve güçlü olduğunu keşfettikten sonra, bunu öğrenmek için zaman harcadım ve DAL kodum hiç bu kadar temiz ve okunaklı olmamıştı, ayrıca hata ayıklamak ve genişletmek de kolaylaştı.

Daha önce açık fikirli olmadığım için pişmanım ve böylesine "zeki" bir genç geliştiriciye bu kadar sert davranmamayı diliyorum.

Demek istediğim, "zeki" kodun şüpheli olması gerektiği, ama buna karşı haçlı seferine devam etmemeliyiz çünkü yaratıcılık ve yeniliği boğabilir.

EDIT: Sadece sorunuzu tam olarak cevaplamadığımı fark ettim. Projenizde akıllıca kolayca kod yazma kapasitesine sahipseniz, belki de takım düzgün ve farklı bir şablon ve stil izleyebilmek için daha katı kodlama standartlarını benimsemelidir. Bu, kum havuzunuzun çizgilerini çıkarmanıza yardımcı olacak, böylece bir topun peşinden koşarak sokağa çıkmayacaksınız.


6

% 20 (%'niz değişebilir) veya eklenen satırlarınızın daha fazlasının dokümantasyona ihtiyacı varsa - geri adım atıp yeniden düşünmenin zamanı geldi .

Gerçekten zeki olmak için çaba sarf etmeniz gerektiğini düşünüyorum, bu daha ustalaşmanın doğal bir yan etkisi. Kendinizi açıklığa kavuşturmak için gereken yorumların% 'si gibi genel bir rehber vermek, öğrendiğiniz yeni şeyi kullanmanın akıllıca bir seçim mi yoksa yeni oyuncağınızı göstermenin bir yolu mu olduğunu düşünmek için kendinizi geri durmaya zorlamak için iyi bir yoldur.


3
Belgeleri / yorumları bir başarısızlık olarak kabul ediyorum. Bir şeyi belgelendirmeniz / yorumlamanız gerektiğinde, ilk önce kodunuzun açık olmadığı anlamına gelir. Ne yazık ki, bu gerçekçi olmayan bir hedeftir ve bir noktada belgelendirmeye ihtiyacımız var. Sadece, kodun bu kısmının asgari miktarda azaltılması gerektiğini unutmayın.
deadalnix

@deadalnix: Kötü bir nokta değil. Yüzdemin çoğundan daha yüksek olacağından şüpheliyim, çünkü genellikle aksi halde ölü ve çok makro bir derleme dilinde kod yazıyordum. Okumak zor ve her yeni işe alım dil bilgisini öğrenmeli, bunun sonucunda daha fazla yorum yapılması gerekiyor.
DKnight,

2
@deadalnix - Bir işaretin kodunuzun nasıl belirsiz olduğunu nasıl açıklayacağını gösteren belgeler. Nedenini çok gerekli olduğunu açıklayan belgeler. Ne yaptıklarını anlayabilmem için çok fazla kod parçası gördüm ama neden bu sezgisel olmayan bir şekilde yapmaya karar verdiklerini bilmiyordum. Bu bakımı çok zorlaştırıyor.
HLGEM

@HLGEM Bu tartışılabilir. Kuralların belirsizliği, kötü tasarlanmış kütüphanelerden / API'den, kavramın kendisinde belirsizlikten, endişelerin kötü ayrılması gibi gelebilir. Gerçek dünyada yaşıyoruz ve kapasitemiz sınırlı, bu yüzden kesin olarak belgelendirmeye ihtiyacımız var, ancak her ihtiyacımız olduğunda, birinin hatalı kod yazdığı anlamına geliyor. Hiçbir dokümantasyon yapmanız gereken bir şey değildir - bunun hakkında düşünmeyin bile, doğru yönde gelişmeye devam etmek için her zaman düşünmeniz gereken bir şey.
deadalnix

@deadalnix - Mükemmel kod hiçbir zaman gerçek dünyada pratik bir çözüm değildir.
JeffO 11:11

4

Akıllıca bir şey denemeye dayanamıyorum.

Bu yüzden bir oyuncak projesinde, kendi zamanımda, evde yapıyorum.

Yenilik yıprandığında - sorun çözüldü.


3

Kodunuzun çok "zeki" olup olmadığını anlamanın bir adım geri atmak ve kendinize aşağıdakileri sormak olduğuna inanıyorum:

Bu kodun bir çıktısını bu proje / kod üzerinde hiç çalışmamış birine vereceksem, kodu okuyabilir ve bana fonksiyonun ne yaptığını açıklayabilir mi (kısa bir bağlam verdikten sonra)? Olmazsa ne kadar açıklama yapmam gerekir? Bunu CS101 alan birine nasıl açıklarım?

Bir yöntem veya sınıftaki her çizgiden veya çoğu çizgiden birini geçmek zorunda kalacağınız ortaya çıkarsa, muhtemelen çok zekicedir. Dil yapılarını (örneğin, LINQ'yi) aşina olmayan birine açıklamak zorunda kalırsanız, bu muhtemelen tamamdır. Bir çizgiye bakmak ve bir açıklama yapmadan önce biraz düşünmek zorunda kalırsanız, kodunuzun yeniden gözden geçirilmesi gerekir.


Bu problem çözme uygulandığında "Lastik Ördek" denilen duydum; Karıştırıldığında, sorunu hakkında hiçbir şey bilmeyen birine (örneğin, kauçuk ördeğiniz gibi) açıklamaya çalışın ve çözümün kucağınıza düşüp düşmediğini görün. Bunun da işe yarayacağını düşünmeliyim.
BlairHippo

2

1) Kötü bir şey olduğunu bilmen için daha önce yakılsın. Zekice yazılmış bir şeyden çok önce hata ayıklamaya çalışmak çok eğlenceli. Sanırım bunun üstesinden geldin.
2) Kodunuzu yorumlayın, her kod bölümünden önce ne yaptığınızı açıklayın.
3) Kendinizi açıklamakta güçlük çekiyorsanız veya bir diyagram ekleme gereğini hissediyorsanız, o zaman yaptığınız şey çok akıllıca ve muhtemelen daha temiz yapılabilir.

Sorunlara yönelik akıllı çözümler, onları ayıklamak veya genişletmek zorunda kalana kadar harika olabilir. Bazen tek çözüm budur. Ne yaptığını ve nasıl yaptığını tam olarak açıklayabilirseniz, akıllı çözümler kabul edilebilir.

Genellikle bir bölüm koduyla ne yaptığımı açıklamak için yorum kullanırım. En az kafa karıştırıcı görünüyorsa, nasıl yaptığımı da açıklarım. İdeal olarak, kod yalındır ve açıklayıcı olmalıdır. Ama az önce yaptığımı nasıl yaptığımı açıklamakta zorlanıyorsam, geri adım atıp tekrar denemem gerektiğinin açık bir işareti.


2
Yorum numarası da benim için çalışıyor. Diğer nedenlerin yanı sıra, her zaman önemsiz olmayan alt programların üzerinde bir tür son akıl sağlığı kontrolü olarak bir yorum bloğu eklerim. Kendimi kod bölümlerinin veya garip girdi paraşütlerinin ya da her ne olursa olsun, açıklanmış ya da geniş bölümler halinde açıklayan (ya da bazen de özür dileyen) çok fazla açıklama yapmak zorunda kaldığımı tespit edersem, bu çözümü biraz gözden geçirmem gerekebilir.
BlairHippo

@BlairHippo HA! "son akıl sağlığı kontrolü" Bu hoşuma gitti.
Philip

2

Muhtemelen basit kod yazmaya başlamanın iyi bir yolu, zekâ isteyen bir projeye zeki tutkuyu salıvermektir . Cevabın geri kalanı .NET'e özgüdür, ancak benzer düzeyde projeleri başka bir dilde bulabildiğinden eminim.

Orada açık kaynak bağımlılık enjeksiyon çerçeveler sadece istemek hangi üzerinde çalışmak için Expressionhileler bilgi, orada F # ve bir için denemek isteyebilirsiniz görevlerin harika yelpazesi.

Eğer matematikte iseniz (ve bu bir dil agnostik ), sizin için Proje Euler var.

Son olarak, en az değil, .NET dünyasında, geliştiricilerin dikkatini çeken , bazıları oldukça karmaşık olan birçok alana sahip olan Mono Projesi var . Açık kaynak kodlu statik .NET kod analiz aracına katkıda bulunmaya ne dersiniz ? Bazı IL analizleri ve ayrıca üst düzey şeyler var. Jb Evain , Cecil yansıma kütüphanesi, destek ya da .NET decompiler olsun, her zaman ilginç bir şey üzerinde çalışır .Expression

Hiçbir şey uymuyorsa, sadece kendi alaycı çerçevenizi başlatın :-)


2

İfade ile bu yeni numarayı göstermeniz veya üç farklı işlemi genelleştirmeniz gerektiğinde bu hissi biliyor musunuz?

Hayır

Bu, yeni geliştiricilerin büyük bir olta belgelenmemiş speghetti kodunu bozmaya ve yeniden biçimlendirmeye zorla girmelerinin iyi bir şey olduğunu söylememin nedenlerinden biri. Onlara, yazmadıkları aşırı 'zeki' kodları korumanın gerçeklerini öğretecek ve umarım 5 yıl sonra kodlarını hata ayıklamak zorunda kalacak olan zavallı adam için bir empati aşılayacaktır.


Bunun onları hayal kırıklığına uğratması ve THEIR kodunun BU karışıklığı yazan noolardan daha iyi ve zarif olacağını düşünüyorum. Kimse bakımı zorlaştırmak amacıyla kod yazmaz.
sara,

2

Bence konunun iyi seçildiğini düşünüyorum. Her seferinde on bin şeyi yapan bir Perl satırı yazmak "havalı", ancak sonra tekrar ziyaret etmeniz gerektiğinde berbat.

Farklı bir notta, akıllıca olsun olmasın, kodun belgelenmesi gerekir. Sanayinin kabul ettiği programlama dilleri ile insan olarak alışkın olduğumuz üst düzey kavramlar arasında düşüncemize alışkın bir uyumsuzluk var. Kendini belgeleyen kod basitçe gerçekleştirilemez - doğal bir dil olana kadar. Prolog kodunun bile belgelendirilmesi gerekmekte, ancak yine de yüksek düzeyde olmasına rağmen hala resmi bir yapıya sahip.

İnce taneli zorunlu kod, belgelenmesi gereken kaba taneli planların uygulanmasına hizmet eder. 3 satırlık hızlı bir yol haritası yorumunda bulunacaksa, yöntemin 50 satırının tamamını okumak zorunda kalmak istemiyorum.

Daha sonra düzenleme: Daha belirgin bir örnek bilgisayarları aşan bir örnektir. Bir kitap çok iyi yazılmış olabilir, ancak sık sık farklı soyutlama seviyelerinde işlemek istiyoruz. Genellikle, kitabın bir özeti olacak ve yorumların kodlamaya sunabileceği şey bu. Tabii ki, iyi soyutlanmış kod kendi kendini belgelemeye doğru uzun bir yol kat edebilir, ancak size tüm soyutlama seviyelerini veremez.

Ayrıca, yorumlar, ana metindeki bir iddianın arkasındaki mantık yürütme sürecini çözmeden açıklama yapmamız gerektiğinde, bir kitaptaki boşluklar gibi davranabilir.

Bu bağlamda, yorum ihtiyacını aşan doğal dile atıfta bulunduğum önceki ifademin yanlış olduğunu tespit ediyorum. Bir kitapta olduğu gibi, doğal dil bile, metinde yer alan soyutlamayı seyrek olarak açıklamak veya ana metni ayırmadan detours sağlamak için kendisini belgelere ödünç verebilir. İyi soyutlanmış kodun kendi kendini belgeleme yolunda uzun bir yol kat etmiş olabileceğine dikkat edin.

Son fakat en az değil, yorumlar kod yazıcının yüksek bir soyutlama seviyesinde kalmasına yardımcı olabilir. Çoğu zaman, bir adım listesine dahil ettiğim ardışık iki yorumun aynı soyutlama seviyesinde konuşmadığını fark ettim, bu da derhal o kodla yaptığım şeye eleştirel bir göz atmayı garanti ediyor.

Bazı problemler kodlamayı aşar ve diğer aktiviteler gibi kodlamayı etkiler. Yorumlar, bu gerekçeyi ve kodumuzun gerekçelerini açıklığa kavuşturmada yardımcı olabilir ve onlara değişiklik yapmak için kişiye fayda sağlamak için daha yumuşak bir dil konuşan hoş bir yol arkadaşı buluyorum.


1

Nasıl? Kodunuzu deneyimli geliştiricilere göstermeye devam edin. ve sophomoric ve gösterişli oldukları için püskürtüldüğünde, onu em ve onlara nasıl yaptıklarını ve nedenini (yüz yüze olmayan bir şekilde) sor.

-1 ışığında düzenleyin:

Aylar önce, aynı durumdaydım - Delphi'de bir işaretçiyi her kullandığımda sıkıştıracak bir patronum ya da 'boole'larımı kısaltmayı bırakmazsam beni kovmakla tehdit eden bir tane daha vardı. 0-1 ile ve her yerde tek harf değişkenleri kullanarak.

Nedenini sordum ve açıklamakta zorlandılar çünkü bir şeyi tutabileceğimi düşündüler - LOL ....


1
Merhaba Mikey, tek bir astardan çok daha fazlasını arıyoruz: site yalnızca sorular, deneyimler, gerçekler ve referanslarla dolu uzun, düşünceli cevaplarla eşleştirildiğinde kullanışlıdır. Kendi deneyimlerinden ekleyebileceğin başka bir şey var mı?

1

Gösteriş yapma gereği duyuyor muyum? Hayır, artık değil. Onu nasıl geçtim? Tıpkı çoğu insanın başka kötü alışkanlıklardan kurtulması gibi ... uygun tekniklerin bilinçli ve kasıtlı bir uygulaması. Yeterince yaparsanız, en iyi uygulamaların değerini anlayacaksınız ve sürekli kullanımıyla iyi alışkanlıklar geliştireceksiniz.

Ayrıca, işlevsel yazılımlara odaklanarak, o zamanın ve kolayca bakımın yapılmasının, aradığınız tanıma sahip olacağının farkına varın. Tecrübeli geliştiriciler size gelip "Yazdığınız o modül iyi tasarlandı. Projeme bağlamak için sadece bir bileşeni uygulamak zorunda kaldım." "Sadece başka bir bileşende kullanmak için yazdığınız modülün tamamını elden geçirmek zorunda mıydım? Bob Martin veya Ward Cunningham'ı bile duydunuz mu?"

TLDR: Yalnız değilsin. Beceri tanıma en iyi şekilde akıllıca problem çözme yan ürünü olarak elde edilir.


0

Benim için, aşırı zeki kod, bugünün gereksinimlerine odaklanmak yerine, gelecekteki hayali gereklilikleri çözme çabasındadır. Büyük tuzak!

% 0 aşırı karmaşık kod ulaşılabilir bir hedef değil. Belki de uğraşmak için en iyi amaç bile değil. Aşırı karmaşık kod kötü, ancak bir programcı olarak büyümek için yeni şeyler denemek zorundasınız. Bunu önlemek için üretim kodunda denememelisiniz. Makinelerin aksine, insanlar hata yapar.

Kod incelemeleri yardımı. Yılları harcamak diğer insanların "akıllı" kodlarını düzeltmek için yardımcı olur. Müşterinin bugün ihtiyaç duyduğu şeyin neye ihtiyacı olduğuna odaklanmak.

Okullar ve işyerleri personel üzerinde temizlik ve bakım ekibinden oluşan ekiplere sahiptir. Kodun da temizlenmesi ve bakımı gerekiyor! Mümkün olduğunda, pislikleri temizleyin (özellikle kendiniz)! Bence bu yapılabilecek en iyi şey.


-2

Şu ana kadar verilen iyi tavsiyelere ek olarak (kod incelemesi, hata ayıklama, TDD yaklaşımı) zaman zaman iyi kodlama uygulamalarındaki (en iyi kitaplar) okumanız gerekir (tekrar):

  • Pragmatik programcı
  • Kod Tamamlandı
  • Kodu temizle

ve kullandığınız teknolojiye bağlı olarak diğerleri.


-2

Sadece YAGNI'yi hatırla - İhtiyacın olmayacak .

programcı gerekli görülene kadar işlevsellik eklememelidir ...

YAGNI, XP uygulamasının arkasındaki "muhtemelen işe yarayabilecek en basit şeyi yap" (DTSTTCPW) ilkesidir. Sürekli refactoring, sürekli otomatik ünite testi ve sürekli entegrasyon gibi diğer birçok uygulama ile birlikte kullanılması amaçlanmıştır. Sürekli refactoring olmadan kullanıldığında, dağınık kodlara ve büyük yeniden çalışmalara yol açabilir ...

YAGNI yaklaşımını savunanlara göre, şu anda gerekli olmayan ancak gelecekte olabilecek kod yazma cazibesi aşağıdaki dezavantajlara sahiptir:

  • Gerekli işlevselliğin eklenmesi, test edilmesi veya iyileştirilmesi için harcanan zaman alınır.
  • Yeni özellikler hata ayıklanmalı, belgelendirilmeli ve desteklenmelidir.
  • Herhangi bir yeni özellik gelecekte neler yapılabileceği konusunda kısıtlamalar getirir, bu nedenle gereksiz bir özellik, gerekli özelliklerin gelecekte eklenmesini engelleyebilir.
  • Özelliğe ihtiyaç duyulana kadar ne yapması gerektiğini tam olarak tanımlamak ve test etmek zor. Yeni özellik doğru bir şekilde tanımlanmamış ve test edilmemişse, nihayetinde gerekli olsa bile doğru çalışmayabilir.
  • Kod şişirilmesine yol açar; yazılım daha büyük ve daha karmaşık hale gelir.
  • Spesifikasyonlar ve bir çeşit revizyon kontrolü olmadığı sürece, bu özelliği kullanabilecek programcılar tarafından bilinmeyebilir.
  • Yeni özellik eklemek, başka yeni özellikler önerebilir. Bu yeni özellikler de uygulanırsa, bu özellik sürünme üzerinde kartopu etkisine neden olabilir ...

3
Bu doğru olsa da, daha fazla ayrıntı bunu daha iyi bir cevap haline getirecektir.
ChrisF
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.