私は SICP (コンピュータ プログラムの構築と解釈) から始めていました。 私は 1.5 章を読み終えた後、数学的すぎると感じた回想録で立ち止まり、そこから何を得ていたのかわかりませんでした。 それからその 1 年後、私は同僚であり、SICP がほとんど深遠であることに気付いたアナンド によって行われた ラムダ リトリート に参加しました。
それは、私が想像している機能の種類を変え、最近のレベルの視点を追加し、プログラミング言語の発明と実装に私を導いてくれました。 この SICP を読んでくださった方から、本当にたくさんのご意見をいただきました。 過大評価されていると感じる人もいれば、機能のイメージを変える人もいます.
あるレベルでは、以前は後者でした。 この投稿は、以前は確かだった本から盗み取らなければならなかったことを強調しています。 抽象化による複雑さの制御
これと次のレベルは、私にとって最大の盗みでした。 それは アッカーマン特性 に対する運動努力から始まりました。 まず、合計値を拡張することで、死んだ意図を単純化しようとしました。 パターンエレベートを見つけましたが、それが何をしていたかを学ぶのにしばらく時間がかかりました. 拡張は、主引数の値が増加するにつれて、ますます厳しくなっています。 次に、
A(m-1, n) を特性 として抽出しました。 f(n)そしてその後は簡単だった.ひとこと。 この抽象化を作成していなかったら、パターンを教えられるまでに非常に長い時間がかかっていたでしょう。 これは、プログラミングの合計時間で発生します。 互いに分離した 2 つの簡単なチャンクをキャプチャしないと、1 つの大きな複雑なつぶやきが生まれます。 その後、この怪物との商取引を発明しようとすると、決定的な式全体で戦い、最初に行ったすべての考えをやり直すようになります.抽象化のレイヤーを使用した構成可能なインストゥルメントの構築
として抽出しました。 f(n)そしてその後は簡単だった.ひとこと。 この抽象化を作成していなかったら、パターンを教えられるまでに非常に長い時間がかかっていたでしょう。 これは、プログラミングの合計時間で発生します。 互いに分離した 2 つの簡単なチャンクをキャプチャしないと、1 つの大きな複雑なつぶやきが生まれます。 その後、この怪物との商取引を発明しようとすると、決定的な式全体で戦い、最初に行ったすべての考えをやり直すようになります.抽象化のレイヤーを使用した構成可能なインストゥルメントの構築
抽象化のレイヤーを使用した構成可能なインストゥルメントの構築
重要なインストゥルメントは、それにレイヤーを生成します。 例として、データベース ガジェットは、ほぼ確実にファイル ガジェット層、エンジン層、およびクライアント インターフェイス層を生成する可能性があります。 最新の操作をエンジンに追加しようとしている場合、ファイル ガジェット レイヤーに何かを実装する必要はありません。 最近の操作で、現在のファイル ガジェット操作の半分を再実行できれば、はるかに優れています。 この流行では、エンジン ロジックとファイル ガジェット操作の重要な式の間でコンテキストを交換する必要はありません。 焦点レベルで最も注目を集めるには、はるかに簡単です.
+--------------------+ | インターフェース | +--------------------+ | エンジン | +--------------------+ | ファイルシステム | +--------------+
これ私たちの楽器がレイヤー間の循環的な依存関係を生まない場合、想像できる最も注目を集めるものです。 特定のオプションを作成して、ファイル ガジェット レイヤー ロジックのスコープを小さくし、ファイル ガジェット ステージの操作に最も注目を集めるようにする必要があります。 エンジン操作 X が形成する全体を
にすることが特に想定されている手順を実行するべきではありません。 。 ファイルガジェットレイヤーからアップライトインスツルメントに魔法をかけ、そのロジックを作成するのは、エンジンステージコードの責任である.
𝚆𝚊𝚝𝚌𝚑 𝙽𝙾𝚆 📺insert
エンジンでの操作は、ほぼ間違いなくほぼ間違いなく、1) 直立した Web サイトをまとめて最新のコンテンツを書き留める、2) ファイルをシリアル化するそのレイアウトに、3) そこに書き込みます。 ファイル ガジェットの半分は、ほぼ間違いなくほぼ間違いなく、フォーム 1 と 3 に API を次々と提示し、3 つすべてのロジックを 1 つのジョブに結合する Web サイトである可能性があります
その意図は、すべてのジョブに 1 つの責任があり、依存関係が適切に定義されていることです。 さらに、同一のファイル ガジェット プリミティブを再構築して、他の操作を実装することもできます。 ファイル ガジェット層にロジックを記述する場合、エンジン層の特定のロジックを気にする必要はありません。 私たちは、エンジン段階の操作がおそらくほぼ確実に機能する可能性のあるプリミティブを作成します。 どのプログラミング言語にも プリミティブ、抽象化の手法、混合の手法 の 3 つの公式があります。 抽象化のすべてのレイヤーは、意図的に、このようなものを次の抽象化レイヤーに提示する可能性があります。 Eval-Apply: 魔法使いの本の魔法
SICP の 隠しイメージ は、評価を保持するウィザードを提示します-地球に注意してください。 プログラミングがどのように達成されるかはマイルです。 評価は機能の組み合わせとして行われ、機能は批評の組み合わせとして行われます。 ユーティリティは再び機能のユーティリティを参照し、評価はベテラン ステートメントの評価を参照します。 組み合わせは、機能の有用性を通じて行われます。 プログラミングのコアが、最も注目を集める 2 つの手順で記述できることは驚くべきことです。受け取った値を引数として使用します。 評価は一連の機能です。
この本の終了までに、評価器を実装した後は、ほとんど簡単ではないと感じました。 最も注目を集めるいくつかの機能を実装した総合的なプログラミング言語。 この実装は、実際の抽象化と抽象化のレイヤーをボトムアップで構築することで導かれたという印象を回顧録に簡単に与えたと思います。 そのコンテキストなしで同じつぶやきをすることは、より洗練されたものになる必要がありました. プリミティブ、ミキシングのテクニック、そして抽象化のレイヤーを介して煩わしさを分解するエネルギーを提示します.