لماذا أتعلم نظرية الفئات

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

على وجه الخصوص ، لقد اتبعت MIT 18.S097: البرمجة مع الفئات وقرأت نظرية الفئات للمبرمجين من تأليف بارتوس ميليوسكي بالإضافة إلى بعض الكتب مثل نظرية التصنيف لستيف أودي وسبعة اسكتشات في التركيب. أود أن أشكر زملائي المتكررين الذين شاركوا في مجموعة قراءة نظرية الفئات ، لأنني لم أكن لأستمتع كثيرًا كما فعلت.

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

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

نظرًا لأنني أكتب في الغالب بلغة C ++ أو PHP أو JavaScript ، فأنا أستخدم وظائف وهياكل بيانات بسيطة ولا أسهب في الحديث عن الأدوية العامة وأكتب سحر النظام. ومع ذلك ، نظرًا للأسس النظرية ، يمكن (عادةً) تكوين الكود الخاص بي بشكل واضح في هياكل أكبر.

ومع ذلك ، كنت أعرف دائمًا أن أسلوبي كان عبارة عن نسخة "pop-sci" من نظرية الفئات: لم أكلف نفسي عناء البحث في النظرية الرياضية الحالية. في المرات القليلة التي فتحت فيها كتابًا مدرسيًا ، فوجئت بملايين الكلمات التي لم أكن أعرفها. كنت أبحث عن أشياء على ويكيبيديا أو nlab وكنت مرتبكًا تمامًا.

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

منذ أن كنت طفلاً ، كنت مفتونًا بالمخططات.

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

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

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

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

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

لطالما امتلكت رؤية شاملة و "موسعة" لأنظمة البرمجيات. بالعودة إلى البرنامج الذي كتبته كمطور مبتدئ ، مثل مكدس AVR Bluetooth هذا ، أتساءل عما إذا كنت سأكتبه بشكل مختلف هذه الأيام. يبدو أن فهمي للتكوين والتسمية والمكونات قد اكتمل بالفعل ...

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

على وجه الخصوص ، لقد اتبعت MIT 18.S097: البرمجة مع الفئات وقرأت نظرية الفئات للمبرمجين من تأليف بارتوس ميليوسكي بالإضافة إلى بعض الكتب مثل نظرية التصنيف لستيف أودي وسبعة اسكتشات في التركيب. أود أن أشكر زملائي المتكررين الذين شاركوا في مجموعة قراءة نظرية الفئات ، لأنني لم أكن لأستمتع كثيرًا كما فعلت.

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

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

نظرًا لأنني أكتب في الغالب بلغة C ++ أو PHP أو JavaScript ، فأنا أستخدم وظائف وهياكل بيانات بسيطة ولا أسهب في الحديث عن الأدوية العامة وأكتب سحر النظام. ومع ذلك ، نظرًا للأسس النظرية ، يمكن (عادةً) تكوين الكود الخاص بي بشكل واضح في هياكل أكبر.

ومع ذلك ، كنت أعرف دائمًا أن أسلوبي كان عبارة عن نسخة "pop-sci" من نظرية الفئات: لم أكلف نفسي عناء البحث في النظرية الرياضية الحالية. في المرات القليلة التي فتحت فيها كتابًا مدرسيًا ، فوجئت بملايين الكلمات التي لم أكن أعرفها. كنت أبحث عن أشياء على ويكيبيديا أو nlab وكنت مرتبكًا تمامًا.

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

منذ أن كنت طفلاً ، كنت مفتونًا بالمخططات.

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

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

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

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

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

لطالما امتلكت رؤية شاملة و "موسعة" لأنظمة البرمجيات. بالعودة إلى البرنامج الذي كتبته كمطور مبتدئ ، مثل مكدس AVR Bluetooth هذا ، أتساءل عما إذا كنت سأكتبه بشكل مختلف هذه الأيام. يبدو أن فهمي للتكوين والتسمية والمكونات قد اكتمل بالفعل ...

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow