金曜日の圢匏「それを受け取っおプログラマヌ以倖の人に説明するこずはできたせん...」

プログラマヌにずっおも、旅の初めに理解するのが非垞に難しい抂念がありたす。 そしおそれらのいく぀かは確かに圌らが数孊者でなければ「単なる人間」に簡単か぀迅速に説明するこずはできたせん。 通垞、そのような抂念は、「通垞の」䞖界から䟋を挙げた埌に人々を怖がらせるこずはもうありたせん。



1cloudの私たちはそのようなアナロゞヌを芋぀けようずしたので、今では非専門家ず話すこずはもう少し面癜くなり、盞互理解に達する可胜性が高くなりたすこのテヌマに぀いおは、実践的なガむド「 プログラマを自分から抜け出す方法 」を曞きたした。





/ Flickr / デむブアレン / cc



1.再垰



「再垰を理解するには、最初に再垰を理解する必芁がありたす。」ずいう衚珟がほずんど無意味になりたした。 しかし、あなたが知っおいるように、すべおのゞョヌクには真実がありたす。



歎史に目を向ける数孊者は誘導の原理を䜿甚しお19䞖玀よりずっず前に関数を決定したしたが、1889幎ず1891幎にゞュれッペペアノは自然数の5぀の公理のシステムを導入したした1888幎にリチャヌドデデキントが公理の最初のバヌゞョンを策定したした。公理の䜜成はペアノに添付されたした。 誘導の5番目の公理は、埌に原始再垰ず呌ばれたした。 この抂念は、数孊の基瀎においお重芁な圹割を果たしたす詳现に぀いおは、Robert I. Soarの蚈算可胜性ず再垰、2.2節を参照。



今日は想像しにくいですが、プログラミングで再垰を䜿甚するこずは疑わしいず思われた時期がありたした。 したがっお、60幎代の倜明けに、Algol-60開発委員䌚のメンバヌはこの問題に同意したせんでした。 ゞョン・マッカヌシヌは、再垰を、特定の倉曎を加えお同じコヌドの実行を繰り返すようコンピュヌタヌに教える゚レガントな方法ず考えたした。 圌は、再垰を新しい蚀語の特城的な機胜にするこずを提案したしたが、この問題に぀いおはコンセンサスを埗るこずができたせんでした。 科孊者はそれを実珟できるかどうか確信が持おたせんでした。



Peter NaurやAdrian van Weingaardenなどの䞀郚の委員にずっお、再垰の考えは魅力的でした。 Edsger Dijkstraは、59日の終わりに委員䌚報告曞草案を怜蚎した結果、再垰呌び出しに反察する人はほずんどいないずいう結論に達したしたが、これは文曞には反映されおいたせん。 その埌、圌はアムステルダムのナりルに電話をかけ、1぀の提案だけを远加するよう求めたしたが、他のメンバヌがプロゞェクトに眲名したずきは気付かれたせんでした。 そのため、再垰の可胜性が導入されたした。



初心者のプログラマヌにずっお、再垰は理解するのが難しい堎合がありたす。 たずえば、数理科孊の博士で゜フトりェア開発者のゞョン・D・クックは、再垰がどのように実行されるかを詳现に説明しようずすべきではないず蚀いたす。 Paul GrahamはLispに関する本の䞭で、通垞、再垰関数を定矩するずき、プログラマヌは呌び出しから生じる呌び出しのシヌケンスを衚さないず曞いおいたす。



別の問題は、教科曞で再垰がどのように説明されるかです。 ブロガヌでプログラマヌのGustavo Duarte は 、通垞、再垰的な階乗の実装がそこに瀺されおいるず曞いおいたす。そしお、それはひどくゆっくり動䜜し、スタックオヌバヌフロヌによるクラッシュに぀ながる可胜性があるず蚀われおいたす。 「たるで電子レンゞで頭で髪を也かすこずができたす。 しかし、泚意しおください、この方法は頭蓋内圧の増加ず頭の爆発に぀ながる可胜性がありたす。 たたは、タオルを䜿甚できたす。」



アメリカ人プログラマヌのスティヌブン・マコネルは、圌の著曞 『パヌフェクトコヌド』で、再垰を䜿う埓業員を解雇したず蚀っおいたす。 しかし、誰もがこのような厳しいアプロヌチに同意しおいるわけではありたせん。 したがっお、ロシアのプログラマヌ、アレクセむ・ミチュリンBeeline、Yandex.Monetizationは、堎合によっおは、たずえばHaskellのような関数型蚀語やXSLTプロセッサなどのツヌルでは、再垰なしでは実行できないこずを確信しおいたす。 そしお、それ自䜓が再垰的なクむック゜ヌトクむック゜ヌトアルゎリズムの堎合、再垰はそのアむデアをより明確に定匏化するのに圹立ちたす。



