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

CPAP من هنا
ما لم أكن أعرفه بعد ذلك هو سبب قيام المبرمجين بذلك. كان من الواضح أنهم كانوا يفعلون ذلك ؛ ولكن لماذا تخلق صناعة البرمجيات الكثير من التعليمات البرمجية المتوحشة والمعقدة وغير القابلة للقراءة؟ لماذا يستمر هذا حتى بعد ذلك ، على ما يبدو ، كان يجب أن يتعلم المطورون من التجربة السلبية الأولى؟ ما الذي جعل المبرمجين لا يكتبون كودًا سيئًا فحسب ، بل يواصلون فعله مرارًا وتكرارًا؟
حسنًا ، كان هذا لغزًا بالنسبة لي ، ولكن بطريقة ما لم أكن قلقًا بشأنه في البداية. إن فكرة أن "البرامج السيئة تأتي من المبرمجين السيئين" بسيطة وواضحة إلى حد أنها خدمت كأساس لدراسة كاملة في مجال البرمجة ، والتي حققت نتائج جيدة في نهاية المطاف (والتي تم وصفها بشكل أساسي في هذه المدونة ، وهي أيضًا موضوع الكتب التي تتم كتابتها حاليًا). تم تحديد المشكلة (المبرمجين السيئين الذين يخلقون صعوبات) ، وللوهلة الأولى ، كان لديها حل (إنشاء قواعد لتطوير البرمجيات من شأنها منع ذلك) ، وكان ذلك كافياً بالنسبة لي.
لكنني ما زلت أتساءل أن الجامعات والمدارس الفنية والبرامج التعليمية المشهورة عالميًا تخرج مثل هؤلاء المبرمجين الرهيبين ، على الرغم من عقود من الخبرة في تدريس تقنيات تطوير البرمجيات. بالطبع ، لم تكن العديد من مبادئ تصميم البرنامج سرية أبدًا ، والعديد من النصائح الجيدة على الأبواب ، والعديد منها عام جدًا. حتى لو لم يذهب الناس إلى المدرسة ، ألم يقرؤوا أي نصيحة من هذا القبيل؟
حسنًا ، الحقيقة تجاوزت خيالي ، واستغرق العمل في مشروع Bugzilla ما يقرب من خمس سنوات بمشاركة عدد كبير من المطورين ، حتى أدركت يومًا ما حقيقة مرعبة فجأة:
الغالبية العظمى (90٪ أو أكثر) من المبرمجين ليس لديهم فكرة عما يفعلونه.
لا يعني ذلك أنهم لم يقرؤوا أي شيء عن تطوير البرامج (على الرغم من أنه على الأرجح لا). لا يعني أن لغات البرمجة كانت معقدة للغاية (على الرغم من أنها). الحقيقة هي أن معظم المبرمجين ليس لديهم فكرة عما يفعلونه في الواقع. إنهم ببساطة يقلدون أخطاء المبرمجين الآخرين - نسخ التعليمات البرمجية وطباعة نوبات ذات مغزى أكثر أو أقل على الكمبيوتر على أمل أن تتصرف على غرار ما يتوقعونه ، دون أن يكون لديهم فهم حقيقي لآليات الكمبيوتر ، ولا مبادئ تطوير البرمجيات ، ولا قيمة كل كلمة ورمز فردي يدخلونه في الكمبيوتر.
هذا تصريح جريء ومثير للاشمئزاز ومهين ، لكن تجربتي تؤكد ذلك. أنا شخصيا نظرت من خلال العشرات من المبرمجين وقمت بتصنيفها. قرأت كود العديد من الآخرين. تحدثت مع الكثير من المبرمجين حول تطوير البرمجيات ، وقرأت مقالات من مئات المطورين. عدد أولئك الذين يفهمون حقًا ما يفعلونه هو حوالي 10 ٪ فقط من جميع المبرمجين الذين تحدثت معهم أو عملت معهم أو سمعت بهم.
مطورو البرامج مفتوحة المصدر هم الأفضل على الإطلاق ؛ هؤلاء هم الأشخاص الذين يريدون البرمجة حتى في أوقات فراغهم. وحتى ذلك الحين ، أود أن أقول إن حوالي 20٪ فقط من مطوري البرامج مفتوحة المصدر يجيدون حقًا ما يقومون به.
لكن لماذا؟ ما هي المشكلة؟ كيف يمكن أن يكون هناك الكثير من العاملين في هذه الصناعة الذين ليس لديهم فكرة عما يفعلون؟
حسنًا ، يبدو أنهم بطريقة ما "أغبياء". ولكن ما هو الغباء؟ لا يصبح الناس أغبياء لمجرد أنهم لا يعرفون شيئًا . هناك الكثير مما لا يعرفه الجميع . لكن هذا لا يجعلهم أغبياء. هذا يجعلهم لا يعرفون شيئًا عن أشياء معينة ، ولكن ليس غبيًا. لا ، غباء ، غباء حقيقي - هذا يعني عدم معرفة أنك لا تعرف شيئًا . يعتقد الناس الأغبياء أنهم يعرفون شيئًا ، على الرغم من أنهم لا يعرفون ذلك ، أو أنهم لا يدركون أن مجال المعرفة أوسع بكثير مما يعتقدون .
هذا "الغباء" شيء يمكن العثور عليه في أي مجال تقريبًا ، وتطوير البرمجيات ليس استثناءً. لا يدرك العديد من المبرمجين ببساطة أنه قد تكون هناك قوانين معينة أو مبادئ عامة لتطوير البرمجيات ، لذلك لا يحاولون حتى العثور عليها. لا تحاول العديد من شركات البرمجيات تحسين فهم مطوري لغات البرمجة التي يستخدمونها. ربما يكون ذلك لأن الإدارة تعتقد أن المبرمجين يجب أن "يعرفوا كل هذا بالفعل ، حيث تم تعيينهم للقيام بذلك."
لسوء الحظ ، هذا العرض ضار عند تطوير البرنامج ، لأنه إذا كنت تريد أن تكون مبرمجًا جيدًا حقًا ، فأنت بحاجة إلى معرفة الكثير . أي شخص يعتقد أنه يعرف كل شيء (أو الذي لديه "نقطة عمياء" ، لأنه لا يرى أي شيء آخر يتعلمه) - يطمس كوده المثالي في غياب المعرفة - معرفة عن وجوده الذي لا يعرفه إنهم يعرفون ، ولا يدركون حتى ، حقيقة نقص المعرفة .
بغض النظر عن مدى معرفتك ، هناك دائمًا شيء آخر في أي مجال ، والبرمجة ليست استثناء. لذا أعتقد أنك تعرف أن كل شيء دائمًا خطأ.
في بعض الأحيان يكون من الصعب تحديد ما تحتاج إلى الدراسة على الإطلاق. هناك الكثير من البيانات ، ولكن من أين تبدأ؟ للمساعدة في ذلك ، توصلت إلى بعض الأسئلة التي يجب أن أطرحها على نفسي أو الآخرين لمعرفة المجالات التي تحتاج إلى مزيد من الدراسة:
- هل تعرف كل ما تستطيع حول كل كلمة وكل شخصية في كل صفحة من التعليمات البرمجية الخاصة بك؟
- هل قرأت وفهمت تماما الوثائق لكل وظيفة تستخدمها؟
- هل لديك فهم ممتاز للمبادئ الأساسية لتطوير البرمجيات - جيدة جدًا بحيث يمكنك شرحها للمبرمجين المبتدئين في مؤسستك؟
- هل تفهم كيف يعمل كل مكون من مكونات الكمبيوتر وكيف يعمل معًا؟
- هل تفهم تاريخ أجهزة الكمبيوتر وكيف سيتم تطويرها بشكل أكبر من أجل فهم كيفية تنفيذ التعليمات البرمجية على أجهزة الكمبيوتر التي تم إنشاؤها في المستقبل؟
- هل تعرف تاريخ لغات البرمجة لفهم كيفية تطور اللغة التي تستخدمها ، ولماذا تعمل بهذه الطريقة؟
- هل تفهم لغات البرمجة الأخرى وطرق البرمجة وأنواع أجهزة الكمبيوتر الأخرى التي تختلف عن ما تستخدمه لفهم الأداة الأفضل لكل مهمة؟
- يسرد من أعلى لأسفل أهم الأشياء بالنسبة للمبرمج لفهم الرمز الذي يكتبه. إذا كنت تستطيع الإجابة بصراحة "نعم" على كل هذه الأسئلة ، فأنت بالتأكيد مبرمج رائع.
ربما يبدو طول القائمة محبطًا. "واو ، اقرأ الوثائق لكل وظيفة؟ نعم ، سيستغرق الكثير من الوقت! " حسنًا ، هل تعرف ماذا سيستغرق الكثير من الوقت؟ كن مبرمجًا جيدًا دون قراءة الوثائق. وأنت تعرف كم؟ الخلود ، لأن هذا لن يحدث أبدًا.
لن تصبح مبرمجًا جيدًا بمجرد نسخ كود شخص آخر والصلاة من أجل أن تعمل من أجلك. ولكن الأهم من ذلك ، أن استثمار الوقت في التدريب يعني أن تصبح شخصًا جيدًا [ مبرمج - تقريبًا. مترجم ]. سيجعلك الوقت الذي تقضيه الآن مبرمجًا أسرع بكثير في المستقبل. إذا كنت تقضي الكثير من الوقت في القراءة خلال الأشهر الثلاثة الأولى من تعلم تقنية جديدة ، فربما تكون أسرع 10 مرات على مدى السنوات العشر القادمة مما لو كنت قد هرعت لاستخدامها دون قراءة أي شيء.
أريد أن أوضح على الفور - بالطبع ، لن يعمل فقط لقراءة ثلاثة أشهر وأصبح مبرمجًا جيدًا. أولاً ، إنها مملة للغاية - لا أحد يريد وضع نظرية لمدة ثلاثة أشهر دون أي ممارسة. قليل من الناس يمكنهم القيام بذلك لفترة كافية حتى يصبحوا مبرمجين ، ناهيك عن كونك جيدًا في الحال. لذا ، أود أن أشير على الفور إلى أن الفهم يأتي من الممارسة ، وليس فقط من النظرية. ولكن بدون دراسة النظرية ، قد لا يظهر الفهم على الإطلاق . لذا من المهم تحقيق التوازن بين البرمجة العملية والنظرية.
أنا لا أهاجم أي مبرمج عملت معه شخصيًا ، أو أي مبرمج معين بشكل عام. أنا معجب بكل مبرمج عرفته على الإطلاق كشخص ، وأتوقع أن أُعجب بالآخرين إذا التقيت بهم. بدلاً من ذلك ، أحث جميع المبرمجين على فتح عقولهم على الجديد ، بحيث يكون هناك دائمًا بعض المعرفة الجديدة ، وهذه النظرية والممارسة هي مفتاح الإتقان ، وأنه لا يوجد شيء مخجل في عدم معرفة شيء - إذا كنت تعرف عن حقيقة أنك لا تعرف شيئا. فقط خذ الوقت لتكتشف عند الضرورة.
من مترجم: حاولت الترجمة بأسلوب أدبي ، لذلك ربما تم تشويه بعض العبارات أو الأفكار من الأصل بسبب الرغبة في جعل الترجمة أكثر قابلية للقراءة. إذا كان الأمر كذلك ، يرجى عدم القيادة بخرق غاضب ، ولكن اكتب في PM.