طلقات ..

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

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

الطلقة الثالثة .. “ومن نكد الدنيا على الحر أن يرى ** عدواً له ما من صداقته بد”.

الطلقة الرابعة .. “أخاك أخاك إن من لا أخا له ** كساع إلى الهيجا بغير سلاح”.

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

الطلقة السادسة .. تشك تشك .. يظهر أن الرصاصات انتهت أعود اليكم في وقت آخر.

قراءة الكتب البرمجية

قرأت عدداً لا بأس به من الكتب البرمجية التي تتحدث عن لغات بعينها كتلك التي عناوينها من نوع : “احترف C-Sharp” أو “تعلم كل شيء عن Java”، فوجدت أنها عادة ما تكون مقسمة إلى أجزاء، بدايةَ بجزء يشرح طريقة تجهيز بيئة العمل و تثبيت المترجم و كيفية تشغيل برنامجك الأول، ثم جزء يتحدث عن الـ Syntax الخاص باللغة، و بعد ذلك مجموعة فصول كل منها يمثل أحد تطبيقات اللغة مثلاً طريقة الاتصال بقواعد البيانات أو كيفية التعامل مع الملفات.

و لا يخفى عليك أن الـ Syntax في أكثر اللغات يتشابه حتى يصل إلى حد التطابق أحياناً ( كما هو الحال بين C-Sharp و Java و ++C ) لذلك أعتدت أن أتجاوز  الفصول الخاصة بالـ Syntax فالقراءة فيها مضيعة للوقت، إلا إذا أحسست أن الـ Syntax غير مألوف فأتصفحها تصفحاً سريعاً.

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

وليس أجمل من هذه الكتب إلا تلك التي تتحدث عن البرمجة كمفهوم  بعيداً عن الربط المباشر بلغة محددة، كالحديث عن أساليب البرمجة أو عن طرق تصميم البرمجيات من أمثال كتاب “The Pragmatic Programmer” و “Code Complete” و كتاب Design Patterns: Elements of Reusable Object-Oriented Software و غيرهم.

علاقة غرام بيني و بين الـ Cheat Sheet

Inmyroom“Cheat Sheet” لا أعرف لها تعريباً مناسباً و التعريب الحرفي لا يؤدي الغرض، لكنها ببساطة عبارة عن ملخصات في ورقة واحده أو مجموعة أوراق،وليس أفضل من الشرح إلا المشاهدة، ففي موقع ILoveJackDaniels مجموعة من الـ Cheat Sheet منها الـ PHP Cheat Sheet و التي تحتوي على ملخص لبعض أهم الدوال المستخدمة في PHP إضافة إلى ملخص للـ Regular Expression، وهي مثال جيد على الـ Cheat Sheet.

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

عن نفسي أجد أنه من المفيد جمع الـ Cheat Sheet و طباعتها و تثبيتها في مكان ظاهر خصوصاً لمن يعملون في مكاتب خاصة، فحتى مع تطور وسائل البحث الإلكترونية لا يزال البحث بالعين المجردة في صفحة واحده مثبته أمامك أسرع بكثير ^_^.

مجموعة من الـ Cheet Sheat :

البحث عن الـ Cheat Sheet :
الـ Cheat Sheet مبعثرة في أرجاء الإنترنت، يمكنك استخدام Google و البحث عن شيء مثل “ X Cheat Sheat” حيث X تمثل التقنية التي تريد أن تحصل على Cheat Sheet لها.

تعديل بعد النشر : يمكن أيضاً استخدام العبارة “ X Reference Card” حيث تمثل X أيضاً التقنية التي تبحث عن ملخص لها”

تنعدم الحياة عندما تنعدم الإختيارات

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

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

لاتتعصب للغة برمجة واحدة و تدافع عنها و تقاتل من أجلها و كانها “من بقية أهلك!”، بل كن متفتحاً قادر على استيعاب اللغات الأخرى و المفاضلة فيما بينها على أسس علمية ضمن إطار المشروع الذي تعمل عليه، و لا تطلق على نفسك لقب “مبرمج PHP” أو “رجل الـ Java” و إنما يكفيك أن تتسمى بـ “مبرمج” فهي أعم و أشمل و أرقى.

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

كيف تنمي ثقافتك في 12 دقيقة – ملف صوتي

DrTareq

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

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

الإنقطاع المتكرر عن الكتابة

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

لذلك فهذا عذر أقدمه لكل من راسلني و سأل عن تكملة سلاسل الدروس التي بدأنها، فامّا بالنسبة لسلة دروس Ajax كنت قد أنهيت ما يقارب الخمسة دروس و سأحاول أن أحملها إذا يسر الله، و أمّا ما يخص سلسلة “ثقافة تقنية 101” فبالنظر إلى التعليقات التي و صلتني على الموضوع وجدت أن الأولى صرف الاهتمام بشيء عملي أكثر و يفيد شريحة أكبر (بالرغم من أني لازلت مقتنعاً أن المواضيع التي كنت سأناقشها بغاية الأهمية لأي شخص مختص بالحاسب الآلي) و من أجمل التعليقات التي وصلتني شخص يطالب بالكتابة عن “Design Patterns” و آخر يسأل عن “Genetic Algorithms” ، لا أخفيكم سراً أني تفاجئت من هذا النوع من الطلبات، فلم يخطر ببالي أن يكون زوار موقعي من الفئة المهتمة بهذه الامور، لا استخفافاً بهم إنما جهلاً مني ، هذا النوع من التعليقات جعلني أعيد التفكير بشكل كامل فيما يجب ان اكتب حوله احتراماً لنفسي و لعقول قرائي فلا أنا أريد أن أضيع وقتي بكتبة مالا يحتاجه أحد ولا أريد أن أضيع اوقات قرائي بقراءة مالا ينفعهم لا في دينهم ولا دنياهم ، و إنه لأرحم لي ان أترك الموقع خالياً تتراكم عليه ذرات الغبار بدلاً من كتابة مالا يفيد ولا يسمن من جوع فتتساقط علي أنواع اللعنات!.

“لازم تسوي كذه” و “المفروض يكون كذه” و ” لابد تعمل كذه”

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

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

قبل أكثر من سنة و نصف نشرت موضوع على مدونتي القديمة بعنوان “لطفك يا رب ! XHTML و 145 خطأ !!” تحدثت فيه عن محاولة لإخضاع التصميم القديم للمقاييس و اكتشافي لـ 145 خطأً في حين كان الملف يحتوي 144 سطر ، أي ما يقارب الخطأ لكل سطر ، أنا اعلم أن إصلاح هذه الأخطاء بغاية السهولة و إنما هي مسألة “وقت” ، لكني لست مستعداً للتنازل عن هذا الوقت لأجل هذا الأمر الذي لم يعدوا كونه ترفاً تقنياً ، ففي ذلك الوقت لم أكن أتوقع أن يزور موقعي شخص يستخدم غير الـ Internet Explorer ، فلماذا هذا الإهدار للوقت و الجهد .

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

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

التعامل مع الاحداث في جافا سكربت ( صوت و صورة )

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

(حجم الملف : 1 MB تقريباً ، مدته : 5 دقائق و 15 ثانية ، صيغة الملف : WMV)

إعادة استخدام الشفرة – Code Reusability

لا حاجة لاختراع العجلة كل مره < ?xml:namespace prefix ="" o />

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

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

أسهل الطرق لعمل شفرة برمجية قابلة لإعادة الاستعمال هي الدوال “Functions” ، إذا كنت تستخدم أجزاء من شفرتك في أماكن متعددة من برنامجك ، أو كنت تعتقد أن أحد الأجزاء يمكن إعادة استخدامه في برنامج آخر فأبسط طريقة لجعله قابل لإعادة الاستعمال هو وضعه في دالة منفصلة ، على سبيل المثال الشفرة البرمجية التي تتأكد من أن العنوان البريدي الذي يدخله الزائر تمت كتابته بطريقة صحيحة ( بحيث يتبع الشكل name@domain.ext مثلاً ) هذه الشفرة البرمجية قد تستخدمها في الكثير من البرامج ، ألا تعتقد أنها فكرة جيدة لو قمت بكتابتها على هيئة دالة فتتمكن من نقلها بين المشاريع بسهولة ..

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

مراجع الموضوع :

Code Complete 2nd Edition By Steve McConnell , MS Press , 2004

مدراء المشاريع و اختلاف الثقافاث

يذكر Alistair Cockburn مؤلف كتاب Agile Software Development أنه مر بتجربة في “إنجلند” قام فيها مدير المشروع الذي يعمل فيه بتحديد الاهداف و الخطة و الإستراتيجيات المتعلقة بالمشروع ثم جمع أعضاء الفريق و عرض عليهم هذه الأشياء ، فحاول Alistar بعد ذلك أن يطبق نفس الطريقة عندما عمل كمدير لاحد المشاريع في إيطاليا، فكان رد أعضاء الفريق : “هذه خطتك و أنت الذي عملت عليها ، لكن إذا كنت تريدنا أن نعمل مع بعض فلابد أن نضع الخطة مع بعض “

بعد ذلك توجه Alistar إلى استراليا ليدير مشروع آخر ، فأختار أن يديره على الطريقة الإيطالية ، فجمع فريق العمل و أحضر “سبورة” بيضاء كبيرة و بدأ بشرح المشروع و أهدافه و قال لفريق العمل : “الآن دعونا نعمل مع بعضنا لنحدد كيفية إنجاز هذا المشروع ” … ليأتي ردهم : ” أنت المدير ! قم انت بتحديد هذه الأشياء و سوف نقوم بتنفيذ ماتقوله ” 🙂

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

لن أتحدث عن العبرة من هذه القصة فأنا اجزم أن كل مدير صاحب بصيرة يعلم عن ماذا يتحدث الكاتب تماماً ولكن من باب “وذكر فإن الذكرى تنفع المؤمنين” (سورة الذاريات آية 55 )