Udweliso lwenkqubo lungaphezulu kunokowukhowudwa

Udweliso lwenkqubo lungaphezulu kunokowukhowudwa

Eli nqaku yinguqulelo Isemina yaseStanford. Kodwa phambi kwakhe intshayelelo encinci. Zenziwa njani iizombies? Wonke umntu ungene kwimeko apho bafuna ukutsala umhlobo okanye umntu osebenza naye ukuya kwinqanaba labo, kodwa ayisebenzi. Kwaye akukho kakhulu kunye nawe njengaye ukuba "ayisebenzi": kwelinye icala lesikali ngumvuzo oqhelekileyo, imisebenzi, njalo njalo, kwaye kwelinye, imfuneko yokucinga. Ukucinga akumnandanga kwaye kubuhlungu. Ukhawuleza anikezele kwaye aqhubeke ebhala ikhowudi ngaphandle kokuguqula ingqondo yakhe konke. Ucinga ukuba ungakanani umgudu ofunekayo ukuze woyise umqobo wokungakwazi ukuzinceda, yaye akukwenzi oko. Yile ndlela i-zombies yenziwa ngayo, ebonakala ngathi inokunyangwa, kodwa kubonakala ngathi akukho mntu uya kuyenza.

Ndithe ndakubona oko Leslie Lamport (ewe, iqabane elifanayo kwiincwadi zezifundo) ufika eRashiya kwaye akenzi ngxelo, kodwa iseshoni yemibuzo neempendulo, ndandilumkile kancinci. Kwimeko enjalo, uLeslie ngusosayensi owaziwayo kwihlabathi, umbhali wemisebenzi esisiseko kwikhompyuter esasazwayo, kwaye unokumazi ngoonobumba uLa kwigama elithi LaTeX - "Lamport TeX". Into yesibini eyoyikisayo yimfuno yakhe: wonke umntu oza kufuneka (ngokupheleleyo simahla) aphulaphule isibini seengxelo zakhe kwangaphambili, eze nombuzo omnye kubo, kwaye emva koko uze. Ndigqibe ekubeni ndibone ukuba uLamport wayesasaza ntoni apho - kwaye kuhle! Yiloo nto kanye, ipilisi yekhonkco yomlingo yokunyanga i-zombies. Ndiyakulumkisa: ukusuka kwisicatshulwa, abathandi beendlela eziguquguqukayo kakhulu kunye nabo bangathandi ukuvavanya oko kubhaliweyo banokutshisa.

Emva kwe-habrokat, enyanisweni, ukuguqulelwa kwesemina kuqala. Konwabele ukufunda!

Nokuba yeyiphi na into oyenzayo, kufuneka ulandele amanyathelo amathathu:

  • gqiba ukuba yeyiphi injongo ofuna ukuyifeza;
  • yenza isigqibo malunga nendlela oza kulufikelela ngayo usukelo lwakho;
  • yiza kwinjongo yakho.

Oku kusebenza nakwinkqubo. Xa sibhala ikhowudi, kufuneka:

  • thatha isigqibo malunga nenkqubo ekufuneka yenziwe;
  • misela indlela ekufanele iwenze ngayo umsebenzi wayo;
  • bhala ikhowudi ehambelana nayo.

Inyathelo lokugqibela, ngokuqinisekileyo, libaluleke kakhulu, kodwa andiyi kuthetha ngalo namhlanje. Kunoko, siza kuxubusha ezimbini zokuqala. Wonke umdwelisi wenkqubo uyazenza phambi kokuba aqalise ukusebenza. Awuhlali phantsi ukuze ubhale ngaphandle kokuba wenze isigqibo sokuba ubhala isikhangeli okanye i-database. Ingcamango ethile yenjongo kufuneka ibe khona. Kwaye ngokuqinisekileyo ucinga ukuba yintoni kanye le nkqubo iza kwenza, kwaye ungabhali ngandlela ithile ngethemba lokuba ikhowudi ngandlela thile iya kujika ibe sisikhangeli.

Ingaba le khowudi yokucinga kwangaphambili kwenzeka njani? Ungakanani umgudu esifanele siwenze koku? Konke kuxhomekeke kwindlela entsonkothe ​​ngayo ingxaki esiyisombululayo. Masithi sifuna ukubhala inkqubo esasazwayo yokunyamezela iimpazamo. Kule meko, kufuneka sicinge izinto ngononophelo ngaphambi kokuba sihlale phantsi sibhale ikhowudi. Kwenzekani ukuba sifuna nje ukunyusa inani elipheleleyo ngo-1? Ekuboneni kokuqala, yonke into iyinto encinci apha, kwaye akukho ngcamango ifunekayo, kodwa ke siyakhumbula ukuba ukuphuphuma kuyenzeka. Ngoko ke, ukuze uqonde ukuba ingxaki ilula okanye inzima, kufuneka uqale ucinge.

Ukuba ucinga malunga nezisombululo ezinokwenzeka kwingxaki kwangaphambili, unokuphepha iimpazamo. Kodwa oku kufuna ukuba ukucinga kwakho kucace. Ukufezekisa oku, kufuneka ubhale phantsi iingcamango zakho. Ndiyithanda kakhulu isicatshulwa sikaDick Guindon: "Xa ubhala, indalo ikubonisa indlela ocinga ngayo." Ukuba awubhali, ucinga kuphela ukuba uyacinga. Kwaye kufuneka ubhale phantsi iingcamango zakho ngendlela yenkcazo.

