الأسبوع 0
المحاضرة
شرح عربي
مقدمة
حتى لو كان مجال عملك أو دراستك مختلف، حتى لو لم تأخذ أي دروس أخرى عن البرمجة وعلوم الحاسوب، فإن CS50 مفيد لك. علم الحاسوب هو طريقة تفكير عامة تساعدك على حل المشاكل، وهي مفيدة سواء في الفروع العلمية أو الفروع الفنية والأدبية.
دراسة كورس في MIT مثل شرب الماء من خرطوم الإطفاء
ستكون هناك معلومات غزيرة، ولن تتمكن من استيعابها كلها، لكن هذا متوقع ومقبول. الكورسات التقديمية تهدف لتقديم معلومات جديدة كلياً، لكن مع الزمن والممارسة وحتى بعد سنوات من الآن ستزداد معرفتك وفهمك لهذه المعلومات. وليس من المتوقع أن تشعر بالألفة وفهم كل شيء من البداية. لذلك حاول أن تعتاد على شعور عدم الألفة مع المعلومات المطروحة سواء كانت لديك معرفة سابقة بعلوم الحاسوب أو البرمجة أم لم تكن.
في هذا الكورس ستتعرف على البرمجة بلغة C وأيضاً لغة Python (بايثون)، كما سنتعرف على لغة البرمجة SQL التي تتخصص في التعامل مع قواعد البيانات. لغة SQL تختلف عن اللغات الأخرى وهذا سيعطيك أسلوباً جديداً في حل المشكلات، وأدوات جديدة تتعمل بها مع المسائل التي تتعرض لها. وفي نهاية الكورس سنعرض لك لغة برمجة إضافية وهي Javascript (جافاسكربت) التي تستخدم عادة مع HTML وCSS لبناء المواقع وتطبيقات الويب. السبب هو أن معظم البرمجيات في المجال العملي اليوم هي تطبيقات ويب، أو تطبيقات هاتف، وغالباً ما تعتمد على جافاسكربت أو تقنيات مماثلة لها.
في نهاية الكورس، ستتعلم كيف تبرمج. لن تتعلم لغة برمجة معينة باحتراف، لكن ستمتلك مجموعة مهارات عملية وأفكار أساسية تساعدك على متابعة رحلة تعلم البرمجة بنفسك. ستتعلم كيف تحل المسائل وتحليل المشاكل.
ستتعلم كيف يتم تمثيل الأرقام والحروف والألوان والصور والفيديو والصوت. ستتعلم كيف تكتب خوارزمية، وهي طريقة حل مشكلة ما خطوة بخطوة، وستتعلم كيف تكتب خطوات الحل هذه باستخدام الكود. الخوارزمية يمكن أن تكتب بأي لغة كالعربية أو الإنكليزية أو معادلة رياضية، لكن الكود هو ما يتحول إلى الأصفار والواحدات التي يفهمها الحاسوب.
لا يهم أن تتعلم أكثر من الآخرين الذين يدرسون CS50 أيضاً، بل أن تتعلم شيئاً جديداً لم تكن تعرفه قبل أن تدرس هذا الكورس. أن تقارن بين حالك الآن في الأسبوع رقم 0 وبين حالك في الأسبوع الأخير عندما تكتب مشروعاً خاصاً بك.
يتميز CS50 بالجو الاجتماعي للطلاب والدارسين، اجتمعات الغداء الأسبوعية التي يجتمع فيها الطلاب والبروفسور وأعضاء الهيئة التدريسية وخريجون أو عاملون في المجال التقني. ويوم الفوازير Puzzle Day لحل المسائل المنطقية بشكل جماعي، حتى لو تكن لديك مهارات برمجة أو تقنية. في نهاية الفصل الدراسي هناك Hackathon من 7 مساء وحتى 7 صباح اليوم التالي، حيث يجتمع الطلاب ويعملون معاً على بناء المشاريع النهائية. المشروع النهائي تحدده أنت والهدف منه بناء شيء يساعدك على الانطلاق لما بعد CS50 حيث تكتسب القدرة على البرمجة والتعلم والبحث وحدك دون الحاجة للاعتماد على أستاذ. في نهاية الكورس هناك CS50 Fair وهو معرض لمشاريع الطلاب والمشاركين في الكورس، حيث يمكنك إحضار مشروعك وعرضه والاستمتاع بوقتك في المعرض أيضاً، ويمكنك أن ترتدي قميص عليه عبارة “I took CS50”.
الأفكار المطروحة
علوم الحاسوب
علوم الحاسوب تركز بشكل رئيسي على حل المسائل باستخدام أفكار وأدوات ونظريات محددة سنتعرف عليها خلال هذا الكورس. أي أننا سنعمل على الوصول إلى حل للمسائل باستخدام “التفكير الحسابي”.
التفكير الحسابي
والتفكير الحسابي، يمكن تعريفه (بشكل مبسط) على أنه “التفكير مثل الحاسوب”. التفكير الحسابي هو مجموعة من طرائق حل المسائل التي سنتعرف عليها خلال هذا الكورس التي يمكنك تطبيقها لحل المسائل في مختلف المجالات ومنها مجال البرمجة. التفكير الحسابي طريقة تفكير منهجية منظمة دقيقة، ستساعدك على تنظيم تفكيرك في مختلف المجالات حتى لو لم تكن متصلة بالتقنية، حيث تساعد على تمثيل الأفكار بشكل صحيح ودقيق والتعبير عنها بشكل أفضل.
حل المسائل أو حل المشكلات
حل المسائل هو تحويل المدخلات إلى مخرجات، حيث المدخلات تمثل الموضوع الذي نريد إيجاد حل له، والمخرجات تمثل ناتج الحل، وفي الوسط لدينا “آلة الحل” التي سنتعرف كيف يمكننا بناؤها بحيث تحول المدخلات التي نمررها لها إلى المخرجات التي نريد.
flowchart LR
-->|inputs|B
نظام العد الثنائي
مقارنة مع نظام العد العشري
ترميز المحارف
آسكي
يونيكود
ترميز الألوان
تمثيل البيانات
إذا كنت تستقبل بريداً إلكتkرونياً أو تفتح ملفاً نصياً، سيتم التعامل مع الأصفار والوحدان على أنها تمثل حروفاً وكلمات، أما إذا فتحت البيانات نفسها في برنامج تحرير صور مثل فوتوشوب سيحاول التعامل معها على أنها صور وألوان، وإذا فتحتها في إكسل سيحاول تفسيرها على أنها معادلات وأرقام وحسابات.
تمثيل البيانات يعتمد على السياق، نفس السلاسل من الأصفار والوحدان قد تفسّر عدة تفسيرات مختلفة حسب اختلاف السياق. عندما تكتب برنامجاً بلغة مثل C، عليك تحديد نوع البيانات التي يجب تتعامل معها، حتى يتم تفسيرها كأرقام أو حروف أو شيء آخر. لن تحتاج أن تكتب الأصفار والوحدان بنفسك، لكن عليك أن تخبر الحاسوب كيف يفسرها ويتعامل معها.
إذا نظرت إلى صورة نقطية، وزودت حجم الصورة كثيراً، سترى النقاط المفردة، سترى البكسلات في الصورة، وكل بكسل منها يمثل 24 بت من البيانات. فإذا كنت تملك ملف صورة بحجم 3 ميغابايت، أي 3 مليون بايت، غالباً هذه الصورة تحوي 1 مليون بكسل لأنك تحتاج 3 بايت لكل بكسل لتمثيل هذه الألوان (طبعاً هذا لا يأخذ بعين الاعتبار الضغط وغيرها من الاعتبارات). ولذلك أحجام ملفات الصور تكبر وتكبر كلما زادت جودة ودقة الصورة، بسبب زيادة عدد البكسلات المخزّنة فيها.
الموسيقى
كيف نمثل الموسيقى والأصوات بالأصفار والوحدان؟ أو كيف نمثلها بالأرقام؟