الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مذكرات حول تصميم قواعد البيانات وتطبيقاتها

رائج
بدأه أحمد مبارك الحيقي في 24 يونيو 2010 · 55 رد · 16,932 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

تمهيد

الحمد لله وحده، والصلاة والسلام على من لا نبي بعده، اللهم صلّ على محمد وعلى آل محمد كما صليت على إبراهيم، وبارك على محمد وعلى آل محمد كما باركت على إبراهيم، في العالمين إنك حميد مجيد.

أما بعد...

مضت على نهاية الجزء الأول من هذه المذكرات بضع شهور الآن، وقد تناول الجزء الأول مبادئ تحليل وتصميم قاعدة البيانات، وتم جمعه في كتاب على هذا الرابط:

/index.php?showtopic=191995&view=findpost&p=1041066

ومن باب التذكير لمن سبق له الاطلاع على الكتاب، ولفت الانتباه لمن لم يسبق له ذلك، أورد هنا محتويات الجزء الأول:

====================================

تعريفات أساسية: قواعد البيانات والأكسس

المزيد من التعريفات الأساسية: DBMS وتطبيقات قواعد البيانات

تعريفات أساسية أخرى: SQL

هل SQL لغة برمجة؟

الطبقات في عالم قواعد البيانات وتطبيقاتها

الفرق بين البنى المنطقية والفيزيائية

دورة حياة النظام: أهمية التحليل

دورة حياة النظام: نظرة على التصميم وبقية المراحل

مقدمة إلى مخطط الكائنات والعلاقات ERD

التحليل من ناحية عملية: المقابلات

التحديات في وجه المحلل

وسائل التحليل الأخرى

مدخل إلى التصميم: نظرة عامة

قواعد البيانات العلائقية: المفاهيم الأساسية

قواعد البيانات العلائقية: المزيد من المفاهيم الأولية

العلاقات

التسوية Normalization: مدخل

الأشكال السوية: الشكل السوي الأول 1st NF

الأشكال السوية: الشكل السوي الثاني 2nd NF

الأشكال السوية: الشكل السوي الثالث 3rd NF

إزالة التسوية Denormalization

تكامل قاعدة البيانات

مخطط الكائنات والعلاقات ERD: المفهوم

مخطط الكائنات والعلاقات ERD: ما بعد المفهوم

ERD إلى جداول

تصميم جداول نظام مخازن ومبيعات: القليل من النقاش

تصميم جداول نظام مخازن ومبيعات: استكمال النقاش

ثم تلا ذلك مقدمة إلى لغة SQL.

====================================

كما ترى، معظم هذه الموضوعات تقع في صميم مفاهيم قواعد البيانات، ومع ذلك فهي من أقل الموضوعات طرحاً (وتفاعلاً) في أقسام قواعد البيانات. لماذا؟ أترك هذا كتمرين للقارئ الكريم.

فكرة اختتام الجزء الأول ببناء تطبيق لنظام مخازن ومبيعات تبدو جذابة للوهلة الأولى، ولكنها بكل بساطة غير ممكنة. ما وصلنا إليه في نهاية الجزء الأول هو تصميم لقاعدة بيانات نظام مخازن ومبيعات، مجموعة من الجداول التي ناقشنا السبب في اختيارها واختيار حقولها (لو تذكر طبعاً). من المهم التمييز بين قاعدة البيانات وبين التطبيق، بين الطرف الخلفي back-end وبين الطرف الأمامي front-end. والوصول إلى تصميم للطرف الخلفي (قاعدة البيانات) لا يعني حتماً أنك مستعد لكتابة الطرف الأمامي (التطبيق). أنت لا تستطيع أن تشرب الشاي قبل أن تعد الشاي. أعني أنك لا تستطيع أن تكتب التطبيق قبل أن تمتلك المهارات اللازمة لكتابة التطبيقات. فيما يلي أهم هذه المهارات:

1. البرمجة.

2. لغة البرمجة VBA.

3. نموذج كائنات الأكسس Access Object Model.

4. نموذج أو أكثر للوصول إلى البيانات DAO أو ADO أو كلاهما.

5. وبالطبع (مرة اخرى) لغة قواعد البيانات SQL.

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

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

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

إلى كل من يريد أن ينضم إلينا، فليقل: أنا! (ولا داعي لأن يكتبها طبعاً)، ثم أرجو أن يراعي التالي:

1. التفاعل بعد كل حلقة بالسؤال والنقاش، كما أن باب التصحيح للأخطاء مفتوح ومحبّذ بشدة؛ لا تجامل الكاتب مطلقاً بالسكوت عن أخطائه، فإن هذا من خيانته.

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

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

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

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

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

والآن: أي اقتراحات؟

9
#2

السلام عليكم

بارك الله لك وفيك وعلى بركة الله

واخيرا جزاك الله خيرااااااا

سبحان الله وبحمده سبحان الله العظيم .. سبحان الله . الحمد لله . لا اله الا الله . الله اكبر .. استغفر الله . استغفر الله . استغفر الله

يارب احمى دينى وبلدى من كيد الاعداء والخائنين بحبك يا مصر بحبك يا مصر بحبك يا مصر

 


 


3.gif

#3

بارك الله فيك و جعله فى ميزان حسناتك

و لى ملحوظة صغيرة بخصوص التثبيت و الطفو و التفاعل

--

من يقرأ يكون واحد من ثلاثه

1- فاهم ما يقرأ و يستطيع المناقشه فيه

2- لا يفهم ما يقرأ و يسأل حتى يفهم

3- فاهم و لكن لم يصل الى درجة المناقشه "مثل ما بيقولوا بالمصرى على قد حاله "

و هذا النوع غالبا لا يشارك لانه ليس عنده سؤال او قدرة على المناقشه "و اقصد معلوماته "

لذا هو فى مرحلة تكوين المعلومات و لن يسأل الا عندما يجد مشكله اى سوف يتفاعل و لكن بعد وقت

-

لذا ارجو لا تعتبر عدم التفاعل مع الموضوع هو عدم اهتمام به او ما شابه

انما هو مرحلة استخلاص معلومات

و خاصة ان موضوع مثل هذا ما شاء الله كبير

و المعدة تهضم الخضار المسلوق اسرع بكتير من هضم الخروف :)

-

بالتوفيق و فى انتظار الموضوع

كيميائى / محمد طه

#4

السلام عليكم ورحمة الله وبركاته --- عودا حميدا خبيرنا أحمد وأسأل الله أن يعينك ويتقبل منك ويبارك فى علمك ... توكل على الله ... وربنا ييسر لمدير السلسلة محمد ندا ويلحق بنا .. أخوك المحب slave

{العلم قبل العمل} ... مذكرات حول قواعد تصميم البيانات .

خير الناس أنفعهم للناس

#5

بارك الله فيك وجزاك الله خير اخونا الفاضل احمد

وفقك الله

ونفع الله بعلمك

اتق الله حيث ماكنت

#6

على بركة الله وجعلة الله فى ميزان حسناتك

وانا مع راى اخى mtak33

#7

السلام عليكم ورحمة الله وبركاته

يوم شفت عنوان الموضوع ما صدقت نفسي كاني في حلم :lol:

كنت حزين انه السلسلة الاولى انتهت وتم نقلها الى الارشيف :cry:

ما تتصور استاذي احمد حجم الفايدة الي استفدتها من الدروس الي توضعها

جزاك الله خير وبارك فيك ونفع بعملك المسلمين آمين يا رب العالمين

ان شاء الله اكون من المتابعين لدروسك باستمرار استاذي احمد

+1 وتستاهل اكثر

اخوك وتلميذك محمد المسيفري

تم تعديل هذه المشاركة بواسطة مشارف في 24 يونيو 2010 في 22:06

#8

شكرا أخي الكريم : أحمد الحيقي .. وفقكم الله وسدد خطاكم

كم نحن بحاجة لمثل هذه الأسس وأحب اطمئنك ان الموضوع لن يثبت

على الاقل الان .. سر على بركة الله

#9

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

تم تعديل هذه المشاركة بواسطة صايل عزام في 25 يونيو 2010 في 22:01

#10

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

أخى الحبيب أحمد

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

ويبدو أننى مضطراً أن أقتطع وقتاً من سويعات نومى القليلة بطبيعة حالها .. حتى أكون متابعاً لباقى السلسلة ما تيسر لى.

وفقك الله وسدد خطاك .. ونفع بك وبعلمك.

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

تحياتى

محمد ندا

تم تعديل هذه المشاركة بواسطة Mohamed Nada في 26 يونيو 2010 في 03:31

... بقمة السعادة .. أعود بإذن الله لصحبتكم الرائعة قريباً ...

#11

الحلقة الأولى: مقدمة (نظرة سريعة على بعض قضايا تطوير التطبيق)

***********************************************

سبق أن أشرت في الجزء الأول من المذكرات إلى أن إنتاج تطبيق برمجي يمر تقليدياً بخمسة مراحل أساسية:

1. دراسة الجدوى والتحليل.

2. التصميم.

3. التنفيذ (كتابة الكود البرمجي).

4. الاختبار.

5. التسليم والصيانة.

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

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

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

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

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

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

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

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

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

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

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

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

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

مثال:

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

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

(يتبع إن شاء الله...)

4
#12

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

أخي إكسير، شكراً جزيلاً لتفهمك، والله الموفق.

أخي محمد ندا، تبقى إن شاء الله مديراً، ولو في إجازة غير محددة.

أخي slave، أحب دوماً مداخلاتك، وقد كان يهمني وجودك بشكل خاص.

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

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

أخي محمد طه، ملحوظتك في الاعتبار، شكراً لك.

الإخوة، أبا أحمد، at_aziz، مستر استرا: مرحباً بكم، وأعتز بانضمامكم.

وبعد،

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

3
#13

السلام عليكم ورحمة الله وبركاته

بعد قراءة الحلقة الاولى من السلسلة بصراحة انتظر بفارق الصبر لموضوع البرمجه والسبب واضح

مافي اسهل من عمل الجداول بعد ما تكون عرفت طرق التسوية كما في السلسلة الاولى لاستاذي

ولا اسهل من تنسيق النماذج والاكواد الجاهزة الي يعطيك ايها المعالج وكذلك التقارير

لكن كل هذا لا يجعل منا مبرمجين من غير معرفة كيفية كتابة الكود والوحدات النبطية اعتقد هذي اهم شي لكي نصبح مبرمجين

في النهاية حبيت ارحب باخوي واستاذي محمد ندا عودا حميدا اتمنى ان يدوم وان تجد الوقت الكافي لتكون معنا في هذه السلسلة

في وجودك راح نستفيد جدا من مداخلاتك المثمره

حاب ارحب بكل اخواني الي اشتقنا لهم من السلسلة الاولى

#14

الاستاذ احمد الحيقي

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

تمنياتي لك بالتوفيق

#15

السلام عليكم ورحمة الله وبركاته

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

#16

الحلقة الثانية: مفاهيم عامة في الحواسيب (1)

***********************************

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

النهاية الصحيحة ---> تصميم وكتابة برامج جيدة للاستفادة من جهاز الحاسوب.

البداية الصحيحة ---> هل هي:

التعرف على مكان كتابة الأكواد؟

التعرف على كيفية أداء المهام الشائعة باستخدام أوامر لغة برمجة، وبالتالي التعرف على أكثر الأوامر استخداماً؟

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

التعرف على كيفية استخدام الدوال الجاهزة مع لغة برمجة؟

التعرف على معنى الدوال، وكيفية إنشائها؟

التعرف على ...

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

نحن نكتب البرامج من أجل التحكم في الحاسوب.

هذه الحقيقة تفرض السؤال التالي مباشرة: إذن، ماذا تعرف عن الحاسوب؟

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

المشكلة: حتى هذه الخطوط العريضة غائبة تماماً عند محاولة تعليم البرمجة (وعند محاولة تعلم البرمجة).

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

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

هناك تقليدياً مادة على الأقل لتقديم مفاهيم الحاسوب العامة لغير ذوي الخلفية المسبقة، ومواد تخصصية لتقديم هياكل البيانات data structures، والخوارزميات algorithms، وطرق خاصة في البرمجة مثل البرمجة بالكائناتobject oriented programming، ومواد لتقديم تحليل النظم system analysis، وتصميم لغات البرمجة programming languages design، وتصميم المترجمات compiler design، بالإضافة إلى المواد التي تقدم معمارية الحاسوب computer architecture، وربما صاحبتها مقدمة إلى لغة التجميع assembly language، أو استقلت عنها. كل هذا سوى مواد تقدم مبادئ أنظمة التشغيل operating systems، والشبكات computer networks، وقواعد البيانات database systems. ثم هناك مواد تقدم لمواضيع مثل الذكاء الصناعي والشبكات العصبية، وغير ذلك. بالطبع، فإن البرنامج الواحد في كلية معينة قد يحوي بعض أو كل مما سبق ذكره ومن مواد كثيرة غير ذلك.

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

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

فكرة الحاسوب

***********

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

ما السر في هذه الموهبة الفريدة للحاسوب؟ وأي نوع من (السحر) هذا الذي يجعل جهازاً واحداً بتركيبة واحدة، وتصميم ثابت، يصلح لأداء عدد غير محدود من المهام؟ عادة، يتم تصميم الجهاز الإلكتروني، وربط دوائره الإلكترونية لأداء مهمة محددة، إذا أوصلت التيار الكهربائي، يؤدي الجهاز هذه الوظيفة، وإذا فصلت التيار الكهربائي، يعود الجهاز سيرته الأولى؛ كومة من المعدن والبلاستيك، لا روح فيها.

لكي نكتشف السر في الحاسوب، دعنا نتخلص من كل المكونات المساعدة، ونركز على جوهر الحاسوب، وأهم مكون فيه، وهو الجزء الوحيد الذي يمكن أن تسميه (حاسوباً) بذاته. هذا الجزء، كما لابد أن تكون قد خمنت، هو المعالج processor، أو باستخدام التسمية المحددة التي تستخدم للمعالجات بداخل حواسيبنا الشخصية: المعالج الصغري (هكذا أرى ترجمته العربية غالباً) microprocessor. هذا المعالج، مع قليل من الذاكرة (نتكلم عن الذاكرة فيما بعد بإن الله)، على شريحة واحدة (دائرة مدمجة integrated circuit أو IC) يسمى وحدة المعالجة المركزية central processing unit أو CPU، وإذا فتحت غطاء جهازك، فإنك لا تراه مباشرة، لأن الشريحة صغيرة، ومغطاة بمروحة كبيرة مقارنة بالشريحة:

post-70171-021968600 1277808094_thumb.jp

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

http://ptgmedia.pearsoncmg.com/images/chap3_9780789735652/elementLinks/03fig15.jpg مصدر الصورة:

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

الجملة الأخيرة تعني أن بإمكانك تخيل المعالج كصندوق مغلق، تمتد إليه من الخارج بضع أسلاك تحمل إشارات كهربائية، وتخرج منه بضع أسلاك أيضاً. لنفترض أن عدد هذه الأسلاك هو إما 8 أو 16 أو 32 أو حتى 64. ثم لنفترض أن الإشارات الكهربية الداخلة والخارجة لا تحتمل إلا مستويين فقط: مستوى منخفض (جهد كهربي منخفض) يقترب من الصفر، ومستوى مرتفع بالنسبة إلى المستوى الأول. أيضاً، لنرمز للمستوى المنخفض بالرقم 0، وللمستوى المرتفع بالرمز 1.

post-70171-076029600 1277808099_thumb.jp

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

مجموع الخطوط أو الأسلاك الداخلة إلى المعالج، في لحظة معينة، قد يكون على واحد من الأشكال التالية (بعد تغيير ترتيب الخطوط عمودياً):

0 0 0 0 0 0 0 0

1 0 0 0 0 0 0 0

0 1 0 0 0 0 0 0

1 1 0 0 0 0 0 0

0 0 1 0 0 0 0 0

1 0 1 0 0 0 0 0

0 1 1 0 0 0 0 0

1 1 1 0 0 0 0 0

0 0 0 1 0 0 0 0

1 0 0 1 0 0 0 0

0 1 0 1 0 0 0 0

1 1 0 1 0 0 0 0

0 0 1 1 0 0 0 0

1 0 1 1 0 0 0 0

0 1 1 1 0 0 0 0

1 1 1 1 0 0 0 0

0 0 0 0 1 0 0 0

1 0 0 0 1 0 0 0

...

...

...

1 1 1 1 1 1 1 1

إذا أسمينا كل سطر من الأسطر السابقة (تشكيلة)، فإنه ينتج لدينا 256 تشكيلة مختلفة، حصلنا عليها بتغطية كافة الاحتمالات الممكنة باعتبار ثماني خانات، كل خانة من الممكن أن تكون 0 أو 1 في المرة الواحدة. الآن، لنفترض أن تشكيلة واحدة (مثلاً 01010001) أو تشكيليتين متتاليتين (مثلاً 01010001 11101110) أو أكثر (مثلاً 01010001 11101110 00000001)، كل منها يمثل معنى محدداً للمعالج، يستطيع فهمه، والاستجابة على أساسه. هذا يولد لدينا ما يمكن أن نطلق عليه مجموعة من الأوامر أو التعليمات (مجموعة التشكيلات المختلفة)، كل منها يمثل للمعالج مهمة صغيرة محددة، مثلاً جمع رقمين أو نقل رقم من مكان إلى آخر. أين هذان الرقمان؟ هناك في الحقيقة بداخل هذا الصندوق (المغلق) الذي مثلنا به المعالج، أماكن صغيرة تستخدم لحفظ التشكيلات الداخلة (يمكن أن نعد بعضها أرقاماً، وليس أوامر)، كما أن المعالج بإمكانه أن يرسل مجموعة المخرجات إلى مكان ما في الذاكرة (كما أسلفنا، المزيد عن الذاكرة فيما بعد إن شاء الله). المهم الآن، أن هناك مجموعة من التشكيلات المدخلة يمكن تغييرها للتحكم في عمل المعالج. في الحقيقة، هذا الفعل بالضبط هو ما يسمى (برمجة) المعالج.

دعنا الآن نلخص بعض النتائج المهمة مما سبق، على شكل نقاط:

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

 مجموعة كل هذه التشكيلات (التعليمات) تسمى (لغة) المعالج.

 لأننا نتكلم عن أدنى مستوى يتعامل مباشرة مع الآلة، فإن هذه اللغة تسمى لغة الآلة machine language.

 ولأن كل تعليمات هذه اللغة تتكون من رمزين فقط (0 أو 1)، فإن هذه اللغة تسمى أيضاً لغة ثنائية binary language.

 تعليمات هذه اللغة تستخدم في التحكم في عمل المعالج، ولذلك يقال إنها (تبرمج) المعالج.

 على هذا، فإنه يمكن أن نعد مجموعة من هذه التعليمات الصغيرة التي تتظافر من أجل تأدية مهمة معينة (برنامجاً).

 وهذا يعني أن لغة الآلة تستخدم في كتابة برامج.

 ... وتلك هي البرمجة في صورتها الأولية.

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

مثال صغير:

من أجل جمع عددين، يمكن كتابة برنامج صغير يقوم بالتالي:

1. قراءة عدد من الذاكرة (خارج المعالج)، وحفظه في مكان ما داخل المعالج (هناك أماكن خاصة داخل المعالج، هي عبارة عن ذواكر صغيرة جداً، كل منها يدعى مسجل register، واحد منها يدخل دوماً في العمليات الحسابية والمنطقية، مثل الجمع والمقارنة، يسمى المراكم accumulator).

2. قراءة عدد آخر من الذاكرة، وجمعه مباشرة مع العدد في المراكم، وحفظ الناتج في المراكم نفسه.

3. إرسال الناتج من المراكم إلى الذاكرة في مكان ما.

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

لعلك خرجت من المثال السابق ببضع ملحوظات:

 المعالج آلة جامدة جداً (وربما تقول: غبية)، إذا ما قارنتها بالذكاء الإنساني، لأنه يحتاج إلى تقسيم عملية بسيطة إلى عدة أجزاء من أجل تأديتها (ملحوظة صحيحة جداً).

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

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

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

(يتبع إن شاء الله...)

المرفقات
cpu.JPGinput_output.JPG
3
#17

مشكور استاذي احمد الحيقي ما قصرت شرح جميل

وكنت حاب اسال بخصوص بالنسبة للمواد الي ذكرته من هياكل البيانات والخوارزميات وغيرها وين يمكن

احصلها في كتب اي مواقع او مثل هذي الاشياء انا اعرف انك راح تشرح لنا هذي الشي بس شكل ما قلت

بشكل مختصر والاساسيات لكن لو بغيت اتعمق في هذي الشي

حاولت اشتري كتب اغلبها يدخل على طول في البرمجه وانشاء التطبيقات

ونفس ما قلت استاذي انه المبرمج يكتب الكود وحتى لو شرحه ما راح اقدر اكتب نفسه السبب لاني ما عرفت الاساسيات

للحين وهذي المشكله انا نتعلم الشي من نص الطريق ولا نبتدي فيه من البداية

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

