Shirye-shiryen ya fi codeing

Shirye-shiryen ya fi codeing

Wannan labarin fassara ne Stanford Seminar. Amma kafin nan akwai gajeriyar gabatarwa. Ta yaya ake samar da aljanu? Kowa ya sami kansa a cikin wani yanayi da yake son kawo aboki ko abokin aiki har zuwa matakinsa, amma hakan bai yi nasara ba. Bugu da ƙari, "ba ya aiki" ba a gare ku ba, amma a gare shi: a gefe ɗaya na ma'auni akwai albashi na al'ada, ayyuka, da sauransu, kuma a daya shine buƙatar tunani. Tunani ba shi da daɗi kuma yana da zafi. Da sauri ya hakura ya ci gaba da rubuta code ba tare da ya yi amfani da kwakwalwar sa kwata-kwata ba. Kuna gane irin ƙoƙarin da ake ɗauka don shawo kan shingen rashin taimako da aka koya, kuma kawai ba ku yi ba. Wannan shi ne yadda ake samar da aljanu, wanda da alama zai yiwu a warke, amma da alama ba wanda zai yi haka.

Lokacin da na ga haka Leslie Lamport (eh, wannan aboki daga littattafan karatu) ya zo Rasha kuma ba bayar da rahoto ba, amma zaman tambaya da amsa, na dan yi taka tsantsan. Kamar dai, Leslie sanannen masanin kimiyya ne a duniya, marubucin ayyukan seminal a cikin rarraba kwamfuta, kuma kuna iya saninsa ta haruffa La a cikin LaTeX - "Lamport TeX". Abu na biyu mai ban tsoro shi ne abin da ake bukata: duk wanda ya zo (ba tare da kyauta ba) dole ne ya saurari rahotonsa guda biyu a gaba, ya zo da akalla tambaya daya a kansu, sannan sai ya zo. Na yanke shawarar ganin abin da Lamport ke watsawa a can - kuma yana da kyau! Wannan shi ne ainihin abin, maganin sihirin haɗin gwiwa don magance aljanu. Ina gargaɗe ku: rubutun na iya ƙonewa da gaske waɗanda ke son manyan hanyoyin dabaru kuma waɗanda ba sa son gwada abin da suka rubuta.

Bayan habrokat, an fara fassarar taron karawa juna sani. Ji daɗin karatu!

Duk wani aiki da kuka ɗauka, koyaushe kuna buƙatar bi ta matakai uku:

  • yanke shawarar wane burin da kuke son cimma;
  • yanke shawarar yadda za ku cimma burin ku daidai;
  • kai burinka.

Wannan kuma ya shafi shirye-shirye. Lokacin da muka rubuta code, muna buƙatar:

  • yanke shawarar abin da ainihin shirin ya kamata ya yi;
  • ƙayyade ainihin yadda ya kamata ya gudanar da aikinsa;
  • rubuta lambar da ta dace.

Mataki na ƙarshe, ba shakka, yana da mahimmanci, amma ba zan yi magana game da shi a yau ba. Maimakon haka, za mu tattauna biyun farko. Kowane programmer yana yin su kafin ya fara aiki. Ba za ku zauna don rubutawa ba sai dai idan kun yanke shawarar abin da kuke rubutawa: mashigar bincike ko bayanai. Dole ne wani ra'ayi na burin ya kasance. Kuma tabbas kuna tunanin abin da ainihin shirin zai yi, kuma kada ku rubuta shi cikin haɗari da fatan cewa lambar kanta za ta ko ta yaya ta zama mai bincike.

Yaya daidai wannan pre-tunanin lambar ke faruwa? Ko yaya ya kamata mu yi a cikin wannan? Duk ya dogara da yadda matsalar da muke warwarewa mai rikitarwa. Bari mu ce muna son rubuta tsarin rarraba mai jure rashin kuskure. A wannan yanayin, ya kamata mu yi la'akari da abubuwa da kyau kafin mu zauna zuwa code. Idan kawai muna buƙatar haɓaka madaidaicin lamba ta 1 fa? A kallo na farko, duk abin da ke nan ba shi da mahimmanci kuma ba a buƙatar tunani, amma sai mu tuna cewa ambaliya na iya faruwa. Sabili da haka, ko da don fahimtar ko matsala mai sauƙi ne ko rikitarwa, da farko kuna buƙatar tunani.

Idan kun yi tunanin hanyoyin magance matsala a gaba, za ku iya guje wa kuskure. Amma wannan yana buƙatar tunanin ku a sarari. Don cimma wannan, kuna buƙatar rubuta tunanin ku. Ina son zancen Dick Guindon: "Lokacin da kake rubutawa, yanayi yana nuna maka yadda tunaninka ya kasance marar hankali." Idan baka rubuta ba, tunanin kawai kake tunani. Kuma kuna buƙatar rubuta tunanin ku ta hanyar ƙayyadaddun bayanai.

