؟Debugging ما هي عملية إصلاح الأخطاء البرمجية

http://karimali.net/images/error.jpg

عملية البرمجة هي عملية معقدة .. ولأنها تنفذ دائما بأيدي بشرية فينتج عنها دائما أخطاء .. والخطأ البرمجي له إسم شائع باللغة الإنجليزية يسمى Bug أو حشرة ! وقد سميت بهذا الإسم بسبب موقف حدث في عام 1947 في جامعة هارفارد في أحد المشاريع الواعدة لتصنيع كمبيوتر كانت المهندسة Grace Murray Hopper تخطط للمشروع وما إلى ذلك ثم إلتصقت حشرة في مكان مهم من الورقة التي تعمل عليها جريس ! ومن وقتها سميت الأخطاء البرمجية بهذا الإسم نسبة لها .. (يمكنك مشاهدة الورقة الحقيقة التي نتحدث عنها من هنا حشرة تاريخية ! :)

إذا كما إتفقنا الخطأ البرمجي يسمى بـ Bug وعملية اللحاق بهم وتصحيحهم تسمى Debugging .. أو ملاحقة الحشرات !! :)

وهناك 3 أنواع من الأخطاء البرمجية :-

Syntax errors الأخطاء الكتابية :

لغة بايثون يمكنها فقط أن تشغل البرامج التي لا تحتوي على أخطاء كتابية ,, وإلا سيظهر لك مترجم لغة بايثون رسالة يخبرك فيها بوجود خطأ إملائي .. بالتالي لن يتمكن مترجم اللغة من تشغيل البرنامج كليا .. (مترجمات لغات البرمجة Compilers غير رحيمة إطلاقا في تلك النقطة .. لو تعرف أحدها مما يتغاضى عن الأخطاء الإملائية في لغات البرمجة أتمنى أن تشاركني به) على أي حال الأخطاء الكتابية Syntax errors يمكنها أن تعوقك قليلا في بداية تعلمك لأي لغة برمجة .. مع الوقت عندما تزيد مهارتك وخبرتك بها لن تمثل لك أي مشكلة فهي تحتاج إلى تدريب ليس إلا ..

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

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

عملية إصلاح الأخطاء البرمجية :

هي من أهم العمليات على الإطلاق التي يجب أن تتوافر عندك إن كنت تريد أن تصبح عالم في تطوير البرمجيات أو حتى مطور برامج .. وفي بعض الأحيان يمكنها أن تصيبك بالإحباط (حين تكون الحشرة كبيرة نوعا ما! ) ولكنها في المقام الأول عملية فكرية فيها الكثير من التحدي والمتعة في عملية تطوير البرنامج ..

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

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

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

على سبيل المثال نظام التشغيل لينوكس Linux يحتوي على الملايين من سطور الأكواد البرمجية ولكن الفكرة بدأت ببرنامج بسيط جدا (بالمقارنة) كتبه Linus Torvalds وكانت وظيفته العمل على الدائرة الإلكترونية في معالج إنتل Intel 80386 chip .. ويمكن تصويره ببرنامج يقوم بطباعة أأأ و بـ بـ بـ .. هذا البرنامج تتطور حتى أصبح نظام التشغيل لينوكس في يومنا .. فهل يمكن أن نطلق على نظام التشغيل هذا أنه عملية إصلاح أخطاء برمجية ؟!  (مقتبس من دليل مستخدم لينوكس) ..

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

أذكر أن أول قائد فريق عمل Team leader عملت معه قالها لي مرة (على سبيل المزاح) حين وجدني متعصبا بسبب أن البرنامج الذي أشارك في تصميمه لا يعمل وأحاول محاولات عديدة وتظل الأخطاء تظهر .. إن عمل معك البرنامج بشكل صحيح من أول مرة فإعلم أنك أخطأت في شىء ما !! :)   لذلك كلما ظهر لي خطأ برمجي تذكرت كلامه وإبتسمت وإستكملت عملي ! فلا تكره حياتك وقتها ! :D

