تصفح الدليل

ورقة مرجعية لمقابلات البرمجة: أفضل الممارسات قبل المقابلة وأثناءها وبعدها

مع نضج مقابلات البرمجة عبر السنين، أصبحت هناك توقعات أرسخ حول كيفية تصرف المرشحين أثناء مقابلة البرمجة. وبعض هذه الممارسات يساعدك أيضاً على إظهار إشارات «توظيف» للمُقابِل بإبراز قدرتك على التواصل الجيد والتعامل مع العوائق.

باستخلاص أفضل الممارسات من كبار المرشحين، واستناداً أيضاً إلى كيفية تقييمك أثناء مقابلة البرمجة، لخصنا بعض أهم النصائح حول كيفية التصرف أثناء مقابلة البرمجة في قائمة تحقق شاملة — بما فيها أبرز الأخطاء الواجب تجنبها.

ينبغي أن تقرأ هذا الدليل وتألفه حتى قبل أن تبدأ التدرب على أسئلة مقابلات البرمجة. فمرافقة تدريب LeetCode بهذا الدليل سيتيح لك ترسيخ هذه السلوكيات المهمة لمقابلات البرمجة مبكراً.

ما الذي تفعله قبل مقابلة البرمجة

لمقابلات البرمجة الافتراضية عن بُعد

ملخص ما ينبغي فعله قبل مقابلة برمجة افتراضية عن بُعد
ما ينبغي فعله قبل مقابلة برمجة افتراضية عن بُعد
  • ✅ جهّز قلماً وورقة.

    في حال احتجت لتدوين الأشياء وتصورها. الرسوم مفيدة خصوصاً لأسئلة الـTrees/Graphs.

  • ✅ استخدم سماعات أذن أو رأس وتأكد أنك في بيئة هادئة.

    تجنب استخدام مكبرات الصوت لأن الصدى إذا كان مرتفعاً يصعب التواصل، وتكرار المشاركين لأنفسهم سيؤدي فقط إلى ضياع وقت ثمين.

  • ✅ تحقق أن اتصالك بالإنترنت يعمل.
  • ✅ تحقق أن كاميرا الويب والصوت يعملان.
  • ✅ تألف بيئة البرمجة وجهّز الاختصارات فيها (CoderPad / CodePen).

    جهّز اختصارات المحرر، وفعّل الإكمال التلقائي، وتباعد التبويب، وغيرها. ينبهر المُقابِلون إذا كنت تعرف الاختصارات وتستخدمها جيداً.

  • ✅ أطفئ كاميرا الويب إن أمكن.

    معظم المقابلات عن بُعد لا تتطلب دردشة فيديو، وإبقاؤها تعمل لا يخدم إلا كمشتت ويستهلك عرض النطاق.

لمقابلات الفرز الهاتفية للبرمجة

ملخص ما ينبغي فعله قبل مقابلة فرز هاتفية للبرمجة
ما ينبغي فعله قبل مقابلة فرز هاتفية للبرمجة
  • ✅ استخدم سماعات الأذن وضع الهاتف على الطاولة.

    تجنب حمل الهاتف بيد واحدة بحيث لا تبقى لك إلا يد واحدة للكتابة.

  • ✅ اطلب خيار استخدام Zoom/Google Meet/Hangouts أو Skype بدلاً من مكالمة هاتفية.

    يسهل إرسال الروابط أو النصوص عبرها.

لمقابلات البرمجة على السبورة في الموقع

  • ✅ تعلم إدارة مساحة السبورة.

    اترك مسافة بين أسطر الشيفرة تحسباً لحاجتك لإدراج أسطر بين الشيفرة الموجودة.

ما الذي تفعله أثناء مقابلة البرمجة

ملخص ما ينبغي فعله أثناء مقابلة برمجة
ما ينبغي فعله أثناء مقابلة برمجة

1. قدّم نبذة تعريفية جيدة عن نفسك في بداية المقابلة

  • ✅ عرّف بنفسك في بضع جمل في أقل من دقيقة أو دقيقتين.

    اتبع دليلنا حول كيفية إعداد نبذة تعريفية جيدة لمهندسي البرمجيات.

  • ✅ ابتعث الحماس في صوتك!

    تحدث بابتسامة وستبدو بطبيعتك أكثر تفاعلاً.

  • ❌ لا تقضِ وقتاً طويلاً في نبذتك التعريفية لأن ذلك سيترك لك وقتاً أقل للبرمجة.

