لماذا نتعلم الخوارزميات؟

(خاطرة كتبتها للرد على سؤال يتردد من المبرمجين و الطلاب حول أهمية تعلم الخوارزميات)

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

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

2. الخوارزميات كأساس لمواضيع متقدمة
إذا كنت ستبني نظام معقد و متطور مثل: `نظام تشغيل (Operating System)` أو نظام يعتمد على `الذكاء الاصطناعي (Artificial Intelligence)` أو أي نظام متطور آخر، فستحتاج أن تتعلم و تبتكر الكثير من الخوارزميات المعقدة. من الصعب أن تبدأ في تعلم هذه الخوارزميات المعقدة بشكل مباشر بدون أن تكون على دراية بالأساسيات. فكر فيها كما لو أنك تريد ان تعلم شخص مواضيع متقدمة في الرياضيات وهو لايعرف أساسيات الحساب البسيطة، ستكون مهمة شبه مستحيلة. كذلك الحال مع الخوارزميات البسيطة التي تتعلمها في بداية مشوارك، اعتبرها الأساس الذي تحتاجه حتى تتمكن لاحقا من الغوص في المواضيع المعقدة.

أتمنى لك رحلة ممتعة في عقول العباقرة 🙂

ماذا بداخل صندوق ادواتك؟

توقفت كثيرا عند قصة قصيرة ذكرها العالم Richard Feynman في كتابه Surely You’re Joking, Mr. Feynman، يقول أن أحد معلميه في المرحلة الثانوية أخبره أنه كثير الإزعاج و الكلام في الفصل، وحتى يتوقف ازعاجه أعطاه كتاب ينشغل به. كان الكتاب يشرح تقنيات متقدمه في موضوع التفاضل و التكامل في الرياضيات، وكان يحتوي على بعض طرق الحل التي لم تكن مشهورة في الكتب الأخرى.

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

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

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

مراجعة كتاب Programming: Principles and Practice Using C++, Second Edition

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

51j679vpDGL._SX406_BO1,204,203,200_وقع اختياري على كتاب: Programming: Principles and Practice Using C++ الذي قام بتأليفه صانع اللغة Bjarne Stroustrup، وأنهيت تقريباً 16 فصل من فصول الكتاب. سبب اختياري للكتاب هو الترشيحات الكثيرة له في الإنترنت، وبسبب أن الكاتب هو صانع اللغة، و كذلك انه أحد الكتب القليلة المتوفرة التي تغطي النسختين C++11 و C++14.
وجدت الكتاب مناسب للمبتدئين في البرمجة و طلاب علوم الحاسب و يغطي الكثير من المواضيع من بداية البرمجة حتى مواضيع متقدمة مثل البرمجة بالكائنات و غيرها. محترفي البرمجة قد يجدون الكتاب ممل بعض الشيء بسبب كثرة الإسهاب في مواضيع بسيطة. الكاتب ركز على شرح المفاهيم البرمجية، و ركز على مسألة أن لغة البرمجة مجرد أداة و ان الأهم هو تعلم المفاهيم البرمجية. شخصيا، وجدت بعض فصول الكتاب مملة و طويلة أكثر من اللازم، وكان من الممكن إختصارها، لكن بما أن الكتاب موجه للمبتدئين فقد تكون كمية الشرح لبعض هذه المفاهيم مناسبة للشريحة المستهدفة.

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

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

رجل من نور – بديع الزمان سعيد النورسي

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

أدعوك بدايةً أن تفتح هذا الملف الذي أخرجت لك فيه ثلاثة صفحات من كتاب “كليات رسائل النور” للنورسي، يتوقف بديع الزمان في هذه الصفحات الثلاثة عند “بسم الله” ويعلمنا ماذا تعني “بسم الله” …
سعيد النورسي – الكلمة الأولى – بسم الله

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

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

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

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

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

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

سعة الإطلاع و عمق المعرفة

 “وظيفتي ليست أن أبقى على إطلاع بالمستجدات، وظيفتي أن أغوص في أعماق الأشياء
– عالم الحاسوب الشهير: دونالد كنوث 

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

KnowledgeInformationWisdom

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

عالم الحاسوب الشهير Donald Knuth الذي تم وضع كتابه The Art of Programming في مجلة American Scientist من ضمن قائمة أهم 12 كتاب لها علاقة بعلم الفيزياء بجانب كتب أخرى من تأليف علماء مثل آينشتاين و فاينمان و فون-نيومن، قرر في عام 1990 أن يتوقف عن استخدام البريد الإلكتروني، وقال جملة قوية و رائعة : “وظيفتي ليست أن أبقى على إطلاع بالمستجدات، وظيفتي أن أغوص في أعماق الأشياء “ (ترجمة بتصرف) يقصد أن متابعته للبريد الإلكتروني ليكون على إطلاع بآخر الأخبار و الأمور الجديدة ليست هي أساس وظيفته كبحاث علمي، بل وظيفته و مهمته الأساسية هي أن يحصل على المعرفة العميقة في تخصصه. مهم جدا أن نلاحظ أنه عندما قرر أن يتوقف عن متابعة إيميله كان بسبب أنه لايريد أن يتابع مايمكن تسميته بالأخبار القمامية Junk News و ليس الأخبار المتعلقة بتخصصه، لأن الأخيرة الحصول عليها يكون عبر مصادر أخرى و ليس عبر الإيميل (في العادة!). هنا قرر Donald Knuth أن يتوقف عن توسيع دائرة إطلاعه، و يجعلها محصورة فقط على مايرتبط بتخصصه.

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

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

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

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

مصدر الصورة: غير معروف

رحلة بناء عقل بشري

سألت أحد الباحثين في مجال “العقل” عن مدى معرفتنا عن العقل البشري، فكان جوابه (بتصرف):

“أحد المشاكل المتعلقة بالبحث العلمي في مجال العقل أن كل إكتشاف جديد في هذا المجال يجعلنا ندرك بشكل أفضل حجم جهلنا ويجعلنا نطرح أسئلة أكثر … أعتقد أن كثير من الباحثين في هذا المجال يتفقون أن مانعرفه الآن لايتجاوز الـ 10% و أظنه أقل من ذلك بكثير”

وعندما تقابلت مع الفريق البحثي لمشروع Spaun الذي يعد أكبر و أضخم محاكي للعقل البشري و سألت أحد الباحثين متى يتوقع أن نتمكن من بناء محاكي للعقل البشري قادر على القيام بأمور عملية مفيدة، كان جوابه (بتصرف):

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

تنظيم “المبرمجين” السرّي

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


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

إذا كنت ترغب أن تنضم لهذه الجماعة يجب أن تبدأ من أسفل الهيكل التنظيمي الهرمي. ستبدأ أولاً بتأدية طقوس بسيطة و غير معقدة على شاشة سوداء قاتمة مجرد النظر فيها يشعرك بغربة عن عالمك و عدم ارتياح، كثيرون يسقطون في هذا الاختبار فتنتهي رحلتهم داخل جماعة “المبرمجين” عند هذا الموقف. إن استطعت المقاومة سيطلبون منك أن تطبع تحيتهم الخاصة “Hello World!” على أحد الشاشات السوداء. تخيل يا صديقي أن هذه التحية ابتكروها قبل ما يقارب 35 سنة، في كتاب يعتبرونه سفراً من أسفارهم يسمى The C Programming Language، بعضهم يعتقد أن من لم يقرأ هذا الكتاب لا يستحق أن يكون ضمن جماعتهم. تطرف عجيب!.

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

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

ستبدأ باكتشاف متع جديدة، لن يفهمها إلا أنت و من يشترك معك في هذه الجماعة، منها تلك اللحظات التي تكتشف فيها السبب وراء عدم استجابة الآلة لأوامرك نتيجة وجود خطأ في أدائك لبعض الطقوس، بالمناسبة، حتى هذه الأخطاء لها أسماء و أنواع عند “المبرمجين”. بعضها قاتل “fatal error” يمكن أن ينهي حياتك أنت و الآلة، و بعضها غير قاتل “non-fatal error” ستتغاضى عنه الآلة و لن تلتفت له لكن يمكن أيضاً في أحيان أن ينهي حياتك أنت و الآلة ! .. عالم مخيف !

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