والسلام عليكم لحين التدوينة القادمة :) ..
التعليقات: 2 | الزيارات: 864 views | التاريخ: 2010/02/13

! إخترق برامجك

http://karimali.net/images/funnyhacker.jpg
الإسبوع الماضي كان أسبوعاً مشغول جدا جدا .. ربما لم يكن كذلك لولا خطأ يدوي إرتكبته أخر الإسبوع الماضي بحذفي لمشروع كامل في عملي مع عدد لا بأس به من النسخ الإحتياطية .. مما جعل عرض البرنامج على العميل يومها شيئا مستحيلا !! ولم يكن من الممكن في هذا المشروع أن أستخدم برامج VCS للعمل من على كمبيوتر أخر والإحتفاظ بالنسخة الأصلية مهما حدث لبعض إحتياطات السرية من قبل العميل ..

طبعا الحمد لله قدر الله وما شاء فعل ..

المهم الأن نقطتين .. هو ما نستفيد من التجربة؟

أولا ما كان يجب أن أفعله ؟
لكي لا أتعرض لمشكلة مثل هذه هو الإحتفاظ بنسخة إحتياطية خارج الكمبيوتر تماما .. هناك عدة أفكار ربما يمكنني تنفيذها في الفترة القادمة منها الإحتفاظ بنسخة إحتياطية على مكان ما على الإنترنت كملف مضغوط واحد للإحتفاظ بالسرية في بعض المشاريع .. الحل الأخر الذي مايزال مقلقا هو الإحتفاظ بالبيانات على Hard Disk خارجي أو على Flash Memory ولكنها بالنسبالي ما تزال غير مريحة فهي معرضة للتلف في أي وقت بشكل كامل ! (هل عندك أفكار تشاركني بها؟)

ثانيا ما فعلته ؟
هو إستخدام طرق تقصير مسافات .. وتقليل الوقت الذي إحتجته لتطوير البرنامج من البداية بشكل كوميدي ! هو إختراق برنامجي في حد ذاته ! كيف؟
ما إستطعت إنقاذه من بيانات مشروعي هو النسخة الكاملة التجريبية التي تعمل على الـ Server الخاص بالعميل .. والمشكلة الموجودة في برامج الويب Web Apps المطورة بـ ASP.NET (وهي مشكلة في عملية الإختراق فقط لحد الأن) هي في حالة إغلاق البرنامج وتحويل ملفاته إلى DLL مغلقة أكود المصدر .. في هذه الحالة يمكننا إختراق البرنامج وإعادة الملفات المغلقة هذه لهيئتها الأولية التي طورتها عليها بإستخدام برنامج NET Reflector. .. كل ما عليك هو إعطائه ملف الـ DLL وهو يرجعه إلى صورته الأصلية من جديد ! :) .. كل هذا إختصر علي فترة طويلة جدا إلى إسبوع واحد لإسترجاع كل ما فقدته الحمد لله ..

أتمنى أن لا تسىء إستخدامه !

مصدر الصورة

والسلام عليكم لحين التدوينة القادمة :)

التعليقات: 3 | الزيارات: 327 views | التاريخ: 2010/02/06

كيف تفكر كعالم كمبيوتر بإستخدام لغة بايثون – الجزء الأول -2

http://karimali.net/images/computers.jpg
نعود اليوم لإستكمال ما بدأناه في التدوينة السابقة و مقدمة كتاب كيف تفكر كعالم كمبيوتر بإستخدام لغة بايثون .. ونناقش اليوم بعض المفاهيم البرمجية قبل الدخول في التفاصيل الأخرى .. والمفاهيم التي نتناولها اليوم لا تتطلب أي معرفة سابقة ببرمجة الكمبيوتر أو لغة بايثون تحديدا .. فقط مفاهيم عامة بشكل مبسط .. التدوينة اليوم خفيفة مع القهوة :) ..

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

المدخلات Input

وهي إستلام البيانات من الكيبورد مثلا أو من ملف ما .. أو حتى من جهاز أخر مرتبط بالكمبيوتر .

المخرجات Output

عكس العملية السابقة .. فهي عرض البيانات على شاشة الكمبيوتر مثلا أو إرسال البيانات إلى ملف أو إلى جهاز أخر .

الرياضيات Math

تنفيذ عملية حسابية للحصول على نتيجة .. مثلا 1 + 1 = ؟ .. صعبة ..

الجمل الشرطية Conditional Execution

بإختصار هي ترجمة لجملتين “إذا حدث هذا” “إفعل كذا ! ”

الإعادة والتكرار Repetition

وهي أمر لتنفيذ عدة تعليمات بصفة متكررة حتى يحدث شىء معين يوقف العملية التكرارية .. مثلا أن أقول لك “أجلس وتناول طعامك” “حتى أعود” بالتالي عودتي ستوقف العملية التكرارية التي تقوم بها وهي تناول الطعام … أعلم أنك ستترك لي نصيبي ! :)

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

مصدر الصورة

التعليقات: 3 | الزيارات: 416 views | التاريخ: 2010/01/31

البداية بكتاب .. كيف تفكر كعالم كمبيوتر بإستخدام لغة بايثون

http://karimali.net/images/pyforfuture.jpg

في مدونتي القديمة كنت قد كتبت تدوينتين كمقدمة للغة البرمجة Python الأولى Python – مقدمة والثانية كيف تعمل لغة Python والأن نكمل التحدث أكثر عنها ..

في البداية قابلتني مشكلة حين فتحت الكتب التي تتحدث عن اللغة لأحضر منها المواضيع التي سأتكبتها بترتيب يسمح بالإستفادة وشرح الأساسيات بدون التوسع التام لكل نقاط اللغة فأي لغة برمجة تحتاج لكتب من الحجم  الكبير لشرحها وليس مجرد عدة تدوينات !!

بعدها وجدت كتاب How to Think Like a Computer Scientist Using Python وهو كتاب حر لشرح أساسيات اللغة .. ووجدته أكثر من جيد في تلك النقطة الحقيقة بدون تشعبات كثير في البداية .. وبعد مراسلة مؤلف الكتابJeffrey Elkner وأخذت موافقته في السماح بإستخدام هيكل المواضيع في الكتاب والتحدث في نقاطه والزيادة عليها كما أريد .. وكان شرطه أن يظل المحتوى حرا بالنسبة للقارىء باللغة العربية .. وهذا ما أردته من الأساس !! :)

الفصل الأول : الطريق لتطوير البرامج

مقدمة :

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

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

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

في البداية يجب أن تعود مرة أخرى للرابطين في أول التدوينة لمعرفة مقدمة عن اللغة وما يميزها عن لغات البرمجة الاخرى .. في تلك النقطة الأن أريد فقط أن أعود لمفهوم الفرق بين طريقة عمل مترجم لغة البايثون Python Interpreter و المترجمات العادية للغات الأخرى compiler هو أن الـ Interpreter يقرأ البرنامج في مستوى High Level ثم يقوم بتنفيذه مباشرة .. بمعنى أنه يقوم بالقليل من العمليات في وقت قصير للتنفيذ .. لكن الـ compiler يعمل بطريقة مختلفة فهو يقوم بقراءة سطور البرنامج كلها من البداية لتنفيذها كاملة قبل عمل البرنامج في حد ذاته .. في هذه الحالة تسمى الأكواد البرمجية Source Code .. والبرنامج المترجم يسمى object code أو executable فبمجرد أن يتم تشغيل وترجمة البرنامج ككل يمكنك إستخدامه كما تشاء بدون أي عمليات ترجمة إضافية من الكمبيوتر ..

يمكنك فهم الأسلوبين بطريقة أخرى في الشكليين التاليين :-

Interpreter

Compiler


ولكن أيضا بعض لغات البرمجة الحديثة تستخدم الأسلوبين معا في تنفيذ وترجمة البرامج .. في البداية تقوم بالترجمة للغة في مستوى Low Level تسمى byte code ثم بعد ذلك تقوم بعملية مشابهة لما يقوم به الـ Interpreter أو بما يسمى virtual machine (وهو يشبه المستخدم في لغة Java والبرامج المطورة بإستخدام بيئة Net. .. وفي الحقيقة أن بايثون أيضا تستخدم الأسلوبين معا في ترجمة البرنامج ولكن أشتهر مع الكثير من المبرمجين وطريقة عملهم معها كـ لغة تعمل بالـ Interpreter ..

وهناك طريقتان مشهورتان للتطوير ببايثون هما Shell Mode و Script Mode .. في النوع الأول يمكنك كتابة الأكواد في الـ Shell “وهو سطر الأوامر في أنظمة التشغيل مثل اليونكس واللينوكس” و الـ Interpreter يقوم بعرض النتائج مباشرة كالمثال التالي ..

$ python
Python 2.5.1 (r251:54863, May 2 2007, 16:56:35)
[GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>> print 1 + 1
2

والسطر الأول في الأكواد السابقة وظيفته تشغيل الـ Interpreter في نظام التشغيل .. الثلاث سطور التالية هي سطور يكتبها النظام .. السطر الخامس الذي يبدأ بـ <<< هو أمر من أوامر اللغة ويسمى بـ Python prompt يكتب النظام هذه الرموز ليخبرنا أنه على إستعداد لإستلام وتنفيذ الأوامر البرمجية .. ثم  في نفس السطر كتبنا الأمر print 1 + 1 بمعنى إطبع نتيجة العملية 1 + 1 وفي السطر الأخير هو طباعة نتيجة العملية مباشرة ..

أما عن طريقة كتابة بايثون عن طريق Script .. فيمكننا كتابة السطر print 1 + 1 في ملف فارغ بإستخدام أي محرر نصوص Text Editor ونسميه مثلا firstprogram.py ونلاحظ هنا أن أي برنامج يكتب بلغة بايثون يكون في ملف منتهي بـ py. .. ثم نقوم بتنفيذه بإستخدام الـ Interpreter كالتالي

$ python firstprogram.py
2

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

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

مصدر الصورة

والسلام عليكم لحين التدوينة القادمة و برمجة سعيدة :) ..

التعليقات: 5 | الزيارات: 1,005 views | التاريخ: 2010/01/26

!! الحياة من أجل القراءة

http://farm3.static.flickr.com/2109/2054181548_b53144452d_m.jpg
أنت في حاجة إلى قراءة الفلسلفة والشعر والقصص .. في حاجة إلى فتح ذهنك على الشرق والغرب ليحصل على التهوية الضرورية فلا يتعفن وستفهم نفسك من خلال الذين تقرأ لهم وإذا فهمت نفسك فقد وضعت قدمك على بداية الطريق .. وعرفت من أين يكون المسير .. دكتور مصطفى محمود من كتاب الله والإنسان .

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

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

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

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

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

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

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

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

ولكن هناك بعض المجالات المشهورة في القراءة ممكن نستعرض فوائدها المباشرة مثل :

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

الرياضيات :
علم الرياضيات وممارسة حلها بإستمرار هي وسيلة مهمة جدا للرياضة العقلية .. وطبعا كل ذلك القراءة فيها وتعلمها .

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

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

أثناء تحضيري للتدوينة قرأت تدوينة عندما تقرأ الأمم .. لها علاقة كبيرة بتدوينتي اليوم ..

والأن ماذا عنك ؟ هل عندك أفكار وأسباب تشاركني بها تحفزنا والأخرين على القراءة ؟ هل قررت أن تعود لرف كتبك وتلتقط كتابا لم تقرأه بعد؟

وأخيرا هذا حسابي على موقع GoodReads يمكننا مشاركة ما نقرأ سويا :) ..

والسلام عليكم لحين التدوينة القادمة .. :)

تحديث : إقرأ أيضا سر قرائتي لكتب كثيرة

التعليقات: 5 | الزيارات: 1,008 views | التاريخ: 2010/01/17

تحفيز الصغار لتعلم تطوير البرامج والإنترنت

http://marcgrabanski.com/img/programmer_kid.jpg

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

أولا نظام التشغيل Qimo مفتوح المصدر .. مبني على نواة نظام التشغيل Linux مخصص للأطفال وتعليمهم أساسيات نظم التشغيل .

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

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

التعليقات: 3 | الزيارات: 401 views | التاريخ: 2010/01/10

2- JavaScript برندن إيتش صاحب ثورة

http://farm4.static.flickr.com/3480/4055148344_420e7ea1d4_m.jpg في البداية أحب أن أوضح أن كتابتي عن الأشخاص الناجحين في المجال التقني وخصوصا المطورين منهم في المدونة لن تكون إستعراض لسيرة ذاتية كاملة ! وإنما هو إلقاء ضوء بصفة عامة و إستخلاص الإستفادة وقبل كل ذلك التحفيز .. فلا أنكر أني شخصيا بعد بحثي لتجميع المعلومات عن الشخصيات التي أكتب عنها أشهر بتحفيز كبير لمواصلة العمل أكثر وأكثر وأكثر :) ..

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

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

إنتقل إلى Netscape في 1995 وعمل الفريق المسؤول عن عمل المتصفح مع أجهزة الخوادم Servers و الـ Proxys وكان العمل لمدة شهر ثم جدد بعدها التعاقد ليلتحق بالفريق المسؤول عن تعامل المتصفح مع المستخدم وفي تلك النقطة بالتحديد بدأت فكرة الـ JavaScript .

وفي تجمع 3 أشخاص أعتبره تاريخي وهم صاحب حديثنا Brenden Eich و Marc Andreessen مؤسس شركة موزيلا و Bill Joy مؤسس شركة Sun … “قلت لك تاريخي ! :) ” وإتفقوا على أن لغة HTML تحتاج إلى لغة برمجة من نوع scripting language لتمكن المبتدأين وغير المحترفين من برمجة صفحات الويب بشكل متداخل مع الـ HTML للتسهيل .. ثم تطور الحديث لدعم برامج أخرى مطورة بالـ Java .

وعن فكرة الـ JavaScript فكما نعلم فهي تعمل على عناصر الـ HTML مباشرة ويمكنها تغيير صفات العناصر بها ثم إظهار التغيير مباشرة إلى صفحة الويب .. طبعا هذا وصْل شبكة الإنترنت لما عليه من صفحات حية الأن .. وهذا ما لم يكن موجودا وقتها .

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

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

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

ونصائح برندن بصفة عامة للمبرمجين يتمثل في نقطتين ..  الأولى هي قراءة الكتب وخاصة الكتب القديمة التي كتبها علماء الكمبيوتر مثل كتاب The Art of Computer Programming لـ Donald Knuth وكتاب Algorithms + Data Structures = Programs لـ Niklaus Wirth وكتاب Unifying Theories of Programming لـ C.A.R. Hoare .. فهو يرى أن عجلة التطور في المجال التقني تنقلب تماما كل 10 – 20 عام في المصطلحات وحتى الأبحاث الأكاديمية بينما تظل (الكلاسيكيات) متعارف عليها ومرتبطة بالتقنيات الحديثة بشكل ما ..

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

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

وأخيرا مصدر الصورة ..

والسلام عليكم لحين التدوينة القادمة :)

التعليقات: 5 | الزيارات: 489 views | التاريخ: 2010/01/07

1- JavaScript برندن إيتش صاحب ثورة

http://farm1.static.flickr.com/149/423532024_704756f1f5_m.jpgطالما بتقرأ كلماتي هذه الأن أكاد أجزم أنك قد سمعت يوما عن ثورة الـ Web 2 ! أو إستخدمت عدة مواقع من التي إنضمت لتلك الثورة .. أو أنك قد جربت مثلا بريد Gmail أو ربما تستخدم قارىء خلاصات RSS Reader لمتابعة مواقعك المفضلة أو أو أو .. الأمثلة الكثيرة من المواقع التي تعمل بشكل ديناميكي Dynamic وفي الأغلب تعمل بشكل سلس وجذاب في طريقة إستخدامه .. بالتالي أنت قد سمعت عن لغة JavaScript .. ولا أعتقد أبدا أنها لغة بحاجة للتعريف بها ..ولكن يكفي أن أقول أنها سبب رئيسي يكاد يكون الأول فيما وصل إليه أسلوب إستخدام مواقع الإنترنت اليوم .

من هنا أبدأ معك تدوينتنا اليوم عن الشخص الذي وقف وراء تطوير وبرمجة تلك اللغة .. والذي يجهله الكثير مننا براندن إيتش Brendan Eic الذي يتولى منصب المدير التقني CTO لـ شركة Mozilla ..

عمل برندن إيتش في عدة شركات وكان مركزا في تلك الفترة في تطوير أكواد النواة kernel code لنظم التشغيل قبل أن ينتقل إلى شركة Netscape حيث كان عمله الأساسي على متصفح Netscape الشهير ورغم ضيق الوقت والعمل إبتكر JavaScript !

وفي عام 1998 بمعاونة Jamie Zawinski كانوا من أكثر المؤثرين لإقناع الشركة بفتح الكود المصدري Source Code تحت رخصة المصادر المفتوحة Open Source ! ثم بعدها كان من رواد مشروع مؤسسة موزيلا Mozilla.org .. وهو الدور الكبير الذي حول موزيلا لما هو عليه الأن ووصل أيضا متصفح FireFox لما عليه من شعبية كان أيضا مهتم بكسر الفجوة بين العمل الأكاديمي وأبحاثه النظرية وبين عالم الأعمال في المجال التكنولوجي عمليا .. – وهي القضية التي تشغلني شخصيا بشكل كبير -

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

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

وعن أول تجربة بردن لكتابة برنامج كامل كانت على جهاز يعمل بـ VT100 terminal من شركة DEC هو لعبة ! نعم لعبة تشبه في أسلوبها لعبة ماريو المشهورة ثم تلتها Pac-Man, Donkey Kong بلغة البرمجة باسكال وكان كل ذلك وهو مازال في عامه الدراسي الثالث عبارة عن هواية ليس أكثر .. ثم تطور جدا بعد ذلك عندما إنتقل لدراسة علوم الحاسب بتعمق أكثر فبدأ يكتب المترجمات البرمجية parser generator وهو الأسلوب الذي مازال شائعا حتى اليوم ..

في تلك الأثناء وصل لصحبنا بريندن بعض الأكواد المصدرية (الأولية) لنظام تشغيل يونكس المكتوبة بلغة C .. حينها فكر وقال لنفسه هناك طريقة أحسن لعمل هذه الأكواد !

مصدر الصورة

التعليقات: 6 | الزيارات: 618 views | التاريخ: 2010/01/03

لماذا مدونة جديدة؟

اهلا من جديد ..

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

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

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

هذه أهدافي من المدونة وأتمنى أن تنفع ولو شخص واحد والجميل أن تكون أنت هذا الشخص :) ..

في بداية عامي الجديد .. كتبت أولى كلماتي في هذه المدونة ..

والسلام عليكم لحين الكلمة القادمة :)

التعليقات: 11 | الزيارات: 307 views | التاريخ: 2010/01/01

أهلا بالعالم :)

اليوم التدوينة الأولى إن شاء الله .. إنتظرونا :) ..

التعليقات: 4 | الزيارات: 321 views | التاريخ:

Switch to our mobile site