الجدل حول لغة البرمجة الأولى: القرار النهائي

يتعلق البعض بالنقاش حول اختيار لغة البرمجة الأولى شيء من هذا القبيل:



يقولون أن مليون واجهة تؤثر على الاختيار وليس هناك جدوى من الجدل حول هذا الأمر. ومع ذلك ، تستمر holivars.

قرر فيتالي براغيليفسكي وضع حد لها وقدم القرار النهائي في Saint AppsConf . بعد قراءة المقال (أو عرض التقرير) ، ستعرف كيف تستجيب بشكل صحيح للأقارب أو المعارف الذين تعلموا كم يكسبون في مجال تكنولوجيا المعلومات وأن جهاز التحكم عن بعد ليس عائقًا ، ويتساءلون الآن من أين تبدأ.


يعمل Vitaly Bragilevsky في JetBrains ويقوم بالتدريس في جامعة سانت بطرسبرغ الحكومية في كلية الرياضيات وعلوم الكمبيوتر ، وعضو لجنة Haskell لتوحيد لغة البرمجة ولجنة تطوير المترجم Haskell Glasgow Haskell ، مؤلف كتاب Haskell in Depth.

لذا ، دعنا نكتشف كيفية بدء تعلم البرمجة ، ما الأدوات التي يجب استخدامها؟ في الواقع ، هذه قضية مهمة.
كتب ديكسترا في عام 1972: "... الأدوات التي نحاول استخدامها واللغة أو الرموز التي نستخدمها للتعبير عن أفكارنا أو تسجيلها هي العوامل الرئيسية التي تحدد ما يمكننا التفكير فيه أو التعبير عنه على الإطلاق!"
غالبًا ما لا تسمح لنا لغة البرمجة (واللغة بشكل عام) بالقيام بما نريد ، أو أنها لا تفعل ذلك بالطريقة التي نريدها. اللغة أداة مهمة ، ويجب أن يؤخذ اختيارها على محمل الجد.

إذا ارتكبت خطأ في هذا الاختيار (أو في كثير من الأحيان يقوم شخص ما باختيار الطالب) ، فقد تكون العواقب خطيرة. هكذا ظهر المبرمجون:

  • أفسده فورتران ؛
  • تتأثر BASIC.
  • سحق C ++ ؛
  • خنق جافا.

ومن هنا كانت النكات أن مبرمج فورتران الحقيقي يمكنه كتابة برنامج فورتران بأي لغة. أو قصصا عن الرجال الذين هم في السنة الأولى التي تعاني من C ++، ومن ثم فهي بالفعل من المستحيل أن تصبح المبرمجين - فقط يعرفون كيف <، و >إلى الكتابة.

بما أننا نرى مثل هؤلاء الناس ، فمن المنطقي أن نفترض أن لغة البرمجة الأولى تؤثر بطريقة أو بأخرى .

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

خلفية


سأبدأ مع ما يسمى مشكلة ريتشارد Vekselblat. هذا الرجل معروف بكونه أول دكتوراه في علوم الكمبيوتر. في عام 1980 ، كتب مقالًا حول نتائج اختيار لغة البرمجة الأولى ( Richard L. Wexelblat. عواقب لغة البرمجة الأولى للمرء. وقائع الندوة الثالثة ACM SIGSMALL وندوة SIGPC الأولى حول الأنظمة الصغيرة ، 1980 ).

بدأ كل شيء في عام 1978 ، عندما كتب ريتشارد رسالة إلى المجلة بعنوان رئيسي استفزازي "أخطاء الشباب ، أم أن Basic Basic سيء لصحتك؟" كانت الإجابات على هذه الرسالة بمثابة مادة للمقال.


بناءً على وجهات النظر المتكررة ، توصل ريتشارد فيكسيلبلات إلى الاستنتاجات التالية:

  • , (Pascal, PL/C) , (COBOL, FORTRAN). .
  • , . — , .
  • , , . .

بالطبع ، كانت هذه دراسة ساذجة للغاية ، دون مراعاة العوامل الاجتماعية ، مع ذلك ، وسمحت لنا باستخلاص بعض الاستنتاجات.

بعد أن درست تاريخ المسألة بعمق أكبر ، كنت مقتنعا بأن هناك مئات الدراسات المخصصة لاختيار لغة البرمجة. حتى أن هناك أعمالًا تلخص العمل المتعلق باختيار الأسلحة النووية ، على سبيل المثال: كيفين باركر ، بيل ديفي. تاريخ اختيار لغة الكمبيوتر. (في Arthur Tatnall. تأملات في تاريخ الحوسبة: حفظ الذكريات وقصص المشاركة ، AICT-387 ، Springer ، الصفحات 166-179 ، 2012 ، IFIP Advances in Information and Communication Technology (SURVEY)) .

يحدد المؤلفون ، بالاعتماد على قائمة مراجع واسعة ، العوامل التي تؤثر على اختيار اللغة ، ليس فقط للتعليم ، ولكن أيضًا لتنفيذ المشاريع:

  • : , ( ). , .
  • : ( 150 «Hello world!» 500 IDE); problem-solving, ; .
  • : (, 2000- ); .

يشارك العديد من الخبراء في مقارنة اللغات ، لا سيما فيما يتعلق بمدى ملاءمتها للدراسة الأولية. صاغت ليندا مانيلا ومايكل دي رادت في مقالهما "مقارنة موضوعية للغات لتدريس البرمجة التمهيدية" مجموعات معايير لتقييم PL:

  1. قابلية التطبيق في التدريب.
  2. بيئات اللغة والتطوير.
  3. الدعم والتوافر.
  4. استخدم خارج الدورة التمهيدية.

مسلحة بهذه المعايير ، قامت ليندا مانيلا ومايكل دي رادت بتجميع جدول مقارنة اللغة.



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

في البداية ، كنت آمل في تصنيف YP وفقًا لهذه المعايير واستخلاص استنتاجاتي الخاصة ، ولكن بالنظر إلى عمود هاسكل ، وجدت أكاذيب حول كل عنصر! وقرر أن الجدول ليس له علاقة بالواقع - هذه مقارنة "موضوعية".

عند التفكير ، توصلت إلى استنتاج مفاده أن مثل هذه المقارنة لا معنى لها. لنفترض أنني سأضيف عمودًا مع Kotlin وأضع علامة في كل عنصر أم لا. هذا لا يعني شيئا على الإطلاق.

ثم قررت أن أرى ما يستخدم للتدريب في الواقع. هنا الصورة مختلفة.


مصدر البيانات .

حقيقة أن بيانات عام 2014 يجب ألا تربكك ، لأن أنظمة التعليم العالي تتغير ببطء شديد والصورة العامة لم تتغير كثيرًا الآن.

لا تزال Python في المقام الأول ، Java - تعكس طلبات من Oracle و Sun Microsystems وغيرها من الشركات لتعلم هذه اللغة. من بين الجامعات التي تبدأ بتدريس برمجة C ++ ربما تكون جامعة تكساس - هناك بيورن ستراستروب يقوم بتدريس دورة ابتدائية ، وأعتقد أن الطلاب يقومون بذلك بشكل جيد.

لم تقع العديد من اللغات التي تهم المجتمع الأكاديمي في هذا التصنيف على الإطلاق ، على وجه الخصوص:

  • PLs وظيفية مع كتابة ثابتة من Haskell و ML ، شائعة بين الباحثين.
  • تستخدم على نطاق واسع في تطوير الويب ، مع كتابة ديناميكية لجافا سكريبت ، روبي ، PHP.
  • اللغات الصناعية الخاصة بالمنصة الهدف جيم وجيم # / فيجوال بيسك.

مع هذا الأخير ، من المفهوم فقط أن الجامعات تاريخيًا لا تريد روابط جامدة بأي شيء.

صوت الناس


بعد دراسة تاريخ القضية ، قررت معرفة رأي المطورين الحديثين من خلال استطلاع على تويتر . تمت صياغة السؤال على النحو التالي: "ما هي خاصية لغة البرمجة التي تعتبرها الأكثر أهمية عند اختيار اللغة الأولى لتدريس البرمجة؟" واقترح خيارات إجابة يسهل ربطها بلغات معينة.

وبالنظر إلى جميع الميزات التقنية للاستطلاعات على تويتر ، فإن النتائج هي كما يلي.



قال أكثر من نصف المجيبين أن البساطة هي الشيء الرئيسي. 25٪ ممن أجابوا عن الانتشار يعتقدون أننا يجب أن نفكر على الفور في الطلب في السوق. نسبة عالية من الناس الذين يعتقدون أنك بحاجة للتعامل مع المؤشرات أولاً أمر مثير للقلق. وحقيقة أن 8٪ فقط لمجموعة غنية من المكتبات تظهر أن اللغة الأولى ما زالت لا يجب أن تصمم للقيام بشيء حقيقي.

