السلام عليكم .....
هل فكرت يوماً لماذا عندما تعلمنا ++C, قمنا بصناعة linked lists و tree و stack و..... أجدها متعة حقيقية في كتابة Data Structure عملية. في الحقيقة إن بناء مكتبة Data Structure هي أحد أصعب المهام التي يمكن أن تعطيها لمبرمج حديث السن. لأن بناء هذا النوع من المكتبات موجه للمبرمجين, و ليس للمستخدم النهائي. لذلك, لا يبنيها إلا الخبراء, و ستجد أن معظم اللغات !العالية المستوى جداً! تضم في جنبات اللغة نفسها Data Structure للاستخدام الشائع, و التسهيل على المبرمجين بضمها لقلب اللغة. فمثلاً, الـ Dynamic Arrays أو List ستجدها ضمن اللغة في Perl و Python و غيرهما الكثير. بينما ستجد الكثير من أنواع الـ Data Structure في المكتبات القياسية في اللغات الـ Compiled أو المتوسطة المستوى كـ Java و #C و ++C و C و غيرهم الكثير. في اللغات الـ Compiled ستجد Fixed Arrays في غالب الأمر ضمن اللغة نفسها.
السؤال المطروح الآن, ما الفائدة من هذه الـ Data Structures الكثيرة مادمنا نستخدم المصفوفات في جل عملنا! قليلون هم من يدرسون برامجهم, و يحددون الـ Data Structures المناسبة لطبيعة بيانات البرنامج!
للأسف, كما قلنا في البداية, بناء الـ Data Structure صعب جداً, و إن لم تكن كتبت Balanced Tree أبداً أو قرأت عنها, فلن تعرف متى نستخدم Set و هل نستخدم Vector أو ما يسمى غالباً في اللغات الأخرى, ArrayList. هل ترتب المصفوفة ثم تقوم بعمليات البحث الثنائي Binary Search على العناصر المطلوبة أو نستخدم Set ؟ مهلاً ماذا قلنا عن فائدة الـ Set ؟! متى نستخدم Tree مثلاً و متى نستخدم Hash Table؟ هل سمعت في حياتك عن Design Pattern يسمى RAII, ربما يعتبر بلاشك أكثر الـ Design Patterns استخداماً على مستوى لغات البرمجة؟ هذا يجرنا إلى قضية الـ Garbage Collectors و أنواعها, و لماذا ++C لا تعتمد على Garbage Collector بشكل افتراضي! و أخيراً سنأخذ نظرة عامة حول الـ policy-based design التي تبلغ من العمر حوالي 15 عاماً مقارنة بـ OOP التي تمتد إلى جذور الستينيات.
بإذن الله سنبدأ سلسلة قصيرة, نتكلم من هنا و هناك, نأخذ من كل بستان زهرة, و لكننا لن نتعمق كثيراً, لأن محدثكم مبتدأ مثلكم, و الموضوع أكبر من أن يحصر بكتب و مجلدات :)
هذه ليست سلسلة عن بناء الـ Data Structures و إنما عن استخدامها, و النظر إلى تصاميمها بشكل عام, و خصوصاً في المكتبات الشهيرة في ++C.
أتمنى أن تكون هناك مناقشة, و إضافات, حتى تكتمل الفائدة.
تحياتي..



