Kişi gerçek kodlamadan önce sahte kod kullanmalı mıdır?


22

Sahte kod, görevleri dil destekli bir şekilde anlamamıza yardımcı olur. Geliştirme yaşam döngüsünün bir parçası olarak sahte kod oluşturmaya sahip olmak en iyi yöntem mi yoksa önerilen bir yaklaşım mı? Örneğin:

  • Kodlama görevlerini tanımlayın ve bölün
  • Sahte kod yaz
  • Onay almasını [PL veya TL]
  • Sözde kodu temel alan kodlama başlatmak

Bu önerilen bir yaklaşım mı? Endüstride uygulanmakta mıdır?


Sahte kodunuzu onaylayan "PL" ve "TL" nedir?
Andy Lester

@Andy PL / TL: Sahte kodu yazan geliştirici için Proje Lideri veya Takım Lideri.
Vimal Raj

Yanıtlar:


17

Kodlamadan önce sözde kod yazmak, plan yapmadan kodlamaktan kesinlikle daha iyidir, ancak en iyi uygulama olmaktan uzaktır. Test odaklı geliştirme bir gelişmedir.

Daha da iyisi, sorunlu alanı analiz etmek ve kullanıcı hikayeleri, kullanım senaryoları, CRC kartları, diyagram oluşturma gibi teknikleri kullanarak Cleanroom, RUP, Lean, Kanban, Agile, vb.

Sorunun doğasını ve çözümü uygulamak için kullandığınız bileşenleri iyice anlamak, en iyi uygulamaların arkasındaki ilkedir.


Teste Dayalı Geliştirme, kodda daha az dikişe neden olur.

@ Thorbjørn, TDD dikişlerin nereye gitmesi gerektiğini dikte etmiyor (fakat sonra yine de yalancı kod da yok). Duyarlı bir arayüze sahip olduklarından emin olmak için kullanılır ve kod tabanındaki takip değişiklikleri test edilir. Dikişlerin nereye gideceğini ve türünü belirlemek için sağlam tasarım ilkelerini ve tekniklerini takip etmek programcıların görevidir. Belki de, kullanıcı hikayelerini kullanmak, davaları kullanmak, CRC kartlarını, veri akış diyagramlarını, sıra diyagramlarını, modellemeyi vb.
Kullanmak

@huper, ilk önce testleri yaptığınızda arayüzlerin en iyi sonucu alması ve daha sonra yeni bir API'ye çalışan bir uygulamanın iyileştirilmesi yerine gerçek kodun kullanılması benim deneyimimdir. Bu görünür bir dikiş olacaktır.

@ Thorbjørn, bu son yorum bana mantıklı gelmiyor. "Önce testleri yaptığınızda arayüzler en iyi sonucu verir, daha sonra gerçek kod" demek TDD yanlısı gibi görünmektedir. Yeni bir projede, yeni bir API'ye güçlendirme yapmak için çalışan bir uygulama yoktur. Lütfen bana tanımı olarak anlaşamadığımız anlaşılan bir dikiş olarak ne düşündüğünü söyle.
Huperniketes

1
Sorun tartışılsa bile bu cevabı kabul ediyorum. Psödo kodlarının plan yapmadan kod yazmaktan daha iyi olduğunu kabul ediyorum. Ancak bir geliştirme firmasında bir prosedür olarak uygulanamaz, tazelerin ilk sözde kodu ilk yaklaşımı yapmasına izin vermek iyi olabilir, ancak yaşlıların kodlamaya başlamadan önce sözde kodu kullanmasını bekleyemezsiniz ...
Vimal Raj

19

Yorumları, kod yazmadan önce bir çok üst düzey sahte kod olarak kullanıyorum. Tüm problemi düşünerek, hatta yüksek düzeyde bile, kodumu önemli ölçüde geliştirdiğimi düşünüyorum.


Daha sonra kodu taramak için çok yardımcı olduğunu söylemeye gerek yok.
kubi

İlginç fikir - bunu daha önce duymamıştım. Bunu denemek zorundayım.
Michael K

8

Hayır, önce sözde kodu kullanma

Bu çok fazla yük. Mantık yazma yararlarını hiçbir faydası olmadan yapıyorsun. Bunun yerine aşağıdakilerden birini öneririm:

  1. Göndereceğiniz dilde prototip (AKA Birisini atmak için yazın )
  2. Mimari çizimleri w / kod parçacıkları varsayımları / anahtar tasarımları test etmek için
  3. Önce arayüzleri / kod yapınızı yazdığınız, ardından testlerin ardından kodu uygulayan Test Driven Development.

