ما هو "الرمز النظيف" في 2020؟


"كود نظيف" وقط نظيف

لا تطعم الخبز للمطورين ، دعنا نتجادل حول نظافة الشفرة: على سبيل المثال ، نشر دان أبراموف "Goodbye، Clean Code" ضجة مؤخرًا .

ولكن في الوقت نفسه ، ليس لمفهوم "الشفرة النظيفة" تعريفًا واضحًا. الكتاب الرئيسي حول هذه المسألة هو "Clean Code" ، حيث أعلن روبرت "Uncle Bob" Martin على الفور: "كم عدد المبرمجين ، والعديد من التعريفات". ومع ذلك ، من هذا لا يستنتج "أن الحديث عنه غير مفيد" ، ولكن الاستنتاج "يجدر مقارنة التعاريف المختلفة". لذلك ، أشار في الكتاب إلى آراء العديد من المبرمجين البارزين حول ما هو الرمز النظيف.

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

في أبريل، سوف العم بوب يطير الى سان بطرسبرج للتحدث في المؤتمرات الثلاثة لدينا، وهما في اتجاهات مختلفة ثلاثة فقط ( نحو تنمية. NET ، حول اختبار، و حول جافا سكريبت ). لذلك ، سألنا العديد من المتحدثين في هذه المؤتمرات عن الرمز النظيف لهم لمقارنة آراء خبراء الصناعة في عام 2020.

وبما أن الموضوع أجوف ، فمن المؤكد أن أحدكم لن يوافق على أي من الآراء. في هذه الحالة ، تعال للحجج في التعليقات ، هذا أيضًا ممتع!

UPD: , . , . - . . 13 , .


DotNext



جون هو أسطورة Stack Overflow ، ومؤلف كتاب C # in Depth ، وأحد أشهر المانحين للكوكب. أعطانا هذا التعريف:

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

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

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



أندري أكينشين


زوار DotNext لا تحتاج إلى إدخال اندريه، ولكن بالنسبة لبقية سنقوم اقول لكم انه هو معروف لعمله على IDE رايدر ، BenchmarkDotNet مكتبة ، حية تقارير و كتاب "برو. NET المقارنة المعيارية".

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

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

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



ديلان بيتي


يمكن أن يتذكر Habrachitateli ديلان في تقريره المدروس والحيوي حول العمل مع الشفرة القديمة: بالنسبة إلى Habr قمنا بفك تشفيرها . وعندما انتقلنا إلى Dylan حول الشفرة النظيفة ، كتب نصًا مفصلاً ومدروسًا ينشره في منشور منفصل على الأقل:

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

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

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

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

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

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

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

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

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

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


Heisenbug


هذا "مؤتمر اختبار ليس فقط للمختبرين": إنه يقع عند تقاطع الاختبار والتطوير. لذلك ، يفهم العديد من المتحدثين تفاصيل كل من هذين العالمين في وقت واحد.

إيفان كروتوف وآنا تشيرنيشيفا


تعمل إيفان وآنا في شركات مختلفة ، ولكن هناك شيء يوحدهما: كلاهما يعرف الكثير عن السيلينيوم. تحدثنا معهم في نفس الوقت ، لذلك حصلنا على تعريف مشترك:

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

آنا: "يبدو لي: هذا رمز يمكنك اكتشافه بسرعة ، وإصلاح خطأ ، وتوسيعه بسهولة ، واستكماله".

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



سيباستيان داشنر


سيباستيان هو محامي مطور جافا الرئيسي لشركة IBM ، ويمكن رؤيته غالبًا في مؤتمرات جافا. ولكن بما أنه يسافر الآن إلى Heisenbug ، سألناه عن رمز نظيف في سياق الاختبار ، فأجاب:

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



أندري لوشنيكوف


يعمل Andrey على أداة التشغيل التلقائي للمتصفح Playwright ، والتي كتبنا عنها مؤخرًا . تبين أن تعريفه هو الأكثر إيجازًا:

"الشفرة النظيفة غبية ، شيفرة مفهومة للغاية. والغباء أفضل. "








الكسندرا سفاتيكوفا


ألكسندرا هي خبيرة في أمن المعلومات في Odnoklassniki ، "التي بدأت في مجال تكنولوجيا المعلومات كمطور جافا ، لكنها تحولت بطريقة خاطئة." تبين أن تعريفها هو:

"كود خالص له ثلاث خصائص: يمكن لمطور آخر قراءته وفهمه بسهولة ، والتحسينات الطفيفة تتطلب جهدًا متناسبًا ، ويمكن توقع تأثير تغيير معين.

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


Holyjs


أندري ميليخوف


ومن المعروف أن أندريه للكثيرين لمشروع Devshakhta . ليس من المستغرب أن الشخص الذي يصيغ أفكاره باستمرار في Devshacht Podcast ذكر موقفه بوضوح:

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

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

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



الكسندرا كالينينا


ألكسندرا عضوة في لجنة برنامج HolyJS ، ولديها خبرة واسعة في البرمجة - وعلى الرغم من أنها ليست مع Heisenbug ، إلا أنها تعرف الاختبارات مباشرة (الوحدة ، التكامل ، E2E ، B2B). هنا نصها:

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

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



نيكولي ريبودو


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

"الرمز النظيف هو رمز يمكن تقسيمه بسهولة إلى مكونات ذرية صغيرة.

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

يمكن أن تكون الشفرة نظيفة بغض النظر عن لغة البرمجة أو النموذج: يمكن تنفيذ الذرات ككائنات صغيرة أو وظائف أو حتى كقطع صغيرة من التعليمات البرمجية غير المعزولة نحويًا. "



استنتاج



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

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

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

  • « : „ , ”. , , : . , !»
  • « „ ”? „” , — , , „” — !»
  • "الكلمات" يمكنك ملء المطبات الخاصة بك بينما ينظر الآخرون بالحيرة "ازدراء الصوت ، كما لو أن الحمقى فقط يفعلون ذلك. ولكن كل ما هو أفضل ومبتكر يظهر عندما تملأ المخاريط وتفهم أسبابها ، وليس فقط اتباع الكتب القديمة! "



UPD 12 مارس: وعلى الرغم من العم بوب لا يمكن أن تطير لدينا، لدينا مؤتمرات سان بطرسبرج ( للمطورين. NET ، اختبار، و مطوري جافا سكريبت ) من غير المرجح أن الخلاف مع رمز نظيفة. على مواقع المؤتمرات - دائمًا إصدارات محدثة من البرامج. تابعنا واشترك في نشراتنا الإخبارية - سنتحدث مرة واحدة في الأسبوع عن التغييرات.

All Articles