مضى على الشبكة و يوم من العطاء.

مقدمه في الحاسوب

GHAITHGHAITH is verified member.

.:: اداري سابق ::.
.:: اداري سابق ::.

linux

السمعة:

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


مقدمه تشمل عدة فصول في عالم الحاسوب.

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

وباقي النص يُركِّز على تطوير البرمجيات، وبيقدم شرح مفصل عن مبادئ البرمجيات وكمان لمحة عن ثقافة تطوير البرمجيات بالوقت الحالي.

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

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


مع هيك،في مفاهيم أساسية بمجال الحوسبة بتظل ثابتة، وممكن توضح وتتعلمها وتستخدمهابشكل فعّال.

كل الحوسبة مبنية على الاستخدام المنسّق بين الأجهزة (اللي بنسميها الهاردوير) والبرامج(اللي بنسميها السوفتوير). وكل تطبيقات السوفتوير بتُبنى باستخدام مواصفات للبيانات والعمليات، اللي بنسميها الهياكل البيانية والخوارزميات (datastructures and algorithms). هاي الأساسيات ظلت ثابتة بشكل كبير بتاريخ الحوسبة، رغم التطورات المستمرة بتكنولوجيا الهاردوير والسوفتوير، والتطور المستمر بأساليب جديدة للبيانات والعمليات.

1.1 الحوسبة

زي ماذكرنا قبل، تعريف الحوسبة مش سهل إنه يتحدد بدقة، بس تقرير "منهجيات الحوسبة 2005" (Computing Curricula 2005:The Overview Report)،اللي أعدته لجنة مشتركة من ACMوIEEEوAIS،أعطى التعريف التالي:

"بشكل عام، الحوسبة تعني أي نشاط موجه لتحقيق هدف بيتطلب استخدام أو الاستفادة من أو إنشاء أجهزة الحاسوب."

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

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



1.2 الأجهزة

(Hardware)


مصطلح"كمبيوتر"بيرجع للقرن السابع عشر (1600s). لكن لِحَدّْ الخمسينات من القرن العشرين، الكلمة كانت تشير بشكل حصري تقريباً للبشر الذين كانوا يقومون بالحسابات. بالنسبةللبشر، القيام بكمية كبيرة من الحسابات كان شغل متعب، بياخد وقت طويل، ومعرض للأخطاء. ولهيك،فكرة الماكينة بالحسابات كانت رغبة موجودةمن زمان
واحدة من أول الأدوات اللي اخترعوها لتسهيل الحساب البشري كانت "المعداد"(Abacus)، اللي كان يستخدم بمجتمعات قديمة زي بلاد مابين النهرين، آسيا، الهند، فارس، الإغريق،والرومان، وحتى حضارات أمريكا الوسطى.
حيث المعداد كان عبارة عن مجموعة منظمة من الخرز أوالحجارة اللي بتحركها على قضبان أو داخل أخاديد. المعداد،
11.webp

زي الكمبيوتر الحديث، كان آلة "رقمية"للحساب،لأنه بيحاكي التغيرات اللي بتصير بالأرقام أثناء القيام بالعمليات الحسابية.لكن، مش كل أنظمة المعداد كانت تستخدم النظام العشري(القاعدة-10)
بعض المجتمعات استخدمت أنظمة زي القاعدة-16،القاعدة-20،أو القاعدة-60.


العالم الفرنسي بليز باسكال (1623-1662) اخترع واحدة من أول الآلات الميكانيكية اللي بتعتمد على التروس عشان تساعد بحسابات الضرائب الكبيرة. النسخة العشرية من آلة باسكال، اللي كان اسمها "الباسكالين"،كانت تشبه كتير نوع من الآلات الحاسبة اللي استخدموها الناس بالمحلات بالولايات المتحدة بأواخر الخمسينات والستينات.صورة توضيحيه عن شكل الآلة
2.webp



في عام1822،العالم الإنجليزي تشارلز باباج (1792-1871)عرض المرحلةالأولى من آلة اسمها "محرك الفرق" (Difference Engine)،اللي استخدمت تروس بعشر وضعيات لتمثيل الأرقام العشرية. الآلة كانت قادرة تعمل حسابات أعقد من الحسابات الأساسية اللي كانت الباسكالين تقدر تعملها. لكن،الهندسة المعقدة للآلة خلت المشروع يتوقف
.
3.webp


مشكلتين أساسيتين بالأجهزة الميكانيكية:

  1. الأجهزة كانت "ميكانيكية" يعني كانت تعتمد على أجزاء متحركة ومتصلة هاي الأجهزة غالباً أبطأ و أكتر عرضة للتعطل، وأصعب بالتصنيع مقارنة بالأجهزة اللي ما فيها أجزاء متحركة.
  2. الأجهزة "الإلكترونية" زي أنابيب التفريغ (Vacuum Tubes) اللي كانت تُستخدم بأجهزة الراديو القديمة ما فيها أجزاء متحركة.

مثال على التطور:



جهاز ENIAC كان واحد من أوائل الكمبيوترات الرقمية الإلكترونية. كان يمثل كل رقم عشري باستخدام عمود فيه 10أنابيب تفريغ،
اللي بتشتغل إلكترونياً بتبديل حالتها (تشغيل/إطفاء)لتمثل الأرقام من 0 إلى9 بدون حركة ميكانيكية.

جهازENIAC، اللي صممه J. Presper Eckert وJohnMauchly بجامعة بنسلفانيا بين 1943 و1946،كان وزنه 30 طن واحتاج 18,000 أنبوب تفريغ، وكان يستهلك كمية كهرباء كبيرة.السبب الرئيسي إنه كل رقم عشري كان يحتاج 10أنابيب تمثله
4.webp


بالمقابل،أول كمبيوتر رقمي إلكتروني طوره جونأتان اسوف وكليفورد بيري بجامعة ولاية أيوا بين 1937 و1942استخدما لنظام الثنائي (Base-2)،زي كل الكمبيوترات الرقمية الحديثة.



مقارنة بين النظام العشري والثنائي:



  • النظام العشري بيعتمد على قوى الرقم 10: واحدات (10^0)، عشرات (10^1)، مئات (10^2)، آلاف (10^3)، وهكذا. مثلاً الرقم 255 بيتكتب كـ "255" وبيمثل 2 مئات، 5 عشرات، و5 واحدات.
    5.webp
  • النظام الثنائي بيعتمد على قوى الرقم 2: واحدات (2^0)، اثنينات (2^1)، أربعيات (2^2)، وهكذا. الرقم 18 بالنظام الثنائي بيتكتب كـ "10010"، وبيمثل 1 ستة عشر، 0 ثمانية، 0 أربعة، 1 اثنين، و0 واحد.
6.webp

نفس الشيء،الرقم "255" بالنظام الثنائي بيتكتب كـ "11111111"،وبيمثل مجموع 1 (128)،1 (64)،1 (32)،1 (16)،1 (8)،1 (4)،1 (2)،و1 (1).



7.webp



لماذا اختار مهندسو الحاسوب بناء آلة تقوم بالحساب باستخدام طريقة غريبة وغير مألوفة لكتابة الأرقام مثل النظام الثنائي (Base-Two)؟

