تقنية ASP.NET من ASP إلى MVC و Web API

6

تقديم عام:

تقنية ASP.NET باختصار هي إطار عمل Framework أنشأته شركة ميكروسوفت للسماح للمبرمجين بإنشاء صفحات الويب الديناميكية، فكما نعلم جميعا لا بد من الإلمام بمجموعة من التقنيات واللغات لكي نستطيع إنشاء صفحات الويب.
ولعل أبرز ما نحتاجه:

1. لغة HTML: باعتبارها اللغة التي تسمح لنا ببناء الهيكل الأساسي لمواقع وتطبيقات الويب، ومن دونها لا نستطيع إنشاء الصفحات، إذ هي التي تسمح لنا بالقيام بأول خطوة وهي عرض المحتوى وبناء الهيكل الرئيسي للصفحات.

2. لغة CSS: تسهل عملية التصميم والتحكم في شكل الصفحات وتحديد مواقع و خصائص مكونات الصفحة.

3. لغة جافاسكريبت: تسمح بجعل الصفحات مرنة وقادرة على التجاوب مع المستخدم، لأنها لغة برمجية وتوفر للمبرمج كل ما يحتاجه للقيام بعمليات برمجية على الصفحة، كاستقبال القيم من المستخدم والتعامل معها، وإجراء العمليات الحسابية والمنطقية، والتحقق من العبارات، وتكرار الأوامر عبر آلية الحلقات، واقتناص الأحداث، وتحديد عناصر HTML عبر تراتبية DOM وغير ذلك من المزايا القوية التي توفرها لغة جافاسكريبت.

كل اللغات الآنفة، تنفذ على مستوى المتصفح، أي على حاسوب المستخدم / الزائر، مما يضمن سرعة استعراض الصفحات، لأن هذه السرعة غير مقتسمة من طرف كل الزوار، فهي متعقلة بجهاز الزائر، على خلاف لغات السيرڤر، التي كلما ازداد عدد الزوار والمستخدمين، ازداد الضغط على السيرڤر مما قد يبطيء عملية استعراض الموقع أو التطبيق حسب كفاءة جهاز السيرڤر.
لكن الللغات السابقة وحدها لا تكفي لبناء تطبيق ويب متكامل، يسمح بإجراء العمليات على مستوى السيرڤر، كإرسال الرسائل، أو التعامل مع قواعد البيانات وما إلى ذلك، لذلك وجب استخدام إحدى اللغات الديناميكية التي تخول لنا القيام بهذه العمليات وغيرها.
توجد لغات وتقنيات كثيرة، تسمح ببناء أنظمة ديناميكية على الويب، لعل أبرزها لغة PHP و JSP و التقنية الرهيبة التابعة لمنصة الدوت نيت ASP.NET.

ظهرت تقنية ASP.NET عام 2000 تحت اسم ASP اختصارا ل Active Server Pages، وجاءت كحل من ميكروسوفت لتمكين المبرمجين من بناء صفحات ويب ديناميكية، وكان مما يميز هذا الإصدار القديم أنه يسمح بكتابة أوامر ASP داخل أوامر HTML بين الرمزين <% %>.

فتقدم الزمن بعد ذلك، وتطورت تقنية ASP ليصبح اسمها ASP.NET، وصارت جزء لا يتجزأ من إطار العمل دوت نيت فريموورك، وكان من مستجدات التقنية، أنها صارت تعتمد على الترجمة Compilation لا على التفسير Interpretation كما كان الحال مع تقنية ASP الكلاسيكية، إضافة إلى تقسيم الكود إلى صفحتين، ما يتعلق بHTML يكتب في صفحة وما يتعلق بلغة البرمجة يكتب في صفحة تعرف باسم Code Behind.

تسمح تقنية ASP.NET بإنشاء صفحات ويب ديناميكية بعدة طرق، لعل أبرز هذه الطرق:


1. طريقة Web Forms:

وهي طريقة قوية جدا، شبيهة جدا بنمط برمجة الواجهات في الويندوز، إذ بدورها تعتمد على آلية السحب والإفلات Drag and Drop لوضع الأدوات على الويب فورم، واقتناص الأحداث بطريقة مماثلة جدا لبرمجة الواجهات، وهذه الطريقة هي الطريقة التي اشتهرت بها تقنية ASP.NET نظرا لسهولة تعلمها، وكفاءتها العالية.

2. طريقة MVC:

اختصارا ل Model, View and Controller وهي طريقة حديثة جدا في تقنية ASP.NET علما أنها نمط قديم يعود إلى سبعينيات القرن المنصرم، لكن لم تتمثلها ميكروسوفت إلا حديثا بسبب قوة هذا النمط البرمجي الذي ينتمي في الأصل إلى نماذج التصميم Design Patterns، وهو نمط يقضي بتقسيم المشروع إلى مجزوءات، كل مجزوءة تتناول جانبا من المشروع، وهي كما يلي:
مجزوءة النموذج Model: وهي تشمل كل ما من شأنه بناء الفئات وإنشاء خصائصها
مجزوءة العرض View: وهي خاصة بعرض النتيجة للمستخدم وإمداده بحصيلة تنفيذ Action معين.
مجزوءة المراقبة Controller: وهي تلعب دور الخادم الذي يتنقل بين View و Model لتحديد ما الواجب استدعاؤه وما الواجب عرضه.
أمام هذا التقسيم، تصبح عملية بناء صفحات الويب سلسة، والتركيز ينصب على كل مجزوءة بما تقتضيه بدل الانكباب الشامل على الوحدات الثلاثة في صفحة واحدة كما هو الحال في طريقة Web Forms، هذا بالإضافة إلى ما يتيحه النمط MVC من يسر وسهولة في عملية إجراء الاختبارات Testing.


3. طريقة Web pages:

وهي طريقة سهلة لبناء الصفحات الديناميكية، تعتمد بالأساس على الشكل الكلاسيكي لتقنية ASP، إذ يتم الجمع بين كود السيرڤر وكود العميل في صفحة واحدة، كود العميل معلوم حاله وهو عبارة عن أوسمة HTML وما يترتب عنها من اللغات والتقنيات التي تعمل عند العميل، وكود السيرڤر هو عبارة عن كود مكتوب بطريقة حديثة اختارت لها ميكروسوفت اسم Razor، وهي طريقة تنبني في الأساس على كتابة الأوامر البرمجية بعد الرمز @، كما تسمح أيضا باستخدام لغات البرمجة فيجوال بيسيك و سي شارب مع أوامر Razor حسب نوع الصفحة، إن كانت صفحة العرض بامتداد cshtml فأوامر Razor تدعم لغة سي شارب، وإن كانت بامتداد vbhtml فهي تدعم لغة الفيجوال بسيك.


4. طريقة Web API:

وهي طريقة حديثة بدورها، مدارها بالأساس على بناء تطبيقات من نوع RESTfull أي أنها عبارة عن تطبيقات قريبة من مفهوم خدمات الويب Web Services، تتم برمجتها بتقنية ASP.NET بالاعتماد على النمط MVC لتصير قابلة للاستهلاك من قبل تطبيقات أخرى متصلة بالسيرڤر الذي يستضيفها، وهي تدخل فيما يعرف ببناء الأنظمة المتصلة Connected Systems، أي مجموعة من التطبيقات المتصلة فيما بينها عبر وسيط شبكي.

طريقة Web API تعكس ميول شركة ميكروسوفت للاستحواذ على مجال صناعة خدمات الويب، إذ من الملحوظ أن ميكروسوفت أخذت منحى تصاعديا في هذا المجال، كان مبدؤه مع خدمات الويب في إصدارات ASP.NET القديمة، مرورا بتقنية WCF التي أتت كحل متكامل لبناء تطبيقات موزعة خدميا SOA (Services Oriented Architecture)، وانتهاء بتقنية Web API التي ـ في نظري ـ تتفوق على كل ما تقدمها من تقنيات بسبب سهولة استعمالها في إنشاء تطبيقات من نوع RESTfull.

العدد الثالث + العدد الرابع من مجلة الرابط - مجلة برمجية شهرية

16

مقدمة العدد المزدوج بعنوان: "سين: لماذا؟ جيم: لهذا!"

الحمد لله ابتداء وانتهاء وبعد:
مما علق بذاكرتي من فصول الدراسة، قصة عن عنترة بن شداد كان قد رواها لنا أحد الأساتذة، تقول أن رجلا قدم إلى عنترة يسأله عن أسباب بأسه وأسرار انتصاره في كل نزالاته، فكان جواب عنترة للرجل عمليا:
إذا أردت أن تفهم فهات اصبعك لأعضه، وخذ إصبعي لتعضه، ولنرى من سيستسلم الأول !
وافق الرجل على التحدي، وتبادلا عض الأصبع، وظل كل منهما يكابد الألم إلى أن صاح الرجل:
توقف...أنا أستسلم يا عنترة !
فابتسم عنترة بكبرياء وقال: لهذا أنتصر دوما !
فسأله الرجل مستفسرا: كيف ذلك يا عنترة؟
فرد عنترة: لو صبرت قليلا لاستسلمت قبلك، فأنا أيضا تألمت بشدة لكنني كنت أسلي نفسي وأهيؤها لصراخك واستسلامك في أية لحظة، وكذلك كان.

