القراصنة والرسامون
مايو 2003
(هذه المقالة مستمدة من محاضرة ضيف في جامعة هارفارد، والتي تضمنت حديثًا سابقًا في جامعة نورثيسترن.)
عندما أنهيت دراساتي العليا في علوم الكمبيوتر، ذهبت إلى كلية الفنون لدراسة الرسم. بدا الكثيرون متفاجئين من أن شخصًا مهتمًا بأجهزة الكمبيوتر سيكون مهتمًا أيضًا بالرسم. بدا لهم أن القرصنة والرسم نوعان مختلفان جدًا من العمل - فالقرصنة باردة ودقيقة ومنهجية، والرسم هو تعبير محموم عن غريزة بدائية ما.
كلتا هاتين الصورتين خاطئة. القرصنة والرسم لهما الكثير من القواسم المشتركة. في الواقع، من بين جميع أنواع الأشخاص الذين عرفتهم، فإن القراصنة والرسامين هم الأكثر تشابهًا.
ما يتشارك فيه القراصنة والرسامون هو أنهم صانعون. إلى جانب الملحنين والمهندسين المعماريين والكتاب، ما يحاول القراصنة والرسامون فعله هو صنع أشياء جيدة. إنهم لا يقومون بالبحث بحد ذاته، على الرغم من أنه في سياق محاولة صنع أشياء جيدة يكتشفون تقنية جديدة، فكلما كان ذلك أفضل.
لم أحب قط مصطلح "علوم الكمبيوتر". السبب الرئيسي لعدم إعجابي به هو عدم وجود شيء من هذا القبيل. علوم الكمبيوتر هي حقيبة مختلطة من المجالات المترابطة بشكل ضعيف تم تجميعها معًا عن طريق صدفة تاريخية، مثل يوغوسلافيا. في أحد الأطراف لديك أشخاص هم في الواقع علماء رياضيات، لكنهم يسمون ما يفعلونه علوم الكمبيوتر حتى يتمكنوا من الحصول على منح DARPA. في المنتصف لديك أشخاص يعملون على شيء يشبه التاريخ الطبيعي لأجهزة الكمبيوتر - دراسة سلوك الخوارزميات لتوجيه البيانات عبر الشبكات، على سبيل المثال. ثم في الطرف الآخر لديك القراصنة، الذين يحاولون كتابة برامج مثيرة للاهتمام، والذين تعتبر أجهزة الكمبيوتر بالنسبة لهم مجرد وسيلة للتعبير، مثل الخرسانة للمهندسين المعماريين أو الطلاء للرسامين. الأمر أشبه بأن يكون علماء الرياضيات والفيزياء والمهندسين المعماريين جميعًا في نفس القسم.
أحيانًا ما يطلق على ما يفعله القراصنة "هندسة البرمجيات"، لكن هذا المصطلح مضلل بنفس القدر. المصممون الجيدون للبرمجيات ليسوا مهندسين أكثر من كونهم مهندسين معماريين. الحدود بين الهندسة المعمارية والهندسة ليست محددة بوضوح، لكنها موجودة. تقع بين "ماذا" و "كيف": يقرر المهندسون المعماريون ماذا يفعلون، ويحدد المهندسون كيفية القيام بذلك.
لا ينبغي فصل "ماذا" و "كيف" كثيرًا. أنت تطلب المشاكل إذا حاولت تحديد ما يجب فعله دون فهم كيفية القيام به. لكن القرصنة يمكن بالتأكيد أن تكون أكثر من مجرد تحديد كيفية تنفيذ مواصفات معينة. في أفضل حالاتها، إنها إنشاء المواصفات - على الرغم من أنه تبين أن أفضل طريقة للقيام بذلك هي تنفيذها.
ربما في يوم من الأيام سيتم تقسيم "علوم الكمبيوتر"، مثل يوغوسلافيا، إلى أجزائها المكونة. قد يكون ذلك شيئًا جيدًا. خاصة إذا كان ذلك يعني الاستقلال لوطني، القرصنة.
قد يكون تجميع كل هذه الأنواع المختلفة من العمل معًا في قسم واحد مناسبًا إداريًا، ولكنه مربك فكريًا. هذا هو السبب الآخر لعدم إعجابي باسم "علوم الكمبيوتر". يمكن القول إن الأشخاص في المنتصف يقومون بشيء يشبه العلم التجريبي. لكن الأشخاص في كلا الطرفين، القراصنة وعلماء الرياضيات، لا يقومون بالعلم في الواقع.
لا يبدو أن علماء الرياضيات منزعجون من هذا. إنهم يعملون بسعادة لإثبات نظريات مثل علماء الرياضيات الآخرين في قسم الرياضيات، وربما يتوقفون قريبًا عن ملاحظة أن المبنى الذي يعملون فيه مكتوب عليه "علوم الكمبيوتر" من الخارج. ولكن بالنسبة للقراصنة، فإن هذا الملصق يمثل مشكلة. إذا كان ما يفعلونه يسمى علمًا، فهذا يجعلهم يشعرون بأنهم يجب أن يتصرفوا بعلمية. لذا بدلاً من القيام بما يريدون فعله حقًا، وهو تصميم برامج جميلة، يشعر القراصنة في الجامعات والمختبرات البحثية بأنهم يجب أن يكتبوا أوراقًا بحثية.
في أفضل الأحوال، تكون الأوراق مجرد شكلية. يكتب القراصنة برامج رائعة، ثم يكتبون ورقة عنها، وتصبح الورقة بديلاً عن الإنجاز الذي تمثله البرامج. ولكن في كثير من الأحيان يسبب هذا عدم التطابق مشاكل. من السهل الانجراف بعيدًا عن بناء الأشياء الجميلة نحو بناء أشياء قبيحة تجعلها مواضيع أكثر ملاءمة للأوراق البحثية.
للأسف، الأشياء الجميلة لا تجعل دائمًا أفضل المواضيع للأوراق. أولاً، يجب أن يكون البحث أصليًا - وكما يعلم أي شخص كتب أطروحة دكتوراه، فإن الطريقة للتأكد من أنك تستكشف أرضًا بكرًا هي تحديد قطعة أرض لا يريدها أحد. ثانيًا، يجب أن يكون البحث جوهريًا - والأنظمة غير الملائمة تنتج أوراقًا أكثر تفصيلاً، لأنك تستطيع الكتابة عن العقبات التي يتعين عليك التغلب عليها من أجل إنجاز الأمور. لا شيء ينتج مشاكل جوهرية مثل البدء بافتراضات خاطئة. معظم الذكاء الاصطناعي مثال على هذه القاعدة؛ إذا افترضت أن المعرفة يمكن تمثيلها كقائمة من تعبيرات منطق القضايا التي تمثل وسيطاتها مفاهيم مجردة، فسيكون لديك الكثير من الأوراق لكتابتها حول كيفية جعل هذا العمل. كما قال ريكي ريكاردو ذات مرة: "لوسي، لديك الكثير من الشرح لتقدمه."
الطريقة لإنشاء شيء جميل غالبًا ما تكون إجراء تعديلات دقيقة على شيء موجود بالفعل، أو الجمع بين الأفكار الحالية بطريقة جديدة قليلاً. هذا النوع من العمل يصعب نقله في ورقة بحثية.
إذن لماذا تستمر الجامعات والمختبرات البحثية في الحكم على القراصنة من خلال المنشورات؟ لنفس السبب الذي يتم به قياس "الاستعداد الدراسي" من خلال اختبارات موحدة بسيطة، أو قياس إنتاجية المبرمجين في أسطر التعليمات البرمجية. هذه الاختبارات سهلة التطبيق، ولا يوجد شيء أكثر إغراءً من اختبار سهل يعمل بشكل معقول.
قياس ما يحاول القراصنة فعله حقًا، وهو تصميم برامج جميلة، سيكون أكثر صعوبة. تحتاج إلى حس تصميم جيد للحكم على التصميم الجيد. ولا يوجد ارتباط، باستثناء ربما ارتباط سلبي، بين قدرة الأشخاص على التعرف على التصميم الجيد وثقتهم في قدرتهم على ذلك.
الاختبار الخارجي الوحيد هو الوقت. بمرور الوقت، تميل الأشياء الجميلة إلى الازدهار، وتميل الأشياء القبيحة إلى التخلص منها. للأسف، قد تكون كميات الوقت المعنية أطول من عمر الإنسان. قال صموئيل جونسون إن الأمر استغرق مائة عام حتى تتقارب سمعة الكاتب. عليك الانتظار حتى يموت الأصدقاء المؤثرون للكاتب، ثم حتى يموت جميع أتباعهم.
أعتقد أن القراصنة يجب أن يستسلموا لوجود مكون عشوائي كبير في سمعتهم. في هذا لا يختلفون عن الصانعين الآخرين. في الواقع، هم محظوظون بالمقارنة. تأثير الموضة ليس كبيرًا في القرصنة كما هو في الرسم.
هناك أمور أسوأ من أن يسيء الناس فهم عملك. خطر أسوأ هو أنك أنت نفسك قد تساء فهم عملك. المجالات ذات الصلة هي المكان الذي تبحث فيه عن الأفكار. إذا وجدت نفسك في قسم علوم الكمبيوتر، فهناك إغراء طبيعي للاعتقاد، على سبيل المثال، أن القرصنة هي النسخة التطبيقية لنظرية علوم الكمبيوتر النظرية. طوال الوقت الذي كنت فيه في الدراسات العليا، كان لدي شعور غير مريح في مؤخرة ذهني بأنني يجب أن أعرف المزيد من النظرية، وأنه كان من الخطأ جدًا أنني نسيت كل تلك الأشياء في غضون ثلاثة أسابيع من الامتحان النهائي.
الآن أدرك أنني كنت مخطئًا. يحتاج القراصنة إلى فهم نظرية الحوسبة بقدر ما يحتاج الرسامون إلى فهم كيمياء الطلاء. تحتاج إلى معرفة كيفية حساب تعقيد الوقت والمساحة وحول الاكتمال تورينج. قد ترغب أيضًا في تذكر مفهوم آلة الحالة على الأقل، في حال كان عليك كتابة محلل أو مكتبة تعبيرات منتظمة. في الواقع، يحتاج الرسامون إلى تذكر قدر أكبر بكثير من كيمياء الطلاء من ذلك.
لقد وجدت أن أفضل مصادر الأفكار ليست المجالات الأخرى التي تحتوي على كلمة "كمبيوتر" في أسمائها، بل المجالات الأخرى التي يسكنها الصانعون. كان الرسم مصدرًا أغنى للأفكار من نظرية الحوسبة.
على سبيل المثال، علمت في الكلية أنه يجب على المرء أن يحدد برنامجًا بالكامل على الورق قبل الاقتراب من جهاز كمبيوتر. وجدت أنني لم أقم بالبرمجة بهذه الطريقة. وجدت أنني أحببت البرمجة جالسًا أمام جهاز كمبيوتر، وليس قطعة ورق. والأسوأ من ذلك، بدلاً من كتابة برنامج كامل بصبر والتأكد من صحته، كنت أميل إلى مجرد إخراج تعليمات برمجية معطلة بشكل ميؤوس منه، وتحسينها تدريجيًا. تصحيح الأخطاء، كما علمت، كان نوعًا من المرور النهائي حيث كنت تلتقط الأخطاء المطبعية والإغفالات. الطريقة التي عملت بها، بدا أن البرمجة تتكون من تصحيح الأخطاء.
لفترة طويلة شعرت بالسوء حيال ذلك، تمامًا كما شعرت بالسوء ذات مرة لأنني لم أمسك قلمي بالطريقة التي علموني بها في المدرسة الابتدائية. لو نظرت فقط إلى الصانعين الآخرين، الرسامين أو المهندسين المعماريين، لكانت أدركت أن هناك اسمًا لما كنت أفعله: الرسم التخطيطي. على حد علمي، الطريقة التي علموني بها البرمجة في الكلية كانت خاطئة تمامًا. يجب عليك تحديد البرامج أثناء كتابتها، تمامًا كما يفعل الكتاب والرسامون والمهندسون المعماريون.
إدراك هذا له آثار حقيقية على تصميم البرمجيات. هذا يعني أن لغة البرمجة يجب أن تكون، قبل كل شيء، قابلة للتشكيل. لغة البرمجة مخصصة لـ التفكير في البرامج، وليس للتعبير عن البرامج التي فكرت فيها بالفعل. يجب أن تكون قلم رصاص، وليس قلم حبر. سيكون الكتابة الثابتة فكرة جيدة إذا كتب الناس بالفعل البرامج بالطريقة التي علموني بها في الكلية. لكن هذا ليس ما يفعله أي من القراصنة الذين أعرفهم. نحن بحاجة إلى لغة تسمح لنا بالخدش والتلطيخ والمسح، وليس لغة يجب عليك الجلوس فيها مع كوب شاي من الأنواع متوازنًا على ركبتك وإجراء محادثة مهذبة مع عمة صارمة من مترجم.
بينما نحن على موضوع الكتابة الثابتة، فإن التماهي مع الصانعين سينقذنا من مشكلة أخرى تعاني منها العلوم: حسد الرياضيات. يعتقد الجميع في العلوم سرًا أن علماء الرياضيات أذكى منهم. أعتقد أن علماء الرياضيات يعتقدون ذلك أيضًا. على أي حال، النتيجة هي أن العلماء يميلون إلى جعل عملهم يبدو رياضيًا قدر الإمكان. في مجال مثل الفيزياء، ربما لا يسبب هذا الكثير من الضرر، ولكن كلما ابتعدت عن العلوم الطبيعية، أصبحت المشكلة أكبر.
صفحة من الصيغ تبدو مثيرة للإعجاب للغاية. (نصيحة: لمزيد من الإعجاب، استخدم المتغيرات اليونانية.) ولذلك هناك إغراء كبير للعمل على مشاكل يمكن معالجتها رسميًا، بدلاً من مشاكل، على سبيل المثال، مهمة.
لو كان القراصنة يتماهون مع صانعين آخرين، مثل الكتاب والرسامين، لما شعروا بالإغراء لفعل ذلك. الكتاب والرسامون لا يعانون من حسد الرياضيات. إنهم يشعرون وكأنهم يقومون بشيء غير مرتبط تمامًا. أعتقد أن القراصنة كذلك.
إذا كانت الجامعات والمختبرات البحثية تمنع القراصنة من القيام بالعمل الذي يريدونه، فربما يكون مكانهم في الشركات. للأسف، معظم الشركات لا تسمح للقراصنة بفعل ما يريدون أيضًا. تجبر الجامعات والمختبرات البحثية القراصنة على أن يكونوا علماء، وتجبرهم الشركات على أن يكونوا مهندسين.
لقد اكتشفت هذا بنفسي مؤخرًا. عندما اشترت Yahoo Viaweb، سألوني عما أردت فعله. لم أحب الجانب التجاري كثيرًا، وقلت إنني أردت فقط القرصنة. عندما وصلت إلى Yahoo، وجدت أن ما تعنيه القرصنة بالنسبة لهم هو تنفيذ البرامج، وليس تصميمها. كان المبرمجون يُنظر إليهم على أنهم فنيون يترجمون رؤى (إذا كان هذا هو المصطلح) مديري المنتجات إلى تعليمات برمجية.
يبدو أن هذه هي الخطة الافتراضية في الشركات الكبيرة. يفعلون ذلك لأنهم يقللون من الانحراف المعياري للنتيجة. نسبة صغيرة فقط من القراصنة يمكنهم تصميم البرامج بالفعل، ومن الصعب على الأشخاص الذين يديرون شركة اختيار هؤلاء. لذا بدلاً من إسناد مستقبل البرامج إلى قرصان لامع واحد، فإن معظم الشركات تنظم الأمور بحيث يتم تصميمها بواسطة لجنة، ويقوم القراصنة فقط بتنفيذ التصميم.
إذا كنت تريد كسب المال في مرحلة ما، فتذكر هذا، لأن هذا هو أحد أسباب فوز الشركات الناشئة. الشركات الكبيرة تريد تقليل الانحراف المعياري لنتائج التصميم لأنها تريد تجنب الكوارث. ولكن عندما تخفف التذبذبات، فإنك تفقد النقاط العالية وكذلك المنخفضة. هذه ليست مشكلة للشركات الكبيرة، لأنها لا تفوز عن طريق صنع منتجات رائعة. الشركات الكبيرة تفوز عن طريق كونها أقل سوءًا من الشركات الكبيرة الأخرى.
لذا، إذا استطعت إيجاد طريقة للدخول في حرب تصميم مع شركة كبيرة بما يكفي لدرجة أن برامجها مصممة من قبل مديري المنتجات، فلن يتمكنوا أبدًا من مواكبتك. هذه الفرص ليست سهلة العثور عليها، على الرغم من ذلك. من الصعب إشراك شركة كبيرة في حرب تصميم، تمامًا كما يصعب إشراك خصم داخل قلعة في قتال يدوي. سيكون من السهل جدًا كتابة معالج كلمات أفضل من Microsoft Word، على سبيل المثال، ولكن Microsoft، داخل قلعة احتكار نظام التشغيل الخاص بها، ربما لن تلاحظ ذلك حتى لو فعلت ذلك.
المكان المناسب لخوض حروب التصميم هو في الأسواق الجديدة، حيث لم يتمكن أحد بعد من إنشاء تحصينات. هناك يمكنك الفوز بشكل كبير عن طريق اتباع نهج جريء في التصميم، وجعل نفس الأشخاص يصممون وينفذون المنتج. فعلت Microsoft ذلك بنفسها في البداية. وكذلك فعلت Apple. و Hewlett-Packard. أشك في أن كل شركة ناشئة ناجحة قد فعلت ذلك.
لذا فإن إحدى طرق بناء برامج رائعة هي بدء شركتك الناشئة. هناك مشكلتان مع هذا، مع ذلك. أحدهما هو أنه في شركة ناشئة، عليك القيام بالكثير بخلاف كتابة البرامج. في Viaweb، كنت أعتبر نفسي محظوظًا إذا تمكنت من القرصنة ربع الوقت. والأشياء التي كان علي القيام بها في الأرباع الثلاثة الأخرى تراوحت من الممل إلى المرعب. لدي معيار لهذا، لأنني اضطررت ذات مرة إلى مغادرة اجتماع مجلس الإدارة لإجراء بعض الحشوات للأسنان. أتذكر الجلوس في كرسي طبيب الأسنان، في انتظار الحفر، والشعور وكأنني في إجازة.
المشكلة الأخرى مع الشركات الناشئة هي أنه لا يوجد تداخل كبير بين نوع البرامج التي تجني المال وبين تلك المثيرة للاهتمام للكتابة. لغات البرمجة مثيرة للاهتمام للكتابة، وكان منتج Microsoft الأول هو أحدها، في الواقع، لكن لا أحد سيدفع مقابل لغات البرمجة الآن. إذا كنت تريد كسب المال، فإنك تميل إلى إجبارك على العمل على مشاكل قبيحة جدًا بحيث لا يمكن لأحد حلها مجانًا.
يواجه جميع الصانعين هذه المشكلة. يتم تحديد الأسعار حسب العرض والطلب، ولا يوجد طلب كبير على الأشياء الممتعة للعمل عليها بقدر ما هو مطلوب لحل المشاكل اليومية للعملاء الأفراد. التمثيل في مسرحيات Off-Broadway لا يدفع جيدًا مثل ارتداء بدلة غوريلا في كشك شخص ما في معرض تجاري. كتابة الروايات لا تدفع جيدًا مثل كتابة إعلانات لمصارف القمامة. وقرصنة لغات البرمجة لا تدفع جيدًا مثل معرفة كيفية توصيل قاعدة بيانات قديمة لشركة ما بخادم الويب الخاص بها.
أعتقد أن الإجابة على هذه المشكلة، في حالة البرمجيات، هي مفهوم معروف تقريبًا لجميع الصانعين: وظيفة اليوم. بدأت هذه العبارة مع الموسيقيين، الذين يؤدون في الليل. بشكل عام، هذا يعني أن لديك نوعًا واحدًا من العمل تقوم به مقابل المال، ونوعًا آخر للحب.
لدى جميع الصانعين تقريبًا وظائف يومية في بداية حياتهم المهنية. الرسامون والكتاب يفعلون ذلك بشكل سيء السمعة. إذا كنت محظوظًا، يمكنك الحصول على وظيفة يومية مرتبطة ارتباطًا وثيقًا بعملك الحقيقي. غالبًا ما يبدو أن الموسيقيين يعملون في متاجر التسجيلات. قد يتمكن قرصان يعمل على لغة برمجة أو نظام تشغيل من الحصول على وظيفة يومية لاستخدامه. [1]
عندما أقول إن الإجابة هي أن يعمل القراصنة في وظائف يومية، ويعملون على برامج جميلة على الجانب، فأنا لا أقترح هذا كفكرة جديدة. هذا هو ما تدور حوله القرصنة مفتوحة المصدر. ما أقوله هو أن المصدر المفتوح هو النموذج الصحيح على الأرجح، لأنه تم تأكيده بشكل مستقل من قبل جميع الصانعين الآخرين.
يبدو لي مفاجئًا أن أي صاحب عمل سيكون مترددًا في السماح للقراصنة بالمساهمة في مشاريع مفتوحة المصدر. في Viaweb، كنا سنتردد في توظيف أي شخص لم يفعل ذلك. عندما أجرينا مقابلات مع المبرمجين، كان الشيء الرئيسي الذي نهتم به هو نوع البرامج التي كتبوها في وقت فراغهم. لا يمكنك فعل أي شيء بشكل جيد حقًا إلا إذا كنت تحبه، وإذا كنت تحب القرصنة، فستعمل حتمًا على مشاريعك الخاصة. [2]
نظرًا لأن القراصنة صانعون وليسوا علماء، فإن المكان المناسب للبحث عن الاستعارات ليس في العلوم، بل بين أنواع أخرى من الصانعين. ما الذي يمكن أن تعلمه الرسم عن القرصنة؟
أحد الأشياء التي يمكننا تعلمها، أو على الأقل تأكيدها، من مثال الرسم هو كيفية تعلم القرصنة. تتعلم الرسم في الغالب عن طريق القيام بذلك. وكذلك القرصنة. معظم القراصنة لا يتعلمون القرصنة عن طريق أخذ دورات جامعية في البرمجة. إنهم يتعلمون القرصنة عن طريق كتابة برامجهم الخاصة في سن الثالثة عشرة. حتى في الفصول الجامعية، تتعلم القرصنة في الغالب عن طريق القرصنة. [3]
نظرًا لأن الرسامين يتركون وراءهم سلسلة من الأعمال، يمكنك مشاهدتهم يتعلمون بالممارسة. إذا نظرت إلى أعمال الرسام بترتيب زمني، فستجد أن كل لوحة تبني على الأشياء التي تم تعلمها في اللوحات السابقة. عندما يكون هناك شيء في لوحة يعمل بشكل جيد جدًا، يمكنك عادةً العثور على نسخته الأولى منه في شكل أصغر في لوحة سابقة.
أعتقد أن معظم الصانعين يعملون بهذه الطريقة. الكتاب والمهندسون المعماريون يبدون كذلك. ربما سيكون من الجيد للقراصنة أن يتصرفوا مثل الرسامين، ويبدأوا من جديد بشكل منتظم، بدلاً من الاستمرار في العمل لسنوات على مشروع واحد، ومحاولة دمج جميع أفكارهم اللاحقة كتعديلات.
حقيقة أن القراصنة يتعلمون القرصنة عن طريق القيام بذلك هي علامة أخرى على مدى اختلاف القرصنة عن العلوم. لا يتعلم العلماء العلم عن طريق القيام به، بل عن طريق إجراء التجارب ومجموعات المشاكل. يبدأ العلماء في القيام بعمل مثالي، بمعنى أنهم يحاولون فقط إعادة إنتاج عمل قام به شخص آخر لهم. في النهاية، يصلون إلى النقطة التي يمكنهم فيها القيام بعمل أصلي. بينما يبدأ القراصنة أصليين، ويتحسنون، ويبدأ العلماء جيدين، ويصبحون أصليين.
الطريقة الأخرى التي يتعلم بها الصانعون هي من الأمثلة. بالنسبة للرسام، المتحف هو مكتبة مرجعية للتقنيات. لقرون عديدة، كان جزءًا من التعليم التقليدي للرسامين نسخ أعمال الأساتذة العظماء، لأن النسخ تجبرك على النظر عن كثب إلى طريقة صنع اللوحة.
الكتاب يفعلون ذلك أيضًا. تعلم بنجامين فرانكلين الكتابة عن طريق تلخيص النقاط في مقالات أدينسون وستيل ثم محاولة إعادة إنتاجها. فعل ريموند تشاندلر الشيء نفسه مع قصص المحققين.
وبالمثل، يمكن للقراصنة تعلم البرمجة من خلال النظر إلى البرامج الجيدة - ليس فقط ما تفعله، ولكن أيضًا التعليمات البرمجية المصدر. إحدى الفوائد الأقل شهرة لحركة المصدر المفتوح هي أنها جعلت تعلم البرمجة أسهل. عندما تعلمت البرمجة، كان علينا الاعتماد بشكل أساسي على الأمثلة في الكتب. كانت القطعة الكبيرة الوحيدة من التعليمات البرمجية المتاحة آنذاك هي Unix، لكن حتى هذه لم تكن مفتوحة المصدر. معظم الأشخاص الذين قرأوا المصدر قرأوه في نسخ مصورة غير مشروعة من كتاب جون ليونز، والذي على الرغم من كتابته في عام 1977 لم يُسمح بنشره حتى عام 1996.
مثال آخر يمكننا أخذه من الرسم هو الطريقة التي يتم بها إنشاء اللوحات عن طريق التحسين التدريجي. تبدأ اللوحات عادةً برسم تخطيطي. تدريجيًا يتم ملء التفاصيل. لكنها ليست مجرد عملية ملء. في بعض الأحيان تثبت الخطط الأصلية أنها خاطئة. عدد لا يحصى من اللوحات، عندما تنظر إليها بالأشعة السينية، تبين أنها تحتوي على أطراف تم نقلها أو ملامح وجه تم تعديلها.
هذه حالة يمكننا أن نتعلم منها من الرسم. أعتقد أن القرصنة يجب أن تعمل بهذه الطريقة أيضًا. من غير الواقعي توقع أن تكون مواصفات البرنامج مثالية. من الأفضل لك إذا اعترفت بذلك مقدمًا، وكتبت برامج بطريقة تسمح بتغيير المواصفات أثناء التنقل.
(هيكل الشركات الكبيرة يجعل هذا صعبًا عليها، لذا إليك مكان آخر تتمتع فيه الشركات الناشئة بميزة.)
يعرف الجميع الآن على الأرجح خطر التحسين المبكر. أعتقد أننا يجب أن نكون قلقين بنفس القدر بشأن التصميم المبكر - تحديد ما يجب أن يفعله البرنامج مبكرًا جدًا.
يمكن للأدوات المناسبة أن تساعدنا في تجنب هذا الخطر. يجب أن تجعل لغة البرمجة الجيدة، مثل الطلاء الزيتي، من السهل تغيير رأيك. الكتابة الديناميكية هي فوز هنا لأنك لا تضطر إلى الالتزام بتمثيلات بيانات محددة مسبقًا. لكن المفتاح للمرونة، في رأيي، هو جعل اللغة مجردة جدًا. أسهل برنامج للتغيير هو برنامج قصير جدًا.
يبدو هذا وكأنه مفارقة، ولكن يجب أن تكون اللوحة العظيمة أفضل مما يجب أن تكون. على سبيل المثال، عندما رسم ليوناردو صورة جينيفرا دي بينشي في المعرض الوطني، وضع شجرة عرعر خلف رأسها. فيها رسم بعناية كل ورقة فردية. ربما فكر العديد من الرسامين، هذا مجرد شيء لوضعه في الخلفية لتأطير رأسها. لن ينظر أحد عن كثب إليه.
ليس ليوناردو. لم يعتمد مدى صعوبة عمله على جزء من اللوحة على مدى قرب توقع أن ينظر إليه أي شخص. كان مثل مايكل جوردان. لا يرحم.
اللا رحمة تفوز لأن، في المجمل، التفاصيل غير المرئية تصبح مرئية. عندما يمر الناس بجانب صورة جينيفرا دي بينشي، غالبًا ما يتم لفت انتباههم إليها على الفور، حتى قبل أن ينظروا إلى الملصق ويلاحظوا أنه يحمل اسم ليوناردو دا فينشي. كل تلك التفاصيل غير المرئية تتحد لإنتاج شيء مذهل، مثل ألف صوت بالكاد مسموع يغني جميعًا في تناغم.
وبالمثل، تتطلب البرامج الرائعة تفانيًا متعصبًا في الجمال. إذا نظرت إلى البرامج الجيدة، فستجد أن الأجزاء التي لا يُفترض لأحد رؤيتها جميلة أيضًا. لا أدعي أنني أكتب برامج رائعة، لكني أعرف أنه عندما يتعلق الأمر بالتعليمات البرمجية، فإنني أتصرف بطريقة تجعلني مؤهلاً للأدوية الموصوفة إذا كنت أتعامل مع الحياة اليومية بنفس الطريقة. إنه يزعجني رؤية تعليمات برمجية ذات مسافات بادئة سيئة، أو تستخدم أسماء متغيرات قبيحة.
إذا كان القرصان مجرد منفذ، يحول المواصفات إلى تعليمات برمجية، فيمكنه ببساطة العمل عليها من طرف إلى آخر مثل شخص يحفر خندقًا. ولكن إذا كان القرصان مبدعًا، فعلينا أن نأخذ الإلهام في الاعتبار.
في القرصنة، مثل الرسم، يأتي العمل في دورات. أحيانًا تشعر بالحماس تجاه مشروع جديد وتريد العمل عليه ست عشرة ساعة في اليوم. أحيانًا أخرى لا يبدو أي شيء مثيرًا للاهتمام.
للقيام بعمل جيد، عليك أن تأخذ هذه الدورات في الاعتبار، لأنها تتأثر بكيفية تفاعلك معها. عندما تقود سيارة بناقل حركة يدوي على تل، عليك أن تخفف القابض أحيانًا لتجنب التعثر. يمكن أن يمنع التخفيف الطموح من التعثر أيضًا. في كل من الرسم والقرصنة، هناك بعض المهام الطموحة بشكل مرعب، والبعض الآخر روتيني بشكل مريح. من الجيد الاحتفاظ ببعض المهام السهلة للحظات قد تتعثر فيها.
في القرصنة، يمكن أن يعني هذا حرفياً تجميع الأخطاء. أحب تصحيح الأخطاء: إنها المرة الوحيدة التي تكون فيها القرصنة مباشرة كما يعتقد الناس. لديك مشكلة مقيدة تمامًا، وكل ما عليك فعله هو حلها. من المفترض أن يقوم برنامجك بعمل x. بدلاً من ذلك، يقوم بعمل y. أين يذهب الخطأ؟ أنت تعلم أنك ستفوز في النهاية. إنه مريح مثل طلاء جدار.
يمكن أن يعلمنا مثال الرسم ليس فقط كيفية إدارة عملنا، بل كيفية العمل معًا. الكثير من الفن العظيم في الماضي هو عمل أيدي متعددة، على الرغم من أنه قد يكون هناك اسم واحد فقط على الحائط بجانبه في المتحف. كان ليوناردو تلميذًا في ورشة فيروكيو ورسم أحد الملائكة في معمودية المسيح الخاصة به. كان هذا النوع من الأشياء هو القاعدة، وليس الاستثناء. اعتُبر مايكل أنجلو مكرسًا بشكل خاص لإصراره على رسم جميع الشخصيات على سقف كنيسة سيستينا بنفسه.
على حد علمي، عندما كان الرسامون يعملون معًا على لوحة، لم يعملوا أبدًا على نفس الأجزاء. كان من الشائع أن يرسم السيد الشخصيات الرئيسية وأن يرسم المساعدون الشخصيات الأخرى والخلفية. لكن لم يكن لديك شخص يرسم فوق عمل شخص آخر.
أعتقد أن هذا هو النموذج الصحيح للتعاون في البرمجيات أيضًا. لا تفرط في ذلك. عندما يتم قرصنة جزء من التعليمات البرمجية بواسطة ثلاثة أو أربعة أشخاص مختلفين، لا يمتلك أي منهم حقًا، فسوف ينتهي الأمر بأن يكون مثل غرفة مشتركة. ستميل إلى الشعور بالكآبة والإهمال، وتتراكم فيها القمامة. الطريقة الصحيحة للتعاون، في رأيي، هي تقسيم المشاريع إلى وحدات محددة بوضوح، لكل منها مالك محدد، مع واجهات بينها مصممة بعناية قدر الإمكان، وإذا أمكن، مفصلة مثل لغات البرمجة.
مثل الرسم، معظم البرامج مخصصة لجمهور بشري. ولذلك يجب أن يمتلك القراصنة، مثل الرسامين، التعاطف للقيام بعمل رائع حقًا. يجب أن تكون قادرًا على رؤية الأشياء من وجهة نظر المستخدم.
عندما كنت طفلاً، كنت دائمًا أُطلب مني النظر إلى الأشياء من وجهة نظر شخص آخر. ما كان يعنيه هذا دائمًا في الممارسة العملية هو فعل ما يريده شخص آخر، بدلاً مما أريده أنا. هذا بالطبع أعطى التعاطف سمعة سيئة، وجعلت نقطة عدم تنميته.
يا له من خطأ ارتكبت. اتضح أن النظر إلى الأشياء من وجهة نظر الآخرين هو سر النجاح تقريبًا. لا يعني بالضرورة أن تكون مضحياً بنفسك. أبعد ما يكون عن ذلك. فهم كيفية رؤية شخص آخر للأشياء لا يعني أنك ستتصرف لصالحه؛ في بعض المواقف - في الحرب، على سبيل المثال - تريد أن تفعل العكس تمامًا. [4]
معظم الصانعين يصنعون أشياء لجمهور بشري. ولجذب الجمهور، عليك أن تفهم ما يحتاجونه. تقريبًا كل اللوحات العظيمة هي لوحات لأشخاص، على سبيل المثال، لأن الناس هم ما يهتم به الناس.
التعاطف هو ربما أهم فرق بين القرصان الجيد والقرصان العظيم. بعض القراصنة أذكياء للغاية، ولكن عندما يتعلق الأمر بالتعاطف فهم عمليًا أنانيون. من الصعب على مثل هؤلاء الأشخاص تصميم برامج رائعة [5]، لأنهم لا يستطيعون رؤية الأشياء من وجهة نظر المستخدم.
إحدى الطرق لمعرفة مدى جودة الأشخاص في التعاطف هي مشاهدتهم يشرحون سؤالًا تقنيًا لشخص ليس لديه خلفية تقنية. ربما نعرف جميعًا أشخاصًا، على الرغم من أنهم أذكياء بخلاف ذلك، إلا أنهم سيئون بشكل كوميدي في هذا. إذا سألهم أحدهم في حفل عشاء ما هي لغة البرمجة، فسيقولون شيئًا مثل "حسنًا، اللغة عالية المستوى هي ما يستخدمه المترجم كمدخل لإنشاء كود الكائن." لغة عالية المستوى؟ مترجم؟ كود الكائن؟ شخص لا يعرف ما هي لغة البرمجة من الواضح أنه لا يعرف ما هي هذه الأشياء أيضًا.
جزء مما يجب أن تفعله البرامج هو شرح نفسها. لذا لكتابة برامج جيدة، عليك أن تفهم مدى قلة فهم المستخدمين. سيتعاملون مع البرامج دون أي تحضير، ويجب أن تعمل كما يتوقعونها، لأنهم لن يقرأوا الدليل. أفضل نظام رأيته على الإطلاق في هذا الصدد كان Macintosh الأصلي، في عام 1985. لقد فعل ما نادرًا ما تفعله البرامج: لقد عملت ببساطة. [6]
التعليمات البرمجية المصدر أيضًا، يجب أن تشرح نفسها. إذا كان بإمكاني جعل الناس يتذكرون اقتباسًا واحدًا عن البرمجة، فسيكون الاقتباس الموجود في بداية بنية وتفسير برامج الكمبيوتر.
يجب كتابة البرامج ليقرأها الناس، وبشكل عرضي فقط لتنفيذها بواسطة أجهزة الكمبيوتر.
تحتاج إلى التعاطف ليس فقط مع المستخدمين، بل مع القراء أيضًا. إنه في مصلحتك، لأنك ستكون واحدًا منهم. لقد كتب العديد من القراصنة برنامجًا فقط ليجدوا بعد العودة إليه بعد ستة أشهر أنهم لا يعرفون كيف يعمل. أعرف العديد من الأشخاص الذين أقسموا على التوقف عن استخدام Perl بعد هذه التجارب. [7]
يرتبط نقص التعاطف بالذكاء، لدرجة أن هناك حتى شيئًا من الموضة له في بعض الأماكن. لكنني لا أعتقد أن هناك أي ارتباط. يمكنك أن تتفوق في الرياضيات والعلوم الطبيعية دون الحاجة إلى تعلم التعاطف، والأشخاص في هذه المجالات يميلون إلى أن يكونوا أذكياء، لذلك تم ربط الصفتين. ولكن هناك الكثير من الأشخاص الأغبياء الذين يعانون أيضًا من نقص التعاطف. فقط استمع إلى الأشخاص الذين يتصلون لطرح الأسئلة في البرامج الحوارية. إنهم يطرحون ما يسألون عنه بطريقة ملتوية لدرجة أن المضيفين غالبًا ما يضطرون إلى إعادة صياغة السؤال لهم.
إذن، إذا كانت القرصنة تعمل مثل الرسم والكتابة، فهل هي رائعة؟ بعد كل شيء، لديك حياة واحدة فقط. يمكنك قضاءها في العمل على شيء عظيم.
للأسف، السؤال صعب الإجابة عليه. هناك دائمًا تأخير زمني كبير في الهيبة. إنه مثل الضوء من نجم بعيد. يتمتع الرسم بالهيبة الآن بسبب الأعمال العظيمة التي قام بها الناس قبل خمسمائة عام. في ذلك الوقت، لم يعتقد أحد أن هذه اللوحات كانت مهمة كما نعتقد اليوم. كان سيبدو غريبًا جدًا للناس في ذلك الوقت أن فردريكو دا مونتيفيلترو، دوق أوربينو، سيعرف يومًا ما في الغالب على أنه الرجل ذو الأنف الغريب في لوحة لبييرو ديلا فرانشيسكا.
لذا بينما أعترف بأن القرصنة لا تبدو رائعة مثل الرسم الآن، يجب أن نتذكر أن الرسم نفسه لم يبدُ رائعًا في أيامه المجيدة كما هو الآن.
ما يمكننا قوله بثقة هو أن هذه هي الأيام المجيدة للقرصنة. في معظم المجالات، يتم إنجاز العمل العظيم في وقت مبكر. اللوحات التي تم إنشاؤها بين عامي 1430 و 1500 لا تزال لا مثيل لها. ظهر شكسبير في الوقت الذي كانت فيه المسرح الاحترافي تولد، ودفع الوسيط إلى أبعد مدى لدرجة أن كل كاتب مسرحي منذ ذلك الحين اضطر إلى العيش في ظله. فعل ألبريشت دورر الشيء نفسه مع النقش، وجين أوستن مع الرواية.
مرارًا وتكرارًا نرى نفس النمط. يظهر وسيط جديد، ويكون الناس متحمسين جدًا بشأنه لدرجة أنهم يستكشفون معظم إمكانياته في الجيلين الأولين. تبدو القرصنة في هذه المرحلة الآن.
لم يكن الرسم، في زمن ليوناردو، رائعًا كما ساعد عمله في جعله كذلك. مدى روعة القرصنة سيعتمد على ما يمكننا فعله بهذا الوسيط الجديد.
ملاحظات
[1] أكبر ضرر ألحقته التصوير الفوتوغرافي بالرسم ربما هو حقيقة أنه قتل أفضل وظيفة يومية. معظم الرسامين العظماء في التاريخ دعموا أنفسهم برسم صور شخصية.
[2] قيل لي إن Microsoft تثبط الموظفين عن المساهمة في مشاريع مفتوحة المصدر، حتى في وقت فراغهم. ولكن نظرًا لأن العديد من أفضل القراصنة يعملون في مشاريع مفتوحة المصدر الآن، فإن التأثير الرئيسي لهذه السياسة قد يكون ضمان عدم تمكنهم من توظيف أي مبرمجين من الدرجة الأولى.
[3] ما تتعلمه عن البرمجة في الكلية يشبه إلى حد كبير ما تتعلمه عن الكتب أو الملابس أو المواعدة: ما هو ذوقك السيئ في المدرسة الثانوية.
[4] إليك مثال على التعاطف التطبيقي. في Viaweb، إذا لم نتمكن من الاختيار بين بديلين، كنا نسأل، ما الذي سيكره منافسونا أكثر؟ في مرحلة ما، أضاف منافس ميزة إلى برامجه كانت عديمة الفائدة أساسًا، ولكن نظرًا لأنها كانت واحدة من القليل التي لم تكن لدينا، فقد أعلنوا عنها كثيرًا في الصحافة التجارية. كان بإمكاننا محاولة شرح أن الميزة كانت عديمة الفائدة، لكننا قررنا أنها ستزعج منافسنا أكثر إذا قمنا بتنفيذها بأنفسنا، لذلك قمنا بإنشاء نسختنا الخاصة بعد الظهر.
[5] باستثناء محررات النصوص والمترجمات. لا يحتاج القراصنة إلى التعاطف لتصميم هذه، لأنهم هم أنفسهم المستخدمون النموذجيون.
[6] حسنًا، تقريبًا. لقد تجاوزوا ذاكرة الوصول العشوائي المتاحة إلى حد ما، مما تسبب في الكثير من تبديل الأقراص غير المريح، ولكن يمكن إصلاح ذلك في غضون بضعة أشهر بشراء محرك أقراص إضافي.
[7] الطريقة لجعل البرامج سهلة القراءة ليست حشوها بالتعليقات. سأذهب أبعد من اقتباس Abelson و Sussman. يجب تصميم لغات البرمجة للتعبير عن الخوارزميات، وبشكل عرضي فقط لإخبار أجهزة الكمبيوتر بكيفية تنفيذها. يجب أن تكون لغة البرمجة الجيدة أفضل لشرح البرامج من اللغة الإنجليزية. يجب أن تحتاج إلى تعليقات فقط عندما يكون هناك نوع من الحلول المؤقتة التي تحتاج إلى تحذير القراء بشأنها، تمامًا كما توجد أسهم على أجزاء المنحنيات الحادة بشكل غير متوقع على الطريق.
شكرًا لـ Trevor Blackwell و Robert Morris و Dan Giffin و Lisa Randall لقراءة مسودات هذا، ولـ Henry Leitner و Larry Finkelstein لدعوتي للتحدث.