Tha barrachd na còdadh ann am prògramadh

Tha barrachd na còdadh ann am prògramadh

Is e eadar-theangachadh a tha san artaigil seo Co-labhairt Stanford. Ach mus deach i beagan ro-ràdh. Ciamar a tha zombies air an cruthachadh? Chaidh a h-uile duine a-steach do shuidheachadh far a bheil iad airson caraid no co-obraiche a tharraing suas chun ìre aca, ach chan obraich e a-mach. Agus chan eil e cho mòr riutsa ‘s a tha e“ nach obraich e a-mach ”: air aon taobh den sgèile tha tuarastal àbhaisteach, gnìomhan, is mar sin air adhart, agus air an taobh eile, am feum air smaoineachadh. Tha smaoineachadh mì-thlachdmhor agus pianail. Bidh e a 'toirt seachad gu luath agus a' leantainn air adhart a 'sgrìobhadh còd gun a bhith a' tionndadh air an eanchainn idir. Bidh thu a’ smaoineachadh dè an oidhirp a bheir e gus faighinn seachad air a’ chnap-starra a thaobh dìth-cuideachaidh ionnsaichte, agus dìreach cha bhith thu ga dhèanamh. Seo mar a tha zombies air an cruthachadh, a tha, tha e coltach, comasach air a leigheas, ach tha e coltach nach dèan duine e.

Nuair a chunnaic mi sin Leslie Lamport (tha, an aon chompanach bho na leabhraichean teacsa) a’ tighinn dhan Ruis agus chan ann a’ dèanamh aithris, ach seisean ceist-is-freagairt, bha mi rud beag faiceallach. Dìreach air eagal, tha Leslie na neach-saidheans ainmeil air feadh an t-saoghail, ùghdar obraichean bunaiteach ann an coimpiutaireachd sgaoilte, agus faodaidh tu cuideachd eòlas fhaighinn air leis na litrichean La anns an fhacal LaTeX - “Lamport TeX”. Is e an dàrna adhbhar eagallach an riatanas aige: feumaidh a h-uile duine a thig (gu tur an-asgaidh) èisteachd ri dhà de na h-aithisgean aige ro-làimh, co-dhiù aon cheist a thogail orra, agus dìreach an uairsin tighinn. Cho-dhùin mi faicinn dè bha Lamport a’ craoladh an sin – agus tha e sgoinneil! Is e dìreach an rud sin, am pill ceangail draoidheachd gus zombies a leigheas. Tha mi a 'toirt rabhadh dhut: bhon teacsa, faodaidh daoine a tha dèidheil air dòighean-obrach fìor shùbailte agus an fheadhainn nach eil a' còrdadh riutha a bhith a 'dèanamh deuchainn air na tha sgrìobhte gu sònraichte a' losgadh a-mach.

Às deidh habrokat, gu dearbh, bidh eadar-theangachadh an t-seiminear a’ tòiseachadh. Faigh tlachd bho leughadh!

Ge bith dè an obair a nì thu, feumaidh tu an-còmhnaidh a dhol tro thrì ceumannan:

  • co-dhùnadh dè an amas a tha thu airson a choileanadh;
  • co-dhùnadh ciamar a choileanas tu an amas agad;
  • thig chun amas agad.

Tha seo cuideachd a’ buntainn ri prògramadh. Nuair a sgrìobhas sinn còd, feumaidh sinn:

  • co-dhùnadh dè bu chòir don phrògram a dhèanamh;
  • co-dhùnadh ciamar a bu chòir dha a dhleastanas a choileanadh;
  • sgrìobh an còd co-fhreagarrach.

Tha an ceum mu dheireadh, gu dearbh, glè chudromach, ach cha bhith mi a’ bruidhinn mu dheidhinn an-diugh. An àite sin, bruidhnidh sinn air a’ chiad dhà. Bidh gach prògramadair gan coileanadh mus tòisich iad ag obair. Cha suidh thu sìos airson sgrìobhadh mura h-eil thu air co-dhùnadh a bheil thu a’ sgrìobhadh brobhsair neo stòr-dàta. Feumaidh beachd sònraichte mun amas a bhith an làthair. Agus tha thu gu cinnteach a’ smaoineachadh dè dìreach a nì am prògram, agus na sgrìobh dòigh air choireigin leis an dòchas gun tionndaidh an còd gu bhith na bhrobhsair.

Ciamar a tha ro-bheachd a’ chòd seo a’ tachairt? Dè an oidhirp a bu chòir dhuinn a chuir a-steach don seo? Tha e uile an urra ri cho iom-fhillte 'sa tha an duilgheadas a tha sinn a' fuasgladh. Seach gu bheil sinn airson siostam sgaoilte a tha a' fulang le lochdan a sgrìobhadh. Anns a 'chùis seo, bu chòir dhuinn smaoineachadh gu faiceallach air cùisean mus suidh sinn sìos gu còd. Dè ma dh’ fheumas sinn dìreach caochladair iomlan àrdachadh le 1? Aig a 'chiad sealladh, tha a h-uile dad beag an seo, agus chan eil feum air smaoineachadh, ach an uairsin tha sinn a' cuimhneachadh gum faod tar-shruth tachairt. Mar sin, eadhon gus tuigsinn a bheil duilgheadas sìmplidh no iom-fhillte, feumaidh tu an toiseach smaoineachadh.

Ma smaoinicheas tu air fuasglaidhean comasach air an duilgheadas ro làimh, faodaidh tu mearachdan a sheachnadh. Ach feumaidh seo do smaoineachadh a bhith soilleir. Gus seo a choileanadh, feumaidh tu do bheachdan a sgrìobhadh sìos. Is fìor thoil leam an abairt Dick Guindon: “Nuair a sgrìobhas tu, tha nàdar a’ sealltainn dhut cho slaodach sa tha do smaoineachadh. ” Mura sgrìobh thu, chan eil thu a’ smaoineachadh ach gu bheil thu a’ smaoineachadh. Agus feumaidh tu do bheachdan a sgrìobhadh sìos ann an cruth mion-chomharrachadh.

Bidh sònrachaidhean a’ coileanadh mòran dhleastanasan, gu sònraichte ann am pròiseactan mòra. Ach cha bhith mi a 'bruidhinn ach mu aon dhiubh: bidh iad gar cuideachadh a' smaoineachadh gu soilleir. Tha smaoineachadh gu soilleir glè chudromach agus gu math duilich, mar sin an seo feumaidh sinn cuideachadh sam bith. Dè an cànan anns am bu chòir dhuinn mion-chomharrachadh a sgrìobhadh? San fharsaingeachd, is e seo a’ chiad cheist dha luchd-prògramaidh an-còmhnaidh: dè an cànan anns am bi sinn a’ sgrìobhadh. Chan eil freagairt cheart ann dha: tha na duilgheadasan a tha sinn a’ fuasgladh ro eadar-mheasgte. Dha cuid, tha TLA + na chànan sònrachaidh a leasaich mi. Dha feadhainn eile, tha e nas fhasa Sìneach a chleachdadh. Tha a h-uile dad an urra ris an t-suidheachadh.

Nas cudromaiche tha ceist eile: ciamar a choileanas tu smaoineachadh nas soilleire? Freagairt: Feumaidh sinn smaoineachadh mar luchd-saidheans. Is e seo dòigh smaoineachaidh a tha air a dhearbhadh fhèin thairis air na 500 bliadhna a dh’ fhalbh. Ann an saidheans, bidh sinn a’ togail mhodalan matamataigeach de fhìrinn. Is dòcha gur e reul-eòlas a’ chiad saidheans ann an ciall teann an fhacail. Anns a’ mhodail matamataigeach a thathas a’ cleachdadh ann an reul-eòlas, tha cuirp celestial a’ nochdadh mar phuingean le tomad, suidheachadh agus momentum, ged a tha iad dha-rìribh nan nithean air leth toinnte le beanntan is cuantan, làn-mara agus làn-mara. Chaidh am modail seo, mar sam bith eile, a chruthachadh gus fuasgladh fhaighinn air duilgheadasan sònraichte. Tha e math airson faighinn a-mach càite an comharraich thu an teileasgop ma tha feum agad air planaid a lorg. Ach ma tha thu airson ro-innse na sìde air a’ phlanaid seo, chan obraich am modail seo.

Tha matamataig a’ toirt cothrom dhuinn feartan modail a dhearbhadh. Agus tha saidheans a 'sealltainn mar a tha na feartan sin co-cheangailte ri fìrinn. Bruidhnidh sinn mu ar saidheans, saidheans coimpiutaireachd. Is e an fhìrinn leis a bheil sinn ag obair siostaman coimpiutaireachd de dhiofar seòrsa: pròiseasairean, consolaidhean geama, coimpiutairean, coileanadh phrògraman, agus mar sin air adhart. Bruidhnidh mi mu bhith a’ ruith prògram air coimpiutair, ach gu ìre mhòr, tha na co-dhùnaidhean sin uile a’ buntainn ri siostam coimpiutaireachd sam bith. Anns an saidheans againn, bidh sinn a’ cleachdadh mòran mhodalan eadar-dhealaichte: an inneal Turing, seataichean de thachartasan air an òrdachadh gu ìre, agus mòran eile.

Dè th' ann am prògram? Is e seo còd sam bith a dh'fhaodar beachdachadh gu neo-eisimeileach. Seach gu feum sinn brabhsair a sgrìobhadh. Bidh sinn a 'coileanadh trì gnìomhan: bidh sinn a' dealbhadh sealladh an neach-cleachdaidh air a 'phrògram, an uairsin bidh sinn a' sgrìobhadh an diagram àrd-ìre den phrògram, agus mu dheireadh bidh sinn a 'sgrìobhadh a' chòd. Mar a bhios sinn a 'sgrìobhadh a' chòd, tha sinn a 'tuigsinn gum feum sinn cruth teacsa a sgrìobhadh. An seo feumaidh sinn a-rithist trì duilgheadasan fhuasgladh: co-dhùnadh dè an teacsa a thilleas an inneal seo; tagh algorithm airson cruth; sgrìobhadh còd. Tha a fo-obair fhèin aig a’ ghnìomh seo: cuir a-steach tàthan gu ceart ann am faclan. Bidh sinn cuideachd a’ fuasgladh an fho-obair seo ann an trì ceumannan - mar a chì thu, bidh iad air an ath-aithris aig iomadh ìre.

Beachdaich sinn nas mionaidiche air a 'chiad cheum: dè an duilgheadas a bhios am prògram a' fuasgladh. An seo, mar as trice bidh sinn a’ modail prògram mar ghnìomh a bheir beagan a-steach agus a bheir a-mach cuid de thoraidhean. Ann am matamataig, tha gnìomh mar as trice air a mhìneachadh mar sheata òrdaichte de chàraidean. Mar eisimpleir, thathas a’ toirt iomradh air gnìomh squaring airson àireamhan nàdarra mar an seata {<0,0>, <1,1>, <2,4>, <3,9>, …}. Is e raon gnìomh mar seo an seata de na ciad eileamaidean de gach paidhir, is e sin, na h-àireamhan nàdarra. Gus gnìomh a mhìneachadh, feumaidh sinn a raon agus a fhoirmle a shònrachadh.

Ach chan eil gnìomhan ann am matamataig an aon rud ri gnìomhan ann an cànanan prògramaidh. Tha am matamataig tòrr nas fhasa. Leis nach eil ùine agam airson eisimpleirean iom-fhillte, smaoinichidh sinn air fear sìmplidh: gnìomh ann an C no modh statach ann an Java a thilleas an roinniche cumanta as motha de dhà shlàn-chunntas. Ann an sònrachadh an dòigh seo, bidh sinn a 'sgrìobhadh: àireamhachadh GCD(M,N) airson argamaidean M и Ncàite GCD(M,N) - gnìomh aig a bheil an àrainn na sheata de chàraidean iomlan, agus is e an luach tilleadh an t-slànaighear as motha a tha air a sgaradh le M и N. Ciamar a tha am modail seo co-cheangailte ri fìrinn? Bidh am modail ag obair air àireamhan iomlan, agus ann an C no Java tha 32-bit againn int. Leigidh am modail seo leinn co-dhùnadh a bheil an algairim ceart GCD, ach cha chuir e casg air mearachdan thar-shruth. Dh'fheumadh seo modail nas iom-fhillte, far nach eil ùine ann.

Bruidhnidh sinn mu na crìochan aig gnìomh mar mhodail. Chan eil cuid de phrògraman (leithid siostaman obrachaidh) dìreach a’ tilleadh luach sònraichte airson argamaidean sònraichte, faodaidh iad ruith gu leantainneach. A bharrachd air an sin, chan eil an gnìomh mar mhodail gu math freagarrach airson an dàrna ceum: dealbhadh mar a dh ’fhuasglas tu an duilgheadas. Bidh seòrsa sgiobalta agus seòrsa builgean a’ tomhas an aon ghnìomh, ach tha iad nan algorithms gu tur eadar-dhealaichte. Mar sin, airson cunntas a thoirt air mar a tha amas a 'phrògraim air a choileanadh, bidh mi a' cleachdadh modail eadar-dhealaichte, is e am modail giùlain àbhaisteach a chanas sinn ris. Tha am prògram ann air a riochdachadh mar sheata de gach giùlan ceadaichte, agus tha gach fear dhiubh, ann an tionndadh, na shreath de stàitean, agus is e an stàit sònrachadh luachan gu caochladairean.

Chì sinn cò ris a bhiodh an dàrna ceum airson algorithm Euclid coltach. Feumaidh sinn àireamhachadh GCD(M, N). Bidh sinn a 'tòiseachadh M ciamar xagus N ciamar y, an uairsin thoir air falbh na caochladairean sin a-rithist is a-rithist bhon fheadhainn as motha gus am bi iad co-ionann. Mar eisimpleir, ma tha M = 12agus N = 18, is urrainn dhuinn an giùlan a leanas a mhìneachadh:

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

Agus ma tha M = 0 и N = 0? Tha neoni air a sgaradh leis a h-uile àireamh, agus mar sin chan eil sgaradh as motha ann sa chùis seo. Anns an t-suidheachadh seo, feumaidh sinn a dhol air ais chun chiad cheum agus faighneachd: a bheil feum againn dha-rìribh air GCD obrachadh a-mach airson àireamhan neo-dhearbhach? Mura h-eil seo riatanach, cha leig thu leas ach an sònrachadh atharrachadh.

An seo bu chòir dhuinn tomhas beag a dhèanamh mu chinneasachd. Tha e gu tric air a thomhas anns an àireamh de loidhnichean còd sgrìobhte gach latha. Ach tha an obair agad tòrr nas fheumail ma gheibh thu cuidhteas àireamh sònraichte de loidhnichean, oir tha nas lugha de rùm agad airson biastagan. Agus is e a 'chiad cheum an dòigh as fhasa faighinn cuidhteas a' chòd. Tha e gu tur comasach nach eil feum agad air na glagan is na fìdeagan gu lèir a tha thu a’ feuchainn ri chur an gnìomh. Is e an dòigh as luaithe air prògram a dhèanamh nas sìmplidhe agus ùine a shàbhaladh gun a bhith a’ dèanamh rudan nach bu chòir a dhèanamh. Is e an dàrna ceum an dàrna ìre as motha de chomas sàbhalaidh ùine. Ma thomhaiseas tu cinneasachd a thaobh loidhnichean sgrìobhte, bheir e ort smaoineachadh air mar a choileanas tu gnìomh nas lugha cinneasach, oir is urrainn dhut an aon dhuilgheadas fhuasgladh le nas lugha de chòd. Chan urrainn dhomh dearbh staitistig a thoirt seachad an seo, oir chan eil dòigh agam air an àireamh de loidhnichean nach do sgrìobh mi a chunntadh leis gun do chuir mi seachad ùine air an t-sònrachadh, is e sin, air a’ chiad agus an dàrna ceum. Agus chan urrainnear an deuchainn a chuir air dòigh an seo nas motha, oir anns an deuchainn chan eil còir againn a’ chiad cheum a choileanadh, tha an obair ro-shuidhichte.

Tha e furasta dearmad a dhèanamh air mòran dhuilgheadasan ann an sònrachaidhean neo-fhoirmeil. Chan eil dad duilich ann a bhith a’ sgrìobhadh mion-chomharrachadh teann airson gnìomhan, cha bhith mi a’ bruidhinn air seo. An àite sin, bruidhnidh sinn mu bhith a’ sgrìobhadh mion-chomharrachadh làidir airson giùlan àbhaisteach. Tha teòirim ann a tha ag ràdh gum faodar seata giùlain sam bith a mhìneachadh a’ cleachdadh an t-seilbh tèarainteachd (sàbhailteachd) agus feartan mairsinneachd (beòthalachd). Tha tèarainteachd a’ ciallachadh nach tachair dad dona, cha toir am prògram freagairt ceàrr. Tha mairsinn beò a’ ciallachadh gun tachair rudeigin math luath no mall, i.e. bheir am prògram am freagairt ceart luath no mall. Mar riaghailt, tha tèarainteachd na chomharradh nas cudromaiche, bidh mearachdan a 'tachairt an seo gu tric. Mar sin, gus ùine a shàbhaladh, cha bhith mi a 'bruidhinn mu dheidhinn mairsinneachd, ged a tha e, gu dearbh, cudromach cuideachd.

Bidh sinn a’ coileanadh tèarainteachd le bhith ag òrdachadh, an toiseach, an t-seata de stàitean tùsail a dh’ fhaodadh a bhith ann. Agus san dàrna h-àite, dàimhean leis na h-ath stàitean a dh’ fhaodadh a bhith ann airson gach stàit. Feuch gun obraich sinn mar luchd-saidheans agus mìnichidh sinn stàitean gu matamataigeach. Tha an seata de stàitean tùsail air a mhìneachadh le foirmle, mar eisimpleir, ann an cùis an algairim Euclid: (x = M) ∧ (y = N). Airson luachan sònraichte M и N chan eil ann ach aon staid thùsail. Tha an dàimh leis an ath staid air a mhìneachadh le foirmle anns a bheil caochladairean na h-ath stàite air an sgrìobhadh le prìomh, agus caochladairean na stàite làithreach air an sgrìobhadh gun phrìomhachas. Ann an cùis algairim Euclid, dèiligidh sinn ri sgaradh dà fhoirmle, ann an aon dhiubh x is e an luach as motha, agus anns an dàrna fear - y:

Tha barrachd na còdadh ann am prògramadh

Anns a’ chiad chùis, tha luach ùr y co-ionann ris an luach a bh’ aig y roimhe, agus gheibh sinn luach ùr x le bhith a’ toirt air falbh an caochladair nas lugha bhon chaochladair as motha. Anns an dàrna cùis, bidh sinn a 'dèanamh an aghaidh.

Rachamaid air ais gu algorithm Euclid. Gabhamaid sin a-rithist M = 12, N = 18. Tha seo a’ mìneachadh aon staid thùsail, (x = 12) ∧ (y = 18). An uairsin cuiridh sinn na luachan sin a-steach don fhoirmle gu h-àrd agus gheibh sinn:

Tha barrachd na còdadh ann am prògramadh

Seo an aon fhuasgladh a dh’ fhaodadh a bhith ann: x' = 18 - 12 ∧ y' = 12agus gheibh sinn an giùlan : [x = 12, y = 18]. San aon dòigh, is urrainn dhuinn cunntas a thoirt air na stàitean uile nar giùlan: [x = 12, y = 18] → [x = 12, y = 6] → [x = 6, y = 6].

Anns an staid mu dheireadh [x = 6, y = 6] bidh an dà phàirt den abairt meallta, agus mar sin chan eil an ath staid aige. Mar sin, tha sònrachadh iomlan againn air an dàrna ceum - mar a chì thu, is e matamataig gu math àbhaisteach a tha seo, mar ann an innleadairean agus luchd-saidheans, agus chan eil e neònach, mar ann an saidheans coimpiutaireachd.

Faodar an dà fhoirmle seo a chur còmhla ann an aon fhoirmle de loidsig ùineail. Tha i eireachdail agus furasta a mhìneachadh, ach chan eil ùine ann dhi a-nis. Is dòcha gu feum sinn loidsig ùineail a-mhàin airson an togalach beòthalachd, chan eil feum air airson tèarainteachd. Cha toil leam loidsig ùineail mar sin, chan e matamataig gu math àbhaisteach a th’ ann, ach a thaobh beòthalachd tha e na olc riatanach.

Ann an algairim Euclid, airson gach luach x и y tha luachan sònraichte aca x' и y', a tha a’ dèanamh a’ cheangail ris an ath staid fìor. Ann am faclan eile, tha algorithm Euclid cinntiche. Gus algairim neo-chinnteach a mhodail, feumaidh grunn stàitean san àm ri teachd a bhith aig an stàit làithreach, agus gu bheil grunn luachan caochlaideach prìomhach aig gach luach caochlaideach neo-phrìomhach gus am bi an dàimh ris an ath stàit fìor. Tha seo furasta a dhèanamh, ach cha toir mi eisimpleirean a-nis.

Gus inneal obrach a dhèanamh, feumaidh tu matamataig foirmeil. Ciamar a nì thu an sònrachadh foirmeil? Airson seo a dhèanamh, feumaidh sinn cànan foirmeil, mar eisimpleir, TLA+. Bhiodh sònrachadh algorithm Euclid a’ coimhead mar seo sa chànan seo:

Tha barrachd na còdadh ann am prògramadh

Tha samhla soidhne co-ionann le triantan a 'ciallachadh gu bheil an luach air taobh clì an t-soidhne air a mhìneachadh gus a bhith co-ionnan ris an luach air taobh deas an t-soidhne. Gu dearbh, is e mìneachadh a th’ anns an t-sònrachadh, anns a’ chùis againn dà mhìneachadh. Gus an t-sònrachadh ann an TLA+, feumaidh tu dearbhaidhean agus beagan co-chòrdadh a chur ris, mar a tha san t-sleamhnag gu h-àrd. Ann an ASCII bhiodh e a’ coimhead mar seo:

Tha barrachd na còdadh ann am prògramadh

Mar a chì thu, chan eil dad iom-fhillte. Faodar an sònrachadh airson TLA+ a dhearbhadh, i.e. seachain a h-uile giùlan a dh’ fhaodadh a bhith ann am modail beag. Anns a 'chùis againn, bidh am modail seo na luachan sònraichte M и N. Is e dòigh dearbhaidh fìor èifeachdach agus sìmplidh a tha seo a tha gu tur fèin-ghluasadach. Tha e comasach cuideachd dearbhaidhean fìrinn foirmeil a sgrìobhadh agus an sgrùdadh gu meacanaigeach, ach bheir seo tòrr ùine, agus mar sin cha mhòr nach eil duine a’ dèanamh seo.

Is e am prìomh eas-bhuannachd de TLA + gur e matamataigs a th’ ann, agus tha eagal air prògramadairean agus luchd-saidheans coimpiutair ro matamataigs. Aig a’ chiad sealladh, tha seo coltach ri fealla-dhà, ach, gu mì-fhortanach, tha mi ga chiallachadh ann an da-rìribh. Bha mo cho-obraiche dìreach ag innse dhomh mar a dh'fheuch e ri TLA + a mhìneachadh do ghrunn luchd-leasachaidh. Cho luath ‘s a nochd na foirmlean air an sgrion, thàinig iad gu bhith nan sùilean glainne sa bhad. Mar sin ma tha TLA + a’ cur eagal ort, faodaidh tu a chleachdadh PlusCal, tha e na sheòrsa de chànan prògramadh dèideag. Faodaidh abairt ann am PlusCal a bhith na abairt TLA+ sam bith, is e sin, gu ìre mhòr, abairt matamataigeach sam bith. A bharrachd air an sin, tha co-chòrdadh aig PlusCal airson algorithms neo-chinnteach. Leis gun urrainn dha PlusCal abairt TLA + sam bith a sgrìobhadh, tha PlusCal tòrr nas inntinniche na fìor chànan prògramaidh sam bith. An uairsin, tha PlusCal air a chur ri chèile ann an sònrachadh TLA + a tha furasta a leughadh. Chan eil seo a’ ciallachadh, gu dearbh, gun tionndaidh an sònrachadh iom-fhillte PlusCal gu bhith na fhear sìmplidh air TLA + - dìreach tha an conaltradh eatorra follaiseach, cha bhith iom-fhillteachd a bharrachd ann. Mu dheireadh, faodar an sònrachadh seo a dhearbhadh le innealan TLA +. Gu h-iomlan, faodaidh PlusCal cuideachadh le faighinn thairis air phobia math agus tha e furasta a thuigsinn eadhon dha prògramadairean agus luchd-saidheans coimpiutair. San àm a dh'fhalbh, dh'fhoillsich mi algorithms air airson ùine (mu 10 bliadhna).

Is dòcha gun cuir cuideigin an aghaidh gur e matamataig a th’ ann an TLA + agus PlusCal, agus nach obraich matamataig ach air eisimpleirean a chaidh a chruthachadh. Ann an cleachdadh, feumaidh tu fìor chànan le seòrsachan, modhan-obrach, nithean, agus mar sin air adhart. Tha seo ceàrr. Seo na tha Chris Newcomb, a bha ag obair aig Amazon, a’ sgrìobhadh: “Tha sinn air TLA+ a chleachdadh air deich prìomh phròiseactan, agus anns gach cùis tha e air eadar-dhealachadh mòr a dhèanamh a thaobh leasachadh oir bha e comasach dhuinn biastagan cunnartach a ghlacadh mus do bhuail sinn cinneasachadh, agus leis gun tug e dhuinn an sealladh agus am misneachd a bha a dhìth oirnn gus coileanadh ionnsaigheach a dhèanamh. optimizations gun a bhith a 'toirt buaidh air fìrinn a' phrògraim". Faodaidh tu gu tric a chluinntinn nuair a bhios sinn a 'cleachdadh dhòighean foirmeil, gheibh sinn còd neo-èifeachdach - ann an cleachdadh, tha a h-uile dad dìreach a chaochladh. A bharrachd air an sin, tha beachd ann nach urrainn do mhanaidsearan a bhith cinnteach gu bheil feum air modhan foirmeil, eadhon ged a tha luchd-prògramaidh cinnteach gu bheil iad feumail. Agus tha Newcomb a’ sgrìobhadh: “Tha manaidsearan a-nis a’ putadh gu cruaidh gus mion-chomharrachadh a sgrìobhadh airson TLA +, agus gu sònraichte ùine a riarachadh airson seo. ”. Mar sin nuair a chì manaidsearan gu bheil TLA + ag obair, tha iad toilichte gabhail ris. Sgrìobh Chris Newcomb seo mu shia mìosan air ais (Dàmhair 2014), ach a-nis, cho fad ‘s as aithne dhomh, tha TLA + air a chleachdadh ann an 14 pròiseactan, chan e 10. Tha eisimpleir eile co-cheangailte ri dealbhadh an XBox 360. Thàinig intern gu Charles Thacker agus sgrìobh sònrachadh airson an t-siostam cuimhne. Mar thoradh air an t-sònrachadh seo, chaidh bug a lorg nach deidheadh ​​​​mothachadh air dhòigh eile, agus air sgàth sin bhiodh a h-uile XBox 360 a ’tuiteam às deidh ceithir uairean de chleachdadh. Dhearbh innleadairean IBM nach biodh na deuchainnean aca air am biast seo a lorg.

Faodaidh tu barrachd a leughadh mu TLA + air an eadar-lìn, ach a-nis bruidhnidh sinn mu shònrachaidhean neo-fhoirmeil. Is ann ainneamh a bhios againn ri prògraman a sgrìobhadh a bhios a’ tomhas an roinneadair as cumanta agus an leithid. Gu math nas trice bidh sinn a’ sgrìobhadh phrògraman mar an inneal clò-bhualadair breagha a sgrìobh mi airson TLA+. Às deidh an giullachd as sìmplidh, bhiodh an còd TLA + a’ coimhead mar seo:

Tha barrachd na còdadh ann am prògramadh

