Bir programcı yabancı dillerdeki kodu ne kadar iyi anlayabilir? [kapalı]


15

X dilini bilen deneyimli bir programcının, X ve Y gibi yaygın olarak kullanılan diller için Y dilini kullanarak yetkin bir programcı tarafından yazılan kodu ne kadar iyi anlayabileceği konusunda ciddi çalışmalar var mı?

Tabii ki gerçek dünya o kadar basit değil ki bir programcı sadece bir dil biliyor. Bilmek istediğimiz şey: Projemizi, örneğin C # 'da yaparsak ve bir gün sadece Fortran ve Algol'u bilen bazı eski fizikçiler ona bakarlarsa, onlara ne ölçüde mantıklı olurdu? Matematiksel kısımları onlara iyi okunabilir, eğer onlara ne olduğunu görmezden gelirlerse bazı rastgele-noktalama işaretleri vardır. Yoksa bir Python uzmanı akıllı Ruby senaryomda kusurlar bulabilir mi?

Yüzeysel sözdizimi seviyesinden nesneler, şablon meta programlaması, fonksiyonel vb. Gibi büyük kavramların seviyesine kadar sorunlar olabilir. Bir programcının kodun her sözdizimi detayını bir "yabancı dilde" tam olarak anlamasını veya bazı büyük kavramların dinini takip etmesini beklemiyorum, ancak ana kontrol akışını ne ölçüde elde edeceklerini merak ediyorum. Ekranda bir şey çizildiğinde ve rengini veya boyutunu belirleyen şeyin, araba sürmek için programlanmış bir robotun bittiğinde motoru kapatacağını doğrulayın.

İyi bir kalite çalışması, yayınlanmış akademik araştırmaları, bazı endüstri grubunun veya büyük yazılım şirketlerinin resmi raporunu içerecektir, ancak atölye ve sınıfların veya diğer kaynakların deneyimli liderleri tarafından sistematik tarafsız gözlemler alacağım. Kısa bloglar, tek vaka örnekleri veya fıkralarla ilgilenmiyorum. (İyi bir okuma için yaparlarsa belki birkaç fıkra.)


1
Herhangi bir çalışma olup olmadığını bilmiyorum, ama kişisel deneyimimden, evet diyorum, bir programı anlayabildim.
superM

2
Bu, bir çift dile bağlı olacaktır: C # ve Java'yı seçin - ve neredeyse anında bir aşinalık elde edersiniz; Algol vs. C'yi seçin - ve tek sayfalık bir hile sayfasına aşina olacaksınız. İyi şanslar C'ye karşı Prolog veya Whitespace'e karşı Ada - sinir bozucu olacak. Bu arada, dil bir programı anlamaya çalışan tek şey değildir: C ile yazılmış MFC kodunu anlamaya çalışan gömülü tasarımlarda uzmanlaşmış bir C uzmanı oldukça üzgün bir manzaradır (bu ilk elden deneyimdir).
dasblinkenlight

Cebir'i anlayan biri için Trigonometri'yi Matematik'i anlayan birine karşı almak ne kadar kolay? Bu dile ve paradigmaya bağlıdır. Özellikle diller sürekli geliştiği için diller arasındaki farklılıkları tespit etmek ve izole etmek yeterince zordur. Kimsenin anlayışı makul bir doğrulukla değerlendirebileceğinden şüpheliyim.
Evan Plaice

Yanıtlar:


9

Açıkça, dillerin birbirleriyle ne kadar ilgili olduğu derecesine bağlıdır. Örneğin, bir C veya C ++ arka planınız varsa ve bazı C # veya Java programlama yaptıysanız, bu iki dilden (Java veya C #) diğerini okumanız ve anlamanız kolay olmalıdır. Lisp'i iyi tanıyorsanız, Şema çok fazla sorun olmamalıdır. Bir keresinde, sadece C, C ++ ve Perl'den gelen bilgilerimle PHP hakkında herhangi bir bilgi sahibi olmadan bir PHP programında hata ayıkladım. Bu programın Haskell veya Smalltalk'ta ne zaman yazılacağından eminim, bu benim için imkansızın yanında çok daha zor olurdu.

Aslında, bu konuyla ilgili akademik bir araştırmanın anlamlı olacağını düşünmüyorum (en azından ciddi bir araştırma değil). "X dilini bilen standart deneyimli bir programcı" diye bir şey yoktur, bu nedenle herhangi bir çalışma kesin temel verileri kaçırır. İnsanlar farklı bilgilere sahiptir ve aynı okullardan geçseler bile farklı yeteneklere ve motive olurlar.

