“Uygun” programlama ne zaman önemlidir?


49

Boş zamanlarımda bir android oyun kurdum. Libgdx kütüphanesini kullanıyor, bu yüzden biraz ağır kaldırma benim için yapılıyor.

Gelişirken, bazı prosedürler için dikkatsizce veri tiplerini seçtim. Hashtable kullandım çünkü ilişkisel diziye yakın bir şey istiyorum. İnsan tarafından okunabilir anahtar değerler. Başka yerlerde de benzer şeyler elde etmek için bir vektör kullanıyorum. Libgdx'in vector2 ve vector3 sınıfları olduğunu biliyorum, ancak onları hiç kullanmadım.

Garip sorunlarla karşılaştığımda ve yardım için Stack Overflow'u aradığımda, birçoğu teknik olarak "uygun" olduğunda, belirli bir veri türünü kullanan soruları raybalayan birçok insan görüyorum. ArrayList kullanmak gibi, çünkü bir int [] 'i yeni tanımlanmış sınırlarla yeniden tanımlamak yerine tanımlanmış sınırlar gerektirmez. Veya bunun gibi önemsiz bir şeyi bile:

for(int i = 0; i < items.length; i ++)
{
    // do something
}

Her yinelemede item.length değerini değerlendirdiğini biliyorum. Ancak, öğelerin asla 15 ila 20 öğeden fazla olmayacağını da biliyorum. Öyleyse, her yinelemede items.length değerlendirir miyim?

Uygulamanın doğru ve tam olarak tanımladığım yöntemi kullanarak nasıl performans gösterdiğini görmek için bazı testler yaptım, öğreticiyi izleyin ve topluluk tarafından önerilen tam veri türlerini kullanın. Sonuçlar: Aynı şey. Ortalama 45 fps. Her uygulamayı telefon ve galaksi sekmesinde açtım. Fark yok.

Sanırım size sorum şu: Bu artık uygun olmadığında önemli olan bir eşik var mı? Söylemesi tamam mı - "işi bitirdiği sürece umrumda değil mi?"


4
Bu bir büyüklük meselesi. Dakikada binlerce istekle, daha sonraki yanıt sürelerinde aramalar ve toplamalarla gerçek dünyaya hizmet veren çok terabaytlık veritabanları oluşturmayı deneyin. Senin problemin yeterince büyük değil. Yaklaşımınız iyi olsa da, bu yolu kaçınılmaz sonuca götürürseniz izlemeniz zaman alan acı verici bir durumdur.
Jimmy Hoffa

8
Dilinizin gerçek bir FOR döngüsü varsa, bu çoklu değerlendirme sorunu olmazdı. Ne yazık ki, C sözdizimi bunu gerektiriyor, çünkü bu gerçekten bir FOR döngüsü değil; bir peruk ve büyük burun gözlükleri olan bir WHILE döngüsüdür ve döngü sonlandırma için herhangi bir rastgele durumu (veya hiç yok) kabul etmesi gerekir.
Mason Wheeler

2
Düzenlemenizi anlıyorum, ancak bir sarhoş ve kayıtsız olayı, belirli bir şoförle Cuma gecesi parti yapmak dışında herhangi bir bağlamda tamam durumda bulmaya çalışıyorsanız, muhtemelen yanlış ağacı atarsınız.
Robert Harvey,

17
İtem.length 'in her yinelemede' değerlendirdiğini 'nasıl biliyorsunuz? Derleyiciler oldukça akıllı. Ve defalarca item.length'i getirse bile, ne olmuş? 'İnt itemsLength = items.length; gibi kodları görmekten nefret ediyorum; ölçülen bir performans sorunu olmadığı sürece (; i <itemsLength; ...) 'için.
Kevin Cline

6
Bizim items.length şey kesinlikle "uygun programlama" ile ilgisi yoktur. Bu bir mikro-optimizasyondur ve iyi programcılar, bir profilleyiciyi çalıştırana ve gerçek performans problemlerinin yerini bilene kadar zaman kaybetmekten daha iyi bilirler . Mikro optimizasyonlar ve iyi programlama tarzı genellikle aynı şey değildir, zıtlıklardır.
Michael Borgwardt

Yanıtlar:


65

