سؤال

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

التدوين الأساسي سيكون من Dijkstra انضباط البرمجة, ، إلى جانب بعض ملحقات التزامن والاتصالات.

على عكس EWD، أريد من طلابي أن يكتبوا في النهاية برامج فعلية قابلة للتنفيذ.وهذا يعني في مرحلة ما الترجمة من تدوين EWD إلى لغة أخرى.عندما بدأت في القيام بالبرمجة الرسمية لأول مرة، استهدفت لغة C، لكن انتهى بك الأمر إلى كتابة الكثير من السباكة، بالإضافة إلى وجود كل التعقيدات المتعلقة بمعالجة المؤشرات وما إلى ذلك.تعد روبي هدفًا محتملاً واضحًا، كما هو الحال مع Scheme أو Lisp.ولكن هناك أيضًا اللغات الوظيفية المختلفة؛وبما أنني مهتم بشكل خاص بالتزامن، فإن Erlang يبدو وكأنه احتمال.

لذا، في النهاية، إليك سؤالي:ما هي اللغة (اللغات) التي يجب أن أعلمها لقرائي لاستهداف برامجهم المطورة رسميًا؟

هل كانت مفيدة؟

المحلول

تشارلي,

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

هذا لا يعني أن اللغات الوظيفية غير مناسبة للأساليب الرسمية --- فهي مناسبة جدًا --- لكن الأسلوب مختلف تمامًا عن Dijkstra.تؤكد الطرق المفضلة على البراهين الحسابية؛راجع ورقة ريتشارد بيرد حول حل لعبة سودوكو (وهي عملية صعبة) أو الكتاب المدرسي لريتشارد بيرد وفيل وادلر.

بالنسبة للتزامن، يعتمد الأمر كثيرًا على نموذج التزامن (والطرق الرسمية) التي تؤمن بها.يعد John Reppy's Concurrent ML نموذجًا رائعًا لتمرير الرسائل.لدى Erlang أيضًا نموذج مقيد ونظيف ولطيف.من ناحية أخرى، البرمجة باستخدام الأقفال والأقسام المهمة صعبة للغاية، وقد يكون هناك فائدة أكبر للطرق الرسمية في هذه الحالة.

ملاحظتان عابرتان أخريان قد تكونان موضع اهتمام لبحثك الأساسي:

  • المبرمج الوحيد الذي التقيت به والذي طبق أساليب ديكسترا عمليًا على الأنظمة الحقيقية هو جريج نيلسون، الذي كان يعمل في Modula-3.(كتب جريج ومارك ماناس نظام نافذة Trestle معًا).كان لدى جريج ورقة TOPLAS لطيفة حول امتداد لحساب التفاضل والتكامل لديكسترا.

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

(يحرر:وهنا رابط ل جريج نيلسون الورق أو أحدهما.- إدارة علاقات العملاء)

نصائح أخرى

وتجاهل واضح ما هو الخاص بك المفضلة < وأ href = "https://stackoverflow.com/questions/273108/which-programming-languages-have-helped-you-to-understand-programming-better"> البرمجة <لأ href = "الشبكي: / إجابات /stackoverflow.com/questions/4769/what-is-the-easiest-language-to-start-with">language، أستطيع أن أرى اثنين من اجابات مفيدة:

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

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

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

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

وF # هو لغة مثيرة للاهتمام. انها حصلت على جمال وظيفية من اللثغة أو مخطط (وأيضا ليس تماما، ولكن تقريبا) وأنها تعطيك بعض القدرة على الغوص في مواضيع OOP وكذلك ربط في .NET Framework ل الاشياء UI إذا كنت تريد أن التوابل الامور. ولكن، في الوقت الراهن، انها غامضة.

لا أستطيع أن أتكلم لروبي، لذلك شخصيا، وأود أن لدغة الرصاصة وتذهب مع C #.

وبصراحة، لا أستطيع أن يوصي روبي لهذا الغرض. عندما البرنامج يوما بعد يوم في عالم التجارة بلدي، وأنا أحب ذلك الكثير جدا، وبالتأكيد أكثر بكثير من C أو جافا. ولكن دلالات ذلك هي غير محددة بشكل لدرجة أنني لا يثقون بها نصف بقدر C حيث، على الرغم من أنني قد قضاء عدة ساعات يتجادلون حول بيان والاستشارات ذلك الكتاب الأبيض أكثر سماكة الذي حل محل K & R، I يخرج في إنهاء مقتنع إلى حد أنه إذا كنت قد حصلت على المترجم المطابقة (نعم، أنا أعرف، أنا حالم، ولكن العمل معي هنا) أنا أعرف ما يخرج من الجانب الآخر.

وروبي هو رائع في نواح كثيرة، ولكن بقدر ما أي شيء رسمي يذهب، فإن توين يلتقيان أبدا.

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

وأنا أفهم أيضا، وDikjstra مقابل شيء وظيفية. ذهابا و قراءة أوراقه انه كثيرا في عالم حتمي. أنا لست مؤهلا القول ما اذا كان ذهب حقا بطريقة خاطئة هناك. ربما أنا غارقة تماما جيدا كيف كتاباته هي، بقدر تفكيره. لكنه لم يبدو أن يرضيه، فما حول استخدام رأس الغول 60 ؟

وهذا هو فكرة جميلة. أعتقد مخطط هو خيار جيد لأنه يسمح احد لوضعها موضع التطبيق (في شكل مكتبات) تجريدات مختلفة مع الحد الأدنى من الضروريات. كما أنه من السهل أن تترجم من نظام إلى نظام التحقق مثل PVS ( HTTP: //pvs.csl.sri. كوم / )

وهتافات

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

وشخصيا، كنت تستخدم اللثغة المشتركة، منذ وأنا على دراية بذلك، وانها لغة كبيرة لتنفيذ أي مفهوم. قد تكون خيارات أخرى إرلانج، هاسكل، روبي، أو بيثون، وربما حتى بعض ML هجة. أنا منحاز ضد العائلة C (بما في ذلك C # و Java)، ويبدو أنها عالقة إلى مستوى أقل من التفكير في المفاهيم.

وهناك عدد غير قليل من الجامعات باستخدام الكمال المطور لتعليم الطرق الرسمية (تنويه: أنا على اتصال مع هذا المنتج). أنها بنيت حول لغة للتعبير عن المواصفات وصقل البيانات والخوارزميات. أنه يحتوي على المبرهن نظرية التلقائي للتحقق، ومولد التعليمات البرمجية التي يمكن أن تنتج C ++، C # و Java. تصميم PD استلهم كثيرا من قبل "A الانضباط للبرمجة"، ولكن وجدنا تدوين غير عملي وليس لأنظمة كبيرة، وبالتالي فإن تدوين وقد تباينت إلى حد ما من وDijktra.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top