挏れのある抜象化の法則



「挏れのある抜象化の法則」を確立したテキストは2002幎に曞かれたした。なぜ私はそれをほが20幎埌に翻蚳するのですかそれはただその関連性を倱っおいないので、読む䟡倀がありたす。 TCPはこれ以䞊の代替手段を受け取っおおらず、挏掩抜象化の法則は開発者の生掻に定着しただけであり、公理になる危険性がありたす。本文に瀺されおいるすべおの時間枠を再蚈算したわけではないので、「タむムシフト」を考慮に入れおください。



それは私たちが毎日頌っおいるむンタヌネットの゚ンゞニアリングの魔法の重芁な芁玠です。この魔法は、むンタヌネットの基本的な構成芁玠の1぀であるTCPプロトコルにありたす。



TCPの䜿甚は、デヌタを確実に転送する方法です。明確にするために、ネットワヌクを介しおメッセヌゞを送信するずきにTCPを䜿甚するず、メッセヌゞが元の圢匏で確実に到着したす。



このプロトコルは、Webペヌゞの読み蟌みや電子メヌルの送信など、さたざたなタスクに䜿甚されたす。電子メヌルが送信されたずきに到着するのは、TCPの信頌性のためです。無駄なスパムだずしおも。



比范するず、別の信頌できないものがありたす、IPず呌ばれるデヌタ転送プロトコル。デヌタが配信されるこずを保蚌する人は誰もいたせん。 IPを䜿甚しお䞀連のメッセヌゞを送信する堎合、メッセヌゞの半分が配信されず、残りの半分がランダムな順序で送信されおも​​驚かないでください。さらに、䞀郚のメッセヌゞが小猿の画像に倉わる可胜性がありたす。たたは、メッセヌゞが読み取り䞍胜なゎミになる可胜性がありたす。



ここで本圓の魔法が起こりたす。TCPはIPベヌスです。぀たり、信頌性の䜎いツヌルのみを䜿甚しおデヌタを確実に配信するには、TCPが必芁です。 これが魔法である理由を明確にするために、珟実的な、倚少ばかげおいるずはいえ、人生のシナリオを考えおみたしょう。







ブロヌドりェむからハリりッドに俳優を掟遣する事業を行っおいるず想像しおみおください。私たちの責任には、党囜に俳優を茞送するこずが含たれたす。䞀郚の車がクラッシュし、俳優が死亡したす。俳優は途䞭で酔っおヘアカットをしたり、錻に入れ墚をしたりするかもしれたせん。そのため、圌はハリりッドで受け入れられなくなりたす。そしお最も重芁なこずは、厳密に定矩された順序でアクタヌを送信したす。各アクタヌは独自のルヌトで移動するため、ランダムな順序で送信されたす。



ここで、次のこずを保蚌するHollywoodExpressサヌビスを想像しおみおください。 b正しい順序で; c完党な状態。奇跡は、Hollywood Expressには、信頌できないこずを陀いお、俳優を転送する他の方法がないずいうこずです-車で。ハリりッド゚クスプレスは来るすべおの俳優をチェックし、圌の状態が䞍十分な堎合、サヌビスは俳優の故郷に電話し、同じ双子を送るように頌みたす。アクタヌがランダムな順序で到着した堎合、HollywoodExpressは元の順序を埩元したす。゚リア51に向かう途䞭の倧型゚むリアン船が墜萜しおネバダの高速道路を麻痺させたずしおも、俳優はルヌトを倉曎しおアリゟナを通過するだけで、ハリりッド゚クスプレスはカリフォルニアの生産者に事件に぀いお知らせたせん。プロデュヌサヌにずっお、すべおがこのようになりたすたるで俳優がい぀もより少し長く運転し、UFOのクラッシュがなかったかのように。



TCPはほずんど同じように機胜したす。これは、コンピュヌタヌサむ゚ンスの専門家が抜象化ず呌んでいるものです。これは、内郚で行われおいるはるかに耇雑なものの単玔化です。プログラミングのほずんどは、抜象化の構築に関するものです。文字列ラむブラリずは䜕ですかこれは、文字列の操䜜を数字の操䜜ず同じくらい簡単で䟿利にする方法です。ファむルシステムずは䜕ですかこれは、ハヌドドラむブを、特定の堎所にビットを栌玍する回転する磁気プラッタのセットずしおではなく、デヌタを含むファむルを含むディレクトリの階局構造ずしお考える方法です。



しかし、TCPに戻りたす。 TCPがどのように機胜するかを理解しやすくするために、少し装食を斜したした。そしお、私はそのような単玔化がいくらかを癜熱させるこずができるこずを理解しおいたす。 TCPはメッセヌゞ配信を保蚌するず蚀いたした。そうではありたせん。ペットがコンピュヌタのネットワヌクケヌブルをかじるず、IPパケットはそのケヌブルに到達しなくなりたす。 TCPの努力に関係なく、メッセヌゞは配信されたせん。瀟内のシステム管理者に倱瀌で、過負荷のハブに接続しお眰するこずにした堎合、IPパケットの䞀郚のみが到達したす。この堎合、TCPは機胜したすが、非垞に遅くなりたす。



これは私がリヌクのある抜象化ず呌んでいるものです。..。TCPは、信頌できないネットワヌクから私たちを抜象化しようずしたすが、ネットワヌクが抜象化を「流れる」こずがあり、抜象化によっお救えないものに出くわすこずがありたす。これは、私がリヌク抜象の法則ず呌んでいるものの䞀䟋にすぎたせん。

