مقابلات مهندسي البرمجيات: كل ما تحتاجه للتحضير
هذا الدليل مُقتبس من Tech Interview Handbook للمؤلف يانغشون تاي (Yangshun Tay)، ويُستخدم بموجب رخصة MIT — راجع المصدر والرخصة. صيغ المتكلم («أنا»، «لي») في هذا الدليل هي صوت المؤلف الأصلي.
لا أحد لديه وقت لحل مئات أسئلة LeetCode، والخبر الجيد هو أنك لا تحتاج إلى حل هذا العدد للحصول على وظيفة في FAANG فعلاً!
كان مؤلف هذا الدليل الأصلي، يانغشون تاي (Yangshun Tay)، محبطاً في عمله في Grab، شركة مشاركة رحلات في جنوب شرق آسيا، وأراد الالتحاق بـ FAANG لكنه لم يكن متأكداً من الطريق. وبعد بضعة أشهر من البحث والدراسة والتدريب، أجرى مقابلات في 11 شركة وحصل على 9 عروض من كبرى شركات التكنولوجيا في منطقة خليج سان فرانسيسكو — Facebook وGoogle وAirbnb وPalantir وDropbox وLyft وبعض الشركات الناشئة. وكانت عملية مرهقة لم يَرِد تكرارها أبداً. لقد خاض تلك العملية، لكن مع هذا الدليل لن تضطر أنت إلى خوضها.
سيقدم هذا الدليل نظرة سريعة على أهم النصائح حول كيفية التحضير لمقابلة مهندس برمجيات — لكل من الجولات التقنية وغير التقنية. وحيثما كان ذلك مناسباً، يمكنك التعمق في التفاصيل عبر الروابط في هذا المقال التمهيدي، أو عبر الشريط الجانبي الأيسر في الموقع.
كيف تستعد لمقابلة هندسة البرمجيات:
- عظّم فرصك في الوصول إلى القائمة المختصرة
- تعرّف على صيغة المقابلة
- اختر لغة برمجة
- اشحذ أساسيات علم الحاسوب للمقابلات
- تدرّب على مقابلة البرمجة
- استعد لمقابلة تصميم الأنظمة (للمستويات المتوسطة/العليا)
- استعد للمقابلة السلوكية
- التفاوض على حزمة العرض
عظّم فرصك في الوصول إلى القائمة المختصرة
هل لا تزال تواجه صعوبة في الوصول إلى القائمة المختصرة في بعض أو كل كبرى شركات التكنولوجيا؟ قد تكون سيرتك الذاتية هي المشكلة.
سيرتك الذاتية هي أهم بوابة دخول للوصول إلى القائمة المختصرة في كبرى شركات التكنولوجيا مثل FAANG / MANGA. وبعد الوصول إلى القائمة المختصرة، تصبح إنجازاتك السابقة أقل أهمية بشكل ملحوظ مقارنة بمهاراتك في مقابلة البرمجة — التي يمكن كما نعلم تعلمها بطريقة منهجية. لذا فإن القدرة على تأطير إنجازاتك السابقة جيداً بما يكفي لاجتياز مرحلة الفرز مهمة للغاية.
للأسف، حتى أكثر المرشحين تأهلاً ممن أعرفهم شخصياً لا يعرفون كيف يكتبون سيرة ذاتية جيدة ويفشلون في الوصول إلى القائمة المختصرة. والحقيقة هي أن كثيرين منا عندما لا يصلون إلى القائمة المختصرة في كبرى شركات التكنولوجيا مثل FAANG / MANGA، نميل إلى الاعتقاد بأننا كنا دون المؤهلات — لكن في معظم الحالات، ربما يكون السبب مجرد غياب التأطير الجيد.
إذا أردت تعلم كيفية كتابة سيرة ذاتية جيدة لمهندس برمجيات، فقد كتبت دليلاً خطوة بخطوة هنا عن إعداد سيرة هندسة البرمجيات لشركات مثل Google وFacebook وAmazon وNetflix وApple، مع أمثلة للرجوع إليها أيضاً.
تعرّف على صيغة المقابلة
قد تصادف صيغ مقابلات متنوعة في مقابلات مهندسي البرمجيات (من المرحلة المبكرة إلى المتأخرة):
1. الاختبار القصير (Quiz)
معدل التكرار: أحياناً
تُستخدم الاختبارات القصيرة كمرشح أولي — طريقة سريعة وغير معقدة لاستبعاد المرشحين الضعفاء للغاية (أو حتى غير التقنيين). وهي أسئلة منظمة لها إجابات قاطعة، مما يجعل من الممكن إجراءها بواسطة مسؤولي التوظيف/أشخاص غير تقنيين أو مصححات آلية. وتُجرى عادةً في وقت مبكر من العملية.
أمثلة:
- ما ناتج 4 & 5 (بالثنائي)؟ الإجابة: 4
- ما الـtime complexity لترتيب الفقاعات؟ الإجابة: O(n2)
2. التقييم البرمجي عبر الإنترنت
معدل التكرار: أحياناً
مثل الاختبارات القصيرة، تُجرى التقييمات البرمجية عبر الإنترنت عادةً في وقت مبكر من العملية. تُعطى مسألة Algorithm بمدخلات ومخرجات محددة جيداً ويُتوقع من المرشحين كتابة شيفرة في واجهة برمجة عبر الإنترنت لحل المسألة. HackerRank منصة شائعة جداً لإجراء التقييمات البرمجية عبر الإنترنت. وسيكون LeetCode طريقة جيدة للتدرب على جوانب حل المشكلات في التقييمات البرمجية عبر الإنترنت. ومع ذلك، يُتوقع منك في HackerRank عادةً كتابة شيفرة تقرأ من stdin وتطبع إلى stdout، وهو ما قد يربك المرشحين إذا لم يكونوا على دراية بواجهات برمجة التطبيقات.
3. المهمة المنزلية
معدل التكرار: نادر
دارت مناقشات عديدة حول ما إذا كانت أسئلة الـAlgorithms طريقة جيدة لتقييم قدرات الأفراد، لأنها ليست بالضبط أكثر المهارات صلة اللازمة في العمل اليومي. والمهمة المنزلية صيغة مصممة لمعالجة أوجه قصور مقابلة الـAlgorithms عبر جعل المرشحين يعملون على مشاريع أكبر تتيح لهم إظهار مهارات تصميم البرمجيات.
ومع ذلك، تستهلك هذه الصيغة وقتاً أكبر من كل من المرشحين والشركة، ولذلك فهي ليست شائعة في الشركات الكبيرة ذات العدد الكبير من المرشحين. وهذه الصيغة أكثر شيوعاً في الشركات الناشئة والصغيرة. أمثلة:
- بناء تطبيق لعرض رحلات الطيران
- بناء تطبيق كانبان (kanban)
- بناء لعبة الثعبان (snake)
4. المقابلات الهاتفية التمهيدية
معدل التكرار: شائع
المقابلات الهاتفية هي الصيغة الأكثر شيوعاً وسيواجهها كل مرشح مرة واحدة على الأقل أثناء التقدم للمقابلات. سيُطلب منك التحدث مع مقابِل إما عبر الهاتف أو عبر أداة اجتماعات فيديو مثل Microsoft Teams أو Google Meet أو Zoom. سيُعطى لك سؤال وستعمل عليه باستخدام محرر تعاوني عبر الإنترنت (CoderPad/CodePen/Google Docs).
لا يُسمح لك عادةً بتنفيذ الشيفرة حتى لو كان المحرر يدعم التنفيذ. لذا لا تعتمد على ذلك للتحقق من صحة حلك. وتختلف الصيغ قليلاً حسب الأدوار التي تتقدم إليها. تفضل كثير من الشركات استخدام CoderPad للتحرير التعاوني للشيفرة. يدعم CoderPad تشغيل البرنامج، لذا من المحتمل أن يُطلب منك إصلاح شيفرتك بحيث يمكن تشغيلها. ولمقابلات الواجهة الأمامية، تفضل كثير من الشركات استخدام CodePen، وسيكون من المجدي أن تتعرف على واجهات المستخدم لهذه البيئات البرمجية المعتمدة على الويب.
راجع أيضاً أفضل ممارسات مقابلة البرمجة لمعرفة ما يجب فعله وما لا يجب قبل مقابلاتك الهاتفية التمهيدية.
5. المقابلة في الموقع (Onsite)
معدل التكرار: دائماً تقريباً
إذا وصلت إلى هذه المرحلة، فتهانينا! هذه عادةً المرحلة الأخيرة قبل قرار العرض. سيُطلب من المرشحين الذين وصلوا إلى مرحلة الموقع إجراء مقابلة شخصية في المكتب. وإذا كنت مرشحاً من خارج البلاد، فقد تدفع لك الشركات تكاليف السفر والإقامة!
تتكون مرحلة الموقع عادةً من عدة جولات (برمجة، تصميم أنظمة، سلوكية) ويُتوقع أن تستمر بضع ساعات. وبما أنك في الموقع، فمن المحتمل أن يُطلب منك تمرين على السبورة البيضاء مع مقابِل، يكون عادةً إما حل سؤال خوارزمي أو سؤال تصميم أنظمة. ومن المحتمل أيضاً أن تضطر إلى إحضار حاسوبك المحمول والعمل على مشروع/حل مسألة برمجية في الحال.
في المقابلات في مواقع الشركات الأصغر (غير العامة)، يسمح معظمها (بل ويفضل) أن تستخدم حاسوبك المحمول الخاص. لذا من المهم أن تجهّز بيئة التطوير الخاصة بك مسبقاً.
إذا قدمت الشركة وجبة غداء، فقد تكون لديك أيضاً جلسة غداء مع أحد الموظفين يمكنك فيها معرفة المزيد عن ثقافة الشركة.
اختر لغة برمجة
بعد الانتهاء من سيرتك الذاتية، فإن الخطوة التالية في رحلة مقابلة هندسة البرمجيات بسيطة ولن تستغرق وقتاً طويلاً — اختر لغة برمجة. ما لم تكن تجري مقابلة لمنصب متخصص مثل تطوير الهواتف أو الواجهة الأمامية حيث توجد لغات خاصة بالمجال، فلك الحرية في استخدام أي لغة تريدها في مقابلات البرمجة الخوارزمية.
في معظم الأحيان، تكون لديك لغة في ذهنك بالفعل — اختر اللغة التي تستخدمها أكثر والتي تشعر معها بأكبر قدر من الراحة. وأكثر لغات البرمجة شيوعاً في مقابلات البرمجة هي Python وJava وC++ وJavaScript. لا أنصح بتعلم لغة جديدة تماماً فقط لمقابلات البرمجة، لأن إتقان لغة بما يكفي لاستخدامها براحة في بيئة مقابلة — وهي مجهدة أصلاً — يستغرق وقتاً (أسابيع قليلة على الأقل في المتوسط). لغتي المفضلة شخصياً هي Python بسبب إيجازها والدوال وData Structures التي توفرها مكتبتها القياسية.
اقرأ المزيد عن لغات البرمجة لمقابلات البرمجة: اختيار لغة برمجة
ادرس وتدرّب لمقابلات البرمجة
الخطوة التالية والأهم هي التدرب على حل أسئلة الـAlgorithms بلغة البرمجة التي اخترتها. ومع أن كتاب Cracking the Coding Interview مورد رائع، إلا أنني أفضّل التعلم بحل المشكلات فعلياً.
هناك العديد من المنصات التي يمكن استخدامها لذلك — مثل LeetCode وHackerRank وCodeForces. ومن تجربتي الشخصية، أسئلة LeetCode هي الأنسب للتحضير للمقابلات، بينما HackerRank وCodeForces أقرب إلى البرمجة التنافسية.
ومع ذلك، يحتوي LeetCode على آلاف الأسئلة وقد يكون من الصعب معرفة من أين تبدأ أو كيف تنظم تدريبك. وقد وفرت خطط تحضير موصى بها وموارد منظمة هنا:
خطة دراسة مقابلة البرمجة
الفترة الزمنية الموصى بتخصيصها للتحضير لمقابلة البرمجة هي 3 أشهر (11 ساعة أسبوعياً أي 2-3 ساعات يومياً) لتحضير أكثر شمولاً. شاركت خطتي الدراسية لثلاثة أشهر هنا، وهي تقدم قائمة بموضوعات مقابلات البرمجة مع موارد وأسئلة تدريب ينبغي العمل عليها حسب الأولوية كل أسبوع. وسأضيف قريباً محتوى عن خطط دراسية موصى بها لشهر واحد ولأسبوع واحد.
إذا كان لديك أقل من 3 أشهر للتحضير، يمكنك إنشاء خطط دراسية خاصة بك باستخدام أداة Grind 75 (من بنائي) التي تولّد خططاً دراسية موصى بها لمقابلات البرمجة بناءً على الوقت المتبقي لديك. وتتضمن الـAlgorithm وراءها ترتيباً للأسئلة حسب الأولوية وتوازناً بين اتساع الموضوعات المغطاة وعمقها.
موارد لاستخدامها في تدريبك
في السوق، هناك الكثير من الموارد المتنافسة على انتباهك، وكثير منها يتنافس على مالك فقط دون تقديم أي قيمة. إذا اضطررت إلى الترتيب حسب الأولوية — فهذه أفضل موارد التحضير لمقابلات البرمجة التي سأستخدمها معاً:
- Grokking the Coding Interview: Patterns for Coding Questions
- AlgoMonster
- دليلي (المجاني) لأفضل ممارسات مقابلة البرمجة
- دليلي (المجاني) لتقنيات مقابلة البرمجة
- دليلي (المجاني) لدراسة الـAlgorithms
AlgoMonster
إضافة إلى مساعدتك على إتقان Data Structures وأسئلة الـAlgorithms المهمة في مقابلات البرمجة عبر التدريب وأدلة سهلة الفهم، يتمتع AlgoMonster بميزة إضافية هي تجميع أنماط أسئلة المقابلات الشائعة التي يمكنك تطبيقها لحل أي أسئلة أخرى لم تصادفها من قبل. صنعه مهندسو Google، وهو بلا شك منصة عالية الجودة مقارنة بطبيعة حل أسئلة LeetCode غير المنظمة. تُغطى أسئلة Data Structures والـAlgorithms بجميع اللغات الشائعة — Python وJava وC# وJavaScript وC++ وGolang وغيرها. زُر AlgoMonster ←
Grokking the Coding Interview: Patterns for Coding Questions
توسّع هذه الدورة من Design Gurus الأسئلة في أسئلة التدريب الموصى بها لكنها تتعامل مع التدريب من منظور أنماط الأسئلة، وهو نهج أوافق عليه للتعلم واستخدمته شخصياً للتحسن في مقابلات البرمجة. تتيح لك الدورة التدرب على أسئلة مختارة بـ Java وPython وC++ وJavaScript وتوفر أيضاً حلولاً نموذجية بتلك اللغات مع تصورات مرئية خطوة بخطوة. تعلم الأنماط وافهمها، لا تحفظ الإجابات! احصل على وصول مدى الحياة اليوم ←
دليلي (المجاني) لأفضل ممارسات مقابلة البرمجة
إذا كنت قد قرأت إطار تقييم مقابلة البرمجة المستخدم في كبرى شركات التكنولوجيا، فقد تشعر بالإرهاق من عدد العناصر المُقيَّمة وكيفية إظهار سلوكيات التوظيف باستمرار.
يجمع دليل أفضل ممارسات مقابلة البرمجة هذا توصيات قابلة للتنفيذ حول ما يجب فعله قبل مقابلات البرمجة وأثناءها وبعدها لإظهار إشارات التوظيف.
أنصح باستيعاب الدليل واستخدامه كمرافق أثناء تدربك على أسئلة مقابلات البرمجة — لتضمن أنك تكتسب عادات جيدة وذاكرة عضلية فيما يتعلق بالمقابلات منذ البداية.
دليلي (المجاني) لتقنيات مقابلة البرمجة
هل توجد طريقة منظمة لزيادة فرصك في إيجاد حل جيد لسؤال مقابلة البرمجة؟ وماذا عن تحسين الـtime complexity والمكاني لنهجك؟ يعلّمك دليل تقنيات مقابلة البرمجة بعض التقنيات للتعامل مع أسئلة لم تصادفها من قبل — مثل تصور المشكلة، والحل يدوياً، وتقسيم المشكلة إلى مشكلات فرعية، وغيرها.
أوراق الغش الدراسية للـAlgorithms (المجانية)
لست متأكداً مما إذا كانت هذه تصلح كدليل معمق — فهي أقرب إلى «أوراق غش دراسية» في صفحة واحدة تضم أفضل الموارد للدراسة، وأفضل أسئلة LeetCode للتدريب، والأمور التي يجب تذكرها. ومع ذلك، فهي تضمن تغطيتك لجميع النقاط الأكثر أهمية، خاصة عندما لا يكون لديك وقت. ولأن هذه أيضاً هي الملاحظات التي ساعدتني على الفوز بعروض من كبرى شركات التكنولوجيا — فهي تعمل بالتأكيد.
لمزيد من النصائح حول التحضير لمقابلة البرمجة، راجع دليلي الكامل للتحضير لمقابلة البرمجة هنا.
جرّب المقابلات البرمجية التجريبية (مع مهندسين من Google وFacebook)
البرمجة أمام مقابلك مباشرة قد تكون تجربة مُقلقة خاصة إذا لم تفعلها من قبل — ولهذا فإن اكتساب خبرة عملية مهم للغاية.
interviewing.io هي حالياً أفضل مورد للمقابلات التقنية التجريبية في السوق. تتيح لك حجز مقابلات برمجة تجريبية مع مهندسين حقيقيين من Google وFacebook، وإن كان بشكل مجهول. يمكنك حتى حجز مقابلات لأدوار محددة مثل تطوير الهواتف والواجهة الأمامية والإدارة الهندسية. والأفضل — إذا أردت انتقالاً أسهل إلى مقابلات البرمجة الواقعية — يمكنك مشاهدة مقابلات مسجلة ومعرفة شكل المقابلات الهاتفية.
علاوة على ذلك، إذا أبليت بلاءً حسناً في مقابلاتك التجريبية، فستتمكن من فتح «صفحة الوظائف» التي تتيح لك حجز مقابلات مباشرة مع شركات كبرى مثل Uber وLyft وQuora وAsana وغيرها. استخدمت interviewing.io كمقابِل وكمرشح على حد سواء ووجدت التجربة ممتازة.
استعد لمقابلة تصميم الأنظمة
إذا كنت مرشحاً في مستوى متوسط أو أولي رفيع، فقد تتوقع أسئلة تصميم أنظمة ضمن مقابلتك التقنية. وهي لا تُغطى بشكل كافٍ في LeetCode والموارد الجيدة لا تزال أصعب في العثور عليها.
الهدف من مقابلات تصميم الأنظمة هو تقييم مهارة المرشح في تصميم أنظمة برمجيات واقعية تتكون من مكونات متعددة.
استخدم أفضل موارد التحضير لمقابلة تصميم الأنظمة
تشمل بعض أفضل موارد التحضير لمقابلة تصميم الأنظمة:
- ByteByteGo - دورة جديدة في تصميم الأنظمة من Alex Xu، مؤلف كتب System Design Interview الأكثر مبيعاً على Amazon. تغطي الدورة أساسيات تصميم الأنظمة، ثم تنتقل إلى تحليلات معمقة لتصميم أكثر من 10 منتجات شائعة معروفة (مثل تصميم YouTube، وآخر الأخبار في Facebook، إلخ) وعدة أنظمة بيانات ضخمة وتخزين (مثل تصميم نظام دردشة). في كل تحليل معمق، تُشرح المفاهيم وتُستخدم Graphs شاملة، مما يجعلها سهلة المتابعة لأي مستوى خبرة.
- «Grokking the System Design Interview» من Design Gurus - هذه على الأرجح أشهر دورة لمقابلات تصميم الأنظمة على الإنترنت، وما يميزها عن معظم الدورات الأخرى أنها نصية بالكامل، وهو أمر رائع لمن يفضلون القراءة على مشاهدة الفيديوهات (مثلي!). تحتوي على مستودع لمشكلات تصميم الأنظمة الشائعة مع مسرد لأساسيات تصميم الأنظمة. لقد أكملت هذه الدورة شخصياً وأوصيت بها كثيرين غيري. أنصح بها بشدة!
- دورة «System Design Interview» من Exponent - تغطي هذه الدورة أساسيات تصميم الأنظمة ولديها قاعدة بيانات ضخمة لأسئلة تصميم الأنظمة الشائعة مع فيديوهات لمقابلات تجريبية. بعض الأسئلة لها إجابات نصية ومخطط قاعدة بيانات وواجهات برمجة تطبيقات للرجوع إليها (وهو ما أجده مفيداً). ومع أن الاشتراك قد يكون مكلفاً بعض الشيء لمحتوى مقابلات تصميم الأنظمة وحده، إلا أنهم يقدمون أيضاً محتوى تقنياً جيداً عن Data Structures والـAlgorithms والمقابلات السلوكية. وراحة وجود منصة واحدة تغطي جميع جوانب التحضير للمقابلات التقنية أمر مغرٍ للغاية.
- «Grokking the Advanced System Design Interview» من Design Gurus - لم أجرب هذه الدورة، لكنها من نفس الفريق الذي أنتج «Grokking the System Design Interview»، لذا ينبغي أن تكون جيدة! وفي رأيي، لن تحتاجها على الأرجح إلا إذا كنت في مستوى أولي رفيع جداً أو تتقدم لمنصب متخصص.
استعد للمقابلة السلوكية
لكل شركة تقنية كبرى جولة واحدة على الأقل من المقابلات السلوكية لمهندسي البرمجيات. وتشمل المقابلات السلوكية لمهندسي البرمجيات عادةً:
- الحديث عن تفاصيل الخبرات السابقة في السيرة الذاتية
- تقديم أمثلة على مواقف وسلوكيات سابقة تُظهر سمات سلوكية معينة (مثل مهارات إدارة النزاعات، والاعتماد على البيانات)
- الحديث عن الطموحات والخطط المهنية
وبقدر ما تبدو هذه المقابلات «فضفاضة» أو غير منظمة، توجد فعلياً طريقة منظمة للتحضير للمقابلات السلوكية:
1. اعرف صيغة STAR للإجابة عنها
تساعدك صيغة STAR على تنظيم إجاباتك عن الأسئلة السلوكية. وهي أنسب للأسئلة التي تتطلب منك سرد خبرات أو سلوكيات سابقة.
- الموقف (Situation): شارك تفاصيل عن الموقف الذي أدى إلى المهمة
- المهمة (Task): اشرح ما كنت بحاجة إلى تحقيقه أو المشكلات التي كان عليك حلها؛ ركز على
- النطاق
- الخطورة
- المعايير/النتائج المحددة المطلوبة
- الإجراء (Action): اشرح ما فعلته لتحقيق أهدافك، واصفاً الخيارات التي كانت لديك وكيف اتخذت القرارات
- النتائج (Results): صف نتيجة أفعالك وما تعلمته
اقرأ المزيد: صيغة STAR للإجابة عن الأسئلة السلوكية
2. تدرّب على أكثر الأسئلة السلوكية شيوعاً لمهندسي البرمجيات
راجع أكثر 30 سؤالاً سلوكياً شيوعاً لمهندسي البرمجيات
لمزيد من النصائح حول التحضير للمقابلة السلوكية، راجع دليلي الكامل للتحضير للمقابلة السلوكية هنا.
التفاوض على حزمة عرض مهندس البرمجيات
أخيراً، آخر شيء تحتاج بلا شك إلى التحضير له قبل مقابلتك هو التفاوض على الراتب لمهندسي البرمجيات. في أي وقت أثناء عملية المقابلة، قد يطرأ حديث عن الراتب. ولدينا أيضاً أدلة معمقة عن استراتيجيات التفاوض وتعويض مهندسي البرمجيات.
وهذا كل ما لديّ — لمزيد من التفاصيل عن كل خطوة في عملية التحضير لمقابلة مهندس البرمجيات، تعمق في كل موضوع داخل دليلي عبر الشريط الجانبي أو بالانتقال إلى الصفحة التالية!
المصدر والرخصة
هذه الصفحة مُقتبسة من Tech Interview Handbook للمؤلف يانغشون تاي (Yangshun Tay)، مرجع المصدر: commit e1d28e8، وتُستخدم بموجب رخصة MIT — حقوق النشر (c) 2017-Present ليانغشون تاي. نص الرخصة محفوظ محلياً في /licenses/tech-interview-handbook.txt. الأمثلة السوقية والقصص الشخصية في هذا الدليل تعكس تجربة المؤلف الأصلي في الولايات المتحدة وسنغافورة — وهي سياق عام، لا بيانات محلية عن فلسطين أو منطقة الشرق الأوسط وشمال أفريقيا. روابط الدورات والمنصات المدفوعة هي توصيات المؤلف الأصلي؛ أُزيلت منها وسائط الإحالة ولا يحصل Interview.ps على أي عمولة منها.