Iinkcukacha zenza imisebenzi emininzi, ngakumbi kwiiprojekthi ezinkulu. Kodwa ndiza kuthetha kuphela ngenye yazo: zisinceda sicinge ngokucacileyo. Ukucinga ngokucacileyo kubaluleke kakhulu kwaye kunzima kakhulu, ngoko apha sifuna naluphi na uncedo. Loluphi ulwimi ekufuneka sibhale ngalo iinkcukacha? Ngokubanzi, oku kuhlala kungumbuzo wokuqala kubadwelisi benkqubo: loluphi ulwimi esiya kubhala ngalo. Akukho mpendulo ichanekileyo kuyo: iingxaki esizisombululayo zahluke kakhulu. Kwabanye, i-TLA+ lulwimi oluchaziweyo endilwenzileyo. Kwabanye, kulula ngakumbi ukusebenzisa isiTshayina. Yonke into ixhomekeke kwimeko.

Okubaluleke ngakumbi ngomnye umbuzo: indlela yokufezekisa ukucinga okucacileyo? Impendulo: Kufuneka sicinge njengezazinzulu. Le yindlela yokucinga eye yazibonakalisa kule minyaka ingama-500 idlulileyo. Kwisayensi, sakha iimodeli zezibalo zokwenyani. I-astronomy mhlawumbi yayiyeyenzululwazi yokuqala ngengqiqo engqongqo yeli gama. Kwimodeli yemathematika esetyenziswa kwi-astronomy, izidalwa zasezulwini zibonakala njengeendawo ezinobunzima, indawo kunye nomfutho, nangona eneneni zizinto ezintsonkothe ​​kakhulu ezineentaba kunye neelwandle, amaza namaza. Le modeli, njengayo nayiphi na enye, yenzelwe ukusombulula iingxaki ezithile. Kuhle kakhulu ukumisela ukuba ungakhomba phi iteleskopu ukuba ufuna ukufumana iplanethi. Kodwa ukuba ufuna ukuqikelela imozulu kule planethi, le modeli ayizukusebenza.

IMathematika isenza sikwazi ukumisela iimpawu zemodeli. Kwaye isayensi ibonisa ukuba ezi zakhiwo zihambelana njani nenyani. Makhe sithethe ngesayensi yethu, isayensi yekhompyuter. Inyani esisebenza ngayo kukusebenzisa iinkqubo zekhompyutha zeentlobo ngeentlobo: iiprosesa, iikhonsoli zomdlalo, iikhomputha, iinkqubo eziqhutywayo, njalo njalo. Ndiza kuthetha ngokuqhuba inkqubo kwikhompyuter, kodwa ngokubanzi, zonke ezi zigqibo zisebenza kuyo nayiphi na inkqubo yekhompyuter. Kwisayensi yethu, sisebenzisa iimodeli ezininzi ezahlukeneyo: umatshini weTuring, iiseti zeziganeko eziyalelwe ngokuyinxenye, kunye nezinye ezininzi.

Yintoni inkqubo? Le yiyo nayiphi na ikhowudi enokuthi ithathelwe ingqalelo ngokuzimeleyo. Masithi kufuneka sibhale isikhangeli. Senza imisebenzi emithathu: siyila umbono womsebenzisi weprogram, ngoko sibhala umzobo wezinga eliphezulu leprogram, kwaye ekugqibeleni sibhala ikhowudi. Njengoko sibhala ikhowudi, siyaqonda ukuba kufuneka sibhale ifomathi yokubhaliweyo. Apha kwakhona kufuneka sisombulule iingxaki ezintathu: misela ukuba yeyiphi itekisi esiza kubuya nayo esi sixhobo; khetha ialgorithm yokufomatha; bhala ikhowudi. Lo msebenzi unomsetyenzana wawo ongaphantsi: ngokuchanekileyo faka iqhagamshela kumagama. Siphinde sisombulule lo msebenzi wangaphantsi ngamanyathelo amathathu - njengoko ubona, aphindwa kumanqanaba amaninzi.

Makhe siqwalasele ngokubanzi inyathelo lokuqala: yeyiphi ingxaki esonjululwa yinkqubo. Apha, sihlala singumzekelo wenkqubo njengomsebenzi othatha igalelo kwaye uvelise imveliso ethile. Kwimathematika, umsebenzi udla ngokuchazwa njengeseti elandelelweyo yezibini. Umzekelo, umsebenzi wesquaring wamanani endalo uchazwa njengesethi {<0,0>, <1,1>, <2,4>, <3,9>, ...}. Ummandla womsebenzi onjalo yiseti yezinto zokuqala zesibini ngasinye, oko kukuthi, amanani endalo. Ukuchaza umsebenzi, kufuneka sicacise umda kunye nefomula.

