رحلتي إلى تويتر: كيف حصلت على وظيفة مهندس برمجيات في إحدى كبريات شركات التقنية
مقدمة: رحلة نحو حلم الهندسة البرمجية في تويتر
هذه هي القصة الكاملة لرحلتي نحو الحصول على وظيفة مهندس برمجيات بدوام كامل في شركة Twitter. سأشارك معكم تفاصيل العملية التي مررت بها، وكيف استعددت لكل مرحلة، ولماذا اتخذت قراري النهائي بالانضمام إلى هذه الشركة الرائدة. إنها ليست مجرد قصة نجاح، بل هي دليل عملي لكل من يطمح في مسار مهني مشابه.
بداية الرحلة: ليالٍ من التحدي والتعلم
Click-clack-click-clack. كان صوت أصابعي وهي تضغط بقوة على مفاتيح لوحة المفاتيح يتردد صداه في هدوء الليل. رفعت رأسي عن شاشة حاسوبي المحمول وألقيت نظرة سريعة على الساعة المعلقة على جدار شقة الطابق السفلي التي كنت أستأجرها. كانت الساعة تشير إلى الثانية صباحًا.
قد تعتقد أنني كنت منهمكًا في كتابة برنامج معقد أو اخترق شيئًا ذا أهمية قصوى. لماذا قد أكون مستيقظًا في مثل هذا الوقت وإلا؟ في الحقيقة، لم أكن كذلك. كنت أستعد لمقابلتي التقنية القادمة في البرمجة باستخدام موقع Leetcode الشهير. كان الغضب يتملكني لأنني لم أتمكن من حل مشكلة reverse a linked list، والتي صُنفت على أنها Easy (سهلة) على المنصة. هذه اللحظات من الإحباط كانت جزءًا لا يتجزأ من عملية التعلم.
كيف وصلت إلى مقابلة تويتر: فرصة بعد محاولة سابقة
قبل أسبوع من تلك الليلة، وصلني بريد إلكتروني من مسؤول توظيف في Twitter، يسألني عما إذا كنت أرغب في تحديد موعد لمقابلة هاتفية أولية مع أحد مهندسيهم. شعرت بالإثارة الشديدة، ولكن القلق كان يساورني أيضًا؛ فقد تقدمت لوظيفة مهندس برمجيات في Twitter قبل بضع سنوات دون نجاح. أرسل لي مسؤول التوظيف ورقة تحضير شاملة تحتوي على روابط للتدرب وتحديث مهاراتي في البرمجة والخوارزميات. أحد البنود في قائمة التحقق هذه وجهني إلى leetcode.com (موقع تحديات برمجية)، وهكذا وجدت نفسي أقضي ساعات طويلة في البرمجة على هذا الموقع استعدادًا لمقابلتي التقنية.
لم يكن التحضير للمقابلات التقنية بالأمر السهل. بالنسبة لشخص تخرج من الجامعة منذ فترة، يتطلب الأمر قدرًا كبيرًا من الوقت لتحديث المهارات والأساسيات المطلوبة للنجاح في مقابلة برمجية تقنية. أكد مسؤول التوظيف صراحة أن مقابلتنا التقنية ستركز بشكل خاص على الأساسيات التقنية، مثل: الخرائط (maps)، الأشجار الثنائية (binary trees)، القوائم المتصلة (linked lists)، أشجار البحث الثنائية (binary search trees)، والرسوم البيانية (graphs)، وما إلى ذلك.
لو كنت أبدأ التحضير من الصفر اليوم، لكنت سعيت إلى اتباع نهج أكثر تنظيمًا بكثير لأتمكن من زيادة وقت التحضير إلى أقصى حد. لهذا السبب بدأت دورة تدريبية شخصية، تسمى Acing The Technical Interview. تساعد هذه الدورة الأشخاص على الاستعداد لمقابلاتهم بأقصى قدر من الكفاءة حتى يتمكنوا من اجتياز تلك المقابلات التقنية وتجنب الأخطاء والمزالق التي اضطررت لتعلمها بالطريقة الصعبة. وقد حقق العديد من المهندسين الآخرين نجاحًا كبيرًا بفضل الأساليب الموضحة في الدورة.
خلفيتي المهنية والأكاديمية
كان لدي 3 سنوات من الخبرة كمهندس full-stack في شركة ناشئة، حيث ركزت بشكل أساسي على بناء الخدمات المصغرة (microservices) وتطوير واجهات برمجة التطبيقات (API) على بيئة AWS. تضمنت بيئة العمل هذه استخدام PHP و NodeJS بشكل مكثف، و AWS SQS كقائمة انتظار للرسائل، و Postgres لقاعدة البيانات، و AWS S3 للتخزين طويل الأمد. لم يكن لدي أي خبرة مهنية سابقة أو تدريب داخلي، وكانت الوظيفة في الشركة الناشئة هي أول وظيفة لي كمهندس برمجيات ‘حقيقي’.
تلقيت تعليمًا رسميًا في علوم الحاسوب؛ فقد تخرجت من كلية يسوعية خاصة صغيرة في ولاية واشنطن بعد 4 سنوات بدرجة بكالوريوس في علوم الحاسوب. بالنظر إلى الوراء، أعتقد أنها كانت تجربة قيمة للالتحاق بالجامعة. لو أتيحت لي الفرصة لأفعل ذلك مرة أخرى، لاخترت التعليم الرسمي على معسكر تدريب برمجي (coding Bootcamp). يمكنك مشاهدة مقطعي المرئي هنا للحصول على مقارنة مفصلة بين درجة البكالوريوس لمدة 4 سنوات في علوم الحاسوب ومعسكر تدريب برمجي.
تقدمت بطلب لأكثر من 30 شركة مختلفة، وأجريت مقابلات مع 15 منها، وتم رفضي من 6، وتلقيت عروضًا من 6، ورفضت 5، وقبلت عرضًا واحدًا. إذا كنت تحسب، فقد لا تتطابق الأرقام تمامًا لأن بعض الشركات اختفت بعد المقابلة الشخصية في الموقع. يمكنك قراءة المزيد هنا إذا كنت مهتمًا بكيفية حصولي على عروض من شركات FAANG الكبرى دون شهادة من جامعة مرموقة.
إستراتيجياتي للتحضير للمقابلات
قضيت معظم وقتي في التدرب على موقع Leetcode ومع كتاب بعنوان Elements of Programming Interviews (أنصح به بشدة). كما قضيت حوالي 10% من وقتي في تصفح YouTube لمقابلات تصميم الأنظمة، مثل قنوات Jack Gabbard و Gauran Sen. من المصادر/المواقع الأخرى التي أعجبتني DailyCodingProblem.com، والذي يرسل سؤال برمجة يوميًا إلى بريدك الإلكتروني، مما يتيح لك الحصول على أسئلة جديدة باستمرار.
مدة التحضير الإجمالية
كانت فترة تحضيري حوالي شهر من الممارسة المتواصلة وغير المنقطعة. من الضروري جدًا أن يكون لديك جدول زمني ثابت. كنت في السابق أمارس البرمجة على دفعات: 3 ساعات من البرمجة المكثفة تليها أسبوع من الراحة. وجدت أن هذا الأسلوب غير فعال، ودفعت الثمن باهظًا بسبب التبديل المتكرر للسياق. في المجمل، قضيت حوالي 3 ساعات يوميًا خلال أيام الأسبوع (بسبب العمل)، و 4 إلى 6 ساعات في عطلات نهاية الأسبوع، ليصبح المجموع حوالي 20 ساعة أسبوعيًا لمدة شهر.
كيف تقدمت للوظائف
تقدمت بطلب إلى Twitter عبر صفحة الوظائف الخاصة بهم. بالنظر إلى الوراء، ربما كان من الأكثر فعالية البحث عن إحالة (referral) أو مسؤول توظيف على LinkedIn، لأن ذلك كان سيسرع عملية التقديم على الأرجح. السيرة الذاتية المكتوبة جيدًا أمر بالغ الأهمية، خاصة عند التقديم عبر مركز التوظيف عبر الإنترنت. بدون سيرة ذاتية قوية، لا أعتقد أنني كنت سأحصل على فرصة لإجراء مقابلات مع هذه الشركات التقنية الكبرى. يمكنك قراءة المزيد هنا حول كيفية صياغتي لسيرتي الذاتية لجذب انتباه مديري التوظيف.
بعد بضعة أسابيع، تواصل معي مسؤول توظيف أخيرًا وأراد تحديد موعد لمقابلة هاتفية أولية.
الجدول الزمني لعملية التقديم
- 10 فبراير 2017: تواصل مسؤول التوظيف لتحديد موعد للمقابلة الهاتفية التقنية الأولى (
TPS). - 8 مارس 2017: المقابلة الهاتفية التقنية الأولية.
- 13 أبريل 2017: المقابلة الهاتفية التقنية الثانية.
- 18 أبريل 2017: المقابلات الشخصية في الموقع (
Onsite). - 2 مايو 2017: تم تقديم عرض العمل.
- 23 مايو 2017: تأكيد الانضمام إلى
Twitter. - 24 يوليو 2017: تاريخ البدء الرسمي.
المقابلات الهاتفية التقنية الأولية
تضمنت المقابلتان الهاتفيتان التقنيتان الأوليان البرمجة على مستند مشترك عبر الإنترنت، مثل Google Docs. ناقشنا مقاربات مختلفة ومقايضات، وقضينا أكثر من 30 دقيقة في التنفيذ. بعد الجولتين الأوليين، انتقلت إلى الجولة التالية من المقابلات الشخصية في موقع Twitter Seattle. ثم أرسل لي مسؤول التوظيف رابطًا لمستودع أكواد عبر الإنترنت، وطلب مني إجراء مراجعة للكود (code review). كان علي تقديم اقتراحات حول كيفية تحسين الكود، ومناقشتها مع المحاورين في الموقع. استغرقت حوالي يوم واحد لمراجعة الكود، وقمت بطباعته على الورق (حوالي 5 صفحات بخط بحجم 10 نقاط)، ودوّنت مجالات التحسين على الورقة. أثبتت هذه الممارسة فائدتها الكبيرة كما اكتشفت لاحقًا.
المقابلات الشخصية في الموقع (Onsite Interview)
تضمنت المقابلات الشخصية في الموقع 3 جولات إجمالًا، مع وجبة غداء بينها:
- جولة الشمولية (
Breadth): 75 دقيقة. - جولة التعمق (
Depth): 75 دقيقة. - الغداء.
- جولة الكفاءة الثقافية (
Top-Grading): 90 دقيقة (اختيارية).
تجدر الإشارة إلى أن جولات المقابلات الشخصية في Twitter كانت تتضمن محاورين في كل جولة. شعرت بالرهبة في البداية، حيث كنت تحت أنظار محاورين يقيمان كل حركة أقوم بها. لكن في الواقع، أعجبني ذلك لأنه جعل الأمر يبدو أكثر تعاونًا، وكنا نتبادل الأفكار مع بعضنا البعض.
جولة الشمولية (تصميم الأنظمة – System Design)
تركز مقابلة الشمولية (تصميم الأنظمة) على مجموعة واسعة من المواضيع حتى يتمكنوا من فهم مدى معرفتك بتصميم نظام من الصفر. الهدف هو دفع المرشح إلى أقصى حدوده ومعرفة إلى أي مدى يمكنه الذهاب. طرحوا أسئلة مثل:
هل أنت قادر على بناء نظام موثوق به مع وقت تعطل معقول من البداية إلى النهاية، بدءًا من إعداد واجهة المستخدم (UI) وصولًا إلى التواصل عبر واجهة برمجة تطبيقات HTTP API، وحتى بناء خدمة خلفية (backend service)؟
استمتعت بالنقاش لأنني كنت دائمًا أحب التجريب مع التقنيات المختلفة. إذا كنت تستمتع ببناء الأشياء، فستعجبك هذه الجولة أيضًا. كان المحاورون لطفاء جدًا ووجهوني بلباقة خلال المقابلة. انتهينا بسؤال برمجي في النهاية. بصراحة، لا أتذكر ما كان، لكنه لم يكن شيئًا خارجًا عن المألوف.
جولة التعمق (الخبرات السابقة – Resume)
ركزت مقابلة التعمق بشكل أكبر على مشاريعي وخبراتي السابقة. كانت هذه الجولة، بكل صراحة، أكثر كثافة وتحديًا لأن المحاور تعمق في كل جانب من جوانب المشاريع التي بنيتها وتحدى قراراتي التصميمية. من الأسئلة التي طرحت علي:
- ما هو المشروع الذي بنيته مؤخرًا؟
- لماذا بنيته؟
- ما هي البدائل التي تم النظر فيها؟
- هل نجح في النهاية؟
بصفتي قادمًا من خلفية شركة ناشئة، كنت مسؤولًا عن بناء العديد من الأشياء من الصفر، مثل إعداد مجموعات AWS، وإعداد SQS لمعالجة المهام. على الرغم من أنني كنت ملمًا تمامًا بالعديد من المشاريع، إلا أن هذه الجولة دفعتني إلى أقصى حدودي. كان علي أن أستعرض خبرتي وأروي القصة من وجهة نظري – لماذا صممنا أشياء معينة بطرق معينة، وهل كانت هناك مقاربات أفضل/أسوأ فكرنا فيها. لم تتضمن هذه الجولة أي أسئلة برمجية.
جولة الكفاءة الثقافية (Top-Grading / Cultural)
كانت جولة الكفاءة الثقافية مقابلة مدتها 90 دقيقة مع مدير التوظيف والقيادة العليا. اكتشفت لاحقًا أنه إذا وصلت إلى هذه الجولة، فهذا يعني أنك قد أبليت بلاءً حسنًا من الناحية التقنية، وهم يبحثون عن التوافق الثقافي من كلا الجانبين – ما إذا كنت تتناسب مع ثقافتهم وما إذا كانت لديهم الفرص المناسبة لك. لم تتضمن هذه الجولة أيضًا أي أسئلة برمجية.
نظرة تحليلية على عملية المقابلة في تويتر
تركز المقابلات في Twitter بشكل كبير على أساسيات علوم الحاسوب. لذا تأكد من أنك تعرف هياكل البيانات (data structures) من الألف إلى الياء، ومن المهم أيضًا مراجعة جميع الخوارزميات الأساسية (algorithms) التي تعلمتها في مقرر CS101 الخاص بك.
نصائح إضافية لنجاحك
- إتقان الخوارزميات بعمق: لا يكفي معرفتها سطحيًا، بل يجب فهم آلياتها وتطبيقاتها.
- فهم مقايضات التعقيد الزمني والمكاني: استوعب كيف تعمل مقايضات التعقيد الزمني (
time complexity) والتعقيد المكاني (space complexity). - إتقان لغة برمجة واحدة بشكل ممتاز: معرفة وفهم لغة برمجة واحدة بشكل جيد للغاية ساعدني بشكل كبير. أوصي بشيء مثل
PythonأوJavaأوC++لأنها لغات شائعة الاستخدام جدًا. شخصيًا، أستمتع باستخدامPythonلأنها سهلة القراءة جدًا، وسهلة الشرح، وتحتوي على مجموعة كبيرة من هياكل البيانات المدمجة. - مراجعة السيرة الذاتية بدقة: تأكد من تحديث المشاريع المدرجة في سيرتك الذاتية. هذا يعني فهم التصميم الكامل للبرنامج الذي كنت مسؤولًا عنه من البداية إلى النهاية، وفهم المقايضات التي تم إجراؤها في النظام، وتقديم أسباب لسبب بناء الأنظمة بهذه الطريقة وما هي البدائل التي تم التفكير فيها.
- الانضباط في التحضير: اكتشف مقدمًا المجالات التي تفتقر إليها، وقم بوضع جدول زمني للممارسة. من المهم الحصول على ممارسة متسقة وغير منقطعة. بدأت بشكل خاطئ وتمنيت لو أنني عرفت هذا مبكرًا حتى لا أضيع الوقت في أشياء غير مجدية.
- التفكير في الأنظمة التي تتفاعل معها يوميًا: اكتشف المقايضات، والبدائل، والإيجابيات والسلبيات، وكيف يمكنك بناء نظام أفضل. هذه المهارة ستقودك بعيدًا جدًا في هندسة البرمجيات.
الموارد التي أوصي بها
Acing The Technical Interview: دورتي التدريبية الشخصية لمساعدتك على اجتياز المقابلات التقنية في كبرى شركات التقنية.Leetcode.com: تدرب على مسائل البرمجة هنا.- صفحة الموارد هذه للمزيد من المعدات والأدوات والكتب التي أوصي بها بشدة.
يمكنك قراءة المزيد من مقالاتي حول التكنولوجيا على مدونتي الشخصية، حيث أشارك رحلتي في أن أصبح مهندس برمجيات محترفًا. إذا استمتعت بهذا المقال، يرجى التفكير في مشاركته مع شخص قد يستفيد منه، ومتابعتي على Youtube و LinkedIn و Twitter. أنا أيضًا أطلق دورة جديدة تتناول ما يبحث عنه المحاورون، وكيف يمكنك الاستعداد، وكيف تزيد فرصك في الحصول على المقابلات والوظيفة التي تريدها.
الخلاصة التقنية
تُظهر هذه التجربة أن النجاح في الحصول على وظيفة في شركات تقنية كبرى مثل Twitter لا يعتمد فقط على المعرفة الأكاديمية، بل يتطلب مزيجًا من الإعداد المنهجي، والممارسة المستمرة، والفهم العميق لأساسيات علوم الحاسوب. التركيز على هياكل البيانات والخوارزميات، بالإضافة إلى القدرة على تصميم الأنظمة وتحليل المشاريع السابقة، هي ركائز أساسية. كما أن مهارات التواصل وعرض الحلول، حتى في ظل الضغط، تلعب دورًا حاسمًا. إن رحلة التحضير هذه ليست مجرد اجتياز لاختبارات، بل هي بناء لأسس مهنية قوية تمكن المهندس من التطور والابتكار في بيئات العمل المتطلبة.