
- بواسطة x32x01 ||
أكيد لو اشتغلت في شركة برمجة أو حتى بدأت تتعلم تطوير البرامج، أكيد سمعت عن مصطلح بيئات التطوير (Development Environments).
بس يا ترى إيه معناها؟ وليه كل الشركات بتقسم الشغل على أكتر من بيئة؟
تعالى نفهم مع بعض ببساطة وبدون تعقيد
.
أنواع بيئات العمل في الشركات
معظم الشركات الكبيرة أو حتى الصغيرة عندها أربع بيئات رئيسية بيعدّي عليها أي كود قبل ما يطلع للعميل أو المستخدم النهائي:
أول مرحلة: Development Environment
في المرحلة دي، المطور (Developer) بيبدأ يكتب الكود الجديد أو يعدّل في كود موجود.
البيئة دي بيستخدمها هو فقط علشان يجرب الشغل بتاعه قبل ما يرفعه لأي حد تاني.
بمعنى تاني، دي "الملعب" اللي المطور بيلعب فيه لوحده
.
الكود هنا بيتعمله Merge على الكود الأساسي لكن بدون اختبارات كاملة. الهدف إن كل مطور يشوف شغله شغال ولا فيه مشاكل.
مثال صغير بلغة Python
الكود البسيط ده مثال لتجربة أولية على بيئة التطوير قبل ما يدخل في مرحلة التستنج.
المرحلة التانية: UAT Environment
بعد ما كل مطور يخلص شغله، بيبدأوا يدمجوا الأكواد مع بعض في نسخة واحدة متكاملة.
النسخة دي بتروح لبيئة UAT (User Acceptance Testing) علشان فريق التستنج يبدأ يختبرها بأنواع مختلفة من الاختبارات:
المرحلة التالتة: Pre-Production Environment
البيئة دي تعتبر “المحاكاة الواقعية” لبيئة التشغيل الأصلية.
بمعنى، نفس الإعدادات، نفس قواعد البيانات (بس بنسخة تجريبية)، ونفس السيرفرات تقريبًا.
هنا بيتم التجريب الأخير للـ release قبل ما يطلع للـ Production.
لو كل حاجة تمام، بيتم اعتماد النسخة دي علشان تتنقل للبيئة الأخيرة.
المرحلة الأخيرة: Production Environment
دي بقى البيئة اللي المستخدمين الفعليين بيشوفوا فيها الشغل.
يعني الكود خلاص وصل للعالم الحقيقي
.
في المرحلة دي، أي غلطة بسيطة ممكن تسبب خسارة كبيرة - خصوصًا في الشركات اللي عندها ملايين المستخدمين.
طيب والشركات الكبيرة زي Google وFacebook بيعملوا إيه؟
الشركات دي عندها مئات وأحيانًا ملايين الـ Releases كل شهر!
فماينفعش يعتمدوا على نفس النظام الكلاسيكي، لأنهم محتاجين إن الكود يوصل للمستخدم بسرعة جدًا.
وده اللي بنسميه MTTP (Mean Time To Production) - يعني الوقت اللي بياخده الكود علشان يوصل لـ Production.
كل ما الوقت ده يقل، كل ما الشركة تكسب أكتر
.
الحل؟ استخدام بيئات ذكية ومتطورة
فيه مبدأين مهمين جدًا بيستخدمهم الشركات دي لتقليل المخاطر وتسريع النشر:
أول مبدأ: Blue-Green Deployment
الفكرة هنا إن الشركة بتعمل بيئتين Production بدل واحدة:
الناس كلها بتبدأ تستخدم الـ Green، ولو حصلت أي مشكلة، في ثانية واحدة بيرجعوا كل الترافيك للـ Blue القديمة.
يعني Rollback فوري وسهل جدًا
.
المبدأ التاني: Canary Deployment
الفكرة هنا إنك ما تبعتش التحديث لكل الناس مرة واحدة.
بتبدأ بنسبة صغيرة من المستخدمين (مثلاً 5%)، وتشوف الدنيا عاملة إزاي.
لو الأمور مستقرة، تزود النسبة بالتدريج.
ده بالضبط اللي بتعمله Facebook وGoogle.
عشان كده ممكن تلاحظ إن بعض الناس عندها ميزة جديدة، وناس تانية لسه لأ
.
مبدأ إضافي: A/B Testing
الـ A/B Testing هو طريقة تانية ذكية الشركات بتجرب بيها أفكار جديدة أو Features مش متأكدة منها.
بيجربوا الخاصية على مجموعة معينة من المستخدمين (Beta Users)، ويشوفوا رد الفعل.
لو الناس مبسوطة والنتائج كويسة → يتم تعميمها.
لو العكس → بيتم إلغاؤها بسهولة.
ليه كل الكلام ده مهم لأي مبرمج؟
لأنك كمطور لازم تفهم رحلة الكود من أول ما تكتبه لحد ما يوصل للإنتاج.
الفهم ده بيخليك تعرف:
وده اللي بيميز المبرمج المحترف عن المبتدئ
.
نصيحة أخيرة
لو لسه في بداية طريقك، جرب تبني بيئة بسيطة بنفسك على جهازك تحاكي اللي بيحصل في الشركات.
مثلاً تقدر تعمل:
كده هتفهم الدنيا بتمشي إزاي من جوه
.
الخلاصة:
بيئات التطوير مش رفاهية، دي أساس النجاح لأي مشروع برمجي.
وكل ما الشركة تنظّم العملية دي أكتر، كل ما الإنتاج هيبقى أسرع، والمشاكل أقل، والمستخدمين مبسوطين أكتر
.
بس يا ترى إيه معناها؟ وليه كل الشركات بتقسم الشغل على أكتر من بيئة؟
تعالى نفهم مع بعض ببساطة وبدون تعقيد

