Barnaamijayntu way ka badan tahay codaynta

Barnaamijayntu way ka badan tahay codaynta

Kani waa maqaal tarjumaad Seminar Stanford. Laakiin ka hor waxaa jira hordhac gaaban. Sidee loo sameeyaa zombies? Qof kastaa wuxuu naftiisa ku helay xaalad uu rabo inuu saaxiib ama saaxiibkiis keeno heerkiisa, laakiin ma shaqaynayso. Waxaa intaa dheer, "ma shaqeynayso" adiga wax badan maaha, laakiin isaga: dhinac ka mid ah miisaanka waxaa jira mushahar caadi ah, hawlo, iyo wixii la mid ah, iyo dhinaca kale waa baahida loo qabo in la fekero. Fikirku waa mid aan fiicnayn oo xanuun badan. Si degdeg ah ayuu u quustay oo waxa uu sii wadaa qorista koodka isaga oo aan isticmaalin maskaxdiisa haba yaraatee. Waxaad garanaysaa inta ay le'eg tahay dadaalka ay u baahan tahay si aad uga gudubto caqabada ka hor istaagitaan la'aanta la bartay, oo si fudud ma samaynaysid. Sidan ayaa loo sameeyay zombies, kuwaas oo u muuqda in ay suurtagal tahay in lagu daweeyo, laakiin waxay u muuqataa in qofna uusan samayn doonin tan.

Markaan arkay taas Leslie Lamport (haa, isla saaxiibkaa buugaagta wax lagu barto) yimaado Russia oo ma bixinayo warbixin, laakiin fadhi su'aalo iyo jawaabo ah, waan yara digtoonaaday. Kaliya haddii ay dhacdo, Leslie waa saynisyahan caan ah oo adduunka caan ka ah, qoraaga shaqooyinka seminal ee xisaabinta la qaybiyay, waxaad sidoo kale ku garan kartaa xarfaha La ee LaTeX - "Lamport TeX". Qodobka labaad ee cabsida leh ayaa ah shardigiisa: qof kasta oo yimaadaa waa inuu (si bilaash ah) u dhegaysto dhawr warbixinood oo uu horudhac u yahay, oo uu la yimaado ugu yaraan hal su'aal oo ku saabsan, ka dibna uun yimaado. Waxaan go'aansaday inaan arko waxa Lamport ka sii daayay halkaas - waana wax fiican! Tani waa sida saxda ah, kaniiniga isku xirka sixirka ee lagu daweynayo zombies-ka. Waxaan kaaga digayaa: qoraalku wuxuu si dhab ah u gubi karaa kuwa jecel hababka sare ee aan jeclayn inay tijaabiyaan waxay qoreen.

Habrookatka ka dib, tarjumaadda siminaarka ayaa dhab ahaantii bilaabanaysa. Ku raaxayso akhriska!

Hawl kasta oo aad qabato, waxaad mar walba u baahan tahay inaad soo marto saddex tallaabo:

  • go'aanso yoolka aad rabto inaad gaadho;
  • go'aanso sida saxda ah ee aad u gaadhi doonto yoolkaaga;
  • gaadho hadafkaaga.

Tani waxay sidoo kale khuseysaa barnaamijyada. Marka aan qorno koodka, waxaan u baahanahay:

  • go'aanso waxa dhabta ah ee barnaamijku yahay inuu sameeyo;
  • go'aamiyo sida saxda ah ee ay tahay in ay u gudato hawsheeda;
  • qor koodka ku habboon.

Tallaabada ugu dambeysa, dabcan, waa mid aad muhiim u ah, laakiin kama hadli doono maanta. Halkii, waxaan ka hadli doonaa labada hore. Barnaamij bixiye kastaa wuu sameeyaa ka hor inta aanu bilaabin shaqada. Ma fadhiisanaysid inaad wax qorto ilaa aad go'aansatid waxaad qorayso: browser ama database. Fikrad gaar ah oo hadafka ah waa in ay jirtaa. Waxaadna hubaal ka fekereysaa waxa dhabta ah ee barnaamijku qaban doono, hana u qorin si aan macquul ahayn adiga oo rajeynaya in koodka laftiisa uu si uun u noqon doono browserka.

Sidee dhab ahaan u dhacdaa fikirkan hore ee koodka? Intee in le'eg ayay tahay inaan arrintan gelinno? Dhammaan waxay ku xiran tahay sida ay u adag tahay dhibaatada aan xallineyno. Aynu nidhaahno waxaan rabnaa inaan qorno nidaam loo qaybiyo khalad-dulqaadka. Xaaladdan oo kale, waa in aan si taxadar leh wax uga fikirno ka hor inta aan u fadhiisan code. Ka warran haddaynu u baahanno inaan ku kordhinno doorsoomayaasha isku-dhafka 1? Jaleecada hore, wax kasta oo halkan ku yaal waa wax aan micno lahayn oo looma baahna fikir, laakiin markaa waxaan xasuusannahay in qulqulka uu dhici karo. Sidaa darteed, xitaa si loo fahmo in dhibaatadu ay tahay mid fudud ama mid adag, marka hore waxaad u baahan tahay inaad ka fikirto.

Haddii aad horay uga fikirto xalalka suurtagalka ah ee dhibaatada, waxaad ka fogaan kartaa khaladaadka. Laakiin tani waxay u baahan tahay in fikirkaagu noqdo mid cad. Si taas loo gaaro, waxaad u baahan tahay inaad qorto fikradahaaga. Waxaan jeclahay xigashada Dick Guindon: "Markaad qorto, dabeecaddu waxay ku tusinaysaa sida fikirkaagu u liidato." Haddii aadan qorin, waxaad u maleyneysaa oo kaliya inaad ka fekereyso. Oo waxaad u baahan tahay inaad u qorto fikradahaaga qaab qeexitaan.

Tilmaamuhu waxay u adeegaan hawlo badan, gaar ahaan mashaariicda waaweyn. Laakiin waxaan ka hadli doonaa oo kaliya mid ka mid ah: waxay naga caawiyaan inaan si cad u fikirno. Inaad si cad u fikirto aad bay muhiim u tahay oo aad bay u adag tahay, markaa waxaan halkan uga baahanahay wax gargaar ah. Luqadee ayaan ku qori karnaa tilmaamo? Guud ahaan, tani had iyo jeer waa su'aasha ugu horreysa ee barnaamijyada: luqaddee ayaan ku qori doonnaa? Ma jirto hal jawaab oo sax ah: dhibaatooyinka aan xalino aad bay u kala duwan yihiin. Dadka qaarkiis, TLA+ waa luuqad qeexan oo aan sameeyay. Kuwa kale, way ku habboon tahay in la isticmaalo Shiinaha. Dhammaan waxay ku xiran tahay xaaladda.

Su'aasha ugu muhiimsani waxay tahay: sidee baan ku gaari karnaa fikir cad? Jawaab: Waa inaan u fikirnaa sida saynisyahannada. Tani waa hab-feker oo si fiican u shaqeeyay 500 oo sano ee la soo dhaafay. Sayniska waxaan ku dhisnaa qaababka xisaabeed ee xaqiiqada. Astronomy malaha wuxuu ahaa sayniskii ugu horreeyay ee macnaha adag ee ereyga. Qaabka xisaabeed ee loo isticmaalo cilmiga xiddigiska, jidhadhka samadu waxay u muuqdaan dhibco leh cuf, boos iyo xawli, inkastoo dhab ahaantii ay yihiin walxo aad u qalafsan oo leh buuro iyo badweyn, qulqulo iyo qulqulo. Qaabkan, sida kuwa kale, waxaa loo abuuray si loo xalliyo dhibaatooyinka qaarkood. Way ku fiican tahay in la go'aamiyo meesha lagu tilmaamo telescope haddii aad rabto inaad hesho meere. Laakiin haddii aad rabto inaad saadaaliso cimilada meerahan, qaabkani ma shaqeyn doono.

Xisaabtu waxay noo ogolaataa inaan go'aamino sifooyinka moodeelka. Sayniskuna wuxuu muujinayaa sida sifooyinkaasi ay ula xiriiraan xaqiiqada. Aynu ka hadalno cilmigayaga, sayniska kombiyuutarka. Xaqiiqda aan ku shaqeyno waa nidaamyada xisaabinta noocyo badan oo kala duwan: Processor, consoles game, kombiyuutarada ku shaqeeya barnaamijyada, iyo wixii la mid ah. Waxaan ka hadli doonaa fulinta barnaamijka kombiyuutarka, laakiin, guud ahaan, dhammaan gunaanadyadan waxay khuseeyaan nidaam kasta oo kombuyuutar ah. Sayniskayaga waxaanu isticmaalnaa noocyo badan oo kala duwan: mishiinka Turing, qaybo qayb ahaan la dalbaday, iyo kuwo kale oo badan.

Waa maxay barnaamijku? Kani waa kood kasta oo iskiis loo tixgelin karo. Aynu nidhaahno waxaan u baahanahay inaan qorno browserka. Waxaan qabanaa saddex hawlood: naqshadeynta soo jeedinta isticmaalaha ee barnaamijka, ka dibna qor jaantuska heerka sare ee barnaamijka, oo ugu dambeyntii qor koodka. Markaan qorayno koodka, waxaan ogaanay inaan u baahanahay inaan qorno qaabeeyaha qoraalka. Halkan mar kale waxaan u baahanahay inaan xallino saddex dhibaato: go'aami waxa qoraalka qalabkani soo celin doono; dooro algorithm qaabaynta; qor kood. Hawshani waxay leedahay hawl-hoosaad u gaar ah: Gelida jilayaasha erayada si sax ah. Waxaan sidoo kale ku xallinaa hawshan saddex tallaabo - sida aan aragno, waxay ku soo noqnoqdaan heerar badan.

Aynu si qoto dheer u eegno tallaabada ugu horreysa: waa maxay dhibaatada uu barnaamijku xalliyo. Halkan waxa aynu inta badan ku qaabaynaa barnaamij ka mid ah hawlqabad kaas oo qaata xoogaa wax soo saar ah oo bixiya wax soo saar. Xagga xisaabta, hawl badanaa waxaa lagu tilmaamaa inay tahay lammaane la dalbaday. Tusaale ahaan, shaqada labajibbaaran ee tirooyinka dabiiciga ah waxaa lagu sifeeyaa sida dejinta {<0,0>, <1,1>, <2,4>, <3,9>, …}. Qaybta qeexida shaqadan oo kale waa jaangooyada walxaha ugu horreeya ee lammaane kasta, taas oo ah, tirooyinka dabiiciga ah. Si loo qeexo shaqo, waxaan u baahanahay inaan qeexno domainka iyo qaaciidada.

