التدوينات الموسومة بـ ‘برمجة’

الانتقال للمستوى الأفضل في البرمجة

March 14, 2011 - الاثنين 10 ربيع الثاني 1432

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

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

كيف؟ لتحسن مستواك البرمجي والتفكيري عليك بقراءة بعض الكتب من خبراء ومؤسسي لغات البرمجة، أهم هذه الكتب هي:

كتاب Clean Code لروبرت سي مارتن (العم بوب) أحد مؤسسي Agile وخبير البرمجة الغرضية (الكائناتية).

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

 

كتاب The Pragmatic Programmer: From Journeyman to Master

كتاب Code Complete لمؤلفه Steve McConnell وهي نتيجة خبرته في العمل لدى مايكروسوفت وشركة بوينغ للطائرات.

سلسلة كتب The Art of Computer Programming حيث ظهرت كخمسة أجزاء وكل جزء يتناول مجالاً أو العديد من المجالات في الخوارزميات البرمجية، من أروع الكتب، قراءته ممتعة وهو من تأليف دونالد كنوث، لقب دونالد هو “أبو تحليل الخوارزميات” ويتمتع بروح مرحة جداً حيث كان (لا أعرف إذا مازال مستمراً) يعطي لكل من يكتشف خطأ مطبعي في مؤلفاته مبلغ 2.56 دولار، وهذا الرقم يمثل 1 دولار بالنظام الستعشري (hexadecimal). يحدث دونالد الأجزاء الخمسة لهذه السلسلة باستمرار لإضافة المستجدات ومراجعة المعلومات، وأيضاً يطمح (إن مد الله بعمره) لنشر الجزء السادس والسابع من هذه السلسلة المتميزة.

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

متابعة لتوليفة تقانات الويب

December 17, 2010 - الجمعة 12 محرم 1432

السلام عليكم،

أستأذنت اﻷستاذ المخضرم كفاح عيسى بكتابة هذه المتابعة لمقالته أفضل توليفة لتقانات تطوير تطبيقات الويب لعام 2010، حيث رغبت بالتوسع في بعض الأمور التي ذكرت فيها وأيضاً التعليق على البعض الآخر.

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

- لغة البيزك انتهت صلاحيتها بكل بساطة، تعلمتها في الثانوية وفقط.

- لغة الباسكال (بشكل خاص التيربو باسكال) لغة تعليمية رائعة لهذا الغرض، لايوجد فيها تعقيدات البرمجة الغرضية التوجه (الشيئية)، الديلفي هي امتداد للباسكال لدعم البرمجة الغرضية والواجهات الرسومية وكان من المؤلم مشاهدتها وهي تموت ببطىء (بالمناسبة موتها جاء نتيجة سلسلة أزمات مالية حلت بشركة بورلاند وليس بسبب عيب في اللغة)، من اﻹنصاف أن نذكر أن الجافا والسي شارب استمدت العديد من الأفكار منها. بصراحة لغة لايسعني الكلام عنها بأسطر يكفي أن مبتكر التيربو باسكال (أنديرز) وأحد رؤوساء شركة بورلاند التي كانت تقف وراء الديلفي وهو الآن (Lead Architect) للغة السي شارب في مايكروسوفت، المبرمج الآخر حائز على جائزة Turing Award وهي من أكبر الجوائز في عالم البرمجة والكمبيوتر.

- السي لغة رائعة، صعبة عند التعمق بها ولم أجد الفرصة ﻷتابع بها، السي++ تضيف طبقة لابأس بها من التعقيد، أيضاً لاننسى مشكلات مترجم اللغة، فهناك المترجم الخاص بمايكروسوفت ومترجم GCC والاختلافات بينهم لينتهي الأمر باقتراح معايير قياسية لها.

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

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

- البايثون لغة مازالت صعبة الهضم علي حسب تعبير اﻷخ كفاح، لحد الآن لا أستسيغ فكرة المسافات بتحديد المجالات البرمجية! ربما سأمنحها فرصة ثانية في المستقبل القريب.