بس حتى لو حاول مثلي انا اني اعرف الشي من البداية راح احصل مقتطفات من هني وهناك لكن مافيه شرح بطريقة

منهجية من الاساسيات حتى استطيع الفهم معاها

يعني مثال كنت اقراء كتاب عن البرمجه وكان الكلام عن المتغيرات والدوال وكل شي تمام

بس لما جاء الامر للوراثه والواجهات بداء الامر يصبح معقد وفيه اشياء ما قدرت استوعبها لانه تم الدخول على الموضوع

وانا اشوف اكواد قدامي يقولي هذي للوراثه بس من غير ما اقدر اشوف تتطبيق له علشان اعرف كيف يشتغل

الله المستعان وان شاء الله نلقى ظالتنا في الشروح الي اتقدمها في مواقعنا وان شاء الله اذا اسعفك الوقت تدخل في التفاصيل

بصورة اكثر ان شاء الله

وشكلي راح اقراء الموضوع مره ثانيه بكره لانه شيق بصراحه

تم تعديل هذه المشاركة بواسطة مشارف في 30 يونيو 2010 في 01:01

#18

اخى الكريم " احمد مبارك الحيقى " بعيدا عن كلام المدح والله انت لا تتخيل مدى حماسى لموضوعك من سنوات بدا اخ كريم اسمة انترنت ماستر حلقات مشابهه لكن للاسف لم يكمل المشوار وانا حزنت كثير لكن بمبادرتك ادتنا الامل تانى

المشكلى اللى مقابلانا اتنين اولا معظم مراكز التدريب باهظة الثمن لا يقدر عليها امثالى وكمان مستواى المدرس ضعيف او يقتصر على مقدمات والموضوع معروف فهى وظيفة

ارجوك ما تتاخرش علينا ويا رب موضوعك يكمل على خير بامر الله

ربنا يكرمك يا رب

#19

اولا السلام عليكم ورحمة الله وبركاته

اخي العزيز

أحمد مبارك الحيقي

انت لا تريد المديح والثناء

ولكن من لا يشكر الناس لا يشكر الله

نعم كلمة جزاك الله خير ودعوة بظهر الغيب افضل من ثناء ومديح

للاسف الشديد اني طحت على الموضوع وانا ابحث عن كلمة

Your search for the term binary data returned 374 results

وما لفت انتباهي اني أرئ موضوعك من ضمن قائمة البحث

فلم اكمل بحثي وقرائتي عن هذا النوع من البيانات

بل توقفت وبكل بهجت وسرور لأقراء هذه السلسلة التي

تسطرها اناملك

اسئله الله الي القدير ان يجعلها في موازين حسناتك وأن يوفقك لما تحب وترضى

واسمح لي ان اقول ان السلسلة الماضية استفدنا منها الشي الكثير وما زلت محفوظة واعدها مرجع لي

في بعض الأوقات للقراءة والاستفادة اكثر واكثر

وسر إلى الأمام ونحن معك من المتابعين والمشاركين ...

تم تعديل هذه المشاركة بواسطة sandm في 1 يوليو 2010 في 12:35

#20

الأستاذ أحمد

السلام عليكم ورحمة الله وبركاته

تحية وبعد:

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

سر على بركة الله

وأنا من المتابعين وإن استطعت فمن المشاركين

#21

حفظك الله أخي أحمد

أجبرتني بموضوعك هذا وموضوعك السابق

أن أعود لمقاعد الدراسة رغم بلوغي سن التقاعد

#22

الجزء الثانى من الموضوع

اكثر من رائع

و غير متوقع بالنسبة لى على الاقل

متابع باهتمام

كيميائى / محمد طه

#23

الحلقة الثالثة: مفاهيم عامة في الحواسيب (2)

***********************************

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

مثال:

****

واحد من أوائل المعالجات الصغرية microprocessors التي سبقت الحاسوب الشخصي (الحاسوب الشخصي الأول استخدم الجيل التالي لهذا المعالج) هو معالج إنتل 8085. اخترت هذا المعالج الصغري للأمثلة بسبب بساطة تعليماته (كل تعليمة أساسية، بدون بيانات، تتكون من ثمانية رموز 0 أو 1)، والمهم هنا هو توضيح الفكرة فحسب، وليس دراسة البرمجة بلغة الآلة بالطبع. الخلفية المطلوبة هنا أن تعلم أن هناك أماكن صغيرة (خانات) داخل المعالج نستطيع أن نستخدمها لحفظ بيانات صغيرة (تشكيلة من 8 رموز). واحد منها خاص يسمى المراكم، ويرمز له بالرمز A، وآخر يدعى B، وثالث يدعى C، تسمى هذه الأماكن مسجلات registers. خصوصية A تأتي من حقيقة أنه دوماً يكون أحد المعاملات الداخلة في العمليات الحسابية والمنطقية، مثل الجمع.

