عينك بارعة جدًّا في القراءة، وسيّئة جدًّا في المقارنة. تملأ ما تتوقّعه، وتقفز فوق الكلمات المكرّرة، وتنزلق فوق رقم تغيّر في فقرة قرأتها أربع مرّات. هذه هي الآلية نفسها التي تجعل تدقيق كتابتك بنفسك صعبًا إلى هذا الحدّ، وهي لا تتحسّن بالجهد.
أداة المقارنة صفاتها معاكسة. لا تستطيع القراءة إطلاقًا، ولا تقفز أبدًا.
ما الذي تحسبه المقارنة فعلًا
السؤال الذي تجيب عنه المقارنة ضيّق ودقيق: ما أقصر مجموعة إدراجات وحذوفات تحوّل النص الأول إلى الثاني؟
تعمل بإيجاد أطول متتالية مشتركة بين النسختين — ليست متّصلة بالضرورة — ومعاملتها عمودًا فقريًّا لم يتغيّر. كل ما في النص الأول وليس على العمود فقد حُذف؛ وكل ما في الثاني وليس عليه فقد أُضيف.
هذه الصياغة تفسّر معظم السلوك المفاجئ. المقارنة لا فكرة لديها عن الجملة، ولا عن الفقرة، ولا عن المعنى. تعرف أي القطع يشترك فيها الجانبان.
لماذا تبدو الفقرة المنقولة إعادة كتابة
انقل فقرة من الصفحة الأولى إلى الثالثة، تبلّغ المقارنة عن حذف كبير وإضافة كبيرة، لأن أقصر سلسلة تحرير هي فعلًا حذفها من مكان وإدراجها في الآخر. لا توجد عملية اسمها «نقل».
بعض الأدوات تكشف النقل بعد ذلك بملاحظة أن كتلة محذوفة تطابق كتلة مدرَجة، فتعرضها نقلًا. تلك طبقة تفسير مضافة فوق، ويستحق أن تعرف أي سلوك أمامك، لأن أداة بلا هذه الطبقة ستُظهر مستندًا أُعيد تنظيمه وكأنه أُعيدت كتابته بالكامل.
بالسطر أم بالكلمة أم بالمحرف
المقارنة بالسطر تعامل كل سطر وحدةً. غيّر كلمة واحدة يُعلَّم السطر كلّه. هذا صحيح في الشفرة، حيث السطر وحدة ذات معنى، وغير نافع في النثر، حيث تكون الفقرة غالبًا سطرًا واحدًا طويلًا جدًّا — أصلح خطأً مطبعيًّا واحدًا تبلّغ الأداة عن الفقرة كلّها متغيّرة.
المقارنة بالكلمة تبرز الكلمات التي تحرّكت وتترك الباقي. في مسوّدتين من المستند نفسه، هذا ما تريده في كل مرة تقريبًا.
المقارنة بالمحرف تمضي أدقّ من ذلك، وهي نافعة في رقم مرجعي أو قيمة hash حيث يهمّ رقم واحد، وتنتج قصاصات ملوّنة في كل ما هو أطول.
مقارنة النصوص التي تدعك تختار أثمن من واحدة تختار عنك، لأن الدقّة الصحيحة تتوقّف كلّيًّا على ما تقارنه.
حين تقول إن كل شيء تغيّر
هذه أكثر الشكاوى، والسبب لا يكاد يكون الأداة أبدًا.
نهايات الأسطر. Windows ينهي السطر بمحرفين، وUnix بمحرف واحد. الملف الذي سافر بينهما يختلف في كل سطر بشيء لا تراه. هذا يفسّر الأغلبية العظمى من «المقارنة معطّلة».
مسافات في آخر السطر. محرّر يقصّ أطراف الأسطر عند الحفظ، تقارن مخرجاته بمخرجات محرّر لا يفعل.
Tab والمسافات. جانب أُعيدت إزاحته.
محارف غير مرئية. مسافات غير فاصلة من برنامج معالجة نصوص، أو علامة ترتيب بايتات في أول أحد الملفين — عائلة المشكلة نفسها التي تكسر البحث.
الأربعة تُحلّ بالطريقة نفسها: وحّد الجانبين أولًا. مرّر كلًّا منهما على منظّف مسافات، ثم قارن. فإن اختفت الضوضاء، فقد عرفت ما كان الفرق فعلًا.
ما لن تخبرك به
المقارنة لن تخبرك هل التغيير مهمّ. نصّان بينهما كلمة واحدة مختلفة قد يختلفان في المعنى كلّه — shall وmay في عقد — ونصّان بينهما مئة فرق قد يقولان الشيء نفسه بترتيب مختلف.
ليست كذلك مقياس تشابه ولا فحص انتحال. تجيب عن «ما التحريرات التي تصل بين هذين»، والمستند الذي أُعيدت صياغته كلّه سيظهر متغيّرًا بالكامل تقريبًا وهو في جوهره العمل نفسه.
الحالات التي تبرع فيها
عقد أو اتّفاقية عادت بتعديلات. الاستعمال الكلاسيكي، وهو الذي تفشل فيه العين أغلى فشل. مقارنة بالكلمة، مع توحيد الجانبين أولًا.
تصديران للبيانات نفسها، لترى ما غيّرته عملية ما. مقارنة بالسطر، مع الترتيب أولًا إن كان الترتيب بلا معنى — وإلا أغرقت إعادة الترتيب الفرق الحقيقي.
إعداد كان يعمل وآخر لا يعمل. مقارنة بالسطر، والجواب ظاهر فورًا عادةً.
مسوّدتان من كتابتك أنت، لترى ما فعله المحرّر. مقارنة بالكلمة.
في كل واحدة من هذه، المُدخَل شيء تفضّل ألّا تلصقه في موقع يعالجه على خادم، وهذا سبب وجيه لفعلها في المتصفّح: العقود والإعدادات هي بالضبط المستندات التي تنشأ لها هذه المشكلة.
الخلاصة
وحّد الجانبين قبل المقارنة، وإلا أخفت نهايات الأسطر الجواب. اختر المقارنة بالكلمة للنثر والمقارنة بالسطر للشفرة. توقّع أن تظهر الكتلة المنقولة حذفًا وإضافةً، لأن هذا ما هي عليه.
لا تقرأ النسختين بنفسك لتتحقّق من الأداة. ذلك هو الشيء الذي تعرف أصلًا أنه لا ينفع.