
Falsafah Membimbing
1. Bahasa pengaturcaraan untuk orang ramai
Bahasa pengaturcaraan ialah cara orang bercakap dengan komputer. Komputer akan senang bercakap apa-apa bahasa yang tidak samar-samar. Sebab kami mempunyai bahasa peringkat tinggi adalah kerana orang tidak dapat mengendalikan bahasa mesin. Tujuan bahasa pengaturcaraan adalah untuk mengelakkan otak manusia kita yang lemah dan rapuh daripada diliputi oleh terlalu banyak butiran.
Arkitek tahu bahawa beberapa masalah reka bentuk lebih biasa daripada yang lain. Beberapa masalah reka bentuk yang paling jelas dan paling abstrak ialah reka bentuk jambatan. Dalam kes ini, tugas anda adalah untuk menutup jarak yang diperlukan dengan bahan sesedikit mungkin. Di hujung spektrum yang lain ialah reka bentuk kerusi. Pereka kerusi harus menghabiskan masa mereka memikirkan punggung orang.
Pembangunan perisian mempunyai perbezaan yang sama. Mereka bentuk algoritma untuk menghalakan data melalui rangkaian adalah masalah abstrak yang bagus, seperti mereka bentuk jambatan. Sedangkan mereka bentuk bahasa pengaturcaraan adalah seperti mereka bentuk kerusi: anda perlu berurusan dengan kelemahan manusia.
Ini sukar untuk kebanyakan kita sedar. Mereka bentuk sistem matematik yang elegan terdengar lebih menarik bagi kebanyakan kita daripada memikirkan kelemahan manusia. Peranan keanggunan matematik ialah beberapa tahap keanggunan menjadikan program lebih mudah difahami. Tetapi ia bukan semua tentang keanggunan.
Dan apabila saya mengatakan bahawa bahasa harus direka untuk menampung kelemahan manusia, saya tidak bermaksud bahawa bahasa harus direka untuk pengaturcara yang buruk. Pada hakikatnya, anda harus mereka bentuk perisian untuk pengaturcara terbaik, tetapi pengaturcara terbaik pun mempunyai hadnya. Saya tidak fikir sesiapa akan menikmati pengaturcaraan dalam bahasa di mana semua pembolehubah dilambangkan dengan huruf "x" dengan subskrip integer.
2. Reka bentuk untuk diri sendiri dan rakan-rakan anda
Jika anda melihat sejarah bahasa pengaturcaraan, kebanyakan bahasa terbaik direka untuk digunakan oleh pengarang mereka sendiri, dan kebanyakan bahasa yang paling teruk direka untuk digunakan oleh orang lain.
Apabila bahasa direka untuk orang lain, ia sentiasa merupakan kumpulan orang tertentu: orang tidak sepandai pencipta bahasa itu. Beginilah cara anda mendapat lidah yang bercakap rendah kepada anda. Cobol adalah contoh yang paling menonjol, tetapi kebanyakan bahasa disemai dengan semangat ini.
Ia tidak ada kena mengena dengan tahap tinggi bahasa itu. C adalah tahap yang agak rendah, tetapi ia dicipta untuk digunakan oleh pengarangnya, itulah sebabnya penggodam menyukainya.
Hujah untuk mereka bentuk bahasa untuk pengaturcara yang buruk adalah bahawa terdapat lebih banyak pengaturcara yang buruk daripada yang baik. Mungkin begini. Tetapi sebilangan kecil pengaturcara yang baik ini menulis lebih banyak perisian secara tidak seimbang.
Soalan saya ialah, bagaimana anda mencipta bahasa yang menarik kepada penggodam terbaik? Nampaknya kepada saya bahawa soalan ini adalah sama dengan persoalan bagaimana untuk mencipta bahasa pengaturcaraan yang baik?, tetapi walaupun tidak, ia sekurang-kurangnya soalan yang menarik.
3. Beri pengaturcara kawalan sebanyak mungkin
Banyak bahasa (terutamanya yang direka untuk orang lain) bertindak seperti pengasuh: mereka cuba memberi amaran kepada anda daripada perkara yang mereka fikir tidak berguna kepada anda. Saya mengambil pandangan yang bertentangan: berikan pengaturcara kawalan sebanyak yang anda boleh.
Apabila saya mula-mula belajar Lisp, perkara yang paling saya suka ialah kami bercakap sebagai sama. Dalam bahasa lain yang saya pelajari pada ketika itu, terdapat bahasa, dan terdapat program saya dalam bahasa itu, dan mereka wujud secara berasingan. Tetapi dalam Lisp, fungsi dan makro yang saya tulis adalah sama di mana bahasa itu sendiri ditulis. Saya boleh menulis semula bahasa itu sendiri jika saya mahu. Ia mempunyai daya tarikan yang sama seperti perisian sumber terbuka.
4. Singkatnya adalah kakak kepada bakat
Ringkas dipandang remeh malah dihina. Tetapi jika anda melihat ke dalam hati penggodam, anda akan melihat bahawa mereka benar-benar suka singkat. Berapa kali anda pernah mendengar penggodam bercakap dengan mesra tentang bagaimana, dalam, katakan, APL, mereka boleh melakukan perkara yang menakjubkan dengan hanya beberapa baris kod? Saya rasa orang yang bijak sebenarnya suka memberi perhatian kepada perkara ini.
Saya percaya bahawa hampir semua perkara yang menjadikan program lebih pendek adalah perkara yang baik. Perlu ada banyak fungsi perpustakaan, semua yang boleh tersirat harus begitu; sintaks hendaklah lebih ringkas; nama entiti pun hendaklah pendek.
Dan bukan sahaja program harus pendek. Manual juga harus pendek. Sebahagian besar manual diisi dengan penjelasan, penafian, amaran dan kes khas. Jika anda perlu memendekkan manual, pilihan terbaik ialah membetulkan bahasa yang memerlukan banyak penjelasan.
5. Kenali apa itu penggodaman
Ramai orang ingin menggodam sebagai matematik, atau sekurang-kurangnya sesuatu yang serupa dengan sains. Saya fikir penggodaman lebih seperti seni bina. Seni bina adalah mengenai fizik kerana seorang arkitek perlu mereka bentuk bangunan yang tidak akan runtuh, tetapi matlamat sebenar seorang arkitek adalah untuk mencipta bangunan yang hebat, bukan untuk membuat penemuan dalam bidang statik.
Perkara yang digemari oleh penggodam ialah mencipta program yang hebat. Dan saya fikir, sekurang-kurangnya dalam pemikiran kita sendiri, kita harus ingat bahawa menulis program yang hebat adalah perkara yang menarik, walaupun kerja itu tidak mudah diterjemahkan ke dalam mata wang intelektual biasa kertas saintifik. Dari sudut pandangan intelek, adalah sama pentingnya untuk mereka bentuk bahasa yang akan digemari oleh pengaturcara seperti juga untuk mereka bentuk bahasa yang dahsyat yang merangkumi idea yang boleh anda terbitkan.
Isu terbuka
1. Bagaimana untuk menyusun perpustakaan besar?
Perpustakaan menjadi bahagian penting dalam bahasa pengaturcaraan. Mereka menjadi terlalu besar sehingga boleh berbahaya. Jika ia mengambil masa yang lebih lama untuk mencari fungsi dalam perpustakaan yang melakukan apa yang anda perlukan daripada menulis sendiri fungsi itu, maka semua kod tidak melakukan apa-apa selain menjadikan manual anda lebih tebal. (Manual Symbolics adalah contoh perkara ini.) Jadi kita perlu menyelesaikan masalah organisasi perpustakaan. Sebaik-baiknya, reka bentuknya supaya pengaturcara boleh meneka fungsi perpustakaan yang sesuai.
2. Adakah orang benar-benar takut dengan sintaks awalan?
Ini adalah masalah terbuka dalam erti kata bahawa saya telah memikirkannya selama beberapa tahun dan masih tidak tahu jawapannya. Sintaks awalan kelihatan semula jadi kepada saya, kecuali mungkin untuk kegunaannya dalam matematik. Tetapi mungkin banyak ketidakpopularan Lisp hanya disebabkan oleh sintaks yang tidak biasa... Sama ada kita perlu melakukan apa-apa mengenainya, jika benar, adalah perkara lain.
3. Apakah yang anda perlukan untuk perisian pelayan?
Saya fikir kebanyakan aplikasi yang akan ditulis dalam dua puluh tahun akan datang adalah aplikasi web, dalam erti kata bahawa program akan ditempatkan pada pelayan dan berkomunikasi dengan anda melalui pelayar web. Dan untuk menulis aplikasi sedemikian kita memerlukan perkara baru.
Salah satu perkara itu ialah sokongan untuk cara baharu untuk melepaskan aplikasi pelayan. Daripada satu atau dua keluaran besar setiap tahun, seperti perisian desktop, perisian pelayan akan dikeluarkan dalam siri perubahan kecil. Anda mungkin mempunyai lima atau sepuluh keluaran sehari. Dan semua orang akan sentiasa mempunyai versi terkini.
Adakah anda tahu cara mereka bentuk program supaya boleh diselenggara? Perisian pelayan mesti direka bentuk supaya boleh diubah. Anda sepatutnya boleh mengubahnya dengan mudah, atau sekurang-kurangnya tahu apa maksud perubahan kecil dan apa yang penting.
Satu lagi perkara yang boleh berguna dalam perisian pelayan adalah, tiba-tiba, kesinambungan penghantaran. Dalam aplikasi web anda boleh menggunakan sesuatu seperti untuk mendapatkan kesan rutin dalam dunia sesi web tanpa kewarganegaraan. Mempunyai kesinambungan bekalan mungkin berbaloi jika ciri itu tidak terlalu mahal.
4. Apakah abstraksi baharu yang masih perlu ditemui?
Saya tidak pasti betapa munasabahnya harapan itu, tetapi secara peribadi saya benar-benar ingin menemui abstraksi baharu - sesuatu yang boleh bermakna seperti fungsi kelas pertama atau rekursi atau sekurang-kurangnya parameter lalai. Mungkin ini mimpi yang mustahil. Perkara sebegini selalunya tidak ditemui. Tetapi saya tidak kehilangan harapan.
Rahsia yang kurang diketahui
1. Anda boleh menggunakan mana-mana bahasa yang anda mahukan
Sebelum ini, penciptaan aplikasi bermaksud penciptaan perisian desktop. Dan dalam perisian desktop terdapat kecenderungan besar terhadap penulisan aplikasi dalam bahasa yang sama dengan sistem pengendalian. Jadi sepuluh tahun yang lalu, perisian menulis secara umum bermaksud perisian menulis dalam C. Akhirnya, tradisi berkembang: aplikasi tidak boleh ditulis dalam bahasa luar biasa. Dan tradisi ini telah berkembang begitu lama sehingga orang bukan teknikal seperti pengurus dan pemodal teroka telah mempelajarinya juga.
Perisian bahagian pelayan memusnahkan model ini sepenuhnya. Dengan perisian bahagian pelayan, anda boleh menggunakan mana-mana bahasa yang anda mahukan. Hampir tiada siapa yang memahami perkara ini lagi (terutamanya pengurus dan pemodal teroka). Tetapi sesetengah penggodam memahaminya, itulah sebabnya kita mendengar tentang bahasa indy seperti Perl dan Python. Kita tidak mendengar tentang Perl dan Python kerana orang ramai menggunakannya untuk menulis aplikasi untuk Windows.
Apakah maksudnya bagi kami, orang yang berminat dalam reka bentuk bahasa pengaturcaraan, bahawa terdapat potensi penonton untuk kerja kami.
2. Kelajuan datang dari profiler
Pembangun bahasa, atau sekurang-kurangnya pelaksana bahasa, suka menulis penyusun yang menjana kod pantas. Tetapi saya fikir bukan itu yang menjadikan bahasa pantas untuk pengguna. Knuth menyatakan lama dahulu bahawa kelajuan bergantung pada hanya beberapa kesesakan. Dan sesiapa yang telah mencuba untuk mempercepatkan program tahu bahawa anda tidak dapat meneka di mana kesesakan itu. Profiler adalah jawapannya.
Pembangun bahasa sedang menyelesaikan masalah yang salah. Pengguna tidak memerlukan penanda aras untuk berjalan dengan cepat. Mereka memerlukan bahasa yang boleh menunjukkan bahagian mana program mereka perlu ditulis semula. Pada ketika ini, kelajuan diperlukan dalam amalan. Jadi mungkin lebih baik jika pelaksana bahasa menghabiskan separuh masa yang mereka habiskan untuk mengoptimumkan pengkompil dan menghabiskannya untuk menulis profiler yang baik.
3. Anda memerlukan aplikasi yang membuat bahasa anda berkembang
Ini mungkin bukan kebenaran muktamad, tetapi nampaknya bahasa terbaik berkembang bersama-sama dengan aplikasi di mana ia digunakan. C ditulis oleh orang yang memerlukan pengaturcaraan sistem. Lisp telah direka sebahagiannya untuk pembezaan simbolik, dan McCarthy begitu bersemangat untuk memulakan sehingga dia mula menulis program pembezaan dalam kertas Lisp pertama pada tahun 1960.
Ini amat baik jika aplikasi anda menyelesaikan beberapa masalah baharu. Ini mendorong bahasa anda untuk mempunyai ciri baharu yang diingini oleh pengaturcara. Secara peribadi, saya berminat untuk menulis bahasa yang sesuai untuk aplikasi pelayan.
[Semasa perbincangan, Guy Steele juga menyatakan perkara ini, sambil menambah bahawa aplikasi itu tidak sepatutnya terdiri daripada menulis pengkompil untuk bahasa anda, melainkan bahasa anda direka untuk menulis penyusun.]
4. Bahasa mestilah sesuai untuk menulis program sekali sahaja.
Anda tahu maksud program satu pukulan: ia adalah masa anda perlu menyelesaikan beberapa masalah terhad dengan cepat. Saya percaya bahawa jika anda melihat sekeliling, anda akan mendapati banyak program serius yang bermula secara sekali sahaja. Saya tidak akan terkejut jika kebanyakan program bermula secara one-off. Oleh itu, jika anda ingin mencipta bahasa yang sesuai untuk menulis perisian secara umum, maka ia juga harus sesuai untuk menulis program sekali sahaja, kerana ini adalah peringkat awal banyak program.
5. Sintaksis adalah berkaitan dengan semantik
Secara tradisinya dipercayai bahawa sintaks dan semantik adalah perkara yang sangat berbeza. Ini mungkin kedengaran mengejutkan, tetapi tidak. Saya fikir apa yang anda ingin capai dalam program anda mempunyai kaitan dengan cara anda menyatakannya.
Saya baru-baru ini bercakap dengan Robert Morris, dan dia menyatakan bahawa beban berlebihan operator adalah tambahan besar untuk kemenangan bahasa dengan sintaks infix. Dalam bahasa dengan sintaks awalan, sebarang fungsi yang anda takrifkan sebenarnya adalah pengendali. Jika anda ingin menambah jenis nombor baharu yang anda buat, anda boleh mentakrifkan fungsi baharu untuk menambahnya. Jika anda melakukan ini dalam bahasa dengan sintaks infix, anda akan melihat bahawa terdapat perbezaan yang besar antara menggunakan operator yang terlebih beban dan memanggil fungsi.
Idea yang kembali dari masa ke masa
1. Bahasa pengaturcaraan baharu
Mengimbas kembali ke tahun 1970-an, adalah bergaya untuk membangunkan bahasa pengaturcaraan baharu. Ini tidak berlaku sekarang. Tetapi saya percaya bahawa perisian pelayan akan mengembalikan semula fesyen untuk mencipta bahasa baharu. Dengan perisian pelayan anda boleh menggunakan mana-mana bahasa yang anda mahu, jadi jika seseorang mencipta bahasa yang kelihatan lebih baik daripada yang lain, akan ada orang yang akan memutuskan untuk menggunakannya.
2. Perkongsian masa
Richard Kelsey menghasilkan idea ini yang masanya telah tiba lagi dan saya menyokongnya sepenuhnya. Tekaan saya (dan Microsoft juga) ialah banyak pengkomputeran akan bergerak dari desktop ke pelayan jauh. Dengan kata lain, perkongsian masa kembali. Saya fikir ini memerlukan sokongan di peringkat bahasa. Sebagai contoh, Richard dan Jonathan Reeves telah melakukan banyak kerja untuk melaksanakan penjadualan proses dalam Skim 48.
3. Kecekapan
Baru-baru ini, komputer seolah-olah sudah cukup pantas. Kita semakin banyak mendengar tentang bytecode, yang, sekurang-kurangnya bagi saya, bermakna kita mempunyai kuasa tambahan. Tetapi saya fikir dengan perisian pelayan, kita tidak mempunyai kuasa tambahan. Seseorang perlu membayarnya. pelayan, tempat perisian dijalankan, dan bilangan pengguna yang boleh disokong oleh pelayan bagi setiap mesin akan menjadi pembahagi kos modal mereka.
Saya fikir kecekapan akan penting, sekurang-kurangnya dalam kesesakan pengkomputeran. Ini akan menjadi penting terutamanya untuk operasi I/O, kerana aplikasi pelayan melakukan banyak operasi sedemikian.
Pada akhirnya, mungkin ternyata bytecode bukanlah jawapannya. Sun dan Microsoft nampaknya akan saling berhadapan dalam medan bytecode pada masa ini. Tetapi mereka melakukan ini kerana bytecode ialah tempat yang mudah untuk membenamkan dirinya ke dalam proses, bukan kerana bytecode itu sendiri adalah idea yang baik. Ia mungkin ternyata bahawa keseluruhan pertempuran ini tidak akan disedari. Ia akan menjadi lucu.
Jerat dan jerat
1. Pelanggan
Ini hanya tekaan, tetapi satu-satunya aplikasi yang akan mendapat manfaat adalah aplikasi yang sepenuhnya di sisi pelayan. Mereka bentuk perisian yang beroperasi dengan andaian bahawa setiap orang akan mempunyai pelanggan adalah seperti mereka bentuk masyarakat berdasarkan andaian bahawa setiap orang akan jujur. Ia pastinya mudah, tetapi anda perlu menganggap bahawa ia tidak akan berlaku.
Saya fikir akan terdapat peningkatan pesat dalam peranti yang didayakan web, dan kita boleh mengandaikan bahawa ia akan menyokong html dan borang asas. Adakah anda mempunyai penyemak imbas pada telefon anda? Adakah PalmPilot anda mempunyai telefon? Adakah blackberry anda mempunyai skrin yang lebih besar? Adakah anda boleh mengakses Internet daripada budak permainan anda? Dari jam tangan anda? saya tak tahu. Dan saya tidak perlu mengetahui sama ada saya bertaruh bahawa semuanya akan berada di pelayan. Ia hanya lebih dipercayai untuk mempunyai semua otak pada pelayan. .
2. Pengaturcaraan berorientasikan objek
Saya sedar ini adalah kenyataan kontroversi, tetapi saya rasa OOP tidak begitu penting. Saya rasa ini adalah paradigma yang sesuai untuk aplikasi khusus yang memerlukan struktur data khusus, seperti sistem windowing, simulasi, sistem CAD. Tetapi saya tidak faham mengapa ia harus sesuai untuk semua program.
Saya rasa orang dalam syarikat besar menyukai OOP, sebahagiannya, kerana ia menjadikan banyak perkara yang kelihatan seperti berfungsi. Perkara yang secara semula jadi boleh diwakili sebagai, katakan, senarai integer, kini boleh diwakili sebagai bilik darjah dengan pelbagai jenis perancah, hiruk-pikuk dan kesibukan.
Satu lagi ciri menarik OOP ialah kaedah memberi anda beberapa kesan fungsi kelas pertama. Tetapi ini bukan berita untuk pengaturcara Lisp. Apabila anda mempunyai fungsi kelas pertama yang benar, anda hanya boleh menggunakannya dalam apa-apa cara yang sesuai dengan tugasan di tangan, dan bukannya menolak segala-galanya ke dalam kumpulan kelas dan kaedah.
Saya fikir maksud ini untuk reka bentuk bahasa ialah anda tidak seharusnya membenamkan OOP terlalu mendalam ke dalamnya. Mungkin jawapannya adalah untuk menawarkan perkara yang lebih umum dan asas, dan membiarkan orang mereka bentuk mana-mana sistem objek sebagai perpustakaan.
3. Reka bentuk mengikut jawatankuasa
Jika bahasa anda direka oleh jawatankuasa, maka anda terperangkap, dan bukan hanya atas sebab yang semua orang tahu. Semua orang tahu bahawa jawatankuasa cenderung untuk mencipta reka bentuk bahasa yang berketul-ketul dan tidak konsisten. Tetapi saya fikir bahaya besar ialah mereka tidak mengambil risiko. Apabila seseorang bertanggungjawab, dia mengambil risiko yang jawatankuasa tidak akan bersetuju untuk mengambilnya.
Adakah anda perlu mengambil risiko untuk mencipta bahasa yang baik? Ramai orang mungkin mengesyaki bahawa reka bentuk bahasa adalah tempat anda perlu kekal dekat dengan kebijaksanaan tradisional. Saya yakin itu tidak berlaku. Dalam semua perkara lain yang orang lakukan, ganjaran adalah berkadar dengan risiko. Jadi mengapa reka bentuk bahasa harus berbeza?
Sumber: www.habr.com