العبرة من هذه القصة أن النجاح ليس سهلا، وفي الوقت نفسه ليس صعبا، جوهر المسألة شوء من الصبر وشيء من الوقت، ولكل نجاح سبب، فإن سألت أحد الناجحين: لمادا نجحت؟ فلن يجيبك: أمطرت السماء علي ذهبا، وإنما سيجيبك بالأسباب: لهذا نجحت !
آمن بهذه المسألة، واصبر في عملك صبرا جميلا حتى تقطف ثماره، دون أن تتكاسل أو تستعجل، فما يأتي بالسهل يمشي بالسهل كما يقول المثل الانجليزي Easy Come Easy Go

لو ركنا إلى زاوية الذرائع لما صدر هذا العدد الذي بين يديك عزيزي القارىء، ولو اعتذرنا لناسبنا الاعتذار، بحكم أن شهري نونبر وديسمبر كانا حافلين بالأعمال والمشاغل، لكنني تحاملت على نفسي لأخرج هذا العدد المزدوج في محاولة مني لسد الخلل ومواصلة السير في هذا الدرب النبيل.

أرجو من الله العلي القدير أن ينفع بهذا الإصدار كل مهتم بالشأن البرمجي، وكل متتبع لإنتاجات أكاديمية المبرمجين العرب.

دام لكم البشر والفرح !

رابط تحميل المجلة - رجاء اضغط هنا لتحميل العدد المزدوج من مجلة الرابط

العدد الثاني من مجلة الرابط - مجلة برمجية شهرية

7
الحمد لله ابتداء وانتهاء وبعد:
يقول الله عز وجل في محكم تنزيله: "إن يعلم الله في قلوبكم خيرا، يؤتكم خيرا"، صدق الله رب العالمين.
لم تزل سنن الله عز وجل جارية في خلقه، ولسوف تزال جارية إلى أن يطوي الله الأرض كطي السجل، لقد رأينا من سعى في الغمرات كيف اصطلى بنارها، ورأينا من سعى في الخيرات كيف رزق من ثمارها.
فكان من جملة ما رأينا هذه المجلة التي بين يديك، فقد طرحناها أول ما طرحناها سعيا في الخير وطلبا للمنفعة العامة، فكان من جزيل نعم الله علينا أن بارك فيها وكتب لها النجاح من أول عدد.
أقبل الإخوة والأخوات على العدد الأول إقبالا شديدا ففاق عدد التحميلات ثلاثة آلاف تحميل في مدة تقل عن عشرين يوما، إضافة إلى الانطباعات الحسنة والآراء الطيبة حول المجلة ومحتواها وتصميمها.
المدهش في الأمر ليس هذا الإقبال الكبير، ولكن المدهش تحول المجلة من رابط بيننا وبين الجمهور إلى انصهار وذوبان، فصرت أجد متعة بالغة في الاشتغال عليها بغرض نفع وإسعاد الإخوة المتابعين، وكذلك هم فقد صاروا يكثفون الرسائل والانطباعات الإيجابية لتحفيزي على مزيد من العطاء، فأقولها اليوم بملىء فِيَّ: المجلة ليست رابطا، بل انصهارا.
انصهار لأنها محت الحدود بين القارىء والكاتب فصارت سعادة كل منهما من صميم سعادة الآخر...
انصهار لأنها لا تستهدف فئة من المبرمجين دون فئة، بل تستهدف الجميع باختلاف توجهاتهم ومستوياتهم..
انصهار لأنها تكلم الناس بلغتهم الأم حول التكنولوجيا، فمحت حدود الجغرافيا ووهم أن العربية لغة من في القبور..
انصهار لأنها قضت على كل كبر وعجب، وفتحت بابها لكل من يريد السعي في المنفعة..

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

العدد الأول من مجلة الرابط - مجلة برمجية شهرية

8

بسم الله، الحمد لله، والصلاة والسلام على رسول الله، وعلى آله وصحبه ومن والاه وبعد:
تغمرني فرحة عارمة وأنا أكتب هذه الكلمات على افتتاحية مجلة الرابط، بعد أن كانت مجرد هاجس يراود مخيلتنا إلى أن أصبحت حقيقة ماثلة أمام أعيننا.
لم يكن سهلا قط، لكنه كان أمرا ممتعا للغاية أن أخوض هذا التحدي بمفردي متوكلا على الله عز وجل، واضعا نصب عيني هدفا شريفا لا يذعرني عنه شيء حتى أبلغه، سيما بعد أن طرحت الفكرة على متابعي صفحتي على الفيسبوك فراقت لهم أيما روقان.
وددت لو أسهموا معي فيها لنشكل معا فريقا يخلده التاريخ، فطرحت الفكرة عليهم، فوافقوا بشدة وأبدوا استعدادهم، لكن لما نشرت استمارة الانخراط وفتحت باب إرسال المشاركات لتحضير أول عدد، تراجع جلهم القهقرى وقليل منهم من حافظ على حماسه وراسلني.
فلما كانت بعض المقالات المرسلة مسروقة من منابر أخرى، وبعضها مليء بالأغلاط، وبعضها عبارة عن فقرات قليلة وصغيرة، قلت في نفسي: لا بأس، سوف أستغني عن المقالات غير الصالحة وسوف أصحح المقالات المغلوطة وأثريها بمزيد من المعلومات وأنشرها في المجلة، لكنني توقفت متسائلا: ماذا لو تم إصدار العدد الأول من المجلة، ثم قوبلت بالخذلان في العدد التالي سيما وأن المشاركات كانت شحيحة جدا؟
فشرعت أفكر في حل، فوجدت أن لا سبيل إلى إصدار هذه المجلة والاستمرار فيها، إلا إذا ارتكزت على عناصر ثابتة أستطيع الاعتماد عليها، ولما كانت هذه العناصر الخارجية غير مضمونة قررت أن أعتمد على العناصر الداخلية، فأوعزت إلى نفسي مهمة الكتابة والتدقيق والبحث والتصميم.
كان من المفترض أن يكون اسم هذه المجلة "عالم البرمجة"، لكنني بعد أن غيرت موقفي من الارتكاز على العناصر الخارجية غيرت أيضا اسمها ليصبح "الرابط"، لما تحمله هذه الكلمة من معنى في البرمجة Link، ولما تحمله من معنى في الحياة، فأرجو من الله العلي القدير أن تكون هذه المجلة رابط خير بيني وبين جمهور المبرمجين المسلمين، وأن يجعلها المولى عز وجل خالصة لوجهه الكريم.
وأخيرا، فإنني أتقدم بالشكر الجزيل والثناء الوفير إلى كل الإخوة والأخوات الذين شجعوني على خوض غمار هذه المجلة، خاصة متابعي صفحة العبد الفقير على الفيسبوك.
دام لكم البشر والفرح.
خالد السعداني

رابط تحميل المجلة - رجاء اضغط هنا لتحميل العدد الأول من مجلة الرابط

كتاب: المختصر المفيد في البرمجة الكائنية التوجه OOP

11

تقديم:

الحمد لله ابتداء وانتهاء والصلاة والسلام على سيدنا محمد وعلى آله وصحبه ثم أما بعد:
في نسخة الدوت نيت من الفيجوال بيسك التي ظهرت في بدايات عام 2002 تم إقحام نمط البرمجة كائنية التوجه كنمط برمجي أساسي في البنية الجديدة لهذه اللغة، الشيء الذي أدى إلى إضافة مجموعة من المفاهيم الجديدة المرتبطة بهذا النمط البرمجي مثل الفئات Classes والكائنات Objects والمشيدات Constructors والمهدمات Destructors والخصائص Properties والوظائف Methods والتغليف Encapsulation والوراثة Inheritance و تعدد الأشكال Polymorphisme، وإعادة التعريف Overriding، والتظليل Shadowing وغير ذلك من المفاهيم المتعلقة بالبرمجة الشيئية.
كثرة المفاهيم الكائنية وسهولة الخلط بين مسمياتها مثل Overloads و Overrides و  Overridable  يتسبب في جعلها عصية على الفهم، وإن تم استيعابها تكون عصية على التذكر، لذلك سنحاول في هذا الكتيب الصغير أن نتحدث عن  البرمجة الكائنية التوجه من البداية ثم نتدرج من مفهوم إلى آخر بأسلوب سلس.

لمن يوجه هذا الكتيب ؟

هذا الكتيب موجه لمبرمجي لغة الفيجوال بيسك (الإصدار القديم) الذين يريدون الولوج إلى نمط البرمجة بالكائنات في نسخة الدوت نيت من الفيجوال بيسك، وموجه كذلك إلى مبرمجي لغة الفيجوال بسيك دوت نيت الذين يريدون تفصيلا وتوضيحا للمفاهيم الرئيسية في البرمجة الكائنية، وكمتطلبات قبلية على المبرمج أن يكون على دراية بأساسيات لغة الفيجوال بيسك وخاصة كيفية الإعلان عن الإجراء ات والدوال وطريقة النداء عليها.

تحميل الكتاب:

يمكنك تحميل الكتاب عبر الضغط على الرابط التالي:

كتاب: البحر الشاسع لدخول الخوارزميات من بابها الواسع

230
الحمد لله معز الحق وناصره، ومذل الباطل وقاصره، علام الغيوب، ومن بيده أزمة القلوب، الخبير بما تخفي الضمائر، وتكن السرائر، العالم بما تفضي إليه الأمور، وبخائنة الأعين وما تخفي الصدور، والصلاة والسلام على حبيبنا محمد كاشف الغمة عن الأمة، الناطق فيهم بالحكمة، الصادع بالحق، الداعي إلى الصدق.
ثم أما بعد:
كل البرامج التي تستخدمها على حاسوبك لم تأت من فراغ، بل هي نتاج للتركيبة البشرية التي فطر الله عز وجل الناس عليها، والتي تدفعهم باستمرار إلى إيجاد حلول لوضعيات معينة أو ابتكار وسائل للوصول إلى غايات منشودة كلما ألمت بهم حاجة، وهذا دأب الإنسان وحاله مذ أوجده الله جل وعلا، فكما أن الإنسان في أول عهده عانى من قسوة الأجواء والطقوس وتقلباتها بين قر وحر، فدفعته الحاجة إلى أن يتخذ من الكهوف والغيران مساكنا له ليحتمي بها ويلجأ إليها، ودفعته صعوبة صيد الوحوش باليد فاتخذ من جذع الشجر سلاحا له يهوي به على الطرائد، ودفعه حياؤه من الجنس الآخر فاتخذ من جلد الأنعام لباسا له يواري سوأته، ودفعته الحاجة إلى صنع مراكب يمشي بها في البحر فصنع المطرقة وباقي الأدوات، فكذلك شأن الإنسان اليوم، فإنه كلما ألمت به حاجة أو أصابته داهية، فكر مليا كيف يسلم منها في المرة القادمة عبر ابتكار حلول جديدة لم يعرفها أسلافه.
في بريطانيا، في عشرينيات القرن التاسع عشر احتاج التجار إلى وسائل لنقل البضاعة والسلع الكثيرة بين المناطق المتباعدة، فدفعت هذه الحاجة إلى اختراع أول خط للسكك الحديدية بمحركات بخارية، فتطورت الفكرة لتصبح القطارات بالشكل الذي نراها عليه اليوم.
وحينما احتاج الناس إلى نقل الأنباء والأخبار، قاموا بنشر الصحف، ثم اختراع المذياع، ثم التلفاز، ثم الانترنت.
وحينما احتاج الناس للتواصل فيما بينهم، بدؤوا باستعمال الحمام الزاجل، ثم استخدام البريد الورقي، ثم استخدام التلغراف، ثم الأقمار الصناعية وغيرها.
كلنا شاهدنا كيف تتالت الأمواج البحرية الزلزالية "تسونامي" على شرق آسيا، فدفع ذلك اليابانيين إلى إنشاء مباني مضادة للزلازل، وكلنا شاهد كيف عانت اليابان من مشكل استيراد المنتجات الزراعية بسبب انعدام السهول في أراضيها، فدفعها ذلك إلى إنشاء مدرجات فلاحية على الجبال.
الحاجة أم الاختراع، فلولا حاجة الإنسان إلى الشيء لما شغل باله به، وحاجات الإنسان متغيرة وتتزايد باستمرار، والحاجة هي التي تدفع الناس إلى إنشاء برامج.
اسأل نفسك عن كل برنامج نصبته على حاسوبك: لماذا نصبته؟ وسيكون جوابك حتما ومن غير شك هو حاجتك له، فأنت نصبت مكافح الفيروسات anti-virus لحماية حاسوبك من الأضرار المحتملة، ونصبت برنامج ميكروسوفت وورد microsoft word لأنك تحتاج إلى كتابة ومعالجة النصوص وتنسيقها، ونصبت برنامج قارىء الميديا، لأنك تحتاج إلى مشاهدة تسجيلات مرئية، ونصبت متصفح الويب لأنك تحتاج إلى الدخول إلى المواقع.
نفس الحاجة التي دفعتك إلى تحميل البرنامج وتنصيبه دفعت غيرك من مستخدميه، ودفعت قبلكم جميعا فئة من الناس، فقالوا: نحن نحتاج إلى برنامج يقوم بكذا وكذا، فلما بزغت الحاجة برزت شركة برمجية وقالت:أنا لها.
لكن ما يهمنا نحن كأفراد نسعى إلى تعلم البرمجة، هو معرفة الطريقة الصحيحة التي بانتهاجنا لها سننشىء برامج قوية وتطبيقات جيدة بالشكل الذي نطمح إليه أو بالشكل المطلوب منا.
وهذا ما سنعرض له خلال كتابنا هذا، وسنحاول قدر المستطاع أن نسلك سبيل البساطة والتفكيك، بعيدين كل البعد عن الصعوبة والتعقيد، لذلك قد أطيل في فصل معين وأسهب فيه فلا تلوموني وتعذلوني فإني ما أسهبت فيه وأطلت حبا في ذلك أو رغبة في استعراض المعارف، كلا وألف كلا، وإنما طبيعة المدروس تستلزم منا شرحه من كل جوانبه لنفهمه فهما شاملا، ولو لخصناه أو اقتضبناه لشوهناه وأسأنا شرحه، فتصل إليكم المعلومة مغلوطة أو غير كاملة.
يتكون هذا الكتاب من ثلاثة أجزاء يكمل بعضها البعض، فالجزء الأول يتناول مفهوم أنظمة الترميز والطرق التي يعالج بها جهاز الحاسوب البيانات والمكونات المادية المتدخلة في العملية لكي يكون المتعلم على دارية بما يحصل على مستوى الجهاز حينما يخاطبه بأوامر برمجية، والجزء الثاني يعرض باختصار كيفية القيام بالعمليات الحسابية الأساسية على البيانات الثنائية، أما الجزء الثالث فهو يتناول الخوارزميات من البداية بأسلوب متدرج وبأمثلة تطبيقية.

خالد السعداني 16/10/2013

تعرف على الحقيبة البرمجية لاحتراف لغة الفيجوال بيسك 2015

44

تقديم:

الحقيبة البرمجية هي باقة من الدروس المرئية والمكتوبة المقدمة بأسلوب علمي يجمع بين الشرح النظري والممارسات التطبيقية، وهي مكونة من مجموعة من الأجزاء، كل جزء يحتوي على عدد كبير من الفيديوهات التعليمية وعلى كتب برمجية باللغة العربية الفصحى. يعتبر هذا الجزء الذي نقدمه بين يديك أول جزء من الحقيبة البرمجية لاحتراف لغة الفيجوال بيسك 2015، وهو يتكون مما يلي: - أكثر من 100 فيديو تعليمي بجودة عالية HD وبلغة عربية فصيحة - الجزء الأول من كتاب الإكليل: الشامل في أساسيات البرمجة بلغة الفيجوال بيسك - الجزء الثاني من كتاب الإكليل: المختصر المفيد في البرمجة الكائنية التوجه OOP

محتوى الفيديوهات:

    1. مدخل إلى علم الحاسب ومعالجة البيانات 2. لغة الآلة والنظام الثنائي لتمثيل البيانات 3. مفهوم البرمجة والبرنامج وأنواع اللغات البرمجية 4. لغة الفيجوال بيسك، الفيجوال ستوديو، دوت نيت فريموورك وبيئة التنفيذ 5. تحميل برنامج ميكروسوفت فيجوال ستوديو 2015 6. تثبيت برنامج ميكروسوفت فيجوال ستوديو 2015 7. التعرف على بيئة التطوير الكاملة فيجوال ستوديو 8. أول برنامج بلغة فيجوال بيسك 2015 9. مستعرض الملفات Solution Explorer و محرر الشفرات Code Editor 10. المتغيرات Variables وأنواع البيانات Data Types 11. الثوابت Contants والأنواع العشرية Doubles 12. الأوامر الشرطية Decision Statements 13. روابط المقارنة Comparison Operators 14. الروابط المنطقية غير المختصرة Not short-circuiting logical operators 15. الروابط المنطقية المختصرة Short-circuiting logical operators 16. فصل الحالات باستخدام الأمر Select Case 17. المصفوفات Arrays 18. المصفوفات والحلقات Arrays and Loops 19. المصفوفات متعددة الأبعاد Multi-Dimensional Arrays 20. الحلقات باستخدام الأوامر Do و While و Until 21. استخدام الأمر With 22. المعددات Enumerations 23. العمليات على النصوص Strings Handling (الجزء 1) 24. العمليات على النصوص Strings Handling (الجزء 2) 25. تنسيق الوقت والتاريخ والعملات المالية DateTtime and Currencies Formatting 26. الإجراءات والدوال Procedures and Functions 27. قابلية الوصول Accessiblity ومفهوم الوحدات Modules 28. إدارة الأخطاء والاستثناءات Handling Exceptions 29. مدخل إلى البرمجة الكائنية التوجه 30. الفئات Classes والكائنات Objects والوظائف Methods والاستنساخ Instanciation 31. مشيدات الفئة Constructors 32. مهدمات الكائنات Destrucors 33. الخصائص Properties (Getters and Setters) 34. الأحداث Events 35. الوراثة Inheritance 36. تعدد الأشكال الفرعية SubTyping Polymorphism 37. زيادة التحميل - تعدد التعاريف OverLoading 38. تعدد التعاريف OverLoading (OverLoads keyword) 39. إعادة التعريف Overriding 40. الأسمبلي ومجالات الأسماء Assemblies and Namespaces 41. التظليل Shadowing 42. الفئات المجردة Abstract Classes والأمر MustOverride 43. الكلمة المحجوزة NotOverridable 44. البرامترات الاختيارية Optional Parameters 45. التمرير بالقيمة وبالمرجع Passing Parameters ByVal and ByRef 46. تطبيق الواجهات Implementing Interfaces 47. التراكيب Structures 48. شرح ArrayList - إضافة الكائنات 49. شرح ArrayList - حذف وعرض الكائنات 50. شرح List - إضافة الكائنات 51. شرح List - حذف وعرض الكائنات 52. العناصر المشتركة Shared Membres 53. العمليات على الوحدات Drives 54. العمليات على المجلدات Directories 55. العمليات على الملفات Files 56. العمليات على البيانات Streams 57. خصائص الفورم Form Properties 58. أحداث الفورم Form Events 59. أداة مربع النص TetBox Control 60. أداة الزر Button Control 61. أدوات الملصقات والروابط Labels and LinkLabels Controls 62. أداة مربع الاختيار CheckBox Control 63. أداة قائمة الاختيارات CheckedListBox Control 64. أداة زر الراديو RadioButtonControl 65. أداة القائمة المنسدلة ListBox Control 66. أداة قائمة الكومبو ComboBox Control 67. أداة الصورة PictureBox Control 68. أداة مربع النص الغني RichTextBox Control 69. أداة تحديد التاريخ والوقت DateTimePicker Control and DateTime Handling 70. أداة تخزين الصور ImageList Component 71. أداة قائمة العرض - إضافة الأعمدة والأسطر ListView Control 72. أداة قائمة العرض - التحكم في أنواع العرض ListView Control 73. أداة قائمة العرض - العمليات على البيانات ListView Control 74. أداة قائمة العرض - تجميع البيانات ListView Control 75. أداة العرض الشجري TreeView Control 76. أداة القائمة MenuStrip Control 77. أداة شريط الأدوات - الجزء الأول ToolStrip Control 78. أداة شريط الأدوات - الجزء الأول ToolStrip Control 79. قائمة الاختيارات المنسدلة ContextMenuStrip Control 80. أداة شريط الحالة StatusStrip Control 81. أدوات التجميع GroupBox and Panel Controls 82. أداة التبويبات المتعددة TabControl Demo 85. أشرطة التمرير العمودية والأفقية VScrollBars and HScrollBars 86. أداة شريط التغيير TrackBar Control 87. أداة اختيار الألوان ColorDialog Control 88. أداة اختيار الخط FontDialog Control 89. أداة فتح الملفات OpenFileDialog Control 90. أداة حفظ الملفات SaveFileDialog Control 91. أداة فتح المجلدات FolderBrowserDialog 92. أداة العداد Timer Component 93. أداة شريط التدرج ProgressBar Control 94. أداة التنبيه إلى الأخطاء ErrorProvider 95. أداة المساعدة HelpProvider 96. أداة أيقونة الإشعار NotifyIcon 97. أداة تحديد الأرقام NumericUpDown 98. أداة تحديد القيم DomainUpDown 99. أداة التلميح ToolTip 100. أداة عرض الخصائص PropertyGrid 101. أداة التقسيم Splitter 102. أدوات التحجيم التلقائي TableLayoutPanel and FlowLayoutPanel 103. أداة متصفح الويب WebBrowser 104. أداة مربع النص المقولب MaskedTextBox

    محتوى كتاب: الشامل في أساسيات البرمجة بلغة الفيجوال بيسك:

    الفهرس العام مقدمة الحقيبة البرمجية حول الكتاب بنية الحاسوب تعريف وجيز لجهازالحاسوب / الحاسب مكونات الحاسوب المادية الذاكرة الرئيسية أو الحية RAM(Random Access Memory) وحدة معالجة البيانات Central Processing Unit الأجهزة Devices اللغة التي يفهمها الحاسوب تاريخ لغة الفيجوال بسيك الفيجوال ستوديو الدوت نيت فريموورك مكتبة الفئات (Framework Class Library) ماهي MSIL و CLR؟ آلية التنظيف التلقائي Automatic Garbage Collector حماية وصول الكود Code Access Security التحقق من الكود Code Verification تحويل الكود الوسيط إلى لغة الآلة إنشاء مشروع جديد بيئة التطوير لمشاريع الويندوز شريط القوائم متصفح المشروع Solution Explorer شاشة الخصائص Properties Window علبة الأدوات ToolBox شاشة التصميم قائمة الأخطاء Error List أول مشروع في لغة الفيجوال بيسك الأدوات Controls الخصائص Properties الأحداث Events التعليقات Comments مفهوم المتغيرات Variables الإعلان عن المتغيرات أنواع البيانات Data Types إسناد القيمة للمتغير الروابط / المعاملات الروابط الحسابية أو الرياضية Arithmetic operators روابط دمج النصوص String Concatenation operators روابط المقارنة Comparison operators روابط إسناد القيمة Assignment Operators الروابط المنطقية Logical operators الروابط المنطقية المختصرة Short Circuited Operators البنية الشرطية باستخدام الأمر If البنية الشرطية باستخدام الأمر Select Case البنية الشرطية باستخدام الكلمة IIF البنية التكرارية Loops الصيغة التكرارية الشرطية : For Next الصيغة التكرارية الشرطية Do..Loop الصيغة التكرارية الشرطية Do..While تقديم While تأخير While الصيغة التكرارية الشرطية Do..Until الفرق بين Until و While الصيغة التكرارية For Each…Next الأمر With المصفوفات Arrays الإعلان عن مصفوفة أحادية إسناد القيم لعناصر المصفوفة الأحادية الحصول على طول المصفوفة معالجة عناصر المصفوفة ترتيب المصفوفات Sorting Arrays قلب عناصر المصفوفة المصفوفات المتعددة الأبعاد المعددات Enumerations معالجة النصوص Handling Strings الحصول على طول النص تكبير حالة الأحرف تصغير حالة الأحرف اجتزاء النصوص SubString تقسيم النصوص Splitting دمج النصوص Concatening البحث داخل النصوص Contains استبدال النصوص Replace إدراج النصوص Insert مقارنة النصوص Compare الدالة Format تنسيق العملات تنسيق التاريخ والوقت الدوال والإجراءات Functions and Procedures تمرير البرامترات معالجة الاستثناءات Exceptions Handling معالجة الاستثناءات المنظمة Structured Exception Handling معالجة الاستثناءات غير المنظمة Unstructured Exception Handling الخاتمة

    محتوى كتاب: المختصر المفيد في البرمجة الكائنية التوجه OOP

    تقديم لمن يوجه هذا الكتيب ؟ ماهي البرمجة الكائنية التوجه OOP ؟ الخصائص Properties الوظائف Methods المشيدات Constructors المهدمات Destructors الوراثة Inheritance إعادة التعريف Overriding الفئات المجردة Abstract Classes تعدد الأشكال Polymorphisme زيادة التحميل Overloading التظليل Shadowing الأحداث Events خاتمة

    سعر الحقيبة البرمجية

    سعر الحقيبة البرمجية بكل ما تشمله من فيديوهات وكتب هو 300 ريال سعودي، وبالعملات الأخرى ما يوافق 70 دولار أمريكي.
    بعد تسجيل طلبك ستأتيك رسالة تحتوي على تفاصيل الدفع.

    سجل الآن واستفد من هذه الحقيبة البرمجية الغنية بالدروس

هكذا كان ينجز فرعون مشاريعه البرمجية !

17
لسنا بمعرض المزاح أو سرد بعض الأساطير البرمجية جريا على عادتنا، بل أحدثك حديثا جَادًّا إن أنت وعيته ظفرت بِمُرَادِ المكتوب، وإن لم يَتَيَسَّر لك ذلك فعلى أهلها جنت براقش.
عملية تطوير البرمجيات ليس مقتصرة على مرحلة كتابة الشفرات وتنفيذها، وإنما تبدأ من مراحل متقدمة لتستمر إلى مراحل مابعد التطوير إن أنت أهملتها أو قللت من شأنها انعكست سلبا على منتوجك البرمجي، فتتفاجأ في ختام ما وصلت إليه ببرنامج رديء لا يرقى إلى مستوى تطلعاتك، بل قد تجد نفسك قبل بلوغ مرحلة الختام واقعًا - بين الفينة والأخرى - في أخطاء منهجية وأغلاط تحليلية تعود بك لنقطة الصفر، لتكرر نفس الخطأ وتتساءل باستمرار: أين الخلل؟
الخلل في عدم إعطاء كل مرحلة من المراحل الآتي ذكرها حقها ووقتها.
ولتكون القراءة ممتعة بعيدة عن الرتابة البرمجية سنضع مقارنات ثانوية – يمكنك تجاهلها - بين كل مرحلة من مراحل تطوير البرمجيات، وبين أساليب الطاغية فرعون في استعباد قومه والتسلط عليهم.

المرحلة الأولى: جمع متطلبات وتـفاصيل المشروع صغيرها وكبيرها

لما علم فرعون بالنبوءة التي تقول أن واحدا من بني إسرائيل سيسقطه من عرشه، أمر زبانيته بالبحث والتنقيب عن جميع الذكور وقتلهم وألا يغادروا منهم أحدا.
هذه الخطوة الأولى تعتبر الخطوة الأساس التي يترتب عليها باقي العمل، ابدأ أولا بجمع كافة المعلومات عن المشروع البرمجي الذي تشتغل عليه ولا تستصغر شيئا، و اعلم أن تركك لأية معطيات قبلية أو أي فهم ناقص لمعلومة ما، أو سوء تصور لجزئية ما، أو نقص تحليل قد يكلفك مجهودا إضافيا ووقتا ضائعا.

المرحلة الثانية: تصميم الحل

التخطيط Planning أو التحليل Analysis أو التصميم Design (مع أن لكل مفهوم معناه الخاص) لا يعني تحديدا تصميم الشاشات والواجهات الرسومية GUI أو كتابة شفرات برمجية تدور في خلدك، وإنما يشمل أيضا التصميم الوظيفي للمشروع Functional Design ، بحيث عليك أن تضع تخطيطا يشمل كل تفاصيل وحيثيات المشروع، الشيء الذي سيسهل عليك عملية تحويل المخططات إلى أوامر برمجية.
فالعمل دون تخطيط ناقص لا محالة، فكأنك تنوي بناء منزل دون تصميم، أو تركيب قطع غيار سيارة دون دليل تجميع.
عليك بالتحليل، فالبرمجة بلا تحليل، كالإعلام العربي بلا تضليل...
لا تخلط بين التحليل وبين التكويد، قَدِّمْ الأول على الثاني ولا تنجزهما في نفس الآن، فالتحليل يعطيك نظرة صافية تسهل عليك التكويد.
أضف إلى ذلك أن برنامجك في غياب مرحلة التحليل سيفتقد إلى العديد من المزايا والتحسينات، التي قد لا تلوح لك أثناء كتابة الكود لأتك استعجلت ولم تعط للتحليل وقته الكافي.
وأيقن أن غياب التحليل قبل مرحلة التكويد، أو الاستناد إلى تحليل سيء Bad Design سَيَجُرُّكَ إلى عدة خيبات أبرزها ضياع الوقت، نقصان جودة المنتج، ضياع المال، أفول سمعة المؤسسة التي باسمها تم أصدار المشروع، اهتزاز ثقة الفريق البرمجي بسبب السقوط المتواصل.
وجه الشبه بين هذه المرحلة وبين أساليب الطاغية فرعون يتجلى في دراسته لأزمة النبوءة التي تقول أن مولودا من بني إسرائيل سيستأصل شأفته، وتخطيطه للحل المتمثل في قتل كل المواليد الذكور بل واستغراقه في مرحلة التحليل والمشورة إلى أن وقف على رأي تنظيم العملية الإجرامية بأن يذبح الذكور في عام ويستبقيهم في العام الموالي  لكي لا يضعف اقتصاد مصر بسبب قلة اليد العاملة.

المرحلة الثالثة: قَسِّمْ كُودَكَ شِيَعًا 

دعني أصدقك القول، تقسيم العمل إلى أجزاء والاشتغال على كل جزء على حدة من أهم أسباب الانتصار على البرنامج وتطويعه بل واستضعافه على غرار ماكان يفعل فرعون مع قومه لما فرقهم شيعا فاستضعهم.
حينما تنتهي من مرحلتي جمع المتطلبات وتصميم الحل المناسب لمشروعك، قم بتقسيمه إلى وحدات قليلة، وابدأ أولا بالوحدة الجوهرية التي تشمل الأمور المشتركة بين كافة الوحدات.

المرحلة الرابعة: بداية التكويد

بمجرد ما تقوم بتوزيع مشروعك إلى وحدات، عليك بدء التكويد لكن بعد أن تحدد ما يلي:
ماهي لغة البرمجة المناسبة لإنجاز المشروع (جافا، سي شارب، فيجوال بيسك، ..)؟
ماهو نوع المشروع الذي علي اختياره في برنامجي (ويب، ويندوز، موبايل، سيرفيس، ..)؟
هل يوجد لدي بعض الأكواد التي يمكنني إعادة استخدامها في برنامجي؟
هل سيحتاج برنامجي إلى قاعدة البيانات؟
إن كان الجواب نعم: ماهو نظام إدارة قواعد البيانات الأمثل في حالتي هذه (أوراكل، MS SQL Server، MySQL، MS Access، ..)؟
هل برنامجي سيكون متعدد اللغات والثقافات (Multi-Languages and Multi-Culture) ؟
في هذه المرحلة بدأ فرعون عملية تقتيل الأطفال عليه من الله ما يستحق.

المرحلة الخامسة: تحزيم البرنامج

هذه المرحلة لا تقل أهمية عن سابقاتها، بل لا قيمة لبرنامجك إن لم تقم بإعداد ملف تنصيب يضمن سلامة اشتغاله على حواسيب أخرى.
ضمن برنامجك كل ما سيجتاجه من متطلبات قبلية، على سبيل المثال لو صممت برنامجا في بيئة الدوت نيت، لا تنس أن تضمن ملف التنصيب إطار العمل دوت نيت فريموورك، وإن كان يحتوي على تقارير الكريستال فضع كذلك حزم الكريستال ريبورت...
إن كان برنامجك موصولا بقاعدة بيانات وتحتاج إلى تغيير معلومات ربط الاتصال من السيرڤر بعد عملية التحزيم، فلا تتردد أن تضع في برنامجك واجهة من أجل إعدادات الربط مع نظام إدارة قواعد البيانات، من خلالها يستطيع العميل أو التقني المكلف بعملية التنصيب أن يحدد عنوان السيرڤر ومعلومات الوصول إلى قاعدة البيانات متى ما شاء، فإن لم تستطع أن تنشىء هذه الشاشة فضع معلومات الاتصال في ملف خارجي من نوع XML مثلا لكي تتمكن من تعديلها يدويا.
هذه المرحلة شبيهة جدا بالمرحلة التاريخية التي أراد فيها فرعون أن ينهي قصة موسى عليه وعلى نبينا الصلاة والسلام فاتهمه بالسحر وجمع عليه السحرة ليبرهن لقومه أنه مصيب في رميه لموسى بالسحر، فكانت هذه الخطوة قاصمة ظهر فرعون وانقلب السحر على الساحر وآمن السحرة وبهت فرعون.

المرحلة السادسة: الاختبار

حينما تصل إلى هذه المرحلة لا تصرخ بشدة: لقد أنهيت البرنامج !
رويدك، فإن وراء الأكمة ما وراءها كما يقال، لأن هذه المرحلة هي الأصعب على الإطلاق لأنها تستلزم منك معنويات عالية وصبرا شديدا.
ستجد أن بعض الأمور التي كنت تظنها تشتغل بشكل جيد ليست كما توهمت، لأنك جربتها بشكل أحادي، أما الآن بعد أن شملتها التجربة العامة فقد بان عوارها وما كان لها أن تكون كما هي عليه الآن، إذن عليك إعادة صياغتها بالشكل المناسب لتتناعم مع باقي عمليات البرنامج.
ستجد أخطاء برمجية، ستجد أغلاط في الحساب، ستجد مشاكل في تنسيق التواريخ والعملات، ستجد مشاكل في الترميز واللغات والموارد من صور وملفات صوتية، ستجد بطء في بعض الشاشات، ستجد تـقارير بشعة كانت تظهر جميلة لأنك جربت عليها عنصرين أو ثلاثة فلما جاوزات ثلاث صفحات دخل المحتوى في الفوتر، ستجد وستجد...
لذلك عليك أن تضبط أعصابك وبشدة، وأن تنظر إلى الأمر بشكل طبيعي، فقد أديت ما عليك بأمانة لكنك أغفلت هذه الأمور لسبب أو لآخر.
قم بإصلاح الأخطاء وإجراء التعديلات المناسبة، قد تبدو لك بعض التحسينات بفعل تراكم التجارب فأنجزها دون تردد.
ثم أعد التجربة بشكل جنوني إلى أن تظهر أخطاء أخرى، وهكذا حتى تخلص برنامجك من كل الشوائب والنقائص.
أما هذه المرحلة فهي الخطوة التي لم يقم بها الطاغية فرعون فاستكبر على اختبار دعوة موسى وهارون عليهما السلام، ولو أنه استمع بخضوع لهما، وجرب حلاوة الإيمان لما دفعه الكبر إلى أن أغرقه في اليم ليكون عبرة لكل مجرم أثيم.

المرحلة السابعة: توثيق المشروع

بعد أن تنتهي من المراحل الآنفة، قم بإعداد كتيب يشرح برنامجك تضع فيه محتواه بالصور والتوثيق ليسهل على المستخدم الأخير العودة إليه كلما تاه في شعب برنامجك.
بعد ذلك، قم من مجلسك واستنشق الهواء بشدة، ثم توجه إلى حيث تجلس أمك، وقبل رأسها وقل لها بهدوء:
لقد طلب مني ذلك شخص من بلاد المغرب الأقصى.

استخدام Serial Port وتقنية AT Command لإرسال رسائل SMS بلغة سي شارب

17

السلام عليكم ورحمة الله وبركاته، في غضون هذا الدرس الشيق سوف نتعرف بحول الله على مفهوم Serial Port وأهميته في ربط الأجهزة الخارجية مع الحاسوب.
وسنتعرف كذلك على كيفية إعداد الربط مع GSM Modem عبر خطوات محددة، ثم بعد ذلك سنقوم بإنشاء برنامج بلغة سي شارب لإرسال رسائل SMS عبر تقنيات AT Command والكلاس SerialPort التابعة لمجال الأسماء Ports التابع بدوره لمجال الأسماء System.IO.
في الأخير سوف نستعرض معا نتيجة التطبيق عبر أخذ صورة للرسالة التي تم بعثها بواسطة التطبيق.
فرجة نافعة ودام لكم البشر والفرح !

التفريغ النصي لمحاضرة: بانوراما هندسة البرمجيات

7

المقدمة


بسم الله الرحمن الرحيم، الحمد لله رب العالمين والصلاة والسلام على الرحمة المهداة للعالمين، سيدنا محمد وعلى آله وصحبه أجمعين، وعلى التابعين، ومن تبعهم بإحسان إلى يوم الدين، ثم أما بعد:
أيها الاخوة الأفاضل، أيتها الأخوات الكريمات:
السلام عليكم ورحمة الله تعالى وبركاته.
بداية، اسمحوا لي أن أتوجه بالشكر الجزيل والثناء الوفير لأخي الحبيب يونس معدان الذي بذل جهدا كبيرا في سبيل أن يتحقق هذا الجمع المبارك، وإلى سائر أفراد إدارة المدرسة العليا للأساتذة، ثم إلى سائر السادة الحضور من أساتذة أجلاء وطلبة فضلاء.
في الحقيقة، كنت أنتوي الحديث عن موضوع من موضوعات الدوت نيت بحكم طبيعة تخصصي، كأن نتحدث عن الفروق بين لغة الفيجوال بزيك دوت نيت وبين لغة سي شارب، أو أن نتحدث عن التقنيات الحديثة التي رافقت إصدارات الدوت نيت الأخيرة بدء من النسخة 3.5 مثل تقنية Entity Framework، WPF، WCF، LINQ وغيرهم، لكن بلغني أن أخي الفاضل أنس صحري سيتناول في محاضرته نطاق الدوت نيت عبر عرض أوجه الاختلاف والائتلاف بينه وبين نطاق جافا.
ففكرت في الأمر مليا، فخرجت بنتيجة مفادها أن الحديث عن نفس الموضوع ولو من زوايا مختلفة قد يسبب نوعا من الرتابة والملل لدى المتابعين الكرام، فارتأيت أن أغير الوجهة صوب موضوع شامل يخص كل لغات البرمجة، ويكون له تأثير جوهري على عملية صناعة البرمجات فوجدت أن أفضل موضوع في هذا الشأن هو هندسة البرمجيات Software Engineering / Génie Logiciel.
طبعا المحاضرة ستكون عبارة عن رحلة استطلاعية لهذا التخصص الرائع، سنلقي عليه نظرة من فوق: بانوراما، من خلالها نفهم ماهية هذا التخصص وأهميته البالغة في عملية صناعة البرمجيات.
قبل ذلك اسمحوا لي أن أستعرض أمامكم مجموعة من المعلومات التقنية كتمهيد لهندسة البرمجيات.
نشرت مجلة سيو ماڭازين CEO Magazine في شهر ديسمبر من عام 1998 خبرا مفاده أن مؤسسة ستانديش ڭروب، وهي مجموعة مهتمة بدراسة طرق إدارة المشاريع البرمجية Software Project Management ways كما تعرف نفسها على موقعها الرسمي.

هذه المجموعة (ستانديش غروب) أشارت في بحث لها أن 46% من المشاريع البرمجية تجاوزت المدة المتفق عليها، بل وتجاوزت حتى الميزانية المخصصة لها، بل ولم تلبي حاجيات العملاء..
يعني أن 46% من المؤسسات البرمجية، لم تفلح أن توفق بين الميزانية والوقت المخطط لهما وبين الميزانية والوقت الفعلي الذي استغرقته عملية صناعة البرمجيات.
وذكرت نفس المجلة (سيو ماڭازين) أن مجموعة ستانديش غروب قد أحصت كذلك نسبة 28% من المشاريع التي فشلت تماما، ولم يقدر لها لا النجاح ولا حتى أن يتم إنتاجها بصرف النظر عن الميزانية والوقت الذي تم التخطيط له، يعني خلاص فشلت بشكل كامل.
وذكرت المجموعة أن 24% فقط من المشاريع البرمجية هي التي كتب لها النجاح.
دقق معي جيدا، نحن الآن لا نتحدث عن مبرمجين هواة أو عن مؤسسات برمجية صغيرة، بل نتحدث عن مؤسسات كبيرة وتضم مهندسين وأطر عليا ومع ذلك قدر لمشاريعها أن تموت في المهد، أو تكتمل بشكل شائه دون احترام للميزانية المخصصة لها أو الوقت المزمع أن تستغرقه.
فيما يلي رسم بياني يعرض نفس البحث الذي تقوم به مجموعة Standish Group لكن لعام 2012:



مخالف للاتفاق: تعبر عنها مجموعة Standish Group بالمصطلح Challenged وتشمل كل المشاريع التي لم تحترم المعايير المالية والزمنية والوظيفية.
وهنا سلسلة الأبحاث التي تقيمها Standish Group في نفس الإطار دائما منذ سنة 2004 ووصولا إلى عام 2012 الذي استعرضناه قبيل قليل:

وذكرت المؤسسة العسكرية الأمريكية US Army  أنها أنفقت على مشروع برمجي ما قيمته 1 بليون دولار (مليار دولار) زيادة على الميزانية المخصصه له، ومع ذلك مايزال هذا المشروع غير شغال.

قبل أحداث الحادي عشر من سبتمبر من عام 2001 بالولايات المتحدة الأمريكية وتحديدا عام 2000، قام المكتب الاتحادي للتحقيقات The US Federal Bureau of Investigation (FBI) بتكليف المؤسسة الدولية للتطبيقات العلمية Science Applications International Corp (SAIC)  بتطوير برنامج اسمه Virtual Case File software (VCF).
دور هذا البرنامج هو إدارة ملفات القضايا الكترونيا، بمعنى أن أي مستخدم له صلاحيات في هذا النظام يمكن له أن يطلع على معلومات القضايا.
تم تحديد ثلاث سنوات غطاء زمنيا لإنجاز هذا المشروع، أي في عام 2003 يتعين أن يكون النظام كاملا بكل ما تم الاتفاق عليه من مهام وعمليات.
انتهت المدة المحددة، وتم تسليم نسخة من هذا النظام للمكتب الاتحادي للتحقيقات The US Federal Bureau of Investigation في شهر دجنبر من عام 2004، وكانت هذه النسخة علاوة على التأخير الزمني مليئة بالعيوب والنقائص. من بين العيوب التي تم رصدها في نسخة النظام المسلمة:
أن ما تم إنجازه لا يمثل سوى واحد من عشرة من البرنامج الذي تم الاتفاق عليه
النسخة المسلمة لايمكن العمل عليها، وإنما تصلح فقط أن تكون نموذجا أوليا Prototype للنظام.
ما يقارب 170 مليون دولار ضاعت هباء منثورا.

في شهر أبريل من عام 2005 توقفت عملية تطوير المشروع وتم التصريح بفشله.

قصص كثيرة جدا تحكي فشل مشاريع برمجية كبرى يمكنكم الاطلاع عليها على آلانترنت، فقط ادخلوا إلى أي محرك بحث، غوغل مثلا، وقوموا بكتابة: Software Failure stories وستشاهدون النتائج.
هذه القصص تحيلنا مباشرة إلى سؤال جوهري وهو: ماهو سبب أو ماهي أسباب فشل المشاريع البرمجية؟
نفس السؤال أطرحه عليكم: في نظركم ماهو السبب أو ماهي الأسباب التي تؤدي إلى فشل المشاريع البرمجية ؟

أسباب فشل المشاريع البرمجية


يمكننا أن نجمل أسباب فشل المشاريع البرمجية في النقاط التالية:

1. أهداف المشروع غير حقيقة أو غير واضحة  (في الغالب الأعم يكون العميل بعيدا عن مجال صناعة البرمجيات، لذلك لا تتوقع منه أن يخاطبك بأسلوب تقني كأن يقول لك: أريد من البرنامج أن يفعل كذا وكذا، وأن تكون به شاشات لإدخال كذا وكذا، أن تكون التقارير من نوع Jasper Report، أن تكون قاعدة البيانات أوراكل...، لا تتوقع منه ذلك، لأنه سيخاطبك بلغة عادية بعيدة عن الحقل البرمجي، وربما يذكر في طلباته أشياء بعيدة عن الواقع البرمجي، وأن يطلب أشياء لا يمكن إنجازها برمجيا، فلا توافق على كل شيء وإلا لفشل مشروعك بسبب عدم تحقيق جميع رغبات العميل التي ذكرها ووافقته عليها مع أنها غير مهيئة أن تكون بصيغة برمجية)

2. سوء تقدير الموارد اللازمة من ميزانية ووقت (الوقت وما أدراك ما الوقت، لا يمكنك السيطرة عليه، لكن يمكنك إدارته، ولكي لا يواجه مشروعك البرمجي الفشل، قم بإعطاء مرحلة التخطيط Planning وقتا كافيا، لا تبدأ مباشرة في كتابة الكود حتى وإن كنت متيقنا من أن مايدور برأسك هو نفسه ما يريده العميل، خذ كل وقتك في مرحلة التخطيط لتفهم النظام ومتطلباته بشكل دقيق، هذا الأمر سيسهل عليك كل العمليات التي تأتي بعده من كتابة كود واختبار وتحزيم وغيرهم، أما بخصوص الميزانية، فلا تعتقد أنك إن خفضت تكلفة النظام ستربح العميل، لأن مايهمه في الأخير هو نظام برمجي ينقص عليه المصاريف أو يزيد له المداخيل.
البعض منا لديه أفكار خاطئة حول تقييم تكلفة المشروع، ويظن أنه لو ذكر ثمنا مناسبا سيرفض العميل بحجة أن الثمن مرتفع، فيقوم بتخفيض المبلغ مخافة أن يفر العميل من بين يديه، وهذا خطأ فادح، قم بدراسة مشروعك وصمم له الحل بهدوء وخذ وقتك الكافي في ذلك، ثم قم بتحديد الميزانية اللازمة لإنجاز المشروع في المدة الزمنية التي حسبتها ولا تفكر في أي شيء آخر وإلا فإن مشروعك سيفشل وستدفع من جيبك لتعويض نقص الميزانية، ركز دائما على مرحلة التخطيط لأنها أول مرحلة فإن وضعتها بشكل سليم سلم مشروعك من الفشل، وهنا أستحضر مقولة بنيامين فرانكلين وهو فيلسوف أمريكي: إذا فشلت في التخطيط فقد خططت للفشل If you fail to plan, you are planning to fail)

3. متطلبات النظام تم تحديدها بشكل سيء (تأكد جيدا أنك لو أرسلت نفس العميل إلى مجموعة من المؤسسات البرمجية، فكل واحدة ستقوم بكتابة المتطلبات بشكل مختلف عن نظيراتها، إذن فالعملية تستلزم الدقة والتركيز في كل كلام العميل وصياغته بشكل يتلاءم مع طبيعة المشاريع البرمجية، كما يجب عليك أن تقدم اقتراحات للعميل لتحسين النظام، وإعطاء بديل لأهدافه الخيالية التي لا يمكن إنجازها برمجيا، بمعنى لو قال لك: أريد من البرنامج أن يقرأ الوثائق الورقية بواسطة الطابعة، تقول له: الطابعة دورها هو إخراج الوثائق فقط، لكن يمكننا قراءة الوثائق الورقية عبر جهاز الماسح الضوئي Scanner)
في هذه المرحلة ستحتاج إلى تصميم بعض النماذج من نوع Use case إن كنت تستخدم لغة UML، من أجل تحديد المهام  Actions التي يتيحها النظام ومن هم الفاعلون Actors الذين يقومون بها.)

4. تقارير ناقصة حول المشروع (عند الانتقال من مرحلة إلى مرحلة أخرى في المشروع يفترض إعداد تقارير، مثلا عند أول مرحلة في المشروع والمعروفة باسم مرحلة التخطيط Planning علينا وضع تقرير يحتوي على دراسة الجدوى الخاصة بالمشروع فإن كان هذا التقرير ناقصا فإن ذلك سيؤثر بالسلب على المرحلة الموالية المعروفة باسم مرحلة التحليل Analysis وهكذا دواليك، فأي تقرير ناقص أو يحتوي على معطيات مغلوطة سيفضي بالمشروع إلى شط الفشل)

5. عدم الأخذ بعين الاعتبار تعقيدات النظام System Complexity (عليك تحديد صعوبة النظام الذي تود إنجازه، ماهي الأجزاء الصعبة في هذا النظام؟ كيف سأقوم بإنجازها؟ وكيف يمكنني إصلاحها إن أخطأت في إنجازها؟ مع العلم أن تصحيح الكود أصعب من كتابته، ومن العبارات الشهيرة في مجال دراسة تعقيدات الأنظمة "قراءة الكود أصعب من كتابته  It’s harder to read code than write it.
تعقيدات النظام أو صعوبة النظام من المواد الأساسية في هندسة البرمجية والتي تعنى بحساب ودراسة درجة صعوبة النظام، لكي نعرف النظام بشكل عميق، وتشمل تعقيدات النظام الجانب المادي للبرنامج بمعنى كم هي حاجة البرنامج إلى الموارد المادية مثلا: ماهو حجم الذاكرة الذي يتطلبه البرنامج ليشتغل؟ وتشمل تعقيدات النظام كذلك الجانب البشري بمعنى كم هي الموارد البشرية التي سيحتاجها البانرمج، مثلا: عدد المبرمجين، عدد الأفراد الذين سيجرون الاختبار على البرنامج.
لذلك يهتم المهندسون البرمجيون بحساب وقياس تعقيدات النظام، لأنه بحساب كل عملية ننفي احتماليات الخطأ والشك، التعقيدات تحسب، الجودة تحسب، إعادة الاستخدام تحسب، كل عملية من عمليات هندسة البرمجيات تحسب.
وأذكر هنا مقولة الفيزيائي البريطاني ذي الأصول الايرلندية ويليام تومسون الشهير باللورد كيلڤان إذ يقول:
حينما تستطيع حساب ماتتكلم عنه والتعبير عنه بالأرقام، يمكنك معرفة بعض الأشياء حوله، لكن إن لم تستطع حساب ماتتكلم عنه والتعبير عنه بالأرقام، فمعرفتك به فقيرة جدا وغير كافية
Quand  vous  pouvez  mesurer  ce  dont  vous  parlez  et  l’exprimez  en  nombres,  vous pouvez  savoir  quelque  chose  à  ce  sujet;  mais  quand  vous  ne  pouvez  pas  le  mesurer  et l'exprimer  en  nombres,  votre  connaissance  est  en  quelque  sorte  pauvre  et insuffisante.  « William Thomson connu sous le nom Lord Kelvin »   
6. ضعف التواصل بين العملاء والمطورين والمستخدمين النهائيين (على المبرمجين الذين يشتغلون على نفس المشروع أن يكونوا على تواصل فيما بينهم، ليوضحوا المهام لبعضهم البعض، حتى لا يكرر أحدهم عمل الآخر، أو يظن أحدهم أن جزئية ما تدخل في تكليفات مبرمج آخر.
أيضا ينبغي أن يكون هنالك تواصل مع العميل ومع مستخدمي النظام خاصة في مرحلة جمع المتطلبات من أجل بناء نظام يناسبهم ويلبي رغباتهم.)

7. استخدام تكنولوجيا لا تفي بالغرض (لغة برمجية لا تلبي الغرض، أجهزة موصولة بالنظام لا تشتغل بكفاءة جيدة...)

8. ممارسات برمجية غير مسؤولة ولا تتعامل مع المشروع بالجدية المطلوبة (بعد تحديد الميزانية والوقت الخاصين بالمشروع، على الفريق البرمجي أن ينكب على العمل بجدية دون تهاون أو تخاذل من أجل ضمان تسليم المشروع في المدة المحددة، لأن كل زيادة زمنية هي نقصان في الميزانية، وخسارة للمؤسسة، وسقوط للسمعة.)

9. سوء إدارة المشروع (إذا ما حدد مدير المشروع Project Manager لفريق البرمجة موعدا نهائيا غير واقعي لتسليم العمل، فإن ذلك سيؤثر سلبا على المشروع، لأن العمل لن ينجز في المدة المحددة وبالتالي اهتزاز نفسية الفريق البرمجي مظنة أنهم ليسوا أكفاء زيادة على تأخر موعد التسليم، بينما يكون الأمر جيدا لو قام مدير المشروع بتحديد مدة زمنية معقولة، أو قام بتقسيم العمل إلى أجزاء صغيرة وتحديد مدة لكل جزء.
نفس الكلام ينطبق على طريقة العمل، حينما يكون الفريق البرمجي يشتغل بشكل غير مسؤول، وليست لديهم أهداف محددة، فطبيعي جدا ألا يتم إنجاز المطلوب بالشكل المطلوب في الوقت المطلوب بالثمن المطلوب.)

10. عدم تلبية حاجيات العميل: (الغرض من إنشاء المشروع هو تلبية متطلبات وحاجيات العميل، فمنطقيا أي برنامج لا يحترم هذه النقطة فهو حتما برنامج فاشل ولا يتناطح فيها عنزان ولا يختلف فيها اثنان كما يقال،

11. اختبارات النظام غير جيدة

12. نقص الجودة

هندسة البرمجيات


هندسة البرمجيات هي مجمل الأنشطة والعمليات التي من شأنها تصور النظام، وتوظيف تقنيات ووسائل من أجل الرفع من جودة وكفاءة عملية إنتاج وصناعة البرمجيات وكذا عمليات التتبع والمراقبة.
وتضمن لنا هندسة البرمجيات احترام أربعة معايير أساسية من معايير عملية صناعة البرمجيات وهي:

1. ينبغي أن يشمل المشروع جميع الوظائف والمهام التي اقترحها العميل
2. ينبغي الأخذ بعين الاعتبار جودة المشروع
3. ينبغي احترام التكلفة المالية التي تم تحديدها قبل خوض غمار المشروع
4. ينبغي احترام المدة الزمنية التي تم الاتفاق عليها

تاريخ هندسة البرمجيات


ظهرت هندسة البرمجيات في سبعينيات القرن المنصرم 1970 من أجل حل أزمة البرمجيات Software Crisis / La Crise du Logiciel، حيث عرفت عملية تطوير البرمجيات مشاكل جوهرية متمثلة في عدم احترام مواعيد التسليم، وعدم احترام الميزانية المخصصة للمشاريع، وأن هاته المشاريع لا تفي بالغرض ولا تلبي احتياجات العميل، إضافة إلى أنها تكون صعبة الاستخدام وصعبة الصيانة والتصحيح، فضلا عن إمكانية إعادة تطويرها وتحسينها.
دائما في إطار مشاكل البرمجيات لنتمعن في هذا الرسم البياني الذي يعرض نسبة نجاح المشاريع في وزارة الدفاع الأمريكية:


    أهداف هندسة البرمجيات


  •  تلبية حاجيات العميل meeting user’s needs،
  •  تكلفة إنتاج منخفضة low cost of production،
  •  كفاءة عالية high performance،
  •  قابلية النقل والاشتغال من جهاز إلى جهاز آخر portability،
  •  تكلفة إصلاح منخفضة low cost of maintenance،
  •  جودة عالية مما يضمن الاتكالية والاعتماد على النظام reliability،
  •  احترام موعد التسليم delivery on time.
يمكننا اعتبار كل هدف من الأهداف السابقة إكراها وتحديا في عملية صناعة البرمجيات، وغياب عنصر من تلكم العناصر قد يفضي إلى إفشال المشروع، مثلا عدم تلبية حاجيات ومتطلبات العميل=برنامج فاشل، عدم احترام الوقت أو الميزانية=برنامج فاشل، غياب الجودة أو احتواء البرنامج على أخطاء=برنامج فاشل...إلخ.

دورة حياة تطوير النظم SDLC


حينما نتحدث عن دورة حياة البرامج System Development Life Cycle، قد يتبادر إلى أذهاننا
أول وهلة أن الأمر يتعلق بإنشاء أول ملف من ملفات البرنامج وتنتهي هذه الدورة عند حذف
آخر ملف من ملفات البرنامج، وهذا ليس صحيحا لأن المقصود بدورة حياة البرامج أو دورة حياة
النظم هو بداية طلب النظام من طرف المستخدم وانتهاء بتسليمه إياه.
حينما نقول العميل Customer / Client أو المستخدم User / Utilisateur فنحن نتحدث عن نفس الفاعل الذي سيستفيد من خدمات النظام، حتى وإن كان العميل Customer غالبا ما يشير إلى الشخص الذي سيدفع تكلفة النظام / ممول النظام، ومصطلح المستخدم يشير إلى الشخص الذي سيستعمل النظام / مستخدم النظام، إلا أنه في هندسة البرمجيات يتم اعتبارهما واحدا في الغالب الأعم لذلك ستجد في المواد الإنجليزية يتم التعبير عنهما بنفس المسمى StackeHolder.
تمر عملية صناعة البرمجيات من مجموعة من المراحل التي تعرف بدورة حياة النظم البرمجية Sytem Development Life Cycle، والمتمثلة فيما يلي:

1. التخطيط Planning / Planification: خلال هذه المرحلة ينبغي أن نحدد بنية المشروع، والهدف من إنشائه، ودراسة المتطلبات الاقتصادية، والزمنية، والتنظيمية، لكي نقوم بوضع دراسة جدوى سليمة للمشروع.

2. التحليل Analysis / Analyse: خلال هذه المرحلة ينبغي أن نعرف من الذي سيستخدم هذا النظام، ومتى يمكن لكل مستخدم أن يستخدم النظام، وأين يستطيع كل مستخدم أن يتعامل مع النظام حسب طبيعته، في هذه المرحلة علينا جمع المعلومات بدقة وتحديد المهام والمتطلبات بناء على دراسة الجدوى التي حصلنا عليها في مرحلة التخطيط.

3. التصميم Design / Conception: خلال هذه المرحلة يتم تصميم النظام بمختلف مكوناته، من واجهات وملفات وقواعد بيانات، والتصميم ليس مقتصرا على الشاشات والواجهات الرسومية GUI،  وإنما يعني كذلك التصميم العملي والوظيفي Functional Design، بمعنى تصميم طرق التعامل مع البرنامج واختيار أفضل السبل لإنجازه بالشكل المطلوب وبجودة عالية، إذن فالتصميم يجمع بين الشكل والوظيفة Appearance and functionality.
يلعب التصميم في عملية صناعة البرمجيات نفس الدور الذي يلعبه في مجالات أخرى، فكما أن الميكانيكي لا يستطيع تجميع قطع غيار سيارة لم يسبق له أن تعامل معها إلا من خلال دليل تجميع، وكما أن صاحب محل صيانة الحواسيب لا يستطيع تركيب جهاز جديد عليه دون دليل تجميع، فكذلك شأن إنشاء برنامج دون العبور من مرحلة التصميم، فالتصميم هو ذلك التصور الذي سيقودك إلى بناء برنامج يلبي حاجيات العميل، فإن أتيت وبدأت بكتابة الكود مباشرة فذلك أشبه بشكل كبير بتجميع قطع لعبة Puzzle لم تشاهد صورتها الأصلية فنسبة الفشل إذن كبيرة جدا.
أيضا خلال هذه المرحلة، يفضل تقسيم النظام إلى أنظمة جزئية Sub-Systems لكي يتم تقسيم المشاكل الرئيسية إلى مشاكل فرعية sub-problems ليسهل حلها، لأن التعامل مع مشاكل صغيرة أهون من التعامل مع المشاكل الكبيرة، فلكي نتمكن من تجاوز المشاكل المعقدة نقوم بتفكيكها وتفتيتها.


4. الترميز Coding / Codage: يتوجب علينا في هذه المرحلة صياغة الحلول والنماذج والمخططات التي حصلنا عليها في مرحلة التصميم Design بشكل برمجي، عبر الاعتماد على إحدى لغات البرمجة المرنة التي بإمكانها أن تسع كل ما تم تسجيله من متطلبات وأغراض.
في غضون مرحلة الترميز
Coding يتم القيام بمجموعة من الاختبارات الوحدوية التي تعنى بكل وحدة على حدة بحيث يتم اختبار كل وظيفة Function وكل فئة Class وكل مكون Component ليتم التحقق من صحة الشفرات المكتوبة، ويسمى هذا النوع من الاختبارات ب: الاختيارات الوحدوية Les tests unitaires / unit testing


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

6. التوثيق Documentation: تعتبر هذه العملية من أهم العمليات التي لا ينبغي الاستهانة بها أثناء الانكباب على تطوير نظام ما، لأنها توثق لكافة مراحل صياغة الحل البرمجي وتعرض كافة المشاكل التي ظهرت في مختلف مراحل دورة النظام وحلولها، مما يسهل عملية الصيانة وإعادة الاستخدام وتطوير النظام، لأن كل جزئية لها توثيق خاص بها مما يضمن سهولة متابعة النظام واستكناه تفاصيله وبالتالي تسهيل السيطرة عليه.
غياب عملية التوثيق في المشاريع البرمجية الكبيرة قد يتسبب في توقيف عملية التطوير لأن المشروع سيصل إلى مرحلة متقدمة يصبح فيها من الصعب صيانة  ومعالجة ما مضى منه.
7. الصيانة Maintenance: تأخذ هذه المرحلة الحيز الأكبر من دورة حياة النظام، في غضونها يتم تصحيح النظام من كافة الأخطاء والشوائب، وإضافة تحسينات وزيادات تساهم في رفع جودة النظام.

الخاتمة

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