Ukwenza izinhlelo kungaphezu kokufaka ikhodi

Ukwenza izinhlelo kungaphezu kokufaka ikhodi

Lesi sihloko siwukuhumusha Isemina yaseStanford. Kodwa ngaphambi kwakhe isingeniso esincane. Akhiwa kanjani amaZombi? Wonke umuntu ungene esimweni lapho efuna ukudonsa umngane noma ozakwabo afinyelele ezingeni lakhe, kodwa akwenzeki. Futhi akuningi nawe njengoba naye ukuthi "akusebenzi": ngakolunye uhlangothi lwesilinganiso umholo ovamile, imisebenzi, njalonjalo, futhi ngakolunye, isidingo sokucabanga. Ukucabanga akujabulisi futhi kubuhlungu. Avele anikezele ngokushesha aqhubeke nokubhala ikhodi ngaphandle kokuvula ubuchopho bakhe nhlobo. Uyacabanga ukuthi ungakanani umzamo odingekayo ukuze unqobe umgoqo wokungabi namandla okufundile, futhi awukwenzi. Yile ndlela ama-Zombies akhiwa ngayo, okubonakala sengathi angelapheka, kodwa kubonakala sengathi akekho ozokwenza.

Lapho ngibona lokho Leslie Lamport (yebo, umngane ofanayo ovela ezincwadini zokufunda) ufika eRussia futhi akenzi mbiko, kodwa isikhathi semibuzo nezimpendulo, ngangixwayile kancane. Uma kwenzeka, u-Leslie ungusosayensi odumile emhlabeni wonke, umbhali wemisebenzi eyisisekelo kukhompyutha esabalalisiwe, futhi ungamazi ngezinhlamvu La egameni elithi LaTeX - "Lamport TeX". Isici sesibili esishaqisayo siyisidingo sakhe: wonke umuntu oza kufanele (akukhokhwa nhlobo) alalele imibiko yakhe embalwa kusengaphambili, eze nombuzo okungenani owodwa kuyo, bese kuphela eze. Nginqume ukubona ukuthi uLamport wayesakaza ini lapho - futhi kuhle! Yileyo nto kanye, iphilisi lomlingo lokwelapha ama-Zombies. Ngiyakuxwayisa: kusukela embhalweni, abathandi bezindlela eziguquguqukayo kakhulu nalabo abangathandi ukuhlola okubhaliwe bangasha ngokuphawulekayo.

Ngemuva kwe-habrokat, empeleni, ukuhunyushwa kwesemina kuqala. Kujabulele ukufunda!

Noma yimuphi umsebenzi owenzayo, udinga njalo ukuthi udlule ezinyathelweni ezintathu:

  • nquma ukuthi yimuphi umgomo ofuna ukuwufinyelela;
  • nquma ukuthi uzowufeza kanjani umgomo wakho;
  • woza emgomweni wakho.

Lokhu kuyasebenza nasekuhleleni izinhlelo. Lapho sibhala ikhodi, sidinga:

  • nquma ukuthi yini okufanele yenziwe yilolu hlelo;
  • nquma ukuthi kufanele yenze kanjani umsebenzi wayo;
  • bhala ikhodi ehambisanayo.

Isinyathelo sokugcina, yiqiniso, sibaluleke kakhulu, kodwa ngeke ngikhulume ngaso namuhla. Kunalokho, sizoxoxa ngezimbili zokuqala. Wonke umklami uyawenza ngaphambi kokuqala ukusebenza. Awuhlali phansi ukuze ubhale ngaphandle uma unqume ukuthi ubhala isiphequluli noma isizindalwazi. Umqondo othile womgomo kufanele ube khona. Futhi ngokuqinisekile ucabanga ukuthi yini ngempela uhlelo oluzokwenza, futhi ungabhali ngandlela-thile ngethemba lokuthi ikhodi izophenduka isiphequluli ngandlela-thile.

Ngabe lokhu kucabanga kusengaphambili kwekhodi kwenzeka kanjani ngempela? Ungakanani umzamo okufanele siwenze kulokhu? Konke kuncike ekutheni inkimbinkimbi kangakanani inkinga esiyixazululayo. Ake sithi sifuna ukubhala isistimu esabalalisiwe ebekezelela iphutha. Kulokhu, kufanele sicabange kahle izinto ngaphambi kokuthi sihlale phansi sibhale ikhodi. Kuthiwani uma sidinga nje ukukhuphula inombolo ephelele ngo-1? Ekuboneni kokuqala, yonke into incane lapha, futhi akukho mcabango odingekayo, kodwa-ke siyakhumbula ukuthi ukuchichima kungenzeka. Ngakho-ke, ngisho nokuqonda ukuthi inkinga ilula noma iyinkimbinkimbi, udinga ukucabanga kuqala.

Uma ucabanga ngezixazululo ezingenzeka zenkinga kusengaphambili, ungagwema amaphutha. Kodwa lokhu kudinga ukuthi ukucabanga kwakho kucace. Ukufeza lokhu, udinga ukubhala phansi imicabango yakho. Ngisithanda kakhulu isicaphuna sika-Dick Guindon: β€œUma ubhala, imvelo ikubonisa ukuthi ukucabanga kwakho kuwubudlabha kangakanani.” Uma ungabhali, ucabanga nje ukuthi uyacabanga. Futhi udinga ukubhala phansi imicabango yakho ngendlela yokucaciswa.

Ukucaciswa kwenza imisebenzi eminingi, ikakhulukazi kumaphrojekthi amakhulu. Kodwa ngizokhuluma ngomunye wabo kuphela: asisiza ukuba sicabange ngokucacile. Ukucabanga ngokucacile kubaluleke kakhulu futhi kunzima kakhulu, ngakho lapha sidinga noma yiluphi usizo. Iluphi ulimi okufanele sibhale ngalo imininingwane? Ngokuvamile, lona kuhlale kungumbuzo wokuqala kubahleli bohlelo: sizobhala ngaluphi ulimi. Ayikho impendulo efanele kukho: izinkinga esizixazululayo zihluke kakhulu. Kwabanye, i-TLA+ iwulimi olucacisiwe engiluthuthukisile. Kwabanye, kulula kakhulu ukusebenzisa isiShayina. Konke kuncike esimweni.

Okubaluleke nakakhulu omunye umbuzo: indlela yokufeza ukucabanga okucacile? Impendulo: Kumelwe sicabange njengososayensi. Lena indlela yokucabanga eye yazibonakalisa eminyakeni engu-500 edlule. Kusayensi, sakha amamodeli ezibalo ezingokoqobo. Isayensi yezinkanyezi mhlawumbe kwakuyisayensi yokuqala ngomqondo oqinile waleli gama. Kumodeli yezibalo esetshenziswa kusayensi yezinkanyezi, izindikimba zasemkhathini zivela njengamaphuzu anesisindo, indawo kanye nomfutho, nakuba empeleni ziyizinto eziyinkimbinkimbi kakhulu ezinezintaba nolwandle, amagagasi namagagasi. Le modeli, njenganoma iyiphi enye, yadalelwa ukuxazulula izinkinga ezithile. Kuhle kakhulu ekunqumeni ukuthi ungayikhomba kuphi i-telescope uma udinga ukuthola iplanethi. Kodwa uma ufuna ukubikezela isimo sezulu kule planethi, le modeli ngeke isebenze.

Izibalo zisivumela ukuthi sinqume izici zemodeli. Futhi isayensi ibonisa ukuthi lezi zakhiwo zihlobana kanjani neqiniso. Ake sikhulume ngesayensi yethu, isayensi yekhompyutha. Iqiniso esisebenza ngalo ukuhlanganisa amasistimu ezinhlobo ezahlukahlukene: ama-processor, ama-game consoles, amakhompiyutha, izinhlelo zokusebenza, njalo njalo. Ngizokhuluma ngokuqhuba uhlelo kukhompyutha, kodwa ngokuvamile, zonke lezi ziphetho zisebenza kunoma iyiphi isistimu yekhompyutha. Kusayensi yethu, sisebenzisa amamodeli amaningi ahlukene: umshini we-Turing, amasethi emicimbi a-odwe ngokwengxenye, nezinye eziningi.

Luyini uhlelo? Lena yinoma iyiphi ikhodi engacatshangelwa ngokuzimela. Ake sithi sidinga ukubhala isiphequluli. Senza imisebenzi emithathu: siklama umbono womsebenzisi wohlelo, bese sibhala umdwebo wezinga eliphezulu wohlelo, futhi ekugcineni sibhala ikhodi. Njengoba sibhala ikhodi, siyabona ukuthi sidinga ukubhala ifomethi yombhalo. Lapha siphinde sidinga ukuxazulula izinkinga ezintathu: thola ukuthi leli thuluzi lizobuya muphi umbhalo; khetha i-algorithm yokufometha; bhala ikhodi. Lo msebenzi unomsebenzi wawo omncane: faka kahle i-hyphen emagameni. Siphinde sixazulule lo msebenzi ongaphansi ngezinyathelo ezintathu - njengoba ubona, ziphindaphindwa kumaleveli amaningi.

Ake sicabangele ngokuningiliziwe isinyathelo sokuqala: iyiphi inkinga uhlelo oluyixazululayo. Lapha, sivame ukwenza imodeli yohlelo njengomsebenzi othatha okokufaka okuthile futhi ukhiqize okukhiphayo okuthile. Kumathematika, umsebenzi uvamise ukuchazwa njengesethi ehlelekile yamapheya. Isibonelo, umsebenzi we-squaring wezinombolo ezingokwemvelo uchazwa njengesethi {<0,0>, <1,1>, <2,4>, <3,9>, …}. Isizinda somsebenzi onjalo siyisethi yezakhi zokuqala zepheya ngayinye, okungukuthi, izinombolo zemvelo. Ukuze sichaze umsebenzi, sidinga ukucacisa ububanzi bawo nefomula.