ancak ana kontrol akışını ne ölçüde elde edeceklerini merak ederek, ekranda bir şeyin çizildiği noktayı bulun

Kod kalitesi çok düşük olduğu veya kullanılan çerçeve çok karmaşık olduğu veya kod tabanı çok büyük olduğu için dile çok aşina olduğunuzda bile zor olabilir.


6

Emin değilim akademik yürütülen çalışma referans Ancak yaklaşık iyice kendinden açıklamalı adlandırma C yöntemleri, sınıflar ve işlevlerin # / C ++ / Java / Python veya vb diller de iş süreci akış gibi kod tabanını anlamak kolaylığı sağlamalıdır.

Proje içinde ve genellikle yazılım geliştirmede isimlendirme sözleşmesi çok önemli bir husustur. Bununla birlikte,its importancekaliteli yazılım oluşturma ile ilgisi genellikle göz ardı edilir veya göz ardı edilir.

.NET Framework'te kullanılan Adlandırma Yönergeleri ve .NET'te kullanılan Genel Adlandırma Kuralları da bakmak için iyi referanslardır.


İyi API tasarımı ve adlandırma kuralları yardımcı olur, ancak dile dayalı adlandırma kuralları bile yalnızca bu dil için geçerli olacak şekilde "düşünülür". C # / Java (neredeyse aynı olan) yanında çoğu dil, o dile özgü benzersiz iş akışlarına ve uygulamalara sahip farklı ilkeler üzerinde çalışır. Örneğin, mega monolitik çekirdek çerçeve modelini takip etmeyen dillerde, genellikle ortak bir paket yöneticisi kullanarak birbirine bağlanan büyük bir paket ekosistemi bulacaksınız.
Evan Plaice

3

Büyük ölçüde bireysel programcıya ve dilleri nasıl içselleştirdiğine bağlıdır. Sadece C ++ bilen bir arkadaşım varken, bir düzine dilde çalışmakta kesinlikle hiçbir sorunum yok. Programlamada benden daha kötü değil, sadece farklı bir yol öğrendi.

Şahsen, ilgili bir soruyu daha ilginç buluyorum: kodda bir hata olduğunda (yani programcı X yazdığını düşündü someFunction(x, y)ama gerçekten başka bir şey yazdı), ikinci geliştiricinin hatayı tanımlaması ne kadar zor. İyi bir programcı X, bilgisayarın ne yapmasını İSTEDİĞİNİ aşırı derecede açık hale getirecekti ve bu kolay okunur. Ancak, bir hata yaptıysa, büyük bir sorun olabilir. Aşağıdaki C ++ hata gibi şeyler:

int x = getCorrectValueForX();
if (x = 2)
   doSomethingWhenXIsTwo();

Dili bilmediğiniz sürece tespit etmek ZORUNLU derecede zor olabilir.


1

Sadece programcının diğer insanların söylediği gibi değil, sözdizimi, felsefe ve uygulamadaki diller arasındaki benzerliklere de bağlıdır.

Birçok farklı dilde C türevi sözdizimi kullanılır ve bu tür sözdizimine aşina iseniz kontrol akışını takip etmek daha kolay olacaktır. Aynı şey güçlü yazılan ve gevşek yazılan diller, yüksek mertebeden fonksiyon desteği olan diller, soyutlama düzeyi ve programatik felsefeler için de geçerlidir. Bu sadece sözdizimini okuyabilmenize değil, aynı zamanda dil kavram ve felsefelerine de aşina olmanıza bağlıdır.

Örneğin C öğrendiyseniz, kontrol akışını C #, Java veya C ++ vb.'den türetmenizi beklemenin mantıklı olacağını düşünüyorum. Sözdizimindeki fark nedeniyle VB'yi deşifre etmek biraz daha zor olurdu veya JavaScript, kapanışlar, zayıf yazma ve üst düzey işlevler nedeniyle (Bunu C'de yapabileceğinizi biliyorum, ancak biraz sakattır). Ancak sizden Lisp, F #, R veya tanrı yasaklı derleme hatalarını ayıklayabilmenizi beklemiyorum çünkü bunlar tamamen farklı bir programlama paradigması kullanıyor.

TL; DR Sadece sözdizimini tanımak önemli değildir, çoğu zaman bir bildirimi veya yöntem çağrısını deşifre edebildiğiniz, ancak bir programın neden belirli bir şekilde yazıldığının nedenini anlayabilmeniz, anlamanın ve okunan kodun özüdür. .

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.