Ach anns an eisimpleir gu h-àrd, is dòcha gum biodh an neach-cleachdaidh ag iarraidh gum biodh an co-cheangal agus na comharran co-ionann air an aon rèir. Mar sin bhiodh an cruth ceart a’ coimhead nas coltaiche ri seo:

Tha barrachd na còdadh ann am prògramadh

Beachdaich air eisimpleir eile:

Tha barrachd na còdadh ann am prògramadh

An seo, air an làimh eile, bha co-thaobhadh nan comharran co-ionann, cur-ris agus iomadachaidh san stòr air thuaiream, agus mar sin tha an giullachd as sìmplidh gu leòr. San fharsaingeachd, chan eil mìneachadh matamataigeach ceart air cruth ceart, oir tha "ceart" sa chùis seo a 'ciallachadh "dè tha an neach-cleachdaidh ag iarraidh", agus chan urrainnear seo a dhearbhadh gu matamataigeach.

Bhiodh e coltach mura h-eil mìneachadh againn air fìrinn, gu bheil an sònrachadh gun fheum. Ach chan eil. Dìreach air sgàth 's nach eil fios againn dè a tha còir aig prògram a dhèanamh chan eil sin a' ciallachadh nach fheum sinn smaoineachadh air mar a tha e ag obair - air an làimh eile, feumaidh sinn eadhon barrachd oidhirp a chuir a-steach. Tha an sònrachadh gu sònraichte cudromach an seo. Tha e do-dhèanta am prògram as fheàrr a dhearbhadh airson clò-bhualadh structarail, ach chan eil seo a 'ciallachadh nach bu chòir dhuinn a ghabhail idir, agus chan e rud math a th' ann a bhith a 'sgrìobhadh còd mar shruth mothachaidh. Mu dheireadh, sgrìobh mi sònrachadh de shia riaghailtean le mìneachaidhean ann an cruth bheachdan ann am faidhle java. Seo eisimpleir de aon de na riaghailtean: a left-comment token is LeftComment aligned with its covering token. Tha an riaghailt seo sgrìobhte ann am Beurla matamataigeach, canaidh sinn: LeftComment aligned, left-comment и covering token - teirmean le mìneachaidhean. Seo mar a tha luchd-matamataig a’ toirt cunntas air matamataig: bidh iad a’ sgrìobhadh mhìneachaidhean air teirmean agus, stèidhichte orra, riaghailtean. Is e buannachd a leithid de shònrachadh gu bheil sia riaghailtean gu math nas fhasa a thuigsinn agus a dheasbad na 850 loidhne de chòd. Feumaidh mi ràdh nach robh e furasta na riaghailtean sin a sgrìobhadh, thug e tòrr ùine airson an deasbad. Gu sònraichte airson an adhbhair seo, sgrìobh mi còd a thug cunntas air an riaghailt a chaidh a chleachdadh. Leis gun do rinn mi deuchainn air na sia riaghailtean sin air grunn eisimpleirean, cha robh agam ri 850 loidhne de chòd a dhì-cheadachadh, agus thionndaidh mialan gu bhith gu math furasta an lorg. Tha innealan math aig Java airson seo. Nam biodh mi dìreach air a’ chòd a sgrìobhadh, bhiodh e air tòrr na b’ fhaide a thoirt dhomh, agus bhiodh an cruth air a bhith de chàileachd nas miosa.

Carson nach b’ urrainnear sònrachadh foirmeil a chleachdadh? Air an aon làimh, chan eil coileanadh ceart ro chudromach an seo. Tha e coltach nach bi clò-bhualaidhean structarail a’ toirt toileachas do dhuine sam bith, agus mar sin cha robh agam ri toirt air obrachadh ceart anns a h-uile suidheachadh neònach. Nas cudromaiche buileach tha an fhìrinn nach robh innealan iomchaidh agam. Tha an inneal-dearbhaidh modail TLA + gun fheum an seo, agus mar sin dh'fheumadh mi na h-eisimpleirean a sgrìobhadh le làimh.

Tha feartan aig an t-sònrachadh gu h-àrd a tha cumanta do gach sònrachadh. Tha e nas àirde na an còd. Faodar a chuir an gnìomh ann an cànan sam bith. Tha innealan no dòighean sam bith gun fheum airson a sgrìobhadh. Cha chuidich cùrsa prògramaidh sam bith thu gus an sònrachadh seo a sgrìobhadh. Agus chan eil innealan ann a dh’ fhaodadh an sònrachadh seo a dhèanamh neo-riatanach, mura h-eil, gu dearbh, a’ sgrìobhadh cànan gu sònraichte airson prògraman clò-bhuailte structaraichte a sgrìobhadh ann an TLA+. Mu dheireadh, chan eil an sònrachadh seo ag ràdh dad mu dheidhinn dìreach mar a sgrìobhas sinn an còd, chan eil e ag innse ach dè a bhios an còd a’ dèanamh. Bidh sinn a’ sgrìobhadh an t-sònrachadh gus ar cuideachadh le bhith a’ smaoineachadh tron ​​duilgheadas mus tòisich sinn a’ smaoineachadh mun chòd.

Ach tha feartan aig an t-sònrachadh seo cuideachd a tha ga eadar-dhealachadh bho shònrachaidhean eile. Tha 95% de shònrachaidhean eile gu math nas giorra agus nas sìmplidh:

Tha barrachd na còdadh ann am prògramadh

A bharrachd air an sin, tha an sònrachadh seo na sheata de riaghailtean. Mar riaghailt, tha seo na chomharradh air droch shònrachadh. Tha e gu math duilich buaidh seata de riaghailtean a thuigsinn, agus is e sin as coireach gum feumadh mi tòrr ùine a chaitheamh a ’deasbad orra. Ach, anns a 'chùis seo, cha b' urrainn dhomh dòigh nas fheàrr a lorg.

