ʻOi aku ka papahana ma mua o ka coding

ʻOi aku ka papahana ma mua o ka coding

He ʻatikala unuhi kēia ʻO Stanford Seminā. Akā ma mua o kēlā, aia kahi hoʻolauna pōkole. Pehea i hana ʻia ai nā zombies? Ua loaʻa i nā kānaka a pau i kahi kūlana kahi e makemake ai lākou e lawe i kahi hoaaloha a i ʻole hoa hana i ko lākou pae, akā ʻaʻole ia e hana. Eia kekahi, "ʻaʻole ia e hana" ʻaʻole nui loa iā ʻoe, akā nona: ma kekahi ʻaoʻao o ka pālākiō he uku maʻamau, nā hana, a pēlā aku, a ma kekahi ʻaoʻao ka pono e noʻonoʻo. ʻAʻole ʻoluʻolu a ʻeha ka manaʻo. Haʻalele koke ʻo ia a hoʻomau i ke kākau code me ka hoʻohana ʻole ʻana i kona lolo. ʻIke ʻoe i ka nui o ka hoʻoikaika ʻana e lanakila ai i ka pale o ka hemahema aʻo, a ʻaʻole ʻoe e hana. ʻO kēia ke ʻano o ka hana ʻana o nā zombies, me he mea lā hiki ke ho'ōla, akā ʻaʻohe mea e hana i kēia.

I koʻu ʻike ʻana i kēlā Leslie Laimport (ʻae, kēlā hoa hoʻokahi mai nā puke haʻawina) hele mai i Rusia a ʻaʻole hoʻi e hōʻike ana, akā he kau nīnau a pane, ua makaʻala iki au. No ka mea, he kanaka ʻepekema kaulana ʻo Leslie, ʻo ia ka mea kākau o nā hana seminal i ka hoʻopili helu helu, a ʻike paha ʻoe iā ia ma nā leka La ma LaTeX - "Lamport TeX". ʻO ka lua o ka mea weliweli, ʻo ia kāna koi: ʻo ka poʻe a pau e hele mai ana e hoʻolohe i kekahi o kāna mau hōʻike ma mua, e nīnau mai i hoʻokahi nīnau e pili ana iā lākou, a laila hele mai. Ua hoʻoholo wau e ʻike i ka mea a Lamport e hoʻolaha nei ma laila - a maikaʻi loa! ʻO kēia nō kēlā mea, kahi pilina pili kilokilo no ka mālama ʻana i nā zombies. Ke aʻo aku nei au iā ʻoe: hiki i ka kikokikona ke hoʻopau nui i ka poʻe makemake i nā ʻano hana super-agile a makemake ʻole e hoʻāʻo i nā mea a lākou i kākau ai.

Ma hope o ka habrokat, hoʻomaka maoli ka unuhi ʻana o ka seminar. Nanea i ka heluhelu!

ʻO kēlā me kēia hana āu e hana ai, pono ʻoe e hele i ʻekolu mau ʻanuʻu:

  • e hoʻoholo i ka pahuhopu āu e makemake ai e hoʻokō;
  • e hoʻoholo pehea e hoʻokō pono ai ʻoe i kāu pahuhopu;
  • hiki i kāu pahuhopu.

Pili pū kēia i ka polokalamu. Ke kākau mākou i ke code, pono mākou:

  • e hoʻoholo i ka mea pono e hana ai ka papahana;
  • e hoʻoholo pono pehea e hana ai i kāna hana;
  • e kākau i ke code kūpono.

ʻO ka hana hope, ʻoiaʻiʻo, he mea nui loa, akā ʻaʻole wau e kamaʻilio e pili ana i kēia lā. Akā, e kūkākūkā mākou i nā mea mua ʻelua. Hana kēlā me kēia polokalamu polokalamu ma mua o ka hoʻomaka ʻana e hana. ʻAʻole ʻoe e noho i lalo e kākau ke ʻole ʻoe i hoʻoholo i kāu mea e kākau nei: kahi polokalamu kele pūnaewele a i ʻole kahi waihona. Pono e loaʻa kekahi manaʻo o ka pahuhopu. A noʻonoʻo pono ʻoe e pili ana i ka mea e hana ai ka papahana, a mai kākau ʻole me ka manaʻolana e lilo ke code ponoʻī i kahi polokalamu kele.

Pehea e hiki mai ai kēia noʻonoʻo mua o ke code? Pehea ka nui o kā mākou hoʻoikaika ʻana i kēia? Ma muli o ka paʻakikī o ka pilikia a mākou e hoʻoholo nei. E ʻōlelo mākou makemake mākou e kākau i kahi ʻōnaehana puʻunaue hewa. I kēia hihia, pono mākou e noʻonoʻo pono i nā mea ma mua o ka noho ʻana i ka code. He aha inā inā pono mākou e hoʻonui i kahi hoʻololi integer e 1? I ka nānā mua ʻana, he mea liʻiliʻi nā mea āpau ma aneʻi a ʻaʻohe manaʻo e pono ai, akā hoʻomanaʻo mākou e hiki mai ana kahi kahe. No laila, i mea e maopopo ai inā he maʻalahi a paʻakikī paha ka pilikia, pono ʻoe e noʻonoʻo mua.

Inā ʻoe e noʻonoʻo i nā hoʻonā hiki i kahi pilikia ma mua, hiki iā ʻoe ke pale i nā hewa. Akā, pono kēia e maopopo i kou manaʻo. No ka hoʻokō ʻana i kēia, pono ʻoe e kākau i kou mau manaʻo. Aloha au i ka ʻōlelo a Dick Guindon: "Ke kākau ʻoe, hōʻike ke ʻano iā ʻoe i ke ʻano o kou manaʻo." Inā ʻaʻole ʻoe e kākau, manaʻo wale ʻoe e noʻonoʻo ana. A pono ʻoe e kākau i kou mau manaʻo ma ke ʻano o nā kikoʻī.

Hāʻawi nā kikoʻī i nā hana he nui, ʻoi aku ka nui ma nā papahana nui. Akā, e kamaʻilio wau no kekahi o lākou: kōkua lākou iā mākou e noʻonoʻo pono. He mea koʻikoʻi a paʻakikī ka noʻonoʻo pono, no laila pono mākou i ke kōkua ma aneʻi. He aha ka ʻōlelo e kākau ai mākou i nā kikoʻī? Ma keʻano laulā, ʻo kēia ka nīnau mua no nā mea polokalamu: he aha ka ʻōlelo a mākou e kākau ai? ʻAʻohe pane pololei: ʻokoʻa nā pilikia a mākou e hoʻoponopono ai. No kekahi poʻe, pono ʻo TLA+ - he ʻōlelo kikoʻī aʻu i kūkulu ai. No nā mea ʻē aʻe, ʻoi aku ka maʻalahi o ka hoʻohana ʻana i ka Kina. Aia nā mea a pau i ke kūlana.

ʻO ka nīnau koʻikoʻi: pehea e hiki ai iā mākou ke hoʻokō i ka noʻonoʻo maʻalahi? Pane: Pono kākou e noʻonoʻo e like me ka poʻe ʻepekema. He ʻano noʻonoʻo kēia i hana maikaʻi i nā makahiki he 500 i hala. Ma ka ʻepekema kūkulu mākou i nā hiʻohiʻona makemakika o ka ʻoiaʻiʻo. ʻO ka Astronomy paha ka ʻepekema mua ma ke ʻano koʻikoʻi o ka huaʻōlelo. Ma ke kŘkohu makemakika i ho'ohana 'ia ma ka hoku, 'ike 'ia nā kino lani me ka nuipa, kūlana a me ka manawa, 'oiai 'o ka 'oia'i'o, he mau mea pa'akikī loa ia me nā mauna a me nā moana, nā ebbs a me nā kahe. ʻO kēia hiʻohiʻona, e like me nā mea ʻē aʻe, ua hana ʻia e hoʻoponopono i kekahi mau pilikia. He mea maikaʻi ia no ka hoʻoholo ʻana i kahi e kuhikuhi ai i kahi telescope inā makemake ʻoe e ʻimi i kahi honua. Akā inā makemake ʻoe e wānana i ke aniau ma kēia honua, ʻaʻole e holo kēia kumu hoʻohālike.

Hiki i ka makemakika ke hoʻoholo i nā waiwai o ke kŘkohu. A hōʻike ka ʻepekema i ka pili ʻana o kēia mau waiwai i ka ʻoiaʻiʻo. E kamaʻilio e pili ana i kā mākou ʻepekema, ʻepekema kamepiula. ʻO ka ʻoiaʻiʻo a mākou e hana nei, ʻo ia nā ʻōnaehana helu o nā ʻano āpau: nā mea hana, nā consoles pāʻani, nā kamepiula e holo ana i nā polokalamu, a pēlā aku. E kamaʻilio wau e pili ana i ka hoʻokō ʻana i kahi papahana ma kahi kamepiula, akā, ma ka nui, pili kēia mau hopena āpau i kekahi ʻōnaehana kamepiula. Ma kā mākou ʻepekema hoʻohana mākou i nā hiʻohiʻona like ʻole: ka mīkini Turing, nā pūʻulu hanana i kauoha ʻia, a me nā mea ʻē aʻe he nui.

He aha ka papahana? ʻO kēia kekahi code i hiki ke noʻonoʻo pono iā ia iho. E ʻōlelo mākou pono mākou e kākau i kahi polokalamu kele pūnaewele. Hana mākou i ʻekolu mau hana: hoʻolālā i ka hōʻike a ka mea hoʻohana i ka papahana, a laila kākau i ke kiʻi kiʻekiʻe o ka papahana, a hope e kākau i ke code. Ke kākau nei mākou i ke code, ʻike mākou pono mākou e kākau i kahi mea hoʻopono kikokikona. Eia hou, pono mākou e hoʻoponopono i nā pilikia ʻekolu: e hoʻoholo i ka kikokikona e hoʻi mai kēia mea hana; koho i kahi algorithm no ka hoʻopili ʻana; kākau code. Loaʻa i kēia hana kāna ʻano hana: hoʻokomo pololei i nā hyphens i nā huaʻōlelo. Hoʻoponopono pū mākou i kēia subtask i ʻekolu mau ʻanuʻu - e like me kā mākou e ʻike nei, ua hana hou ʻia lākou ma nā pae he nui.

E nānā pono kākou i ka hana mua: he aha ka pilikia e hoʻonā ai ka papahana. Maʻaneʻi mākou e hoʻohālike pinepine i kahi papahana ma ke ʻano he hana e lawe i kekahi mea hoʻokomo a hāʻawi i kekahi mau mea. Ma ka makemakika, ua wehewehe ʻia kekahi hana ma ke ʻano he pūʻulu i kauoha ʻia. No ka laʻana, ua wehewehe ʻia ka hana ʻālikelike no nā helu kūlohelohe e like me ka set {<0,0>, <1,1>, <2,4>, <3,9>, …}. ʻO ke kikowaena o ka wehewehe ʻana o ia hana, ʻo ia ka hoʻonohonoho o nā mea mua o kēlā me kēia pālua, ʻo ia hoʻi, nā helu kūlohelohe. No ka wehewehe ʻana i kahi hana, pono mākou e wehewehe i kona ʻāina a me ke ʻano.

Akā ʻaʻole like nā hana ma ka makemakika me nā hana ma nā ʻōlelo papahana. ʻOi aku ka maʻalahi o ka makemakika. No ka mea ʻaʻohe oʻu manawa no nā hiʻohiʻona paʻakikī, e noʻonoʻo kākou i kahi mea maʻalahi: kahi hana ma C a i ʻole kahi ʻano static ma Java e hoʻihoʻi i ka mahele maʻamau o ʻelua integer. Ma ka kikoʻī o kēia ʻano e kākau mākou: helu GCD(M,N) no ka hoopaapaa M и Nkahi GCD(M,N) - he hana nona ka waihona he pūʻulu o nā hui pū, a ʻo ka waiwai hoʻihoʻi ʻo ia ka huina nui loa i puʻunaue ʻia e M и N. Pehea ka hoʻohālikelike ʻana i ka ʻoiaʻiʻo me kēia kumu hoʻohālike? Hoʻohana ʻia ke kumu hoʻohālike me nā helu helu, a ma C a i ʻole Java iā mākou he 32-bit int. Hiki i kēia hoʻohālike ke hoʻoholo inā pololei ka algorithm GCD, akā ʻaʻole ia e pale i nā hewa overflow. Pono kēia i kahi hiʻohiʻona paʻakikī, no ka mea ʻaʻohe manawa.

E kamaʻilio kākou e pili ana i nā palena o ka hana ma ke ʻano he kumu hoʻohālike. ʻAʻole hoʻihoʻi wale kekahi mau polokalamu (e like me nā ʻōnaehana hana) i kahi waiwai kikoʻī no kekahi mau manaʻo; hiki iā lākou ke holo mau. Eia kekahi, ʻaʻole kūpono ka hana ma ke ʻano he kumu hoʻohālike no ka lua o ka ʻanuʻu: hoʻolālā pehea e hoʻoponopono ai i ka pilikia. Hoʻopili ka Quicksort a me ka bubble sort i ka hana like, akā he mau algorithms ʻokoʻa loa lākou. No laila, no ka wehewehe ʻana i ke ala e hoʻokō ai i ka pahuhopu o ka papahana, hoʻohana au i kekahi kumu hoʻohālike, e kapa ʻia ʻo ia ke kumu hoʻohālike maʻamau. Hōʻike ʻia ka papahana ma ia ʻano he hoʻonohonoho o nā ʻano kūpono a pau, ʻo kēlā me kēia, he ʻano o nā mokuʻāina, a ʻo kahi mokuʻāina ka hāʻawi ʻana i nā waiwai i nā mea hoʻololi.

E ʻike kākou i ke ʻano o ka hana ʻelua no ka Euclidean algorithm. Pono mākou e helu GCD(M, N). Hoʻomaka mākou M pehea xa me ka N pehea y, a laila e unuhi pinepine i ka liʻiliʻi o kēia mau hoʻololi mai ka nui a hiki i ka like. Eia kekahi laʻana, inā M = 12a me ka N = 18, hiki iā mākou ke wehewehe i kēia ʻano hana:

[x = 12, y = 18] → [x = 12, y = 6] → [x = 6, y = 6]

A inā he M = 0 и N = 0? Hiki ke puunaueia ke Zero e na helu a pau, no laila, aole mahele nui loa i keia hihia. Ma kēia kūlana, pono mākou e hoʻi i ka pae mua a nīnau: pono anei mākou e helu i ka GCD no nā helu maikaʻi ʻole? Inā ʻaʻole pono kēia, a laila pono ʻoe e hoʻololi i ka kikoʻī.

ʻO kahi digression pōkole e pili ana i ka huahana aia ma ʻaneʻi. Ua ana pinepine ia ma ka helu o na laina o ke code i kakauia no ka la. Akā ʻoi aku ka maikaʻi o kāu hana inā hoʻopau ʻoe i kekahi helu o nā laina, no ka mea he liʻiliʻi kāu lumi no nā pōpoki. A ʻo ke ala maʻalahi loa e wehe i ke code aia ma ka pae mua. Hiki paha ʻaʻole pono ʻoe i nā bele a pau āu e hoʻāʻo nei e hoʻokō. ʻO ke ala wikiwiki loa e hoʻomaʻamaʻa i kahi papahana a mālama i ka manawa, ʻaʻole ia e hana i nā mea pono ʻole. ʻO ka lua o ka ʻanuʻu ka lua kiʻekiʻe loa e mālama manawa. Inā ʻoe e ana i ka huahana ma ke ʻano o nā laina i kākau ʻia, a laila e noʻonoʻo ʻoe pehea e hoʻopau ai i kahi hana emi mai ka hua, no ka mea hiki iā ʻoe ke hoʻoponopono i ka pilikia like me ka code liʻiliʻi. ʻAʻole hiki iaʻu ke hāʻawi i nā helu kikoʻī ma ʻaneʻi, no ka mea, ʻaʻohe oʻu ala e helu ai i ka helu o nā laina aʻu i kākau ʻole ai ma muli o ka manawa aʻu i hoʻohana ai i ka kikoʻī, ʻo ia hoʻi, ma ka pae mua a me ka lua. A ʻaʻole hiki iā mākou ke hana i kahi hoʻokolohua ma aneʻi, no ka mea, ʻaʻohe o mākou kuleana e hoʻopau i ka hana mua; ua hoʻoholo ʻia ka hana ma mua.

He maʻalahi ke nānā aku i nā pilikia he nui i nā kikoʻī kikoʻī. ʻAʻohe mea paʻakikī e pili ana i ke kākau ʻana i nā kikoʻī koʻikoʻi no nā hana; ʻAʻole wau e kūkākūkā i kēia. Akā, e kamaʻilio mākou e pili ana i ke kākau ʻana i nā kikoʻī ikaika no nā ʻano maʻamau. Aia kekahi theorem e ʻōlelo ana e hiki ke wehewehe ʻia nā ʻano hana me ka hoʻohana ʻana i ka waiwai palekana (palekana) a me nā waiwai ola (ola). 'O ka palekana 'o ia ho'i, 'a'ohe mea 'ino e hiki mai, 'a'ole hā'awi ka polokalamu i ka pane hewa. ʻO ke ola ʻana, ʻo ia hoʻi, e hiki mai ana kekahi mea maikaʻi, ʻo ia hoʻi, e hāʻawi koke ka papahana i ka pane pololei. Ma ke ʻano maʻamau, ʻo ka palekana kahi hōʻailona koʻikoʻi; ʻike pinepine ʻia nā hewa ma aneʻi. No laila, no ka mālama ʻana i ka manawa, ʻaʻole wau e kamaʻilio e pili ana i ka survivability, ʻoiai, he mea nui nō hoʻi.

