هكذا يربح المبرمجون !

21

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

العمل الحر:

ليس أَطْيَبَ للنفس من العمل بحرية، عِلْمًا أن الحرية لا تعني إطلاقا التقاعس أو التكاسل، وإنما تعني حرية اختيار ما يناسبك من مشاريع، وحرية تحديد الوقت الذي يكفيك لإكمالها.
إن كنت من هذا الصنف فسوف تجد ضَالَّتَكَ عند مواقع العمل الحر أو العمل المستقل كما يسميها البعض Freelance websites، وهي مواقع تسمح للمبرمجين بالانخراط فيها، ومن ثم يستطيعون البحث عن المشاريع المطلوبة والتي تقع في نطاق المقدور عليه (أي المشاريع التي يملكون أدواتها)، هذه المواقع تلعب دورا كبيرا في ترقية المبرمجين ماديا ومهنيا، إِذْ مع كثرة إنجاز المشاريع ستزداد الأرباح وتتراكم الخبرة.
لكن قبل أن تنخرط في أي موقع من مواقع العمل الحر، أنشئ لك حسابا على بايبال Paypal أو احصل على بطاقة بنكية لتحويل مستحقاتك إلى حسابك.
تذكر: ابدأ بهذه الخطوة أولا، لأن بعض المواقع تستلزم منك تسجيل الحساب الذي سيتم تحويل العائدات إليه.
توجد عدة مواقع خاصة بالعمل الحر، أشهرها موقع Freelancer ، وموقع UpWork، وموقع Toptal، وغيرهم..
دون أن نغفل عن ذكر بعض المواقع الخاصة بالخدمات الصغرى ك Fiverr، و Khamsat، إِذْ يكفي أن تقوم بتعريف الخدمة التي تستطيع تقديمها مقابل أجر صغير، وإن كانت خدمتك مطلوبة فسوف تستقبل الطلبات.
مواقع العمل الحر تستلزم صَبْرًا حتى تظفر بأول مشروع، وتستلزم صِدْقًا حتى تضمن ثقة العملاء، دون الصبر والصدق اِلْغِ حسابك من مواقع العمل الحر فلن تبلغ مقصدك إلا بهما، وتستلزم أيضا أن تخصص لها بعض الوقت لتتابع العروض، فإن بدا لك أن العروض لا علاقة لها بحقل تخصصك، فلا بأس أن تواكب احتياجات العملاء عبر الانتقال إلى التخصصات المطلوبة وتعلمها.

العمل في الشركات:

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

العمل لوحدك:

وهي من الخيارات المفضلة عندي شخصيا، ويتمثل في إنشاء برامج متعددة الطلب Generic Softwares وتسويقها، كأن تنشئ موقعا لكراء السيارات، ثم تقوم بتسويقه عند وكالات كراء السيارات في منطقتك، أو أن تبني موقعا تعريفيا تضع عليه كافة منتجاتك، ثم تقوم بإشهارها.
ونصيحة مني، حاول أن تنشئ من المنتوج الواحد عدة أصناف بمقاييس متنوعة حسب القدرة الشرائية للعميل، وحتى تُمَكِّنَ الزبناء من اختيار ما يناسبهم، وحتى تعطي لعملك طابع الاحترافية (النسخة الذهبية بكامل المزايا، النسخة الفضية بالمزايا الأساسية، وما إلى ذلك..أما النسخة الخشبية فلا أريدها )
وَاحْرِصْ أن تتفادى البرامج التي يطلبها منك شخص واحد فقط Bespoke Softwares، لأنك ستضيع وقتك معها ولن تتمكن من إعادة تسويقها لأنها ستموت عند تسليمها لصاحبها، فإن كُنْتَ لَا بُدَّ فاعلا، فاحرص أن تقبل البرامج التي يكون مردودها كافيا، واتفق دائما مع العميل على حيثيات المشروع صغيرها وكبيرها حتى لا تقع معه في مشاكل عند الانتهاء خاصة مسألتي الوقت ومكونات المشروع.
وَلَكَمْ أتمنى أن تضع مع عميلك عقدا يضم ما اتفقتما عليه، حتى إذا عَنَّ أَمْرٌ جديد وَاجَهْتَهُ بمحتوى العقد، أو تَكَاسَلْتَ أنت عن شيء قد طلبه منك، واجهك به فإن مرور الأيام مُرٌّ، وكم من صغيرة غضضنا الطَّرْفَ عنها كَرَّهَتْنَا في البرمجة (وْفِي اللِّي خَلَّفُوهَا) فَاعْقِلْ بارك الله فيك.

برمجة الألعاب والتطبيقات:

بعض المبرمجين يركزون جهودهم على سوق الموبايل، فلا يشغلون بالهم مع باقي أصناف المشاريع، وهم دُهَاةٌ يعلمون من أين تؤكل الكتف، يحتفظون بأعصابهم سليمة من ضغوط العميل، فعلاقتهم به ليست علاقة مباشرة قائمة على الأخذ والرد والشرط والجواب، وإنما قائمة على هذا تطبيقي إن أعجبك فَهَاتِ مقابله، وإن لم يعجبك فَفِي السوق غيره.
هؤلاء المبرمجون الدهاة، يأتون بالفكرة التي قد تحظى بالقبول على مستوى رواد سوق الموبايل، فَيُفَكِّكُونَهَا ذهنيا ثم يقومون بصياغتها برمجيا، ويرفعونها على السوق المستهدف وَرَبُّكَ يرزق من يشاء.
عمود الربح في تطبيقات الموبايل يكون عبر إدراج إشهارات فيها، أو عبر عرضها بشكل غير مجاني، أو بشكل مجاني جزئي، ومن شاء كامل المزايا فليدفع!
تريد مثالا؟
لعبة فيها عدة مستويات Levels، المستوى الأول والثاني بالمجان، وما بعدهما مُغْلَقٌ دَرَاهِمُ العميل سِمْسِمُهَا!

خاتمة

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

عن تلك القصة التي بطلها: أنت ! (الجزء الأول)

18

حتى تنتهي القصة ب "وعاش في سلام" لابد أن يترك البطل ذراعه في الحرب، وهل كنت فعلا تظن أن الحظ يحالف الهوى؟ بل خذها يقينا مني أنه يخالف الهوى، ولا تسألني عن الدليل..
فإن السماء لا تمطر ذهبا..
كما أن الدنانير تتساقط بقدر قطرات العرق..
وهل بعد قول المولى تبارك وتعالى ﴿ وَأَن لَّيْسَ لِلْإِنسَانِ إِلَّا مَا سَعَىٰ ﴾ قول آخر؟!
خليلي..
مَنَّ الله عليك أن صَيَّرَكَ مبرمجا، فأنت في نعمة لو أمعنت النظر..
فإن كُنتَ متعثرا في تحصيل ثمار حِرْفَتِكَ فلأنك أَحَدُ اثنين:
لم تتمكن بعد من تخصصك في البرمجة..
أو أنك متمكن حقا، لكنك لم تجد مرشدا..
إن كنت من الصنف الأول فَاصْغِ إلي جيدا، واعمل بكلامي، فإنني أحببتك منذ أن جلست تقرأ كلامي هذا، ولست ببخيل حتى أحرم حبيبي سبيل التقويم..
لكن قبل أن أدلك على سبيل التقويم، هلا دللتك على سبيل التقييم؟
بلى، فإن التقويم بلا تقييم تنويم، ولن ترقى إلى ما تصبو إليه إن أسأت التقويم، وهل يصلح العلاج إلا بعد التشخيص؟!
ركز معي..
خذ ساعة من وقتك، تتفرغ فيها لنفسك، ثم فكر مَلِيًّا في تخصصك البرمجي الذي قررت أن تزاوله، ولا تشتت بالك بكثرة التخصصات، فإن الكثرة تدفع إلى الانتقائية، والانتقائية مدعاة إلى القبوع في ذيل التخصص.
حدد تخصصا وحيدا فقط، أ تريد احتراف برمجة الويب؟ برمجة سطح المكتب؟ برمجة تطبيقات الموبايل؟ أم ماذا تريد؟
ولا تسألني عن أيها أكثر مردودية، وأشدها طلبا؟ لأن الحال ما يزال مبكرا..
بعد أن تضرب الأخماس للأسداس، وتقدر المصالح والفوائد، حدد تخصصك واصنع قصتك، ولا تُدخل أحدا في قرارك، حتى أنا لا تشركني فقد أخذلك، لأنني مستغرق في تخصصي..
قَرِّرْ واصنع قصتك، ثم انتقل إلى مرحلة تحديد النقص..
بصيغة أخرى: ما الذي تستصعبه في تخصصك؟ ما الذي تهرب منه دوما؟ مالذي ينغص عليك عيشك إن مَرَّ طيفه ببالك؟
قد يكون واحدا أو أكثر، اجمعهم وسجلهم في دفترك..
ثم ابدأ بهم واحدا واحدا، لا تغادر منهم أحدا حتى يستحيل في ذهنك كالعصا في يد الأعمى..
ثم بين الفينة والأخرى راجع مرحلة تحديد النقص، حتى يستقيم حالك في تخصصك، ثم انتقل إلى مرحلة النسخ البَنَّاء..
أَ وَ تدري ما النسخ البناء؟
أن تأخذ مشروعا أعجبك، وتنسج على غراره مشروعا آخر من صنعك..
تريد مثالا: أعجبتك لعبة Flappy Bird، لما لا تصنع مثلها بنفسك؟
ستكون تجربة فريدة صدقني، لأنك ستدخل في تَحَدٍّ مع نفسك، وستواجه صعوبات وإكراهات، وهي مسألة طبيعية جدا، فلا تستسلم يا خليلي، فأنت بطل، وهذه قصتك، ولا أحد سواك سيصنعها، فاصنعها ولو كلفك ذلك أن تشتري سورس كود اللعبة وتنقب فيه، فَلِسُمُوِّ الهدف تَذِلُّ الوسائل..
ها قد ساويتك يا خليلي بثاني الاثنين: ذاك الذي يملك الأدوات لكنه لم يجد مرشدا يدله على سبيل الربح..
فتنفس بعمق، وتعال معي لنواصل في الجزء الثاني من هذه المقالة، سُبُلَ الربح من البرمجة، على أن تعدني بشيء واحد، أو بشيئين، بل بثلاثة !
أما الأول: أن تضع في اعتباراتك معاني الحرام والحلال، فلا تطاوع نفسك في توظيف ما حباك الله من معارف في الحرام وإن زينته لك نفسك، فإن الدنيا غمضة عين.
وأما الثاني: أن تدرك يقينا أن الله عز وجل كرمك بالعقل، فلا تصدق من يقول لك: أن هذا الأمر أو ذاك صعب ولا يمكنك بلوغه، فهو كاذب، وبعون الله أنت قادر على تحقيق كل ما تريد، فقط: ثق أنك قادر، ثم بادر !
وأما الثالث: ألا تفشل في مراحل التعلم، وخذ كامل وقتك في المدارسة والممارسة، ولا تزدري حالك بالمقارنة مع غيرك، فإنك نسيج وحدك، وليس ببعيد أن تتجاوزنا جميعا.
فاصنع قصتك يا خليلي، دام لكم البشر والفرح!

يسألونك عن: ASP.NET Routing

7

حول سلسلة "يسألونك عن"
سلسلة "يسألونك عن": عبارة عن مجموعة من المقالات التقنية الرامية إلى شرح بعض المسائل البرمجية التي لم يتناولها القلم العربي

المقدمة:

جرت العادة أن تؤشر عناوين URL إلى ملفات موجودة على السيرڤر، وكل ملف يمكن الوصول إليه عبر عنوان واحد يبرز مساره الفعلي Physical Path في مجلدات السيرڤر، كما يوضح الرابط التالي، الذي يحيل إلى صفحة اسمها Login.aspx:
Http://www.Website.com/Login.aspx
هذا التوجيه المعتمد من طرف نمط Web Forms، كان معتمدا قبل ذلك في Classic ASP، وكذلك في أغلب لغات برمجة الويب، قبل أن يظهر نمط MVC ويأتي معه بطريقة جديدة لتوجيه العناوين، وهي ما يعرف ب URL Routing، فماذا تكون؟ وكيف نستطيع استخدامها في مشاريع ASP.Net؟

في العمق:

بداية، ينبغي أن نعلم أن توجيه العناوين (وهي الترجمة التي سنعتمدها في هذه المقالة للتدليل على Routing) عبارة عن آلية تسمح باعتماد شكل أو عدة أشكال لعناوين URL، ومن ثم تسهيل عملية الوصول إلى محتويات المشروع دون الحاجة إلى التأشير إلى ملف فعلي Physical File وإنما يكون التأشير إلى Action داخل Controller.
في تقنية ASP.Net، نستطيع التحكم في نمط التوجيه Routing Pattern، عبر الذهاب إلى الكلاس RouteConfig الموجودة داخل المجلد App_Start، لكن قبل أن نغوص في أعماق الكود، تعالوا بنا نطالع الخطاطة التالية التي تبين لنا كيف تتم عملية التوجيه:
في الأول يأتي الطلب من المتصفح لعنوان ما، فيقوم محرك التوجيه Routing Engine داخل الويب سيرڤر، بمعالجة الطلب، ومقارنته بالأنماط المسجلة في جدول التوجيه Routing Table، فإن توافق العنوان المطلوب مع أحدها تم إستدعاء Action المطلوبة، وإلا فإنه يتم إرجاع الخطأ 404 دلالة على أن المورد المطلوب غير موجود.
افتراضيا في ASP.NET MVC يتم اعتماد نمط التوجيه التالي:

Http://www.Website.com/Controller/Action/1

بحيث Action تمثل اسم Action، و Controller تمثل اسم Controller، و Id يمثل البرامتر المراد تمريره إلى الصفحة المتوجه إليها، وغالبا ما يكون هذا البرامتر اختياريا حتى لا يتم إلزام بعض Actions التي لا تستعمل برامترات به.
لو دخلنا إلى الكلاس RouteConfig الموجودة داخل المجلد App_Start، سوف نجد بداخلها وظيفة اسمها RegisterRouters تستقبل برامتر اسمه routes من نوع RouteCollection، وهذا هو محتواها:

        public static void RegisterRoutes(RouteCollection routes)

        {

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");



            routes.MapRoute(

                name: "Default",

                url: "{controller}/{action}/{id}",

                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

            );

        }

هذه الوظيفة هي التي تسمح لنا بتعريف أنماط التوجيه، وافتراضيا تحتوي على نمط جاهز، يستقبل عدة برامترات، يظهر منها في الكود أعلاه ما يلي:
  • البرامتر name: من خلاله نعطي لنمط التوجيه اسما، حتى نميزه عن غيره من الأنماط التي نود تعريفها.
  • البرامتر url: من خلاله نحدد شكل نمط التوجيه، وهو هنا بنفس الكيفية التي تحدثنا عنها آنفا.
  • البرامتر default: من خلاله نعطي العناصر الافتراضية الموافقة للنموذج الذي تم تعريفه، بحيث ستتم إحالتنا عند تصفح المشروع إلى الرابط التالي:
Http//www.Website.com/Home/Index
بحيث Home هو اسم Controller الافتراضي المعرف في جدول أنماط التوجيه، و Index هو اسم Action الافتراضي، ولأن id اختياري Optional، فلن يحدث خطأ عند استدعاء الرابط أعلاه.
قبل تعريف نمط التوجيه داخل الوظيفة، ستلاحظون وجود السطر التالي قبلها:


            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

الوظيفة IgnoreRoute دورها هو منع الوصول إلى المسار أو الملف الممرر لها، في هذه الحالة، ستمنع الطلبات التي تريد ملفات بامتداد axd، بالمثل يمكننا منع الوصول إلى ملف معين أو Action ما، كما يلي:

public static void RegisterRoutes(RouteCollection routes)

        {

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");



            routes.IgnoreRoute("Books/Display");



            routes.MapRoute(

                name: "Default",

                url: "{controller}/{action}/{id}",

                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

            );

        }

في المثال أعلاه، لن يستطيع المستخدم الوصول إلى Action المسماة Display والموجودة داخل Controller المسمى Books، لأننا استثنيناها في Routing عبر استدعاء الوظيفة IgnoreRoute.

حتى يكون Routing شغالا لا بد من تسجيله عند انطلاق التطبيق داخل الحدث Application_Start التابع للملف (المخضرم) Global.asax، الذي لو انتقلنا إليه سنجد أنه بالفعل يحتوي مسبقا على السطر التالي الذي يقوم بتسجيل جدول أنماط التوجيه:

RouteConfig.RegisterRoutes(RouteTable.Routes);

داخل الوظيفة RegisterRoutes يمكننا التحكم في شكل عنوان url عبر تغييره من قيمة البرامتر url، وكذلك يمكننا تغيير Action و Controller الافتراضيين من البرامتر default، كما يبين المثال التالي:

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.IgnoreRoute("Books/Display");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Books", action = "List", id = UrlParameter.Optional }
            );
        }

خاتمة

إلى هنا أحبتي في الله، ينتهي الشطر الأول من مقالتنا حول توجيه العناوين في تقنية ASP.Net، نلتقي في المقالة الثانية إن شاء الله لشرح بعض الأمور المتعلقة بالتوجيه دائما، والتي سيكون موضوعها هو تمرير البرامترات بين Actions ودور جدول التوجيه Routing Table في ذلك.
دام لكم البشر والفرح.


على مائدة أَكْوَادٍ دسمة !

23
استدعى مدير الشركة أفضل أربعة مبرمجين عنده، وقال لهم: لقد أَبْهَرْتُمُونِي بما تحققونه من نجاح منقطع النظير في كل ما أكلفكم به، ولا أملك إلا أن أقف لكم وقفة إجلال وإكبار لَعَلِّيَ بها أُوَفِّيكُمْ بعض أفضالكم، وما أحوجني - وأنا مديركم - أن أجالسكم على هذه المائدة وأستفيد من خبراتكم وتجاربكم، لعلي أصطنع بها يدا جديدة في البرمجة، أو أُزِيحَ بها ركام الجهل الذي يعوقني على أن أكون مثلكم!
ابتسم أكبر المبرمجين سنا في خجل وهو يقول:
هذا تواضع منك يا حضرة المدير، وما دام جلوسنا معك على هذه المائدة سيضفي عليك بهجة وسرورا فَلْيَطِبْ خاطرك إذا، فإن لك عندنا أياد بيضاء، ونتودد إليك برد بعض جمائلك!
أطرق المدير برأسه، ثم رفعه مبتسما وهو يقول:
على مائدة أكواد دسمة إذن!
فجلسوا أربعتهم، خامسهم مديرهم، وَخَيَّمَ على القاعة صمت طويل قبل أن يكسره أصغر المبرمجين قائلا:
إن كنت ذاكرا سببا من أسباب تطويع الكود في يدي، فلن أغفل عن سبب الحفظ، ولست أعني بالحفظ كتابة الكود على ورق واستظهاره، أبدا..
فإن الكود يُحفظ بالممارسة، وكثرة المدارسة..
وإذا تحقق رسوخ الكود في الذهن، كان حل المعضلات المتعلقة به أو القريبة منه من أيسر ما يكون، ألا ترى معي قدرة الحلاق على قص الشعر والمقص في يده؟ فكذلك حيازة الكود في الذهن، فهو أداة المبرمج، ووسيلته لبلوغ غايته..
ولا أزيد على سبب الممارسة في ترسيخ الحفظ إلا سبب البحث والتنقيب، فإنني كلما واجهت مشكلة بحثت عنها، وما خذلتني محركات البحث أبدا ما دمت أكتب المشكلة على الوجه الذي ينبغي!
هذا سر براعتي: ترسيخ الكود عبر الممارسة، وتجاوز المشكلات عبر آليات البحث!
ابتسم المدير في إعجاب، ثم التفت إلى المبرمج الثاني آذنا له بالكلام، فقال بهدوء:
أما أنا يا حضرة المدير، فقد طَوَّعْتُ الكود عبر حيازتي للأساس المعرفي المتين، فما خضت غمار مشروع إلا وقدمت له بالدراسة والاجتهاد، وأذكر جَلِيًّا أنك حينما كلفتني بمشروع ويب بتقنية ASP.NET MVC، وكان من ضمن مكونات المشروع مجزوءة متعلقة بالمراسلات السريعة بين الدعم الفني وبين زوار الموقع، وأبلغتك حينها أنني أمام خيارين:
1. إن كنا في حرج وضيق من الوقت، اعتمدت على المراسلات بواسطة قاعدة بيانات، وهو أمر سهل لكنه غير فعال!
2. وإن كان أمامنا وقت فاسمح لي بالبحث عن الحل الأنسب!
وقد أذنت لي حينها بالبحث عن الحل الأنسب، فوجدت مكتبة تسمى SignalR، لم أكن قد سمعت بها، لكنني وسعت صدري، ودرستها من كتاب، حتى فهمتها، فأقحمتها في المشروع فكانت النتيجة كما رأيتها، عمل مشرف وبالتقنية المناسبة!
ولا أزيد على سبب القراءة والدراسة في تطويع الكود وبلوغ المساعي إلا سبب تقليل الموارد، فلو حملت أكثر من كتاب، ما كنت لأنجز شيئا، لأن الكثرة تدفع إلى الانتقائية، والانتقائية مدعاة إلى المماطلة!
حملت كتابا واحدا فقط يا سيدي، فالتهمته وأسقطت ما جاء فيه على المشروع فكان على ما كان عليه!
وإنني لأذكر نصيحتك جيدا حينما قلت لي مؤكدا:
أصعب من بدئك من الصفر: شعورك بأنك صفر!
ابتسم المدير من جديد مفتخرا، وأدار وجهه ناحية المبرمج الثالث وأومأ له بالكلام، فقال بصوت دافئ:
أما أنا فقد نفعتني لما صفعتني!
كنتُ مبرمجا محترفا، حُزْتُ طَرَفَيْ البرمجة: تنظيرا وتطبيقا..
لكنني كنت متهاونا، لا أعير للوقت بالا، أنغمس في المشروع غير جاد، فيمضي الوقت ويغضب العميل...
فأترنح أنا وأميل!
أذكر جيدا حينما صفعتني بكلام قاس، قلت لي حينها:
كن أنت وكفى، فإذا بدر الخطأ قل: مني، وإن برز الخلل قل: أنا السبب!
كفاك تهربا، وتحميلا للجن الأزرق مسؤولية تقصيرك، فتكون بذلك كتلك التي "خانها ذراعها فقالت مسحورة" على حد تعبير إخوتنا في ليبيا..
وذكرتني بمقولة نابليون بونابرت المؤلمة: "لا تفسر بالفأل السيء قلة كفاءتك"!
كان كلامك جارحا حينها لكنه كان بصدق وسيلة نجاة، علمت يومها أنها قسوة كقسوة الأب، وإنما جنحتَ إليها لمصلحتي..
فَغَيَّرْتُ من حالي، وبدأت أُقَسِّمُ عملي على الوقت المتاح، واشتغلت بجد واجتهاد، فكان من نجاحي ما رأيت يا حضرة المدير..
وأعود وأقول:
نَفَعْتَنِي لما صَفَعْتَنِي!
حرك المدير ثغره بابتسامة عريضة، ثم أومأ للمبرمج الرابع وكان أكبرهم سنا مشيرا إليه بالكلام فقال:
حضرة المدير، لقد وظفتني عندك وأنا كبير السن..
قد اشْتَدَّ عودي، وَضَعُفَ كودي..
كنت أبرمج بلغات أكل الدهر عليها وشرب، لكن مع ذلك وضعتَ ثقتك فِيَّ، وقلت لي:
كن نوحا، واجعل أعداء نجاحك قومه.. ولسوف تنجح وسيغرقون!
زرعت كلماتُك فِيَّ حماسا رهيبا، فكنت أصل الليل بالنهار من أجل تحصيل مستجدات التقنية، لكنني كنت لا أتقدم قيد أنملة..
فبدأت أفقد الثقة في نفسي، وصرت ألجأ إلى زملائي في البرمجة، كلما وقعت في مشكلة اعتمدت عليهم وأتيت إليهم..
فَكَثُرَ زَلِّي وَتَقَلَّصَ ظِلِّي..
لأن كثرة السؤال مذلة، وماذا لدى فاقد الأداة إلا السؤال؟!
نسيت أنني مبرمج وفقدت ثقتي في نفسي، فكان كل العمل الذي أقوم به قوامه دعم زملائي، بل إنني كنت في كثير من الأحيان أكتب الكود على ورق، وأمضي في الباحة جيئة وذهابا مستظهرا..
فلما يئست وقررت ترك البرمجة..
جاءت كلمتك الباعثة..
كلمتك التي انتشلتني من براثن الفشل، ووضعت على رأسي تاج الثقة..
أ تذكر حينما وجدتني أعتمد على أحد الزملاء في عملي فقلت لي باقتضاب:
لا تعتمد على أحد، اعتمد على الأحد!
بهذه الكلمة صنعتني، وأردفتها بكلمة أخرى قائلا:
إنْ تاجُك قَل، إنتاجُك قَل..
فسألتك عن معناها، فأجبتني: إذا قَلَّتْ ثقتك بنفسك قل إنتاجك!
فحددتُ حينها حقل تخصصي، وانكببتُ عليه متعلما، لا يذعرني عن هدفي شيء حتى بلغته، وما بلغته إلا باعتمادي على الحي الذي لا يموت، ثم بثقتي في نفسي وإيماني بمقدرتي على بلوغ الرغاب وتذليل الصعاب..
وكذلك كان!
فإن كنت في القمة فَلِأَنَّ كلماتك كانت سلالم..
وطوبى لمن وجد من يغرس في سويداء قلبه معاني التعلق بالله واليقين التام أَنْ لا غايةَ تُنْشَد إلا بمشيئته ولا تُبْلَغ إلا بإرادته ولا تُدْرَك إلا بتوفيقه..
ولن أنسى كلماتك ما حييت:
لا تعتمد على أحد، اعتمد على الأحد..
وإن تاجك قل..
إنتاجك قل!
فَلِلَّهِ دَرُّكَ مِنْ مُديرٍ، فإن قضينا مساعيك فنحن صنائعك، وما توفيقنا إلا بالله!

الفرق بين الواجهات Interfaces وبين الفئات المجردة Abstract Classes

2

الفئات المجردة Abstract Classes

الفئات المجردة Abstract Classes هي تمثيل مجرد لنوع معين، ومن مقتضيات هذا التمثيل ألا يكون له وجود واقعيا إذ يبقى في جيز التجريد والاصطلاح فقط، مما يترتب على هذا المعنى من إلغاء لعملية الاستنساخ  Instanciation، إذ من المعلوم أن الفئات المجردة في البرمجة الكائنية التوجه لا تسمح باستنساخ كائنات منها ويبقى دورها محصورا في عملية تعريف العناصر الأساسية للفئات بغرض توريثها إلى الفئات المشتقة.
ويمكن للفئة المجردة أن تشتمل على وظائف مجردة abstract methods قابلة لإعادة التعريف على مستوى الفئات المشتقة، كما يمكنها أيضا ألا تشتمل على أية وظيفة مجردة، والوظائف المجردة هي وظائف لا تحتوي على أية أوامر برمجية Implementation، بل تعرض فقط تعريف الوظيفة أو ما يعرف بالتوقيع Signature كما يوضح المثال التالي:

    abstract class Person
    {
        string _name;
        public Person (string name)
        {
            _name = name;
        }
        abstract public void Work();
    }
الفئة Person فئة مجردة وعلامة ذلك أمر التعريف abstract الذي تقدمها، وهي تحتوي على حقل من نوع نصي اسمه _name يأخذ قيمته في مشيد الفئة Constructor (علما أن المشيد في الفئات المجردة لا معنى له، بيد أن دور المشيد هو تشييد الكائنات في زمن الاستنساخ، ومادام الاستنساخ غير ممكن من الفئات المجردة فلا قيمة لوضع المشيد هنا، لكن يتم وضعه لتحديد قيم بدئية للحقول المشتركة بين جميع الفئات المشتقة التي ترث من الفئة المجردة، ويمكن تغيير قيمة الحقل في المشيدات الفرعية عبر الكلمة base  كما سيأتي معنا).
بعد ذلك قمنا بتعريف وظيفة مجردة abstract method أسميناها Work، هاته الوظيفة سنقوم بإعادة تعريفها في الفئات المشتقة عبر استخدام الأمر Override كما يعرض الكود التالي:
    class Programmer:Person
    {
        string _speciality;

        public Programmer(string speciality, string name) : base(name)
        {
            _speciality = speciality;
        }

        public override void Work()
        {
            Console.WriteLine("I am Programmer :) ");
        }
    }
في الكود أعلاه، قمنا بإنشاء فئة اسمها Programmer مشتقة من الفئة الرئيسية المجردة Person، داخل هاته الفئة المشتقة قمنا بإسناد قيمة بدئية للحقل _name من جديد عبر الأمر base الذي يحيل إلى الفئة الأصلية، كما قمنا بإعطاء قيمة بدئية لحقل جديد أسميناه Speciality.
ثم في الجزء الأهم، قمنا بإعادة تعريف الوظيفة المجردة Work من خلال الأمر Override، وبالتالي عند استدعاء هاته الوظيفة عبر كائن مستنسخ من الفئة Programmer  سيتم تنفيذ الكود الموافق لها، كما يوضح الكود التالي:
class TestProg
    {
        static void main()
        {
            //Create new instance from Programmer Class
            Programmer programmer = new Programmer("Desktop", "Khalid ESSAADANI");

            //Call Work method from derived class
            programmer.Work(); //Print: I am Programmer
        }
    }
إذن كخلاصة، فالفئات المجردة هي عبارة عن فئات تقوم بتعريف العناصر العامة لنوع معين، ولا تسمح بعملية الاستنساخ المباشر منها بل تسمح بذلك فقط عبر آلية التوريث /  الاشتقاق Inheritance بحيث يمكننا استنساخ كائنات فقط من الفئات الفرعية المشتقة من هذه الفئات المجردة.

الواجهات Interfaces:

تقوم الواجهة Interface بتعريف الوظائف التي على الفئات - التي ستقوم بتطبيقها – إعادة تعريفها، وكما هو الحال في الوظائف المجردة فإن الواجهات لا تحتوي على أية أوامر برمجية Implementation، بل تحتوي فقط على تعريف لتوقيعات الوظائف الواجب إعادة تعريفها على مستوى الفئات التي ستستخدم هاته الواجهة.
ولعل سؤالا ملحا ينخر في ذهنك الآن: إذن لماذا تصلح الواجهات مادامت تؤدي تقريبا نفس الدور الذي تؤديه الفئات المجردة؟
سؤال وجيه و حق له أن يطرح، وكجواب مبدئي يمكننا القول، أن الواجهات في اللغات الحديثة مثل سي شارب وجافا وفيجوال بيسك دوت نيت، أتت كحل حاسم لأزمة الوراثة المتعددة Multiple inheritance، إذ من المعلوم أن هذه اللغات الثلاثة التي ذكرناها لا تسمح بالوراثة المتعددة، بمعنى أن فئة معينة لا تستطيع أن ترث من أكثر من فئة رئيسية، بيد أن التسلسل المسموح به هو فئة فرعية ترث من فئة رئيسية واحدة.
فلما كان الأمر كذلك، قامت هذه اللغات بتقديم بديل للوراثة المتعددة متمثلا في الواجهات، حيث صار للفئة الواحدة أن تطبق واجهة أو عدة واجهات في الوقت عينه وبالتالي يكفي أن ننشئ الواجهات التي سنحتاجها ونضع فيها ما نشاء من تعريفات للوظائف Specification، شريطة ألا يتعدى التعريف حدود التوقيع Signature لأن الواجهات لا تحتوي على أوامر برمجية Implementation، ثم بعد ذلك نأتي إلى الفئة المستهدفة ونعيد تعريف عناصر الواجهات عليها بكيفية قريبة جدا من طريقة الوراثة، حيث في لغة الفيجوال بيسك دوت نيت نقوم بتطبيق الواجهة في فئة ما من خلال الكلمة المحجوزة Implements وكذلك في لغة جافا تتم عملية التطبيق عبر استخدام الكلمة المحجوزة implements، بينما في لغة سي شارب، يبقى رمز تطبيق الواجهات هو نفسه رمز الوراثة (نقطتان هكذا : ).
وهذا مثال على إنشاء واجهة في لغة سي شارب:
public interface IVehicle
    {
        string Model { get; set; }
        DateTime ManuFacturedDate { get; set; }
        byte Age();
    }
الواجهة أعلاه اسمها IVehicle / المركبات، تحتوي على تعريف لخاصيتين وهما موديل المركبة Model و تاريخ التصنيع ManuFacturedDate، وعلى وظيفة اسمها Age، لو لاحظت معي فإننا اكتفنيا في تعريف الخصائص بذكر get و set  فقط دون تحديد التفاصيل، لأن الواجهات كما ذكرنا تشمل التعريف Specification وليس الكود Implementation.
إذا أردنا تطبيق هاته الواجهة في فئة ما، فالمسألة بسيطة وصيغتها كما تقدم شبيهة بصيغة الوراثة أي كما يلي:
    class Car : IVehicle
    {
        public string Model { get; set; }
        public DateTime ManuFacturedDate { get; set; }


        public byte Age()
        {
            return (byte)(DateTime.Now.Year - ManuFacturedDate.Year);
        }
    }
جدير بالذكر أن تطبيق واجهة ما في إحدى الفئات يستلزم إعادة تعريف جميع العناصر التي قامت الواجهة بتعريفها، كما هو الحال في المثال أعلاه، فقد قمنا بتعريف الخصائص Model و ManuFacturedDate وكذلك الوظيفة Age التي تسمح لنا بالحصول على عمر السيارة من خلال طرح تاريخ التصنيع من التاريخ الحالي سنويا.
ويمكن للفئة الواحدة أن تطبق عدة واجهات كما يعرض المثال الآتي:
public interface IVehicle
    {
        string Model { get; set; }
        DateTime ManuFacturedDate { get; set; }
        byte Age();
    }

    public interface IColor
    {
        string Color { get; set; }

        bool CompareColors(string color);
    }

    class Car : IVehicle, IColor
    {
        //IVehicle
        public string Model { get; set; }
        public DateTime ManuFacturedDate { get; set; }


        public byte Age()
        {
            return (byte)(DateTime.Now.Year - ManuFacturedDate.Year);
        }


        //IColor
        public string Color { get; set; }

        public bool CompareColors(string color)
        {
            if (Color.Equals(color))
                return true;
            else return false;
        }


    }

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

الفروق بين الفئات المجردة والواجهات:

1. الفئات المجردة يمكنها أن تحتوي على وظائف بأوامر برمجية Implementation، بينما الواجهات لا تسمح بذلك وتكتفي فقط بتقديم تعريفات للعناصر.
2. يمكن للفئات المجردة أن تحتوي على ما تحتويه الفئات العادية كالمشيدات Constructors  والمهدمات Destructors بينما بنية الواجهات لا تسمح بذلك.
3. يمكن للفئة الواحدة أن ترث من فئة مجردة واحدة، بينما يمكنها أن تطبق أكثر من واجهة.
4. الفئات المجردة تبدأ بالكلمة abstract بينما تبدأ الواجهات بالكلمة interface.
5. على الفئة التي تستخدم واجهة ما، إعادة تعريف جميع عناصرها، بينما في حال الوراثة من فئة مجردة فهي ليست ملزمة بذلك.
6. يستحسن استخدام الفئات المجردة حينما نحتاج إلى إعادة تعريف بعض عناصر الفئة الرئيسية فقط على مستوى الفئات البنات، بينما يستحسن استخدام الواجهات حينما نحتاج إلى إعادة تعريف جميع العناصر على مستوى الفئة.

لهذه الأسباب يفشل الناس في البرمجة !

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

أولا: العجلة


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

ثانيا: كثرة الموارد


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

ثالثا: غياب الخطة والرؤية الواضحة


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

رابعا: السعي إلى الربح السريع


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

خامسا: النقاشات الجانبية


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

سادسا: التقليد


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

تخفيضات بنسبة 50% في الحقيبة البرمجية إلى غاية شهر يونيو القادم

34

مقدمة

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

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


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

أنا مبتدىء، هل تناسبني الحقيبة البرمجية؟


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

ما الذي سأستفيده من الحقيبة البرمجية؟


تحتوي الحقيبة البرمجية على عشرات المحاضرات القوية والمتنوعة، والتي ستعلمك العديد من التقنيات البرمجية نذكر منها على سبيل المثال لا الحصر:
  • محاضرات كافية لأساسيات البرمجية بلغة الفيجوال بسيك 2015 من الصفر
  • محاضرات كافية  للبرمجة الكائنية التوجه Object Oriented Programming
  • محاضرات كافية  لبرمجة الواجهات وشرح أهم الأدوات
  • محاضرات كافية في أساسيات التعامل مع MS SQL Server 2014
  • محاضرات كافية في برمجة قواعد البيانات بالوضع المتصل Connected Mode
  • محاضرات كافية في برمجة قواعد البيانات بالوضع المنفصل Disconnected Mode
  • محاضرات كافية في برمجة قواعد البيانات باستخدام الإجراء ات المخزنة Stored Procedures
  • محاضرات كافية في التعامل مع البيانات المحفوظة في ملفات XML
  • محاضرات كافية في العديد من التقنيات والآليات التي ستحتاجها في برمجة المشاريع
  • محاضرات كافية في التحزيم و الإعدادات وحماية البيانات من SQL Injection
  • إنشاء مشروع إدارة الطلبة من الصفر بقاعدة بيانات من نوع MySQL
  • إنشاء مشروع إدارة المبيعات من الصفر بقاعدة بيانات من نوع MS Access

ما هو سعر الحقيبة البرمجية كاملة؟


قبل هذا التخفيض، كان سعر الجزء الأول من الحقيبة هو 70 دولارا أمريكيا، والجزء الثاني كان سعره 100 دولارا أمريكيا.
أما الآن فالسعر الشامل للحقيبة البرمجية كاملة بجزأيها الأول والثاني هو 85 دولار أمريكي، وهذا التخفيض محدود ابتداء من التاريخ الحالي إلى غاية نهاية شهر يونيو القادم إن شاء الله (30/06/2016).

أريد شراء الحقيبة البرمجية كيف أتصرف؟


توجه إلى أقرب وكالة لتحويل الأموال مثل وكالات ويسترن يونيون Western Union، وقم بتحويل المبلغ إلى المعلومات الآتية:
Full name: Khalid ESSAADANI
Identification card number: IB191359
Country: Morocco
City: Beni Mellal
بعد القيام بالتحويل، قم بأخذ صورة لوصل الحوالة، وأرسلها إلى البريد التالي:
mobarmijoun@gmail.com
و ستتم مراسلتك بجميع الدروس عبر بريدك الالكتروني.


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

في حفظ الله ورعايته.

حول شراء ميكروسوفت لمنصة Xamarin

8

قبل أيام قليلة أعلنت شركة ميكروسوفت شراءها لمنصة Xamarin الشهيرة، ولمن لا يعرف هذه الأخيرة فهي عبارة عن بيئة لتطوير تطبيقات الموبايل الموجهة لمختلف أنظمة التشغيل (أندرويد، ويندوز، iOS).
هذه المنصة تم بناؤها من طرف نات فريدمان و المبرمج المكسيكي ميغيل ديكازا سنة 2011، وكمعلومة إضافية فإن ميغيل هوأحد المشاركين في بناء مشروع مونو Mono Project، الذي مكن مبرمجي الدوت نيت من بناء برامجهم على نظام لينكس و ماك OS.
عموما لنعود إلى منصة Xamarin، قلنا أنها ظهرت عام 2011، وهي تسمح للمبرمجين ببناء تطبيقات موبايل قابلة للاشتغال على مختلف أنظمة الموبايل الشهيرة (أندرويد، iOS، ويندوز).
لغة البرمجة الأساسية المعتمدة في منصة Xamarin هي لغة سي شارب، وقد تم تضمين Xamarin في الفيجوال ستوديو منذ الإصدار 2013، ولأنه لقي قبولا لدى مبرمجي الدوت نيت ارتأت شركة ميكروسوفت أن تقوم بشرائه.
ربما ستجعل ميكروسوفت منصة Xamarin مجانية لكي تشجع مبرمجي الدوت نيت على إنتاج أكبر عدد ممكن من البرمجيات لنظام الويندوز فون والويندوز 10، لكن ما قد يحدث فعليا هو أن هؤلاء المبرمجين سيتجهون بمنصة Xamarin لبناء تطبيقات أندرويد وiOS، فتكون ميكروسوفت بذلك قد دقت آخر مسمار في نعش الويندوز فون.
لا أظن أن شركة بحجم ميكروسوفت ستغفل هذا الأمر من حسابها، لذلك قد تجنح إلى جعل منصة Xamarin مجانية لتطوير تطبيقات ويندوز فون، ومدفوعة لتطوير تطبيقات أندرويد و iOS، وكلها مجرد تخمينات شخصية في انتظار ما ستكشفه الأيام القادمة، ولعل ندوة Build التي ستعقد من تاريخ 31 مارس إلى 1 أبريل من العام الحالي 2016 ستحمل أجوبة شافية لهذه التساؤلات، على الأقل هذا ما صرحت به ميكروسوف عبر المنشور التالي، و "يا خبر بفلوس، بكرة ببلاش :)" على رأي إخوتنا في مصر.

البرمجة، ذلك الوحش !

26

أرهقوك بالمصطلحات الغامضة، ضَغَطْتَ على أعصابك فوق وُسْعِكَ لتظفر منهم ولو بشظية أمل..
لكنهم خذلوك…
صَوَّرُوهَا لك كالوحش الضاري ذي الأنياب الذَّرِبَة..
فَخِفْتَ إن أنتَ دَنَوْتَ منه أن ينهش ما بقي لديك من صبر، وجئت هنا كمحاولة أخيرة لتقول لهؤلاء القوم: هذه آخر فرصة لديكم لتقنعوني أن البرمجة ليست وحشا كما تصورت !
أُبَشِّرُكْ، قد وضعت قدميك في المكان الصحيح، في هذه المقالة سترى البرمجة ـ ذلك الوحش الضاري ـ أرنبا ورديا لطيفا، لكن مقابل ذلك أعرني تركيزك لدقائق يسيرة، وأعدك بإرجاع الثقة إليك بعون الله تبارك وتعالى.
خليلي...
سأفترض مسبقا أن علاقتك بالبرمجة كعلاقة الفلاَّح بموسيقى الروك...
ليس من باب تقليص ظلك، وإنما من باب التبسيط، فلا تُلْقِ علي العتب إن أنا أفرطت في التسهيل، لأن وراء الأكمة ما وراءها، وما تراه أنت تافها، كان السبب المباشر لغيرك في رؤية البرمجة وحشا كاسرا..
جاهز؟ فَلْنَمْضِ على بركةٍ من الله إذن...
مبدئيا، لنتفق أن البرمجة لا تعدو أن تكون طريقة للتواصل مع جهاز الحاسوب، نقول له مثلا: قم بتعديل الصورة التالية، أو شغل الملف الصوتي التالي، أو قم بترجمة الكلمات التي سأكتبها لك إلى لغة أجنبية ما...
هذه الأوامر بيننا نحن البشر عادية جدا، سأفهمك إذا خاطبتني بهذه اللغة، وَسَأُنَفِّذُ لك طلباتك إذا كنتُ قادرا عليها، لكن تخيل معي أن هذا الحاسوب لا يفهم لغاتنا البشرية، هذا الكلام لو رددناه له إلى الصبح لن يفقه منه شيئا، لأن للحاسوب لغته الخاصة، التي علينا الإلمام بها إذا أردنا أن نتواصل معه.
أ تدري ما اسم تلك اللغة يا خليلي؟ اسمها لغة الآلة Machine Language، لأن آلة الحاسوب تفهمها..
بعض الناس يسمونها اللغة الثنائية Binary Language، وقد تنظر إلي الآن بنظرات شزراوات وتسألني: وما معنى اللغة الثنائية؟
هدىء من روعك يا خليلي فالمسألة أبسط بكثير مما تتصوره..
السر وراء هذه التسمية، هو أن لغة الحاسوب قائمة بالأساس على وحدتين اثنتين، هما صفر و واحد، ومنهما جاءت هذه التسمية: اللغة الثنائية...
ستبستم حتما، لكنك سرعان ما ستستعيد تجهمك وتسألني من جديد: ما معنى أن لغة الحاسوب قائمة على الصفر و الواحد؟
سأقول لك بكل بساطة: الحاسوب جهاز الكتروني، مكون من أجهزة فرعية متصلة به، بعضها خاص بالإدخال وبعضها خاص بالإخراج، والبعض الآخر يقوم بمعالجة البيانات المدخلة ويقوم بإخراجها.
البيانات التي تدخل إلى الحاسوب ليعالجها (بمعنى أوضح ليتعرف عليها ويقوم بتنفيذها) تدخل على شكل بيانات ثنائية، على شكل سلاسل من الأصفار والآحاد، حينما تدخل تخزن في ذاكرة الحاسوب، فيقوم المعالج Processor بأخذ هذه البيانات وقراءتها وتنفيذها ومن ثم إرسالها إلى أجهزة الإخراج المعدة لها.
سأزيد المسألة تبسيطا وتفكيكا، عبر الصور التالية: التي أتمنى أن تتأملها بحب:
عملية معالجة البيانات من الإدخال إلى الإخراج

سنعطي مثالا للعملية التي توضحها الصورة أعلاه:
وأنت تنوي الدخول إلى حاسوبك الشخصي، ستطالعك واجهة إدخال كلمة السر (ليس في كل الحالات، لكن أنا متأكد أنك تعرف تلك الواجهة)
هل استحضرت صورتها في ذهنك الآن؟
ممتاز، لنواصل إذن..
هذه الواجهة تنتظر منك أن تدخل كلمة السر، أول خطوة ستقوم بها هي الضغط على حروف لوحة المفاتيح لكتابة كلمة السر..
هذه هي عملية إدخال البيانات، لوحة المفاتيح هي جهاز الإدخال، و كلمة السر التي ستكتبها هي البيانات المدخلة..
هذه البيانات حينما تدخل إلى جهاز الحاسوب يتم تخزينها في الذاكرة، والذاكرة يا خليلي مكونة من خانات لاستقبال البيانات الثنائية، هذه الخانات لها عناوين لكي يتعرف المعالج على عنوان كل قيمة مخزنة...
بعد أن يتم تخزين هذه البيانات في الذاكرة، يأتي دور وحدة المعالجة أو المعالج لقراءتها، ومقارنتها بكلمة السر الخاصة بالحاسوب، إن حصل تطابق، يتم فتح الحاسوب، وإلا فإنه يعرض لك رسالة خطأ مفادها أن كلمة السر المدخلة غير صحيحة، وفي الحالتين معا النتيجة المرجعة يتم إخراجها إليك عبر الشاشة، إذن فالشاشة جهاز إخراج، والرسالة المرجعة هي بيانات مخرجة..
اتضحت الصورة الآن يا خليلي؟
إن كان كذلك، فعد إلى الصورة من جديد، وتخيل أحد السيناريوهات التي تقوم بها عادةً، وارسم على ورقة مختلف المراحل التي تقطعها لإنجازه مرورا بالإدخال وانتهاء بالإخراج..
بعد أن تقوم بذلك، وستقوم به بعون الله...أنا أعرفك جيدا، وأقرأُ رسائل النصر في عينيك !
بعد ذلك تعال معي لنتفقد أنفسنا أين نحن..
تعرفنا على جهاز الحاسوب وعلى اللغة التي يفهمها، وعلى الأجهزة الفرعية المتدخلة في عمليات إدخال ومعالجة وإخراج البيانات.
لنا عودة مع لغة الآلة يا خليلي...فأعرني انتباهك يرحمك الله !
ستقرأ عن هذه اللغة في كتاب سأهديه إليك، وسترى أنها لغة سهلة التعلم، لكن لو طلبت منك كتابة برنامج بها، قد لا تتمالك أعصابك وستبحث عن أقرب شيء منك، لتتلقفه في غياب وعي وترسله على رأسي لتشجني، لكنني سأزيغ برأسي وأعود لأقول لك:
خليلي...
لستَ مطالبا بكتابة البرامج بلغة الآلة، فقد وُجِدَتْ بدائل رائعة جدا تسهل عليك ذلك، أ تدري ما اسمها؟
اسمها لغات البرمجة Programming Languages..
إنها لغات وسيطة، قريبة من لغاتنا البشرية، ومن السهل على الحاسوب تحويلها إلى لغته الثنائية.
هذه اللغات سهلت عليك المهمة بشكل رهيب، لكنها كثيرة جدا يا خليلي، فكيف تختار لغتك؟
لن أخذلك يا صديقي وأتركك هنا...
سأدلك على كتاب مختصر، يمكنك قراءته في أسبوع واحد، وبعد مطالعة الكتاب وتطبيق ما جاء فيه، سأدلك على مقطع فيديو يريك كيف تختار لغتك ومن أين تبدأ.
في هذا الكتاب، ستتعلم ماهي اللغة الثنائية، وماهي أنظمة تمثيل البيانات الأخرى المتوفرة، وستتعلم كيف تكتب البرامج على شكل خوارزميات.
الجميل في هذا الكتاب، أنه يأخذ بيدك من الصفر..
والأجمل من ذلك أنه يعلمك البرمجة باللغة العربية، وبل ويترجم لك الخوارزميات باللغة الانجليزية حتى لا تجد صعوبة في تحويلها إلى برامج حقيقية بعد ذلك..
لا أشكر لك الكتاب يا خليلي لأنه من تأليفي، معاذ الله ! وإنما أصف لك ما فيه حقا، وسترى صدق ما أقول بعد أن تختمه..


بعد الكتاب شاهد المقطع المصور التالي:

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

كتاب جديد: المختصر المفيد في تقنية WCF بلغة سي شارب

9

مقدمة الكتاب:

شهدت بنيات الأنظمة المعلوماتية تطورا ملحوظا مع مرور الزمن، بدء من البنية التقليدية التي كانت تقدم للمستخدمين أنظمة أحادية الخدمة، عبارة عن تطبيقات انفرادية يشتغل عليها مستخدم واحد، بل ولا تقدم له كل ما يحتاجه في عمله، إذ يضطر أن يوزع مهامه بين عدة برامج، فيقوم بإدخال المعطيات في برنامج خاص بقواعد البيانات، ثم بعد ذلك يقوم بالاستعلام عن هذه البيانات من خلال برنامج آخر مخصص لهذا الغرض، فإذا أراد أن ينشىء التقارير Reports توجه إلى برنامج آخر وهكذا دواليك.
أمام هذه التعقيدات، كان لزاما على المعلوميات أن ترقى بمجال الأنظمة، فظهر جيل جديد من البرمجيات يعتمد على الشبكات Networking platforms، بحيث تسمح هذه البنية الجديدة بتقسيم المهام بين الأجهزة والربط فيما بينها عبر الوسيط الشبكي، فعلى سبيل المثال لو أردنا نظاما متصلا بقاعدة بيانات، نقوم بإعداد جهاز سيرڤر نضع عليه برنامج إدارة قواعد البيانات، ثم نقوم بتثبيت التطبيق على مختلف الحواسيب العميلة التي نريدها أن تتعامل معه، ومنه سميت هذه البنية ببنية خادم / عميل Client /Server -.
وظهرت كذلك بنيات أخرى، لعل أبرزها بنية الأنظمة الموجهة خدميا Service Oriented Architecture والمعروفة اختصارا ب SOA، هذه الأنظمة التي تكون عادة في حاجة إلى الاتصال بخدمات الويب بغرض الاستفادة منها عبر الوصول إلى الوظائف Methods التي تقدمها فتستخدمها.
واعتمدت الأنظمة الموجهة خدميا على تقنيات عديدة تسمح بنقل البيانات البرمجية (الكائنات Objects) بين مختلف مكونات النظام عبر الانترنت أو الشبكات المحلية، لأنه ليس لزاما في هذه البنية أن تكون مكونات نظام معين موجودة على نفس الجهاز، إذ أن هذه البنية معدة خصوصا للأنظمة التي تتميز بتباعد مكوناتها جغرافيا، وتسمى هذه الأنظمة بالأنظمة الموزعة Distributed Systems.
من غير شك سبق لك وأن سمعت بالأنظمة الموزعة أو التطبيقات الموزعة Distributed Applications، فهي بكل بساطة أنظمة مركبة وعناصرها متفرقة مكانيا، وتتواصل هاته العناصر فيما بينها عبر الآليات الشبكية، إما عبر الانترنت أو عبر الشبكة المحلية للمؤسسة.
عملية تبادل الكائنات بين مختلف مكونات النظام الموزع تحتاج إلى بعض التقنيات المتقدمة، مثل تقنية خدمات الويب Web Services، تقنية .net remoting، تقنية RMI في لغة جافا، تقنية COM (Component Object Model) التي تسمح بالتواصل بين التطبيقات والمكونات الموجودة على نفس الجهاز، وتقنية DCOM (Distributed COM) التي تعتبر النسخة الموزعة من تقنية COM بحيث تسمح بالتواصل بين التطبيقات والمكونات الموجودة على عدة أجهزة عبر استخدام الشبكات، ويوجد ماهو أحدث منها كتقنية COM+، وتقنيات أخرى كثيرة إلا أننا سنغض الطرف عنهم كلها ونركز فقط على صديقتنا الغالية WCF، وسوف نتناولها بإذن الله في هذا الكتيب المختصر، فما هي تقنية WCF؟ ومتى ظهرت؟ ولماذا سنحتاجها؟ وإذا احتجناها كيف نستخدمها ؟
بداية، فإن تقنية WCF تعد اختصارا ل Windows Communication Foundation، وقد صاحبت إصدار الدوت نيت فريموورك 3.5، وطرحتها ميكروسوفت كتقنية بديلة للتقنيات المستخدمة في الأنظمة الموزعة لإنهاء مشاكل عدم التوافقية بين مكونات النظام.
الجميل في التطبيقات الموزعة أن مكوناتها قابلة لإعادة الاستخدام، إضافة إلى كونها مهيأة للاستخدام المتعدد من طرف عدة تطبيقات في نفس الوقت، والأجمل من هذا وذاك أن هذه المكونات مخفية عن عين المستخدم النهائي End User الذي لا يعلم ما الذي يجري في خفايا النظام الذي يستعمله، إذ كل ما تقع عليه عيناه يتمثل في واجهات الاستخدام، إما نماذج ويندوز Windows Forms أو صفحات ويب Web Forms.
الهدف الرئيسي من تقنية WCF هو السماح بنقل الكائنات Objects عبر الشبكات المحلية للمؤسسات أو عبر الانترنت من أجل تمكين التطبيقات التي تحتاج هذه الكائنات من الوصول إلى وظائفها واستعمالها.
لعمل ذلك، لابد من استضافة خدمات WCF على جهاز سيرڤر، وإعداده بكيفية تجعله قادرا على التجاوب مع استعلامات العملاء Clients.
من جهة العميل Client Side، ونتحدث هنا عن التطبيق المثبت على الأجهزة العميلة التي ستستخدم خدمات WCF المرفوعة على سيرڤر، فلا بد أن نوفر لهذا التطبيق العميل جميع المعلومات الأساسية التي تسمح له بالاتصال بخدمات WCF واستعمالها بشكل سليم.

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

اضغط هنا لتحميل الكتاب بصيغة PDF





لست طبيبا أنا مريض مثلكم

6

أنا مريض، وأنتم الأطباء

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

أنا طبيب، وأنتم المرضى

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

لست طبيبا أنا مريض مثلكم !


"كلنا مرضى" أهون علي من أن أكون مريضا دون العالمين، أو طبيبا على عيادة من المرضى تمتد من القطب الشمالي إلى القطب الجنوبي.
ما لي وللناس؟ سأحيى حياتي وفق الخط المحمدي، وَأَعْظِمْ به من خط !
أما خوفي من المجهول فقتلته بالإيمان بالقضاء والقدر..

وغروري وتكبري قهرتهما بالتواضع وخشية الرحمن وخفض جناح الذل من الرحمة لوالدي، وألا أمشي في الأرض مرحا.

هكذا علمني الإسلام، وهكذا انتشلتني أنامل الرحمة من براثين العذاب، فالحمد لله رب العالمين !

مسالك النجاح الأربعة

10

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

فصعد ذات يوم ربوة عالية، وصاح في الناس يجمعهم حوله، فلما تحلق حوله جمع غفير خطب فيهم قائلا:

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

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

المسلك الأول: إن سألت عن مساعدي، فهو ساعدي:



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


المسلك الثاني: اعمل جميلا، ولا تنتظر جميلا:


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


المسلك الثالث: عَيْنِي الْمَرْمُودَةُ وَلَسْتَ أَجْرَبًا:


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


المسلك الرابع: بذل الجهود في تقليل العهود:


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

قصة قصيرة بعنوان: "أمير على عرش الجائشة (النفس) - أو نرجسي واندثر"

3

لم يكن الجو جميلا يومها ولا وجوه البشر، سحب مُكْرَهِفَّةٌ ووجوه مُكْفَهِرَّةٌ، سيطر علي العبوس بدوري وأنا أخطو بساقي النحيلتين في شارع الأمل، عن أي أمل تتحدثون؟ على الأقل إذا أردتم أن تكذبوا فأحسنوا الكذبة !

كنت أُنَفِّسُ عن عبوسي بصوت كَسْرِ الصقيع وأنا أدوسه، شعور نبيل فعلا، على الأقل أفضل من كسر الخواطر.

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

بين كسر الصقيع وغمغمات المامون، تراءى لي مشهد زلزل أركاني..

إنه صديقي القديم "سليمان" يتوسد الرصيف في عز البرد القارس، فركت عيني في غير تصديق ثم أوقفت المامون بغلظة، لم أنتبه إلى ردة فعله لأن تركيزي كله قد سُلِبَ وأنا أنظر إلى حال "سليمان" المأساوي.

كان يبعد عنا ببضعة أمتار، لا يفصل بيننا سوى الشارع، نحن وُقُوفٌ أمام المقهى وهو نائم على الرصيف المقابل..

أهذا هو نفسه ذلك الفتى الوسيم الذي كان يغضب أشد الغضب إذا عبث أحد بخصلات شعره؟

أهذا هو "سليمان" الذي حير الفصل بذكائه ونباهته؟

أهذا هو سليمان ملك النرجسية وسلطان حب الذات، الذي قهرنا بمدح نفسه في كل مناسبة؟

المشهد مؤلم صراحة، لقد أخبرني بعض الأصدقاء قبل مدة أنه فقد عقله، لكن لم أكن أتوقع أن أراه بهذه الحال، سبحان مبدل الأحوال !

سألني "المامون" وهو يتابع نظراتي:

- هل تعرف هذا المجنون؟

رمقته بفظاظة وهتفت به:

- لا تتكلم بهذا الأسلوب، فهذا صديق قديم !

أطرق المامون برأسه لهنيهات، ثم عاد يسألني:

- وما الذي حدث له يا ترى؟

فأجبته بكل ثقة:

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

كان عاشقا لنفسه، وبقدر عشقه لها، كان كارها للناس...

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

القصاصة ما تزال عندي وقد حفظتها من كثرة ما أعدت قراءتها لأن أسلوبها أعجبني، وإن كان محتواها لا يروق إلا لمريض نفسي، ثم بدأت أتلو كلمات صديقي النرجسي على المامون:

"سأنطوي على نفسي ففيها من الخير ما لا يدركه سواي...

سَأَهُوءُ بها وأسمو بها إلى المعالي حتى لا تطالها خديعة أدمي..

ألم أختلط بالناس صالحهم وطالحهم؟ ألم أعد من مخالطتهم بوجع الرأس إلى حد السهاد والأرق؟

فَلْأَكُفَّ إذن، فلست صبيا أرضع أصابعي، أو أحمقا يجوب الشوارع عريانا..
إنني وإن أبى الناس فهمي لأمير على عرش نفسي..

أمير على عرش الجائشة..

وحدي من يُقَدِّرُنِي ويعرف كُنْهِي وجوهري، أما انطباعات الناس عني فإنها أهون عندي من قُعَيْسٍ على عمته، لا تعرفون من هو قعيس؟ سأخبركم عنه، سَأَمُدُّكُمْ بالمعرفة من بطون الكتب أما من من أفواهكم  فلتحتفظوا بها عندكم، فلست في حاجة إليها.

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

هوان قعيس على عمته دون هوان انطباعاتكم عني...

لقد جربت الحب القادم منكم فاستحليته كالعسل، فإذا آخره مرارة دونها مرارة العلقم..

أنتم هكذا دائما، لا تحبون إلا لمصلحة، وعليها تُوَادُّونَ وَتُحَادُّونَ..

فإن أنا جَارَيْتُكُمْ كنت أشبه بكم، وما لذلك خلقت ولا لأجله أحيى..

أنا زهرة الريحان التي فاح عبقها فما استروحته أنوف الجيف، وكيف لها أن تستروح طيب عبقي وقد زكمت أنوفها رائحة الموت.

نرجسي أنا إلى حد حبي لنفسي بقدر كرهي لكم.

بُشْرَاكُمْ إن أنا أدخلتكم في المقارنة، فَعِزُّ الذَّلِيلِ اِلْتِفَاتَةٌ مِنْ عَزِيزٍ، هكذا أراني وأراكم، و دوننا عشرة أفجاج عميقة يَتَسَفَّلُهَا مُحِيطٌ لا قاع له، فمن دنا من شموخي تَلَقَّفَتْهُ الهوة فسقط من غير رجعة..

سقوط محير..

ستهلكون في فراغ الهوة وحلم الارتطام بالقاع يخامركم..

وأنى لكم ذلك وأنا أنا، وأنتم أنتم !"

ما كدت أكمل الكلمات حتى وجدت المامون يرمقني بنظرات شزراوات، وكأنه يقول لي:

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

أن يجوب الشوارع فاقدا لعقله أهون عليه من أن يعشق نفسه إلى حد الجنون..

على الأقل، كسر الصقيع أرفق من كسر قلوب الناس !

قصة قصيرة: أيقظها، فإن عادت للنوم فَنَمْ !

3


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

أَتَمَزَّقُ لَوْعَةً وَأَتَقَطَّعُ حُرْقَةً على حال هذه الأمة الكليمة، لا يهنأ لي بال ولا يغمض لي جفن، أكابد الهموم في وضح النهار، وأصارع الأرق في بطن الظلام.

شدتني الحيرة في بداية عهدي بهذا الشعور، كيف سأتصرف؟ بل ولماذا علي أنا تحديدا أن أتصرف؟

فكرت مليا في الأمر، فوجدت أن للإصلاح وجهان:

أولهما إصلاح النفس ثم الأقرب فالأقرب..
وثانيهما إصلاح المجتمع في ضربة واحدة...

الوجه الأول لم يناسب حماسي واندفاعي لأن الطيش بلغ مني كل مبلغ، والوقت ليس في صالحي، على الأقل هكذا يُخَيَّلُ إلي فَنَحْنُ المصلحون نموت صغارا، نفسي هَيِّنَةٌ علي وإصلاح عيوب الغير أولى من إصلاح عيوب نفسي، ثم إنني ألعب دور المصلح فلماذا سأحتاج الصلاح أصلا؟ متى كان لزاما على الْبَنَّاءِ أن يملك قصرا؟ ومتى كان واجبا على الخياط أن يحوز مصنعا؟

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

بدأت عملية الإصلاح وليس لي في الصلاح الذي أدعو إليه نصيب، وَخْزُ الضمير غاب جراء قمعي المستمر له، فكان يقول لي: ويحك، أتدعو الناس إلى شيء لست منه في شيء؟ ألا ترى أنك تلعب دور الحرباء التي تتلون بكل لون لِتُوهِمَ الرائي وهي ليست من ذلك اللون في شيء؟

حاولت إسكات الضمير بالقوة لكن صوته كان منبعثا من بين دخان استعلائي:

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

كلام جميل فعلا، لكنك أيها الضمير لا تقدر حجم الرسالة، ولا ثقل المسؤولية، لو انْشَغَلْتُ بإصلاح نفسي فمن سَيُصْلِحُ المجتمع والإفساد شغال على قدم وساق؟

ومضت أعوام كثيرة وأنا أَسْلُكُ كل السبل للإصلاح، أَلَّفْتُ كُتُبًا، ألقيت محاضرات، مشيت في الأسواق وفي الشوارع وَاعِظًا، لكنني لما جلست مع نفسي أتفحص حصيلة جهدي، وجدت أنه خَالٍ من البركة، فكل الأعمال التي قدمتها لم تُثْمِرْ، الناس هم الناس، والعيوب هي العيوب.

فَنَكَصْتُ على عَقِبَيَّ، وأحجمت عن هذه الأعمال النبيلة، وَغَضَبْتُ على هذه الأمة التي ترفض الإصلاح، لقد حاولت إيقاظها من نومها فلم تستجب، لقد أَدَّيْتُ ما عَلَيَّ، اللهم هل بلغت اللهم فاشهد !

مرارة الحسرة لم تفارقني للحظة، و لم يكن يُعَزِّينِي عن ذلك إلا صوت المارد الذي يسكنني:

أيقظها، فإن عادت للنوم فَنَمْ !
قد أَدَّيْتَ الشطر الأول، فلم تستيقظ، فما عليك إلا الانخراط في زُمْرَةِ النائمين !

كان كلام المارد حُلْوًا، وقع على قلبي كقطرة الماء البارد على حلق اللهثان، لكن شيئا ما ليس على ما يرام، صوت الضمير يعلو شيئا فشيئا، بدأت أتحاشاه لكنه أبى إلا أن يزداد علوا حتى مسك مجامع قلبي، فكان من جملة ما قاله الضمير:

ها قد انضممت إلى حلف المتخاذلين بعد أن نبهتك منذ مدة إلى أن وجه الإصلاح الأول هو الأجدى، كان يليق بك أن تبدأ بإصلاح نفسك أولا ثم تُثَنِّي بإصلاح الأقرب فالأقرب، لكنك أبيت إلا أن تقتحم هذا المجال الْوَعْرَ، فتسيء إليه وإلى أهله.

كيف سينظر الناس الآن إلى دعوتك بعد أن تخليت عنها وركنت إلى حلف المتخاذلين؟ كيف ستستيقظ هذه الأمة وقد حجزت لنفسك منذ أول عهدك بالإصلاح سريرا إلى جانب نُوَّامِهَا؟

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

لست ألومك على ضُعْفِ هِمَّتِكَ، لكنني ألومك على تَجَنِّيكَ على حَقْلٍ دَخَلْتَهُ فَتَوَهَّمَكَ الناس من أَعْمِدَتِهِ فَلَمَّا نَكَصْتَ على عَقِبَيْكَ استهانوا بما دعوتهم إليه، فَخَلَطُواْ بين دعواك وهواك، فرفضوا كل ما جِئْتَهُمْ به، ونهجوا معك نهج الناكصين الْمُحْجِمِين.

كان الصوت هذه المرة أكبر من صوت المارد، بل وأكبر من صوت الطيش الذي رزأني أعواما من عمري، آن لي - وإن كان الأمر متأخرا - أن أبخع لصوت الحق وأخضع له..
فالإصلاح كقطرة الزيت على الثوب، تبدأ من حيث وقعت لتمتد إلى ما حولها..
أما الإفساد فشبيه بالريح العاتية، تذري معها كل شيء حتى تَسْكُنَ فَتُفْنِي نفسها.