ثمة إغراء يصاحب اكتشافنا أن بعض ما نؤمن به قد لا يكون صحيحاً: إغراء الهدم. أن نتخلص من كل شيء ونبدأ من الصفر. يمثل الشك الديكارتي، كما يُتداول في صورته الشائعة، أحد أبرز التعبيرات الفلسفية عن هذا الإغراء؛ ماذا لو كان كل ما نعلمه غير موثوق؟ ألا يكون حينها من الأجدى أن نهدم البناء، ونقيم أسساً جديدة؟
بحكم عملي في هندسة البرمجيات، حيث ألحظ تقاطعات بين بعض المفاهيم والممارسات البرمجية وبين نشاطاتنا الذهنية والحياتية، أميل إلى التفكير في المسألة من زاوية أخرى.
في البرمجة، لا يحتاج كل نظام معقد إلى إعادة كتابة من الصفر، وليس كل كود رديء كوداً لا يعمل. بل إن بعض أكثر الأنظمة تعقيداً ورداءة في بنيتها الداخلية تؤدي وظائفها المطلوبة بكفاءة مقبولة منذ سنوات. المشكلة تبدأ حين نحاول فهمها أو تطويرها. حينها نكتشف أننا أمام نظام لا نعرف بالضبط كيف وصل إلى هذه الحالة، ولماذا، مثلاً، تعتمد وظيفة بسيطة فيه على عشرات الأجزاء الأخرى بشكل متداخل.
لدينا في هندسة البرمجيات ممارسة تسمى Refactoring، وسأستخدم للتعبير عنها في هذا المقال لفظ «الريفاكتور». لا لأنني أفضّل التعريب على الترجمة، وإنما لأن «إعادة الهيكلة»، وهي الترجمة الشائعة، لا تنقل جميع دلالات المفهوم، على الأقل في الفضاء التقني. وقد وجدت مقترح «السبك» جميلاً، لكنه لم يستقر بعد في الاستخدام.
الريفاكتور، باختصار أولي، هو أن نعيد تنظيم النظام من الداخل دون أن نغير سلوكه الخارجي. فلا نكون بصدد إضافة شيء جديد، بل جعل الموجود أكثر وضوحاً وأقل تشابكاً، بحيث لا تتحول كل محاولة لتطويره إلى مغامرة مجهولة العواقب.
ما يهمني هنا ليس مجال البرمجيات بحد ذاته، بل السؤال الذي أثاره مفهوم الريفاكتور لدي حول إمكانية قيامنا بشيء مشابه مع أفكارنا. أي أن نراجع البنية التي تنتج أحكامنا، ونفكك ارتباطاتها الشائكة. وربما نتخلص من الزوائد التي إن تلاشت لا يختل المعنى. ذلك كله دون أن نضطر في كل مرة إلى مواجهة محتدمة مع ذواتنا.
هذه المساءلة ليست اختراعاً، بل هي نشاط أصيل في عقولنا. ولطالما كانت مراجعة الأفكار وفحص مقدماتها من الانشغالات الأساسية للفلسفة والمنطق. وهي كذلك جزء مما نسميه اليوم التفكير النقدي. ولست بصدد تقديم شرح أكاديمي لهذه الممارسات أو اقتراح بديل عنها. إنما أحاول استعارة مفهوم من واقعي المهني، والنظر في جدواه حين أنقله إلى طبيعة الأفكار، وفي حدود ما تسمح به هذه الاستعارة.
ما الريفاكتور أصلاً؟
في تعريفه التقني، الريفاكتور هو تعديل البنية الداخلية للكود مع المحافظة على سلوكه الخارجي. وهو التعريف الذي أسهم مارتن فاولر في تأصيله منهجياً في كتابه المعروف عن الموضوع.
لنفترض أن لدينا برنامجاً يحتوي على دالة تتولى عشرات المسؤوليّات، من ضمنها حساب عدد الذين شاهدوا منشورك. لكن هذه الدالة تؤدي مهام أخرى أيضاً، وتتداخل فيها شيفرات متكررة واعتماديات متشابكة. من وجهة نظر هندسة البرمجيات، فإن التعديل عليها ينطوي على مخاطرة، إذ إن تغيير سطر واحد، أو استثناء المشاهدات المتكررة مثلاً، قد يؤثر في وظائف أخرى تعتمد عليها.
هنا يأتي دور الريفاكتور؛ حيث يمكن أن نعيد توزيع المسؤوليات عبر تفكيك الدالة إلى دوال أصغر، وإعادة تنظيم العلاقات بين المكونات وتقليل الاعتماديات المتشابكة. هذه العملية استثمار في الوقت، يكون عائدها غالباً في المستقبل، حين يعود المبرمج إلى الكود لتصحيح خطأ أو إضافة خاصية جديدة، فيحتاج إلى جهد أقل لفهمه وتعديله. أما المستخدم، فلن يلاحظ اختلافاً في سلوك البرنامج.
ينبغي كذلك التفريق بين الريفاكتور وإعادة الكتابة الشاملة Rewrite، حيث يُفترض أن النظام القديم بلغ من السوء حداً يجعل البدء من الصفر خياراً أفضل. وهذا ممكن أحياناً، وضروري في أحيان أخرى. لكنه ليس قراراً سهلاً، فقد يخبئ الكود القديم في داخله، مهما بدا مشوهاً، سنوات من الحلول والاستثناءات التي فرضتها مشكلات واقعية ومتطلبات ضرورية لم توثق بالشكل المطلوب. وحين نقرر التخلص منه، قد نتخلص أيضاً من معرفة لم نكن نعرف أنها موجودة أصلاً.
في البرمجة، المحافظة على السلوك الخارجي شرط أساسي للريفاكتور. أما في العملية الفكرية، فقد يكون تغيير السلوك الإنساني نفسه نتيجة مرغوبة لمراجعة الأفكار. ولذلك فإن استعارة المفهوم لا تعني نقله بحرفيته، وإنما الاستفادة من منطقه في إدارة التغيير والنظر إلى الأفكار.
الدّين المعرفي: كيف نرث ما لم نكتبه
لا أحد منا يبدأ حياته بوعي مستقل، أو يصل إلى وعيه الحالي باستقلال تام، مهما أحببنا أن نصدق ذلك. فقبل أن نتمكن من صياغة سؤال واحد، نكون قد تلقينا عشرات النصائح والتوجيهات وربما الإجابات. نحن نتعلم أسماء الأشياء وكيف ننظر إلى مختلف القضايا والمعتقدات، ونرث أحكاماً مسبقة عن الخير والشر، ونتلقى معلومات لم نخضعها للفحص. وغالباً ما نصل إلى مرحلة نظن فيها أن نظامنا المعرفي كامل ومستقل.
يشبه ذلك إلى حد بعيد ما نسميه في البرمجة Legacy Code، أي الكود الموروث أو القديم، الذي قد يكون بلا اختبارات أو توثيق كافٍ. غالباً ما يكون نظاماً لم نكتبه، لكننا نستخدمه ونعتمد عليه، ونضطر إلى تعديله والإضافة إليه. يكون بعض أجزائه واضحاً، وبعضها الآخر يعمل دون أن نفهم تماماً لماذا صُمم بتلك الطريقة. فهل نحن مختلفون كثيراً؟ يمكن لأي منا أن يسأل نفسه عن مصدر واحدة من قناعاته القديمة، لا عن مبرراتها التي يستطيع تقديمها الآن، بل عن مصدرها الأول؛ كيف دخلت إلى رأسه؟ هل قرأها؟ هل سمعها؟ هل اختبرها؟ أم أنها كانت حاضرة منذ وقت قديم إلى درجة أنه لم يعد يميز بينها وبين ما توصل إليه بنفسه؟
جميعنا لدينا قدر من هذا التراكم غير المفحوص، والذي أسميه «الدَّين المعرفي» قياساً على الدَّين التقني في هندسة البرمجيات. وأسميه دَيناً، لا لمجرد أننا نمتلك قناعات لم نفحصها، بل لأننا نستمر في البناء على هذه القناعات، حتى تصبح مراجعتها لاحقاً تمثل كلفة حقيقية. هذا لا يعني أن كل فكرة موروثة خاطئة أو أن علينا اختبار كل شيء بأنفسنا. هذا غير ممكن أصلاً، فقدر هائل من معرفتنا يقوم على الثقة بالآخرين وعلى معرفة اجتماعية لا يمكن الاستغناء عنها. لكن تبدأ المشكلة حين ننسى أن بعض ما نعتقد في صحته أو نظن أننا نعرفه، لم نخضعه للفحص قط.
لسنوات طويلة كنت أحمل انطباعاً بأن الشعب الياباني شعب عنصري. لا أتذكر متى تشكل هذا الانطباع ولا من أين جاء. ربما من رواية شخص آخر أو صورة نمطية شائعة، أو ربما من سوء فهم للاختلافات الثقافية. والأغرب أنني لم ألتقِ يابانياً واحداً في حياتي يسمح لي بتكوين مثل هذا الحكم. ومع ذلك، كان الحكم موجوداً وجاهزاً للاستدعاء دون رقابة. في أحد النقاشات صرحت بهذا الحكم، فسُئلتُ: كيف عرفت؟ لم تكن عندي تجربة ولا دليل. حينها اضطررت لمساءلة نفسي: ما دليلي؟ لم أجد شيئاً يتناسب مع اتساع التعميم. لا يعني هذا أن العنصرية غير موجودة في المجتمع الياباني أو غيره، كما لا يعني نقيضه أيضاً. المسألة أنني كنت أمتلك حكماً على شعب كامل دون أساس معرفي يبرر امتلاكه. وما حدث هنا يدخل فيما يُعرف بـالانحيازات المعرفية: أحكام تستقر في الذهن عبر الصور النمطية والروايات المتداولة، فتبدو لنا معرفة وهي لم تمر بأي فحص.
أسقطت الحكم ببساطة. لم أحتج إلى تغيير منظومتي الأخلاقية أو إعادة بناء تصوري عن البشر، بل إلى الاعتراف بأن قناعة واحدة لا تستحق المكان الذي تحتله في منظومتي المعرفية. ولعل في وعينا أحكاماً كثيرة تعمل بالطريقة نفسها، لا لأنها صحيحة، بل لأننا لم نفحص كيف استقرت هناك.
تتضح كلفة الدَّين التقني حين نضطر إلى تعديل ما بنيناه. فقد نتخذ قرارات سريعة ومعقولة في وقتها، ثم نستمر في البناء عليها إلى درجة تصبح معها المراجعة اللاحقة أكثر كلفة وتعقيداً. وقد يحدث شيء مشابه مع الدَّين المعرفي.
كثيراً ما نحتاج إلى أجوبة سريعة، وترافقنا هذه النزعة منذ طفولتنا، مدفوعين بفضول أو قلق، وهذا أمر جيد. فالأجوبة السهلة أو السريعة ليست هي المشكلة دائماً، بل كيفية تعاملنا معها والبناء عليها؛ فنحن نتلقى الإجابات ممن نثق بهم، خصوصاً تلك التي تساعد في طمأنتنا أو إشباع ذلك الفضول، ثم نبني عليها لسنوات لاحقة. وقد تصبح هذه الإجابات نفسها مقدمات لأحكام أخرى، ثم تتحول تلك الأحكام إلى مواقف وعلاقات، وربما إلى مبادئ وقرارات مصيرية. وهذه العملية طبيعية، لكن إن تواصلت بلا فحص، وسمحنا لتلك الإجابات الجاهزة بأن تصبح جزءاً من تعريفنا لأنفسنا، وربما أساساً لأيديولوجيا نعتنقها، حينها قد تصبح كلفة مراجعتها باهظة جداً.
فلو أن شخصاً بنى تصوره الكامل عن الأخلاق على صدق سلطة دينية أو فكرية بعينها، ماذا يحدث حين يكتشف خللاً جوهرياً في هذه السلطة؟ من الناحية المنطقية، سقوط مصدر معين لا يستلزم سقوط كل قيمة ارتبطت به. فالصدق لا يفقد قيمته لمجرد أن من علمنا الصدق ثبت أنه كاذب. لكن النظام الداخلي لهذا الشخص قد لا يكون قادراً على الفصل بين المصدر والقيمة. وقد ارتبطا في ذهنه عقوداً إلى درجة أن سقوط أحدهما يبدو له كسقوط الآخر. هنا بالذات تظهر كلفة عدم مراجعة الدَّين المعرفي، خصوصاً الاعتماديات المتشابكة فيه. والمدهش فينا أننا قد ندافع عن هذه البنية بحماس منقطع النظير، لا لأننا اختبرناها واكتشفنا متانتها، بل ربما لأننا نخشى النتائج المترتبة على انهيارها دفعة واحدة. وهذا ما يجعل الاستدلال نفسه موضع نظر: فحين نبني الحكم على مقدمة لم نفحصها، تبقى النتيجة معلقة على ما لا نعرف حاله.
العبء المعرفي: لماذا نؤجل المراجعة؟
ثمة جانب آخر للمسألة يتعلق بحدود قدرتنا على معالجة المعلومات، وبالتالي بكلفة المراجعة نفسها. ممكن أن ننظر إلى هذا الجانب من خلال نظرية العبء المعرفي التي قدمها جون سويلر في علم النفس المعرفي والتي تنطلق من محدودية سعة الذاكرة العاملة؛ وهي المساحة الذهنية المؤقتة التي نحتفظ فيها بالمعلومات ونعالجها أثناء التفكير أو حل المشكلات. وهذا يعني أن جزءاً من جهدنا العقلي قد يُستهلك في فهم طريقة تنظيم المعلومات، بدلاً من معالجة المسألة التي نحاول حلها.
حين أفتح مشروعاً برمجياً قديماً لأفهم وظيفة بسيطة موزعة على عشرات الملفات، لا يذهب جانب كبير من جهدي إلى حل المشكلة نفسها، بل إلى تتبع العلاقات بين الأجزاء المتشابكة: من يستدعي من، وأين تتغير القيم والبيانات، ولماذا تتوقف وظيفة ما إذا عدلت شرطاً يبدو غير مرتبط بها. المشكلة هنا ليست في صعوبة الوظيفة، بل في البنية التي تسمح للنظام بأدائها.
وأظن أن شيئاً مشابهاً يحدث حين نحاول مراجعة قناعة متشابكة مع غيرها. فالمراجعة لا تقتصر على سؤال «هل هي صحيحة؟»، بل تستدعي كل ما ارتبط بها، وهذا مكلف ذهنياً. ولعل هذا التعقيد أحد الأسباب التي تجعل مراجعة بعض القناعات أمراً مكلفاً، إلى جانب ما قد يرتبط بها من اعتبارات نفسية واجتماعية. وهذا قياس يساعد على تصور المسألة، لا نتيجة تجريبية تثبت أن القناعات تعمل بالطريقة نفسها التي تعمل بها المعلومات في الذاكرة العاملة.
متى نحتاج إلى ريفاكتور معرفي؟
لحسن الحظ، لا يوجد نظام أو جهاز يفحص القناعات ويخبرنا أيها يحتاج إلى إعادة فحص. إذ لو وجد، لشككنا بداية في أسسه، ولاختلفنا على تفسيراته المركزية. لذا، ليس هذا المطلوب. ما نحتاجه هو تطوير قدرتنا على فحص القناعات. لا أريد لهذا المقال أن يتحول إلى مجموعة استعارات، لكنني مضطر لاستحضار مفهوم آخر من عالم هندسة البرمجيات، وهو ما يعرف بروائح الكود Code Smells.
وهي إشارات تدعونا إلى إعادة النظر في التصميم؛ مثل دالة طويلة جداً، أو أجزاء مكررة، أو شروط تتفرع وتتشابك حتى يصعب توقع أثر تعديل أحدها. وأظن أن من قناعاتنا ما يستحق وقفة مشابهة. كأن نجد فكرة واحدة تتولى تفسير كل شيء لنا تقريباً: السياسة، والأخلاق، وفشلنا الشخصي، ونجاح الآخرين. كلما سألناها عن شيء أعادت إلينا الإجابة نفسها. يشبه ذلك دالة حُمّلت من المسؤوليات أكثر مما ينبغي. والسؤال الذي يمكن أن نطرحه عليها: ما الذي كان يمكن أن يحدث في العالم ولا تستطيع تفسيره؟ فإن لم نجد نتيجة ممكنة تستدعي مراجعتها، فعلينا أن نسأل عما تفسره فعلاً، وعما تكتفي بإعادة تسميته بعد حدوثه.
وحين نفسر كل اعتراض على ما نقول بالحسد أو الجهل، مثلاً، نكون قد وفرنا على أنفسنا عناء قراءة الاعتراض، لكننا لم نعرف بعد إن كان صاحبه قد أصاب في شيء. والسؤال هنا: لو جاء الاعتراض نفسه من شخص أحترمه، هل كنت سأقرؤه بالطريقة ذاتها؟ وقد نمارس شيئاً قريباً من تكرار الكود حين نستنكر التعميم إذا أصاب جماعتنا، ثم نستخدمه بلا حرج في الحكم على جماعة أخرى. والاختبار هنا بسيط: أن أبدل الجماعتين في الجملة وأرى إن كنت ما زلت أقبلها.
لكن الاعتماديات المفرطة تظل، في رأيي، أكثر ما يستحق الانتباه. ليس لأن أفكارنا ينبغي أن تكون منفصلة؛ فالاستدلال نفسه يقوم على وصل القضايا بعضها ببعض. المشكلة أن نربط أشياء لا يلزم أحدها عن الآخر، ثم نعيش هذا الربط كما لو كان ضرورة. صحة الفكرة ومكانة صاحبها، مثلاً. أو قيمة الإنسان وانتماؤه. أو وفائي لعائلتي واستمرار موافقتي على كل ما تعلمته منها. والسؤال هنا: لو سقط أحد الطرفين، هل يسقط الآخر فعلاً، أم يبدو لي ذلك لأنني لم أفصل بينهما قط؟ في البرمجة، نحاول أحياناً فصل مكونين حتى نتمكن من تعديل أحدهما دون إفساد الآخر. وفي حياتنا، قد نحتاج إلى شيء من هذا الفصل حتى نستطيع الاعتراض دون أن نشعر بأننا نخون أحداً.
أما تكديس الاستثناءات فله شأن آخر. تظهر معلومة لا تنسجم مع القناعة، فنضيف تفسيراً جانبياً. ثم تظهر أخرى، فنضيف شرطاً. وليس في ذلك خطأ بالضرورة؛ ربما لم يكن تصورنا الأول دقيقاً بما يكفي. لكن قد نصل بعد سنوات إلى بناء يستطيع استيعاب كل شيء، بما في ذلك ما يفترض أن يناقضه. ينجح شخص فنقول إنه استحق النجاح لفضيلته، ويفشل فنقول إنه يُمتحن لفضيلته نفسها. عندها، ما الذي عرفناه فعلاً عن العلاقة بين الفضيلة والنجاح؟ وما الذي كان يمكن أن يحدث فنضطر إلى مراجعة قولنا؟
ليست هذه المؤشرات أدلةً حاسمةً على فساد القناعات، فربما تكون ارتباطاتها بغيرها سليمة، لكنها أسبابٌ كافيةٌ للتوقف عندها وفحص أسسها. وبذلك، لا يكون السؤال الأهم: كم تناقضاً أستطيع اكتشافه في أفكاري؟ بل: ما الذي سأفعله حينها؟ هل سأكون مستعداً لمراجعة القناعة نفسها؟ أم سأكتفي بإعادة ترتيب مبرراتها حتى تبدو أكثر اتساقاً؟
وماذا بعد؟
لنعد إلى الشخص الذي اكتشف كذب السلطة التي بنى عليها تصوره الأخلاقي. قد يصعب عليه حتى تسمية الشيء الذي فقده: هل ثقته بإنسان؟ أم بمصدر للمعرفة؟ أم بالمعايير التي عاش وفقها؟ وقد يختصر هذا الاضطراب كله بعبارة: «كنت مخدوعاً في كل شيء»، وهي عبارة تبدو نتيجة طبيعية لكلفة الدين المعرفي، لكنها بالطبع أوسع من الاكتشاف ذاته.
في هذا الموقف، يمكن أن نضع أمامنا ثلاث قضايا: هذا الشخص صادق؛ هذا الشخص علّمني أن الصدق فضيلة؛ الصدق فضيلة. يبدو الفصل سهلاً حين نكتبها على الورق. أما حين تتداخل مع سنوات من التربية والعلاقات والخوف، فقد يبدو مجرد محاولة الفصل هدماً تاماً لكل ذلك.
يمكن أن نبدأ العمل من هنا: ما الذي ثبت بطلانه تحديداً؟ وما الذي كنت أقبله اعتماداً على هذا المصدر وحده؟ وهل لكل ما أريد التخلي عنه السبب نفسه؟ قد أكتشف أن بعض القيم لها أسباب مستقلة لم أفكر فيها من قبل، وأن بعض الأحكام لا أملك لها ما يكفي من الأدلة، أو ربما هناك حكم ثالث كان خاطئاً بالفعل. ما أقصده أنه من غير المنصف التعامل مع جميع هذه الأشياء كحزمة واحدة، أو أن تكون نتيجة المراجعة واحدة لها كلها.
ولهذا، أجد أن تعليق الحكم خطوة لا نعطيها حقها. في حكمي على اليابانيين، لم تكن مهمتي أن أنتقل فوراً إلى إثبات أنهم متسامحون. فهذا تعميم آخر يحتاج إلى ما يبرره أيضاً. فكان من الأجدر أن أتوقف عن استخدام حكم لا أعرف كيف وصل إليّ ولا أملك ما يكفي للدفاع عنه.
ومع ذلك، لن يصبح التفكير سليماً لمجرد أنني تعلمت تقسيم الأفكار وإعادة تسميتها. قد أنجح في ترتيب اعتقاد خاطئ ترتيباً أفضل، بحيث يصبح الدفاع عنه أسهل، وتصبح استثناءاته أقل ظهوراً. وهذا خطر موجود في الاستعارة نفسها: أن تتحول مراجعة البنية إلى حيلة تجعلني أكثر مهارة في حماية ما أردت فحصه.
في العمل البرمجي نستعين باختبارات للتحقق من السلوك أثناء التعديل. أما هنا، فمن يضع الاختبار؟ إذا كنت أنا من يقرر ما يُقبل دليلاً، وما يُستبعد، وما يكفي لتغيير رأيي، فبوسعي أن أصمم اختباراً تنجح فيه قناعتي دائماً. لا يكفيني، إذن، أنها صارت أريح في الشرح أو أقل تناقضاً في رأسي. عليّ أن أعود إلى ادعائها: ما الذي تقول إنه يحدث في العالم؟ وما الشواهد عليه؟ وهل كنت سأقبل هذه الشواهد لو قادت إلى نتيجة لا أرغبها؟
وقد أحتاج إلى من يقرأ معي. لا ليمنحني الموافقة التي أبحث عنها، ولا ليحل محل السلطة التي خذلتني، وإنما ليرى الموضع الذي أمر عليه بسرعة لأنني أعرف مسبقاً إلى أين أريد أن أصل. حتى أدوات الفحص لا ينبغي إعفاؤها من الفحص، لكن هذا لا يلزمني بإرجاء كل حكم إلى الأبد. أستطيع اتخاذ موقف بالأسباب المتاحة، مع إدراكي لما لم أحسمه بعد.
الريفاكتور والسلوك: هل نبقيه كما هو؟
هنا تتوقف الاستعارة عن مطابقة ما تصفه في البرمجة. فالمحافظة على السلوك الخارجي شرط في الريفاكتور التقني، بينما قد تكون مراجعة قناعة ما بلا أثر يُذكر إن ظل صاحبها يتصرف كما كان، رغم أنه اكتشف فساد ما يبرر تصرفه.
لو أن شخصاً كان يمارس التمييز ضد غيره بناءً على حكم موروث، ثم تبين له أن حكمه غير مبرر، فماذا سنحافظ عليه؟ لا يمكننا المطالبة ببقاء التمييز كي لا نفسد التشابه مع البرمجة. وفي المقابل، قد يراجع شخص الأساس الذي دفعه إلى مساعدة المحتاجين، ويستمر في مساعدتهم لأسباب أخرى. يتغير التبرير ويبقى الفعل. يتوقف الأمر على ما راجعناه وما انتهينا إليه، لا على حاجة المقال إلى استعارة مكتملة.
والأمر نفسه في المحافظة على الأفكار القديمة. حذري من الهدم لا يمنحها حصانة. ربما أفتح ملفاً ظناً مني أن تعديلاً صغيراً يكفي، فأكتشف أن المشكلة أعمق، وأنني لا أستطيع الاحتفاظ بالنتيجة التي كنت أريد حمايتها. عندها ينبغي أن أسمح للفحص بأن يصل إلى حيث يقود، وإلا كنت قد حددت له النتيجة قبل أن أبدأ.
لذلك لا أضع الريفاكتور في مواجهة ديكارت كما لو أن أحدهما عاقل والآخر متهور. كان ديكارت في تأمله الأول يبحث عن أساس للمعرفة يستطيع الوثوق به، ويعامل الشك بوصفه وسيلة إلى ذلك. أما ما يشغلني هنا فهو كيف نراجع أفكاراً نعيش بها بالفعل، ولا نستطيع تعليق حياتنا إلى أن ننتهي من مراجعتها. قد يقودنا هذا العمل إلى تحول أوسع، وقد يقتصر على حكم واحد. لا أرى أن حجم ما نتخلى عنه يكفي، وحده، للحكم على جدية ما فعلناه.
الصيرورة، لا النسخة الأخيرة
يبقى أن الإنسان الذي يجري هذه المراجعة ليس مبرمجاً يقف خارج البرنامج. أنا أستخدم أفكاري لفحص أفكاري. وربما كانت الفكرة التي أراجعها جزءاً من المعيار الذي أقرر به ما هو مقبول أصلاً. هذا التداخل يجعل الحديث عن الريفاكتور المعرفي أكثر سهولة من ممارسته؛ فهو يوحي بأن هناك شخصاً يعرف ما يريد، أمام نظام ينتظر منه إدخال التعديلات. لكن ما أريده أنا أيضاً عرضة للتغير أثناء المراجعة.
ولعل في خبرة المبرمجين ما يوضح هذا الجانب؛ فكثيراً ما يعود أحدنا إلى كود كتبه قبل سنوات، فلا يتعرف على منطقه، ويتساءل عمّن كتبه، ثم يكتشف أنه هو. وهذا يعدّل العنوان الذي بدأنا منه قليلاً: إذ أن المشكلة لا تقتصر على ما لم نكتبه، لأن ما كتبناه بأنفسنا يصبح موروثاً بدوره متى ابتعدنا عنه بما يكفي. وقناعاتي التي بنيتها بجهدي قبل عشر سنوات ليست استثناءً من ذلك؛ فقد لا أتذكر لماذا وضعت شرطاً بعينه، وقد أتردد في حذفه خشية أن ينكسر شيء لا أعرف موضعه.
من هنا أفهم الصيرورة في سياق هذا المقال. يتغير شيء في تصوري للعالم، فتتغير معه أسئلة لم أكن أظن أنها متصلة به. وربما أعود إلى قناعة قديمة فأفهم لماذا كانت مقنعة لي، حتى إن لم تعد كذلك. لا يصبح الماضي كله حماقة بأثر رجعي؛ لقد كنت أملك خبرة أخرى، وأعرف أشياء أقل، وأعتمد على أشخاص ربما لم يعد لهم الموقع نفسه في حياتي. فهم ذلك لا يلزمني بالاحتفاظ بأحكامهم، لكنه يعفيني من اختلاق تاريخ كنت فيه مستقلاً دائماً ولم يضللني شيء.
ولا أفترض أن نهاية هذا العمل هي الوصول إلى نسخة مكتملة من نفسي. حتى في البرمجيات، قد يصبح تصميم مناسب اليوم عبئاً غداً، لا لأنه كان خاطئاً، بل لأن ما نطلبه من النظام تغير. وأفكارنا كذلك؛ فمسائل لم نواجهها بعد ستطلب منها ما لم تُصمم له.
لذلك أفضّل أن أسأل عن موقفي الحالي: ما أسبابه؟ وما الذي لا يستطيع تفسيره؟ وما الذي سيجعلني أعيد النظر فيه؟ هذه الأسئلة أنفع من الاطمئنان إلى أنه آخر موقف سأحتاج إليه، لأنها تُبقي الباب مفتوحاً دون أن تعلّق الحكم إلى الأبد.
وحين أنظر إلى حكمي القديم عن اليابانيين، لا يشغلني الآن أنني كنت مخطئاً فقط. يشغلني أن الحكم ظل متاحاً للاستخدام كل تلك المدة، وأنني لم أجد حاجة إلى سؤاله عن أوراقه إلا عندما سألني شخص آخر: كيف عرفت؟ لعل في رأسي اليوم أحكاماً تستفيد من الهدوء نفسه. وربما أدافع عن بعضها وأنا أكتب هذا المقال عن ضرورة المراجعة. لا أستطيع إسقاط هذا الاحتمال لمجرد أنني تنبهت إلى مثاله مرة.
الهوامش والملاحظات
- لا أفترض هنا أن العقل يعمل كبرنامج حاسوبي، ولا أقدم نموذجاً علمياً لتفسير القناعات، وإنما أستعير ممارسة من هندسة البرمجيات للنظر في بنية أفكارنا وإمكانات مراجعتها، مع الإقرار بحدود هذه المقاربة. ومن الجدير بالذكر أن المقاربة بين العقل البشري والحاسوب ليست جديدة في البحث العلمي، فقد أسهمت نماذج معالجة المعلومات المستمدة من علوم الحوسبة في نشأة علم النفس المعرفي وتطوره، ولا تزال النمذجة الحاسوبية إحدى أدوات دراسة العمليات الذهنية.
- صغتُ تعبير «الدَّين المعرفي» في سياق هذه المقالة، قياساً على مفهوم «الدَّين التقني» في هندسة البرمجيات. وبعد البحث، وجدت أن المصطلح مستخدم أيضاً في سياقات حديثة، منها الذكاء الاصطناعي وإدارة المعرفة، بدلالات تختلف عما أقصده هنا. وأستخدمه للدلالة على تراكم القناعات والأحكام غير المفحوصة، وما يترتب على استمرار البناء عليها من كلفة عند مراجعتها، خصوصاً حين تكون قد تشابكت مع قناعات أخرى وأصبحت جزءاً من بنيتنا الفكرية.
الوسوم:
