Daha az kod nasıl yazılır [kapalı]


12

Geliştirmek istediğim bir kalite daha özlü kod yazmaktır. Daha özlü yazarak, en azından benim düşünceme göre, koda hata ekleme fırsatı daha küçük. Diğerleri için kodu okumak daha kolaydır.

Benim sorum şu ki, sadece deneyim ile gelen bir şey mi yoksa bu kaliteyi geliştirmek için açıkça yapabileceğiniz bir şey mi?


6
Eğilimi çizin ve x eksenini

1
Makrolara, makrolara, makrolara zorunlu işaretçi: paulgraham.com/avg.html
vemv

Anlamsız programlama stilini benimseyerek çok kısa ve okunabilir kodlar üretebilirsiniz. Anlamsız programlama sadece fonksiyonlar uygulanarak programlanır. Haritadan, filtre, concat gibi yüksek dereceden fonksiyonların geniş faydası tarafından küçültebilir / kat, bunu tanıyabilir / iğne / vb [listesi catamorphism diğer isimlerle insert]
dan_waterworth

2
-1: Bu kılık değiştirmiş olarak kendini tebrik ediyor gibi görünüyor.
Jim G.Mar

Henüz okunabilir nokta ücretsiz kodu görmedim. önemli bir kütüphanede değil.
Simon Bergot

Yanıtlar:


12

Genel olarak bunun zaman ve deneyim ile gelen bir şey olduğunu söyleyebilirim, ancak daha kısa dillerle biraz çalışırsanız, bu kaliteyi normal çalışma dillerinize geri getirdiğinizi görebilirsiniz.

Kesinlikle bir ya da iki yıl Ruby ile çalıştıktan sonra C # çok tauter aldım bulundu. Bence fonksiyonel programlamayı daha iyi anlasaydım (devam eden bir hırs) muhtemelen bundan daha fazlasını alacağım.

Ayrıca yardımcı olabilecek bazı yönergeler vardır - örneğin aynı iki satırı birden çok kez kendi yöntemlerine böldüğünüzde yazarsanız. Bu basit bir kılavuzdur, ancak çoğumuz zaman zaman suçlu olan kod satırlarını ve kesme ve yapıştırma programlarını hızla keser.

Kalıtım anlarsanız, genellikle üst sınıflara ortak işlevsellik vererek aynı kodu farklı yerlerde tekrarlamaktan tasarruf edebilirsiniz. Bu prensipte açıktır, ancak insanların pratikte sıklıkla kaçırdığı bir şey.

Daha az kod yazmak ve uygulamanızda daha az kod bulundurmak arasında bir fark olabilir - bazen kendinizi tekrarlamak zorunda kalmamak için kod üretmeyi kullanabilirsiniz, böylece sadece birkaç satır kod yazabilirsiniz, ancak bunlar sizin için bir sürü başka kod üretir - bu size çok fazla kaldıraç sağlayabilir. Rails veya Entity Framework gibi bir aracın bu açıdan ne kadar yararlı olabileceğini kavramak için ne yaptığına bakın. Gereksiniminden emin olun ve iki kez, üç kez ve sonra dört kez kendi kod üretiminizi yuvarlama hakkında düşünün - bu sizi YAGNI cehennemine inebilir.

Dilinizi, API'nızı ve araçlarınızı anlayın. Yine bu açık görünüyor ama yıllar geçtikçe, daha sonra fark ettiğim çok fazla kod yazdım. birlikte çalıştığım API ile ilgili dokümantasyon bana daha sonra saatlerce kodlama veya hata ayıklama konusunda tasarruf sağlayacaktır. Benzer şekilde, birlikte çalıştığınız çoğu platformda bir tane vardır - bekledikleri şekilde çalışmayı öğrenin ve hayatınız çok daha kolay olacaktır. Çalıştığınız platform için en az direnç yönünü bulmak için biraz zaman ayırın ve işleri çok daha iyi halledeceksiniz.

Bir şey yapmanın daha iyi bir yolu olup olmadığını merak ediyorsanız, muhtemelen vardır ve her zaman nasıl daha iyi yapılacağını bulmaya değer.


