يوجد مفاهيم مهمة جدا في #البرمجة و #هندسةـالبرمجيات ودايما ما تلخبط الكثير 🙃😅 وهي: المكتبة البرمجية library واطار العمل البرمجي framework وخدمة الويب البرمجية Web Service والواجهة البرمجية Application Programming Interface (API) وال SDK. فما هو الفرق؟ سهل جدا بس ركز معي 👇
١- المكتبة البرمجية: بكل بساطة تخيل ناس كتبت كود معين عشان يؤدي غرض معين (مشترك بين كثير من البرامج) ونشرت الكود على الانترنت على شكل مكتبة (أو تبيعه ولكن قليل هالأيام). فبدلا من انك تكتب الكود بنفسك وتضيع وقتك الأفضل تستخدم المكتبة أو بمعنى آخر تستدعي الكود من المكتبة
مثال: أبغى أسوي تطبيق ايفون وأبغى تطبيقي يتعامل مع الصور بحيث ينزل الصورة من السيرفر ويحفظها في التطبيق وبعد كذا يعرضها للمستخدم ... الخ. بدل ما تكتب الكود بنفسك تروح تستخدم مكتبة SDWebImage github.com . لاحظ: أكثر من ٢٣٠ شخص برمجوا المكتبة على مدى سنوات (يتبع)
بالتالي مستحيل أنت أو حتى أنت وزملائك في فريق المشروع تسوون حاجة بنفس الكفاءة. طيب وش تسوي؟ بكل بساطة تنزل المكتبة من الانترنت وتضمنها ضمن الكود حقك فتصير جزء منه وكأنك أنت كاتبها علما انه مو أنت اللي كاتبها وتبدا "تستدعي" (تستخدم) الكود اللي في المكتبة في برنامجك.
٢- واجهة برمجة التطبيقات #API أو الواجهة البرمجية (كما أحب أن أترجمها): بكل بساطة تخيل انك نزلت مكتبة برمجية من الانترنت وتبغى تستخدمها في الكود حقك. ال API تسمح لك تستخدم المكتبة. بمعنى آخر تسمح لك تستدعي الكلاسات الموجودة والميثودز والفنكشنز ... الخ
لو كانت الدعوى كذا ان كان الأمور واضحة 😂 لكن للأسف تعريفنا لل API ناقص. ليش؟ لأن ال API مو بالضرورة تعلمك كيف تستخدم مكتبة معينة. فيه شي اسمه Web API وهذا يعلمك كيف تستخدم خدمة ويب معينة web service موجودة بالانترنت وهذا الاستخدام الأكثر شيوعا اليوم لل API. طيب وش خدمة الويب؟ 🤔
٣- خدمة الويب (البرمجية) #WebService: تخيل واحد قال لك: "أبعطيك مكتبة برمجية كاملة متكاملة بس موجودة في سيرفري. بعبارة أخرى: الكود حقي وموجود عندي في سيرفري و ما راح اعطيك اياه بس راح اعلمك كيف تستدعيه ويرد عليك". أعتقد الموضوع واضح. تمام؟
للأسف هذا التعريف واضح ولكن ناقص. في بعض الأحيان خدمة الويب تعطيك مكتبة أونلاين مثل الخدمة هذي cloudinary.com اللي تسمح لك تعدل الصور وتقصها زي ما تبغى بحيث تستدعي الخدمة من خلال ال API وترسل الصورة مع باراميترز توضح المطلوب والخدمة ترد عليك بالصورة الجديدة المعدلة
لكن في أحيان أخرى تكون خدمة الويب تخفي نظام ضخم متكامل وليس مجرد مكتبة. مثل ايش؟ خدمات أو بوابات الدفع الالكتروني واللي تستخدمها كأنها خدمة ويب للدفع الالكتروني ولكنها في الحقيقة ليس مكتبة وإنما نظام متكامل ضخم مربوط مع البنوك وبتفاصيل داخلية كثيرة.
ومن هنا ننطلق للتعريف العام لل API وهو أنها واجهة برمجية تسمح لك باستدعاء وتنفيذ كود مو أنت اللي كاتبه سواء كان: (١) مكتبة مبرمجها زميلك في المشروع أو أنت منزلها من الانترنت أو (٢) خدمة ويب web service اونلاين مبرمجها زميلك في الباك اند أو (٣) خدمة ويب اونلاين مبرمجتها شركة
الميزة هنا في ال API انها تخلصك من مشكلة فهم كيف المكتبة أو الخدمة البرمجية تعمل. بكل اختصار مالك دخل. ال API مجموعة كلاسات أو ميثودز (تبع المكتبة) أو مجموعة نهايات برمجية end points (تبع خدمة الويب) تستدعيها بباراميترز معينة وترد عليك بنتايج معينة حسب الشرح والتوثيق لها
ال API جالسة زي الوسيط أو المترجم بين الكود حقك وبين الأكواد الأخرى سواء أنت كاتبها (نعم صحيح ممكن بين كودين لك منفصلين تماما) أو زميلك في الفريق أو موجودة في مكتبة أو في خدمة ويب أو في أي نظام أو برنامج آخر بحيث تسمح لك تستدعيها وتستخدمها وكأنها جزء من كود برنامج أو تطبيقك
٤- إطار العمل #framework : اطار العمل عبارة عن عدد كبير من الأكواد والمكتبات البرمجية المرتبة والمنظمة مع بعضها البعض لنوعية معينة من البرامج بحيث بدل ما تاخذها وتحطها في برنامجك يصير العكس وهو انك تاخذ برنامجك وتضعه وسطها. بدل ما أنت تستدعيها من الكود حقك، هي تستدعي الكود حقك.
مثلا أنت مطور ويب تستخدم اطار عمل #laravel بلغة #PHP laravel.com واللي يسمح لك تسوي موقع متكامل من ألف إلى ياء مربوط بقاعدة بيانات. أو تستخدم اطار عمل #Flutter من قوقل لتطوير تطبيقات ايفون وأندرويد بلغة #Dart flutter.dev
تجد دائما المبرمج يكتفي باستخدام اطار عمل واحد فقط في المشروع يكون الفريق اتفق على استخدامه. لأن اطار العمل هو اللي راح يستدعي الكود حقك، غالبا تجد فيه طريقة معينة لترتيب الكود حقك داخل المجلدات وهذا تجده خاصة فيما يسمى بال opinionated framework أو اطار العمل المرتب مسبقا ❤️
فيه اطارات عمل ما تفرض عليك طريقة معينة لترتيب وتوزيع الكود داخل المجلدات وإنما تعطيك المكتبات المختلفة واللي كل وحدة منها تقدم خدمة مهمة وأساسية وتعلمك كيف طريقة دمج وتكامل الكود حقك مع المكتبات هذي ولك الحرية في كيفية ترتيب الكود وهذي تسمى un-opinionated 😫
بشكل عام، صعب جدا تبدأ مشروع برمجي بدون الاعتماد على إطار عمل معين تنطلق منه لأنه يوفر عليك وقت وجهد كثير جدا سواء في توفير المكتبات الأساسية اللي راح تحتاجها في مشروعك أو في ترتيب الكود حقك مع بعضه أو في تشغيل الكود حقك وربطه مع نظام التشغيل والسيرفر وقاعدة البيانات وغيرها
بعد كذا تبدأ في اضافة المكتبات وكذلك الربط مع خدمات الويب حسب الحاجة لديك. لاحظ انك راح تبدأ أولا باستخدام المكتبات اللي تجي مع إطار العمل حسب ال API الخاصة فيه ثم بعد ذلك تضيف المكتبات وخدمات الويب اللي تحتاجها وتختار كيف ووين تستدعيها في الكود حقك حسب ال API لكل مكتبة وخدمة
ملاحظة مهمة: في بعض الأحيان يتم استخدام كلمة #toolkit بدل #framework خصوصا في اطر العمل الخاصة بواجهات المستخدم سواء في تطبيقات الويب أو الجوال وذلك لأن مصممي مجموعة الأدوات/اطار العمل يعتبرونه أصغر من أن يرتقي إلى درجة اطار عمل. مثلا flutter UI toolkit أو React UI toolkit
سبب آخر أيضا انه غالبا لما تستخدم الادوات هذي (أو أطر العمل حسب الاسم اللي يعجبك 😁) الخاصة ببناء واجهة المستخدم فانك تستخدمها مع اطار عمل آخر للمشروع ككل خصوصا في الباك اند. مثلا تستخدم flutter للتطبيق الجوال مع laravel للباك اند. أو تستخدم react لتطبيق الويب مع ruby on rails.
٥- مجموعة أدوات تطوير برامج أو #SDK software development kit. هي مجموعة ضخمة من المكتبات (والأدوات) الي تخدم كافة جوانب اتطوير لبرامج وتطبيقات خاصة بمنصة أو تقنية معينة. مثلا SDK لتطوير تطبيقات آيفون بجميع أنواعها و SDK لتطبيقات أندرويد و SDK لبرامج جافا بجميع أنوعاها ... الخ
هذه المكتبات تقوم الشركة المصنعة للمنصة أو التقنية (قوقل، أبل، ...) بتطويرها بشكل رسمي ومن ثم جمعها في #SDK واحدة. نادرا ما راح تستخدم كل ال SDK في مشروع واحد ولكن على العكس تستخدم جزئيات مختلفة حسب المشروع (تطبيقات، ألعاب، مواقع، سيرفرات ... الخ)
ختاما: ما يهم الاسم المهم تفهم كيف تستخدمها 😂. كلها أكواد كاتبينها ناس غيرك وتبغى تستخدمها وتستدعيها من كودك حسب الواجهة أو ال interface اللي يختارها اللي كتب الكود (المكتبة، اطار العمل، خدمة الويب ... الخ).
تذكر: قوة المبرمج الحقيقية 💪 تكمن في مدى معرفته بالمكتبات وأطر العمل
تذكر: قوة المبرمج الحقيقية 💪 تكمن في مدى معرفته بالمكتبات وأطر العمل
جاري تحميل الاقتراحات...