Diğer dil paradigmalarını öğrenerek programlama becerilerinizi geliştirebilir misiniz?


9

Eğer öyleyse, bana yeni bir paradigma öğrenmenin, problem başka bir paradigma / dil / teknolojide olsa bile programlama problemlerini çözme yaklaşımınızı nasıl değiştirdiğini söyleyebilir misiniz?

Bana özel bir şekilde söyleyebilirseniz, X (yani: JAVA / C # / C ++) programlama becerilerinizin Y (yani: Şema / Prolog / Lisp) öğrenerek nasıl geliştiğini söyleyebilirim.

Ayrıca, hangi paradigmaların en iyi programcı olmasına yardımcı olduğunu öneriyorsunuz?

Deneyimlerim sadece yapılandırılmış - OOP, zorunlu - prosedürel ve bir dereceye kadar şablon meta-programlama, ama amacım başka bir dil öğrenmek değil, problemleri çözmek için farklı yaklaşımlar öğrenmek.

Teşekkürler!


1
Bunun cevaplarının bir çeşit yankılama evet olacağına inanıyorum .
R0MANARMY

Yanıtlar:


7

Her yıl en az 1-2 yeni dil öğrenmeye çalışıyorum. En çok kazandığım, problemleri çözme şeklimizi değiştiren işlevsel bir dil (F #) öğrenmekti - I = şimdi makineye nasıl yapılacağı yerine ne yapacağını söylemeye çalışıyorum, özellikle Linq'i yoğun kullandığım C # ve bunları kullanmanın yararlarını bildiğim şimdi değişmez nesneler. Ayrıca kodlama stilim değiştiğinde (gelişmiş) oldukça yüksek sipariş fonksiyonlarını oldukça fazla kullanıyorum (parametreler olarak yöntemler).


1
Python programlamam için Ditto. Eğer kullandığım teknikleri öğrenmemiş olsaydım, tüm bu ağaç munching ve ayrıştırıcı üreten kodu yazarken sefil bir şekilde başarısız olurdum (ağaçlar neredeyse özyineleme veya elle haddelenmiş bir versiyonunu ima eder, ayrıştırıcı jeneratör ve ayrıştırıcı birleştiricilerden esinlenmiştir) Haskell öğrenerek.

Teşekkürler, şüphelendiğimi tekrar teyit ettin ... Tekrar teşekkürler!
Armando

2

Kesinlikle. Öğrendiğiniz her programlama dilinin belirli şeyleri yapmanın farklı bir yolu olacaktır. Bazı şeyler sizi çıldırtır, bazı şeyler seveceksiniz ve diğerleri yavaş yavaş büyür.

En azından yeni bir dilin temellerini öğrenmek asla zaman kaybı değildir.


1

Tamam, karşılaştığım bir örnek.

Sahip olduğumuz bazı eski kodlarla ilgili bir proje için nispeten eski bir dil (VB6) öğrendim.
Dil çok pencere yönelimli ancak .Net çerçevesinde sahip olduğumuz kadar yüksek düzeyde güçlü sınıflar yok.

Bazı resim manipülasyonları yapmak zorunda kaldım ve bu resim manipülasyonları için windows API fonksiyonları beni tanıttı.

.Net'in GDI Sınıflarını daha iyi anlamamı öğrendikten sonra. Ve bazen Windows API kullanmanın çok daha hızlı olacağı anlayışı (daha az işlev kaydırma).

Bu, eski kodu öğrendiğinizde bile, yine de öğrenip başka bir perspektif alabileceğinizi gösterir.


1

Diğer dil paradigmalarını öğrenerek programlama becerilerinizi geliştirebilir misiniz?

Benim durumumda, kesinlikle evet. Bir probleme saldırmanın birkaç farklı yoluna sahip olmak, bir araç paleti gibidir. Bir gün (benim yaptığım gibi) bu diğer araçları kullanacaksın. Belki de hayır. Her şey bağlıdır. Bazı örnekler:

Diller genellikle tek başına değildir, bir çevre ile gelirler. Awk olarak bilinen garip bir dili öğrenmek için biraz zaman harcadım . "Normal ifadeler" kullanılarak kalıp eşleşmesine dayanır. C ++ STL (çok başarılı değil) öğrenmeye çalışırken haritalar hakkında öğrendim. Çok hızlı bir şekilde yardımcı programları dönüştüren bir metni yazabilirsiniz kavram çok bu ikisini birleştiren Pearl (bulurlar üzerinde kullanılabilen tek dili).

Çoğunlukla eğlenmek için Erlang (çok başarılı değil) öğrenmeye çalıştım . OTP olarak bilinen ve bazen başarısız olmasına izin veren ve işlevleri yeniden başlatan bir monitöre sahip olarak bilinen, hataları işlemenin bir yolunu uygulayan bir işlev kütüphanesine sahiptir. Bu fikri bazı alanlarda kullandım, bazen sonsuz testler yapmak yerine işlerin başarısız olmasına izin vermek.

Haskell'i öğrenmeye çalışmak (yine çok başarılı bir şekilde değil) gerçekten gözlerime saldırmanın diğer yollarına açıldı. Fonksiyonel programlama (aklımdan) tür, oraya ulaşmak için gereken adımları yazmak değil, istediğiniz sonucu söyleyen kod yazmakla başlar. Bu gerçekten daha iyi SQL kodu yazma bana yardımcı olduğunu bulmak.

Son zamanlarda, biraz javascript denedim. Ve başını salladı olarak bilinen bir ortam buldu. Küçük bir ev otomasyon sunucusu oluşturmak için kod gerekmez.

Bir perspektife varmak gerekirse, çeşitli dillerdeki dabbling'imin çoğu, insanların hakkında konuştukları hakkında bir fikir edinmek için oldukça sığ bir leve üzerindeydi (ve öyle). Üretken olabileceğim çok az dil var.


0

Ayrıca bir süre işlevsel bir dilde dalmaktan çok şey öğrendim. Ancak, onlardan aldığım şey, eşzamanlılığı nasıl kolaylaştıracak kadar şeyleri zorunlu dillerden farklı yapmaktan daha azdı. İşlevsel bir dilde olduğu kadar zorunlu bir dilde de kolayca uygulanabilir, ancak bazı nedenlerden dolayı, zorunlu dillerde karşılaştığım örneklerin çoğu daha karmaşıktı. (Diğer şeyler fonksiyonel dillerde çok daha karmaşık hale geldi.)

Yeni bir dilden öğrendiğim bir diğer şey ek programlama kalıplarıydı. Birçoğunu okumuştum, ancak bunların çok iyi uygulamalarını görmek ve kullanmak, kullanışlılıklarını ve ne zaman uygun olduklarını anlamayı ve eve götürmeyi kolaylaştırdı.

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.