Ƙayyadaddun bayanai suna aiki da ayyuka da yawa, musamman a cikin manyan ayyuka. Amma zan yi magana game da ɗaya daga cikinsu: suna taimaka mana muyi tunani a sarari. Tunani a sarari yana da mahimmanci kuma yana da wahala sosai, don haka muna buƙatar kowane taimako a nan. Wane harshe ya kamata mu rubuta takamaiman bayani a ciki? Gabaɗaya, koyaushe wannan ita ce tambaya ta farko ga masu shirye-shirye: wane harshe za mu rubuta? Babu amsa daidai: matsalolin da muke magance sun bambanta sosai. Ga wasu mutane, TLA+ yana da amfani - ƙayyadaddun harshe ne na haɓaka. Ga wasu, ya fi dacewa don amfani da Sinanci. Duk ya dogara da yanayin.

Tambaya mafi mahimmanci ita ce: ta yaya za mu iya cimma kyakkyawan tunani? Amsa: Dole ne mu yi tunani kamar masana kimiyya. Wannan wata hanya ce ta tunani da ta yi aiki sosai a cikin shekaru 500 da suka gabata. A cikin kimiyya muna gina ƙirar lissafi na gaskiya. Tauraron taurari watakila shine kimiyya ta farko a cikin tsananin ma'anar kalmar. A cikin tsarin lissafi da aka yi amfani da shi a ilimin taurari, jikunan sama suna bayyana a matsayin maki tare da taro, matsayi da kuzari, ko da yake a zahiri abubuwa ne masu sarƙaƙƙiya tare da tsaunuka da tekuna, ɓarke ​​​​da gudana. Wannan samfurin, kamar kowane, an ƙirƙira shi don magance wasu matsaloli. Yana da kyau don tantance inda za a nuna na'urar hangen nesa idan kuna son nemo duniya. Amma idan kana so ka hango yanayin yanayi a wannan duniyar, wannan samfurin ba zai yi aiki ba.

Lissafi yana ba mu damar ƙayyade kaddarorin samfurin. Kuma kimiyya ta nuna yadda waɗannan kaddarorin ke da alaƙa da gaskiya. Bari mu yi magana game da kimiyyar mu, kimiyyar kwamfuta. Gaskiyar da muke aiki da ita ita ce tsarin kwamfuta na kowane nau'i: na'urori masu sarrafawa, na'urorin wasan bidiyo, kwamfutoci masu gudanar da shirye-shirye, da sauransu. Zan yi magana game da aiwatar da shirin akan kwamfuta, amma, gabaɗaya, duk waɗannan shawarwarin sun shafi kowane tsarin kwamfuta. A cikin ilimin kimiyyar mu muna amfani da nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan) suna amfani da na'ura: injin Turing, jeri na abubuwan da aka ba da umarni da ƙari, da sauransu da yawa.

Menene shirin? Wannan ita ce kowace lamba da za a iya la'akari da ita da kanta. Bari mu ce muna buƙatar rubuta mai bincike. Muna yin ayyuka guda uku: tsara tsarin gabatarwar mai amfani, sa'an nan kuma rubuta zane mai girma na shirin, sannan a rubuta lambar. Yayin da muke rubuta lambar, mun gane cewa muna buƙatar rubuta tsarin rubutu. Anan kuma muna buƙatar magance matsaloli guda uku: ƙayyade abin da wannan kayan aikin zai dawo; zaɓi algorithm don tsarawa; rubuta code. Wannan aikin yana da nasa aikin nasa: saka sarƙaƙƙiya cikin kalmomi daidai. Muna kuma warware wannan ƙaramin aiki a matakai uku - kamar yadda muke gani, ana maimaita su a matakai da yawa.

Bari mu dubi mataki na farko: wace matsala shirin ya warware. Anan mu galibi muna tsara shirin a matsayin aikin da ke ɗaukar wasu bayanai kuma yana ba da wasu fitarwa. A cikin lissafi, yawanci ana kwatanta aiki azaman saitin nau'i-nau'i da aka ba da oda. Misali, aikin squaring na lambobi na halitta an kwatanta shi azaman saita {<0,0>, <1,1>, <2,4>, <3,9>, …}. Yankin ma'anar irin wannan aikin shine saitin abubuwan farko na kowane biyu, wato, lambobi na halitta. Don ayyana aiki, muna buƙatar ƙayyadadden yanki da tsarin sa.

