الجمعة، ديسمبر 10، 2010

راجع ما كتبته في البرنامج قبل لوم الآخرين

بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
لازلنا مع كتاب "97 مسألة ينبغي على كل مبرمج أن يعلمها"....

9- راجع ما كتبته في البرنامج قبل لوم الآخرين
  • يعتقد الكثير من المبرمجين أن برامجهم لا يمكن أن يكون بها أخطاء! بل يسيئون الظن بالمترجمات compilers و أنظمة التشغيل operating systems ... إلخ و يحسبون - في كثير من الأحيان - أنها سبب المشاكل في برامجهم!
  • و الحق أن المترجمات compilers و أنظمة التشغيل operating systems و مكتبات البرمجة الجاهزة software libraries ... إلخ هي برمجيات في النهاية, و لذلك من الوارد أن يكون فيها أخطاء, خاصة إذا كانت في مراحل تطويرها الأولية alpha or beta releases. أما إذا كانت هذه البرمجيات ناضجة mature, و مستخدمة بكثرة, و هناك الكثير من البرمجيات التي تعتمد عليها, فالأخطاء في مثل هذه البرمجيات تكون نادرة جدا, و من الأجدى - في مثل هذه الحالة - أن تبحث عن المشكلة في برنامجك أنت.
  • فمثلا إذا علمت بوجود مشكلة في برنامجك, اعرف خطوات الاستخدام التي أدت إلى حدوث هذه المشكلة, قد يكون برنامجك استُخدم بطريقة لم تحسب لها حسابا, أو بخطوات غير التي توقعتها!
  • و من أكثر مصادر المشاكل في البرامج: تعدد المسارات multi-threading, و طرق اكتشاف المشاكل debugging و اختبارات فحص الوحدات unit test وحدها لا تكفي لاكتشاف مصادر المشاكل في مثل هذه الحالة؛ و لذلك فالحاجة هنا إلى تبسيط تصميم البرنامج و برمجته تكون أكثر إلحاحا.
يمكن قراءة النص الأصلي من هنا

الجمال في البساطة

بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
لازلنا مع كتاب "97 مسألة ينبغي على كل مبرمج أن يعلمها" ...

5- الجمال في البساطة
  • البرمجة الجميلة لها مظاهر عدة, أهمها "البساطة", فبغض النظر عن كبر البرنامج أو تعقيده, إذا كانت أجزاء البرنامج "بسيطة": صغيرة, و لها مسئوليات محدودة, و أسماء معبرة, و ترتبط ببعضها بروابط بسيطة أيضا, فالبرنامج جميل!
  • و البساطة في البرمجة لها مميزات أخرى, منها أن البرنامج البسيط يكون سهل الفهم, سهل الاختبار testable, و سهل الصيانة maintainable كذلك.
يمكن قراءة النص الأصلي هنا

السبت، نوفمبر 27، 2010

عرض كتاب نقد الجذور الفكرية للديمقراطية الغربية


بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...

كتاب "نقد الجذور الفكرية للديمقراطية الغربية", ألفه الأستاذ الدكتور محمد علي مفتي, و طبعته مجلة البيان سنة 1423 هـ / 2002م.
و قد استهل المؤلف بحثه بقول الله عز و جل "أفحكم الجاهلية يبغون و من أحسن من الله حكما لقوم يوقنون" [المائدة: 50] و ختمه بقوله "فلا ديمقراطية في الإسلام, و لا إسلام في الديمقراطية" و بين الاستهلال و الخاتمة كتب بحثا ماتعا في 118 صفحة, لخصه في خاتمة الكتاب, في آخر ثلاث صفحات, فقال (بتصرف يسير جدا):

قدمت الدراسة تحليلا نقديا للجذور الفكرية للديمقراطية الغربية؛ بهدف بيان أن الديمقراطية نظام سياسي قائم على مرتكزات, و مرتبط بشروط محددة لا بد من وجودها لتتحقق الديمقراطية. و قد ناقشت الدراسة أهم تلك القواعد أو المرتكزات و التي منها:
  • "سيادة الأمة"؛ أي حق الأمة المطلق في تبني نظام الحياة الذي تراه مناسبا من منطلق كونها تمثل المرجعية العليا في الدولة,
  • و "الحل الوسط" الذي يعد أسلوبا دائما لحل جميع المشكلات في الدولة. و يرتبط "الحل الوسط" بالعلمانية التي يقوم عليها النظام الديمقراطي. و ينطلق من افتراض أن مصالح المرء المتعلقة بالمباديء و القيم و المصالح المادية لا بد أن تسوى بـ "الحل الوسط" عند نشوء نزاع في الدولة بين الأفراد. و هذا يعني بالضرورة عدم فرض قيم اجتماعية أو عقيدية على المجتمع؛ لأن ذلك يؤدي إلى الاستناد إلى المرجعية العقيدية أو الأخلاقية في حل المشكلات الاجتماعية, و هو ما يتعارض مع ديمقراطيات الحل الوسط.
  • أما "الحرية": التي تمثل جوهر الديمقراطية فتقوم على النظرة الفردية للإنسان, و على جعله المرجعية العليا في الدولة.و تتحق حرية المرء في النظام الديمقراطي عن طريق إقرار "حرية العقيدة"؛ أي حيادية الدولة تجاه العقيدة, و هي تعني حق الأفراد في تبني ما يشاؤون من عقائد دون تدخل من أحد. و "حرية الرأي" التي تعني - كذلك- حق الأفراد في تبني ما يرغبون من أفكار و مفهومات و معالجات. و قد انبثق عن حرية الرأي "التعددية السياسية"؛ لتعبر عن حق الجماعات المختلفة عقديديا و فكريا في العيش المشترك, و في التنافس السياسي للوصول للسلطة انطلاقا من قاعدة تادول السلطة بين الجماعات المختلفة التي تقوم عليها التعددية السياسية.
و قد بينت الدراسة أن الديمقراطية نظام قائم على "فصل الدين على عن الدنيا". و تؤكد قواعد الديمقراطية - المشار إليها أعلاه - علمانية النظام, فجعل الفرد المرجعية العليا في النظام مرتبط بإنكار هيمنة الدين على شؤون الحياة, و بناء الدولة على الحرية و الحل الوسط يدل على أن الدولة الديمقراطية تختلف عن غيرها بحياديتها العقيدية و بفسحها المجال لحرية الرأي لكل أفراد المجتمع.
فالحرية في تبني الآراء و الدعوة إليها - أيا كان مصدرها و نوعها - مكفولة للجميع في ظل النظام الديمقراطي. كما يعبر الحل الوسط بصدق عن علمانية النظام الديمقراطي؛ و ذلك بإخضاع كل شؤون الدولة للمساومة؛ حيث تخضع جميع القرارات - العقيدية منها و الأخلاقية و المصلحية - للحل الوسط الذي يعد ركيزة رئيسة من ركائز الديمقراطية الغربية العلمانية.
و نظرا لما للفكر الديمقراطي من أثر على الساحة السياسية و على الكتاب و المفكرين المسلمين؛ فقد قدمت الدراسة تحليلا لمواقف عديد من الإسلاميين و الحركات الإسلامية من الديمقراطية. و قد تبين أن [الكثير من] (في الأصل: معظم) الكتاب و المفكرين الإسلاميين المعاصرين ينادون بتبني الديمقراطية؛ إما بالقول بأن تبني الديمقراطية يعد ارتكابا لأخف الضررين, فالديقراطية العلمانية "أقل شرا" من العلمانية الاستبدادية, كما يقولون. أو بالقول بأن الديمقراطية لا تعارض الشريعة الإسلامية, أو بإلباسها ثوبا شرعيا و جعلها جزءا من تعاليم الشرع الإسلامي. و قد أدت المناداة بتبني الديمقراطية إلى إقرار القواعد السياسية التي تقوم عليها كالتعددية السياسية, و التعددية الحزبية, و المشاركة في السلطة, و تداول السلطة عن طريق الانتخابات الدورية.
و بناء على ما سبق؛ نادى الإسلاميون الديمقراطيون بضرورة التعددية السياسية المتمثلة في إفساح المجال لكل التيارات السياسية في لعب دور في الساحة السياسية انطلاقا من حق الجماعات المتبياينة عقيديا في الوجود و في التعايش مع غيرها, و حقها في التنافس من أجل الوصول إلى السلطة. و قد أدى هذا الموقف من التعددية إلى المناداة يالتعددية الحزبية؛ أي إقرار وجود أحزاب سياسية شيوعية و علمانية و غيرها في المجتمع, و السماح لها بالمشاركة في الانتخابات, و في طرح برامجها للتصويت عليها من منطلق حقها في الوجود في مجتمع تعددي.
و قد بينت الدراسة خطأ جعل الديمقراطية أساسا للعمل من أجل استئناف الحياة السياسية الشرعية. فالدولة الإسلامية دولة شرعية يقوم نظامها على تطبيق أحكام الإسلام في واقع الحياة من منطلق سيادة الشرع, و ليس على التعددية أو الحرية السياسية. و في نظام الإسلام السياسي لا يجوز إقرار التعددية الحزبية أو السياسية بالمفهوم الغربي لتعارض ذلك مع قواعد الإسلام السياسية, و الدولة الإسلامية لا تقوم بالرجوع إلى الديمقراطية العلمانية بل بالرجوع إلى أحكام الإسلام و معالجته السياسية المتعلقة بنظام الحكم الشرعي, و غياب نظام الإسلام السياسي لا يجوز أن يؤدي إلى تبني النظام الديمقراطي العلماني مهما سيقت له من حجج و قدمت له من مقدمات؛ ذلك لأن الديمقراطية, و العلمانية, و الاستبداد السياسي, و الدكتاتورية و أنظمة الطغيان كلها "طاغوت" لا يقره الشرع الإسلامي, و لا يدعو إليه بحال من الأحوال.
و قيام بعض الإسلاميين بالدعوة إلى الديمقراطية و تسويغ تبنيها يتقريبها من الإسلام لا يدل بحال على أن الإسلام يجيز تبني الديمقراطية؛ "فلا ديمقراطية في الإسلام, و لا إسلام في الديمقراطية". ا.هـ.

الجمعة، نوفمبر 26، 2010

حكم المشاركة في الانتخابات

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

الأحد، نوفمبر 07، 2010

أنت لست مستخدم البرنامج

بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
لازلنا مع كتاب "97 مسألة ينبغي أن يعرفها كل مبرمج"....

3- أنت لست مستخدم البرنامج
لا تحسبن - أيها المبرمج - أن مستخدم برنامجك يفكر مثلك, أو أنه سيستخدم برنامجك بنفس طريقتك. فإن فعلت فلا تلومن غير نفسك إن كانت برامجك صعبة الاستخدام.
و أفضل طريقة لمعرفة سلوك المستخدم هي مراقبته! أي مراقبته و هو يؤدي نفس الوظيفة في برنامج مشابه مثلا, فإن كان سيتخدم برنامجك فانتبه لمواضع تعثره, و لا تساعده لتتمكن من معرفة سلوكه. و بمراقبة عدة مستخدمين سيتبين لك أوجه تشابه السلوك في استخدام البرنامج, و هذا التشابه هو الذي ستبني سهولة استخدام برنامجك عليه.
و إليك بعض الفوائد التي تساعدك في جعل برامجك سهلة الاستخدام:
  • إذا تعثر مستخدم برنامجٍ, فكن على ثقة أن ملفات المساعدة هي أسوأ شيء يمكن أن يلجأ له المستخدم, بل دائما سيتركز تفكيره في الخروج من عثرته بالبحث داخل الشاشة التي هو فيها. فإن كنت و لا بد ستحتاج لنصوص توضيحية, فاجعلها قريبة من موضح المشكلة؛ و لذلك فالتلميحات tooltips التي تضعها على أجزاء البرنامج مناسبة جدا في هذه الحالة.
  • أن تجعل طريقة واحدة, واضحة, سهلة, لعمل وظيفة واحدة في البرنامج, خير من أن تجعل عدة طرق مختصرة shortcuts لعمل نفس الوظيفة فتشتت المستخدم.
  • إذا سألت المستخدم عم يريد, سيخبرك عن أشياء, فإذا راقبته ستجده يفعل أشياء مختلفة, و لذلك فاجلس مع المستخدم ساعة تراقب سلوكه خير من أن تجلس يوما تخمن ماذا يريد!
يمكن قراءة النص الأصلي من هنا.
و للحديث صلة إن شاء الله تعالى...

الخميس، نوفمبر 04، 2010

ترجمة كتاب 97 مسألة ينبغي أن يعرفها كل مبرمج 97 things every programmer should know--2

بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
2- استفد من مباديء البرمجة الوظيفية
بالرغم من زيادة الاهتمام بالبرمجة الوظيفية functional programming في الآونة الأخيرة, إلا أن هذه المقالة ليس غرضها حثك على تعلم إحدى اللغات الوظيفية, بقدر حثك على الاستفادة من مبادئها, و أهم هذه المباديء ما يسمى بالشفافية المرجعية Referential transparency. و التي تعني أن البرنامج متى استُدعي من أي مكان سيعطي نفس النتيجة طالما أخذ نفس المدخلات و, قد تحدثنا عنها في المقالة السابقة, فلتُراجع لزاما.
من أهم مشاكل البرامج, تلك الأخطاء الناتجة عن تغيير قيم المتغيرات variables من أكثر من مكان في البرنامج, و هناك دائما قواعد في لغات البرمجة تحدد أي جزء في البرنامج يمكنه الوصول إلى أي معلومة (Visibility semantics), لكن هذه مرتبطة بمدى حِذق (مهارة) المبرمج في استخدامها.
يمكن تجنب هذه المشاكل إذا استطعنا تحقيق "الشفافية المرجعية" في برامجنا, عن طريق الإكثار من تقسيم البرامج إلي أجزاء أصغر numerous smaller functions, كل منها له مسئولية محدودة, و يتعامل مع البيانات التي تمرر له فقط passed arguments من غير التعامل مع بيانات مشاعة بين كل أجزاء البرنامج. هذا الأسلوب سيقلل المشاكل و سيسهل اكتشاف الأخطاء أيضا. و لن تتمكن من تطبيق هذه المباديء باحتراف ما لم تتعلم إحدى لغات البرمجة الوظيفية, حيث هذا الأسلوب في البرمجة هو الأسلوب الافتراضي.
عند برمجة واجهات الاستخدام User Interfaces لن يكون هذا الأسلوب مجديا, بل الأجدى أن تستخدمه عند برمجة "لب البرنامج", أي طبق هذا الأسلوب عند برمجة الوظيفة الفعلية للبرنامج و ليس واجهة استخدامه.
و هذا هو النص الأصلي للمقالة.

السبت، أكتوبر 30، 2010

الشفافية المرجعية في البرمجة الوظيفية Referential transparency in functional programming

بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
من أهم مميزات البرمجة الوظيفية functional programming ما يسمى بالشفافية المرجعية Referential transparency.
لفهم الشفافية المرجعية فينبغي علينا أن نستوعب مفهوما آخر يسمي التأثير أو التأثر الجانبي side effect للبرنامج, و أي برنامج يتفاعل مع العالم الخارجي, كأن يستقبل بيانات من المستخدم, أو يكتب بيانات في ملف, أو يغير في بعض البيانات التي هي مشاع بين أجزاء البرنامج الأخرى (و التي بدورها تمثل حالة state البرنامج الكلي) ...إلخ, فيعتبر له تأثير أو تأثر جانبي.
يمكن اعتبار البرنامج أو العبارة البرمجية expression ذو شفافية مرجعية إذا أمكن استبداله يقيمته من غير أن تتغير النتيجة النهائية, أو بعبارة أخرى إذا أعطَى نفس المخرجات عندما تُعطى له نفس المدخلات. مثال: العملية الرياضية (5 * 5) يمكن استبدالها بـ (25) من غير "تأثير جانبي" على البرنامج, فهي ذات شفافية مرجعية, أما إذا كان لدينا برنامج جزئي function - و ليكن اسمه GetInput(), يأخذ بيانات من المستخدم ليعرض النتيجة بناء على ما أدخله المستخدم, فهذا البرنامج ليس له شفافية مرجعية لأنه عند إعطائه نفس المدخلات (في حالتنا هذه لا شيء) نحصل على نتائج مختلفة تتبع ما أدخله المستخدم؛ فالبرنامج في هذه الحالة له "تأثر جانبي".
لم أفهم بالضبط سبب تسمية هذا المفهوم بالشفافية المرجعية, لكن أخمن أن السبب هو أن البرنامج متى استُدعي من أي مكان سيعطي نفس النتيجة طالما أخذ نفس المدخلات, فالمرجع هنا (البرنامج) فيه شفافية, و لا يتأثر يمن استدعاه... ليتنا نطبق هذا المفهوم في حياتنا السياسية :)
و السلام...

الخميس، أكتوبر 28، 2010

ترجمة كتاب 97 مسألة ينبغي أن يعرفها كل مبرمج 97 things every programmer should know--1


* مقدمة
بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...

فكتاب 97 مسألة ينبغي أن يعرفها كل مبرمج فيه فوائد متفرقة, على طريقة صيد الخاطر, كتبها مبرمجون كثر. و من مراجعات الكتاب على موقع أمازون بدى لي أن الكتاب جيد , و يفيد أكثر المبرمجين المبتدئين.
و الجميل في الكتاب أنه يمكن قراءته كاملا من على موقعه, و الأجمل أن هناك مسائل أخرى - على نفس الموقع أيضا - فيها زيادة فائدة, و ليست مطبوعة في الكتاب.
فأحببت أن أترجم الكتاب (و إن شئت فاعتبره تلخيصا أيضا) لكن بالطبع أتصرف في الترجمة و لا أتقيد فيها بالحَرْفية ...و لا حول و لا قوة إلا بالله.
و الآن, مع المسألة الأولى...

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

الأربعاء، أكتوبر 27، 2010

البرمجة الثنائية Pair Programming

* مقدمة
بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
فالبرمجة الثنائية Pair Programming هي أن يجلس اثنان من المبرمجين على حاسب واحد ليكتبا برنامجا واحدا: أما أحدهما - و هو القائد driver - فيكتب البرنامج و أما الأخر - و هو المراجع أو المراقب observer - فيدقق فيما يُكتب و يتابع سير العمل. و يتبادل المبرمجان القيادة و المراجعة فيما بينهما من حين لآخر.
و البرمجة الثنائية هي إحدي الطرق المستخدمة في تطوير البرمجيات السريعة أو المرنة Agile Software Development و أحد أهم تطبيقات البرمجة القصوى Extreme programming في هندسة البرمجيات.

* إحصاءات [1]
  • أظهرت دراسة سنة 1998 أن البرمجة الثنائية تقلل وقت البرمجة بنسبة 40% بينما تزيد مجهود المبرمجين بنسبة 60%.
  • دراسة أخرى سنة 2000 أن البرمجة الثنائية تؤدي إلى تحسن في دقة البرنامج correctness و خلوه من الأخطاء و الثغرات البرمجية bugs بنسبة 15%, و كذلك أظهرت أن وقت البرمجة يقل بنسبة 20% إلى 40%, لكن في نفس الوقت تؤدي البرمجة الثنائية إلى زيادة في المجهود المبذول بنسبة 15% إلى 60%!
  • أظهرت دراسة ثالثة سنة 2006 أن البرمجة الثائية نسبة إلى البرمجة الفردية تؤدي إلى تحسن ملحوظ في الإنتاجية إذا كان كلا المبرمجين مبتدئين. أما إذا كان كلا المبرمجين محترفين فإن هناك تحسن و لكن ليس بذات النسبة العالية.
  • أظهرت دراسة رابعة سنة 2007 أن البرامج المعقدة تتحسن جودتها بنسبة 48% بتطبيق البرمجة الثنائية, و لكن لا يتأثر وقت الإنتاج. بينما البرامج البسيطة يقل وقت إنتاجها بنسبة 20% عند تطبيق البرمجة الثنائية و لكن لا يحدث تحسن ملحوظ في دقة البرنامج correctness.
  • أظهرت دراسة خامسة سنة 2008 أن البرمجة الثنائية تظهر فائدتها القصوى عند تصميم البرامج (يعني التصميم الهندسي و ليس التصميم الفني)
  • و في سنة 2007 أظهرت بعض التجارب أنه حتى بتطبيق أسلوب البرمجة الثنائية لا يمكن تنفيذ برامج دقيقة و رخيصة بسرعة؛ فالبرامج المعقدة تتطلب دائما مجهودا أكثر, و تنفيذ برامج بسيطة بسرعة دائما يؤثر على دقة و جودة هذه البرامج. و خلاصة هذه التجارب أن البرمجة الثنائية ليست دائمة هي الحل الأفضل لكل مشكلات البرمجة.

* المميزات
  • البرامج الناتجة عند تطبيق أسلوب البرمجة الثنائية تُنفذ أسرع. و تكون أقصر, و أبسط, و أجود من ناحية التصميم الهندسي, و أكثر تنظيما مما يسهل تعديلها أو إصلاحها لاحقا, و تحتوي على أخطاء أو ثغرات برمجية bugs أقل, من نظيراتها الناتجة عن البرمجة الفردية.
  • تتيح البرمجة الثنائية نقل الخبرات (سواء خبرات البرمجة العامة أو الخاصة بالبرنامج نفسه) بين المبرمجين.
  • يمكن تطبيق البرمجة الثنائية بصورة خفيفة, حيث يمر كل مبرمج في فريق العمل على كل زملائه واحدا تلو الآخر ليعملا سويا بالطريقة الثنائية؛ و هذه الطريقة تفيد في نقل معلومات و خبرات الفريق بين بعضهم بعضا, و تقلل من تأثير ترك أحد المبرمجين للفريق.
  • البرمجة الثنائية تساعد كلا المبرمجَين في التركيز و عدم تضييع وقت العمل. كما أن الناس عادة لا تقاطع من يظنون أنهم مجتمعون للعمل (كما في حالتنا حيث يجتمع اثنان من المبرمجين للعمل سويا) إلا للضرورة.