أنواع بيئات العمل في الشركات
معظم الشركات الكبيرة أو حتى الصغيرة عندها أربع بيئات رئيسية بيعدّي عليها أي كود قبل ما يطلع للعميل أو المستخدم النهائي:- Development Environment (بيئة التطوير)
- UAT Environment (بيئة الاختبار من قِبل المستخدم)
- Pre-Production Environment (بيئة ما قبل الإنتاج)
- Production Environment (بيئة الإنتاج)
أول مرحلة: Development Environment
في المرحلة دي، المطور (Developer) بيبدأ يكتب الكود الجديد أو يعدّل في كود موجود.البيئة دي بيستخدمها هو فقط علشان يجرب الشغل بتاعه قبل ما يرفعه لأي حد تاني.
بمعنى تاني، دي "الملعب" اللي المطور بيلعب فيه لوحده

الكود هنا بيتعمله Merge على الكود الأساسي لكن بدون اختبارات كاملة. الهدف إن كل مطور يشوف شغله شغال ولا فيه مشاكل.
مثال صغير بلغة Python
Python:
def add_numbers(a, b):
return a + b
print(add_numbers(5, 10)) # النتيجة: 15
المرحلة التانية: UAT Environment
بعد ما كل مطور يخلص شغله، بيبدأوا يدمجوا الأكواد مع بعض في نسخة واحدة متكاملة.النسخة دي بتروح لبيئة UAT (User Acceptance Testing) علشان فريق التستنج يبدأ يختبرها بأنواع مختلفة من الاختبارات:
- Functional Testing
- Regression Testing
- Integration Testing
المرحلة التالتة: Pre-Production Environment
البيئة دي تعتبر “المحاكاة الواقعية” لبيئة التشغيل الأصلية.بمعنى، نفس الإعدادات، نفس قواعد البيانات (بس بنسخة تجريبية)، ونفس السيرفرات تقريبًا.
هنا بيتم التجريب الأخير للـ release قبل ما يطلع للـ Production.
لو كل حاجة تمام، بيتم اعتماد النسخة دي علشان تتنقل للبيئة الأخيرة.
المرحلة الأخيرة: Production Environment
دي بقى البيئة اللي المستخدمين الفعليين بيشوفوا فيها الشغل.يعني الكود خلاص وصل للعالم الحقيقي

