إن كنت مطور ويب أو أحد المهتمين بتطوير الأنظمة المعلوماتية المختلفة في بيئة الويب، فإنك تعلم حجم التنوع الكبير للغات البرمجة المستخدمة في تطوير مواقع الويب وخدماته،  ولربما كنت أحد مطوري هذه الخدمات وترغب بأن تكون خدماتك سريعة الانتشار وسهلة الاستخدام من قبل التطبيقات المختلفة ، وكما تعلم فإن…
يحتار المطورون في اختيار أفضل إطار لمشاريعهم وسيكون هذا تحديًا حقيقيًا للمبتدئين في الأطر الحديثة. بعد العمل على الأطر الثلاثة (Django، Laravel و Rails – والذي يُعرف باسم Ruby On -rails)، سأقارن بين هذه الأطر الرائعة على أساس شعارها، سهولة تعلمها، أدائها، قوة وضعف مكتباتها وقوالبها، دعمها، آفاقها …
ما هي لغة البرمجة التي يجب عليك تعلمها؟ بايثون، PHP أم روبي؟ ربما أكبر سؤال يواجه مطوري الويب المبتدئين هي ما هي أفضل لغة برمجة يجب تعلمها للوظيفة المستقبلية والآفاق، هنالك العديد من لغات البرمجة التي يجب عليك الاختيار منها وكل واحدة لديها نقاط القوة والضعف، ربما أهم مصدر مقلق هو المدة التي تستغر…
في الماضي القريب، كانت مهنة الهندسة واضحةً نسبياً. درست لغة معينةً أو أكثر، حصلت على عمل ونجحت. لم يعد هذا الأمر صحيحاً اليوم، فمعدل التغير المتزايد في التقنية يعني أنه بات من الصعب إتقان أي شيء قبل أن يعدّ قديماً ويُستبدل بمنافس أجدد وأبهى. لا تُعنى المسيرة الهندسية الناجحة اليوم بالتعمق في م…
نعرف نحن مطوّري البرامج أهميّة اتّباع أفضل الممارسات الأمنية؛ إلا أننا نتسرّع غالبا في تنفيذها، ربما بسبب ما تستدعيه من العمل الجادّ حتى ترسخ في الأذهان. يحدُث أحيانا أن ترى ممارسة أمنية شديدة الخطورة لدرجة أنها تبقى محفورة في ذهنك. أمرّ في عملي مدير أنظمة على الكثير من الممارسات الأمنية الخاطئة،…
أعتقد أنَّه من المهم كلَّما تحدثنا عن بعض المفاهيم البرمجيَّة التأني قليلًا والتراجع بضعة خطوات بعيدًا عن تفاصيل النقاش والنظر إلى الصورة كاملة. تطرَّقت سابقًا باختصار إلى فكرة التأثيرات الجانبية في البرمجة ولكنَّني توسَّعت فيها عندما تحدثت عن استخدام معايير PSR والتي يجب أن يفهمها من يهتم بأخ…
يتعامل المبرمجون مع شفرة البرامج المصدرية بأسلوبين مختلفين، فالأول يرى أنّ “الشفرة التي تعمل هي الشفرة الجيدة” أما الثاني فيرى أنّه “ما دامت الشفرة جيدة فإنّها ستعمل بكل تأكيد” وبصياغة أخرى: “المهمّ أنها تعمل” مقابل “المهمّ أن تكون صحيحة”. كل يوم تقريبًا أقرأ هذه العبارة وأشباهها في تعليقات ال…
قبل عشرين عامًا، كان المبرمج الجيّد هو ذلك الذي يكون قادرًا على أن يحشر تطبيقًا كاملًا في ملف بامتداد .COM وبحجم 64 كيلوبايت، أما من كان قادرًا على الإتيان بأفضل أداء مع معالج Intel 80386 الضعيف فكان يعدّ واحدًا من أساطين عالم البرمجة. سبب ذلك أنّ الحواسيب كانت في تلك الفترة غالية ومكلفة في حي…
يشبه أداء المواقع كثيرًا قاعدة 80/20، حيث إن إجراء تحسينات بنسبة 20% ستزيد سرعة الموقع الإلكتروني بنسبة 80%. فاتّخاذ خطوات بسيطة مثل تنظيم شفرة CSS يأتي بثمار طيّبة. يشرح هذا المقال خطوات بسيطة يمكن أن يؤدّي تطبيقها - إلى جانب تنظيم شفرة CSS - إلى تحسّن ملحوظ في أداء الموقع. تصغير الملفات …
يهدف نمط التصميم معمل التجريد Abstract Factory إلى توفير واجهة Interface لإنشاء مجموعة من الكائنات المرتبطة أو المنفصلة دون الحاجة إلى التعامل مع أصنافها الفعليّة. كما يوفّر هرمية Hierarchy تغلّف الكثير من المنصات Platforms المحتملة، وتعمل على بناء مجموعة من “المنتجات”. ينطلق نمط التصميم…
يمكن لنمط التصميم البرمجي مجمع الكائنات Object pool أن يؤمّن دَفعة كبيرة للأداء ، ويكون أكثر فعالية في الحالات التي تكون فيها كلفة بدء عينة من الصنف Class instance مرتفعة، أو ترتفع فيها نسبة استهلال الأصناف مع انخفاض عدد العيّنات المستخدمة في آن واحد. المشكلة تستخدم مجمعات الكائنات (وا…
يهدف نمط التصميم تابع المعمل Factory Method إلى تعريف واجهة Interface لإنشاء الكائنات مع ترك مهمّة تحديد الصنف الذي سيُستهَل Instantiate إلى الأصناف المتفرّعة عن الواجهة. يعرّف نمط تابع المعمل تابِعا (دالة) مشيّدا افتراضيا Virtual، كما ينطلق من مبدأ أن استخدام العامل new مؤذ ويجب تغليفه En…
يهدف نمط الباني The Builder في التصميم البرمجي إلى فصل عمليّة بناء الكائنات المعقّدة عن طريقة عرضها، بحيث يُمكن إنشاء طرق عرض عدّة بنفس عمليّة البناء. كما يُستخدَم هذا النمط في التعامل مع طريقة عرض معقّدة لتحويلها إلى واحدة من بين طرق عرض أقلّ تعقيدا. عرض المشكل يتطلب تطبيق ما إنشاء عن…
يُعرَف نمط التصميم Design Pattern في هندسة البرمجيات بأنه حل عام قابل للتكرار لمشكلة متكررة الحدوث في تصميم البرمجيات. نمط التصميم ليس نموذجا نهائيا يمكن تحويله إلى تعليمات برمجية مباشرة؛ بل هو توصيف أو قالب لكيفية حل المشكلة، يمكن استخدامه في العديد من الحالات المختلفة. استخدام أنماط التص…
مبدأ عكس التابعيّة Dependency Inversion Principle أو اختصارًا DIP، هو آخر مبادئ التصميم الكائنيّ SOLID ويتمتّع بمزايا كبيرة عند تطبيقه بالشكل السليم. أوّل من قدّم هذا المبدأ هو روبرت مارتن في مقالته التي نشرها عام 1996. أشار روبرت إلى أنّ الأسلوب الشائع في تصميم التابعيّة dependency ضمن المشار…
مبدأ فصل الواجهات Interface Segregation Principle أو اختصارًا ISP هو أحد المبادئ الشهيرة من مبادئ SOLID في التصميم الكائنيّ. أوّل من قدّم هذا المبدأ روبرت مارتن في سلسلة مقالات في عام 1996، ويهدف هذا المبدأ إلى تجنُّب إنشاء واجهات "سمينة". الواجهة interface هي عبارة عن تجريد abstraction لناحية…
دفع عجلة تطوير الويب تعني جعله أفضل للمستخدمين والمطورين على حدٍ سواء، وهذا يعني محاولة حلّ المشكلات التي تواجه الويب في الوقت الراهن؛ وهذا ينطبق أيضًا على جعل المواقع متوافقة مع اتجاه RTL بسهولة ويسر. قبل أن نكمل مشوارنا في الحديث عن المواضيع المتقدمة عن RTL، لنبدأ درسنا بمثالٍ عمليٍ بسيط…
مبدأ آخر من مبادئ التصميم الكائنيّ التوجّه ضمن مبادئ SOLID يُطلق عليه اسم مبدأ ليسكوف للاستبدال Liskov Substitution Principle ويُرمز له اختصارًا بالرمز LSP. سنبدأ هذا المبدأ بشيء من المفاهيم النظريّة. صاحبة هذا المبدأ هي البروفسور باربارا ليسكوف، وقد طرحته أوّل الأمر عام 1987 وكان ينص على …
هذا هو الدرس الأول من درسين يشرحان لك كيف تطوِّر مواقع الويب ذات الاتجاه من اليمين إلى اليسار (RTL)، وهذا يعني جعل موقع الويب متوافقًا مع اللغات التي تُكتَب من اليمين إلى اليسار مثل العربية والفارسية والأردو. ماذا يعني اتجاه الكتابة من اليمين إلى اليسار؟ لتوضيح الأمور، هنالك فرقٌ بين اللغة…
يُعتبر مبدأ الفتح والإغلاق Open/Closed Principle أو اختصارًا OCP، من المبادئ التي تساعد مطوّري البرمجيّات على تحقيق تصاميم برمجيّة عالية الجودة. على أيّة حال، قد يكون من الصعب أحيانًا أن نوضّح ما الذي نعنيه بالبرمجيّات عالية الجودة. بالعودة إلى المبدأ OCP، يعود الفضل إلى برتراند ماير في وضع مصطلح …