اليوم إن شاء الله بنتكلم بشكل عام عن المصاق، شو
هو، شو بحكي، إيش اللي هناخده فيه، هل مشاريع، فيش
مشاريع، عشان كل واحدة برضه يكون عندها تخيل عن
مصاقنا اليوم، لكن في البداية أنا بدي أبدأ أسأل سؤال،
إنتوا اليوم ليش جايين؟ اتعرفوا عليا، عرفتولي، وسامعة
شهور، أهلا و سهلا نتعرف على طبيعة المادة يعني نتعرف
على طبيعة المادة، طيب إنتوا قبل هيك سمعتوا عن حاجة
اسمها compiler؟ وين سمعتوا عنها؟ طيب
إيش معناه compiler؟ كويس إيش معناه compiler؟ إيش
بيحول؟ بيحول the high level للآلة the assembly للآلة الـ
high level ال assembly طيب و اللي هنا إيش رأيهم؟
المنطقة هي إيش رأيهم؟ طيب إحنا خليني عشان نفهم
أهمية ال compiler و ليش ال compiler موجود نرجع بالـ
history شوية ده أول computer إنعمل طبعا أول
computer إنعمل إحنا حكينا قبل ذلك يمكن كان جد
الغرفة هذه كبيرة كتير و كان مكلف جدا فوق المليون
دولار حاجة و كان إمكانياته قليلة جداً مقارنة
بالكمبيوترات تبعت اليوم أو حتى الكمبيوترات اللي
قبل عشر سنة طبعا كيف كانت برمجة الكمبيوترات الأولى؟
إيش لغة الكمبيوترات اللي بتفهمها أو القالب
بتفهمها؟ هي ال machine language اللي هي إيش؟ اللي
هي الأصفار و الوحايد يعني إنت عندك عشان ال machine
تفهم لازم التعليمات أو ال instructions اللي تكون
مكتوبة تكون على شكل واحد zero واحد زي هيك إلى آخره
أصفار و وحايد طب السؤال المهم ليش لغة الآلة أصفار
و وحايد؟ يعني ليش أنا محكوم بالأصفار و الوحايد
كلغة آلة؟ إيش السبب؟ لأنه نقف لأنه نقف إيش ده خلاه
نقف؟ هاد الواحد و 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 للصورة the 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 طبعًا الـ compiler احنا بنستخدمه زي
ما أنا قلت هو في العادة المصطلح تبعنا دائمًا كان
دائمًا في الـ high level language و الـ low level
language لكن مش معناه أن الـ compiler مش موجود في
أماكن أخرى كثيرة لأ، الـ compiler هو باختصار إذا بدنا
نقول يعني in general هو ترجمة من شكل ألف إلى شكل
باء، يعني في عندي شكل معين أنا بدي أنّه ينعاد نفس الشيء
مكافئ له لكن بصورة مختلفة عنه، صورة باء، الآن عشان
أنتقل من صورة ألف إلى باء لازم في النص مُفترض لازم
في النص compiler، طبعًا بغض النظر شو صورة ألف شو صورة
باء ممكن high level لـ high level ممكن low level لـ
low level ممكن من high لـ low level ممكن whatever
فطول ما أنا بتكلم ترجمة من صورة إلى صورة أو تغيير
من شكل إلى شكل معناه أن أنا بتكلم عن الـ compiler
لكن احنا بالتأكيد خلال مساقنا هنتكلم عن الـ
compiler بصفته من high إلى low level يعني هناخد
معظم الأمثلة على أساس أنه من high لـ low language
لكن ما يقتصر تفكيرك أنه بس هنا الـ 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 عليهم في الـ Java أنتِ بتقدري تكتبي unlimited
codes في الـ Java infinity كام code بنتقدر نكتب من
الـ Java ما لنهاية جد ما بدك تكتبي أكواد فالمسكين هذا
الـ 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 فيعني في النهاية المشروع تطبيق عملي
لكل الكلام اللي قعدنا نشرحه فيه في الـ code وهذا كويس
إليك عشان تفهمي المساق كويس و تتأكدي أنكم فاهمين كل
الـ 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 إذا في رسومات
هي موجودة في الكتاب و في الآخر بنقعد نشرح اللي
بدنا إياها يعني باستمرار هنشتغل على الكتاب و على ال
.. على اللوح إن شاء الله