Laakin hawlaha xisaabta lama mid aha shaqooyinka luuqadaha barnaamiyada. Xisaabtu aad bay uga fudud tahay. Maadaama aanan waqti u haynin tusaalooyin adag, aan ka fiirsanno mid fudud: shaqo ku jirta C ama habka caadiga ah ee Java oo soo celisa qaybiyaha guud ee ugu weyn ee laba mitir. Tilmaamaha habkan waxaan ku qori doonaa: xisaabiyaa GCD(M,N) doodaha M ΠΈ Nhalkaas oo GCD(M,N) - shaqo uu domainkiisu yahay dhawr lammaane oo isugeyn ah, qiimaha soo laabashaduna waa tirada ugu weyn ee loo qaybiyo M ΠΈ N. Sidee xaqiiqadu u barbar dhigaysaa qaabkan? Moodelku wuxuu ku shaqeeyaa isugeyn, C ama Java waxaan ku haynaa 32-bit int. Habkani wuxuu noo ogolaanayaa inaan go'aan ka gaarno haddii algorithm-ku sax yahay GCD, laakiin kama hortagayso khaladaadka qulqulka. Tani waxay u baahan doontaa qaab aad u adag, kaas oo aan wakhti lahayn.

Aynu ka hadalno xaddidaadda shaqada sida tusaale ahaan. Barnaamijyada qaar (sida nidaamyada hawlgalka) kaliya kuma soo celiyaan qiime gaar ah doodaha qaarkood, si joogto ah ayay u socon karaan. Intaa waxaa dheer, shaqada tusaale ahaan si liidata ugu habboon tallaabada labaad: qorsheynta sida loo xalliyo dhibaatada. Quicksort iyo nooca xumbo waxay xisaabiyaan hawl isku mid ah, laakiin gabi ahaanba waa algorithms kala duwan. Sidaa darteed, si aan u qeexo habka loo gaaro yoolka barnaamijka, waxaan isticmaalaa qaab kale, aan u yeerno qaabka habdhaqanka caadiga ah. Barnaamijku waxa uu ka kooban yahay dhammaan hab-dhaqannada saxda ah, kuwaas oo mid kastaa, markeeda, uu yahay taxane dawlad-goboleed, iyo gobolku waa meelaynta qiyamka doorsoomayaasha.

Aynu aragno tallaabada labaad ee algorithm Euclidean waxay u ekaan doontaa. Waxaan u baahanahay inaan xisaabino GCD(M, N). Waxaan bilownay M sida xiyo N sida y, kadibna si isdaba joog ah uga jar inta yar ee doorsoomayaashan ka weyn ilaa ay ka siman yihiin. Tusaale ahaan, haddii M = 12iyo N = 18, waxaan ku tilmaami karnaa hab-dhaqankan soo socda:

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

Iyo haddii M = 0 ΠΈ N = 0? Eber waa loo qaybin karaa dhammaan tirooyinka, markaa ma jiro qaybiye weyn kiiskan. Xaaladdan oo kale, waxaan u baahanahay inaan ku laabano tillaabada koowaad oo aan weydiino: dhab ahaantii ma waxaan u baahanahay inaan xisaabino GCD lambarrada aan togan ahayn? Haddii tani aysan lagama maarmaan ahayn, markaa waxaad u baahan tahay oo kaliya inaad bedesho qeexitaanka.

Digression gaaban oo ku saabsan wax soo saarka ayaa halkan ku habboon. Inta badan waxaa lagu qiyaasaa tirada xariiqyada koodka ee la qoray maalintii. Laakiin shaqadaadu aad bay u faa'iido badan tahay haddii aad ka takhalusto tiro cayiman oo xariiqyo ah, sababtoo ah waxaad haysataa boos yar oo cayayaanka ah. Iyo sida ugu fudud ee looga takhalusi karo koodka waa tallaabada ugu horreysa. Waxaa suurtogal ah inaadan si fudud ugu baahnayn dhammaan gambaleelka iyo foorida aad isku dayayso inaad hirgeliso. Sida ugu dhaqsaha badan ee barnaamijka loo fududayn karo, wakhtigana loo badbaadin karaa waa in aan la samayn waxyaabo aan habboonayn in la sameeyo. Talaabada labaad waxa ay leedahay ta labaad ee ugu saraysa ee wakhtiga lagu badbaadinayo. Haddii aad ku cabbirto wax-soo-saarka xariiqyada qoran, ka dibna ka fikirida sidii aad hawl u dhammaystiri lahayd ayaa ku samaynaysa wax soo saar yar, sababtoo ah waxaad ku xallin kartaa isla dhibaatada adigoo isticmaalaya kood yar. Ma bixin karo tirakoob sax ah halkan, sababtoo ah ma haysto si aan u tiriyo tirada xariiqyada aanan qorin sababtoo ah wakhtiga aan ku qaatay qeexitaanka, taas oo ah, tallaabooyinka koowaad iyo labaad. Sidoo kale halkan kuma samayn karno tijaabo, sababtoo ah tijaabinta xaq uma lihin in aan dhamaystirno talaabada ugu horeysa; hawshu horay ayaa loo go'aamiyaa.

