
إخلاء المسئولية : نعم ، لقد نشرنا يوم الإثنين مجموعة من المتابعين لمثل هذه المقارنة بين اللغات. لا ، نحن لسنا مجانين. كل شيء يسير حسب الخطة.
يجمع Vitaly Bragilevsky بين معرفة علوم الكمبيوتر النظرية وممارسة البرمجة الحالية. يقوم بتدريس التخصصات المتعلقة بعلوم الكمبيوتر النظرية ، وهو عضو في لجنة توحيد هاسكل ، وهو عضو في اللجنة الإشرافية لتطوير برنامج HHCell compiler GHC.
هذا هابراستاتيا هو مقابلة رائعة مع فيتالي حول الموضوعات التالية:
- التدريس والتعرف على جافا سكريبت.
- لماذا تختار هاسكل؟
- مكان اللغات الوظيفية في حياة مبرمج ؛
- ما هو جيد جافا سكريبت وكيف تتطور ؛
- ما سيظهر في لغات البرمجة في 10-15 سنة القادمة ؛
- ما هي لغات البرمجة ذات المصداقية ولماذا؟
- ما هو الفرق بين المؤتمرات العلمية والمؤتمرات المطور. لماذا يذهب المعلم إليهم؟
- هل من المهم أن تقرأ للمبرمج ، فهناك كتب عفا عليها الزمن وأي منها يجب أن يقرأها.
يتم إجراء المقابلات من قبل أعضاء لجنة برنامج مؤتمر
HolyJS 2019 في موسكو وأليكسي
زولوتيخ وأرتيوم كوبزار . إذا لم تكن المقابلة كافية بالنسبة لك ، فحينئذٍ في وقت قريب ، في HolyJS التالي ، سيقول Vitaliy ويعرض مع أمثلة كيفية توصيل JavaScript بنظرية الخوارزميات.
حول التدريس والتعرف على جافا سكريبت
أرتيوم : من بين مستمعينا ، وخاصة بين مجتمع جافا سكريبت ، أنت غير معروف على نطاق واسع ، فالرجاء إخبارنا عن نفسك وماذا تفعل وما هي هواياتك - العمال والمهنيون وربما غير العاملين.
فيتالي : أقوم بالتدريس ، وأقوم بتدريس دورة في جامعة ولاية سانت بطرسبرغ والمشاركة بشكل دوري في أعمال أخرى. منذ أن كنت مدرسًا ، اضطررت إلى دراسة الكثير من الموضوعات المختلفة. كما يحدث عادة في الجامعة ، هناك حاجة إلى قراءة دورة معينة ، ولهذا تحتاج إلى فهم كل هذا.
لقد حدث أن علمت الكثير من الأشياء. على سبيل المثال ، واحدة من أولى دوراتي الدراسية الخاصة ، والتي تم تعييني لها في السنة الأولى من العمل ، عندما كنت صغيراً للغاية ، كانت تسمى "تقنيات XML Web". ثم كانت هذه مواضيع ساخنة ، ظهر Ajax في جافا سكريبت ، ولم يكن هناك أدب حقًا. شرحت كيفية استخدام كل هذا.
منذ ذلك الحين لم يفهم أحد حقًا كيفية استخدامه ، كان كل شيء مقصورًا على أمثلة من هذا القبيل: هناك قائمتان منسدلة ، يحدد المستخدم عنصرًا في إحدى القوائم ، ويتم إرسال طلب إلى الخادم ، وتتلقى بيانات لملء القائمة المنسدلة الثانية. كانت حداثة ؛ كان هناك القليل من هذه المواقع على المواقع. بعد ذلك ، ظهر بحث Google فقط في الوضع التجريبي ، عندما يخبرك بالمتابعة أثناء قيامك بكتابة نوع من الاستعلامات. كانت اياكس جديدة ، وعلمتها.
ما لم أدرسه بعد ذلك: أشياء رياضية وبرمجية. ذات مرة صادفت هاسكل ، ومنذ ذلك الحين أصبحت منطقة الجذب الرئيسية ، وهو ما قمت به. بالإضافة إلى التدريس ، ودراسة كل شيء في علوم الكمبيوتر بشكل عام ، من أجل التدريس ، بدأت التعاون مع دار النشر "DMK-press" ، قمت بترجمة العديد من الكتب لهم (مع أشخاص آخرين ، قمت بتحرير شيء بنفسي). كان كل شيء في جميع أنحاء هاسكل أيضا. ربما يكون هذان النوعان من النشاط - التدريس وما يرتبط بترجمة الكتب إلى اللغة الروسية - هو الشيء الرئيسي الذي فعلته.
أرتيوم : هذا هو ، لقد اتصلنا مباشرة بـ JavaScript من قدامى المحاربين. لقد وجدت Ajax ، وربما حتى PHP.
فيتالي : نعم ، لقد قمت ببرمجة PHP في السنوات الأولى ، كتبت عدة مواقع.
حول أسباب اختيار هاسكل
أرتيوم : أنت الأكثر شهرة في مجتمع هاسكل. لماذا توقفت عند هاسكل وهذا النظام البيئي؟
فيتالي : بما أنني لم أعتبر مهنة أبداً كمبرمج لنفسي ، فقد كنت حرًا فيما أحب. لم أكن بحاجة إلى الاهتمام بما يدفعون مقابله أكثر. عندما اكتشفت عن هاسكل ، أعجبتني حقًا. هذا ليس جيدًا للتحدث عنه ، وبطريقة ما سمحت لنفسي بقول شيء مثل "Haskell هي لغة للأشخاص الأذكياء في مجتمع الناطقين باللغة الإنجليزية ، والمجتمع أكثر ذكاءً في المتوسط". الأمريكيون ضربوني على هذا ، وهم على حق. ولكن هذا كان بالضبط ما كنت مهتما به.
هذا ، في وقت واحد ، بينما كنت لا أزال أدرس في جامعة ، كنت منخرطًا في الرياضيات الدقيقة إلى حد ما ، لذلك كان التحول إلى موضوع برمجة قاسٍ نسبيًا أمرًا طبيعيًا جدًا بالنسبة لي. بشكل عام ، من الواضح أنه الآن ، من بين لغات البرمجة المستخدمة في الإنتاج ، تعد هاسكل واحدة من أكثر اللغات كثافة في استخدام العلوم أو كثيفة الاستخدام للموارد. كل هذا التجريد هو الأقرب إلى الرياضيات. لذلك ، بالنسبة لي كان اختيارًا طبيعيًا.
حول اللغات الوظيفية ومكانتها في عالم المبرمجين
أليكسي : كيف تشعر حيال اللغات الديناميكية والوظيفية؟ ماذا عن الأشياء الشبيهة بـ Lisp؟
فيتالي : أحب أن أضع نفسي ليس كحارس هاسكليست ، لكني أحب لغات البرمجة بشكل عام. أولاً ، من الواضح أن جميع اللغات لها الحق في الوجود. أعتقد أن مقارنة لغات البرمجة على أساس "الأسوأ" هو مهنة أحمق تمامًا. لسوء الحظ ، يتم ذلك في كثير من الأحيان في الشبكات الاجتماعية وليس فقط ، ولكن هذا لا معنى له.
أحب معرفة ميزات لغات البرمجة وتصنيف لغات البرمجة بطريقة ما إلى هذه الميزات. ولكن النظر إلى أن هذه ميزة جيدة ، وهذا أمر سيء هو غبي. لذلك ، من الواضح أن اللغات ذات الكتابة الديناميكية لها بالتأكيد حق في الوجود. على سبيل المثال ، أنا الآن في دورتي للطلاب الجدد أخذت لغة البرمجة جوليا كأساس. هذه لغة ديناميكية ، وهناك نظام الكتابة. كان من المثير للاهتمام بالنسبة لي أن أعلمه ، في نفس الوقت لرؤية مجال التطبيق هذا.
بشكل عام ، كانت اللغة الوظيفية الأولى التي صادفتها هي لغة Lisp. عندما قرأت كتاب
"هيكل وتفسير برامج الكمبيوتر" قبل عدة سنوات ، بالطبع ، كل هذا يثير إعجاب. لذلك ، لدي مصلحة كبيرة في كل هذا. على سبيل المثال ، لدي أيضًا حب كبير لجافا سكريبت ، لأنني أعرف تاريخها جيدًا.
أعلم أنه عندما ظهر لأول مرة ، كان يجب أن يكون مثل Lisp ، لأنه في البداية كان بناء الجملة الأصلي يشبه Scheme. ثم ، بدلاً من ذلك ، ولأسباب تسويقية ، تم استبدالها بأخرى تشبه لغة C ، ولكن بالطبع ، توجد لغات Lisp في الداخل ، وهي تثير إعجابي.
بشكل عام ، لدي شعور بأن العديد من محبي جافا سكريبت لا يعرفون هذا ، وأنهم بخير ، لكنني أعرف ذلك ، فأنا أفضل. لذا فإن جميع اللغات جيدة ، ومن المثير للاهتمام بالنسبة لي أن أدرسها ، ومن المثير للاهتمام دراسة مجال قابلية التطبيق ، ومن المثير للاهتمام معرفة ما هو أسهل وأكثر ملاءمة. بشكل عام ، تعد المقارنة بين اللغات للمهام الفردية أيضًا مجالًا مثيرًا للاهتمام منفصل ، أود التعامل معه.
ما هو جيد في جافا سكريبت
Artyom : أثناء
إعدادك للتقرير ، كنت على اتصال مع الإصدار الجديد من JavaScript ، مع ما تم تضمينه فيه. ما الذي يمكنك تمييزه جيدًا ، سيئًا ، وربما بعض الحلول المثيرة للاهتمام من وجهة نظر نظرية لغات البرمجة؟
الحيوية : التقييم من وجهة نظر مجموعة متنوعة من لغات البرمجة ، بطبيعة الحال ، فإن الشيء الأكثر إثارة للاهتمام في جافا سكريبت هو نموذج الكائن. هذا ما كان عليه من البداية. نموذج النموذج الأولي له تاريخ غني جدًا ، إنه مثير للاهتمام للغاية لأنه لا يوجد عملياً أي لغة حديثة أخرى الآن.
في لغات مثل C # ، باستخدام طرق التمديد ، فإنها تحل مشكلة إضافة طرق إلى الكائنات الموجودة. هذا ما كانت عليه جافا سكريبت منذ البداية ، وهناك يبدو أكثر طبيعية. أي أن لدينا نموذجًا أوليًا نضيف إليه أساليب ثم ننشئ كائنات جديدة بناءً عليه. في لغات مثل C # ، هذا أكثر الاصطناعي ، في رأيي.
كنت مهتمًا لمعرفة كيفية إضافة الوحدات النمطية إلى JS. في JavaScript ، لفترة طويلة جدًا كانت هناك مشاكل مرتبطة بالوحدات النمطية ، على مدار عقود ، يمكنك القول ، وأتساءل كيف بدأوا في القيام بكل هذا. نظرًا لأن الوحدات هي موضوع نظري عميق ، فهناك العديد من الطرق المختلفة لتنفيذها. صحيح ، لا أستطيع أن أقول أنني درست هذه الدراسة بدقة ، ولكن هذا ما يبدو لي حالة مثيرة للاهتمام في مجال تطوير لغات البرمجة. بمعنى ، كيفية إضافة ميزات إلى اللغة الحالية التي لم تكن موجودة من قبل.
لا يزال هذا مثيرًا للاهتمام لأنه منذ بضع سنوات في هاسكل كانت هناك محاولة لإضافة وحدات أكثر دقة. الآن يمكننا القول أن هذه المحاولة باءت بالفشل ، لم يبدأ أحد في استخدامها. هذا هو ما يسمى مشروع حقيبة الظهر ، أي أنه يبدو أنه تم تنفيذه ، لكن الاستخدام ضئيل للغاية لدرجة أنه أصبح من الواضح أنهم صنعوا نظامًا معياريًا جديدًا جيدًا ، لكنه لم ينجح جيدًا.
لدي شعور من التحدث مع شباب مختلفين يشاركون في جافا سكريبت بأن الوحدات في JS تحولت بشكل أفضل. صحيح ، أنا أعرف هذا بشكل سطحي للغاية. أعتقد أن الرأي حول JavaScript يتأثر إلى حد كبير بحقيقة أنه يمكنك كتابة رمز سيء للغاية هناك. وإذا تمكنت من كتابة رمز سيء جدًا ، فيجب على شخص ما كتابته بكميات كبيرة. هذا يؤثر سلبا على تقييم اللغة. من وجهة نظر نظرية لغات البرمجة ، هذا ، بالطبع ، ليس جيدًا جدًا.
أليكسي : هل تمكنت من رؤية أحدث إصدارات JavaScript؟ ما الذي فاجأ بجانب نظام الوحدة؟
فيتالي : لا يمكنني القول أنني نجحت. لقد انقلبت على شيء ، لكن ليس عميقًا جدًا. لا أستطيع القائمة.
ما سيظهر في لغات البرمجة في المستقبل القريب
أرتيوم : نظرية لغات البرمجة هي بيئة أكاديمية إلى حد ما ، ومن حيث المبدأ ، مثيرة للاهتمام. ما هي الميزات الجديدة في اللغات التي توشك أن تظهر خلال 10-15 سنة؟ ما هي البحوث الجارية حاليا في هذا المجال؟
فيتالي : أود أن أقول إن الموضوع الأكثر سخونة الآن هو الكتابة التدريجية. هذا عندما يكون هناك في نفس الوقت في البرنامج أجزاء محددة وليس أجزاء مطبوعة. إنه لبيثون وجافا سكريبت ، ويتم ذلك للغات اللعب. أي أنه يمكننا أولاً الجمع بين الأجزاء المكتوبة وغير المكتوبة ، وثانياً ، لدينا طريقة بسيطة لتوسيع الكتابة.
أي أننا نقوم بتنفيذ نموذج أولي لشيء ما ، حيث يتم ذلك دائمًا بلغات ديناميكية دون أي أنواع ، ثم نبدأ في تعليق الأنواع على مكونات فردية ، أكثر وأكثر. من الناحية المثالية ، نحصل على برنامج مكتوب مع جميع الفوائد. هناك أخطاء أقل في وقت التشغيل وهلم جرا.
ربما هذا هو واحد من أهم التطورات. بعض العناصر موجودة بالفعل في شكل مكتبات ، لكن لا يزال هذا مجال بحث حتى الآن. إذا شاهدنا مؤتمرات رائدة حول لغات البرمجة ، فمن المؤكد أن هناك عدة أقسام مخصصة للكتابة التدريجية والكتابة. من المؤكد أنه سيتم تضمين هذا في معظم اللغات الديناميكية ، لأنه مريح للغاية. اتضح مزيج من عالمين.
لمدة عشر سنوات ، كان البحث يجري على أنواع تابعة ، عندما يعتمد النوع على القيم. المشكلة الأكبر هي أنه يمحو الخط الفاصل بين مرحلة التحويل البرمجي ومرحلة التنفيذ ، لأنه في مرحلة التحويل البرمجي ، لم تُعرف بعد قيم محددة ، لكن يجب التحقق من الأنواع. بمعنى ، تظهر قيم محددة في وقت التشغيل ، ولكن يجب أن تكون الأنواع صحيحة بالفعل.
وهناك تحتاج بالفعل إلى كتابة وظيفة يتغير فيها نوع النتيجة ، اعتمادًا على القيمة التي تم تمريرها. يعد عدم وضوح الحدود بين وقت التشغيل ووقت التجميع أمرًا مثيرًا للاهتمام للغاية ، حيث يتم دراسته أيضًا بفاعلية من الناحية النظرية لمدة 10-15 عامًا حتى الآن ومن المؤكد أنه سيقع في العديد من اللغات ، خاصة اللغات المكتوبة بشكل ثابت ، نظرًا لزيادة نظام الكتابة التعبيرية بسبب هذا التطور بشكل كبير.
صحيح ، هناك جانب سلبي. اتضح أن برامج الكتابة يمكن أن تكون معقدة للغاية. يبدو أن الأنواع تتحكم في كل شيء ، ولكن الكتابة صعبة للغاية ، لذلك في بعض الأحيان تعتقد أن الجحيم مع هذه الأنواع التابعة ، تأخذ نوعًا ما وتثبته.
أرتيوم : يفعلون ذلك هنا.
فيتالي : يمكن القيام بذلك أيضًا برغبة كبيرة ، وفي بعض الأحيان لا يوجد مكان نذهب إليه. عندما تحصل من الخادم ، لا تفهم ماذا ، وحتى لا تبدأ البرنامج ، لا تعرف ، لا يزال عليك استخدام مثل هذه الأشياء ، حتى في Haskell ، لا يوجد مكان للذهاب إليه.
كيف يتطور فيتالي هاسكل
أرتيوم : إنه أمر مضحك. العودة إلى هاسكل. أنت عضو في لجنة Haskell 2020. في Podlodka ، قلت إنك لم تفعل شيئًا هناك ، لكن في مقابلة واحدة ذكرت أنك ما زلت تعمل في أسر بسيطة محدودة الوظيفة. ما الأشياء المحددة الأخرى التي تنفذها ، أو تشرف عليها ، أو تشارك في تنفيذ ، ربما ، معيار هاسكل الجديد؟
فيتالي : هاتان اللجنتان مختلفتان. لدي لجنتين. إحداها هي Haskell 2020 ، التي لا يحدث فيها شيء حقًا ، إنها لجنة ميتة. والغرض منه هو كتابة معيار اللغة ، وبالتأكيد لن تكون مكتوبة. يبدو أفضل - "لجنة لتطوير معيار اللغة" ، لكنها لا تعمل.
تسمى اللجنة الثانية "لجنة الإشراف على المترجم GHC" - مترجم غلاسكو هاسكل. لقد كنت في ذلك منذ أكثر من عام بقليل ، مهمته أقل طموحًا. تراعي هذه اللجنة الميزات والاقتراحات لتغيير المترجم وإصدار اللغة التي يتم تنفيذها في هذا المترجم. يوجد Haskell قياسي ، ولكن يوجد Haskell يتم تنفيذه بواسطة مترجم محدد. فيما يلي مثال على ملحق اللغة هذا: "عائلات بسيطة النوع". هذه محاولة لتسهيل البرمجة على مستوى النوع بإضافة عناصر تحكم إضافية.
صحيح ، يجب أن أقول أن هناك بيئة حرة إلى حد ما ، وهذا هو ، ربما لم أتابع أي الدعائم طوال الصيف وأدين بالكثير من وقتي لهذه اللجنة ، أخطط للعودة إلى هذا.
مهمتي هناك - استنبط الأمر: هناك اقتراح موصوف ، أحتاج إلى البحث ، ربما أنصح المؤلف بوضع اللمسات الأخيرة على شيء والذهاب أخيرًا إلى اللجنة مع اقتراح إما للتضمين في المترجم أو الرفض. بعد تقديم هذا الاقتراح ، تناقش اللجنة وتتخذ قرارًا - يتم تحديد كل شيء جماعيًا هناك.
إحدى الجمل التي أدين بها مرتبطة بالتسطير السفلي في التعليقات التوضيحية القياسية. عندما لا يمكنك تحديد النوع بالكامل ، فهناك ثغرات هناك ، وهناك اقتراح لإصلاح هذا النظام من أجل تحليل كل شيء بشكل موحد. يمكن أن تكون الثقوب في التعليقات التوضيحية القياسية ، في تنفيذ الوظائف. يقترح نهج موحد معين.
تعتبر هذه اللجنة التغييرات الضيقة في المترجم.
أرتيوم : لدينا أيضًا لجنة توحيد - TC39. في البداية ، يأتي شخص ما وهو يبحث عن بطل. البطل هو شخص من لجنة مستعدة للإشراف على هذا الموقع. ثم ، حسب علمي ، لدينا تخريج بمرحلة. هناك 4 مراحل تتحرك فيها الميزة. الصفر هو عندما يكون هناك اقتراح فقط ، واحد عندما يتم العثور على بطل ووصف API رفيع المستوى ، وهلم جرا. الرابعة دخلت بالفعل في اللغة. يشارك الشخص الذي قام بالتحضير والمنسق في اجتماعات هذه اللجنة ويروج لهذا التوسّع. كيف يحدث هذا معك؟ هل هي مجرد لجنة ثم تقرر داخليًا؟
فيتالي : كل نشاطنا مفتوح ، ويتم إجراؤه على جيثب وجزئيًا في قوائم بريدية مفتوحة. يأتي مؤلف الاقتراح - بينما ندرس الاقتراح ، فإن التنفيذ لا يهمنا كثيرًا. قد يكون ، قد لا يكون ، نحن لا نحللها بأي شكل من الأشكال ، لا شيء يعتمد عليها. أولاً ، هناك مناقشة من جانب المجتمع الواسع ، يمكن للجميع التعليق على هذا الاقتراح.
ثم ، عندما يستقر ، يقدمه المؤلف إلى اللجنة ، أي يطلب من اللجنة أن تنظر فيه. يعين أمين اللجنة راعياً يشرف عليه. إنه يبحث أو يحلل أو ربما يقدم تحسينات أو يحاول بالعكس تبرير سبب عدم وجود هذا الحق في الوجود وبعد ذلك يخرج باقتراح برفض أو ربما إرسال للمراجعة أو القبول. تناقش اللجنة وتتخذ القرار.
وعندما تقرر اللجنة أننا نتفق مع هذا الموقع المسبق ، وأنها تنتقل إلى وضع مقبول ، من حيث المبدأ ، يمكن لأي شخص أن يأخذ تنفيذه. حتى هذه المرحلة ، قد لا يكون هناك أي تنفيذ ، نحن فقط نتخذ قرارًا - نعم ، سيكون من الجيد وجود مثل هذه الميزة في اللغة أو المترجم ، ولدينا هذه القائمة من العقد الفرعية المقبولة ، ولكن لم يتم تنفيذها.
علاوة على ذلك ، لم تعد هذه مهمة اللجنة ، ثم يقوم أي شخص بطلب سحب إلى الكود المصدري للمترجم ، فهناك مهندسون ، ويتقاطع الفريق جزئيًا مع اللجنة ، والذين يقررون بالفعل ما إذا كان طلب السحب هذا مقبول أم لا.
نظرًا لأن اللجنة توافق على قبول هذا ، أي أنه من حيث المبدأ ، من الضروري قبول طلب الدمج ، ولكن هناك أسئلة هندسية ، لم يتم ترميزها هناك ، ويتم حل بعض مشكلات الأداء بواسطة الفريق الذي يقوم بتطوير برنامج التحويل البرمجي مباشرةً. هذا لم يعد مهمتنا.
أليكسي : اتضح الآن أن لدى هاسكل معايير قديمة جدًا. أرى أن هناك هاسكل 2010.
فيتالي : نعم ، 2010 ، قديم جدًا. كانت هناك عدة محاولات لكتابة واحدة جديدة. كانت هناك فكرة لإصدار المعايير كل عام ، ولكن لسوء الحظ ، فشل كل ذلك. في عام 2016 ، عقدت لجنة 2020 ، لكنه لم يفعل شيئًا أيضًا. هناك عدة أسباب لدرجات متفاوتة من الصعوبة ، لماذا هذا العمل غير مستمر. نعم ، أحدث معيار لعام 2010 ، ليس هناك معيار جديد وليس من الواضح أنه سيظهر.
حول الدورات والمشاريع الجديدة
أرتيوم : لنعد إلى نشاطك الرئيسي ، إلى التدريس. التقيت أنا شخصيا في سياق نظرية الفئة ، التي أحبها حقًا. أنت تقول أنك لا تحبه. ما هي الدورات الأخرى التي لديك والتي قد تكون فخورا بها وتلك الدورات التي تعتقد أنه سيكون من الجيد الالتقاء بها؟ على سبيل المثال ، قد تكون الدورة التدريبية مع عضادات ، ولكن من حيث المبدأ ، فإن البرنامج السردي نفسه جيد جدًا.
فيتالي : أولاً ، نشرت
على يوتيوب جميع الدورات التدريبية التي لدي. لديّ دورة عن إدريس - هذه لغة برمجة مع أنواع تابعة ، وحتى نسختين ، قرأتها مرتين. لديّ أيضًا دورتان في برنامج مترجم لغة هاسكل هناك. واحد مكرس للقضايا النظرية النموذجية. لا أتذكر الاسم تمامًا ، ولكن هناك حول كيفية عمل نظرية الكتابة مباشرةً في برنامج التحويل البرمجي Haskell.
الفكرة بسيطة: يتم تجميع جميع رموز هاسكل في بعض الحسابات البسيطة إلى حد ما ، ما يسمى نظام F مع امتدادات صغيرة. هذا هو في الواقع في رمز المترجم ، ويركز الدورة التدريبية على كيفية استخدام هذه العناصر من نظرية النوع مباشرة في المترجم.
وهناك دورة أخبر فيها بشكل عام عن تاريخ الاستدلال النوعي وكيف تم ترتيب الاستدلال النوعي في البداية ، عندما تم اختراعه في الستينيات ، قبل ترتيب الاستدلال اللغوي في لغة هاسكل ، ما هي الصعوبات كيف يعمل كل شيء.
هناك دورة قصيرة قمت بتدريسها في المدرسة الصيفية للرياضيات. هناك ، من وقت لآخر ، كما قيل لي ، يأخذون دورات في علوم الكمبيوتر حتى يستريح الأطفال. , , , , : . — — . , , , .
, , . - , , , , , , - . , - , . , , - - . .
. -, , , , , . , . , - , -, - , , . - , , - , . . , , .
, , , . , , , , , , .
: - ? , , . , , , , - .
: Computer Science Club. , , , . , .
10 . « GHC Haskell: ». GHC, , 40 , 10 . : .
, Haskell, , . , , . .
, 1-2 . . , ,
. , : , — , - , . , .
, , , . , , . , .
, , , , , . , .
: , JetBrains - , . ? , - ?
: JetBrains , Haskell , JetBrains Haskell- , .
: Haskell JetBrains?
: Haskell c JetBrains, . , .
: Haskell JetBrains?
: - Haskell JetBrains? , .
: , . ()
: . , Java, Haskell.
: , JetBrains?
: JetBrains Education. JetBrains Research — , Education — .
JavaScript-
: , , , JavaScript? , , , Elm, Haskell.
: -, . GHCJS , , , . Elm , Haskell, . , , - .
, , , . JavaScript .
, Idris — Idris PHP, JavaScript, . . , , JavaScript Haskell .
, - , — , — , .
— , , , , . , . ,
HolyJS , , , , , . — , .
, λ- , — λ-, , , . , λ-, , .
1936 , — . , .
: , ? Swift, , enum , Union, ?
: , , . : , , . , , Python , , .
, , Python, . , , , .
, , , , , . C#. C# : -, Microsoft Java, , ,
, Delphi, #, C# , Haskell, .
, . , JetBrains, Kotlin, . Kotlin, C#, Swift Apple, . , .
++ - , , , - , , , . , , , JavaScript , . , , .
, , .
: -, , , Mozilla Rust.
: , Mozilla — , , - open source-, . . , Rust , . , Rust , - , .
, Twitter — - Microsoft, , , C++ Microsoft Rust. , . , Rust. , , , , . , .
Rust , - , .
: ! , , , , , — , . , , , - , ?
: , , . , . -, , . . , , — . — , , . .
— , , -, , . , .
, , , . , , . . , , , , . - . . .
: ? , , , , , ?
: , . , , , , . , - , , , , . , . , — . , , .
, — .
: HolyJS ? , - ? , .
: , , , , , . , , . , .
, , AppsConf. . . , .
, , , . : « , ?». - , , : , , Twitter , Google . , .
. , , , , , , , .
, , , . — , .
أرتيوم : سؤال آخر ، ربما فوضوي. هل كتبت كتابا عن هاسكل يدعى
هاسكل في العمق ؟
فيتالي : لسوء الحظ ، لم يكتب الكتاب في هذه العملية. وهذا ما يسمى "برنامج الوصول المبكر". ولسوء الحظ ، تباطأت ، وأعود ببطء للعمل على ذلك. حوالي نصفها مكتوب هناك ، والنصف الثاني متأخّر ، والذي أشعر بالخجل الشديد لهؤلاء الذين حصلوا على هذا الوصول المبكر.
أرتيوم : هذه حقيقة مثيرة للاهتمام: هناك رأي في المجتمع مفاده أن الكتب المتعلقة بالبرمجة ، خاصة إذا لم تكن تتعلق بالمعرفة الأساسية ، ليست جيدة جدًا ، لأن المعلومات سرعان ما أصبحت قديمة. كيف يمكنك ، بصفتك مؤلف الكتاب ، أن تتمتع بهذه التجربة؟ وهل فكرت في هذه المشكلة بحيث تصبح المعلومات التي تقدمها في كتاب قديمة بسرعة؟
فيتالي : بالطبع ، لا أفهم كيف تتم كتابة الكتب في JavaScript - في رأيي ، هذه مهمة مستحيلة على الإطلاق. مع هاسكل ، بهذا المعنى أسهل قليلاً. ولكن هنا هو ما يمكنني قوله.
عندما ندرس الرياضيات في المدرسة ، تكون هذه الرياضيات قديمة بشكل عام أيضًا. هذه هي الأشياء التي ظهرت قبل آلاف السنين ، بعضًا من نظرية فيثاغورس. ربما لا تزال قيد التنفيذ ، ولكن القول إن شخصًا ما يقيس ارتفاعات الأهرامات باستخدام نظرية فيثاغورس شيء من هذا القبيل ، وعادة ما يستخدم الروليت الليزري أو شيء من هذا القبيل.
إنه نفس الشيء هنا. إذا كان الشخص محترفًا في شيء ما وكان يستخدم بعض التكنولوجيا لفترة طويلة ، فهو بالطبع لا يحتاج إلى كتاب. حسنًا ، الكتاب ليس من أجله وهو مكتوب ، إنه مطلوب من أجل الدخول في نوع من التكنولوجيا ، من أجل البدء في فهم هذا. وعندما تدخل بالفعل ، لديك مصادر أخرى للتنمية.
لذلك ، يبدو لي أن الكتب لن تذهب إلى أي مكان. عندما تبدأ في تعلم شيء ما ، يمكنك بالطبع تعلم لغات البرمجة عن طريق المقالات ، لكن في معظم الحالات لن تنجح النتيجة جيدًا. غالبًا ما يكون هذا هو نقل أفكارهم حول لغة برمجة أخرى إلى لغة جديدة. أنت لا تتعرف على الإنشاءات الاصطلاحية لهذه اللغة ولا تعرف كيفية استخدامها بشكل صحيح.
لذا فمن الأفضل في البداية أن تأخذ الكتاب وتصنيفه والحصول على الأساس. دعه لا يصف أحدث إصدارات المكتبات ، ودع يضاف شيئًا إلى اللغة ، كل ذلك ممكن للحاق بالركب. للحصول على الأساس ، في رأيي ، لا تزال بحاجة إلى كتاب. هذا لجميع لغات البرمجة ، حتى بالنسبة لجافا سكريبت. على أي حال ، نحن بحاجة إلى نوع من الاستقرار ، مثل هذه النقطة المرجعية ، والتي يمكنك الرجوع إليها.
بالمناسبة ، هذا هو أحد الأهداف عند كتابة معيار لغة Haskell لإنشاء هذه النقطة الثابتة في تاريخ اللغة التي يمكنك من خلالها كتابة كتاب. علاوة على ذلك ، يمكن أن تتطور اللغة بطريقة أو بأخرى ، ولكن هناك معيارًا ، ويمكن لأي طالب التركيز عليه.
ومن المثير للاهتمام كيف تلعب الكتب دور المعيار في العديد من لغات البرمجة. على سبيل المثال ، كتب Straustrup كتابًا على C ++ ، وهذه نقطة يمكنك الرجوع إليها دائمًا. لقد مضى برنامج C ++ إلى الأمام ، ولكن عند تعلم اللغة ، من الممكن التركيز على هذه النسخة ، التي وصفها Straustrup.
أرتيوم : لقد
أثرت موضوعًا مثيرًا للاهتمام حول الموارد التي يحتاجها الناس ، والذين لا يتعلمون اللغة ، لكنهم يرغبون في التعمق والتقدم. يمكنك تقديم النصح لبعض الموارد التي تستخدمها للدراسة ، والموارد التي من الجيد أن تدرسها للمهندس لتغمر نفسك في النظرية. علوم الكمبيوتر ، إلى نظرية النوع ، أو ، كما قلت ، القضاء على جهل معين للمهندس؟
فيتالي : من الصعب علي أن أقدم مثالاً ، لا يمكنني القول على الإطلاق إن لديّ أي مصادر معلومات منتظمة. ربما أهم مصدر بالنسبة لي هو تويتر. اتضح أن كل شيء يأتي لي عبر تويتر. تظهر لي بعض الروابط المهمة ، وأحتفظ بها بنفسي وأقرأها بشكل دوري. لدي شعور بأنه على الأقل في هاسكل لا يوجد مثل هذا المصدر ، ولكن هناك الكثير من الأشخاص المحترمين الذين يكتبون أشياء معقولة.
لقد حاولت بطريقة ما استخدام رديت لهذا الغرض ، لكن بطريقة ما لم ينجح ذلك بالنسبة لي ، ليس لدي الوقت الكافي لمتابعة ذلك. لكن على تويتر ، على أي حال ، كل ما يظهر عاجلاً أم آجلاً يأتي إلي. بدا بسرعة ، المثير للاهتمام - المحفوظة ، ثم قرأ.
وهكذا ، بشكل عام ، أن أوصي بشيء في مجال علوم الكمبيوتر أو تكنولوجيا المعلومات ، لأكون صادقًا ، لست مستعدًا ، لا أعرف هذا الموقع أو المورد. بالنسبة لأولئك المشاركين في لغات البرمجة ، هناك مصدر مهم هو الموقع
http://lambda-the-ultimate.org . جميع الأشياء الأكثر إثارة للاهتمام تظهر هناك والمناقشة مستمرة. هذا أمر لا بد منه لقراءة للراغبين في نظرية لغات البرمجة.
ماذا تقرأ للمبرمج
أليكسي : أنت تقول أن الكتب لا تنتهي. هل هناك قائمة بالأشياء التي يجب قراءتها ، أو مجرد كتبك المفضلة لتوصي بها؟ أنا أتحدث عن نظرية البرمجة ، ومحو الأمية الهندسية العامة.
فيتالي : يُطلب مني بشكل دوري إعداد قائمة ، لا أقوم بمثل هذا العمل ، إنها مهمة صعبة للغاية.
وفقًا لنظرية لغات البرمجة ، لبدء الانتقال إليها ، يوجد كتاب بيرس
"أنواع في لغات البرمجة". هذا هو عموما التمهيدي لبدء أنواع مع. من المحتمل أن يكون الثلث الأول مفيدًا لجميع المبرمجين.
كنت أنا وزميلي نترجم كتابًا بعنوان "
مقدمة في نظرية لغات البرمجة" . إنه صغير جدًا ، وهو ما يفسر الدلالات الرسمية ، والاستدلال النوعي ، والأشياء النظرية من التجميع. هذه مقدمة مفيدة للغات البرمجة.
يوجد كتاب تشارلز بيتزولد
بعنوان "تورينج المشروح" . هذا نوع مذهل: أخذ المؤلف مقالة تورينج عام 1936 ، حيث وصف تورينج ما أصبح يعرف لاحقًا باسم آلة تورينج ، وكتب كتابًا سميكًا يشرح هذا المقال. والمقالة نفسها هي صفحات 15. علاوة على ذلك ، هناك قصة من حياة تورينج نفسه ، خلفية هذه المهمة ، كيف حدث كل شيء. قسماً تلو الآخر ، يقدم جزءًا من المقالة وشرحًا لما كان المقصود هناك.
إذا قرأنا المقال الآن ، فسيكون ذلك صعبًا للغاية بالنسبة لنا. لكن هذا الكتاب الصادر عن بيتزولد مدهش ، فهو يعيد صياغة السياق بأكمله ويصف المقال نفسه. أوصي بهذا الجميع ، هذه قراءة ممتعة للغاية ، توسع العقل. يوجد أيضًا حول حساب التفاضل والتكامل ، لأنه قريب ، ويتم طرح الأسئلة الفلسفية المتعلقة بالحسابات.
بالطبع ، أيضًا ، من وجهة نظر تكنولوجية ، أنا معجب كبير بكتاب
ماكونيل "Perfect Code" . يبدو لي أن هذه قراءة مهمة أيضًا. لا يمكنك قراءة كل شيء على التوالي ، ولكن ببساطة فتحه على صفحات عشوائية ، وقراءة بضع صفحات وإغلاقه. هذا حول كيفية كتابة التعليمات البرمجية.
صحيح ، لقد تحدثت مؤخرًا مع العديد من العاملين المتنقلين ، يقولون إن هذا كتاب غبي لا يوجد فيه شيء مفيد. ولكن الأمر يتعلق بكيفية كتابة هذا الرمز بحيث يعيش لفترة طويلة ، بحيث يمكن دعمه ، وتغييره. ربما ليس لديهم حقا مثل هذه الاحتياجات.
نعم ، وليس هناك سويفت ، وليس كوتلين ، نوع من جافا هناك ، أمثلة مختلفة بلغات مختلفة لم يعد المبرمجون الحديثون يتحدثون فيها عن أي شيء. بدأ الكتاب الألفين. لكنني أعتقد أن هذه القراءة مفيدة للغاية لأي مبرمج. ماكونيل لا يزال جيدًا لأنه يؤكد كل شيء بالبحث ، ويقول: "إذن ، لقد أجرينا مثل هذه الدراسة ، مع هذا ، وكذا ، وهنا النتائج. دعونا نناقش معا كيفية كتابة التعليمات البرمجية لجعلها جيدة. "
هنا ، ربما ، ما يكفي من مثل هذه القراءة.
Artyom : بالنسبة إلى إصدار أكثر تخصصًا ، سأطلب: أوصيك بـ "تطبيق المترجم الحديث" ، والذي يتوفر بثلاثة إصدارات -
Java و
C و
ML .
فيتالي : نعم ، هذا كتاب عن المترجمين. لا أعرف ما إذا كان الجميع بحاجة إلى قراءتها ، فمن الأرجح أن يكون ذلك بالنسبة لأولئك المهتمين بمجال الترجمة. ولكن ، نعم ، أحبها - إنها صغيرة ، وبالعمل معها ، يمكنك حقًا كتابة مترجمك الخاص. لست متأكدًا من أن جميع المبرمجين بحاجة إلى كتابة برنامج التحويل البرمجي الخاص بهم ، ولكن إذا كنت فضوليًا بشكل مفاجئ ، فإن كتب Appel مثيرة للاهتمام حقًا ، لكنها بالفعل ضيقة.
الآن لا أستطيع تذكر كل شيء. بشكل دوري ، ينبثق شيء ما إلى السطح ، لأنني في وقت واحد قرأت كثيرًا. على سبيل المثال ،
"هيكل برامج الكمبيوتر وتفسيرها" هو أيضًا كلاسيكي مفيد لقراءة التمارين والقيام بها. حتى لو كنت لا أوافق تمامًا ، إلا أن القراءة نفسها مفيدة جدًا.
سيأتي فيتالي براجيلفسكي إلى مؤتمر HolyJS 2019 في موسكو يومي 8 و 9 نوفمبر 2019 مع تقرير "JavaScript في خدمة المعلومات النظرية". يمكن شراء التذاكر على الموقع الرسمي .