This is a viewer only at the moment see the article on how this works.
To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk
This is a preview from the server running through my markdig pipeline
العمل على قواعد الشيفرة المتوارثة (or a contractorM SK1s life)
Wednesday, 06 November 2024
المقدمة
كمطور مستقل واحد من المهارات التي تحتاج لتعلمها بسرعة هو كيف تعمل على قواعد البرمجة الموجودة بكفاءة
التحديات
لدى الأنظمة المماثلة تحديات هائلة ; خاصة عندما يكون المطورون الرئيسيين / المهندسين المعماريين ♫ ( إذا كنتم ♫' محظوظين بما فيه الكفاية لجعلهم ينتقلون إلى هناك ♫
الوثائق
وهذا غالبا ما يُتجاهل خاصة في الشركات الصغيرة.
- دليل المطورين الجديد إذن كيف يمكنك تشغيل المشروع محليا ( المزيد عن هذا في دقيقة ), ما هي الملاحظات هناك | ( إذا كنت على سبيل المثال تحتاج إطاراً مختلفاً عن النظام الحالي |, بالتحديد صحيح مع العقدة للأسف
- أطباق نشر في هذه الأيام عندما يُنظر إلى "CI" / "CD" على أنه معيار ذهبي" - "standard of deployment it" ' "s often overlooked that you need to know how to deploys the system manually" هذا صحيح بالتحديد إذا كنت تعمل على نظام كان ' موجوداً منذ فترة طويلة ولديه الكثير من الخطوات اليدوية"
- إجراءات حل المشاكل; ما الذي تفعله عندما يذهب النظام إلى الأسفلM SK1 من تتصل به? ما هي الأشياء الرئيسية للتحقق منها ? هذا غالبا ما يتم تجاهله لكن هو CRUCIAL في نظام الإنتاج
- الهندسة المعمارية / النظام-دواسات التصميم; كيف يعمل النظامM SK1 ما هي المكونات الرئيسية? ما هو الإعتماد الرئيسيMSC3 فكروا بهذا كخريطة الطريق عند تعلم نظام جديد . إنه يقدم نظرة عاليةMSSK5 على كيفية عمل النظام التي يمكن أن تكون حرجة ( خصوصاً في أنظمة أكبرMSL7 أنظمة موزعةMS). هذا يجب أن يضمن أي مخازن للبرمجة المصدرية المستخدمةMスク9 أي أنظمة سي دي ــ/ سي دي دي إكس تستخدم ــ , أي قواعد بيانات تستخدم لكل عنصر من التطبيقMسک12 يمكن أن يغطي أي شيء من الرسم البياني البسيط إلى الرسم التكاملي الـ - رسم UML المنبعث من كل جزء من النظام .. على سبيل المثال، في تطبيق React هذا عادةً سوف يتضمن رسماً للمكونات وكيف يتفاعلون مع بعضهم البعض و أي خدمات مؤخرة . في تطبيق .NET Core هذا سيحتوي على رسم بياني للخدمات وكيف يتفاعلون مع بعضهم البعض (و الواجهة الأمامية | & | أنظمة الواجهات الخلفية الأخرى |) | و ربما ASP | МSK4 | نماذج NET و ما هي الخدمات التي يمكن استخدامها
الوثائق هي واحدة من الأشياء التي نحن كمطورين غالباً نكره القيام بها (itM SK1s NOT code) but it 's crucialMSC4 كما ترون أنا أحب المخططاتMST5 مع مثل Mermaid و PlantUML يمكنكم إنشاء بعض الرسوم البيانية الجميلة حقاً والرسم البياني للتدفق التي يمكن أن تكون مضمنة في مستنداتكم
يجب أن يكون موجوداً ; المطورين يتكلمون غالباً عن ال bit -rot | ; | حيث تصبح إعتمادات المشروع |' | قديمة |/ | مخاطر أمنية مباشرة | . | هذا صحيح أيضاً في الوثائق | МSK6 | إن لم تكن موجودة .
هناك ' مستويات مختلفة من الوثائق لكن بشكل عام في كل مرة تقوم بتغيير البرمجة التي تشير إليها في مستند يجب عليك تحديث ذلك الملف.
تشغيل النظام محلياً
هذا عادة تحدي; خاصة إذا كان النظام موجودا لفترة من الوقت. تحتاج إلى معرفة ما هي النسخة من العقدة M SK2 . NET إلخ.
لقد رأيت العديد من المطورين يقولون أن هذا ليس ' relevant in these days of cloud systems and large distributed applications. لكنني لا أوافق ; you need to be able to run the system locally to debug issues quickly and effectively.
- الرسم البياني - يبدو أن هذا أصبح ' مطور متقدم فقط МSK2 مهارة | , لكن من المهم |' | أن تكون قادرا على رسم ملف رمزك لمعرفة أين هي الحوائط المغلقة . .. . هذا صحيح بالتحديد في نظام قديم حيث قد لا يكون لديكم الرفاهية من القدرة على إعادة كتابة النظام من الصفر . تتبع النقاط و نقطة الذاكرةهي لا قيمة لها هنا. خصوصاً في برمجيات ASP.تطبيقات شبكية ; أكبر المشاكل هي عموماً M SK3تسرباتMSC4 في النظامMRK5 نشاطات الذاكرةMNK6 نشطات الاتصال وغيرهمMسک7 بينما سيبدو أن تطبيقك يعمل FINE لبرهة تجده فجأةMST8 يتعرض للصدمة MST9 يستهلك كل الذاكرة على سرورMst10
- إيجاد مشاكل في محرك الbug - تعجبك أو لا تعجب أيام
Response.Writeفي ASP الكلاسيكي هي فوق . لتطبيق معقد حتى modestly (especially ones you didn'tM SK2t write) itMSC4s crucial to | | 'step through |' | code | МSK7 | To follow a request from its inception through the service to identify what MIGHT be happening | - السجل - مرة أخرى غالباً ما يتم تجاهله ( بالأسف ولكن لا يوجد فلتر استثناء ASP. NET في الجزء العلوي من الهرم ليس كافياً الوظيفة السابقة, التسجيل هو جزء مهم في العمل في البرمجة LOCALLY. تذكر أن بإمكانك استخدام أنواع تسجيل الزبائن ( على سبيل المثال باستخدام تسجل مولدات المصدر) في ASPM SK1NET Core. يمكنك حينها تحديد أي أنواع الأحداث ينبغي أن تسجل وأي منها يجب أن تُسَمْنَ 'tMSC4 هذا أمر حاسم في نظام قديم حيث قد لا يكون لديك الرفاهية في أن تكون قادرا على إعادة كتابة النظام من الصفر
بالنسبة لرؤية التطبيقات قد ترغب في رحلة المستخدم وغيرها من الميزات; لكن كونوا على دراية يصبح هذا مكلفاً بسرعة إذا كنت تستخدم
LogInformationلكل طلب. قد ترغب في استخدام معالج التيليمتر الخاص بك لتصفية الطلبات التي لا تريد أن تسجلها - الاختبار - غالباً ما أرى المطورين 'الاختبار في مسبقة الإنتاج' أو يفكرون أن اختبار وحدة عندئذ تتحقق من أنه جيد من ناحية الاختبارM SK3 إنه نادراً ما , هناكMSC5 لديه الكثير من القيمة في كلاهما باستخدام أداة مثل Resharper | / | NCrunch لتشغيل اختبارات وحدة تلقائياً |; لكن تذكروا أن الاختبارات للوحدات هي فقط ذلك | ; | إنهم يختبرون ـ ' | وحدة | МSK10 | من البرمجة .. . أنت بحاجة إلى الحفاظ على مرئية في كيفية تشغيل النظام في الواقع مع المكونات الأخرى . . . هذا هو المكان الذي تأتي فيه اختبار التكامل . SpecFlow أن تكتب هذه الإختبارات في إنسان
في كل مشروع أعمل على الخطوة الأولى هو الحصول على النظام ( أو جزء كبير منه) يعمل محلياًM SK2 من خلال رؤية الشفرة , يشغل الشفرة, تفكيك الشفرة يمكنك أن تحصل على شعور بكيفية عمل النظام
قاعدة الشفرة
في كل نظام هذا هو مصدر الحقيقة, لا يهم ما يقوله الدكات , ماذا يقول لك الآخرون عن كيف يجب أن يعمل هذا هو كيف يعمل
Navigating A Legacy Codebase
هذا غالباً يصعب , إنه ' مثل العثور على طريقك في مدينة جديدة بدون خارطة للطريق . لحسن الحظ في التطبيقات لديك نقطة دخول ( تحميل صفحة / مكالمة API الأمامية إلخ .) إختيار نقطة وبدأ هناك .
استخدم ما تحتاجه للتفاعل معه, سواء كان ذلك's PostMan , RiderM SK3s HttpClient أو حتى صفحة على الانترنتMSC4 تحرك في محرك الbug الخاص بكMST5 تقوم بإجراء المكالمة وتتبعها من خلالهاMSP6 تنفس وتكرر لكل جزء من النظامMSM7
إعادة التمثيل
عادة ترك هذا حتى تفهم النظام. إنه' دائما مجذوب على ' رميه بعيداً وبدأ مرة أخرىM SK3 مع ذلك مقاومة هذا الإغراءMSC4 خصوصاً لنظام مُركّز إنه يعمل إعادة البناء / حتى إعادة صياغة نظام هو مخاطرة كبيرة . نعم هو مزخرفة , لكن لكل سطر من البرمجة التي تتغير تتعرض لخطر إدخال أخطاء جديدة مثيرة
مثل كل شيء آخر (بخاصة عند عقد العقد) عليك أن تبرهن العمل الذي تقوم به على نظامٍ ما
- الأداء - النظام بطيء ويحتاج إلى تسريع ( كن حذراً مرة أخرى, ما تجده بطيئاً قد يكون كيف يصمم النظام للعملM SK3 جعل قطعة واحدة تتدخّل بسرعة قد يتسبب في مشاكل في أسفل النظامMSC4 هل ستقومون |' | بإبادة | ' | بمعالجة قاعدة البيانات . ., . إذا قمتم بطلبات كثيرة جداً هل لديكم آلية ستنجح .
- الأمن - النظام غير آمن ويحتاج لجعله آمنًا. هذا مُحَلِّقًا ; خصوصاً في نظام قديمM SK3 مع البيتةMSC4 بإمكانك أن تجد أن النظام يستخدم نسخ قديمة من المكتبات التي لديها مشاكل أمنية معروفة.
- الاستدامة - يصعب حفظ النظام ويحتاج إلى جعله أكثر سهولة في الحفاظ علىه . بشكل عام يصبح هذا عملاً كبيراً ; هل عمر قاعدة البرمجة الحالي يبرهن هذا ? إذا كنت مسك4 تقضيون وقتاً أكثر في إجراء هذه التغيرات لتحسين قابلية الترشيح منك مSK5 سوف تنقذ من أجل الزبائن عندئذ . .مسك6 . لا يستحق ذلك .( . ومرة أخرى .
- الخبرة المستخدمة - أنا بشكل عام أعطي الأولوية لهذه القضايا. لأجل المستخدم لا يهم ' سواء كان شفرةكم 1% أفضل | ; إنهم هم الذين يدفعون مقابل العمل الذي تقوم به في النهاية |. إذا كان بإمكانك أن تجعل خبرتهم أفضل من ذلك ٬' هو على الأغلب يستحقها ٬ . ومع ذلك ,, كونوا مدركين أن هذا يمكن أن يكون , ' , ميلاً متقلباً . .' , تغييرات .
عمل العمل على الأنظمة المتوارثة
هذا غالباً ما يُتجاهل; خصوصاً من قبل المطورين. عليك أن تكون قادراً على توجيه العمل الذي تقوم به على نظامٍ ماM SK2 هذا صحيح بالتحديد في بيئة العقد حيث أنتـ' تُدفع بدوامٍ ساعتيّةMSC5 في نهاية المطافَ, إنهـ' ليس شفرةك وليس أموالك . السبب وراء قيامك بتغييرٍ هو في كثير من الأحيان أكثر أهمية من التغيير نفسه.
أنا 'عملت كمهندس منذ أكثر من عقد من الزمن الآن , إنها ' ليست سهلة ; كمهندس كل ساعة من وقتك هي ما يكلفها ' ما يكلفه ' للمستهلك . عليك أن تضيف قيمة الحركة للنظام أكثر مما تكلفه . إذا كنت ' لا تكون كذلك فأنت ' سوف تبحث بسرعة عن عقد جديد مسك10
كمطورين , نحن نميل إلى أن نكون رجال أعمال سيئون ' نحن مركزون على |' | التحسين | ' | في كل دورة |. | فى الواقع |مSK5 | أنت لا ــ ' | لا تحتاج إلى صنع نظام |
على المدى الطويل هذا يتضمن ضمان أي جديد البرمجة قابلة للحفاظ والتكلفة-فعالة للتشغيل. في الأنظمة القديمة هذا أكثر تعقيداً I'm not making any changes تعتقدون I'm just learning the system.
هذا خطأ; أنت'تم تتعلمون النظام لجعله أفضل . أنتـ'تم تعلمون النظام للجعله أكثر كفاءة M SK4 أنتــ'تمتعلمون نظام لجعلها أكثر قابلة للحفاظ . إذا لم يستطع الزبون قبول هذه الخطوة MSC7 عندئذ يجب أن تكونوا على دراية شديدة حول كيفية إتصالكم بها M SK8أو البحث عن عقد جديد Mسک9
الشعب
مرة أخرى غالباً ما تم تجاهلها"مسك0" الكثير من الوقت الذي تأخذه "مسك1" كمقاول لأن شخصاً مهماً قد غادر"مسک2" لا تشارك في السياسة من هذا"مكس4" إنها "مكس5" ليست اهتمامك"مكسي6" عليك أن تكون قادراً على العمل مع الناس الذين هناك لتحقيق أهداف المشروع"مسل7" في العقد سوف يكون لديك ' عموماً شروط تعهدك مكتوبة ( في العقد الحالي هو 's ' تحسين الثقة وتخفيض تكاليف التشغيل PSK4 التركيز على هذا S. إذا لم تكن متأكداً ما يعنيه هذا عندها ASK SSK7
تذكروا من هو متصلك المباشر ; خصوصاً في الأشهر الأولى . أبقيهم على خبرتهم ♫( أنت على الأرجح ستربح ♫ ' ليس لديك خصائص جديدة لتتفاخر بها عندما تخبرهم كيف يعمل النظام ♫ ). أنا عموماً أرسل رسالة بريدية ملخصة كل أسبوع ♫
تذكروا, هذا هو الشخص الذي سيوافق على فواتيركم; لا ينبغي أن يكون هناك مفاجآت في وقت الاوراقM SK2 عندما تبدأ بالتحقق من الشفرة بشكل منتظم فهذا أقل مشكلةMSC3 لديك سجلاً عن ما فعلته بالضبط والآثار التي حصلت عليها يحتاجون إلى معرفة ما فعلته ولماذا يجب عليهم دفعك لذلك
الوثوقية
مرة أخرى, بالعودة إلى البرمجة القديمة; إذا قمت بتغييرها بشكل عام فإنك تحتاج إلى نشرهاM SK2 حتى أفضلنا سيقوم بتفكيك هذا من وقت لآخرMSC3 خاصة في أنظمة البرمجيات القديمة سيكون هناك شيء لا يمكنكم أن تعرفوا عندما تقوم ب déploy . هذا يعود إلى السجل - إذا كان لديك طاقم التحضير يسجل فيه LOT ♫ ( ♫ لكن يبقى لفترة قصيرة ♫) ♫ عندئذ عندما تقوم بإنشاء هذا يمكنك جمع المزيد من المعلومات حول ما قد فشل
مهما كنت جيداً , كم عدد الاختبارات المحلية التي قمت بها ' لقد قمنا بها نحن جميعاً بشراً .. هذا جزء رئيسي من '\don'\t الإنطلاق في يوم الجمعة . .
وبالتحديد للأنظمة الإنتاجية نظام التثبيت الخاص بك قد لا يكون 1:1 (بالتحديد فيما يتعلق بالشحنة), أداة مثل k6 يمكن أن تساعدك على محاكاة الشحن ( حتى أفضل محلياً حيث يمكنك القيام بعملية Profiling المناسبة كما ذكرت سابقاً ).
نشر
مرة أخرى غالباً ما يتم تجاهلها في الحماس لـ CI/CD هو السبب وراء هذه الـ . بسيطة ; سوف تفشل ــ . having a very fast and efficient way to deploy a system means that when you DO break it you can also fix it more quickly . If your CI code review system means it takes 2 days to get a PR merged then thatM SK6s the quickest you can reasonably fi a system | . if your CD System means that you take down the running system ♫ ; get used to LONG nights |.
آلية فعّالة لإصلاح ونشر البرمجة أساسية لسلسلة تطور فعَّالة.
'Fixing Legacy Apps'
لقد وضعت هذا في اقتباسات لأن هذا هو مسألة
- اللقطات التي تجري
هذه عملية ببساطة إصلاح البرمجة الموجودة ; مرة أخرى تتأكد من أن تقوم باختبارها بشكل معمق وتملك العمليات في مكانها لإعادة / إعادة توزيع أي إصلاحات بسرعة لقد فزت ' لا أكذب هذا النوع من التطوير نادراً ما يكون ممتعاً لأنك مازلت محتملاً أن تتجول عبر حفرة قاعدة البرمجة الموجودة . لكن
كما هو المعتاد يجب أن تتأكد من أن لديك بعض النموذج للاختبار لتختبر الشيفرة الحالية; في الأمثلة ينبغي أن تختبر أيضاً فشل المشكلة التي تحاول حلها قبل أن تقوم بحلها . إنهم يشتغلون لهذا ليكون لديهم اختبار وحدة يهدف بدقة إلى مجال البرمجة الذي تحتاج إلى إصلاحه لكن هذا غالبا ما يكون خارج نطاق العمل للأنظمة الموزعة الكبيرة
I'd عادة تستخدم نظام من الإختبارات في هذا الترتيب من الميزة
- اختبارات وحدة - مرة أخرى هذه تُفضّل لأنك تستطيع توجيهها فقط لممارسة البرمجة التي تعمل عليها . ومع ذلك, في نظام قديم هذه غالباً لا تكون موجودة ♫ & من الصعب جداً إصلاحها ♫( على سبيل المثال في نظام يحتوي على الكثير من المكالمات الخارجية ♫
- اختبارات التكامل - هذا عبارة مملوءة لأنها يمكن أن تغطي أي شيء من إختبار وحدة يمر عبر طبقات متعددة من البرمجة ( هذه أفضل ما يمكن تفاديه أتأكد حتى من خلال اختبارات سيلينيوم. بشكل عام تريد اختبار النظام ككل; لكن كونوا على وعي أن هذه الإختبارات قد تكون بطيئة ومرنةM SK2 استخدام التحقق يمكن أن يكون في كثير من الأحيان مقاربة عظيمة للأنظمة القديمة كما يمكنك على الأقل | ' | التحقق |' | أنت | МSK5 | لا تكسر سطح الواجهة البرمجية للنظام |
- اختبارات يدوية - كل مطور يجب أن يحاول ويجرب اختباراً يدياً لأي عملية تفحص البرمجة . هذا فقط يضمن أن ما تتوقعه من '\ المستخدم \ ' | ( \ هذا يمكن أن يكون مستخدماً فعلياً أو جزء آخر من النظام يتفاعل مع شفرةك \ ) \ ليرى هو ما يراه بالفعل . . . . هذا يمكن ان يكون بسيطاً مثل تشغيل النظام محلياً وتحقق من نتائج صفحة أو معقداً كالقيام بمجموعة كاملة من التجارب على сервер المعرض .
- سمك البصل للقيام بالعمل على الأنظمة القديمة فأنت في الغالب ستحصل على ' لا تملك الرفاهية من عمل إعادة كاملة . هنا أستخدم الطريقة | ' | صبغ الأيونون |' |
لتمكينك من تحديث أجزاء النظام يمكنك تحديد المكونات التي يمكن تقسيمها من المونيوت الحالي إلى خدمة صغيرة (لنسبة ما يقارب 'micro'). هذا يمكن أن يكون طريقة عظيمة للبدء في إعادة تشغيل النظام دون خطر إعادة العمل بالكاملM SK3 قد تكون الأمثلة الشائعة هي تقسيم نقاط نهاية الAPI إلى مشاريع جديدة تستخدم عناصر أكثر تحديثاً.
سأقوم بتغطية هذا المقاربة أكثر في مقالة مستقبلية لأنها مفتاح لكيفية عملي على الأنظمة القديمة
Getting Paid
الآن بما أن لدينا كل هذا على الطريق هناك يأتي مشكلة الدفع الشائكة. لدي قاعدة عامة :
أي مشاكل في الدفع أنا أتطلع إلى التحرك
إذا كان ' يتأخرون في الدفع ; يعتمد على العقد الخاص بك لكن في وقت أقصى خلال |30 أيام ولكن بشكل عام أقرب إلى | 7; , هذا علامة سيئة . .. . إذا كان هناك |' . صعوبات في دفع فواتيرك .
لا تخلطوا مع هذا .. ان قمتم بعملكم .. يجب ان تدفعوه في الوقت المناسب .. لا يهم .. لا عجبكم كم يستمتعون به .. ان كان زبون سيئ يستطيع استغلالكم .. سوف يستغلونه
كن صريحاً ; فقط تدفع مقابل الوقت الذي عملته بالفعل ; أتأكد من ذلك ' يوضح ما فعلته ولماذا فعلته
لقد قادت مجموعات من المطورين ولقد كنت مطوراً ولقد كان متعاقداً وكنت زبلاً و قد رأيت كل الجوانب لهذا و أستطيع أن أقول لكم: إن لم تُدفع لكم في الوقت المناسب فأنتم بحاجة إلى التحرك إلى الأمام.
فيما يتعلق بمعدل ; ستجدون مستوىكم ; شخصياً أنا أدفع أكثر للمشروعات التي أملك فيها مسؤولية أكبر | ( | أو التي لا تبدو ممتعة |' | أدفع أقل لمشروعات حيث أتعلم تكنولوجيا جديدة أو من أجل الشركات الناشئة |
في الختام
حسناً , هذا هو , أنا أتوقف عن العمل اليوم و غداً من أجل جنازة جدتي , و بصراحة أشعر بالخوف قليلاً لأنني أملك نظاماً إرثياً كبيراً لأتعلمه , لذا فكرت أني أخرج أفكاري عن كيفية عمل هذه الأنظمة .