برمجة الحاسوب

برمجة الحاسوب أو كتابة الأكواد هي عملية كتابة سلاسل من التعليمات، تُسمى البرامج ، التي تتبعها الحواسيب لأداء المهام. [ 1 ] [ 2 ] وهي تتضمن تصميم وتنفيذ الخوارزميات ، وهي عبارة عن مواصفات تفصيلية للإجراءات، من خلال كتابة التعليمات البرمجية بلغة برمجة واحدة أو أكثر . يستخدم المبرمجون عادةً لغات برمجة عالية المستوى يسهل فهمها على البشر مقارنةً بلغة الآلة ، التي تُنفذ مباشرةً بواسطة وحدة المعالجة المركزية . تتطلب البرمجة المتقنة عادةً خبرة في عدة مجالات مختلفة، بما في ذلك معرفة مجال التطبيق ، وتفاصيل لغات البرمجة ومكتبات التعليمات البرمجية العامة ، والخوارزميات المتخصصة، والمنطق الصوري .

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

تاريخ

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

لقد وُجدت الأجهزة القابلة للبرمجة منذ قرون. ففي وقت مبكر من القرن التاسع، اخترع الأخوان بنو موسى الفارسيان جهازًا لتسلسل الموسيقى قابلًا للبرمجة ، ووصفا عازف مزمار ميكانيكيًا آليًا في كتابهما "الأجهزة البارعة" . [ 3 ] [ 4 ] وفي عام 1206، اخترع المهندس العربي الجزري آلة طبول قابلة للبرمجة، حيث يمكن برمجة آلة موسيقية ميكانيكية لعزف إيقاعات وأنماط طبول مختلفة، باستخدام أوتاد وكامات . [ 5 ] [ 6 ] وفي عام 1801، أصبح بإمكان نول جاكارد إنتاج أنسجة مختلفة تمامًا عن طريق تغيير "البرنامج" - وهو عبارة عن سلسلة من بطاقات الكرتون المقوى المثقوبة.

كما وُجدت خوارزميات فك الشفرات منذ قرون. ففي القرن التاسع الميلادي، وصف عالم الرياضيات العربي الكندي خوارزمية تشفير لفك الشفرات المشفرة، وذلك في كتابه "مخطوطة في فك تشفير الرسائل المشفرة" . وقدّم الكندي أول وصف لتحليل الشفرات باستخدام تحليل التردد ، وهي أقدم خوارزمية لفك الشفرات. [ 7 ]

يُؤرَّخ عمومًا لأول برنامج حاسوبي إلى عام 1843، عندما نشرت عالمة الرياضيات آدا لوفليس خوارزمية لحساب متتالية من أعداد برنولي ، وكان من المُفترض أن تُنفَّذ بواسطة المحرك التحليلي لتشارلز باباج . [ 8 ] وقد نُقلت الخوارزمية عبر ملاحظات على ترجمة ورقة لويجي فيديريكو مينابريا حول المحرك التحليلي، وكان تصميمها في الأساس من ابتكار لوفليس، كما يتضح من مراسلاتها مع باباج. مع ذلك، كان تشارلز باباج نفسه قد كتب برنامجًا للمحرك التحليلي عام 1837. [ 9 ] [ 10 ] وكانت لوفليس أيضًا أول من رأى تطبيقًا أوسع للمحرك التحليلي يتجاوز الحسابات الرياضية.

كانت البيانات والتعليمات تُخزن سابقًا على بطاقات مثقبة خارجية ، والتي كانت تُحفظ بالترتيب وتُنظم في مجموعات البرامج.

في ثمانينيات القرن التاسع عشر، ابتكر هيرمان هوليريث مفهوم تخزين البيانات بصيغة قابلة للقراءة آليًا. [ 11 ] لاحقًا ، أُضيفت لوحة تحكم (لوحة توصيل) إلى جهاز الجدولة من النوع الأول الذي صممه عام 1906، مما سمح ببرمجته لمهام مختلفة. وبحلول أواخر أربعينيات القرن العشرين، كانت أجهزة تسجيل البيانات ، مثل IBM 602 و IBM 604 ، تُبرمج بواسطة لوحات تحكم بطريقة مماثلة، كما هو الحال مع الحواسيب الإلكترونية الأولى . مع ذلك، ومع ظهور مفهوم الحاسوب ذي البرنامج المخزن عام 1949، أصبح كل من البرامج والبيانات يُخزن ويُعالج بنفس الطريقة في ذاكرة الحاسوب . [ 12 ] وقد أظهرت دورات البرمجة العملية التي تدمج بين الأجهزة والبرامج تحسينًا في استيعاب المعلومات ومشاركتها لدى طلاب السنة الأولى في الهندسة. [ 13 ]

لغة الآلة

كانت لغة الآلة هي لغة البرامج المبكرة، تُكتب باستخدام مجموعة تعليمات الجهاز المعني، وغالبًا ما تكون بالصيغة الثنائية . وسرعان ما طُوّرت لغات التجميع ، مما مكّن المبرمجين من كتابة التعليمات بصيغة نصية (مثل: ADD X, TOTAL)، باستخدام اختصارات لرموز العمليات وأسماء ذات دلالة لعناوين الذاكرة. ومع ذلك، ولأن لغة التجميع ليست سوى صيغة مختلفة للغة الآلة، فإن جهازين بمجموعات تعليمات مختلفة سيستخدمان أيضًا لغات تجميع مختلفة.