Kodwa imisebenzi yezibalo ayifani nemisebenzi yezilimi zokuhlela. Izibalo zilula kakhulu. Njengoba ngingenaso isikhathi sezibonelo eziyinkimbinkimbi, ake sicabangele elula: umsebenzi ku-C noma indlela emile ku-Java ebuyisela isihlukanisi esivamile esikhulu sama-integer amabili. Ekucacisweni kwale ndlela, sizobhala: ukubala GCD(M,N) ngezimpikiswano M ΠΈ Nkuphi GCD(M,N) - umsebenzi osizinda sawo siyisethi yamapheya amanani aphelele, futhi inani lokubuyisela liyinombolo enkulu kunazo zonke ehlukaniswa M ΠΈ N. Le modeli ihlobana kanjani neqiniso? Imodeli isebenza ngama-integers, kuyilapho ku-C noma ku-Java sine-32-bit int. Le modeli isivumela ukuthi sinqume ukuthi i-algorithm ilungile GCD, kodwa ngeke ivimbele amaphutha okuchichima. Lokhu kuzodinga imodeli eyinkimbinkimbi, okungekho isikhathi sayo.

Ake sikhulume ngemikhawulo yomsebenzi njengemodeli. Ezinye izinhlelo (ezifana nezinhlelo zokusebenza) azibuyiseli nje inani elithile lama-agumenti athile, zingasebenza ngokuqhubekayo. Ngaphezu kwalokho, umsebenzi njengemodeli awufaneleki kahle isinyathelo sesibili: ukuhlela indlela yokuxazulula inkinga. Ukuhlunga okusheshayo nokuhlunga kwebhamuza kubala umsebenzi ofanayo, kodwa ama-algorithms ahluke ngokuphelele. Ngakho-ke, ukuchaza ukuthi umgomo wohlelo ufinyelelwa kanjani, ngisebenzisa imodeli ehlukile, ake siyibize imodeli yokuziphatha evamile. Uhlelo olukulo lumelwe njengeqoqo lakho konke ukuziphatha okuvumelekile, ngasinye sazo, esiwukulandelana kwezifunda, futhi isimo siwukunikezwa kwamanani kokuguquguqukayo.

Ake sibone ukuthi isinyathelo sesibili se-algorithm ye-Euclid sizobukeka kanjani. Sidinga ukubala GCD(M, N). Siyaqalisa M kanjani x, futhi N kanjani y, bese ukhipha ngokuphindaphindiwe okuncane kwalokhu okuguquguqukayo kokukhulu kuze kube kuyalingana. Ngokwesibonelo, uma M = 12, futhi N = 18, singachaza ukuziphatha okulandelayo:

[x = 12, y = 18] β†’ [x = 12, y = 6] β†’ [x = 6, y = 6]

Futhi uma M = 0 ΠΈ N = 0? Uziro uhlukaniswa ngazo zonke izinombolo, ngakho-ke asikho isihlukanisi esikhulu kunazo zonke kuleli cala. Kulesi simo, sidinga ukubuyela esinyathelweni sokuqala futhi sibuze: ingabe ngempela sidinga ukubala i-GCD ngezinombolo ezingezona eziqondile? Uma lokhu kungenasidingo, udinga nje ukushintsha ukucaciswa.

Lapha kufanele senze ukuhlehla okuncane mayelana nokukhiqiza. Ivamise ukukalwa ngenani lemigqa yekhodi ebhalwa ngosuku. Kodwa umsebenzi wakho uwusizo kakhulu uma ususa inombolo ethile yemigqa, ngoba unendawo encane yezimbungulu. Futhi indlela elula yokususa ikhodi isesinyathelweni sokuqala. Kungenzeka ngokuphelele ukuthi awuzidingi zonke izinsimbi namakhwela ozama ukuzisebenzisa. Indlela eshesha kakhulu yokwenza uhlelo lube lula futhi wonge isikhathi ukungenzi izinto okungafanele zenziwe. Isinyathelo sesibili singamandla esibili okonga isikhathi. Uma ukala ukukhiqiza ngokwemigqa ebhaliwe, ukucabanga ukuthi ungawufeza kanjani umsebenzi kuzokukwenza ukukhiqiza kancane, ngoba ungakwazi ukuxazulula inkinga efanayo ngekhodi encane. Angikwazi ukunikeza izibalo eziqondile lapha, ngoba anginayo indlela yokubala inombolo yemigqa engingayibhalanga ngenxa yokuthi ngichithe isikhathi ekucacisweni, okungukuthi, ezinyathelweni zokuqala nezesibili. Futhi ukuhlolwa akukwazi ukusethwa nalapha, ngoba esivivinyweni asinalo ilungelo lokuqedela isinyathelo sokuqala, umsebenzi unqunywa kusengaphambili.

Kulula ukunganaki ubunzima obuningi ekucacisweni okungakahleleki. Akukho lutho olunzima ekubhaleni imininingwane eqinile yemisebenzi, ngeke ngixoxe ngalokhu. Kunalokho, sizokhuluma ngokubhala ukucaciswa okuqinile kokuziphatha okujwayelekile. Kukhona ithiyomu ethi noma iyiphi isethi yokuziphatha ingachazwa kusetshenziswa indawo yokuvikela (ukuphepha) kanye nezakhiwo zokusinda (ukuphila). Ukuphepha kusho ukuthi akukho okubi okuzokwenzeka, uhlelo ngeke lunikeze impendulo engalungile. Ukusinda kusho ukuthi maduzane okuthile okuhle kuzokwenzeka, i.e. uhlelo luzonikeza impendulo efanele maduze noma kamuva. Njengomthetho, ukuphepha kuyinkomba ebaluleke kakhulu, amaphutha avame ukwenzeka lapha. Ngakho-ke, ukuze ngisindise isikhathi, ngeke ngikhulume ngokusinda, nakuba kunjalo, kubalulekile futhi.