Loaʻa iā mākou ka palekana ma ka wehewehe mua ʻana i kahi hoʻonohonoho o nā kūlana mua. A ʻo ka lua, nā pilina me nā mokuʻāina e hiki mai ana no kēlā me kēia mokuʻāina. E hana kākou e like me nā kānaka ʻepekema a wehewehe i nā mokuʻāina me ka makemakika. ʻO ka hoʻonohonoho o nā mokuʻāina mua i wehewehe ʻia e ke kumu, no ka laʻana, i ka hihia o ka Euclidean algorithm: (x = M) ∧ (y = N). No kekahi mau waiwai M и N hoʻokahi wale nō kūlana mua. Hōʻike ʻia ka pilina me ka mokuʻāina e hiki mai ana ma ke ʻano e kākau ʻia ai nā mea hoʻololi o ka mokuʻāina aʻe me kahi prime, a ua kākau ʻia nā ʻano like ʻole o ka mokuʻāina i kēia manawa me ka ʻole o ka prime. I ka hihia o ka Euclidean algorithm, e hana mākou i ka disjunction o ʻelua mau ʻano, ma kekahi o ia. x ʻo ia ka waiwai nui loa, a ma ka lua - y:

ʻOi aku ka papahana ma mua o ka coding

Ma ka hihia mua, ua like ka waiwai hou o y me ka waiwai mua o y, a loaa ia kakou ka waiwai hou o x ma ka unuhi ana i ka mea hoololi liilii mai ka mea nui. Ma ka hihia ʻelua, hana mākou i ka ʻaoʻao.

E hoʻi kāua i ka Euclidean algorithm. Manaʻo hou M = 12, N = 18. Hōʻike kēia i kahi kūlana mua, (x = 12) ∧ (y = 18). A laila hoʻopili mākou i kēia mau waiwai i loko o ke ʻano ma luna a loaʻa:

ʻOi aku ka papahana ma mua o ka coding

Eia wale nō ka hoʻonā hiki: x' = 18 - 12 ∧ y' = 12, a loaʻa iā mākou ke ʻano: [x = 12, y = 18]. Ma ke ala like, hiki iā mākou ke wehewehe i nā mokuʻāina āpau i kā mākou ʻano: [x = 12, y = 18] → [x = 12, y = 6] → [x = 6, y = 6].

Ma ka moku'āina hope loa [x = 6, y = 6] ʻo nā ʻaoʻao ʻelua o ka ʻōlelo he wahaheʻe, no laila ʻaʻohe ona kūlana hou. No laila, loaʻa iā mākou kahi kikoʻī piha o ka ʻanuʻu ʻelua - e like me kā mākou e ʻike nei, he makemakika maʻamau kēia, e like me nā mea ʻenekinia a me nā ʻepekema, ʻaʻole he mea ʻē, e like me ka ʻepekema kamepiula.

Hiki ke hoʻohui ʻia kēia mau ʻano ʻelua i hoʻokahi ʻano o ka loiloi kino. He nani a maʻalahi ka wehewehe ʻana, akā ʻaʻohe manawa no ia i kēia manawa. Pono mākou i ka loiloi kino wale no ka waiwai o ke ola; no ka palekana ʻaʻole pono ia. ʻAʻole wau makemake i ka loina kuʻuna e like me ia, ʻaʻole ia he makemakika maʻamau, akā i ke ʻano o ke ola, he mea ʻino ia.

Ma Euclidean algorithm no kēlā me kēia waiwai x и y aia nā waiwai kūʻokoʻa x' и y', ka mea e hoʻokō ai i ka pilina me ka mokuʻāina aʻe. I nā huaʻōlelo ʻē aʻe, he deterministic ka Euclidean algorithm. No ka hoʻohālikelike ʻana i kahi algorithm nondeterministic, pono e loaʻa i ka mokuʻāina i kēia manawa nā mokuʻāina e hiki mai ana, a ʻo kēlā me kēia waiwai o ka mea hoʻololi unprimed pono e loaʻa i nā waiwai he nui o ka hoʻololi primed e like me ka ʻoiaʻiʻo o ka pilina me ka mokuʻāina aʻe. ʻAʻole paʻakikī kēia e hana, akā ʻaʻole wau e hāʻawi i nā hiʻohiʻona i kēia manawa.

No ka hana ʻana i kahi mea hana, pono ʻoe i ka makemakika maʻamau. Pehea e hana ai i kahi kikoʻī maʻamau? No ka hana ʻana i kēia, pono mākou i kahi ʻōlelo maʻamau, e.g. TLA+. ʻO ke ʻano o ka algorithm Euclidean ma kēia ʻōlelo e like me kēia:

ʻOi aku ka papahana ma mua o ka coding

ʻO ka hōʻailona hōʻailona like me kahi huinakolu ʻo ia ka mea i hoʻoholo ʻia ka waiwai ma ka hema o ka hōʻailona e like me ka waiwai ma ka ʻākau o ka hōʻailona. ʻO ke kumu, ʻo kahi kikoʻī he wehewehe, i kā mākou hihia ʻelua wehewehe. I ka kikoʻī ma TLA + pono ʻoe e hoʻohui i nā ʻōlelo a me kekahi syntax, e like me ka paheʻe ma luna. Ma ASCII e like me kēia:

ʻOi aku ka papahana ma mua o ka coding

E like me kāu e ʻike ai, ʻaʻohe mea paʻakikī. Hiki ke hōʻoia ʻia ka ʻōlelo kikoʻī ma TLA+, ʻo ia hoʻi, hiki ke kāpae i nā ʻano hana āpau i kahi kumu hoʻohālike liʻiliʻi. I kā mākou hihia, e lilo kēia kükohu i kekahi mau waiwai M и N. He hana hōʻoia maikaʻi loa kēia a maʻalahi hoʻi. Eia kekahi, hiki ke kākau i nā hōʻoiaʻiʻo o ka ʻoiaʻiʻo a nānā iā lākou me ka mechanically, akā nui kēia manawa, no laila ʻaʻohe mea e hana i kēia.

