Programlamanın 1. ilkesini ne düşünüyorsunuz?


59

Kendime “bunun ilk prensibi nedir?” Diye sormayı her zaman sevdim. sonra bir şeyin temel şeylerini öğrendim (örneğin programlama). IMO, ilham verici bir soru, sizi bir şeyin arkasındaki en önemli ilke (ler), özellikle de programlama gibi bir beceri hakkında düşünmeye zorlayabilir.

Peki, programlamanın ilk prensipleri nedir? Cevabımı biraz sonra vereceğim.


Dövüş kulübü hakkında konuşmuyoruz.
Meslek

Yanıtlar:


97
  1. KISS - Basit Aptal Tutun
  2. KURU - Kendini Tekrarlama
  3. YAGNI - Buna ihtiyacın olmayacak

KISS Basit Tutun Akıllı Olmalı. İlk kez kodunuzun büyük bir kısmını yeniden yazmanız gerekiyor, çünkü akıllı ve genişletilebilir tasarlamadıysanız, bunu kabul edersiniz. :)

8
Bence KISS "Basit Tut, Aptal!" Olmalı.
Dennis C,

Aslında bu iki nasıl hakkında bir blog yazısı üzerinde çalıştığım bir programcı kalbe en yakın ve değerli iki ve aynı zamanda onlar kadar sık oxymorons biraz vardır kere diğer karşı birini seçmek gerekir nasıl

10
Ben de YAGNI ekleyeceğim.

3
@Programmin Aracı - "Aptal" ın gereksiz olduğunu sanmıyorum. Bence "akıllı" olmak isteme eğiliminde olduğumuzu gösteriyor ve bu da gereksiz karmaşıklık olarak tezahür ediyor. Gördüğüm gibi, "aptal" ilk başta "akıllı" olduğunu düşündüğümüzü hatırlamamıza yardımcı olarak bize bu eğilimi hatırlatmaya çalışıyor.
codekaizen


29

Mümkün olduğunca tembel olun.


2
Yine, çok genel, IMO. Bu, "uygun tembelliğin ne kadar tembel olduğu, gerçekten mi?" Sorusunu akla getiriyor, çünkü açıkça "özensiz" olmak istemediğiniz bir şey.

Perl’in "Tembellik, Sabırsızlık ve Hubris" e bir referans

Yani farklı tembelliklerden mi bahsediyoruz? "Tembel" Bob'un "kodunuzu karışık olmadan önce organize

2
Çok genel. Bu benzetmeyle, tüm değişkenler ve fonksiyonlar 1 harf olacaktır çünkü anlamlı bir şey yazmak için 'çok tembeldim'. Bunu da sürdürmem gerektiğini varsayarsak, belki de haklısın çünkü mümkün olduğunca kolay bir şekilde idare edilebilecektim.
Kyle Ballard

3
@Kyle: Evet, mesele bu. “Gerçek tembellik”, şimdi olduğu gibi gelecekte de kendiniz için işleri kolaylaştırıyor. Düzgün şeyler yapmak ile aynı olduğu ortaya çıkıyor. Şimdi daha az çalışırsanız, ancak daha sonra çalışırsanız, "olabildiğince tembel" olamazsınız :) :)

23

Zen, bölüm I: Programlama sadece yol, yol değil.

Programlama sadece bir bilgisayara ne yapması gerektiğini öğretme tekniğidir. Hızlı, güvenilir yazılım oluşturmada başarılı olmak, algoritmalarınızı, en iyi uygulamaları ve mutlaka Programlamanıza (dilinize) bağlı olmayan diğer şeyleri bilmek anlamına gelir.

Zen, bölüm II: Aceleniz varsa yavaşça yürüyün. Eğer gerçekten acelen varsa, yoldan git.

Aptalca geliyor, ancak sonradan (gerçekten) sizi rahatsız edebilecek ödün vermenize izin vermeyin. Bir kuralım var: Bir programın özündeyseniz, mümkün olduğu kadar kesin ve iyi olmaya çalışın. Yazılımınızdaki ana özden yöntemleri kullanıyorsanız, kodlamada daha hızlı olmaya çalışın. Bu ikisinin üzerinde kod yazıyorsanız, biraz daha özensiz bile alabilirsiniz.

Tasarım hatalarını bulmak ve / veya düzeltmek en zor olanıdır, bir sonraki adım herkesin güvendiği kısımlarda programlama hataları yapmak, daha sonra da "gerçek sunum yazılım parçaları" dır. Bir projenin sonunda bir tasarım hatasını düzeltmeniz gerekirse, ummm, bu iyi değil ... ;-)

Zen, bölüm III: Yolunu bil, Neo.

