سؤال

أنا مبرمج C++ ذو خبرة ومهارات بايثون متوسطة.الأسباب التي دفعتني إلى دراسة بايثون في المقام الأول هي:

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

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

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

بعد النظر في بعض لغات البرمجة، أعتقد أن Scala يبدو مرشحًا جيدًا:يعجبني استنتاج النوع ويعمل على JVM لذا يجب أن يكون متاحًا أينما يتوفر JVM.يمكنني أيضًا معرفة المزيد حول البرمجة الوظيفية عند استخدامها.

لكن...لدي أيضًا بعض الشكوك، وهذا هو المكان الذي آمل أن يتمكن مجتمع Stack Overflow من مساعدتك فيه:

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

أخيرًا، ما رأيك في بعض عيوب Scalas؟

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

المحلول

  • قابلية التنقل:لينكس وويندوز على الأقل آمل.وماذا عن الهواتف المحمولة، هل نجح أحد في تشغيلها هناك؟

نعم.هناك بعض الحركة حول Scala على Android.أما بالنسبة لـ J2ME، فقد رأيت شيئًا في هذا الصدد، ولكن ليس كثيرًا.توجد بعض التعليمات البرمجية المتعلقة بـ J2ME في مستودع التعليمات البرمجية المصدر.لست متأكدًا من مدى جدواه، لكن يبدو لي أنه لا يوجد طلب كبير عليه.

سأذكر أيضًا أنه يوجد/كان هناك تجمع في Scala-Lang حول المنصات المستهدفة المرغوبة، وكانت J2ME واحدة منها، منخفضة جدًا على عمود الطوطم.

  • التوافق مع لغة C++:هل يمكنني مزج كود C++ مع Scala؟(جيني؟)

وكذلك يمكنك مزج C++ مع Java مهما كان الأمر يستحق ذلك.إذا لم تكن لديك أي خبرة في ذلك، يمكنك فقط قراءة موارد Java، حيث أن أي شيء فيها سيكون قابلاً للتطبيق مع Scala دون أي تغييرات (بجانب بناء جملة Scala).

  • نموذج البرمجة:لا أشعر بالراحة تجاه التحول إلى FP في هذا الوقت.هل يمكنني استخدام OO والإجرائية مع بعض FP في البداية ثم تغيير النسب كما أتعلم؟

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

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

ربما يمكنك إلقاء نظرة على المصفوفات سلسلة في مدونتي الخاصة حول كتابة فصل دراسي في Matrix.على الرغم من أنه يبدو مثل كود OO القياسي، إلا أنه في الواقع عملي للغاية.

  • نضج سلسلة الأدوات:ما هي تجربتك مع IDEs ومصححات الأخطاء؟أنا أستخدم Eclipse الآن ويبدو أنه على ما يرام.

تتمتع كل من IDEA (IntelliJ) وNetBeans وEclipse بدعم جيد لـ Scala.يبدو أن IDEA هو الأفضل، ويستمر NetBeans/Eclipse في القفز على بعضهما البعض، على الرغم من أن NetBeans كان بالتأكيد أكثر استقرارًا من Eclipse مؤخرًا.من ناحية أخرى، فإن دعم Eclipse يتخذ مسارًا واعدًا جدًا من شأنه أن يؤدي إلى نتائج خلال الأشهر الستة المقبلة أو نحو ذلك - إنه مجرد طريق وعر.:-)

بعض العلامات المثيرة للاهتمام لأدوات Scala لهذه البيئات هي حقيقة أن مكون Eclipse الإضافي قيد التطوير يستخدم AOP للدمج بشكل أكثر سلاسة مع IDE بأكمله، وأن مكون NetBeans الإضافي تتم إعادة كتابته بالكامل في Scala، وأن هناك Scala Power Pack على IDEA التي يدعم، من بين أمور أخرى، ترجمة كود Java إلى كود Scala.

يمتلك فريق EMACS أدوات واسعة النطاق لـ Scala أيضًا، ويدعمها الكثير من المحررين الصغار أيضًا.أنا مرتاح جدًا لدعم jEdit للبرامج والنصوص الصغيرة، على سبيل المثال.

هناك أيضًا دعم جيد لـ Maven - في الواقع، الطريقة القياسية للتثبيت يرفع هو تثبيت maven ثم بناء نموذج الرفع.سيؤدي ذلك إلى الحصول على إصدار Scala المناسب.هناك scala:cc الهدف الذي سيؤدي إلى إعادة الترجمة أيضًا.

عند الحديث عن إعادة الترجمة، لا يقوم Maven ولا Ant بشكل خاص بعمل جيد في تحديد ما يجب إعادة ترجمته.ومن تلك المشكلة نشأت SBT (أداة بناء بسيطة)، مكتوبة بلغة Scala، والتي تحل هذه المشكلة من خلال استخدام البرنامج المساعد للمترجم Scala.يستخدم SBT نفس تخطيط المشروع مثل Maven، بالإضافة إلى مستودعات Maven/Ivy، ولكن يتم إجراء تكوينات المشروع في كود Scala بدلاً من XML - مع دعم ملفات تكوين Maven/Ivy أيضًا.

  • سرعة التعلم:بالنظر إلى تجربتي، ما مدى سرعة وصولي إلى مستوى عملي مع Scala؟

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

  • تعيين:كيف بالضبط يمكنك نشر برنامج Scala؟هل هي جرة، هل هي قابلة للتنفيذ؟

نفس الشيء مثل جافا.يمكنك نشر ملفات JAR أو WAR أو أي من أهداف Java الأخرى، لأن مترجم scala يقوم بإنشاء ملفات فئة.في الواقع، يمكنك استخدام Java's jar لإنشاء ملف JAR الخاص بـ Scala من ملفات الفئة، وأهداف Maven لدعم الرفع في إنشاء ملفات WAR.

هناك بديل لملفات البرامج النصية، بالرغم من ذلك.يمكنك استدعاء "scala" لتشغيل كود مصدر Scala مباشرة، على غرار البرنامج النصي Perl of Shell.ويمكن القيام بذلك أيضًا على نظام Windows.ومع ذلك، حتى مع استخدام البرنامج الخفي لتسريع التنفيذ، تكون أوقات البدء بطيئة بدرجة كافية بحيث يحتاج الاستخدام الفعال لـ Scala في بيئة البرمجة النصية الثقيلة إلى شيء مثل بندقية مسمار.

أما بالنسبة لعيوب سكالا، ألق نظرة على إجابتي (وغيرها) في هذا سؤال تجاوز سعة المكدس.

نصائح أخرى

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

بخصوص أسئلتك:

  • يمكن تشغيل Java أينما يوجد JVM.ومع ذلك، لا حظ مع الهواتف المحمولة.أنت بحاجة إلى JRE كامل، وليس المجموعة الفرعية المتوفرة هناك.
  • هذا ممكن مع JNI.إذا كان هناك شيء ممكن مع Java، فهو ممكن مع Scala.يمكن لـ Scala استدعاء فئات Java.
  • تعد البرمجة الوظيفية نقطة قوية في Scala - فأنت بحاجة إلى تعلمها.ومع ذلك، يمكنك أيضًا البدء في استخدامه دون الاستفادة الكاملة منه والعمل معه.
  • هناك مكون إضافي لـ Eclipse.إنه ليس الأفضل، لكنه سيقوم بالمهمة.المزيد من التفاصيل هنا.
  • إذا كنت من ذوي الخبرة، أود أن أقول بسرعة حقا.أنصحك أن تجد كتابًا لتبدأ به.
  • انظر الى هذا التعليمات دخول للنشر.

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

يتمتع Scala بدعم كامل للبرمجة الحتمية، كما أن كتابة البرامج التي لا تحتوي على عناصر FP فيها أمر سهل (ومع ذلك، FP مفيد ويستحق التعلم على أي حال).

سرعة التعلم:بالنظر إلى تجربتي، ما مدى سرعة وصولي إلى مستوى عملي مع Scala؟

بسرعة.هناك عدد من الميزات المثيرة للاهتمام في Scala والتي قد لا تكون مألوفة للأشخاص القادمين من بيئة C++ أو Java، مثل بعض ميزات نظام الكتابة على سبيل المثال.يجادل البعض بأن حقيقة أن هناك الكثير لتتعلمه في سكالا قبل أن تعرف كل شيء هو أمر رائع مشكلة مع اللغة؛أنا أعترض.وجود تلك الميزة ميزة من اللغة.والمزيد من الميزات مرحا.بعد كل شيء، ليس عليك استخدامها جميعًا مرة واحدة، تمامًا كما لا يتعين عليك شراء كل ما يتم بيعه في المتجر.

سرعة التعلم:بالنظر إلى تجربتي، ما مدى سرعة وصولي إلى مستوى عملي مع Scala؟

أنا أيضًا أنحدر من خلفية C++، والشيء الوحيد الذي لاحظته هو أنه نظرًا لأنك ستكتب عددًا أقل بكثير من التعليمات البرمجية مقارنة بـ C++ لمهمة مماثلة، فسيتم تسريع تعلمك حيث ستنجز المزيد في نفس الفترة الزمنية.وكانت هذه هي نفس الظاهرة التي واجهتها مع روبي.

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

يعد التقاط لغة نموذج معروف بالفعل مهمة سهلة نسبيًا إذا لزم الأمر.نظرًا لأن Scala هي FP (على الأقل ذكرتها) وC++/Python هي OOP، فهي لغة جيدة بالنسبة لك، على ما أعتقد.

يجب عليك التسجيل في هذه الدورة من قبل منشئ Scala نفسه.

https://www.coursera.org/course/progfun

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

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

فيما يلي دليل قصصي فيما يتعلق بقابلية التعلم لـ Scala.

في شركتنا، حصلنا على العديد من المتدربين من جامعة واترلو.قيل لهم أن يكتبوا في سكالا؛لم أر ذلك من قبل.

لقد التقطوا سكالا ورفعوا بسرعة ملحوظة؛الآن ينتجون كود سكالا؛قد لا يكون مثاليا، ولكن لا أحد مثالي.

لذا، فإن حقيقة أن المدير لا يعرف سكالا قد لا تكون أفضل حجة عندما تقرر التبني.

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