ʻO ka hemahema nui o TLA+ ʻo ia ka makemakika, a makaʻu nā polokalamu polokalamu a me nā ʻepekema kamepiula i ka makemakika. I ka nānā mua ʻana, he ʻakaʻaka kēia, akā, ʻaʻole naʻe, ke ʻōlelo nei au i kēia me ke koʻikoʻi. Ua haʻi wale mai kekahi hoa hana iaʻu pehea ʻo ia i hoʻāʻo ai e wehewehe iā TLA + i kekahi mau mea hoʻomohala. I ka manawa i ʻike ʻia ai nā ʻōkuhi ma ka pale, ua lilo koke ko lākou mau maka i aniani. No laila inā makaʻu ʻo TLA+, hiki iā ʻoe ke hoʻohana PlusCal, he ʻano ʻōlelo papahana pāʻani. ʻO ka ʻōlelo ma PlusCal hiki ke lilo i kekahi ʻōlelo TLA+, ʻo ia hoʻi, nā ʻōlelo makemakika. Eia kekahi, loaʻa iā PlusCal ka syntax no nā algorithms non-deterministic. No ka mea hiki iā PlusCal ke kākau i kekahi ʻōlelo TLA+, ʻoi aku ka maikaʻi o ka hōʻike ʻana ma mua o nā ʻōlelo papahana maoli. A laila, hoʻohui ʻia ʻo PlusCal i kahi kikoʻī TLA+ maʻalahi. ʻAʻole kēia manaʻo, ʻoiaʻiʻo, e lilo ka kikoʻī PlusCal paʻakikī i mea maʻalahi ma TLA + - ʻoiai ʻike ʻia ka pilina ma waena o lākou, ʻaʻohe mea paʻakikī hou e ʻike ʻia. ʻO ka hope, hiki ke hōʻoia ʻia kēia kikoʻī me ka hoʻohana ʻana i nā mea hana TLA+. Ma keʻano laulā, hiki i ka PlusCal ke kōkua i ka lanakila ʻana i kahi phobia o ka makemakika; maʻalahi ke hoʻomaopopo a hiki i nā mea polokalamu polokalamu a me nā ʻepekema kamepiula. Ua paʻi au i nā algorithms ma luna o ia no kekahi manawa (ma kahi o 10 mau makahiki) i ka wā i hala.

E kūʻē paha kekahi i ka makemakika ʻo TLA+ a me PlusCal, a hana wale ka makemakika me nā laʻana i hana ʻia. I ka hoʻomaʻamaʻa, pono ʻoe i kahi ʻōlelo maoli me nā ʻano, nā kaʻina hana, nā mea, a pēlā aku. He hewa kēia. Eia ka mea a Chris Newcomb, ka mea i hana ma Amazon, i kākau ai: "Ua hoʻohana mākou i ka TLA + ma nā papahana nui he ʻumi, a i kēlā me kēia hihia ua hoʻololi koʻikoʻi kona hoʻohana ʻana i ka hoʻomohala ʻana no ka mea ua hiki iā mākou ke hopu i nā pōpoki pōʻino ma mua o kā lākou hana ʻana, a no ka mea ua hāʻawi mai iā mākou i ka ʻike a me ka hilinaʻi e pono ai mākou e hana ikaika. ka hoʻokō ʻana me ka ʻole o ka hoʻopili ʻana i ka ʻoiaʻiʻo o ka papahana". Hiki iā ʻoe ke lohe pinepine i ka wā e hoʻohana ai i nā ʻano hana maʻamau e loaʻa iā mākou ka code inefficient - ma ka hoʻomaʻamaʻa, ʻokoʻa nā mea āpau. Eia kekahi, aia kahi manaʻo ʻaʻole hiki ke hoʻomaopopo ʻia nā mana mana i ka pono o nā ʻano hana maʻamau, ʻoiai inā maopopo ka poʻe papahana i ko lākou pono. A kākau ʻo Newcomb: "Ke koi nei nā luna i nā ala āpau e kākau i nā kikoʻī ma TLA +, a ke hoʻokaʻawale nei i ka manawa no kēia". No laila ke ʻike nā luna e hana ana ʻo TLA +, ʻapo lākou iā ia. Ua kākau ʻo Chris Newcomb i kēia ma kahi o ʻeono mahina i hala aku nei (ʻOkakopa 2014), akā i kēia manawa, e like me kaʻu ʻike, hoʻohana ʻia ʻo TLA + i nā papahana 14, ʻaʻole 10. ʻO kekahi hiʻohiʻona e pili ana i ka hoʻolālā ʻana o ka XBox 360. Ua hele mai kahi intern iā Charles Thacker a kākau ʻōlelo kikoʻī no ka ʻōnaehana hoʻomanaʻo. Mahalo i kēia ʻōlelo kikoʻī, ua ʻike ʻia kahi pahu i ʻike ʻole ʻia a hiki i kēlā me kēia XBox 360 ke hāʻule ma hope o ʻehā mau hola o ka hoʻohana ʻana. Ua hōʻoia nā ʻenekinia mai IBM ʻaʻole i ʻike kā lākou mau hoʻāʻo i kēia bug.

Hiki iā ʻoe ke heluhelu hou aʻe e pili ana iā TLA+ ma ka Pūnaewele, akā i kēia manawa e kamaʻilio e pili ana i nā kikoʻī kikoʻī. ʻAʻole pono mākou e kākau i nā papahana e helu i ka mea hoʻokaʻawale liʻiliʻi a me nā mea like. Ua kākau pinepine mākou i nā papahana e like me ka mea paʻi kiʻi nani aʻu i kākau ai no TLA+. Ma hope o ka hana maʻalahi, e like ke ʻano o ke code TLA+:

ʻOi aku ka papahana ma mua o ka coding

