لماذا كبار المطورين تعليم الطلاب

في Veeam ، لدينا مشروع تعليمي يحمل اسم laconic of Veeam Academy . إنه مكرس لممارسة التطوير C #. إذا لم تخوض في التفاصيل ، فالجوهر هو هذا: نحن نأخذ الطلاب الكبار وفي غضون ثلاثة أشهر نأتي بمعرفتهم النظرية البحتة وفقًا للواقع المحيط. يتم ذلك بمساعدة المحاضرات ، حيث يكشفون عن المعنى العملي للنظرية المملة التي تمكنوا من تقديمها لهم في الجامعة ، وبمساعدة مشروع مشترك ، يتم تطويره خلال فترة التدريب.



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


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


  • لماذا يقضون وقتهم الثمين على الطلاب؟
  • كيف تشعر أن تكون معلمه مبتدئ؟
  • كيف / لماذا / لماذا نعيش مع الكود القديم؟
  • ما الذي ينقص في التعليم الحديث؟
  • لماذا يذهب الناس إلى تطوير المنتجات المعبأة؟

أجرينا سلسلة صغيرة من المقابلات بالفيديو باستخدام Dud-style ، وسيكون هناك مقتطف نصي صغير من الإجابات الأكثر إثارة للاهتمام. تم الآن نشر مقابلتين كاملتين (وهما في المقالة) ، ولكن سيتم نشر ثلاث مقابلات أخرى قريبًا.


الممثلون:


ألكساندر بارانوف - مدير التطوير ، Veeam Backup & Replication.
أرتيوم غريغوريف - مطور متمرس.
ديمتري بابوشكين - مطور أول.
كيريل لوكيانوف - رئيس قسم التطوير في Hyper-V ، قائد المشروع بطريقة بسيطة.
فيليب جوزيف - مطور متمرس.


كيف ولدت فكرة أكاديمية فييم؟


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


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


كيف وصلت إلى الأكاديمية؟


أرتيوم - لقد عرضوا المشاركة في الأكاديمية كمراجع ، فكرت: "لماذا لا؟" ، وفي نفس الوقت سأقوم بتحديث معرفتي واكتساب خبرة في التحدث. كانت أول تجربة لي من الجامعة تقريبًا ، لذلك كنت قلقًا للغاية.


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


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


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



ماذا فعلت في الاكاديمية؟


ديمتري - تم إعداد الأسئلة للاختبار عبر الإنترنت ، وشارك في اختيار ومقابلة الطلاب ، وعمل أيضًا كمعلم لبعض الطلاب.


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


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


لا تندم على الوقت الذي تقضيه؟


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


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


لماذا أصبحت معلمه؟


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


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


ما الذي ينقص الطلاب الحديثين؟


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


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


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



ما هو المثير للاهتمام حول مراجعات كود الطالب؟


Artyom - من حيث المبدأ ، من المثير للاهتمام في حد ذاته أن ننظر إلى رمز الآخرين. لا نستخدم الكثير من الابتكارات في سير العمل ، لذلك تعلمت شيئًا مثيرًا للاهتمام بالنسبة لي فيما يتعلق بالتقنيات الحديثة نسبيًا.


كتب الطلاب على شارب السابع ، في الاستوديو السابع عشر ، على التوالي ، كانت هناك بعض اللحظات التي لم أواجهها بعد في الممارسة العملية. على سبيل المثال المتزامن / تنتظر.


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



ماذا تتوقع من طالب للمقابلة؟


ديمتري - أريد أن أرى نهجه. الناس يأتون ، يقولون إنهم قرأوا ، على سبيل المثال ، ريختر. لم أقرأ ريختر ، لكن عندما تبدأ في التحدث إليهم ، يصبح من الواضح أنهم وجدوا إجابة على سؤالهم وهذا كل شيء - أي لم يقرأوها [بعمق]. قاموا بتأليف كتاب ، لكنهم غير مهتمين بما يكتب عنه ، ولا يهتمون بكيفية ترتيب .Net Framework بالداخل. هذا هو نهج صحيح إذا كنت متخصص المعمول بها. ولكن إذا رأيت C # في عامك الأول وبدأت في التخلص من بعض تفاصيل التنفيذ ، وكيف يتم ترتيب كل شيء تحت الغطاء ، فهذا يعد ضمانًا بأنك ستبدأ خطوة على أشعل النار. وإذا انضممت في هذه اللحظة إلى مشروع الفريق ، فسيؤثر ذلك حتماً على نتيجتك. الجميع سوف يوبخك ، وسوف ينخفض ​​الدافع الخاص بك وسوف يطرح السؤال حول المزيد من العمل.


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


هل من الصعب تعليم كيفية كتابة الكود "بشكل صحيح وكما نحتاج"؟


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


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


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


يمكن للطلاب مفاجأة سارة؟


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



هل كانت أكاديمية Veeam مفيدة لك شخصيًا؟


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


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


تتعلم ، بما في ذلك الكثير ، عن نفسك ، وهذا هو الشيء الأكثر أهمية.


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


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


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



تنمية المشاريع دائما عن التراث؟


سيريل - بيان صحيح تماما. عندما يتم كتابة مشروع لمدة 10 سنوات ويتطور باستمرار ، ستكون هناك نسبة مئوية معينة من الكود القديم.


سؤال آخر هو كيف يمكن للشركات المختلفة التعامل مع هذا.


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


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


ولكن بشكل عام ، مع الكود القديم يجب أن تكون قادرًا على العيش. ليست هناك حاجة للخوف منه.


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


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


بالنسبة للأكاديمية ، يتيح لنا هذا المشروع أيضًا مواكبة العصر. يأتي شباب جدد ، وهم يتابعون بنشاط أخبار عالم C # و .Net ، إلخ. يعجبهم بعض الإنشاءات الجديدة ، "السكر النحوي" من أحدث الإصدارات. وفي الواقع ، من خلال قادة فرقهم ، يجبرون [على تعزيز] هذه التصاميم في المشروع. نعم ، يمكن أن تسبب المقاومة ، وقد لا يقبلها الناس على الفور ، ولكنها كلها مؤقتة وإذا كانت ميزة مفيدة حقًا تأتي في الإطار الجديد ، فستدخل العملية.


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


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


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



ثم كيف يتم إدخال ميزات جديدة؟


ألكساندر - بادئ ذي بدء ، اشرح المشكلة التي تحلها. إذا أحضرت مشروع الطوفر القمري - فهذا أمر رائع بالتأكيد ، لكن اشرح سبب الحاجة إليه. , , , , .


— , — .. . - , . , , , .


- - . , , . , ? .


?


— - , - . ( ) — , . , “” , , . , , “ ”.


— , , , -, . -, , , .
, , — , . .


— . , , . , , .


, , . , . , . , , . , , .


?


— -, , . “-”, , . . .
legacy . . , . رقم , enterprise, . [ — .], [ — .].


— . backlog [ , — .], , . , - , , - .


-, . , , , .



, , ?


— Enterprise- , . , , , . , “ ”, “”. , enterprise[-]. , , , , . , Veeam 5 , SMB [small & medium businesses — .] Enterprise. enterprise[-], , , . , , .


. , enterprise. : , enterprise “”, . , , . , enterprise, . : - 5 ( ) , , , . , .


. , . , . , , .


— . , , - , , .
[.. — .] . , .


? , , . , , — . : , . .


, 2-3 . , . , Veeam, , - , - . — .. , , .


— , . , . , enterprise- , .


, , , . , Amazon , Facebook , , .
, enterprise. , .


— “, , ” , . . , . , , - , , , . , .


, , . , , .. , . . , , .


enterprise?


— , . , , , “ ”, .


— . - - . - , “”. . 8 , , . , .


— , enterprise. , , , . , , ..


— , — . , , .



?


— , . , . - , , .


, . — , . , , , . , . -, , , “” [ — .]. , , . .


?


— , . .


— , , .


— . -, . 15 - , , , [Microsoft Visual Studio — .], , - .


— , .


— , , . , , , . , , , .



, , , .

Source: https://habr.com/ru/post/ar436358/


All Articles