Sizuza ukuphepha ngokuchaza, okokuqala, isethi yezimo zokuqala ezingaba khona. Okwesibili, ubudlelwano nazo zonke izifundazwe ezilandelayo ezingaba khona esifundazweni ngasinye. Masenze njengososayensi futhi sichaze izifundazwe ngezibalo. Isethi yezimo zokuqala ichazwa ngefomula, ngokwesibonelo, endabeni ye-algorithm ye-Euclid: (x = M) ∧ (y = N). Ngamanani athile M и N kunesimo sokuqala esisodwa kuphela. Ubudlelwano nesimo esilandelayo buchazwa ngefomula lapho okuguquguqukayo kwesimo esilandelayo kubhalwa khona nge-prime, futhi okuguquguqukayo kwesimo samanje kubhalwe ngaphandle kwe-prime. Endabeni ye-algorithm ka-Euclid, sizobhekana nokuhlukaniswa kwamafomula amabili, kwenye yawo x inani elikhulu kunawo wonke, futhi okwesibili - y:

Ukwenza izinhlelo kungaphezu kokufaka ikhodi

Esimweni sokuqala, inani elisha lika-y lilingana nenani langaphambili lika-y, futhi sithola inani elisha lika-x ngokukhipha okuguquguqukayo okuncane kwelikhudlwana. Esimweni sesibili, senza okuphambene.

Ake sibuyele ku-algorithm ka-Euclid. Ake sicabange futhi lokho M = 12, N = 18. Lokhu kuchaza isimo sokuqala esisodwa, (x = 12) ∧ (y = 18). Bese sixhuma lawo manani kufomula engenhla bese sithola:

Ukwenza izinhlelo kungaphezu kokufaka ikhodi

Nasi isixazululo esingaba khona kuphela: x' = 18 - 12 ∧ y' = 12futhi sithola ukuziphatha: [x = 12, y = 18]. Ngokufanayo, singachaza zonke izifunda ekuziphatheni kwethu: [x = 12, y = 18] β†’ [x = 12, y = 6] β†’ [x = 6, y = 6].

Esimeni sokugcina [x = 6, y = 6] zombili izingxenye zenkulumo zizoba amanga, ngakho-ke ayinaso isimo esilandelayo. Ngakho-ke, sinencazelo ephelele yesinyathelo sesibili - njengoba ubona, lokhu kuyizibalo ezivamile, njengonjiniyela nososayensi, futhi akuyona into engavamile, njengesayensi yekhompyutha.

Lawa mafomula amabili angahlanganiswa abe ifomula eyodwa yomqondo wesikhashana. Muhle futhi kulula ukumchaza, kodwa asikho isikhathi sakhe manje. Singase sidinge ingqondo yesikhashana kuphela endaweni yokuphila, ayidingeki ekuvikelekeni. Angiwuthandi ubuhlakani besikhashana njengalokhu, akuzona izibalo ezijwayelekile, kepha esimweni sempilo kuwububi obudingekayo.

Ku-algorithm ka-Euclid, yenani ngalinye x ΠΈ y abe namagugu ahlukile x' ΠΈ y', okwenza ubuhlobo nesimo esilandelayo bube yiqiniso. Ngamanye amazwi, i-algorithm ka-Euclid iyanquma. Ukuze wenze imodeli ye-algorithm enganqunyelwe, isimo samanje sidinga ukuba nezimo eziningi zesikhathi esizayo ezingase zibe khona, nokuthi inani ngalinye eliguquguqukayo elingashiwongo linamanani ahlukahlukene aqavile amaningi ukuze ukuhlobana nesimo esilandelayo kube yiqiniso. Lokhu kulula ukukwenza, kodwa ngeke nginikeze izibonelo manje.

Ukwenza ithuluzi lokusebenza, udinga izibalo ezihlelekile. Indlela yokwenza imininingwane ibe semthethweni? Ukwenza lokhu, sidinga ulimi olusemthethweni, isibonelo, I-TLA+. Ukucaciswa kwe-algorithm ye-Euclid kuzobukeka kanjena kulolu limi:

Ukwenza izinhlelo kungaphezu kokufaka ikhodi

Uphawu lophawu olulinganayo olunonxantathu lusho ukuthi inani elingakwesokunxele sophawu lichazwa ukuthi lilingana nenani elingakwesokudla sophawu. Empeleni, ukucaciswa kuyincazelo, esimweni sethu izincazelo ezimbili. Esicacisweni ku-TLA+, udinga ukwengeza izimemezelo kanye ne-syntax ethile, njengaku-slide esingenhla. Ku-ASCII izobukeka kanje:

Ukwenza izinhlelo kungaphezu kokufaka ikhodi

Njengoba ubona, akukho lutho oluyinkimbinkimbi. Ukucaciswa kwe-TLA+ kungahlolwa, okungukuthi kudlule konke ukuziphatha okungenzeka ngemodeli encane. Esimweni sethu, le modeli izoba amanani athile M ΠΈ N. Lena indlela yokuqinisekisa esebenza kahle kakhulu futhi elula ezenzakalela ngokuphelele. Kuyenzeka futhi ukuthi ubhale ubufakazi obusemthethweni beqiniso futhi uhlole ngokumshini, kodwa lokhu kuthatha isikhathi esiningi, ngakho cishe akekho owenza lokhu.

Ububi obukhulu be-TLA+ ukuthi yizibalo, futhi abahleli bohlelo nososayensi bamakhompiyutha bayesaba izibalo. Uma uthi nhlΓ‘, lokhu kuzwakala njengehlaya, kodwa, ngeshwa, ngikusho ngakho konke ukungathΓ­ sina. Uzakwethu ubengitshela nje ukuthi wazama kanjani ukuchaza i-TLA+ kubathuthukisi abaningana. Ngokushesha nje lapho amafomula ebonakala esikrinini, aphenduka amehlo engilazi ngokushesha. Ngakho-ke uma i-TLA+ ikwethusa, ungasebenzisa I-PlusCal, kuwulimi lokuhlela amathoyizi. Isisho esiku-PlusCal singaba noma yisiphi isisho se-TLA+, okungukuthi, ngokuvamile, noma iyiphi inkulumo yezibalo. Ngaphezu kwalokho, i-PlusCal ine-syntax yama-algorithms anganqunyelwe. Ngenxa yokuthi i-PlusCal ingabhala noma yisiphi isisho se-TLA+, i-PlusCal izwakalisa kakhulu kunanoma yiluphi ulimi lwangempela lokuhlela. Okulandelayo, i-PlusCal ihlanganiswa ibe isicaciso esifundeka kalula se-TLA+. Lokhu akusho ukuthi, ukucaciswa okuyinkimbinkimbi kwe-PlusCal kuzophenduka kube lula ku-TLA + - ukuxhumana nje phakathi kwabo kusobala, ngeke kube yinkimbinkimbi eyengeziwe. Ekugcineni, lokhu kucaciswa kungaqinisekiswa ngamathuluzi e-TLA+. Sekukonke, i-PlusCal ingasiza ukunqoba i-math phobia futhi kulula ukuyiqonda ngisho nakubahleli bohlelo nososayensi bamakhompyutha. Esikhathini esedlule, ngashicilela ama-algorithms kuyo isikhathi esithile (cishe iminyaka eyi-10).

Mhlawumbe othile uzophikisa ngokuthi i-TLA + ne-PlusCal ziyizibalo, kanti izibalo zisebenza kuphela ezibonelweni eziqanjiwe. Empeleni, udinga ulimi lwangempela olunezinhlobo, izinqubo, izinto, nokunye. Lokhu akulungile. Nakhu okubhala uChris Newcomb, owayesebenza e-Amazon: β€œSisebenzise i-TLA+ kumaphrojekthi amakhulu ayishumi, futhi esimweni ngasinye, ukuyisebenzisa kwenze umehluko omkhulu ekuthuthukisweni ngoba sikwazile ukubamba izimbungulu eziyingozi ngaphambi kokuthi sikhiqize umkhiqizo, futhi ngenxa yokuthi yasinika ukuqonda nokuqiniseka esasikudinga yenza ukulungiselelwa kokusebenza okunolaka ngaphandle kokuthinta iqiniso lohlelo". Ungavame ukuzwa ukuthi uma usebenzisa izindlela ezisemthethweni, sithola ikhodi engasebenzi kahle - ekusebenzeni, konke kuphambene ncamashi. Ngaphezu kwalokho, kunombono wokuthi abaphathi abakwazi ukuqiniseka ngesidingo sezindlela ezisemthethweni, ngisho noma abahleli bezinhlelo beqiniseka ukuthi ziwusizo. Futhi uNewcomb uyabhala: "Abaphathi manje bazama kanzima ukubhala imininingwane ye-TLA +, futhi banikeze isikhathi salokhu". Ngakho lapho abaphathi bebona ukuthi i-TLA+ iyasebenza, bayakujabulela ukukwamukela. UChris Newcomb wabhala lokhu cishe ezinyangeni eziyisithupha ezedlule (Okthoba 2014), kodwa manje, ngokwazi kwami, i-TLA + isetshenziswa kumaphrojekthi angu-14, hhayi angu-10. Esinye isibonelo sisekuklanyweni kwe-XBox 360. Umfundi ofundela umsebenzi weza kuCharles Thacker futhi wabhala imininingwane yesistimu yememori. Ngenxa yalokhu kucaciswa, kutholwe isiphazamisi ebesingeke sibonakale, futhi ngenxa yalokho yonke i-XBox 360 izophahlazeka ngemva kwamahora amane okusetshenziswa. Onjiniyela be-IBM baqinisekise ukuthi ukuhlolwa kwabo bekungeke kusithole lesi siphazamisi.