الجواب كالتالي:
في أي نظام عددي رقمي، لازم يكون كل رقم قادر يعد لحد أقل بواحد من القاعدة. بالنظام العشري (Base-10)، تسلسل الأرقام في كل خانة عشرية بيمشي من 0 لحد 9، وبعدين بيرجع لـ 0. عشان تمثل رقم عشري، لازم يكون الجهاز قادر يعالج كل الاحتمالات العشر في التسلسل العددي، من 0 إلى 9. بالتالي، إما بنحتاج جهاز بوضعيات عشر زي التروس اللي استخدمت في آلة باسكال، أو عشر أجهزة منفصلة، زي العشر أنابيب مفرغة المستخدمة بكل خانة عشريّة في جهاز ENIAC.


أما النظام الثنائي (Base-2)، فالأرقام فيه ما بتحتاج تعد أكتر من خانتين: من 0 لحد 1، وبعدين بترجع لـ 0. يعني، بينما الأرقام العشرية فيها عشر احتمالات مختلفة (من 0 إلى 9)، الرقم الثنائي بيحتوي احتمالين فقط: 0 أو 1. بالتالي، بدال ما نحتاج نعالج 10 احتمالات للرقم العشري، ممكن نمثل الرقم الثنائي باستخدام جهاز وحيد بوضعين فقط. على سبيل المثال، كل رقم ثنائي ممكن يتمثّل بمفتاح بسيط "تشغيل/إيقاف"، حيث وضعية "التشغيل" بتمثل الرقم 1، و"الإيقاف" بتمثل الرقم 0
8.webp

بنفس الطريقة، في جهاز Atanasoff-Berry، كل رقم ثنائي كان ممكن يتمثل بأنبوب مفرغ واحد. فمثلاً، الرقم "18" ممكن يتمثّل باستخدام 5 أنابيب مفرغة بس، بدل 20 اللي كان يحتاجها ENIAC
وبالمثل، الرقم "255" كان ممكن يتمثّل باستخدام 8 أنابيب مفرغة فقط، بدل 30 اللي كان يحتاجها ENIAC:


9.webp


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

زي ما تم استبدال أجهزة الراديو اللي بتشتغل بأنابيب مفرغة بـ "الراديو الترانزستور" بداية الخمسينات، نفس الشيء صار مع الجيل الأول من الكمبيوترات الرقمية اللي كانت مبنية على أنابيب مفرغة. مع الوقت، تم استبدالها بـ "الجيل الثاني" اللي استخدم الترانزستورات كأجهزة أسرع وأصغر حجماً بكثير، وبدون أجزاء متحركة، لتمثيل الـ 1 أو 0 بالرقم الثنائي.
10.webp




المعالجات (Processors)


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


تشبيه مفيد هون هو الدومينو. تخيل عرض للدومينو ببرنامج حواري ليلي، حيث بطل دومينو يرتب متاهة معقدة من قطع الدومينو، وبعدين يوقع أول قطعة، فتبدأ سلسلة تفاعلات متتالية تستمر لدقائق، وفي النهاية بتوقع آخر مجموعة من الدومينو بشكل مميز. الآن، تخيل مجموعة دومينو على طاولة، فيها صف من 8 قطع على جهة، وصف آخر من 8 قطع على الجهة الثانية، وفي النص متاهة من قطع الدومينو. لو رحت لأول صف وأوقعت بعض أو كل القطع، هاد رح يبدأ سلسلة تفاعلات تنتهي عند الصف الثاني، وبين بعض أو كل القطع بتوقع نتيجة لهالسلسلة.
12.webp


13.webp
في هالتشبيه، في تشابه كبير مع طريقة عمل المعالج. قطعة الدومينو، زي الترانزستور، هي جهاز بحالتين فقط: يا واقفة (تشغيل/1)، أو طايحة (إيقاف/0). بهالطريقة، ممكن تمثيل الاحتمالات الثنائية (0 و1) باستخدام قطع الدومينو أو الترانزستورات. فمثلاً، ممكن نعتبر قطعة الدومينو الواقفة كأنها الرقم 1، والطايحة كأنها الرقم 0. لما نوقع بعض أو كل القطع بالصف الأول، كأنك "أدخلت" رقم ثنائي مكوّن من 8 خانات لهاي "آلة الدومينو".:


14.webp
بالمعنى نفسه، الرقم الثنائي هون هو "تعليمة" لهاي الآلة، وبيحدد سلسلة التفاعلات اللي لازم تصير. ولما تنتهي هالسلسلة، وبتوقع بعض أو كل القطع بالصف الثاني، كأن الآلة أعطت "ناتج" رقم ثنائي مكوّن من 8 خانات.



تشابه مع المعالجات


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


المتاهة اللي داخل المعالج مصممة بحيث يكون الناتج النهائي هو الرقم اللي بيمثل "الإجابة الصحيحة" للتعليمة الحسابية المدخلة. على سبيل المثال، معالج Intel 8088، اللي استخدم بالكمبيوتر الأول من IBM، كان معالج 8-بت. يعني، بكل دورة تعليمات ("instruction cycle")، كان يدخل رقم ثنائي مكوّن من 8 خانات، تتم العملية (التفاعل)، ويخرج ناتج مكوّن من 8 خانات.:::
15.webp


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


البرمجيات (Software)


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

مثال للتوضيح:


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

تشارلز باباج والبرمجيات


16.webp
تشارلز باباج، اللي حكينا عنه كأحد الشخصيات الرئيسية بتاريخ الهاردوير، كمان له دور كبير بتاريخ البرمجيات. بعد ما استغنى عن مشروع "محرك الفرق"، بدأ يشتغل على آلة متقدمة أكتر أسماها "المحرك التحليلي". هالآلة كانت أكتر شمولية وأتمتة من اختراعاته السابقة. باباج تخيل آلة مصممة لإجراء العمليات الحسابية الأساسية على الأرقام، يعني آلة حاسبة.


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

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


17.webp
دور آدا لوفليس


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



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

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


أفكار إضافية للوفليس


لوفيس كمان أشارت إن البرنامج الجيد لازم يكون "عام"، بمعنى إنه لازم يشتغل على قيم مختلفة، مش مجرد أرقام معينة. على سبيل المثال، بدل ما نصمم برنامج يحسب
(2 × 10) - 5
نصمم برنامج يقبل أي ثلاث أرقام، يضرب الأول والثاني، وبعدين يطرح الثالث. الفكرة هاي بتوضح اللي وصفته لوفليس كـ"عمليات مستقلة عن الأرقام المستخدمة". حالياً، هالفكرة توصف بالفصل بين "البيانات" والعمليات اللي بتتم عليها.


كمان، لوفليس وصفت اللي أسمته "دورات" (Cycles) من العمليات، وبين نتيجة معينة ممكن تتحقق بتكرار عمليات محددة. بهالطريقة، عملية الضرب (5 × 4) ممكن تنفذ كإضافة متكررة
(5 + 5 + 5 + 5).


قدرة الكمبيوتر على أداء العمليات المتكررة


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


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



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

استخدامات الكمبيوتر في المستقبل

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


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

الإمكانيات اللامحدودة للكمبيوتر


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

البرمجة الكائنية التوجه والحوسبة الشخصية OOP |Object-Oriented Programming


ببعض الطرق، آدا لوفليس توقعت تغيرات بمفهوم برمجة الكمبيوتر. شافت إنه الحوسبة والبرمجة مش بس مقتصرين على البيانات الرقمية أو التسلسلات الجبرية التقليدية للعمليات الحسابية. بدال هيك، شافت البرمجة كتكنولوجيا بتمكّن إنشاء وتعديل اللي بنسميه اليوم "نماذج الكمبيوتر" "building blocks" .


هالتحول من النمط الإجرائي البحت لنمط بيشمل "البرمجة الكائنية التوجه" (Object-Oriented Programming أو OOP) خلّى "الكائنات" الافتراضية، مع خصائصها وأفعالها، تكون هي الأساس لبناء البرمجيات. البرمجة الكائنية ظهرت بشكل كبير بمحاولات بالنصف الثاني من السبعينات لتطوير جيل جديد من "الحواسيب الشخصية" و"واجهات المستخدم الرسومية". ومع الزيادة السريعة بشعبية هاي التكنولوجيا بالنصف الثاني من الثمانينات، زاد اعتماد مفهوم البرمجة الكائنية اللي مكّن هاي التطورات.

18.webp
الحاسوب الشخصي و دينابوك أحد أول الناس اللي استخدموا مصطلح "الكمبيوتر الشخصي" كان آلان كاي، اللي قاد فريق بشركة Xerox بمركز الأبحاث في بالو ألتو (PARC) خلال السبعينات، بهدف إنشاء كمبيوتر صغير ومحمول. "الدينابوك" (Dynabook)، الاسم اللي أُطلق على المشروع، كان يشبه بشكل كبير أجهزة "النوتبوك" اللي ظهرت بعد عقدين.


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


نظام Smalltalk


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

لكن هاي التجربة ما أقنعت إداريي شركة Xerox. ومع ذلك، بعد سنوات قليلة، وبالتحديد سنة 1979، ستيف جوبز، المؤسس المشارك لشركة Apple، شاف عرض لهاي الواجهة الرسومية.



20.webp
تطورات Apple وماكنتوش نظام Apple II، اللي تم تقديمه أول مرة عام 1977، كان، زي غيره من أنظمة "الميكروكمبيوتر" المبكرة، يتفاعل مع المستخدمين من خلال واجهة أوامر نصية. لكن بعد ما شاف جوبز نظام PARC، قال: "خلال عشر دقايق كان واضح بالنسبة إلي إنه كل الكمبيوترات بالمستقبل رح تشتغل هيك".

جوبز بدأ فوراً بتطوير جيل جديد من أجهزة Apple، واللي بدأ مع إطلاق ماكنتوش بشهر يناير 1984. واجهة المستخدم الرسومية للماكنتوش، وكمان نظام التشغيل "Windows" من مايكروسوفت اللي تم تقديمه بعدها بسنة، كانوا مشابهين بشكل كبير لواجهة "سطح المكتب" الرسومية اللي تم تطويرها في Xerox PARC.

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


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

برنامج VisiCalc هو مثال على ما يُطلق عليه "برنامج تطبيقي" (application software) وهو برنامج مكتوب مسبقاً يتم توزيعه ليستخدمه الآخرون. في الواقع، غالباً ما يُشار إلى VisiCalc على أنه "التطبيق القاتل" (killer app) لجهاز Apple II، وهو مصطلح يُستخدم للإشارة إلى تطبيق لتكنولوجيا جديدة يكون السبب في تبنيها من قِبل عدد كبير من المستخدمين
21.webp



الترويج لتبني التكنولوجيا من قبل المستخدمين الجدد

لما نزل برنامج الجداول الإلكترونية VisiCalc، اللي كان معروف بشكل كبير، لجهاز Apple II – وبعدها لعدة أجهزة كمبيوتر صغيرة زي اللي كانت تصنعها شركات مثل Atari وCommodore – ساعد بشكل كبير بإقناع الناس إنه جهاز Apple II مش مجرد جهاز للعرض أو للزينة، بل هو جهاز كمبيوتر حقيقي بإمكانيات كبيرة للاستخدام بالأعمال وحتى بالعلوم الجادة.

بنفس الطريقة، لما قدمت شركة IBM جهاز الكمبيوتر الشخصي تبعها سنة 1981، كرد على الشعبية الكبيرة والمفاجئة اللي صارت للحواسيب الصغيرة بآخر السبعينات – واللي كان جزء كبير منها بسبب برنامج VisiCalc كان التطبيق اللي خلّى أغلب الناس يقتنعوا يشتروا جهاز IBM هو برنامج جداول إلكترونية ثاني: "Lotus 1-2-3."

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

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

تغير فهم الحوسبة الشخصية بس لما نرجع بالزمن ونفكر، بنلاحظ إنه كان مؤسف إن برامج الجداول الإلكترونية تم اعتبارها كـ"برامج تطبيقية" بدلاً من بيئة برمجية. الجداول اللي النظام كان يسمح للمستخدمين يصمموها ويستخدموها كانوا يعتبروا إنها هي نفسها البرامج الناتجة.

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

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

Kay بنفسه قال إنه الأداءات المسرحية والموسيقية أثرت بشكل كبير على تصميم دينابوك، وكان يتخيل الكمبيوتر الشخصي زي "آلة موسيقية موسيقاها هي الأفكار."

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

وبعد اعتماد واجهات المستخدم الرسومية لماكنتوش و"ويندوز" كواجهة قياسية، صار فيه مفهوم جديد لمستخدم الكمبيوتر كـ"المستخدم النهائي"، اللي، حسب تعريفه، هو شخص مش مبرمج. وهالفكرة عن "الحوسبة الشخصية" كعكس البرمجة ظلت مستمرة أكتر من عشرين سنة.


تجدد الاهتمام بالبرمجة في الألفية الجديدة

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

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

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


لغات البرمجة والـ Compiling

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

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

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

مثال:
100011 00011 01000 00000 00001 00100

بالواقع، بأيام الكمبيوترات الإلكترونية الأولى بالـ 1940s والـ 1950s، كان على المبرمج يدخل سلسلة طويلة من الأرقام الثنائية من هالنوع عشان يحط برنامج برمجي على الكمبيوتر. بس الحمد لله، الوضع تغير مع الوقت. تم تطوير أنواع كتيرة من لغات البرمجة "عالية المستوى" اللي بتسمح للمبرمج يكتب برامج باستخدام أرقام عشرية ورموز حسابية شبيهة باللي بنستخدمها بحياتنا اليومية.

مثال بسيط: عشان نضيف 10 لقيمة متغير اسمه "x"، بنقدر نكتبها بهالشكل:

x + 10



لغات البرمجة عالية المستوى والـ Compiling

لغات البرمجة عالية المستوى بتسمح باستخدام بيانات بتتكون من حروف وعلامات ترقيم، وكمان فيها أوامر بتشبه الكلمات اللي بنستخدمها باللغات العادية. مثلاً، بلغة برمجة عالية المستوى، لو بدك تطبع التحية "Hello!" على الشاشة، ممكن تكتبها بهالشكل:
print(“Hello!”)

مع هيك، عشان الكمبيوتر يقدر يشغّل برنامج مكتوب بلغة برمجة عالية المستوى، لازم أول إشي يتم تحويله لسلاسل من الأرقام الثنائية (0s و1s). السبب إنه على مستوى الهاردوير، الشي الوحيد اللي بيدخل على المعالج هو إشارات كهربائية "عالية" أو "منخفضة" اللي بتمثل هالأرقام الثنائية وبتشغّل الترانزستورات الموجودة داخل المعالج بطريقة معينة.

عملية تحويل البرنامج المكتوب بلغة عالية المستوى لتعليمات ثنائية اللي بتنبعث للمعالج بنسميها "Compiling" للبرنامج. الأوامر اللي بنكتبها بلغة البرمجة، واللي غالباً بنسميها "Source Code"، بنمررها على برنامج ترجمة خاص اسمه "Compiler". الـ Compiler هذا مصمم عشان يحول الـ Source Code المكتوب بلغة برمجة معينة لسلسلة التعليمات الثنائية المطلوبة. النتيجة النهائية اللي بيطلّعها الـ Compiler، واللي ممكن تنفذها المعالجات، بنسميها "Binary Code"، أو "Machine Code"، أو "Object Code"، أو "Executable Code" للبرنامج.

تعقيدات الـ Compiling
مع إنه الـ Compiling بيسهّل استخدام لغات البرمجة العالية، بس دائماً كان في تعقيدات مرتبطة فيها. أول مشكلة إنه مجموعة التعليمات الثنائية اللي بتنبعث للمعالج ممكن تختلف من نوع معالج لنوع ثاني. عشان هيك، الـ Source Code اللي تم Compiling لإشي معين ممكن ما يشتغل على معالج نوع ثاني.

وهذا السبب الرئيسي ليش برامج التطبيقات مثل برامج معالجة النصوص (Word Processors) بيكون إلها نسخ منفصلة لأجهزة "Macintosh" وأجهزة "PC". لأنه التعليمات الثنائية اللي موجودة بالكود التنفيذي (Executable Code) دايماً بتنبعث للمعالج بناءً على نظام التشغيل. ونظامي التشغيل "Macintosh" و"Windows" نفسهم عبارة عن برامج تم تصميمها وعمل Compiling إلها لمعالجات مختلفة تماماً.

بالمقابل، عندك أنظمة التشغيل اللي بتتبع عائلة "Unix" و"Linux" اللي ممكن تعمل إلها Compiling لتشتغل على أنواع كتير من المعالجات، بما فيها الأنواع الموجودة بأجهزة Macintosh وWindows.




الاستقلالية عن المنصة (Platform Independence)

مع الانتشار الضخم لشبكة الإنترنت العالمية (World Wide Web) بنهاية التسعينات، صارت مشكلة اختلاف منصات الكمبيوترات الشخصية أكتر وضوحاً. من البداية، تم تصميم الإنترنت على إنه بنية تحتية "مستقلة عن المنصة". يعني مثلاً، صيغة الصور الرقمية "JPEG"، اللي تم تصميمها للاستخدام على الإنترنت، تم تصميمها عشان تكون مستقلة عن المنصة. ونتيجة لهذا التصميم، أي ملف صورة بصيغة JPEG ممكن يتم الوصول إله، عرضه، تعديله، وتبادله على الإنترنت من قبل مستخدمي أجهزة Macintosh، وWindows/PC، وUnix/Linux بنفس السهولة.

صيَغ البيانات المتعددة الوسائط المستقلة عن المنصة اللي بتستخدمها شبكة الإنترنت شجّعت على استكشاف فكرة تطوير برامج برمجية مستقلة عن المنصة. وهالشي هو السبب الرئيسي ليش لغة البرمجة "Java" المستقلة عن المنصة وصلت لهالمستوى العالي من الشهرة خلال العقد الماضي.

الـ Source Code تبع أي برنامج مكتوب بلغة Java ما بينعمل إله Compiling مباشرةً للكود الثنائي الخاص بمعالج معين. بدلاً من هيك، الـ Java Source Code بينعمل إله Compiling لجهاز افتراضي (Virtual Machine) – يعني نوع من "المعالج العام" اللي فعلياً ما إله وجود مادي على أي جهاز. عشان هيك، الكود اللي بنتج من عملية الـ Compiling بلغة Java ما بيكون كود تنفيذي (Executable Binary Code) مباشرةً، لكنه بيمثل خطوة وسيطة اسمها "Byte Code".

لكن شركة Sun Microsystems، اللي طورت منصة Java، بتوفر برامج مجانية لكل منصات الكمبيوترات الرئيسية عشان تحوّل الـ Java Byte Code لكود تنفيذي (Executable Binary Code) اللي مطلوب لهالمنصة المحددة. وهالشي ألغى الحاجة لتطوير نسخ متعددة من نفس البرنامج لكل منصة.

Java كمان تعتبر لغة برمجة كائنية التوجه (Object-Oriented Language)، واللي فيها المكونات الأساسية للبرنامج بتكون عبارة عن مجموعة من الكائنات الافتراضية (Virtual Objects). كل كائن بيكون إله خصائص وسلوكيات محددة اللي بتساعد ببناء الوظائف العامة المطلوبة للبرنامج.

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



بيئة البرمجة (Processing)

تعقيد العملية اللي بتتضمن إدخال البرنامج، عمل Compile، وتنفيذه – والمعروفة عادةً باسم بيئة البرمجة (Programming Environment) – غالباً بيكون عائق لتعلم البرمجة. في بيئة سطر الأوامر (Command-Line Environment)، الواحد ممكن يحتاج يتعلم مجموعة أوامر خاصة بنظام التشغيل اللي بيستخدمه (زي Unix) بالإضافة لأوامر المحرر اللي تُستخدم لإدخال وتعديل البرنامج.

لكن في مجموعة متنوعة من بيئات التطوير المتكاملة (IDEs) زي Visual Studio اللي طورتها مايكروسوفت، وEclipse المفتوحة المصدر والشعبية، بتسهّل الأمور بشكل كبير. عادةً، بتبدأ بإنشاء مشروع جديد، بتحدد فيه لغة البرمجة اللي بتستخدمها، وبعدها ممكن تضيف مكتبات للمشروع، تعيد ترتيب النوافذ شوي، تنشئ حزمة (Package) وملف نصي، وتدخل الكود المصدري (Source Code) للبرنامج داخل هالملف وتعمله حفظ. وبالنهاية، بتعمل Build للمشروع عشان تنفذ البرنامج الناتج.

بس لما نحكي عن بيئة البرمجة "Processing"، فهي واحدة من أبسط البيئات اللي ممكن تتعامل معها. لما تفتحها، بيطلع لك "نافذة تخطيط" (Sketch Window) بسيطة. النافذة هاي فيها ستة أزرار فوق، تحتهم محرر لكتابة البرنامج (Program Editor)، وتحتهم كمان نافذة لعرض النصوص الناتجة (Text Output Window).
23.webp
22.webp

الشكل 1-1. نافذة محرر البرنامج ونافذة الإخراج الرسومية (فارغة).

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


25.webp
في الشكل 1.1) تظهر نافذة الإخراج المرئيه لأنها تحتوي على مخرجات رسومية تم إنتاجها

بواسطة البرنامج. في هذا المثال، لا يتم عرض أي إخراج لأن البرنامج فارغ.

الشكل 1-2. برنامج Hello-World المستند إلى النص المكتوب


برنامج بدون أي كود مفيد مش راح يكون ممتع أو مفيد، فبنضيف السطر التالي:
Java:
println("Hello World!");
زي ما هو موضح في الشكل 1-2. بعد ما نضيف هالسطر، بنضغط مرة ثانية على زر Run. الناتج:
Hello World!
بيظهر في نافذة النصوص الناتجة (Text Output Window). (ما بيظهر أي شيء في نافذة العرض المرئي لأنه الناتج نصي، مش رسوميات).

عشان نحصل على تمثيل رسومي بسيط بالإضافة للنصوص الناتجة، ممكن نضيف السطر التالي:
ellipse(50, 50, 50, 50);

السطر هذا بينتج شكل بيضاوي (Ellipse) مركزه عند النقطة (50, 50)، وأطوال المحاور الرئيسية والثانوية له 50 بكسل – يعني، دائرة مركزها (50, 50) ونصف قطرها 50 – وبتظهر في نافذة العرض المرئي (Visual Output Window) زي ما هو موضح في الشكل 1-3.


26.webp
الشكل 1-3. برنامج Hello-World الرسومي

إذا بدنا نضيف شوية لون، السطرين من الكود هدول:



كود:
background(0);<br>fill(0, 0, 255);<br>

زي ما هو موضح في الشكل 1-4، فينا نضيفهم لحتى نملأ الخلفية بلون واحد (أسود زي ما هو محدد بالقيمة اللونية 0، اللي بتعني ما في ضوء) والدائرة بلون تاني (أزرق زي ما هو محدد بثلاثية الألوان الأحمر-الأخضر-الأزرق، واللي بتعني ما في أحمر، ما في أخضر، وأقصى شدة للون الأزرق، 255).
27.webp
الشكل 1-4 .الرسومي مع اللون Hello-world


نظام الإحداثيات المستخدم في نافذة العرض البصرية بيكون فيه الأصل (0، 0) في الزاوية العليا اليسار، والمحور x الإيجابي موجه لليمين، والمحور y الإيجابي موجه للأسفل.
إذا بنحب يكون عنا صورة أكتر واقعية للأرض، كل اللي لازم نعمله هو تنزيل ملف صورة للأرض في المجلد اللي فيه برنامجنا، وبعدين نعدل البرنامج زي ما هو موضح في الشكل 1-5.
28.webp
الشكل 1-5. برنامج Hello-World مع صورة للأرض
الأمثلة اللي قبل شوي كانت بهدف إعطائك لمحة أولية عن بيئة الـ Processing ولتعرفك قد إيش سهل تعمل برمجة مثيرة فيها.
إن شاءالله تكون ستفدت وإستمتعت منشوفك بموضوع جديد

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

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

ما هو الحاسوب ؟ هو جهاز الإلكتروني و واحد من أهم التطورات اللي صارت بالقرن العشرين.

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


مع هيك،في مفاهيم أساسية بمجال الحوسبة بتظل ثابتة، وممكن توضح وتتعلمها وتستخدمهابشكل فعّال.

كل الحوسبة مبنية على الاستخدام المنسّق بين الأجهزة (اللي بنسميها الهاردوير) والبرامج(اللي بنسميها السوفتوير). وكل تطبيقات السوفتوير بتُبنى باستخدام مواصفات للبيانات والعمليات، اللي بنسميها الهياكل البيانية والخوارزميات (datastructures and algorithms). هاي الأساسيات ظلت ثابتة بشكل كبير بتاريخ الحوسبة، رغم التطورات المستمرة بتكنولوجيا الهاردوير والسوفتوير، والتطور المستمر بأساليب جديدة للبيانات والعمليات.

1.1 الحوسبة

زي ماذكرنا قبل، تعريف الحوسبة مش سهل إنه يتحدد بدقة، بس تقرير "منهجيات الحوسبة 2005" (Computing Curricula 2005:The Overview Report)،اللي أعدته لجنة مشتركة من ACMوIEEEوAIS،أعطى التعريف التالي:

"بشكل عام، ممكن نعرّف الحوسبة إنها أي نشاط موجه لتحقيق هدف بيتطلب استخدام أو الاستفادة من أو إنشاء أجهزة الحاسوب."

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

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



1.2 الأجهزة

(Hardware)


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

واحدة من أول الأدوات اللي اخترعوها لتسهيل الحساب البشري كانت "المعداد"(Abacus)، اللي كان يستخدم بمجتمعات قديمة زي بلاد مابين النهرين، آسيا، الهند، فارس، الإغريق،والرومان، وحتى حضارات أمريكا الوسطى.المعداد كان عبارة عن مجموعة منظمة من الخرز أوالحجارة اللي بتحركها على قضبان أو داخل أخاديد. المعداد،مشاهدة المرفق 16378
زي الكمبيوتر الحديث، كان آلة "رقمية"للحساب،لأنه بيحاكي التغيرات اللي بتصير بالأرقام أثناء القيام بالعمليات الحسابية.لكن، مش كل أنظمة المعداد كانت تستخدم النظام العشري(القاعدة-10)
بعض المجتمعات استخدمت أنظمة زي القاعدة-16،القاعدة-20،أو القاعدة-60.



العالم الفرنسي بليز باسكال (1623-1662) اخترع واحدة من أول الآلات الميكانيكية اللي بتعتمد على التروس عشان تساعد بحسابات الضرائب الكبيرة. النسخة العشرية من آلة باسكال، اللي اسمها"الباسكالين"،كانت تشبه كتير نوع من الآلات الحاسبة اللي استخدموها الناس بالمحلات بالولايات المتحدة بأواخر الخمسينات والستينات.صورة توضيحيه عن شكل الآلةمشاهدة المرفق 16379


في عام1822،العالم الإنجليزي تشارلز باباج (1792-1871)عرض المرحلةالأولى من آلة اسمها "محرك الفرق" (Difference Engine)،اللي استخدمت تروس بعشر وضعيات لتمثيل الأرقام العشرية. الآلة كانت قادرة تعمل حسابات أعقد من الحسابات الأساسية اللي كانت الباسكالين تقدر تعملها. لكن،الهندسة المعقدة للآلة خلت المشروع يتوقف.مشاهدة المرفق 16380

مشكلتين أساسيتين بالأجهزة الميكانيكية:​

  1. الأجهزة كانت "ميكانيكية" يعني كانت تعتمد على أجزاء متحركة ومتصلة هاي الأجهزة غالباً أبطأ و أكتر عرضة للتعطل، وأصعب بالتصنيع مقارنة بالأجهزة اللي ما فيها أجزاء متحركة.
  2. الأجهزة "الإلكترونية" زي أنابيب التفريغ (Vacuum Tubes) اللي كانت تُستخدم بأجهزة الراديو القديمة ما فيها أجزاء متحركة.

مثال على التطور:​



جهاز ENIAC كان واحد من أوائل الكمبيوترات الرقمية الإلكترونية. كان يمثل كل رقم عشري باستخدام عمود فيه 10أنابيب تفريغ،
اللي بتشتغل إلكترونياً بتبديل حالتها (تشغيل/إطفاء)لتمثل الأرقام من 0 إلى9 بدون حركة ميكانيكية.

جهازENIAC، اللي صممه J. Presper Eckert وJohnMauchly بجامعة بنسلفانيا بين 1943 و1946،كان وزنه 30 طن واحتاج 18,000 أنبوب تفريغ، وكان يستهلك كمية كهرباء كبيرة.السبب الرئيسي إنه كل رقم عشري كان يحتاج 10أنابيب تمثله
مشاهدة المرفق 16381

بالمقابل،أول كمبيوتر رقمي إلكتروني طوره جونأتان اسوف وكليفورد بيري بجامعة ولاية أيوا بين 1937 و1942استخدما لنظام الثنائي (Base-2)،زي كل الكمبيوترات الرقمية الحديثة.



مقارنة بين النظام العشري والثنائي:​



  • النظام العشري بيعتمد على قوى الرقم 10: واحدات (10^0)، عشرات (10^1)، مئات (10^2)، آلاف (10^3)، وهكذا. مثلاً الرقم 255 بيتكتب كـ "255" وبيمثل 2 مئات، 5 عشرات، و5 واحدات.مشاهدة المرفق 16382
  • النظام الثنائي بيعتمد على قوى الرقم 2: واحدات (2^0)، اثنينات (2^1)، أربعيات (2^2)، وهكذا. الرقم 18 بالنظام الثنائي بيتكتب كـ "10010"، وبيمثل 1 ستة عشر، 0 ثمانية، 0 أربعة، 1 اثنين، و0 واحد.
مشاهدة المرفق 16383
نفس الشيء،الرقم "255" بالنظام الثنائي بيتكتب كـ "11111111"،وبيمثل مجموع 1 (128)،1 (64)،1 (32)،1 (16)،1 (8)،1 (4)،1 (2)،و1 (1).



مشاهدة المرفق 16384


لماذا اختار مهندسو الحاسوب بناء آلة تقوم بالحساب باستخدام طريقة غريبة وغير مألوفة لكتابة الأرقام مثل النظام الثنائي (Base-Two)؟




أما النظام الثنائي (Base-2)، فالأرقام فيه ما بتحتاج تعد أكتر من خانتين: من 0 لحد 1، وبعدين بترجع لـ 0. يعني، بينما الأرقام العشرية فيها عشر احتمالات مختلفة (من 0 إلى 9)، الرقم الثنائي بيحتوي احتمالين فقط: 0 أو 1. بالتالي، بدال ما نحتاج نعالج 10 احتمالات للرقم العشري، ممكن نمثل الرقم الثنائي باستخدام جهاز وحيد بوضعين فقط. على سبيل المثال، كل رقم ثنائي ممكن يتمثّل بمفتاح بسيط "تشغيل/إيقاف"، حيث وضعية "التشغيل" بتمثل الرقم 1، و"الإيقاف" بتمثل الرقم 0
مشاهدة المرفق 16385
بنفس الطريقة، في جهاز Atanasoff-Berry، كل رقم ثنائي كان ممكن يتمثل بأنبوب مفرغ واحد. فمثلاً، الرقم "18" ممكن يتمثّل باستخدام 5 أنابيب مفرغة بس، بدل 20 اللي كان يحتاجها ENIAC
وبالمثل، الرقم "255" كان ممكن يتمثّل باستخدام 8 أنابيب مفرغة فقط، بدل 30 اللي كان يحتاجها ENIAC:


مشاهدة المرفق 16386

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

زي ما تم استبدال أجهزة الراديو اللي بتشتغل بأنابيب مفرغة بـ "الراديو الترانزستور" بداية الخمسينات، نفس الشيء صار مع الجيل الأول من الكمبيوترات الرقمية اللي كانت مبنية على أنابيب مفرغة. مع الوقت، تم استبدالها بـ "الجيل الثاني" اللي استخدم الترانزستورات كأجهزة أسرع وأصغر حجماً بكثير، وبدون أجزاء متحركة، لتمثيل الـ 1 أو 0 بالرقم الثنائي.مشاهدة المرفق 16387




المعالجات (Processors)


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


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

مشاهدة المرفق 16389في هالتشبيه، في تشابه كبير مع طريقة عمل المعالج. قطعة الدومينو، زي الترانزستور، هي جهاز بحالتين فقط: يا واقفة (تشغيل/1)، أو طايحة (إيقاف/0). بهالطريقة، ممكن تمثيل الاحتمالات الثنائية (0 و1) باستخدام قطع الدومينو أو الترانزستورات. فمثلاً، ممكن نعتبر قطعة الدومينو الواقفة كأنها الرقم 1، والطايحة كأنها الرقم 0. لما نوقع بعض أو كل القطع بالصف الأول، كأنك "أدخلت" رقم ثنائي مكوّن من 8 خانات لهاي "آلة الدومينو".:


مشاهدة المرفق 16390بالمعنى نفسه، الرقم الثنائي هون هو "تعليمة" لهاي الآلة، وبيحدد سلسلة التفاعلات اللي لازم تصير. ولما تنتهي هالسلسلة، وبتوقع بعض أو كل القطع بالصف الثاني، كأن الآلة أعطت "ناتج" رقم ثنائي مكوّن من 8 خانات.



تشابه مع المعالجات


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


المتاهة اللي داخل المعالج مصممة بحيث يكون الناتج النهائي هو الرقم اللي بيمثل "الإجابة الصحيحة" للتعليمة الحسابية المدخلة. على سبيل المثال، معالج Intel 8088، اللي استخدم بالكمبيوتر الأول من IBM، كان معالج 8-بت. يعني، بكل دورة تعليمات ("instruction cycle")، كان يدخل رقم ثنائي مكوّن من 8 خانات، تتم العملية (التفاعل)، ويخرج ناتج مكوّن من 8 خانات.:::
مشاهدة المرفق 16391

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


البرمجيات (Software)​


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

مثال للتوضيح:


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

تشارلز باباج والبرمجيات


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


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

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


مشاهدة المرفق 16393دور آدا لوفليس


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



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

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


أفكار إضافية للوفليس


لوفيس كمان أشارت إن البرنامج الجيد لازم يكون "عام"، بمعنى إنه لازم يشتغل على قيم مختلفة، مش مجرد أرقام معينة. على سبيل المثال، بدل ما نصمم برنامج يحسب
(2 × 10) - 5
نصمم برنامج يقبل أي ثلاث أرقام، يضرب الأول والثاني، وبعدين يطرح الثالث. الفكرة هاي بتوضح اللي وصفته لوفليس كـ"عمليات مستقلة عن الأرقام المستخدمة". حالياً، هالفكرة توصف بالفصل بين "البيانات" والعمليات اللي بتتم عليها.


كمان، لوفليس وصفت اللي أسمته "دورات" (Cycles) من العمليات، وبين نتيجة معينة ممكن تتحقق بتكرار عمليات محددة. بهالطريقة، عملية الضرب (5 × 4) ممكن تنفذ كإضافة متكررة
(5 + 5 + 5 + 5).


قدرة الكمبيوتر على أداء العمليات المتكررة​


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


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



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

استخدامات الكمبيوتر في المستقبل

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


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

الإمكانيات اللامحدودة للكمبيوتر


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

البرمجة الكائنية التوجه والحوسبة الشخصية OOP |Object-Oriented Programming​


ببعض الطرق، آدا لوفليس توقعت تغيرات بمفهوم برمجة الكمبيوتر. شافت إنه الحوسبة والبرمجة مش بس مقتصرين على البيانات الرقمية أو التسلسلات الجبرية التقليدية للعمليات الحسابية. بدال هيك، شافت البرمجة كتكنولوجيا بتمكّن إنشاء وتعديل اللي بنسميه اليوم "نماذج الكمبيوتر" "building blocks" .


هالتحول من النمط الإجرائي البحت لنمط بيشمل "البرمجة الكائنية التوجه" (Object-Oriented Programming أو OOP) خلّى "الكائنات" الافتراضية، مع خصائصها وأفعالها، تكون هي الأساس لبناء البرمجيات. البرمجة الكائنية ظهرت بشكل كبير بمحاولات بالنصف الثاني من السبعينات لتطوير جيل جديد من "الحواسيب الشخصية" و"واجهات المستخدم الرسومية". ومع الزيادة السريعة بشعبية هاي التكنولوجيا بالنصف الثاني من الثمانينات، زاد اعتماد مفهوم البرمجة الكائنية اللي مكّن هاي التطورات.

مشاهدة المرفق 16394الحاسوب الشخصي و دينابوك أحد أول الناس اللي استخدموا مصطلح "الكمبيوتر الشخصي" كان آلان كاي، اللي قاد فريق بشركة Xerox بمركز الأبحاث في بالو ألتو (PARC) خلال السبعينات، بهدف إنشاء كمبيوتر صغير ومحمول. "الدينابوك" (Dynabook)، الاسم اللي أُطلق على المشروع، كان يشبه بشكل كبير أجهزة "النوتبوك" اللي ظهرت بعد عقدين.


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


نظام Smalltalk


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

لكن هاي التجربة ما أقنعت إداريي شركة Xerox. ومع ذلك، بعد سنوات قليلة، وبالتحديد سنة 1979، ستيف جوبز، المؤسس المشارك لشركة Apple، شاف عرض لهاي الواجهة الرسومية.



مشاهدة المرفق 16396تطورات Apple وماكنتوش نظام Apple II، اللي تم تقديمه أول مرة عام 1977، كان، زي غيره من أنظمة "الميكروكمبيوتر" المبكرة، يتفاعل مع المستخدمين من خلال واجهة أوامر نصية. لكن بعد ما شاف جوبز نظام PARC، قال: "خلال عشر دقايق كان واضح بالنسبة إلي إنه كل الكمبيوترات بالمستقبل رح تشتغل هيك".

جوبز بدأ فوراً بتطوير جيل جديد من أجهزة Apple، واللي بدأ مع إطلاق ماكنتوش بشهر يناير 1984. واجهة المستخدم الرسومية للماكنتوش، وكمان نظام التشغيل "Windows" من مايكروسوفت اللي تم تقديمه بعدها بسنة، كانوا مشابهين بشكل كبير لواجهة "سطح المكتب" الرسومية اللي تم تطويرها في Xerox PARC.

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


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

برنامج VisiCalc هو مثال على ما يُطلق عليه "برنامج تطبيقي" (application software) وهو برنامج مكتوب مسبقاً يتم توزيعه ليستخدمه الآخرون. في الواقع، غالباً ما يُشار إلى VisiCalc على أنه "التطبيق القاتل" (killer app) لجهاز Apple II، وهو مصطلح يُستخدم للإشارة إلى تطبيق لتكنولوجيا جديدة يكون السبب في تبنيها من قِبل عدد كبير من المستخدمينمشاهدة المرفق 16397



الترويج لتبني التكنولوجيا من قبل المستخدمين الجدد

لما نزل برنامج الجداول الإلكترونية VisiCalc، اللي كان معروف بشكل كبير، لجهاز Apple II – وبعدها لعدة أجهزة كمبيوتر صغيرة زي اللي كانت تصنعها شركات مثل Atari وCommodore – ساعد بشكل كبير بإقناع الناس إنه جهاز Apple II مش مجرد جهاز للعرض أو للزينة، بل هو جهاز كمبيوتر حقيقي بإمكانيات كبيرة للاستخدام بالأعمال وحتى بالعلوم الجادة.

بنفس الطريقة، لما قدمت شركة IBM جهاز الكمبيوتر الشخصي تبعها سنة 1981، كرد على الشعبية الكبيرة والمفاجئة اللي صارت للحواسيب الصغيرة بآخر السبعينات – واللي كان جزء كبير منها بسبب برنامج VisiCalc كان التطبيق اللي خلّى أغلب الناس يقتنعوا يشتروا جهاز IBM هو برنامج جداول إلكترونية ثاني: "Lotus 1-2-3."

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

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

تغير فهم الحوسبة الشخصية بس لما نرجع بالزمن ونفكر، بنلاحظ إنه كان مؤسف إن برامج الجداول الإلكترونية تم اعتبارها كـ"برامج تطبيقية" بدلاً من بيئة برمجية. الجداول اللي النظام كان يسمح للمستخدمين يصمموها ويستخدموها كانوا يعتبروا إنها هي نفسها البرامج الناتجة.

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

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

Kay بنفسه قال إنه الأداءات المسرحية والموسيقية أثرت بشكل كبير على تصميم دينابوك، وكان يتخيل الكمبيوتر الشخصي زي "آلة موسيقية موسيقاها هي الأفكار."

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

وبعد اعتماد واجهات المستخدم الرسومية لماكنتوش و"ويندوز" كواجهة قياسية، صار فيه مفهوم جديد لمستخدم الكمبيوتر كـ"المستخدم النهائي"، اللي، حسب تعريفه، هو شخص مش مبرمج. وهالفكرة عن "الحوسبة الشخصية" كعكس البرمجة ظلت مستمرة أكتر من عشرين سنة.


تجدد الاهتمام بالبرمجة في الألفية الجديدة

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

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

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


لغات البرمجة والـ Compiling

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

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

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

مثال:
100011 00011 01000 00000 00001 00100

بالواقع، بأيام الكمبيوترات الإلكترونية الأولى بالـ 1940s والـ 1950s، كان على المبرمج يدخل سلسلة طويلة من الأرقام الثنائية من هالنوع عشان يحط برنامج برمجي على الكمبيوتر. بس الحمد لله، الوضع تغير مع الوقت. تم تطوير أنواع كتيرة من لغات البرمجة "عالية المستوى" اللي بتسمح للمبرمج يكتب برامج باستخدام أرقام عشرية ورموز حسابية شبيهة باللي بنستخدمها بحياتنا اليومية.

مثال بسيط: عشان نضيف 10 لقيمة متغير اسمه "x"، بنقدر نكتبها بهالشكل:

x + 10



لغات البرمجة عالية المستوى والـ Compiling

لغات البرمجة عالية المستوى بتسمح باستخدام بيانات بتتكون من حروف وعلامات ترقيم، وكمان فيها أوامر بتشبه الكلمات اللي بنستخدمها باللغات العادية. مثلاً، بلغة برمجة عالية المستوى، لو بدك تطبع التحية "Hello!" على الشاشة، ممكن تكتبها بهالشكل:
print(“Hello!”)

مع هيك، عشان الكمبيوتر يقدر يشغّل برنامج مكتوب بلغة برمجة عالية المستوى، لازم أول إشي يتم تحويله لسلاسل من الأرقام الثنائية (0s و1s). السبب إنه على مستوى الهاردوير، الشي الوحيد اللي بيدخل على المعالج هو إشارات كهربائية "عالية" أو "منخفضة" اللي بتمثل هالأرقام الثنائية وبتشغّل الترانزستورات الموجودة داخل المعالج بطريقة معينة.

عملية تحويل البرنامج المكتوب بلغة عالية المستوى لتعليمات ثنائية اللي بتنبعث للمعالج بنسميها "Compiling" للبرنامج. الأوامر اللي بنكتبها بلغة البرمجة، واللي غالباً بنسميها "Source Code"، بنمررها على برنامج ترجمة خاص اسمه "Compiler". الـ Compiler هذا مصمم عشان يحول الـ Source Code المكتوب بلغة برمجة معينة لسلسلة التعليمات الثنائية المطلوبة. النتيجة النهائية اللي بيطلّعها الـ Compiler، واللي ممكن تنفذها المعالجات، بنسميها "Binary Code"، أو "Machine Code"، أو "Object Code"، أو "Executable Code" للبرنامج.

تعقيدات الـ Compiling
مع إنه الـ Compiling بيسهّل استخدام لغات البرمجة العالية، بس دائماً كان في تعقيدات مرتبطة فيها. أول مشكلة إنه مجموعة التعليمات الثنائية اللي بتنبعث للمعالج ممكن تختلف من نوع معالج لنوع ثاني. عشان هيك، الـ Source Code اللي تم Compiling لإشي معين ممكن ما يشتغل على معالج نوع ثاني.

وهذا السبب الرئيسي ليش برامج التطبيقات مثل برامج معالجة النصوص (Word Processors) بيكون إلها نسخ منفصلة لأجهزة "Macintosh" وأجهزة "PC". لأنه التعليمات الثنائية اللي موجودة بالكود التنفيذي (Executable Code) دايماً بتنبعث للمعالج بناءً على نظام التشغيل. ونظامي التشغيل "Macintosh" و"Windows" نفسهم عبارة عن برامج تم تصميمها وعمل Compiling إلها لمعالجات مختلفة تماماً.

بالمقابل، عندك أنظمة التشغيل اللي بتتبع عائلة "Unix" و"Linux" اللي ممكن تعمل إلها Compiling لتشتغل على أنواع كتير من المعالجات، بما فيها الأنواع الموجودة بأجهزة Macintosh وWindows.




الاستقلالية عن المنصة (Platform Independence)

مع الانتشار الضخم لشبكة الإنترنت العالمية (World Wide Web) بنهاية التسعينات، صارت مشكلة اختلاف منصات الكمبيوترات الشخصية أكتر وضوحاً. من البداية، تم تصميم الإنترنت على إنه بنية تحتية "مستقلة عن المنصة". يعني مثلاً، صيغة الصور الرقمية "JPEG"، اللي تم تصميمها للاستخدام على الإنترنت، تم تصميمها عشان تكون مستقلة عن المنصة. ونتيجة لهذا التصميم، أي ملف صورة بصيغة JPEG ممكن يتم الوصول إله، عرضه، تعديله، وتبادله على الإنترنت من قبل مستخدمي أجهزة Macintosh، وWindows/PC، وUnix/Linux بنفس السهولة.

صيَغ البيانات المتعددة الوسائط المستقلة عن المنصة اللي بتستخدمها شبكة الإنترنت شجّعت على استكشاف فكرة تطوير برامج برمجية مستقلة عن المنصة. وهالشي هو السبب الرئيسي ليش لغة البرمجة "Java" المستقلة عن المنصة وصلت لهالمستوى العالي من الشهرة خلال العقد الماضي.

الـ Source Code تبع أي برنامج مكتوب بلغة Java ما بينعمل إله Compiling مباشرةً للكود الثنائي الخاص بمعالج معين. بدلاً من هيك، الـ Java Source Code بينعمل إله Compiling لجهاز افتراضي (Virtual Machine) – يعني نوع من "المعالج العام" اللي فعلياً ما إله وجود مادي على أي جهاز. عشان هيك، الكود اللي بنتج من عملية الـ Compiling بلغة Java ما بيكون كود تنفيذي (Executable Binary Code) مباشرةً، لكنه بيمثل خطوة وسيطة اسمها "Byte Code".

لكن شركة Sun Microsystems، اللي طورت منصة Java، بتوفر برامج مجانية لكل منصات الكمبيوترات الرئيسية عشان تحوّل الـ Java Byte Code لكود تنفيذي (Executable Binary Code) اللي مطلوب لهالمنصة المحددة. وهالشي ألغى الحاجة لتطوير نسخ متعددة من نفس البرنامج لكل منصة.

Java كمان تعتبر لغة برمجة كائنية التوجه (Object-Oriented Language)، واللي فيها المكونات الأساسية للبرنامج بتكون عبارة عن مجموعة من الكائنات الافتراضية (Virtual Objects). كل كائن بيكون إله خصائص وسلوكيات محددة اللي بتساعد ببناء الوظائف العامة المطلوبة للبرنامج.

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



بيئة البرمجة (Processing)

تعقيد العملية اللي بتتضمن إدخال البرنامج، عمل Compile، وتنفيذه – والمعروفة عادةً باسم بيئة البرمجة (Programming Environment) – غالباً بيكون عائق لتعلم البرمجة. في بيئة سطر الأوامر (Command-Line Environment)، الواحد ممكن يحتاج يتعلم مجموعة أوامر خاصة بنظام التشغيل اللي بيستخدمه (زي Unix) بالإضافة لأوامر المحرر اللي تُستخدم لإدخال وتعديل البرنامج.

لكن في مجموعة متنوعة من بيئات التطوير المتكاملة (IDEs) زي Visual Studio اللي طورتها مايكروسوفت، وEclipse المفتوحة المصدر والشعبية، بتسهّل الأمور بشكل كبير. عادةً، بتبدأ بإنشاء مشروع جديد، بتحدد فيه لغة البرمجة اللي بتستخدمها، وبعدها ممكن تضيف مكتبات للمشروع، تعيد ترتيب النوافذ شوي، تنشئ حزمة (Package) وملف نصي، وتدخل الكود المصدري (Source Code) للبرنامج داخل هالملف وتعمله حفظ. وبالنهاية، بتعمل Build للمشروع عشان تنفذ البرنامج الناتج.

بس لما نحكي عن بيئة البرمجة "Processing"، فهي واحدة من أبسط البيئات اللي ممكن تتعامل معها. لما تفتحها، بيطلع لك "نافذة تخطيط" (Sketch Window) بسيطة. النافذة هاي فيها ستة أزرار فوق، تحتهم محرر لكتابة البرنامج (Program Editor)، وتحتهم كمان نافذة لعرض النصوص الناتجة (Text Output Window).مشاهدة المرفق 16399مشاهدة المرفق 16398
الشكل 1-1. نافذة محرر البرنامج ونافذة الإخراج الرسومية (فارغة).

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


مشاهدة المرفق 16401في الشكل 1.1) تظهر نافذة الإخراج المرئيه لأنها تحتوي على مخرجات رسومية تم إنتاجها

بواسطة البرنامج. في هذا المثال، لا يتم عرض أي إخراج لأن البرنامج فارغ.

الشكل 1-2. برنامج Hello-World المستند إلى النص المكتوب


برنامج بدون أي كود مفيد مش راح يكون ممتع أو مفيد، فبنضيف السطر التالي:
Java:
println("Hello World!");
زي ما هو موضح في الشكل 1-2. بعد ما نضيف هالسطر، بنضغط مرة ثانية على زر Run. الناتج:
Hello World!
بيظهر في نافذة النصوص الناتجة (Text Output Window). (ما بيظهر أي شيء في نافذة العرض المرئي لأنه الناتج نصي، مش رسوميات).

عشان نحصل على تمثيل رسومي بسيط بالإضافة للنصوص الناتجة، ممكن نضيف السطر التالي:
ellipse(50, 50, 50, 50);

السطر هذا بينتج شكل بيضاوي (Ellipse) مركزه عند النقطة (50, 50)، وأطوال المحاور الرئيسية والثانوية له 50 بكسل – يعني، دائرة مركزها (50, 50) ونصف قطرها 50 – وبتظهر في نافذة العرض المرئي (Visual Output Window) زي ما هو موضح في الشكل 1-3.


مشاهدة المرفق 16402الشكل 1-3. برنامج Hello-World الرسومي

إذا بدنا نضيف شوية لون، السطرين من الكود هدول:



كود:
background(0);<br>fill(0, 0, 255);<br>

زي ما هو موضح في الشكل 1-4، فينا نضيفهم لحتى نملأ الخلفية بلون واحد (أسود زي ما هو محدد بالقيمة اللونية 0، اللي بتعني ما في ضوء) والدائرة بلون تاني (أزرق زي ما هو محدد بثلاثية الألوان الأحمر-الأخضر-الأزرق، واللي بتعني ما في أحمر، ما في أخضر، وأقصى شدة للون الأزرق، 255).
مشاهدة المرفق 16403الشكل 1-4 .الرسومي مع اللون Hello-world


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

آخر المشاركات

عودة
أعلى