Is fhiach beagan fhaclan a ràdh mu phrògraman a tha a’ ruith gu leantainneach. Mar riaghailt, bidh iad ag obair ann an co-shìnte, mar eisimpleir, siostaman obrachaidh no siostaman sgaoilte. Is e glè bheag de dhaoine a thuigeas iad gu inntinn no air pàipear, agus chan eil mi nam aon dhiubh, ged a bha e comasach dhomh a dhèanamh uaireigin. Mar sin, feumaidh sinn innealan a bheir sùil air ar n-obair - mar eisimpleir, TLA + no PlusCal.

Carson a bha e riatanach sònrachadh a sgrìobhadh nam biodh fios agam mu thràth dè dìreach a bu chòir don chòd a dhèanamh? Gu dearbh, bha mi dìreach a 'smaoineachadh gu robh mi eòlach air. A bharrachd air an sin, le sònrachadh, chan fheum neach bhon taobh a-muigh tuilleadh faighinn a-steach don chòd gus tuigsinn dè dìreach a bhios e a’ dèanamh. Tha riaghailt agam: cha bu chòir riaghailtean coitcheann a bhith ann. Tha eisgeachd don riaghailt seo, gu dearbh, is e seo an aon riaghailt choitcheann a tha mi a’ leantainn: bu chòir don t-sònrachadh air na bhios an còd a’ dèanamh a h-uile dad a dh’ fheumas fios a bhith aca nuair a bhios iad a’ cleachdadh a’ chòd innse do dhaoine.

Mar sin dè dìreach a dh’ fheumas fios a bhith aig luchd-prògramaidh mu bhith a’ smaoineachadh? Airson tòiseachadh, an aon rud ris a h-uile duine eile: mura sgrìobh thu, is ann dìreach dhutsa a tha thu a’ smaoineachadh. Cuideachd, feumaidh tu smaoineachadh mus dèan thu còd, a tha a 'ciallachadh gum feum thu sgrìobhadh mus dèan thu còd. Is e an sònrachadh na bhios sinn a’ sgrìobhadh mus tòisich sinn air còdadh. Tha feum air sònrachadh airson còd sam bith a ghabhas cleachdadh no atharrachadh le neach sam bith. Agus is dòcha gur e an “cuideigin” seo ùghdar a’ chòd e fhèin mìos às deidh a sgrìobhadh. Tha feum air sònrachadh airson prògraman mòra agus siostaman, airson clasaichean, airson dòighean-obrach, agus uaireannan fiù 's airson earrannan iom-fhillte de aon dòigh. Dè dìreach a bu chòir a sgrìobhadh mun chòd? Feumaidh tu innse dè a nì e, is e sin, dè a dh'fhaodas a bhith feumail do neach sam bith a 'cleachdadh a' chòd seo. Uaireannan is dòcha gum feumar cuideachd sònrachadh mar a choileanas an còd an adhbhar aige. Ma chaidh sinn tron ​​​​dòigh seo ann an cùrsa algorithms, is e algorithm a chanas sinn ris. Ma tha e rudeigin nas sònraichte agus nas ùire, is e dealbhadh àrd-ìre a chanas sinn ris. Chan eil eadar-dhealachadh foirmeil ann an seo: tha an dà chuid mar mhodail eas-chruthach de phrògram.

Ciamar a bu chòir dhut sònrachadh còd a sgrìobhadh? Am prìomh rud: bu chòir dha a bhith aon ìre nas àirde na an còd fhèin. Bu chòir dha stàitean agus giùlan a mhìneachadh. Bu chòir dha a bhith cho teann 'sa tha an obair ag iarraidh. Ma tha thu a’ sgrìobhadh sònrachadh airson mar a thèid gnìomh a bhuileachadh, faodaidh tu a sgrìobhadh ann am pseudocode no le PlusCal. Feumaidh tu ionnsachadh mar a sgrìobhas tu mion-chomharrachadh air sònrachaidhean foirmeil. Bheir seo dhut na sgilean riatanach a chuidicheas tu le feadhainn neo-fhoirmeil cuideachd. Ciamar a dh’ ionnsaicheas tu mion-chomharrachadh foirmeil a sgrìobhadh? Nuair a dh'ionnsaich sinn prògramadh, sgrìobh sinn prògraman agus an uairsin rinn sinn dì-bhugachadh orra. Tha e an aon rud an seo: sgrìobh an sònrachadh, thoir sùil air leis an inneal-dearbhaidh modail, agus socraich na mialan. Is dòcha nach e TLA+ an cànan as fheàrr airson sònrachadh foirmeil, agus tha coltas ann gum bi cànan eile nas fheàrr airson na feumalachdan sònraichte agad. Is e buannachd TLA + gu bheil e a’ teagasg smaoineachadh matamataigeach glè mhath.

Ciamar a cheanglas tu sònrachadh agus còd? Le cuideachadh bho bheachdan a tha a’ ceangal bun-bheachdan matamataigeach agus am buileachadh. Ma tha thu ag obair le grafaichean, an uairsin aig ìre a’ phrògraim bidh sreath de nodan agus sreath de cheanglaichean agad. Mar sin, feumaidh tu sgrìobhadh dìreach mar a tha an graf air a chuir an gnìomh leis na structaran prògramachaidh sin.

Bu chòir a thoirt fa-near nach eil gin de na tha gu h-àrd a’ buntainn ris a’ phròiseas sgrìobhaidh còd. Nuair a sgrìobhas tu an còd, is e sin, bidh thu a 'coileanadh an treas ceum, feumaidh tu cuideachd smaoineachadh agus smaoineachadh tron ​​​​phrògram. Ma tha fo-obair a’ tionndadh a-mach gu bheil e iom-fhillte no neo-fhollaiseach, feumaidh tu sònrachadh a sgrìobhadh air a shon. Ach chan eil mi a 'bruidhinn mun chòd fhèin an seo. Faodaidh tu cànan prògramadh sam bith, dòigh-obrach sam bith a chleachdadh, chan ann mun deidhinn a tha e. Cuideachd, chan eil gin de na tha gu h-àrd a’ cur às don fheum air còd deuchainn is deasbaid. Fiù ma tha am modail eas-chruthach air a sgrìobhadh gu ceart, is dòcha gum bi bugaichean ann a bhith ga bhuileachadh.

Tha mion-chomharrachadh sgrìobhaidh na cheum a bharrachd sa phròiseas còdaidh. Taing dha, faodar mòran mhearachdan a ghlacadh le nas lugha oidhirp - tha fios againn air seo bho eòlas luchd-prògramaidh bho Amazon. Le mion-chomharrachadh, bidh càileachd phrògraman a’ fàs nas àirde. Mar sin carson, ma-thà, a bhios sinn cho tric a’ falbh às an aonais? Leis gu bheil sgrìobhadh duilich. Agus tha sgrìobhadh duilich, oir airson seo feumaidh tu smaoineachadh, agus tha smaoineachadh duilich cuideachd. Tha e an-còmhnaidh nas fhasa a bhith a’ leigeil ort na tha thu a’ smaoineachadh. An seo faodaidh tu coimeas a dhèanamh le ruith - mar as lugha a ruitheas tu, is ann as slaodaiche a ruitheas tu. Feumaidh tu na fèithean agad a thrèanadh agus sgrìobhadh a chleachdadh. Feum air cleachdadh.

Faodaidh an sònrachadh a bhith ceàrr. Is dòcha gu bheil thu air mearachd a dhèanamh an àiteigin, no dh’ fhaodadh na riatanasan a bhith air atharrachadh, no dh’ fhaodadh gum feumar leasachadh a dhèanamh. Feumaidh còd sam bith a chleachdas duine atharrachadh, agus mar sin luath no mall cha bhith an sònrachadh a’ freagairt ris a’ phrògram tuilleadh. Mas fheàrr, anns a 'chùis seo, feumaidh tu sònrachadh ùr a sgrìobhadh agus an còd ath-sgrìobhadh gu tur. Tha fios againn glè mhath nach eil duine a 'dèanamh sin. Ann an cleachdadh, bidh sinn a’ gleusadh a’ chòd agus is dòcha ag ùrachadh an t-sònrachadh. Ma tha seo gu bhith a’ tachairt nas luaithe no nas fhaide air adhart, carson a sgrìobhas tu mion-chomharrachadh idir? An toiseach, airson an neach a dheasaicheas do chòd, is fhiach a h-uile facal a bharrachd anns an t-sònrachadh ann an òr a chuideam, agus is dòcha gur e an neach seo thu fhèin. Bidh mi gu tric a’ gabhail dragh dhomh fhìn airson nach eil mi a’ faighinn sònrachadh gu leòr nuair a bhios mi a’ deasachadh a’ chòd agam. Agus bidh mi a’ sgrìobhadh barrachd shònrachaidhean na còd. Mar sin, nuair a dheasaicheas tu an còd, feumaidh an sònrachadh an-còmhnaidh ùrachadh. San dara h-àite, le gach ath-sgrùdadh, bidh an còd a 'fàs nas miosa, bidh e a' fàs nas duilghe a leughadh agus a chumail suas. Is e seo àrdachadh ann an entropy. Ach mura tòisich thu le sònrachadh, bidh a h-uile loidhne a sgrìobhas tu mar dheasachadh, agus bidh an còd mì-ghoireasach agus duilich a leughadh bhon toiseach.

Mar a thuirt Eisenhower, cha deach blàr a bhuannachadh le plana, agus cha deach blàr a bhuannachadh gun phlana. Agus bha fios aige rud no dhà mu dheidhinn blàran. Tha beachd ann gur e caitheamh ùine a th’ ann an sgrìobhadh mion-chomharrachadh. Aig amannan tha seo fìor, agus tha an obair cho sìmplidh is nach eil dad ri smaoineachadh troimhe. Ach bu chòir dhut an-còmhnaidh cuimhneachadh nuair a thèid innse dhut gun a bhith a’ sgrìobhadh mion-chomharrachadh, thathas ag iarraidh ort gun a bhith a’ smaoineachadh. Agus bu chòir dhut smaoineachadh mu dheidhinn a h-uile turas. Chan eil smaoineachadh tron ​​​​ghnìomh a’ toirt gealltanas nach dèan thu mearachdan. Mar a tha fios againn, cha do dh'innlich duine an t-slat draoidheachd, agus 's e obair dhoirbh a th' ann am prògramadh. Ach mura smaoinich thu air an duilgheadas, tha thu cinnteach gun dèan thu mearachdan.

Faodaidh tu barrachd a leughadh mu dheidhinn TLA + agus PlusCal air làrach-lìn sònraichte, faodaidh tu a dhol ann bhon duilleag dachaigh agam Ceangal. Tha sin uile dhòmhsa, tapadh leat airson d’ aire.

Thoir an aire gur e eadar-theangachadh a tha seo. Nuair a sgrìobhas tu beachdan, cuimhnich nach leugh an t-ùghdar iad. Ma tha thu dha-rìribh ag iarraidh bruidhinn ris an ùghdar, bidh e aig co-labhairt Hydra 2019, a thèid a chumail san Iuchar 11-12, 2019 ann an St. Faodar tiogaidean a cheannach air an làrach-lìn oifigeil.

Source: www.habr.com

Cuir beachd ann