Amma ayyuka a cikin ilimin lissafi ba ɗaya suke da ayyuka a cikin harsunan shirye-shirye ba. Lissafin ya fi sauƙi. Tun da ba ni da lokaci don misalai masu rikitarwa, bari mu yi la'akari da sauƙi: aiki a cikin C ko hanyar da ba ta dace ba a cikin Java wanda ke mayar da mafi girma na gama gari na lamba biyu. A cikin ƙayyadaddun wannan hanyar za mu rubuta: ƙididdiga GCD(M,N) don jayayya M и Ninda GCD(M,N) - aikin da yankinsa ya kasance saitin nau'i-nau'i na lamba, kuma ƙimar dawowa ita ce mafi girman lamba wanda aka raba ta M и N. Yaya gaskiyar kwatanta da wannan samfurin? Samfurin yana aiki da lamba, kuma a cikin C ko Java muna da 32-bit int. Wannan samfurin yana ba mu damar yanke shawara ko algorithm daidai ne GCD, amma ba zai hana kurakurai ambaliya ba. Wannan zai buƙaci samfurin da ya fi rikitarwa, wanda babu lokaci.

Bari muyi magana game da iyakokin aikin a matsayin samfuri. Wasu shirye-shirye (kamar tsarin aiki) ba kawai mayar da takamaiman ƙima don wasu gardama ba; suna iya ci gaba da gudana. Bugu da ƙari, aikin a matsayin samfuri bai dace da mataki na biyu ba: tsara yadda za a warware matsalar. Quicksort da nau'in kumfa suna lissafta aikin iri ɗaya, amma sun kasance mabambantan algorithms. Saboda haka, don bayyana hanyar da za a cimma burin shirin, na yi amfani da wani samfurin, bari mu kira shi daidaitaccen tsarin hali. Ana wakilta shirin a cikinsa a matsayin saiti na duk ingantattun halaye, kowannensu, bi da bi, jerin jihohi ne, kuma jiha ita ce keɓance ƙima ga masu canji.

Bari mu ga yadda mataki na biyu na Euclidean algorithm zai yi kama. Muna buƙatar yin lissafi GCD(M, N). Mun fara M yadda xda kuma N yadda y, sa'an nan kuma akai-akai cire ƙarami daga cikin mafi girma har sai sun kasance daidai. Misali, idan M = 12da kuma N = 18, za mu iya kwatanta hali mai zuwa:

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

Kuma idan M = 0 и N = 0? Za a iya raba sifili ta kowane lambobi, don haka babu babban mai rarrabawa a wannan yanayin. A wannan yanayin, muna buƙatar komawa zuwa mataki na farko kuma mu tambayi: shin da gaske muna buƙatar lissafin GCD don lambobin da ba su da kyau? Idan wannan bai zama dole ba, to kawai kuna buƙatar canza ƙayyadaddun bayanai.

A takaice digression kan yawan aiki yana cikin tsari anan. Sau da yawa ana auna shi cikin adadin layukan lambar da aka rubuta kowace rana. Amma aikinku yana da amfani sosai idan kun kawar da wasu adadin layukan, saboda kuna da ƙarancin daki don kwari. Kuma hanya mafi sauƙi don kawar da code shine a mataki na farko. Yana yiwuwa ba ku buƙatar duk kararrawa da busa da kuke ƙoƙarin aiwatarwa. Hanya mafi sauri don sauƙaƙe shirin da adana lokaci shine rashin yin abubuwan da bai kamata a yi ba. Mataki na biyu yana da na biyu mafi girman yuwuwar ceton lokaci. Idan kun auna yawan aiki cikin sharuddan layukan da aka rubuta, to tunanin yadda ake kammala aiki zai sa ku kasa mai amfani, saboda za ku iya magance wannan matsala tare da ƙananan code. Ba zan iya bayar da takamaiman kididdiga a nan ba, domin ba ni da hanyar da zan iya kirga adadin layukan da ban rubuta ba saboda lokacin da na kashe kan tantancewa, wato a mataki na farko da na biyu. Kuma ba za mu iya yin gwaji a nan ba, saboda a cikin gwaji ba mu da 'yancin kammala mataki na farko; an ƙayyade aikin a gaba.

Yana da sauƙi a manta da matsaloli da yawa cikin ƙayyadaddun bayanai na yau da kullun. Babu wani abu mai wahala game da rubuta takamaiman takamaiman ayyuka; Ba zan tattauna wannan ba. Madadin haka, za mu yi magana game da rubuta ƙaƙƙarfan ƙayyadaddun bayanai don daidaitattun halaye. Akwai ka'idar da ta nuna cewa kowane nau'i na ɗabi'a za a iya kwatanta shi ta amfani da kayan tsaro (aminci) da survivability Properties (rayuwa). Tsaro yana nufin cewa babu wani mummunan abu da zai faru, shirin ba zai ba da amsa mara kyau ba. Rayuwa yana nufin cewa ba dade ko ba dade wani abu mai kyau zai faru, watau shirin zai ba da amsa daidai. A matsayinka na mai mulki, tsaro shine mafi mahimmancin alama; kurakurai galibi suna faruwa a nan. Saboda haka, don adana lokaci, ba zan yi magana game da rayuwa ba, ko da yake shi, ba shakka, yana da mahimmanci.