Evet, bence, tek hatlı özel fonksiyonların tek nedeni KURU prensibi

Bu işlevlerden daha fazlasına sahip olduğumdan, sınıflarımdaki kod satırlarının sayısı belirgin bir şekilde düştü ve çok daha temiz ve net görünüyor.
Glenatron

Biraz çelişki, daha fazla fonksiyon ama daha az satır gibi geliyor, ama belki de benim kodda aynı eğilimi görebilirsiniz .. Bunu düşünmek zorunda ....

Bu yönergelere uyulabilecek başka bir şey var mı? Benim gibi genç bir geliştiriciye faydalı olabilirler.
stuartmclark

@stuartmclark - Birkaç tane daha ekledim, ancak başka bir yerde duymayacağınız çok fazla şey olduğundan şüpheleniyorum.
glenatron

16

Daha az kod yazmanın harika bir yolu , tekerleği yeniden icat etmekten kaçınmaya çalışmak ve mevcut olduğunda mevcut yazılım bileşenlerini kullanmaktır.

İnsanların neden kendi ORM'lerini veya kendi günlük motorlarını veya kendi UI bileşenlerini veya kendi her şeyi yaptığını sorduğumda aldığım yaygın bir cevap:

Ama bizim daha iyi

Bu ifadenin çoğu durumda doğru olduğuna inanıyorum, ancak çoğu durumda yatırım getirisi üzerindeki olumsuz etki çok yüksek. Annen en iyi yemekleri yapar mı? Ama annenden eve gelip her gün hazırlamasını isteyemezsin.

Bu yüzden geliştiricilerin seçimlerinin finansal etkisine ilgi duymaları gerektiğini düşünüyorum. Onlardan bazıları:

  • Bileşeni oluşturmak için ekstra çalışma gerekir
  • Yeni gelenlerin öğrenmesi için ekstra iş
  • Bunu korumak için büyük ekstra iş

Bu bileşen satıcılarının, kendiniz oluşturmak, bakımını yapmak ve geliştirmek için ödeyeceğiniz tutarın küçük bir kısmı için sizin için çalışan genişletilmiş ekibiniz olduğunu düşünmek istiyorum.

Ego memnuniyetimizi en üst düzeye çıkarmaya çalışmak yerine tüm şirket için maksimum yatırım getirisi elde etmek daha iyidir;) Şirketiniz ne kadar çok para alırsa, çalışma koşullarınız ve maaşınız o kadar artacaktır.


1
Ben de bundan suçluyum, birkaç yıl önce kendi dosyayolu sınıfımı Win, Unix ve Apples formatı arasında dosyayolu dönüştürebileceğini yazdım. Sadece pencereler kullandık. Belki de bu bir kuraldır, asla geleceğe dönük şeyler

Bazen belirli bir çerçeve hakkında bilgi sahibi olmamanızdan kaynaklanır. .NET ile çalışmaya başladığımda kendi yol sınıfımı da yazdım, sonra :-)

Annemin spagetti'sini tercih ettim, ama kavanozdaki şeyler yeterince iyiydi. Bu gerçekten gereksinimlerden sorumlu olanlarla sınırlıdır. % 85'lik çözüme razı olmazlarsa, başka seçeneğiniz yoktur.
JeffO

Annem spagetti seninkini daha iyi yapıyor.

1
+ internetin "tekerleği yeniden icat etmekten kaçınması". Geliştirdiğim en önemli becerilerden biri, birinin muhtemelen çözmüş olduğu sorunları tespit edebilmektir. Muhtemelen göz ardı edeceğim bir grup saçak kasayı ele alarak kendi başıma ürettiğimden neredeyse her zaman bana daha iyi bir çözüm vermekle kalmaz, aynı zamanda çözmem için para aldığım sorunlar üzerinde çalışmam için beni serbest bırakır .
BlairHippo

5

Benim düşünceme göre, daha az kod yazmak çeşitli şekillerde yapılabilir:

  • Buna ihtiyacın olmayacak . Henüz ihtiyacınız olmayan bir şeyi kodlamayın. Yalnızca gereksinimlerin durumunu kodlayın. Bu şekilde, yazmak için gereken kodu azaltacağız.

  • Kendinizi Tekrar Etmeyin . CMS, çerçeve veya üçüncü taraf kitaplığı kullanmanın KURU ilkesini uygulamanın bir yolu olduğuna inanıyorum.

  • Soyutlama . Son olarak, soyutlama programlama da kodu çok azaltabilir. Kodu soyutlayarak kodu tekrar kullanma şansı artacaktır çünkü kopyalığı azaltır.


3

Bir programlama dili anlayışının ötesinde, bir insanın bir problemi anlaması ve iyi bir çözüm bulmasının onunla çok ilgisi olduğunu düşünüyorum. Çoğu soruna birçok çözüm var, hepsi optimal değil. Farklı yollardan A şehrinden B şehrine gidebilirsiniz - biri iki saat sürebilir, diğeri iki kez sürebilir. Programlamada aynı fikir. Bir dili çok iyi biliyor olabilirsiniz, ancak iki sayfa kod alan bir çözüm bulabilirken, başka biri kod boyutunun yarısının çeyreğinde uygulanabilecek bir çözüm bulabilir. Bunu yıllar boyunca çok gördüm.

Sorunu iyi anladığınızdan emin olun. Analiz edin, çözüm (ler) ile gelin, artıları ve eksileri tartın (elbette "s" ile çözümler sorundan soruna büyük ölçüde değişecektir - sadece burada konuşulur.) Sonra seçilen çözümün uygulanması var. dili (ve varsa çerçeveyi) anlamanızın burada devreye gireceği yerdir.


Çözümü hazırlamak ve çözümü programlamak için ne kadar zaman harcıyorsunuz?

Elbette soruna bağlı olarak değişir. Burada günler konuşmuyorum. Kodlamadan önce düşünmek için biraz zaman harcamak genellikle işe yarar. Bu, uzun vadede iyi ve ideal bir şekilde bakım yapılabilen bir çözüm bulmasıyla da harcanan zamanla ilgili değildir. Ben berbat çözümler için berbat kod üretebilirim - herkes bunu yapabilir.
MetalMikester

1

Tüm programlama sanatının sadece buna geldiği söylenebilir.

Netlik ve özlüğe geleneksel vurgu yapan dilleri (ör. Haskell, Scheme, Python), hatta Faktör ve diğer birleşik diller gibi ters paradigmaları inceleyebilirsiniz , ancak nihayetinde, çalışmayı seçebileceğiniz her şey daha kısa yazmanıza yardımcı olacaktır. , daha az yedekli kod.


1

Diğer tüm sıkıntılar gibi, bir sorun yaşadığınızı kabul etmiyorsanız, bir çözüm aramayacaksınız. Daha az kodun neye benzediğini öğrendiğinizde deneyim bir faktör olmaya başlar. Kodunuzu yeniden ziyaret ettiğinizde, kodu veya refactor'u daha az koda yeniden kullanıp kullanamayacağınızı belirlemek için harika bir zamandır. Microsoft, Windows 2000 ile yazdırma hızını iki kez biriktirmeyerek geliştirebildi (Microsoft çalışanlarından ücretsiz demolarından alıntılar).


Bu yüzden kodumu tekrar ziyaret etmeli ve nasıl daha az kod yazacağını veya Piet'in dediği gibi ters kodu nasıl ele alacağımı yeniden düzenleyeceğim

2
@Gorgen - Zamanınız varsa veya bir saat önce yazdığınız herhangi bir koda bakabilirsiniz. Bazen SO'da bir örnek tespit etmek, geri dönüp kendi kodunuzda bazı değişiklikler yapmanızı isteyebilir.
JeffO

0
  1. Eski uzun soluklu kodun geri dön,
  2. sürüm kontrolü altına almak,
  3. yeni hatalar getirmemek için makul bir umudun olması için bazı testler yazın,
  4. yeniden yazmak.

Reklam libitumunu tekrarlayın. Ve cehenneme hoş geldin.


-2

Test Odaklı geliştirme yardımcı olabilir. Bunu kullanarak, yalnızca o testi geçmek için gereken minimum kodu yazarsınız.


Bu bağlamda, minimum uzunluk değil, özellikler anlamındadır.
vemv
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.