Akā i ka laʻana ma luna, makemake paha ka mea hoʻohana i ka hui ʻana a me nā hōʻailona like. No laila, ʻoi aku ka maikaʻi o ka hoʻopili pololei ʻana:

ʻOi aku ka papahana ma mua o ka coding

E noʻonoʻo i kekahi hiʻohiʻona:

ʻOi aku ka papahana ma mua o ka coding

Eia, ma kahi ʻē aʻe, ʻo ka alignment o nā hōʻailona like, ka hoʻohui a me ka hoʻonui ʻana i ke kumu he random, no laila ua lawa ka hana maʻalahi. Ma keʻano laulā, ʻaʻohe wehewehe makemakika pololei o ka hoʻopili pololei ʻana, no ka mea, ʻo ka "pololei" ma kēia hihia ʻo ia ka "mea e makemake ai ka mea hoʻohana," a ʻaʻole hiki ke hoʻoholo ʻia ma ka makemakika.

Me he mea lā inā ʻaʻole i loaʻa iā mākou kahi wehewehe o ka ʻoiaʻiʻo, a laila makehewa ke kikoʻī. Akā ʻaʻole ʻoiaʻiʻo kēlā. Ma muli wale o ko mākou ʻike ʻole i ka mea e hana ai ka papahana, ʻaʻole ia he manaʻo ʻaʻole pono mākou e noʻonoʻo pehea e hana ai - akā, pono mākou e hoʻoikaika hou aku ma ia mea. He mea koʻikoʻi ka kikoʻī ma ʻaneʻi. ʻAʻole hiki ke hoʻoholo i ka papahana maikaʻi loa no ka paʻi ʻana, akā ʻaʻole ia he manaʻo ʻaʻole pono mākou e hana, a ʻo ke kākau ʻana i ke code ma ke ʻano he kahawai o ka ʻike ʻaʻole ka hihia. Ua hoʻopau wau i ke kākau ʻana i kahi kikoʻī o nā lula ʻeono me nā wehewehe ma ke ano o na manao ma kahi waihona Java. Eia kekahi laʻana o kekahi o nā lula. a left-comment token is LeftComment aligned with its covering token. Ua kākau ʻia kēia lula ma ka ʻōlelo Pelekania makemakika: LeftComment aligned, left-comment и covering token - nā huaʻōlelo me nā wehewehe. Penei ka wehewehe ʻana o ka makemakika i ka makemakika: kākau lākou i nā wehewehena o nā huaʻōlelo a, ma muli o ia mau mea, hana i nā lula. ʻO ka pōmaikaʻi o kēia kikoʻī, ʻoi aku ka maʻalahi o nā lula ʻeono i ka hoʻomaopopo ʻana a me ka debug ma mua o 850 mau laina code. Pono wau e ʻōlelo ʻaʻole maʻalahi ke kākau ʻana i kēia mau lula; ua lōʻihi ka manawa no ka debug iā lākou. Ua kākau au i ke code no kēia kumu i haʻi mai iaʻu i ke kānāwai e hoʻohana ʻia nei. Ma muli o koʻu hoʻāʻo ʻana i kēia mau lula ʻeono me kekahi mau hiʻohiʻona, ʻaʻole pono iaʻu e debug i nā laina code 850, a ua maʻalahi ka loaʻa ʻana o nā pōpoki. Loaʻa iā Java nā mea hana maikaʻi no kēia. Inā wau i kākau wale i ke code, ua lōʻihi ka lōʻihi a ʻoi aku ka maikaʻi o ka hoʻopili ʻana.

No ke aha i hiki ʻole ai ke hoʻohana ʻia kahi ʻōlelo kikoʻī? Ma kekahi ʻaoʻao, ʻaʻole koʻikoʻi ka hoʻokō pololei ma ʻaneʻi. ʻAʻole ʻoluʻolu ka paʻi ʻia ʻana i kekahi, no laila ʻaʻole pono iaʻu e hana pololei i nā kūlana maʻamau. ʻOi aku ka nui o ka ʻoiaʻiʻo ʻaʻole i loaʻa iaʻu nā mea hana pono. ʻAʻole pono ka TLA + model checker ma ʻaneʻi, no laila pono wau e kākau i nā laʻana ma ka lima.

Loaʻa nā hiʻohiʻona maʻamau i nā kikoʻī i hāʻawi ʻia. ʻOi aku ka kiʻekiʻe ma mua o ke code. Hiki ke hoʻokō ʻia ma kekahi ʻōlelo. ʻAʻohe mea hana a ʻano hana no ke kākau ʻana. ʻAʻohe papa papahana e kōkua iā ʻoe e kākau i kēia kikoʻī. A ʻaʻohe mea hana e hiki ai ke hoʻolilo i kēia kikoʻī i mea pono ʻole, ke ʻole ʻoe e kākau i kahi ʻōlelo kikoʻī no ke kākau ʻana i nā papahana paʻi i kūkulu ʻia ma TLA+. ʻO ka mea hope loa, ʻaʻole ʻōlelo kēia kikoʻī i kekahi mea e pili ana i ke ʻano o kā mākou kākau ʻana i ke code, hōʻike wale ia i ka hana a ke code. Kākau mākou i kahi kikoʻī e kōkua iā mākou e noʻonoʻo i ka pilikia ma mua o ka hoʻomaka ʻana e noʻonoʻo i ke code.

Akā he mau hiʻohiʻona kēia e hoʻokaʻawale iā ia mai nā kikoʻī ʻē aʻe. ʻO 95% o nā kikoʻī ʻē aʻe he pōkole a maʻalahi hoʻi:

ʻOi aku ka papahana ma mua o ka coding

Eia kekahi, ʻo kēia kikoʻī he mau lula. He hōʻailona kēia o kahi kikoʻī maikaʻi ʻole. He paʻakikī ka hoʻomaopopo ʻana i nā hopena o kahi hoʻonohonoho o nā lula, ʻo ia ke kumu e hoʻolilo ai au i ka manawa nui i ka debugging iā lākou. Eia naʻe, i kēia hihia ʻaʻole hiki iaʻu ke ʻimi i kahi ala maikaʻi aʻe.