Muna samun aminci ta farko da ƙayyadaddun jeri na yuwuwar jihohin farko. Na biyu kuma, dangantaka da dukkan jihohi masu zuwa na kowace jiha. Bari mu kasance kamar masana kimiyya kuma mu ayyana jihohi ta hanyar lissafi. An kwatanta saitin jihohin farko ta hanyar dabara, alal misali, a cikin yanayin Euclidean algorithm: (x = M) ∧ (y = N). Don wasu dabi'u M и N akwai yanayi na farko guda ɗaya kawai. An kwatanta dangantakar da ƙasa ta gaba ta hanyar dabarar da aka rubuta masu canji na jihar na gaba tare da firam, kuma ana rubuta masu canji na halin yanzu ba tare da na farko ba. A cikin yanayin Euclidean algorithm, za mu yi magana da rarrabuwar ka'idoji guda biyu, a cikin ɗayan ɗayan. x shine mafi girman darajar, kuma a cikin na biyu - y:

Shirye-shiryen ya fi codeing

A cikin yanayin farko, sabon ƙimar y daidai yake da ƙimar da ta gabata ta y, kuma muna samun sabon ƙimar x ta hanyar cire ƙaramin maɗaukaki daga babba. A cikin akwati na biyu, muna yin akasin haka.

Bari mu koma ga Euclidean algorithm. Ace kuma cewa M = 12, N = 18. Wannan yana bayyana yanayin farko guda ɗaya, (x = 12) ∧ (y = 18). Sai mu shigar da waɗannan dabi'u cikin dabarar da ke sama kuma mu sami:

Shirye-shiryen ya fi codeing

Ga mafita ɗaya tilo: x' = 18 - 12 ∧ y' = 12, kuma muna samun halayen: [x = 12, y = 18]. Hakazalika, zamu iya siffanta duk jihohi a cikin halayenmu: [x = 12, y = 18] → [x = 12, y = 6] → [x = 6, y = 6].

A jihar ta karshe [x = 6, y = 6] sassan biyu na magana za su zama karya, don haka ba ta da wata jiha ta gaba. Don haka, muna da cikakken bayani game da mataki na biyu - kamar yadda muke gani, wannan ilimin lissafi ne na yau da kullun, kamar na injiniyoyi da masana kimiyya, kuma ba baƙon abu ba ne, kamar kimiyyar kwamfuta.

Ana iya haɗa waɗannan dabaru guda biyu zuwa tsari ɗaya na dabaru na ɗan lokaci. Yana da kyau kuma mai sauƙin bayyanawa, amma babu lokaci don shi yanzu. Wataƙila muna buƙatar dabaru na ɗan lokaci kawai don kadarorin rayuwa; don tsaro ba a buƙata. Ba na son tunani na ɗan lokaci kamar haka, ba ilimin lissafi ba ne na yau da kullun, amma a cikin yanayin rayuwa yana da mugunyar dole.

A cikin Euclidean algorithm ga kowane darajar x и y akwai dabi'u na musamman x' и y', wanda ke sa dangantakar da jihar ta gaba ta zama gaskiya. A wasu kalmomi, Euclidean algorithm shine ƙaddara. Don yin ƙirƙira wani algorithm mara ƙayyadaddun ƙayyadaddun bayanai, halin yanzu dole ne ya sami jihohi masu yuwuwa da yawa a nan gaba, kuma kowane ƙimar madaidaicin madaidaicin dole ne ya sami ƙima mai yawa na madaidaicin madaidaicin kamar dangantakar da jihar ta gaba gaskiya ce. Wannan ba shi da wahala a yi, amma ba zan ba da misalai a yanzu ba.

Don yin kayan aiki mai aiki, kuna buƙatar lissafi na yau da kullun. Yadda ake yin ƙayyadaddun ƙa'ida? Don yin wannan za mu buƙaci harshe na yau da kullun, misali. TLA+. Ƙayyadaddun Euclidean algorithm a cikin wannan harshe zai yi kama da haka:

Shirye-shiryen ya fi codeing

Madaidaicin alamar alamar tare da alwatika yana nufin cewa ƙimar hagu na alamar an ƙaddara ta zama daidai da ƙimar daman alamar. A haƙiƙa, ƙayyadaddun ƙayyadaddun bayanai shine ma'ana, a cikin yanayinmu ma'anoni biyu. Zuwa ƙayyadaddun ƙayyadaddun bayanai a cikin TLA+ kuna buƙatar ƙara sanarwa da wasu ƙa'idodi, kamar a cikin nunin faifan sama. A cikin ASCII zai yi kama da haka:

Shirye-shiryen ya fi codeing

Kamar yadda kake gani, babu wani abu mai rikitarwa. Ana iya tabbatar da ƙayyadaddun ƙayyadaddun bayanai akan TLA +, watau, yana yiwuwa a ketare duk wani ɗabi'a mai yuwuwa a cikin ƙaramin ƙira. A cikin yanayinmu, wannan samfurin zai zama wasu dabi'u M и N. Wannan hanya ce mai inganci kuma mai sauƙi wacce ke gaba ɗaya ta atomatik. Bugu da ƙari, yana yiwuwa a rubuta hujjoji na gaskiya da kuma duba su ta hanyar injiniya, amma wannan yana ɗaukar lokaci mai yawa, don haka kusan babu wanda ke yin haka.