لوحة تحكم سلكية لجهاز محاسبة IBM 402. تقوم الأسلاك بتوصيل تدفقات النبضات من قارئ البطاقات إلى العدادات وغيرها من الدوائر المنطقية الداخلية، وفي النهاية إلى الطابعة.

لغات المترجمات

سهّلت لغات البرمجة عالية المستوى عملية تطوير البرامج وجعلتها أكثر وضوحًا، وأقل ارتباطًا بالأجهزة الأساسية . طُوّر أول نظام مُترجم، وهو نظام A-0 ، عام 1952 [ 14 ] على يد غريس هوبر ، التي صاغت أيضًا مصطلح "المترجم". [ 15 ] [ 16 ] ظهرت لغة فورتران ، أول لغة برمجة عالية المستوى واسعة الانتشار ذات تطبيق وظيفي، عام 1957، [ 17 ] وسرعان ما طُوّرت العديد من اللغات الأخرى، ولا سيما لغة كوبول المُخصصة لمعالجة البيانات التجارية، ولغة ليسب لأبحاث الحاسوب.

تتيح هذه اللغات المُترجمة للمبرمج كتابة البرامج بعبارات أكثر ثراءً من الناحية التركيبية، وأكثر قدرة على تجريد الكود، مما يُسهّل استهداف مجموعات تعليمات الآلة المختلفة عبر إعلانات الترجمة والأساليب الاستدلالية . وقد استغلت المُترجمات قوة الحواسيب لتسهيل البرمجة [ 17 ] من خلال السماح للمبرمجين بتحديد العمليات الحسابية عن طريق إدخال صيغة باستخدام تدوين الوسط .

إدخال التعليمات البرمجية المصدرية

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

البرمجة الحديثة

متطلبات الجودة

بغض النظر عن منهجية التطوير، يجب أن يستوفي البرنامج النهائي بعض الخصائص الأساسية. ومن أهم هذه الخصائص ما يلي: [ 18 ] [ 19 ]

  • الموثوقية : مدى صحة نتائج البرنامج. يعتمد ذلك على صحة المفاهيم الأساسية للخوارزميات وتقليل أخطاء البرمجة، مثل أخطاء إدارة الموارد (مثل تجاوزات سعة المخزن المؤقت وحالات التزامن ) والأخطاء المنطقية (مثل القسمة على صفر أو أخطاء الإزاحة بمقدار واحد ).
  • المتانة : مدى قدرة البرنامج على توقع المشاكل الناتجة عن الأخطاء (وليس الأخطاء البرمجية). ويشمل ذلك حالات مثل البيانات غير الصحيحة أو غير المناسبة أو التالفة، وعدم توفر الموارد اللازمة مثل الذاكرة وخدمات نظام التشغيل واتصالات الشبكة، وأخطاء المستخدم، وانقطاعات التيار الكهربائي غير المتوقعة.
  • سهولة الاستخدام : هي الجانب العملي للبرنامج، أي مدى سهولة استخدامه للغرض المقصود منه، أو حتى لأغراض غير متوقعة في بعض الحالات. قد تُسهم هذه الجوانب بشكل كبير في نجاح البرنامج أو فشله، بغض النظر عن الجوانب الأخرى. يشمل ذلك مجموعة واسعة من العناصر النصية والرسومية، وأحيانًا عناصر الأجهزة، التي تُحسّن وضوح واجهة المستخدم للبرنامج، وسهولة استخدامها، وتماسكها، وشموليتها.
  • قابلية النقل : نطاق منصات أجهزة الحاسوب وأنظمة التشغيل التي يمكن عليها تجميع / تفسير وتشغيل شفرة المصدر لبرنامج ما . يعتمد هذا على الاختلافات في إمكانيات البرمجة التي توفرها المنصات المختلفة، بما في ذلك موارد الأجهزة وأنظمة التشغيل، والسلوك المتوقع للأجهزة وأنظمة التشغيل، وتوافر مترجمات خاصة بالمنصة (وأحيانًا مكتبات) للغة شفرة المصدر.
  • قابلية الصيانة : هي سهولة تعديل البرنامج من قِبل مطوريه الحاليين أو المستقبليين لإجراء تحسينات أو تخصيصات، أو إصلاح الأخطاء والثغرات الأمنية ، أو تكييفه مع بيئات جديدة. تُحدث الممارسات الجيدة [ 20 ] خلال مرحلة التطوير الأولية فرقًا كبيرًا في هذا الصدد. قد لا تكون هذه الميزة واضحة للمستخدم النهائي، لكنها قد تؤثر بشكل كبير على مستقبل البرنامج على المدى الطويل.
  • الكفاءة / الأداء : مقياس لموارد النظام التي يستهلكها البرنامج (وقت المعالج، مساحة الذاكرة، الأجهزة البطيئة كالأقراص، عرض نطاق الشبكة، وحتى تفاعل المستخدم إلى حد ما): كلما قلّ الاستهلاك، كان ذلك أفضل. يشمل هذا أيضًا الإدارة الدقيقة للموارد، مثل تنظيف الملفات المؤقتة ومعالجة تسريبات الذاكرة . غالبًا ما يُناقش هذا الأمر في ضوء لغة البرمجة المختارة. مع أن اللغة تؤثر بلا شك على الأداء، إلا أن حتى اللغات الأبطأ، مثل بايثون ، قادرة على تنفيذ البرامج فورًا من وجهة نظر المستخدم. تُعد السرعة واستخدام الموارد والأداء أمورًا مهمة للبرامج التي تُشكّل عنق الزجاجة في النظام، ولكن الاستخدام الأمثل لوقت المبرمج مهم أيضًا ويرتبط بالتكلفة: فزيادة موارد الأجهزة قد تكون أقل تكلفة.