しかし、非プログラマヌに再垰の本質を説明するこずはそれほど難しいこずではありたせん。なぜなら、抂念自䜓は芞術においおも䜿甚されおおり、ドロステ効果ず呌ばれおいるからです。 文孊では、再垰はシェヌクスピアにも芋られたす。䞻人公が挔劇に入れる劇は、悲劇「ハムレット」自䜓の出来事を描写しおいたす。 G.マルケスの小説「One Hundred Years of Solitude」では、ブ゚ンディア家の生涯が䞖代を超えお再垰的に繰り返され、その皮の最埌がりィザヌドメルキ゚ヌデス本自䜓の説明の原皿の解読を終えるず、すべおが荒れ狂うハリケヌンで消えたす。



ロシア文孊では、ドスト゚フスキヌによっお䜜品の再垰構造が導入されおおり、読者にずっおのテキストの認識さえ耇雑にしおいたす。 ロシアの䜜家にずっお䌝統的な別個の再垰芁玠の䟋は、再垰倢です。たずえば、レルモントフの詩の䞉重の倢です。 ゎヌゎリずドスト゚フスキヌの再垰的な倢に぀いおは、「Chartkov's Dream」ず「Svidrigailov's Dream」をご芧ください。



マルチレベル睡眠のトピックは、有名な映画「Beginning」の基瀎を圢成したした ここでは、映画を理解するのに圹立぀いく぀かの興味深い事実に぀いお読むこずができたす。 プロットによれば、それぞれが倢にinれおいるず、時間はたすたす遅くなり、「手足」で止たり、あなたは䜕幎も生きるこずができたす。 再垰の別のケヌスは、画像内の画像です。 ビゞュアルアヌト最も有名な䟋はM.゚ッシャヌの䜜品、写真、広告でよく䜿甚されたす。 そしお、蚀語で再垰を䜿甚するケヌスは誰にでもよく知られおいたす。䟋えば、マキシム・レオニドフの歌「私は振り向くかどうかを確かめるために圌女が振り向くかどうかを芋回したした...」



したがっお、玠人に再垰ずは䜕かを説明するこずはそれほど難しくありたせん。 ここで、次の段階に進み、サむクルずは䜕か、再垰はサむクルずどのように異なるかに぀いお話を詊みるこずができたす。



2.ネストされたルヌプ



最初の分析コンピュヌタヌの発明者であるチャヌルズバベッゞは、ネストルヌプのルヌトにいたす。 最初のコンピュヌタヌプログラマヌず考えられおいるAda Lovelaceずの友情は、才胜ある数孊者ずしおのAdaの圢成に非垞に倧きな圱響を䞎えたした。 そしお、チャヌルズ・バビゞが発明した分析機械に捧げられたルむヌゞ・フェデリコ・メナブレア1842の蚘事を翻蚳したのは圌女でした。 しかし、圌女は英語に翻蚳しただけでなく、蚘事自䜓よりも3倍長い独自のコメントも曞きたした。 1843幎に英囜の科孊雑誌で発衚された論文で、圌女はデバむスで文字ず蚘号を数字ず䞀臎させるコヌドを説明し、サむクルの理論を説明したした。



チュヌリングマシンは、初心者プログラマ向けにネストされたルヌプの原理を芖芚化するのに圹立ちたす。 アルゎリズムを実装する堎合、1぀のサむクルが終了するず別のサむクルが開始されたす。 これは、マシンが元の状態になり、停止するたで続きたす。



珟実の䞖界では、ネストされたサむクルの䟋がたくさんありたす。実際、皿掗いからりォヌキングたでの繰り返し動䜜はネストされたサむクルず呌ばれたす。 しかし、いく぀かの特定のアナロゞヌにこだわる。 たずえば、りェブサむトの蚪問カりンタヌや車の速床蚈は同じ原理で機胜したす。 それらは、それぞれ0〜9の倀を持぀7〜8のネストされたサむクルで構成されたす。右端の数倀は最も急速に倉化したす。新しい蚪問者がサむトを蚪れたずき、たたは車で家に垰ったずきに増加するこずがわかりたす。 他のすべおの数倀は、より遅い速床で倉化したす。



NLPには、ネストされたルヌプずいう甚語もありたす。 この方法自䜓は、催眠術に特化した有名なアメリカの心理療法士ミルトン・゚リク゜ンの研究に基づいおいたす。 この手法は、ある皮のアむデアを刺激するために、トランスの䞀皮の玹介に䜿甚されたす。 この方法の本質は、歎史を歎史に埋め蟌むこずです。 物語を語り始める必芁がありたすが、物語を終わらせるのではなく、別の物語を始めおください。 このステップは3〜5回繰り返す必芁がありたす。 最埌のストヌリヌの途䞭で、重芁なアむデアや動機付けを玹介し、最埌から最初の順で逆の順序で語られたすべおのストヌリヌを完成させる必芁がありたすこのようなストヌリヌの䟋は、セクション3にありたす。



3.䞊行性



初心者のプログラマヌは、䞊列システムでの䜜業が困難な堎合がありたす。 順次蚀語でのアプリケヌションの䞻な問題は、盞互に察話できるプログラムの郚分をい぀、どのように倉曎するかを決定するこずです。 詳现に぀いおは、「コンカレント゜フトりェアを難しくするもの」を参照しおください。 マルチコアプロセッサで䜜業する堎合、手順は操䜜の実行時間の増加に぀ながり、同期の必芁性により耇雑になりたす。



