لكي تفهم كيفية عمل الحاسوب فعليك تعلم لغة التجميع Assembly [ما مدى صحة هذه العبارة؟]

قرأتها في إحدى اﻹجابات في موقع Quora وقائلها مهندس برمجيات يعمل منذ ما يقرب من ثلاثين عاما .

وهذا جزء من كلامه (حسبما أتذكر) :

هناك العديد من المبرمجين حديثي العهد عندما أرى مشاريعهم أجد بعض اﻷخطاء والتي أرجع سببها لعدم قدرتهم على الفهم الكامل لكيفية عمل الحاسوب .. أقترح على من يريد إجادة أي لغة برمجة أن يفهم آلية عمل الحاسوب أولا وفي هذا الصدد أقترح عليه تعلم لغة التجميع Assembly "

وفي وقت لاحق شاهدت فيديو للدكتور عبد الله عيد في حلقات "كلام مبرمجين" يدعو فيها لتعلم لغة C لفهم كيفية عمل الحاسوب .

وهنا أود معرفة الفارق بين اللغتين وهل لا زال لهما وجود وهل توجد بالفعل فائدة من تعلم إحداهما ؟ أم اﻷفضل اختصار الوقت وتعلم لغة أحدث مثل Java,Python .... إلخ


ليس ضروريا, كل شئ في الدنيا و خاصة في التقنية مبني على شئ آخر, حتى مبادئ لغة ال Assembly يمكن بنفس المنطق أن تقول انك لكي تتقنها تحتاج دراسة معماريات المعالجات و معماريات المعالجات تحتاج دراسة الالكترونيات الرقمية و الالكترونيات الرقمية تحتاج دراسة مبادئ الدوائر و الالكترونيات و هكذا حتى تصل الى الفيزياء و الكيماء و و و الخ

في النهاية انت لا تحتاج أكثر من طبقة أدنى من الطبقة التي تعمل عليها, و اذا واجهت مشكلة كبيرة يمكنك ان تتعمق أكثر, لكن أكثر من هذا مجرد تكلف و تضييع وقت.

هذا ما حدث معي بالفعل , وجدت أنني أفتح أبوابا لا حصر لها !!

في نطاق البرمجة أدني شيء هي لغة التجميع والآلة، ولا يتّصل ما هو دونهما (من معمارية المعالج والإلكترونيات) بها، إلا إذا أردت المعرفة العامة.

كيف ستعرف ماهو ال Register مثلأً و كيف يختلف عن الذاكرة العامة, أو لماذا تقسم الكود الى data segments و code segment و خلافه من المفاهيم التي قد تختلف جذرياً اذا كتب Assembly على معماريات Intel أو على معماريات ARM أو معماريات أخرى, كل شئ مبني على أساسيات و متصل ببعضه.

يَعرف النواحي البرمجة فقط لهذه الأشياء (وإن أراد أن يستزيد فهذا شيء آخر)، فالمُسجّلات هي ذواكر داخل المُعالج بحجم كذا وهي بسرعة المعالج (أسرع من الذاكرة الرئيسية)، وطرقة التعامل معها - برمجيًّا - هي كذا وكذا وكذا...، وكذلك بالنسبة للمقاطِع المُختلفة (مقطع الشفرة، ومقطع المُكدّس، ومقطع البيانات، ...). أما اختلاف المعماريات فما يجب أن يُلمّ بهي هي تلك الإختلافات البرمجية التي يمكن معرفتها دون المعرفة الدقيقة بالإلكترونيات وما شابه ذلك.

نعم هناك ارتباط بين العلوم، ولكن في حدود علم ما هناك حدٌّ، العِلمُ به فقط يكفي للعمل في نِطاق تخصصه.