... bir dil yerine tüm dillere uygulanabilecek programlama becerilerini nasıl geliştirebilirim?
Bu sorunun anahtarı dili aşmak ve kodladığınız dili değil düşünmektir .
WAT?
Deneyimli çok dilli programcılar , kendi dil modellerinin soyut sözdizimi ağacında (AST) düşünüyorlar . Biri "burada bir döngüye ihtiyacım var" düşünmüyor, bunun yerine "bir şeyin üstünü örmeliyim" demeye başlıyor ve buna o dile uygun, veya sürebilinceye ya da yinelemeli veya yinelemeye çeviriyor.
Bu, konuşulan bir dili öğrenirken gördüklerine benzer. Birçok dili konuşan insanlar akıcı bir şekilde anlamını düşünür ve belirli bir dilde çıkar.
Bu AST'nin bazı ipuçlarını , bir dilenin ve deneyimli bir programcının gözünün hareketlerinin izlendiği bir dizi izleyici video Çifti Kodunda Göz İzleme ve Göz İzleme Kodu Denemesi ile Kodlama (Acemi) görebilirsiniz. Deneyimli programcının kodu zihinsel modelinde 'derlediğini' ve 'başını' çalıştırdığını 'görebiliyorken, başlangıçta anahtar kelime ile kod anahtar kelimesini yinelemek gerekir.
Bu nedenle, tüm dillere uygulanacak programlama becerilerinin geliştirilmesi sorusunun anahtarı, birçok dilin öğrenilmesidir, böylece bir dilin zihinsel modeline sahip olmaktan uzaklaşabilir ve kendi başlarına bir sorun için AST üretme becerisi geliştirilebilir. daha sonra belirli bir dile çevrilmiş olan bir ana dile
Biri AST'yi kafada kullanma yeteneğine sahip olduktan sonra, benzer bir düşünce okulu içinde başka bir dil öğrenmek ( Befunge'ye gitmek Java'dan bir parça atlamaktır , ancak Forth'dan pek değil ) çok daha kolay hale gelir - 'sadece' AST'nin yapıldığı 3., 4. ve 5. (vb.) zamanları çok daha kolay olan yeni bir dile çevirmek.
Klasik bir makale var, Gerçek Programcılar Pascal'ı Kullanma . Bunun bir kısmı okuyor:
... belirlenen Gerçek Programcı Fortran programlarını herhangi bir dilde yazabilir.
Sadece zihinsel AST'yi kullanamayacağınız bitler de var - dilde de düşünmeniz gerekiyor. Bunu başarmak biraz zaman alıyor ( Python'da hala Perl kodu yazmakla suçlanıyorum ve ilk Lisp kodum "Bu çok iyi bir C programı." Diyerek yorumlanmıştı.).
Buna, ACM tarafından yayınlanan ve Fortran'ı Herhangi Bir Dilde Yazmamaya Giden bir makaleye işaret etmeliyim . Makalenin üçüncü paragrafı (baştaki alıntılar değildir) doğrudan eldeki soruyu ele almaktadır:
Tüm genel amaçlı programlama dillerini aşan iyi kodlamanın özellikleri vardır. Kendinizi uygularsanız, iyi tasarım ve saydam stili hemen hemen her kodda uygulayabilirsiniz. Bir programlama dili kötü kod yazmanıza izin verdiğinden, yapmanız gereken anlamına gelmez. Ve eğer kodlayıcı yeterince yaratıcıysa, iyi stil ve tasarımı teşvik etmek için tasarlanmış bir programlama dili hala korkunç kod yazmak için kullanılabilir. İçinde bir inç su bulunan bir küvete boğulabilir ve istisnasız kullanım ve genel türler ve çöp toplama özelliğiyle, tamamen okunamayan ve anlaşılmaz bir dilde, tamamen ya da satır numarası olmayan bir dilde kolayca yazabilirsiniz. Fortran ya da Java, C ++ veya Smalltalk yazıyor olsanız da, kötü kod yerine iyi kod yazmayı seçebilirsiniz (ve gerekir).
AST'ye sahip olmak için yeterli değil - AST'nin başka dillere çevirebilmesi için gerekli. Kafanda bir Fortran AST bulundurmak ve Java'da Fortran kodu yazmak iyi bir şey değil. Kişi, dilin üzerinde düşünebilmesi için dilin ve deyimlerin yeterince aşina olması gerekir (en başta söylediklerime rağmen).
Java kodunu, C kodunu yazmayı bırakmamış bir kişi tarafından yazılmış gördüm. Ana yöntemle bir nesne vardı. Bu nesnede denilen bir sürü statik yöntem main
ve kamusal alanlara sahip özel iç sınıflar vardı (ve böylece çok sayıda dikmelere benziyordu). Java ile yazılmış C koduydu. Bütün bunlar bir dilin sözdizimini diğerine çevirmekti .
Bu noktada geçmiş olsun için, bir çok dilde kod yazmak, devam etmek gerekiyor değil kod tasarlarken bu dillerde düşünüyorum, ama doğru dil deyimler ile çalışma koduna tasarım çeviri sırasında onları düşünüyorum.
Oraya ulaşmanın tek yolu - tüm dillere uygulanabilecek programlama becerilerini geliştirmek - dilleri öğrenmeye devam etmek ve o zihinsel programlama dilini tek bir dille değil esnek kılmaktır.
(ChaosPandion'dan sunduğum fikirden ağır borç aldığım için özür dilerim .)