Kodwa imisebenzi kwimathematika ayifani nemisebenzi kwiilwimi zokuprograma. Izibalo zilula kakhulu. Kuba andinaxesha lemizekelo entsonkothileyo, makhe siqwalasele elula: umsebenzi okwi C okanye indlela emileyo kwiJava ebuyisela esona sahluleli siqhelekileyo samanani amabini apheleleyo. Kwinkcazo yale ndlela, siya kubhala: ukubala GCD(M,N) kwiingxoxo M ΠΈ Nphi GCD(M,N) - umsebenzi othambeka luluhlu lwezibini ezipheleleyo, kwaye ixabiso lembuyekezo yeyona nombolo inkulu eyahlulwahlulwa M ΠΈ N. Lo mzekelo unxulumana njani nenyani? Imodeli isebenza kwii-integers, ngelixa kwi-C okanye kwiJava sine-32-bit int. Lo mzekelo usivumela ukuba senze isigqibo sokuba i-algorithm ichanekile GCD, kodwa ayiyi kuthintela iimpazamo eziphuphumayo. Oku kuya kufuna imodeli enzima ngakumbi, ekungekho xesha.

Makhe sithethe malunga nokunciphisa umsebenzi njengomzekelo. Ezinye iinkqubo (ezifana neenkqubo zokusebenza) azibuyiseli nje ixabiso elithile kwiingxoxo ezithile, zinokuqhuba ngokuqhubekayo. Ukongezelela, umsebenzi njengomzekelo awufanelekanga kakuhle kwisinyathelo sesibini: ukucwangcisa indlela yokusombulula ingxaki. Ukuhlela ngokukhawuleza kunye nohlobo lweqamza ludibanisa umsebenzi ofanayo, kodwa zahluke ngokupheleleyo kwii-algorithms. Ngoko ke, ukuchaza indlela injongo yeprogram ephunyezwa ngayo, ndisebenzisa imodeli eyahlukileyo, masiyibize imodeli yokuziphatha eqhelekileyo. Inkqubo ekuyo imelwe njengeseti yazo zonke iindlela zokuziphatha ezivumelekileyo, nganye kuzo, ngokulandelelana kwayo, ilulandelelwano lwamazwe, kwaye urhulumente sisabelo samaxabiso kwizinto eziguquguqukayo.

Makhe sibone ukuba inyathelo lesibini le-algorithm ye-Euclid liya kujongeka njani. Kufuneka sibale GCD(M, N). Siqalisa M njani x, kwaye N njani y, emva koko ngokuphindaphindiweyo ukuthabatha encinci kwezi ziguquguqukayo ukusuka kwenkulu ide ilingane. Umzekelo, ukuba M = 12, kwaye N = 18, singachaza le ndlela yokuziphatha ilandelayo:

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

Kwaye ukuba M = 0 ΠΈ N = 0? U-Zero wohlulwa ngawo onke amanani, ngoko ke akukho sahluli mkhulu kule meko. Kule meko, kufuneka sibuyele kwinqanaba lokuqala kwaye sibuze: ngaba ngokwenene kufuneka sibale i-GCD yamanani angenayo? Ukuba oku akuyomfuneko, ngoko kufuneka utshintshe inkcazo.

Apha kufuneka senze ukwehla okuncinci malunga nemveliso. Idla ngokulinganiswa ngenani lemigca yekhowudi ebhaliweyo ngosuku. Kodwa umsebenzi wakho uluncedo ngakumbi ukuba ususa inani elithile lemigca, kuba unendawo encinci yeebhugs. Kwaye indlela elula yokulahla ikhowudi kwinqanaba lokuqala. Kunokwenzeka ngokupheleleyo ukuba awudingi zonke iintsimbi kunye neempempe ozama ukuziphumeza. Eyona ndlela ikhawulezayo yokwenza lula inkqubo kwaye wonge ixesha kukungenzi izinto ekungafanelanga zenziwe. Inyathelo lesibini lelesibini ukuba nako ukonga ixesha. Ukuba ulinganisa imveliso ngokwemigqaliselo ebhaliweyo, ngoko ukucinga malunga nendlela yokufezekisa umsebenzi kuya kukwenza imveliso encinci, kuba unokusombulula ingxaki enye ngekhowudi encinci. Andikwazi ukunika amanani achanekileyo apha, kuba andinayo indlela yokubala inani lemigca endingayibhalanga ngenxa yokuba ndichithe ixesha kwinkcazo, oko kukuthi, kwinqanaba lokuqala kunye nesibini. Kwaye umfuniselo awunakusekwa apha, kuba kuvavanyo asinalo ilungelo lokugqibezela inyathelo lokuqala, umsebenzi umiselwe kwangaphambili.

Kulula ukuhoya ubunzima obuninzi kwiinkcukacha ezingekho sikweni. Akukho nto inzima ngokubhala iinkcukacha ezingqongqo zemisebenzi, andiyi kuxoxa ngale nto. Endaweni yoko, siza kuthetha ngokubhala iinkcukacha eziqinileyo zokuziphatha okusemgangathweni. Kukho ithiyori ethi nayiphi na isethi yokuziphatha inokuchazwa kusetyenziswa ipropati yokhuseleko (ukhuseleko) kunye neempawu zokuphila (ukuphila). Ukhuseleko kuthetha ukuba akukho nto imbi iya kwenzeka, inkqubo ayiyi kunika impendulo engalunganga. Ukusinda kuthetha ukuba kungekudala okanye kamva into enhle iya kwenzeka, oko kukuthi inkqubo iya kunika impendulo echanekileyo ngokukhawuleza okanye kamva. Njengomthetho, ukhuseleko luphawu olubaluleke ngakumbi, iimpazamo zihlala zisenzeka apha. Ngoko ke, ukugcina ixesha, andiyi kuthetha malunga nokusinda, nangona kunjalo, kubalulekile.