* العيوب
  • بالرغم من أن البرمجة الثنائية تقلل من وقت تنفيذ البرنامج, إلا أنه بجمع وقتي المبرمجَين تكون محصلة الوقت المستغرق أعلى مما لو نفذ البرنامج مبرمج واحد. و هذا بالطبع بعني أن المجهود المبذول أكثر.

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

* متى تتجنبها؟
  • عندما يكون البرنامج بسيطا و واضح المعالم لكلا المبرمجين, فإن تطبيق البرمجة الثنائية يؤدي إلى انخفاض في إنتاجية المبرمجين.
* نصائح
  • قبل البدء, لا بد من تحديد هدف واضح يمكن إنهاؤه خلال ساعة أو ساعتين. و يفضل كتابته و كتابة الخطوط العريضة لتحقيقه.
  • إذا كنت القائد (الذي يكتب على لوحة المفاتيح) فركز فيما تكتبه, و لا تشتت ذهنك, و اعتمد على زميلك المراجع في تدقيق ما تكتب. و لا تأخذ تعليقاته بمحمل شخصي, فالأخطاء و تصويبها طبيعة في البرمجة و لا تدل على نقص قدرات المبرمج.
  • إذا كنت المراجع, فانتبه جيدا لما يكتبه زميلك, و حاول اكتشاف الأخطاء أو التغرات البرمجية bugs, و فكر في كيفية تبسيط و تحسين البرنامج. و لا تقاطع زميلك القائد كلما عنّ لك شيء - حتى لا تفقده تركيزه, بل دونه في ورقة, فإذا ما انتهي زميلك مما يكتب (على الأقل السطر الذي هو فيه), فأخبره عما عنّ لك. و ترفق بزميلك و لا تتهكم عليه إن بدا لك خطأ فيما يكتب. و تذكر أخيرا أن دور زميلك القائد ليس كتابة ما تمليه عليه حرفيا, فأخبره عما تريد و لا تشغل بالك بتفاصيل تحقيقه, فزميلك القائد مبرمج أيضا!
  • تناقشا كثيرا حول الأفكار و البدائل و الثغرات المحتملة و كل ما من شأنه تحسين و تبسيط البرنامج. و يتبع حسنَ الكلام حسنُ الاستماع؛ فلا تنشغل عن زميلك - بالأكل مثلا - و هو يتحدث, بل أنصت جيدا لما يقول.
  • إذا تاه أحدكما من الآخر فلم يعد يدري ما يحدث, فتوقفا ثم تأكدا أنكما تقفان على أرض واحدة (يعني عدتما لفهم بعضكما ثانية) ثم استكملا.
  • في بعض الأحيان يكون من الأسهل أن يكتب المراجع جزءا في البرنامج بنفسه بدلا من أن يشرح وجهة نظره لزميله القائد ثم يقوم القائد بالكتابة, و لا بأس بذلك, بل يفضل أن يتبادل الزميلان الأدوار(القيادة و المراجعة) كل نصف ساعة أو ساعة مثلا؛ و بذلك لا يُرهق المراجع من كثرة التركيز, و لا يمل القائد من كثرة الكتابة.
  • المبرمج الأقل علما بالبرنامج أو بلغة البرمجة (أو الأقل خبرة على العموم) يكون قائدا(يكتب على لوحة المفاتيح) أكثر من كونه مراجعا, فالمرء يتعلم من أصابعه أكثر مما يتعلم من عينيه!

* مصادر استفدت منها في كتابة هذه المقالة (مرتبة حسب الأهمية)
---------------------------------------
[1] ملحوظة: النسب المقاسة بين وقت و مجهود مبرمج واحد أو اثنين لتنفيذ نفس البرنامج. و التغير في النسب تابع لتعقيد البرامج و خبرة المبرمجين.

الجمعة، سبتمبر 17، 2010

قصيدة كاميليا شحاتة...الشيخ حامد العلي

القصيدة بإلقـاء الشـيخ هنــا
سلامِي على بنْتِ الكَنانـةِ وافِيـا ** فبلـّغ سِلامِي بالدّموعِ كَمِيلِيـَا
أتعجبُ من دمعي ؟!فلستَ بعـالمٍ ** بما حـلَّ في أرضِ الكنانـةِ بادِيا
تعلَّمْ ، لقد جلَّ المصـاب بأخِتنـا ** وفجَّـرَ منها الدمـعَ بالخدِّ جاريا
تئنُّ من الخذلانِ أنـَّةَ مُثقـــلٍ ** بكـلِّ تباريحٍ تُشيبُ النواصيـا
أأُسْلمُ والإسلامُ يحمــي نساءَهُ ** فأُتركُ تحتَ الديرِ ألْقى الدواهيـا؟!
يعذّبنـي قَسُّ ، وقَسُّ يُذيقـُـني ** من السَّوطِ ضربا مُوجعـاً متواليا
وأُجعلُ في قبـوٍ كأنَّ جـــدارَه ** يدير عيونــاً تحملُ الموتَ ناعيا
يريدان منّي أنْ أعودَ لكفرِهِــم ** وأتْركَ ديــنَ الحقِّ نوراً وصافيا
فقلتُ وقد ألقوْا على الظهرِ سوطَهم ** تبِعْتُ على الإسلام أحمدَ هاديـا
وقلتُ وقدْ بلَّتْ دمائِي وأدمْعـي ** بقيـَّةَ جسْـمٍ يحمل الحزنَ وانيـا*
شهدتُ ولنْ أنفي شهادةَ مسْلمٍ ** لربِّيَ بالتوحيــدِ فرداً وعاليــا
وليسَ له إِبـْنٌ ، وإنَّ مسيحَنـا ** رسولٌ وعبـدُالله ، ليسَ إلاهِيـِـا
يُرادُ إنقـيادي للضَّلال ومادرْوا ** بما ذاقَ مـَـنْ ذاقَ الهدايةَ ما هِـيا
فلمَّا سَلوْا عنّي رفعــتُ تضرُّعي ** وناديــتُ ربّي أستجيشُ فؤاديـا
فما قال أشكو الحاقدينَ من العدى ** ولكنْ من الخذلانِ أصبحتُ شاكيا
حامد بن عبدالله العلي
ـــ
* من الونى وهو الضعف
-------------------
المصدر: موقع الشيخ حامد العلي
مواقع نصرة أختنا كاميليا - ثبتها الله على دينها و فك أسرها:
http://www.kamiliashehata.com/
http://www.camlya.com/

الأربعاء، يوليو 14، 2010

آفاق البرمجة


بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
فمنذ أن بدأت العمل في البرمجة منذ بضع سنين, ما مر بي يوم إلا و يفتح علىّ فيه ربي من علوم البرمجة شيئا جديدا و هو الفتاح العليم.
و مرت بي الأيام على هذه الحال حتى ظننت أني على شيء, و ما كدّر علي هذا الظن إلا أمران:
  • الأول: أني ما قابلت مبرمجا هو أقل مني في الخبرة أو في الكفاءة إلا و تعلمت منه شيئا جديدا لم أكن أعرفه من قبل!
  • و الثاني: أني قلت لنفسي ذات يوم: هلم نرُوز (نختبر) ما لديّ من علم, بالإجابة على أسئلة المبرمجين, فيممت وجهي إلى موقع شهير هو "ستاك أوفر فلو stackoverflow " و اشتركت فيه بالفعل, و بدأت أتابع الأسئلة التي ترِد إلى الموقع و أجيب عما أعرفه منها. و ما هي إلا أيام قلائل حتى أدركت أن "فوق كل دي علم عليم" و صار لسان حالي كما قال الشافعي:
كلما أدبني الدهر أراني نقص عقلي .... وإذا ما ازددت علماً زادني علماً بجهلي
فلما هممت باستدراك ما فاتني من علوم البرمجة, كان لزاما علىّ أن أحدد أولا "آفاق" هذه العلوم, ثم أحدد ثانيا ما الذي ينقصني منها, ثم أبدأ في تعلمها تباعا... و الله المستعان.
أما الخطوة الأولى - و هي تحديد آفاق البرمجة - فهي ما أحببت أن أشارككم فيه في هذه المقالة...فهيّا....
1- لكي يتعلم المرء البرمجة, فأول ما يبدأ به هو تعلم لغة برمجة مثل السي C أو السي بلس بلس C++ أو السي شارب C# و الجافا Java...إلخ, فأي هذه اللغات تتعلم؟ أجبت عن هذا السؤال من قبل, فليراجَع.
2- أي لغة برمجة - فيما أعلم - يصحبها برمجيات معدة سلفا لكي يستخدمها المبرمج فتوفر عليه الكثير من الوقت, و هذه البرمجيات تسمى مكتبات libraries, أو هياكل Frameworks. و من أمثلة ذلك مكتبة السي القياسية C Standard Library و هيكل الدوت نت .NET Framework
3- يمكنك كتابة البرنامج بأدوات بسيطة مثل النوتباد Notepad ثم إتباع ذلك باستخدام أدوات أخرى تحوّل نصوص البرامج إلى برامج فعلية, لكن هناك برمجيات قوية تسهل عليك كثيرا مراحل إنتاج البرنامج بداية من كتابته و وصولا إلى برنامج التشغيل النهائي Executable. هذه البرمجيات تسمى بيئات التطوير المتكاملة Integrated Development Environments. و من أمثلتها الشهيرة فيجوال ستوديو Visual Studio و إكلبسEclipse.
4- أي برنامج ستعمله, سيكون فيه بيانات أو معلومات تحتاج إلى تصنيف يسهل استخدامها و معالجتها. أما كيفية التصنيف المثلى للبيانات و المعلومات, فهذه يهتم بها علم "هياكل البيانات Data structures". أما الشق الثاني - هو معالجة البيانات, فهذا ما يهتم به علم الخوارزمات Algorithms. هذا العلم يشرح لك أفضل الخطوات اللازمة لترتيب البياناتSorting , و كيفية البحث فيهاSearching, و كيفية ضغطهاCompression, و كيفية تشفيرهاEncryption...إلخ.و يضع لك معاييرالترجيح بين الطرق المختلفة لحل نفس المشكلة. لكن ما هي الخطوات اللازمة لمعالجة البيانات بطريقة أخرى غير التي ذكرِت؟ هذا ما يهتم به علم آخر هو "كيفية تصميم الخوارزمات Algorithms design
5- كل ما ذكر في النقطة السابقة عن تصنيف البيانات و معالجتها, إنما قصدت به عمل ذلك في ذاكرة الحاسب, يعني أثناء فترة عمل البرنامج. أما أن يكون لديك بيانات و معلومات كثيرة جدا و تحتاج أن تحتفظ بها في مكان ما و تسترجعها بعد ذلك كما تشاء, فيبدو أنك تتحدث عما يسمى "قواعد البيانات Databases", و أشهر الأساليب المتبعة نظم إدارة قواعد البيانات Database Management Systems أسلوب قواعد البيانات العلائقية Relational Databases, و هذه باختصار تقول لك ضع البيانات في جداول Tables و حدد العلاقات بين هذه الجداول Relations بما يسهل لك معالجتها و استرجاعها فيما بعد. هناك برامج إدارة قواعد بيانت كثيرة, أشهرها أكسس Access لقواعد البيانات الصغيرة, و مايسيكويل MySQL لقواعد البيانات المتوسطة, و سيكويل سيرفر SQL Server و أوراكل Oracle لقواعد البيانات الكبيرة. و لكي تتعامل مع قواعد البيانات ستحتاج إلى لغة خاصة تسمى إس كيو إل SQL, و كذلك ستحتاج إلى معرفة الأساليب العلمية لتصميم قواعد البيانات العلائقية Relational Database design principles.
6- أفضل ما توصل إليه المبرمجون في طرق البرمجة: البرمجة الكائنية المنحى Object Oriented Programming, و هذه باختصار طريقة تنظيمية تسهل إعادة استخدام البرمجيات التي أعددتها من قبل و تسهل المحافظة على تماسك البيانات إلى حد بعيد. و لكي ترى أمثلة فعلية لكيفية تطبيق هذه الطريقة, يمكنك الاستعانة بعلم نماذج التصميم Design patterns, و هذا يعطيك نماذج استرشادية تعينك في تصميم برامجك.
7- يرتبط بالنقطة السابقة علم التحليل و التصميم الكائني المنحى Object Oriented Analysis and Design, و هذا باختصار يسهل لك تحليل مدخلات البرنامج و وظائفه ثم تصميم البرنامج بطريقة تسهل برمجته بالأسلوب الكائني المنحى.
8- لأن الصورة قد تفيد أكثر من الكلام و الكتابة, فقد ابتكر المبرمجون أشكالا ثمثل أجزاء البرامج و تفاعلاتها مما يسهل فهم البرنامج من غير الولوج في تفاصيل نصوصه البرمجية source code, و هذه الأشكال لها ارتباط وثيق بالبرمجة الكائنية المنحى Object Oriented Programming. فجمعوا كل هذه الأشكال من بعضهم البعض و صاغوها في إطار واحد أسموه لغة التصميم الموحدة Unified Modeling Language (UML).
9- إنتاج البرامج يمر بمراحل متعددة بدءا من تحديد وظائف البرنامج requirements . و مرورا بتصميمه design و برمجته development و اختباره testing و في النهاية تشغيله deployment و صيانته maintenance (أعلم أني أغفلت بعض الأشياء هنا للاختصار) و كل مرحلة من هذه المراحل تعتبر فنا قائما بذاته و ألُفت فيها الكتب الكبار, و كلها تندرج تحت علم هندسة البرمجيات Software Engineering. لكن ما أحب أن أشير إليه هنا أن هناك طرقا متبعة في إدارة عملية إنتاج البرامج, أشهرها الطريقة التقليدية Waterfall model و هذه تقول لك لا تدخل في مرحلة قبل أن تنهي التي سبقتها, و الطرق المرنة Agile و هذه تقول لك امزج بين هذه المراحل بما يحقق لك المرونة الكافية لتدارك التغيرات التي تطرأ على وظائف البرنامج.
10- عندما يكون برنامجك صغيرا نسبيا أو يعمل مع عدة حاسبات قليلة متصلة ببعضها, فغالبا سيكفيك ما ذكرت لك آنفا, و في هذه الحالة أنت تطور برامج تسمى "برمجيات سطح المكتب Desktop applications. لأنها تعمل على الحاسبات الشخصية كبرامج قائمة بذاته. و أشهر لغات البرمجة المستخدمة في مثل هذه البرامج: السي شارب C# لبرامج الويندوز Windows. و الجافا Java للبرامج التي تعمل على عدة نظم تشغيل.و هذه النوعية من البرمجيات آخذة في التآكل, راجع ما كتبته من قبل عن اتجاهات البرمجة في للعام 2010.
11- عندما تحتاج إلى برنامج يعمل على حاسبات تبعد عن بعضها آلاف الأميال, و لا يربط بينها رابط, فحتما ستتوجه لطريقة أخرى في عمل البرنامج, هذه الطريقة هي برمجيات الويب Web applications و خدمات الويب Web services, و من الصيحات الآن أيضا ما يسمى بالحوسبة السحابية Cloud computing. و باختصار, عمل مثل هذه البرامج يحتاج إلى البرمجة على جهتين:
  • الجهة الأولى جهة المستخدم, يعني عمل برامج تعمل داخل متصفح الإنترنت Internet browser و هذه تسمى البرمجة جهة العميل Client side scripting. و من أشهر لغات البرمجة المستخدمة في هذه الجهة: إتش تي إم إل HTML, و السي إس إس CSS, و الجافا سكربت Javacript. (قد تجوزت شيئا ما في اعتبار كل هذه اللغات لغات برمجة, فليراجع لزاما ما كتبت من قبل عن لغات البرمجة المكتملة و معيار تورنغ).و هذه الجهة تعتبر واجهة استخدام للبرنامج الفعلى الذي يوجد في الجهة الثانية و التي تسمى بالبرمجة جهة الخادم Server side scripting . و من أشهر اللغات المستخدمة في هذه الجهة إيه إس بي دوت نت ASP.NET بفروعها المختلفة, و البي إتش بي PHP و الروبي مع الريلز Ruby On Rails. و يرتبط ببرمجة الويب تقنيات أخرى مثل الإكس إم إل XML و توابعها و هي مستخدمة في نقل البيانات بين البرنامج و المتصفح,. كذلك هناك تقنيات تيسر عمل برمجيات للويب لتبدو و كأنها برمجيات سطح المكتب التي ذكرتها في النقطة السابقة, و هذه تسمى برمجيات الإنترنت الغنية Rich Internet Applications(RIA) مثل تقنيات الأجاكس Ajax و الفلاش Flash و السيلفرلايت SilverLight
12- من فوائد برمجيات الويب أنها يمكن استخدامها على معدات غير الحاسبات الشخصية PC, و أعني تحديدا الهواتف الجوالة, و هذه الجوالات لها نوع آخر من البرمجة - و إن كانت تتبع نفس الأساليب التي ذكرتها آنفا- لكن يحسن بنا أن نعرج عليها بشيء من التفصيل لأهميتها في هذا العصر. أقول: أهم المتصارعين في حلبة برمجيات الجوالات: شركة أبل Apple و جوالها آي فون iPhone, و هذا يُبرمج عليه بلغة أوجكتف سي ObjectiveC,و شركة غوغل Google و نظامها أندرويد Android, و هذا يُبرمج عليه بالجافا Java. و شركة نوكيا Nokia و نظامها سيمبيان Symbian و هذا يُبرمج عليه بالسي بلس بلس C++. و شركة مايكروسوفت Microsoft و نظامها ويندوز موبايل Windows Mobile و هذا يبرمج عليه بلغات الدوت نت .NET,....إلخ.
13- المعدات التي تطالها البرمجة ربما تكون أصغر من الجوالات, مثل الشرائح الإلكترونية electronic chips الصغيرة جدا التي توجد في السيارات مثلا, و هذه عادة ما تُبرمج بالسي C. بل تطال البرمجة ما هو أصغر من ذلك,: الكروت الذكيةSmart cards مثل شرائح الجوال و بطاقات الائتمان ...إلخ و هذه عادة ما تبرمج بالجافا Java.

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

الثلاثاء، يونيو 22، 2010

الخديوي عباس الأول- رحمه الله-

بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
فمن الذين شُوهت صورهم في تاريخنا: الخديوي عباس الأول-رحمه الله- فقد وُصف عصره بأنه رجعية و نعت شخصه بالظلم و الطغيان...و كيل له الذم كيلا. و الحق أنه رجل صالح, و هذه ترجمة موجزة له - رحمه الله-
فهو عباس بن طوسون بن محمد علي, ثالث الولاة من أسرة محمد علي بمصر, ولد بجُدة, و نشأ بمصر, و تولى الحكم بعد وفاة عمه إبراهيم باشا في أواخر سنة 1264هـ, و كان شديد البغض للأوروبيين حذرا من دسائسهم, أنجد الترك العثمانيين بخمسة عشر ألف مقاتل في حربهم مع الروس, المعروفة, بحرب القرم...
و في أيامه نُفي السحرة و الدجالون و المشعوذون إلى السودان, و قد قتل بقصره في بنها سنة (1270 هـ, 1845م) - رحمه الله تعالى -.
و قد تربى تربية دينية شرقية, و عُرف عنه بغضه للفرنساويين, بلغ به الأمر إلى أن عمل على إيقاف إيفاد البعثات إلى فرنسا, و اتخذه الأوروبيون عموما - و لا سيما فرنسا - التي كانت تعرف بغضه لها - هدفا لسهامهم.
و لذلك يقول عنه بروكلمان: "إنه كان مسلما متعصبا يزدري التربية الأوروبية ازدراءا بعيدا" و يتهمه بأنه كان طاغية, و الحق أنه كان متدينا تقيا.
و مما يدل على تدينه أنه كان الوحيد من أولاد "محمد علي" الذي كان يتردد إلى المساجد في شهر رمضان لاستماع الدروس و المواعظ الدينية, و في أيامه لم يكن أحد يستطيع أن يسير في الشوارع وقت الصلاة و إلا تعرض لسياط "الشاويشية" الأتراك, جنود عباس, و فيما عدا عباسا كان أبناء "محمد علي" جميعا يميلون إلى أبيهم "محمد علي الكبير" و يتبعون سياسته في الحكم مائلين إلى الغرب. ا.هـ بتصرف نقلا عن "خواطر حول الوهابية" للشيخ محمد إسماعيل المقدم - حفظه الله-

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

بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
قال الشيخ محمد بن إسماعيل المقدم - حفظه الله - في كتابه "خواطر حول الوهابية":
يقول الأستاذ محمد جلال كشك: (هناك نقطة نريد أن نتوقف عندها قليلا, و إن كان جميع المؤرخين قد تفادوها بحسن نية و براعة يحسدون عليهما..! ألا و هي موقف السعوديين من الغزو الفرنسي لمصر... لماذا لم يساعدوا الدولة العثمانية, أو الشعب المصري في مقاومته للاحتلال الفرنسي؟ و هذه هي أول حملة صليبية في العصر الحديث, و أول احتلال سافر من الاستعمار الأوروبي, و مقاومة باسلة من بلد عربي...هي مصر عُشٌّ العلماء كما يسميها الشيخ محمد بن عبد الوهاب...
لنبدأ بالحملة الفرنسية على مصر... التي دامت من عام 1798 إلى 1801, و في تلك الفترة كان الأشراف يشكلون حاجزا بين الدولة السعودية و المقاومة في مصر, و ذلك بسيطرتهم على الحجاز.
و لكن جماهير المسلمين في الجزيرة اشتركت على نحو بارز في دعم المقاومة المصرية للاحتلال الفرنسي رغم إرادة الأشراف, و رغم علاقتهم الطيبة مع الفرنسيين, ... قال هيرولد: "كان أرهب إمداد وصل للمماليك, هم المقاتلون القادمون من الحجاز, الذين عبروا البحر الأحمر بالألوف, و قد تبين أن كثيرا منهم من الحجاج المغاربة, ولكن أكثرهم - و أشدهم تعصبا بالطبع - عرب خُلّص من شبه الجزيرة").
يقول الأستاذ أحمد رائف في "الدولة السعودية":
(وقد رأيناهم - أي السعوديين - يدافعون مع المصريين ضد الفرنسيين إبان الحملة الفرنسية في سبيل الإسلام, و رأيناهم مرة أخرى على أسوار رشيد يدافعون ضد حملة فريزر الإنجليزية عام 1807م, حتى منعهم و غيرهم باشا مصر, و أفهمهم أن حق الحرب و القتال و الدفاع ليس مباحا لأي أحد, بل هو خالص للأتراك و الأرناؤوط...إلخ) . ا.هـ. نقلا عن "خواطر حول الوهابية.

