Kupanga mapulogalamu ndi zambiri kuposa kukopera

Kupanga mapulogalamu ndi zambiri kuposa kukopera

Iyi ndi nkhani yomasulira Seminar ya Stanford. Koma izi zisanachitike pali mawu oyamba. Kodi Zombies amapangidwa bwanji? Aliyense adzipeza ali mumkhalidwe womwe akufuna kubweretsa mnzake kapena mnzake pamlingo wawo, koma sizikuyenda. Komanso, "sizikuyenda" osati kwa inu, koma kwa iye: mbali imodzi ya sikelo pali malipiro abwinobwino, ntchito, ndi zina zotero, ndi zina ndizofunika kuganiza. Kuganiza sikusangalatsa komanso kowawa. Mwamsanga amasiya ndikupitiriza kulemba code popanda kugwiritsa ntchito ubongo wake nkomwe. Mumazindikira kuti pamafunika khama lotani kuti mugonjetse chotchinga cha kusowa thandizo komwe mwaphunzira, ndipo simumatero. Umu ndi momwe Zombies amapangidwira, zomwe zikuwoneka kuti zingathe kuchiritsidwa, koma zikuwoneka kuti palibe amene angachite izi.

Pamene ine ndinawona izo Leslie Lamport (inde, bwenzi lomwelo la m'mabuku) afika ku Russia ndipo sindikupereka lipoti, koma gawo la mafunso ndi mayankho, ndinali wochenjera pang'ono. Zikatero, Leslie ndi wasayansi wodziwika padziko lonse lapansi, wolemba ntchito zamaseminal pamakompyuta ogawidwa, ndipo mutha kumudziwanso ndi zilembo La mu LaTeX - "Lamport TeX". Chinthu chachiwiri chochititsa mantha ndicho chofunikira chake: aliyense amene abwera ayenera (kwaulere kwathunthu) kumvetsera malipoti ake angapo pasadakhale, abwere ndi funso limodzi lokhudza iwo, ndiyeno pokhapo abwere. Ndinaganiza zowona zomwe Lamport amawulutsa kumeneko - ndipo ndizabwino! Izi ndi zomwezo, piritsi lamatsenga lamatsenga pochiza Zombies. Ndikukuchenjezani: lembalo likhoza kuwotcha kwambiri iwo omwe amakonda njira zotsogola kwambiri komanso omwe sakonda kuyesa zomwe alemba.

Pambuyo pa habrokat, kumasulira kwa seminayi kumayambadi. Sangalalani kuwerenga!

Ntchito iliyonse yomwe mungagwire, nthawi zonse muyenera kudutsa njira zitatu:

  • sankhani cholinga chomwe mukufuna kukwaniritsa;
  • sankhani momwe mungakwaniritsire cholinga chanu;
  • kwaniritsani cholinga chanu.

Izi zikugwiranso ntchito pamapulogalamu. Tikalemba code, timafunika:

  • sankhani zomwe pulogalamuyo iyenera kuchita;
  • tsimikizirani ndendende momwe iyenera kugwirira ntchito yake;
  • lembani nambala yoyenera.

Gawo lomaliza, ndithudi, ndilofunika kwambiri, koma sindilankhula za lero. M’malo mwake, tikambirana ziΕ΅iri zoyambirira. Wopanga mapulogalamu aliyense amazichita asanayambe kugwira ntchito. Simukhala pansi kuti mulembe pokhapokha mutasankha zomwe mukulemba: msakatuli kapena database. Lingaliro lina la cholinga liyenera kukhalapo. Ndipo mumaganiziranso zomwe pulogalamuyo idzachita, ndipo musalembe mwachisawawa ndikuyembekeza kuti codeyo idzasanduka osatsegula.

Kodi kulingalira kwapambuyo kwa code kumachitika bwanji kwenikweni? Kodi tiyenera kuchita khama lotani pa zimenezi? Zonse zimatengera zovuta zomwe tikuthetsa. Tiyerekeze kuti tikufuna kulemba dongosolo logawira zolakwika. Pamenepa, tiyenera kuganizira mozama tisanakhazikike pansi pa code. Nanga bwanji ngati tingofunika kuonjeza chiwerengero cha chiwerengero ndi 1? Poyang'ana koyamba, zonse pano ndi zazing'ono ndipo palibe lingaliro lomwe likufunika, koma kenako timakumbukira kuti kusefukira kumatha kuchitika. Choncho, ngakhale kuti mumvetse ngati vuto ndi losavuta kapena lovuta, choyamba muyenera kuganiza.

Ngati mukuganiza njira zothetsera vuto pasadakhale, mutha kupewa zolakwika. Koma izi zimafuna kuti malingaliro anu akhale omveka bwino. Kuti zimenezi zitheke, muyenera kulemba maganizo anu. Ndimakonda mawu a Dick Guindon akuti: "Mukamalemba, chilengedwe chimakuwonetsani momwe malingaliro anu alili opusa." Ngati simulemba, mumangoganiza kuti mukuganiza. Ndipo muyenera kulemba maganizo anu mu mawonekedwe a specifications.

Zofotokozera zimagwira ntchito zambiri, makamaka pama projekiti akuluakulu. Koma ndingokamba za imodzi mwa izo: imatithandiza kuganiza bwino. Kuganiza momveka bwino ndikofunikira kwambiri komanso kovutirapo, kotero tikufunika thandizo lililonse pano. Kodi tiyenera kulemba m'chinenero chiyani? Kawirikawiri, ili ndilo funso loyamba kwa olemba mapulogalamu: tidzalemba chinenero chotani? Palibe yankho lolondola: mavuto omwe timathetsa ndi osiyanasiyana. Kwa anthu ena, TLA+ ndi chilankhulo chomwe ndidapanga. Kwa ena, ndikosavuta kugwiritsa ntchito Chitchaina. Zonse zimadalira mmene zinthu zilili.

Funso lofunika kwambiri ndi lakuti: Kodi tingatani kuti tiziganiza bwino? Yankho: Tiyenera kuganiza ngati asayansi. Iyi ndi njira yoganizira yomwe yagwira ntchito bwino pazaka 500 zapitazi. Mu sayansi timapanga zitsanzo zamasamu zenizeni. Sayansi ya zakuthambo mwina inali sayansi yoyamba m'lingaliro lokhazikika la liwulo. Mu chitsanzo cha masamu chomwe chimagwiritsidwa ntchito mu zakuthambo, zakuthambo zimawoneka ngati mfundo zokhala ndi misa, malo ndi mphamvu, ngakhale kuti kwenikweni ndi zinthu zovuta kwambiri zomwe zimakhala ndi mapiri ndi nyanja, ebbs ndi kuyenda. Chitsanzochi, monga china chilichonse, chinapangidwa kuti chithetse mavuto ena. Ndikwabwino kudziwa komwe mungaloze telesikopu ngati mukufuna kupeza pulaneti. Koma ngati mukufuna kulosera za nyengo padziko lapansi, chitsanzo ichi sichigwira ntchito.

Masamu amatipatsa mwayi wodziwa zinthu zachitsanzo. Ndipo sayansi imasonyeza momwe zinthuzi zimagwirizanirana ndi zenizeni. Tiyeni tikambirane za sayansi yathu, sayansi yamakompyuta. Chowonadi chomwe timagwira ntchito ndi makina apakompyuta amitundu yosiyanasiyana: mapurosesa, masewera amasewera, makompyuta omwe amayendetsa mapulogalamu, ndi zina zotero. Ndilankhula za kukhazikitsa pulogalamu pakompyuta, koma, mokulira, malingaliro onsewa amagwira ntchito pamakompyuta aliwonse. Mu sayansi yathu timagwiritsa ntchito mitundu yosiyanasiyana: makina a Turing, zochitika zokonzedwa pang'ono, ndi zina zambiri.

Kodi pulogalamuyo ndi chiyani? Ichi ndi code iliyonse yomwe ingaganizidwe payokha. Tinene kuti tiyenera kulemba msakatuli. Timagwira ntchito zitatu: kupanga mawonekedwe a wogwiritsa ntchito pulogalamuyo, kenako lembani chithunzi chapamwamba cha pulogalamuyi, ndipo pomaliza lembani kachidindo. Pamene tikulemba kachidindo, timazindikira kuti tifunika kulemba fomu yolembera. Apanso tiyenera kuthetsa mavuto atatu: kudziwa zimene lemba chida ichi adzabwerera; sankhani algorithm yosinthira; lemba kodi. Ntchitoyi ili ndi ntchito yakeyake: kuyika ma hyphens m'mawu moyenera. Timathetsanso gawo laling'onoli m'magawo atatu - monga tikuwonera, amabwerezedwa pamagawo ambiri.

Tiyeni tiwone mwatsatanetsatane sitepe yoyamba: vuto lomwe pulogalamuyo imathetsa. Apa nthawi zambiri timatengera pulogalamu ngati ntchito yomwe imatenga zolowetsamo ndikutulutsa zina. Mu masamu, ntchito nthawi zambiri imafotokozedwa ngati magulu awiriawiri olamulidwa. Mwachitsanzo, ntchito ya squaring ya manambala achilengedwe imafotokozedwa ngati seti {<0,0>, <1,1>, <2,4>, <3,9>, ...}. Dera la tanthawuzo la ntchito yotere ndilo gawo la zinthu zoyamba za gulu lirilonse, ndiye kuti, manambala achilengedwe. Kuti tifotokoze ntchito, tiyenera kufotokoza dera lake ndi ndondomeko yake.

Koma ntchito mu masamu si yofanana ndi ntchito m'zinenero mapulogalamu. Masamu ndi osavuta. Popeza ndilibe nthawi ya zitsanzo zovuta, tiyeni tiganizire zophweka: ntchito mu C kapena njira yosasunthika mu Java yomwe imabweretsanso gawo lalikulu kwambiri la magawo awiri. Mwachindunji cha njirayi tidzalemba: kuwerengera GCD(M,N) kwa mikangano M ΠΈ Nkumene GCD(M,N) - ntchito yomwe dera lake lili ndi magulu awiriawiri, ndipo mtengo wobwezera ndi chiwerengero chachikulu kwambiri chomwe chimagawidwa ndi M ΠΈ N. Kodi zenizeni zikufanana bwanji ndi chitsanzo ichi? Chitsanzocho chimagwira ntchito ndi nambala, ndipo mu C kapena Java tili ndi 32-bit int. Chitsanzochi chimatithandiza kusankha ngati algorithm ili yolondola GCD, koma sichidzalepheretsa zolakwika zosefukira. Izi zingafune chitsanzo chovuta kwambiri, chomwe palibe nthawi.

Tiyeni tikambirane zofooka za ntchito monga chitsanzo. Mapulogalamu ena (monga makina opangira opaleshoni) samangobweza mtengo wankhani zina; amatha kuthamanga mosalekeza. Kuonjezera apo, ntchito ngati chitsanzo sichiyeneranso pa sitepe yachiwiri: kukonzekera momwe mungathetsere vutoli. Quicksort ndi mtundu wa bubble amawerengera ntchito yomweyo, koma ndizosiyana kwambiri. Choncho, pofotokoza njira yokwaniritsira cholinga cha pulogalamuyo, ndimagwiritsa ntchito chitsanzo china, tiyeni titchule chitsanzo cha khalidwe labwino. Pulogalamuyi imayimiridwa mmenemo ngati machitidwe onse ovomerezeka, omwe, nawonso, amatsatizana ndi mayiko, ndipo dziko ndilo gawo lazofunikira pazosintha.

Tiyeni tiwone momwe gawo lachiwiri la algorithm ya Euclidean lingawonekere. Tiyenera kuwerengera GCD(M, N). Timayamba M momwe xndi N momwe y, kenaka muchotse mobwerezabwereza tinthu tating’ono tosiyanasiyana kuchokera pa zazikuluzo mpaka zitafanana. Mwachitsanzo, ngati M = 12ndi N = 18, tikhoza kufotokoza khalidwe ili:

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

Ndipo ngati M = 0 ΠΈ N = 0? Zero imagawika ndi manambala onse, kotero palibe wogawa wamkulu pankhaniyi. Zikatere, tiyenera kubwereranso ku sitepe yoyamba ndikufunsa kuti: kodi tikufunikadi kuwerengera GCD pazinambala zomwe sizinali zabwino? Ngati izi siziri zofunikira, ndiye kuti mumangofunika kusintha ndondomekoyi.

Kusiya pang'ono pa zokolola kuli koyenera apa. Nthawi zambiri amayezedwa m'mizere ya mizere yolembedwa patsiku. Koma ntchito yanu imakhala yothandiza kwambiri ngati mutachotsa mizere ingapo, chifukwa muli ndi malo ochepa a nsikidzi. Ndipo njira yosavuta yochotsera code ili mu sitepe yoyamba. Ndizotheka kuti simukusowa mabelu onse ndi malikhweru omwe mukuyesera kukhazikitsa. Njira yachangu kwambiri yochepetsera pulogalamu ndikusunga nthawi ndikusachita zinthu zomwe siziyenera kuchitidwa. Gawo lachiwiri lili ndi mphamvu yachiwiri yopulumutsa nthawi. Ngati muyesa zokolola malinga ndi mizere yolembedwa, ndiye kuti kuganizira momwe mungamalizitsire ntchito kungakupangitseni osabala zipatso, chifukwa mutha kuthetsa vuto lomwelo ndi code yochepa. Sindingathe kupereka ziwerengero zenizeni apa, chifukwa ndilibe njira yowerengera mizere yomwe sindinalembe chifukwa cha nthawi yomwe ndidakhala ndikulongosola, ndiko kuti, pamasitepe oyambirira ndi achiwiri. Ndipo sitingathenso kuyesa pano, chifukwa mukuyesera tilibe ufulu womaliza sitepe yoyamba; ntchitoyo imatsimikiziridwa pasadakhale.

Ndikosavuta kunyalanyaza zovuta zambiri pamatchulidwe osalongosoka. Palibe chovuta pakulemba zotsimikizika zantchito; sindikambirana izi. M'malo mwake, tikambirana za kulemba mfundo zamphamvu zamakhalidwe abwino. Pali nthano yomwe imanena kuti machitidwe aliwonse amatha kufotokozedwa pogwiritsa ntchito chitetezo (chitetezo) ndi survivability properties (moyo). Chitetezo chimatanthauza kuti palibe choipa chomwe chidzachitike, pulogalamuyo sidzapereka yankho lolakwika. Kupulumuka kumatanthauza kuti posachedwa kapena mtsogolo chinachake chabwino chidzachitika, mwachitsanzo, pulogalamuyo posachedwa idzapereka yankho lolondola. Monga lamulo, chitetezo ndi chizindikiro chofunikira kwambiri; zolakwika zimachitika nthawi zambiri pano. Chifukwa chake, kuti ndisunge nthawi, sindilankhula za kupulumuka, ngakhale, ndizofunikanso.

Timapeza chitetezo pofotokoza kaye mndandanda wa mayiko omwe angakhalepo. Ndipo kachiwiri, maubwenzi ndi maiko onse omwe angatheke ku boma lililonse. Tiyeni tizichita ngati asayansi ndikutanthauzira mayiko mwamasamu. Magawo oyambira amafotokozedwa ndi chilinganizo, mwachitsanzo, pankhani ya algorithm ya Euclidean: (x = M) ∧ (y = N). Pazinthu zina M и N pali chikhalidwe chimodzi chokha. Ubale ndi dziko lotsatira likufotokozedwa ndi ndondomeko yomwe zosinthika za dziko lotsatira zimalembedwa ndi prime, ndipo zosinthika za chikhalidwe chamakono zimalembedwa popanda prime. Pankhani ya algorithm ya Euclidean, tikhala tikuchita ndi kusagwirizana kwamitundu iwiri, imodzi mwazo. x ndiye mtengo waukulu kwambiri, ndipo wachiwiri - y:

Kupanga mapulogalamu ndi zambiri kuposa kukopera

Pachiyambi choyamba, mtengo watsopano wa y ndi wofanana ndi mtengo wam'mbuyo wa y, ndipo timapeza mtengo watsopano wa x pochotsa chosiyana chaching'ono kuchokera ku chachikulu. Chachiwiri, timachita zosiyana.

Tiyeni tibwerere ku algorithm ya Euclidean. Tiyerekezenso kuti M = 12, N = 18. Izi zikutanthawuza chikhalidwe chimodzi choyamba, (x = 12) ∧ (y = 18). Kenako timalumikiza mfundo izi mu fomula ili pamwambapa ndikupeza:

Kupanga mapulogalamu ndi zambiri kuposa kukopera

Nayi njira yokhayo yomwe ingatheke: x' = 18 - 12 ∧ y' = 12, ndipo timapeza khalidwe: [x = 12, y = 18]. Momwemonso, titha kufotokozera maiko onse mumayendedwe athu: [x = 12, y = 18] β†’ [x = 12, y = 6] β†’ [x = 6, y = 6].

Pomaliza [x = 6, y = 6] mbali zonse ziwiri za mawuwo zidzakhala zabodza, choncho ilibe chikhalidwe chotsatira. Choncho, tili ndi mfundo zonse za sitepe yachiwiri - monga tikuonera, ndi masamu wamba, monga injiniya ndi asayansi, osati zachilendo, monga mu sayansi kompyuta.

Njira ziwirizi zitha kuphatikizidwa kukhala njira imodzi yamalingaliro akanthawi. Ndizokongola komanso zosavuta kufotokoza, koma palibe nthawi yake tsopano. Tingafunike kulingalira kwakanthawi kokha pazinthu zamoyo; pachitetezo sizofunikira. Sindimakonda kuganiza kwakanthawi motere, si masamu wamba, koma pankhani yakukhala moyo ndikofunikira.

Mu Euclidean algorithm pamtengo uliwonse x ΠΈ y pali makhalidwe apadera x' ΠΈ y', zomwe zimapangitsa ubale ndi dziko lotsatira kukhala loona. Mwanjira ina, algorithm ya Euclidean ndiyotsimikiza. Kuti muwonetsere algorithm yosagwirizana, dziko lomwe lilipo liyenera kukhala ndi maiko angapo amtsogolo, ndipo mtengo uliwonse wakusintha kosasinthika uyenera kukhala ndi zikhalidwe zingapo zamitundu yoyambira kuti ubale ndi dziko lotsatira ukhale wowona. Izi sizovuta kuchita, koma sindipereka zitsanzo tsopano.

Kuti mupange chida chogwirira ntchito, muyenera masamu okhazikika. Kodi mungapangire bwanji tsatanetsatane? Kuti tichite izi tidzafunika chinenero chokhazikika, mwachitsanzo. TLA+. Mafotokozedwe a algorithm ya Euclidean m'chinenerochi adzawoneka motere:

Kupanga mapulogalamu ndi zambiri kuposa kukopera

Chizindikiro chofanana ndi katatu chimatanthawuza kuti mtengo kumanzere kwa chizindikiro umatsimikiziridwa kukhala wofanana ndi mtengo kumanja kwa chizindikiro. M'malo mwake, tanthauzo ndi tanthauzo, m'malo mwathu matanthauzidwe awiri. Kufotokozera mu TLA+ muyenera kuwonjezera zolengeza ndi mawu ena, monga momwe zilili pamwambapa. Mu ASCII zitha kuwoneka motere:

Kupanga mapulogalamu ndi zambiri kuposa kukopera

Monga mukuonera, palibe chovuta. Zomwe zili pa TLA + zikhoza kutsimikiziridwa, mwachitsanzo, n'zotheka kudutsa machitidwe onse omwe angakhalepo mu chitsanzo chaching'ono. Kwa ife, chitsanzo ichi chidzakhala mfundo zina M ΠΈ N. Iyi ndi njira yabwino kwambiri komanso yosavuta yotsimikizira yomwe imakhala yodziwikiratu. Kuonjezera apo, n'zotheka kulemba maumboni ovomerezeka a choonadi ndikuwunika mwamakina, koma izi zimatenga nthawi yambiri, kotero pafupifupi palibe amene amachita izi.

Choyipa chachikulu cha TLA + ndikuti ndi masamu, ndipo olemba mapulogalamu ndi asayansi apakompyuta amawopa masamu. Poyamba izi zikumveka ngati nthabwala, koma, mwatsoka, ndikunena izi mozama. Mnzanga wina amangondiuza momwe adayesera kufotokozera TLA + kwa opanga angapo. Mafomuwo atangowonekera pazenera, maso awo nthawi yomweyo adakhala magalasi. Chifukwa chake ngati TLA + ndiyowopsa, mutha kugwiritsa ntchito Kuphatikiza Cal, ndi mtundu wa chinenero cha pulogalamu ya chidole. Mawu mu PlusCal akhoza kukhala mawu aliwonse a TLA+, ndiye kuti, makamaka masamu aliwonse. Kuphatikiza apo, PlusCal ili ndi syntax ya ma algorithms osatsimikiza. Chifukwa PlusCal imatha kulemba mawu aliwonse a TLA+, ndiyomveka kwambiri kuposa chilankhulo chilichonse chokonzekera. Kenako, PlusCal imapangidwa kukhala yosavuta kuwerenga mafotokozedwe a TLA +. Izi sizikutanthauza, ndithudi, kuti ndondomeko yovuta ya PlusCal idzakhala yosavuta pa TLA + - kungoti makalata pakati pawo ndi odziwikiratu, palibe zovuta zina zomwe zidzawonekere. Pomaliza, izi zitha kutsimikiziridwa pogwiritsa ntchito zida za TLA +. Mwambiri, PlusCal imatha kuthandizira kuthana ndi vuto la masamu; ndizosavuta kumvetsetsa ngakhale kwa opanga mapulogalamu ndi asayansi apakompyuta. Ndinasindikiza ma aligorivimu pa izo kwa kanthawi (pafupifupi zaka 10) m'mbuyomu.

Mwina wina angatsutse kuti TLA + ndi PlusCal ndi masamu, ndipo masamu amangogwira ntchito ndi zitsanzo zopangidwa. Pochita, muyenera chilankhulo chenicheni chokhala ndi mitundu, njira, zinthu, ndi zina zotero. Izi ndi zolakwika. Izi ndi zomwe Chris Newcomb, yemwe amagwira ntchito ku Amazon, analemba: "Tagwiritsa ntchito TLA + pama projekiti akuluakulu khumi, ndipo nthawi zonse kugwiritsidwa ntchito kwake kunasintha kwambiri chitukuko chifukwa tidatha kugwira nsikidzi zowopsa zisanayambike, komanso chifukwa zidatipatsa luntha komanso chidaliro chomwe timafunikira kuti tikhale ankhanza. kukhathamiritsa kwa magwiridwe antchito popanda kukhudza chowonadi cha pulogalamuyi". Nthawi zambiri mumamva kuti tikamagwiritsa ntchito njira zovomerezeka timapeza ma code osagwira ntchito - pochita, zonse ndizosiyana. Kuphatikiza apo, pali lingaliro loti oyang'anira sangakhulupirire kufunikira kwa njira zovomerezeka, ngakhale opanga mapulogalamu atsimikiza kuti ndi othandiza. Ndipo Newcomb analemba kuti: "Oyang'anira tsopano akukankhira m'njira iliyonse kuti alembe zolemba mu TLA+, ndipo akupatula nthawi ya izi". Ndiye oyang'anira akaona kuti TLA + ikugwira ntchito, amavomereza. Chris Newcomb analemba izi pafupifupi miyezi isanu ndi umodzi yapitayo (October 2014), koma tsopano, monga momwe ndikudziwira, TLA + imagwiritsidwa ntchito mu ntchito za 14, osati 10. Chitsanzo china chikugwirizana ndi mapangidwe a XBox 360. Wophunzira anafika kwa Charles Thacker ndipo adalemba zofotokozera za memory system. Chifukwa cha izi, cholakwika chinapezeka chomwe sichikanadziwika ndipo chingapangitse XBox 360 iliyonse kuwonongeka pakatha maola anayi akugwiritsidwa ntchito. Mainjiniya ochokera ku IBM adatsimikizira kuti mayeso awo sakanazindikira cholakwika ichi.

Mutha kuwerenga zambiri za TLA + pa intaneti, koma tsopano tiyeni tikambirane zatsatanetsatane. Sitiyenera kulemba mapulogalamu omwe amawerengera magawo ochepa kwambiri ndi zina zotero. Nthawi zambiri timalemba mapulogalamu ngati chida chosindikizira chokongola chomwe ndidalembera TLA+. Pambuyo pokonza kosavuta, code ya TLA + ingawoneke motere:

Kupanga mapulogalamu ndi zambiri kuposa kukopera

Koma mu chitsanzo pamwambapa, wogwiritsa ntchito nthawi zambiri ankafuna kuti cholumikizira ndi zizindikiro zofanana zigwirizane. Chifukwa chake masanjidwe olondola angawoneke motere:

Kupanga mapulogalamu ndi zambiri kuposa kukopera

Taganizirani za chitsanzo china:

Kupanga mapulogalamu ndi zambiri kuposa kukopera

Apa, m'malo mwake, kuyanjanitsa kwa zizindikiro zofanana, kuwonjezera ndi kuchulukitsa mu gwero kunali kwachisawawa, kotero kuti kukonza kosavuta ndikokwanira. Mwambiri, palibe tanthauzo lenileni la masamu la masanjidwe olondola, chifukwa "cholondola" pankhaniyi amatanthauza "zomwe wogwiritsa ntchito akufuna," ndipo izi sizingadziwike mwamasamu.

Zingawoneke kuti ngati tilibe tanthauzo la chowonadi, ndiye kuti tanthauzo lake ndi lopanda ntchito. Koma si zoona. Chifukwa chakuti sitidziwa zomwe pulogalamu iyenera kuchita sizikutanthauza kuti sitiyenera kulingalira za momwe iyenera kugwirira ntchito - m'malo mwake, tiyenera kuyesetsa kwambiri. Kufotokozera ndikofunika kwambiri apa. Ndikosatheka kudziwa pulogalamu yoyenera yosindikizira mwadongosolo, koma izi sizitanthauza kuti sitiyenera kuichita konse, ndipo kulemba ma code ngati chidziwitso sichili choncho. Ndinamaliza kulemba ndondomeko ya malamulo asanu ndi limodzi ndi matanthauzo mu mawonekedwe a ndemanga mu fayilo ya Java. Nachi chitsanzo cha imodzi mwamalamulo: a left-comment token is LeftComment aligned with its covering token. Lamuloli lalembedwa mu, tinene, masamu English: LeftComment aligned, left-comment ΠΈ covering token - mawu ndi matanthauzo. Umu ndi momwe akatswiri a masamu amafotokozera masamu: amalemba matanthauzo a mawu ndipo, potengera iwo, amapanga malamulo. Ubwino wa izi ndikuti malamulo asanu ndi limodzi ndiosavuta kumvetsetsa ndikuwongolera kuposa mizere ya 850. Ndiyenera kunena kuti kulemba malamulowa sikunali kophweka; zinatenga nthawi yochuluka kuti zithetsedwe. Ndinalemba kachidindo kwa cholinga ichi chomwe chinandiuza lamulo lomwe likugwiritsidwa ntchito. Chifukwa ndinayesa malamulo asanu ndi limodzi awa ndi zitsanzo zochepa, sindinayenera kusokoneza mizere 850 ya code, ndipo nsikidzi zinali zosavuta kupeza. Java ili ndi zida zazikulu za izi. Ndikadangolemba kachidindoko, zikadanditengera nthawi yayitali ndipo masanjidwe ake akadakhala osawoneka bwino.

Chifukwa chiyani sichinagwiritsidwe ntchito? Kumbali imodzi, kuphedwa kolondola sikofunikira kwambiri pano. Zosindikiza zokonzedwa bwino sizikhala zokhutiritsa kwa ena, kotero sindinkafunikira kuzipangitsa kuti zizigwira ntchito moyenera munthawi zonse zachilendo. Chofunika kwambiri ndi chakuti ndinalibe zida zokwanira. TLA + model checker alibe ntchito apa, kotero ine ndiyenera kulemba zitsanzo ndi dzanja.

Mafotokozedwe operekedwa ali ndi mawonekedwe ofanana ndi mafotokozedwe onse. Ndipamwamba kwambiri kuposa code. Itha kukhazikitsidwa m'chinenero chilichonse. Palibe zida kapena njira zolembera. Palibe maphunziro omwe angakuthandizeni kulemba izi. Ndipo palibe zida zomwe zingapangitse kuti izi zikhale zosafunikira, pokhapokha ngati mukulemba chilankhulo cholembera mapulogalamu osindikizira mu TLA+. Pomaliza, izi sizikunena chilichonse chokhudza momwe tingalembe ndendende, zimangonena zomwe codeyo imachita. Timalemba mfundo kuti zitithandize kulingalira vutolo tisanayambe kuganizira za code.

Koma tsatanetsataneyu alinso ndi zinthu zomwe zimasiyanitsa ndi zina. 95% yazinthu zina ndizofupikitsa komanso zosavuta:

Kupanga mapulogalamu ndi zambiri kuposa kukopera

Komanso, izi ndi ndondomeko ya malamulo. Izi nthawi zambiri zimakhala chizindikiro cha kusalongosola bwino. Kumvetsetsa zotsatira za malamulo angapo ndikovuta, chifukwa chake ndimayenera kuthera nthawi yambiri ndikuwongolera. Komabe, mu nkhani iyi sindinapeze njira yabwinoko.

Ndikoyenera kunena mawu ochepa okhudza mapulogalamu omwe amayenda mosalekeza. Nthawi zambiri amagwira ntchito limodzi, monga machitidwe opangira kapena makina ogawa. Ndi anthu ochepa chabe amene angamvetse m’maganizo mwawo kapena papepala, ndipo sindine mmodzi wa iwo, ngakhale kuti poyamba ndinali wokhoza. Choncho, tifunika zida zomwe zidzayang'ane ntchito yathu - mwachitsanzo, TLA + kapena PlusCal.

Kodi ndichifukwa chiyani ndidafunikira kulemba mwatsatanetsatane ngati ndimadziwa kale zoyenera kuchita? Ndipotu, ndinkangoganiza kuti ndikudziwa. Kuonjezera apo, ndi ndondomeko yomwe ilipo, munthu wakunja safunikiranso kuyang'ana mu code kuti amvetse zomwe zimachita. Ndili ndi lamulo: pasakhale malamulo onse. Pali zosiyana ndi lamuloli, ili ndilo lamulo lokhalo lomwe ndimatsatira: ndondomeko ya zomwe code imachita iyenera kuuza anthu zonse zomwe akuyenera kudziwa akamagwiritsa ntchito codeyo.

Ndiye ndi chiyani kwenikweni omwe opanga mapulogalamu amayenera kudziwa pankhani yoganiza? Poyamba, mofanana ndi aliyense: ngati simulemba, ndiye kuti zimangowoneka kwa inu kuti mukuganiza. Komanso, muyenera kuganiza musanalembe, zomwe zikutanthauza kuti muyenera kulemba musanalembe. Mwatsatanetsatane ndi zomwe timalemba tisanayambe kukopera. Kufotokozera kumafunika pa code iliyonse yomwe ingagwiritsidwe ntchito kapena kusinthidwa ndi aliyense. Ndipo β€œwinawake” ameneyu angakhale mlembi wa kachidindoko pakatha mwezi umodzi kuchokera pamene analembedwa. Kufotokozera kumafunika pamapulogalamu akuluakulu ndi machitidwe, makalasi, njira, ndipo nthawi zina ngakhale zigawo zovuta za njira imodzi. Kodi muyenera kulemba chiyani za code? Muyenera kufotokoza zomwe zimachita, ndiye kuti, chinthu chomwe chingakhale chothandiza kwa aliyense wogwiritsa ntchito code iyi. Nthawi zina pangakhalenso kofunika kufotokoza momwe ndondomekoyi imakwaniritsira cholinga chake. Ngati tadutsa njira iyi mu maphunziro a algorithms, ndiye kuti timayitcha kuti algorithm. Ngati ndi chinthu chapadera komanso chatsopano, ndiye kuti timachitcha kuti mapangidwe apamwamba. Palibe kusiyana kovomerezeka apa: zonsezo ndi zitsanzo za pulogalamuyo.

Kodi muyenera kulemba bwanji ma code? Chinthu chachikulu: chiyenera kukhala mlingo umodzi wapamwamba kuposa code yokha. Iyenera kufotokoza maiko ndi machitidwe. Iyenera kukhala yokhwima monga momwe ntchitoyo ikufunira. Ngati mukulemba mwatsatanetsatane momwe mungagwiritsire ntchito ntchito, ndiye kuti ikhoza kulembedwa mu pseudocode kapena kugwiritsa ntchito PlusCal. Muyenera kuphunzira kulemba tsatanetsatane pogwiritsa ntchito zovomerezeka. Izi zidzakupatsani maluso ofunikira omwe angathandizenso ndi osakhazikika. Kodi mungaphunzire bwanji kulemba zovomerezeka? Titaphunzira kupanga pulogalamu, tinkalemba mapulogalamu ndiyeno timawachotsa. Chinthu chomwecho apa: muyenera kulemba ndondomeko, yang'anani ndi chowunikira chitsanzo, ndikukonza zolakwikazo. TLA+ mwina sichingakhale chilankhulo chabwino kwambiri pamatchulidwe ake, ndipo chilankhulo china chingakhale chogwirizana ndi zosowa zanu. Chinthu chachikulu chokhudza TLA + ndikuti imagwira ntchito yabwino yophunzitsa masamu.

Momwe mungalumikizire mafotokozedwe ndi ma code? Kugwiritsa ntchito ndemanga zomwe zimagwirizanitsa malingaliro a masamu ndi kukhazikitsidwa kwawo. Ngati mumagwira ntchito ndi ma graph, ndiye kuti pamlingo wa pulogalamuyo mudzakhala ndi ma node angapo ndi maulalo. Chifukwa chake muyenera kulemba momwe graph imagwiritsidwira ntchito ndi mapangidwe awa.

Tiyenera kuzindikira kuti palibe chomwe chili pamwambachi chikugwira ntchito polemba code yokha. Mukalemba kachidindo, ndiye kuti, chitani gawo lachitatu, muyeneranso kuganiza ndi kulingalira pulogalamuyo. Ngati ntchito yaing'ono ikuwoneka kuti ndi yovuta kapena yosadziwika bwino, muyenera kulemba ndondomeko yake. Koma sindikunena za code yokha pano. Mutha kugwiritsa ntchito chilankhulo chilichonse chokonzekera, njira iliyonse, izi sizokhudza iwo. Komanso, palibe zomwe zili pamwambazi zomwe zimachotsa kufunikira koyesa ndikuwongolera code yanu. Ngakhale ngati chitsanzocho chinalembedwa molondola, pakhoza kukhala nsikidzi pakukhazikitsa kwake.

Zolemba zolemba ndi sitepe yowonjezera pakupanga zolemba. Chifukwa cha izo, zolakwika zambiri zitha kugwidwa ndi khama lochepa - tikudziwa izi kuchokera ku zomwe zidachitika ndi opanga mapulogalamu ochokera ku Amazon. Ndi mawonekedwe, mtundu wa mapulogalamu umakhala wapamwamba. Ndiye n'chifukwa chiyani nthawi zambiri timapita popanda iwo? Chifukwa kulemba nkovuta. Koma kulemba ndi kovuta, chifukwa pa izi muyenera kuganiza, ndipo kuganiza kumakhalanso kovuta. Nthawi zonse kumakhala kosavuta kunamizira kuti mukuganiza. Apa mutha kujambula fanizo ndikuthamanga - mukangothamanga pang'ono, ndikuthamanga pang'onopang'ono. Muyenera kuphunzitsa minofu yanu ndikuchita kulemba. Zimatengera kuchita.

Kufotokozera kungakhale kolakwika. Mwinamwake munalakwitsa kwinakwake, kapena zofunikirazo zasintha, kapena kusintha kungafunikire kupangidwa. Khodi iliyonse yomwe aliyense amagwiritsa ntchito iyenera kusinthidwa, ndiye kuti posachedwa sizigwirizana ndi pulogalamuyo. Momwemo, mu nkhani iyi, muyenera kulemba ndondomeko yatsopano ndikulembanso code yonse. Tikudziwa bwino lomwe kuti palibe amene amachita izi. M'malo mwake, timayika ma code ndipo mwina timasintha zomwe tafotokozazi. Ngati izi zikuyenera kuchitika posachedwa, ndiye bwanji mulembe zofotokozera? Choyamba, kwa munthu amene angasinthire nambala yanu, mawu aliwonse owonjezera mumndandandawo adzakhala oyenera kulemera kwake kwagolide, ndipo munthu uyu akhoza kukhala inu. Nthawi zambiri ndimadzikankhira ndekha chifukwa chosanena zachindunji ndikakonza khodi yanga. Ndipo ndimalemba zambiri kuposa ma code. Chifukwa chake, mukasintha ma code, zomwe zimafunikira nthawi zonse ziyenera kusinthidwa. Kachiwiri, ndikusintha kulikonse khodiyo imakulirakulira, zimakhala zovuta kuwerenga ndikusunga. Uku ndikuwonjezeka kwa entropy. Koma ngati simuyamba ndi ndondomeko, ndiye kuti mzere uliwonse womwe mungalembe udzakhala wokonzedwa, ndipo code idzakhala yochuluka komanso yovuta kuwerenga kuyambira pachiyambi.

Monga ananenera Eisenhower, palibe nkhondo imene inapambanidwa molingana ndi dongosolo, ndipo palibe nkhondo imene inapambanidwa popanda dongosolo. Ndipo ankadziwa chinachake chokhudza nkhondo. Pali lingaliro loti kulemba zolemba ndikungotaya nthawi. Nthawi zina izi ndi zoona, ndipo ntchitoyo ndi yophweka moti palibe chifukwa choiganizira. Koma muyenera kukumbukira nthawi zonse kuti mukalangizidwa kuti musalembe zofunikira, zikutanthauza kuti mukulangizidwa kuti musaganize. Ndipo muyenera kuganizira izi nthawi zonse. Kuganizira bwino ntchito sikutanthauza kuti simudzalakwitsa. Monga tikudziwira, palibe amene adapanga matsenga amatsenga, ndipo kupanga mapulogalamu ndi ntchito yovuta. Koma ngati simuganizira zonse, ndiye kuti mudzalakwitsa.

Mutha kuwerenga zambiri za TLA + ndi PlusCal patsamba lapadera, mutha kupita kumeneko kuchokera patsamba langa kugwirizana. Ndizo zonse za ine, zikomo chifukwa cha chidwi chanu.

Chonde kumbukirani kuti uku ndi kumasulira. Mukalemba ndemanga, kumbukirani kuti wolembayo sangawerenge. Ngati mukufunadi kukambirana ndi wolembayo, adzakhala pa msonkhano wa Hydra 2019, womwe udzachitike pa July 11-12, 2019 ku St. Matikiti angagulidwe patsamba lovomerezeka.

Source: www.habr.com

Kuwonjezera ndemanga