Bir sorunu çözmek için bir program yazıyorsunuz. Bu soruna, sorunu çözmek için belirli bir dizi gereksinim eşlik eder. Bu gereksinimler karşılanırsa sorun çözülür ve hedefe ulaşılır.

Bu kadar.

Şimdi, en iyi uygulamaların gözlenmesinin nedeni, bazı gereksinimlerin sürdürülebilirlik, test edilebilirlik, performans garantileri ve benzerleriyle ilgili olması gerektiğidir. Sonuç olarak, doğru kodlama stili gibi şeyleri gerektiren benim gibi sinir bozucu insanlara sahipsiniz. T'lerinizi geçmek ve I'lerinizi işaret etmek çok fazla çaba sarf etmiyor ve kodunuzu daha sonra okumak ve ne yaptığını anlamak zorunda olanlara saygı gösterme hareketi.

Büyük sistemler için, bu tür bir kısıtlama ve disiplin esastır, çünkü hepsinin çalışmasını sağlamak için başkalarıyla iyi oynamak zorundasınız ve projenin kendi ağırlığı altında çökmemesi için teknik borcu en aza indirmelisiniz.

Spektrumun diğer ucunda, şu anda belirli bir sorunu çözmek için yazdığınız tek seferlik yardımcı programlar, bir daha asla kullanmayacağınız yardımcı programlar bulunur. Bu durumlarda, stil ve en iyi uygulamalar tamamen alakasızdır; Birlikte hackliyorsun, koşuyorsun ve bir sonraki şeye devam ediyorsun.

Dolayısıyla, yazılım geliştirmedeki pek çok şeyde olduğu gibi, buna bağlı olarak değişir.


1
Katılmaya eğilimliyim. İş yerinde soru sormuyorum, çarpı işareti ve noktalı. Fakat iş için yaptığım birçok şeyin gerçekten sürdürülmesi gerekmeyen tek şey olduğunu düşünün. Geçen trend şeyler gibi. Doğum günü uygulamaları, gelen ve giden şeyler. Orada tüm uygun, ama gerçekten olması gerekmez.
Kai Qing

21
Kişi her zaman disiplinli olmanız gerektiğinde disiplinli olmanızı kolaylaştırır. Bazı insanlar, Shift tuşunu kullanmadan, düşüncelerini yeterli bir şekilde aktarabilecekleri ve İngilizce'nin yine de akıcı ve gelişen bir şey olduğu mantığını kullanarak, Stack Overflow hakkında sorular soruyorlar. İşlem zamanımın boş olduğunu düşünen virüs yazarları dışında daha fazla rahatsız edici bir şey bulamıyorum.
Robert Harvey,

2
@KaiQing Biri size paskal olarak doğmuş ve o zamandan beri öne sürülen 5 milyon eski uygulamayı teslim etmeli, çünkü bu uygulamaya herhangi bir işlevsellik eklemek ya da değiştirmek ilk girişiminiz üzerine, en iyi uygulamaların neden var olduğunu ve aydınlatıldığını hemen anlayacaksınız.
Jimmy Hoffa,

5
@KaiQing, Angry Birds birden fazla platformda çalışmalı ve oyun 2 saniye askıda kalıyorsa izleyicinin% x'i vazgeçecek ve Angry Birds çalışanları için y daha az dolara karşılık gelecek. İddiaya girerim çok dikkatli yazılmış. Belki bu, sorunuza cevap verir. Kod sadece sizin içinse, ne yaptığınız kimin umrunda? Söz konusu para veya başka insanların zamanları varsa, o zaman çok, çok dikkatli olmalısınız.
Charles E. Grant,

2
@KaiQing Kimse size bunun eşiğini söyleyemez, bu projeden projeye ve zaman içinde her projede değişkendir. Sistem arasındaki eşik değerlerini koruyabilen ve dayanmayan değişkenlerin sayısı: LOC, Kullanıcı tabanı, Geliştirici tabanı, Uygulama türü (kriptografi vs. crud vs. sürücüleri), Özellik sağlamlığı, Artıklık gereksinimleri, Yazılım kritikliği (e-posta sunucusu vs hayat destek cihazı - saat widget), Desteklenen platformlar, Teknoloji yığını, İşlem yapılan veya analiz edilen veri miktarı, Tarihsel denetim kısıtlamaları ve daha birçok şeyin kötü kod olabileceği etkileri
Jimmy Hoffa

18

Akıllıca eski bir alıntı var: "Yaşlıların bilge adamlarının izinden gitmeyin. Ne aradılarsa onu ara." 'Uygun' kodlamanın tüm kurallarının sebepleri vardır. Bu kuralların neden var olduğunu bilmek, bu kuralların ne olduğunu bilmekten daha önemlidir.

Böyle bir döngü için tekrar tekrar hesaplanabilecek bir test koymamanız gereken bir kural var. Kuralın düzeltilmesi için icat edildiği durumlarda (performansın gerçekten farklı olduğu yerlerde), mantıklı geliyor. Bu durumda, sadece bir doğru cevap var. Örneğinizde performans farkı olmadığı ve birkaç düzineden fazla yinelemenin olamayacağı bilinmektedir. Bu durumda, bu kuralı yine de uygulamak için iki doğru cevap vardır, çünkü basittir ve hiçbir şey zarar vermez ve iyi alışkanlıklar oluşturmaya yardımcı olabilir veya kuralı görmezden gelebilir, çünkü endişelenecek bir performans farkı yoktur.

İlk doğru cevabı tercih ediyorum, ikinciyi tercih ediyor gibi görünüyorsunuz. Bu konuda yanlış değilsin. 'Doğru' programlamanın neyle ilgili olduğu fikrinde yanıldığını düşünüyorum. Size yardımcı olmayan ve amacı olmayan rastgele seçilmiş bir kurallar dizisini izlemekten ibaret değil. Örnekte for döngüsünü düzeltmemeniz aslında erken optimizasyona karşı çok iyi bir kural izliyor.

Gerçek uygun programlama, akıllı bir şekilde mantıklı olan iyi kuralları izlemektir.


Ben ikinciyi tercih ettiğimi söyleyemem. Birisi bu android oyun yapma neredeyse tamamen sarhoş (sadece eğlence için) yapmak hakkında bir kısmını kaldırmak için benim yazı düzenledi ve sonuç olarak sarhoş seçimlerimin performans üzerinde hiçbir değişiklik yapmadığını görünce şaşırdım. Bazı garip dersleri test etmek için uygun derslerle değiştirdim. Kuralların var olduğunu bilmenin, kuralların ne olduğunu bilmekten daha önemli olmasına rağmen katılıyorum ...
Kai Qing

Ek olarak, "uygun" programlama fikrim, yığın akışı akış topluluğunun tekrarlayan görüşlerinin ve çalıştığım firmada gelen ve giden programcıların koleksiyonunun bir sonucudur. Bazı CI derecelerine sahip, bazıları kendi kendine öğretti. Bir şeyleri temel almak için ortak bir görüş var ve bir yolun doğru, bir yolunun yanlış olduğuna karar vermeden önce herkesin topluca söylediklerini kabul ediyorum. Katıldığınız için teşekkürler.
Kai Qing,

1
Sana kuralları çiğnediğin için söylüyordum gibi geliyorsa, o zaman fena halde ifade ettim. Yaptığın konuların hiçbiri itiraz edeceğim şeyler değil. “Hukukun ruhu” nun “hukukun mektubu” ndan daha önemli olduğunu belirtmeye çalışıyordum.
Michael Shaw,

Heh, hayır bana söyleyeceğini düşünmedim. Sadece iletişim kuruyordum. Bu soruyu bir sebepten dolayı sordum ve bu oylamanın kapalı oy vermeden yanıt verdiği için memnunum.
Kai Qing,

10

Buna bakmanın doğru yolu azalan getirilerdir: programı geliştirmenin ek faydasını ek geliştirme maliyetiyle karşılaştırmak.

Azalan getiriler, marjinal fayda, marjinal zaman / efordan daha az olduğunda ortaya çıkar.

Döngünün items.lengthdışına çıkmak için bir iş davası foraçabilir misiniz? Ekonomik olarak, bu değişiklik onu haklı çıkarmaya çalışırken harcadığınız zamanı haklı gösterebilir mi? Kullanıcı deneyiminde bir fark olmadığı için, harcanan zaman için bile hiçbir şey elde edemezsiniz (hatırlanması gereken yararlı bir ders dışında). Kullanıcılar bu programdan daha fazla hoşlanmayacak ve bu değişiklik sonucunda daha fazla kopya satılmayacak.

Bunu değerlendirmek her zaman kolay değildir, çünkü iş vakaları bilinmeyenlerle ve risklerle doludur ve bu nedenle sadece ön görüşte belirgin hale gelecek olan göze çarpmayan faktörlere av düşmeye yatkındır. Önerilen değişiklikler, çok büyük bir fark yaratacak şekilde önemsiz olabilir.

Azalan-geri dönüş türü düşünme, mazeretlerin bazı eylemlerde bulunmamaları için bir av anlamına gelebilir ve inceleme sırasında kaçırılmış fırsatların bir dizi olduğu kanıtlanabilecek risk almaktan kaçınabilir.

Ama bazen zaman açıktır değil bir şey yapmak. Eğer bir parça gelişme, sadece gelişim maliyetini (hatta kırmak) ödemek için meydana gelen ekonomik bir mucize gerektiriyorsa, bu muhtemelen kötü bir fikirdir.


Çok iyi yazılmış. Benim durumumda asla planlı bir dönüş olmadı. Herhangi bir geri dönüş tesadüfi olabilir, ancak en büyük başarıların bazılarının flukes olarak başladığını düşünüyorum çünkü görevden alınmamalıdır. Müşteri işi açısından, eğer uygulama kilitlenirse ya da bir şey küçük bir rahatsızlık haline gelirse, sadece ağırlaşmanın olabileceği kadar tehlikede çok para olmadığı durumlarda, daha kalın bir eşiktir. Kıyaslamalar iyi görünüyorsa, ancak kodun en verimli olmadığı biliniyorsa, o zaman hiç kimse kodun ilerlemesinden önce denetlemeye gelmeyecek ve belki de bir şekilde bir göç talep edecek ... bu konuda söylemesi zor.
Kai Qing,

Aslında. Her zaman bir çeşit nesnel dava açamayız. Herkes programa aynı şekilde değer vermiyor. Programdaki ana yardımcı programın üzerinde çalışmanın zevk olduğunu varsayalım. Bu hiç kimseye fayda sağlamayabilir ve iyileştirmeler için kimse para ödemez (programlayıcıdan başka kullanıcılar olsa bile), ancak herhangi bir şekilde iyileştirmeyi haklı kılmak için yeterlidir.
Kaz

Çok iyi yazılmış cevabınıza eklemek için iki yararlı kelime - "Spekülatif Yatırım" - bunu yaparsınız çünkü gelecekte bir geri dönüş olacağını söylüyorsunuz.
mattnz

@ matttnz - söylediklerin doğru, kimsenin dönüşü olmayan bir şey yapmaması, dönüş iyi bir kahkaha olsa bile. Kişisel projelerimin neredeyse tamamı mizah için yapıldı. Neredeyse hepsi gereksinimlerini haklı çıkarmak için yeterli. Hiçbiri bırakmamı sağlamadı.
Kai Qing,

Kesinlikle, herkes. İlk önce, bu programı yazmaktan ne çıkarmayı umduğumuzu veya bunu yapmaya devam ettiğimizi belirleriz. Bir şey "eğlenceli geçen zaman geçiriyor" olabilirdi. Ancak o zaman bile, şunu düşünebiliriz: böyle bir programda böyle bir şey üzerinde çalışıyor ve böyle bir programda en eğlenceli olanı elde etmek için en iyi yol, ya da başka bir şeye zaman ayırıyoruz.
Kaz

3

Kodunuzun "uygun" olmasını umursamamanız gerektiğinde

  • İş hedefine cevap vermeyi başarırsanız ve düşük ek yük ile zaman içinde saklayın. (kullanıcılar size ödeme yapmadan önce kaynağı göremezler)
  • MVP / POC - Uygun kod yazmak, para kazanmayı bilmeden önce bir konsepte zaman harcamak anlamına gelirse (yıl ve 45 milyon dolar harcamanız durumunda, uygulamanızı yazmak ve dükkanını kapatmak zorunda kalmazsınız; uygun koddu)
  • Hayatı tehdit edici bir durum yaşarken (örneğin, demir adam prototipi 1 kirli bir kesimdi, ama onu mağaradan kurtardı mı?)
  • veya eğer doğru kodun nasıl yazılacağını bilmiyorsanız (eğer birisi bir yaşam kuralını uygun olmayan bir şekilde yazmayı başarırsa, bugünün işsizliğinde, evsizlerden daha kötü bir kod yazmayı diyorum)
  • Sadece ne yaptığını biliyorsan ya da onun gibi davranıp ondan kurtulabileceğini düşünüyorsun

Uygun kod ne zaman yazılmalı

  • Önemli bir ticari etkiye sahip olacaksa, örneğin performans geliri etkiler veya satışları önler
  • Kodun korunmasının bir işletme sorunu haline gelmesi o kadar uygun değilse (yüksek bakım maliyetleri)
  • Eğer büyük bir açık kaynaklı projede çalışan tanınmış bir programcıysanız
  • Aynı zamanda kurum içi bir kütüphaneye dünyaya katkıda bulunan büyük bir şirket için aynı
  • Gelecekteki görüşmelerde çalışmanızı bir portföy olarak göstermek istiyorsanız

1
Ne yazık ki, pek çok insanın bilmemesi için kutsandığı doğru listeye aldırış etmemekte bir tane daha var: Bir müşteri bakımınıza eski bir sistemi kustuğunda ve bir hafta içinde yapılması gerektiğini söylediğinde. Bazen zaman ve / veya bütçe uygun kodlamaya kendilerini borç vermez ve projeye olan ilginiz bir ticari işlemden daha fazla bir zarafettir. Örneğin, kodları büyük ölçüde kullanımdan kaldırılmış yöntemler kullanıyorsa ancak bazı yamalara ihtiyaç duyuyorsa (web senaryosunda konuşma yapıyorsa). Her şeyi tamir edemiyorum. Kirlenmeli.
Kai Qing,

"Kodun korunmasının bir işletme sorunu haline gelmesi o kadar uygun değilse (yüksek bakım maliyetleri)." Bu eşik aslında tecrübesiz geliştiricilerin inanmaya yatkın olduğundan çok daha düşüktür. Sağlam kod yazmak genellikle günler veya aylar değil saatler içinde kendini geri öder.
PeterAllenWebb

2

Performans sizin asıl endişeniz mi? Büyütmeye çalıştığın şey bu mu?

Öyleyse, öğrenilmesi gereken temel bir ders vardır ve yaparsanız, birkaç kişiden biri olacaksınız.

Daha hızlı yapmak için ne yapmanız gerektiğini "düşünmeye" çalışmayın - bu tahmin edilir. “Bu konteyner sınıfını mı kullanmalıyım?” Veya “ lengthDöngü durumuna mı koymalıyım ?” Hastanın sorgulanması veya incelenmesi.

Bu tahmin ediliyor. Herkes yapar, ama işe yaramaz.

Bunun yerine, programın sorununun ne olduğunu size söylemesine izin verin. İşte detaylı bir örnek.

Farkı görüyor musun?


Tek endişem, testlerimde, belirtilen senaryo için uygun olmayan ve uygun veri tiplerinin kullanımı arasında performans farkları olmadığını fark etmemdir. Önerinizde olduğu gibi, bir fark yaratmanın çok az olup olmadığını görmek için sınıfa daha fazla veri yükledim. Sonunda, her ikisi de eşit olarak gerçekleştirildi. Verilmiş, sadece temel bir RPG tipi oyun yapıyorum. Bankacılık yazılımı veya karmaşık bir şey gibi değil. Ancak, bu işin her zaman bu kadar uygun olmamasının daha iyi olacağını merak etti.
Kai Qing,

Performans sizin endişeniz olduğundan, önyargılı sorunuzun bir fark yaratıp yaratmadığını sormamak için programa neye bakmanız gerektiğini sormalısınız. Lütfen bu bağlantıya tıklayın ve ne diyorsa yapın. Programın gerçekte neye zaman harcadığını ve bu programın nasıl daha hızlı yapılacağını size söyleyecektir.
Mike Dunlavey

Performans, sorgulama prosedürünün temelini oluşturdu, mutlaka bir endişe değil. Söylemeye göre kıyaslama yapmak istemiyorum. Sadece verimsiz kodun performans farkı yaratmadığını gözlemlemek. Programın ne kadar verimli ya da verimsiz olduğu kullanıcıya şeffaftır, bu nedenle bu tür profil oluşturma konusundaki endişeleri alakasız kılar. Verilen, ilk etapta kıyaslama için bazı endişelerim vardı, ama çoğunlukla merak oldu. Ürün bittiğinde ve belirgin şekilde yavaş ise, evet, bir profilleyici mantıklı. Bağlantı için teşekkürler
Kai Qing