自明でない抜象化はやや挏れがありたす。
抜象化は厩壊したす。時には少し、時にはたくさん。これは穎、挏れず呌ばれたす。蚈画通りに進たない。これは、抜象化が䜿甚されるすべおの堎所で発生したす。ここではいく぀かの䟋を瀺したす。



  • : . « », — . , . , , , , .
  • SQL , . , , , . SQL- , . , «where a=b and b=c and a=c» , «where a=b and b=c» . , , . , . , , .
  • NFS SMB , . , . « , ”. . ( ), .forward ( ), .forward . , .
  • , ++ . , , , . ++ +, s + “bar” . ? , , , “foo” + “bar”, ++ char*. , . (, ++ . — .)
  • , , , , , . . , , . .


挏れのある抜象化の法則から、抜象化は私たちの生掻を私たちが望むほど単玔化しないずいうこずになりたす。私がC ++を教えるずき、char *デヌタタむプずポむンタ挔算に぀いお話すのは避けたいず思いたす。すぐにSTLに぀いお話すのは玠晎らしいこずですが、ある日、孊生は「foo」+「bar」ず曞いお怖くなるので、char *に぀いお話さなければなりたせん。たたは、い぀かOUTLPTSTR匕数を䜿甚しおWindowsAPI関数を呌び出そうずしたすが、char *、pointers、unicode、wchar_t、TCHAR、および抜象化によっおリヌクするすべおに぀いお孊習する必芁がありたす。



COMComponent Object Model-箄Transl。を䜿甚しおプログラミングする堎合、VisualStudioヘルパヌずコヌド生成のすべおの魔法をすぐに孊ぶこずができれば䟿利です。しかし、少なくずも䜕かがうたくいかない堎合、プログラマヌは䜕が起こったのか、どこで゚ラヌを探すのか、そしおそれをどのように修正するのかに぀いお少しも理解しおいたせん。そしお、私はIUnknown、CLSID、ProgIDSに぀いお話さなければなりたせん...ああ、人類



ASP.NETを教えるずきは、オブゞェクトをダブルクリックしお、ナヌザヌがオブゞェクトをクリックしたずきにサヌバヌ䞊で実行されるコヌドを䜜成するようにトレヌニングするこずをお勧めしたす。本質的には、ASP.NETは、ハむパヌリンクのクリックを凊理間の差をなくしAボタンのクリックを凊理したす。しかし、ここに問題がありたす。HTMLでは、ハむパヌリンクをクリックしおフォヌムを送信するこずはできず、ASP.NET開発者はこの問題を非衚瀺にする必芁がありたした。圌らは、onclickハむパヌリンクハンドラヌで耇数行のJavaScriptコヌドを生成するこずにより、問題を解決したした。しかし、それでも、これは抜象化の穎です。゚ンドナヌザヌに察しおJavaScriptが無効になっおいるず、ASP.NETは正しく機胜せず、ASP.NETが䜕を抜象化しおいるかを認識しないアプリケヌションプログラマヌは、䜕が起こったのかを理解できたせん。



Leaky Abstractionsの法則によれば、誰かが私たちの効率を劇的に改善する玠晎らしい新しいコヌド生成を思い぀いたずき、「最初に自分でそれを行う方法を孊び、次にこのツヌルを䜿甚しお時間を節玄する」ず聞くでしょう。コヌド生成ツヌルは、䜕らかの方法で抜象化を䜿甚したすが、もちろん、それは穎でいっぱいです。そしお、すべおの穎に察凊する唯䞀の方法は、抜象化がどのように適甚され、それらが正確に䜕を隠しおいるかを知るこずです。したがっお、抜象化によっお䜜業の時間は節玄されたすが、孊習の時間は節玄されたせん。



逆説的ですが、より優れた抜象化を備えた高レベルのツヌルを発明するたびに、プロのプログラマヌになるこずはたすたす難しくなりたす。



Microsoftでの最初のむンタヌンシップ䞭に、Macintoshで文字列を操䜜するためのラむブラリを開発したした。兞型的なゞョブの䟋を次に瀺したす。newlineの終わりぞのポむンタを返すバヌゞョンのstrcatを蚘述したす。ほんの数行のCコヌド。私がしたこずはすべお、Cプログラミング蚀語に関する1冊の薄い本であるKRから盎接出たものでした。



その埌、CityDesk2016幎に閉鎖された䌚瀟-箄Transl 。に就職したした。ここで、Visual Basic、COM、ATL、C ++、InnoSetup、Internet Explorerの内郚、正芏衚珟、DOM、HTML、CSS、およびXMLに぀いお知る必芁がありたす。これらはすべおKRのものず比范しお高レベルの楜噚ですが、それでもすべおのKRのものを知る必芁がありたす。



10幎前は、新しいプログラミングパラダむムによっお、今では開発が容易になるず想像できたした。実際、数十幎にわたっお䜜成した抜象化により、GUI開発やネットワヌキングの堎合のように、10〜15幎前には屈服しなかった新しいレベルの耇雑さに簡単に察応できたす。そしお今では、オブゞェクト指向のフォヌム察応蚀語など、非垞に迅速に䜜業を行うこずができる優れたツヌルがたくさんありたす。ある日たで、抜象化が「挏れる」ずいう問題に盎面し、解決するのに2週間かかりたす。 VBコヌドのみを実行するためにVisualBasicプログラマヌを雇う必芁がある堎合、これは最善のアむデアではありたせん。そのようなプログラマヌは、VisualBasicの抜象化の穎に出くわすたびに立ち埀生するからです。



挏れのある抜象化の法則は私たちを底に匕き寄せおいたす。



All Articles