Pono e ʻōlelo i kekahi mau huaʻōlelo e pili ana i nā polokalamu e holo mau ana. ʻO ka maʻamau e hana like lākou, e like me nā ʻōnaehana hana a i ʻole nā ​​​​pūnaewele puʻupuʻu. He kakaikahi ka poe i hiki ke hoomaopopo ia lakou ma ko lakou manao a ma ka pepa paha, aole au kekahi o lakou, oiai ua hiki ia'u ke hana. No laila, pono mākou i nā mea hana e nānā i kā mākou hana - no ka laʻana, TLA+ a i ʻole PlusCal.

No ke aha i pono ai iaʻu e kākau i kahi kikoʻī inā ua ʻike mua wau i ka mea e hana ai ke code? ʻOiaʻiʻo, manaʻo wale wau ua ʻike wau. Eia kekahi, me kahi kikoʻī i kau ʻia, ʻaʻole pono ka mea ʻē aʻe e nānā i ke code e hoʻomaopopo pono i kāna hana. He lula koʻu: ʻaʻole pono nā lula maʻamau. Aia kekahi ʻokoʻa i kēia lula ʻoiaʻiʻo, ʻo kēia wale nō ke kānāwai maʻamau aʻu e hahai ai: ʻo ka kikoʻī o ka hana a ke code e haʻi i nā poʻe i nā mea āpau e pono ai lākou e ʻike i ka wā e hoʻohana ai i kēlā code.

No laila he aha ka mea e pono ai ka poʻe papahana e ʻike e pili ana i ka noʻonoʻo? E hoʻomaka, e like me nā mea a pau: inā ʻaʻole ʻoe e kākau, a laila ʻike wale ʻoe e noʻonoʻo nei. Eia kekahi, pono ʻoe e noʻonoʻo ma mua o kāu code, ʻo ia hoʻi, pono ʻoe e kākau ma mua o kāu code. ʻO kahi kikoʻī ka mea a mākou e kākau ai ma mua o ka hoʻomaka ʻana i ka coding. Pono kahi kikoʻī no kēlā me kēia code i hiki ke hoʻohana a hoʻololi ʻia e kekahi. A hiki i kēia "kekahi" ke lilo i mea kākau o ke code i hoʻokahi mahina ma hope o ka kākau ʻana. Pono kahi kikoʻī no nā papahana nui a me nā ʻōnaehana, no nā papa, no nā ʻano, a i kekahi manawa no nā ʻāpana paʻakikī o kahi ʻano hana hoʻokahi. He aha kāu e kākau ai e pili ana i ke code? Pono ʻoe e wehewehe i kāna hana, ʻo ia hoʻi, kahi mea hiki ke hoʻohana i kekahi e hoʻohana ana i kēia code. I kekahi manawa pono paha e wehewehe pehea e hoʻokō pono ai ke code i kāna pahuhopu. Inā mākou i hele i kēia ala ma ka papa algorithms, a laila kapa mākou iā ia he algorithm. Inā he mea kūikawā a hou, a laila kapa mākou i ka hoʻolālā kiʻekiʻe. ʻAʻohe ʻokoʻa ʻokoʻa ma ʻaneʻi: ʻelua mau hiʻohiʻona abstract o ka papahana.

Pehea ʻoe e kākau ai i kahi kikoʻī code? ʻO ka mea nui: pono ia i hoʻokahi pae kiʻekiʻe ma mua o ke code ponoʻī. Pono e wehewehe i nā kūlana a me nā ʻano. Pono e like me ke koʻikoʻi e like me ka hana. Inā kākau ʻoe i kahi kikoʻī o ka hoʻokō ʻana i kahi hana, a laila hiki ke kākau ʻia ma pseudocode a i ʻole ka hoʻohana ʻana iā PlusCal. Pono ʻoe e aʻo e kākau i nā kikoʻī me ka hoʻohana ʻana i nā kikoʻī maʻamau. Hāʻawi kēia iā ʻoe i nā mākau pono e kōkua pū me nā mea ʻike ʻole. Pehea ʻoe e aʻo ai i ke kākau ʻana i nā kikoʻī kikoʻī? I ko mākou aʻo ʻana i ka papahana, kākau mākou i nā papahana a laila hoʻopau iā lākou. ʻO ka mea like ma aneʻi: pono ʻoe e kākau i kahi kikoʻī, e nānā iā ia me kahi mea nānā hoʻohālike, a hoʻoponopono i nā hewa. ʻAʻole paha ʻo TLA+ ka ʻōlelo maikaʻi loa no kahi kikoʻī kikoʻī, a ʻoi aku ka maikaʻi o kahi ʻōlelo ʻē aʻe no kāu mau pono kikoʻī. ʻO ka mea nui e pili ana iā TLA+ ʻo ia ka hana nui o ke aʻo ʻana i ka noʻonoʻo makemakika.

Pehea e hoʻopili ai i nā kikoʻī a me ke code? Ke hoʻohana nei i nā manaʻo e pili ana i nā manaʻo makemakika a me kā lākou hoʻokō. Inā hana ʻoe me nā kiʻi, a laila ma ka pae papahana e loaʻa iā ʻoe nā ʻāpana o nā nodes a me nā arrays o nā loulou. No laila pono ʻoe e kākau pehea e hoʻokō pono ʻia ai ka pakuhi e kēia mau hoʻolālā papahana.