2

Sorunuz "işi bitirdiği sürece umrumda değil mi?"

Cevabım, "Koduna ne olacağını asla bilemezsin." "Hey, kullanıcının sorununa dikkat çekmek için bu çabuk şeyi yazmama izin verin" olarak başlayan birçok projede yer aldım. Bir yere yaz, bir daha asla düşünme.

Bir keresinde, yazdığım şey, "ah, şimdi kullanıcının tüm departmanı bu kodu kullanmak istiyor" demişti, ki bu benim arkamdan dönmeden önce, tüm şirket bu kodu kullanıyor ve şimdi bir denetimden geçeceğini kanıtlamam gerekiyor ve yarın için planlanmış 20 kişilik bir kod incelemesi var ve bazı başkan yardımcıları müşterilerimize zaten sattı. ”

"Sadece boş zamanlarınızda bir android oyun yazıyorsunuz" olduğunun farkındayım, ancak bu oyunun başlayıp kazanma şansı olup olmayacağını asla bilemezsiniz. Daha da kötüsü, bu oyun insanların telefonlarını çökertmeye devam ettiği için rezil olma yolunda sizin için bir bilet olabilir. Birinin çocukları, oyunlarını telefonlarında oynamayı bırakamadıkları için iş teklifi alan kişi olmak ister misiniz, yoksa bunun gibi mesaj panolarında hakaret edilen kişi olmak ister misiniz?


1

Cevap, asla önemli olmadığı ve her zaman önemli olduğu.

Asla önemli değil çünkü programlama, doğru ya da değil, kendi başına bir amaç değil, bir hedefe ulaşmak için bir yoldur. Bu amaca uygun olan "uygun" bir programlama olmadan ulaşılırsa (iş perspektifinden, amaç hiçbir programlama olmadan başarılabilirse genellikle en iyisidir).

Her zaman önemlidir, çünkü doğru programlama, hedeflerinize ulaşmada size yardımcı olacak bir araçtır. Bir şeyleri yapmanın doğru yolu, basitçe başka bir şekilde yapmanın uzun vadede kurtardığından daha fazla acıya yol açtığını kabul etmektir.

Bunu ne zaman görmezden geleceğiniz sorusuna cevap verir - başka bir yolun uzun vadede daha kolay olacağından emin olduğunuzda (muhtemelen uzun vadede olmayacak).

Tek kullanımlık araçlar tipik olarak olabildiğince hızlı ve kirli yapılır; hata kontrolü veya başka bir doğrulama yapıldığında çok az istisna, istisnalar günlüğü, küçük değişiklikler içeren cut-n-paste kodu veya genel işlevler yerine hiçbir değişiklik yapılmaz. .

Dikkat edin: bazen bu hızlı ve kirli uygulamalar kendi hayatlarına katılırlar, bu da tüm kısa yollardan sizi ...


1
"asla" ve "daima" birbirlerini iptal ederler. Cevabınızı hem iyi hem de kötü yapmak.
Tulains Córdova

@ user1598390: birbirlerini iptal etmeleri önemliydi. Dogmayı iptal et, ve işe yaramaz göründüğü gibi bırak. Ve yanlış anlayacaksın ve bunu öğreneceksin.
jmoreno

Seninle aynı fikirdeyim demek istiyorum ama böyle aşırı uçlara götürmezdim. Testlerden ya da hata ayıklamadan kaçan birisinin sık sık tükürüldüğünü sanmıyorum. Sadece optimize edilmemesi ve mükemmel tasarlanması, performans ve istikrarın kısa yoldan etkilenmemesi durumunda daha az ürün yapmasını sağlamaz. Nihayetinde benim açımdan bu yüzden neden herkesin satırda olmayan kodlama örnekleri üzerinde böyle bir kıyameti yarattığını merak ediyorum. Stackoverflow'ta çok olur.
Kai Qing,

@KaiQing: Test etme ve hata ayıklama elbette gerçekleşir, ancak genellikle şu anda olanlarla sınırlıdır - örneğin, işlem UTF kodlaması olan bir dosyada başarısız olursa ve üzerinde çalıştığınız dosyaların hiçbiri yoksa Bunu test etmiyorsun. Bir performans problemi tespit edildiğinde optimizasyon yapılmalıdır. Neden SO üzerinde kodlama çizgisinin tepesinde olmayan bir pisliğe gelince - bunun site hedeflerinin bir işlevi olduğunu düşünüyorum. Kalıcı kaynak olmayı hedefler, cevaplarda kod (ve hatta sorular) böylece başkalarının kullandığı bir şablon olacak gibi gözükür.
jmoreno

1

Veya bunun gibi önemsiz bir şeyi bile:

for(int i = 0; i < items.length;i ++) {
     // do something 
}

Her yinelemede item.length değerini değerlendirdiğini biliyorum. Ancak, öğelerin asla 15 ila 20 öğeden fazla olmayacağını da biliyorum. Öyleyse, her yinelemede items.length değerlendirir miyim?

Aslında son kodda, derleyici onu optimize ettiğinden items.length her tekrarda değerlendirilmez. Olmasa bile, uzunluk dizi nesnesindeki ortak alandır; erişme maliyeti yok.

Öyleyse sana sorumu şudur: Uygun olmadığında artık bir eşik var mı? Söylemesi tamam mı - "işi bitirdiği sürece umrumda değil mi?"

Bu gerçekten son ürününüzden ne beklediğinize bağlı; Ortalama bir ürün ile harika bir ürün arasındaki fark ayrıntılara bağlıdır. Tata Nano gibi bir araba ve Mercedes S gibi bir araba "işi halleder" - sizi bir yerden diğerine götürür. Fark, ayrıntılara dayanıyor: motor gücü, konfor, güvenlik ve diğerleri. Yazılım ürünleri de dahil olmak üzere mevcut herhangi bir ürünle aynıdır; Mesela MySQL ve Postgre ücretsiz olduğu için neden Oracle, IBM veya Microsoft için Oracle veritabanı, DB2 veya MS SQL Server için para ödeyecek?

Ayrıntılara dikkat etmek ve yüksek kaliteli bir ürün elde etmek istiyorsanız, bu konulara (ve diğer şeyler hakkında açıkçası) dikkat etmelisiniz.


Yine de buna katıldığımı sanmıyorum. Yazımda performansta bir fark olmadığını söylüyorum. Bu, ortalama veya harika bir ürün olmadığını, eksikliklerine rağmen eşit bir dengenin olmadığını gösterir. Ancak ifadenize katılıyorum, ancak çok önemli bir proje olsa, karşılaştırma olarak kullanıyorduk. Ancak soyut olarak, genel gözlem şu anonim projede, optimize edilmiş bir ile eşit derecede verimsiz bir sınıfın gerçekleştiği yönündedir. Öyleyse, bu konuda gevşek bir tutum benimsemeye ya da her seferinde mükemmellik için tartışmaya var mı?
Kai Qing,

@Kai Qing Tek bir sınıf fark yaratmaz (ya da yapmamalı). Dedim ki: Ürününüzün yüksek kaliteli bir ürün olmasını düşünüyorsanız, ayrıntılara dikkat edin (olası bir küçük optimizasyon veya dikkatli bir tasarım anlamına gelse bile); Öte yandan, istediğiniz tek şey işlevsel bir sistem ise, muhtemelen küçük ayrıntılara fazla dikkat etmemelisiniz.
m3th0dman

Evet, haklısın, tasarımına sadece küçük bir özen gösterilse bile fark yaratmamalı. Ancak amacına bağlı olarak veya genel olarak amacı zaman içinde dönüşüp, olması amaçlanmayan bir şey haline geldiğinde fark yaratabilir. Bunu daha önce gördüm, ama ben sadece burada bir teğet olacağım. Dürüst olmak gerekirse, bir ürün işlevsel olmaktan daha fazlası olmadan yüksek kalitede olabilir.
Kai Qing,

1

Evde kendiniz için programlama yapıyorsanız, belki birkaç köşeyi kesebilirsiniz; ve bir şeyler denemek ve denemek için bu tamamen haklı.

Ancak kendine iyi bak. Verdiğiniz örnekte o köşeyi kesmeye hiç gerek yok ve dikkatli olmalısınız. Bu bir eğilim başlatabilir ve evde yaptığınız kötü alışkanlıklar, işteki kodunuza sürünebilir. Evde iyi alışkanlıklar geliştirmek ve bunları geliştirmek ve iş yerindeki kodunuza uymalarını sağlamak çok daha iyidir. Size yardımcı olacak ve diğerlerine yardımcı olacaktır.