Bunların üçü de, sahte kodun aksine sizi doğrudan çözümünüze yönlendirir. Şahsen takım büyüklüğüne bağlı olarak 1 veya 2 tekniklerini kullanma eğilimindeyim. Küçük (örneğin 5 veya daha az kişi) ekipleri için prototip oluşturma işlemi çok iyi çalışıyor. Paralel olarak çalışan birden fazla geliştirici grubuna sahip olan daha büyük ekipler için, teknik 2'nin başlarında üretilen belgelerin iyi çalıştığını gördüm, çünkü size erken tartışmak için bir şeyler veriyor ve bileşen sınırlarını daha iyi tanımlamanıza yardımcı oluyor. TDD'nin de çok iyi çalışacağına eminim, ancak henüz bu sürece bağlı olan bir ekip üzerinde çalışmam gerekiyor.


Biri "Birini atmak için yazarsanız, iki tane atmak zorunda kalırsınız" dedi ... Ama doğru olup olmadığını bilmiyorum.

En büyük riskin, bir prototip göndermeyi bırakıp atmak için bir tane yazmanız olduğunu söyleyebilirim. Bu oldu birkaç kez kesinlikle duydum ...
glenatron

+1. IMO (2) ve (3) burada en fazla değeri verecektir.
JBRWilkinson

AMA, kağıda kod yazarsanız, nakliyesi tehlikesi olmadan atabilirsiniz ...
Michael K

"Atmak için bir tane yaz" DRY'yi ihlal ediyor.
StuperUser

7

Bence sözde kodun sadece iki geçerli amacı var:

(1) Modülerlik ve algoritma kavramlarını öğrenmesi gereken, ancak bir programlama dilinde henüz akıcı olmayan öğrencileri programlamak için.

(2) Teknik olmayan bir kişiye veya bir beyaz tahta türü toplantıda uygunluk uğruna nasıl çalışacağını bildirmek.


5

Sahte kod önerilen bir yaklaşım mıdır? Yeni başlayanlar için evet diyorum. Yeni programcının, bir dilin tam olarak sözdizimi hakkında endişe duymadan bir koda nasıl çevrileceğini öğrenmesine yardımcı olur. Bu düşünce sürecini şekillendirir ve faydalı alışkanlıkların kökleşmesine yardımcı olabilir (ve benim de kötü alışkanlıklar olduğunu düşünüyorum). Bu yüzden okullarda bu kadar çok kullanılıyor.

Endüstride uygulanmakta mıdır? Benim tecrübeme göre, hayır. Kimse projeyi dokümantasyon (şartnameler, şartnameler, hikaye panoları, kullanım senaryoları veya diğer her ne kullanıyorsa) ile gerçek kod arasında zorlama zamanı bulamaz. Genel olarak, yeşil ışığın kodlanmasından önce soruna yeterli düşünce getirildiği varsayılmaktadır. Bu noktada, projeyi kodlamak, bir tasarım hazırlığı daha eklemek daha önemlidir.


3

Sözde kodu kesinlikle tavsiye ederim. Ne yapacağınızı açıklığa kavuşturmanıza ve unutmuş olabileceğiniz eşyaları ya da olası sorunları tanımlamanıza yardımcı olur. Hala planlama aşamasındayken kodunuzu düzeltmek çok daha kolay / daha hızlıdır, daha sonra kodunun büyük kısmını kodlayana kadar bekleyin.


3

Sözde kod, dili bilmiyorsanız veya zihinsel bağlamı değiştirmeniz gerekirse faydalı olabilir. Nadiren sözde kod yazdığımda kağıt üzerinde. Bazen sadece klavyenizden ellerinizi çekmek ve kağıda yazı yazmak zihinsel bir blok etrafında dolaşmanıza yardımcı olabilir.

Fakat gelişme sürecinin resmi bir parçası olarak? Olmaz. Bireyler için ara sıra faydalı bir araçtır. "Yazmadan önce ne yazdığınızı bilmek" için daha iyi yollar vardır.

  1. Başlamadan önce yöntemin sözleşmesini (öncesi / sonrası / değişmeyen koşullar) tanımlama
  2. TDD
  3. 1 ve 2 birlikte

Ayrıca, kod yazmaya başlamadan önce herhangi bir onay almanın, değerinden çok daha fazla sıkıntıya neden olabileceğini öneriyorum. Tasarım incelemeleri (uygulama öncesi) faydalı olabilir, ancak bireysel algoritmalardan daha yüksek seviyede olmaları gerekir.


Bir süreç olarak değil bireyler için faydalı olduğunu söylediği için + 1.
Michael K

2

Önceki cevaplara katılmayacağım ve hayır diyeceğim, ancak bir ihtirasla: psuedocode kodundan kurtulabilirsiniz, ancak titizlikle ortaya çıkan sorunları ele almak için kodunuzu yeniden düzenlemeye kararlıysanız. Psuedocode, özünde, kodunuzu tanımlamadan önce kodunuzu tanımlamanın bir yoludur; bu, birçok durumda gereksiz bir soyutlamadır ve kodunuz ilk kez mükemmel olamayacağından (ve muhtemelen, psuedocode'un tasarımını tamamlamaya devam etmeyeceğinden), bana gereksiz geliyor.


2

COBOL veya C yazıyorsanız, sözde kod yararlı olabilir çünkü gerçek kodun yazılması çok daha uzun sürer ve algoritma / gereksinimlerinizi sözde koddan doğrulayabilirseniz, biraz zaman kazanabilirsiniz.

Daha modern dillerde, sözde kod pek mantıklı gelmiyor. Daha iyi sonuç verebilecek olan şey, yöntem saplamalarını yazmak, en üst düzey mantığı ve algoritmayı ve gereklilikleri doğrulamak için gereken her şeyi gerçek kodda doldurmaktır. Daha sonra bu kodu onay için Ekip Liderine gösterebilir ve gerçek kodunuzun daha önce başlatılmasını sağlayabilirsiniz.


2

Sözde kodu son 10 yılda kullandığım tek zamanlar, bir beyaz tahta üzerinde çalıştığımız ve belirli bir dilin önemli olmadığı durumlarda röportaj.

Bir işlem / algoritma aracılığıyla gevşek terimlerle sözdizimine bağlı kalmadan konuşmak için kesinlikle faydalıdır. Örneğin, sadece noktayı göstermek için C # özelliklerine sahip bir C ++ sınıfı yazmak.

Onun yeri vardır, ancak ihtiyaç duyulan yerlerde kullanılmalıdır (atmanız gereken iş) ve üzerinde ısrar eden ISO tipi standartlara sahip olmadığınız sürece, kesinlikle resmi bir sürecin parçası değildir.


2

Kendim ve son birkaç yıldır birlikte çalıştığım insanlar için sözde kod, tam anlamıyla mükemmel bir gerçek kod haline gelmedi. Aynı anda birçok dilde çalışmadığınız sürece, çoğu insan ana dilinin genel düzeninde düşünmeye başlıyor gibi görünmektedir. Bir süredir .net mağazalarında çalıştım, bu yüzden çoğu insanın ofisinin etrafındaki beyaz tahta karalamalar, noktalama işaretlerinin bir kısmı eksikken vb veya c # gibi gözüküyor.

Alıştırma seçenekleri ve bunun gibi şeyleri tartışırken hala değerlidir, ancak dilde agnostik bit, birkaç dilde daha fazla zaman harcadığınızda uzaklaşma eğilimindedir.


Tabiki olacak. Yine de önemli olduğunu sanmıyorum. Dilinizin anlambiliminden ziyade mantık akışına odaklanmanın değerini görüyorum. Sahte kodunuzu kontrol eden bir derleyiciniz yok!
Michael K

Bu benim için kesinlikle önemli değil, ancak ekibimde kullandığımız dillerde gerçekçi / verimli / güvenli bir uygulaması olmayan sözde kod adımına bir şeyler koymanın kabul edilebilir olduğu konusunda ısrar eden insanlar oldu. Bunu problemli buluyorum. Teorik anlamda aynı fikirdeyim ama iş dünyasında çalışıyorum, sadece bir ya da iki özellik elde etmek için dilleri değiştirmeyeceğiz, bu yüzden amaçlanan uygulamaya yakın tutmayı tercih ederim.
Bill

2

Daha da fazlası, sözde kod UML gibi araçlarla grafiksel olarak yazılmıştır. Örneğin, yUML'yi deneyin .

basit UML diyagramları oluşturmak ve yayınlamak için çevrimiçi bir araç. Bu sizin için gerçekten kolay:

  • UML diyagramlarını bloglara, e-postalara ve wikilere gömün.
  • Forumlarda UML diyagramları ve blog yorumları gönderin.
  • Doğrudan web tabanlı hata izleme aracınızın içinde kullanın.
  • UML diyagramlarını kopyalayıp MS Word dokümanlarına ve Powerpoint sunumlarına yapıştırın ...

... yUML size zaman kazandırır. Küçük UML diyagramları ve eskizleri oluşturmak isteyenler için tasarlanmıştır.

YUML olmadan, bir UML diyagramı oluşturmak, bir UML aracını yüklemek, bir diyagram oluşturmak, bir ad vermek, mizanpaja girmek, onu bitmap'e dışa aktarmak ve çevrimiçi bir yere yüklemek olabilir. yUML bunların hiçbirini yapmaz ...


1

Harika iş. İyi bir tartışma başlattın. Benden, çeşitli döngüler ve algoritmaları anlamak için programlama öğrenirken sahte kodlar yazıyordum. Bu bir buçuk yıl önceydi. O günler, programlama dilleri bile çok güçlü değildi ... ve olaya dayalı programlama geleceğe aitti. Şimdi 4GL ve 5GL'lerle, dilin kendisinde sade İngilizcede olduğunu düşünüyoruz. Bir problem düşündüğümüzde, nesneler ve işlemler açısından düşünüyoruz. Ve karmaşık bir algo olana kadar sahte kodlar yazmak (veya PSEU-DO Kodları, sadece şaka yapmak) bir anlam ifade etmiyor. Daha da iyisi, çözümü grafiksel bir şekilde temsil edin.


0

Kullanılan dile ve bu konudaki bilginize bağlıdır.

Python veya Java gibi pek çok modern dil, zaten bazı sahte sahte kodu yazmanın israf olduğunu gösteren IMHO'nun sahte koduna zaten çok yakın. Sadece izleyici mermi yaklaşımını kullanarak hemen yap .

Biraz düşük seviyeli, metal şeylere yakın veya kullanmakta olduğunuz dil konusunda rahat hissetmiyorsanız, bu farklı bir fırsat. Sonra sözde kod kesinlikle yararlı olabilir.


0

Yaptığım çalışmada sözde kodun bozulma eğiliminde olduğu, programlamanın bir araç olarak ya da “ve şimdi çözüyoruz” projenin ortasında doldurma eğiliminde olduğu akademi'deki birkaç durum vardır:

  1. Kod, sözde kodun olacağından ne olacağı ile ilgili gerçek bir anlayışa karşı daha üretken olacağı zaman. Örneğin SAS, bazı temel programlama görevlerini yerine getirdiğinde beyaz tahtanın yarısını kaplayacaktır. Diğer bazı posterlerin tartıştığı C'ye de bakın.
  2. Çok fazla veri analizi ve istatistik kodlamasıyla, sonuçlar üretilirken kodla çok fazla ilişki kurma eğilimi vardır. Sahte kod, "tanılama planı doğru görünmüyorsa, X'i deneyin" için ileri geri ileri bir işlemden bahsediyor.
  3. Öğrenciler çok sayıda farklı programlama dili öğrenirler. Örneğin, tanıdığım insanlar arasında SAS, R veya Stata'da bir istatistik problemi analiz edilebilir. Geleneksel programlamaya daha yakın bir şey gerektiren bir şey R, Matlab, C, C ++, Java, Python'da yapılabilir ... bu gerçekten hangi öğrencinin programı uyguladığına ve hangi amaç için olduğuna bağlıdır. Ancak Java halkı ve Python insanı ve Matlab halkı için diğerlerinin ne yaptığı ve kodun kendisinden ziyade yaklaşımın nasıl çalıştığı hakkında ortak bir fikir edinmeleri hâlâ yararlı .

0

Bu evet / hayır sorusu değil. Aksine, kişi sahte kodu ne zaman kullanacağını merak etmelidir . Bir çözüm tasarlamadan önce sorunu anlamak önemlidir ve uygulamadan önce çözümü açık bir şekilde görmek önemlidir. Sözde kod aşağıdaki adımlardan herhangi birinde kullanılabilir:

  1. Sorunu tanımlarken, bazen eylem dizileri kullanarak kullanım durumlarını yazmak yaygındır.
  2. Bir çözüm tasarlarken. Sınıf diyagramları güzeldir, ancak yalnızca "statik" kısmı, yani verileri açıklarlar. Dinamik kısım için, bir döngü ve önemsiz veriyle başa çıkmanız gerektiğinde, en iyi yöntem olarak sahte kodu buluyorum. Grafiksel alternatifler arasında durum makineleri (az veri içeren karmaşık kontrol akışı için iyi) ve veri akış şemaları (karmaşık veri içeren basit akışlar için iyi) bulunur.
  3. Çözümü uygularken (veya hemen önce). Bazı programlama dillerini okumak zor (düşünmek, montaj). Alternatif bir temsil bu durumda değerli olabilir. Dilleri bilmiyorsanız, yapmaya da değer.

Yüksek seviye bir dilde aslında uygun kod olan sözde kod da kullanılır, genellikle prototipleme olarak adlandırılır.

Anlamaya ulaşmanın yanı sıra, sözde kod iletişim için de iyidir.

Düzenli olarak sahte kod kullanmanız gerekip gerekmediğini merak ediyorsanız, şahsen her türlü katı kurallara karşıyım. Takımdaki herkesin anladığı önemsiz problemler için kullanıldığında, bu kolayca sıkıcı bir zaman israfına dönüşebilir. Projenin ömrü boyunca sürdürdüğünüz özellikler için sözde kod kullanmak da maliyetli olabilir ve çok az değer sunar.

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.