Ortamınızı, araçlarınızı ve günlük olarak güvendiğiniz şeyleri öğrenin ve sizin için çalışacak şekilde sıralayın. En iyisi, programlama "ortam" ınızı kullanıyorsanız, bunu düşünmenize bile gerek kalmayacak kadar doğal. Bir işe girmeniz gerekiyorsa, "yeni şeyler fantezi" lanse etmeyin, işinizi yapın. Bu şeyler yeni bir projede tanıtılabilir, yani o zaman hazırlayıp kullanmak için zamanınız olduğunda.


Ah, ve sonra tekrar: Zen topraklarına inerken programlama hakkında konuşurdum :)

Bölüm III - yapmak için para almadığınız sürece "fantezi yeni şeyler" eklemeyin!
Jason,

Matrix referansı için +1. Ben iyi biri için

19

ÖPÜCÜK (basit, salak).

Gerçekten de "Basit olanı nasıl tanımlarsın?" Ve ayrıca "Eldeki görev için ne zaman çok basit bir şey var?" Bu nedenle, yalnızca ilk programlama ilkesini bilerek iyi bir programcı olamazsınız.


Bence bu çok genel bir kural. “Gerçekten” nasıl “basit” olarak tanımlanıyorsunuz? Sorusu soruluyor.

3
ve eğer aptalsan, basit olup olmadığını nasıl bilebilirsin?
Steven A. Lowe

Bu iyi bir, Steven :)

1
“Bu yüzden, sadece ilk programlama ilkesini bilerek iyi bir programcı olamazsınız” - bayıldım.

1
@Dima: haklısın, demek istediğim, kalite ve sadeliğin (en azından bu durumda) her ikisi de tanımsız olduğu, ancak eğer gördüğümüz zaman, eğer gözlerimiz eğitilmişse bunu biliyoruz.
Adriano Varoli Piazza

18

Erken optimizasyon tüm kötülüklerin köküdür. - Donald Knuth


Uygulamada veya tasarımda olsun.

16

Tekerleği yeniden icat etmeyin.


Tekerleği yeniden icat edip etmemek konusundaki soruya doğru cevap her zaman “bağlıdır”. Yani "tekerleği yeniden icat etmeyin" sadece şimdiye kadar gider. Çoğu zaman iyi bir buluşsal olarak hizmet verebilir, ancak her zaman değil.

5
Bazı "tekerlekler" yeniden icat edilmeli.

Bunu Dunlop'a söyle. Pnömatik lastiği icat etti. Onun için olmasaydı, tekerleği yeniden icat etseydik, oldukça inişli çıkışlı bir yolculuk yapardık.
Kibbee

3
Şunun

16

Önce sorunu anlayın!


Ah, nihayet bununla biri. Öpebilirsin yagni, istediğini kurut. Bir şey için hiçbir şey programlaman işe yaramaz.

@ e-satis: Yeap, buna ilk cevap verdiğimde düşündüğüm şey. Tüm cevaplar için kaydırıyorum ve şaşırtıcı bir şekilde daha önce hiç kimseye gönderilmemiş.
OscarRyz

İyi cevap. Programcılar bir problemin gereklerini tam olarak anlamadıklarında saatler ve saatler boşa harcanır.
Steve Wortham

Sorun şudur: Sorunu anladığınızı nasıl biliyorsunuz?
CamelCamelCamel

13

YAGNI - İhtiyacın olmayacak . YAGNI'nin ardındaki fikir, olası potansiyel özellikler için değil gereksinimleriniz için program yapmaktır. Öncelik, programlamaya ihtiyacınız olan şeyleri koruyarak (diğer şeylerin yanı sıra) kod şişirmeyi kesecek, karmaşıklığı azaltacak, özellik sürünmesini önleyeceksiniz ve geleceği.

Modüler tasarıma paralel olarak çalıştığını düşünüyorum: Gelecekteki özellikler mevcut kodu yeniden tasarlamadan artırılabilir.


12

Ne zaman programlanmayacağını bilmek.


Bu ne demek oluyor?

Peki bu ne zaman?

Bazen bir kullanıcının problemini farklı şekilde ele almanız gerekir - sadece bir çözümü kodlamak değil.

İnsan yargı ve karar verme her şeyin bir parçasıdır; Bazen yargılamayı otomatikleştirmeye çalışmanın bir anlamı yoktur.
S.Lott

1
Demek istediği, birçok programlama probleminin raf uygulamalarını, bileşenlerini veya kütüphanelerini satın alarak daha ucuz ve daha zamanında çözülebileceğidir.
Gordon Bell



7