إجابات الاستطلاع


سأقدم بعض الآراء المثيرة للاهتمام من مناقشة الاستطلاع.

عبر ديمتري كوفانيكوف ( ChShersh ) - المطور والمعلم المتمرس - عن عدد من الاعتبارات الهامة ، والتي أوافق عليها تمامًا: " مستوى عالٍ وتفاعل. للحصول على نتيجة البرنامج والتمكن من رؤيته ، كان من الممكن الحد الأدنى من الخطوات. البرمجة لا تتعلق بإنشاء المتغيرات أو الحلقات أو التكرارات ، ولكنها تتعلق بحل المشكلات مع وسائل PL. "

أشار Artyom Pelenitsyn ( @ ulysses4ever ) إلى المكون المنهجي: "وجود المنهجية المتخصصة (الكتب المدرسية ، وكتب المهام ، والبرامج التعليمية ، ومنتديات الأسئلة والأجوبة) والتقنية (IDEs البسيطة والواضحة مع واجهة بسيطة ، السائرون / المصححون مع واجهة المستخدم الرسومية)".

وذكّر أندريه مسكوف ( andreymiskov ) بعامل مهم آخر: " قابلية التنبؤ : عدم تشتيت القيم الصفرية / غير المحددة و 0.1 + 0.2. زيادة تدريجية في الفرص: لا يوجد OOP والطفرات حتى تتقن البيانات والوظائف. مثل Racket / HtDP أو Pyret / PAPL ".

تم العثور على المدافعين عن C: “شخصيًا ، أعتقد أن C كان ولا يزال الأفضل لإجراء دراسة أكثر جوهرية. في رأيي ، فإن البنية بسيطة وبديهية تمامًا ، وهناك العديد من المفاهيم المختلفة (الذاكرة ، المؤشرات ، المكدس ، التخصيصات). واحد فقط ولكن ليس C89 بأي حال ، C99 على الأقل ، ولكن أفضل C11 ".

كانت هناك إشارات إلى Scala و Rust - وفي سياق الكتابة والبساطة. مما يجعلنا نفكر ، للأسف ،لغات البرمجة مثل الطوائف الشمولية . لديهم أتباع ، على الرغم من كل شيء ، يروجون لغتهم المفضلة ولا يريدون الاستماع إلى النقد (وبشكل عام ، آراء الآخرين).

مثال حي على هذه "الطائفية" هو الجدل حول كيفية تعيين المهمة "=" أو ": =". تجاوز هذا النزاع بالفعل 40 عامًا ، وهناك مقالات مخصصة فقط لهذه المشكلة. وهذا مجرد سبب واحد من بين مئات هذه "القضايا الهامة".
لا تتعهد - قم بتعميم لغتك ، ولكن لا تتصرف كأتباع للطوائف الشمولية.

الاختلافات بين اللغة الصناعية والتعليمية


لقد أوشكنا على إيجاد الحل النهائي لمشكلة اختيار اللغة الأولى. يبقى فقط لتحديد كيفية اختلاف اللغة التعليمية عن اللغة الصناعية.

أولاً ، في اللغة الصناعية ، هناك دائمًا العديد من الطرق لتحقيق نفس الهدف.

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

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



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

يعكس غلاف الكتاب الثاني ، "كيفية تصميم البرامج" ، نهجًا مختلفًا تمامًا - الهندسة. أحبها أكثر بكثير ، وأعتقد أنك بحاجة إلى تعلم البرمجة مثل أي عمل هندسي آخر.

هناك العديد من المبادئ الهامة في كيفية تصميم البرامج التي تحتاج إلى تعلمها عند تعلم البرمجة:

  • كيفية قراءة بيان المشكلة وتحديد المكونات التي يجب أن يتكون منها الحل.
  • كيفية نقل مهمة إلى هيكل البرنامج.
  • , , .
  • , .

Beginning Student Language


ولتنفيذ هذه المبادئ ، توصل مؤلف كتاب Matthias Felleisen إلى فكرة اللغات للتعلم. هذه هي اللغات التي توسع قدراتها تدريجيًا.

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

هذه هي الطريقة التي يبدو بها البرنامج الابتدائي في بيئة DrRacket لطالب مبتدئ.


Pyret


تم اقتراح نهج آخر لتدريس البرمجة بواسطة Shriram Krishnamurthi et al. لقد ابتكروا لغة Pyret ونشروا كتاب لغات البرمجة والبرمجة ، لأنني ، أكرر ، لن يتعلم أحد اللغة بدون مواد تدريبية.

انتبه إلى عناوين بعض الفصول من هذا البرنامج التعليمي:

  • مقدمة في البيانات الجدولية (4)
  • الألعاب التفاعلية كنظم رد الفعل (11)
  • أمثلة واختبار وفحص البرنامج (12)
  • الرسوم البيانية (19)
  • برامج المعالجة: التحليل (23)
  • المنطق حول البرامج: نظرة أولى على الأنواع (27)
  • كائنات: تفسير وأنواع (32)

في الفصل 11 - في نهاية الشهر الأول من التدريب - يعلمون كتابة الألعاب التفاعلية كنظم تفاعلية. تم تصميم البرنامج بأكمله لمدة ستة أشهر تقريبًا ويتم إدخال الكائنات وأنظمة الكتابة تقريبًا في نهايتها.

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

فيما يلي مثال لبرنامج في Pyret والبيئة التي لهذه اللغة.


على سبيل المثال ، تعتبر الاختبارات المضمنة في برنامج (كتلة where:) جزءًا أساسيًا من بناء الجملة. يتم أيضًا تضمين الوثائق في بناء الجملة ( doc:). مثل هذه الإنشاءات المفيدة هي المستوى الأعلى في اللغة وغرس استخدامها في عملية التعلم.

Codeworld


يتم تنفيذ فكرة تنفيذ رسومات بسيطة في بيئة CodeWorld. لها لغتها الخاصة ، ولكن يمكنك استخدام هاسكل والحصول على شيء جميل على الفور - بالنسبة للمبتدئين فهي جذابة.


PascalABC.NET


يتم تطوير إجابتنا BSL و Pyret في SFU في روستوف أون دون ستانيسلاف ميخالكوفيتش وطلابه.

هذه باسكال غير قديمة. يحتوي ، على سبيل المثال: foreach ، أوصاف متغيرة داخل الكتلة ، حالة على حدة ، أعداد صحيحة طويلة ، فئات وروتينات عامة ، واجهات ، التحميل الزائد للعمل ، تعابير لامدا ، استثناءات ، جمع القمامة ، طرق التمديد.

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


أعلاه في لقطة الشاشة ، برنامج 120 خطًا بشكل جميل ومع الرسوم المتحركة يجمع أبراج هانوي.

قرار نهائي


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

في بداية المقال اكتشفنا ما هو أكثر أهمية ، كيف نتعلم ، من أي لغة. ومع ذلك ، هناك طرق للبدء في دراسة البرمجة بشكل صحيح من وجهة نظر التطوير المستقبلي.

من الأفضل أن تبدأ بلغة أكثر ملاءمة لهذا: Racket ، Pyret ، Python ، PascalABC.NET. الشيء الرئيسي هو أن المرحلة الأولية - هذه اللغة الأولى - وضعت الأساس للتنمية المستقبلية.



من لغات المستوى الأول في هذا المخطط ، سيكون من السهل التبديل إلى بعض اللغات الصناعية أو الأكاديمية الأساسية: JavaScript و C و C # و Java و Haskell و OCaml و F #. ولكن إذا بدأت فورًا باستخدام جافا سكريبت ، فستحصل على مبرمج فورتران بطريقة جديدة ، والذي سيكتب بعد ذلك في كل مكان كما هو الحال في JS ، وسيكون أمرًا مروعًا. وإذا كانت لغة ثانية ، فلن يحدث مثل هذا التشوه.

علاوة على ذلك ، عندما يتم وضع الأساس في منطقة معينة ، يتم فتح مليون فرصة. يظهر بعضها فقط في الرسم التخطيطي.

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

إذا ذهبت من خلال لغات المستوى الأدنى من المخطط ، وستمثل أجهزتهم تقريبًا ، فهذا سيجعلك أفضل مطور في أي لغة.

إذا (وكيف قرأته على حبري) ، فقد بدأت بالفعل مسيرة مهنية للمطور ، وتعمقت في أي منطقة وتريد الآن معرفة ما يحدث خارجها وأين يوجه انتباهك - انضم إلى مهرجان RIT ++ عبر الإنترنت . هناك ، في يومين (25 و 26 مايو) ، يمكنك الحصول على شريحة من صناعة تكنولوجيا المعلومات بأكملها ، وفي الفصول الرئيسية من 27 مايو إلى 10 يونيو ، يمكنك ضخ المهارات الفردية.

All Articles