
Pandhuan Filsafat
1. Basa pemrograman kanggo manungsa
Basa pemrograman yaiku cara manungsa ngomong karo komputer. Komputer bakal seneng ngomong karo basa apa wae sing ora ambigu. Alesan kita duwe basa tingkat dhuwur amarga manungsa ora bisa nangani basa mesin. Inti saka basa pamrograman yaiku kanggo nyegah otak manungsa sing rapuh supaya ora kepunjulen dening akeh rincian.
Arsitek ngerti manawa sawetara masalah desain luwih umum tinimbang liyane. Salah sawijining masalah desain sing paling jelas lan abstrak yaiku ngrancang jembatan. Ing kasus iki, tugas sampeyan yaiku ngetung jarak sing diwenehake kanthi materi sing sethithik. Ing mburi liyane saka spektrum ngrancang kursi. Desainer kursi kudu nglampahi wektu mikir babagan bokong wong.
Pangembangan piranti lunak nduweni bedane sing padha. Ngrancang algoritma kanggo nuntun data liwat jaringan minangka masalah abstrak sing apik, kaya ngrancang jembatan. Dene ngrancang basa pamrograman kaya ngrancang kursi: sampeyan kudu ngatasi kekurangan manungsa.
Iki angel kanggo umume kita nampa. Ngrancang sistem matematika elegan muni luwih narik kawigaten kanggo umume kita tinimbang pandering kanggo foibles manungsa. Peran keanggunan matematika yaiku tingkat keanggunan tartamtu nggawe program luwih gampang dingerteni. Nanging keanggunan ora kabeh.
Lan nalika aku ngomong yen basa kudu dirancang kanggo nampung kelemahane manungsa, aku ora ateges basa kudu dirancang kanggo programer sing ala. Nyatane, sampeyan kudu ngrancang piranti lunak kanggo programer sing paling apik, nanging malah programer sing paling apik duwe watesan. Aku ora mikir sapa bakal seneng program ing basa ngendi kabeh variabel diwakili dening huruf "x" karo indeks integer.
2. Desain kanggo dhewe lan kanggo kanca-kanca
Yen sampeyan ndeleng sejarah basa pamrograman, umume basa paling apik dirancang kanggo digunakake dening penulis, lan umume basa sing paling ala dirancang kanggo wong liya.
Nalika basa dirancang kanggo wong liya, mesthi dadi klompok tartamtu: wong sing ora pinter kaya desainer basa. Dadi sampeyan entuk basa sing bisa ngomong karo sampeyan. Cobol minangka conto sing paling ekstrem, nanging umume basa duwe semangat kasebut.
Ora ana hubungane karo tingkat dhuwur basa kasebut. C cukup tingkat rendah, nanging digawe kanggo penulis, mula peretas seneng.
Argumentasi kanggo ngrancang basa kanggo programer sing ala yaiku ana luwih akeh programer sing ala tinimbang sing apik. Iki bisa uga bener. Nanging nomer cilik iki programer apik nulis disproportionately liyane piranti lunak.
Aku kasengsem ing pitakonan, carane nggawe basa sing paling apik peretas bakal seneng? Aku pitakonan iki identik karo pitakonan, carane nggawe basa program apik?, nanging sanajan ora, iku paling pitakonan menarik.
3. Menehi programmer minangka akeh kontrol sabisa
Akeh basa (utamane sing dirancang kanggo wong liya) tumindak kaya pengasuh: dheweke nyoba nyegah sampeyan nindakake perkara sing dianggep ora migunani kanggo sampeyan. Aku njupuk tampilan ngelawan: menehi programmer minangka akeh kontrol sing bisa.
Nalika aku pisanan sinau Lisp, sing paling aku seneng yaiku yen kita ngomong padha. Ing basa liyane aku wis sinau ing titik, ana basa, lan ana program sandi ing basa, lan padha cukup kapisah. Nanging ing Lisp, fungsi lan makro sing daktulis padha karo basa sing ditulis. Aku bisa nulis ulang basa kasebut yen aku pengin. Nduwe daya tarik sing padha karo piranti lunak open source.
4. Brevity iku adhine pinter
Ringkesan disepelekake lan malah disepelekake. Nanging yen sampeyan ndeleng ati para peretas, sampeyan bakal weruh manawa dheweke seneng singkat. Kaping pirang-pirang sampeyan wis krungu peretas ngomong kanthi seneng babagan carane, ujare, ing APL, dheweke bisa nindakake perkara sing luar biasa kanthi mung sawetara baris kode? Aku percaya yen wong sing pinter pancen seneng nggatekake iki.
Aku sing meh kabeh sing nggawe program luwih cendhek iku apik. Ana kudu akeh fungsi perpustakaan, kabeh sing bisa implisit kudu dadi; sintaksis kudu luwih ringkes; malah jeneng entitas kudu cendhak.
Lan ora mung program sing kudu cendhak. Manual uga kudu cendhak. Bagean manual sing apik diisi karo panjelasan, peringatan, peringatan, lan kasus khusus. Yen sampeyan kudu nyepetake manual, pilihan sing paling apik yaiku ndandani basa sing mbutuhake panjelasan akeh.
5. Ngenali apa hacking
Akeh wong sing pengin hacking minangka matematika, utawa paling ora kaya ilmu. Aku mikir hacking luwih kaya arsitektur. Arsitektur ana hubungane karo fisika, amarga arsitek kudu ngrancang bangunan sing ora bakal ambruk, nanging tujuane arsitek sing sejati yaiku nggawe bangunan sing apik, dudu kanggo nemokake babagan statika.
Sing disenengi peretas yaiku nulis program sing apik. Lan aku mikir, paling ora ing pikiran kita dhewe, kita kudu ngelingi yen nulis program sing apik banget, sanajan karya kasebut ora gampang diterjemahake menyang mata uang intelektual biasa ing makalah akademik. Penting banget sacara intelektual kanggo ngrancang basa sing disenengi para programer kaya ngrancang basa sing nggegirisi sing ngemot ide sing bisa sampeyan nerbitake makalah.
Masalah mbukak
1. Kepiye carane ngatur perpustakaan gedhe?
Pustaka dadi bagean penting saka basa pemrograman. Padha dadi gedhe banget sing bisa mbebayani. Yen butuh wektu luwih suwe kanggo nemokake fungsi ing perpustakaan sing nindakake apa sing dikarepake tinimbang nulis fungsi kasebut dhewe, mula kabeh kode kasebut ora nindakake apa-apa nanging nggawe manual luwih kenthel. (Manual Symbolics minangka conto.) Dadi, kita kudu ngrampungake masalah babagan carane perpustakaan diatur. Saenipun, desain mau supaya programmer bisa guess fungsi perpustakaan bakal bisa.
2. Apa wong pancen wedi karo sintaksis awalan?
Iki masalah mbukak ing pangertèn sing aku wis mikir babagan iki kanggo taun lan isih ora ngerti jawaban. Sintaks ater-ater katon alami kanggo kula, kajaba kanggo panggunaan ing matématika. Nanging bisa uga akeh sing ora populer Lisp mung amarga sintaksis sing ora dingerteni ... Apa sing kudu ditindakake, yen bener, iku pitakonan liyane.
3. Apa sampeyan kudu piranti lunak server?
Aku mikir paling aplikasi sing bakal ditulis ing rong puluh taun sabanjuré bakal aplikasi web, tegese program bakal ana ing server lan bakal komunikasi karo sampeyan liwat browser web. Lan kanggo nulis aplikasi kasebut, kita butuh perkara anyar.
Salah sijine yaiku ndhukung cara anyar kanggo ngeculake aplikasi server. Tinimbang siji utawa rong rilis gedhe saben taun, kaya piranti lunak desktop, piranti lunak server bakal diluncurake ing sawetara owah-owahan cilik. Sampeyan bisa uga duwe limang utawa sepuluh rilis saben dina. Lan saben wong mesthi duwe versi paling anyar.
Apa sampeyan ngerti carane ngrancang piranti lunak supaya bisa dijaga? Piranti lunak server kudu dirancang supaya bisa diganti. Sampeyan kudu bisa ngganti kanthi gampang, utawa paling ora ngerti apa owah-owahan cilik lan apa owah-owahan gedhe.
Bab liya sing bisa migunani ing piranti lunak server yaiku, dumadakan, kesinambungan pangiriman. Ing aplikasi web, sampeyan bisa nggunakake kaya kanggo entuk efek rutinitas ing sesi web tanpa negara. Sampeyan bisa uga kudu duwe kesinambungan pasokan yen fitur kasebut ora larang banget.
4. Apa abstraksi anyar sing isih bisa ditemokake?
Aku ora yakin carane cukup pangarep-arep iki, nanging wong aku pancene kaya kanggo nemokake abstraksi anyar - soko sing bisa nggawe minangka akeh prabédan minangka fungsi kelas siji utawa recursion utawa ing paling standar paramèter. Mungkin iku ngimpi mokal. Prekara-prekara kaya ngono asring ora ditemokake. Nanging aku ora nyerah.
Rahasia sing ora dingerteni
1. Sampeyan bisa nggunakake basa apa wae sing dikarepake.
Biyen nulis aplikasi tegese nulis piranti lunak desktop. Lan piranti lunak desktop duwe bias gedhe kanggo nulis aplikasi ing basa sing padha karo sistem operasi. Dadi sepuluh taun kepungkur, piranti lunak nulis umume tegese piranti lunak nulis ing C. Pungkasane, tradhisi kasebut berkembang: aplikasi ora kudu ditulis nganggo basa sing apik. Lan tradhisi kasebut wis berkembang banget nganti wong non-teknis kaya manajer lan kapitalis ventura uga wis sinau.
Piranti lunak sisih server ngrusak model iki kanthi lengkap. Kanthi piranti lunak sisih server, sampeyan bisa nggunakake basa apa wae sing dikarepake. Meh ora ana sing ngerti iki (utamane manajer lan kapitalis ventura). Nanging sawetara peretas ngerti, mula kita krungu babagan basa indy kaya Perl lan Python. Kita ora krungu babagan Perl lan Python amarga wong nggunakake kanggo nulis aplikasi kanggo. Windows.
Apa tegese kanggo kita, wong sing kasengsem ngrancang basa pamrograman, yaiku ana pamirsa potensial kanggo karya kita.
2. Kacepetan asalé saka profilers
Desainer basa, utawa paling ora pelaksana basa, seneng nulis kompiler sing ngasilake kode cepet. Nanging aku ora mikir sing nggawe basa cepet kanggo pangguna. Knuth ngelingi biyen yen kacepetan gumantung mung sawetara bottlenecks. Lan sapa wae sing nyoba nyepetake program ngerti yen sampeyan ora bisa ngira manawa ana bottleneck. A profiler minangka jawaban.
Desainer basa ngrampungake masalah sing salah. Pangguna ora pengin pathokan mlaku kanthi cepet. Dheweke pengin basa sing bisa menehi katrangan babagan bagean program sing kudu ditulis maneh. Ing wektu iki, kacepetan minangka sing dibutuhake ing praktik. Dadi mungkin luwih apik yen para pelaksana basa ngentekake setengah wektu kanggo ngoptimalake kompiler lan ngentekake nulis profiler sing apik.
3. Sampeyan butuh aplikasi sing nggawe basa sampeyan berkembang
Bisa uga dudu bebener sing paling penting, nanging basa sing paling apik katon wis berkembang karo aplikasi sing nggunakake. C ditulis dening wong sing pengin pemrograman sistem. Lisp dirancang kanggo diferensiasi simbolis; McCarthy kepengin banget miwiti, mula dheweke wiwit nulis program diferensiasi sanajan ing kertas Lisp pisanan ing taun 1960.
Iki luwih apik yen aplikasi sampeyan ngrampungake sawetara masalah anyar. Iki nyurung basa sampeyan duwe fitur anyar sing dikarepake para programer. Secara pribadi, aku kepengin nulis basa sing apik kanggo aplikasi server.
[Sajrone diskusi, Guy Steele uga nyatakake babagan iki, nambahake manawa aplikasi kasebut ora kalebu nulis kompiler kanggo basa sampeyan, kajaba basa sampeyan dirancang kanggo nulis kompiler.]
4. Basa kudu cocog kanggo nulis program siji-off.
Sampeyan ngerti apa tegese program mbuwang: yen sampeyan kudu nindakake tugas sing winates banget kanthi cepet. Aku yen katon watara, sampeyan bakal nemokake akèh program serius sing miwiti metu minangka throwaways. Aku ora bakal kaget yen paling program diwiwiti minangka throwaways. Dadi yen sampeyan pengin nggawe basa sing apik kanggo nulis piranti lunak umume, mesthine apik kanggo nulis program mbuwang, amarga iku wiwitane akeh piranti lunak.
5. Sintaksis gegayutan karo semantik
Kawicaksanan konvensional yaiku sintaksis lan semantik iku beda banget. Iki bisa uga muni ngageti, nanging ora. Aku mikir apa sing dikarepake ing program sampeyan ana hubungane karo cara sampeyan nyatakake.
Aku iki ngomong karo Robert Morris bubar, lan nuding metu sing operator overloading punika menang amba kanggo basa infix. Ing basa ater-ater, fungsi apa wae sing ditetepake minangka operator kanthi efektif. Yen sampeyan pengin nambah munggah jinis anyar saka nomer sing wis digawe munggah, sampeyan mung bisa nemtokake fungsi anyar kanggo nambah. Yen sampeyan nindakake ing basa infix, sampeyan bakal weruh sing ana prabédan amba antarane nggunakake operator overloaded lan nelpon fungsi.
Gagasan sing bali liwat wektu
1. Basa pamrograman anyar
Nggoleki maneh ing taun 1970-an, dadi modis kanggo ngembangake basa pemrograman anyar. Ora ngono maneh. Nanging aku lunak server bakal nggawa bali fashion kanggo nggawe basa anyar. Kanthi piranti lunak server, sampeyan bisa nggunakake basa apa wae sing dikarepake, dadi yen ana wong sing nggawe basa sing katon luwih apik tinimbang liyane, bakal ana wong sing arep nggunakake.
2. Enggo bareng wektu
Richard Kelsey wis idea iki, kang wektu wis teka maneh, lan aku ndhukung kanthi. Kula guess (lan Microsoft uga) iku akeh komputasi bakal pindhah saka desktop menyang server remot. Ing tembung liyane, wektu-sharing bali. Aku mikir kita butuh dhukungan basa. Contone, Richard lan Jonathan Reeves wis nindakake akeh pakaryan kanggo ngetrapake jadwal proses ing Skema 48.
3. Efisiensi
Bubar iki, komputer koyone wis cukup cepet. Kita saya kerep krungu babagan bytecode, sing paling ora kanggo aku, tegese kita duwe kekuwatan kanggo ngirit. Nanging aku mikir karo piranti lunak server, kita ora duwe. Bakal ana sing kudu mbayar kanggo iku. serverCacahing server sing digunakake piranti lunak lan cacahing panganggo sing bisa ditangani server saben mesin bakal dadi pambagi biaya modal.
Aku efisiensi bakal penting, paling ora ing bottlenecks komputasi. Iku bakal penting banget kanggo operasi I / O, amarga aplikasi server nindakake akeh I / O.
Pungkasane, bisa uga bytecode dudu jawaban. Sun lan Microsoft koyone gelut head-to-head ing arena bytecode. Nanging dheweke nindakake amarga bytecode minangka papan sing trep kanggo nglebokake awake dhewe menyang proses, ora amarga bytecode dhewe minangka ide sing apik. Bisa uga kabeh perang iki ora digatekake. Sing bakal lucu.
Traps lan pitfalls
1. Klien
Iku mung guess, nanging titik iku mung aplikasi sing bakal menang iku sing tanggung server-sisih. Ngrancang piranti lunak sing beroperasi kanthi asumsi yen saben wong bakal duwe klien sampeyan kaya mbangun masyarakat adhedhasar asumsi yen saben wong bakal jujur. Sing mesthi bakal trep, nanging sampeyan kudu nampa sing ora bakal kelakon.
Aku mikir bakal ana proliferasi piranti sing aktif web, lan aku bakal nganggep bakal ndhukung html lan formulir dhasar. Apa sampeyan duwe browser ing telpon? Apa PalmPilot sampeyan bakal duwe telpon? Apa Blackberry sampeyan bakal duwe layar sing luwih gedhe? Sampeyan bakal bisa kanggo njaluk online saka Gameboy Panjenengan? Saka jam tangan sampeyan? Aku ora ngerti. Lan aku ora kudu mangerteni yen aku nang kabeh ing server. Iku mung luwih aman kanggo duwe kabeh otak ing server.
2. Pemrograman berorientasi obyek
Aku ngerti iki statement kontrovèrsial, nanging aku ora mikir OOP penting. Aku iku paradigma apik kanggo aplikasi tartamtu sing mbutuhake struktur data tartamtu, kaya sistem windowing, simulasi, sistem CAD. Nanging aku ora weruh kenapa kudu apik kanggo kabeh program.
Aku wong ing perusahaan gedhe kaya OOP sebagian amarga menehi wong akeh iku sing katon kaya karya. Apa sing bisa diwakili kanthi alami minangka, umpamane, dhaptar integer, saiki bisa diwakili minangka kelas kanthi macem-macem scaffolding lan gangguan lan keributan.
Fitur liyane sing nyenengake saka OOP yaiku cara menehi efek saka fungsi kelas siji. Nanging iki ora anyar kanggo programer Lisp. Yen sampeyan duwe fungsi kelas kapisan bener, sampeyan mung bisa nggunakake ing sembarang cara sing cocog karo tugas ing tangan, tinimbang meksa kabeh menyang cithakan saka kelas lan cara.
Aku mikir apa tegese kanggo desain basa yaiku sampeyan ora kudu nglebokake OOP kanthi jero. Mungkin jawabane yaiku nawakake barang sing luwih umum lan dhasar, lan ngidini wong ngrancang sistem obyek sing dikarepake minangka perpustakaan.
3. Desain dening panitia
Yen basa sampeyan dirancang dening panitia, sampeyan ana ing jebakan, lan ora mung amarga alasan sing wis dikenal. Saben uwong ngerti yen panitia cenderung ngasilake desain basa sing ora konsisten. Nanging aku mikir bebaya sing luwih gedhe yaiku dheweke ora njupuk risiko. Nalika ana wong sing tanggung jawab, wong kasebut njupuk risiko sing ora bakal ditampa dening panitia.
Apa sampeyan kudu njupuk risiko kanggo nggawe basa sing apik? Akeh wong sing bisa ngira yen desain basa minangka perkara sing sampeyan kudu tetep cedhak karo kawicaksanan konvensional. Aku bakal mbantah manawa iki ora bener. Ing kabeh sing ditindakake wong, ganjarane sebanding karo resiko. Dadi kenapa desain basa kudu beda?
Source: www.habr.com