يمكن أن يساعد استخدام الاختبارات الآلية ووظائف اللياقة البدنية في الحفاظ على بعض السمات المذكورة أعلاه. [ 21 ]

سهولة قراءة شفرة المصدر

في برمجة الحاسوب، تشير قابلية القراءة إلى سهولة فهم القارئ البشري لغرض الكود المصدري ، وتدفق التحكم فيه ، وكيفية عمله . وهي تؤثر على جوانب الجودة المذكورة أعلاه، بما في ذلك قابلية النقل، وسهولة الاستخدام، والأهم من ذلك قابلية الصيانة.

شفرة المصدر في بيئة التطوير المتكاملة

تُعدّ سهولة قراءة الشيفرة البرمجية أمرًا بالغ الأهمية، لأنّ المبرمجين يقضون معظم وقتهم في قراءة الشيفرة المصدرية الموجودة ومحاولة فهمها وإعادة استخدامها وتعديلها، بدلًا من كتابة شيفرة مصدرية جديدة. غالبًا ما تؤدي الشيفرة غير المقروءة إلى أخطاء برمجية، وعدم كفاءة، وتكرار الشيفرة . وقد وجدت دراسة أنّ بعض التحسينات البسيطة على سهولة القراءة تُقلّل من طول الشيفرة وتُخفّض بشكل كبير الوقت اللازم لفهمها. [ 22 ]

اتباع أسلوب برمجة متسق يُسهم غالبًا في تحسين سهولة قراءة الكود. مع ذلك، فإن سهولة القراءة تتجاوز مجرد أسلوب البرمجة. فالعديد من العوامل، التي لا ترتبط بقدرة الحاسوب على تجميع الكود وتنفيذه بكفاءة، تُسهم في سهولة القراءة. [ 23 ] ومن هذه العوامل:

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

طُوّرت لغات برمجة مرئية متنوعة بهدف معالجة مشاكل سهولة القراءة من خلال تبني أساليب غير تقليدية في بنية الكود وعرضه. وتهدف بيئات التطوير المتكاملة (IDEs) إلى دمج كل هذه المساعدات. ويمكن لتقنيات مثل إعادة هيكلة الكود أن تُحسّن من سهولة القراءة.

التعقيد الخوارزمي

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

المنهجيات

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

تشمل تقنيات النمذجة الشائعة تحليل وتصميم الكائنات ( OOAD ) وهندسة البرمجيات الموجهة بالنماذج ( MDA ). وتُستخدم لغة النمذجة الموحدة ( UML ) في كلٍ من OOAD وMDA.

هناك تقنية مماثلة تستخدم لتصميم قواعد البيانات وهي نمذجة علاقات الكيانات ( نمذجة علاقات الكيانات ).

تشمل تقنيات التنفيذ لغات البرمجة الإجرائية ( الموجهة للكائنات أو الإجرائيةواللغات الوظيفية ، ولغات البرمجة المنطقية .

قياس استخدام اللغة

من الصعب للغاية تحديد لغات البرمجة الحديثة الأكثر شيوعًا. تشمل طرق قياس شعبية لغات البرمجة ما يلي: إحصاء عدد إعلانات الوظائف التي تذكر اللغة، [ 24 ] وعدد الكتب المباعة والدورات التدريبية التي تُدرّس اللغة (وهذا يُبالغ في تقدير أهمية اللغات الأحدث)، وتقديرات عدد أسطر التعليمات البرمجية الموجودة المكتوبة باللغة (وهذا يُقلل من تقدير عدد مستخدمي لغات الأعمال مثل كوبول).

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

تصحيح الأخطاء

أول خطأ برمجي حقيقي معروف تسبب في مشكلة في جهاز كمبيوتر كان عبارة عن عثة، تم اصطيادها داخل جهاز كمبيوتر مركزي من جامعة هارفارد، وتم تسجيلها في سجل بتاريخ 9 سبتمبر 1947. [ 26 ] كان مصطلح "الخطأ البرمجي" شائعًا بالفعل للإشارة إلى عيب في البرمجيات عندما تم العثور على هذه الحشرة.

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

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

غالبًا ما يتم تصحيح الأخطاء باستخدام بيئات التطوير المتكاملة (IDEs) . كما تُستخدم أدوات تصحيح الأخطاء المستقلة مثل GDB ، والتي غالبًا ما توفر بيئة أقل تفاعلية، وتعتمد عادةً على سطر الأوامر . تسمح بعض محررات النصوص، مثل Emacs، باستدعاء GDB من خلالها، لتوفير بيئة تفاعلية. وقد وجدت إحدى الدراسات أن تدريس اللغات المهيكلة مثل باسكال يُحسّن دقة تصحيح الأخطاء لدى المبرمجين المبتدئين وفهمهم العام. [ 27 ]

لغات البرمجة

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

يكتب ألين داوني في كتابه "كيف تفكر كعالم حاسوب ":

تختلف التفاصيل باختلاف اللغات، ولكن تظهر بعض التعليمات الأساسية في كل لغة تقريبًا:
  • الإدخال: جمع البيانات من لوحة المفاتيح أو ملف أو أي جهاز آخر.
  • المخرجات: عرض البيانات على الشاشة أو إرسال البيانات إلى ملف أو جهاز آخر.
  • الحساب: إجراء العمليات الحسابية الأساسية مثل الجمع والضرب.
  • التنفيذ المشروط: التحقق من شروط معينة وتنفيذ التسلسل المناسب من العبارات.
  • التكرار: القيام بفعل ما بشكل متكرر، عادةً مع بعض التغييرات.

تُتيح العديد من لغات البرمجة آليةً لاستدعاء الدوال المُقدمة من المكتبات المشتركة . شريطة أن تلتزم الدوال في المكتبة باتفاقيات وقت التشغيل المناسبة (مثل طريقة تمرير الوسائط )، يُمكن كتابة هذه الدوال بأي لغة أخرى. تُحلل التصنيفات السنوية التي تُصدرها مجلة IEEE Spectrum شعبية لغات البرمجة باستخدام مقاييس مثل إعلانات الوظائف، واتجاهات البحث، ونشاط المطورين. [ 28 ]

تعلم البرمجة

لتعلم البرمجة تاريخ طويل يرتبط بالمعايير والممارسات المهنية، والمبادرات والمناهج الأكاديمية، والكتب والمواد التجارية المتاحة للطلاب، والمتعلمين ذاتيًا، والهواة، وغيرهم ممن يرغبون في إنشاء برامج أو تخصيصها للاستخدام الشخصي. منذ ستينيات القرن الماضي، اتخذ تعلم البرمجة طابع حركة شعبية ، مع ظهور تخصصات أكاديمية، وقادة ملهمين، وهويات جماعية، واستراتيجيات لتنمية هذه الحركة وإحداث تغيير مؤسسي. [ 29 ] من خلال هذه المُثُل الاجتماعية والبرامج التعليمية، أصبح تعلم البرمجة مهمًا ليس فقط للعلماء والمهندسين، بل لملايين المواطنين الذين باتوا يؤمنون بأن إنشاء البرامج مفيد للمجتمع وأفراده. وقد توسعت المشاركة في تعليم علوم الحاسوب بشكل ملحوظ في السنوات الأخيرة، حيث اكتسب ملايين الطلاب خبرة تمهيدية في البرمجة من خلال المدارس والمنصات الإلكترونية. [ 30 ]

سياق

في عام 1957، بلغ عدد مبرمجي الحاسوب العاملين في الولايات المتحدة حوالي 15,000 مبرمج، وهو رقم يمثل 80% من المطورين النشطين في العالم. وفي عام 2014، بلغ عدد المبرمجين المحترفين في العالم حوالي 18.5 مليون مبرمج، منهم 11 مليونًا يُعتبرون محترفين، و7.5 مليونًا من الطلاب أو الهواة. [ 31 ] قبل ظهور الإنترنت التجاري في منتصف التسعينيات، كان معظم المبرمجين يتعلمون بناء البرمجيات من خلال الكتب والمجلات ومجموعات المستخدمين وأساليب التعليم غير الرسمية، بينما لعبت الدورات الأكاديمية والتدريب المؤسسي دورًا هامًا في تعليم المبرمجين المحترفين. [ 32 ]

ربما كان أول كتاب يحتوي على تعليمات محددة حول كيفية برمجة الحاسوب هو كتاب " إعداد البرامج للحاسوب الرقمي الإلكتروني " (1951) لموريس ويلكس ، وديفيد ويلر ، وستانلي جيل . وقدّم الكتاب مجموعة مختارة من الإجراءات الفرعية الشائعة للتعامل مع العمليات الأساسية على الحاسوب الرقمي الإلكتروني (EDSAC)، وهو أحد أوائل الحواسيب ذات البرامج المخزنة في العالم.

When high-level languages arrived, they were introduced by numerous books and materials that explained language keywords, managing program flow, working with data, and other concepts. These languages included FLOW-MATIC, COBOL, FORTRAN, ALGOL, Pascal, BASIC, and C. An example of an early programming primer from these years is Marshal H. Wrubel'sA Primer of Programming for Digital Computers (1959), which included step-by-step instructions for filling out coding sheets, creating punched cards, and using the keywords in IBM's early FORTRAN system.[33]Daniel McCracken's A Guide to FORTRAN Programming (1961) presented FORTRAN to a larger audience, including students and office workers.

In 1961, Alan Perlis suggested that all university freshmen at Carnegie Technical Institute take a course in computer programming.[34] His advice was published in the popular technical journal Computers and Automation, which became a regular source of information for professional programmers.

Programmers soon had a range of learning texts at their disposal. Programmer's references listed keywords and functions related to a language, often in alphabetical order, as well as technical information about compilers and related systems. An early example was IBM's Programmers' Reference Manual: the FORTRAN Automatic Coding System for the IBM 704 EDPM (1956).

Over time, the genre of programmer's guides emerged, which presented the features of a language in tutorial or step by step format. Many early primers started with a program known as "Hello, World", which presented the shortest program a developer could create in a given system. Programmer's guides then went on to discuss core topics like declaring variables, data types, formulas, flow control, user-defined functions, manipulating data, and other topics.

من بين أدلة البرمجة المبكرة والمؤثرة كتاب " برمجة BASIC" لجون جي. كيميني وتوماس إي. كورتز (1967)، وكتاب "دليل مستخدم Pascal وتقريره" لكاثلين جنسن ونيكلاوس ويرث (1971)، وكتاب " لغة برمجة C" لبريان دبليو. كيرنيغان ودينيس ريتشي (1978). ومن الكتب المشابهة الموجهة لعامة القراء (ولكن بأسلوب أبسط بكثير) كتاب " حاسوبي يحبني عندما أتحدث BASIC" لبوب ألبريشت ( 1972)، وكتاب "كتاب عن C" لأل كيلي وإيرا بول (1984)، وكتاب "C للمبتدئين" لدان جوكين (1994).

إلى جانب الكتب التمهيدية الخاصة بكل لغة برمجة، ظهرت العديد من الكتب والمجلات الأكاديمية التي قدمت ممارسات البرمجة الاحترافية. صُمم الكثير منها خصيصًا لمقررات جامعية في علوم الحاسوب، وهندسة البرمجيات، أو التخصصات ذات الصلة. وقدّم كتاب دونالد كنوث " فن برمجة الحاسوب" (1968 وما بعده) مئات الخوارزميات الحسابية وتحليلاتها. أما كتاب "عناصر أسلوب البرمجة " (1974)، من تأليف برايان دبليو كيرنيغان وبي جيه بلاوجر ، فقد تناول أسلوب البرمجة ، أي فكرة أن البرامج يجب أن تُكتب ليس فقط لإرضاء المُترجم، بل أيضًا لإرضاء القراء. وقدّم كتاب جون بنتلي " لآلئ البرمجة " (1986) نصائح عملية حول فن البرمجة ومهاراتها في السياقات المهنية والأكاديمية. ومن بين النصوص المصممة خصيصًا للطلاب: كتاب دوغ كوبر ومايكل كلانسي " يا باسكال!" (1982)، وكتاب ألفريد أهو " هياكل البيانات والخوارزميات" (1983)، وكتاب دانيال وات " التعلم باستخدام لغة لوغو" (1983).

الناشرون التقنيون

مع انتشار الحواسيب الشخصية على نطاق واسع، سعت آلاف الكتب والمجلات المتخصصة إلى تعليم المحترفين والهواة والمستخدمين العاديين كتابة برامج الحاسوب. ومن أمثلة هذه الموارد التعليمية: ألعاب الحاسوب بلغة BASIC، إصدار الحواسيب الصغيرة (1978)، لديفيد أهل ؛ برمجة Z80 (1979)، لرودناي زاكس ؛ دليل المبرمج لنظام CP/M (1983)، لأندي جونسون ليرد ؛ مقدمة في لغة C Plus (1984)، لميتشل وايت ومجموعة وايت؛ دليل بيتر نورتون للمبرمجين على حاسوب IBM الشخصي (1985)، لبيتر نورتون ؛ نظام MS-DOS المتقدم (1986)، لراي دنكان؛ تعلم لغة BASIC الآن (1989)، لمايكل هالفورسون وديفيد ريغمير؛ برمجة ويندوز (1992 وما بعدها)، لتشارلز بيتزولد ؛ Code Complete: دليل عملي لبناء البرمجيات (1993)، لستيف ماكونيل . و حيل خبراء برمجة الألعاب (1994)، بقلم أندريه لاموث .

حفّزت صناعة برامج الحاسوب الشخصي إنشاء العديد من دور النشر التي قدمت كتبًا تمهيدية ودروسًا تعليمية في البرمجة، بالإضافة إلى كتب لمطوري البرامج المتقدمين. [ 35 ] وشملت هذه الدور: أديسون-ويسلي ، وآي دي جي ، وماكميلان ، وماكجرو-هيل ، ومايكروسوفت برس ، وأورايلي ميديا ، وبرينتيس هول ، وسيبكس، وفينتانا برس، ووايت جروب برس، وويلي ، وروكس برس ، وزيف-ديفيس .

وفرت مجلات ودوريات الحاسوب محتوى تعليميًا للمبرمجين المحترفين والهواة. ومن بين هذه المصادر: Amiga World ، وByte، و Communications of the ACM ، وComputer، و Compute!، و Computer Language، و Computers and Electronics ، و Dr. Dobb's Journal ، و IEEE Software ، و Macworld ، و PC Magazine ، و PC/Computing ، و UnixWorld .

التعلم الرقمي / الموارد الإلكترونية

بين عامي 2000 و2010، تراجع دور دور النشر المتخصصة في كتب ومجلات الحاسوب كمزود لتعليم البرمجة بشكل ملحوظ، إذ اتجه المبرمجون إلى موارد الإنترنت لتوسيع نطاق وصولهم إلى المعلومات. وقد أدى هذا التحول إلى ظهور منتجات وآليات رقمية جديدة لتعلم مهارات البرمجة. وخلال هذه المرحلة الانتقالية، نقلت الكتب الرقمية الصادرة عن دور النشر المعلومات التي كانت تُقدم تقليديًا في شكل مطبوع إلى جماهير جديدة ومتنامية. [ 36 ]

تضمنت مصادر الإنترنت المهمة لتعلم البرمجة المدونات، والكتب، [ 37 ] ومواقع الويكي، والفيديوهات، وقواعد البيانات الإلكترونية، والمجلات، [ 38 ] [ 39 ] ومواقع الاشتراك، وأوراق المؤتمرات، [ 40 ] ومواقع الويب المخصصة لمهارات البرمجة. في السنوات الأخيرة، اكتسبت منصات مثل LeetCode و HackerRank و freeCodeCamp شعبية واسعة لتعلم البرمجة، وممارسة تحديات البرمجة، والتحضير للمقابلات التقنية. وشملت المصادر التجارية الجديدة فيديوهات يوتيوب ، ودروس Lynda.com (التي أصبحت لاحقًا LinkedIn Learningوأكاديمية خان ، و Codecademy ، وGitHub ، و W3Schools ، و Codewars ، والعديد من معسكرات تدريب البرمجة .

تضمنت معظم أنظمة تطوير البرمجيات ومحركات الألعاب موارد مساعدة غنية عبر الإنترنت، بما في ذلك بيئات التطوير المتكاملة (IDEs)، والمساعدة السياقية ، وواجهات برمجة التطبيقات (APIs )، وموارد رقمية أخرى. كما وفرت حزم تطوير البرمجيات التجارية (SDKs) مجموعة من أدوات تطوير البرمجيات والوثائق في حزمة واحدة قابلة للتثبيت.

نشرت منظمات تجارية وغير ربحية مواقع تعليمية للمطورين، وأنشأت مدونات، ووفرت قنوات إخبارية وموارد على وسائل التواصل الاجتماعي حول البرمجة. كما أنشأت شركات كبرى مثل آبل ومايكروسوفت وأوراكل وجوجل وأمازون مواقع إلكترونية لدعم المبرمجين، بما في ذلك موارد مثل شبكة مطوري مايكروسوفت (MSDN). وتُظهر حركات معاصرة مثل ساعة البرمجة ( Code.org ) كيف أصبح تعلم البرمجة مرتبطًا باستراتيجيات التعلم الرقمي ، وبرامج التعليم ، والعمل الخيري للشركات.

المبرمجون

مبرمجو الحاسوب هم من يكتبون برامج الحاسوب. وتشمل وظائفهم عادةً ما يلي:

على الرغم من أن البرمجة تُقدَّم في وسائل الإعلام كموضوع رياضي إلى حد ما، إلا أن بعض الأبحاث تُظهر أن المبرمجين المتميزين يمتلكون مهارات قوية في اللغات البشرية الطبيعية، وأن تعلم البرمجة يشبه تعلم لغة أجنبية. [ 41 ] [ 42 ]

انظر أيضاً

مراجع

  1. بيبينغتون، شون (2014). "ما هي البرمجة؟" . تمبلر . مؤرشف من الأصل في 29 أبريل 2020. تم الاطلاع عليه في 3 مارس 2014 .
  2. بيبينغتون، شون (2014). "ما هي البرمجة؟" . تمبلر . مؤرشف من الأصل في 29 أبريل 2020. تم الاسترجاع في 3 مارس 2014 .
  3. كوتسير، تون (2001). "حول تاريخ ما قبل الآلات القابلة للبرمجة: الآلات الموسيقية الآلية، والأنوال، والآلات الحاسبة". نظرية الآليات والآلات . 36 (5). إلسيفير: 589-603 . doi : 10.1016/S0094-114X(01)00005-2 .
  4. كابور، أجاي؛ كارنيجي، ديل؛ مورفي، جيم؛ لونغ، جيسون (2017). "مكبرات الصوت اختيارية: تاريخ الموسيقى الإلكترونية الصوتية غير القائمة على مكبرات الصوت" . الصوت المنظم . 22 (2). مطبعة جامعة كامبريدج : 195-205 . doi : 10.1017/S1355771817000103 . ISSN 1355-7718 . 
  5. فاولر، تشارلز ب . (أكتوبر 1967). "متحف الموسيقى: تاريخ الآلات الميكانيكية". مجلة معلمي الموسيقى . 54 (2): 45-49 . doi : 10.2307/3391092 . JSTOR 3391092. S2CID 190524140 .  
  6. نويل شاركي (2007)، روبوت قابل للبرمجة من القرن الثالث عشر ، جامعة شيفيلد
  7. دولي، جون ف. (2013). تاريخ موجز لعلم التشفير وخوارزميات التشفير . سبرينغر ساينس آند بيزنس ميديا. ص 12-13 . ISBN  9783319016283.
  8. فويجي، ج.؛ فرانسيس، ج. (2003). "لوفليس وباباج وإنشاء 'الملاحظات' لعام 1843"". IEEE Annals of the History of Computing . 25 (4): 16. Bibcode : 2003IAHC...25d..16F . doi : 10.1109/MAHC.2003.1253887 .
  9. روخاس، ر. (2021). "برامج الحاسوب لتشارلز باباج". حوليات IEEE لتاريخ الحوسبة . 43 (1): 6-18 . Bibcode : 2021IAHC...43a...6R . doi : 10.1109/MAHC.2020.3045717 .
  10. روخاس، ر. (2024). "أول برنامج حاسوبي" (ملف PDF) . اتصالات رابطة آلات الحوسبة . 67 (6): 78-81 . doi : 10.1145/3624731 .
  11. دا كروز، فرانك (10 مارس 2020). "تاريخ الحوسبة في جامعة كولومبيا - هيرمان هوليريث" . جامعة كولومبيا . Columbia.edu. مؤرشف من الأصل في 29 أبريل 2020. تم الاطلاع عليه في 25 أبريل 2010 .
  12. "الذاكرة والتخزين | التسلسل الزمني لتاريخ الحاسوب | متحف تاريخ الحاسوب" . www.computerhistory.org . مؤرشف من الأصل بتاريخ 27 مايو 2021. تم الاطلاع عليه بتاريخ 3 يونيو 2021 .
  13. لومب، جانيت ك.؛ لوفلي، جينيفر؛ ليتيلير، لورا (2019). الاستخدام التعليمي للحواسيب في دورة برمجة عملية لطلاب السنة الأولى في الهندسة . المؤتمر والمعرض السنوي لجمعية التعليم الهندسي الأمريكية.
  14. ريدجواي، ريتشارد (1952). "تجميع البرامج". وقائع الاجتماع الوطني لجمعية ACM لعام 1952 (تورنتو) - ACM '52 . الصفحات 1-5 . doi : 10.1145/800259.808980 . ISBN  9781450379250. S2CID 14878552 . {{cite book}}عدم توافق رقم ISBN / التاريخ ( مساعدة )
  15. موريس ف. ويلكس . 1968. الحواسيب بين الماضي والحاضر. مجلة رابطة آلات الحوسبة، 15(1):1–7، يناير. ص 3 (تعليق بين قوسين أضافه المحرر)، "(لا أعتقد أن مصطلح المترجم كان شائع الاستخدام آنذاك [1953]، على الرغم من أنه في الواقع قد تم تقديمه بواسطة غريس هوبر.)"
  16. أول مُجمِّعات لغة كوبول في العالم ( مؤرشفة بتاريخ 13 أكتوبر 2011 على موقع Wayback Machine)
  17. 1 2 بيرغستين، برايان (20 مارس 2007). "وفاة جون باكوس، مبتكر لغة فورتران" . أخبار إن بي سي . مؤرشف من الأصل في 29 أبريل 2020. تم الاسترجاع في 25 أبريل 2010 .
  18. "المعهد الوطني للمعايير والتكنولوجيا (NIST) يضع خارطة طريق للحوسبة السحابية" . InformationWeek . 5 نوفمبر 2010. تسعى مبادرة الحوسبة إلى إزالة العوائق التي تحول دون تبني الحوسبة السحابية في مجالات الأمن، والتوافق، وقابلية النقل، والموثوقية.
  19. "على ماذا يستند؟" مجلة كمبيوتر وورلد ، 9 أبريل 1984، صفحة 13. هل يستند إلى... الموثوقية، قابلية النقل، التوافق 
  20. "مبادئ البرمجة: نصائح لتصبح مبرمجًا جيدًا - موقع ويزدوم جيك" . ويزدوم جيك . ١٩ مايو ٢٠١٦. مؤرشف من الأصل في ٢٣ مايو ٢٠١٦. تم الاطلاع عليه في ٢٣ مايو ٢٠١٦ .
  21. أساسيات هندسة البرمجيات: منهج هندسي . دار نشر أورايلي ميديا. 2020. رقم ISBN 978-1492043454.
  22. إيلشوف، جيمس ل.؛ ماركوتي، مايكل (1982). "تحسين قابلية قراءة برامج الحاسوب للمساعدة في التعديل" . اتصالات رابطة آلات الحوسبة . 25 (8): 512-521 . doi : 10.1145/358589.358596 . S2CID 30026641 . 
  23. متعدد (ويكي). "سهولة القراءة" . دوكفورج . مؤرشف من الأصل في 29 أبريل 2020. تم الاسترجاع في 30 يناير 2010 .
  24. إنتيكناب، نيكولاس (11 سبتمبر 2007). "استطلاع رواتب تكنولوجيا المعلومات من SSL/Computer Weekly: ازدهار القطاع المالي يدفع نمو وظائف تكنولوجيا المعلومات" . مؤرشف من الأصل في 26 أكتوبر 2011. تم الاطلاع عليه في 24 يونيو 2009 .
  25. ميتشل، روبرت (21 مايو 2012). "هجرة العقول من لغة كوبول" . عالم الكمبيوتر. مؤرشف من الأصل في 12 فبراير 2019. تم الاطلاع عليه في 9 مايو 2015 .
  26. «صورة مقدمة من مركز الحرب السطحية البحرية، دالغرين، فيرجينيا، من ناشيونال جيوغرافيك، سبتمبر 1947» . 15 يوليو 2020. مؤرشفة من الأصل في 13 نوفمبر 2020. تم الاطلاع عليها في 10 نوفمبر 2020 .
  27. ستون، دان ن.؛ جوردان، إليانور و.؛ رايت، م. كيث (1990). "أثر تعليم لغة باسكال على مهارة تصحيح الأخطاء" . المجلة الدولية لدراسات الإنسان والآلة . 33 (1): 81-95 . doi : 10.1016/S0020-7373(05)80116-6 .
  28. "أفضل لغات البرمجة لعام 2024" . مجلة IEEE Spectrum . تم الاطلاع عليه في 20 يناير 2025 .
  29. هالفورسون، مايكل ج. (2020). أمة البرمجة: الحوسبة الشخصية وحركة تعلم البرمجة في أمريكا . نيويورك، نيويورك: منشورات ACM. ص 3-6 . 
  30. "حالة تعليم علوم الحاسوب لعام 2024" . Code.org . تم الاطلاع عليه في 20 يناير 2025 .
  31. تقديرات عام 2014 لمطوري البرمجيات والعمال المهرة في مجال تكنولوجيا المعلومات والاتصالات على مستوى العالم . فرامينغهام، ماساتشوستس: مؤسسة البيانات الدولية. 2014.
  32. إنسمنجر، ناثان (2010). سيطرة أولاد الحاسوب: الحواسيب والمبرمجون والسياسة والخبرة التقنية . كامبريدج، ماساتشوستس: مطبعة معهد ماساتشوستس للتكنولوجيا.
  33. هالفورسون، مايكل ج. (2020). أمة البرمجة: الحوسبة الشخصية وحركة تعلم البرمجة في أمريكا . نيويورك، نيويورك: منشورات ACM. ص 80. 
  34. بيرليس، آلان (1961). "دور الحاسوب الرقمي في الجامعة". الحواسيب والأتمتة 10، 4 و4ب . ص 10-15 . 
  35. هالفورسون، مايكل ج. (2020). أمة البرمجة: الحوسبة الشخصية وحركة تعلم البرمجة في أمريكا . نيويورك، نيويورك: منشورات ACM. ص 352. 
  36. هالفورسون، مايكل ج. (2020). أمة البرمجة: الحوسبة الشخصية وحركة تعلم البرمجة في أمريكا . نيويورك، نيويورك: منشورات ACM. ص 365-368 . 
  37. ستيمكوسكي، ل.، وباسكال، م. (2021). تطوير أطر عمل الرسومات باستخدام بايثون وOpenGL. تايلور وفرانسيس . تايلور وفرانسيس. ISBN 978-0-367-72180-0.{{cite book}}: صيانة CS1: أسماء متعددة: قائمة المؤلفين ( رابط )
  38. بيرسانيت، جيه إتش، ودي فرانسيسكو، إيه سي (أغسطس 2022). "نظرية الحمل المعرفي في سياق تدريس وتعلم برمجة الحاسوب: مراجعة منهجية للأدبيات". معاملات IEEE في التعليم . 65 (3): 440-449 . Bibcode : 2022ITEdu..65..440B . doi : 10.1109/TE.2021.3127215 .{{cite journal}}: صيانة CS1: أسماء متعددة: قائمة المؤلفين ( رابط )
  39. كينيت، سيث جيه؛ شينيدلينغ، تاتوم؛ صن سيت، بن (1 يوليو 2025). "لعبة تقمص أدوار مغامرات: لعبة مغامرات نصية لدورة تمهيدية في برمجة جافا" . مجلة تعليم نظم المعلومات . 36 (3): 209-223 . doi : 10.62273/ASHE6341 .
  40. زافالون، ف.؛ بريسكو، أ.؛ دي سوزا، ر.؛ تيكسيرا، د.؛ بايس، و.؛ إيفالد، ب.؛ تونين، ن.؛ ديفينسينزي، س.؛ بوتيلو، س. (2022). نظام توصية لتمارين برمجة الحاسوب قائم على نموذج القدرات والمهارات المتعددة للطلاب . الصفحات 1-8 . doi : 10.1109/FIE56618.2022.9962646 . ISBN  978-1-6654-6244-0.
  41. برات، شانتيل س.؛ مادياستا، تارا م.؛ موتاريلا، مالايكا ج.؛ كو، تشو-هسوان (2 مارس 2020). "ربط الكفاءة اللغوية الطبيعية بالفروق الفردية في تعلم لغات البرمجة" . التقارير العلمية . 10 (1): 3817. Bibcode : 2020NatSR..10.3817P . doi : 10.1038/ s41598-020-60661-8 . ISSN 2045-2322 . PMC 7051953. PMID 32123206 .   
  42. «بالنسبة للدماغ، قراءة شفرة الحاسوب ليست كقراءة اللغة» . أخبار معهد ماساتشوستس للتكنولوجيا | معهد ماساتشوستس للتكنولوجيا . ١٥ ديسمبر ٢٠٢٠. تم الاطلاع عليه بتاريخ ٢٩ يوليو ٢٠٢٣ .

مصادر

للمزيد من القراءة

  • إيه كيه هارتمان، الدليل العملي لمحاكاة الحاسوب ، سنغافورة: وورلد ساينتيفيك (2009)
  • أ. هانت، د. توماس، و و. كانينغهام، المبرمج العملي: من المبتدئ إلى الخبير ، أمستردام: أديسون-ويسلي لونغمان (1999)
  • برايان دبليو. كيرنيغان، ممارسة البرمجة ، بيرسون (1999)
  • واينبرغ، جيرالد م. ، علم نفس برمجة الحاسوب ، نيويورك: فان نوستراند رينهولد (1971)
  • إدسكار دبليو. ديكسترا ، منهج البرمجة ، برنتيس هول (1976)
  • أو. ج. دال، إي. دبليو. ديكسترا، سي. إيه. آر. هوار، البرمجة الهيكلية ، دار النشر الأكاديمية (1972)
  • ديفيد جريس ، علم البرمجة ، Springer-Verlag (1981)
  • شعار ويكيميديا ​​كومنزالوسائط المتعلقة ببرمجة الحاسوب على ويكيميديا ​​كومنز
  • اقتباسات متعلقة بالبرمجة على موقع ويكي الاقتباس