مبرمجون عظماء
هل تريد بدء شركة ناشئة؟ احصل على تمويل من Y Combinator.
يوليو 2004
(هذه المقالة مستمدة من خطاب ألقي في Oscon 2004.)
قبل بضعة أشهر أنهيت كتابًا جديدًا، وفي المراجعات ألاحظ باستمرار كلمات مثل "مثير للجدل" و "خلافي". ناهيك عن "سخيف".
لم أقصد جعل الكتاب مثيرًا للجدل. كنت أحاول جعله فعالاً. لم أكن أرغب في إضاعة وقت الناس في إخبارهم بأشياء يعرفونها بالفعل. من الأكثر فعالية مجرد تزويدهم بالاختلافات. لكنني أفترض أن ذلك سيؤدي حتمًا إلى كتاب مقلق.
إديسون
لا يوجد جدل حول الفكرة الأكثر إثارة للجدل: الاقتراح بأن التباين في الثروة قد لا يكون مشكلة كبيرة كما نعتقد.
لم أقل في الكتاب أن التباين في الثروة في حد ذاته شيء جيد. قلت إنه في بعض المواقف قد يكون علامة على أشياء جيدة. الصداع النصفي ليس شيئًا جيدًا، ولكنه يمكن أن يكون علامة على شيء جيد - على سبيل المثال، أنك تستعيد وعيك بعد ضربة على رأسك.
يمكن أن يكون التباين في الثروة علامة على التباين في الإنتاجية. (في مجتمع مكون من شخص واحد، هما متطابقان.) وهذا بالتأكيد شيء جيد: إذا لم يكن لدى مجتمعك أي تباين في الإنتاجية، فربما ليس لأن الجميع هم توماس إديسون. ربما لأنك لا تملك أي توماس إديسون.
في مجتمع منخفض التقنية، لا ترى الكثير من التباين في الإنتاجية. إذا كان لديك قبيلة من البدو يجمعون العصي للنار، فكم سيكون جامع العصي الأفضل أكثر إنتاجية من الأسوأ؟ عامل اثنين؟ بينما عندما تسلم الناس أداة معقدة مثل الكمبيوتر، فإن التباين فيما يمكنهم فعله بها هائل.
هذه ليست فكرة جديدة. كتب فريد بروكس عنها في عام 1974، والدراسة التي استشهد بها نُشرت في عام 1968. لكنني أعتقد أنه قلل من شأن التباين بين المبرمجين. كتب عن الإنتاجية في أسطر التعليمات البرمجية: أفضل المبرمجين يمكنهم حل مشكلة معينة في عُشر الوقت. ولكن ماذا لو لم تكن المشكلة معطاة؟ في البرمجة، كما في العديد من المجالات، الجزء الصعب ليس حل المشكلات، بل تحديد المشكلات التي يجب حلها. الخيال يصعب قياسه، ولكنه في الممارسة العملية يهيمن على نوع الإنتاجية التي تُقاس بأسطر التعليمات البرمجية.
تختلف الإنتاجية في أي مجال، ولكن هناك القليل من المجالات التي تختلف فيها كثيرًا. التباين بين المبرمجين كبير لدرجة أنه يصبح اختلافًا في النوع. لا أعتقد أن هذا شيء جوهري للبرمجة، رغم ذلك. في كل مجال، تضخم التكنولوجيا الاختلافات في الإنتاجية. أعتقد أن ما يحدث في البرمجة هو أن لدينا الكثير من الرافعة التكنولوجية. ولكن في كل مجال، يزداد طول الرافعة، لذلك فإن التباين الذي نراه هو شيء ستراه المزيد والمزيد من المجالات مع مرور الوقت. وسيعتمد نجاح الشركات، والبلدان، بشكل متزايد على كيفية تعاملها مع هذا الأمر.
إذا زادت الإنتاجية مع التكنولوجيا، فإن مساهمة الأفراد الأكثر إنتاجية لن تكون كبيرة بشكل غير متناسب فحسب، بل ستنمو فعليًا بمرور الوقت. عندما تصل إلى النقطة التي يتم فيها إنشاء 90٪ من إنتاج المجموعة بواسطة 1٪ من أعضائها، فإنك تخسر كثيرًا إذا شيء ما (سواء كان غارات الفايكنج، أو التخطيط المركزي) يسحب إنتاجيتهم إلى المتوسط.
إذا أردنا الاستفادة القصوى منهم، فنحن بحاجة إلى فهم هؤلاء الأشخاص المنتجين بشكل خاص. ما الذي يحفزهم؟ ما الذي يحتاجونه للقيام بعملهم؟ كيف تتعرف عليهم؟ كيف تجعلهم يأتون ويعملون لديك؟ وبعد ذلك بالطبع هناك السؤال، كيف تصبح واحدًا منهم؟
أكثر من المال
أعرف عددًا قليلاً من المبرمجين الخارقين، لذا جلست وفكرت فيما هو مشترك بينهم. ربما تكون صفتهم المميزة هي أنهم يحبون البرمجة حقًا. يكتب المبرمجون العاديون التعليمات البرمجية لدفع الفواتير. يعتقد المبرمجون العظماء أنها شيء يفعلونه للمتعة، ويسعدون عندما يجدون أن الناس سيدفعون لهم مقابل ذلك.
يُقال أحيانًا أن المبرمجين العظماء غير مبالين بالمال. هذا ليس صحيحًا تمامًا. صحيح أن كل ما يهتمون به حقًا هو القيام بعمل مثير للاهتمام. ولكن إذا كسبت ما يكفي من المال، يمكنك العمل على أي شيء تريده، ولذلك السبب ينجذب المبرمجون إلى فكرة كسب مبالغ كبيرة جدًا من المال. ولكن طالما أنهم لا يزالون بحاجة إلى الحضور إلى العمل كل يوم، فإنهم يهتمون بما يفعلونه هناك أكثر من مقدار ما يتقاضونه مقابل ذلك.
اقتصاديًا، هذه حقيقة ذات أهمية قصوى، لأنها تعني أنك لا تضطر إلى دفع رواتب للمبرمجين العظماء بقدر ما يستحقون. قد يكون المبرمج العظيم أكثر إنتاجية بعشر أو مائة مرة من المبرمج العادي، ولكنه سيشعر بالسعادة إذا حصل على ثلاثة أضعاف الأجر. كما سأشرح لاحقًا، هذا يرجع جزئيًا إلى أن المبرمجين العظماء لا يعرفون مدى جودتهم. ولكن هذا أيضًا لأن المال ليس الشيء الرئيسي الذي يريدونه.
ماذا يريد المبرمجون؟ مثل جميع الحرفيين، يحب المبرمجون الأدوات الجيدة. في الواقع، هذا بخس. يجد المبرمجون الجيدون صعوبة لا تطاق في استخدام أدوات سيئة. سيرفضون ببساطة العمل على مشاريع ذات بنية تحتية خاطئة.
في شركة ناشئة عملت بها ذات مرة، كانت إحدى الأشياء المثبتة على لوحة الإعلانات لدينا إعلانًا من IBM. كانت صورة لـ AS400، وكان العنوان، على ما أعتقد، "يكره المبرمجون ذلك". [1]
عندما تقرر ما هي البنية التحتية التي ستستخدمها لمشروع ما، فأنت لا تتخذ قرارًا تقنيًا فحسب. أنت تتخذ أيضًا قرارًا اجتماعيًا، وقد يكون هذا هو الأكثر أهمية بين الاثنين. على سبيل المثال، إذا كانت شركتك تريد كتابة بعض البرامج، فقد يبدو اختيار كتابتها بلغة Java قرارًا حكيمًا. ولكن عندما تختار لغة، فإنك تختار أيضًا مجتمعًا. المبرمجون الذين ستتمكن من توظيفهم للعمل في مشروع Java لن يكونوا أذكياء مثل أولئك الذين يمكنك الحصول عليهم للعمل في مشروع مكتوب بلغة Python. وجودة المبرمجين لديك ربما تكون أكثر أهمية من اللغة التي تختارها. على الرغم من أنه بصراحة، فإن حقيقة أن المبرمجين الجيدين يفضلون Python على Java يجب أن تخبرك شيئًا عن المزايا النسبية لتلك اللغات.
تفضل أنواع الأعمال اللغات الأكثر شيوعًا لأنهم يعتبرون اللغات معايير. لا يريدون المراهنة بالشركة على Betamax. الشيء المتعلق باللغات، مع ذلك، هو أنها ليست مجرد معايير. إذا كان عليك نقل بتات عبر شبكة، فاستخدم TCP/IP بكل سرور. ولكن لغة البرمجة ليست مجرد تنسيق. لغة البرمجة هي وسيلة للتعبير.
لقد قرأت أن Java قد تجاوزت Cobol كلغة الأكثر شيوعًا. كمعيار، لا يمكنك أن تتمنى أكثر من ذلك. ولكن كوسيلة للتعبير، يمكنك فعل الكثير أفضل. من بين جميع المبرمجين العظماء الذين يمكنني التفكير فيهم، لا أعرف سوى واحد منهم سيبرمج طواعية بلغة Java. ومن بين جميع المبرمجين العظماء الذين يمكنني التفكير فيهم والذين لا يعملون في Sun، على Java، لا أعرف صفرًا.
يصر المبرمجون العظماء بشكل عام أيضًا على استخدام البرامج مفتوحة المصدر. ليس فقط لأنها أفضل، ولكن لأنها تمنحهم مزيدًا من التحكم. يصر المبرمجون الجيدون على التحكم. هذا جزء مما يجعلهم مبرمجين جيدين: عندما يكون هناك شيء معطل، يحتاجون إلى إصلاحه. تريدهم أن يشعروا بهذا الشعور تجاه البرامج التي يكتبونها لك. لا ينبغي أن تتفاجأ عندما يشعرون بنفس الشيء تجاه نظام التشغيل.
قبل عامين أخبرني صديق مستثمر في رأس المال الاستثماري عن شركة ناشئة جديدة كان مشاركًا فيها. بدت واعدة. ولكن في المرة التالية التي تحدثت إليه فيها، قالوا إنهم قرروا بناء برامجهم على Windows NT، وقد وظفوا للتو مطور NT ذو خبرة كبيرة ليكون كبير المسؤولين التقنيين لديهم. عندما سمعت هذا، فكرت، هؤلاء الرجال محكوم عليهم بالفشل. أولاً، لا يمكن أن يكون كبير المسؤولين التقنيين مبرمجًا من الدرجة الأولى، لأنه ليصبح مطور NT بارزًا كان عليه استخدام NT طواعية، عدة مرات، ولا يمكنني تخيل مبرمج عظيم يفعل ذلك؛ وثانيًا، حتى لو كان جيدًا، فسيكون لديه صعوبة في توظيف أي شخص جيد للعمل لديه إذا كان المشروع يجب أن يُبنى على NT. [2]
الحدود النهائية
بعد البرامج، ربما تكون الأداة الأكثر أهمية للمبرمج هي مكتبه. تعتقد الشركات الكبيرة أن وظيفة مساحة المكتب هي التعبير عن الرتبة. لكن المبرمجين يستخدمون مكاتبهم لأكثر من ذلك: يستخدمون مكتبهم كمكان للتفكير فيه. وإذا كنت شركة تكنولوجيا، فإن أفكارهم هي منتجك. لذا فإن جعل المبرمجين يعملون في بيئة صاخبة ومشتتة هو مثل وجود مصنع طلاء حيث الهواء مليء بالسخام.
شريط الرسوم المتحركة Dilbert لديه الكثير ليقوله عن المكاتب المكعبة، ولسبب وجيه. جميع المبرمجين الذين أعرفهم يكرهونها. مجرد احتمال المقاطعة يكفي لمنع المبرمجين من العمل على مشاكل صعبة. إذا كنت تريد إنجاز عمل حقيقي في مكتب به مكاتب مكعبة، لديك خياران: العمل في المنزل، أو الحضور مبكرًا أو متأخرًا أو في عطلة نهاية الأسبوع، عندما لا يكون هناك أحد آخر. ألا تدرك الشركات أن هذا علامة على أن شيئًا ما معطل؟ من المفترض أن تكون بيئة المكتب شيئًا يساعدك على العمل، وليس شيئًا تعمل على الرغم منه.
شركات مثل Cisco فخورة بأن كل شخص هناك لديه مكتب مكعب، حتى الرئيس التنفيذي. لكنهم ليسوا متقدمين كما يعتقدون؛ من الواضح أنهم لا يزالون ينظرون إلى مساحة المكتب كعلامة على الرتبة. لاحظ أيضًا أن Cisco تشتهر بالقيام بتطوير منتجات قليلة جدًا داخليًا. يحصلون على تكنولوجيا جديدة عن طريق شراء الشركات الناشئة التي أنشأتها - حيث يفترض أن المبرمجين لديهم مكان هادئ للعمل.
إحدى الشركات الكبيرة التي تفهم ما يحتاجه المبرمجون هي Microsoft. رأيت مرة إعلانًا تجنيديًا لـ Microsoft مع صورة كبيرة لباب. اعمل لدينا، كانت الفرضية، وسنمنحك مكانًا للعمل يمكنك فيه إنجاز العمل بالفعل. وأنت تعلم، Microsoft ملحوظة بين الشركات الكبيرة من حيث أنها قادرة على تطوير البرامج داخليًا. ليس جيدًا، ربما، ولكن جيد بما يكفي.
إذا أرادت الشركات أن يكون المبرمجون منتجين، فيجب عليهم النظر إلى ما يفعلونه في المنزل. في المنزل، يمكن للمبرمجين ترتيب الأشياء بأنفسهم للحصول على أقصى قدر من الإنجاز. وعندما يعملون في المنزل، لا يعمل المبرمجون في مساحات مفتوحة صاخبة؛ إنهم يعملون في غرف بها أبواب. إنهم يعملون في أماكن مريحة وقريبة من الحي مع أشخاص حولهم ومكان للمشي عندما يحتاجون إلى التفكير في شيء ما، بدلاً من صناديق زجاجية موضوعة في فدادين من مواقف السيارات. لديهم أريكة يمكنهم أخذ قيلولة عليها عندما يشعرون بالتعب، بدلاً من الجلوس في غيبوبة على مكتبهم، متظاهرين بالعمل. لا يوجد فريق من الأشخاص مع المكانس الكهربائية التي تزأر كل مساء خلال ساعات البرمجة الرئيسية. لا توجد اجتماعات أو، لا قدر الله، تراجعات للشركات أو تمارين بناء الفريق. وعندما تنظر إلى ما يفعلونه على هذا الكمبيوتر، ستجد أنه يعزز ما قلته سابقًا عن الأدوات. قد يضطرون إلى استخدام Java و Windows في العمل، ولكن في المنزل، حيث يمكنهم الاختيار بأنفسهم، من المرجح أن تجدهم يستخدمون Perl و Linux.
في الواقع، يمكن أن تكون هذه الإحصائيات حول Cobol أو Java كونها اللغة الأكثر شيوعًا مضللة. ما يجب أن ننظر إليه، إذا أردنا معرفة أفضل الأدوات، هو ما يختاره المبرمجون عندما يمكنهم الاختيار بحرية - أي، في مشاريعهم الخاصة. عندما تطرح هذا السؤال، تجد أن أنظمة التشغيل مفتوحة المصدر لديها بالفعل حصة سوقية مهيمنة، واللغة الأولى هي على الأرجح Perl.
مثير للاهتمام
إلى جانب الأدوات الجيدة، يريد المبرمجون مشاريع مثيرة للاهتمام. ما الذي يجعل المشروع مثيرًا للاهتمام؟ حسنًا، من الواضح أن التطبيقات المثيرة بشكل علني مثل الطائرات الشبح أو برامج المؤثرات الخاصة ستكون مثيرة للاهتمام للعمل عليها. ولكن أي تطبيق يمكن أن يكون مثيرًا للاهتمام إذا كان يطرح تحديات تقنية جديدة. لذا من الصعب التنبؤ بالمشكلات التي سيحبها المبرمجون، لأن بعضها يصبح مثيرًا للاهتمام فقط عندما يكتشف الأشخاص الذين يعملون عليها نوعًا جديدًا من الحلول. قبل ITA (التي كتبت البرامج داخل Orbitz)، ربما اعتقد الأشخاص الذين يعملون على البحث عن أسعار تذاكر الطيران أنها واحدة من أكثر التطبيقات مملة التي يمكن تخيلها. لكن ITA جعلتها مثيرة للاهتمام عن طريق إعادة تعريف المشكلة بطريقة أكثر طموحًا.
أعتقد أن نفس الشيء حدث في Google. عندما تأسست Google، كانت الحكمة التقليدية بين البوابات المسماة هي أن البحث ممل وغير مهم. لكن الرجال في Google لم يعتقدوا أن البحث ممل، ولهذا السبب يفعلونه بشكل جيد للغاية.
هذا مجال يمكن للمديرين إحداث فرق فيه. مثل الوالد الذي يقول لطفله، أراهن أنك لا تستطيع تنظيف غرفتك بالكامل في عشر دقائق، يمكن للمدير الجيد أحيانًا إعادة تعريف المشكلة على أنها مشكلة أكثر إثارة للاهتمام. يبدو ستيف جوبز جيدًا بشكل خاص في هذا، ويرجع ذلك جزئيًا ببساطة إلى وجود معايير عالية. كانت هناك العديد من أجهزة الكمبيوتر الصغيرة وغير المكلفة قبل Mac. لقد أعاد تعريف المشكلة على أنها: اصنع واحدة جميلة. ومن المحتمل أن ذلك دفع المطورين بقوة أكبر من أي جزرة أو عصا.
لقد قدموا بالتأكيد. عندما ظهر Mac لأول مرة، لم تكن بحاجة حتى إلى تشغيله لمعرفة أنه سيكون جيدًا؛ كان يمكنك معرفة ذلك من العلبة. قبل بضعة أسابيع كنت أمشي في الشارع في كامبريدج، وفي قمامة شخص ما رأيت ما بدا أنه حقيبة حمل Mac. نظرت إلى الداخل، وكان هناك Mac SE. حملته إلى المنزل ووصلته، وقام بالتمهيد. وجه Macintosh السعيد، ثم Finder. يا إلهي، كان الأمر بسيطًا جدًا. كان الأمر أشبه بـ ... Google.
يحب المبرمجون العمل لدى أشخاص لديهم معايير عالية. ولكن لا يكفي أن تكون دقيقًا. يجب أن تصر على الأشياء الصحيحة. وهذا يعني عادةً أنك يجب أن تكون مبرمجًا بنفسك. لقد رأيت مقالات عرضية حول كيفية إدارة المبرمجين. في الواقع يجب أن تكون هناك مقالتان: واحدة حول ما يجب فعله إذا كنت مبرمجًا بنفسك، وواحدة حول ما يجب فعله إذا لم تكن كذلك. ويمكن اختصار الثانية ربما في كلمتين: استسلم.
المشكلة ليست في الإدارة اليومية. المبرمجون الجيدون عمليًا يديرون أنفسهم. المشكلة هي، إذا لم تكن مبرمجًا، فلا يمكنك معرفة من هم المبرمجون الجيدون. مشكلة مماثلة تفسر لماذا السيارات الأمريكية قبيحة جدًا. أسميها مفارقة التصميم. قد تعتقد أنه يمكنك جعل منتجاتك جميلة فقط عن طريق توظيف مصمم رائع لتصميمها. ولكن إذا لم يكن لديك ذوق جيد بنفسك، فكيف ستتعرف على مصمم جيد؟ بحكم التعريف لا يمكنك معرفة ذلك من ملف أعماله. ولا يمكنك الاعتماد على الجوائز التي فاز بها أو الوظائف التي حصل عليها، لأنه في التصميم، كما في معظم المجالات، تميل تلك إلى أن تكون مدفوعة بالموضة والتملق، مع كون القدرة الفعلية في المرتبة الثالثة. لا توجد طريقة للالتفاف حولها: لا يمكنك إدارة عملية تهدف إلى إنتاج أشياء جميلة دون معرفة ما هو الجميل. السيارات الأمريكية قبيحة لأن شركات السيارات الأمريكية يديرها أشخاص ذوو ذوق سيء.
يعتقد الكثير من الناس في هذا البلد أن الذوق شيء مراوغ، أو حتى تافه. إنه ليس كذلك. لقيادة التصميم، يجب أن يكون المدير هو المستخدم الأكثر تطلبًا لمنتجات الشركة. وإذا كان لديك ذوق جيد حقًا، يمكنك، كما يفعل ستيف جوبز، جعل إرضائك نوعًا من المشاكل التي يحب الأشخاص الجيدون العمل عليها.
مشاكل صغيرة بغيضة
من السهل جدًا تحديد أنواع المشكلات غير المثيرة للاهتمام: تلك التي بدلاً من حل مشكلات قليلة كبيرة وواضحة، عليك حل الكثير من المشكلات الصغيرة البغيضة. أحد أسوأ أنواع المشاريع هو كتابة واجهة لقطعة من البرامج مليئة بالأخطاء. آخر هو عندما تضطر إلى تخصيص شيء ما لاحتياجات عميل فردي معقدة وغير محددة. بالنسبة للمبرمجين، هذه الأنواع من المشاريع هي موت ألف جرح.
السمة المميزة للمشاكل الصغيرة البغيضة هي أنك لا تتعلم شيئًا منها. كتابة مترجم أمر مثير للاهتمام لأنه يعلمك ما هو المترجم. لكن كتابة واجهة لبرنامج به أخطاء لا تعلمك شيئًا، لأن الأخطاء عشوائية. [3] لذا فهي ليست مجرد نزاهة تجعل المبرمجين الجيدين يتجنبون المشاكل الصغيرة البغيضة. إنها مسألة بقاء ذاتي. العمل على مشاكل صغيرة بغيضة يجعلك غبيًا. يتجنب المبرمجون الجيدون ذلك لنفس السبب الذي تتجنب به العارضات الهامبرغر.
بالطبع بعض المشاكل لها هذه الطبيعة بطبيعتها. وبسبب العرض والطلب، فإنها تدفع جيدًا بشكل خاص. لذا فإن الشركة التي تجد طريقة لجعل المبرمجين العظماء يعملون على مشاكل مملة ستكون ناجحة للغاية. كيف تفعل ذلك؟
أحد الأماكن التي يحدث فيها هذا هو في الشركات الناشئة. في شركتنا الناشئة، كان لدينا روبرت موريس يعمل كمسؤول نظام. هذا مثل وجود Rolling Stones يعزفون في حفل بار ميتزفاه. لا يمكنك توظيف هذه الموهبة. لكن الناس سيفعلون أي قدر من العمل الشاق للشركات التي هم مؤسسوها. [4]
تحل الشركات الكبيرة المشكلة عن طريق تقسيم الشركة. إنهم يجذبون الأشخاص الأذكياء للعمل لديهم عن طريق إنشاء قسم بحث وتطوير منفصل حيث لا يضطر الموظفون إلى العمل مباشرة على مشاكل العملاء الصغيرة البغيضة. [5] في هذا النموذج، يعمل قسم البحث كمنجم. ينتجون أفكارًا جديدة؛ ربما تستطيع بقية الشركة استخدامها.
قد لا تضطر إلى الذهاب إلى هذا الحد. يقترح البرمجة من الأسفل إلى الأعلى طريقة أخرى لتقسيم الشركة: اجعل الأشخاص الأذكياء يعملون كصانعي أدوات. إذا كانت شركتك تصنع برامج للقيام بـ x، فاجعل مجموعة واحدة تبني أدوات لكتابة برامج من هذا النوع، ومجموعة أخرى تستخدم هذه الأدوات لكتابة التطبيقات. بهذه الطريقة قد تتمكن من جعل الأشخاص الأذكياء يكتبون 99٪ من التعليمات البرمجية الخاصة بك، ولكن لا يزالون معزولين تقريبًا عن المستخدمين كما لو كانوا في قسم بحث تقليدي. سيكون لدى صانعي الأدوات مستخدمون، ولكنهم سيكونون فقط مطوري الشركة الخاصة.
إذا استخدمت Microsoft هذا النهج، فلن تكون برامجها مليئة بثقوب الأمان، لأن الأشخاص الأقل ذكاءً الذين يكتبون التطبيقات الفعلية لن يقوموا بأشياء منخفضة المستوى مثل تخصيص الذاكرة. بدلاً من كتابة Word مباشرة بلغة C، سيقومون بتجميع كتل Lego كبيرة من لغة Word. (Duplo، أعتقد، هو المصطلح التقني).
التكتل
إلى جانب المشاكل المثيرة للاهتمام، ما يحبه المبرمجون الجيدون هو المبرمجون الجيدون الآخرون. يميل المبرمجون العظماء إلى التكتل معًا - أحيانًا بشكل مذهل، كما هو الحال في Xerox Parc. لذلك لن تجذب المبرمجين الجيدين بنسبة خطية إلى مدى جودة البيئة التي تخلقها لهم. الميل إلى التكتل يعني أنه أشبه بمربع البيئة. لذا فهو الفائز يأخذ كل شيء. في أي وقت معين، هناك فقط حوالي عشرة أو عشرين مكانًا يرغب المبرمجون في العمل فيها أكثر، وإذا لم تكن واحدًا منهم، فلن يكون لديك عدد أقل من المبرمجين العظماء، بل سيكون لديك صفر.
إن وجود مبرمجين عظماء ليس كافيًا بحد ذاته لجعل الشركة ناجحة. إنه يعمل بشكل جيد لـ Google و ITA، وهما من النقاط الساخنة حاليًا، ولكنه لم يساعد Thinking Machines أو Xerox. كان لدى Sun فترة جيدة، ولكن نموذج عملهم هو مصعد هابط. في هذا الموقف، حتى أفضل المبرمجين لا يمكنهم إنقاذك.
أعتقد، مع ذلك، أنه إذا تساوت جميع الأشياء الأخرى، فإن الشركة التي يمكنها جذب المبرمجين العظماء سيكون لديها ميزة هائلة. هناك أشخاص يختلفون مع هذا. عندما كنا نجري جولات في شركات رأس المال الاستثماري في التسعينيات، أخبرنا العديد منهم أن شركات البرمجيات لا تفوز بكتابة برامج رائعة، بل من خلال العلامة التجارية، والسيطرة على القنوات، وإبرام الصفقات الصحيحة.
لقد آمنوا بهذا حقًا، وأعتقد أنني أعرف السبب. أعتقد أن ما يبحث عنه الكثير من المستثمرين في رأس المال الاستثماري، على الأقل بشكل غير واعٍ، هو Microsoft التالية. وبالطبع إذا كانت Microsoft هي نموذجك، فلا يجب أن تبحث عن الشركات التي تأمل في الفوز بكتابة برامج رائعة. لكن المستثمرين في رأس المال الاستثماري مخطئون في البحث عن Microsoft التالية، لأن أي شركة ناشئة لا يمكن أن تكون Microsoft التالية ما لم تستعد شركة أخرى للانحناء في اللحظة المناسبة وتكون IBM التالية.
إنه خطأ استخدام Microsoft كنموذج، لأن ثقافتهم بأكملها تنبع من تلك الفرصة المحظوظة الواحدة. Microsoft نقطة بيانات سيئة. إذا استبعدتهم، ستجد أن المنتجات الجيدة تفوز في السوق. ما يجب أن يبحث عنه المستثمرون في رأس المال الاستثماري هو Apple التالية، أو Google التالية.
أعتقد أن Bill Gates يعرف هذا. ما يقلقه بشأن Google ليس قوة علامتهم التجارية، بل حقيقة أن لديهم مبرمجين أفضل. [7]
الاعتراف
إذن من هم المبرمجون العظماء؟ كيف تعرف عندما تقابل واحدًا؟ هذا صعب جدًا. حتى المبرمجون لا يستطيعون معرفة ذلك. أنا متأكد الآن من أن صديقي Trevor Blackwell هو مبرمج عظيم. ربما قرأت على Slashdot كيف صنع Segway الخاص به. الشيء المدهش في هذا المشروع هو أنه كتب كل البرامج في يوم واحد (بلغة Python، بالمناسبة).
بالنسبة لـ Trevor، هذا هو المستوى الطبيعي. ولكن عندما قابلته لأول مرة، اعتقدت أنه أحمق تمامًا. كان يقف في مكتب Robert Morris يتحدث إليه عن شيء أو آخر، وأتذكر أنني وقفت خلفه وأنا أومئ برأسي بحماس لروبرت لطرد هذا المجنون من مكتبه حتى نتمكن من الذهاب لتناول الغداء. يقول روبرت إنه أساء تقدير تريفور في البداية أيضًا. على ما يبدو عندما قابل روبرت تريفور لأول مرة، كان تريفور قد بدأ للتو مخططًا جديدًا تضمن كتابة كل شيء عن كل جانب من جوانب حياته على كومة من بطاقات الفهرسة، التي كان يحملها معه في كل مكان. كان قد وصل أيضًا للتو من كندا، وكان لديه لهجة كندية قوية وشعر "mullet".
تتعقد المشكلة بسبب حقيقة أن المبرمجين، على الرغم من سمعتهم في عدم الوعي الاجتماعي، يبذلون أحيانًا جهدًا كبيرًا ليبدو أذكياء. عندما كنت في الدراسات العليا، كنت أتردد على مختبر MIT للذكاء الاصطناعي بشكل متقطع. كان الأمر مخيفًا في البداية. كان الجميع يتحدثون بسرعة كبيرة. ولكن بعد فترة تعلمت حيلة التحدث بسرعة. لا تحتاج إلى التفكير بشكل أسرع؛ فقط استخدم ضعف عدد الكلمات لقول كل شيء.
مع هذه الكمية من الضوضاء في الإشارة، من الصعب معرفة المبرمجين الجيدين عندما تقابلهم. لا يمكنني معرفة ذلك، حتى الآن. لا يمكنك معرفة ذلك من سيرهم الذاتية أيضًا. يبدو أن الطريقة الوحيدة للحكم على المبرمج هي العمل معه في شيء ما.
وهذا هو السبب في أن المناطق ذات التقنية العالية تحدث فقط حول الجامعات. المكون النشط هنا ليس الأساتذة بقدر ما هو الطلاب. تنمو الشركات الناشئة حول الجامعات لأن الجامعات تجمع الشباب الواعدين وتجعلهم يعملون على نفس المشاريع. الأذكياء يتعلمون من هم الأذكياء الآخرون، ومعًا يبتكرون مشاريع جديدة خاصة بهم.
نظرًا لأنه لا يمكنك معرفة المبرمج العظيم إلا بالعمل معه، فلا يمكن للمبرمجين أنفسهم معرفة مدى جودتهم. هذا صحيح إلى حد ما في معظم المجالات. لقد وجدت أن الأشخاص الرائعين في شيء ما ليسوا مقتنعين بعظمتهم بقدر ما هم في حيرة من أمرهم لماذا يبدو الجميع الآخرون غير أكفاء.
ولكن من الصعب بشكل خاص على المبرمجين معرفة مدى جودتهم، لأن مقارنة عملهم صعبة. هذا أسهل في معظم المجالات الأخرى. في سباق المائة متر، تعرف في 10 ثوانٍ من هو الأسرع. حتى في الرياضيات يبدو أن هناك إجماعًا عامًا حول المشكلات الصعبة الحل، وما يشكل حلاً جيدًا. لكن البرمجة تشبه الكتابة. من يستطيع أن يقول أي من روايتين أفضل؟ بالتأكيد ليس المؤلفون.
مع المبرمجين، على الأقل، يمكن للمبرمجين الآخرين معرفة ذلك. هذا لأنه، على عكس الروائيين، يتعاون المبرمجون في المشاريع. عندما تتمكن من حل بعض المشكلات الصعبة عبر الشبكة لشخص ما، فإنك تتعلم بسرعة كبيرة مدى صعوبة مواجهتها. لكن المبرمجين لا يستطيعون مراقبة أنفسهم أثناء العمل. لذا إذا سألت مبرمجًا عظيمًا عن مدى جودته، فمن شبه المؤكد أنه سيرد، لا أعرف. إنه لا يتواضع فقط. إنه حقًا لا يعرف.
ونحن لا نعرف، باستثناء الأشخاص الذين عملنا معهم بالفعل. وهذا يضعنا في وضع غريب: لا نعرف من يجب أن يكون أبطالنا. المبرمجون الذين يشتهرون يشتهرون بحوادث علاقات عامة عشوائية. أحيانًا أحتاج إلى تقديم مثال على مبرمج عظيم، ولا أعرف من أستخدمه. الأسماء الأولى التي تخطر ببالي تميل دائمًا إلى أن تكون أشخاصًا أعرفهم شخصيًا، ولكن يبدو الأمر ضعيفًا استخدامهم. لذا، أعتقد، ربما يجب أن أقول Richard Stallman، أو Linus Torvalds، أو Alan Kay، أو شخص مشهور مثل ذلك. ولكن ليس لدي أي فكرة عما إذا كان هؤلاء الرجال مبرمجين عظماء. لم أعمل معهم في أي شيء.
إذا كان هناك Michael Jordan في البرمجة، فلا أحد يعرف، بما في ذلك هو.
الزراعة
أخيرًا، السؤال الذي يتساءل عنه جميع المبرمجين: كيف تصبح مبرمجًا عظيمًا؟ لا أعرف ما إذا كان من الممكن أن تجعل نفسك واحدًا. ولكن من الممكن بالتأكيد القيام بأشياء تجعلك غبيًا، وإذا كان بإمكانك أن تجعل نفسك غبيًا، فربما يمكنك أن تجعل نفسك ذكيًا أيضًا.
قد يكون مفتاح كونك مبرمجًا جيدًا هو العمل على ما تحبه. عندما أفكر في المبرمجين العظماء الذين أعرفهم، فإن أحد الأشياء المشتركة بينهم هو الصعوبة البالغة في جعلهم يعملون على أي شيء لا يريدونه. لا أعرف ما إذا كان هذا سببًا أو نتيجة؛ قد يكون كلاهما.
للقيام بشيء جيد يجب أن تحبه. لذا بقدر ما يمكنك الحفاظ على البرمجة كشيء تحبه، فمن المرجح أن تقوم به بشكل جيد. حاول الحفاظ على شعور الدهشة الذي كان لديك تجاه البرمجة في سن 14. إذا كنت قلقًا من أن وظيفتك الحالية تفسد عقلك، فمن المحتمل أنها كذلك.
أفضل المبرمجين يميلون إلى أن يكونوا أذكياء، بالطبع، ولكن هذا صحيح في العديد من المجالات. هل هناك أي صفة فريدة للمبرمجين؟ سألت بعض الأصدقاء، وكان الشيء الأول الذي ذكروه هو الفضول. كنت دائمًا أفترض أن جميع الأشخاص الأذكياء فضوليون - وأن الفضول هو ببساطة المشتق الأول للمعرفة. ولكن يبدو أن المبرمجين فضوليون بشكل خاص، خاصة فيما يتعلق بكيفية عمل الأشياء. هذا منطقي، لأن البرامج هي في الواقع أوصاف ضخمة لكيفية عمل الأشياء.
ذكر العديد من الأصدقاء قدرة المبرمجين على التركيز - قدرتهم، كما قال أحدهم، على "تجاهل كل شيء خارج رؤوسهم". لقد لاحظت هذا بالتأكيد. وسمعت العديد من المبرمجين يقولون إنه بعد شرب حتى نصف بيرة لا يمكنهم البرمجة على الإطلاق. لذا ربما تتطلب البرمجة قدرة خاصة على التركيز. ربما يمكن للمبرمجين العظماء تحميل كمية كبيرة من السياق في رؤوسهم، بحيث عندما ينظرون إلى سطر من التعليمات البرمجية، فإنهم لا يرون هذا السطر فقط بل البرنامج بأكمله حوله. كتب John McPhee أن نجاح Bill Bradley كلاعب كرة سلة كان يرجع جزئيًا إلى رؤيته المحيطية الاستثنائية. تعني الرؤية المحيطية "المثالية" حوالي 47 درجة من الرؤية المحيطية العمودية. كان لدى Bill Bradley 70 درجة؛ كان بإمكانه رؤية السلة عندما كان ينظر إلى الأرض. ربما لدى المبرمجين العظماء قدرة فطرية مماثلة. (أنا أغش باستخدام لغة كثيفة جدًا، مما يقلل من مساحة الملعب.)
هذا يمكن أن يفسر الانفصال بشأن المكاتب المكعبة. ربما الأشخاص المسؤولون عن المرافق، لعدم وجود تركيز لتدميره، ليس لديهم فكرة أن العمل في مكتب مكعب يشعر المبرمج وكأن عقله في خلاط. (بينما Bill، إذا كانت الشائعات حول التوحد صحيحة، يعرف ذلك جيدًا).
أحد الاختلافات التي لاحظتها بين المبرمجين العظماء والأشخاص الأذكياء بشكل عام هو أن المبرمجين أكثر عدم الالتزام بالصواب السياسي. بقدر ما يوجد مصافحة سرية بين المبرمجين الجيدين، فهي عندما يعرفون بعضهم البعض بما يكفي للتعبير عن آراء قد تجعلهم يُقتلون بالحجارة من قبل الجمهور العام. ويمكنني أن أرى لماذا قد يكون عدم الالتزام بالصواب السياسي صفة مفيدة في البرمجة. البرامج معقدة للغاية، وعلى الأقل في أيدي المبرمجين الجيدين، سائلة للغاية. في مثل هذه المواقف، من المفيد أن يكون لديك عادة التساؤل عن الافتراضات.
هل يمكنك زراعة هذه الصفات؟ لا أعرف. ولكن يمكنك على الأقل عدم قمعها. لذا إليك أفضل محاولة لدي لوصفة. إذا كان من الممكن أن تجعل نفسك مبرمجًا عظيمًا، فإن الطريقة للقيام بذلك قد تكون عقد الصفقة التالية مع نفسك: لا يتعين عليك أبدًا العمل على مشاريع مملة (ما لم تتضور عائلتك جوعًا بخلاف ذلك)، وفي المقابل، لن تسمح لنفسك أبدًا بالقيام بعمل نصف مجهود. يبدو أن جميع المبرمجين العظماء الذين أعرفهم قد عقدوا تلك الصفقة، على الرغم من أنه ربما لم يكن لديهم خيار في هذا الأمر.
ملاحظات
[1] بإنصاف، يجب أن أقول إن IBM تصنع أجهزة لائقة. كتبت هذا على جهاز كمبيوتر محمول من IBM.
[2] لقد تبين أنهم محكوم عليهم بالفشل. لقد أغلقوا بعد بضعة أشهر.
[3] أعتقد أن هذا هو ما يعنيه الناس عندما يتحدثون عن "معنى الحياة". للوهلة الأولى، تبدو هذه فكرة غريبة. الحياة ليست تعبيرًا؛ كيف يمكن أن يكون لها معنى؟ ولكن يمكن أن يكون لها جودة تشعر بها كثيرًا مثل المعنى. في مشروع مثل المترجم، عليك حل الكثير من المشكلات، ولكن المشكلات كلها تقع في نمط، كما في الإشارة. بينما عندما تكون المشكلات التي عليك حلها عشوائية، فإنها تبدو كضوضاء.
[4] عمل أينشتاين في وقت ما في تصميم الثلاجات. (كان لديه أسهم.)
[5] من الصعب تحديد ما يشكل البحث في عالم الكمبيوتر بالضبط، ولكن كتقريب أول، هو البرامج التي ليس لها مستخدمون.
لا أعتقد أن النشر هو ما يجعل أفضل المبرمجين يرغبون في العمل في أقسام البحث. أعتقد أنه في الغالب عدم الاضطرار إلى عقد اجتماع لمدة ثلاث ساعات مع مدير منتج حول مشاكل دمج النسخة الكورية من Word 13.27 مع مشبك الورق المتحدث.
[6] شيء مماثل يحدث منذ فترة طويلة في صناعة البناء. عندما كان لديك منزل تم بناؤه قبل بضع مئات من السنين، بنى البناؤون المحليون كل شيء فيه. ولكن بشكل متزايد ما يفعله البناؤون هو تجميع المكونات المصممة والمصنعة من قبل شخص آخر. هذا، مثل وصول النشر المكتبي، منح الناس حرية التجربة بطرق كارثية، ولكنه بالتأكيد أكثر كفاءة.
[7] Google أخطر بكثير على Microsoft من Netscape. ربما أكثر خطورة من أي شركة أخرى على الإطلاق. ليس أقلها لأنهم مصممون على القتال. في صفحة الوظائف الخاصة بهم، يقولون إن إحدى "قيمهم الأساسية" هي "عدم ارتكاب الشر". من شركة تبيع زيت فول الصويا أو معدات التعدين، سيكون مثل هذا البيان غريبًا ببساطة. ولكن أعتقد أننا جميعًا في عالم الكمبيوتر ندرك على من هذا إعلان حرب.
شكرًا لـ Jessica Livingston و Robert Morris و Sarah Harlin لقراءة الإصدارات السابقة من هذا الخطاب.