1 - تطوير البرمجيات ومراجعة البرمجيات الموجودة بلغة C ++ (Qt5). 2 - تطوير واجهة المستخدم الرسومية على QtWidgets / QML. 3 - المشاركة في تصميم معمار الأنظمة المختلفة. 4- تطوير الخبرة في C ++. 5 - معرفة جيدة بـ Qt5. 6 - خبرة في تطوير التطبيقات متعددة الخيوط. 7 - فهم OOP. 8 - معرفة لينكس كمستخدم متمرس.
الآن دعونا نلقي نظرة على النقاط. أو بالأحرى ، كيف قرأته عندما أجد مثل هذه المقترحات.
1. تطوير البرمجيات ومراجعة البرامج الموجودة في C ++ (Qt5)
في هذه المرحلة ، كل شيء على ما يرام. يشار إلى الإصدار الحالي للمكتبة واللغة ببساطة.
2. تطوير واجهة المستخدم الرسومية على QtWidgets / QML
نعم ، QML جزء من Qt ، لا أحد يجادل. لكن هناك نقطة صغيرة: بالطبع ، من الممكن كتابة مشروع يجلس على كرسيين في نفس الوقت ، لكن التدخل في كليهما هو علامة على بنية سيئة. ربما يعني الناس فقط تطوير QML؟ حسنًا ، في الواقع: المشروع مكتوب بلغة QML ، لكنك تحتاج إلى مكوناتك الخاصة ، وهي مكتوبة بلغة C ++ باستخدام QtWidgets ... لم يتضح بعد ، لذا اقرأ. بالمناسبة ، سنعود إلى الهندسة المعمارية لاحقًا.
3. المشاركة في تصميم معمار الأنظمة المختلفة
ما هي الأنظمة المحددة التي تقصدها؟ تثور الأسئلة على الفور: كم لديك منها؟ هل هذه المشاريع العديدة التي يحتاجها شخص واحد للعمل في نفس الوقت أم أن برمجة Qt الكلاسيكية مختلطة في مشروع وحشي واحد مع QML وبعض الأساليب الأخرى؟ انطلاقا من حقيقة أن QtWidgets في الفقرة السابقة تشير إلى ما يسمى بـ "التطوير الكلاسيكي في Qt" (اصنع نموذجًا - اكتب فئة إليه) بدون أي QML ، يصبح من الواضح أن المبرمج سيضطر إلى الجلوس على كرسيين في نفس الوقت.
4. تطوير خبرة في C ++
ما هو مكتوب ل؟ حتى لا يأتي ملاكم QML الذي لم ير C ++ في حياته من قبل؟ أم أن تجربة المطورين الحاليين ليست كافية للتبديل من QML إلى QtWidgets؟ ربما لا يريدون المشاركة في الحفاظ على الكود القديم؟
يبدو لي أن كل شيء أكثر تعقيدًا إلى حد ما: الحقيقة هي أن إمكانات QML القياسية لا تكفي عادةً لتطبيق كامل - لذلك عليك إنشاء مكونات QML الإضافية الخاصة بك. التي تحتاج إلى C ++. بعبارة أخرى ، كان مشروع الأشخاص مكتوبًا بالفعل جزئيًا بلغة QML ، لكنهم واجهوا بعد ذلك نقصًا كبيرًا في الفرص - ثم تبين بعد ذلك أن صندوق QML إما غير ماهر بما يكفي ، أو مشغولًا بنسبة مائتي بالمائة من وقته فقط بإنشاء النماذج ، ولكن QML -مكونات في C ++ ، بطريقة ما لا يستطيع الكتابة. يصبح من الواضح ما سنفعله: هذا هو دعم الكود الكلاسيكي وإنشاء مكونات QML جديدة.
ومع ذلك ، هذه ليست وظيفة واحدة ، ولكن شاغرتين. في كود Qt الكلاسيكي ، عادة ما يكون هناك بحر من الأخطاء التي يصعب إصلاحها والمبرمج الذي يجلس على الدعم سيكون مشغولاً بإصلاح أكثر من مائة بالمائة من وقته (العمل مع إعادة العمل). لن تكون قادرًا على كتابة مكونات QML جديدة "من وقت لآخر" أيضًا ، عليك أن تفعل ذلك طوال الوقت. ربما يعتقدون أن الشخص سيدعم بشكل أساسي الكود القديم ، في أماكن "بسرعة وبطريقة ما" ليحل محلها QML. في هذه الحالة ، السؤال الذي يطرح نفسه ، من يشارك في هندسة كل هذا العار؟ تذكر النقطة الثالثة: "نحن هؤلاء المنقذون". باختصار ، افعل ما تريد ، لا يوجد أحد يتعامل مع الهندسة المعمارية على أي حال ، لن يقوم أحد بتوظيف مهندس مشروع ، والمدير ليس مهندسًا معماريًا ولا يعرف هذا الموضوع ، لذلك سيتم إلقاء اللوم علينا كل شيء.
5. معرفة جيدة بـ Qt5
صحيح؟ لا ، لا أصدق أنه مع المعرفة السيئة بشيء ما ، يمكنك الذهاب إلى مكان ما للحصول على وظيفة. أي ، كان الأمر يستحق الكتابة عنه بشكل عام ، وإلا كان ذلك صحيحًا ، فسيأتي مع أشياء سيئة؟ ربما سنقوم بفك تشفير شيء ما في هذه المرحلة؟ اتضح أنه عندما يكتبون هذا ، فإنهم يعتقدون أن مطوريهم الحاليين لا يعرفون Qt جيدًا (مهما كان ذلك يعني) ، وإذا كان الأمر كذلك ، فقد حاولوا بالفعل توفير المال على المبرمجين.
6. خبرة في تطوير تطبيقات متعددة الخيوط
في الواقع ، قاموا بفك رموزها. يتطلب تطوير تطبيقات متعددة الخيوط باستخدام Qt معرفة جيدة حقًا بها. لكنني شخصياً قرأت شيئًا مختلفًا تمامًا في هذا المطلب ، وليس المقصود على الأرجح عندما كتبوا هذه العبارة. أولاً ، دعنا نتعرف على سبب تعدد مؤشرات الترابط Qt على الإطلاق؟
الجزء الكلاسيكي من Qt هو مكتبة قائمة على الأحداث . ومع ذلك ، تمت إضافة وظائف لاحقًا إليها تتيح لك تشغيل سلاسل الرسائل. ومع ذلك ، لا تزال الواجهة بأكملها تعمل في خيط رئيسي واحد ، وحتى تقفز من الوظيفة السابقة ، لن يتم استدعاء الأخرى ، بغض النظر عن كيفية توصيلها بفتحات الإشارة.
عادةً ما يكون تعدد العمليات مطلوبًا على مستوى غير واجهة: في تطبيقات Qt ، غالبًا ما يتم استخدام الفصل بين الخادم والعميل بطريقة أو بأخرى - وإذا لم يكن الخادم مصممًا جيدًا من الناحية المعمارية (على سبيل المثال ، تكون مكالماته متزامنة تمامًا) ، ففي هذه الحالة ، ستكون هناك حاجة إلى سلاسل عمليات لتنظيم الانتظار على مستوى الواجهة. ماذا يعني هذا في التقدم لوظيفة؟
أولاً ، الواجهة الأمامية بين العميل والخادم إما سيئة التصميم أو غير موجودة تمامًا. لقد كتبنا بأفضل ما في وسعنا واختلط جزء على الأقل من منطق الأعمال برمز العميل ، وسيتعين علينا التعامل جزئيًا مع برمجة النظام (إنهاء ما لم ينته مبرمج النظام على مستوى الخادم). هنا يجب أن أقول أنه عادة ما يكون هناك مبرمج نظام في مثل هذه الفرق - لكنها محددة للغاية. هو الذي سيأتي إلى المقابلة لإلقاء اللوم عليك بأسئلة حول مكدس بروتوكول TCP / IP ، على الرغم من أنه كان ملزمًا بتصميم النظام بحيث لا يوجد رمز نظام في النوافذ على الإطلاق. وهو ، بالمناسبة ، يتلقى الحد الأقصى من الراتب للجميع - وعليك أن تأخذ الراب بسبب عيوبه ، باستخدام البرمجة متعددة الخيوط.
ثانيًا: نتيجة للمكالمات المتزامنة ، كان البرنامج بطيئًا بالفعل لدرجة أن إدارة الشركة (حتى لا يتم الخلط بينها وبين المديرين) تلقت تعليقات المستخدمين
7. فهم OOP
أوه ... هذا شيء من فئة "يمكنني البرمجة بلغة C ++ ، لكن ليس لدي أي فكرة عن ماهية OOP." إنها لا تعمل بهذه الطريقة. ربما باستثناء طلاب الدراسات العليا الذين كتبوا دورة فصل دراسي واحد في C ++ في C ++ والذين تم تحديدهم على الفور حسب العمر والاستجابة للوظيفة الشاغرة. ومن ثم ، هناك شيء آخر يعني. ماذا بالضبط؟
من واقع تجربتي الخاصة ، يمكنني أن أفترض أن البرنامج كان مشهورًا بنا. من المؤكد أن كل شيء بدأ ، كالعادة ، رائعًا جدًا وممتعًا وممتعًا: الهندسة المعمارية الصحيحة وطبقات التجريد وكل ما يصاحب مشروعًا كفؤًا. ولكن بعد ذلك بدأ السباق على الوظائف ، مما أدى إلى طمس طبقات التجريد. على الأرجح ، إذا اتضح أن المشروع قديم ، فإن مطوريه الأصليين جعلوه على QtWidgets ، لكنهم غادروا لفترة طويلة - منذ فترة طويلة ، تمكن الطلاب الصغار جدًا الذين بدأوا في نحت QML من العمل بدلاً منهم (أكدوا لرؤسائهم أنه كان رائعًا) ... من ، بدوره ، نشأ أيضًا - وأدرك أن الكود الذي يشبه المعكرونة الذي كتبوه في البداية ، تحول في النهاية إلى رافيولي من التجريدات (انظر المضادات).والآن ، لكل نافذة ، يتم استدعاء دزينة من النظارات الصغيرة الفارغة تقريبًا بدلاً من فئة النموذج العادي ، والتي تجمع البيانات فيما بينها - وليس بشكل مباشر ، ولكن من خلال نوع من محقن التعزيز (كان هذا شائعًا منذ عدة سنوات) ينتهي هذا التلاعب بحقيقة أنه بعد شق طريقك عبر عشرات الطبقات الإضافية ، ستعثر على نفس الكود الشبيه بالمعكرونة باستخدام"TODO: أعد كتابة كل شيء بشكل إنساني عندما يظهر الوقت" في مكان ما في ركن منعزل من المشروع.
نتيجة لذلك ، لا يمكن فهم الكود كثيرًا بحيث لم يعد من الممكن تطويره. لقد اكتشف المبرمجون كل شيء منذ زمن طويل وألقوا به في أماكن أكثر كرمًا. ومع ذلك ، فإن إدارة المشروع لم تتعلم أي شيء والآن (بعد رؤية نص بسيط لـ QML) تعتقد أنه يمكن حل المشكلة "بسرعة" بمساعدة حل سحري آخر. تخبرنا النقطة التالية أن هذا هو الحال على الأرجح:
8. معرفة لينكس كمستخدم متمرس
أخيرًا ، أصبح من الواضح ما هو المشروع. قد يجادل المرء ، يمكن للمرء أن يجادل (في التعليقات) ، لكن تطوير Linux في أوقاتنا الصعبة ليس على الإطلاق المثل العليا للبرمجيات الحرة (التي ربما نحلم بها جميعًا). في تسعة وتسعين بالمائة من الحالات ، هؤلاء هم حراس أمن بفكرة مراقبة كل شيء وكل شخص ، ونعني لينكس أسترا ، لأن الرفيق ميجور قال ذلك. وهذا يعني أن هذه ليست شركة لتكنولوجيا المعلومات ولم يسمع أحد عن الأساليب المعمارية العادية هناك ، ويتم حل جميع المشكلات (من التجربة) عن طريق "تجهيز برغوث". ومن هنا الاستنتاج: لم يذكر الراتب لسبب وجيه. هنا تحتاج إلى توظيف ثلاثة من كبار السن (مع عدد مناسب من الوسط ويونيو لكل منهم) لإعادة هيكلة كاملة للرمز ، وليس البحث عن "الشخص الذي سيحل جميع المشاكل". ومع ذلك ، لا يستطيع أصحاب العمل تحمل هذا ،لأن هذا ممكن فقط في اقتصاد عادي بسوق استثمار ناضج. لكن هذا موضوع مختلف ويتحدث عنه في وقت آخر.