كيف تصبح مبرمجًا من اليأس وترتفع إلى أوج النجاح؟ اليوم في الاستوديو الافتراضي لدينا باشا
asm0dey Finkelstein يجيب على الأسئلة. باشا هو واحد من القلائل الذين يعرفون كيفية إنشاء خلفية على Kotlin. بالإضافة إلى ذلك ، رأى مصدرًا مفتوحًا ، وشارك بنشاط في حياة المجتمع ، وحضر لمدة دقيقة تقريبًا جميع مؤتمرات جافا في موسكو.
كيف تجد الوقت للالتزام
- هناك العديد من المواضيع التي يمكن مناقشتها. أولاً ، أنت تتحدث في جوكر. ثانيًا ، أنت عضو نشط في المجتمع ، وتقوم بشيء مستمر. ثالثًا ، أنت تحضر باستمرار مؤتمراتنا ولسبب ما تعتقد أن هذا أمر جيد.
- بخصوص حقيقة أنني عضو في المجتمع. أنا ، مثل معظم الناس ، أعاني من متلازمة المحتال ، ليس لدي شعور بأنني أفعل الكثير من الأشياء المفيدة ، خاصة لمجتمع جافا ، خاصة مؤخرًا. آخر شيء فعلته كان مفيدًا للمجتمع - لقد كتبنا أنا ورفاق مكتبة رائعة لـ Spring تسمى Spring -flow-state-machine ، والتي تسمح لك بالتحكم في حالة الكائنات في التطبيق. إنها صغيرة ومريحة.
- هذه هي المكتبة نفسها التي تروج الآن في الربيع الرئيسي؟
- لا ، ربما يكون Spring Statemachine موجودًا ، وهو بائس إلى حد كبير: إنه مكتوب بشكل سيء للغاية ، ويعمل بغرابة كبيرة ولا يفعل شيئًا على الإطلاق. يدير Spring Statemachine حالة التطبيق عندما يكون التطبيق الخاص بك نوعًا من statemachine محدود ويعمل بشكل مختلف في ولايات مختلفة. لقد فعلنا شيئًا آخر: عندما يكون لديك نوع من الكيانات ، فإنك تحدد دورة حياة لها ويمكنك أن تقودها خلال دورة الحياة هذه. ومهمتنا هي التفكير في كيفية عمل معاملاتك وكل ذلك. لدينا ببساطة التعليق التوضيحي @ في مكان واحد صحيح ، كما تعلمون ، وهذا يكفي لنا أن نقول أنها تسيطر على الدولة. الشيء الرئيسي هو أن هناك DSL مناسب يسمح لك بتحديد أين يمكنك من أين وماذا تريد القيام به على طول الطريق.
"وأنا أفهم بشكل صحيح أنه بما أن هذا الشيء يتحكم في الأشياء المجردة ، فهل يمكنك أن تفعل نفس الشيء الذي يفعله Spring Statemachine؟"
- نعم ، صحيح ، هناك فارق بسيط. يبدو أن الكيان الرئيسي الذي يتحكم فيه هذا الشيء هو كيان بمعرف أو شيء من هذا القبيل. هذه مكتبة صغيرة جدًا من واجهتين ، واثنين من استثناءات وأربع فئات.
"والشيء الذي فعله الربيع - لماذا تعتقد أن هذا شيء غريب ولماذا ليس من الواضح لماذا؟"
"من المفهوم لماذا يكون ذلك ضروريًا ، لقد تم القيام به بشكل سيء للغاية. يذكر أنه يعرف كيف يفعل كل شيء. أولاً ، لا يتم جمع الأمثلة التي لديهم في الوثائق ، وثانيًا ، إذا حاولت الخوض في شفرة المصدر (وكنت تتعمق دائمًا في شفرة المصدر في الربيع عندما تريد القيام بشيء ، لأنه لم تتم كتابة كل شيء في الوثائق) ، تكتشف أنه مكتوب بالطريقة التي من الأفضل عدم الكتابة. بالمناسبة ، يبدو أن Spring Batch عادة ما يكون لديه نفس الشكاوى.
"هل استخدمت Spring Batch أيضًا؟"
- يبدو لي أنني استخدمت كل شيء تقريبًا في نظام الربيع البيئي.
"وكيف تستمر في استخدامه؟"
- كما تعلمون ، في مكان العمل التالي لن يكون لدي ربيع ، سأحصل عليها. لم يكن خياري. ربما كنت سأستخدم Spring ، ولكن في الواقع ، في بودكاستنا ، قلت ذات مرة أن المفضل لدي هو Jooby microframework ، الذي يعرف كل شيء. كتبه شخص واحد من قبل بطل جافا. هناك أيضا حقن التبعية ، والتي بنيت على Guice. إنه رائع ، لديه نظام بيئي ، على عكس ، بالمناسبة ، من جميع الهياكل الدقيقة الأخرى.
- أرى أن هناك خياران - لـ Java و Kotlin.
"أظن أنك تستطيع لأي شيء." ربما يكون Scala ممكنًا أيضًا ، ولكن يجب عليك التخلي عن Guice ، والذي ربما لا يعمل مع Scala. أنا كالعادة أحب حقن المنشئ مع التعليقات التوضيحية. ويتم ذلك في Guice.
- وإذا كان من الممكن تجميع مثل هذا التطبيق بشكل ثابت باستخدام GraalVM ، فسيكون مجرد مساحة.
"لا أعتقد أنك ستربح الكثير هناك." إنه مثل الربيع - بالطبع ، ستفوز بشيء في الأداء.
- زيادة سرعة بدء التشغيل ، على سبيل المثال.
- بالطبع ، في الإنتاج ، سنجر بعض الأشياء الهامشية التي كتبها بطل جافا واحد ، وسنناضل من أجل سرعة بدء التشغيل هناك!
- فهمت.
- ربما الرجال الذين يهتمون حقًا بسرعة بدء التشغيل يأخذون بعض Azul Zing ويضبطونها بشيء مكتوب على SE العارية.
"هل فهمت بشكل صحيح أن المكتبة التي كتبتها كانت مفتوحة المصدر وكل ذلك؟"
- نعم ، إنه مفتوح المصدر من صاحب العمل السابق وينتمي إليه بطريقة ما ، كما تم استخدامه في مسودة العمل.
- فهمت. أي أنك كتبته خلال ساعات العمل.
- نعم كتبوا خلال ساعات العمل.
- وما رأيك ، هل هناك أي احتمال لكتابة البرنامج بعد ساعات؟
- أكتب برنامجًا بعد ساعات ، على الرغم من أنه ليس برنامجًا حقيقيًا الآن. وآخر شيء كتبته ... الآن في روسيا ، المشكلة مع الأقفال حقيقية ، وبالنسبة لي المشكلة الملحة هي تجاوز هذه الأقفال. هناك خادم وكيل رائع يسمى 3proxy ، لذلك كتبت Ansible playbook لـ Fedora و Ubuntu و Debian و Centos واختبرت كل شيء وشاركته على GitHub. وفي Ansible Galaxy أيضًا ، تمت مشاركتها.
"وأين تجد الوقت لذلك؟"
- أنا ، مثل الجميع ، لدي مشاكل مع الوقت ، لأنني أتعب في العمل ، ولدي عائلة ، وأحتاج إلى قضاء بعض الوقت على الأقل مع عائلتي. ولكن في عطلة نهاية الأسبوع ، تنام العائلة في وقت متأخر ، وأنا قبرًا وأستيقظ مبكرًا ، ويعمل رأسي بشكل جيد في الصباح ، ويمكنني القيام بالكثير من الأشياء. أحيانًا أكتب شيئًا حتى قبل العمل.
- ما الذي تنصح به لأولئك الذين يرغبون في البدء في كتابة شيء ما في مصدر مفتوح ، لكنه لا يعمل؟
- اسأل نفسك لماذا لا يعمل. واعتمادًا على إجابة السؤال ، حاول كتابة شيء ما.
- هناك إجابة قياسية: لا وقت ، ليس من الواضح أين أحتاجها.
- بالنسبة لـ "لا وقت" ، يحدث أنه لا يوجد وقت حقًا ، ولكن يحدث أنه لا يوجد وقت حقًا. "لا وقت" هي طريقة لقول أنه ليس لدي دافع. هذا واضح تمامًا ، وليس حقيقة أنه يجب محاربة ذلك. لا يُطلب من جميع الأشخاص الالتزام بمصدر مفتوح. هذه طريقة رائعة لفعل شيء ما لنفسك وللمجتمع ، ولكن لا يدين أحد بأي شيء لأي شخص.
إذا لم يكن واضحًا من يحتاجك ، فالسؤال مرة أخرى هو السبب. هناك سببان: لا يزال لديك القليل من الوقت للقيام بشيء مثل هذا في البرمجة ، ويبدو لك أن هذا شيء ممل للغاية ، ومن المحتمل أن يكون هذا صحيحًا ، في هذه المرحلة لا يمكنك مساعدة أي شخص. على الرغم من أنني أعرف الناس ، على سبيل المثال ، Slava Semushin - أول شيء فعله - بدأ في التهريب في Alt Linux قبل أن يبدأ البرمجة في مكان ما في الإنتاج. لقد كان طريقه إلى البرمجة (هذه مزحة بالطبع). لكنه لم يفهم شيئًا حقًا ، عندما بدأ ، فهم على طول الطريق. وهذه لم تعد مزحة.
يحدث أن الناس منخرطون في العمل لفترة طويلة ولا يفهمون ما يمكنهم القيام به. لقد كنت في هذا الموقف لفترة طويلة جدا. منذ حوالي 4 سنوات بالتأكيد. أنا في الشركة لمدة 6 سنوات ولم أفهم ما يمكنني القيام به. ولكن بمرور الوقت ، رأيت أن هذا المكون الوحيد من النظام الذي أريد إعادة كتابته ، من حيث المبدأ ، يمكن فصله إلى وحدة منفصلة وإفراط في الشعور به. يجب أن يتم الاتفاق مع صاحب العمل. الشيء الرئيسي هو اتخاذ الخطوة الأولى.
في بعض الأحيان لا يرغب صاحب العمل في التنسيق ، فهذا موضوع حيوي جدًا. على سبيل المثال ، ليست Tinkoff حريصة على فتح بعض مكوناتها الخلفية ، على الرغم من أنها يمكن نظريًا.
تبدأ في رؤية الفرص بمرور الوقت. الشيء الرئيسي هو عزل هذا إلى مكون منفصل. إذا لم يسمح صاحب العمل بذلك ، فسوف تستخدمه داخل صاحب العمل ، سيكون هناك مصدر داخلي مفتوح ، كما يفعلون في بعض زالاندو. ثم في المشروع التالي سترى أنه يمكن تمييز هذا الشيء أيضًا.
- واو. أو اكتبها مرة أخرى ، على سبيل المثال.
- حول "اكتب مرة أخرى". واحدة من المشاكل التي قمنا بحلها في المكان الأخير كانت تسجيل الدخول. من الواضح أن جميع krupnyaki يتم الخلط بينهم وبين التسجيل المركزي ، بدون هذه الحياة على الإطلاق. الحل القياسي لهذا هو مكدس ELK و ElasticSearch و Logstash و Kibana. فقط هناك مشكلة صغيرة - هذه هي Logstash. مرونة البحث ، كيبانا تعمل بشكل جيد ، لكن Logstash لا يعمل. إما أنه لا يعمل باستمرار ، أو ببطء شديد. إذا لم يعمل بشكل مستمر ، يكون حجم قائمة الانتظار 5000 رسالة. مكتظة أكثر - تبدأ الرسائل في الانخفاض. بعبارة ملطفة ، ميزة غير سارة. لذلك ، كان لدينا كافكا بدلاً منه. في Sberbank ، كتبنا مُلحق كافكا الخاص بإعادة تسجيل الدخول الخاص بنا ، وهو أيضًا مفتوح المصدر ويعمل بشكل جيد مع نفسه.
- هذا ما كان عليه!
- هناك بالفعل ثلاثة منهم ، لست متأكدًا مما رأيتموه.
- حسنا. العودة إلى موضوع المصدر المفتوح وتسجيل الدخول. ولماذا يستخدم الأشخاص مسجّلين مركزيين في المؤسسة باستمرار ، حاولوا كتابتها بأنفسهم ، إذا كان هناك Linux والطرق التي اخترعها الأجداد - تحميل كل شيء إلى ملف ، على سبيل المثال؟
- لا أعرف في لينكس التسجيل المركزي العادي. هناك rsyslog ، وهو تنسيق جيد ، ولكن ، بعبارة ملطفة ، لا يتم تكييفه ، على سبيل المثال ، مع Java ، لأنه إذا نظرت إلى نوع من مسارات المكدس ، اتضح فجأة أن مسارات المكدس هي الكثير من الخطوط ، وليست واحدة فقط. لذلك في rsyslog ستكون هذه إدخالات سجل منفصلة. إذا اختلط كل هذا في كومة واحدة كبيرة ، يبدو لي أنه سيؤذي الجميع.
- نعم ، على الأرجح.
- وأنا بصراحة لا أعرف ما يضمن يوفر rsyslog. عادة ما أكون متورطًا عندما يكون لدي نوع من الحل ، أحاول العثور على مكانه في نظرية CAP. وأنا لم أجد هذه المعلومات على rsyslog ، ربما كنت أبدو سيئة. لكن بسرعة لم أستطع تحديد ذلك. بشكل عام يضمن التسليم لنا وإلى متى؟ ما هي الطوابع الزمنية التي سيكون هناك عندما يصفس في مكان ما؟ إذا كان يضمن ذلك ، فهذا أمر جيد بالفعل ، إذا قمت بتسجيل الدخول عادةً بجميع أنواع الامتدادات والآثار ، فستظل تكتشف ذلك ، بغض النظر عما يفعله هناك. إذا لم تضمن التسليم ، فهذه كارثة على الإطلاق. بهذا المعنى ، أنا أثق بالكافكا أكثر ، ولكن لديها المزيد من عرض النطاق الترددي. هذا على الرغم من أنني لا أعرف كافكا جيدًا ، لأكون صادقًا.
- أنت بحاجة إلى تقسيم السجلات بطريقة ما ، على الأرجح ، إلى حرجة / غير حرجة ، لأنه إذا تعطل خادم التسجيل ، فلن تعرف أبدًا ما حدث.
بينما نتحدث عن Java ، كل شيء بسيط للغاية. نحن نعمل في بعض Docker ولدينا سجلات في stdout تم إدخالها من مستوى الخطأ. ويبدأ كل شيء في التدفق إلى كافكا ، بدءًا من التصحيح أو من المسار. أنا من النوع الذي لا يتم إيقاف تشغيل سجلات الخصم الخاصة به في العادة. لم أعيش أبدًا لرؤية هذه اللحظة المشرقة ، عندما أدركت أن الأمر برمته ، لم أعد أستخدم تسجيل الدخول لتحليل المشكلات.
"ألست خائفًا من أن الإنتاجية ، على سبيل المثال ، لشبكة كافكا ستأخذ وتنتهي ببساطة إذا كانت كل تلك التيرابايت من السجلات تسير هناك؟"
- كنا دائمًا صغيرين جدًا ، وكان لدينا 100 غيغابايت من السجلات يوميًا ، و 100 غيغابايت - ما هذا الحجم؟ المشكلة الرئيسية هي كيفية تخزينه ، وليس كيفية نقله. هل حقًا لديك تيرابايت من السجلات؟
- أنا لا أعرف كم كان من حيث التخزين على القرص ، لكنني أعلم أنه في بعض الأحيان بدأ النظام ببطء شديد لدرجة أننا لم ننتظر بدء تشغيله. قام شخص ما بطريق الخطأ إما بالتصحيح أو التتبع ، وهذا كل شيء.
- انتظر. يبدو لي ، أو هل ذهبت بطريقة خاطئة عندما جعلت السجلات متزامنة ، عبر الشبكة؟
- لا ، لقد سكبوا للتو في كافكا.
- لكن بشكل متزامن؟ من غير المحتمل أن يكون لديك خيار القيام بذلك بشكل غير متزامن ، سيتعين عليك انتظار ACK من Kafka من عقدة واحدة على الأقل ، حتى إذا كنت عنيدًا تمامًا ولا تريد ضمانًا على السجلات. ACK واحد على الأقل كنت لا تزال تنتظر.
- ربما نعم.
- أقول ذلك لأننا كتبنا مُلحق تسجيل الدخول ، أفهم ما تم توجيهنا به. لكننا قمنا بلف هذا المُلحق في AsyncAppender ، ثم قمنا بعد ذلك بحساب عدد الرسائل التي لدينا في الذروة تجريبيًا ، وقد تم لف المخزن المؤقت في AsyncAppender قليلاً ، مثل وجود ذروة زائد 10٪. اتضح أن تطبيقنا غير محظور.
"ما هي القصص الرهيبة لديك." ولماذا هذا ليس قياسيًا في Java ، فلماذا تكتب بيديك؟
- لأنه يجب عليك الكتابة بيديك بكل اللغات ، فقط في Java يكون على الأقل واضحًا أين تكتب. وإذا أخذت أي إيجابيات ، فأنا لا أعرف من أين أبدأ.
- إذن تعتقد أنه لا توجد مكتبات يمكن إضافتها إلى Maven ، وسيتم تثبيت كل شيء بمفرده؟
- دعنا نبدأ بحقيقة أنه ليس لديهم مخضرم عادي ، لأن لديهم نينجا ، صنع ، CMake ، qmake وكل شيء ثقيل قليلاً مع مخضرم. بالطبع ، لديهم مكتبات للتسجيل ، وهم في Java ، ومن الواضح كيفية إرفاق المتلقين بها. علاوة على ذلك ، في جاوا جميلة ومرنة ، وعادة ما تعمل مع الواجهات وكل ذلك. وإذا نظرت إلى بعض الصدأ ، فهناك شيء محزن تمامًا. لا أدري أين أضع وأكتب مسجّلي. بالكاد أتقنت كيفية تكوينها.
"إذا أنت حقًا تحب جافا؟"
- أنا أحب النظام البيئي. أنا أحب Kotlin كلغة و Java كنظام بيئي. بالمناسبة ، لا توجد لغة واحدة أفضل من Kotlin ، لا أعرف على الإطلاق الآن. بمجرد أن أعلق في Groovy ، لدي حتى قميص من Baruch مع نقش Groovy.
لماذا كوتلن؟
- الاختيار بين Java و Scala و Groovy و Kotlin - لماذا Kotlin بالضبط؟
- المزيج المثالي من البنية الجيدة والتعقيد لتصوير نفسك في القدم. لا أحب موسيقى الروك ، لأنه من السهل جدًا التصوير في الساق ، وأحيانًا ليس لنفسك ، ولكن لجارك. تضيف متغيرات ضمنية ، كل شيء يعمل بشكل سحري من أجلك ، والجحيم في تصحيحه. يمكنك بالطبع الموافقة على عدم استخدامها ، ثم تفقد بعض سحر الصخرة. بالطبع ، إذا كنت ذكيًا تمامًا ، فأنت تستخدم وحدات الماكرو في Rock ولا أحد غيرك يفهم كيف يعمل هذا.
- في الصخرة أكملت وحدات الماكرو ، اتضح؟
- أريد أن أقول أنهم يعملون ، لكنني لا أريد أن أقول أنه يمكن استخدامها. وإذا كنت أكثر ذكاءً ، فأنت تستخدم مكتبة مثل القطط. ولكن ربما يكون هذا على نفس المستوى عندما أصبحت أكثر ذكاءً وكنت تشعر بالملل بالفعل باستخدام سكالاز ، وأنت تستخدم القطط. لكن لا أحد يستطيع قراءة هذا الرمز إلا أنت.
- وأتباع القطط الأخرى.
"تقولها كما لو كانت صحيحة ، لكنها ليست صحيحة ، لأن أتباع القطط الآخرين يستخدمونها بشكل مختلف."
- هذا جزء من قوة هذا النظام.
- قوي جدا ، يذكرنا بـ BFG .
- الذي تطلقه على قدميك.
"أحيانًا لنفسك ، وأحيانًا للآخرين ، كم هو محظوظ." بالمناسبة ، لاحظت أن الأشخاص الذين يكتبون على الصخرة ينسون التفكير أحيانًا. لديهم مفاهيم جميلة بحيث يمكنهم عمل إدخالين متتاليين في أماكن مختلفة ولا يفكروا في حقيقة أن كل هذا يجب أن يكون ملفوفًا بطريقة ما في المعاملة. ولكن لديهم مكالمات جميلة لقاعدة البيانات مع بعض البقعة (أو أيا كان المألوف الآن للعمل مع SQL في Scala).
- ولكن يمكنك القيام بذلك في مكانين في جاوا ...
- ولكن في جاوة ، لدي الربيع ، وأضع التعليق التوضيحي @. في جافا ليس من المعتاد القيام بأشياء معقدة. في كوتلن ، بالمناسبة ، يبدو أيضًا. ولكن في الصخرة قبلت. بالنسبة لـ Groove ، هذه لغة رائعة ، بالطبع ، حتى تصل إلى الرمز الثانوي على جانب واحد أو تصادف حقيقة أنك لا تفهم نوع الكائن لديك. كما يحبون أحيانًا أن يصرخوا بأن أي رمز Java صالح هو أي رمز groove صالح ، ولكن هذا ليس صحيحًا لأن الفئات الداخلية المجهولة لا تعمل هناك. لا يمكنك أن تأخذ وخلق. عليك إنشاء لامدا ثم إلقاءها. لذلك اخترت Kotlin ، فهو يحتوي على بنية مختلفة قليلاً عن Java ، ولكن هناك محول هناك إذا كنت تريد ذلك حقًا. من ناحية أخرى ، لا يوجد تعقيد جديد. لا يوجد شيء حيث لا يمكنك الضغط على مفتاح Ctrl على شيء ولا تذهب. تضغط على مفتاح ctrl- نقرًا مزدوجًا وتنتقل إلى طريقة يساوي.
- مثل هذه اللحظة الزلقة: هل تثق في JetBrains؟ الآن كثيرون لا يثقون حقًا في Java ، لأنها Oracle ، ولكن ماذا تفعل مع JetBrains؟ هل يجلس الرجال العاديون هناك ويطورون لغة؟
- لا أريد أن أفسد جزءًا من التقرير ، لكن بشكل عام أحب الطريقة التي يقولون بها وأحب ما أراه. ليس لدي خيار "عدم الثقة". حسنًا ، أنا لا أثق في JetBrains ، ثم يصبح كل شيء حزينًا حقًا ، لأن ما هي اللغات الأخرى التي طورناها بعض الأشخاص العقلاء نسبيًا؟ ربما صدأ (تم تطويره بواسطة Mozilla) ، تم تطوير Golang بواسطة Google. بالإضافة إلى ذلك ، تم تطويرها جميعًا بواسطة المجتمعات ، بما في ذلك جافا. من غير الواضح ببساطة من ولماذا يمكنك الثقة. لدي مشاكل مع جنون العظمة ، لا أعرف كيف أفعل ذلك.
في اليوم الأول من مؤتمر جوكر (19-20 أكتوبر 2018) ، سيتحدث باشا عن الخلفية على Kotlin في تقرير "Kotlin - سنتان في الإنتاج وليس فجوة واحدة" . جوكر هو أحد مؤتمراتنا الرئيسية ، ونكتب عنه باستمرار على حبري. إذا كان ذلك ممكنا ، تأكد من القدوم.
- اكتشفنا مؤخرًا ، باروخ ، دراسة معينة حول موضوع Kotlin ، والتي تظهر أن البرنامج على Kotlin مع 40 من الببغاوات الخاصة بهم (الببغاوات الدراسية) أفضل من البرنامج على Java.
- ليس أفضل ، ولكن باختصار ، إذا كانت ذاكرتي تخدمني بشكل صحيح.
- كلاهما أقصر وأفضل. قاموا بقياس كل شيء في روائح الكود. لا أعرف كيف أقول ذلك. ربما ، بمعنى ما ، يمكن استبدالها بكلمة "أفضل".
- عظيم. فقط اعلم ، في أي مقارنة بين اللغتين ، هناك مشكلة صغيرة واحدة. هل أدركوا المهمة نفسها وهل كانت هناك أدوات القياس نفسها؟ هل صحيح أن جريئة الشفرة تقيس نفس الجودة في Java و Kotlin؟ أم أنهم كتبوا آخر 20 عامًا في جاوا وتعلموا كيفية العثور على رمز الأزواج 800 ، وفي كوتلن كتبوا عامين وتعلموا العثور على 20؟
- واو ، هذا سؤال جيد جدا. لكن هناك ، ليست الأرقام التي استنتجوها مثيرة للاهتمام ، ولكن الأسئلة التي عالجوها. يوجد 5 منهم فقط ، أريد أن أسألكم أيضاً. ما هو مستوى تكيف Kotlin في أي مكان في المنطقة؟ يعتمد ذلك على عدد الأشخاص الذين تعمل معهم وعدد المشاريع وعدد الأمثلة.
- من الواضح أن كل Android قد انتقل تقريبًا إلى Kotlin (التطوير الحديث) ، وتتحرك الواجهة الخلفية ببطء شديد. أحد أهداف تقريري هو تسريع هذه العملية. عندما جئت إلى HH لإجراء مقابلة وقلت أنه خلال العامين الماضيين كنت أكتب خلفية في Kotlin ، أخبروني ، هل هذا ممكن؟ هذا فقط للهواتف المحمولة! لا يعرف أصحاب العمل أن هذا ممكن. ربما ، لا يعرف الموظفون أيضًا. من الصعب التحدث عن مقدار التكيف ، أعتقد أنه في Android يبلغ 80-90٪ ، وفي الخلفية - 10 في المائة كحد أقصى ، على الأرجح. نعم ، يا لها من 10! إذا كنت تحسب جميع الأنظمة القديمة ، فلن يكون هناك اثنان بالمائة. ولكن إذا كنت تحسب فقط المشاريع الجديدة ، فربما 10 في المائة.
- هذا ، على الأقل شيء مثل Kotlin في الخلفية موجود بالفعل؟
- نعم ، لقد كتبت في مركز العقارات من سبيربنك. وقبل ذلك ، كتب أيضًا.
- جيد. ببساطة ، يقول الكثيرون أن هذا هو تسويق JetBrains ، وسوف يتفاعل الناس الأحياء بشكل مختلف مع هذا.
- جزء من تقريري مخصص لحقيقة أنه نتيجة لذلك ، بدأ جزء جافا بالكامل من الشركة في التحول إلى Kotlin بعد أن طار مشروعنا بنجاح.
- إذن ، السؤال التالي ينشأ: ما هي نسبة الرمز في التطبيق Kotlin؟ أولاً ، يمكنك مزج Java و Kotlin كقاعدة. ثانيًا ، يمكن استخدام Kotlin كـ DSL والبدء في إعادة كتابة كل شيء على التوالي.
- من وجهة نظري ، هناك عدد قليل جدًا من المواقف التي تحتاج فيها إلى التدخل المتعمد في Java و Kotlin. من المنطقي أن تكتب المشروع بأكمله على Kotlin. ربما إذا شعرت أنك ستترجم التطبيق بالكامل إلى Kotlin ، يمكنك أولاً البدء في كتابة فصول جديدة في Kotlin ثم في مرحلة ما البدء في تحويل الفصول القديمة من Java إلى Kotlin وتقليمها باستخدام الأقلام. ولكن يجب أن أقول أن "Java2Kotlin" هي أداة متقنة وليست مثالية.
- بعبارة "Java2Kotlin" هل تعني Ctrl C - Ctrl V في الفكرة بين الملفات؟
- نعم ، ولكن لا يزال هناك نوع من الاختصار ، على الأرجح.
- بالمناسبة ، حاولت مرة أن يستخدم Scala Ctrl C - Ctrl V بالضبط في الفكرة ، ولكن اتضح وجود القمامة النادرة نتيجة لذلك.
"أنا أيضا لا أحب ما يفعله Java2Kotlin." أكتب أفضل. في بعض الأحيان يمكنك البدء بهذا بالطبع. لديك طريقتان: إما أن تقوم بتحويل المشروع بأكمله ، خاصة إذا لم يكن كبيرًا جدًا ، ثم تقوم بتصحيح جميع الأماكن الخاطئة. أو يمكنك القيام بذلك وفقًا لأحد الكلاسيكيات: لإعادة الكتابة بيديك لفترة طويلة جدًا ، والكثير من الأعمال الميكانيكية. ولكن ربما تريد أن تبدأ في مكان ما.
- هل هناك أي نوع من التعقيدات ، لا ترتبط بالقواعد الغبية ، ولكن بالجزء الدلالي؟
- يبدو أنني سأتحدث عن هذا في تقرير.
- جيد. عند إضافة Kotlin إلى المشروع ، هل تزيد كميته أكثر أم تنخفض؟ كم يجب أن يكون Kotlin بالنسبة له ليبدأ في التهام كل شيء؟
"ليس لدي مثل هذه الخبرة." كتبنا الطلب على الفور في Kotlin ، باستثناء حالة واحدة. هل تسترشد بالنظام البيئي للمكونات الإضافية للفكرة؟
- قليلا.
— , , , - . - , , , , , .
— Community Edition , , .
— Community Edition , Ultimate.
— Ultimate , Spring-.
— , , Spring-, .
— -, , endpoints, , .
— . endpoint', ?
— , . , , .
— , , Shift-Shift-Shift, - , Shift-Shift-Shift , , endpoint' , . , - .
— , Search Anywhere, .
- إذن. , , . . , , , . , , , , , , , , .
— , ?
— , . , , , .
— . , , , . . , , , , .
— , , , , , , , , , . . , -. . , , . Java-, . generic , , invariants, in. . . , , . , . , Haskell, ? : map, fmap, .
— .
— : , , . , — sequence. — , .
, , , - . GraalVM , , . , @graalvm_ru.
— ?
— . 2, 2 2 . .
— , . , .
— - . : for- , for-, ( baseline), . 2 6 . , — : sequence' sequence'. , , - . . . , . , , , baseline.
— , ?
— , - .
— , , GraalVM .
— . JDK10 JVMCI , GraalVM EE, , C2.
— - , Community Edition -Community Edition, , .
- كلا. , , . . , , , .
— ! :-)
— , .
« »
— . : . , . : ?
- كلا. . « ». , , , , : , , , . 2008 , , , . , . , , . .
— ?
— 4 C++ Builder, Java, , -, , . Java , C++ Builder, , , C++ Builder, . . , . , , , .
— — VCL, .
— , . , - , - . - , SQL, . , , .
— C++.
— , Java, . C++ - , , , , , . MVC. , NetBeans, , . , , . GroupLayout BorderLayout. , , , , . , , -.
— , IDE-?
— . , , - Electron.
— . , Java.
— , . - - : JavaScript. .
— GraalVM , Electron JavaScript -.
— . , , , . Nashorn . Truffle- JavaScript? , .
— , , Nashorn, . Electron, .
— , ?
— , Electron.
— ?
— Node.js, Graal Node.js, . .
— ?
— . - .
— . — Node.js, Electron Builder, SQLite ORM . , , — SQLite — 10 . -, , . .
— , , , .
— . . , Java FX, , , , 10- . , JRE, . , — , . , -. , - , .
— , .
— - , - , . -, .
— - desktop environment , , -. , - to do list, - . , , , , . , , , . — F1, .
— , , . - – CLI-. , Task Warrior, . , .
— « ». , , , - . ?
— , ?
— .
— , .
— -. , ?
— , : «, , ?» : «». , - . - , - , . : « ?» , . : «, . , ?» «». « , ».
— : , , . ? , - ?
— , , , : . (5 , ), , - , , , , . , , , - , , , , .
— , , — , , ? , , ?
— , - . , . , . . , . . .
— : - , , - — SQL , . .
— ? — . , . — . - , , . .
- بالمناسبة! أنت تعرف الكثير من الأشياء المثيرة للاهتمام ويمكنك أن تقولها. لماذا لا تكون في مؤتمراتنا كل عام بتقرير جديد؟
"لا أعتقد أنني أعرف ما يكفي لأقول الكثير."
"لكنك لا تزال جئت!"
- حدث بالصدفة أن لدي خبرة فريدة إلى حد ما في هذه الصناعة. عدد قليل جدا حقا يكتب خلفية على Kotlin. يبدو أنه لا أحد منهم حريص على الحديث عنه. وربما لا يملكون هذا النوع من التبشير بالإنجيل. لدي رغبة دائمًا في تعليم الآخرين كيفية العيش (أو على الأقل محاولة). لذلك ، بالطبع ، أنا مهتم. علاوة على ذلك ، أنا شخصياً مهتمة إلى حد ما بهذا التقرير ، لأن صاحب العمل التالي ، الذي سوف آتي إليه وأطلب الكتابة في Kotlin ، سيقول: "لماذا؟" ، سأقول ذلك الآن ، لقد قدمت تقريرًا في جوكر دعنا نرى.
- كيف تصيغ اللحظة التي تفهم فيها أن لديك الخبرة الكافية للذهاب لإعداد تقرير؟
- مستحيل. تم إعداد التقرير ليس لأن لديك خبرة ، ولكن لأن لديك بعض الخبرة والرغبة في التحدث عنه. لدي الرغبة في أن أقول بالفعل من المرة الأولى عندما وصلت إلى JPoint. لكن الموضوع المتعمد "للقول" لم أكن قد مضى وقت طويل. مثل هذا الموضوع بحيث يمكنك التحدث عن 45 دقيقة.
لماذا تذهب إلى المؤتمر؟
- لماذا المؤتمرات؟ لماذا هم بحاجة؟ من حقيقة أنك تذهب إليها بشكل عام ، اتضح أنك بحاجة إليها.
- لا ، من حقيقة أنني أذهب إليهم ، اتضح فقط أنني أذهب إليهم.
"ولكن هل تحتاجهم لسبب ما؟"
- لا أعرف بصدق أنا مستعد للإجابة على هذا السؤال. لست متأكدا من أنني سأذهب إلى المؤتمر للعلم. بطريقة ما ، أذهب إلى المؤتمر حتى تعرفني.
- هذه فكرة عادية.
- عندما أقول "أنت" ، أعني الكثير من الناس الذين يتذكرونني. بشكل عام ، من المفيد لي أن يعرفني السوق ببساطة من حيث القيمة ، خاصة إذا تركت انطباعًا جيدًا. وأنا أحاول القيام بذلك ، لأنني في الواقع يبدو أنني لا أعرف الكثير ، وأفتقر دائمًا إلى العمل المثير للاهتمام. أنا أبحث باستمرار عن وظيفة أكثر إثارة للاهتمام. نادرًا ما يظهر شيء يبدو أكثر إثارة للاهتمام مما لدي الآن.
من ناحية أخرى ، أذهب إلى مؤتمر لأصعد إلى الأمعاء. لا توجد مثل هذه الفرصة في أي مكان. ذهبت لأسمع كيف يعمل Azul Zing ، لأنه مثير للاهتمام. نعم ، بالكاد يمكنني استخدام هذه المعرفة ، لكنها مثيرة للاهتمام فقط. هذا بالكاد يمكن قراءته في كتاب. لدي مشكلة أخرى: قرأت الكتب قليلاً. أفضل قراءة القصص الخيالية. أنا على الأرجح واحد من عدد قليل على الأقل من التقنيين الجادين الذين يعيشون على هذا النحو. قرأت المراجع ، فباء البيض ، لكني لم أقرأ الكتب تقريبًا. وفي المراجع والفنانين نادراً ما تكون هذه المعلومات ممكنة.
- نعم ، وكثيرا ما تحدث هذه المعلومات في الكتب.
- الكتب صعبة بالنسبة لي مباشرة ، لنكون صادقين. آخر كتاب هام قرأته على Java هو "Java Concurrency in Practice" ، وفي نظام Java البيئي هو "مثابرة Java عالية الأداء" ، Vlad Mihalcea (هذا كتاب جيد جدًا). ولكن عادة ما تكون قراءة صعبة للغاية ، ولا تعطى لي.
- هل يستحق قراءة حوض جافا؟
- هذا يعتمد على طريقتك في التعلم. ينقسم الناس إلى نوعين وفقًا لكيفية دراستهم: يفضل البعض الكتابة أولاً ، ثم فهم كيفية عملها ، والبعض يقرأ أولاً كيفية الكتابة ، ثم الكتابة. أنا أنتمي إلى النوع الأول. أبدأ دائمًا بالتجربة ولا أغوص عميقًا. أغوص بعمق في وقت لاحق. عملت معي فتاة رائعة ، قبل كتابة السطر الأول في Kotlin ، ذهبت وقراءة رصيف على Kotlin.
- على الأرجح ، كنت سأفعل ذلك ، بالمناسبة.
- هذه طريقة رائعة ، ليس لدي شيء ضدها.
"أنا مهتم جدًا أيضًا بكيفية قيام أشخاص مثلك بكتابة رسائل بشكل طبيعي على الفور."
- لا توجد مهمة للكتابة بشكل طبيعي ، هناك مهمة للكتابة. هذا مهم جدا. بشكل عام ، لا تنشأ دائمًا مهمة الكتابة عادةً ، خاصةً أثناء الدراسة. عندما أتعلم شيئًا ما ، لا يمكنني أن أفهم مجموعة من المعلومات ثم أذهب للكتابة. أبدأ دائمًا بالتجريب. ربما تعلم أن أكتب أحيانًا بودكاست. في العدد الأول ، الذي سجلناه ونشرناه ، تحدثت عن حقيقة أنني تمكنت من دراسة كل شيء فقط لأنني لم أؤجله أبدًا لوقت لاحق. ليس لدي مهمة لقراءة شيء ما ، وبالتالي ، أقوم بتوفير الكثير من الوقت ، لأنني أجلس على الفور وأبدأ في استخدام نوع من التكنولوجيا ، إما في مشروع العمل ، أو في نوع من المشاريع المنزلية. ثم ، إذا لزم الأمر ، سأذهب أعمق. لكن بالنسبة للمبتدئين ، يمكنني أن أخبركم أنني أفهم كيفية استخدامه. في الخطوة التالية ، يمكنني أن أخبرك أنني أعرف كيف يعمل هذا. بدأت في استخدام الربيع قبل أن أدرك كيف يعمل. ربما حوالي 6 سنوات.
- يبدو أننا يجب أن نشمر :-) شكرا جزيلا لك! نراكم في جوكر ، سأأتي بالتأكيد للاستماع إلى تقريرك.