Sifumana ukhuseleko ngokumisela, okokuqala, iseti yamazwe okuqala anokubakho. Kwaye okwesibini, ubudlelwane kunye nawo onke amazwe alandelayo anokwenzeka kwilizwe ngalinye. Masenze njengeenzululwazi kwaye sichaze amazwe ngokwemathematika. Iseti yamazwe okuqala ichazwa ngefomula, umzekelo, kwimeko ye-algorithm ye-Euclid: (x = M) ∧ (y = N). Kumaxabiso athile M и N kukho kuphela imo yokuqala. Ubudlelwane kunye nelizwe elilandelayo lichazwa ngefomula apho iinguqu zelizwe elilandelayo zibhalwa nge-prime, kwaye iinguqu zelizwe langoku zibhalwa ngaphandle kwe-prime. Kwimeko ye-algorithm ka-Euclid, siya kujongana nokudityaniswa kweefomyula ezimbini, kwenye yazo. x lelona xabiso likhulu, kwaye okwesibini - y:

Udweliso lwenkqubo lungaphezulu kunokowukhowudwa

Kwimeko yokuqala, ixabiso elitsha lika-y lilingana nexabiso langaphambili lika-y, kwaye sifumana ixabiso elitsha lika-x ngokuthabatha uguquko oluncinane ukusuka kuguquko olukhulu. Kwimeko yesibini, senza ngokuchaseneyo.

Makhe sibuyele kwi-algorithm ka-Euclid. Masicinge kwakhona ukuba M = 12, N = 18. Oku kuchaza imo enye yokuqala, (x = 12) ∧ (y = 18). Emva koko sixhuma la maxabiso kwifomula engentla kwaye sifumane:

Udweliso lwenkqubo lungaphezulu kunokowukhowudwa

Nasi ekuphela kwesisombululo esinokwenzeka: x' = 18 - 12 ∧ y' = 12kwaye sifumana ukuziphatha: [x = 12, y = 18]. Ngokufanayo, sinokuzichaza zonke iindawo ekuziphatheni kwethu: [x = 12, y = 18] β†’ [x = 12, y = 6] β†’ [x = 6, y = 6].

Kwimeko yokugqibela [x = 6, y = 6] omabini la malungu entetho ayakuba bubuxoki, ngoko ke ayinasimo esilandelayo. Ke, sineenkcukacha ezipheleleyo zenyathelo lesibini - njengoko ubona, le yimathematika eqhelekileyo, njengobunjineli kunye nososayensi, kwaye ayiqhelekanga, njengesayensi yekhompyuter.

Ezi fomula zimbini zinokudityaniswa zibe yifomula enye yengqiqo yexeshana. Umhle kwaye kulula ukumchaza, kodwa akukho xesha lakhe ngoku. Sinokufuna ingqiqo yexeshana kuphela kwipropati yokuphila, ayifuneki kukhuseleko. Andiyithandi ingqiqo yexeshana ngolo hlobo, ayisiyomathematika eqhelekileyo, kodwa kwimeko yokuphila bububi obuyimfuneko.

Kwi-algorithm ye-Euclid, ngexabiso ngalinye x ΠΈ y zinexabiso elikhethekileyo x' ΠΈ y', ezenza ukuba unxulumano nemeko elandelayo lube yinyani. Ngamanye amazwi, i-algorithm ka-Euclid is deterministic. Ukwenza imodeli ye-algorithm engagqibekanga, imeko yangoku kufuneka ibe namazwe amaninzi anokwenzeka kwixesha elizayo, kwaye ixabiso ngalinye eliguquguqukayo elingaguqukiyo linamaxabiso aguquguqukayo amaninzi anokuthi unxulumano nelizwe elilandelayo liyinyani. Kulula ukwenza oku, kodwa andiyi kunika imizekelo ngoku.

Ukwenza isixhobo sokusebenza, udinga imathematika esesikweni. Indlela yokwenza iinkcukacha zibe sesikweni? Ukwenza oku, sifuna ulwimi olusemthethweni, umzekelo, TLA+. Ubalulo lwe-algorithm ye-Euclid inokujongeka ngolu hlobo kolu lwimi:

Udweliso lwenkqubo lungaphezulu kunokowukhowudwa

Isimboli esilinganayo esinonxantathu sithetha ukuba ixabiso ekhohlo lophawu lichazwa ukuba lilingana nexabiso ekunene kophawu. Ngokwenyani, inkcazo yinkcazo, kwimeko yethu iinkcazo ezimbini. Kwingcaciso kwi-TLA+, kufuneka udibanise izibhengezo kunye ne-syntax ethile, njengakwisilayidi esingentla. Kwi-ASCII iya kujongeka ngolu hlobo:

Udweliso lwenkqubo lungaphezulu kunokowukhowudwa

Njengoko ubona, akukho nto inzima. Ukucaciswa kwe-TLA + kunokuvavanywa, oko kukuthi ukudlula zonke iindlela zokuziphatha ezinokwenzeka kwimodeli encinci. Kwimeko yethu, le modeli iya kuba ngamaxabiso athile M ΠΈ N. Le yindlela esebenza kakhulu kwaye elula yokuqinisekisa ezenzekelayo ngokupheleleyo. Kwakhona kunokwenzeka ukuba ubhale ubungqina obusemthethweni benyaniso kwaye ukhangele kubo ngomatshini, kodwa oku kuthatha ixesha elininzi, ngoko ke akukho mntu wenza oku.

