كورس مقدمة في علوم الحاسب معروف للناس باسم CS50 وده الكورس المقدم من جامعة هارفارد ومعروف في بعض الأماكن باسم CS 0 ومعروف في بعض الأماكن بCS500.
أيا كان الاسم ايه، كلهم بيشتركو في حاجة واحدة وهي ان الكورس ده اول كورس لازم تدرسه لو حبيت تدرس مجال علوم الحاسب.
خد بالك احنا بنقول لو حبيت تدرس مجال علوم الحاسب وليس البرمجة. ممكن تكون دارس لغة او 2 من لغات البرمجة ولكن ده مش معناه انك دارس علوم حاسب لان البرمجة مجرد جزء صغير من علوم الحاسب ولكن ليست هي علوم الحاسب وده اللى هنشوفه دلوقتى في المقدمة دي.
المفاهيم الخاطئة عن مجال علوم الحاسب:
1) مجال علوم الحاسب هو دراسة الكمبيوتر:
فيه ناس فاكرة ان كلمة علوم حاسب معناها دراسة الكمبيوتر وفيه طلبة في كلية حاسبات ومعلومات لما حد يسالهم انتو بتدرسوا ايه يقولوا بندرس كمبيوتر.
لما أقول انا هدرس شيء ما معناه ان الشئ ده ربنا هو اللى خلقه والانسان محتاج يدرسه عشان ميعرفش عنه حاجة ذي مثلا تشريح جسم الانسان او حتى فيروس كورونا الجديد لازم الانسان يدرسه عشان يعرف يعمله علاج لانه الانسان ميعرفش عنه حاجة. لكن الكمبيوتر من صنع الانسان فاكيد الانسان مش محتاج يدرسه لانه هو اللى عمله.
لكن الحقيقة ان الانسان عمل الكمبيوتر او حتى فكر فيه عشان يستخدمه كآلة لحل مشاكل او عمل وظايف معينة. يعنى الكمبيوتر معمول ذيه ذي أي آلة تانية. وعشان تعرف ده يبقى لازم ترجع لتاريخ الكمبيوتر.
خلينا ناخد منه حتة بسيطة توضح الفكرة اللى بنقول عليها دي. مش هنرجع بالتاريخ لوقت الالة الحاسبة بتاعة باسكال (Pascaline calculator) اللى عملها العالم بليز باسكال (Blaise Pascal) ولا عجلة لابينتس Leibnitz’s Wheel اللى عملها العالم غوتفريد لايبنتس
(Gottfried Wilhelm Leibniz) ودول مجرد آلات حاسبة ميكانيكية لكن خلينا نبدا من العالم تشارلز بابيج (Charles Babbage) واللى دراساته تعتبر هي بداية ظهور الكمبيوتر وتطوره فعليا.
بابيج عمل جهاز اسمه difference engine اللى بيعمل جمع وطرح فقط وبعدها عمل الanalytical engine او المحرك التحليلي اللى كان بيعمل ضرب وقسمة وجمع وطرح. ودول عبارة عن آلات حاسبة ميكانيكية برضو ذي بتاعة باسكال ولايبنتس ولكن يختلف عنهم فان الAnalytical engine بتاع بابيج كان مكون من 4 حاجات وهما:
- المصنع: ويقصد بيه الprocessor او المعالج اللى بيحسب
- المخزن: او الذاكرة وذي تقدر تعتبرها الRAM
- القارئ: ويقصد بيها وحدة ادخال البيانات ذي الkeyboard مثلا
- الطابعة: واللى بتظهر عليها النتايج في النهاية ودي كانت مجرد طابعة فعلا بتطبع النتايج على ورق لكن تقدر تشبهها بالشاشة.
عشان كدة بابيج كان اول واحد يعتبر عمل كمبيوتر بالمفهوم الحالي.

لكن السؤال هنا … ايه اللى خلى بابيج يفكر أصلا يعمل الأجهزة دي؟!
في سنة 1790، نابليون بونابارت (Napoléon Bonaparte) طلب عمل جداول للتحويل من نظام وحدات الإمبراطورية (imperial units) للقياس واللى هي بالقدم واليارد والاوقية لنظام وحدات القياس الحديثة اللى هي بالمتر والكيلو وخلافه …
طيب ليه جداول بالتحديد؟ قبل تشارلز بابيج كان الكمبيوتر هو الانسان حرفيا… اذاي؟ … يعنى كان فيه ناس كل مهمتها انها تقعد على مكتب وتعمل عمليات حسابية من جمع وضرب وطرح وتسجل النتايج في جداول والجداول دي بتتحط في كتاب بيسموه كتاب الحساب او بالانجليزي ال mathematical book واللى بيبقى عامل ذي القاموس … بمعنى انت مثلا عايز تحسب 18×21 فهتفتح الكتاب وتجيب الرقم علطول من غير ما تحسب.
العلماء كلهم كانت مسيطرة عليهم فكرة الautomatic computation او انهم يعملو الات تعمل عمليات حسابية او وظائف تانية ولكن بشكل تلقائي وبالتالي المشروع اللى طلبه نابليون كان محفز للعالم تشارلز بابيج خصوصا انه كان عالم رياضيات ومخترع وليه اختراعات تانية غير اللى قولنا عليها
بابيج قال اللى خلانا نقدر نعمل القطر اللى بيمشى بالبخار ليه منعملش آلة تقدر تحسب بسرعة وكمان حتى تقلل احتمالية حدوث الأخطاء البشرية في الحساب. فعمل الأجهزة اللى قولنا عليها.
وبابيج لجأ للاختراع ده عشان يحل مشكلة وهي عمل العمليات الحسابيه بشكل اسرع وبدون تدخل الانسان واللى بدوره هيقلل الأخطاء.
يبقى اذن الكمبيوتر اتعمل عشان يستخدم كآلة او أداه لعمل وظيفة معينة او حل مشكلة معينة وكمان نلاحظ ان العلم هو اللى عمل الكمبيوتر وبالتالي علوم الحاسب هي دراسة العلم اللى بواسطته اخترنا الكمبيوتر.
يبقى اذن علوم الحاسب ليست عبارة عن دراسة الكمبيوتر.
2) مجال علوم الحاسب هو دراسة البرمجة:
احنا عرفنا ان الكمبيوتر نفسه اتعمل كأداة او آلة لعمل وظيفة معينة يبقى البرمجة برضو هي مجرد أداة … اذاي؟ …. حاليا عشان تشغل الكمبيوتر بتحتاج برامج ودي معمولة بلغات برمجة يعنى لغات البرمجة هي اداه لتشغيل الكمبيوتر اللى هو اصلا اداة او آلة …
يبقى اذن البرمجة برضو مجرد اداة لتشغيل الكمبيوتر وهي ليست علوم الحاسب
طيب بما ان علوم الحاسب لا هي دراسة الكمبيوتر ولا هي دراسة البرمجة … يبقى هي عبارة عن ايه او هدف علوم الحاسب آيه؟ ده اللى هنجاوبه في العنوان التالي.
ما هو الهدف الحقيقي لمجال علوم الحاسب؟
طبقا لتعريف العالم نورمان جيبس (Norman Gibbs) وهو عالم في علوم الحاسب والرياضيات ومهندس، ان الهدف الرئيسي لعلوم الحاسب هو دراسة الخوارزميات (algorithms).
طبعا ممكن تسمع كلمة خوارزميات او algorithms فتتعقد وتفتكر ان الموضوع صعب. قبل ما تقلق وتتعصب خلينا نعرف معنى كلمة خوارزمية او algorithm.
كلمة خوارزمية او algorithm ممكن نعرفها تعريف مختصر وبسيط بانها مجموعة من الخطوات التي تؤدي لعمل وظيفة او مهمة معينة.
ايه ده هو التعريف بس كدة؟ … اه هو ده التعريف … يعنى معلش هل مثلا أي حد بيقول خطوات عمل حاجة معينة يبقى بيقول خوارزمية؟ … اه بالظبط … يعنى مثلا لو الشيف في أي برنامج طبخ لما بيقول طريقة عمل الكيكة الاسفنجية مثلا يبقى بيقول خوارزمية الكيكة الاسفنجية؟ …. اه مظبوط.
طيب وليه سموها خورازمية او algorithm؟ … سموها كدة نسبة للعالم أبو جعفر محمد ابن موسى الخورازمي لانه اول عالم كتب طريقة حل العمليات الحسابية ذي الجمع والطرح مثلا في صورة خطوات مفصلة.
هو يعنى الموضوع بسيط قوي كدة؟ لا هو الموضوع مش بسيط قوي كدة … لان أصلا فيه علم اسمه علم الخوارزميات او الalgorithms واللى بيعلمك اذاي تكتب algorithm عشان تحل مشكلة معينة وتختبره هل هيكون نافع ولا لا وهل فيه خوارزمية افضل من التانية ولا لا …. ده هيبقى كورس تاني لوحده ان شاء الله
لكن السؤال هنا : ايه علاقة الخوارزميات بعلوم الحاسب؟ كل الفكرة ان بيكون فيه مشكلة معينة وعايزين يحلو المشكلة دي بشكل اوتوماتك … خلينا ندي مثال بسيط … خلينا نقول ان العلماء مثلا عايزين يعملو بحث في قاعدة بيانات كبيرة جدا قد يكون فيها ملايين من الصفوف … طبعا حاليا المشكلة دي محلولة … بس خلينا ناخدها كمثال
اللى بيحصل انهم بيكتبو خوارزمية عشان يحلو المشكلة دي وبيختبرو خواصها الرياضية وخلافه وبعد كدة بيبداو يطبقو الخوارزمية دي بلغة برمجة معينة وبيختبرو الalgorithm ده باستخدام الكمبيوتر طبعا … لو كان فيه مشكلة بيرجعوا يدوروا على خوارزمية تانية ويختبروها وهكذا.
وده يؤكد كمان الفكرة اللى قولناها ان الكمبيوتر والبرمجة ما هما الا أدوات لحل مشاكل معينة. حتى لو انت متعلم مثلا لغة برمجة معينة او مثلا متعلم تعمل مواقع عالنت … فانت برضو بتحل مشاكل معينة للعملاء بتوعك.
يبقى اذن علوم الحاسب هو علم مخصص لدراسة الخوارزميات المستخدمة لحل مشاكل معينة
هستفاد ايه لما ادرس علوم الحاسب؟
طيب انا هستفاد ايه من دراسة علوم حاسب؟ مانا ممكن ادرس لغة ولا لغتين برمجة واشتغل بيهم وخلاص كدة هبقى تمام. وانا اعرف ناس مبرمجين ومدرسوش علوم حاسب وشغالين وذي الفل… اتعب نفسي ليه في دراسة علوم الحاسب.
انت صح … فيه مبرمجين مدرسوش علوم حاسب وشغالين كويس … ولكن المبرمج اللى دارس علوم الحاسب بجانب البرمجة بيكون محترف اكتر لانه طريقة تفكيره في حل المشاكل بتختلف وكمان بيتعلم يختار الخوارزميات السليمة اللى يقدر يحل بيها المشكلة او يعمل البرنامج اللى شغال عليه بكفاءة عالية.
لكن المبرمج اللى اتعلم كام لغة برمجة وخلاص ومدرسش علوم حاسب ممكن يعملك برنامج شغال اه ولكن هل بيكون كفاءته عالية؟ هل بيكون اختار افضل خوارزمية او algorithm وهو بيعمل برنامج معين؟ اعتقد لا
خلينا مثلا اسالك سؤال … هل مثلا الناس اللى عملت البرنامج بتاع جهاز ذي جهاز السونار او الاشعة التلفزيونية مجرد مبرمجين عاديين كدة وخلاص ولا ناس دارسة علوم حاسب مع البرمجة.
طيب هل الناس اللى عملو محرك بحث جوجل مجرد مبرمجين وبس … طيب هل مثلا الناس اللى عملو النت كانو مجرد مبرمجين … أصلا الانترنت عملو مجموعة من الطلبة كرسالة دكتوراه … ودول بيطلق عليهم علماء في علوم الحاسب.
فبالتالي اكيد فيه فرق كبير بين مبرمج دارس علوم حاسب وبين مبرمج مش دارس علوم حاسب
ما هو هدف كورس مقدمة في علوم الحاسب؟
تمام خلاص عرفنا ان دراسة علوم الحاسب مهمة … طيب هل كورس مقدمة في علوم الحاسب هيكون فيه الخلاصة وهيدينا كل حاجة …
طبعا لا …. علوم الحاسب مجال واسع وفيه فروع كتير … وكورس مقدمة في علوم الحاسب ما هو الا مقدمة بسيطة عن كل فرع من فروع علوم الحاسب …
الكورس بيديلك الأساسيات اللي هتحتاجها وانت بتدرس وتتعمق في فروع علوم الحاسب … من الاخر تقدر تعتبر كورس مقدمة في علوم الحاسب هو حجر الأساس بتاعك اللى هتبنى عليه كل الجاي.
من المستفيدين من الكورس؟
مين المفروض ياخد الكورس ده او يدرسه؟
أي حد بيحب مجال علوم الحاسب يقدر يدرسه … العلم مش حكر على حد معين …
ولكن خلينا نقول اكتر ناس هتستفيد من الكورس ده هو طلبة علوم الحاسب.
ممكن تقولي انك أصلا مش خريج علوم حاسب ونفسك تدرسه بس مش متحمس لانك مش هتقدر تاخد فيه شهادة وتبقى ذي طالب علوم حاسب …
احنا كنا زيك برضو وفاكرين اننا عشان خرجين كلية علوم يبقى مش هنقدر خلاص ناخد شهادة في علوم الحاسب لكن الحقيقة اكتشفنا ان فيه أماكن في مصر – ذي مثلا كلية الدراسات والبحوث الإحصائية التابعة لجامعة القاهرة – بتتيح لخرجين البكالوريوس من أي كلية او ليسانس من أي كلية انهم يقدموا على دبلومة علوم حاسب كدراسات عليا وياخد شهادة طبعا ويقدر كمان يكمل ماجستير ودكتوراه في المجال.
وبرضو احب افكرك انك لو عايز تبقى مبرمج محترف مثلا لازم تدرس علوم الحاسب بجانب البرمجة.
المراجع اللى هنعتمد عليها في الكورس؟
هنعتمد على مرجعين رئيسين:
- Computer science: An overview:
هنعتمد على احدث طبعة وهي الطبعة ال13 ولكن المرجع ده فيه منه اصدارين
الإصدار الأول: global version والتاني هو الAP version

أيه الفرق بين ال2 … الglobal version دي النسخة اللى بيدرس منها طلبة الجامعات اما الAP version دي بيدرسها طلبة الhigh school او الثانوية العامة اللى بيجهزوا نفسهم للCollege board Advanced Placement test … وده بيبقى اختبارات للقبول في الكلية … والcollege board او بالعربي مجلس الكلية هي منظمة أمريكية غير هادفة للربح هي المخصصة لعمل الاختبارات دي.
اعتمادنا الرئيسي على الglobal version لكن هناخد فاعتبارنا الAP version والاسئلة اللى فيها
كمان هناخد فاعتبارنا حل الأسئلة الموجودة في النسخ 12 و11 باعتبار ان لو فيه طلبة بيتابعوا معانا الكورس وبيدرسو في كلية معينة والدكتور او الأستاذ اللى بيدرسهم بيعتمد على النسخة ال12 او 11 نكون برضو غطينا الأسئلة دي.
- Invitation to computer science:
من المراجع الممتازة وفيه شرح وافي برضو وبيتم تدريس الكورس منه في بعض الجامعات … هنعتمد على الطبعة التامنة وهي احدث طبعة
وهنحل برضو كل الأسئلة اللى موجودة فيه ان شاء الله.

منهاج
- 1 Section
- 4 Lessons
- Lifetime
- الجزء الاول (Hardware world) - الفصل الاول : كيفية تمثيل البيانات داخل الكومبيوتر4
Requirements
- فقط الشغف لتعلم علوم الحاسب
Target audiences
- الطلاب الذين يبحثون عن تعلم علوم الحاسب من البداية