السبت، مارس 20، 2010

المفهوم الأمريكي للاعتدال الإسلامي

بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
تجدون في هذا الرابط مقالة مطولة للدكتور باسم خفاجي حول تقرير راند الصادر عام 2007 بعنوان "بناء شبكات مسلمة معتدلة"
Building Moderate Muslim Networks .
و لولا طول المقالة لنقلتها هنا بكاملها, لكن من أراد قراءتها فهذا هو الرابط, أما هنا فسأنقل أهم ما جاء فيها:

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

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

* ما مفهوم الاعتدال الأمريكي ؟
الاعتدال من وجهة النظر الأمريكية يعني:
1- القبول بالديمقراطية
2- القبول بالمصادر غير المذهبية في تشريع القوانين : وهنا تشير الدراسة إلى أن أحد الفروق الرئيسة بين الإسلاميين المتطرفين والمعتدلين هو الموقف من مسألة تطبيق الشريعة .
3- احترام حقوق النساء والأقليات الدينية
4- نبذ الإرهاب والعنف غير المشروع

* اختبار الاعتدال ؟
يضع التقرير 11 سؤالاً تشكِّل في مجملها المحددات الرئيسـة لوصف الاعتدال المقترح أن تتبناه الإدارة الأمريكية:
1- هل يتقبّل الفرد أو الجماعة العنف أو يمارسه؟ وإذا لم يتقبل أو يدعم العنف الآن؛ فهل مارسه أو تقبّله في الماضي؟
2- هل تؤيد الديمقراطية؟ وإن كان كذلك؛ فهل يتم تعريف الديمقراطية بمعناها الواسع من حيث ارتباطها بحقوق الأفراد؟
3- هل تؤيد حقوق الإنسان المتفق عليها دولياً؟
4- هل هناك أية استثناءات في ذلك (مثال: ما يتعلق بحرية الدين)؟
5- هل تؤمن بأن تبديل الأديان من الحقوق الفردية؟
6- هل تؤمن أن على الدولة أن تفرض تطبيق الشريعة في الجزء الخاص بالتشريعات الجنائية؟
7- هل تؤمن أن على الدولة أن تفرض تطبيق الشريعة في الجزء الخاص بالتشريعات المدنية؟ وهل تؤمن بوجوب وجود خيارات لا تستند للشريعة بالنسبة لمن يفضِّلون الرجوع إلى القوانين المدنية ضمن نظام تشريع علماني؟
8- هل تؤمن بوجوب أن يحصل أعضاء الأقليات الدينية على حقوق كحقوق المسلمين تماماً؟
9- هل تؤمن بإمكانية أن يتولى أحد الأفراد من الأقليات الدينية مناصب سياسية عليا في دولة ذات أغلبية مسلمة؟
10- هل تؤمن بحق أعضاء الأقليات الدينية في بناء وإدارة دور العبادة الخاصة بدينهم (كنائس أو معابد يهودية) في دول ذات أغلبية مسلمة؟
11- هل تقبل بنظام تشريع يقوم على مبادئ تشريعية غير مذهبية؟


ومن الملفت للنظر أن التقرير يؤكد أهمية استخراج النصوص الشرعية من التراث الإسلامي والتي يمكن أن تدعم هذه اللائحة وتؤكدها، وأن يُستخدَم الدعاة الجــدد (أو الدعـاة من الشبـاب كمـا أسـماهم التـقرير) لتحقيق ذلـك والقـيام بهذا الدور. ويوصي التقرير أن تكـــون الـدعوة للاعتدال بعيداً عن المساجد، وأن تُستخدَم البرامج التلفازية والشخصيات ذات القبول الإعلامي والجماهيري من أجل تحقيق ذلك (!) .


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


ويؤكد التقرير على أهمية الاعتناء الأمريكي بالتعاون مع المعتدلين - وفق المفهوم الذي قدمته الدراسة - من العالم المسلم، مع التركيز على الفئات التالية :
1-المفكرين والأكاديميين من التحرريين والعَلْمانيين.
2-الدعاة الجدد المعتدلين.
3-القيادات الشعبية الفاعلة.
4-الحركات النسائية المطالبة بعدم المساواة.
5-الصحفيين والكُتّاب والمفكرين.

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

الثلاثاء، فبراير 09، 2010

اقتصاديات البرمجيات مفتوحة المصدر: كيف تربح الشركات من البرمجيات مفتوحة المصدر؟--2 Open source economics

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

1- العقود الدائمة Subscription:
- و هي عقود محددة بفترة زمنية - سنة مثلا - يدفع فيها الزبون مبلغا من المال مقابل الحصول على خدمات على البرنامج مفتوح المصدر,كخدمات الدعم الفني technical support و الصيانة و تحديث البرنامج ...إلخ.
- و هي من أشهر الطرق المستخدمة في جني الأرباح من البرمجيات مفتوحة المصدر, و من أمثلة من يتبع هذه الطريقة الشهيرة, شركة رد هات Red Hat.
- و مثل هذا العقود تجريها الكثير من الشركات بصورة فيها غرر بَيِّن مما يجعلها مشابهة للتأمين التجاري المحرم, و لذا وجب مراجعة الضوابط الشرعية لإجراء مثل هذه العقود لتتم بصورة يرضاها الشرع, و قد نقلت لكم فتوى حول هذا الموضوع من قبل, فلتراجَع.
- ميزة هذه الطريقة أنها تضمن للشركة مقدمة الخدمة مصدرا ثابتا من الدخل -نسبيا-.
- عيب هذه الطريقة أنه يتوجب على الشركة مقدمة الخدمة أن تقدم دائما للعميل قيمة مضافة يحرص بموجبها على تجديد العقد معها.

2- الخدمات الارتجالية Ad hoc Services:

- في هذه الطريقة تقدم الشركة خدمات مثل بيع منتجات فيزيائية كأقراص CD توزيع البرنامج مفتوح المصدر أو تعليمات الاستخدام, أو خدمات للبرنامج مفتوح المصدر, كخدمات التدريب و الخدمات الاستشارية و خدمات الدعم الفني ...إلخ.
- هذه أيضا من الطرق الشهيرة المستخدمة في جني الأرباح من البرمجيات مفتوحة المصدر, و تطبقها أيضا شركة رد هات Red Hat. و هناك دور نشر تبيع كتبا حول البرامج مفتوحة المصدر و لا تساهم في تطويرهذه البرمجيات كشركة أورييلي O'Rielly
- ميزة هذه الطريقة أن العميل سيحتاج دائما لخدمات مكملة للبرنامج.
- و يعيب هذه الطريقة أن حجم الصفقات التي تتم بهذه الطريقة لا يمكن التنبوء به, و لذلك فهي لا تصلح أن تعتمد عليها الشركات
كمصدر أساسي للربح.

3- العتاد المضمّن Embedded Hardware:

- في هذه الطريقة تبيع الشركة عتادا hardware لكن تضمنه برنامجا مفتوح المصدر, و دور البرنامج هنا يتجلى في تدعيم هذا العتاد لرفع مستوى أدائه و زيادة مرونته و تخفيض كلفته.
- فعلى سبيل المثال هناك العديد من الشركات التي تبيع حواسيبا معدة مسبقا بتوزيعات لينكس Linux مختلفة. و اللينكس أيضا مستخدم في كثير من الأنظمة المضمّنة Embedded Systems و الهواتف الجوالة Mobile Phones.
- كما أن هناك بعض الشركات تبيع عتادا متوافقا للعمل مع برمجيات مفتوحة المصدر كشركة ديغيام Digium التي تبيع كروت تليفونات Telephony cards متوافقة للعمل على السنترال PBX الشهير أسترسك Asterisk.
- ميزة هذه الطريقة أن البرنامج و العتاد يكمل بعضهما بعضا, و لا تكون القيمة المضافة في البرنامج فقط, بل إن مهارة الشركة ستتجلى هنا في إنتاج عتاد متميز في الأداء و المرونة و التكلفة.
- أما عيب هذه الطريقة فهو أن استخدام البرمجيات مفتوحة المصدر في حد ذاته قد لا يمثل حافزا للعملاء أن يشتروا منك عتادك, إذ أن هناك شركات أخرى تنافسك في نقطة قوتك: العتاد.

4- البرمجيات المضمنة Embedded Software:
- في هذه الطريقة يُضمّن البرنامج مفتوح المصدر في برنامج آخر تجاري أكبر منه.
- و لا تزال معنا شركة رد هات Red Hat كمثال على تطبيق هذه الطريقة, فرد هات تبيع نسخة لينكس المؤسسية Red Hat Enterprise Linux و التي زادت فيها عن نسخ اللينكس الأخرى خدمات و إضافات تجني منها أرباحا (فهي مثلا تعطي ضمانا لمدة سبع سنوات لمن يشتري هذه النسخة!). لكن يلاحظ هنا أن رد هات تقدم هذه المميزات على نسخة التشغيل النهائية binaries و ليس على النص البرمجي source code للينكس (الذي ما زال مفتوح المصدر أيضا!). مثال آخر: بنت شركة صن Sun - المملوكة الآن لشركة أوراكل Oracle- برنامجها التجاري ستار أوفيس Star Office حول برنامجها الآخر مفتوح المصدر أوبن أوفيس Open Office.
- ميزة هذه الطريقة أن القيمة المضافة تأتي من الباقة package التي تقدمها الشركة ككل (البرنامج مفتوح المصدر + الخدمات و الإضافات) و ليس من البرنامج فحسب, و كلما تميزت الخدمات و الإضافات كلما زادت التفرقة بين النسخ المجانية و النسخ التجارية, مما يمثل حافزا للزبائن أن يشتروا منك دون الاعتماد على النسخة المجانية.
- لكن ينبغى على الشركات أن تأخذ في اعتبارها أنه قد يُنظر إليها على أنها شركة تحاول "نهب" برنامج مفتوح المصدر, و تحاول تجنب هذه النظرة بقدر استطاعتها.


5- تضمين الوظائف Functional Encapsulation :
- في هذه الطريقة يكون البرنامج مفتوح المصدر محمّلا installed على حاسب المستخدم, و تقوم أنت باستخدام وظائف هذا البرنامج في برنامجك التجاري من غير أن تستخدم النص البرمجي source code للبرنامج مفتوح المصدر.
- و قد استخدمت أنا هذه الطريقة من قبل :).

6- البرمجيات كخدمات Software as a Service(SaaS):
- و هذه من أحدث الصيحات في البرمجة عموما (و قد ذكرت ذلك من قبل عند الحديث عن اتجاهات صناعة البرمجيات لعام 2010, عند ذكر الاتجاه نحو الويب و الحوسبة السحابية Cloud Computing), و تعني أن تؤجر للمستخدمين استخدام البرنامج عبر الويب بدلا من أن تبيعه لهم.
- و هذه طريقة واعدة, إذ أن بإمكانك أن تستخدم أي برنامج مفتوح المصدر - مهما كانت رخصة استخدامه - و تعدّل فيه كما تشاء ثم تؤجر استخدامه للزبائن من غير أن تهتم بإعادة نشر تعديلاتك على البرنامج الأصلي (فالمستخدم لن يحمّل install أي برنامج على حاسبه بل سيعتمد على المتصفح internet browser في استخدام البرنامج) و بذلك تتجنب التنافس المتولد عن إتاحة النص البرمجي source code.
- بسبب الميزات القوية التي تتيحها هذه الطريقة, فإن الشركات الرائدة تعتمد عليها في درّ أرباح بطريقة مباشرة أو غير مباشرة, كشركة غوغل Google و سيلز فورس Salesforce.com و غيرهما.

7- الإعلانات Advertising:
- في هذه الطريقة تقدم الشركات البرنامج في صورة مجانية أو مفتوحة المصدر لكن تجني أرباحا من الإعلانات, إما بوضعها بصورة مباشرة في البرنامج (مثل ما تحصل عليه موزيلا Mozilla من غوغل Google من جراء جعل الصفحة الافتراضية في متصفحها الشهير - مفتوح المصدر - فايرفوكس Firefox هي صفحة البحث في غوغل) أو بتضمين خدمة من شركة أخرى في برنامجها (كما تفعل موزيلا أيضا في فايرفوكس من جعل غوغل هو أداة البحث الافتراضية, و من تضمين أدوات بحث لشركات أخرى معدة مسبقا مع البرنامج. نفس الطريقة تتبعها ديغيام Digium في برنامج أسترسك Asterisk الذي يُحمّل مسبقا بإعدادات تتيح له الاتصال بمقدمي خدمات تليفونية Telephony service providers بقابل مادي تدفعه هذه الشركات لديغيام).
- التربح من الإعلانات من الطرق الشهيرة الآن, و قد فصلت الكلام عليها من قبل في مقالتيْ النموذج الاقتصادي للويب 2.0 الجزء الأول و الثاني, فلتراجَع.

8- تخصيص البرامج Custom development:
- في هذه الطريقة تربح الشركات من إجراء تعديلات و إضافات على البرنامج الأصلي حسب رغبات الزبائن.
- و هي مناسبة أيضا للمبرمجين المنفردين freelancers في إجراء مثل تلك التعديلات, فبعض المواقع تجمع تبرعات من مستخدمي البرامج مفتوحة المصدر الذين يريدون وظائف معينة غير موجودة في البرنامج, و يهبونها لمن يطور هذه الوظائف, مثال على هذه المواقع: http://www.opensourcexperts.com/bountylist.html
- ميزة هذه الطريقة أنها تبني علاقة بين الشركات و المستخدمين مما يزيد فرص إجراء صفقات مستقلبية مع هؤلاء الزبائن.
- و لكن يعيب هذه الطريقة نفس عيب الخدمات الارتجالية: حجم الصفقات التي تتم بهذه الطريقة لا يمكن التنبوء به, و لذلك فهي لا تصلح أن تعتمد عليها الشركات
كمصدر أساسي للربح.

9- التبرعات Donations:
- و هذه طريقة شائعة أيضا, و هي تصلح للمبرمجين المنفردين أكثر منها للشركات, و فيها يقوم المبرمج بتطوير برنامج و يتيحه للجميع و لكن يطلب منهم أن يتبرعوا له - إن شاءوا-
- مثال على ذلك: موقع سورس فورج SourceForge.net يتيح للمبرمجين أن يستقبلوا تبرعات على برامجهم مفتوحة المصدر - إن أرادوا-
- هذه الطريقة - مثل سابقتها - لا تصلح أن تعتمد عليها الشركات كمصدر أساسي للربح.

10-منتجات و خدمات أخرى Other products and services:
- فالبرمجيات مفتوحة المصدر لا تدر أرباحا للشركة بصورة مباشرة, بل المنتجات و الخدمات الأخرى التي
قد تكون مكملة لها (و قد لا تكون) هي التي تدر الأرباح.
- يمكن أن نسمي هذه الطريقة "
الطريقة الارتيادية أو الاستراتيجية" و هي عادة ما تستخدم من قبل الشركات الكبيرة لكسب الأرض ( أعني السوق) عن طريق تطوير و دعم و مناصرة البرمجيات مفتوحة المصدر مما يتيح لها أن تنافس في مجال تسود فيه الاحتكارات (مثل ما تفعله أوراكل Oracle من مناصرة اللينكس Linux للتقليل من منافسة الويندوز Windows) ثم بناء القيمة المضافة على هذه البرمجيات مفتوحة المصدر (تكملة مثال أوراكل السابق: تمكنت أوراكل من دعمها للينكس أن توفر نسخة من برنامج قواعد البيانات Databases الذي تنتجه تعمل على معالجات microprocessors إنتل Intel الرخيصة بدلا من استخدام عتاد آخر باهظ التكاليف كالذي تنتجه آي بي إم IBM و صن Sun - قبل أن تشتريها أوراكل. و مثال شبيه بذلك: بناء غوغل Google لنظام تشغيل Operating System يعمل على الهواتف الجوالة mobile phones مفتوح المصدر أندرويد Android (هو في الحقيقة لينكس!) لتكسب أرضا في سوق الهواتف الجوالة, ثم تربح بعد ذلك من الخدمات و الإضافات التي تقدمها حوله). كذلك بعض الشركات تطور و تدعم العديد من البرمجيات مفتوحة المصدر لتجذب أكبر عدد من الزوار لموقعها, فتبني سمعة طيبة بينهم, مما يشجعهم على شراء منتجاتها و برامجها الأخرى(هل تعتمد غوغل Google على هذه الطريقة؟).
- العيب الوحيد لهذه الطريقة أن الزبائن قد تراودهم مخاوف من عدم اهتمام الشركات بهذه البرمجيات مفتوحة المصدر, خاصة إذا كانت لا تمثل لتلك الشركات مصدرا للربح, و قد تزيد هذه المخاوف إذا كانت الشركة ناشئة.

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

الأربعاء، فبراير 03، 2010

اقتصاديات البرمجيات مفتوحة المصدر: كيف تربح الشركات من البرمجيات مفتوحة المصدر؟--1 Open source economics

بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
* مقدمة
- في دراسة أجرتها آي دي سي IDC عام 2009 توقعت فيها أن تزيد عائدات البرمجيات مفتوحة المصدر Open source software بنسبة 22.4% لتبلغ 8.1 مليار دولار عام 2013.
- فهل فعلا يمكن للشركات أن تجني أرباحا من البرمجيات مفتوحة المصدر؟ و إن كان هذا ممكنا, فهل هذا يتفق مع مباديء البرمجيات الحرة و مفتوحة المصدر؟
- لنجب عن السؤال الثاني أولا, فالبرمجيات الحرة و مفتوحة المصدر لا تمانع في أن تكون مصدرا للربح على الإطلاق, فالحرية فيها تعني حرية التشغيل و الدراسة و الاقتباس و التحسين و المشاركة, و لا علاقة بين ذلك و بين الكسب من البرمجيات مفتوحة المصدر.
- أما السؤال الأول - و هو سؤال قديم كقدم البرمجيات مفتوحة المصدر نفسها - فقد تحول مع الزمن من سؤال نظري عن إمكانية الحدوث إلى سؤال عملي عن طرق الحدوث (يعني: ما هي البرمجيات و الخدمات التي تقدمها شركات المصادر المفتوحة لتدر أرباحا من الزبائن؟)
- و الإجابة على هذا السؤال ليست يسيرة, فالشركات الكبرى تدعم البرمجيات مفتوحة المصدر -غالبا - ليس للتربح منها و بس, و لكن لأهداف ارتيادية (استراتيجية) مثل فك احتكار الأسواق مثلا. أما الشركات الصغرى و الناشئة, فهي تهدف للتربح بالفعل من المصادر المفتوحة و لكن أهم من ذلك تحقيق الانتشار و بناء قاعدة عريضة من العملاء. و لذلك فالمصادر المفتوحة تربح منها صناعة تكنولوجيا المعلومات ككل و ليس شركات صناعة البرمجيات فحسب و لا حتى الشركات المتخصصة في إنتاج البرمجيات مفتوحة المصدر فقط. و في هذا الإطار الواسع سيكون حديثنا إن شاء الله تعالى.

* النموذج التقليدي للربح من البرمجيات:
- يعتمد نموذج عمل Business Model شركات صناعة البرمجيات التقليدي على امتلاك النص البرمجي للبرنامج، ومنح المستخدم حق الانتفاع بنسخة من البرنامج وفق شروط تحددها اتفاقية الترخيص. أدى نموذج العمل هذا لنمو اقتصادي هائل في صناعة البرمجيات، فقد أصبحت من أكثر قطاعات الدخل إدرارا للربح، وتوجهت إليها كمية كبيرة من الاستثمارات في كل أنحاء العالم، وترافق هذا في العقد الأخير مع انخفاض كبير في سعر التجهيزات اللازمة لتشغيل البرمجيات، مما وسع السوق بشكل هائل، وسبب ازدياد الطلب على كل أنواع البرمجيات، فأدى إلى ضخ كميات هائلة من المال في يد صناع البرمجيات.
- في الصناعات التقليدية تعتبر كلفة إنتاج النسخة الواحدة من المنتج كلفة مهمة تضاف إلى بقية الكلف مثل التطوير والتسويق وغيرها، ولكن في صناعة البرمجيات فإن كلفة إنتاج نسخة إضافية لا تكاد تذكر، فبمجرد وجود المنتج يمكن نسخه بتكلفة شبه معدومة، مما دعى المستثمرين لتشبيه صناعة البرمجيات التقليدية بـ "مطبعة نقود"، فبمجرد امتلاك الشركة لبرنامج جيد، يمكنها أن تنتج نسخا منه وتبيعها نقدا.
- الكسب بهذه الطريقة بالطبع ليس سهلا كما يبدو للوهلة الأولى, لكن ما أريد أن أذكره هنا هو أهم السلبيات الناتجة عن هذا النموذج الاقتصادي و هي السياسات الاحتكارية التي مارستها بعض الشركات الكبرى (أشهر مثال على ذلك شركة مايكروسوفت Microsoft), و قد تولد عن هذه السياسات الاحتكارية طريقة جديدة في إنتاج البرمجيات, ألا و هي البرمجيات الحرة و مفتوحة المصدر Free and Open Source Software.
* البرمجيات مفتوحة المصدر:
- كما في الويكيبيديا, فمن الممكن اختصار تعريف البرمجيات المفتوحة المصدر، بأنها البرمجيات التي تحقق الشروط التالية:
  • حرية إعادة توزيع البرنامج.
  • توفر النص المصدري للبرنامج، وحرية توزيع النص المصدري.
  • حرية إنتاج برمجيات مشتقة أو معدلة من البرنامج الأصلي، وحرية توزيعها تحت نفس الترخيص للبرمجيات الأصلي.
  • من الممكن أن يمنع الترخيص توزيع النص المصدري للنسخ المعدلة على شرط السماح بتوزيع ملفات التي تحتوي على التعديلات بجانب النص الأصلي.
  • عدم وجود أي تمييز في الترخيص لأي مجموعة أو أشخاص.
  • عدم وجود أي تحديد لمجالات استخدام البرنامج.
  • الحقوق الموجودة في الترخيص يجب أن تعطى لكل من يتم توزيع البرنامج إليه.

فكيف يمكن جني الأرباح من برمجيات هذه صفتها؟! هذا ما سنتناوله في مقالات لاحقة إن شاء الله تعالى, فتابعونا...

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

الاثنين، فبراير 01، 2010

قول أصحاب البرامج: إذا أعجبك البرنامج فيمكنك التبرع لصاحبه

قول أصحاب البرامج: إذا أعجبك البرنامج فيمكنك التبرع لصاحبه

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

الحمد لله
هذه الصورة هبة مقيدة بقيد ، وهذا القيد هو قوله : " إن أعجبك هذا البرنامج فبإمكانك أن تتبرع لمالكه " وهذا القيد صريح في أن هذا ليس بيعاً ، لأن تسميته تبرعا يعني أن المالك لا يُلزم مستخدم البرنامج أن يدفع عوضا في مقابل الاستخدام .
وعليه ؛ فإن هذا القيد جعل هذه المعاملة هبةً وقد تتحول الهبة إلى بيع ، إذا اشترط المُهْدِي على المُهْدَى له أن يدفع له مالاً معيناً – مثلاً- مقابل هذه الهدية .
قال ابن قدامة في "المغني" (5/398) : " فإن شرط في الهبة ثوابا معلوما , صح . نص عليه أحمد ; وحكمها حكم البيع " انتهى .
وبهذا يتضح أنه لا حرج من استخدام هذا البرنامج بغير مقابل ، وليس بيعا فاسدا ، ولا هو من قبيل أخذ أموال الناس بسيف الحياء ، إذ ليس هذا من مواطن الحياء ، فمالك البرنامج لا يرى المستخدم ولا يعرفه ، فلا يتصور أن يستحي منه .
والله أعلم .





حكم عقود الصيانة التي تجريها شركات البرمجة على برامجها

التفصيل في حكم " عقود الصيانة " ومتى يكون لها حكم " التأمين التجاري "

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

الجواب :

الحمد لله

"عقود الصيانة" من العقود المستحدثة ، ولها عدة صور ، ولهذا لا يصح أن تعطى حكماً واحداً ، بل منها ما هو جائز ، ومنها ما هو محرم .

ويمكننا جمع أشهر صور تلك العقود مع بيان أحكامها فيما يلي :

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

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

2. أن تتكفل "شركة صيانة" – وليست الشركة البائعة - بالفحص الدوري على الجهاز – أسبوعيّاً ، أو شهريّاً – مقابل مبلغ معيَّن ، ويُعرف في العقد عدد الأجهزة المراد فحصها وصيانتها ، وتعرف نوعية الصيانة ، ويكون العقد لمدة محدودة .

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

إلا إذا كانت المواد المستعملة في الصيانة يسيرة لا يُحسب لها حساب في العادة ، أو كانت معروفة أنها من لوازم الصيانة : لم يكن ذلك بمانع من القول بجواز هذا العقد .

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

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

وهذه الصورة من عقود الصيانة تشبه عقود التأمين التجاري المحرَّم .

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

وحكم هذا العقد : التحريم ، وهو عقد مقامرة ، لأن صاحب الجهاز يكون غانماً إذا كثر تعطل الجهاز ، ويكون غارماً إذا قل تعطله .

وهذه الصورة – أيضاً - من عقود الصيانة تشبه عقود التأمين التجاري المحرَّم .

وهذه بعض الفتاوى المتعلقة بعقود الصيانة :

1. قرار " مجلس مجمع الفقه الإسلامي " :

ففي قرار رقم : 103 (6/11) بشأن "عقد الصيانة" قال "المجمع" :

الحمد لله رب العالمين ، والسلام على سيدنا محمد ، خاتم النبيين ، وعلى آله ، وصحبه ، وسلم .

أما بعد :

فإن "مجلس مجمع الفقه الإسلامي الدولي "المنبثق عن "منظمة المؤتمر الإسلامي" في دورة انعقاد مؤتمره الحادي عشر بالمنامة في دولة البحرين ، من 25 - 30 رجب 1419 هـ (14 - 19 نوفمبر 1998) : بعد اطِّلاعه على الأبحاث المقدمة إلى "المجمع" بخصوص موضوع "عقد الصيانة" ، واستماعه إلى المناقشات التي دارت حوله :

قرر ما يلي :

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

ثانياً : عقد الصيانة له صور كثيرة ، منها ما تبين حكمه ، وهي :

1. عقد صيانة غير مقترن بعقد آخر ، يلتزم فيه الصائن بتقديم العمل فقط ، أو مع تقديم مواد يسيرة لا يعتبر العاقدان لها حساباً في العادة .

هذا العقد يكيَّف على أنه عقد إجارة على عمل ، وهو عقد جائز شرعاً ، بشرط أن يكون العمل معلوماً ، والأجر معلوماً .

2. عقد صيانة غير مقترن بعقد آخر ، يلتزم فيه الصائن تقديم العمل ، ويلتزم المالك بتقديم المواد .

تكييف هذه الصورة ، وحكمها : كالصورة الأولى .

3. الصيانة المشروطة في عقد البيع على البائع لمدة معلومة .

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

4. الصيانة المشروطة في عقد الإجارة على المؤجر ، أو المستأجر .

هذا عقد اجتمع فيه إجارة وشرط ، وحكم هذه الصورة : أن الصيانة إذا كانت من النوع الذي يتوقف عليه استيفاء المنفعة : فإنها تلزم مالك العين المؤجرة من غير شرط ، ولا يجوز اشتراطها على المستأجر ، أما الصيانة التي لا يتوقف عليها استيفاء المنفعة : فيجوز اشتراطها على أيٍّ من المؤجر ، أو المستأجر ، إذا عُيِّنت تعيُّناً نافياً للجهالة .

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

ثالثاً : يشترط في جميع الصور : أن تعيَّن الصيانة تعييناً نافياً للجهالة المؤدية إلى النزاع ، وكذلك تبيين المواد إذا كانت على الصائن ، كما يشترط تحديد الأجرة في جميع الحالات .

وصلى الله وسلم على نبينا محمد ، وعلى آله ، وصحبه ، وسلم .

"مجلة المجمع" ( العدد الحادي عشر ج 2 ، ص 279) .

2. سئل الشيخ عبد الله بن جبرين رحمه الله :

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

ويستثنى من الأعطال ما هو خارج عن الإرادة مثل حوادث السيارات .

فأجاب :

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

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

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

" الفتوى رقم 816 " من موقع الشيخ رحمه الله .

http://ibn-jebreen.com/ftawa.php?view=vmasal&subid=816&parent=4193

وهذا الجواب ينطبق على الصورة الرابعة من صور عقود الصيانة .

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

3. وقال الشيخ سامي السويلم حفظه الله :

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

http://almoslim.net/node/54932

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

والله أعلم





الثلاثاء، يناير 19، 2010

سنن العرب - الجدد - في تسمية شركاتهم و برامجهم

بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...

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

فكيف يسمي الأعاجم شركاتهم و برامجهم؟

1- أسماء ذات صلة بنشاط الشركة:
- مايكروسوفت Microsoft: و اسمهما مشتق من المعالجات الدقيقة Microprocessors و البرمجيات Software
- غوغل Google وهي تحريف لكلمة غوغول googol و تعني رقما كبيرا جدا (واحد و عن يمينه مئة صفر) في كناية كن كثرة نتائج البحث التي يعرضها المحرك search engine

2- أسماء الأشخاص و العوائل:

- نورتون Norton: و هو اسم عائلة مؤسس شركة نورتون ( اسمه بيتر نورتون Peter Norton) و قد اشترتها شركة سيمانتك Symantec
- دل Dell: و هو مؤسس شركة دل الشهيرة و المتخصصة في بيع الحواسيب.
- ويلي Wiley و أورييلي O'Reilly و هما دارا نشر شهيرتان, و هذه أسماء عوائل مؤسسيها أيضا!

3- أسماء لا علاقة لها بنشاط الشركة أو بالبرنامج:

- صن مايكروسيستمز Sun Microsystems وصن Sun تعني الشمس, و هي مالكة لغة البرمجة الشهيرة جافا Java و تعني أيضا جزيرة جاوة في إندونيسيا أو نوع قهوة!
- أبل Apple و تعني التفاحة و هي صاحبة الهاتف الشهير آي فون iPhone و صاحبة نظام التشغيل الشهير ماك Mac و إصدارته الأخيرة ليوبارد Leopard و تعني الفهد!
- أدوبي Adobe و تعني الطين اللبن و هي صاحبة البرنامج الشهير لقراءة الملفات أكروبات ريدر Acrobat Reader و أكروبات تعني البهلوان!

4- أسماء ذات حروف مختصرة:

- من منا يعرف أن آي بي إم IBM هي اختصار لـ International Business Machines و ترجمتها الحرفية: ماكينات الأعمال العالمية.
- و من منا يعرف أن إي دي إس EDS (التي استحوذت عليها إتش بي HP الآن ) هي اختصار لـ Electronic Data Systems و ترجمتها الحرفية: أنظمة البيانات الإلكترونية!

5- أسماء ذات علاقة بالأماكن:

- سيسكو Cisco: شركة الشبكات العملاقة, واسمها مقتطع من اسم مدينة سان فرانسيسكو الأمريكية San Francisco

6- أسماء عربية:

- نظام إدارة المحتوى Content Management System الشهير جملة Joomla!

و قد جعلت هذا المثال هو آخر مثال أذكره لأوجه بعده بعض الأسئلة للمستغربين من بني جلدتنا:
أ - هل الاسم فقط هو الذي يؤدي إلى انتشار البرنامج أم أن جودته من أهم عوامل انتشاره؟
ب - هل الأسماء التي لا علاقة لها بنشاط الشركة أعاقت نجاحها؟
ج - هل أعاق الاسم العربي الباحثين عن برنامج جملة - من غير العرب - عن البحث عنه و استخدامه؟
د - هل الشركات العربية التي تسمت بأسماء عربية سواء نجحت أو فشلت, كان الاسم هو سبب نجاحها أو فشلها؟
هـ - هل الشركات العربية التي تسمت بأسماء أعجمية سواء نجحت أو فشلت, كان الاسم هو سبب نجاحها أو فشلها؟

و أختم مقالتي بالاستنتاج الذي أشرت إليه في صدر المقالة, و هو أن القوم كانوا تلقائيين في تسمية شركاتهم و برامجهم و لم يتكلفوا, بل كلٌ اتبع عادة قومه في التسمي.

فهلا اتبعنا عادات قومنا بدلا عن هذه الأسماء الممسوخة؟
أسأل الله أن يهدينا سواء السبيل, و أن يحفظ لغتنا الباسلة... آمين


الاثنين، يناير 18، 2010

هل ترضى بمثل هذا الراتب؟

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

و الغرض من هذا الاستفتاء أن يعرف كل من يمر بمثل هذه الوظائف ماذا فعل غيره, فيستأنس بما فعلوا و يتخذ قراره بالرفض أو القبول على بصيرة.

و الله من وراء القصد...

الاثنين، يناير 11، 2010

قصيدة: حديث النفس لعبد العزيز الرنتيسي رحمه الله

ماذا دهاك يطـــيب عيشك في الحزن

تشري النعيم وتمتطي صهو الصعاب

ماذا عليــــــك إذا غدوت بلا وطــن


ونعمت رغـد العيش في ظل الشباب

يا هذه يهديك ربك فارجعــي
القدس تصرخ تستغيثك فاسمعي
والجنب مني بات يجفو مضجعي
فالموت خير من حياة الخنــع
ولذا فشــدي همتي وتشجعـي

هاأنت ترسف في القيود بلا ثمـن

وغدا تموت وتنتهي تحت التــراب

وبنيــك واعجبي ستتركهم لمــن


والزوج تسلمـها فتنهشــها الذئاب

القيد يظهـر دعوتي يوما فع
وإذا قتلت ففي إلهـي مصرعي
والزوج والأبناء مذ كانوا معي
في حفظ ربي لا تثيري مدمعي
وعلى البلاء تصبري لا تجزعي

إني أخــــاف عليك أن تنفى غدا

ويصير بيتك خاويا يشكو الخراب

وتهيم بحـــــثا عـن خليل مؤتمــن


يبكـي لحالك أو يشاطرك العـذاب

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

إني أراك نذرت نـــفــس للــمـــحــن

وزهدت في دنيــــا الثعالب والكـلاب

وعشـــقت رمــــسا يحتويك بلا كفن


فرجـوت ربي أن تكون على صواب

أنا لـن أبيت منكسا للألمــع
وعلى الزناد يظل دوما أصبعي
ولئن كرهت البذل نفسي تصفعي
من كل خوار ومحتال دعــي
وإذا بذلت الغال مجدا تصنعـي

إني أعــــيذك أن تذل إلـى وثــن

أو أن يعود السيف في غمد الجراب

فاقــض الحـــياة كما تحب فلا ولن


أرضى حيــــاة لا تظللها الحــراب

المصدر: الإسلام اليوم

السبت، يناير 09، 2010

أي لغة برمجة أتعلم؟ What Programming Language Should I Learn?

بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
كنت أعتقد من قبل أن تعلم لغة برمجة واحدة أُطوّر بها كل ما أريد من برمجيات مساوٍ لتعلم عدة لغات كل واحدة منها لها ميزة عن أختها تجعلها هي الخيار الأمثل عندما تكون تلك الميزة متحققة في البرنامج الذي أطوره.
و في بداية مشواري الوظيفي, عملت في شركة تطور تطبيقات ويندوز Windows Desktop Applications باستخدام السي بلس بلس C++ و الفيجوال بيزك دوت نت VB.NET, ثم تركتها و التحقت بشركة أخرى و صرت الآن أبرمج بالسي شارب C# فقط, و معظم التطبيقات التي نطورها هي للويندوز أيضا ( و إن بدأنا مؤخرا الاتجاه نحو الويب).
و بالرغم من الأداء المتميز الذي حققته لي السي شارب C#, إلا أنني من حين لآخر تراودني الرغبة في العودة إلى السي بلس بلس C++ من جديد, و أشعر أنني فقدت ميزة قوية كنت أتمتع بها - خاصة و أني كنت شاطراماهرا في البرمجة باستخدامها.
و بدأت أشعر أني انقاد - طواعية - لما تقوله مايكروسوفت Microsoft عن أدواتها و أُهمل أداوت أخرى قد تكون أفضل منها. باختصار: بدأت أشعر أني انقدت للاتجاه الأول الذي ذكرته (تعلم لغة واحدة) و أهملت الاتجاه الثاني ( تعلم عدة لغات) الذي بدا يغلب على ظني أنه الخيار الأقرب للصواب, فأي لغة برمجة أتعلم؟

الإجابة على هذا السؤال ليست بسيطة لكن يمكن الاستعانة بالمؤشرات الآتية:

1- احتياجات السوق:
- فنظرة على موقع إعلانات وظائف شهير في مصر تجعلك تخلص إلى الترتيب الآتي لاحتياجات السوق المصري من لغات البرمجة:
1- دوت نت .NET و أكثر الوظائف تحت هذا البند هي للسي شارب C# و لتطبيقات الويب, يعني إيه إس بي دوت نت ASP.NET
2- جافا Java
3- بي اتش بي PHP
4- سي بلس بلس C++
- أما الشركات العالمية الرائدة في صناعة البرمجيات (اعتمدت هنا على إعلانات لغوغل Google و مايكروسوفت Microsoft و أبل Apple و فيس بوك Facebook) فنجدها تطلب اللغات الآتية في إعلاناتها(1):
1- سي C/ سي بلس بلس C++/ جافا Java
2- إتش تي إم إل HTML / سي إس إس CSS / جافا سكريبت JavaScript
3- غوغل Google تطلب أيضا بايثون Python, و مايكروسوفت Microsoft تطلب سي شارب C# و أبل Apple تطلب أوبجكتف-سي Objective-C

2- اتجاهات السوق:
- ذكرت في مقالة سابقة اتجاهات صناعة البرمجيات للعام 2010, و ذكرت فيها مثلا أن صناعة تطبيقات الويب في ازدهار مستمر, و هذا يعني أن تعلم البي اتس بي PHP, و الإيه إس بي ASP.NET, و الروبي مع الريلز Ruby on Rails قد يكون مناسبا الآن.
- ذكرت أيضا من قبل مؤشر لغات البرمجة تيوب TIOBE Index, و في شهر يناير 2010 كان ترتيب لغات البرمجة الشائعة كالآتي:
1- جافا Java
2- سي C
3- بي إتش بي PHP
4- سي بلس بلس C++
5- فيجوال بيزيك (Visual) Basic
6- سي شارب C#
7- بايثون Python
8- بيرل Perl
9- جافا سكريبت JavaScript
10- روبي Ruby
11- دلفي Delphi
12- أوبجكتف-سي Objective-C
13- غو Go
14- ساس SAS
15- بي إل إس كيو إل PL/SQL
16- أباب ABAP
17- باسكال Pascal
18- لسيب / سكيم Lisp/Scheme
19- أكشن اسكريبت ActionScript
20- ماتلاب MATLAB

- و منح القائمون على هذا المؤشر لغة البرمجة الحديثة جدا(آٌصدرت في نوفمبر 2009) من غوغل المسماة غو Google Go جائزة لغة العام 2009, حيث نالت اهتماما كبيرا من المبرمجين (لاحظ أنها جاءت في الترتيب الثالث عشر على الرغم من أنها أول مرة توضع في الحسبان هذا الشهر) على الرغم من حداثتها, و يليها مباشرة في الأهمية لغة أوبجكتف -سي Objective-C التي أتت بعدها بفارق طفيف جدا, ثم البي اتش بي PHP بفارق طفيف أيضا.
- و لاحَظ أيضا القائمون على المؤشر أن لغتا البرمجة سي شارب C# من مايكروسوفت Microsoft و أكشن سكريبت ActionScript من أدوبي Adobe كانتا في تقدم مستمر خلال العام 2009. أما الجافا Java التي احتفظت بموقع الصدارة فقد لوحظ أنها في انحدار مستمر ( و إن كان الانحدار بطيئا), إلا أن لغات جديدة من سلالة الجافا بدأت تنافس, أهمها سكريبت جافا إف إكس JavaFX Script (رقم 27), و لغتا جي روبي JRuby و جيثون Jython. و من اللغات التي قاربت العشربن الأولى أيضا - و هي مندفعة بقوة إليها- لغة إرلانج Erlang (رقم 24) و لغة اسكراتش Scratch (رقم 26).

3- احتياجات البرنامج
- كما ذكرت في صدر المقالة, هناك لغات برمجة لها ميزات فريدة تحسّن أداء المبرمج عند استخدامها في أداء مهام معينة.
و من الأمثلة على ذلك: استخدام إحدى اللغات المصنفة كلغة اسكريبت Scripting Language في معالجة بيانات في ملف مثلا, أو استخدام لغة الروبي تحت إطار الريلز Ruby on Rails في تطوير تطبيقات الويب المعتمدة على قواعد بيانات.

4- احتياجات نظام التشغيل:
- إذا قصدت تطوير برمجيات تعمل على الويندوز Windows فقط, فإن السي شارب C# هي الخيار الأمثل, و إذا أردت أن تطور برمجيات تعمل على الماك Mac OS و الآي فون iPhone فإن الأوبجكنف-سي Objective-C هي الخيار الأفضل. فإذا أردت برامجك أن تعمل على الويندوز و اللينكس Linux فعليك بالسي بلس بلس C++. أما الجافا Java فتتيح لك العمل على مختلف نظم التشغيل Operating systems مهما كبرت برامجك.

و يظل السؤال قائما: أي لغة من كل هذا اللغات أتعلم و كل هذه العوامل التي ذكرتها تتغير من عام لآخر؟
- الدرس الأساسي الذي يمكن تعلمه من تاريخ لغات البرمجة هو أن أساسيات البرمجة واحدة لكن بناء لغات البرمجة مختلف, و بعض اللغات متشابهة في بنائها(كالسي C و السي بلس بلس C++ و السي شارب C# و الجافا Java و البي إتش بي PHP و الجافا سكريبت JavaScript ... إلخ), و بناء على ذلك فيمكننا القول: تَعَلَّمْ أساسيات البرمجة جيدا ( هياكل البيانات Data Structures و الخوارزمات Algorithms و البرمجة بالكائنات Object Oriented Programming ... إلخ), أما التقنيات الحديثة فتعلمها عندما تحتاج إليها و استعن بلغات البرمجة المتشابهة فإنها أسهل في التعلم و كلها لغات شائعة و مطلوبة أيضا في السوق. ولكن لكي تعرف ماذا تحتاج و ماذا يوفي احتياجاتك فينبغي أن تُعمل المثل القديم: اعرف كل شيء عن شيء و شيئا عن كل شيء. أي تعلم لغة برمجة واحدة و اعرف عنها كل شيء, و اعرف لغات البرمجة و التقنيات الأخرى و اعرف مميزاتها و عيوبها و كن مستعدا للتنازل عن لغتك المفضلة و استخدام اللغة الأخرى التي تتميز عليها. و بهذا نكون قد جمعنا بين الطريقتين المذكورتين في صدر المقال.

و أختم بتذكير نفسي و إخواني المسلمين ألا يغفلوا السي C و السي بلس بلس C++ فإن جل التقنيات مبنية عليها, و ليس أدلّ على ذلك من اهتمام الشركات العالمية الكبرى بتوظيف من يتقنها... و السلام.
---------------------------------
(1) وجدت هذه الإعلانات في هذه المقالة - التي استفدت منها أيضا في مقالتي هذه