
يتحدث Techlead Skyeng Kirill Rogovoy ( flashhhh ) في مؤتمرات يتحدث فيها عن المهارات التي يحتاج كل مطور جيد إلى تطويرها ليصبح الأفضل. طلبت منه أن يشارك هذه القصة مع قراء هبرة ، وأنقل الكلمة إلى سيريل.
تقول الأسطورة عن مطور جيد أنه:
- يكتب رمز نظيفة
- يعرف الكثير من التكنولوجيا
- مهام الترميز بشكل أسرع
- يعرف مجموعة من خوارزميات التصميم والأنماط
- يمكن refactor أي رمز باستخدام Clean Code
- لا تضيع الوقت في المهام غير البرنامجية
- 100 ٪ سيد التكنولوجيا المفضلة لديك
هذه هي الطريقة التي يرى بها موظفو الموارد البشرية المرشحين المثاليين ، كما أن الوظائف الشاغرة ، على التوالي ، تبدو كذلك.
لكن تجربتي تقول أن هذا ليس صحيحًا جدًا.
أولاً ، إخلاءان مهمان:
1) تجربتي هي فرق المنتجات ، أي الشركات مع منتجاتها ، وليس الاستعانة بمصادر خارجية. الاستعانة بمصادر خارجية يمكن أن تكون مختلفة جدا.
2) إذا كنت صغيرًا ، فلن تكون جميع النصائح قابلة للتطبيق ، وسأظل أركز على البرمجة في مكانك.
المطور الجيد: الواقع
1: Codite أفضل من المتوسط
مطور جيد يعرف كيفية إنشاء بنية رائعة ، وكتابة رمز رائع ، وليس إنشاء الكثير من الأخطاء ؛ بشكل عام ، كل شيء أفضل بالنسبة له من المتوسط ، لكنه ليس في أعلى 1 ٪ من المتخصصين. معظم أروع المطورين الذين أعرفهم ليسوا مبرمجين رائعين: فهم على دراية جيدة بمجالهم ، لكنهم لا يستطيعون فعل أي شيء خارق.
2: يحل المشاكل ، لا يخلقها
تخيل أننا بحاجة إلى دمج خدمة خارجية في المشروع. نحصل على المعارف التقليدية ، وننظر إلى الأرصفة ، ونرى أن هناك شيئًا ما قديمًا ، ونفهم أننا بحاجة إلى تجاوز معايير إضافية ، ونفكك شيئًا ما ، ونحاول تنفيذه بطريقة ما ونجعل بعض أنواع المنحنى تعمل بشكل صحيح ، أخيرًا ، بعد زوجين أيام نفهم أنه أبعد من ذلك مستحيل. يتمثل السلوك المعتاد للمطور في هذه الحالة في العودة إلى العمل والقول: "لقد فعلت ذلك وهذا ، لا يعمل مثل هذا ، ولن يعمل على الإطلاق ، بشكل عام ، اكتشف الأمر بنفسك". تواجه الشركة مشكلة: تحتاج إلى الخوض في ما حدث ، والتواصل مع شخص ما ، ومحاولة حلها بطريقة أو بأخرى. يبدأ الهاتف المكسور: "أخبرته ، سأكتب لها ، انظر إلى ما أجاب".
سيجد مطور جيد ، يواجه مثل هذا الموقف ، جهات الاتصال بنفسه ، ويشطبها ، ويتحدث معها ، ويناقش المشكلة ، وإذا فشل كل شيء آخر ، فسوف يجمع الأشخاص المناسبين ، ويشرح كل شيء ويقدم البدائل (على الأرجح ، هناك خدمة خارجية أخرى مع دعم أفضل). يرى هذا المطور مشكلة في العمل ويحلها. تم إغلاق مهمته عندما حل مشكلة العمل ، وليس عندما واجه شيئًا ما.
3: يحاول أن يبذل أقل جهد ممكن ، والحصول على أقصى قدر من النتائج ، حتى لو كان عليك أن تكتب العكازات
يعد تطوير البرامج في شركات البقالة هو الأكبر تقريبًا: فالمطورون غالي الثمن. ويفهم المطور الجيد أن الشركة تريد الحصول على أكبر قدر ممكن من المال عن طريق إنفاق الحد الأدنى. لمساعدته ، يريد مطور جيد أن ينفق الحد الأدنى من وقته المكلف للحصول على أقصى ربح لصاحب العمل.
تنشأ طرفان هنا. الأول هو أنه من الممكن حل جميع المشاكل في عكاز ، وليس عناء مع العمارة ، وليس refactor ، الخ نعلم جميعًا كيف ينتهي هذا عادة: لا شيء يعمل ، نعيد كتابة المشروع من البداية. والآخر هو عندما يحاول الشخص التوصل إلى بنية مثالية لكل زر ، ويقضي ساعة في مهمة وأربعة على إعادة البناء. تبدو نتيجة هذا العمل رائعة ، ولكن المشكلة هي أن الأمر يستغرق عشر ساعات للزر من جانب العمل ، والذي في الحالة الأولى ، في الحالة الثانية ، ببساطة لأسباب مختلفة.
يمكن لمطور جيد تحقيق التوازن بين هذه الحالات القصوى. إنه يفهم السياق ويتخذ القرار الأفضل: في هذه المهمة سأرى عكازًا ، لأن هذا الرمز يتم لمسه مرة واحدة كل ستة أشهر. لكن في هذا الإصدار ، أشعر بالارتباك وسأفعل كل شيء بشكل صحيح قدر الإمكان ، لأن مائة ميزة جديدة لم يتم تطويرها بعد ستعتمد على ما يمكنني فعله.
4. لديه نظام إدارة الأعمال الخاص به ، وهو قادر على العمل في مشاريع من أي تعقيد فيه.
العمل وفقًا لمبادئ الحصول على الأشياء - عند كتابة كل شيء في نظام نصي ، لا تنسَ أي اتفاقيات ، ودفع الجميع ، وتظهر في كل مكان في الوقت المناسب ، ومعرفة ما هو مهم ، وما هو غير مهم في الوقت الحالي ، فلن تفقد المهام أبدًا. السمة العامة لهؤلاء الأشخاص هي أنه عندما تتوصل إلى اتفاق معهم ، لن تقلق أبدًا من نسيانهم ؛ وأنت تعلم أيضًا أنهم جميعًا يكتبون ولن يسألوا بعد ذلك ألف سؤال ، تمت مناقشة الإجابات التي تمت مناقشتها بالفعل.
5. الشكوك ويوضح أي شروط والتمهيدي
هناك أيضا طرفان هنا. من ناحية ، يمكنك أن تكون متشككا من كل تلك التمهيدية. قبل ذلك ، توصل الأشخاص إلى بعض الحلول ، وتعتقد أنه يمكنك القيام بعمل أفضل والبدء في إعادة مناقشة كل ما كان معروضًا عليك: التصميم ، حلول الأعمال ، الهندسة المعمارية ، إلخ. يمضي هذا كثيرًا من الوقت للمطور وغيره ، ويؤثر سلبًا على الثقة داخل الشركة: لا يرغب الآخرون في اتخاذ القرارات لأنهم يعلمون أن هذا المتأنق سيأتي مرة أخرى وكسر كل شيء. الطرف الآخر هو عندما يرى المطور أي تمهيدية ، والمعارف التقليدية والفنادق ترغب في شيء منحوت في الحجر ، وفقط واجهت مشكلة غير قابلة للذوبان ، يبدأ في التفكير فيما إذا كان يشارك في ذلك على الإطلاق. يجد مطور جيد هنا أيضًا أرضيةً وسطًا: محاولة فهم القرارات المتخذة معه أو بدونه ، قبل أن تبدأ المهمة في التطوير. ماذا تريد الشركة؟ هل نحل مشاكله؟ توصل مصمم المنتج إلى حل ، لكن هل أفهم لماذا سيعمل هذا الحل؟ لماذا قيادة الفريق تأتي مع مثل هذه الهندسة المعمارية؟ إذا كان هناك شيء غير واضح ، فأنت بحاجة للذهاب نسأل. في عملية هذا التوضيح ، يمكن للمطور الجيد أن يرى حلاً بديلاً لم يحدث ببساطة لأي شخص قبله.
6. يحسن العمليات والأشخاص من حولك.
تدور حولنا أكوام من العمليات - التجمعات اليومية والاجتماعات والنداءات وتلك المراجعات ومراجعات الكود وما إلى ذلك. سيقف مطور جيد ويقول: اسمع ، سنناقش نفس الشيء كل أسبوع ، ولا أفهم لماذا ، وبنفس النجاح ، يمكنك قضاء هذه الساعة على "كونترا". أو: المهمة الثالثة على التوالي لا يمكنني إدخال الرمز ، لا شيء واضح ، والهندسة مليئة بالثقوب ؛ ربما رمز المراجعة الخاص بنا هو عرجاء ونحن بحاجة إلى إعادة بناء المساكن ، دعنا نجري mitap refactoring مرة كل أسبوعين. أو أثناء مراجعة الكود ، يرى الشخص أن أحد زملائه لا يستخدم أداة معينة بشكل فعال بما فيه الكفاية ، مما يعني أنك بحاجة إلى الخروج والإخبار لاحقًا. مطور جيد لديه هذه الغريزة ، يفعل مثل هذه الأشياء على الجهاز.
7. يدير الآخرين تماما ، حتى لو لم يكن مدير
ترتبط هذه المهارة ارتباطًا جيدًا بموضوع "حل المشكلات وليس خلقها". في كثير من الأحيان ، لا يتم كتابة أي شيء عن الإدارة في نص الشغور الذي نأتي إليه ، ولكن بعد ذلك ، عندما تواجه مشكلة خارجة عن إرادتك ، لا يزال عليك إدارة الآخرين بطريقة أو بأخرى ، احصل على شيء منها ، إذا نسيت - ادفع ، تأكد أنهم جميعا فهموا. يعرف المطور الجيد من يهتم بما يمكن له عقد اجتماع مع هؤلاء الأشخاص وكتابة الاتفاقيات ورميهم في الركود وتذكيرهم في اليوم المناسب والتأكد من أن كل شيء جاهز ، حتى لو كان شخصياً غير مسؤول بشكل مباشر عن هذه المهمة ، لكن النتيجة تعتمد من تنفيذه.
8. لا يرى معرفته كعقيدة ، مفتوحة باستمرار للنقد
يمكن للجميع أن يتذكروا زميلًا من عمل سابق غير قادر على التنازل عن تقنيته ، يصرخون بأن الجميع سيحترقون في الجحيم بسبب بعض الطفرات الخاطئة. مطور جيد ، إذا كان يعمل لمدة 5 ، 10 ، 20 عامًا في الصناعة ، يفهم أن نصف معرفته فاسدة ، وفي النصف المتبقي لا يعرف عشر مرات أكثر مما يعرف. وفي كل مرة يختلف فيه شخص ما ويقدم بديلاً ، فهذا ليس هجومًا على الأنا ، بل فرصة لتعلم شيء ما. هذا يسمح له بالنمو بشكل أسرع من الآخرين.
قارن فكرتي عن مطور مثالي مع المطور المقبول بشكل عام:

في هذه الصورة ، يمكنك معرفة عدد النقاط الواردة أعلاه المرتبطة بالكود ، وعدد النقاط غير المرتبطة بها. التنمية في شركة البقالة ليست سوى ثلث البرمجة ، والباقي 2/3 لها علاقة تذكر بالكود. وعلى الرغم من أننا نكتب الكثير من الشفرات ، فإن فعاليتنا تعتمد اعتمادًا كبيرًا على "الثلثين" غير المتصلين.
التخصص ، التعميم وقاعدة "80-20"
عندما يتعلم الشخص حل بعض المشكلات الضيقة ، فإنه يتعلم لفترة طويلة وبصعوبة ، ولكنه بعد ذلك يحلها بسهولة وبساطة ، لكنه لا يمتلك خبرة في المجالات ذات الصلة - هذا هو التخصص. التعميم ، من ناحية أخرى ، هو عندما يتم استثمار نصف وقت التدريب في منطقة ذات اختصاص واحد ، والنصف الآخر في المجالات ذات الصلة. وفقًا لذلك ، في الحالة الأولى ، أفعل شيئًا واحدًا تمامًا ، والباقي - بشكل سيئ ، وفي الحالة الثانية - أفعل كل شيء جيدًا إلى حد ما.
تخبرنا قاعدة 80-20 أن 80٪ من النتيجة تتحقق من خلال 20٪ من الجهد. يتم جلب 80 ٪ من الإيرادات بنسبة 20 ٪ من العملاء ، ويتم توليد 80 ٪ من الأرباح بنسبة 20 ٪ من الموظفين وهلم جرا. في التدريب ، هذا يعني أننا نحصل على 80 ٪ من المعرفة في أول 20 ٪ من الوقت الذي يقضيه.
هناك فكرة: يجب على المبرمجين فقط الكود ، والمصممين يجب أن يصمموا ، وينبغي للمحللين أن يحللوا ، والمديرون يجب أن يديروا. في رأيي ، هذه الفكرة سامة ولا تعمل بشكل جيد للغاية. لا ينبغي أن يكون الجميع جنودًا عالميين ، بل يتعلق بتوفير الموارد. إذا كان المطور على دراية بسيطة بالإدارة والتصميم والتحليلات ، فسيكون قادرًا على حل العديد من المشكلات دون إشراك الآخرين. إذا كنت بحاجة إلى إجراء بعض الميزات ، ثم تحقق من كيفية عمل المستخدمين معها في سياق معين ، الأمر الذي سيتطلب استعلامين من SQL ، فمن الرائع أن تكون قادرًا على عدم تشتيت التحليلات. إذا كنت بحاجة إلى الضغط على زر عن طريق القياس مع الموجود منها ، وكنت تفهم المبادئ العامة ، يمكنك القيام بذلك دون إشراك مصمم ، وستقوم الشركة بالشكر على ذلك.
المجموع: يمكنك قضاء 100 ٪ من الوقت في تعلم مهارة معينة إلى الحد الأقصى ، أو يمكنك قضاء الوقت نفسه في خمسة مجالات ، ضخ 80 ٪ في كل منها. بعد هذه الرياضيات الساذجة ، يمكننا الحصول على المزيد من المهارات أربع مرات في نفس الوقت. هذه مبالغة ، لكنها توضح الفكرة.
يمكن تدريب المهارات المجاورة ليس بنسبة 80 ٪ ، ولكن بنسبة 30-50 ٪. بعد قضاء 10-20 ساعة ، سوف تضخ بشكل ملحوظ في المجالات ذات الصلة ، وفهم الكثير من العمليات التي تجري فيها وتصبح أكثر استقلالية بكثير.
في النظام البيئي الحديث لتكنولوجيا المعلومات ، من الأفضل أن تمتلك أكبر عدد ممكن من المهارات وألا تكون خبيرًا في أي منها. لأنه أولاً ، كل هذه المهارات تتلاشى بسرعة ، خاصة عندما يتعلق الأمر بالبرمجة ، وثانياً ، لأن 99٪ من الوقت نستخدمها ليس فقط المهارات الأساسية ، ولكن بالتأكيد ليست أكثر المهارات تطوراً ، وهذا يكفي حتى في الترميز ، حتى في الشركات الرائعة.
وأخيرا ، التدريب هو الاستثمار ، والتنويع مهم في الاستثمارات.
ما للتدريس
فماذا للتدريس وكيف؟ يستخدم مطور نموذجي في شركة قوية بانتظام:
- اتصالات
- التنظيم الذاتي
- تخطيط
- التصميم (عادة كود)
- وأحيانًا الإدارة والقيادة وتحليل البيانات والكتابة والتوظيف والتوجيه والعديد من المهارات الأخرى
وعمليا لا تتقاطع أي من هذه المهارات بأي طريقة مع الكود نفسه. يجب أن يتم تدريبهم وضخهم بشكل منفصل ، وإذا لم يتم ذلك ، فسيظلون في مستوى منخفض للغاية ، مما لا يسمح باستخدامهم بشكل فعال.
ما هي المجالات التي تستحق التنمية؟
المهارات اللينة - هذا كل ما لا ينطبق على مكابس الأزرار في المحرر. هذه هي الطريقة التي نكتب بها الرسائل ، وكيف نتصرف في الاجتماعات ، وكيف نتواصل مع الزملاء. يبدو مثل كل الأشياء الواضحة ، ولكن في كثير من الأحيان يتم الاستهانة بها.
نظام التنظيم الذاتي. بالنسبة لي ، خلال العام الماضي ، أصبح هذا موضوعًا مهمًا للغاية. من بين جميع العاملين في مجال تكنولوجيا المعلومات الذين أعرفهم ، هذه واحدة من أكثر المهارات تطوراً: فهم منظمون للغاية ، ويفعلون دائمًا ما يقولون ، ويعرفون بالضبط ما سيفعلون غدًا ، في غضون أسبوع ، في شهر واحد. من الضروري بناء نظام من حولك يتم فيه تسجيل جميع الشؤون وجميع الأسئلة ، مما يسهل العمل بحد ذاته ويساعد بشكل كبير في التفاعل مع الآخرين. وفقًا لمشاعري ، خلال العام الماضي ، دفعني التطور في هذا الاتجاه إلى أكثر من ضخ المهارات الفنية ، وبدأت في القيام بمزيد من العمل لكل وحدة زمنية.
روح المبادرة ، الانفتاح والتخطيط. الموضوعات عامة جدًا وحيوية وليست فريدة من نوعها لتكنولوجيا المعلومات ، ويجب على الجميع تطويرها. الاستباقية تعني عدم انتظار إشارة لاتخاذ إجراء. أنت مصدر الأحداث ، وليس ردود الفعل عليها. الانفتاح - القدرة على الارتباط بموضوعية بأي معلومات جديدة ، لتقييم الموقف بمعزل عن نظرتهم العالمية والعادات القديمة. التخطيط هو رؤية واضحة لكيفية حل مهمة اليوم للمشكلة لمدة أسبوع أو شهر أو سنة. إذا كنت ترى المستقبل يتجاوز مهمة محددة ، فمن الأسهل بكثير القيام بما تحتاج إليه وعدم الخوف من إدراك أنه قد أهدر مع مرور الوقت. تكتسب هذه المهارة أهمية خاصة بالنسبة لمهنة: لسنوات يمكنك تحقيق النتائج بنجاح ، ولكن ليس في المكان الذي تحتاج إليه ، وفي نهاية المطاف تفقد كل الأمتعة المتراكمة عندما يصبح من الواضح أنك تسير في الاتجاه الخاطئ.
جميع المجالات ذات الصلة إلى المستوى الأساسي. لكل شخص مجالاته الخاصة ، لكن من المهم أن نفهم أنه بقضاء 10-20 ساعة من الوقت في ضخ نوع من المهارة "الأجنبية" ، يمكنك اكتشاف العديد من الفرص الجديدة والأرض المشتركة في العمل اليومي ، وقد تكون هذه الساعات كافية ل نهاية المهنة.
ماذا تقرأ
هناك الكثير من الكتب حول التنظيم الذاتي ، إنها صناعة بأكملها حيث يكتب بعض الرجال الغامضين مجموعة من النصائح ويجمعون التدريبات. ومع ذلك ، ليس من الواضح ما حققوه هم أنفسهم في الحياة. لذلك ، من المهم وضع مرشحات على المؤلفين ، لمعرفة من هم وماذا وراءهم. أثرت أربعة كتب على تطوري ونظرتي إلى الأهم من ذلك كله ، جميعها مرتبطة بطريقة أو بأخرى بضخ المهارات الموضحة أعلاه.
1. ديل كارنيجي "كيفية تكوين صداقات والتأثير على الناس" . كتاب عبادة عن المهارات اللينة ، إذا لم يكن واضحًا من أين تبدأ ، فاختياره هو خيار مفيد للجانبين. إنها مبنية على أمثلة ، سهلة القراءة ، ولا تتطلب الكثير من الجهد لفهم ما تمت قراءته ، ويمكن تطبيق المهارات المكتسبة على الفور. بشكل عام ، يكشف الكتاب عن موضوع التواصل مع الناس.
2. ستيفن ر. كوفي ، "7 مهارات للناس ذوي الكفاءة العالية . " مزيج من المهارات المختلفة ، من الاستباقية إلى المهارات اللينة ، مع التركيز على تحقيق التآزر ، عندما تحتاج إلى تحويل فريق صغير إلى قوة هائلة. سهل القراءة.
3. مبادئ راي داليو . يكشف عن موضوعات الانفتاح والإبداع ، بناءً على تاريخ الشركة الذي صممه المؤلف ، والذي أداره لمدة 40 عامًا. هناك الكثير من الأمثلة التي تم الحصول عليها بشق الأنفس من الحياة ، وهي عروض رائعة توضح مدى التحيز والاعتماد على شخص ما ، وكيفية التخلص منه.
4. ديفيد ألين "كيفية ترتيب الأمور في النظام" . القراءة المطلوبة لتعلم التنظيم الذاتي. إن قراءتها ليست بهذه البساطة ، ولكنها توفر مجموعة شاملة من الأدوات لتنظيم الحياة والعمل ، وتفحص جميع الجوانب بالتفصيل ، وتساعدك على تحديد ما تحتاج إليه. من خلال مساعدته ، قمت ببناء نظامي ، والذي يسمح لي دائمًا بالقيام بالأهم ، دون أن ننسى البقية.
عليك أن تفهم أن مجرد قراءة ليست كافية. يمكنك ابتلاع كتاب في الأسبوع ، لكن التأثير سيبقى لعدة أيام ، ومن ثم سيعود كل شيء إلى مكانه. يجب استخدام الكتب كمصدر للمشورة يتم اختباره على الفور في الممارسة العملية. إذا لم يتم ذلك ، فكل ما سوف يقدمونه هو بعض التوسع في الآفاق.