Yaptığınız herhangi bir programlama ve programlama hakkında yaptığınız herhangi bir düşünme egzersizdir. Bunu değerli kıl, aksi halde geri gelip seni ısırır.

Yine de iyi tarafa bak. Bunu sordun, o yüzden belki de benim yaptığım şeyin farkındasın.


1
Evet, farkındayım ama sorunun asıl amacı, daha küçük, içerdiği bağlamda, bu kadar uygun olmanın bir sebebi olmadığı görünüyor. Yıllar süren programlamamda, bizi ısırmaya çok fazla sürünen bir şey olmadı. Çok uygun olduğumuzdan şüpheliyim. Dillerin ve beklentilerin normal yazılım gibi değiştiğini düşünüyorum. Bazıları diğerlerinden daha az. Ancak sonunda bir projenin verimsizliği ancak proje geçmişte olduğunda ve artık gerekli olmadığında gerçekleştirilebilir. Bu kadar sert olmanın baş ağrısını haklılaştırmak zorlaşıyor.
Kai Qing

Bu adil bir nokta. Bugünün kuralları yarının kısıtlamaları olabilir. Ne yapacağımı söylemekten hoşlanmıyorum, ama daha önce gidip zor yoldan öğrenen başkalarına saygı duyuyorum. Bazen hangi kuralların işe yaradığını ve şu anda satış tarihini geçmiş olanı bulmak ilginç olabilir.
Daniel Hollinrake

1

Bir mobilya üreticisi kalitenin çok önemli olmadığı veya kalitenin fark edilmeyeceği yerlerde kullanılacak bir mobilya parçası yapıyorsa, kesimlerini dümdüz etmeye çalışmalı mı ve parçaları bir araya getirmek için uygun bir iş yapmalı mı?

Pek çok insan yazılımı işçilik olarak görüyor. Yaptığımız şey sadece bir işlevi yerine getirmemeli, aynı zamanda güvenilir, sürdürülebilir ve sağlam olmalıdır. Böyle bir yazılımı yapmak beceri gerektirir ve bu beceri pratikten gelir.

Bu nedenle, bugün üzerinde çalıştığınız şey için bir döngü yapısı seçmek önemli olmasa da, uygun yapıları her zaman kullanmaya çabalamanız zamanla sizi daha iyi bir programcı yapacaktır.


Programlamada, kodun bakımının yapılması veya ihtiyaçların dışında yapılması gerekmediği durumlar ile karşılaştım. Ticari fuarlar veya çok özel ve tekrar kullanılması muhtemel olmayan etkinlikler için kiosk programları gibi. Kendi oyunumda - onu koruyan tek kişi benim, bu yüzden bu argüman en uygun olmayabilir. “Daha iyi programcı” konusundaki ortak bakış açısı hakkında hala şüphelerim var çünkü kılavuzlara katı bir şekilde uymak, veri tiplerinin uygunluğu ve uygun kullanımı projeyi tamamlamama konusunda cesaret kırıcı olabilir. Kod beklendiği gibi çalışıyorsa neden mükemmel?
Kai Qing,

Doğru bir şekilde geliştirdiğiniz yazılımın korunmasına gerek kalmasa bile, yazılımı kodlama becerilerinizi güçlendirir gibi yazın. Sonunda bakım kodu yazmak zorunda kaldığınızda, daha kolay bir şekilde yapabilirsiniz.
Bryan Oakley

Sürekli olarak bakım kodu yazmam gerekiyor. Sadece bazı durumlarda olması gerekmiyor. Ancak, çok fazla tecrübem var, bu yüzden genellikle köşeleri ne zaman ve nerede keseceğimi biliyorum. Bu yazının amacı, her ne amaçla olursa olsun, uygun ve özensiz eşik hakkında konuşmayı karıştırmaktı. Örneğim üzerinde hafifçe fırçalar, çünkü verilen örnek daha küçük bir uygulamada çoğunlukla zararsızdır. Ancak, banka yazılımı yazıyor olsaydım, asla bu kadar dikkatsiz olmazdım.
Kai Qing,
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.