لايمكنني الحكم على روبي كوني استخدمتها ﻷسابيع معدودة فقط قبل التركيز بشكل كامل على البي إتش بي، لكنها لغة “شبابية”، حيث تجد معظم الأفكار الجديدة والغريبة تبرمج بها ربما لكونها حديثة وسلسة وتجتذب محبي الماك :)

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

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

بالنسبة لتتمة حديثه عن قواعد البيانات، فأفضل تجربة ماريا فهي نتاج مبرمجي MySQL الأصليين وبالتأكيد لديهم خبرة لاتقدر بثمن. سبب آخر يدعوني لاستخدامها وهو دعم الدروبال 7 لها.

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

وبيئة التطوير لدي هي المحرر الافتراضي في كوبنتو kate وأحياناً vim، ربما سأجرب Emacs يوماً ما ولم أعد أكترث للمحررات البرمجية المتقدمة IDE مثل النت بينز والإيكلبس.

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

شكراً كفاح على تحفيزك لي في مقالتك لكتابة هذه التدوينة!

وحدة Scrollable Content لدروبال

December 26, 2009 - السبت 11 محرم 1431

السلام عليكم،
مازالت الدروبال تحقق نجاحاً إثر نجاح، ومن أكبر أسرار نجاح هذا النظام هو المجتمع الكبير والمتعاون لدروبال. هذا المجتمع يغريك بالعمل والتعاون معهم، فوق هذا المجتمع الكبير جداً من الأعضاء (يقترب عدد أعضاء drupal.org من نصف مليون) يوجد طبقة إدارية متعاونة ومتابعة ﻷبعد الحدود، حيث تجدهم يومياً على تواصل ومعرفة دائمة بما يجري في مجتمع الدروبال وأظن أن هذا هو سبب نجاحها.
انتهيت منذ فترة قريبة من برمجة وحدة للدروبال سميتها Scrollable Content حيث تعمل هذه الوحدة على عرض المواضيع بطريقة جميلة (سلايدر slider) بالاعتماد على مكتبة jQuery Tools، بدون الكثير من التفاصيل إليكم صورة لتتضح الصورة :)

وأيضاً في موقع العرض: http://drupal.holooli.com

من أهم ميزات Scrollable Content:
1- السرعة في حركة التقليب (Sliding)
2- يمكنك استعمال دولاب الفأرة (scroll) لتحريك الصور (أي المقالات)
3- يمكنك تحديد نوع\أنواع محتوى و\أو تصنيف\تصنيفات لعرضها في قطعة (block) هذه الوحدة
4- يمكنك (ويفضل) استخدام وحدة ImageCache لعرض الصور بشكل أفضل.
5- يوجد حالياً نوعين للحركة أفقية وعمودية ويمكن تغييرهم وتكييفهم من خلال CSS كما تريد.

الوحدات في دروبال تخضع لمراقبة دقيقة قبل نشرها وبعد نشرها أيضاً، بعكس الووردبريس حيث تكون العملية آلية ولايمكنك التبليغ عن الأخطاء في نفس الموقع (بدأ ووردبريس الآن بإضافة قطعة صغيرة Compatibility في صفحة الإضافة للتبليغ عن الأخطاء).

وحدة Scrollable Content لاتحتاج لخبرة كبيرة بالدروبال لاستعمالها وبعد فترة قريبة سأضيف توثيق كامل لكيفية استخدامها ومقطعاً تعليمياً أيضاً.

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

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

دول العالم باللغة العربية

August 26, 2009 - الأربعاء 07 رمضان 1430

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

عالمنا

في هذه الدول لايوجد شيء اسمه إسرائيل بل يوجد فلسطين، أيضاً يوجد بعض الدول والتي لم أسمع بها في حياتي كلها لذلك لاتستغربوا من بعض الأسماء!

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

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

إذا وجدتم خطأ أو دولة غير مذكورة أو دولة لايجب أن تذكر (مثلاً هي مدينة وليست دولة) فأخبروني حتى أعدله.

دورة حياة البرامج

May 17, 2009 - الأحد 24 جمادى الأولى 1430

السلام عليكم،
للبرامج كما للمخلوقات دورة حياة تمر فيها ومن قرأ كتب عن هندسة البرمجيات والتحليل يعرف هذا جيداً، في لمحة سريعة سنتعرف على دورة حياة البرنامج من ناحية الإصدارات التي كثيراً ما نسمع عنها (ألفا Alpha، بيتا Beta) وترقيم الإصدارات (1.1، 1.2.13) ولكن أغلبنا لا يعرف ماهيتها بالضبط، معلومات لابد أن يعرفها جميع العاملين في حقل البرمجة والبرامج.
(اقرأ المزيد …)

تنقيح الكود باستخدام PDT + Xdebug

May 3, 2009 - الأحد 10 جمادى الأولى 1430

السلام عليكم،
لعل تنقيح كود PHP من أهم الأمور التي تشغل مبرمجي هذه اللغة، فيضطر دائماً إلى استخدام تعليمات (echo, print_r, var_dump) لرؤية المتحولات وتغيراتهم. أما باستخدام منقح Xdebug فالحال يختلف كثيراً حيث يمكنك وضع نقاط التوقف (break points) ومشاهدة حالة المتحولات في هذه النقاط والمحتولات الموجودة أيضاً.
PHP PDT Xdebug
(اقرأ المزيد …)

إضافة التاريخ الهجري للوردبريس

March 13, 2009 - الجمعة 18 ربيع الأول 1430

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

الإعدادات

الإعدادات


شكل المدونة بالتاريخ الهجري

شكل المدونة مع كلا التاريخين


التاريخ الهجري معتمد فيه على مكتبة الأستاذ خالد الشمعة

مقدمة في الاختبارات الآلية

March 3, 2009 - الثلاثاء 08 ربيع الأول 1430

السلام عليكم،
تكلمنا سابقاً عن أهمية الاختبارات الآلية وفائدتها، واليوم سيكون درس سريع لكيفية استخدام مكتبة SimpleTest مع PHP.

simpletest-logo

سنقوم سوياً عبر عدة تدوينات لهذا الغرض (الاختبارات الآلية) بإنشاء مشروع صغير لإدارة شؤون شركة صغيرة والموظفين فيها.
(اقرأ المزيد …)

نصائح php الجزء الثالث

February 5, 2009 - الخميس 10 صفر 1430

11- عند بناءك لموقع بدون استخدام إطار عمل فاستخدم على الأقل طبقة للتعامل مع قاعدة البيانات ومحرك للقوالب (مثل smarty).
12- استخدم أسماء معبرة للمتحولات والتوابع والأصناف.
13- اكتب التعليقات على النص المصدري باستمرار وخلال كتابة الكود لابعده، والأفضل أن تتقيد بمعايير كتابة التعليقات كي تيسر الأمر على المطورين من بعدك وأيضاً لتستطيع إنشاء دليل المستخدم بشكل آلي من هذه التعليقات.
14- لا تستمع للناس الذين يقولون بحذف الأقواس للعبارات الشرطية والحلقات ذات السطر الواحد، ابقي نصك المصدري متجانس وذو مظهر واحد ومعياري،

// not so good
if ($budget > 100)
  getTax($budget);
// good
if ($budget > 100) {
  getTax($budget);
}

15- استخدم دائماً طرقاً واضحة ومنطقية في تطبيقك، لا تستخدم اختصارات ورموز غريبة أو تستدعي توابع بشكل غير منطقي.
16- إذا أردت طباعة وسوم HTML أو توابع جافاسكربت فلا تفعل ذلك بال echo بل:

<?php if ($loggedin) { ?>
  <div class="message">Welcome!</div>
<?php } ?>

هل استخدام أطر العمل أمر جيد؟

January 20, 2009 - الثلاثاء 24 محرم 1430

هذا هو السؤال اليوم في منتديات البرمجة العربية، أخص لغة PHP وإطارات العمل فيها (CakePHP, CodeIgniter, Zend, Symfony).

(اقرأ المزيد …)