Algoritma programlama dilinden daha mı önemli?


35

Şu anki (2013) Google Code Jam yarışmasında, C ++ ve Java insanlarına 200+ kod satırı alan ve Python çalışanlarına kıyasla aynı sorunu yalnızca 40 satır kod kullanan bir sorun yaşandı.

Python, C ++ ve Java ile doğrudan karşılaştırılabilir değildir, ancak ayrıntıdaki farkın, algoritmanın verimliliğini etkileyebileceğini düşündüm.

Dil seçimine göre doğru algoritmayı bilmek ne kadar önemlidir? Mükemmel bir şekilde uygulanan bir Python programı C ++ veya Java ile daha iyi bir şekilde uygulanabilir mi (aynı algoritmayı kullanarak) ve bunun belirli programlama dillerinin doğal ayrıntılarıyla bir ilişkisi var mı?


16
Çalıştığınız programlama dilinin bir sorun hakkında düşünme şeklinizi etkilediği söyleniyor (ve inanıyorum). Bu, çok farklı programlama dillerinin farklı sorun sınıflarına uygun olabileceği anlamına gelir.
Joris Timmermans

1
Bunun çoğu, üzerinde çalıştığınız ölçeğin LOC'nin ötesine bağlıdır. Bazı diller sadece hız veya eşzamanlılık ihtiyaçlarını desteklemez. Algoritmalar önemlidir, ancak bazen eğer x dili z'den y kat daha yavaşsa, sadece ne olursa olsun x'i kullanamazsınız.
Rig

Bir not olarak, okulda öğrendiğim tek şey, herkesin kullanılan koddan bağımsız olarak sabit kalan her kod satırı için bir böceğe sahip olmasıdır. Dolayısıyla, daha az kod satırında yapmanıza izin veren bir dil daha az hataya neden olursa, daha hızlı bir şekilde piyasaya çıkmasını ve bir kullanıcı kullanırken bir hatanın ortaya çıkma şansının azalmasını sağlayabilirsiniz. Bu yüzden, benim görüşüme göre, şirketteki herkesin bu proje üzerinde çalışmak için gerekli olduğunu bildiği iş için en iyi dili seçerdim.
Travis Pessetto

5
@Travis: "SLOC oranı başına kusur, dilden bağımsız olarak sabit kalıyor" sadece doğru değil. John'un cevabına bakınız.
Ben Voigt

Şimdi F # 'yı dil olarak kullanarak bir sonraki yarışmaya katılmayı düşünüyorum!
code4life

Yanıtlar:


73

Açıkçası, bu soruyu Google Code Jam gibi bir şey bağlamında düşünürseniz, algoritmik problemleri çözmeniz gerektiğinde algoritmik düşünme açıkça daha önemlidir.

Ancak günlük hayatta, soruyu beyaza göre daha az siyah yapan, milyonlarca başka faktörün de göz önüne alınması gerekir.

Sadece bir karşı örnek: Java'da 200 satıra daha ihtiyacınız varsa, ancak şirketinizdeki herkes Java biliyorsa, bu önemli bir şey değil. 5 satır Python veya başka bir dilde yazabilseydiniz, ancak o dili bilen şirkette tek kişi siz olabilirsiniz - bu büyük bir mesele. Aslında bu kadar büyük bir anlaşma, bunu yapmanıza bile izin verilmeyecek ve bunun yerine Java'da yazmanız gerekecek.

Bir zanaatkarın bakış açısına göre, her zaman iş için doğru araçla yaklaşmaya çalışırız, ancak tam oradaki kelime o kadar zordur ki, kolaylıkla yanlış anlaşılabilir.

Aksine, şirketlerdeki algoritmik düşüncenin neredeyse bulunmadığını gördüm. Sadece birkaç seçilmiş insan buna sahipken, ortalama joe genellikle döngülerin, aramaların, vb. Çalışma zamanı karmaşıklığını tahmin etmekte zorlanıyor.

Bununla birlikte, algoritmik yarışmalar açısından, kişisel deneyimlerim bunlarda birkaç yıl boyunca rekabet etmekten, bana tek bir dilde kalmanız gerektiğini açıkça söylüyor. Hız önemli bir faktördür ve zaman sınırındaki sorunları çözmeye adamanız gerektiğinde aletlerinizle zaman kaybetmeyi göze alamazsınız. Ayrıca düşünmeden 200 satır Java kodu yazmanın, çok fazla düşünmeyi gerektiren 50 satırlık karmaşık python kodu elde etmekten çok daha hızlı olduğunu, ancak her ikisinin de aynı sorunu çözdüğünü de düşünün.

Son olarak, algoritmik rekabet kodu ve şirket üretim kodu arasındaki temel farklılıkları anladığınızdan emin olun. Bir üründe asla kabul etmeyeceğim korkunç bir kod yazan fantastik algoritmik kodlayıcılar gördüm.


1
"Dikkate alınması gereken diğer milyon faktör" için + 1
ozz

1
Bunu eklemeye devam edeceğim, eğer çözmeye çalıştığınız işlevsel bir sorunsa, o zaman göklerin uğruna, lütfen işlevsel bir dil kullanın! Bu yüzden, büyük programlama paradigması için gerçekten bir dilin tutturmanız gerektiğini savunuyorum.
Martijn Verburg

6
Son cümle için +1.
Shivan Dragon

4
+1 Kod satırları kendi başına korkunç bir ölçümdür. Biz ölçmek gerekir korunabilirliğe kod değil satırları. 200 satırlık güvenli kod satırı, potansiyel olarak 50 satırlık Python'dan çok daha fazla bakım gerektirebilir.
Phil

2
@Phil: 200 satır Python, potansiyel olarak 50 satırdan fazla güvenli kod satırından daha fazla korunabilir. İyi yazılmış bir kod varsayarak, güvenli yazı dillerinde bu kadar açıklık avantajı hiç görmedim.
David Thornley

17

Yarışmaların dışında bile algoritmik düşünmenin belirli bir dil için her numarayı bilmekten daha önemli olduğunu savunuyorum.

Elbette, çalıştığınız dili olabildiğince iyi bilmek istersiniz, ancak diller gelir ve gider, algoritmalar açısından soyut düşünme yeteneği oldukça aktarılabilir bir beceridir.

Örnek olarak: Doğru hatırlıyorsam, bir süre önce burada bir programcının FizzBuzz'ı bir röportajda başarısızlığa uğratmaktan şikayet ettiğini ve Java'nın modulo operatörü hakkındaki bilgi eksikliğini suçladığı Programcılar hakkında bir yazı vardı. Bu sonuç yanlıştır - modulo'nun nasıl çalıştığıyla ilgili bilgi eksikliği, kendini adanmış bir modulo operatörünün yokluğunda bile, problem hakkında algoritmik olarak düşünmesini ve çözmemesini sağladı. Daha da ileri giderek: Java'nın bir Tree sınıfı var - peki, ileride bu sınıfı uygulamayan bir dille çalışmak zorundaysanız? Yine, sorun hakkında düşünebilme becerisi dile özgü ayrıntılara dayanıyor.

Örneklerin basit olduğunu itiraf ediyorum, ancak bu noktayı ortaya koymaya yardımcı oluyorlar.


14

Dil önemlidir.

DARPA ve ABD Donanması, yaklaşık 20 yıl önce bir çatışmada deneme yaptılar . Karanlık at kaçak galibi Haskell oldu. Ada ve C ++ her ikisi de temsil edildi; Java değildi.

Aynı dönemde Pratt & Whitney , jet motoru denetleyici projeleri üzerinde zaman çizelgesi ve hata izleyici verilerine bakarak bir veri madenciliği çalışması yaptı. Ada'nın programcı verimliliğini iki katına çıkardığını ve kullandıkları diğer dilin kusur yoğunluğunun 1 / 4'ünü bulduğunu keşfettiler.

Atari, FORTH'i video oyunları geliştirmek için kullanırdı ve FORTH'u kullandıkları gerçeği çok özeldi.

Paul Graham'ın LISP'yi kullanma konusundaki yorumları iyi bilinmektedir. Erann Gat'ın JPL'deki LISP ile ilgili yorumları , bilinmemekle birlikte, aynı derecede uyumludur .

Boeing 777 aviyonik yazılım hemen hemen tüm Ada olduğunu. Büyük bir taşeronun orta akışta başlaması gerekmesine rağmen, deneyimleri çok iyiydi.

Dil önemlidir.


Açıkçası, Java, bağlandığın deneyden sonra serbest bırakıldı.
toasted_flakes

makale 1994 yılında yayımlandı. Java’nın ilk kamuoyuna açıklanması
1995’ti

Mesele, özel favori dilinizin belirli bir deneyde temsil edilip edilmediği değil. Mesele şu ki bu dil önemlidir. Bunu oldukça kesin olarak gösteren bir sürü anekdot çalışması yapıldı. Ayrıca, Amerikan programcıları tarafından çoğunlukla reddedilmesine rağmen Ada'nın Avrupa'da, özellikle yüksek güvenilirlikli sistemler için hala yoğun olarak kullanıldığını ve ABD'deki belirli saha sistemlerinde kullanıldığını da belirtmekte fayda var.
John R. Strohm

7

Bazı noktalar:

  • En üst pozisyonlar, C ++ / C / Java olma eğilimindedir; fark, onunla diğer dil arasındaki kaç kod satırı olduğuna bakılmaksızın. Bu, en üst kodlayıcıların, muhtemelen ham hızlarından ötürü diğerlerinin üzerinde bu dilleri seçme eğiliminde olmasıyla ilgili daha fazla olabilir.
    Ne yazık ki, programlama dilini Google Code Jam'de kolayca göremiyorsunuz, ancak bazılarının en iyisini indirdim ve hatırladığım kadarıyla bunlar çoğunlukla C / C ++. TopCoder (popüler bir çevrimiçi programlama yarışması barındırma sitesi) çoğunlukla benzer sonuçlara sahiptir.

  • Oldukça düşük seviyede olduklarından, ham çalışma süresi açısından kolayca C / C ++ 'ı yenemeyeceğinize eminim (ve Java’lar çok geride kalmaz ). Deneyimlerime göre, dinamik olarak yazılmış diller, statik olarak yazılmış dillerden çok daha yavaş olma eğilimindedir. En uygun çözüm bazı dillerde yeterince hızlı olmayabilir, ancak bu genel bir kural olmamalıdır.

  • Doğru algoritma hayatidir. Baştan itibaren tüm problemleri (ayrıntılı olarak) nasıl çözeceğinizi biliyorsanız ve iyi, hızlı bir kodlayıcıysanız, hangi dili kodladığınızdan bağımsız olarak (o dilde en uygun çözümü varsayarak) kazanırsınız. yeterince hızlı).

  • Düz hat sayısı o kadar büyük değil. Yeterli programlama deneyimine sahip olduğunuzda, 10 dakikalık 10 satır veya 200 satırlık programlama harcayabileceğinizi bileceksiniz, bunların hepsi satırların ne kadar karmaşık olduğuna bağlı. Ayrıca, yüzlerce kez benzer bir kod kodladıysanız, bu kadar çabuk bir şekilde bunu yapabileceksiniz. Makroların en iyi C / C ++ kodlayıcılarının kodlama zamanlarını optimize etmek için sıklıkla kullandıklarını da belirtmeyin.

  • Frank, iyi bir noktaya değinir - (programlama yarışmalarının dışında), tüm kod üsleri C veya neyse, şirketinize yönelik Python'da kodlama yapamazsınız, dillerine uymanız gerekir.

  • Diller arasında geçiş yapmak oldukça kolaydır, yıllarca süren algoritmik düşünme bilgisini geliştirmek kolay değildir. Diyelim ki neredeyse her mükemmel programcının bir hafta içinde başka bir (belli belirsiz) dile geçebileceğini iddia ediyorum. Belki o dilde programlama yarışmalarını kazanacak kadar iyi olmayabilir (2 hafta daha verin), ancak temel bilgileri aşağılayacaktır.


Sahtelik: Bazı kod yarışması sitelerinden birkaç çözüm indirme, en üst sıraların nasıl göründüğünü kesin olarak bildiğiniz sonucuna varmak için yeterli olan kesin bir bilimsel çalışmadır.
Lie Ryan,

@LieRyan Doğru, ancak en popüler böyle bir sitede (TopCoder) (birkaç tane) programlama yarışmasında (benim sahip olduğum gibi) yer almak ve her zaman C / C ++ / Java olarak en üst sıralarda yer almak oldukça önemlidir. Ayrıca, "her zaman" değil "eğilimindedir" dedim.
Dukeling

"Düz hat sayısı bu kadar büyük değil." kod düşmandır
jk.

6
@jk. "Böyle" i vurgulamalı mıydım? Önemli, ama alfa ve omega değil. Okunabilirlik için birkaç daha az satır tercih edersiniz? Yapmadım Her gün çok kafa karıştırıcı, okunamayan, biraz değişen, çarpma, bölme, toplama, çıkarma, XORing, ANDing, çok koşullu ifadelere birkaç basit if-ifadesi alacağım. Muhtemelen bahsettiğin şey değil, ama satır sayımını azaltan bazen budur. Ve daha birkaç satırda karmaşık bir şey veya birçok satırda basit bir şey uygulamaktan bahsediyordum; ikincisi daha az zaman alır.
Dukeling

5

Aynı mantık C ++ 'ta daha iyi uygulanabilir mi? Tabii ki, daha iyi bir şekilde daha hızlı ve daha verimli bellek demek istiyorsan. Sorun, bunun için gereken çabanın önemli ölçüde daha yüksek olmasıdır. Ayrıca, teorik olarak hala daha düşük seviyelere inebilir ve daha uzun sürecek olan saf C veya hatta ASM'de uygulayabilirsiniz, ancak daha da optimize edilmiş bir kodunuz olabilir.

Tabii ki, Code Jam veya TopCoder gibi yarışmalarda, 40 satır vs 200 satır olduğu için bu bir biggie değil. Öte yandan, bu rekabet türünde en önemli şey algoritmanın zaman / mekan karmaşıklığıdır. Gerçek hayatta uygulama yaparken YMMV, bu tür yarışmalarda en yavaş dilde yazılmış O (n) algoritması her zaman en hızlı dilde yazılmış O (n²) 'yi yenecektir . Özellikle de en kötü senaryo olan çoklu test olacak.

Ancak yarışmalar dışında, eğer gerçek hayattaki büyük projelerden bahsediyorsak, o zaman artık 40 satır vs 200 satır değil. Büyük projelerde büyük kod tabanı sorun olmaya başlar. Hangi noktada almak için:

C ++ ile Python?

görüntü tanımını buraya girin

Saf Python yavaş. Bu nedenle, standart Python tercümanı (CPython) C'ye yazılmıştır. Pratik olarak hepsi, yüksek derecede optimize edilmiş olarak yazılmış yerleşik fonksiyonlara sahip olan Python, C kütüphaneleriyle ( ctypes veya yerel cpython modülleri olarak ) ve C ++ kütüphaneleriyle birlikte kolayca kullanılabilir. aracılığıyla Boost :: Python . Bu yolla, yüksek seviye mantığınızı esnek bir dil olan Python'a yazabilirsiniz, hızlı prototipleme ve uyarlama imkanı sağlar (bu, algoritmanızı geliştirerek ve geliştirerek daha fazla zaman geçirebileceğiniz anlamına gelir). OTOH, düşük seviyeli kütüphane işlevlerinizi C veya C ++ modülünde yazabilirsiniz. Böyle bir yaklaşımın en iyi örneği Python kütüphanesi olan SciPy'dir, ancak kaputun altında ATLAS, LAPACK, Intels MKL veya AMD'nin ACML'si gibi yüksek derecede optimize edilmiş sayısal kütüphaneler kullanır.


Yazdıklarınız sadece yüzeyi sıyırır. Herkesin paylaşmadığı bir “daha ​​iyi” kavramını varsayıyorsunuz. Kalite her zaman birinin hedeflerine uygunluk meselesidir. C ++ 'da programlama her zaman her amaç için uygun değildir.
reinierpost

1
@reinierpost: bu yüzden önemli ölçüde daha yüksek çaba hakkında yazdım. Bahsettiğiniz durumlarda C ++ uygun değil, ancak yapılamadığı için uygun değil. Uygun değil, çünkü çok fazla geliştirici kaynak alacaktır.
vartec

Dahası, bu durumda sadece daha iyi değil.
reinierpost

2
ve aslında birçok sektörde olan şey budur, örneğin oyunların hem performans hem de verimlilik için C ++ kodunu birbirine bağlayan çok sayıda Lua kodu vardır.
gbjbaanb

4

Bence insanların halkla “programlama dilleri” olarak düşündükleri aslında üç ayrı şeydir:

  1. Dil türü ve sözdizimi
  2. Dil IDE
  3. Bir dil için mevcut kütüphaneler

Örneğin, bir kişi bir tartışmada C # yaptığında, dil sözdizimi hakkında konuştuğunu düşünebilirsiniz (1), ancak tartışmanın .net framework'ü (3) içereceği% 95 kesindir. Yeni bir dil tasarlamıyorsanız, yalıtmak (1) ve yok saymak (2) ve (3) zor ve genellikle anlamsızdır. Bunun sebebi IDE ve standart kütüphane “rahatlık faktörleri”, belli bir aracı kullanma deneyimini doğrudan etkileyen şeyler.

Son birkaç yıldır ben de Google Code Jam'e katıldım. İlk kez C ++ 'ı seçtim çünkü girişi okumak için iyi bir desteğe sahip. Örneğin, C ++ 'da standart bir girişten üç tam sayı okumak aşağıdaki gibidir:

int n, h, w;
cin >> n >> h >> w;

C # iken aynı şuna benzer:

int n, h, w;
string[] tokens = Console.ReadLine().Split(' ');
n = int.Parse(tokens[0]);
h = int.Parse(tokens[1]);
w = int.Parse(tokens[2]);

Bu basit bir işlevsellik için çok daha zihinsel bir yük. Çok satırlı girişle C # 'da işler daha da karmaşıklaşıyor. Belki de o zamanlar daha iyi bir yol bulamadım. Her neyse, ilk turu geçemedim çünkü turun bitiminden önce düzeltemediğim bir böcek vardı. İronik olarak giriş okuma yöntemi hatayı şaşırttı. Sorun basitti, girdi 32 bit tamsayı için çok büyük bir sayı içeriyordu. C # ' int.Parse(string)bir istisna ama C ++ dosya giriş akışı belirli bir hata bayrağını ayarlamak ve bir sorun olması masum geliştirici habersiz hale sessizce başarısız olur.

Her iki örnek de, kütüphanenin dil sözdizimi yerine nasıl kullanıldığını göstermektedir. Birincisi ayrıntı düzeyini ve diğeri güvenilirliğini gösterir. Birçok kitaplık birden fazla dile taşınır ve bazı diller kendileri için özel olarak oluşturulmamış kitaplıkları kullanabilir (bkz. @ Vartec'in C kitaplıkları ile Python hakkındaki cevabı).

Bunu sarmak için, doğru algoritmayı bilmek yardımcı olur. Kodlama yarışmalarında, özellikle uygulama zamanı ve hafıza gibi kaynaklar bilerek sınırlı olduğunda çok önemlidir. Uygulama geliştirmede memnuniyetle karşılanır, ancak genellikle çok önemli değildir. Bakım kolaylığı burada daha önemlidir. Doğru tasarım desenleri uygulayarak, iyi mimariye, okunabilir kodlara ve ilgili dokümantasyona sahip olarak elde edilebilir ve bu yöntemlerin tümü büyük ölçüde kurum içi ve üçüncü şahıs kütüphanelerine dayanır. Bu yüzden, ne tür tekerleklerin icat edildiğini ve kendiminkine göre nasıl uyduklarını bilmek daha önemli buluyorum.


1
Mümkünse hazırlık önemlidir. Google Code Jam ile girdiyi okuyan ve çıktılarını istediğiniz gibi görüntüleyen küçük bir kütüphanem var ve bu kodu gönderimime ekliyorum.
Mark Hurd

İkinci kez benzer bir şey yaptım ama bir proje şablonu olarak. Aşağıda giriş sınıfına sahip bir kaynak dosyası oluşturur Mainve Mainyöntemin içinde birkaç şey vardır (giriş sınıfım ve çıkış akışı ve vaka döngüsü örneği).
İmparator Orionii

Stdin'den en son ne zaman okuduğumu hatırlamıyorum Bana bir JSON ayrıştırıcısına yapabileceğim bir dosya ver.
gnasher729

2

Zamanlamalı programlama yarışmalarında yarışmak istiyorsanız, yarışmada izin verilen en etkileyici dili öğrenmelisiniz. Perl muhtemelen en iyisi olur, bunu Ruby veya Python izlerdi. Yine de algoritmalarla iyi bir tesise ihtiyacınız olacak, ama en azından böyle bir şey yazarken tıkanmayacaksınız.

Integer prev = b.get(k)
if (prev == null) prev = 0
Integer v = a.get(k);
if (v == null) v = 0;
b.put(prev + v);

yerine

b[k] += a[k]

Birkaç kütüphaneyi öğrenmek konusunda endişelenmeyin. Hepsi çok benzer ve belgeler çevrimiçi. Daha anlamlı dillerde akıcı olmak, sizi daha az anlamlı dillerde daha iyi (ama muhtemelen sinir bozucu) bir programcı yapacaktır. Tersi doğru değil.

NB

200 kod satırı ve 40 kod satırı arasındaki fark çok büyük ve 200.000 satırlık bir program ile 40.000 satırlık bir program arasındaki fark çok daha büyük. O zaman beş kişilik bir ekiple bir menajer ile bir veya iki kişilik bir ekip arasındaki fark bu.


3
(a) Programlama yarışmalarında C / C ++ / Java'nın en üst sıralarda bulunma eğiliminde olduğunu biliyorum. (b) C / C ++, "en güçlü dil" lerden pek çok kişi tarafından kabul edilir (kesinlikle Perl / Ruby / Python'un üstünde). (c) Operatör aşırı yüklenmesi nedeniyle, C ++ kodu ikinci örneğinizle neredeyse aynı görünebilir. (d) Bu kadar kapsamlı kontroller (Java'da, öyle mi?) ancak aşağıdaki durumlarda gereklidir: (1) Ne yaptığınız hakkında hiçbir fikriniz yok. (2) Verinin niteliği, bunun gerekli olduğu şekildedir (kodlama yarışmalarında olmaz). (3) Başkaları tarafından kullanılacak bir kod yazıyorsunuz (geçerli değil).
Dukeling

1
@Dukeling: Bu çalışmaya göre ( sayfa.mi.fu-berlin.de/prechelt/Biblio/jccpprtTR.pdf ) betik dilleri daha hızlı gelişim ve daha küçük kaynak kodu sağlar. Başka bir çalışmaya göre ( flownet.com/gat/papers/lisp-java.pdf ) Lisp, betik dillerinden daha fazla verimlilik sunar. Yukarıda belirtilen ikinci çalışmaya göre, Lisp kodunun yazılması daha az zaman alırken C ++ kodu kadar hızlı olduğu ortaya çıkıyor.
Giorgio

"200.000 hat programı ile 40.000 hat programı arasında": ayırt etmek zorunda olduğunuzu düşünüyorum. Programlama dili detaybiliminden (sözdizimi) kaynaklanan farklılıklar koda karmaşıklık katmaz ve bu nedenle gereken bakım çabası üzerinde çok az etki yaratabilir. Öte yandan, farklı dil özellikleri nedeniyle farklı bir satır sayısına sahip olabilirsiniz. Örneğin, Python'da hafızayı yönetmek zorunda değilsiniz, C ise tüm hafıza yönetiminizi kendiniz uygulamak zorundasınız. Öyleyse, C kodunda daha fazla işlevselliğe sahip olduğunuz ve kesinlikle ekstra bakım zamanına ihtiyacınız olduğunu kabul ediyorum.
Giorgio

@Giorgio Geliştirme süresi veya kaynak kodun boyutu hakkında tartışmıyorum, yalnızca ciddi bir tecrübeye dayanarak, programlama yarışmalarında gerçekte ne olduğu hakkında .
Dukeling

1
İki bilimsel makaleye değiniyordum (ki bu IMO'ya bakmaya değer), web sayfalarındaki insanların bu konuda ne düşündüklerinden bahsetmiyordum. Bir fikrin yaygın olması, otomatik olarak geçerli olduğu anlamına gelmez. :-) En azından bir kişinin titiz bir şekilde doğrulaması gerekiyor.
Giorgio

2

Herhangi bir programlama dilinde herhangi bir algoritma uygulanabilir. Sonuçta, önemli olan sözdizimi değil. Ancak Python gibi yüksek seviyeli bir dil kullanmanın kendi avantajları vardır. Daha az iş ve daha az kodlama. Bu yüzden Python'da bir algoritma uygulamak için C gibi düşük seviyeli bir dilde gerekenden daha az satıra ihtiyacınız olacaktır.

Python, kütüphanesinde yerleşik olan veri yapılarının çoğuna sahiptir. Fakat C'de sıfırdan başlamalı ve hepsini inşa etmek için bir yapı kullanmalıyız. Elbette, yüksek ve düşük seviyeli diller arasında farklılıklar vardır, ancak dil, herhangi bir algoritma uygulamanızı engellememelidir.


2

"40 LoC - 200 LoC" örneğini ileri sürerken, "iyi, toplam LoC’nin sadece beşte biri yazmanın daha hızlı olması ve böylece daha iyi olması gerektiğini" söylemesinin cazip gelebileceğini düşünüyorum.

En az LoC için optimizasyon yapmak bence neredeyse hiç iyi bir fikir değildir. Evet, yazılan her LoC hatalar için bir potansiyeldir ve asla etcetc yazdıklarınızı asla hata ayıklamak zorunda kalmazsınız. Mesele şu ki, okunabilirlik ve ayrışma için optimize edilmiş. Bir 1k LoC modülü yazmak yerine, 20 satırlık büyük bir regex kullanarak bir sorunu çözmeniz farketmez. Regex, opak bir duvar, son derece hatalara açık, anlaşılması zor, kabusunu değiştirilemez şekillerde değiştirmeden değiştirmek için kabus gibi olacak.

Herhangi bir değer katmayan tek parça ve ayrıntılardan kurtulmak her şey yolunda ve iyidir, ancak diğer yandan, Java veya C # gibi bir şey kullanmak, tasarım desenleri ve yeniden yazma gibi araçlar hakkında bilgi sahibi olmak, kodu yeniden yapılandırmada çok esneklik sağlar , zamanla temizleme, işleri parçalama vs.

Çok açıklayıcı bir karşılaştırma: Ben sadece "işleri halletmek" 20k bir python uygulaması yerine strateji desen, fabrikalar vb "overkill" şeyler ile dolu test kaplı decoedled C # kodu, 100k LoC olurdu. 5 kat daha fazla kod yazsanız da her gün mimari kazanır.

Bazı çalışma türlerinin bazı dillerde daha kolay ve daha uygun olduğuna tamamen katılıyorum, ancak hangi araçlara ve gereksinimlerin ne olduğuna (ve yakın gelecekte olabilir) dayalı olarak dilinizi seçmeye daha fazla inanıyorum.

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.