Eyona nto ingalunganga ye-TLA + kukuba imathematika, kwaye abadwelisi beprogram kunye nososayensi bekhompyuter bayoyika imathematika. Ekuboneni kokuqala, oku kuvakala ngathi yihlaya, kodwa, ngelishwa, ndithetha ngayo yonke into enzulu. Umlingane wam wayendixelela nje ukuba wazama njani ukucacisa i-TLA + kubaphuhlisi abaninzi. Ngokukhawuleza ukuba iifomyula zivele kwisikrini, ngokukhawuleza baba ngamehlo eglasi. Ke ukuba i-TLA+ iyakoyikisa, ungasebenzisa PlusCal, luhlobo lwenkqubo yokudlala ulwimi. Inkcazo kwi-PlusCal inokuba yiyo nayiphi na intetho ye-TLA+, oko kukuthi, ngokubanzi, nayiphi na inkcazo yemathematika. Ukongeza, i-PlusCal ine-syntax yee-algorithms ezinganqunyelwe. Kuba i-PlusCal inokubhala nayiphi na intetho ye-TLA+, i-PlusCal icacisa ngakumbi kunalo naluphi na ulwimi lokwenyani lwenkqubo. Okulandelayo, i-PlusCal iqulunqwe ibe yi-TLA+ efundeka lula. Oku akuthethi, ngokuqinisekileyo, ukuba ukucaciswa kwe-PlusCal eyinkimbinkimbi kuya kuba yinto elula kwi-TLA + - nje imbalelwano phakathi kwabo icacile, akuyi kubakho ubunzima obongezelelweyo. Ekugqibeleni, le nkcazo inokuqinisekiswa ngezixhobo ze-TLA +. Lilonke, i-PlusCal inokunceda ukoyisa i-math phobia kwaye kulula ukuyiqonda nakubadwelisi benkqubo kunye nosonzululwazi beekhompyuter. Kwixesha elidlulileyo, ndapapasha i-algorithms kuyo ixesha elithile (malunga ne-10 iminyaka).

Mhlawumbi umntu uya kuphikisa ukuba i-TLA + kunye ne-PlusCal yimathematika, kwaye imathematika isebenza kuphela kwimizekelo eyiliweyo. Ngokwenza, udinga ulwimi lokwenyani kunye neentlobo, iinkqubo, izinto, njalo njalo. Oku akulunganga. Nantsi into ebhalwe nguChris Newcomb, owayesebenza eAmazon: "Sisebenzise i-TLA+ kwiiprojekthi ezilishumi eziphambili, kwaye kwimeko nganye yenze umahluko omkhulu kuphuhliso kuba sakwazi ukubamba iibhugi eziyingozi ngaphambi kokuba sivelise imveliso, kwaye ngenxa yokuba isinike ingqiqo kunye nokuzithemba esikufunayo ukwenza umsebenzi onobudlova. ukulunga ngaphandle kokuchaphazela ubunyani benkqubo". Unokuhlala uva ukuba xa usebenzisa iindlela ezisemthethweni, sifumana ikhowudi engasebenziyo - ekusebenzeni, yonke into ichasene ngqo. Ukongeza, kukho uluvo lokuba abaphathi abanakuqiniseka ngesidingo seendlela ezisemthethweni, nokuba ngaba abadwelisi benkqubo baqinisekile ukuba baluncedo. Kwaye iNewcomb ibhala: "Abaphathi ngoku batyhala nzima ukuba babhale iinkcukacha ze-TLA +, kwaye babeke ixesha lokuthetha ngokuthe ngqo". Ngoko xa abaphathi bebona ukuba i-TLA + iyasebenza, bayakuvuyela ukuyamkela. UChris Newcomb wabhala oku malunga neenyanga ezintandathu ezidlulileyo (ngo-Oktobha 2014), kodwa ngoku, njengoko ndiyazi, i-TLA + isetyenziswe kwiiprojekthi ze-14, kungekhona i-10. Omnye umzekelo uhambelana noyilo lwe-XBox 360. Umfundi oqeqeshelwa umsebenzi weza kuCharles Thacker kwaye wabhala iinkcukacha zenkqubo yememori. Enkosi kolu nkcukacha, kwafunyanwa i-bug ebinokuthi ingaqatshelwa, kwaye ngenxa yoko yonke i-XBox 360 iya konakala emva kweeyure ezine zokusetyenziswa. Iinjineli ze-IBM ziqinisekisile ukuba iimvavanyo zabo azizange ziyifumane le bug.

Unokufunda ngakumbi malunga ne-TLA + kwi-Intanethi, kodwa ngoku makhe sithethe malunga neenkcukacha ezingekho sikweni. Kunqabile ukuba sibhale iinkqubo ezibala eyona isahluli siqhelekileyo kunye nokunye. Kaninzi sibhala iinkqubo ezifana nesixhobo esihle somshicileli endisibhalele i-TLA+. Emva kweyona nkqubo ilula, ikhowudi yeTLA + iya kujongeka ngolu hlobo:

Udweliso lwenkqubo lungaphezulu kunokowukhowudwa

Kodwa kulo mzekelo ungasentla, umsebenzisi ebefuna ukuba isihlanganisi kunye neempawu ezilinganayo zilungelelaniswe. Ke ukufomatha okuchanekileyo kuya kujongeka ngolu hlobo:

Udweliso lwenkqubo lungaphezulu kunokowukhowudwa

Cinga ngomnye umzekelo:

Udweliso lwenkqubo lungaphezulu kunokowukhowudwa

Apha, ngokuchaseneyo, ulungelelwaniso lokulinganisa, ukudibanisa, kunye neempawu zokuphindaphinda kwimvelaphi kwakungacwangciswanga, ngoko ke eyona nkqubo ilula yanele. Ngokubanzi, akukho ngcaciso yemathematika echanekileyo yokufomatha okuchanekileyo, kuba "echanekileyo" kule meko ithetha "into ayifunayo umsebenzisi", kwaye oku akunakumiselwa ngokwemathematika.

Kuya kubonakala ngathi ukuba asinayo inkcazo yenyaniso, ke ukucaciswa akunamsebenzi. Kodwa akunjalo. Ngenxa yokuba asiyazi into emayiyenze inkqubo ayithethi ukuba akufuneki sicinge ngendlela esebenza ngayoβ€”ngokwahlukileyo koko, kufuneka senze umgudu ongakumbi kuyo. Ingcaciso ibaluleke kakhulu apha. Akunakwenzeka ukumisela inkqubo efanelekileyo yoshicilelo olucwangcisiweyo, kodwa oku akuthethi ukuba akufanele sithathe konke konke, kwaye ukubhala ikhowudi njengomlambo wokuqaphela akuyona into enhle. Ekugqibeleni, ndabhala inkcazo yemithetho emithandathu kunye neenkcazo ngohlobo lwamagqabaza kwifayile ye java. Nanku umzekelo womnye wemigaqo: a left-comment token is LeftComment aligned with its covering token. Lo mgaqo ubhalwe, siya kuthi, isiNgesi semathematika: LeftComment aligned, left-comment ΠΈ covering token - ngokwemigaqo enenkcazelo. Yile ndlela iingcali zezibalo zichaza ngayo imathematika: zibhala iinkcazo zamagama kwaye, ngokusekelwe kuzo, imithetho. Inzuzo yenkcazo enjalo kukuba imithetho emithandathu kulula kakhulu ukuyiqonda kunye nokulungiswa kweempazamo kunemigca ye-850 yekhowudi. Ndimele nditsho ukuba ukubhala le migaqo bekungelula, kuthathe ixesha elininzi ukuyilungisa. Ngokukodwa kule njongo, ndabhala ikhowudi echaza ukuba nguwuphi umgaqo osetyenzisiweyo. Enkosi kwinto yokuba ndivavanye le mithetho mithandathu kwimizekelo emininzi, khange ndifune ukulungisa imigca engama-850 yekhowudi, kwaye iibugs ziye zaba lula ukuzifumana. IJava inezixhobo ezinkulu zoku. Ukuba bendisandula ukubhala ikhowudi, bekuya kundithatha ixesha elide, kwaye ukufomatha bekuya kuba kumgangatho ophantsi.

Kutheni kungasetyenziswanga iinkcukacha ezisesikweni? Kwelinye icala, umiliselo oluchanekileyo alubalulekanga kakhulu apha. Ushicilelo olucwangcisiweyo lubophelelekile ukuba lungakholisi nabani na, ngoko ke akunyanzelekanga ukuba ndilufumane lusebenze kakuhle kuzo zonke iimeko ezingaqhelekanga. Okubaluleke nangakumbi kukuba ndandingenazo izixhobo zaneleyo. I-TLA + imodeli yokukhangela ayinamsebenzi apha, ngoko kuya kufuneka ndibhale ngesandla imizekelo.

Ezi nkcukacha zingentla zineempawu ezifanayo kuzo zonke iinkcukacha. Ikwinqanaba eliphezulu kunekhowudi. Inokusetyenziswa kulo naluphi na ulwimi. Naziphi na izixhobo okanye iindlela azincedi ekuyibhaleni. Akukho khosi yenkqubo eya kukunceda ubhale le ngcaciso. Kwaye akukho zixhobo ezinokuthi zenze le ngcaciso ingabi yimfuneko, ngaphandle kokuba, ngokuqinisekileyo, ubhala ulwimi olukhethekileyo lokubhala iinkqubo zoshicilelo ezicwangcisiweyo kwi-TLA+. Okokugqibela, le ngcaciso ayithethi nto malunga nendlela esiza kuyibhala ngayo ikhowudi, ichaza kuphela into eyenziwa yikhowudi. Sibhala iinkcukacha zokusinceda ukuba sicinge ngengxaki ngaphambi kokuba siqale ukucinga ngekhowudi.

Kodwa le ngcaciso ikwanayo neempawu ezahlulayo kwezinye iinkcukacha. I-95% yezinye iinkcukacha zimfutshane kakhulu kwaye zilula:

Udweliso lwenkqubo lungaphezulu kunokowukhowudwa

