
ألا يبدو غريباً أنك عندما تقوم بتغيير مكان عملك وتحتاج إلى إجراء مقابلة ، فأنت تعتقد أولاً "أنك بحاجة للتحضير للمقابلة". حل المشكلات على HackerRank ، اقرأ Crack the coding interview ، وحفظ كيفية عمل ArrayList وكيف يختلف عن LinkedList. نعم ، لا يزال بإمكانهم طلب الفرز ، ومن الواضح أنه من غير المهني أن نقول إن التصنيف السريع من المرجح أن يكون الخيار الأفضل.
لكن انتظر ، أنت تقوم ببرمجة 8 ساعات في اليوم ، وتحل المهام الشيقة وغير التافهة ، وفي مكان العمل الجديد ، ستقوم بالإيجاب أو ناقص نفس الشيء. ومع ذلك ، من أجل اجتياز المقابلة ، من الضروري التحضير بطريقة ما بالإضافة إلى ذلك ، ليس حتى لصقل مهاراتك اليومية ، ولكن لمعرفة ما لم تكن بحاجة إليه في وظيفتك الحالية ، أو من غير المحتمل أن تكون هناك حاجة إليه في اليوم التالي. إلى اعتراضاتك على أن علوم الكمبيوتر في دمائنا ، وإيقاظنا في منتصف الليل ، فنحن ملزمون بالكتابة بعيون مغلقة على وسادة على الأقدام حول شجرة على نطاق واسع دون حتى استعادة الوعي ، وسأجيب أنه إذا استقرت في سيرك هذه هي الحيلة - ربما نعم ، أنا أوافق. تحتاج إلى التحقق من هذه المهارة.
ولكن لماذا اختبار المهارات التي لا علاقة لها وظيفتك الحالية؟ فقط لأنه أصبح من المألوف؟ لأن جوجل تفعل هذا؟ أو لأن قائد فريقك المستقبلي كان عليه أن يتعلم كل أساليب الفرز قبل إجراء مقابلة وهو يعتقد الآن أن "كل مبرمج جيد يجب أن يعرف عن ظهر قلب تنفيذ عملية العثور على متناظرة في خط".
بطة ، أنت لست جوجل (ق). ما تستطيع Google تحمله ، لا تستطيع الشركات العادية ذلك. توصلت Google بعد تحليل بيانات موظفيها إلى استنتاج مفاده أن الأمر يتعلق به على وجه التحديد ، وعلى وجه التحديد مع مهامه ، من الجيد للمهندسين ذوي الماضي الأوليمبي التعامل معه. علاوة على ذلك ، من خلال بناء عملية الاختيار ، يمكنهم تحمل مخاطر عدم توظيف العديد من المهندسين الجيدين نظرًا لحقيقة أنهم لا يعرفون كيفية النقر على مشاكل الرياضيات بسهولة. ولكن بالنسبة إليهم ، لا يهم ، فهناك الكثير من الأشخاص الذين يرغبون في العمل في Google ، سيتم إغلاق الوظيفة.
الآن دعونا ننظر من النافذة ، وإذا كان لا يزال هناك بعض المعسكرون أمام مكتبك الذين لا يريدون العمل من أجلك ، ومن المرجح أن يبحث مطورو البرامج عن تدفق مكدس للتعليق التوضيحي الربيع المقبل ، بدلاً من التفاصيل الدقيقة لخوارزميات الترتيب ، ثم ، على الأرجح ، يجب أن تفكر في نسخ Google.
حسنًا ، إذا فشلت Google هذه المرة ولم تقدم إجابة ، فماذا أفعل؟ تحقق بالضبط ما سوف تفعل المطور في العمل. ماذا قيمة في المطورين؟
ضع معايير لمن ترغب في توظيف وتطوير الاختبارات التي تختبر هذه المهارات الخاصة.
ThoughtWorks
ما علاقة ThoughtWorks به؟ وجدت هنا مثالاً على مقابلة نموذجية لنفسي. من هم ThoughtWorks؟ باختصار ، هذه شركة استشارية راقية لها مكاتب في جميع أنحاء العالم من الصين ، ومن سنغافورة إلى الأمريكتين ، والتي تقدم المشورة في تطوير حوالي 25 عامًا ، ولديها قسم علوم خاص بها ، يرأسه مارتن فاولر. إذا كنت تبحث عن قائمة من 10 كتب يجب قراءتها لمهندس البرمجيات ، فربما يتم كتابة 2-3 منها من قبل ThoughtWorks guys ، مثل Refactoring By Martin Fowler و Building Microservices: Designing-Fine-Grained Systems by Sam Newman أو Building البنى التطورية
بقلم باتريك كوا ، ريبيكا بارسونز ، نيل فورد.
يعتمد عمل الشركة على توفير خدمات باهظة الثمن إلى حد ما ، ولكن العميل يدفع مقابل الجودة الهائلة ، والتي تتكون من الخبرة والمعايير الداخلية والأشخاص بالطبع. لذلك ، من المهم للغاية توظيف الأشخاص المناسبين.
أي نوع من الناس على حق؟ بالطبع ، لكل خاصة بهم. قررت ThoughtWorks أنه بالنسبة لنموذج أعمالهم للمطورين ، فإن أهم المعايير هي:
- القدرة على الاقتران التنمية. إنها القدرة وليس الخبرة أو المهارة. لا أحد يتوقع من الأشخاص الذين مارسوا البرمجة الزوجية لمدة 5 سنوات قادمة ، لكن أن تكون متقبلاً لآراء الآخرين ، تكون القدرة على الاستماع مهارة ضرورية.
- القدرة على كتابة الاختبارات ، وممارسة TDD مثالي
- فهم SOLID و OOP وتكون قادرة على تطبيقها.
- قدم رأيك. يتعين على الاستشاري العمل مع مطوري العميل ومع المستشارين الآخرين ، ولن يكون هناك فائدة كبيرة إذا كان الشخص يعرف كيفية القيام بعمل جيد ، لكنه غير قادر تمامًا على إيصال ذلك إلى بقية الفريق.
من المهم الآن تقييم مهارات المرشح بدقة. وهنا أريد أن أتحدث عن تجربتي في إجراء المقابلات في ThoughtWorks. سأقول على الفور أنني ذهبت إلى سنغافورة ومرت ، لكن عملية التجنيد موحدة ولن تختلف كثيرًا من بلد إلى آخر.
المرحلة 0. الموارد البشرية
كما يحدث في كثير من الأحيان ، مقابلة لمدة 20 دقيقة مع HR. لن أتحدث عن ذلك ، لا يمكنني إلا أن أقول إنني لم أقابل مطلقًا أي موظف موارد بشرية يمكنه التحدث عن ثقافة التطوير في الشركة لمدة 15 دقيقة ، ولماذا يستخدمون TDD ، ولماذا البرمجة المزدوجة. عادةً ما يتحدث موظفو الموارد البشرية عن هذا السؤال ويقولون إن لديهم عملية طبيعية: تطوير المطورين ، واختبار المختبرين ، وقيادة المديرين.
المرحلة 1. كيف جيدة أنت في OOP ، TDD؟
قبل 1.5 ساعة من المقابلة ، أرسلوا إلي مهمة لإعداد محاكي Mars Rover.
كويست المريخ روفرستهبط ناسا بمجموعة من روفرز الروبوتات على هضبة على سطح المريخ. يجب أن تتنقل هذه الهضبة ، وهي مستطيلة بشكل غريب ، من قبل روفرز حتى تتمكن الكاميرات على متنها من الحصول على رؤية كاملة للتضاريس المحيطة لإرسالها مرة أخرى إلى الأرض. يتم تمثيل موقع وموقع روفر من خلال مزيج من إحداثيات س و ص ورسالة تمثل إحدى نقاط البوصلة الأساسية الأربعة. تنقسم الهضبة إلى شبكة لتبسيط التنقل. قد يكون الموضع المثال هو 0 ، 0 ، N ، مما يعني أن روفر في الزاوية اليسرى السفلى وتواجه الشمال. من أجل السيطرة على روفر ، ترسل ناسا سلسلة بسيطة من الحروف. الحروف الممكنة هي "L" و "R" و "M". 'L' و 'R' يجعلان السفينة تدور 90 درجة يسارًا أو يمينًا على التوالي ، دون الانتقال من مكانها الحالي. "M" تعني تحريك نقطة شبكة واحدة للأمام والحفاظ على نفس العنوان.
افترض أن المربع مباشرة شمالًا من (x، y) هو (x، y + 1).
INPUT:
السطر الأول من المدخلات هو الإحداثيات العلوية اليمنى للهضبة ، ويُفترض أن الإحداثيات السفلى اليسرى تساوي 0،0.
ما تبقى من المدخلات هي المعلومات المتعلقة روفر التي تم نشرها. كل روفر لديه سطرين من المدخلات. يعطي السطر الأول موضع المتجول ، والخط الثاني عبارة عن سلسلة من الإرشادات التي تخبر المتجول عن كيفية استكشاف الهضبة. يتألف الموضع من عددين صحيحين ورسالة مفصولة بمسافات ، تتوافق مع إحداثي x و y واتجاه روفر.
سيتم الانتهاء من كل روفر بالتتابع ، مما يعني أن روفر الثانية لن تبدأ في التحرك حتى تنتهي الحركة الأولى.
OUTPUT:
يجب أن يكون الإخراج لكل روفر هو إحداثياته النهائية وعنوانه.
ملاحظات:
ما عليك سوى تنفيذ المتطلبات أعلاه وإثبات أن المكنسة الكهربائية تعمل عن طريق كتابة اختبارات الوحدات الخاصة بها.
إنشاء أي شكل من أشكال واجهة المستخدم هو خارج النطاق.
يفضل حل المشكلة باتباع نهج TDD (تطوير الاختبارات المدفوعة).
في الوقت القصير المتاح ، نحن مهتمون بالجودة أكثر من الاكتمال.
* لا يمكنني نشر المهمة التي تم إرسالها إلي ، فهذه مهمة قديمة تم تكليفها بها منذ عدة سنوات. لكن صدقوني ، كل شيء يبقى كما هو.
بشكل منفصل ، أريد أن أنتبه إلى معايير التقييم. كم مرة واجهت موقفًا تكون فيه الأشياء المهمة للمرشح غير مهمة تمامًا عند التدقيق والعكس صحيح. لا يفكر الجميع بنفس الطريقة التي تفكر بها ، ولكن يمكن للكثيرين قبول قيمك ومتابعتها إذا تم النص بوضوح. لذلك ، من معيار التقييم ، يتضح على الفور أن أهم المهارات في هذه المرحلة هي
- TDD.
- القدرة على استخدام OOP وكتابة التعليمات البرمجية المدعومة ؛
- قدرات البرمجة الزوجية
لذا ، تم تحذيري لقضاء هذه الساعات ونصف الساعة في التفكير في كيفية القيام بالمهمة ، بدلاً من كتابة التعليمات البرمجية. سنكتب الرمز معًا.
عندما اتصلنا ، أخبر الرجال لفترة وجيزة من هم وماذا كانوا يفعلون وعرضوا بدء التنمية.
طوال فترة المقابلة ، لم أشعر قط أنني كنت في مقابلة. هناك شعور بأنك تقوم بتطوير الكود في الفريق. إذا واجهتك مشكلة في مكان ما - فهم يساعدون وينصحون ويناقشون ويجادلون فيما بينهم حول أفضل طريقة للقيام بذلك. في المقابلة ، نسيت كيف تحقق في JUnit 5 من أن الأسلوب يلقي استثناءً - اقترحوا الاستمرار في كتابة الاختبار ، بينما قام أحدهم بالبحث عن كيفية القيام بذلك.
بعد ساعات قليلة من المقابلة ، تلقيت ردود فعل بناءة - ما أعجبتني وماذا لم أحبه. في حالتي ، تم الإشادة باستخدام الطبقات المختومة كبديل لكائن null ؛ لأنني كتبت رمزًا زائفًا قبل كتابة التعليمات البرمجية ، كما لو كنت أرغب في التحكم في سيارة روفر ، وبالتالي حصلت على رسم بياني للفصول الدراسية ، على الأقل تلك المشاركة في واجهة برمجة تطبيقات الروبوت.
المرحلة 2. أخبرنا
قبل أسبوع من المقابلة ، طُلب مني إعداد عرض تقديمي حول أي موضوع يهمني. التنسيق بسيط ومألوف: عرض تقديمي مدته 15 دقيقة ، 15 دقيقة إجابات على الأسئلة.
اخترت العمارة النظيفة من قبل العم بوب. ومرة أخرى قابلني شخصان. كانت هذه أول تجربة لي في تقديم اللغة الإنجليزية ، وربما ، لو كنت في موقف مرهق ، لما تمكنت من ذلك. لكن مرة أخرى ، لم أشعر قط بأنني كنت في مقابلة. كل شيء كالمعتاد - أقول لك ، إنهم يستمعون بعناية. حتى جلسة الأسئلة والأجوبة التقليدية لم تكن مثل المقابلة ، فقد كان من الواضح أن الأسئلة قد طُرحت ألا "تغرق" ، بل تلك التي اهتمت حقًا بعرضي.
بعد ساعتين من المقابلة ، تلقيت تعليقًا - كان العرض التقديمي مفيدًا للغاية وقد استمتعوا حقًا بالاستماع.
المرحلة 3. رمز جودة الإنتاج
بعد أن حذرت من أن هذه هي المرحلة الأخيرة من المقابلات الفنية ، فقد طُلب مني إحضار الكود إلى حالة جاهزة للإنتاج في المنزل ، ثم إرسال الرمز إلى مراجعة وجدولة المقابلات التي تتغير فيها متطلبات المهمة وستحتاج إلى تعديل الرمز. بالنظر إلى المستقبل ، أستطيع أن أقول إن مراجعة الشفرة تتم بصورة عمياء ، والمراجعون لا يعرفون الموقف الذي يتقدم به المرشح ، ولا يرون سيرته الذاتية ، ولا يرون اسمه.
اتصل هاتفيا ، ومرة أخرى زوجين من الرجال على الجانب الآخر من الشاشة. كل شيء يشبه في المقابلة الأولى: الشيء الرئيسي هو عدم نسيان TDD ، أخبر ما تفعله ولماذا. إذا لم تكن قد مارست TDD من قبل ، فنوصيك بالبدء في القيام بذلك على الفور ، ليس لأنه ضروري في الشركات ، ولكن لأنه يبسط حياتك إلى حد كبير ، يقلل من التوتر إذا كنت تريد ذلك. تذكر كيف اضطررت للبحث بشكل محموم عن مصحح أخطاء عن الخطأ الذي يتم استنساخه فقط من خلال المتصفح ، ولكن لا يمكنك إعادة إنتاجه باستخدام الاختبارات؟ الآن تخيل أنه يجب عليك أن تصاب بهذا الخطأ أثناء المقابلة - تم تزويدك بشعرين رماديين. ما يتم توفيرها لنا مع TDD؟ لقد قمنا بتغيير الرمز وأدركنا بشكل غير متوقع أن الاختبارات أصبحت الآن حمراء ، ولكن ما هو الخطأ الذي لا يمكن فهمه في المرة الأولى؟ حسنًا ، نقول "عفوًا" للمقابلات ، واضغط على Ctrl-Z وابدأ المشي بخطوات صغيرة إلى الأمام. ونعم ، القدرة على التطوير باستخدام TDD ، يجب أن تتطور بنفسك ، والقدرة على الذهاب إلى الهدف بحيث تصبح اختباراتك خضراء بشكل دائم وليست حمراء لمدة نصف يوم ، لأن "لديك الكثير من إعادة البناء." هذا هو بالضبط نفس المهارة مثل القدرة على كتابة التعليمات البرمجية المدعومة ، أو التعليمات البرمجية الإنتاجية.
لذا ، يعتمد مدى ملاءمة رمزك للتغيير على التصميم الذي وضعته أصلاً ، ومدى بساطته ، ومدى جودة اختباراتك.
بعد المقابلة ، تلقيت ردود فعل في غضون ساعات قليلة. في هذه المرحلة ، أدركت أنني مررت عمليًا ولم يتبق سوى القليل جدًا حتى "لقاء مع فاولر".
المرحلة 4. النهائي. أسئلة فنية كافية. نريد أن نعرف من أنت!
بصراحة ، شعرت بالحيرة إلى حد ما بسبب هذه الصيغة للسؤال. كيف يمكنني أن أفهم أي نوع من الأشخاص في ساعة واحدة من المحادثة؟ والأهم من ذلك ، كيف يمكنني أن أفهم هذا عندما أتحدث لغة ليست مألوفة بالنسبة لي ، وبصراحة تامة ، رديئة للغاية ومربوطة باللسان. في المقابلات السابقة ، كان من الأسهل بالنسبة لي أن أتحدث شخصياً بدلاً من الإجابة على الأسئلة ، وكان التركيز على اللوم. كان واحد من المقابلات على الأقل آسيويًا - وتركيزهم ، حسنًا ، دعنا نقول ، خاص إلى حد ما بالأذن الأوروبية. لذلك ، قررت أن أتبع نهجًا استباقيًا - لإعداد عرض تقديمي عني وفي بداية المقابلة لتقديم عرض لأخبر عن نفسي بهذا العرض التقديمي. إذا وافقوا ، فستكون هناك على الأقل أسئلة أقل بالنسبة لي ، وإذا رفضوا العرض - حسنًا ، إذن ، فإن 3 ساعات من حياتي التي أمضيتها في العرض التقديمي ليست باهظة الثمن. ولكن ماذا أكتب في العرض؟ السيرة الذاتية - ولد هناك ، ثم ، ذهب إلى المدرسة ، وتخرج من الجامعة - ولكن من يهتم؟
إذا كنت غوغل تتحدث قليلاً عن ثقافة Thoughtworks ، فيمكنك العثور على مقال بقلم Martin Fowler [https://martinfowler.com/bliki/ThreePillars.html] ، الذي يصف 3 أعمدة: الأعمال المستدامة وتميز البرامج والعدالة الاجتماعية.
لنفترض أنني قد راجعت بالفعل امتياز البرنامج. يبقى لإظهار الأعمال المستدامة والعدالة الاجتماعية.
علاوة على ذلك ، قررت التركيز على هذا الأخير.
بادئ ذي بدء ، أخبرتك لماذا ThoughtWorks - أثناء تواجدك في المعهد ، اقرأ مدونة Martin Fowler ، وبالتالي حب Clean Code.
يمكن أيضًا تقديم المشروعات من زوايا مختلفة. وقد طور أيضًا برنامجًا للطب جعل الحياة أسهل للمرضى ، وحتى يشاع أنه أنقذ حياة واحدة. كما طور برامج للبنوك ، وأيضًا نوع من تبسيط الحياة للمواطنين. خاصة إذا كان 70 ٪ من سكان البلاد يستخدم هذا البنك. الأمر لا يتعلق بسبيربنك ولا حتى عن روسيا.
تريد أن تعرف عني؟ حسنا. وهوايتي هي التصوير الفوتوغرافي ، بطريقة أو بأخرى كنت أحملها الكاميرا في يدي منذ حوالي 10 سنوات ، وهناك صور ليست محرجة للغاية للعرض. أيضا ، في وقت واحد ، ساعدت ملجأ القط: لقد صورت القطط التي تحتاج إلى منزل دائم. مع الصور الجيدة ، يكون من السهل إرفاق قطة. ربما تم تصويره بمئة قطط :)في نهاية المطاف ، 80 ٪ من العرض التقديمي كان مليئا القطط.
مباشرة بعد العرض التقديمي ، كتب HR إلى أنه لم يعرف بعد نتائج المقابلة ، لكن المكتب بأكمله كان معجبًا بالفعل بالقطط.
في النهاية ، انتظرت التعليقات - أنا راضي الجميع كشخص.
لكن الموارد البشرية في المحادثة النهائية قالت بلباقة أن العدالة الاجتماعية جيدة جدًا وضرورية ، لكن ليست كل المشاريع هكذا. وسئل عما اذا كان هذا يخيفني. بشكل عام ، ذهبت بعيدا مع العدالة الاجتماعية ، يحدث ذلك :)
يؤدي
ونتيجة لذلك ، كنت أعمل في سنغافورة في Thoughtworks منذ عدة أشهر الآن ، وأرى أن العديد من الشركات هنا تتبنى "أفضل ممارسات المقابلات" من Google ، باستخدام المنشورات ولوح المعلومات للتشفير ، على الرغم من أن المعرفة أبعد من Spring و Symfony و RubyOnRails ( تسطير) غير مطلوب في العمل. يأخذ المهندسون إجازة لمدة أسبوع قبل المقابلة "للاستعداد".
في Thoughtworks ، بالإضافة إلى المتطلبات الكافية للمرشح ، يتم وضع المبادئ التالية في المقدمة:
فرحة المقابلة. علاوة على ذلك ، لكلا الجانبين. في الواقع ، إذا كنت ترغب في الحصول على أفضل الموظفين (ومن لا يريد؟) ، فالمقابلة ليست سوقًا يتم فيه اختيار العبيد ، ولكن العريس ، حيث يقوم كل من صاحب العمل والمرشح بتقييم بعضهم البعض. وإذا كان المرشح يربط المشاعر السارة بشركة ما ، فمن المرجح أنه سيختار هذه الشركة.
مقابلات متعددة لتخفيف التحيز. في Thoughtworks ، البرمجة الزوجية هي المعيار الفعلي. وإذا كان يمكن تطبيق هذه الممارسة في مجالات أخرى ، فإن TW تحاول القيام بذلك. في كل مرحلة ، يقوم شخصان بإجراء مقابلة. وبالتالي ، يقوم 8 أشخاص على الأقل بتقييم كل شخص ، ويحاول TW اختيار من أجريت معهم المقابلات بخلفيات مختلفة ، واتجاهات مختلفة (وليس التقنيين فقط) والجنس.
في نهاية المطاف ، سيتم اتخاذ قرار بشأن التوظيف بناءً على رأي 8 أشخاص على الأقل ، وليس لأحد حق التصويت.
التوظيف المستند إلى السمات بدلاً من اتخاذ القرارات بناءً على إعجابات / إبداءات المرشح ، تم تطوير نموذج لكل دور ولكل مرحلة ، بما في ذلك السمات التي يتم تقييمها. في الوقت نفسه ، عند التقييم ، يُنصح بشدة بتقييم ليس الخبرة في مهارة معينة ، بل القدرة على تطبيقها. وبالتالي ، إذا كان المرشح غير ممكن لتطبيق أي مهارات مثل TDD ، ولكن مع ذلك يحاول تطبيقه ، يستمع إلى نصائح للاستخدام المناسب - لديه كل فرصة للحصول على مقابلة.
شهادات التعليم غير مطلوبة TW لا يتطلب من المرشحين الحصول على شهادات إجبارية أو التعليم في علوم الكمبيوتر. يتم تقييم المهارات فقط.
هذه هي المقابلة الأولى لأولئك الذين ذهبت إلى شركات أجنبية لم أكن مضطرًا للاستعداد لها. بعد كل مرحلة ، لم أشعر بالضغط مثل الليمون ، لكن على العكس من ذلك ، كنت سعيدًا لأنني أستطيع تطبيق أفضل الممارسات ، وأن الناس على الجانب الآخر من الشاشة يقدرون ذلك ، ويطبقونها أيضًا كل يوم.
بعد بضعة أشهر ، أستطيع أن أقول إن التوقعات قد تحققت بالكامل. كيف تختلف ThoughtWorks عن شركة عادية؟ في شركة عادية ، يمكنك العثور على مطورين جيدين وأشخاص طيبين ، ولكن تركيزهم في TW ينفد عن نطاقه.
إذا كنت ترغب في الانضمام إلى ThoughtWorks ، فيمكنك الاطلاع على الوظائف المفتوحة
هنا.أقترح أيضًا الانتباه إلى الوظائف الشاغرة المثيرة للاهتمام:
مهندس برمجيات رئيسي: ألمانيا ،
لندن ،
مدريد ،
سنغافورةكبير مهندسي البرمجيات: سيدني ،
ألمانيا ،
مانشستر ،
بانكوكمهندس برمجيات: سيدني ،
برشلونة ،
ميلانكبير مهندسي البيانات: ميلانمحلل الجودة: ألمانيا الصينالبنية التحتية: ألمانيا ،
لندن ،
تشيلي(أريد أن أحذر بأمانة من أن الرابط هو الإحالة ، إذا ذهبت إلى TW ، فسوف أحصل على مكافأة لطيفة). اختر مكتبًا حسب رغبتك ، فليس من الضروري أن تقتصر على أوروبا فقط ، بعد كل شيء ، ستكون TW سعيدة كل عامين بنقلك إلى بلد آخر ، لأن إنها جزء من سياسة ThoughtWorks ، وبالتالي تنتشر الثقافة ومتوسطاتها.
لا تتردد في طرح الأسئلة في التعليقات أو طلب مني أن أنصحك.إذا بدا الموضوع مثيرًا للاهتمام ، فسأكتب عن كيفية عمله في ThoughtWorks وكيف يعيش في سنغافورة.