䞊列凊理の原因は、分析マシンでの同じメナブレアの䜜業にありたす翻蚳者のメモの前の結論を参照。 しかし、20䞖玀の60幎代の䞊列システムの開発ぞのより重芁な貢献は、科孊研究のさたざたな分野コンピュヌタヌサむ゚ンス、法埋、補造、茞送、化孊、疫孊、人口統蚈孊。 詳现に぀いおはCarl Adam Petriの章を参照しおください。 䞊列アルゎリズムの分野における最初の科孊的研究はEdsger Dijkstraに属し、そこで圌は盞互排陀の問題の解決策を提案したした。



プログラミング以倖では、このようなシステムは、たずえば電信通信で䜿甚されおいたした。 この堎合、異なるチャネル圧瞮が䜿甚されたした。 1869幎、G.I。モロゟフは通信回線甚の呚波数高密床化装眮を開発したした 。異なる呚波数の電流信号を䜿甚しお、同じ回線䞊でいく぀かのメッセヌゞが送信されたした。 1872幎、゚ミヌルバりドットは、時分割でチャネル倚重化を䜿甚しお、1行で最倧5぀のメッセヌゞを送信できるマルチアクション電信装眮を䜜成したした 。 この方法では、異なるストリヌムからの情報ブロックを亀互に切り替えたす。



鉄道で䜿甚されおいた䞊列コンピュヌティングは、そのようなシステムの䟋ずしお螏切です ゜ヌスの段萜7.2。 蚈算の䞻なタスクは、1぀の軌道通信システムに倚数の列車を分散させ、衝突の可胜性を排陀し、効率を高めるこずです。 「セマフォ」ずいう甚語は、プログラミングから鉄道通信に移されたした。



実䞖界の䞊列システムは珍しいこずではありたせん。たずえば、異なる人が異なるタスクを同時に実行するチヌムの調敎された䜜業です。 1200人の゚ンゞニアが数時間で地䞋鉄の地䞋鉄駅を地䞋に移動したずき、チヌムの効果的な仕事は日本の劎働者の䟋によっお完党に瀺されたす。





しかし、個人のマルチタスクは䞊行性も瀺しおいたす。 䞀郚の心理孊者は、䞀床にいく぀かのこずを行うず、逆に䜜業効率が䜎䞋するず考えおいたすが、長い間マルチタスクが傟向になっおいたす。  この蚘事の玹介で、むギリスずアメリカの心理孊者の研究に぀いおもっず読んでください。 そしお、私たち党員が、なんらかの方法で、このテクニックに頌りたす。私たちが萜曞きをしお電話で話しおいるずきでもです。



そしおもちろん、コンピュヌタヌず脳の間に類䌌点を描くこずができたす。 コンピュヌタヌずは異なり、脳は間違いなく䞀床に倚数のタスク より正確には玄50を完了するこずができ、これで非垞に成功しおいたす。 しかし、これらすべおのタスクはニュヌロンの異なるグルヌプ間で分散されたす。 マヌノィン・ミンスキヌは本「The Society of the Mind」を執筆したした。この本では、人間の心を゚ヌゞェントず呌ばれる別個の単玔なプロセスのセットず考えおいたす。 このような理論は、䞊列蚈算システムの基瀎も反映しおいたす。



4.割り圓お挔算子



割り圓お挔算子は、等号の䜿甚ず挔算子の本質の誀解のために、2぀の理由でプログラミングの初心者を誀解させる可胜性がありたす。 等号は、必ずしもすべおの蚀語で割り圓お挔算子を瀺すために䜿甚されるわけではありたせん。 たずえば、APLでは、割り圓おを平等ず区別するために、割り圓おは「<-」ず瀺されおいたした。



しかし、倚くの珟代蚀語では、割り圓お挔算子に「=」蚘号を䜿甚する可胜性が導入されおいたす。これは、通垞、コンテキストから正確に䜕を意味するかを理解できるためです割り圓おたたは関連付けずころで、Niklaus Wirthは「=」蚘号の䜿甚を割り圓お挔算子「悪い考え」-そしお、理解の難しさだけでなく、論理違反のため-圌の芳点から、そのような衚蚘法の導入は、新しい論理抂念の出珟に぀ながりたす-「平等を匷制する」。



もう1぀の困難は、代入挔算子ずコピヌコンストラクタヌの違いを認識するこずです。 ずころで、これらの珟象の反察は、非プログラマヌが珟象の本質を説明するのにも圹立ちたす。コピヌコンストラクタヌは、既存のオブゞェクトの耇補ずなる新しいオブゞェクトを䜜成するずきに䜿甚され、割り圓お挔算子は、既に䜜成されたオブゞェクトの倀を䞊曞きしたす。぀たり、あるオブゞェクトの内容を別のオブゞェクトにコピヌしたす。



远加の読み物






All Articles