Ngapha koko, olu luhlu luluhlu lwemithetho. Njengomthetho, olu luphawu lokuchazwa kakubi. Ukuqonda iziphumo zoluhlu lwemithetho kunzima kakhulu, yiyo loo nto kuye kwafuneka ndichithe ixesha elininzi ndiyilungisa. Nangona kunjalo, kule meko, andizange ndifumane indlela engcono.

Kufanelekile ukuthetha amagama ambalwa malunga neenkqubo eziqhuba ngokuqhubekayo. Njengomthetho, basebenza ngokufanayo, umzekelo, iinkqubo zokusebenza okanye iinkqubo ezisasazwayo. Bambalwa kakhulu abantu abanokuziqonda ngengqondo okanye ephepheni, yaye andinguye omnye wabo, nangona ndakhe ndakwazi ukwenjenjalo. Ngoko ke, sifuna izixhobo eziza kukhangela umsebenzi wethu - umzekelo, TLA + okanye PlusCal.

Kwakutheni ukuze kube yimfuneko ukuba kubhalwe ingcaciso ukuba sele ndisazi ukuba yintoni kanye kanye ekufuneka yenziwe yikhowudi? Phofu bendicinga ukuba ndiyayazi. Ukongeza, kunye nenkcazo, umntu wangaphandle akasadingeki ukuba angene kwikhowudi ukuze aqonde ukuba yintoni kanye ayenzayo. Ndinomgaqo: akufuneki kubekho imigaqo jikelele. Kukho ngaphandle kulo mgaqo, ngokuqinisekileyo, ngumgaqo jikelele kuphela endiwulandelayo: ukucaciswa kwento eyenziwa yikhowudi kufuneka ixelele abantu yonke into abayifunayo xa besebenzisa ikhowudi.

Ke yintoni kanye kanye ekufuneka bayazi abadwelisi benkqubo malunga nokucinga? Ukuqala, ngokufanayo nabo bonke abanye: ukuba awubhali, ngoko kubonakala kuwe kuphela ukuba ucinga. Kwakhona, kufuneka ucinge ngaphambi kokuba ufake ikhowudi, oku kuthetha ukuba kufuneka ubhale ngaphambi kokuba ikhowudi. Inkcazo yile nto siyibhalayo phambi kokuba siqale ukukhowuda. Inkcazo iyafuneka kuyo nayiphi na ikhowudi enokuthi isetyenziswe okanye ilungiswe nguye nabani na. Kwaye lo "mntu" unokuba ngumbhali wekhowudi ngokwakhe emva kwenyanga emva kokubhalwa kwayo. Ukucaciswa kuyafuneka kwiinkqubo ezinkulu kunye neenkqubo, kwiiklasi, kwiindlela, kwaye ngamanye amaxesha nakwiziqendu ezinzima zendlela enye. Yintoni kanye kanye ekufuneka ibhalwe malunga nekhowudi? Kufuneka uchaze into eyenzayo, oko kukuthi, yintoni enokuba luncedo kuye nawuphi na umntu osebenzisa le khowudi. Ngamanye amaxesha kunokuba yimfuneko ukucacisa indlela ikhowudi eyifeza ngayo injongo yayo. Ukuba siye sahamba ngale ndlela ngexesha le-algorithms, ngoko siyibiza ngokuba yi-algorithm. Ukuba yinto ekhethekileyo kunye nentsha, ke siyibiza uyilo olukwinqanaba eliphezulu. Akukho mahluko usesikweni apha: zombini ngumzekelo abstract wenkqubo.

Ufanele ubhale njani ngokuthe ngqo iinkcukacha zekhowudi? Into ephambili: kufuneka ibe kwinqanaba eliphezulu ngaphezu kwekhowudi ngokwayo. Kufuneka ichaze iimeko kunye nokuziphatha. Ifanele ibe ngqongqo njengoko umsebenzi ufuna. Ukuba ubhala ingcaciso yendlela umsebenzi oza kuphunyezwa ngayo, ungawubhala ngepseudocode okanye nge-PlusCal. Kufuneka ufunde indlela yokubhala iinkcukacha kwiinkcukacha ezisesikweni. Oku kuya kukunika izakhono eziyimfuneko eziya kukunceda nezingekho sikweni ngokunjalo. Ufunda njani ukubhala iinkcukacha ezisesikweni? Xa safunda inkqubo, sabhala iinkqubo kwaye emva koko sazilungisa. Kuyafana apha: bhala i-spec, yijonge kunye nemodeli yokukhangela, kwaye ulungise iimpazamo. I-TLA+ isenokungabi lolona lwimi lufanelekileyo kwingcaciso esesikweni, kwaye olunye ulwimi lunokuba ngcono kwiimfuno zakho ezithile. Inzuzo ye-TLA+ kukuba ifundisa ukucinga kwemathematika kakuhle.

Indlela yokudibanisa iinkcukacha kunye nekhowudi? Ngoncedo lwamagqabaza adibanisa iikhonsepthi zemathematika kunye nokuphunyezwa kwazo. Ukuba usebenza ngeegrafu, ngoko kwinqanaba leprogram uya kuba neendawo zokuhlala kunye noluhlu lweekhonkco. Ngoko ke, kufuneka ubhale ngokuchanekileyo indlela igrafu ephunyezwa ngayo ezi zakhiwo zeprogram.

Kufuneka kuqatshelwe ukuba akukho nanye kwezi zingasentla esebenzayo kwinkqubo eyiyo yokubhala ikhowudi. Xa ubhala ikhowudi, oko kukuthi, wenza inyathelo lesithathu, kufuneka ucinge kwaye ucinge ngeprogram. Ukuba umsebenzi ongaphantsi ujika ubenzima okanye ungabonakali, kufuneka ubhale iinkcukacha zawo. Kodwa andithethi ngekhowudi ngokwayo apha. Ungasebenzisa naluphi na ulwimi lwenkqubo, nayiphi na indlela yokusebenza, ayithethi ngabo. Kwakhona, akukho nanye kwezi zingasentla esusa isidingo sokuvavanya kunye nekhowudi yokulungisa. Nokuba imodeli abstract ibhalwe ngokuchanekileyo, kunokubakho iimpazamo ekuphunyezweni kwayo.

Iinkcukacha zokubhala linyathelo elongezelelweyo kwinkqubo yokubhalwa kweekhowudi. Enkosi kuyo, iimpazamo ezininzi zinokubanjwa ngomzamo omncinci - siyakwazi oku kumava abadwelisi benkqubo abavela eAmazon. Ngokucaciswa, umgangatho weenkqubo uba phezulu. Ngoko ke, kutheni sisoloko sihamba ngaphandle kwazo? Kuba ukubhala kunzima. Kwaye ukubhala kunzima, kuba oku kufuneka ucinge, kwaye ukucinga kunzima. Kuhlala kulula ukuzenza into oyicingayo. Apha ungazoba umzekeliso ngokubaleka - okukhona ubaleka kancinci, kokukhona ubaleka kancinci. Kufuneka uqeqeshe izihlunu zakho kwaye uziqhelanise nokubhala. Kufuneka uziqhelanise.

Iinkcukacha zisenokungachanekanga. Usenokuba wenze impazamo kwenye indawo, okanye iimfuno zitshintshile, okanye uphuculo lunokufuneka lwenziwe. Nayiphi na ikhowudi esetyenziswayo nabani na kufuneka itshintshwe, ngoko ke ngokukhawuleza okanye kamva inkcazo ayisayi kuphinda ihambelane neprogram. Ngokufanelekileyo, kule meko, kufuneka ubhale inkcazo entsha kwaye uphinde ubhale ngokupheleleyo ikhowudi. Sazi kakuhle ukuba akukho mntu wenza loo nto. Ngokwenza, sipakisha ikhowudi kwaye mhlawumbi sihlaziye inkcazo. Ukuba oku kuya kwenzeka kungekudala okanye kamva, kutheni ubhala iinkcukacha kwaphela? Okokuqala, kumntu oya kuhlela ikhowudi yakho, igama ngalinye elongezelelweyo kwinkcazo liya kubuxabisa ubunzima balo kwigolide, kwaye lo mntu unokuba nguwe. Ndihlala ndizigxeka ngokungafumani ngcaciso eyaneleyo xa ndihlela ikhowudi yam. Kwaye ndibhala iinkcukacha ezininzi kunekhowudi. Ngoko ke, xa uhlela ikhowudi, iinkcukacha zihlala zifuna ukuhlaziywa. Okwesibini, ngohlaziyo ngalunye, ikhowudi iya isiba mandundu, kuba nzima ngakumbi ukufunda nokugcina. Oku kukwanda kwe-entropy. Kodwa ukuba awuqali nge-spec, ngoko yonke imigca oyibhalayo iya kuba luhlelo, kwaye ikhowudi iya kuba nzima kwaye kube nzima ukuyifunda kwasekuqaleni.

Njengoko bekutshiwo Eisenhower, akukho dabi laphunyelelwa ngecebo, kwaye akukho dabi laphunyelelwa ngaphandle kwecebo. Kwaye wayesazi into okanye ezimbini malunga namadabi. Kukho uluvo lokuba ukubhala iinkcukacha yinkcitha xesha. Ngamanye amaxesha oku kuyinyani, kwaye umsebenzi ulula kangangokuba akukho nto yokucinga ngayo. Kodwa kufuneka uhlale ukhumbula ukuba xa uxelelwa ukuba ungabhali izinto ezicacileyo, uxelelwa ukuba ungacingi. Kwaye kufuneka ucinge ngayo ngalo lonke ixesha. Ukuwucingisisa kakuhle umsebenzi akuqinisekisi ukuba awuyi kuzenza iimpazamo. Njengoko sisazi, akukho mntu wakha i-wand yomlingo, kwaye inkqubo ngumsebenzi onzima. Kodwa ukuba awuyicingi ngengxaki leyo, uqinisekile ukuba uya kuzenza iimpazamo.

Unokufunda ngakumbi malunga ne-TLA + kunye ne-PlusCal kwiwebhusayithi ekhethekileyo, ungaya apho kwiphepha lam lasekhaya ikhonkco. Kuphelele apha kum, enkosi ngokundihoya kwakho.

Nceda uqaphele ukuba le yinguqulelo. Xa ubhala izimvo, khumbula ukuba umbhali akayi kuzifunda. Ukuba ufuna ngokwenene ukuxoxa nombhali, ngoko uya kuba kwinkomfa ye-Hydra 2019, eya kubanjwa ngoJulayi 11-12, 2019 eSt. Amatikiti angathengwa kwiwebhusayithi esemthethweni.

umthombo: www.habr.com

Yongeza izimvo