2014 yılında Python diyecektim. 2017 yılında gönülden mezun olduğum öğretmenlerin dilinin Julia olduğuna inanıyorum.
Öğretim her zaman bir takasla ilgilidir. Bir yandan, kavraması kolay olan yeterince basit bir şey seçmek istersiniz. Fakat ikincisi, gücü kalan bir şeyi, yani sizinle birlikte büyüyebilecek bir şeyi öğretmek istiyorsunuz. Yaygın dinamik diller (Python / MATLAB / R), var olmayan kazan plakası kodları ve tercüman açma ve tükürme kodlarından dolayı kolayca 1. kategoriye girerken, C / C ++ / Fortran ikinci kategoriye giriyor. Günümüz dünyasının temel performans gösterdiği yazılımın yazıldığı diller.
Ancak diğer kategoriyi tam olarak yakalamayan bir dili kullanmakla ilgili sorunlar var. Python gibi bir dil kullanıldığında, türler ve tamsayı taşması gibi şeyleri hoş bir şekilde uzaklaştırır. Bu, ilk sömestr hesaplamayı öğretmek için güzel, ama işlerin gerçekte nasıl yürüdüğünü daha derinden ve daha derine kazmak istediğinizde Python'un dili, iyi bir öğretim aracı olmak için altta yatan metalden çok uzaktır. Fakat C / C ++ / Fortran (ya da Java ... ilk önce Java öğrendim ...) hepsi o kadar büyük bir başlangıç maliyetine sahipti ki, öğrenmesi en zor şey başlığın nasıl main
hazırlanacağını ve derleneceğini, bu da aslında öğrenmekten programın dikkatini dağıttı. .
Julia'ya gir. Julia'yı ilk kez kullandığınızda, türlerin tüm fikrini ortadan kaldırabilir ve onu MATLAB veya Python gibi kullanabilirsiniz. Fakat daha fazla bilgi edinmek istediğinizde, dilin derinliklerinde bir "tavşan deliği" vardır. Gerçekten bir türleme sistemi + LLVM üzerinden çoklu gönderim temelli bir soyutlama katmanı olduğundan, aslında "statik olarak derlenmiş kod yazmanın kolay bir yoludur" (ve tür kararlı işlevler aslında statik olarak derlenebilir). Bunun anlamı, C / C ++ 'ın detaylarına da erişilebilir olmasıdır. Kazan dairesi kodu olmadan basit döngüler ve fonksiyonlar yazmayı öğrenebilir ve ardından fonksiyon işaretçilerine bakabilirsiniz. Julia'nın metaprogramlama özellikleri, doğrudan AST'ye erişmenizi sağlar ve derleme zincirinin her bölümünü gösteren makrolar vardır. Ayrıca, bir Lisp olarak, işlevsel programlama stillerine uygundur. Ve birçok paralel hesaplama kabiliyetine sahiptir. Parametrik yazım ve tür dengesi gibi fikirler Julia'da oldukça benzersiz ve derin.
Programlama dillerini kendileri incelemek istiyorsanız, derlemenin nasıl çalıştığını, @code_lowered
indirmenin ne olduğunu görmek için nasıl çalıştığını öğrenebilir, AST ile @code_typed
yazılana, LLVM IR ile @code_llvm
ve son olarak da yerel montaj koduna bakın @code_native
. Bu, dinamik değişkenlerin maliyetinin ne olduğunu ve tam olarak "değişken boks" un nasıl çalıştığını göstermek için kullanılabilir ve bu blog yazısı , derleme optimizasyonlarının nasıl yapılabileceğini / yapılamayacağını öğretmek için bu değerlendirme araçlarının nasıl kullanılabileceğini gösterir.
Keşfedilecek sadece bilgisayar bilimi ve yazılım mühendisliği fikirleri değil, aynı zamanda zengin matematiksel fikirler de var. Julia'nın ana kütüphaneleri genel yazarak akılda bulunduğundan, matris içermeyen operatörler oluşturmak ve bunları kullanarak GMRES gerçekleştirmek için IterativeSolvers.jl kullanmak çok önemlidir. @which
Herhangi bir şeyin nasıl uygulandığını size tam olarak göstermek için içe dönük araçlarını kullanabilirsiniz . Örneğin, nasıl \
çalışır?
@which rand(10,10)\rand(10)
#\(A::AbstractArray{T,2} where T, B::Union{AbstractArray{T,1}, AbstractArray{T,2}} where T) in Base.LinAlg at linalg\generic.jl:805
Bu beni doğrudan tanımına işaret ediyor . Julia'da uygulanmaktadır, böylece Julia'yı bilen biri algoritmayı ve matris alt türlerini tanımlayarak ve mümkün olduğunda uzmanlaşarak (Gaussian eliminasyonuna geri dönerek) nasıl çalıştığını öğrenebilir. Julia'nın kodu MIT lisanslı olduğundan (ve neredeyse tüm paketler MIT lisanslı) olduğundan, öğrenciler bu fikirleri kendi kodlarında (özellikli) kullanmakta serbesttirler (kod GPL lisanslı olduğunda, çoğu MATLAB ve R paketlerinde olduğu gibi, lisans konularında dikkatli olmaları gerekir!).
Dil çekirdeği çok aktif bir açık kaynak topluluğuyla kurulduğundan , dil gelişiminin tarihi hakkında da zengin bir kaynak var: Github sorunları . Gibi dil soruları anlama gerçekten bir matris devrik ne? Bu matematiksel nesneleri daha ayrıntılı olarak anlamak için aydınlatıcı olabilir.
Ama son olarak, sonunda, öğrencilerinize nasıl yaratacağınızı öğretmek istersiniz. Ne yazık ki, Python veya R öğrenmek, mutlaka yaygın olarak kullanılan ve iyi optimize edilmiş paketlerin içinde önemli miktarda C / C ++ / Fortran kodu bulunduğundan, "Python / R" geliştirmek için gerekenlere sahip olduğunuz anlamına gelmez. performans almak için. Bu nedenle, bu öğrencilerin bu dillerin bilimsel ekosistemlerine katkıda bulunabilmeleri için, sonunda bir noktada başka bir dil öğrenmek zorunda kalacaklar. Bu tamamen berbat olmasa da, Julia'nın varlığı artık en düşük seviyede. Kararlı Julia, C / Fortran hızını yakalayabildiğinden, Julia ekosistemindeki paketlerin çoğu saf Julia kodudur. Julia'yı öğrenmek, Julia'yı geliştirmeyi öğrendiği anlamına gelir. Üstelik Base Julia aynı zamanda çoğunlukla Julia'nın bir kodu (sadece birkaç ilkel ve ayrıştırıcı değil).
Bununla birlikte, Julia'nın seçiminde bazı olumsuzluklar var. Birincisi, diğer dillerden çok daha yeni ve bu nedenle kaynaklar konusunda biraz daha az. Kendi başınıza çok sayıda öğretim aracı bulmanız veya Julia'nın web sitesinde listelenen kaynaklardan yararlanmanız gerekir . Ayrıca, dil ayrıntıları henüz kesinleşmedi, ancak 1,0 yakında çıkıyor (2017'nin sonunda). Ayrıca, Julia'da bir kursun potansiyel öğretmeni olarak, dil ile ilgili bu kadar fazla deneyim yaşamamış olmanız da olasıdır. Bununla birlikte, bunlar zaman içinde kaybolan sorun türleridir, oysa yukarıda bahsettiğim Julia yararları, dillerin kendileri için çok daha fazla önem taşır.