ثمة موقف بعينه كُتبت هذه الصفحة له، وهو أشيع بكثير مما يعترف به أحد علنًا. هناك نظام تعتمد عليه مؤسستك. والناس الذين بنوه غادروا، أو انتقلوا إلى غيره، أو لم يعودوا يذكرون بصدق. ولا توجد وثائق تستحقّ الاسم. وكل سؤال عنه — هل نستطيع تغيير هذا؟، ما الذي سيكسره ذلك؟، لماذا يفعل هذا؟ — يكلّف اليوم اجتماعًا، أو تخمينًا.
ويستحقّ سببُ كون ذلك الموقف باهظًا فيما مضى أن يُقال بدقّة، لأنه يفسّر لماذا اختلف الأمر الآن. المعرفة لم تُفقد قط في الحقيقة. هي كلّها لا تزال هناك، مكتوبة بدقّة تامّة، في الكود نفسه. الذي فُقد هو الذاكرة المؤسسية لكيفية التنقّل فيه — والأداة الوحيدة لاستعادة ذلك كانت شخصًا يملك الوقت والمهارة لقراءة الأمر كلّه. وذلك الشخص كان مكلفًا، وغالبًا لم يكن موجودًا أصلًا.
وClaude يقرأه مباشرة. لا ملخّصًا عنه، ولا وصفًا كتبه أحدهم عنه ذات مرّة — بل الملفات الفعلية، كما هي اليوم. ومعنى ذلك أن الخريطة يمكن أن تُعاد رسمها من الأرض نفسها، على يد شخص ما كان ليستطيع قراءة الأرض بنفسه.
ابدأ بالقراءة، فالقراءة مجانية
إن لم تأخذ من هذه الصفحة سوى شيء واحد، فليكن هذا: القراءة هي النصف الآمن من هذه الأداة. أن تطلب من Claude أن يشرح شيئًا لا يغيّر شيئًا إطلاقًا. لا يُمَسّ ملف، ولا يُحفظ شيء، ولا يوجد ما تتراجع عنه. منظومة المراجعة والأذونات كاملةً موجودة للحظة التي يقترح فيها Claude تغييرًا — ولا شيء منها يعمل وأنت تسأل فقط.
فالقدر الصحيح من الحذر عند القراءة قليل جدًا، والقدر الصحيح من الفضول كبير جدًا. هذا هو الجزء من الأداة الذي تستطيع أن تكون فيه جريئًا بلا ثمن، وهو الجزء الذي يتردّد الناس فيه على نحو غريب.
سَمِّ ملفًا. هذه أكبر نقلة متاحة.
الغريزة، أمام شيء كبير ومخيف، أن تطرح أكبر سؤال ممكن: اشرح لي الـ codebase. يبدو ذلك فعّالًا. وهو أضعف ما يمكن أن تسأله.
فذلك السؤال يفرض تصفّحًا سريعًا — سرد الملفات، وأخذ عيّنة من بعضها، واستنتاج الشكل، وتلخيص عام. فتحصل على شيء طويل وغامض ومخمَّن جزئيًا، لأن القراءة توزّعت رقيقةً أكثر من أن تكون دقيقة في أي موضع.
الآن سَمِّ ملفًا واحدًا:
اشرح server/index.js
explain server/index.js
يُفتح ملف واحد ويُقرأ كما ينبغي، وما يعود إليك قصير ومحدَّد ومسنود إلى أسطر موجودة فعلًا. وهو أيضًا قابل للفحص — تستطيع أن تفتح الملف نفسه وترى إن كان الوصف مطابقًا، وهو ما لا تستطيعه مع ملخّص أربعين ملفًا.
هكذا يقرأ أصحاب الخبرة الكود، ويستحقّ أن تعرف ذلك، لأنه يذيب شيئًا من الرهبة: لا أحد يقرأ codebase. هم يقرؤون ملفًا واحدًا، ولديهم هدف، ثم ملفًا آخر. الشيء المخيف لم يكن يومًا كائنًا واحدًا يجب استيعابه؛ كان دائمًا كومة من الأشياء الصغيرة.
أو سَمِّ ما بداخل الملف
ضيِّق النطاق درجة أخرى ويتحسّن الأمر أكثر. معظم الفضول الحقيقي ليس عن ملف — بل عن اسم. زميل يقول إن المشكلة في handleContact. خطأ يذكر saveMessage. أنت تقرأ شيئًا فتصطدم باستدعاء لـ sendNotification لم تره من قبل.
لست بحاجة إلى إيجاد الملف أوّلًا:
أين handleContact وماذا تفعل؟
where is handleContact and what does it do?
تحصل على الموقع والشرح في إجابة واحدة، لأن الاسم كان كافيًا للعثور عليه.
وسبب أهمية هذا أكثر مما يبدو هو الاحتكاك. إيجاد function بالاسم لم يكن يومًا صعبًا — تفتح المحرّر، وتقفز إلى الرمز، وتتصفّح النتائج، وتجرّب ملفين. كان فقط بطيئًا بما يكفي ليكفّ الناس عن تجشّم العناء، فيتخطّون السؤال بدلًا من ذلك. وحين يستغرق السؤالُ والجوابُ الثواني القليلة نفسها، تستطيع أن تكون فضوليًا تجاه كل اسم لا تعرفه، بدل أن تقنّن فضولك للأسماء التي تبدو مهمّة. هذا التغيّر فيما تستطيع تحمّله هو المكسب الحقيقي.
تتبّع السلك
حين تصير الأشياء المفردة مفهومة، تصبح الأسئلة التي تستحقّ الطرح أسئلةً عن الوصلات — من أين جاءت قيمة، وما الذي يعتمد عليها. من أين جاء هذا؟ وأين يُستخدم هذا؟ هما السؤال نفسه موجَّهًا في اتجاهين متعاكسين، والثاني هو الذي يتخطّاه الناس. وهو أيضًا الذي يخبرك إن كان تغيير شيء ما آمنًا.
ولهذه الحركة صفحتها الخاصة: من أين جاء هذا، وأين يُستخدم؟ والعادة التي تُفعّلها هي أن تطلب قائمة بمن يستدعيه بدل «نعم» — لأن القائمة شيء تستطيع فحص عيّنة منه، و«نعم» ليست كذلك.
حين يكون معطوبًا لا مجرّد غريب
النصف الآخر من القراءة هو جدار النصّ الأحمر. الخطأ ليس حكمًا عليك؛ إنه آلة تصرّح، بدقّة تامّة وبلا أي لباقة، بالنقطة التي توقّفت عندها تعليماتها عن أن يكون لها معنى — وClaude يقرأ ذلك التنسيق بطلاقة.
الحركة كاملةً، ومعها الغلطة الوحيدة التي يقع فيها الجميع تقريبًا (تقليم الخطأ قبل لصقه)، في قراءة الأخطاء والـ stack traces.
اقرأ ما قرأه
تحفّظ واحد صادق، لأنه ينطبق على كل ما سبق. شرحُ الكود يبقى شرحًا مولَّدًا، والطلاقة لا تعني الصحّة تلقائيًا — مشكلة الثقة والتحقّق نفسها التي تنطبق في كل مكان آخر تنطبق هنا.
والرحمة في الأمر أن القراءة سهلة الفحص إلى حدّ غير معتاد. كل ادّعاء يشير إلى ملف وسطر، فالتأكّد من واحد مسألة فتحٍ ونظر. لست مضطرًّا للتحقّق من كل شيء؛ أنت بحاجة للتحقّق من حلقة واحدة في السلسلة، وغالبًا تلك التي يقوم عليها بقية قرارك. خمس عشرة ثانية من ذلك هي الفرق بين خريطة تستطيع التصرّف بناءً عليها وقصّة تبدو صحيحة وحسب.
ولهذا أيضًا تكون الأسئلة المفيدة هي التي تطلب تفاصيل محدّدة — قائمة ملفات، function باسمها، رقم سطر. الإجابات المحدّدة إجابات قابلة للفحص. والغامضة ليست كذلك، وفي الغموض تختبئ الأخطاء.
قراءات أطول
- من أين جاء هذا، وأين يُستخدم؟ كل عملية تتبّع تسير في أحد اتجاهين — إلى الوراء نحو مصدر الشيء، أو إلى الأمام نحو ما يعتمد عليه. الثاني هو السؤال الذي يتخطّاه الناس، وهو الذي يحدّد ما إذا كان التغيير آمنًا. 9 دقائق
- قراءة الأخطاء والـ stack traces الخطأ ليس عقابًا ولا حكمًا عليك. إنه آلة تكون حرفيّة تمامًا بشأن الموضع الذي علقت فيه — وهذه الحرفيّة هي سبب كون المشكلة قابلة للإصلاح أصلًا. 8 دقائق