2006/11/28

إمسك مدون

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

فيجوال بيسك ..... نظرة تاريخية


كان الهاجس الأكبر للعلماء وبعد إختراع الحاسوب هو كيفية تبسيط التعامل معه والإستفادة منه ، فظهر أول ما ظهر من اللغات البرمجية لغة الآلة Machine Language وهي أول لغة قد تم توظيفها لكتابة البرمجيات وهذه هي اللغة الوحيدة التي يفهمها الحاسوب وتتكون من رمزين هما (1-0) ، إلا أن هذه اللغة كانت صعبة المنال وتتطلب معرفة واسعة في تصميم الحاسوب ، كما أن تصحيح الأخطاء التي تظهر في البرامج المكتوبة بهذه اللغة كان صعباً مما دفع العلماء إلى تطوير هذه اللغة إلى لغة التجميع Assembly Language التي كانت أفضل من سابقتها من حيث السهولة في كتابة البرامج ، وإستخدمت فيها إختصارات لكلمات ذات مدلول لغوي مثل Add التي تدل على الجمع ، وMov التي تدل على النقل .وبعد كتابة البرنامج يتم تجميعه وتحويله إلى لغة الآلة التي يفهما الحاسوب عن طريق ما يسمى بالمجمع Assembler إلا أن اللغتين السابقتين كانتا تعتمدان في كتابة البرنامج على معرفة موسعة بالتصميم الداخلي للحاسوب (( المعالجات ، مسارات البيانات ، عناوين الذاكرة ، الخ )) لذلك فإنهما تندرجان تحت اللغات البرمجية منخفضة المستوي Low-Level Language وقد فكر العلماء في إبتداع لغات عالية المستوى High-Level Language تكون العبارات المستخدمة في برمجة البرامج من خلالها ذات مدلول لغوي واضح مثل Write , Read , Input ، ويتم في هذه اللغات عزل المبرمج عن مشقة الخوض في متاهات التصميم الداخلي للحواسيب ، ويتم تحويل البرنامج بعد كتابته إلى برنامج قابل للتنفيذ عن طريق ما يسمى بالمترجم أو المجمع Compiler ، ويتم تجربة هذا البرنامج قبل تجميعه لمعرفة الأخطاء التي تحدث فيه عن طريق ما يسمى بالمفسر Interpreter .بذلك ظهرت اللغات التي تم تطويرها فيما بعد والتي إشتهرت ويعرفها كل من خاض في مجال البرمجة مثل C , Basic , Fortraan , Pascal ، وقد تفاضلت هذه اللغات التي بلغت المئات فيما بينها من حيث القوة والسهولة وكانت لغة Basic هي اللغة الأكثر سهولة وشعبية بين هذه اللغات السابقة وإشتقت كلمة Basic من الحروف الأولى لعبارة Beginners All-Purpose Symbolic Instruction Code والتي تعني لغة التعليمات الرمزية لكافة الأغراض للمبتدئين .وقد وضعت أساسيات هذه اللغة في منتصف الستينات في كلية جامعية في الولايات المتحدة الأمريكية ، وقد تم تطويرها من قبل عدة شركات وقد تبناها معهد المقاييس الأمريكية ANSI عام 1978 ، وظهرت منها عدة إصدارات بكافة أنواعها وكانت ضعيفة من حيث واجهات البرامج التي تنشئها حيث أن إنشاء واجهات برامج مقبولة نوعاً ما يتطلب من المبرمج كتابة الآلاف من الأسطر أثناء تصميم هذه البرامج مما دفع الشركات ومنها شركة Microsoft لأن تطور اللغات البرمجية وخصوصاً بعد إصدار أنظمة التشغيل التي تدعم بيئة المستخدم الرسومية GUI Graphic User Interface ، والتي تسمى بنظام النوافذ Windows .وقد تبنت شركة Microsoft لغة البرمجة تحويل بيسيك QBasic لتكون نواة لبرنامج فيجوال بيسيك بإصداراته المتنوعة ، لكن الضعف في لغة البرمجة QBasic بالمقارنة مع اللغات البرمجية الأخرى دفع شركة Microsoftإلى دعمها دعماً كبيراً ، وبذلك إستمرت هذه اللغة الشعبية السهلة ولم تندثر كما حصل مع الكثير من اللغات البرمجية الأخرى ، وهكذا أنجبت اللغة الأم QBasic وليدتها المدللة لغة بيسيك المرئية Visual Basic ونالت هذه اللغة الوليدة الرعاية والحنان والدعم من شركة Microsoft ونالت الترحيب والرضى والقبول بين شرائح المبرمجين وعلى كافة مستوياتهم ويتجلى ذلك في النقاط التالية :-(أولاً)أصبح بإمكان المبرمج أن يصمم برامج بواجهات جميلة حيث توفر لغة فيجوال بيسيك للمبرمج أغراض وأدوات تستخدم في نظام التشغيل نفسه مثل ( صناديق النصوص والصور والقوائم المنسدلة وقوائم الإختيار وأشرطة التمرير .... الخ ) ، وبهذا الأمر تم إسدال الستار على ما كان يعانيه المبرمج من ناحية تصميم واجهه لبرنامجه وإضاعته الساعات الطوال لتحقيق هذا الأمر .(ثانياً) جاء الدعم الآخر للغة فيجوال بيسك عندما قامت Microsoft بإضافة هذه اللغة ضمن مجموعة برامج Microsoft Office وذلك من أجل تطوير قواعد البيانات التي ينشئها برنامج Ms-Access ودعم أوراق العمل الإلكترونية التي ينشئها برنامج الجداول Ms-Excel 97 ودعم الوثائق الألكترونية التي يدعمها برنامج Ms-Word 97 ، ودعم العروض التي ينشئها تقديم العروض Ms-PowerPoint 97 ، فأصبح من الضروري لمن يود أن يكون محترفاً في مجموعة برامج Microsoft Office أن يتعمق في لغة فيجوال بيسك .(ثالثاً) الدعم الثالث الذي تلقته لغة فيجوال بيسك هو من قبل عدد كبير من الشركات والمحترفين حيث تم تطوير عدد كبير من عناصر التحكم الفعالة OCX ActiveX ، وطرحها في الأسواق لتستخدم فيما بعد في دعم البرمجيات التي ينشئها فيجوال بيسك .(رابعاً) وجاء دعم آخر لهذه اللغة من قبل شركة Microsoft مرة أخرى عندما أضافت إلى الإصدار الخامس من برنامج فيجوال بيسك إمكانية بناء عناصر تحكم OCX ActiveX وبذلك أصبحت لغة فيجوال بيسك تضاهي بقية اللغات القوية في إمكانياتها .(خامساً) أضافت Microsoft إمكانية إستدعاء الكثير من الوظائف الموجودة في نظام التشغيل وإمكانية الإستفادة من بعض البرامج التي تعمل في بيئة نظام النوافذ وتسخيرها لصالح البرنامج المنشأ بلغة فيجوال بيسك .
من كتاب المبرمج - ترجمة وإعداد م.محمد جلال قاوجي - م. محمد سامح عطري

خذ الحكمة من أفواه المبرمجين

هذه بعض من حكم والاس وانج الطريفة للمبرمجين
If-Then ، If-Then-Else
التراكيب الشرطية eفي الحياة الفعلية يتخذ كل منا العديد من القرارت بناء على شروط معينة ، فمثلاً يمكنك أن تطلب من إبنك أن ينظف الحديقة الخلفية للمنزل فيقول لك ( لا تقلق يا أبي إذا إنتهت المباراة قبل حلول الظلام فسوف أنظف الحديقة ) أو تقول لأحد أصدقائك المقربين ( إذا أردت ألا تسمن أكثر من هذا فيجب أن تتوقف عن أكل الحلويات الدسمة ) ، إن فيجوال بيسك لا يختلف عنا عندما يتخذ بعض القرارات ، فهو يفحص الشرط الذي تحدده للقرار ثم يستجيب بالصورة الصحيحة .التكرار يستمر في تنفيذ الأوامر الموجودة داخله حتى يصبح الشرط صحيحاً ؟
Do Untill
إنه هذا التكرار يشبه النصيحة التي يقدمها لك شخص لا ضمير له حين يقول لك ( إستمر في سرقة خزينة النقود حتى يراك صاحب الشركة ) .
ToolTipText لماذا نضيف تلميحاً لبرامجنا ؟
علىالرغم من توحيد واجهة المستخدم وإستخدام هذه الواجهة كواجهة قياسية لبرامجك ، فقد يظل كثير من الناس لا يعرفون ما الذي تفعله الكائنات المختلفة في برامجك ، وبدلاً من النقر على هذه الكائنات غير المميزة بشكل عشوائي ( وإحتمال تدمير بياناتهم ) فإن أغلب الناس سيصابون بالشلل ويمتنعون عن إستخدام أجزاء كبيرة من البرنامج على الإطلاق ، ولكي تتغلب على هذا التردد يمكنك أن تعرض تلميحاً سريعاً عندما يضع المستخدم مؤشر الفأرة فوقها ، وهذا التلميح ليس سوى نص بسيط يشرح ما يقوم به كائن معين .
لماذا نعرض الخيارات على المستخدم ?
في الإمتحانات الدراسية كانت إختبارات الإختيارات المتعددة أسهل من إمتحانات الكتابة ، إذ بإمكانك أن تخمن الإجابات بدلاً من التفكير فيها وتظل تحصل على درجة معقولة ، فالطلبة ليسوا الوحيدين الذين لا يريدون أن يفكروا ، فمعظم المستخدمين كذلك ، فهم يريدون أن يروا إختيارات محددة امامهم وبهذه الطريقة يمكنهم أن يخمنوا ويظلوا يحظون بحياة سعيدة .
لماذا نحدد طول النص ؟ Maxlength
يمكنك أن تمنع المستخدم من كتابة كلمات أو حروف أكثر مما يجب داخل مربع النص ، لعمل ذلك حدد أقصى عدد من الحروف تسمح به داخل المربع ، وبالتالي لن يستطيع الناس كتابة مقالات مطولة تحكي عما فعلوه في الصيف الماضي داخل مربع النص .
أشرطة التمرير Scroll Bars
لا مكن تقسيم الإختيارات في الحياة إلى تصنيفات واضحة بحيث تستخدمها مربعات العلامة وأزرار الإختيار والقوائم ، فأحياناً يحتاج المستخدم إلى خيارات تتطلب مجالاً كبيراً من الضبط التدريجي .فكر في صوت المسجل مثلاً ، إذا كانت الخيارات المتاحة هي ( ضعيف - متوسط - عالي ) فلن تتمكن من ضبط درجة علو الصوت ليوافق ذوقك ، ولهذا تجد معظم أجهزة الصوت تسمح لك بضبط مفتاح أو الضغط على زر يضبط الصوت تدريجياً ، لهذا قم بإستخدام أشرطة التمرير في برامجك على الأقل من أجل المستخدم .
الصور الجميلة والواجهات الهندسية
من الممكن أن توزع العناوين والصور على مختلف نوافذ برامجك ورغم أن الصور تجعل نوافذك جميلة إلا أنها من الممكن أيضاً أن تشكل جزءاً هاماً وفعلياً من البرنامج الذي تكتبه ، فمثلاً يمكن أن تضع صورة على خريطة توضح الطريق لمحطة البنزين وعليها عنوان ( ضع سيارتك بين أيدينا ) ، هذه الصورة يمكن أن تكون جميلة ومفيدة ، كما أن خريطة الطريق التي توضح أماكن الطرق السريعة والشوارع الجانبية الأساسية يمكن أن تكون جزءاً مكملاً وضرورياً ، فإذا إستخدمت العديد من الصور والعناوين في برنامجك فإنه سيكون أسهل في الإستعمال والفهم .والأشكال الهندسية في فيجوال بيسك ليس لها أية فائدة فعلية سوى أنها تتيح لك أن تزيين واجهة المستخدم بصورة أفضل ، وكلما كان الشيء جميلاً شعر الناس بالألفة معه ، ولعل ذلك يفسر لنا لماذا يمضي الأشخاص ذوي الجاذبية في حياتهم بدون أن يدفعوا ديونهم

هل البرمجة علم أم فن ؟

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

إكتشف الأخطاء وإحفظ عقلك

يقول الكاتب الظريف والاس وانج أنه لكي يصبح البحث عن الأخطاء في البرنامج أسهل فقد قسم علماء الكمبيوتر إلى ثلاثة فئات
1- أخطاء هجائية Syntax Errors
2- أخطاء وقت التشغيل Run-Time Errors
3- اخطاء منطقية Logic Errors
أخطاء هجائية Syntax Errors
تقع الأخطاء الهجائية تقع عندما تخطىء في هجاء أحد الأوامر أو الكلمات المحجوزة ، فمثلاً إذا كتبت كلمة Integer بالشكل التالي Intteger فإن الحاسوب لن يكون لديه أية فكرة عما تقصده منها ، وسوف يتوقف الكمبيوتر عندها ولا يحاول أن يشغل بقية البرنامج وعندما يمر أحد الأخطاء على فيجوال بيسك فإنه يقوم وبكل أدب بتحديد الكلمة الخطأ على الشاشة ليوضح لك بالضبط مكان المشكلة ، يمكنك بعدها أن تكتب الكلمة الصواب ثم تعيد تشغيل البرنامج مرة أخرى .لاحظ أن الأخطاء الهجائية تمنع فيجوال بيسك من تشغيل البرنامج ، فحتى إذا كان هناك خطأ هجائي بسيط في أحد الأوامر فإن فيجوال بيسك لن يقوم بتنفيذ البرنامج حتى تصوبه ، فإذا بدأ فيجوال بيسك في تشغيل البرنامج فإنه يمكنك التأكد من أنه خالٍ تماماً من الأخطاء الهجائية ، عند ذلك ستبدأ في التعامل مع أخطاء وقت التشغيل .
أخطاء وقت التشغيل Run-Time Errors
تقع أخطاء وقت التشغيل عندما يصادف فيجوال بيسك بعض البيانات التي لا يستطيع التعامل معها ، وفي الغالب تكون أخطاء وقت التشغيل أصعب من الأخطاء الهجائية ، فقد يكون برنامجك مليئاً بأخطاء وقت التشغيل ولكنك لن تعرف ذلك إلا عندما تبدأ في تشغيل البرنامج فعلاً .ولكي نعطي مثالاً من الحياة العملية على أخطاء وقت التشغيل ، حاول أن تركب سيارتك وإنطلق إلى أحد المطاعم التي تتيح لك الطلب من السيارة Drive-Thru وعندما تصل إلى النافذة ويسألك العامل عن الوجبة التي تريدها ، أخبره أنك تريد أن تشتري كتاباً !! ولأن العامل مبرمج على التعامل مع طلبات معينة فإن لن يستطيع التعامل مع طلبك وفي الغالب سيعاني هذا العامل من أخطاء وقت التشغيل !!وإذا أردت مثالاً من أحد البرامج في فيجوال بيسك على أخطاء وقت التشغيل إكتب الأمر التالي TaxRate = TaxOwed /YearlyIncomسيعمل هذا الأمر بصورة صحيحة إلا إذا أصبحت قيمة المتغيرYearlyIncome = صفراً ، ولأن القسمة على صفر مستحيلة فإن البرنامج سيتوقف عن العمل .ولأن عدد الأشياء التي يمكن أن تسير على نحو خاطىء غير محدود ، فإنه يمكن أن تعرف الآن لماذا توجد أخطاء في معظم البرامج الكبيرة ، ويتساءل والاس وانج بظرفه المعهود قائلاً أليس هذا شيء يريح البال خاصة إذا تذكرت أنه ينطبق على البرامج التي تتحكم في سير الطائرات وأنت تركب الطائرة فوق المحيط .
الأخطاء المنطقية Logic Errors
إن الأخطاء المنطقية هي أصعب أنواع الأخطاء ، وتقع الأخطاء المنطقية عندما لا يعمل البرنامج بالصورة الصحيحة لأنك أعطيت البرنامج أوامر غير صحيحة أو عندما تعطيه بعض الأوامر التي لا تعمل بصورة صحيحة في السياق الحالي ، ويستطرد وانج قائلاً صدق أو لا تصدق إن إضافة بعض الأوامر غير الصحيحة للبرنامج مسألة سهلة .لكي تتعرف على هذه النقطة بالتفصيل إليكم هذا المثال ، عندما يكون أطفالك منهمكون في مشاهدة برنامج محبب لديهم في التلفاز ، إطلب منهم أن ينظفوا غرفتهم أو أن يقوموا بأداء واجباتهم المدرسية ، قد يقوم الأطفال بالمهمة المطلوبة ولكن ليس بالشكل الذي تتوقعه .
فبدلاً من أن يقوموا بأداء واجباتهم المدرسية بشكل صحيح فإنهم سيملئونها بالأخطاء وبدلاً من تنظيف غرفتهم بجمع القاذورات ووضع الملابس المتسخة في الغسالة فإنهم قد يجمعون كل هذه الأشياء ويضعونها تحت السرير بعيداً عن عينيك ، في كلتا الحالتين قام الأطفال بإتباع التعليمات التي أعطيتها لهم ، ولكن ليس بالشكل الذي تتوقعه أو تريده ، والسبب في ذلك هو أن تعليماتك لم تكن محددة بالضبط ، فإذا وجد الأطفال أية ( ثغرة ) في التعليمات التي تعطيها إياهم فإنهم سيهربون من هذه الثغرة ليتخلصوا من المهام التي تكلفهم بها ، وفي الواقع لا يختلف الحاسوب كثيراً عن الأطفال في بعض الأحيان ستعتقد أنك أعطيت الحاسوب الأمر الصحيح ولن تكون لديك أي فكرة عن سبب عدم عمل البرنامج بالصورة الصحيحة ، في هذه الحالة عليك أن تفحص البرنامج وتتعرف على الأوامر التي قد لا تكون واضحة بدرجة كافية ليقوم الحاسوب بتنفيذها بالشكل المطلوب وإذا كانت البرنامج الذي تكتبه كبيراً ، فإن ذلك قد يعني أن تقوم بفحصه سطراً سطراً حتى تصل إلى الأمر أو الأوامر التي تسبب المشكلة ، حقاً إن البرمجة عمل ظريف .

أفضل الطرق لإكتشاف الأخطاء في برنامجك

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

إكتشف الأخطاء … قبل أن تفقد عقلك دفعة واحدة

يقول المبدع والاس وانج أنه حتى إذا كنت كتبت ملايين البرامج المختلفة من قبل فإنك في الغالب ستقع في بعض الأخطاء من وقت إلى آخر ، فقد تخطىء في هجاء أحد الأوامر أو تنسى جزءاً منه ، لذلك فإن البرنامج قد لا يعمل بصورة صحيحة من أول مرة بغض النظر عن مدى حرصك في أثناء تصميمه وكتابته .إن كل البرامج في العالم بها بعض الأخطاء ويشمل ذلك حتى البرامج الشهيرة جداً مثل
Netscape Navigator ، WordPerfect ، Windows
والفرق الوحيد بين الأخطاء التي توجد في برامجك والأخطاء الموجودة في البرامج التجارية هو أنك لن تجد من يدفع لك ثمن إكتشافك لأخطائك ، وإذا أعطيت البرنامج قدراً معقولاً من الإنتباه عند التخطيط له أو عند تصميمه فسوف تتجنب الكثير من الأخطاء . ويستطرد والاس وانج قائلاً لا تجعل الحديث عن الأخطاء يقلقك فالعديد من الأخطاء تكون غير ضارة نسبياً والأخطاء البسيطة لن تمنع البرنامج من العمل ولكنها قد تؤدي إلى إبطائه أو تؤدي إلى عرض ألوان غريبة على الشاشة أو تؤدي إلى ظهور الكائنات بشكل عشوائي عند تنفيذ البرنامج ، وهناك بعض الأخطاء الكبيرة التي يكون لها تأثير بشع على البرنامج ، فمثلاً تقول وكالة الفضاء الأمريكية " ناسا" أن خطأً إملائياً واحداً في أحد أوامر برنامج خاص بقمر صناعي أدى إلى إنفجار القمر وفقدان الملايين من الدولارات
سبحان من له الكمال وحده ….. فلا يوجد أي ضمان لأن يخرج برنامجك خالياً من الأخطاء تماماً ، وحتى المبرمجون المحترفون والحاصلون على الدكتوراة في علوم الكمبيوتر يقعون من وقت لآخر في أخطاء عند كتابة برامجهم .إن الأخطاء في البرامج هي من الحقائق المسلم بها تماماً مثل وجود الصراصير في مطبخك فلن تتمكن أبداً من التخلص منها جميعاً ولكن بالطبع يمكنك قتل المزيد منها .وقبل أن تبدأ عملية تصحيح الأخطاء يجب أولاً أن يكون لديك أخطاء …. أليس كذلك !
فالبنسبة للبرامج الصغيرة التي تعرض عبارات بسيطة على الشاشة لن يكون لدى الأخطاء أماكن كثيرة لتختبىء بها ، أما بالنسبة للبرامج الكبيرة يمكن أن تكون في أي مكان داخل البرنامج ، وقد تصبح عملية البحث عن الأخطاء محبطة للغاية مثل البحث عن ذبابة في ناطحة سحاب مكونة من 30 طابقاً .

عالم البرمجة المضحك


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

المبرمج المثقف ... وجهات نظر

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

البرمجة وأولويات المعرفة


لا يكفي المرء أن يكون حاصلاً على شهادة متخصصة في البرمجة من إحدى الكليات المرموقة أو المعاهد ذائعة الصيت بأي حال وأياً ما كانت لغة هذه البرمجة ليحمل بكل كبرياء لقب مبرمج ، فإن هذه الشهادة قد تعينه على تملك الأدوات وليس بالضرورة تملك الرؤى والأفكار ، من هنا تأتي أولويات المعرفة العملية والنظرية للمبرمج بواقع سوق العمل البرمجي على مختلف أنماطه وصوره ومتطلباته ، هذه الأولويات إنما تجد لها تطبيفاً من خلال قراءات المبرمج في شتى ميادين المعرفة والعلوم والخوض في تفاصيل بعض منها وذلك لكي يكون مؤهلاً لتطبيق معرفته النظرية الفنية التي إستقاها من دراسته على المعارف والعلوم التي إكتسبها ، والعكس من ذلك فإن المبرمج سيكون أكثر شبهاً بتلك اللوحة الطبيعية الجميلة المعلقة على جدار غرفة نومه ثم يستاءل في كل مرة تقع عينيه عليها ( لم لا تنطق هذه الصورة ؟ ) ، وكيف لها أن تنطق وقد غادرتها الروح ؟ إن الثقافة والإطلاع والخبرة هي روح العمل البرمجي وأعمدته التي يقوم عليها ، وبإطلالة بسيطة على البرامج الأكثر تداولاً في الأسواق فإنك ستجد عنواين كبيرة مثل (( المحاسبة – المبيعات والمخازن – شئون الموظفين – إدارة المطاعم والفنادق – الخ …. )) هذه العناوين أو البرامج لا تعمل كلها بذات الكفاءة وليست سواء من حيث الإنتشار ، وإذا دققت في أسباب ذلك فستدرك أن ثقافة المبرمجين في ذات الموضوع هي ثقافة متباينة ، صحيح أنه ليس من الضروري أن تكون متطابقة ولكن على الأقل من الممكن أن نفهم ان يكون تباينها في طريقة العرض وسرعة الوصول إلى البيانات المطلوبة وخلافه ، ولكن أن يصل التباين إلى حد المساس بما هو معلوم من الموضوع بالضرورة …. هنا تكون الآفة الكبرى فلا أتصور أن يكلف مبرمجاً ما مثلاً بإعداد برنامج للمحاسبة لإحدى الشركات ثم ينظر ملياً إلى المستخدم ويسأله (( آه … حسناً ماذا تريدني أن أفعل لك بالضبط ؟ )) هذا المبرمج إن لم يكن لديه القدر الكافي من المعلومات عما ينتوي القيام به في هذا البرنامج مثل (( الأستاذ العام – دليل الحسابات – والقيود بأنواعها – وموازين المراجعة )) فإن من الأفضل له أن يعتذر عن القيام ببرنامج لا يعلم مسبقاً كيف يقوم بإعداده ناهيك عن كيفية عمله بعد إنجازه ، لا تعني تلك المقالة أنه يتعين على المبرمج أن يكون ملماً بكل التفاصيل الدقيقة لجميع العلوم والمعارف التي من المتوقع أن تكون محلاً لإستخدام برمجي منتظر ، وإلا كان حديثنا سيكون أشبه بقائد دراجة هوائية قرر بلا مقدمات أن يكون قائداً لطائرة من نوع الكونكورد فائقة السرعة، هذا لم أقصده ولم أشر إليه ، إنما أشير إلى وجوب التحصيل المعرفي العام لمعظم العلوم ، ثم تنمية نوع أو إثنين من المعرفة تميل إليه بالخوض في تفاصيله ودقائقه ، وعليه فإنك ستكون بالتالي أقدر من غيرك من المبرمجين في ذلك النوع من العلوم ، ومن هنا فإن لقب (( مبرمج )) لا يعني في الحقيقة وفي ذاته أنك قادر على التعامل مع كافة العلوم أو حتى علماً واحداً أياً كانت مهارتك البرمجية ما لم تكن متحصناً بمعرفة جيدة ورصينة بذلك العلم . وإذا إفترضنا أنك كمبرمج لك حظاً أو نصيباً من الخيال الخصب أو الروح المرحة فأنك تكون قد حظيت بكل يحتاجه برنامجك من أسباب النجاح والإنتشار (( دراسة أكاديمية محترمة – ثقافة واسعة وعميقة – خفة ظل وجمال )) ، وحسب وجهة نظري فإن 100% من المبرمجين لا يحظون بالعنصر الثالث .

نصيحة قبل ان تصمم واجهة المستخدم لبرنامجك


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

أيها المبرمجون …لا تبنوا فوق الرمال


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

البرمجة أسلوب حياة أم وسيلة إرتزاق ؟

إذا كانت المهن التي نعمل بها تمثل لنا في النهاية مصدراً للدخل ووسيلة للإرتزاق أياً ما كانت طبيعة تلك الأعمال وأياً ما كان الدور الذي نمارسه في الحياة للمحافظة على هذا الدخل أو تلك الوسيلة ، إلا أنه يبدو لي أن البرمجة كمهنة إحترافية هي واحدة من أهم المهن التي تخرج قليلاً عن كونها وسيلة للإرتزاق أو حتى وسيلة لتنمية مصادر الدخل للفرد منا ، فالبرمجة لها طبيعة خاصة وسمات فريدة تتعاظم في قيمتها على كثير من المهن والحرف الأخرى وذلك حسب التفصيل التالي الذي لا يعدو أن يكون وجهة نظر شخصية لي ليس أكثر:- (1)البرمجة أسلوب حياة حيث تتبدى شخصية المبرمج بأكثر ما يكون الوضوح والتبيان ، لأن البرمجيات في النهاية ما هي إلا عصارة فكرية حقيقية ، ومخاض ذهني عسير لما بذله المبرمج والفريق الذي يعمل معه ليخرج برنامجاً ما بالصورة التي ترضي المستخدمين له وقليلاً ما هم . (2)تستطيع أن تلمح – لاسيما إن كانت لديك خبرة برمجية ولو متواضعة – كم العرق المبذول وحرق الأعصاب والدموع والإحمرار التي تبدى في عيون المبرمجين ، وكم هو مقدار الدخان الذي نفثه المبرمج لتستمتع أنت كمستخدم … أنك عزيزي القارىء وبنظرة بسيطة على سطح مكتب المبرمج سترى بأم عينيك كم الفوضي الماثلة هناك ، فتلك قصاصات وأوراق صغيرة متناثرة يميناً وشمالاً ، وتلك أقلام مجردة من أغطيتها … ناهيك بالطبع عن فناجين القهوة وأكواب الشاي التي نسي المبرمج أن يحتسيها بينما يقوم بإخراج مولوده الجديد للحياة . (3)في البرمجة سيكون بوسعك الحكم على شخصية المبرمج بل والغوص في أعماق عقله بل ومناظرته أحياناً فيما يفعل ، وذلك من خلال ردود أفعالك الأولية لبرنامجه ومن واقع ما يتبدى له من كافة عناصر البرنامج المتناثرة على واجهة المستخدم وغيرها من الصفحات الأخرى ، وإذا كان الإمام علي رضي الله عنه وكرم الله وجهه قال مرة (( أن مكنونات القلوب تظهر على صفحات الوجوه وزلات اللسان )) ، فبوسعنا القول إقتباساً أن مكنونات نفس المبرمج بل وعقده الداخلية تظهر في أجل صورها في عمله البرمجي من خلال توزيعه لأزرار الأوامر والأيقونات ونمط الخط الذي يفضله وحجمه ولونه وإنسيابيته في التنقل بين أجزاء البرنامج العديدة . (4)في البرمجة تتبدي لك كذلك حرية الحركة والمرونة الفكرية التي يتمتع بها المبرمج ، فطبيعة العمل الذي يقوم بإنجازه لا علاقة له بأية ترتيبات بيروقراطية أو تسلسل وظيفي ممل أو مراعاة لأي قواعد هرمية تفرضها غيرها من الأعمال ، فالمبرمج العاقل – وهو من الكائنات النادرة الآن ولا أقول المنقرضة – ليس سوى ذلك البحار العاقل الكثير التوكل على الله ، فهو يحسن إختيار وقت الإبحار أولاً ، متوكلاً بما يعن له من أسباب الرزق كتجهيز عدته وعتاده متحلياً بالصبر محسناً الظن بالله ثم بنفسه . (5)تكاد تكون البرمجة المهنة الوحيدة التي من اليسير أن تطلق على أصحابها العديد من الصفات والمزايا المتناقضة في آن واحد ويكون كلامك مع ذلك في مجمله صحيحاً ، بل والأكثر من ذلك فإن عديد من تلك الصفات المتناقضة قد تجتمع في شخص المبرمج نفسه مرات عديدة ، فهناك المبرمج المرح وذلك الكئيب ، وهناك النوع الذي تشعر معه أنك في موطنك لم تبرحه ، وذلك الذي يرميك بلا شفقة برمجية في عزلة بعيدة عن العالم حيث تتمنى وقتها لو أن أمك لم تلدك لتستخدم هذا البرنامج … وهناك النوع الذي يدللك كمستخدم كأي أم رؤوم تداعب طفلها وتسير معه رويداً رويداً متنقلة معه من مرحلة سنية لمرحلة أخرى بسلاسة ولطف ، وهناك النوع الذي لا يدلل ولا يداعب بل ولا يرحمك وإن صادفت نوعاً من ذلك فعليك أن تتساءل وتراجع حساباتك ثم تبتسم وتقول (( لعلي كمستخدم أسأت ما بيني وبين الله فجعل الله لي هذا المبرمج جزاءاً )) ربما لن يتم حل المشكلة بتلك المقولة ، ولكنك قد تود الحصول على مخرج ما .وفي النهاية وأياً ما كان وجه الإتفاق والإختلاف مع كل أو بعض ما سبق فإن البرمجة تظل ذلك الكائن الذي يدل علينا ويفصح عن مكنونات شخصيتنا بل ويفضحنا أحياناً بلا رحمة لأنها ببساطة أسلوب حياة … فتخير لنفسك عزيزي المبرمج وتساءل أي حياة تبتغي ؟!

أيها المبرمجون كيف تكتبون برامجكم ؟


يقول الكاتب اللطيف والاس وانج أنه لا توجد طريقة واحدة صحيحة لكتابة أي برنامج ، فتقريباً هناك الكثير من الطرق المختلفة لكتابة البرامج بصورة صحيحة ، تماماً كأنك تسافر من مدينة جدة مثلاً إلى مدينة الرياض بطرق مختلفة ، بعض الناس يستخدمون خطوط الطيران ، وآخرون يسافرون بالبحر ، وآخرون بالباص ، وآخرون يقودون بأنفسهم ، وآخرون كالمبرمجين يختارون المغامرة ويقطعون المسافة مشياً على الأقدام ، وبنفس المنطق يمكنك أن تختار من بين عدة طرق مختلفة لكتابة نفس البرنامج ، ولكن بغض النظر عن طريقة كتابة البرنامج فإن النتيجة يجب أن تكون واحدة . إن مهمتك كمبرمج هي كتابة برنامج يعمل بصورة صحيحة ويكون في ذات الوقت سهل الإستخدام ، فإن لم يكن يعمل فلن يتمكن أحد من إستخدامه (( رغم أنك كمبرمج قد تستطيع أن تبيع نسخاً منه لبعض الناس الذين لا يرتابون فيك )) ، وإن لم يكن سهل الإستعمال فلن يريد أحد أن يستخدمه حتى وإن كان يعمل بشكل صحيح . وعادة ما يكون إختبار البرنامج مهمة بسيطة ، فمثلاً إذا كان من المفترض أن يقوم البرنامج بطبع عناوين المراسلات ولكنه يقوم بدلاً من ذلك بالخروج من البرنامج مع إغلاق جهاز الحاسوب ، فإنه سيكون من الواضح أن البرنامج لا يعمل بصورة صحيحة ! . ولكن معرفة إذا كان البرنامج سهل الإستخدام أم لا هي مهمة أصعب قليلاً ، فإن ما قد تظنه سهل الإستعمال قد يكون مستحيل الفهم لشخص آخر . في هذه النقطة ينصح والاس وانج إن إنشاء البرامج بصورة مشابهة للبرامج التجارية الشهيرة والمتوفرة في الأسواق يساعد المستخدمين على حسن التعاطي مع برنامجك ، فالفيجوال بيسك مثلاً يوفر لك الأدوات التي تساعدك على إنشاء برامج يفهمها الجميع فهو يتيح لك إضافة النوافذ والقوائم المنسدلة وأزرار الأوامر ومربعات الحوار وهي ذات الخصائص التي ألفها المستخدم لدي قيامه بإستخدام برامج Windows 95 , 98 ، Windows NT ، وبالتالي فلن يشعر المستخدم بالغربة لدي قيامه بإستخدام برنامجك ، هذا طبعاً مع بعض الإختلافات المعتادة في هذا الشأن . وهذا الإختلاف يجب ألا يزعجك فمثلاً معظم الناس يستطيعون أن يقودوا سيارة من نوع ” تويوتا ” وأخرى من نوع ” فورد ” بدون أية مشكلة لأن عجلة القيادة والفرامل تبدو بنفس الشكل وتعمل بنفس الطريقة في الحالتين ، حتى ولو لم تكن الأبواق ومساحات الزجاج كذلك ، متفقين ؟؟

المبرمجون وقصص الصغار

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

البرامج المبتسرة


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

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


مقدمة :- إن أكثر أعراض الاكتئاب ومحوره الرئيسي هو المزاج المنخفض للفرد وفقدان الاستمتاع بالنشاطات التي كان يستمتع بها في العادة ، وضعف التركيز وعدم القدرة على الانتاج والتعب بعد أقل مجهود مع الشعور بعدم الارتياح عندما يستيقظ من نومه ، وغالباً ما يستيقظ مبكراً عن الوقت الذي تعود أن يستيقظ فيه ولا يستطيع النوم مرة أخرى. كذلك تقل شهية المكتئب ولا يستطيع الأكل ويفقد الإستمتاع به وينقص وزنه. ويشعر المكتئب بالدونية وقلة التقدير للذات وعدم الثقة بالنفس. كما يشعر المكتئب في كثير من الاوقات بالذنب دون وجود سبب لهذا الشعور والذي غالباً ما يسيطر على المكتئب ويجعله يحس بأنه سبب في مصائب الدنيا جميعها وكثيراً ما يفقد المريض بالاكتئاب الأمل في المستقبل ويشعر بظلمته وأن لا أحد يستطيع مساعدته وكذلك أن لا شيء يستحق أن يعيش من أجله وتراوده الأفكار الإنتحارية . ( الفقرة السابقة منقولة بتعديل بسيط من خلالي من أحد مواقع الشبكة العنكبوتية) . على ضوء المقدمة السابقة لنا هل أن نتساءل بكل براءة عن أولئك المبرمجين ، وهل تنطبق أعراض هذا المرض عليهم ؟ . لما كانت البرمجة في ذاتها عمل خلاق وتنهض على قواعد من الإستقلالية في العمل إلى حد كبير وتقوم على قدر كبير من المرونة وتفتح آفاق واسعة لحرية الحركة الذهنية والتنقل الوجداني الجميل وتعتمد في ذاتها على قواعد منطقية عقلية ، وتفرد مساحات جميلة لأفكارنا فقد يكون المبرمجون هم أقل الأفراد العقلاء – هذا إذا إعتبرناهم عقلاء حقاً – المعرضون لهذا المرض وذلك على عكس الموظفين التقليدين الغرقي في روتين معقد وقواعد جامدة حيث لا فرصة لا للإبداع ولا الإمتياز . إن إحساس المبرمج بأنه يبدع ولو من خلال برنامج بسيط به زر أمر واحد هو زر الخروج يجعله يشعر بالنشوة والإرتياح وتقديره لذاته ، أنا شخصياً وفـــي بدايتي على أعتاب البرمجة أنشأت زر أمر واحد على فورم تعيس وكتبت في شفرته كلمة أكثر تعاسة إسمها
End
وكم كانت نشوتي عميقة وأنا أرى البرنامج يقوم بالخروج لدى ضغطي على الزر المذكور ، وكم كنت أباهي زوجتى وأولادي وأن أريهم بأم أعينهم أني على إستعداد أن أقوم بإنهاء البرنامج بكلمة بديلة إسمها
Unload me
وأخاطبهم بإستعلاء قائلاً أن مستشاري مايكروسوفت ينصحون بأن أستخدم
Unload me
بدلاً من
End
رغم عدم معرفــــتي وقتها بأهمية التفاضل بين الكلمتين . ما علينا … وبناء على ما تقدم فكونك عزيزي المبرمج مبدعاً أو حتى لديك أدني إحساس بالإبداع فهذه ضمانة كبرى لك من شأنها أن تبعدك عن داء الكآبة والمكتبئين ، ولكن هل هذا يعني أن البرمجة لا تنتج كآبة ولا تخلف وراءها مكتئبين مطلقاً ؟ الإجابة أنه وللأسف ورغم مظاهر الجمال وآيات الإبـــــداع في البرمجة فإنها تترك وراءها قطاعاً كبيراً من المكتئبين والصرعى والمرضى النفسيين وهذا القطاع ليس سوى أولئك المستخدمين البسطاء الذين وثقوا بنا وإشتروا ببراءة وعن طيب خاطر البرامج التي ننتجها أنا وأنت ، إذن فلننعم أنا وأنت أيضاً بصحة نفسية طيبة ونترك الكآبة لذلك القطاع المسكين ودعونا نلهو بأموالهم التي حشونا بها جيوبنا .

أرشيف المدونة

زوار المدونة

أون لاين


web stats
Powered By Blogger

مرات مشاهدة الصفحة