هذه يا صديقي مجرد جولة سريعة في أرجاء هذا التنظيم، انا متغول فيه كثيراً ولا أعلم هل سيتركونني لأكمل لك بقية التفاصيل أم أنهم سيجبرونني على السكوت.. في كلتا الحالتين سأدلك على ثلاثة مواقع ستجدهم مجتمعين فيها بشكل مريب يمكنك أن تبدأ بحثك من هناك لعلك تساهم في يوم من الأيام في تعريتهم أمام العالم، الموقع الأول ستجد فيه عدد كبير من قادتهم https://github.com أما الثاني ففيه خليط من القادة و من لايزالون يخطون خطواتهم الأولى http://stackoverflow.com أما المتحدثين باللغة العربية فقد أسسوا لهم مقراً جديداً أظن أنهم سيجتاحون العالم من خلاله: http://progmr.com

تحياتي يا صديقي،
مبرمج من أرض الحرم
المستوى السابع و الثمانين بعد الألفين

سأصبح إنساناً أفضل “الآن”

في مكان ما داخل عقولنا توجد حاجة غريزية تجعلنا نربط رغابتنا في التغير للأفضل بأحداث زمانية، وغالباً ما يكون بداية العام الجديد هو الوقت الأفضل لذلك، هذا النوع من الربط بين بداية عام جديد و بين الرغبة في التحسن مشهور لدرجة أن الغرب يعرفونه بإسم New Year Resolutions ! و مشهور لدرجة أن الشيخ محمد الغزالي أشار إليه في بداية كتابه القيم “جدد حياتك”.

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

*مصدر الصورة

مشاريع تخرج مزعجة & خطوات عملية لمشروع متميز

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

في التدوينة السابقة تحدثت بشكل مبعثر عن بعض الأفكار التي تدور في رأسي حول مادة “مشروع التخرج”، و فضّلت أن أفرد تدوينة خاصة بمسألة إختيار فكرة المشروع لأهميتها و لكثرة السؤال عن هذا الجانب بالذات.

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

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

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

النوع الآخر من المشاريع التي تزعجني، أطلق عليها لقب “مشاريع المتفلسفين!“، حيث يأتي الطالب أو الطالبة و يقترح تطوير نظام لإكتشاف الأورام السرطانية (أعاذنا الله و إياكم) بإستخدام الخوارزمية الجينية (قصة حقيقية!)، أو نظام للتعرف على مشاعر الأطفال من خلال حركة عيونهم .. الخ من المشاريع العجيبة، هل تعرفون لماذا أعتبرهم متفلسفين؟ لأن سؤالهم التالي بعد مفاجئتك بمشروعهم القومي يكون: إيش أفضل لغة برمجة لهذا المشروع؟ وقتها، يمكنك أن تشد شعرك أو أن تمزق ثيابك من القهر. أستطيع أن أتفهم أن بعض المصطلحات التقنية، خصوصاً المرتبطة بمجال الذكاء الإصطناعي تشعر الإنسان بنشوة عجيبة، فخوازمية مثل Genetic Algorithm (الخوارزمية الجينية) أو الشبكات العصبية (Neural Networks) أو مجال مثل تعلم الآلة (Machine Learning) يمكن أن تصنع طبقات من الخيال العلمي في عقل المتلقي الغير مطّلع عليها، لكنها كذلك تخفي خلفها طبقات من التعقيد و تتطلب مستويات متقدمة من المعرفة و القدرة على التعلم الذاتي، لذلك عندما يسألني الشخص عن لغة البرمجة الأنسب بعدما يقترح مشروع من هذا النوع، فإني أرجح أنه لن يكون قادر على تعلم هذه الأمور بنفسه وأنه لم يقرأ عنها بما فيه الكفاية.

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

قواعد عامة لمشاريع التخرج

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

خطوات عملية للوصول إلى مشروع متميز

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

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

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

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

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

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