2. عند تلقي السؤال، أجرِ استيضاحات

لا تقفز إلى البرمجة فوراً. أسئلة البرمجة تميل إلى أن تكون غامضة وناقصة التحديد عمداً ليتمكن المُقابِل من قياس انتباه المرشح للتفاصيل وحرصه. اطرح 2-3 أسئلة استيضاحية على الأقل.

  • ✅ أعد صياغة السؤال وكرره للمُقابِل.

    تأكد أنك تفهم تماماً ما يطلبونه.

  • ✅ وضّح الافتراضات (ارجع إلى أوراق مرجعية الـAlgorithms للافتراضات الشائعة)
    • قد يكون الرسم الشبيه بالـTree Graph يسمح بالدورات ولن يعمل حل تكراري ساذج معه. وضّح ما إذا كان الرسم المعطى Tree أم Graph.

    • هل يمكنك تعديل الـArray/Graph/Data Structure الأصلي بأي طريقة؟

    • كيف يُخزن المدخل؟

    • إذا أُعطيت قاموس كلمات، فهل هو قائمة Strings أم Trie؟

    • هل Array المدخل مرتبة؟ (مثلاً للاختيار بين الـBinary Search/الخطي)

  • ✅ وضّح نطاق قيم المدخل.

    المدخلات: ما حجمها وما نطاقها؟

  • ✅ وضّح صيغة قيم المدخل

    القيم: سالبة؟ نقاط عائمة؟ فارغة؟ Null؟ مكررة؟ كبيرة للغاية؟

  • ✅ اعمل على مثال مبسط للتأكد أنك فهمت السؤال.

    مثلاً، إذا طُلب منك كتابة مدقق للنصوص المتماثلة (palindrome)، قبل البرمجة ابتكر حالات اختبار بسيطة مثل "KAYAK" => true و"MOUSE" => false، ثم تحقق مع المُقابِل أن تلك الأمثلة تتوافق مع توقعاته.

  • ❌ لا تقفز إلى البرمجة فوراً أو قبل أن يعطيك المُقابِل الضوء الأخضر لذلك.

3. اعمل على أسلوبك وحسّنه مع المُقابِل

أسوأ ما يمكنك فعله تالياً هو القفز مباشرة إلى البرمجة — يتوقع المُقابِلون أن يُخصص وقتاً لنقاش ثنائي الاتجاه حول الأسلوب الصحيح للسؤال، بما فيه تحليل الـtime complexity والمكاني.

يمكن أن يمتد هذا النقاش من بضع دقائق إلى 5-10 دقائق حسب تعقيد السؤال. وهذا يمنح المُقابِلين أيضاً فرصة لتقديم تلميحات تقودك نحو حل مقبول.

  • ✅ إذا تعثرت في الأسلوب أو التحسين، استخدم هذه الطريقة المنظمة لتنشيط ذاكرتك/إيجاد أسلوب جيد
  • ✅ اشرح بعض الأساليب التي يمكنك اتباعها على مستوى عالٍ (لا تتعمق كثيراً في تفاصيل التنفيذ). ناقش مفاضلات كل أسلوب مع مُقابِلك كما لو كان زميلك في العمل وأنتما تتعاونان على مشكلة.

    في الأسئلة الخوارزمية، المساحة/الوقت مفاضلة شائعة. لنأخذ سؤال Two Sum الشهير مثالاً. هناك حلان شائعان

    1. استخدم حلقتي for متداخلتين. سيكون ذلك O(n2) من حيث الـtime complexity وO(1) من حيث المساحة.
    2. في مرور واحد على الـArray، تُجزّئ قيمة إلى فهرسها في Hash Table. وللقيم اللاحقة، ابحث في الـHash Table لتعرف إن كان يمكنك إيجاد قيمة موجودة تكمل المجموع إلى الهدف. هذا الأسلوب O(N)‎ من حيث الوقت والمساحة معاً. ناقش الحلين، واذكر المفاضلات، واختم بأي الحلول أفضل (عادة صاحب الـtime complexity الأدنى).
  • ✅ اذكر واشرح الـtime complexity والمكاني لأسلوبك (أساليبك) المقترح.

    اذكر تعقيد Big O للوقت واشرح السبب (مثلاً O(n2) للوقت بسبب حلقتي for متداخلتين، وO(n) للمساحة لأن Array إضافية تُنشأ). أتقن جميع حالات الـtime complexity والمكاني باستخدام تقنيات تحسين الـAlgorithms.

  • ✅ اتفق على الأسلوب الأمثل وحسّنه. حدد الحسابات المتكررة/المكررة/المتداخلة وقللها عبر التخزين المؤقت. ارجع إلى صفحة تحسين حلك.
  • ❌ لا تقفز إلى البرمجة فوراً أو قبل أن يعطيك المُقابِل الضوء الأخضر لذلك.
  • ❌ لا تتجاهل أي معلومة مُعطاة.
  • ❌ لا تبدُ متردداً حيال أسلوبك أو تحليلك.

4. اكتب حلّك بالشيفرة مع الشرح أثناء الكتابة

  • ✅ لا تبدأ البرمجة إلا بعد أن تشرح أسلوبك ويمنحك المُقابِل الضوء الأخضر.
  • ✅ اشرح ما تحاول تحقيقه أثناء البرمجة/الكتابة. قارن بين أساليب البرمجة المختلفة عند الحاجة.

    بذلك، أظهر إتقان لغة البرمجة التي اخترتها.

  • ✅ اكتب الشيفرة بسرعة معقولة تتيح لك الشرح أثناء الكتابة — لكن ليس بطيئة جداً.

    اكتب بسرعة كافية لتتمكن من شرح الشيفرة، لكن ليس ببطء شديد ينفد معه الوقت قبل الإجابة عن كل الأسئلة.

  • ✅ اكتب شيفرة حقيقية قابلة للترجمة والعمل حيثما أمكن، لا شيفرة زائفة.
  • ✅ اكتب شيفرة نظيفة ومباشرة ومرتبة بأقل قدر ممكن من أخطاء الصياغة/الأخطاء.

    اختر دائماً تنفيذاً نظيفاً ومباشراً بدلاً من تنفيذ معقد وفوضوي. احرص على أسلوب برمجة مرتب وممارسات جيدة وفق أساليب اللغة وبناها. ينبغي تجنب أخطاء الصياغة والأخطاء قدر الإمكان.

  • ✅ استخدم أسماء متغيرات تشرح شيفرتك.

    أسماء المتغيرات الجيدة مهمة لأنك تحتاج شرح شيفرتك للمُقابِل. من الأفضل استخدام أسماء متغيرات طويلة تشرح نفسها. لنقل مثلاً إنك تحتاج إيجاد مضاعفات 3 في Array أرقام. سمِّ Array النتائج multiplesOfThree بدلاً من array/numbers.

  • ✅ اطلب الإذن لاستخدام دوال بسيطة دون الحاجة لتنفيذها.

    مثلاً reduce وfilter وmin وmax ينبغي أن تكون كلها مقبولة الاستخدام.

  • ✅ اكتب بأسلوب معياري، منطلقاً من دوال عالية المستوى وقاسماً إياها إلى دوال مساعدة أصغر.

    لنقل مثلاً إنه طُلب منك بناء سيارة. يمكنك كتابة بضع دوال عالية المستوى أولاً: gatherMaterials() وassemble(). ثم قسّم assemble() إلى دوال أصغر: makeEngine() وpolishWheels() وconstructCarFrame(). ويمكنك حتى سؤال المُقابِل إن كان مقبولاً ألا تكتب بعض الدوال المساعدة البسيطة.

  • ✅ إذا كنت تختصر في شيفرتك، فاذكر ذلك بصوت عالٍ لمُقابِلك وقل ما كنت ستفعله في سياق غير المقابلة (بلا قيود زمنية).

    مثلاً: «في سياق غير المقابلة، كنت سأكتب تعبيراً نمطياً (regex) لتحليل هذه السلسلة بدلاً من استخدام split() التي قد لا تغطي حالات حدية معينة.»

  • ✅ [في الموقع/السبورة] تدرب على إدارة مساحة السبورة
  • ❌ لا تقاطع مُقابِلك أثناء حديثه. فعادة إذا تحدث، فهو يحاول تقديم تلميحات أو توجيهك في الاتجاه الصحيح.
  • ❌ لا تقضِ وقتاً طويلاً في كتابة التعليقات.
  • ❌ لا تكرر نفسك.
  • ❌ لا تستخدم أسماء متغيرات سيئة.
    • لا تستخدم أسماء متغيرات طويلة جداً أو أحادية الحرف (إلا إذا كانت شائعة مثل i وn).
  • ❌ لا تنسخ وتلصق الشيفرة دون فحص (مثلاً قد تحتاج بعض المتغيرات لإعادة تسمية بعد اللصق).

5. بعد البرمجة، افحص شيفرتك وأضف حالات اختبار

بمجرد أن تنتهي من البرمجة، لا تعلن أنك انتهيت. يتوقع المُقابِلون أن تبدأ بفحص شيفرتك بحثاً عن الأخطاء وإضافة حالات اختبار لتحسينها.

  • ✅ مرّ على شيفرتك بحثاً عن أخطاء — مثل أخطاء الفروق الواحدة (off-by-one).

    اقرأ شيفرتك بعينين جديدتين — كما لو كانت المرة الأولى التي ترى فيها شيفرة كتبها شخص آخر — وتحدث بصوت عالٍ عن عملية بحثك عن الأخطاء.

  • ✅ اعصف ذهنك للحالات الحدية مع المُقابِل وأضف حالات اختبار إضافية. (ارجع إلى أوراق مرجعية الـAlgorithms للحالات الحدية الشائعة)

    حالات الاختبار المعطاة عادة بسيطة عمداً. اعصف ذهنك على حالات حدية محتملة مثل المدخلات كبيرة الحجم، والمجموعات الفارغة، والمجموعات أحادية العنصر، والأرقام السالبة.

  • ✅ مرّ على شيفرتك سطراً سطراً مع تلك الحالات الاختبارية.
  • ✅ ابحث عن مواضع يمكنك إعادة بنائها (refactor).
  • ✅ أعد ذكر الـtime complexity والمكاني لشيفرتك.

    هذا يساعدك على تذكير نفسك برصد مشكلات في شيفرتك قد تنحرف عن الـtime complexity والمكاني الأصلي.

  • ✅ اشرح المفاضلات وكيف يمكن تحسين الشيفرة/الأسلوب لو توفر مزيد من الوقت.
  • ❌ لا تعلن فوراً أنك انتهيت من البرمجة. افعل ما سبق أولاً!
  • ❌ لا تجادل المُقابِل. قد يكون مخطئاً لكن ذلك مستبعد جداً لأنه ملم بالسؤال.

6. في نهاية المقابلة، اترك انطباعاً جيداً

  • ✅ اطرح أسئلة ختامية جيدة مفصّلة للشركة.

    اقرأ نصائح ونماذج أسئلة ختامية لطرحها.

  • ✅ اشكر المُقابِل.
  • ❌ لا تنهِ المقابلة دون طرح أي أسئلة.

ما الذي تفعله بعد مقابلة البرمجة

ملخص ما ينبغي فعله بعد مقابلة برمجة
ما ينبغي فعله بعد مقابلة برمجة
  • ✅ دوّن أسئلة المقابلة وإجاباتها لأنها قد تفيد في المرجع المستقبلي.
  • ✅ أرسل رسالة متابعة أو دعوة LinkedIn إلى مُقابِليك شاكراً إياهم على وقتهم وعلى فرصة المقابلة معهم.

    كمُقابِل بنفسي، يمكن لهذه أن تترك انطباعاً دائماً لديّ.

المصدر والرخصة

هذه الصفحة منسوخة من Tech Interview Handbook للمؤلف يانغشون تاي (Yangshun Tay)، النسخة المرجعية e1d28e8، وتُستخدم بموجب رخصة MIT — حقوق النشر (c) 2017-Present ليانغشون تاي. نص الرخصة محفوظ محلياً في /licenses/tech-interview-handbook.txt.