Pada 2014, saya akan mengatakan Python. Pada 2017, dengan sepenuh hati saya percaya bahwa bahasa untuk mengajar sarjana adalah Julia.
Mengajar selalu tentang pengorbanan. Di satu sisi, Anda ingin memilih sesuatu yang cukup sederhana sehingga mudah dipahami. Tetapi kedua, Anda ingin mengajarkan sesuatu yang memiliki kekuatan tetap, yaitu sesuatu yang dapat tumbuh bersama Anda. Bahasa dinamis umum (Python / MATLAB / R) semuanya dengan mudah masuk ke dalam kategori 1 karena kode boilerplate yang tidak ada dan kemudahan membuka juru bahasa dan meludahkan kode, sementara C / C ++ / Fortran masuk dalam kategori kedua sebagai bahasa-bahasa yang dengannya perangkat lunak berkinerja tinggi dari dunia saat ini ditulis.
Tetapi ada masalah dengan menggunakan bahasa yang tidak sepenuhnya menangkap kategori lainnya. Saat menggunakan bahasa seperti Python, ia dengan baik mengabstraksi hal-hal seperti tipe dan integer overflow. Ini bagus untuk mengajar komputasi semester pertama, tetapi karena Anda ingin menggali lebih dalam dan lebih dalam bagaimana hal-hal benar-benar berfungsi, bahasa Python terlalu jauh disarikan dari logam yang mendasari untuk menjadi alat pengajaran yang baik. Tapi C / C ++ / Fortran (atau Java ... saya belajar Java dulu ...) semua memiliki biaya startup yang besar sehingga hal tersulit untuk dipelajari adalah bagaimana cara membuat header dan main
dikompilasi, yang mengalihkan perhatian dari benar-benar belajar ke program .
Masukkan Julia. Saat Anda pertama kali menggunakan Julia, Anda dapat mengabstraksi seluruh ide tipe dan menggunakannya seperti MATLAB atau Python. Tetapi karena Anda ingin belajar lebih banyak, ada "lubang kelinci" yang mendalam untuk bahasa tersebut. Karena ini benar-benar lapisan abstraksi yang didasarkan pada sistem tipe + beberapa pengiriman melalui LLVM, pada dasarnya "cara mudah untuk menulis kode yang dikompilasi secara statis" (dan fungsi tipe-stabil sebenarnya dapat dikompilasi secara statis). Ini artinya rincian C / C ++ juga dapat diakses. Anda dapat mempelajari cara menulis loop dan fungsi sederhana tanpa kode boilerplate, dan kemudian menggali ke dalam pointer fungsi. Fitur metaprogramming Julia memungkinkan Anda langsung mengakses AST, dan ada makro yang menunjukkan setiap bagian dari rantai kompilasi. Juga, sebagai Lisp, dapat menerima gaya pemrograman fungsional. Dan ia memiliki banyak kemampuan komputasi paralel. Gagasan seperti mengetik parametrik dan stabilitas jenis cukup unik dan mendalam di Julia.
Jika Anda ingin mempelajari sendiri bahasa pemrograman, Anda dapat mempelajari langkah-langkah bagaimana kompilasi bekerja dengan menggunakan @code_lowered
untuk melihat apa yang menurunkan, melihat AST yang diketik dengan @code_typed
, melihat LLVM IR dengan @code_llvm
, dan akhirnya dengan kode assembly asli @code_native
. Ini dapat digunakan untuk menunjukkan berapa biaya variabel dinamis dan bagaimana "tinju variabel" bekerja, dan posting blog ini menunjukkan bagaimana alat introspeksi ini dapat digunakan untuk mengajarkan bagaimana optimasi kompiler dapat / tidak dapat terjadi.
Tidak hanya ilmu komputer dan ide-ide rekayasa perangkat lunak untuk mengeksplorasi, tetapi juga ide-ide matematika yang kaya. Karena perpustakaan utama Julia ditulis dengan pengetikan generik, itu sepele untuk membuat operator bebas-matriks dan menggunakan IterativeSolvers.jl untuk melakukan GMRES menggunakan mereka. Anda dapat menggunakan alat introspeksi ingin @which
menunjukkan dengan tepat bagaimana sesuatu diterapkan. Misalnya, bagaimana cara \
kerjanya?
@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
Itu mengarahkan saya langsung ke definisi \ . Ini diimplementasikan dalam Julia, sehingga seseorang yang mengenal Julia kemudian dapat mempelajari algoritma dan cara kerjanya melalui mengidentifikasi subtipe matriks dan mengkhususkan diri bila mungkin (kembali ke eliminasi Gaussian). Karena kode Julia dilisensikan MIT (dan hampir semua paket dilisensikan MIT), siswa kemudian bebas untuk menggunakan ide-ide ini dalam kode mereka sendiri (dengan atribusi) (ketika kode dilisensikan GPL, seperti halnya dengan sebagian besar paket MATLAB dan R, mereka harus berhati-hati tentang masalah perizinan!).
Karena inti bahasa dibangun dengan komunitas open source yang sangat aktif, ada juga sumber daya yang kaya tentang sejarah perkembangan bahasa: masalah Github-nya . Memahami pertanyaan bahasa seperti apa sebenarnya transpos matriks? bisa sangat mencerahkan untuk memahami objek matematika ini secara lebih rinci.
Tetapi terakhir, pada akhirnya, Anda ingin mengajari siswa Anda cara membuat. Sayangnya, mempelajari Python atau R tidak berarti Anda memiliki apa yang diperlukan untuk "mengembangkan Python / R" karena sebagian besar paket yang digunakan secara luas dan dioptimalkan dengan baik memiliki sejumlah besar kode C / C ++ / Fortran di dalamnya dalam rangka untuk mendapatkan kinerja. Dengan demikian, agar para siswa ini dapat berkontribusi pada ekosistem ilmiah untuk bahasa-bahasa ini, pada akhirnya mereka harus belajar bahasa lain. Meskipun itu tidak sepenuhnya mengerikan, itu tidak optimal sekarang karena Julia ada. Karena tipe-stable Julia mampu mencapai kecepatan C / Fortran, sebagian besar paket dalam ekosistem Julia adalah kode Julia murni. Mempelajari Julia berarti seseorang telah belajar mengembangkan Julia. Dan karena Pangkalan Julia juga sebagian besar kode Julia (hanya beberapa primitif dan parser tidak),
Yang mengatakan, ada beberapa kerugian untuk pilihan Julia. Untuk satu, itu jauh lebih baru daripada bahasa-bahasa lain dan jadi itu sedikit lebih langka pada sumber daya. Anda harus datang dengan banyak alat pengajaran sendiri, atau menarik dari sumber daya di web yang terdaftar di situs web Julia . Juga, detail bahasa tidak cukup diselesaikan, meskipun 1.0 akan segera keluar (pada akhir 2017). Dan sangat mungkin bahwa Anda, calon guru kursus di Julia, mungkin tidak memiliki banyak pengalaman dengan bahasa itu sendiri. Namun, ini adalah jenis masalah yang hilang seiring waktu, sedangkan manfaat Julia yang saya sebutkan di atas jauh lebih inti bagi bahasa itu sendiri.