Baru-baru ini, John Carmack, pengaturcara permainan terkenal dan pengasas bersama Perisian id, berkata dalam temu bual bahawa pengaturcara harus menumpukan perhatian pada pembelajaran bahasa pengaturcaraan dengan baik. Ini agak mengejutkan saya. Walaupun saya secara peribadi sangat bersetuju dengan nasihat ini, pandangan ini menjadi kontroversi dalam kalangan pengaturcara hari ini.
Saya rasa, saya adalah apa yang semua orang panggil sebagai "pengaturcara lama". Saya tidak muda, saya telah terlibat dalam pengaturcaraan sepanjang hidup saya, dan saya telah terlibat dalam kerja profesional ini sejak saya memasuki masyarakat. Kadang-kadang saya berasa seperti peminat bahasa pengaturcaraan yang telah menyaksikan perkembangan banyak bahasa pengaturcaraan. Mengimbas kembali sejarah yang menarik ini, kita tidak boleh tidak membuat kesimpulan (salah) bahawa tidak ada salahnya untuk mengetahui beberapa bahasa pengaturcaraan lagi. Sejarah perkembangan bahasa pengaturcaraan sangat menarik, tetapi keadaan pembangunan hari ini agak aman.
Dalam artikel ini saya ingin menyemak sejarah lalu, meringkaskan pengalaman dan pengajaran serta melihat bahasa pengaturcaraan yang mana merupakan bahasa piawai yang terbaik.
Dengan peningkatan perkakasan pengkomputeran dan sains komputer sebagai satu disiplin, pengaturcaraan komputer (sebagai tambahan kepada arahan pemproses itu sendiri luar) juga mula berkembang perlahan-lahan. Dalam beberapa dekad pertamanya, bahasa pengaturcaraan terutamanya dipelihara oleh ahli akademik dan menarik sekumpulan kecil penyelidik. Pilihan untuk pengaturcara adalah terhad dan bergantung terutamanya pada bidang.
Pengaturcaraan perniagaan menggunakan COBOL, pengaturcaraan saintifik menggunakan Fortran, dan beberapa bahasa lain sering digunakan untuk bidang, penyelidikan atau perkakasan tertentu.
Bagi kebanyakan pengaturcara, mereka hanya perlu menumpukan pada pembelajaran satu bahasa pengaturcaraan untuk keseluruhan kerjaya pengaturcaraan mereka atau untuk jangka masa yang panjang. Walaupun sesetengah orang berminat dalam reka bentuk bahasa pengaturcaraan, bidang itu masih sangat muda pada masa itu. Walaupun terdapat beberapa inovasi yang menarik, apa yang perlu dilakukan dalam mereka bentuk bahasa pengaturcaraan yang baik masih belum difahami dengan baik.
Apabila bilangan perkakasan komputer meningkat dan penggunaannya semakin pelbagai, bilangan bahasa pengaturcaraan juga mula berkembang, dan pengaturcaraan Pilihan bahasa telah menjadi topik yang popular. Orang ramai mula mengklasifikasikan bahasa pengaturcaraan. Kita boleh memberitahu bahasa mana yang akan dipilih oleh pengaturcara berdasarkan jenis pengaturcara mereka dan tahap kepakaran yang mereka ingin capai.
Peminat pengaturcaraan komputer peribadi menggunakan BASIC yang semakin popular. Ini adalah bahasa pengaturcaraan yang sangat tidak masuk akal dan primitif, tetapi ia digunakan secara meluas dan telah menjadi panduan untuk generasi pengaturcara (termasuk saya sendiri). Pascal memperkenalkan pengaturcaraan berstruktur dan mempunyai impak yang besar (Pascal membina komuniti yang berkembang maju dengan Turbo-Pascal dan Delphi, tetapi akhirnya hilang).
C, yang berasal dari UNIX, menjadi bahasa pengaturcaraan sistem. C++ menjadi pengganti kepada C dan meminjam pengaturcaraan berorientasikan objek daripada Smalltalk, menjadi bahasa pembangun aplikasi dan perkhidmatan profesional. Akhirnya Visual Basic (yang tiada kaitan dengan BASIC) mempopularkan "pengaturcaraan visual," memenuhi keperluan pembangunan aplikasi (yang berkembang pesat dengan kemunculan Windows), dan menjadi pilihan pertama untuk orang ramai. Tetapi secara amnya dipercayai bahawa pengaturcara VB adalah pakar domain yang melakukan kerja pengaturcaraan sambilan, manakala C dan C++ adalah pengaturcara "profesional".
Pada peringkat ini, orang ramai masih tidak memahami reka bentuk bahasa pengaturcaraan dengan baik, menyebabkan banyak aspek reka bentuk banyak bahasa pengaturcaraan popular menjadi kurang ideal. Bahasa C adalah mudah dan berkuasa, tetapi sukar untuk dikuasai dan terdapat terlalu banyak perkara yang boleh menjadi salah. Walaupun C++ mempunyai niat yang baik, ia akhirnya direka bentuk dengan buruk dan tidak menyenangkan untuk digunakan. Visual Basic adalah menyeronokkan dan mudah, tetapi ia agak menyusahkan dan tidak mempunyai keanggunan dan kecekapan memandangkan keadaan teknikal pada masa itu. Smalltalk dan LISP adalah kedua-dua bahasa yang menarik dan elegan, tetapi akhirnya tidak diminati kerana mereka terikat dengan perkakasan khusus dan alatan mahal.
Kemudian, Internet muncul. Tahap sebenar impak Internet pada bahasa pengaturcaraan mungkin tidak diketahui, tetapi sudah pasti ia merupakan faktor penting. Pada masa dahulu, bahasa pengaturcaraan adalah jarang, biasanya dilahirkan di makmal penyelidikan dan syarikat komersil besar tetapi kini nampaknya sesiapa sahaja boleh membangunkan bahasa pengaturcaraan mereka sendiri. Untuk seketika, PERL menjadi bahasa tujuan umum yang popular, meliputi segala-galanya daripada pentadbiran sistem kepada pengaturcaraan Web.
Kemudian, Python berubah daripada bahasa penyelidikan saintifik kepada bahasa tujuan umum yang mudah dan mudah dipelajari Walaupun ia berkembang perlahan pada mulanya, ia akhirnya melanda seluruh dunia. Dikatakan bahawa Brandan Eich dari Netscape telah membangunkan JavaScript (sebagai bahasa sambungan pelayar dengan fungsi yang sangat terhad) dalam beberapa hari sahaja. Ini bukan sahaja membuktikan bahawa Eich seorang yang genius, tetapi juga membuktikan bahawa orang dalam tempoh itu mempunyai pemahaman yang baik tentang reka bentuk bahasa pengaturcaraan.
Banyak bahasa pengaturcaraan lain muncul dalam tempoh ini, yang paling terkenal ialah Java. Tiada apa-apa yang istimewa tentang bahasa itu sendiri, tetapi JVM yang disediakannya ialah persekitaran masa jalan universal yang menyedari "tulis sekali, jalankan di mana-mana", yang bermaksud bahawa bahasa itu sangat universal dan tidak terhad kepada perkakasan, sistem pengendalian atau Had tertentu. daripada persekitaran sasaran. Tegasnya, JVM awal bukanlah sesuatu yang boleh dipertontonkan, tetapi ia membawa kepada era masa jalan dan pilihan penggunaan bahasa yang semakin matang.
Sejak JVM, bahasa pengaturcaraan telah mula berkembang pesat ke arah yang menarik. Pengkompil tepat dalam masa (JIT) yang berasal daripada bahasa Self (pengganti Smalltalk, walaupun cemerlang tetapi kegagalan besar) telah dikaji lebih lanjut, menghasilkan kelahiran HotSpot Java, dan Microsoft melancarkan .NET CLR untuk memerangi Java . .NET melangkah lebih jauh dan menggunakan CLR (Common Language Runtime) sebagai masa jalan universal untuk berbilang bahasa, bukan hanya C#. Jika difikirkan semula, ini adalah detik aliran air: pilihan bahasa pengaturcaraan menjadi tidak relevan.
Ini mungkin bukan sebab utama mengapa Microsoft membuat pilihan ini (pada masa itu mereka masih cuba untuk terus menyokong Visual Basic yang sangat popular, serta C#), ditambah dengan penutupan Microsoft dalam tempoh itu Jenis pelesenan, akhirnya CLR gagal menjadi persekitaran operasi yang paling popular. Tetapi dalam dekad pertama selepas pergantian milenium, bahasa pengaturcaraan menjadi lebih banyak dan ada di mana-mana.
Sebaliknya, bilangan pengaturcara juga telah meletup. Memandangkan permintaan terhadap perisian berkembang dengan pesat dan alatan serta pengetahuan tersedia dengan lebih meluas, berjuta-juta orang di seluruh dunia menjadi pengaturcara. Pengaturcara ini adalah manusia, dan mereka mendambakan pengenalan kumpulan yang kukuh. Sama seperti orang biasa mempunyai pendapat yang kuat dan tidak rasional tentang pasukan sukan, pengaturcara mula memihak kepada pilihan bahasa pengaturcaraan. Ramai pengaturcara terpaksa memilih beberapa bahasa pengaturcaraan baharu, unik dan istimewa.
Sebagai contoh, sesetengah orang mendakwa bahawa pengaturcaraan berfungsi adalah raja, bahawa Ruby lebih baik daripada Python, bahawa Scala akan mengubah sepenuhnya sains data, dan bahawa anda rugi jika anda tidak memilih Clojure. .. Pada ketika ini, bahasa pengaturcaraan telah beralih daripada pembangunan linear kepada era Darwinian yang huru-hara iaitu survival of the fittest.
Saya fikir orang dalam tempoh ini akan menyedari bahawa sesetengah bahasa pengaturcaraan terlalu gila untuk mengekalkan pembangunan. Walau bagaimanapun, ini tidak berlaku sebaliknya, keadaan berubah di luar jangkaan. Dalam era pengkomputeran "awan", di mana banyak aplikasi dan perkhidmatan digunakan merentasi sejumlah besar nod yang diedarkan di Internet, nampaknya tidak lagi mengira bahasa pengaturcaraan yang digunakan. Pengaturcara sedang membangunkan komponen bebas yang berkomunikasi antara satu sama lain, jadi mengapa perlu bersusah payah dengan bahasa pengaturcaraan? Komponen tidak perlu mengetahui bahasa mana satu sama lain ditulis. Jika pengaturcara suka menulis komponen dalam bahasa X, maka gunakan bahasa ini. Siapa peduli.
Hal yang sama berlaku untuk komponen yang dijalankan pada mesin yang berbeza Dengan keluaran Docker, kontena telah mendapat populariti, sama ada aplikasi yang dijalankan pada mesin tunggal atau pada kumpulan mesin melalui perisian orkestrasi. . Perisian yang berjalan secara kolaboratif semuanya boleh diuruskan dengan mudah menggunakan paradigma yang sama.
Orang ramai masih membangunkan bahasa pengaturcaraan baharu hari ini, kebanyakannya menjanjikan dan sangat dinanti-nantikan. Sesetengahnya adalah khusus domain (Swift, Kotlin dan Dart untuk apl mudah alih, Solidity untuk kontrak pintar Ethereum), manakala yang lain lebih umum, tetapi setiap bahasa mendapat manfaat daripada pelajaran yang dipelajari selama beberapa dekad (untuk pengaturcaraan awan Go, Rust untuk sistem pengaturcaraan, TypeScript, superset JavaScript, dll.).
Pada masa yang sama, dunia pengaturcaraan telah mencapai tahap kematangan baharu di mana kami tidak lagi mengejar setiap aliran baharu dan menerima pakai setiap bahasa baharu. Kita semua sudah dewasa.
Tidak dinafikan bahawa sesetengah bahasa pengaturcaraan lebih baik, manakala yang lain lebih sesuai untuk mengendalikan kes penggunaan tertentu. Sesiapa yang telah membuat pengaturcaraan untuk seketika tahu bahawa mempelajari bahasa baru tidak sukar sama sekali. Kebanyakan pengaturcara boleh mempelajari asas bahasa baharu dengan mudah hanya dalam satu petang, dan menjadi lebih atau kurang produktif selepas beberapa hari digunakan. Pengaturcara baharu boleh bermula dengan mana-mana bahasa pengaturcaraan utama dan dengan mudah menggunakan pengetahuan pengaturcaraan mereka kepada bahasa lain.
Walau bagaimanapun, menukar bahasa pengaturcaraan yang kerap bukanlah perkara yang baik, atas dua sebab utama. Pertama, mempelajari bahasa pengaturcaraan adalah sedikit seperti belajar bermain catur. Anda boleh mempelajari peraturan dengan cepat, tetapi itu tidak bermakna anda boleh mengalahkan pemain berpengalaman. Anda perlu belajar strategi, dan itu memerlukan masa dan latihan. Ini ialah ekosistem amalan terbaik, perangkap, teknik pengoptimuman, serta perpustakaan, alatan dan komuniti. Kedua, walaupun pengaturcaraan mudah, ia terdedah kepada ralat.
Walaupun dengan pengalaman pengaturcaraan biasa dan alatan terbaik, menukar idea kepada kod komputer bukanlah tindakan intuitif. Tidak kira apa intuisi yang dibangunkan oleh pengaturcara, ia mesti melalui kitaran penggunaan berulang, maklum balas segera dan pembetulan ralat. Setiap kali anda menukar bahasa pengaturcaraan, anda membayar harga. Jadi, dalam pengalaman saya, pilihan bahasa pengaturcaraan adalah penting, tetapi sebaik sahaja anda membuat pilihan, anda harus berpegang padanya dalam jangka masa panjang.
Menjelang 2022, kita perlu mempertimbangkan perkara berikut semasa memilih bahasa pengaturcaraan.
Pertama sekali, pertimbangan yang paling kritikal ialah skop penggunaan bahasa. Jika ia adalah domain khusus dan beberapa bahasa khusus domain mesti digunakan, bahasa yang paling umum digunakan adalah diutamakan. Nasib baik, memandangkan Java mencadangkan "tulis sekali, jalankan di mana-mana", masa jalan dan penggunaan tidak lagi menjadi isu, dan kos serta pelesenan tidak lagi menjadi kekangan. Hari ini, semua bahasa pengaturcaraan, masa jalan dan pelbagai alatan pada dasarnya tersedia secara percuma. Jika sesuatu bahasa tidak sesuai untuk majlis khas, hanya boleh dikatakan ia tidak cukup popular dan belum tersebar kepada semua orang atau kerana beberapa faktor asas bahasa itu benar-benar tidak sesuai untuk tugas itu.
Kepopularan penting, kita harus memilih bahasa yang mempunyai komuniti yang kuat, sumber maklumat yang kaya dan sejumlah besar pengaturcara lain untuk bekerja atau diupah. Mana-mana bahasa yang tidak popular tidak patut dipilih. Jika anda menghadapi keadaan khusus, pilihan akan menjadi lebih sukar. Tiada satu bahasa yang sesuai untuk semua senario, tetapi idealnya, bahasa arus perdana yang biasa sepatutnya mencukupi untuk kebanyakan senario.
Akhir sekali, bahasa pengaturcaraan yang kami pilih harus lebih baik daripada kebanyakan bahasa lain. Malah pada tahun 2022, masih terdapat beberapa bahasa pengaturcaraan yang dahsyat yang sukar untuk dipelajari dan digunakan, dan boleh menyebabkan pengaturcara dengan mudah menghadapi masalah.
Memandangkan kenyataan di atas, saya rasa kita sebenarnya tidak mempunyai banyak pilihan. Sekarang, mari kita lihat bahasa pengaturcaraan terbaik ini.
JavaScript dalam dunia bahasa pengaturcaraan adalah seperti bahasa Inggeris yang digunakan oleh manusia untuk berkomunikasi. Ia adalah bahasa pengaturcaraan yang paling popular dan serba boleh, sesuai untuk banyak senario yang berbeza (penyemak imbas/depan, sistem/belakang, tertanam sebagai bahasa sambungan dalam banyak persekitaran). Masa jalan JavaScript (V8/Node/Deno) sangat cekap, mempunyai banyak alatan hebat dan komuniti yang besar.
TypeScript ialah superset JavaScript yang memperkenalkan alat penaipan dan standard yang kuat dan dengan cepat menjadi pilihan lalai untuk pengaturcaraan JS.
Karat mempunyai semua ciri C/C++, lebih mudah digunakan dan tidak mempunyai terlalu banyak perangkap. Komuniti dan ekosistem Rust adalah kuat dan berkembang, dan alatnya bagus untuk digunakan. Jika Rust menyediakan semua ciri yang anda perlukan, maka ia pasti pilihan terbaik. Di mana anda hanya boleh menggunakan C atau C++ sebelum ini, anda kini boleh memilih Rust. Selain itu, Rust juga sedang membina bahasa universalnya sendiri untuk WebAssembly (WebAssembly boleh dikatakan sebagai runtime "tulis sekali, jalankan di mana-mana" yang muktamad).
Saya telah menggunakan Python selama lebih daripada 20 tahun Malangnya, pada tahun 2022, Python masih Tidak benar-benar bahasa pengaturcaraan tujuan umum. Salah satu sebabnya ialah Python masih sangat tidak cekap dan tidak boleh digunakan dalam banyak situasi berfokuskan prestasi. Sebab lain ialah ia tidak menjadikannya sebagai persekitaran yang menghadap pengguna arus perdana, seperti pelayar web atau telefon mudah alih. Walaupun begitu, Python masih merupakan bahasa pengaturcaraan yang sangat baik dan menduduki kedudukan penting dalam kejuruteraan data/sains data/pembelajaran mesin, jadi jika anda bekerja dalam bidang ini, Python pastinya bahasa yang patut diketahui dan dicintai. Seperti sedia ada, Python berkemungkinan akan terus berkembang sebagai bahasa universal untuk sains data, tetapi ia mungkin tidak dapat menembusi bidang ini.
Go ialah bahasa yang sangat sesuai untuk pengaturcaraan "awan". Bahasa Go adalah elegan, mudah dipelajari dan digunakan serta mempunyai komuniti, ekosistem dan alatan yang sangat baik. Ia digunakan secara meluas dalam produk teras dalam ruang asli awan, jadi ia kekal di sini. Malangnya, Go tidak boleh digunakan secara universal dan tidak boleh digunakan di luar pelayan Internet. Selain itu, disebabkan pilihan reka bentuk Go, ia tidak berfungsi dengan baik dalam dunia C/C++. Go bagus, tetapi jika anda perlu membuat pilihan, Rust boleh melaksanakan semua fungsi yang Go boleh capai Apabila masa berlalu, Go mungkin digantikan dengan bahasa pengaturcaraan sistem arus perdana.
C# dan ekosistemnya hebat dan anda boleh melakukan banyak perkara dengannya. Java tidak sebagus C# dalam setiap aspek, jadi saya tidak faham mengapa sesiapa menyukainya, tetapi Java sangat popular. C# digunakan secara meluas, bukan sahaja sebagai sistem dan bahasa "perniagaan", tetapi kini juga meluas ke aplikasi mudah alih dan pelayar. Masa jalan yang berkuasa, ekosistem yang hebat. Walau bagaimanapun, melainkan anda memerlukan beberapa masa jalan yang dibuat khusus C# dan keupayaan alatan, sukar bagi C# untuk bersaing dengan JavaScript dan Rust dalam jangka pendek.
Menurut Lindy Effect, C dan C++ akan terus popular dalam beberapa dekad akan datang. Jika anda sudah mahir dalam kedua-dua bahasa ini, anda pasti tidak akan risau untuk mencari pekerjaan. Sekiranya terdapat keperluan dalam bidang ini, ia juga merupakan pilihan yang baik untuk meluangkan masa mempelajari kedua-duanya. Jika tidak, memilih Rust adalah lebih sesuai.
Bahasa-bahasa ini mempunyai tempat dalam bidang tertentu. Jika pengaturcaraan UI mudah alih diperlukan, ini adalah pilihan yang baik. Tetapi JavaScript lebih boleh digunakan secara universal dan juga sesuai untuk pembangunan mudah alih, jadi kita harus lebih memilih JavaScript.
LISP sangat istimewa Walaupun anda tidak mempunyai keperluan ini dalam kerja harian anda, anda harus mempelajarinya. Raket ialah bahasa yang canggih dan sangat kompleks (sebenarnya ia adalah kit alat pembinaan bahasa). Clojure dikhabarkan berkuasa kerana ia menyasarkan JVM dan boleh menggunakan perpustakaan Java. Tetapi saya tidak pasti betapa bergunanya titik jualan ini.
Bahasa berfungsi adalah penting. Dalam sesetengah kes, mereka adalah pilihan yang unggul. Haskell ialah wakil pengaturcaraan berfungsi. F# mempunyai kebolehgunaan umum yang lebih baik kerana ia berjalan pada CLR dan boleh menggunakan perpustakaan .NET. Scala tidak berfungsi semata-mata, tetapi sangat umum dan berjalan pada JVM.
Julia sangat sesuai untuk bidang matematik. Kedua-dua R dan MATLAB adalah baik pada situasi tertentu. Walau bagaimanapun, dalam bidang kejuruteraan data yang dikuasai oleh Python, bahasa pengaturcaraan ini mungkin sukar untuk bertahan.
Jika anda berminat dengan pengaturcaraan shell, PowerShell ialah pilihan terbaik. Ia berfungsi pada semua sistem pengendalian, jadi kami tidak mempunyai sebab untuk menggunakan mana-mana shell lain. PowerShell juga boleh dianggap sebagai bahasa pengaturcaraan tujuan umum, tetapi sebenarnya, tiada siapa yang menggunakannya di luar pengurusan bukan sistem. bahasa "belakang". Tidak kira apa yang anda fikirkan tentang bahasa-bahasa ini, anda tidak perlu lagi mensia-siakan usaha anda padanya. Mereka semua sedang nazak.
Ringkasan
Atas ialah kandungan terperinci Refleksi daripada pengaturcara asing lama: Anda tidak boleh mempunyai C, Python dan Java pada masa yang sama, hanya tumpukan pada pembelajaran satu bahasa pengaturcaraan dengan baik!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!