Pono e hoʻomaopopo ʻia ʻaʻole pili kekahi o nā mea i luna i ke kaʻina o ke kākau ʻana i ke code ponoʻī. Ke kākau ʻoe i ke code, ʻo ia hoʻi, e hana i ke kolu o ka ʻanuʻu, pono ʻoe e noʻonoʻo a noʻonoʻo ma o ka papahana. Inā paʻakikī a ʻike ʻole paha kahi subtask, pono ʻoe e kākau i kahi kikoʻī no ia. Akā ʻaʻole wau e kamaʻilio e pili ana i ke code ponoʻī ma aneʻi. Hiki iā ʻoe ke hoʻohana i kekahi ʻōlelo papahana, i kekahi ʻano hana, ʻaʻole ia e pili ana iā lākou. Eia kekahi, ʻaʻohe o nā mea i luna e hoʻopau i ka pono e hoʻāʻo a debug i kāu code. ʻOiai ke kākau pololei ʻia ke kumu hoʻohālike abstract, aia paha nā hewa i kāna hoʻokō ʻana.

ʻO ke kākau ʻana i nā kikoʻī he ʻanuʻu hou ia i ke kaʻina hana coding. Mahalo iā ia, hiki ke hopu ʻia nā hewa he nui me ka liʻiliʻi o ka hoʻoikaika ʻana - ʻike mākou i kēia mai ka ʻike o nā polokalamu polokalamu mai Amazon. Me nā kikoʻī, ʻoi aku ka maikaʻi o nā papahana. No laila, no ke aha mākou e hele pinepine ai me ka ʻole o lākou? No ka mea paʻakikī ke kākau ʻana. Akā paʻakikī ke kākau ʻana, no ka mea, pono ʻoe e noʻonoʻo, a paʻakikī hoʻi ka noʻonoʻo. ʻOi aku ka maʻalahi o ka hoʻohālikelike ʻana i kou manaʻo. Hiki ke kiʻi ʻia kahi hoʻohālikelike ma ʻaneʻi me ka holo - ʻo ka liʻiliʻi o kou holo ʻana, ʻoi aku ka lohi o kou holo ʻana. Pono ʻoe e hoʻomaʻamaʻa i kou mau ʻiʻo a hoʻomaʻamaʻa kākau. Pono e hoʻomaʻamaʻa.

ʻAʻole pololei paha ka ʻōlelo kikoʻī. Ua hana hewa paha ʻoe ma kahi, a i ʻole ua loli paha nā koi, a i ʻole pono e hoʻomaikaʻi. Pono e hoʻololi ʻia kēlā me kēia code a kekahi e hoʻohana ai, no laila ʻaʻole e hoʻohālikelike ʻia ka ʻōlelo kikoʻī me ka papahana. Ma ke kūpono, i kēia hihia, pono ʻoe e kākau i kahi kikoʻī hou a kākau hou i ke code. Ua ʻike maopopo mākou ʻaʻohe mea e hana i kēia. I ka hoʻomaʻamaʻa, hoʻopili mākou i ke code a hoʻonui paha i ka kikoʻī. Inā hiki koke kēia a ma hope paha, no ke aha e kākau ai i nā kikoʻī? ʻO ka mea mua, no ka mea nāna e hoʻoponopono i kāu code, ʻo kēlā me kēia huaʻōlelo ʻē aʻe i loko o ka kikoʻī e kūpono i kona kaumaha i ke gula, a ʻo ʻoe paha kēia kanaka. Kiki pinepine wau iaʻu iho no ka lawa ʻole o ka kikoʻī i ka wā e hoʻoponopono ai au i kaʻu code. A kākau wau i nā kikoʻī hou aku ma mua o ke code. No laila, ke hoʻoponopono ʻoe i ke code, pono e hoʻonui mau ʻia ka kikoʻī. ʻO ka lua, me kēlā me kēia hoʻoponopono e ʻoi aku ka hewa o ke code, lilo ia i mea paʻakikī ke heluhelu a mālama. He hoʻonui kēia i ka entropy. Akā inā ʻaʻole ʻoe e hoʻomaka me kahi kikoʻī, a laila e hoʻoponopono ʻia kēlā me kēia laina āu e kākau ai, a ʻoi aku ka nui o ke code a paʻakikī ke heluhelu mai ka hoʻomaka.

E like me ka olelo Eisenhower, ʻaʻole i lanakila ke kaua ma muli o ka manaʻo, ʻaʻole i lanakila ke kaua me ka manaʻo ʻole. A ua ʻike ʻo ia i kekahi mea e pili ana i nā kaua. Aia kekahi manaʻo he hoʻopau manawa ke kākau ʻana i nā kikoʻī. I kekahi manawa he ʻoiaʻiʻo kēia, a maʻalahi ka hana a ʻaʻohe kumu o ka noʻonoʻo ʻana. Akā, e hoʻomanaʻo mau ʻoe i ka wā e ʻōlelo ʻia ai ʻoe ʻaʻole e kākau i nā kikoʻī, ʻo ia ke ʻōlelo ʻia ʻaʻole ʻoe e noʻonoʻo. A pono ʻoe e noʻonoʻo i kēia i kēlā me kēia manawa. ʻO ka noʻonoʻo ʻana i kahi hana ʻaʻole ia e hōʻoiaʻiʻo ʻaʻole ʻoe e hana hewa. E like me kā mākou e ʻike ai, ʻaʻohe mea i hana i ka wand magic, a he hana paʻakikī ka hoʻonohonoho ʻana. Akā inā ʻaʻole ʻoe e noʻonoʻo i ka hana, ua hōʻoia ʻoe e hana hewa.

Hiki iā ʻoe ke heluhelu hou aku e pili ana iā TLA+ a me PlusCal ma kahi pūnaewele kūikawā, hiki iā ʻoe ke hele i laila mai koʻu ʻaoʻao home loulou. ʻO ia wale nō naʻu, mahalo i kou nānā ʻana.

E ʻoluʻolu e hoʻomanaʻo he unuhi kēia. Ke kākau ʻoe i nā manaʻo, e hoʻomanaʻo ʻaʻole e heluhelu ka mea kākau iā lākou. Inā makemake maoli ʻoe e kamaʻilio me ka mea kākau, aia ʻo ia ma ka hui ʻo Hydra 2019, e mālama ʻia ana ma Iulai 11-12, 2019 ma St. Hiki ke kūʻai ʻia nā tiketi ma ka pūnaewele mau.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka