المحاضرة 1: شرائح مدخل إلى علوم الحاسوب كاملة
المحاضرة 1: مدخل إلى علوم الحاسوب (Introduction)
المصادر والنسبة والترخيص
المادة الأصلية: آنا بيل (Ana Bell)، MIT OpenCourseWare (MIT OCW)، معهد ماساتشوستس للتكنولوجيا، مقرر 6.100L: مقدمة في علوم الحاسوب والبرمجة باستخدام Python، خريف 2022 (Fall 2022).
هذه ترجمة وتكييف عربي غير رسمي وفق رخصة CC BY-NC-SA 4.0: النسبة–غير التجاري–المشاركة بالمثل، ولا تعني اعتمادًا أو تأييدًا من MIT أو MIT OCW. شروط الاستخدام والاستشهاد.
منهج الترجمة: لكل صفحة في ملف الشرائح عنوان مستقل ورقم مطابق. نُقلت الجداول والمخططات إلى نصوص وجداول تحافظ على تسلسلها وقيمها، ونُقلت التعليقات التوضيحية المرئية في PDF. الشيفرة وشبه الشيفرة (Pseudocode) محفوظتان بالإنجليزية، وأسطر أوامر Python داخل الحصار مُترجمة. لم تُضمَّن صور أو صفحات PDF. الصورة المرجعية في الشريحة 25 («مصدرها غير معروف، جميع الحقوق محفوظة») مستثناة صراحةً من رخصة المصدر وحُذفت، ودلّنا على موضعها.
الشريحة 1: أهلًا وسهلًا!
(WELCOME!)
(نزّل الشرائح وملفات .py من موقع الصف لمتابعة الشرح).
6.100L، المحاضرة 1 — آنا بيل (Ana Bell).
الشريحة 2: ماذا سنتعلّم اليوم
- معلومات المقرر.
- ما هي الحوسبة (Computation).
- أساسيات بايثون (Python):
- العمليات الرياضية (Mathematical Operations).
- متغيّرات بايثون وأنواعها (Python Variables and Types).
- ملاحظة: تُنشر الشرائح وملفات الشيفرة قبل كل محاضرة.
- نوصي بشدة بتنزيلها قبل بدء الصف.
- دوّن ملاحظاتك وشغّل ملفات الشيفرة معي.
- نفّذ فقرات «جرّب بنفسك» (You try it) داخل الصف.
- لن يُسجَّل الصف.
- سيكون الصف مباشرًا عبر Zoom لمن هم مرضى أو في عزل صحي.
الشريحة 3: لماذا تحضر الصف؟
- ستحصل من هذا المقرر على ما تضعه فيه.
- المحاضرات (Lectures):
- تمنحك حدسًا (Intuition) تجاه المفهوم.
- تعلّمك المفهوم.
- اسألني أسئلة!
- أمثلة على المفهوم.
- فرصة للتدريب والتدريب والتدريب (practice practice practice).
- كرّر ذلك.
الشريحة 4: مخطّط المقرر
عناصر المقرر ومكان كل منها:
- المحاضرات (LECTURES): الفهم المفاهيمي (KNOWLEDGE OF CONCEPTS).
- تمرين قصير أثناء الاستراحة (RECITATION): مهارة البرمجة (PROGRAMMING SKILL).
- تمارين الإصبع (FINGER EXERCISES): إلزامية (MANDATORY).
- مجموعات المسائل (PSETS): للتدريب (PRACTICE)، اختيارية (OPTIONAL).
- الاختبارات (EXAMS).
- ساعات المكتب (OFFICE HOURS).
- Piazza: حل المسائل (PROBLEM SOLVING).
الشريحة 5: الموضوعات
- حل المسائل باستخدام الحوسبة (Solving problems using computation).
- لغة البرمجة بايثون (Python programming language).
- تنظيم البرامج المعيارية (Modular Programs).
- بعض الخوارزميات (Algorithms) البسيطة والمهمّة.
- تعقيد الخوارزمية (Algorithmic Complexity).
الشريحة 6: هيا بنا!
(LET’S GOOOOO!)
الشريحة 7: أنواع المعرفة
- المعرفة التقريرية (Declarative Knowledge) هي عبارات تذكر وقائع.
- المعرفة الفعلية/الأمرية (Imperative Knowledge) هي وصفة أو «كيف تفعل هذا».
- البرمجة هي كتابة وصفات لتوليد الوقائع.
الشريحة 8: مثال عددي
- الجذر التربيعي للعدد هو العدد بحيث .
- ابدأ تخمينًا (Guess) :
1) إذا كان g*g قريبًا بما يكفي من x، توقّف وقل إن g هو الجواب
2) وإلا، اعمل تخمينًا جديدًا بمتوسط g و x/g
3) باستخدام التخمين الجديد، كرّر العملية حتى يصبح قريبًا بما يكفي
- لنجرّبها على مع تخمين أوّلي :
| 3 | 9 | 16/3 | 4.17 |
الشريحة 9: المثال العددي (تابع)
| 3 | 9 | 16/3 | 4.17 |
| 4.17 | 17.36 | 3.837 | 4.0035 |
الشريحة 10: المثال العددي (تابع)
| 3 | 9 | 16/3 | 4.17 |
| 4.17 | 17.36 | 3.837 | 4.0035 |
| 4.0035 | 16.0277 | 3.997 | 4.000002 |
الشريحة 11: لدينا الآن خوارزمية (Algorithm)
- تسلسل من خطوات بسيطة (A Sequence of simple steps).
- تدفّق التحكم (Flow of Control) الذي يحدّد متى تُنفَّذ كل خطوة.
- وسيلة لتحديد متى نتوقف.
الشريحة 12: الخوارزميات هي وصفات، والوصفات هي خوارزميات
- خبز كعكة من علبة جاهزة:
1) اخلط المكونات الجافة
2) أضف البيض والحليب
3) صُبّ الخليط في قالب
4) اخبز على 350F لمدة 5 دقائق
5) غرس عود أسنان في الكعكة
6a) إن لم يخرج عود الأسنان نظيفًا، أعد تكرار الخطوتين 4 و5
6b) وإلا، أخرج القالب من الفرن
7) كلْ
الشريحة 13: الحاسوب آلة تنفّذ الخوارزميات
- الحاسوب يفعل أمرين:
- يؤدّي عمليات بسيطة (Simple Operations): مليارات في الثانية!
- يتذكّر النتائج (Remembers Results): مئات الجيجابايتات من التخزين!
- ما أنواع الحسابات؟
- المدمجة في الآلة، مثل
+. - التي تعرّفها أنت مبرمجًا.
- المدمجة في الآلة، مثل
- الفكرة الكبرى هنا؟
الشريحة 14: لن يفعل الحاسوب إلا ما تأمره به
(A COMPUTER WILL ONLY DO WHAT YOU TELL IT TO DO.)
الشريحة 15: الحاسوب آلة تنفّذ الخوارزميات
- حاسوب البرنامج الثابت (Fixed Program Computer):
- مجموعة خوارزميات ثابتة (Fixed set of algorithms).
- هذا ما كان لدينا حتى الأربعينيات القرن الماضي (1940’s).
- حاسوب البرنامج المخزَّن (Stored Program Computer):
- الآلة تخزّن التعليمات وتنفّذها.
- الرؤية المفتاحية (Key insight): البرامج لا تختلف عن أنواع البيانات الأخرى.
الشريحة 16: حاسوب البرنامج المخزَّن
- تسلسل من التعليمات مخزَّن داخل الحاسوب.
- مبنيّ من مجموعة معرَّفة مسبقًا من التعليمات البدائية (Primitive Instructions):
1) الحساب والمنطق (Arithmetic and logical)
2) الاختبارات البسيطة (Simple tests)
3) نقل البيانات (Moving data)
- برنامج خاص (المفسّر، Interpreter) ينفّذ كل تعليمة بالترتيب.
- يستخدم الاختبارات لتغيير تدفّق التحكم عبر التسلسل.
- يتوقف عندما تنفد التعليمات أو ينفّذ تعليمة الإيقاف (halt).
الشريحة 17: بنية الحاسوب
مكوّنات الآلة كما في المخطط:
- الذاكرة (MEMORY) — تحتوي على العناوين: 3456، 3457، 3458، 3459، 3460، 3461، 7889، 7890، 7891، 7892، 7893، 7894.
- وحدة التحكم (CONTROL UNIT) — وفيها عدّاد البرنامج (program counter).
- وحدة الحساب والمنطق (ARITHMETIC LOGIC UNIT).
- المدخل (INPUT).
- المخرج (OUTPUT).
- وما تفعله الآلة هو تنفيذ العمليات البدائية (do primitive ops).
تسلسل التعليمات المخزَّن في العناوين 3456 إلى 3461:
3456 Add
3457 Store
3458 Add
3459 Store
3460 Compare
3461 Print
قيم الذاكرة كما تظهر في المخطط:
| العنوان | القيمة |
|---|---|
| 3456 | 3 |
| 3457 | 4 |
| 3458 | 5 |
| 3459 | 2 |
| 3460 | 7 |
| 3461 | 5 |
| 7889 | True |
| 7890 | False |
| 7891 | 3456 |
| 7892 | 3458 |
| 7893 | 7889 |
| 7894 | 7891 |
الشرائح 18–24: تنفيذ التعليمات خطوة بخطوة
تُعيد الشرائح من 18 إلى 24 عرض المخطط نفسه بعدّاد البرنامج في وحدة التحكم وسجلّات وحدة الحساب والمنطق ممتلئة قيمًا جديدة في كل مرة، لتُظهر تنفيذ التسلسل أعلاه واحدًا تلو الآخر. والقيم المقروءة من كل شريحة:
| الشريحة | ما يظهر في المخطط |
|---|---|
| 18 | تنفيذ التسلسل حتى المقارنة (Compare): وحدة الحساب والمنطق تحتوي على 7، وعدّاد البرنامج على 4، والعنوان 3458، ونتيجة المقارنة True. |
| 19 | قبل المقارنة: وحدة الحساب والمنطق تحتوي على 4، وعدّاد البرنامج على 3، والعنوان على 3458. |
| 20 | نتيجة المقارنة صارت False، ووحدة الحساب والمنطق تحتوي على 7، وعدّاد البرنامج على 4، والعنوان على 3458. |
| 21 | بعد المقارنة: وحدة الحساب والمنطق تحتوي على 7، وعدّاد البرنامج على 5، والعنوان على 3457. |
| 22 | تنفيذ تعليمة الطباعة (Print): وحدة الحساب والمنطق تنتقل إلى 2، ويظهر 7 في العنوان 3461. |
| 23 | وحدة التحكم تنتقل إلى 2، ووحدة الحساب والمنطق تحتوي على 7. |
| 24 | اكتمل التسلسل: وحدة التحكم على 2، والوحدة تحتوي على 7، وتظهر True. |
ملاحظة المترجم: الشرائح 18–24 هي إعادة عرض متدرّجة (Animation) للمخطط نفسه، والنص المستخرج من ملف PDF لا يحفظ موضع كل قيمة على الشريحة بدقة؛ لذلك عُرضت القيم في جدول بحسب ما يظهر في كل شريحة دون استنتاج أي حالة غير مقروءة.
الشريحة 25: العمليات البدائية الأساسية (Basic Primitives)
- أثبت تور (Turing) أنه يمكنك حساب أي شيء بآلة بسيطة جدًّا فيها ست عمليات بدائية فقط: يسار (left)، يمين (right)، طباعة (print)، مسح ضوئي (scan)، محو (erase)، لا عمل (no op).
- لغات البرمجة الحقيقية فيها:
- مجموعة أكثر ملاءمة من العمليات البدائية.
- طرق لدمج العمليات البدائية لإنشاء عمليات بدائية جديدة.
- أي شيء قابل للحساب في لغة ما قابل للحساب في أي لغة برمجة أخرى.
ملاحظة المترجم: الصورة الأصلية في هذه الشريحة تحمل إشعارًا صريحًا بأن مصدرها غير معروف وأن جميع الحقوق محفوظة، وأنها مستثناة من رخصة CC الخاصة بالمصدر؛ لذلك حُذفت الصورة ولم تُستعَض عنها.
الشريحة 26: أوجه اللغات (1)
- البنى البدائية (Primitive Constructs):
- الإنجليزية: كلمات.
- لغة البرمجة: أعداد، ونصوص (Strings)، وعملات بسيطة (Simple Operators).
الشريحة 27: أوجه اللغات (2)
- الصياغة (Syntax):
- الإنجليزية: «cat dog boy» ← غير صحيحة صياغيًا (not syntactically valid).
- الإنجليزية: «cat hugs boy» ← صحيحة صياغيًا (syntactically valid).
- لغة البرمجة:
"hi"5← غير صحيحة صياغيًا. - لغة البرمجة:
"hi"*5← صحيحة صياغيًا.
الشريحة 28: أوجه اللغات (3)
- الدلالات الساكنة (Static Semantics): أي السلاسل الصحيحة الصياغة لها معنى؟
- الإنجليزية: «I are hungry» ← صحيحة صياغيًا، لكن فيها خطأ في الدلالات الساكنة (static semantic error).
- لغة البرمجة:
"hi"+5← صحيحة صياغيًا، لكن فيها خطأ في الدلالات الساكنة.
الشريحة 29: أوجه اللغات (4)
- الدلالات (Semantics): المعنى المرتبط بسلسلة من الرموز صحيحة الصياغة وخالية من الأخطاء الدلالية الساكنة.
- الإنجليزية: قد تكون لها معانٍ كثيرة — «The chicken is ready to eat».
- البرامج لها معنى واحد فقط.
- لكن المعنى قد لا يكون ما قصده المبرمج.
الشريحة 30: أين تفسد الأمور
- أخطاء الصياغة (Syntactic Errors):
- شائعة وسهلة الرصد.
- أخطاء الدلالات الساكنة (Static Semantic Errors):
- بعض اللغات تفحصها قبل تشغيل البرنامج.
- قد تسبّب سلوكًا غير متوقّع.
- لا أخطاء لغوية، لكن المعنى مختلف عمّا قصده المبرمج.
- البرنامج ينهار ويتوقف عن العمل.
- البرنامج يعمل إلى الأبد.
- البرنامج يعطي جوابًا، لكنه جواب خاطئ!
الشريحة 31: برامج بايثون
- البرنامج هو تسلسل من التعريفات (definitions) والأوامر (commands).
- التعريفات تُقيَّم (evaluated).
- الأوامر ينفّذها مفسّر بايثون داخل صدفة (Shell).
- الأوامر (Statements) تطلب من المفسّر أن يفعل شيئًا.
- يمكن كتابتها مباشرة في الصدفة أو تخزينها في ملف يُقرأ في الصدفة ويُقيَّم.
- مجموعة المسائل 0 (Problem Set 0) ستعرّفك على هذه الأمور في Anaconda.
الشريحة 32: بيئة البرمجة: Anaconda
مكوّنان:
- محرّر الشيفرة (Code Editor).
- الصدفة/وحدة الطرفية (Shell / Console).
الشريحة 33: الكائنات (Objects)
- البرامج تتعامل مع كائنات بيانات (Data Objects).
- للكائنات نوع (Type) يعرّف أنواع الأشياء التي يمكن للبرنامج فعلها بها.
مثالان:
30- هو عدد.
- يمكننا الجمع والطرح والضرب والقسمة والأسّ وعمليات أخرى.
'Ana'- هو تسلسل من المحارف (أي سلسلة نصية، String).
- يمكننا التقاط أجزاء منه (Substrings)، لكن لا يمكننا قسمته على عدد.
الشريحة 34: الكائنات (تابع)
- كائنات قُطرية (Scalar) — لا يمكن تقسيمها:
- أعداد:
8.3،2. - قيمة بوليانية (Truth Value):
True،False.
- أعداد:
- كائنات غير قُطرية (Non-scalar) — لها بنية داخلية يمكن الوصول إليها:
- القوائم (Lists).
- القواميس (Dictionaries).
- تسلسل من المحارف:
"abc".
الشريحة 35: الكائنات القُطرية (Scalar Objects)
int— الأعداد الصحيحة، مثل5،-100.float— الأعداد الحقيقية، مثل3.27،2.0.bool— القيمتان البوليتانTrueوFalse.NoneType— نوع خاص له قيمة واحدة وهيNone.- يمكنك استخدام
type()لمعرفة نوع كائن:
>>> type(5)
int
>>> type(3.0)
float
الشريحة 36: القيم الممكنة لكل نوع
| النوع | أمثلة القيم |
|---|---|
int |
0، 1، 2، … ، 300، 301، … ، -1، -2، -3، … ، -400، -401، … |
float |
0.0، … ، 0.21، … ، 1.0، … ، 3.14، … ، -1.22، … ، -500.0، … |
bool |
True، False |
NoneType |
None |
الشريحة 37: جرّب بنفسك!
- في وحدة الطرفية (Console)، اعرف نوع كل من:
12348.999.0TrueFalse
الشريحة 38: تحويل الأنواع (Casting)
- يمكنك تحويل كائن من نوع إلى نوع آخر:
float(3)يحوّل العدد الصحيح3إلى3.0من نوعfloat.int(3.9)يحوّل — لاحظ الاقتطاع (Truncation)! — العدد العشري3.9إلى3من نوعint.
- بعض العمليات تُجري تحويلات ضمنية (Implicit Casts):
round(3.9)تُعيد العدد الصحيح4.
الشريحة 39: جرّب بنفسك!
- في وحدة الطرفية، اعرف نوع كل من:
float(123)round(7.9)float(round(7.2))int(7.2)int(7.9)
الشريحة 40: التعابير (Expressions)
- تُشكَّل التعابير (Expressions) بدمج الكائنات والعاملات (Operators):
3+2
5/3
- للتعبير قيمة (Value)، وللقيمة نوع (Type):
3+2قيمته5ونوعهint.5/3قيمته1.666667ونوعهfloat.
- بايثون تقيّم التعابير وتخزّن القيمة. فهي لا تخزّن التعابير!
- صياغة تعبير بسيط:
<object> <operator> <object>
الشريحة 41: الفكرة الكبرى
استبدل التعابير المعقّدة بقيمة واحدة، واعمل بشكل منهجي لتقييم التعبير.
الشريحة 42: أمثلة
>>> 3+2
5
>>> (4+2)*6-1
35
>>> type((4+2)*6-1)
int
>>> float((4+2)*6-1)
35.0
الشريحة 43: جرّب بنفسك!
- في وحدة الطرفية، اعرف قيم التعابير التالية:
(13-4) / (12*12)type(4*3)type(4.0*3)int(1/2)
الشريحة 44: العوامل على int وfloat
| العامل | المعنى |
|---|---|
i+j |
المجموع |
i-j |
الفرق |
i*j |
حاصل الضرب |
i/j |
القسمة |
- إذا كان كلاهما من نوع
intفالنتيجة من نوعint. - إذا كان أحدهما أو كلاهما من نوع
floatفالنتيجة من نوعfloat. - نتيجة
i/jتكون دائمًا من نوعfloat.
ما نوع الناتج في الحالات التالية؟
| العامل | المعنى |
|---|---|
i//j |
القسمة على أعداد صحيحة (Floor Division) |
i%j |
الباقي عند قسمة على |
i**j |
أُسّ |
الشريحة 45: العمليات البسيطة
- الأقواس تطلب من بايثون تنفيذ هذه العمليات أولًا.
- مثل الرياضيات!
أولوية العوامل (Operator Precedence) دون أقواس:
**
* / %
+ -
- تُنفَّذ من اليسار إلى اليمين، بالترتيب الذي تظهر به في التعبير.
الشريحة 46: كائنات كثيرة، ماذا نفعل بها؟!
قيم في الذاكرة:
a = 2
b = -0.3
x = 123
go = True
flag = False
temp = 100.4
n = 0.001
small = 0.001
الشريحة 47: المتغيّرات (Variables)
- متغيّرات علوم الحاسوب تختلف عن متغيّرات الرياضيات.
- متغيّرات الرياضيات:
- مجرّدة (Abstract).
- يمكن أن تمثّل قيمًا كثيرة:
a + 2 = b - 1
x * x = y
- متغيّرات علوم الحاسوب:
- مرتبطة (Is bound) بقيمة واحدة في كل لحظة.
- يمكن ربطها بتعبير (لكن التعابير تُقيَّم إلى قيمة واحدة!).
الشريحة 48: ربط المتغيّرات بالقيم (Binding Variables to Values)
- في علوم الحاسوب، علامة المساواة هي إسناد (Assignment):
- قيمة واحدة لاسم متغيّر واحد.
- علامة المساواة ليست تساويًا، وليست «حلّ المعادلة من أجل ».
- الإسناد يربط قيمة باسم:
pi = 355/113
- الخطوة 1: احسب القيمة في الطرف الأيمن (القيمة، VALUE)، ثم خزّنها في ذاكرة الحاسوب.
- الخطوة 2: خزّنها (اربطها) في الطرف الأيسر (المتغيّر، VARIABLE).
- استرجع القيمة المرتبطة بالاسم باستدعاء الاسم (بكتابته).
الشريحة 49: جرّب بنفسك!
- أيٌّ مما يلي مسموح في بايثون؟ اكتبها في وحدة الطرفية للتحقق.
x = 66 = xx*y = 3+4xy = 3+4
الشريحة 50: تجريد التعابير (Abstracting Expressions)
- لماذا نعطي أسماء لقيم التعابير؟
- لإعادة استخدام الأسماء بدلًا من القيم.
- يجعل الشيفرة أسهل في القراءة والتعديل.
- اختر أسماء المتغيّرات بعناية:
- الشيفرة يجب أن تُقرأ.
- اليوم، وغدًا، والعام القادم.
- منك ومن غيرك.
- لن تخطئ إن التزمت بالحروف والشرطات، ولم تبدأ الاسم برقم.
# حساب قيمة تقريبية للعدد pi
pi = 355/113
radius = 2.2
area = pi*(radius**2)
circumference = pi*(radius*2)
الشريحة 51: ما أفضل أسلوب للشيفرة؟
الصيغة الأولى:
# doing calculations
a = 355/113 *(2.2**2)
c = 355/113 *(2.2*2)
الصيغة الثانية:
p = 355/113
r = 2.2
# multiply p with r squared
a = p*(r**2)
# multiply p with r times 2
c = p*(r*2)
الصيغة الثالثة:
# calculate area and circumference of a circle
# using an approximation for pi
pi = 355/113
radius = 2.2
area = pi*(radius**2)
circumference = pi*(radius*2)
الشريحة 52: تغيير الارتباطات (Change Bindings)
- يمكنك إعادة ربط أسماء المتغيّرات بإسنادات جديدة (new assignment statements).
- قد تكون القيمة السابقة ما زالت مخزَّنة في الذاكرة، لكن المقبض (Handle) الخاص بها ضاع.
- قيمة
areaلا تتغيّر حتى تطلب من الحاسوب أن يعيد الحساب.
pi = 3.14
radius = 2.2
area = pi*(radius**2)
radius = radius+1
| المتغيّر | القيمة |
|---|---|
pi |
3.14 |
radius |
2.2 |
area |
15.1976 |
radius (بعد إعادة الربط) |
3.2 |
الشريحة 53: الفكرة الكبرى
الأسطر تُقيَّم واحدًا تلو الآخر (one after the other)، ولا تتنقّل بينها بعد. سنرى لاحقًا كيف يمكن تخطّي الأسطر أو تكرارها.
الشريحة 54: جرّب بنفسك!
- هذه الأسطر الثلاثة تُنفَّذ بالترتيب. ما قيمتا المتغيّرَين
metersوfeetعند كل سطر؟
meters = 100
feet = 3.2808 * meters
meters = 200
- الجواب: لنستخدم PythonTutor لنعرف ما يحدث بالضبط.
- تابع هذا الرابط على Python Tutor.
- أين أعلمنا بايثون أن يعيد حساب
feet؟
الشريحة 55: جرّب بنفسك!
- بدّل قيمتَي
xوyدون ربط الأرقام مباشرة. صحّح (Debug، أي أصلح) هذه الشيفرة:
x = 1
y = 2
y = x
x = y
- الجواب:
x = 1
y = 2
temp = x
x = y
y = temp
- هل ينقذك Python Tutor؟
الشريحة 56: ملخص
- الكائنات (Objects):
- الكائنات في الذاكرة لها أنواع.
- الأنواع تخبر بايثون ما العمليات التي يمكنك إجراؤها على الكائنات.
- التعابير تُقيَّم إلى قيمة واحدة، وتشمل كائنات وعمليات.
- المتغيّرات تربط الأسماء بالكائنات.
- علامة
=هي إسناد، مثلvar = type(5*4).
- البرامج (Programs):
- البرامج لا تفعل إلا ما تأمرها به.
- أسطر الشيفرة تُنفَّذ بالترتيب.
- أسماء المتغيّرات الجيدة والتعليقات تساعدك على قراءة الشيفرة لاحقًا.
الشريحة 57: بيانات MIT OpenCourseWare
MIT OpenCourseWare — https://ocw.mit.edu
6.100L: مقدمة في علوم الحاسوب والبرمجة باستخدام Python.
خريف 2022.
للحصول على معلومات عن الاستشهاد بهذه المواد أو شروط استخدامها، تفضّل بزيارة https://ocw.mit.edu/terms.