Way fududahay in la iska indho tiro dhibaatooyin badan oo ku saabsan qeexitaanka aan rasmiga ahayn. Ma jiraan wax adag in la qoro tilmaamo adag oo ku saabsan hawlaha; kama hadli doono tan. Taa bedelkeeda, waxaan ka hadli doonaa qorista tilmaamo adag oo loogu talagalay dabeecadaha caadiga ah. Waxaa jira aragti sheegaya in hab-dhaqan kasta lagu tilmaami karo iyadoo la adeegsanayo hantida amniga (badbaadada) iyo guryaha badbaadada (nolol). Badbaadada macnaheedu waa in wax xun aysan dhicin, barnaamijku ma bixin doono jawaab khaldan. Badbaadada macnaheedu waa in mar dhow ama hadhow ay wax wanaagsan dhacaan, tusaale ahaan barnaamijku mar hore ama hadhow ayaa bixin doona jawaabta saxda ah. Sida caadiga ah, nabadgelyadu waa tilmaame aad muhiim u ah, khaladaadkuna inta badan halkan ayay ka dhacaan. Sidaa darteed, si loo badbaadiyo waqtiga, kama hadli doono badbaadada, inkastoo ay, dabcan, sidoo kale waa muhiim.

Waxaan ku gaadhnay badbaado annagoo marka hore caddaynayna go'aamada bilowga ah ee suurtogalka ah. Marka labaadna, xidhiidhka dhammaan dawladaha xiga ee suurtogalka ah ee gobol kasta. Aynu u dhaqno sida saynisyahano oo aynu xisaab ahaan u qeexno gobolada. Jadwalka bilowga ah waxaa lagu sifeeyaa qaacidada, tusaale ahaan, marka laga hadlayo Euclidean algorithm: (x = M) ∧ (y = N). Qiimaha qaarkood M и N waxaa jira hal xaalad oo bilow ah. Xidhiidhka gobolka soo socda waxa lagu sifeeyaa qaacido ah in doorsoomayaasha gobolka soo socda lagu qoro ra'iisul, doorsoomayaasha gobolka hadda jirana waxa la qoraa bilaa ra'iisul. Marka laga hadlayo Euclidean algorithm, waxaan la macaamili doonaa isugeynta laba qaacido, oo mid ka mid ah uu yahay. x waa qiimaha ugu weyn, iyo kan labaad - y:

Barnaamijayntu way ka badan tahay codaynta

Xaaladda koowaad, qiimaha cusub ee y wuxuu la mid yahay qiimihii hore ee y, waxaanan helnaa qiimaha cusub ee x annaga oo ka jarayna doorsoomaha yar kan weyn. Xaaladda labaad, waxaan samaynaa lid ku ah.

Aan ku soo noqonno Euclidean algorithm. Mar kale ka soo qaad M = 12, N = 18. Tani waxay qeexaysaa hal xaalad bilow ah, (x = 12) ∧ (y = 18). Waxaan markaas ku dhejineynaa qiyamkan qaacidada sare oo aan helno:

Barnaamijayntu way ka badan tahay codaynta

Waa kan xalka keliya ee suurtagalka ah: x' = 18 - 12 ∧ y' = 12, waxaana helnaa dabeecadda: [x = 12, y = 18]. Si la mid ah, waxaan ku tilmaami karnaa dhammaan gobolada hab-dhaqankeena: [x = 12, y = 18] β†’ [x = 12, y = 6] β†’ [x = 6, y = 6].

Gobolka ugu dambeeya [x = 6, y = 6] Labada qaybood ee tibaaxuhu waxay noqon doonaan kuwo been abuur ah, sidaas darteed ma laha xaalad soo socota. Sidaa darteed, waxaan haynaa qeexitaan dhamaystiran oo ah tillaabada labaad - sida aan aragno, tani waa xisaab caadi ah, sida injineerada iyo saynisyahannada, oo aan la yaab lahayn, sida sayniska kombiyuutarka.

Labadan qaacido waxa lagu dari karaa hal qaaciido oo macquul ah. Waa xarrago leh oo ay fududahay in la sharaxo, laakiin ma jirto wakhti hadda loogu talagalay. Waxa laga yaabaa in aan u baahanno caqli-gal ku meel gaar ah oo keliya hantida nolol-maalmeedka; ammaan ahaan looma baahna. Ma jecli caqliga ku meel gaadhka ah sidaan oo kale, ma aha xisaab caadi ah, laakiin xaalada nolol-maalmeedka waa shar lagama maarmaan ah.

In Euclidean algorithm qiimo kasta x ΠΈ y waxaa jira qiyam gaar ah x' ΠΈ y', taasoo ka dhigaysa xidhiidhka gobolka soo socda run. Si kale haddii loo dhigo, algorithm Euclidean waa go'aamiye. Si loo qaabeeyo algorithm-ka aan la go'aamin karin, gobolka hadda jira waa inuu lahaadaa dawlado badan oo mustaqbalka ah oo suurtagal ah, iyo qiime kasta oo doorsoomaha aan la soo koobi karin waa inuu lahaadaa qiyam badan oo doorsoomaha hore ah sida xiriirka gobolka xiga waa run. Tani ma adka in la sameeyo, laakiin hadda ma bixin doono tusaalayaal.

Si aad u samayso qalab shaqo, waxaad u baahan tahay xisaab rasmi ah. Sidee loo sameeyaa qeexitaan rasmi ah? Si tan loo sameeyo waxaan u baahan doonaa luqad rasmi ah, tusaale; TLA+. Tilmaamaha algorithm Euclidean ee luqaddan waxay u ekaan doontaa sidan:

Barnaamijayntu way ka badan tahay codaynta

Calaamadda calaamadda siman ee leh saddex xagal micnaheedu waa in qiimaha bidix ee calaamadda la go'aamiyay inuu la mid yahay qiimaha midig ee calaamadda. Nuxur ahaan, qeexiddu waa qeexid, xaaladdeenna laba qeexid. Tilmaamaha ku jira TLA+ waxaad u baahan tahay inaad ku darto caddayn iyo qaar ka mid ah syntax, sida bogga sare. Gudaha ASCII waxay u ekaan doontaa sidan:

Barnaamijayntu way ka badan tahay codaynta

Sida aad arki karto, ma jiraan wax adag. Faahfaahinta ku saabsan TLA+ waa la xaqiijin karaa, tusaale ahaan, waxaa suurtagal ah in laga gudbo dhammaan dabeecadaha suurtagalka ah ee qaab yar. Xaaladeena, qaabkani wuxuu noqon doonaa qiyam gaar ah M ΠΈ N. Tani waa hab xaqiijin oo aad waxtar u leh oo fudud oo gebi ahaanba toos ah. Intaa waxaa dheer, waxaa suurtagal ah in la qoro caddaynta rasmiga ah ee runta oo lagu hubiyo si farsamaysan, laakiin tani waxay qaadataa wakhti badan, sidaas darteed ku dhawaad ​​qofna ma sameeyo.

Khasaaraha ugu weyn ee TLA+ waa xisaabta, iyo barnaamijyada iyo saynisyahannada kombuyuutarku waxay ka baqayaan xisaabta. Jaleecada hore tani waxay u egtahay kaftan, laakiin, nasiib daro, waxaan u idhaahdaa tan si dhab ah. Saaxiibkay ayaa kaliya ii sheegayay sida uu isugu dayay inuu u sharaxo TLA+ dhowr horumariye. Isla markii ay caanuhu ka soo baxeen shaashadda, isla markiiba indhahoodu waxay noqdeen muraayad. Markaa haddii TLA+ ay tahay mid cabsi leh, waad isticmaali kartaa PlusCal, waa nooc ka mid ah luqadda barnaamijyada ciyaarta. Odhaah ku jirta PlusCal waxay noqon kartaa tibaax kasta oo TLA+ ah, taasi waa, asal ahaan tibaax kasta oo xisaabeed. Intaa waxaa dheer, PlusCal waxay leedahay syntax algorithms-yada aan go'aaminaynin. Sababtoo ah PlusCal waxay qori kartaa tibaax kasta oo TLA+ ah, aad bay uga caddahay luuqad kasta oo barnaamijeed oo dhab ah. Marka xigta, PlusCal waxaa lagu soo ururiyey si fudud oo loo akhriyi karo TLA+. Tani macnaheedu maaha, dabcan, in qeexitaanka kakan ee PlusCal uu isu beddeli doono mid fudud oo ku saabsan TLA + - kaliya in xidhiidhka u dhexeeya uu cad yahay, kakanaanta dheeraadka ah ma muuqan doonto. Ugu dambeyntii, qeexitaankan waxaa lagu xaqiijin karaa iyadoo la adeegsanayo qalabka TLA+. Guud ahaan, PlusCal waxay kaa caawin kartaa inaad ka gudubto cabsida xisaabta; way fududahay in la fahmo xitaa barnaamijyada iyo saynisyahannada kumbuyuutarka. Waxaan ku daabacay algorithms-ka in muddo ah (qiyaastii 10 sano) ee la soo dhaafay.

Waxaa laga yaabaa in qof uu diido in TLA+ iyo PlusCal ay yihiin xisaab, oo xisaabtu waxay ku shaqeysaa kaliya tusaalooyin la sameeyay. Ficil ahaan, waxaad u baahan tahay luqad dhab ah oo leh noocyo, habraacyo, walxo, iyo wixii la mid ah. Tani waa khalad. Waa kan waxa Chris Newcomb, oo ka soo shaqeeyay Amazon, uu qoray: "Waxaan u isticmaalnay TLA+ toban mashruuc oo waaweyn, xaalad kasta isticmaalkeedu wuxuu isbeddel weyn ku sameeyay horumarka sababtoo ah waxaan awoodnay inaan qabanno dhiqlaha khatarta ah ka hor intaysan dhicin wax soo saarka, iyo sababtoo ah waxay na siisay aragtida iyo kalsoonida aan u baahannahay inaan sameyno gardarro. hagaajinta waxqabadka iyada oo aan saameyn ku yeelan runta barnaamijka". Inta badan waxaad maqli kartaa in marka la isticmaalayo hababka rasmiga ah aan helno code aan waxtar lahayn - ficil ahaan, wax walba waa ka soo horjeeda. Intaa waxaa dheer, waxaa jira fikrad ah in maareeyayaasha aan lagu qancin karin baahida loo qabo hababka rasmiga ah, xitaa haddii barnaamijyada ay ku qanacsan yihiin waxtarkooda. Newcombna waxay qortay: "Maareeyayaashu hadda waxay u riixayaan si kasta oo suurtagal ah si ay u qoraan faahfaahinta TLA +, waxayna si gaar ah u qoondeynayaan waqti tan". Markaa markay maareeyayaashu arkaan in TLA+ shaqaynayso, way aqbaleen. Chris Newcomb waxa uu qoray tan lix bilood ka hor (Oktoobar 2014), laakiin hadda, inta aan ogahay, TLA + waxaa loo isticmaalaa 14 mashruuc, ma aha 10. Tusaale kale ayaa la xidhiidha naqshadaynta XBox 360. Shaqaale ayaa u yimid Charles Thacker ayaa qoray tilmaamo loogu talagalay nidaamka xusuusta. Mahadsanid qeexitaankan, waxaa la helay bug haddii kale aan la ogaan karin oo sababi lahaa in XBox 360 kasta uu shil ka dib afar saacadood oo la isticmaalo. Injineero ka socda IBM ayaa xaqiijiyay in tijaabooyinkoodu aysan ogaan doonin cayayaankan.

Waxaad wax badan oo ku saabsan TLA+ ka akhrisan kartaa internetka, laakiin hadda aan ka hadalno tilmaamo aan rasmi ahayn. Waa dhif in aan qorno barnaamijyo xisaabinaya qaybiyaha ugu yar iyo wixii la mid ah. Inta badan waxaan qornaa barnaamijyo sida qalabka daabacaadda quruxda badan ee aan u qoray TLA+. Ka dib habaynta ugu fudud, koodka TLA+ wuxuu u ekaan doonaa sidan:

Barnaamijayntu way ka badan tahay codaynta

Laakiin tusaalaha sare, isticmaaluhu waxay u badan tahay inuu rabay isku-xidhka iyo calaamadaha siman in la is waafajiyo. Markaa qaabaynta saxda ah waxay u ekaan doontaa sidan:

Barnaamijayntu way ka badan tahay codaynta

Tusaale kale u fiirso:

Barnaamijayntu way ka badan tahay codaynta

Halkan, liddi ku ah, toosinta calaamadaha siman, isku-darka iyo isku-dhufashada ee isha waxay ahayd random, markaa habka ugu fudud ayaa ku filan. Guud ahaan, ma jirto qeexitaan xisaabeed sax ah oo qaabaynta saxda ah, sababtoo ah "sax ah" kiiskan macnaheedu waa "waxa uu isticmaaluhu rabo," tanna laguma go'aamin karo xisaab ahaan.

Waxay u egtahay in haddii aynaan lahayn qeexitaan runta, markaa qeexitaanku waa mid aan faa'iido lahayn. Laakiin taasi run maaha. Sababtoo ah ma garanayno waxa barnaamijku sameeyo macnaheedu maaha inaan u baahnayn inaan ka fikirno sida uu u shaqeynayo - liddi ku ah, waa inaan ku bixinaa xitaa dadaal dheeraad ah. Tilmaamaha ayaa si gaar ah muhiim u ah halkan. Suurtagal maaha in la go'aamiyo barnaamijka ugu fiican ee daabacaadda habaysan, laakiin tani macnaheedu maaha in aynaan qaadin dhammaan, iyo qorista koodka sida qulqulka miyir-qabka maaha kiiska. Waxaan dhammeeyey qorista qeexitaan ka kooban lix xeer oo leh qeexitaanno qaabka faallooyinka ku jira faylka Java. Waa kan tusaale ka mid ah xeerarka: a left-comment token is LeftComment aligned with its covering token. Xeerkani waxa uu ku qoran yahay, aynu nidhaahno, Ingiriisi xisaabeed: LeftComment aligned, left-comment ΠΈ covering token - shuruudaha qeexitaannada. Tani waa sida ay xisaabyahannadu u qeexaan xisaabta: waxay qoraan qeexitaannada ereyada, iyaga oo ku saleysan, waxay abuuraan xeerar. Faa'iidada qeexitaankan ayaa ah in lix xeer ay aad ugu fududahay in la fahmo lagana saaro 850 xariiq oo kood ah. Waa inaan sheego in qorista xeerarkan aysan fududayn; waxay qaadatay waqti aad u badan in la saxo. Waxaan u qoray kood si gaar ah ujeedadan oo ii sheegay xeerka la isticmaalayo. Sababtoo ah waxaan ku tijaabiyay lixdan xeer dhowr tusaale, uma baahnid inaan ka takhaluso 850 khadadka koodka, iyo cayayaanka ayaa ahaa kuwo aad u fudud in la helo. Java waxay tan u haysaa qalab fiican. Haddii aan hadda uun qori lahaa koodka, waxay igu qaadan lahayd waqti dheer iyo qaabaynta ayaa noqon lahayd mid tayadeedu liidato.

Waa maxay sababta qeexid rasmi ah loo isticmaali waayay? Dhinaca kale, fulinta saxda ah maaha mid aad muhiim u ah halkan. Daabacaadda habaysan waxay ku xidhan tahay inay dadka qaar ku qancin, markaa ma ahayn inaan u helo inay si sax ah u shaqeyso dhammaan xaaladaha aan caadiga ahayn. Waxaa ka sii muhiimsan xaqiiqda ah inaanan haysan qalab ku filan. Jeegaha moodeelka TLA+ halkan waxba kuma tarayo, marka waa in aan tusaalooyinka gacanta ku qoraa.

Tilmaamaha la bixiyay waxa uu leeyahay astaamo ay wadaagaan dhammaan tafaasiisha. Waa heer ka sarreeya koodka. Waxaa lagu hirgelin karaa luqad kasta. Ma jiraan qalab ama habab loo qoro. Ma jiro koorso borogaraam ah oo kaa caawin doona inaad qorto faahfaahintan. Mana jiraan qalab ka dhigi kara qeexitaankan mid aan loo baahnayn, ilaa dabcan aad luqad ku qorayso gaar ahaan qorista barnaamijyada daabacaadda habaysan ee TLA+. Ugu dambayntii, tilmaantani waxba kama odhanayso sida saxda ah ee aan u qori doono koodka, kaliya waxa ay sheegaysaa waxa koodku sameeyo. Waxaan qornaa tilmaamo si ay nooga caawiyaan inaan ka fikirno dhibaatada ka hor inta aanaan bilaabin ka fikirida koodka.

Laakiin qeexitaankani waxa kale oo uu leeyahay sifooyin ka soocaya tilmaamo kale. 95% tilmaamo kale ayaa aad uga gaaban oo ka fudud:

Barnaamijayntu way ka badan tahay codaynta

Dheeraad ah, qeexitaankani waa xeerar. Tani badanaa waa calaamad muujinaysa qeexid liidata. Fahamka cawaaqibka ka dhalanaya xeerar waa arrin aad u adag, waana sababta aan waqti badan u qaatay si aan u saxo. Si kastaba ha ahaatee, kiiskan maan helin hab ka fiican.

Waxaa habboon in wax yar laga sheego barnaamijyada sida joogtada ah u shaqeeya. Caadi ahaan waxay u shaqeeyaan si isbarbar socda, sida nidaamyada hawlgalka ama nidaamyada qaybsan. Dad aad u yar ayaa maskaxdooda ama warqadda ku fahmi kara, aniguna ma ihi, inkastoo aan mar awooday inaan sameeyo. Sidaa darteed, waxaan u baahanahay qalab hubin doona shaqadeena - tusaale ahaan, TLA+ ama PlusCal.

Waa maxay sababta aan ugu baahanahay inaan qoro qeexitaan haddii aan hore u ogaa waxa koodku sameeyo? Runtii, waxaan moodayay oo kaliya inaan garanayo. Intaa waxaa dheer, iyada oo qeexid meesha taal, qof dibadda ahi uma baahna inuu eego koodka si uu u fahmo waxa dhabta ah ee uu qabanayo. Waxaan leeyahay xeer: waa in aanay jirin xeerar guud. Waxaa jira wax ka reeban qaanuunkan dabcan, kani waa xeerka guud ee kaliya ee aan raaco: qeexida waxa code-ku sameeyo waa inay dadka u sheegaan wax kasta oo ay u baahan yihiin inay ogaadaan marka la isticmaalayo koodhkaas.

Haddaba maxay tahay sida saxda ah ee ay barmaamijyadu u baahan yihiin inay ka ogaadaan fikirka? Si aad u bilawdo, la mid ah qof kasta: haddii aadan qorin, markaa waxay kuu muuqataa oo kaliya inaad ka fekereyso. Sidoo kale, waxaad u baahan tahay inaad ka fikirto ka hor intaadan codeeyn, taas oo macnaheedu yahay inaad u baahan tahay inaad wax qorto ka hor intaanad codayn. Qeexitaanku waa waxa aan qorno ka hor inta aanaan bilaabin codaynta. Qeexitaan ayaa loo baahan yahay kood kasta oo la isticmaali karo ama bedeli karo qof kasta. Oo kan "qof" ayaa laga yaabaa inuu noqdo qoraaga koodka bil ka dib markii la qoray. Faahfaahin ayaa loo baahan yahay barnaamijyada iyo nidaamyada waaweyn, fasallada, hababka, iyo mararka qaarkood xitaa qaybaha adag ee hal hab. Maxay tahay inaad ka qorto koodka? Waxaad u baahan tahay inaad qeexdo waxa ay qabato, taas oo ah, wax faa'iido u yeelan kara qof kasta oo isticmaalaya koodkan. Mararka qaarkood waxaa laga yaabaa inay lagama maarmaan noqoto in la qeexo sida saxda ah ee koodku u gaaro yoolkiisa. Haddii aan ku soo marnay habkan koorsada algorithms, markaa waxaan ugu yeernaa algorithms. Haddii ay tahay wax aad u khaas ah oo cusub, markaa waxaan ugu yeernaa naqshad heer sare ah. Ma jiro farqi rasmi ah halkan: labaduba waa moodooyinka barnaamijka.

Sidee saxda ah ee aad u qori kartaa tilmaame kood? Waxa ugu muhiimsan: waa inay ahaataa hal heer oo ka sarreeya koodhka laftiisa. Waa inay qeexdaa gobolada iyo dhaqamada. Waa inay ahaato mid adag sida hawshu u baahan tahay. Haddii aad qorayso qeexid ku saabsan sida loo fuliyo hawsha, markaa waxaa lagu qori karaa pseudocode ama iyadoo la adeegsanayo PlusCal. Waxaad u baahan tahay inaad barato sida loo qoro tilmaamo adoo isticmaalaya tilmaamo rasmi ah. Tani waxay ku siin doontaa xirfadaha lagama maarmaanka ah oo sidoo kale kaa caawin doona kuwa aan rasmiga ahayn. Sideed u baran kartaa qorista tilmaamo rasmi ah? Markii aan barannay barnaamijka, waxaan qornay barnaamijyo ka dibna aan ka saarnay. Wax la mid ah halkan: waxaad u baahan tahay inaad qorto qeexitaan, ku hubi saxiyaha moodeelka, oo aad hagaajiso khaladaadka. TLA+ waxaa laga yaabaa inaysan ahayn luqadda ugu fiican ee qeexitaan rasmi ah, iyo luqad kale ayaa laga yaabaa inay ku habboon tahay baahiyahaaga gaarka ah. Waxa ugu weyn ee ku saabsan TLA+ waa inay qabato shaqo weyn oo barida fikirka xisaabta.

Sida loo xidhidhiyo qeexida iyo koodka? Isticmaalka faallooyinka isku xidha fikradaha xisaabta iyo hirgelintooda. Haddii aad ku shaqeyso garaafyada, markaa heerka barnaamijka waxaad yeelan doontaa noocyo badan oo noodes ah iyo iskuxirayaal. Markaa waxaad u baahan tahay inaad qorto sida saxda ah ee garaafku u hirgeliyo qaab-dhismeedkan barnaamijka.

Waa in la ogaadaa in kuwa kore midkoodna uusan khuseyn habka qorista koodka laftiisa. Markaad qorto koodka, taas oo ah, samee tallaabada saddexaad, waxaad sidoo kale u baahan tahay inaad ka fikirto oo aad ka fikirto barnaamijka. Haddi hawl-hoosaadku noqoto mid adag ama aan muuqan, waxaad u baahan tahay inaad u qorto qeexid. Laakiin anigu kama hadlayo koodka laftiisa halkan. Waxaad isticmaali kartaa luqad kasta oo barnaamijka ah, hab kasta, tani maaha iyaga. Sidoo kale, mid ka mid ah kuwan kor ku xusan ma baabi'inayaan baahida loo qabo in la tijaabiyo oo laga saaro koodka. Xataa haddii qaabka aan la taaban karin si sax ah loo qoray, waxaa laga yaabaa inay kutaanno ku jiraan hirgelintiisa.

Qoritaanka qeexitaannada waa tallaabo dheeraad ah oo ku saabsan habka codaynta. Waad ku mahadsan tahay, khaladaad badan ayaa lagu qaban karaa dadaal yar - tan waxaan ka ognahay khibradda barnaamijyada Amazon. Marka la qeexo, tayada barnaamijyadu waxay noqotaa mid sare. Haddaba waa maxay sababta aan inta badan u baxno la'aantood? Waayo qoraalku waa adag yahay. Laakiin qoraalku waa adag yahay, sababtoo ah tan waxaad u baahan tahay inaad ka fikirto, fekerkuna sidoo kale waa adag yahay. Had iyo jeer way fududahay inaad iska dhigto inaad ku fekereyso. Waxa halkan lagu sawiri karaa isbarbardhigga orodka – hadba inta aad orodayso, waa sii yaraanaysaa. Waxaad u baahan tahay inaad tababarto murqahaaga oo aad ku celceliso qorista. Waxay qaadataa ku-dhaqan.

Faahfaahinta ayaa laga yaabaa inay khaldan tahay. Waxaa laga yaabaa inaad meel qalad ka gashay, ama shuruuduhu way isbedeleen, ama horumar ayaa loo baahan karaa. Koodh kasta oo qof kastaa isticmaalo waa in la beddelo, si dhakhso ah ama hadhow faahfaahinta uma dhigmi doonto barnaamijka. Fikrad ahaan, kiiskan, waxaad u baahan tahay inaad qorto qeexitaan cusub oo aad si buuxda u qorto koodhka. Waxaan si fiican u ognahay in qofna uusan sidan samayn. Ficil ahaan, waxaan dhejineynaa koodka waxaana laga yaabaa inaan cusbooneysiinno qeexitaanka. Haddii tani ay tahay inay dhacdo si dhakhso ah ama dambe, markaa maxaad u qortaa faahfaahinta gabi ahaanba? Marka hore, qofka wax ka beddeli doona koodka, erey kasta oo dheeraad ah oo ku jira qeexitaanku wuxuu u qalmi doonaa miisaankiisa dahab, waxaana laga yaabaa in qofkani adiga yahay. Marar badan ayaan naftayda laadlaadiyaa inaanan si gaar ah u ahayn markaan wax ka beddelo koodkayga. Oo anna waxaan qoraa tilmaamo ka badan code. Sidaa darteed, markaad wax ka beddesho koodka, qeexitaanka had iyo jeer wuxuu u baahan yahay in la cusbooneysiiyo. Marka labaad, mar kasta oo tafatirka koodku sii xumaado, way adkaan doontaa in la akhriyo oo la ilaaliyo. Tani waa kororka entropy. Laakiin haddii aanad ku bilaabin tilmaam, sadar kasta oo aad qorto waxa ay noqonaysaa tafatir, koodkuna waxa uu noqon doonaa mid aad u weyn oo adag in la akhriyo bilawga.

Sida la sheegay Eisenhower, dagaal qorshuhu ahaa laguma guulaysan, dagaalna qorshe la’aan laguma guulaysan. Dagaalladana wax buu ka ogaa. Waxaa jira fikrad ah in qorista tilmaamuhu ay tahay waqti lumis. Mararka qaarkood tani waa run, hawshuna waa mid aad u fudud oo ma jirto wax faa'iido ah in laga fikiro. Laakiin waa inaad had iyo jeer xasuusataa in marka lagugula taliyo inaadan qorin tilmaamo, waxay la macno tahay in lagugula taliyay inaadan ka fikirin. Waana in aad mar kasta ka fikirtaa arrintan. Ka fikirida hawsha ma dammaanad qaadayso inaadan khalad samayn. Sida aynu ognahay cidina ma hindisay usha sixirka ah, barnaamijyaduna waa hawl adag. Laakiin haddii aad ka fikiri weydo hawsha, waxaa hubaal ah inaad khaladaad samayso.

Waxaad ka akhrisan kartaa wax badan oo ku saabsan TLA+ iyo PlusCal degel gaar ah, waxaad halkaas uga tagi kartaa boggayga link. Taasi waa aniga, mahadsanid dareenkaaga.

Fadlan xusuusnow in tani ay tahay tarjumaad. Markaad faallooyinka qorto, xusuusnow in qoraagu aanu akhriyin. Haddii aad runtii rabto inaad la sheekaysato qoraaga, wuxuu joogi doonaa shirka Hydra 2019, kaas oo lagu qaban doono Luulyo 11-12, 2019 St. Petersburg. Tigidhada waa la iibsan karaa bogga rasmiga ah.

Source: www.habr.com

Add a comment