Babban hasara na TLA+ shine ilimin lissafi, kuma masu shirye-shirye da masana kimiyyar kwamfuta suna tsoron ilimin lissafi. Da farko kallo wannan yana kama da wasa, amma, da rashin alheri, na faɗi wannan a cikin komai. Wani abokin aikina yana gaya mani yadda ya yi ƙoƙarin bayyana TLA+ ga masu haɓakawa da yawa. Nan da nan da dabara suka bayyana akan allon, nan da nan idanunsu suka zama gilashi. Don haka idan TLA+ yana da ban tsoro, zaku iya amfani PlusCal, wani nau'i ne na yaren shirye-shiryen wasan wasan yara. Magana a cikin PlusCal na iya zama kowace magana ta TLA+, wato, duk wani furci na lissafi. Bugu da ƙari, PlusCal yana da syntax don algorithms marasa ƙima. Saboda PlusCal na iya rubuta kowane magana TLA+, yana da mahimmancin bayyanawa fiye da kowane yaren shirye-shirye na gaske. Na gaba, PlusCal an haɗa shi cikin ƙayyadaddun TLA+ mai sauƙin karantawa. Wannan ba yana nufin, ba shakka, cewa hadaddun ƙayyadaddun PlusCal zai zama mai sauƙi akan TLA + - kawai cewa wasiƙun da ke tsakanin su a bayyane yake, babu ƙarin rikitarwa da zai bayyana. A ƙarshe, ana iya tabbatar da wannan ƙayyadaddun ta amfani da kayan aikin TLA+. Gabaɗaya, PlusCal na iya taimakawa wajen shawo kan phobia na lissafi; yana da sauƙin fahimta har ma ga masu shirye-shirye da masana kimiyyar kwamfuta. Na buga algorithms akan sa na ɗan lokaci (kimanin shekaru 10) a baya.

Wataƙila wani zai ƙi cewa TLA+ da PlusCal lissafi ne, kuma lissafi yana aiki ne da misalan ƙira. A aikace, kuna buƙatar ainihin harshe tare da nau'ikan, hanyoyin, abubuwa, da sauransu. Wannan ba daidai ba ne. Ga abin da Chris Newcomb, wanda ya yi aiki a Amazon, ya rubuta: "Mun yi amfani da TLA+ akan manyan ayyuka guda goma, kuma a kowane hali amfani da shi ya haifar da gagarumin bambanci ga ci gaba saboda mun sami damar kama kwari masu haɗari kafin su fara samar da kayayyaki, kuma saboda ya ba mu basira da amincewa da muke bukata don yin m. inganta aikin ba tare da rinjayar gaskiyar shirin ba". Sau da yawa za ku ji cewa lokacin amfani da hanyoyin yau da kullun muna samun lambar da ba ta da inganci - a aikace, komai daidai yake. Bugu da kari, akwai hasashe cewa manajoji ba za su iya gamsuwa da buƙatar hanyoyin da aka saba ba, koda kuwa masu shirye-shiryen sun gamsu da amfaninsu. Kuma Newcomb ya rubuta: "Manjoji yanzu suna turawa ta kowace hanya mai yuwu don rubuta takamaiman bayanai a cikin TLA +, kuma suna ba da lokaci na musamman don wannan.". Don haka lokacin da manajoji suka ga cewa TLA+ yana aiki, sun rungumi shi. Chris Newcomb ya rubuta wannan kimanin watanni shida da suka wuce (Oktoba 2014), amma yanzu, kamar yadda na sani, ana amfani da TLA + a cikin ayyukan 14, ba 10 ba. Wani misali kuma ya shafi zane na XBox 360. Wani mai horo ya zo wurin Charles Thacker kuma ya rubuta ƙayyadaddun bayanai don tsarin ƙwaƙwalwar ajiya. Godiya ga wannan ƙayyadaddun bayanai, an gano wani kwaro wanda da ba a gano shi ba kuma zai sa kowane XBox 360 ya faɗi bayan sa'o'i huɗu na amfani. Injiniyoyi daga IBM sun tabbatar da cewa gwajin nasu ba zai iya gano wannan kwaro ba.

Kuna iya karanta ƙarin game da TLA+ akan Intanet, amma yanzu bari muyi magana game da ƙayyadaddun bayanai na yau da kullun. Da wuya mu rubuta shirye-shiryen da ke ƙididdige mafi ƙarancin rabawa da makamantansu. Mafi sau da yawa muna rubuta shirye-shirye kamar kyawawan kayan aikin firinta da na rubuta don TLA+. Bayan aiki mafi sauƙi, lambar TLA+ zata yi kama da haka:

Shirye-shiryen ya fi codeing

Amma a cikin misalin da ke sama, mai yiwuwa mai amfani yana son haɗin haɗin gwiwa da daidaitattun alamomi su daidaita. Don haka daidaitaccen tsari zai yi kama da haka:

Shirye-shiryen ya fi codeing

Yi la’akari da wani misali:

Shirye-shiryen ya fi codeing

Anan, akasin haka, daidaita alamun daidaitattun, ƙari da ninkawa a cikin tushen ya kasance bazuwar, don haka aiki mafi sauƙi ya isa sosai. Gabaɗaya, babu ainihin ma'anar lissafin lissafin daidaitaccen tsari, saboda "daidai" a wannan yanayin yana nufin "abin da mai amfani yake so," kuma ba za a iya ƙayyade wannan ta hanyar lissafi ba.

Da alama idan ba mu da ma'anar gaskiya, to ƙayyadaddun ba shi da amfani. Amma wannan ba gaskiya ba ne. Domin ba mu san abin da ya kamata shirin ya yi ba yana nufin ba ma bukatar mu yi tunanin yadda zai yi aiki ba—akasin haka, ya kamata mu ƙara ƙoƙarta a kansa. Bayanin yana da mahimmanci musamman a nan. Ba shi yiwuwa a ƙayyade mafi kyawun shirin don tsararrun bugu, amma wannan ba yana nufin cewa bai kamata mu yi shi ba kwata-kwata, kuma rubuta lambar a matsayin rafi na sani ba haka bane. Na ƙare rubuta ƙayyadaddun dokoki guda shida tare da ma'anoni ta hanyar sharhi a cikin fayil ɗin Java. Ga misalin ɗaya daga cikin ƙa'idodin: a left-comment token is LeftComment aligned with its covering token. An rubuta wannan doka a cikin, bari mu ce, Ingilishi na lissafi: LeftComment aligned, left-comment и covering token - sharuddan da ma'anar. Wannan shine yadda masu lissafin lissafi ke bayyana lissafi: suna rubuta ma'anar kalmomi kuma, bisa su, suna ƙirƙirar dokoki. Amfanin wannan ƙayyadaddun shine cewa dokoki shida sun fi sauƙin fahimta da kuma cire su fiye da layukan lamba 850. Dole ne in ce rubuta waɗannan dokoki ba su da sauƙi; ya ɗauki lokaci mai yawa don gyara su. Na rubuta lamba musamman don wannan dalili wanda ya gaya mani wace doka ake amfani da ita. Domin na gwada waɗannan ka'idoji guda shida tare da ƴan misalai, ba sai na yi gyara layukan lamba 850 ba, kuma kurakuran sun kasance masu sauƙin samu. Java yana da manyan kayan aiki don wannan. Idan da na rubuta lambar, da zai ɗauki ni lokaci mai tsawo kuma tsarin ya kasance mafi ƙarancin inganci.

Me ya sa ba za a iya amfani da takamaiman bayani ba? A gefe guda, aiwatar da daidaitaccen kisa ba shi da mahimmanci a nan. Buga da aka tsara ba lallai ba ne ya zama mai gamsarwa ga wasu, don haka ba sai na sa shi ya yi aiki daidai ba a kowane yanayi da ba a saba gani ba. Abu mafi mahimmanci shine gaskiyar cewa ba ni da isassun kayan aiki. Mai duba ƙirar TLA+ ba shi da amfani a nan, don haka dole in rubuta misalan da hannu.

Ƙididdigar da aka bayar yana da fasali gama-gari ga duk ƙayyadaddun bayanai. Yana da girma fiye da lamba. Ana iya aiwatar da shi a kowane harshe. Babu kayan aiki ko hanyoyin rubuta shi. Babu wani kwas na shirye-shirye da zai taimake ka ka rubuta wannan ƙayyadaddun bayanai. Kuma babu kayan aikin da za su iya sa wannan ƙayyadaddun ba dole ba ne, sai dai idan ba shakka kuna rubuta harshe musamman don rubuta tsararrun shirye-shiryen bugu a cikin TLA+. A ƙarshe, wannan ƙayyadaddun bayanai bai ce komai ba game da yadda za mu rubuta lambar, kawai ya faɗi abin da lambar ke yi. Mun rubuta ƙayyadaddun bayanai don taimaka mana yin tunani ta hanyar matsalar kafin mu fara tunanin lambar.

Amma wannan ƙayyadaddun kuma yana da siffofi waɗanda ke bambanta shi da sauran ƙayyadaddun bayanai. 95% na sauran ƙayyadaddun bayanai sun fi guntu kuma sun fi sauƙi:

Shirye-shiryen ya fi codeing

Bugu da ari, wannan ƙayyadaddun ƙayyadaddun ƙa'idodi ne. Wannan yawanci alama ce ta ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun bayanai. Fahimtar sakamakon saitin dokoki yana da wuyar gaske, wanda shine dalilin da ya sa na dau lokaci mai yawa don gyara su. Duk da haka, a wannan yanayin ban sami wata hanya mafi kyau ba.

Yana da kyau a faɗi ƴan kalmomi game da shirye-shiryen da ke ci gaba da gudana. Yawanci suna aiki a layi daya, kamar tsarin aiki ko tsarin rarrabawa. Mutane kalilan ne ke iya fahimtar su a cikin tunaninsu ko a kan takarda, kuma ni ba ɗaya daga cikinsu ba ne, duk da cewa na taɓa yin hakan. Don haka, muna buƙatar kayan aikin da za su duba aikinmu - misali, TLA+ ko PlusCal.

Me yasa na buƙaci rubuta takamaiman bayani idan na riga na san abin da lambar ya kamata ta yi? A gaskiya, na yi tunani kawai na sani. Bugu da ƙari, tare da ƙayyadaddun ƙayyadaddun wuri, wani baƙon baya buƙatar sake duba lambar don fahimtar ainihin abin da yake yi. Ina da ka'ida: kada a kasance da ƙa'idodi na gaba ɗaya. Akwai keɓanta ga wannan ƙa'idar ba shakka, wannan ita ce kawai ƙa'idar gama gari da nake bi: ƙayyadaddun abin da lambar ya kamata ya gaya wa mutane duk abin da suke buƙatar sani yayin amfani da wannan lambar.

Don haka menene ainihin masu shirye-shirye suke buƙatar sani game da tunani? Da farko, daidai yake da kowa: idan ba ku rubuta ba, to yana ganin ku kawai kuna tunani. Har ila yau, kana buƙatar yin tunani kafin kayi code, wanda ke nufin kana buƙatar rubutawa kafin kayi code. Takaddamawa shine abin da muke rubutawa kafin mu fara coding. Ana buƙatar ƙayyadaddun bayanai don kowane lambar da kowa zai iya amfani da shi ko canza shi. Kuma wannan "wani" na iya zama marubucin lambar wata daya bayan an rubuta shi. Ana buƙatar ƙayyadaddun ƙayyadaddun bayanai don manyan shirye-shirye da tsarin, don azuzuwan, don hanyoyin, kuma wani lokacin har ma da sassan sassa na hanya ɗaya. Me ya kamata ka rubuta game da lambar? Kuna buƙatar bayyana abin da yake yi, wato, wani abu da zai iya zama mai amfani ga duk wanda ke amfani da wannan lambar. Wani lokaci kuma yana iya zama dole don tantance yadda ainihin lambar ta cimma burinta. Idan muka bi ta wannan hanyar a cikin kwas ɗin algorithms, to muna kiran shi algorithm. Idan wani abu ne na musamman da kuma sabon abu, to muna kiran shi babban matakin ƙira. Babu wani bambanci na yau da kullun a nan: duka biyun sifofi ne na shirin.

Yaya daidai ya kamata ku rubuta takamaiman lambar? Babban abu: ya kamata ya zama matakin ɗaya mafi girma fiye da lambar kanta. Dole ne ya bayyana jihohi da halaye. Ya kamata ya kasance mai tsauri kamar yadda aikin ke buƙata. Idan kana rubuta ƙayyadaddun yadda ake aiwatar da ɗawainiya, to ana iya rubuta shi a cikin pseudocode ko ta amfani da PlusCal. Kuna buƙatar koyon rubuta ƙayyadaddun bayanai ta amfani da ƙayyadaddun ƙa'idodi. Wannan zai ba ku ƙwarewar da ake buƙata waɗanda kuma za su taimaka da na yau da kullun. Ta yaya za ku koyi rubuta ƙayyadaddun bayanai? Lokacin da muka koyi shirye-shirye, mun rubuta shirye-shirye sannan mu cire su. Abu ɗaya anan: kuna buƙatar rubuta ƙayyadaddun ƙayyadaddun bayanai, duba shi tare da mai duba samfuri, da gyara kurakurai. TLA+ bazai zama mafi kyawun yare don ƙayyadaddun ƙayyadaddun tsari ba, kuma wani yare zai fi dacewa da takamaiman bukatunku. Babban abu game da TLA+ shine yana yin babban aiki na koyar da tunanin lissafi.

Yadda za a haɗa ƙayyadaddun bayanai da code? Yin amfani da maganganun da ke danganta dabarun lissafi da aiwatar da su. Idan kuna aiki tare da jadawalai, to a matakin shirin zaku sami ɗimbin nodes da tsararrun hanyoyin haɗin gwiwa. Don haka kuna buƙatar rubuta yadda ake aiwatar da jadawali daidai ta waɗannan tsarin shirye-shiryen.

Ya kamata a lura cewa babu ɗaya daga cikin abubuwan da ke sama da ya shafi tsarin rubuta lambar kanta. Lokacin da ka rubuta code, wato, yin mataki na uku, kana buƙatar yin tunani da tunani cikin shirin. Idan aikin ƙaramin aiki ya zama mai rikitarwa ko bai bayyana ba, kuna buƙatar rubuta takamaiman bayani game da shi. Amma ba ina magana game da code kanta a nan ba. Kuna iya amfani da kowane yaren shirye-shirye, kowace hanya, wannan ba game da su bane. Har ila yau, babu ɗayan abubuwan da ke sama da ke kawar da buƙatar gwadawa da gyara lambar ku. Ko da an rubuta samfurin abstract daidai, ana iya samun kurakurai a cikin aiwatar da shi.

Rubutun ƙayyadaddun bayanai wani ƙarin mataki ne a cikin aiwatar da coding. Godiya ga shi, ana iya kama kurakurai da yawa tare da ƙarancin ƙoƙari - mun san wannan daga ƙwarewar masu shirye-shirye daga Amazon. Tare da ƙayyadaddun bayanai, ingancin shirye-shiryen ya zama mafi girma. To, me ya sa muke yawan tafiya ba tare da su ba? Domin rubutu yana da wahala. Amma rubutu yana da wuyar gaske, saboda saboda wannan kuna buƙatar tunani, kuma tunanin yana da wahala. Koyaushe yana da sauƙi a yi kamar kuna tunani. Anan zaku iya zana kwatanci tare da gudu - ƙarancin gudu, gwargwadon gudu. Kuna buƙatar horar da tsokoki kuma ku gwada rubutu. Yana daukan aiki.

Ƙayyadaddun bayanai na iya zama kuskure. Wataƙila kun yi kuskure a wani wuri, ko abubuwan da ake buƙata sun canza, ko ana buƙatar haɓakawa. Duk wani lambar da kowa ke amfani da shi dole ne a canza shi, don haka ba dade ko ba dade ƙayyadaddun bayanan ba za su ƙara dacewa da shirin ba. Da kyau, a cikin wannan yanayin, kuna buƙatar rubuta sabon ƙayyadaddun bayanai kuma ku sake rubuta lambar gaba ɗaya. Mun sani sarai cewa babu mai yin wannan. A aikace, muna faci lambar kuma wataƙila sabunta ƙayyadaddun bayanai. Idan hakan zai faru ba dade ko ba dade, to me yasa aka rubuta takamaiman bayani kwata-kwata? Da fari dai, ga mutumin da zai gyara lambar ku, kowace ƙarin kalma a cikin ƙayyadaddun bayanai za ta cancanci nauyinta da zinari, kuma wannan mutumin yana iya zama ku. Sau da yawa nakan harbi kaina saboda rashin zama takamaiman lokacin da na gyara lambara. Kuma na rubuta ƙarin bayani dalla-dalla fiye da lamba. Don haka, lokacin da kuka gyara lambar, ƙayyadaddun bayanai koyaushe yana buƙatar sabuntawa. Abu na biyu, tare da kowane gyara lambar ya zama mafi muni, ya zama mafi wahalar karantawa da kiyayewa. Wannan karuwa ne a cikin entropy. Amma idan ba ka fara da takamaiman bayani ba, to duk layin da ka rubuta zai zama edit, kuma code zai kasance mai girma da wuyar karantawa tun daga farko.

Kamar yadda aka ce Eisenhower, Ba a yi nasara bisa tsari ba, kuma ba a ci nasara ba sai da shiri. Kuma ya san wani abu game da yaƙe-yaƙe. Akwai ra'ayi cewa rubuta ƙayyadaddun bayanai ɓata lokaci ne. Wani lokaci wannan gaskiya ne, kuma aikin yana da sauƙi wanda ba shi da ma'ana a cikin tunaninsa. Amma ya kamata a koyaushe ku tuna cewa lokacin da aka ba ku shawarar kada ku rubuta takamaiman bayani, yana nufin an ba ku shawarar kada ku yi tunani. Kuma ya kamata ku yi tunani game da wannan kowane lokaci. Yin tunani ta hanyar aiki baya bada garantin cewa ba za ku yi kuskure ba. Kamar yadda muka sani, babu wanda ya ƙirƙira wani sihirin sihiri, kuma shirye-shirye aiki ne mai wahala. Amma idan ba ku yi tunani ta hanyar aikin ba, ana ba ku tabbacin yin kuskure.

Kuna iya karanta ƙarin game da TLA+ da PlusCal akan gidan yanar gizo na musamman, zaku iya zuwa can daga shafina na gida mahada. Shi ke nan a gare ni, na gode da kulawar ku.

Da fatan za a tuna cewa wannan fassarar ce. Lokacin da kuke rubuta sharhi, ku tuna cewa marubucin ba zai karanta su ba. Idan da gaske kuna son yin magana da marubucin, zai kasance a taron Hydra 2019, wanda za a gudanar a Yuli 11-12, 2019 a St. Petersburg. Ana iya siyan tikiti a kan gidan yanar gizon.

source: www.habr.com

Add a comment