Ungafunda kabanzi nge-TLA + ku-inthanethi, kodwa manje ake sikhulume mayelana nokucaciswa okungakahleleki. Akuvamile ukuthi sibhale izinhlelo ezibala isihlukanisi esingajwayelekile nokunye. Isikhathi esiningi sibhala izinhlelo ezifana nethuluzi lokuphrinta elihle engalibhalela i-TLA+. Ngemuva kokucubungula okulula, ikhodi ye-TLA + izobukeka kanje:

Ukwenza izinhlelo kungaphezu kokufaka ikhodi

Kodwa kulesi sibonelo esingenhla, umsebenzisi cishe wayefuna ukuthi isihlanganiso nezimpawu ezilinganayo ziqondaniswe. Ngakho ukufometha okulungile kuzobukeka kanjena:

Ukwenza izinhlelo kungaphezu kokufaka ikhodi

Cabanga ngesinye isibonelo:

Ukwenza izinhlelo kungaphezu kokufaka ikhodi

Lapha, ngokuphambene, ukuqondanisa kwezimpawu ezilinganayo, ukungezwa, kanye nokuphindaphinda emthonjeni kwakungahleliwe, ngakho ukucubungula okulula kwanele. Ngokuvamile, ayikho incazelo yezibalo enembile yokufometha okulungile, ngoba "okulungile" kulokhu kusho "lokho umsebenzisi akufunayo", futhi lokhu akukwazi ukunqunywa ngokwezibalo.

Kungabonakala sengathi uma singenayo incazelo yeqiniso, kusho ukuthi incazelo ayisizi ngalutho. Kodwa akunjalo. Ukuthi asazi ukuthi yini okufanele yenziwe uhlelo akusho ukuthi asikho isidingo sokucabanga ukuthi lusebenza kanjaniβ€”okuphambene nalokho, kufanele senze umzamo owengeziwe kulo. Ukucaciswa kubaluleke kakhulu lapha. Akunakwenzeka ukucacisa uhlelo oluphelele lokuphrinta okuhlelekile, kodwa lokhu akusho ukuthi akufanele sithathe nhlobo, futhi ukubhala ikhodi njengendlela yokuqaphela akuyona into enhle. Ekugcineni, ngibhale ukucaciswa kwemithetho eyisithupha enezincazelo ngendlela yokuphawula kufayela le-java. Nasi isibonelo somunye wemithetho: a left-comment token is LeftComment aligned with its covering token. Lo mthetho ubhalwe ngesiNgisi sezibalo: LeftComment aligned, left-comment ΠΈ covering token - ngokwemibandela enezincazelo. Yile ndlela izazi zezibalo ezichaza ngayo izibalo: zibhala izincazelo zamagama futhi, ngokusekelwe kuzo, imithetho. Inzuzo yalokhu kucaciswa ukuthi imithetho eyisithupha kulula kakhulu ukuyiqonda nokuyilungisa kunemigqa yekhodi engama-850. Mangisho ukuthi ukubhala le mithetho bekungelula, kuthathe isikhathi esiningi ukuyilungisa. Ikakhulukazi ngale njongo, ngibhale ikhodi ebike ukuthi yimuphi umthetho osetshenzisiwe. Ngenxa yokuthi ngivivinye le mithetho eyisithupha ezibonelweni ezimbalwa, akuzange kudingeke ngilungise imigqa yekhodi engu-850, futhi izimbungulu zaba lula kakhulu ukuzithola. I-Java inamathuluzi amahle alokhu. Ukube bengisanda kubhala ikhodi, bekuzongithatha isikhathi eside, futhi ukufometha bekuyoba okwekhwalithi ephansi.

Kungani imininingwane esemthethweni ingasetshenziswa? Ngakolunye uhlangothi, ukubulawa okulungile akubalulekile kakhulu lapha. Ukuphrinta kwesakhiwo kuphoqelekile ukuthi kungathokozisi muntu, ngakho-ke bekungadingeki ukuthi ngikwenze ukuthi kusebenze kahle kuzo zonke izimo eziyinqaba. Okubaluleke nakakhulu ukuthi ngangingenawo amathuluzi anele. Isihloli semodeli ye-TLA + asisebenzi lapha, ngakho-ke kuzodingeka ngibhale ngesandla izibonelo.

Ukucaciswa okungenhla kunezici ezifanayo kuyo yonke imininingwane. Izinga eliphezulu kunekhodi. Ingasetshenziswa nganoma yiluphi ulimi. Noma yimaphi amathuluzi noma izindlela azisizi ekubhaleni. Asikho isifundo sokuhlela esizokusiza ukuthi ubhale lokhu kucaciswa. Futhi awekho amathuluzi angenza lokhu kucaciswa kungadingeki, ngaphandle uma, kunjalo, ubhala ulimi oluqondene ngqo nokubhala izinhlelo zokuphrinta ezihlelekile ku-TLA+. Ekugcineni, le ncazelo ayisho lutho mayelana nokuthi sizoyibhala kanjani ikhodi, isho kuphela ukuthi le khodi yenzani. Sibhala imininingwane ukuze isisize sicabange ngenkinga ngaphambi kokuthi siqale ukucabanga ngekhodi.

Kodwa lokhu kucaciswa kubuye kube nezici ezihlukanisayo kwezinye izici. U-95% wezinye izici zifushane kakhulu futhi zilula:

Ukwenza izinhlelo kungaphezu kokufaka ikhodi

Ngaphezu kwalokho, lokhu kucaciswa kuyisethi yemithetho. Njengomthetho, lokhu kuwuphawu lokucaciswa okungalungile. Ukuqonda imiphumela yeqoqo lemithetho kunzima impela, yingakho kudingeke ukuthi ngichithe isikhathi esiningi ngiyilungisa. Nokho, kulokhu, angikwazanga ukuthola indlela engcono.

Kuyafaneleka ukusho amagama ambalwa mayelana nezinhlelo ezisebenza ngokuqhubekayo. Njengomthetho, basebenza ngokufana, isibonelo, izinhlelo zokusebenza noma izinhlelo ezisabalalisiwe. Bambalwa kakhulu abantu abangabaqonda ngokwengqondo noma ephepheni, futhi angiyena omunye wabo, nakuba ngake ngakwazi ukukwenza. Ngakho-ke, sidinga amathuluzi azohlola umsebenzi wethu - isibonelo, i-TLA + noma i-PlusCal.

Kungani bekudingeka ukubhala imininingwane ethile uma ngase ngazi ukuthi yini okufanele yenziwe ikhodi? Eqinisweni, ngavele ngacabanga ukuthi ngiyazi. Ngaphezu kwalokho, ngokucaciswa, umuntu wangaphandle akasadingi ukungena ekhodini ukuze aqonde ukuthi yini ngempela ayenzayo. Nginomthetho: akufanele kube nemithetho ejwayelekile. Kukhona okuhlukile kulo mthetho, yiqiniso, ukuphela komthetho ojwayelekile engiwulandelayo: ukucaciswa kwalokho okwenziwa yikhodi kufanele kutshele abantu konke okudingeka bakwazi uma besebenzisa ikhodi.

Ngakho-ke yini ngempela abahleli bezinhlelo okudingeka bayazi ngokucabanga? Okokuqala, njengawo wonke umuntu: uma ungabhali, kubonakala sengathi ucabanga kuphela. Futhi, udinga ukucabanga ngaphambi kokufaka ikhodi, okusho ukuthi udinga ukubhala ngaphambi kokufaka ikhodi. Ukucaciswa yilokho esikubhalayo ngaphambi kokuba siqale ukubhala amakhodi. Kudingeka ukucaciswa kwanoma iyiphi ikhodi engasetshenziswa noma eshintshwe yinoma ubani. Futhi lo "umuntu" angase abe umbhali wekhodi ngokwakhe ngemva kwenyanga ibhaliwe. Ukucaciswa kuyadingeka ezinhlelweni ezinkulu namasistimu, amakilasi, izindlela, futhi ngezinye izikhathi ngisho nasezigabeni eziyinkimbinkimbi zendlela eyodwa. Yini ngempela okufanele ibhalwe ngekhodi? Udinga ukuchaza ukuthi yenzani, okungukuthi, yini engaba usizo kunoma yimuphi umuntu osebenzisa le khodi. Ngezinye izikhathi kungase kudingeke ukuba ucacise ukuthi ikhodi iyifeza kanjani injongo yayo. Uma sidlule ngale ndlela phakathi ne-algorithms, khona-ke siyibiza ngokuthi i-algorithm. Uma kungokuthile okukhethekile nokusha, khona-ke sikubiza ngomklamo wezinga eliphezulu. Awukho umehluko osemthethweni lapha: zombili ziyimodeli engabonakali yohlelo.

Kufanele uyibhale kanjani kahle imininingwane yekhodi? Into esemqoka: kufanele ibe ileveli eyodwa ephakeme kunekhodi ngokwayo. Kufanele ichaze izifunda kanye nokuziphatha. Kufanele iqine njengoba umsebenzi udinga. Uma ubhala imininingwane yokuthi umsebenzi uzokwenziwa kanjani, ungawubhala nge-pseudocode noma nge-PlusCal. Udinga ukufunda ukuthi ungabhala kanjani ukucaciswa kokucaciswa okusemthethweni. Lokhu kuzokunika amakhono adingekayo azokusiza nalawo angahlelekile. Ufunda kanjani ukubhala imininingwane esemthethweni? Lapho sifunda ukuhlela, sasibhala izinhlelo bese sizilungisa. Kuyafana lapha: bhala i-spec, ihlole ngesihloli semodeli, futhi ulungise iziphazamisi. I-TLA+ ingase ingabi ulimi olungcono kakhulu lokucaciswa okusemthethweni, futhi olunye ulimi lungase lube ngcono kuzidingo zakho ezithile. Inzuzo ye-TLA+ ukuthi ifundisa ukucabanga kwezibalo kahle kakhulu.

Ungaxhuma kanjani imininingwane nekhodi? Ngosizo lwamazwana axhumanisa imiqondo yezibalo kanye nokuqaliswa kwayo. Uma usebenza ngamagrafu, khona-ke ezingeni lohlelo uzoba nama-node amaningi kanye nezixhumanisi zezixhumanisi. Ngakho-ke, udinga ukubhala kahle ukuthi igrafu isetshenziswa kanjani yilezi zakhiwo zokuhlela.

Kufanele kuqashelwe ukuthi akukho kulokhu okungenhla okusebenza enqubweni yangempela yokubhala ikhodi. Uma ubhala ikhodi, okungukuthi, wenza isinyathelo sesithathu, udinga futhi ukucabanga nokucabanga ngohlelo. Uma umsebenzi ongaphansi uvela unzima noma ungabonakali, udinga ukubhala imininingwane yawo. Kodwa angikhulumi ngekhodi ngokwayo lapha. Ungasebenzisa noma yiluphi ulimi lokuhlela, noma iyiphi indlela yokusebenza, akukho mayelana nabo. Futhi, akukho kulokhu okungenhla okuqeda isidingo sokuhlola nokususa amaphutha. Ngisho noma imodeli engabonakali ibhalwe kahle, kungase kube neziphazamisi ekusetshenzisweni kwayo.

Ukucaciswa kokubhala kuyisinyathelo esengeziwe enqubweni yokubhala amakhodi. Ngenxa yalokho, amaphutha amaningi angabanjwa ngomzamo omncane - siyakwazi lokhu ngokuhlangenwe nakho kwabahleli bezinhlelo abavela e-Amazon. Ngokucaciswa, ikhwalithi yezinhlelo iba phezulu. Pho kungani sivame ukuhamba ngaphandle kwabo? Ngoba ukubhala kunzima. Futhi ukubhala kunzima, ngoba kulokhu udinga ukucabanga, futhi ukucabanga nakho kunzima. Kuhlala kulula ukuzenzisa lokho okucabangayo. Lapha ungakwazi ukudweba isifaniso nokugijima - uma ugijima kancane, ugijima kancane. Udinga ukuqeqesha imisipha yakho futhi uzijwayeze ukubhala. Kudingeka ukuzijwayeza.

Ukucaciswa kungase kungalungile. Kungenzeka ukuthi wenze iphutha ndawana thize, noma izimfuneko kungenzeka zishintshile, noma ukuthuthukiswa kungase kudingeke kwenziwe. Noma iyiphi ikhodi esetshenziswa yinoma ubani kufanele ishintshwe, ngakho-ke ngokushesha noma kamuva ukucaciswa ngeke kusafana nohlelo. Okufanelekile, kulokhu, udinga ukubhala ukucaciswa okusha futhi ubhale kabusha ngokuphelele ikhodi. Sazi kahle kamhlophe ukuthi akekho owenza lokho. Empeleni, sinamathisela ikhodi futhi ngokunokwenzeka sibuyekeze imininingwane. Uma lokhu nakanjani kuzokwenzeka maduze noma kamuva, kungani-ke ubhala imininingwane? Okokuqala, kumuntu ozohlela ikhodi yakho, wonke amagama engeziwe esicacisweni azofaneleka isisindo sawo ngegolide, futhi lo muntu kungenzeka kube nguwe uqobo. Ngivame ukuzigxeka ngokungakutholi ukucaciswa okwanele lapho ngihlela ikhodi yami. Futhi ngibhala imininingwane eminingi kunekhodi. Ngakho-ke, lapho uhlela ikhodi, imininingwane idinga ukubuyekezwa njalo. Okwesibili, ngokubuyekezwa ngakunye, ikhodi iba yimbi kakhulu, kuba nzima nakakhulu ukuyifunda nokuyigcina. Lokhu ukwanda kwe-entropy. Kodwa uma ungaqali nge-spec, yonke imigqa oyibhalayo izoba ukuhlela, futhi ikhodi izoba nzima futhi kube nzima ukuyifunda kusukela ekuqaleni.

Njengoba kushiwo Eisenhower, ayikho impi eyanqotshwa ngesu, futhi akukho mpi eyanqotshwa ngaphandle kwecebo. Futhi wayazi into noma ezimbili ngezimpi. Kunombono wokuthi ukubhala imininingwane kuwukumosha isikhathi. Ngezinye izikhathi lokhu kuyiqiniso, futhi umsebenzi ulula kangangokuthi akukho lutho lokucabanga ngawo. Kodwa kufanele ukhumbule njalo ukuthi uma utshelwa ukuthi ungabhali imininingwane, utshelwa ukuthi ungacabangi. Futhi kufanele ucabange ngakho ngaso sonke isikhathi. Ukucabangisisa ngomsebenzi akuqinisekisi ukuthi ngeke wenze amaphutha. Njengoba sazi, akekho owasungula induku yomlingo, futhi ukuhlela kuwumsebenzi onzima. Kodwa uma ungayicabangi inkinga, uqinisekile ukuthi uzowenza amaphutha.

Ungafunda kabanzi nge-TLA + ne-PlusCal kuwebhusayithi ekhethekile, ungaya lapho ekhasini lami lasekhaya isixhumanisi. Konke lokho kungenxa yami, ngiyabonga ngokunaka kwakho.

Sicela uqaphele ukuthi lokhu ukuhumusha. Uma ubhala imibono, khumbula ukuthi umbhali ngeke afunde. Uma ufuna ngempela ukuxoxa nomlobi, khona-ke uzobe engqungqutheleni ye-Hydra 2019, ezoba ngoJulayi 11-12, 2019 eSt. Amathikithi angathengwa kuwebhusayithi esemthethweni.

Source: www.habr.com

Engeza amazwana