انظر إلى برنامج بسيط بلغة 8085 يقوم بالتالي: حفظ مجموع B + 5 في C.

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

1. إدخال الرقم 5 إلى المراكم A

2. جمع محتويات المسجل B إلى محتويات المراكم، والنتيجة تحفظ في المراكم

3. نقل محتويات المراكم (نتيجة الجمع) إلى المسجل C

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

خذ الآن ترجمة هذه الخوارزمية إلى لغة الآلة (اللغة الثنائية) التي يفهمها المعالج 8085:

1. 1 0 1 0 0 0 0 0 0 1 1 1 1 1 0 0

2. 0 0 0 0 0 0 0 1

3. 1 1 1 1 0 0 1 0

جميل، أليس كذلك؟ لاحظ أن التعليمة الأولى تحوي تشكيلتين: واحدة لتمثل تعليمة الإدخال إلى المراكم، وواحدة لتمثل الرقم 5 بالتمثيل الثنائي (اذهب إلى الحلقة السابقة، حيث قمنا بسرد التشكيلات الأولى من مجموع كل التشكيلات الثنائية الممكنة بواسطة 8 رموز، وعد من الأعلى ابتداءً من الصفر حتى تصل إلى خمسة، هكذا 0 1 2 3 4 5، ثم قارن التشكيلة رقم 5، السادسة فعلياً، مع التشكيلة الأولى في التعليمة الأولى).

دعك الآن من كل التفاصيل التقنية التي تتعلق ببنية المعالج، وركز على النقاط الأساسية التالية:

 لكل برنامج حاسوب يؤدي مهمة ما، طريقة حل تفصيلية، تسمى الخوارزمية.

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

 لغة الآلة بشعة!

بشاعة لغة الآلة لا تعود إلى مشاعر شخصية، ولكن إلى الصعوبات العملية التالية:

 من الصعب تذكر تعليمات (تشكيلات) هذه اللغة عند كتابة البرامج، وينبغي الاستعانة بمرجع عند كل سطر. كما أن كتابة التعليمات عملية مرهقة جداً.

 من الصعب جداً قراءة البرامج المكتوبة بهذه اللغة، دع عنك فهمها.

 من الصعب جداً اكتشاف الخطأ عند وجوده؛ عليك الغوص في أمواج من الصفر والواحد.

 من السهل جداً ارتكاب خطأ عند كتابة البرنامج، على الأقل ذلك ناتج عن (زغللة) العينين بين أكوام من 0 و1.

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

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

في الحقيقة، هناك القليل من العمليات الأساسية التي تحويها لغة الآلة للمعالج 8085، من قبيل نقل محتويات مسجل داخل المعالج إلى مسجل آخر، أو نقل المحتويات بين مسجل داخل المعالج وبين مكان ما في الذاكرة خارج المعالج، وبعض العمليات الحسابية البسيطة مثل الجمع والطرح (لا قسمة، ولا ضرب؛ يمكن أداء هذه العمليات باستخدام الجمع والطرح؛ سؤال للتمرين: كيف؟)، كذلك بعض العمليات المنطقية مثل AND و OR (فيما بعد عن معاني هذه العمليات)، وعمليات القفز من تعليمة إلى أخرى (من غير اتباع التسلسل الطبيعي للتعليمات)، والقليل جداً غيرها من العمليات الأساسية. الذي يجعل التشكيلات تبدو كثيرة نسبياً، هو الاحتمالات المختلفة لمعاملات هذه العمليات. مثلاً، عملية نقل بين المسجل A وB، أو بين A وC أو بين B وD، وهكذا، وكذلك جمع محتويات A مع B أو مع رقم مباشر مثل 5، وهكذا...

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

مثال:

عمليات النقل المختلفة بين المسجلات الأربعة A, B, C ,D فقط، هي كالتالي:

post-70171-049750700 1278228792_thumb.jp

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

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

post-70171-052699700 1278228797_thumb.jp

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

post-70171-094249100 1278228801_thumb.jp

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

بالنسبة للمثال في أول هذه الحلقة، يصبح كالتالي بلغة التجميع الخاصة بالمعالج 8085:

post-70171-096932100 1278228805_thumb.jp

والآن، هل انتهت المشكلة؟ بالطبع لا... الأمور لا تمضي بتلك السهولة في هذه الحياة.

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

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

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

حتى هنا، تبدو الأمور جيدة بالفعل، لكن الحكاية لم تنته بعد! أنت تعلم أننا لا نبرمج باستخدام لغة التجميع في الأكسس، وأننا ننوي بإذن الله أن نتعلم البرمجة باستخدام لغة VBA Visual Basic for Applications. إذا كنت على أدنى اطلاع، فأنت تعلم كذلك أن لغة VBA لا تبدو من قريب ولا من بعيد مثل لغة التجميع التي مررنا بها أعلاه. إذن، فلا بد أن هناك تتمة للقصة.

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

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

كما تتوقع، لقد تم إنتاج مثل هذه اللغة، العديد منها في الواقع، وبطبيعة الحال، سميت هذه اللغات لغات عالية المستوى high level languages. بالمقارنة، فقد سميت لغات الآلة مع لغات التجميع لغات منخفضة المستوى low level languages. في الحقيقة، مثل هذا النوع من اللغات ما يزال ينتج إلى اليوم (رغم أن من أوائل اللغات عالية المستوى قد ظهر في حقبة الخمسينيات من القرن الميلادي العشرين). من أشهر اللغات التي ظهرت آنذاك، لغة FORTRAN، وكانت موجهة أساساً للتطبيقات الحسابية والهندسية، ولغة COBOL، وكانت موجهة للتطبيقات التجارية ومعالجة البيانات (مجال تطبيقات قواعد البيانات)، ولغة LISP وهي لغة أكاديمية بالدرجة الأولى تستخدم في مجال الذكاء الصناعي. طبعاًً، أتت فيما بعد لغة BASIC، الجدة الأولى للغة VBA، وكانت موجهة أساساً للمبتدئين وغير المتخصصين من أجل تيسير تعلم البرمجة (الحرف B في اسم اللغة يمثل كلمة Beginners).

نفس المشكلة السابقة تتكرر ثانية: نحن نتفنن في الابتعاد عن مستوى المعالج، في حين أنه الذي سيقوم بالعمل في النهاية، ولن يقوم به بغير لغته. الحل، إذن، هو في كتابة برنامج آخر يتولى التحويل (الترجمة) من اللغات عالية المستوى إلى لغة التجميع (ومن ثم استخدام assembler في التحويل إلى لغة الآلة)، أو إلى لغة الآلة مباشرة. هذا البرنامج يسمى المصرف أو المترجم compiler. هذا البرنامج أكثر تعقيداً من مترجم لغة التجميع، وفي الحقيقة، هو من البرامج التي تؤثر بشكل كبير في عالم تقنية الحاسوب. الغالبية العظمى من المبرمجين تستخدم الآن لغات عالية المستوى، من أمثال C, C++, JAVA, VB, PYTHON, …، والمترجمات هي في الأخير التي تنتج الكود النهائي الذي سيتم تنفيذه، وهكذا فهي تسهم بنسبة مهمة في نوعية تطبيقات الحاسوب التي نعيش معها. برمجة المترجمات من أصعب أنواع البرمجة، وبشكل عام، يمكن أن نقول إنك إن كنت قادراً على أن تنتج مترجماً، فإنك قادر على أن تنتج لغة برمجة جديدة.

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

Algorithm

Assembler

Assembly language

Binary language

Compiler

High-level language

Low-level language

Machine language

(يتبع إن شاء الله...)

المرفقات
assembly01.JPGassembly02.JPGassembly03.JPGassembly04.JPG
2
#24

أخي العزيز مشارف:

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

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

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

تم تعديل هذه المشاركة بواسطة أحمد مبارك الحيقي في 4 يوليو 2010 في 11:28

#25

السلام عليكم ورحمة الله

اخى الكريم " احمد مبارك الحيقى " ربنا يبارك لك ورجاء زود الجرعة شوية

مواضيع مشابهة