# برمجة سي/لماذا تتعلم لغة البرمجة سي؟

سي هي لغة البرمجة الأكثر استخدامًا لتصميم وتطوير أنظمة التشغيل بشكل عام. كان أول نظام تشغيل يطور بلغة السي هو نظام يونكس. كُتبت أيضًا نُظم التشغيل اللاحقة مثل جنو ولينكس بلغة البرمجة سي، ولكن لا تقتصر لغة البرمجة سي على تطوير أنظمة التشغيل فحسب، بل هي أيضًا تعد المُلهمة والأساس للغات عالية المستوى الأكثر شيوعًا المتواجدة اليوم. في الواقع، صُممت وطورت لغات البرمجة بيرل وبي إتش بي وبايثون وروبي بلغة البرمجة سي.
على سبيل القياس، لنفترض أنك ستتعلم الإسبانية أو الإيطالية أو الفرنسية أو الرومانية. هل تعتقد أن معرفة اللغة اللاتينية سيكون مفيدًا؟ تمامًا كما كانت اللاتينية أساس كل تلك اللغات، فإن معرفة لغة البرمجة سي ستمكنك من فهم وتقدير عائلة كاملة من لغات البرمجة المبنية على أساس اللغة سي، حيث تتيح معرفتك بللغة سي الحرية.

### لماذا اللغة سي وليس لغة المُجمع؟

السبب الأكبر لتعلم لغة البرمجة سي بدلًا من لغة المُجمع، هو أنه من الأسهل والأسرع كتابة الكود في اللغة سي مقارنة بلغة المُجمع لمهمة برمجة معينة. حيث أنه باستخدام اللغة سي، ستكتب عددًا أقل بكثير من سطور التعليمات البرمجية، وستكمل المهمة بشكل أسرع بكثير، وبجهد عقلي أقل بكثير مما لو كتبته في لغة المُجمع. ومع المُجمعات والمترجمات الحديثة اليوم، فإن الملفات القابلة للتنفيذ التي تم تجميعها من الكود المصدري للغة سي ستعمل عادةً أسرع من الملفات المكتوبة "يدويًا" باستخدام لغة المُجمع. فقط في بعض الحالات النادرة، وفقط إذا كنت تعرف حقًا ما تفعله، يمكن أن توفر لغة المُجمع مزايا سرعة مهمة بدلاً من أكواد اللغة سي الذي تم تجميعه باستخدام مترجم لائق.
ومع اللغة سي، لا يتعين عليك التضحية بالكثير من مستوى التحكم المنخفض التي تنشده في كيفية تنفيذ التعليمات البرمجية الخاصة بك. تُترجم عادة جمل وعبارات اللغة البرمجية سي بشكل نموذجي إلى عدد قليل من تعليمات المُجمع. لكن اللغة سي توفر لك أيضًا مكتبة برمجية كبيرة لمساعدتك في تنفيذ المهام ذات المستوى المنخفض التي تُفضل عدم التعامل معها في البرمجة.
ميزة كبيرة أخرى للغة سي هي قابلية النقل. المعالجات المركزية المختلفة لها مجموعات تعليمات مختلفة. إن الحاجة إلى إعادة كتابة أكواد لغة المُجمع وتحسينها لكل بنية كمبيوتر ترغب في تنفيذ التعليمات البرمجية عليها مهمة شاقة. ومن ثم فإن إحدى نقاط القوة الرئيسية للغة سي هي أنها تجمع بين العالمية وقابلية النقل عبر بنى أجهزة الكمبيوتر المختلفة بينما لا تزال تمنحك نفس النوع من التحكم في الأجهزة منخفض المستوى الذي تحصل عليه من خلال لغة المُجمع. هذا يعني أنه يمكنك كتابة التعليمات البرمجية المصدرية للغة سي مرة واحدة وتجميعها بسهولة في ملف ثنائي لاستخدامها على مجموعة متنوعة من الأجهزة.
على سبيل المثال، يمكن تجميع برامج اللغة سي وتشغيلها على الآلة الحاسبة أتش بي 50جي (معالج إيه آر إم)، والآلة الحاسبة تي آي-89 (معالج 68000) ، وهواتف بالم أو إس كوبليت الذكية (معالج إيه آر إم) ، وأجهزة آي ماك الأولية (باور بي سي) ، وآردوينو (أتمل أيه في آر) وأجهزة آي ماك العاملة بمعالجات أنتل (أنتل كور 2 دول). كل من هذه الأجهزة لها مُجمعها الخاص الذي لا يتوافق تمامًا مع مُجمع آي جهاز آخر. تُمكنك لغة البرمجة سي من تشغيل التعليمات البرمجية الخاصة بك على هذه الأجهزة بجهد أقل بكثير.
فهل من المستغرب أن لغة سي هي لغة شائعة؟
مثل تساقط الدومينو، يتبع الجيل القادم من البرامج اتجاه أسلافه. تحتوي أنظمة التشغيل المُصممة في لغة سي دائمًا على مكتبات نظام مُصممة في لغة سي. تُستخدم مكتبات النظام هذه بدورها لإنشاء مكتبات برمجية ذات مستوى أعلى (مثل أوبن جي إل، أو جتك)، وغالبًا ما يقرر مصممو هذه المكتبات استخدام اللغة التي تستخدمها المكتبات البرمجية للنظام حيث يستخدم مطورو التطبيقات المكتبات عالية المستوى لتصميم برامج معالجة الكلمات والألعاب ومشغلات الوسائط وما شابه. سيختار الكثير منهم البرمجة باللغة التي تستخدمها المكتبة البرمجية من المستوى الأعلى، وهكذا يستمر النمط مرارًا وتكرارًا...
بالرغم من ذلك، يمكن أن يكون تعلم لغة المُجمع ممتعًا وجديرًا بالاهتمام لأنه يمكن أن يمنحك فهمًا عميقًا لكيفية عمل جهاز الحاسوب الخاص في المستويات المنخفضة جدًا. وسيساعدك تعلم لغة المُجمع بالتأكيد على أن تصبح مبرمجًا أكثر مهارة بلغة سي، ولذلك نحن نُشجعك على تعلم لغة المُجمع بكل الطرق الممُكنة، ولكن عندما يحين وقت القيام بعمل حقيقي، سترغب بالتأكيد في إنجازه باستخدام لغة سي.

### لماذا اللغة سي وليس لغة أخرى؟

الغرض من التصميم الأساسي للغة سي هو إنتاج كود محمول مع الحفاظ على الأداء وتقليل البصمة بقدر الإمكان (وقت الحوسبة، استخدام ذاكرة الحاسوب، عمليات القرص الصلب، إلخ.). هذا الأمر مفيد لنظم التشغيل أو الأنظمة المدمجة أو غيرها من البرامج التي يكون للأداء فيها أهمية كبيرة (حيث وجود الواجهة “عالية المستوى" ستؤثر على الأداء). باستخدام لغة سي، من السهل نسبيًا الاحتفاظ بصورة ذهنية لما يفعله سطر معين حقًا، لأن معظم الأشياء مكتوبة بشكل صريح في الكود. تحتوي لغة سي على قاعدة بيانات كبيرة للتطبيقات منخفضة المستوى. وهي اللغة "الأم" لنظام يونكس، مما يجعلها مرنة ومحمولة. لغة سي مستقرة وناضجة ومن غير المرجح أن تختفي لفترة طويلة وقد تم نقلها إلى معظم إن لم يكن كل المنصات.
أحد الأسباب القوية هو تخصيص الذاكرة. على عكس معظم لغات البرمجة ، تسمح لغة سي للمبرمج بالكتابة مباشرة على الذاكرة. تم تصميم التركيبات الرئيسية في لغة سي مثل الهياكل والمؤشرات والمصفوفات لبناء الذاكرة ومعالجتها بطريقة فعالة ومستقلة عن الآلة. بشكل مخصوص، تمنحك لغة سي إمكانية التحكم في تخطيط الذاكرة لهياكل البيانات. علاوة على ذلك، يخضع تخصيص الذاكرة الديناميكي لسيطرة المبرمج (مما يعني أيضًا أن إلغاء تخصيص الذاكرة يجب أن يتم بواسطة المبرمج). اللغات مثل جافا وبيرل تُعفي المبرمج من الحاجة إلى إدارة معظم تفاصيل تخصيص الذاكرة والمؤشرات (باستثناء تسرب الذاكرة وبعض الأشكال الأخرى من الاستخدام المفرط للذاكرة). يمكن أن يكون هذا مفيدًا لأن التعامل مع تخصيص الذاكرة عند إنشاء برنامج عالي المستوى عملية معرضة بشكل كبير للخطأ. ومع ذلك، عند التعامل مع كود منخفض المستوى مثل جزء من نظام التشغيل الذي يتحكم في الجهاز، توفر لغة سي واجهة موحدة ونظيفة. هذه الإمكانيات غير موجودة في معظم اللغات الأخرى.
في حين أن اللغات البرمجية بيرل وبي إتش بي وبايثون وروبي قد تكون قوية وتدعم العديد من الميزات التي لا يتم توفيرها افتراضيًا في لغة سي، إلا أنها لا تُطبَّق عادةً بلغتها الخاصة. بدلاً من ذلك، اعتمدت معظم هذه اللغات في البداية على كتابتها بلغة سي (أو لغة برمجة أخرى عالية الأداء)، وستتطلب نقل تنفيذها إلى نظام أساسي جديد قبل استخدامها.
كما هو الحال مع جميع لغات البرمجة، فإن ما إذا كنت ترغب في اختيار لغة سي على لغة أخرى عالية المستوى هو مسألة رأي ويمكن أن تُحدد المتطلبات الفنية والتجارية اللغة المطلوبة.