Bir yazılım tasarımı yapmanın iki yolu vardır: Bir yol, o kadar basit, açık bir şekilde hiçbir eksiklik olmayacak şekilde basitleştirmektir, diğer yol ise, belirgin bir eksikliğin olmadığı kadar karmaşık hale getirmektir. İlk yöntem çok daha zor.

- Charles Antony Richard Hoare


6
  1. Sebep ve sonuç arasında ayrım yapar (bilgisayarlarla çalışmak)

  2. Gerçekle görüş arasında ayrım yapın (insanlarla çalışmak)

  3. Mümkün olduğunca basit, ancak daha basit (tasarım)


5

Programlama bir amaç değil bir araçtır. Veya belki de, "Olması gerektiği anlamına gelmez."


5
  1. Programın neden birisini mutlu edeceğini anlayın (aksi halde neden dışarıdaki diğer çocuklarla oynamıyorsunuz?). (Bu kişi siz olabilirsiniz.)
  2. İhtiyaç duyulan tüm karmaşıklığı yakalayan ve artık olmayan alanının kavramsal bir modelini geliştirin .
  3. Gerekli tüm karmaşıklığı yakalayan ve artık olmayan yazılım mimarisinin kavramsal bir modelini geliştirin .
  4. Acımasızca diğer tüm karmaşıklığı uzak tutun.

iyi dedin! daha fazla kabul edemedim
Antony

5

Bence, en önemli ilkedir karmaşıklık azalma ile iyi soyutlamaların yaratılması .

Bu içerir

  • Çözülecek problemi anlamak,
  • bunun için uygun bir çözüm tasarlama ve
  • onu uygulamak
  • tercihen, kodu anlaşılır ve sürdürülebilir kılacak şekilde,

fakat ayrıca, kaçınılmaz ek karmaşıklık yaratılmasını önlemek için soyutlamalar oluşturmayı bırakmanın ve uygulama teknolojilerinin temel özelliklerine (örneğin veritabanı sistemi, programlama dili) inmenin nedeninin belirlenmesi.


4

Akılda bir izleyici ile program. Bununla yazdığınız hiçbir şeyin sizin veya bir başkası tarafından okunmayacağını ve korunmayacağını varsaymayın.

Bunun bir sonucu: Değişkenlerinizi, işlevlerinizi ve sınıflarınızı iyi bir şekilde adlandırarak çözmeye çalıştığınız sorunu anladığınızı kanıtlayın!


4

Testte gösterene kadar işe yaramıyor


6
Bu doğru değil, çalışan ve test edilmeyen tonlarca kod yazdım! : D

1
"Test etmedim, sadece doğru olduğunu kanıtladım" :)
Daniel Daranas

4

Önce düşün, sonra kodla.

Düşündüğün kadar akıllı değilsin. Sorular sor. Eşlerinize değer vermeyi öğrenin.

Hata ayıklama yaparken, ilk cevap neredeyse her zaman yanlış olacaktır.

Dışarı atma niyetiyle yazdığınız kod çok daha büyük işlemlerin temel taşı olma eğilimindedir. Asla yanlış yazılmış bir şey bırakmayın.


3

Herhangi bir problem, başka bir dolaylı katmanla çözülebilir.


Aslında, çok fazla indirmeye sahip olmak, tanımlanmayı ve çözülmeyi bekleyen bir konudur. Yani ..

çözüldü ... başka bir dolaylı katmanla! =)
Erik Forbes

İşin garibi, doğru. Bahar'a bakın ...


3

İlke: Yazılım Bilgi Toplamadır .

Sonuçlar: Tamamı Soyutlama üzerine kurulan birçok bilgi sunumu tekniği . Bize katmanları, katmanları, kapsülleme, endişelerin ayrılmasını sağlar.

Prosedür temsili için birçok teknik, hepsi Sıra , Seçim , Tekrar üzerine kuruludur .



3

Her zaman kodunu, bakımını yapacak kişi nerede yaşadığını bilen bir psikotik seri katilmiş gibi yaz.

Ayrıca, programlama hakkında her şeyi bildiğinizi asla düşünmeyin, öğrenmeye devam edin


2

Dijital elektronikler üzerinde çalışarak programlamaya başladım, sanırım benim için temel mantık kapıları (ve, veya, xor, ima etmez) programlamanın ilk prensipleriydi.



2

Çöp - Çöp Çıktı Veriler kötü ise kullanıcı arayüzünüzün ne kadar güzel olduğu önemli değildir.


2

KURU, hemen hemen her şey ondan doğuyor. KISS, yazılım zarafetini delilik seviyelerine kadar takip etmediğinizden emin olmak için dengeleme eyleminin diğer ucudur.


2

Çıktı ile başlayın ve geriye doğru çalışın.

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.