في المرحلة دي، أي غلطة بسيطة ممكن تسبب خسارة كبيرة - خصوصًا في الشركات اللي عندها ملايين المستخدمين.
طيب والشركات الكبيرة زي Google وFacebook بيعملوا إيه؟
الشركات دي عندها مئات وأحيانًا ملايين الـ Releases كل شهر!فماينفعش يعتمدوا على نفس النظام الكلاسيكي، لأنهم محتاجين إن الكود يوصل للمستخدم بسرعة جدًا.
وده اللي بنسميه MTTP (Mean Time To Production) - يعني الوقت اللي بياخده الكود علشان يوصل لـ Production.
كل ما الوقت ده يقل، كل ما الشركة تكسب أكتر

الحل؟ استخدام بيئات ذكية ومتطورة
فيه مبدأين مهمين جدًا بيستخدمهم الشركات دي لتقليل المخاطر وتسريع النشر:أول مبدأ: Blue-Green Deployment 
الفكرة هنا إن الشركة بتعمل بيئتين Production بدل واحدة:- Blue Environment: النسخة القديمة اللي شغالة دلوقتي.
- Green Environment: النسخة الجديدة بعد التحديث.
الناس كلها بتبدأ تستخدم الـ Green، ولو حصلت أي مشكلة، في ثانية واحدة بيرجعوا كل الترافيك للـ Blue القديمة.
يعني Rollback فوري وسهل جدًا

كود بسيط لتوضيح الفكرة (Pseudo Code)
Bash:
# التحويل من Green إلى Blue في ثانية واحدة
if error_detected:
route_traffic_to "Blue"
else:
route_traffic_to "Green"
المبدأ التاني: Canary Deployment
الفكرة هنا إنك ما تبعتش التحديث لكل الناس مرة واحدة.بتبدأ بنسبة صغيرة من المستخدمين (مثلاً 5%)، وتشوف الدنيا عاملة إزاي.
لو الأمور مستقرة، تزود النسبة بالتدريج.
ده بالضبط اللي بتعمله Facebook وGoogle.
عشان كده ممكن تلاحظ إن بعض الناس عندها ميزة جديدة، وناس تانية لسه لأ

مبدأ إضافي: A/B Testing
الـ A/B Testing هو طريقة تانية ذكية الشركات بتجرب بيها أفكار جديدة أو Features مش متأكدة منها.بيجربوا الخاصية على مجموعة معينة من المستخدمين (Beta Users)، ويشوفوا رد الفعل.
لو الناس مبسوطة والنتائج كويسة → يتم تعميمها.
لو العكس → بيتم إلغاؤها بسهولة.
ليه كل الكلام ده مهم لأي مبرمج؟
لأنك كمطور لازم تفهم رحلة الكود من أول ما تكتبه لحد ما يوصل للإنتاج.الفهم ده بيخليك تعرف:
- إزاي تكتب كود قابل للاختبار بسهولة
- إزاي تتعامل مع الـ Merge Conflicts
- إزاي تجهز كودك للـ Deployment بدون مشاكل
وده اللي بيميز المبرمج المحترف عن المبتدئ

نصيحة أخيرة
لو لسه في بداية طريقك، جرب تبني بيئة بسيطة بنفسك على جهازك تحاكي اللي بيحصل في الشركات.مثلاً تقدر تعمل:
- Local Dev Environment
- Testing Environment باستخدام Docker
- Simulation صغيرة للـ Blue-Green باستخدام Nginx
كده هتفهم الدنيا بتمشي إزاي من جوه


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

التعديل الأخير: