السلام عليكم ورحمة الله
إحدى العقبات في تطوير البرامج هي أنها تتطلب ظروف معينة حتى تتم بصورة جيدة أو تبدأ من الأساس، والبداية أصعب من المواصلة، في إذا كان البرنامج قيد التطوير تكون هُناك مهمات واضحة وتصحيح لعلل وإضافات لميزات. لكن المشكلة تكمن عند البداية في مشروع برمجي جديد أو في إضافة جزئية جديدة، فتكون نقطة البداية مفقودة، خصوصاً في المشاريع الفردية أو المشاريع المفتوحة المصدر والتي لا ترتبط بتسليم معين لتلك الجزئيات.
تتطلب البداية في المشاريع البرمجية ظروف مناسبة ونفسية مستعدة للمطورين، بعكس تصليح مشكلة. فإذا كان المبرمج لديه نظام يعمل ويُعتمد عليه، مثلاً نظام حسابات وظهر فيه عيب، مثلاً حقل في تقرير مجموع بطريقة غير صحيحة، فسوف يهرع لتصحيح هذه العلة مهما كان وضعه النفسي أو حتى المكاني. لكن هذا لا يحدث مع الجزئيات الجديدة والتي لم يستخدمها أحد وليس فيها استعجال.
إحدى الحيل التي اكتسبتها مع مرور الوقت هي البسيط، أي لا تُفكر في النظام الجديد أو الجزئية الجديدة في النظام بطريقة معقدة. مثلاً لا تقول سوف أقوم ببداية نظام ERP متكامل فيه حسابات ومخازن ومبيعات و مشتريات وشؤون أفراد، وغيرها من الأشياء المعقدة، فبهذه الطريقة يمكن أن تكون البداية بعد سنة من التخطيط لهذا الوحش الكبير. لكن إذا فكرت بطريقة بسيطة وكان الهدف هو إنتاج برنامج حسابات بسيط يتم من خلالة إدخال القيود اليومية فقط. فبهذه الطريقة يُمكن أن تبدأ من اليوم، وعندما ينجح إدخال القيود اليومية تكون متشوقاً لعمل بعض التقارير السريعة ليكون واجهة لإنجاز قمت بعمله، ثم تقوم بإدخال ميزات جديدة ثم تقارير جديدة إلى أن يُصبح نظام ERP مع مرور الزمن بتطور طبيعي من البساطة إلى التعقيد من حيث تكلفة الإنشاء وعدد المبرمجين وعدد الأجهزة المطلوبة وطريقة العمل وإدارة الفريق.
كمثال آخر الجزئيات المعقدة في البرامج، يُمكن التفكير بها بنفس الطريقة. مثلاً اﻹسبوع الماضي نويت إضافة تقرير لعرض القيود المحاسبية باختيار تاريخ معين وفرع حسابات معين أو لمستخدم واحد أو نوع واحد من أنواع القيود، وكان فيه بعض العقيد، يحتاج لأكثر من خمس ساعات برمجة، وكان يوم إجازة، فكانت الحيلة أن أقنعت نفسي أني سوف أقوم فقط كبداية بإظهار عناوين تاريخها، مثلاً قيد شراء أوراق، قيد لدفع فاتورة الكهرباء، وهكذا فقط، دون إظهار تفاصيل الطرف الدائن والمدين أو قيمة المعاملة أو تفاصيلها. وكانت البداية بتلك البساطة وتمت في أقل من ساعة، ثم أصبح لدي قالب تقرير جاهز لإدخال المزيد، فقمت بحساب مجموع إجراءات القيد لإظهارها، ثم المستخدم، ثم تركت المستخدم يختار فرع معين وتاريخ معين للقيود إلى أن تمت الخمس ساعات وأنا متشوق لإنهاء هذا التقرير الذي بدأ بسيطاُ ثم زاد تعقيداً دون أن أشعر.
ربما يكون لبعض المبرمجين طُرق أخرى لإجبار أنفسهم بالمبادرة للبداية في البرامج الجديدة أو الجزئيات الجديدة، نتمنى أن لا يبخلوا علينا بها لعموم الفائدة
اتبع هذه القاعدة مع اي مشروع ابدأه، البداية تكون يجب بسيطة بل ان التعقيد هو حجرة عثرة امام نجاح البرنامج.
لكن احيانا التعقيد يبدأ من حيث انتهيت من برنامج آخر، و قررت ان تصب خبرتك في برنامج جديد مبني بآلية مختلفة و له عمر اطلول، هنا تأخذ النعقيد طريقه بين اسطرك لدرجة انك لن تستطيع متابعة العمل خاصة بعد ان تكون اصبت بالملل من تكرار الكود.
نعم صحيح التعقيد يبدأ من النسخة التالية من البرامج، خصوصاً إذا كان clean design.
إلى اﻵن لم أقم بتكرار أي برنامج قُمت بعمله، فقط أكرر الجزئيات أحياناً، ولم تكن لدي أي رغبة في تكرار أي برنامج قُمت بعمله سابقاً حتى لو مضى عليه زمن بعيد.
حالات أخرى تحدث لي في بدايات بعض البرامج
في إحدى البرامج كنت عاجزا لمدة 3 أشهر عن وضع أي كود أو تصميم للبرنامج أو البيانات، وذلك بسبب ضخامة المتطلبات وتعقيدها وعدم وضوحها ونقص التجربة في بعض التقتنيات المطلوبة، وبالتالي كنت غير قادر على تحديد الرؤية العامة وإيجاد نقطة البداية للتنفيذ. لكم أن تتخيلوا الحالة النفسية التي كنت أمرّ بها مع الحاح الزبون والشركاء لرؤية أية نتائج عملية، وخاصة مع استلامنا لدفعة مقدمة مجزية.
حالة أخرى، أخذت مني شهرمن تفكير، وبحث عن مراجع لموضوع البرنامج، ونماذج أولية يتم استبعادها لاحقا، وذلك لأني كلما أصل لبناء مفاهيمي للبرنامج يراودني احساس بوجود ثغرة ما ، وأن البناء الذي توصلت إليه لا يستقيم لغياب عنصر ما أشعر به ولكن لا أستطيع تحديده. هذه الحالة وضعتني في احراج كبير مع الزبون التي بدأت تراوده شكوك حول مقدرتي على انجاز ما يريده.
مثل هذه الحالات تحدث ليست بسبب قلة الخبرة في بناء المنظومات البرمجية، بل بالعكس؛ هي تحدث بسبب أن خبرتك الطويلة تجعلك على يقين بأن الحلول المبدئية أو البسيطة أو البديهية أو الاعتماد فقط على رؤية الزبون سوف لن تمضي معك طويلا، وانها تحمل في داخلها إعاقة مخفية سوف توثربشكل كبير على اكتمال البرنامج أو تطويره في الاتجاه الصحيح.
على الجرح هذا ما يحدث دائما معي 😀
اضن ان جمِِيع البرامج لها عنصر مشترك الـ ( MVC (Model View Controler و HMVC, MVA, MVP, MVVM ، و هنا اقصد ان تقنِية البرمجة تغيرت كثيراََ و أصبحت تعتمد على الـ Patterns لتسهِيل و تنضِيم كتابة الكود ، و كمثال قوي أذكر : Spring Framwork .
أوصِي كل مبتدء إلقاء نظرة على الموظوع۔
https://www.google.es/search?tbm=vid&hl=es&source=hp&biw=1366&bih=629&q=design+patterns&gbv=2&oq=design+patterns&gs_l=video-hp.3..0.3185.15608.0.15829.15.9.0.6.6.0.194.1409.0j9.9.0…0.0…1ac.1.12.video-hp.wnFWOsQLnME
السلام عليكم ورحمه الله وبركاته
شكرا لك على هذه المدونه الجميله
هل من ممكن ايملك للتواصل
لماذا لا يكن هناك ايقونه للموقع اتصل بنا اخي الكريم
شكرا لك
فكرة جيدة، لكن لا أعرف كيفية تنفيذها بدون الوقوع في شراك الـ spam
لا تضع ايميلك على المواقع
يمكن معرفة الايميل من لوحة التحكم و ارسال رسالة له