اليوم ان شاء الله بنتكلم بشكل عام عن المصاق، شو
هو، شو بحكي، ايش اللي هناخده فيه، هل مشاريع، فيش
مشاريع، عساس كل واحدة برضه يكون عندها تخيل عن
مصاقنا اليوم، لكن في البداية أنا بدأ أسأل سؤال،
انتوا اليوم ليش جاي؟ اتعرفوا عليا، عرفتولى، وسامعة
شهور، أهلا و سهلا نعرف طبيعة المادة يعني نعرف
طبيعة المادة، طيب انتوا قبل هيك سمعتوا عن حاجة
اسمها compiler؟وين سمعتوا عنها؟ طيب
إيش معناه compiler؟ كويس إيش معناه compiler؟ إيش
بيحول؟ بيحول assembly للآلة ال high level للآلةالـ
high level ال assembly طيب و اللي هنا إيش رأيهم؟
المنطقة هي إيش رأيهم؟ طيب إحنا خليني عشان نفهم
أهمية ال compiler و ليش ال compiler موجود نرجع بال
history شوية ده أول computer انعمل طبعا أول
computer انعمل احنا حكينا قبل ذلك يمكن كان جد
الغرفة هذه كبير كتير و كان مكلف جدا فوق المليون
دولار حاجة و كان إمكانياته قليلة جدامقارنة
بالكمبيوترات تبعت اليوم أو حتى الكمبيوترات اللي
قبل عشر سنة طبعا كيف كانت برمج الكمبيوترات الأولى؟
إيش لغة الكمبيوترات اللي بتفهمها أو القالب
بتفهمها؟ هي ال machine language اللي هي إيش؟اللي
هي الأصفار و الوحايد يعني انت عندك عشان ال machine
تفهم لازم التعليمات أو ال instructions اللي تكون
مكتوبة تكون على شكل واحد zero واحد زي هيك إلى آخري
أصفار و وحايد طب السؤال المهم ليش لغة الآلة أصفار
و وحايد؟ يعني ليش أنا محكوم بالأصفار و الوحايد
كلغة آلة؟ إيش السبب؟ لأنه نقف لأنه نقف إيش ده خلّه
نقف؟ هاد الواحد و زرعش معناه هقل نقف بس ليش أنا
محكوم إلاها؟ يعنيقصة كهربا في القالة انت ال
machine كيف انا بدأ اتعامل معها؟ بدي اقوله يا في
كهربا وفيش كهربا، يا في volt يا فيش volt، مش هيك
في النهاية؟ هو كيف بدأ .. كيف القالة بدأ تستوعب
مني؟ كيف بدأ تفهم مني؟ طبعا الآن عندنا ال binary
لأنه بيمثل هذه اللغة، اللي هي الصفر الواحد، اللي
هي في voltage فيش voltage، في طيار فيش طيار، في
كهربا فيش كهربا، whatever true, false، كله صح في
النهاية، بس أنا انجبرت على اللغة هذه لأنه القالة
أو ال computer مافهمش للغة الكهربا الموجودة
وبالتالي أنا صرت ملزمة على ال digits اللي هما 0 و
1 وبالتالي أنا عشان أبرمج أول computer كان موجود
كان لازم أنا أكتب التعليمات تبعتي على شكل وحيد و
أصفر يعني ممكن تلاقي شكل ال code زي هيك مثلا 10111
ممكن حاجة زي هيك يكون هذه معناها روح اجمع register
كذا مع register كذا وحط الناس في register كذا شوف
كل هالمعنى مخبأ ممكن يكون في إيش في التعليمة هائلة
على شكل أصفر و وحيد طبعالغة برمجة زي هذه أتوقع
هتكون صعبة جدا، ليش؟ لأن انت حتى ال file تبعك اللي
بتكتب فيه ال language تبعتك هتكون من أول ما تبدأ
ال file one zero one one zero one one الاخر لغاية
الاخر طبعا هذا بالنسبة لك انت تستغرب صفر واحد واحد
صفر واحد، لكن ال computer فاهمه ان مثلا هذه
التعليمة الأولى، هذه التعليمة التانية، هذه
التعليمة التالتة، هذه التعليمة الرابعة وكل تعليمة
أو كل instruction لها process بدها تمأجمع اطرح
اضرب اقسم الاخره طيب الآن تخيلي انت بتبرمجي بالخطأ
جلبت الواحد هذا لل zero هذه الآن صارت كارثة كمان
خصوصا اذا في النص ال codeالواحد صار zero و لا ال
zero صار واحد، مش بده يعرفني وان الخطأ اللي صار،
صح ولا لأ؟ يعني حتى مراجعة ال code و حتى البرمجة
بلغة ال machine ما لها صعبة جدا عشان يقالوا احنا
بنعمل في حل أسهل شوية على الناس اللي هي لغة ال
assembly يعني أول ما طلع لغة ال assembly إيش هي
قصة ال assembly؟ يعني أجه قالبدل ما انا مش هذه
معناها add مثلا ايش المشكلة لو انا جيت ل table
معين مثلا و قولت والله code ال add مثلا زي ما هو
في الجهاز 01101 هذا code ال add مثلا و code ال sub
كذا و code ال باقية العمليات كذا مثلا و ال
register هذا مثلا R7 هي codeه مثلا و register 1 هي
codeه مثلاوصرت أنا بدل ما اكتب بالصورة هاي انا
اكتب بصورة add التعليم هذا اكتبها زي هيك الان add
R7 فاصلة R1 انا الصورة هذه اسهللي صح ولا لأ
كهيومان اسهللي لكن في المقابل اذا انا بدأ اكتب
بالصورة هاي لازم يكون في حد يرجع ال code هذا
للصورة هاي صح ولا لأ عشان هيك في حاجة في ال
assembly اسمها assemblerال assembler وظيفته simple
خالص مجرد عملية mapping والله هو كاتب add اه والله
ال add هي codeهاوالله هو كاتب sub سب هاي كوده
والله كاتب R7 هاي كودها إلى آخرين فلازم يكون في في
النص حاجة اسمها assembler وعمليته سهلة جدا أنه
بيصير بيرجع الحاجات اللي أنا كتبتها لإيش لأصفر
وحيد وبالتالي أنا بكون اتحول هذا لهاي عن طريق ال
assembler مظبوط و بعدين صار عملية run الآن سؤالنا
المباشر مين الأسهل في ال .. في ال .. في البرمجة
إليك انت هاي ال language والله هاي ال languageال
assembly أسهل بكتير من ال binary إلا إنه برضه ال
assembly صعب علينا شويةيعني أنت بتتذكر أخدتي مصادق
assembly قبل هيك بتلاحظيها جافة بتلاحظيها مش .. مش
سهلة كتير يعني أنا لو بدي أجمع مثلا الخمسة زائد
ستة زائد سبعة زائد تمانية بدي أضطر أكرر ال add
أكتر من مرة لأن ال add مابقدرش أحط فيها إلا مثلا
two operands وكل مرة بدي أحط الناتج و أضيف عليه
operand تاني صح ولا لأ فال assembly بتحسي مالها
برضه صعبة شوية لكن بالتأكيد أسهل بكثير من مينمن
لغة ال binary صح ولا لا؟ ليش؟ لأن على الأقل لما
بكتب add R7 R1 بكون فاهم أنه المقصود أني بدي أجمع
هذه مع هذه و أضع النتيجة هذه مثلا لما بقول كاتب
sub or الاخري فأكيد الطريقة هذه والشغل هذا أسهل
بكتير من ما أشوفأصفر و واحدة طب شو اللي عمل الحل
يعني إيش اللي خلّه مسموح أكتب هيك وجود ال
assembler لو لو وجود ال assembler هذا اللي بيرجعها
زي ما كانت كان أنا مش بقدرش أعمل عملية هذه صح ولا
ده؟ الآن فكروا بنفس الترتيب و بنفس الأسلوب قالوا
طب ليش ما نخلي الحياة أسهل للناس في البرمجة و ليش
ما نعمل الصورة هاي مثلا نيجي يكتب X تساوي Y زائد Z
زائد W زائد 10 مثلا ليش ما نكتب صورة زي هيك؟ مش
هذه الصورة أسهل لناتكتبيه زي .. زي الرياضيات
العادية قالوا طب ليش ما نخلي البرمجة أسهل على
الناس في ال loops و في كل شيء قالوا يا عم ماشي
بنقدر نخليها أسهل بشرط شو الشرط أن يكون في حدا
automatic قادر يحول هذا اللي انكتب بالhigh يرجعها
لإيش مش مشكلة يرجعها لل assembly و من ال assembly
لل binary أو من هنا مباشرة نروح لل binary طبعاأحنا
ال simpler شغله simple عشان هي كلمة اللي .. اللي
.. اللي بيحول من هنا لهنا أو بيحول من هنا لهنا مش
هتفرق كتير لأنه هنا لهنا مش هالقصة الصعوبة كيف من
هنا أجي لهنا هذا اللي من هنا لهنا لأن الصورتين
مختلفات كليا صح ولا لأ عشان هي كان الكلام ماشي يا
سيدي احنا بنعمل high level languageبنعمل ال
features اللي بتسهل على الناس البرمجة لكن مش هنقدر
نسوي هذا الكلام إلا بشرط يكون فيه اشي موجود
software موجود automatic مش إنسان كمان software
موجود automatic يحول من هذه الصورة اللي احنا
بنفهمها ك human ليش للأصفر والوحيدوالله إذا هذا
موجود أصبح فيه إمكاني أن برمج بهذا الطريقة وبالفعل
هذا الكلام موجود الآن مين اللي هيروح يترجم ويعيد
كتابة ال code من الصورة high للصورة high ال
compiler باقتصاد عشان هيك إنت لما بتعمل أي code
جابة ده بتتذكري أول حاجة بتعمليها compilation قبل
ما تعملي ال run إيش يعني compilation يعني إنت هذا
ال code اللي مكتوب بال high level language هوب هوب
هوب هوب اتحول ل binary machineطبعا لا مانع يروح ل
assembly و بعدين ال assembler يحولها مش مشكلة يعني
شغل ال assembler شئ سهل جدا و صغير جدا مقارنة بشغل
ال compiler فمابتفرج معاه يضيف العملية بتاعة ال
assembler في الآخر فال compiler ممكن يروح يطلع ال
assembly و ممكن ال compiler نفسه على طول ايش يسوي
يعمل شغل ال assembly لأنه ولا ايش شغل ال assembly
بدوش ذكاء كتير بدوش تفكير كتير مجرد عمليات mapping
و انتهت حسابات خفيفة شوفتوا كيف عشان هيككان لزاما
لازم يكون موجود عندي أنا ال compiler واضحة إيش ال
compiler؟ ال compiler باختصار هو software يقوم
بترجمة ال code أو إعادة كتاب ال code زي ما بدك
اللي هو بال high level لإيش؟ ل low level أو ل
binary ويعطي العافية خلاص جهز طبعا أكيد لو في
أخطاءفي ال code اللي أنا كاتبه مش هقدر أروح
العملية ال run لإن ال compilation بوقفني بيضل يقول
لي في خطأ هنا في خطأ هنا في خطأ هنا ليش لإنه بدي
أروح البرنامجللتنفيذ بعد هيك فكيف تروح ينفذ وفي
خطأ عنده؟ فعشان هيك لازم يكون ال code مكتوب بشكل
سليم وصحيح حتى ال compiler يطلعه جاهز انه خلاص انا
ترجمته لأصفر وحيد مافي أخطاء وبتيجي بعدك مرحلة ال
run خلاص اعمل تنفيذ الآن خلاص ال code صار مكتوب
بأصفر وحيد حمله وعلى طول ايش نفذه فهي باختصار
موضوع ال compiler طبعاالكمبايلر احنا بنستخدمه زي
ما انا قلت هو في العادة المصطلح تبعنا دائما كان
دالش في ال high level language و low level
language لكن مش معناه ان الكمبايلر مش موجود في
أماكن أخرى كثيرة لأ الكمبايلر هو باختصار إذا بدنا
نقول يعني in general هو ترجمة من شكل ألف إلى شكل
باء يعني في عندي شكل معين انا بدي انعاد نفس الاشي
مكافئله لكن بصورة مختلفة عنه صورة باءالآن عشان
انتقل من صورة ألف إلى با لازم في النص مفترجب لازم
في النص compilerطبعا بغض النظر شو صورة ألف شو صورة
بقى ممكن high level ل high level ممكن low level ل
low level ممكن من high ل low level ممكن whatever
فطول ما أنا بتكلم ترجمة من صورة إلى صورة أو تغيير
من شكل إلى شكل معناه ان انا بتكلم عن ال compiler
لكن احنا بالتأكيد خلال مساقنا هنتكلم عن ال
compiler بصفته من high إلى low level يعني هناخد
معظم الأمثلة على اساس انه من high ل lowlanguage
لكن ما يقتصر تفكيرك أنه بس هنا ال compilation يعني
أديكي مثال بسيط أنت عندك مثلا في ال database ال
SQL language أنت بتروحي تكتبي مثلا command معينة
بيروح بيطلعلك tables و بيطلعلك مرتبين و مش صح ولا
لأ طب هو كيف فهم أنا كاتب بصورة معينة و طلعت
النتيجة بصورة تانية هنا لازم compiler يفهم ال SQL
كيف هي ال command و يروح يجلبها على طول للنتج أنا
صار بده compilerالـ Silicon Compiler نفس الفكرة في
الـ VHDL وغيره ولغات الـ hardware مرات في الآخر
بتتم التحويل لغاية ما تصير بدنا نروح نعمل الدائرة
نفسها للـ chip نفسها كيف بتتحول من هاي لهاي لازم
compiler شوفت انت كيف يعني ما يقتصر تفكيرك ان ال
compiler هو بس هذا تعالجابة اللي حول من high ل low
مش هيك هو صح هذا مثال عليه تطبيق عليه لكن احنا لأ
في النهايةممكن أجيب أكتر من مكان الخلاصة أنه من
شكل ألف إلى باق معناها أنا لازمني أنا compiler
لعملية التحويل هذه باختصار ال compiler تمام الآن
طبعا بالنسبة لموضوع ال compiler هيكون مفيد ومهم
لكم كتير خصوصا في الناس اللي بيحب يبرمجوا في
المستقبلبرمجيات و applications و مش عارف ايش
هتستفيدى من مصادق ال compiler ليش أنا بقول هتستفيد
منه يعني البعض ممكن يقولك طب أنا مش هستفيد منه
طالما هو compiler و مبرمجي و ترجم خلاص من hi ل low
و هو موجود و خلصنا وين أنا هستفيد انا أقولك وين
هتستفيد الان عشان أقدر أسوي موضوع ال compilation
لازم يكون في عندي مجموعة من الخطوات أو ال faces
بالتدريج أديكي أبسط خطوةإيش أبسط خطوة؟ إنه لازم
يكون في عندي قدرة على الدخول على الملف اللي مكتوب
فيه الـ Quota الجابة ويكون في عندي قدرة على تقطيع
كل الكلام المكتوب إلى وحدات مفهومة يعني بمعنى لما
انت تكون كاتبة int x تساوي عشرة مش هذه الـint ال I
مع ال N مع ال T لها معنى keyword مش هذه واحدة
واحدة مفهومة اليك صح ولا لأ المفروض انهيكون الـ
compiler يجرى الـ I يكمل يجرى ال N يكمل يجرى ال T
يكمل لاجى فرق اه هذه ال Int واحدة واحدة هذه ال
keyword فيروح يقول يا جماعة لجيت انا واحدة واحدة
اسمة keyword مثلا بعدين يمشي يلاقي فرقات يقول
بتشيا هي يمشي يلاقي ال X لاجى فرق يقول ال X هذه
واحدة واحدة اسمة identifier بعدين تخيلي طب لو مش
لحالة ال X لو انا كاتب XYZ مع بعض ككلمة لازم يميز
ان ال X مع ال Y مع ال Z هذه الكلمة هي identifier
لازم يميز إن اليساوي هذه لها معنى لحال لازم يميز
إن واحد مع زيرها ده رقم لحد فأكيد لازم يكون في
طريقة معينة إنه يقطع الملف إلى وحدات إلى tokens
وعشان نعرف هذا الكلام أكيد في methods وفي أكيد
استراتيجيات و techniques كيف احنا نقطع هذا الكلام
إلى وحدات طب هذا أنا هاخده عشان أتعلمه جوا ال
compiler لكن وين هستفيد منه؟ افرضي أنا قاعد شغال
في المستقبل قاعد بعمل applicationوحتاجت عشان أحل
problem تبعتي إن ملفي يقطع الكلام اللي أنا كاتبه
إلى وحدات لأنني بدي أعمل شيء معين لاحق طب أنا لو
مش عارف ال techniques اللي في ال compiler بدي أتعب
و أنا كيف طب بدي أقطع الكلمات؟ كيف بدي أعرف ال I و
ال N و ال T كلمات؟ الصورة ده هتصير الدوخة عشان
تقدر تجسم كلماتك بينما لو أنت كنت ماخد ال compiler
وعارف كيف هذه ال technique اللي بيقطع الملف لو E
units هتيجي تسحبيها و تاخديها لشغلك و تشتغلي عليه
مش شرط كمان مرة مش شرط تكون بتعملي compiler أنت
بتبرمجي في application بتبرمجي في game بتبرمجي في
software أي شيء واحتاج منك الأمر أن الملف الموجود
أقطعه لا كلمات أو لا وحدات على طول ال techniques
اللي اتعلمتيها هنا بتقدر تاخديها هناك طب مثال تاني
الآن حتى لما باخد أنا هدول الوحدات مع بعض في phase
تاني في ال compiler بتقوللي هل هدول ركبين ك syntax
صح ولا غلطلأن انت عارف في syntax ال language فحتى
لو أنا أخدت الكلام مقطع ال units طب هدول بيركبوا
مع بعض هيك أو لو بيركبوش مع بعض فكيف بدنا نعرف؟
أكيد في methods هنتعلمهاإنه كيف هذا الكلام بيركب
مع بعضه ضمن ال syntax ولا لأ طب أنا في المستقبل
بديش أعمل compiler لكن احتجت عندي مجموعة من ال
components موجودين مجموعة من ال units موجودين بدي
أعرفهم متطابقين مع حريطة معينة عندي ولا لأ لسبب
معين أو ل task معين كيف بدي أسوي في الحالة هذه
بلجأ كمان مرة للكلام اللي اتعلمته هان باخده هناك
يعني الرسالة اللي بتوصلها أنه مش بالضرورة تحصر
تفكيرك أن كل شي أنا قاعد باخده في ال compiler هو
فقط يستخدم ال compiler لأ كل ال techniques اللي
هتتعلميها ال methods اللي هتتعلميها ممكن تستخدميها
في أشياء أخرى لاحقا حسب أنت وين اشتغلتي حسب إيش
بدك تبرمجي حسب إيش ال publication تبعكفكويس أن
تكونوا عارفين هذه ال methods بعدين حتى نفسه ال
compiler حتى نفسه ال compiler في ال stages تبعاته
و في ال steps تبعاته بيروح بيجيب علم أصلا موجود في
مساقات تانية عشان يستفيد منها و يعمل ال task بيجيب
ال tree بيجيب حاجة اسمة regular expression في
حاجات كتيرة هناخدها لاحقا فحتى ال compiler اعتمد
على علم موجود و جابه واستفاد منه و علمني شغلات في
tasks معينةهذا كله ان شاء الله هنتعلمه بالتدريج
بيقدر بفيدك في أماكن تانية فكمان مرة القصة مش انه
تفكر ايه خلاص أنا بتعلم compiler يعني العلم هذا مش
هيفيدني اللي انا باخده الا لل compiler لأ مش هي
فهذه المادة بالعكس هتكون مفيدة جدا احنا ال
compiler هذا كمجرد مثال كيف انا بحاول من high ل
level واستخدم كل ال methods الحلوة الجديدة هذه ال
techniques فهذه كلها ممكن ال methods تستخدميها برا
في أماكن تانية تمام؟ طيبالان احنا ايش بدنا ناخد؟
طبعا عشان تكونوا في الصورة احنا في عندنا كتاب ال
textbook اللي بنشتغل عليه هو كتاب standard بدرس في
الجامعات برا وموجود بكثرة اللي هو .. هاي تفاصيله
.. هاي تفاصيله .. تمام؟وهي الصورة تبعات الكتاب فوق
أساس تقوله تاخدوه طبعا بنعطيكوا ان شاء الله نسخة
soft copy بعد هي انتم أحرار من خلال النادي او كيف
تطبعوه هذا برجعلكم طبعا لكن احنا بنديكوا ان شاء
الله soft copy طيب الآن احنا ايش بدنا ناخد طبعا
هذا الكتاب كبير وغالبا بتدرس في فصلين غالبا بيكون
في compiler one وغالبا في compiler two لكن احنا لأ
بالتأكيد تقريبا بناخد نص المساخ اللي هو ال
compiler oneإيش اللي بناخده طبعا زي ما أنتوا
شايفين أو طريقة عرض الكتاب رائعة كتير ليش؟ لأنه
بعد أول chapterين بعد بس أول chapterين بكون اتكلم
عن ال compiler ككل بكل خطواته يعني مثلا ال
compiler فيه سبع خطوات أو تمانية أو ستة أو عشرة
whateverبيكون في ال chapter 2 الأولانيات ذكر كل
العشر خطوات بدنا نعمل تقطيع، بدنا نعمل تأكيد، بدنا
نعمل تحويل، بدنا نعمل برمجة، بدنا نعمل كذا، كذا،
كذا، كذا، كذا، كذا، كذا، كذا، كذا، كذا، كذا، كذا،
كذاالان التفاصيل المملة لكل step أخدناها يعني مثلا
في ال compiler أول phase كنا تقطيع صح؟ عشان ياخد
الوحدات فبحكي في chapter 2 عنه بشكل basic بشكل
مختصر لكن بعدك بقول لها يا جماعة في هذا تفاصيل
كتير كيف أقطع وشو المشاكل و الكلمات و ال languages
و .. في قصص كتير فعشان كان بتلاقي أجا أخد chapter
أفرضه بس في chapter لحاله بيتكلم عن هذه الخطوةنفس
الفكرة الخطوة اللي وراها اللي هي هل هذا بيجي في ال
syntax بتاع ال language ولا لأ صح أنا أخدته بشكل
basics في chapter 2 لكن بيجي بعد هيكة في chapter 4
بشكل مفصل و مميل كيف هذه ال method و ال methods
الأخرى اللي بتتحقق أن الكلام أو ال units راكبة مع
الخريطة أو مع ال syntax فهيبدأ يفصل و هكذا لكل ال
similar steps اللي موجودين عندي احنا ان شاء الله
هنمشي جد ما نقدر في مساقنا جد ما نقدروصلنا خمسة
وصلنا ستة وصلنا سبعة وين ما نوصل هنضلنا ماشي احنا
غالبا يعني اخر مرة وصلنا لشبطر ستة لما أخدناها
السنة اللي فاتت وصلنا لشبطر ستة المرة هاي ان شاء
الله نغطي ستة وإن كدرنا كمان نكمل بنكمل وصلنا لستة
بنوقف عن ستة مش مشكلة وين ما نوصل هنضلنا ماشي ان
شاء الله تمام هاي باختصار بالنسبة لموضوع ال
compiler المساقمش صعب أسهل مصاق في المصاقات اللي
أنا درستكم إيها قبل هيك أسهل بكتير من العمارة
العمارة كانت بدها تتذكر و تفكير و فهم و تركيب و
design و قصص لأ ال compiler مافيش فيه ال compiler
باختصار في عندي techniques في عندي methods بس بدي
أفهم كيف بيشتغلوا و أسير و أسئل عليهم و أحل أسئلتي
عليهم يعني القصة في ال compiler أنا بعتبرها واحد
زي واحد سواء اتنين مدهششفهي أسهل المثاقات اللي
بنعطيها يعني زي بقدر أشبهها في الدوار بتاخد
المعادلات و بتصير تحلي على المعادلات أسئلتك فإذا
أنت فهمتك هذا بيصير تحلي يعني مافيش مجارة فاكرك
فيه وهنا نفس الفكرة خلاص في method معينة في طريقة
معينة بدي أحاول أفهمها أستوعبها و بعدين أحل عليها
فما تجلجوا الموضوع اللي تبع ال compiler إن شاء
الله مش صعب لكن في المقابل بدي تتخيلوا ال
challenge الكبيرة تاعت ال compilerوكيف دي هيك
تتخيلي إيه؟ الآن انت في مساح ال assembly كان
أحيانا يجيكوا أسئلة يقولك هذا ال code مكتوب بال
high level انت اكتبيه بال assembly صح؟ كنت تتعجب
كتيرو خصوصها لما كان يكون فيه loop و مش عارف فيه
جصاص صح ولا لأ بتحس الأمور هيك مكتفة كتير و
بتلاقيها كل ما كترت ال loops في ال code الأساسي
تصعب عليك كتير صح ولا لأ؟ و المشكلة أنه يمكن أنتي
تكتب ال code بطريقة و هي بطريقة مختلفة و هي بطريقة
تالتة و واحدة منكم يمكن ال code هيكون هو ال more
efficient عاد ايش مطلوب من ال compiler؟ المطلوب
يحل مكانكويروح يعيد كتابة هذا ال code المكتوب بال
high level language هي المعقد اللي فيه كل الدنيا و
ال for و ال objects مش عارف ايش يروح يكتبها لحاله
هذا ال computer أو هذا ال software يكتبها بلغة
assembly ومطلوب منه أن يكون هذا أفضل code يكتبه
يعني ما استخدمش أشياء صلاة على الفاضي ال memory
efficient كل القصص هذه فمتخيلة اللي بديه يقعد يكتب
مش إنسان في الآخر computer أو software حطه الإنسان
إنه يروح يجرى هو في نهاية ال compiler software
يروح يجرى software و يروح يفهمه و يعيد كتابته بال
assembly أو بال machine بأحسن طريقة أو بأفضل طريقة
و تخيلي إنه أنا مش عندي عشر أكواد بدي أعلم ال
compiler عليهم في الجابا انت بتقدر تكتب unlimited
codes في الجابا infinity كام كود بنتقدر نكتب من
الجاباما لنهاية جاد ما بدك تكتب اكواد فالمسكين هذا
ال compiler ايش ما يجي code ايش ما اي code لازم
يكون خادر ايشإيه حاوله وفي نفس الوقت بنطلب منه
كمان أن يحاول يكتشف لنا أخطاء يعني كمان مش أنه بس
عيد كتاب تبقى يعطيك .. مش أن أنا كمان بعطيله إياه
مكتوب صح وخد هي الصح وحاول ويعطيك العافية، لأ
وممكن أديله إياه غلط والمطلوب كمان لأ ويطلقلي
الغلط كمان ويقولي كذا وبس بس زي ما كنتوا تشوفوا في
ال compilation فال task في ظهرها واضح أنها معقدة
وصعبة كتيرلكن ان شاء الله من خلال ال steps اللي
هنشوفها هلاقي الأمور straightforward و الأمور ان
شاء الله مش هتكون صعبة جدا تدريجيا هتبين معانا أيه
القصة باختصار طيب الآن بالنسبة
لتوزيع الدرجات فيه عندنا 25% اللي هم عند المهندسة
ال messعبارة عن homeworks، exercises، quizzes، اش
ما يكون زي ما بيحصل كل فصل بتحددلكم ان شاء الله
كيف توزيع ال 25 درجة طبعا في منهم projectطبعا ال
project فيه للمساخ project مش معقد مش صعب زي أيام
العمارة تتذكروا عملنا رسمة ال design بعد ما خدنا
تفاصيلها و اتعلمناها و كل صغيرة و كبيرة بس
قلنالكوا اعملوها في project عشان كل العلم اللي
أخدتيه تشوفيه في هذا ال project وكان مفيد جدا لكم
هنا نفس الفكرة أنا جاء بتعلم chapter 3 الخطوة
الأولى بالتفصيل ب codeها chapter 4 الخطوة التانى
بالتفصيل ب codeها اتعلمت اربع خمس شباتركيف نحوّل
من صورة إلى صورة في الآخر بطلب منك مشروع على أربع
خمس شباتر هدول و بديكي مثال بقولك مثلا حوليلي من
الصورة ألف للصورة بقى بس هي كل الفكرة فبديكي
تستخدمي هذا انت إيششباترك كيف بدنا نجطق كيف بدنا
نتأكد أنه ضمن ال language كيف بدنا نعمل
translation فيعني في النهاية المشروع تطبيق عملي
لكل الكلام اللي قعدنا نشرحه فيه في الكود وهذا كويس
إليك عشان تفهم المصحق كويس و تتأكد أنكوا فاهمين كل
ال techniques كويس فماتيجي لجوش موضوع المشروع
مشروع عادي يعني مش هو معقد ولا في اشي طول ما انت
فاهم المصحق صح بنحل على طول طبعا غير المشروع فيهم
work صغيرفي نهاية chapter 2 chapter 2 ايش قلنا
بيسوي مش بيعطيكي مقدمة كاملة عن ال compiler وبيعطي
المقدمة على مثال محدود صغير يعني بمسك مثال صغير
وبقولك ها شوفي كيف جطعنا ها شوفي كيف حولنا ها شوفي
كيف اتكدنا من ال structure فبمشي خلال ال chapter 2
على مثال صغير في آخر chapter 2 بنقولك هذا المثال
الصغير اللي قعدنا نشرح فيه كل التفاصيل وال code
كله مكتوببدنا نقولك اتفضلي بس ابليلي ال code جمعي
في ملف واحد و اعملي simulation و اتأكد ان الموضوع
تمام فهو هيكون already موجود كله ع شكل مقاطع على
حب الدروس في ال chapter و بالاخر انت بدي تسيكي
تعمليه في code واحد و تشوفيه و تتأكد الأمور تمام
طبعا حتى هذا ال code مكتوب كامل بالكتاب القديم
بلغة ال C و مكتوب كامل بس مقطع و مجزء بال Java في
الكتاب الجديدفمابدوش اشي يعني عشان انا هسملها بس
homework من باب انه بهمني ان تكون كل ال phases
بتاعة ال compiler بعد chapter 2 انك عارفاها عشان
لما ندخل في كل chapter تكوني فاهمة فانا عمليا
بعتبر هو اهم اشي لغاية chapter 2 انك فهمت الصورة
العامة الكاملة و بعدين بدنا نفصل في التفاصيل و
عندك طبعا طبعا زي ما انتوا عارفين انا بحبش اتدخل
في النهاية في درجات المهندسةعشان هي كضروري أول
بأول تكونوا عارفين قداش بتاخدوا في ال quizzes في
ال homework و كل إشي مش بعد امتحان ال final نيجي
نقول فيه غلط و فيه صح هذا مرفوض عشان هي كنتوا
باستمرار لازم تكونوا عارفين علاماتكوا و أنا حتى
كمان بحكي للمهندسة باستمرار أنه لازم الطالبات
يكونوا عارفين علاماتهم بشكل مستمر و بالضبط تتذكروا
في مواديدايمًا قبل ال final بتلت أيام أو بسبوع
بقولها نزلي و حط الدرجات تلت أيام عشان المراجعة
النهائية و بعد هيك خلاص بتخلص بتسكر بتسلمي ليش أنا
بقول هذا الكلام لأن مجرد ما استلم أنا من هالملف
ممنوع حد يلعب فيه ولا حد يغير فيه بحرضهاش خلاص لأن
خلاص يكون عطينا الوقت الكافي و الكل شاف و الكل
أرفع لأن المشكلة عادية أن أنت الطالببدخل الامتحان،
بخبص شويهان واللهان، بيصيب يرجع للدفاتر القديمة
وانا إليهانة، لأ من الأول، من الأول، إلك حق خدين،
من الأول طارضي وشوفي وخلصي الأمور عشان ندخل ال ..
ال .. ال final بدون مشاكل ان شاء الله، بديش حدا
ييجي يقولي المهندسة ما نزلتش، ماعملتش، الآن هذا
واجبك أنت تتبعي مع المهندسة، في حال تم في تقصير،
تجونيوانا نفس الكلام بحكي للمهندسة وقوله واجبك أنت
تنزل الطالب علشان أضمن أن أنتوا وياه نزلتوا
وشوفتوا الدرجات تمام ال mid-term طبعا عليه 25% و
ال final عليه 50%هذه المية في المية وفي النهاية زي
ما انا بقول دايما انا مجرد اني بجمعلك درجاتك ليس
الا يعني انا مش مع انه والله الدكتور رسبنا الدكتور
نجحنا انا مافيش عن دي هذا الكلام انا في النهاية
بتعب معاكي في المصاق بشرحلكيها بشكل كويس أي
السفصالات عندك اهلة وسهلة في اي وقت بنجسرش نهاية
لكن في النهاية انا كمان ملزم اجيبلك امتحان منطقي
جدا مايسألك الا عن المصاق اللي انا بتكلم فيه في
الآخر انت حرقدرش بتجمعي يجمعي أنا بالعكس بكون سعيد
جدا لما الناس تجيب مية وصارت كتير يجيبوا في ال
compiler مية ففي النهاية الدرجة اللي بتحصيلها هي
الدرجة اللي أنت حصلتيها وانا بكون سعيد جدا كل ما
حصلتي أكتر لكن في المقابل لو ماحصلتيش درجة درجة
low ولا fair ولا .. ماقدرش أعملك حاجة عشان هيك
دروري أول بول تكونوا ناشطين و تحاولوا دايما تجمعوا
درجاتكم و تجيبوا درجات عالية عشان تخلصوا و تتخرجوا
ان شاء الله بدون مشاكلطيب الآن زي
ما تشايفين أيضا مواعيد الامتحان محددة النصفي و ال
final بالنسبة لل final زي ما تشايفين في تاريخ عشرة
جون إذا احنا اتفقنا بناتنا لاحقا laterإنه نقدمه
شوية بنقدمه لإنه أنا يمكن أسافر في أربع جون
وبالتالي شهرين بغض النظر احنا هادرين ناتفق عليها
لاحقا وبالتالي أنا كنت حابب قبل ما أسافر أن نكون
امتحاننا وخلصنا وخدت الدرجات بس هذا بيصيرش إلا في
حالة واحدة في حال إنه كان في اتفاق كامل بيننا
جميعا على موعد تانيفي حال مافيش اي اتفاق خلاص
الامتحان بيضال كما هو و لاحقا بنشوف قصة انه متى
بتصلح و لا متى بنعمل بشوف لما ان أرجع أو بنحلها
يعني في النهاية لكن خلينا بنتكلم عن موضوع الامتحان
مش الآن، لاحقا لأنه لسه في ناس بتسحب، في ناس
بتضيف، بعد ما يخلص السحب و الإضافة و يثبت العدد
النهائي بنتكلم و بنشوف إذا في إمكانية و لافيش
إمكانية بالنسبة لل important notice وهذا أنتوا
عارفين من زمانأنا بحب دائما يكون مرات ال quiz
فجائي في بداية المحاضرة و بدون سابق أنذار طبعا زي
ما أنا قلت قبل هيك أنا مش كتير بحب أعطي ال quiz في
بداية المحاضرة الصحيح يعني لأنه هياخد شوية من
الوقت ومابعطيهوش غير لما أكون مضطر ومابكونش مضطر
إلا لما تكونوا مش دارسينبس هي الفكرة لأن أحيانا في
بعض الدروس دائما في كل المثقات بتتمد على الدرس
السابق يعني ممكن أنا يكون في عندى code بنشعله على
محاضرتين مثلا أكون خلصته في المحاضرة الأولىأجي على
المحاضرة التانية طب انت مش دارس ال code في النص
الأولاني في المحاضرة السابقة طب مش هتفهمي في النص
التاني وهذا بيعمل مشاكل نفس الفكرة ممكن يكون في
technique او method معين بنشرح على محاضرتين طب
أخدنا النص الأول تبقى في المحاضرة الأولى طب انت مش
دارسها وكده تكملي معايا النص التاني فهذا بتعمل
صحيح مشكلة لي ومشكلة لكم في الشرح عشان هيك انا كل
اللي بطلبه دائما ان انت تدرسي بس اخر محاضرةانت
خدتيها بس و اللي بيطلبه مش إعجاز و مش تعقيد خلاص
انت خدتي محاضرة قبل ما تدخل محاضرتك الجديدة ربع
تلت ساعة نص ساعة بشوف إيش اللي أخدته طول ما أنتوا
ماشيين على هذا الكلام و طول ما أنتوا active و
مافيش مشاكل خلاص مافيش ده على الـ quiz لما أنا
لاجيكوا لأ بتدرسوه شؤال فاضي و أنا بشرح فوادي و
أنتوا مش دارسين آخر محاضرة ساعتها أنا بصير مضطرإني
أنا أعطي ال quiz هذا فإن شاء الله من .. من يعني من
الجائزة ال quiz و أتوقع المطلوب مش إشي معقد من
مصلحتك إن أنتوا قابلوا نتيجة محاضرتك آخر ربع طول
الساعة أو آخر محاضرة تشوفيها في ربع طول الساعة هذا
من مصلحتك أنتي و الكل عارف هذا النظام من زمان و
أنا مصر يعني عليه عشان أنتوا ترتاحوا و أنا أرتاح
في عملية الشرح إن شاء الله رب العالمين آخر نقطة ال
important advice و هاي أنا يمكن لو فتحت Icy Bus
هتلاقيني دايما انا حاططها و لو واخدتي معايا مساق
في المستقبل او اخدتي معايا مساق في المجلسية
بتلاقيني برضه انا حاططها حاططها لأهميتها الكبيرة
موضوع القدرة على التفكير احنا يمكن مشكلة معظمنا
انه بحب يحفظ الأشياء او خلاص الاشي اللي شافه بيقول
انا بعرفهحاجة تنسيقليها ما شفتيهاش قبل هيك ايه
بتستسلمي و .. و .. و بتقبليها صعبة و مش عارف ..
ليش؟ لأنه مش متعودة تشغلي دماغك أو تحاولي تفكر
فالتفكير أنا دايما بقوله هي مهارة المفروض أنه يعني
تنمى بشكل إيجابي و أنه يصير عندك القدرة على
التفكير خصوصا أن انتوا ما شاء الله عليكوا السنة
الجاية ولا اللي براها بتكونوا مهندساتوأكيد غالبا
المهندس يطرح عليه مشاكل و problems مش بالضرورة
يكون شافها قبل هيك لكن على الأقل لازم يكون عنده
القدرة يفكر فيها مش بالضرورة يحلها يمكن يحلها و
يحلشها و يحلها دي لكن لازم يكون في عندك زمان بقول
دايما القدرة على التفكير في حل المشكلة و هذا بيجيش
بين يوم و ليلة و دايما أنا بقوله من زمان بيجيش بين
يوم و ليلة لازم بالتدريج .. لازم بالتدريج الواحد
يحاول ينمي الفكرة طبعا و دايما بقدم نصيحة على
الأقل من خلال المساقىو كويسة ان انت تستنسخ الفكرة
لمساقعة التانية كيف انا ممكن أنام المهارة هذه اقل
ما يقال في ال exercises يعني انت بعد ما بتاخد
الدرس في انت عندك مجموعة من الأسئلةالكارثة الكبيرة
اللي بيعملوها كتير من الطلاب و الطلبات بيروح بجيب
ال solution manual و بتعب و بدور عليه أو بجيب الحل
قبل ما يتطلع في السؤال أو يتطلع السؤال و بسرع
يتطلع الحل حتى لو ما بدرس السؤال بتاعه أي سؤال اه
هيحله اي سؤال هيحله و كأنه قاعد بحفظ أسئلة و ببحث
حله وهنا المشكلة طب ايش المطلوب؟ المطلوب انت لأ
تشوف السؤال و تفكر فيهوتحاول تحليه وتجي شمال وتجي
يمين ماقولش لازم تحليه لكن فكري فيه كتير استنفذي
تفكيرك فيه في الآخر بشوف حلله يا ستة على الأقل
بعرف وين مشكلتي وين هو جفت ليش محلتوش الاخر هي مرة
مرة عن مرة مرة عن مرة بتلاقي حالك تلاقي حالك ستة
بتشوف السؤال الأول مرة قادرة تفكر فيه مرة عن مرة
بتكسري حاجز الرهبة أنك تشوفي أسئلة جديدةساعدت حتى
مش فارقة معاكي أجف امتحان سؤال الأول مرة جديد بانت
متعود أصلا تشوف الأسئلة الأول مرة و تفكر فيها و
إشي بتحليه و إشي ما شاء الله بتعرف وش و بعدين
بتعرفي كيف نحل فهذا أشي كويس من الأول حاولي تمشي
على هذا الأسلوب مش في هذا المادة بس في كل موادك
تعودي زي هيك خلاص شغل دماغك بعدين في شغلة تانية
مهمة في المحاضرة نفسها و أنا بحب نظام ال two ways
في المحاضرة التجاهيل two directionsاكتر مشكلة انه
ممكن الطالب انا ماديش تاخد المعلومة خلاص و منى و
خلاص تتبريها مسلمة و خلاص تمشي عليها، لأ خديها فكر
فيها حليليها شوف فيها راكبة معاك مش راكبة معاك،
زابطة معاك مش زابطة معاك و نقش فيهااسألي إذا في
عندك أي شكك، أي شيء، أي اقتراح، أي تعديل، اكويس
المناقشة دي منيحة، الكل بيستفيد منها، فدائما
اتعودي الكلام اللي بنحكيه في المحاضرة، احاول لأ
اتناقش فيه، تكون مقتنعة فيه، إذا في مشاكل انت مش
هيفهمها من وجه نظرك، احكيهامنها الصورة بتتضح إليك
وتتضح للآخرين فحاولوا دايما أن تكون المحاضرة
باتجاهين لكن بالتأكيد بديش خطع يعني برضه أنتم
متعودين أنا كل ربع تلسية على ما أخلص معلومة بجف و
بفتح المجال للأسئلة بديش خلال الشرحتروح فجأة تسأل
أو تتكلم ليش؟ لأنه أنا بكون ماشي فيه طلاب لسه
قاعدين بتسلسلوا معي، ماوصلناش للآخر، ابتيجي أنت
بتعمل القطع، مساكين هدول مرات إيش بعضهم، بهبط تحت،
خلاص، بضيعوا أين كنا، بتضطر بدك تعيدي من أول عشان
تروح ترجعيه يفهم القصة، فهذه مشكلة عند كتير طلاب،
ديروا بالكوا، في طلاب خلاص عملتيله قطع قبل
المعلومة ما تكمل، وخصوص إذا قلتي كلام مخيف إلهم
كمان، وشطحت في مكان تاني في المعلومة،بتخربي عليهم
عشانك احنا بنقول دايما لأ اصبروا سجلي أسئلتك سجلي
ملاحظاتك في الورقة أول ما أنا أخلص النقطة اللي بدي
إياها نفتح المجال للأسئلة و النقاش و جد ما بدك
اسأليه و جد ما بدك ناقشي وهذا بالعكس أنا بحب
النقاش دايما في الأمور هذه فحاولوا دايما تتعودوا
زي هيك ان شاء الله ربنا يعلميهم طيب أنا هيك تقريبا
خلصت اللي بدي أقوله اليوم كمحاضرة افتتاحية للمصاق
الآن إذا أنتم عندكم أي سؤال أو أي تعليق أو أي
استفسار بخص المصاق اتفضلوا تقولوا طبعا بس في كان
سؤال عند الطلاب بدي أقوله هنا برضه يمكن تسألوا أو
لأ هل يعتمد المصاق على أشياء سابقة فعلية يعني مثلا
assembly أي مساق تاني أو مش عارف إيش طبعا لأ أنا
بدا رايحك بس مطلوب تكون عندك معرفة طفيفة خفيفة
basics في الجابع أو في أي لغة برمجة بس يعني حتى مش
مطلوبة البرمجةبتعقيداتها و بجصصها و تفاصيلها لأ لأ
بس basics و هتلاقي chapter واحد في section رقم ستة
يمكن عشر و خمس عشر صفحة مش هناخده لكن هنمره عليه
سريع هذا بس عامل زي review لل basics بتاعة البرامج
اللي تكون يعرفها إيش ال procedure إيش ال variable
إيش ال function إيش ال passing لل arguments يعني
حاجات simple خالص فهذا بس اللي بيلزمنا تكون يعرفها
غير هي كما تجلجيش الأمور كلها simple اه اتفضل بدي
تسأل انا اتفضل
في أسئلة اتفضلي
لا
إيش دخل هاذي في هاذي؟ لأ مالهمش علاقة بالمرة
مالهاش دعوة الأتمة هذا مصطلح تاني عشان يكمل
المعلومات الناقصة من البيانات الموجودة مالهاش
علاقة ال compiler مجرد مترجم ال compiler يترجم فقط
يعيد كتابة الصورة من ألف إلى با
لأ طبعا، هنقول هذا الكلام مرة جاية، لأ بس بعملية
ال compilation في ال block اللي صار فيه التغيير
طبعا هذا هنتكلم عنها المرة جاية بالتفاصيل،
بتستعجلوش، كل المعلومات ان شاء الله هناخدها
بالتفاصيل لاحقا، احنا اليوم بس basics، أيش اللي هو
الموضوع بشكل عام، أيش المساقر بشكل عام، وكيف هنمشي
فيه، السلة بس اليوم، المرة جاية ان شاء الله هنبدأ
فعليا و ندخل بكل التفاصيل ان شاء الله، المرة
الجاية، في أسئلة أخرى؟ تمام الأمور؟هنأتمد على
الكتاب إحنا في مساقنا هنأتمد على الكتاب طبعا
هنأتمد على الكتاب و هنأتمد على اللوح يعني أنا
دائما بحب أفتح خلاص على ال section إذا في رسومات
هي موجودة في الكتاب و في الآخر بنقعد نشرح اللي
بدناياها يعني باستمرار هنشتغل على الكتاب و على ال
.. على اللوح إن شاء الله