كيف بنيت مسيرتي المهنية في أمازون ، حيث أُخذت بالخطأ

اليوم احتفل بخمس سنوات في أمازون. خلال هذا الوقت ، قمت بنقل أكثر من 500000 سطر من التعليمات البرمجية إلى الإنتاج ، وفحصت كود شخص آخر أكثر من 500 مرة ، وصممت ، وطوّرت ، ونشرت ودعمت الأنظمة واسعة النطاق التي يستخدمها آلاف العملاء من جميع أنحاء العالم. أنا أعتبر أحد القادة التقنيين الرائدين في الفريق.



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



كيف تسللت إلى أمازون



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



تجاوز طريقي كل هذه الصعوبات. في عام 2014 ، كانت أمازون تجري مقابلات عمل في الحرم الجامعي للمتدربين الصيفيين. ذهب بعض زملائي الطلاب هناك قبلي. لقد عادوا جميعًا بقصص أسئلة البرمجة المحيرة التي طُرحت عليهم.



أجريت أربعة امتحانات في ذلك الأسبوع ونمت بمعدل أربع ساعات في اليوم. تمكنت من اقتطاع ثلاث ساعات للتحضير. كانت هناك مقابلتين. أسئلة البرمجة التي تلقيتها كانت سهلة للغاية. كان أحدهما حول التلاعب بالبت ، والآخر كان حول استخدام القوائم المرتبطة ، وكان علي أيضًا التحدث عن جداول التجزئة. هذا كل شئ. كنت محظوظا فقط.



المتدربون في أمازون ، إذا قاموا بعمل جيد ، يتلقون عرضًا للانتقال إلى مطور بدوام كامل من المرتبة الأولى على مستوى الدخول. لا يتعين عليهم تكرار المقابلات. كنت أقوم بتدريبي في سياتل - نحتت بشق الأنفس موقع Ruby on Rails من الصفر. حصلت على عرض وبدأت كمطور برمجيات في عام 2015 في ولاية فرجينيا.



عن ندرة معرفتي



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



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



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



أدركت بنفسي أنني لم أكن مواكبة. في البداية ، عذبني متلازمة المحتال بقوة رهيبة.



الفطائر الأولى



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



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



فضح المحتال



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



اخترت واحدة من تلك السهلة على LeetCode - ولم أتمكن من حلها. اخترت آخر - ولم أستطع أيضًا. والثالث والرابع. ثم تبين لي أنني لا أعاني من أي متلازمة. أنا محتال.



كن ، لا يبدو أن يكون



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



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



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



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



ماذا فعلت



الضبط لزيادة قبول الملاحظات إلى أقصى حد



غالبًا ما يكون الوافدون الجدد إلى FAANG يضخمون الغرور. هذا يحرمهم من القدرة على قبول ومراعاة النقد البناء من الزملاء. لكن هؤلاء الزملاء أشخاص أذكياء ، ولكل منهم خبرته الفريدة في مجال تكنولوجيا المعلومات.



لم يكن لدي أي مشاكل مع احترام الذات. بطريقة ودية ، لم يكن لدي أي علاقة بالشركة. لذلك ، عندما تلقيت ملاحظات ، استمعت واستمعت بعمق.



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



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



عند طرح أسئلة غبية ،



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



على سبيل المثال:



« , . , ?»



« , ?»



« , . - ?»


وسرعان ما حصلت على مئات الإشارات المرجعية وجمعت أطنانًا من المعلومات الإضافية ونجحت جدًا في المشاركة في الاجتماعات.



العثور على مفتش التعليمات البرمجية Restless



في البداية ، من المهم جدًا أن يقوم أكبر عدد ممكن من المطورين الآخرين بمراجعة التعليمات البرمجية الخاصة بك. سيكون لكل موظف يقوم بالتفتيش تفضيلاته الخاصة ، المزعجة ، المزعجة للحيوانات الأليفة. ولكن الأهم من ذلك هو معرفة المفتش القلق.



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



استخدام الأنماط الموجودة لتجنب الأخطاء



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



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



ركز على الصواب والملاءمة



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



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



إلقاء نفسك في الحر



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



في أول فرصة ، أخبرت رئيسي ببساطة: أنا جاهز. حتى لو لم تتح لي الفرصة قبل ذلك لمراقبة تصرفات الآخرين بالتفصيل ، كما ينصح عادة. في بعض الأحيان كان علي أن أطلب المساعدة أو أن يقوم أحد من زملائي بمتابعة عملي. لكن في النهاية ، سمح لي بتوسيع منطقة الراحة الخاصة بي وتسريع نموي.



أخذ زمام المبادرة في الأشياء الصغيرة التي



لاحظت وجود فرص لتحسين التميز التشغيلي للفريق وعمليات العمل وتجربة التطوير. أكثر من مرة أو مرتين ، توليت طواعية مهام مملة: لقد أتممت الإجراءات التي تم إجراؤها يدويًا ، وانتهت من التوثيق ، وحسّنت خط أنابيب CI / CD ، وأعدت صياغة الكود القديم.



حاولت أن أكون محترفًا



البرمجة هي نوع من الإبداع يعتمد على المنطق. كل مهمة ، كل وظيفة جديدة ، أدركت أنها ورقة فارغة يمكنك من خلالها إظهار مهاراتك وترك الإبداع.



يجب أن يكون مطور المستوى الثاني مهندس برمجيات أو محترفًا ، وفقًا لستيفن بريسفيلد ، مؤلف كتاب The War of Art. بذلت كل جهودي في كتابة كود نظيف (يجب عليك بالتأكيد قراءة الكتاب الذي يحمل نفس الاسم) وإنشاء حلول جميلة وأنيقة.



لقد أشار بوضوح إلى رغبته في زيادة



في شركات FAANG لا أحد يقدم زيادة - تسألهم بنفسك ، وأكثر من مرة. إذا لم يتم ذلك ، ستستمر العملية لعدة أشهر.



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



وضع الوظيفة للترقية قبل الأخرى



فهمت: لا يمكنك العمل فقط للترقية. إذا فعل الجميع هذا ، فسيصبح جو الفريق بالتأكيد غير مناسب للحياة. لكن في الوقت نفسه ، أضع المهام التي أحتاجها للترقية في المقام الأول.



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



جمع الأدلة باستمرار على نجاحي



لا يمكن الاستغناء عن القدرة على تقديم إنجازاته من خلال مجموعة من المؤشرات الكمية والنوعية.



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



أدركت ما يعتمد علي وما لا يعتمد علي



لقد فهمت أن أي شيء يمكن أن يحدث. في بعض الأحيان يفتقد الفريق وظائف مهمة. في بعض الأحيان يتم إغلاق المشاريع. في بعض الأحيان ، بسبب إعادة الهيكلة ، تغييرات الإدارة. في بعض الأحيان يكون خط أنابيب CI / CD مثاليًا بالفعل ولا يوجد شيء لتحسينه.



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



خواطر



هل "ثقافة Leetcode" التي نشأت أثناء عملية التوظيف تضر بالعمل؟



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



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



لذا من الأسهل الدخول إلى مطورين من المرتبة الأولى من خلال فترة تدريب؟



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



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



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



إذاً ، ما كان يجب على أمازون توظيفك؟



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



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



All Articles