JavaRush /مدونة جافا /Random-AR /من هو مهندس البرمجيات؟ هندسة البرمجيات مقابل البرمجة "فقط...

من هو مهندس البرمجيات؟ هندسة البرمجيات مقابل البرمجة "فقط".

نشرت في المجموعة
نلفت انتباهكم إلى مقال مقتبس بقلم سامر بونا حول الاختلافات بين هندسة البرمجيات والبرمجة، أو كيف يختلف تطوير مفهوم البرمجيات عن "مجرد البرمجة".
من هو مهندس البرمجيات؟  هندسة البرمجيات مقابل
يمكن لجميع مهندسي البرمجيات البرمجة، ولكن ليس كل المبرمجين قادرين على تطوير مفاهيم البرمجيات. بعض الأشخاص لا يحبون مصطلح "مهندس برمجيات" (المعروف أيضًا باسم مهندس البرمجيات) لأننا غالبًا ما نستخدم كلمة "مهندس" عند الحديث عن شيء أكثر مادية - البناء، على سبيل المثال. مقالتنا، بالطبع، لا تتعلق بالمصطلح نفسه. إذا تسبب لك الرفض فجأة، فمن السهل استبداله بشيء متعلق بالإبداع. "منشئ البرامج" أو "مؤلف البرامج"... أو حتى "منشئ البرامج"!
عندما نتحدث عن "مهندس برمجيات"، فإننا نعني شخصًا لا تتمثل مهمته الرئيسية في كتابة التعليمات البرمجية فحسب، بل في إنشاء تطبيق عالي الجودة. وفي هذا يرى دعوته، تطبيق المنهج العلمي والأساليب الإحصائية في عمله. بالنسبة له، البرمجة ليست مجرد وسيلة لكسب المال مقابل الغذاء.
القدرة على البرمجة لا تجعل الشخص تلقائيًا مهندس برمجيات. يمكن لأي شخص أن يتعلم البرمجة، وهو أسهل بكثير مما يبدو. يمكن لأي شخص إنشاء برنامج بسيط لاستخدامه الخاص، ولكن هذا لا يضمن أن نفس البرنامج سيعمل مع الآخرين. المثال المفضل لدي هو: الكثير منا يغني في الحمام، ولكن، للأسف، هذا الأداء لا يستحق دائما مرحلة احترافية. بالطبع، للحصول على تجربة موسيقية عالية الجودة، من المرجح أن تلجأ إلى محترف. هل انت بحاجة لامثلة اخرى؟
  • نتعلم جميعًا الرياضيات والكتابة في المدرسة، لكن هذا لا يجعلنا علماء رياضيات وكتابًا.
  • معظمنا قادر على إعداد طبق مقبول ولذيذ جدًا في بعض الأحيان، ولكن لن يجرؤ الجميع على طهي طاولة لـ 100 شخص لحفل عشاء في السفارة. في هذه الحالة، نقوم باستئجار طباخ.
  • هل أنت مستعد الآن لتكليف بناء منزلك الجديد بالكامل لطفل الجيران الذي يصنع روائع رائعة من Lego؟
النقطة الأساسية التي أحاول إيصالها في هذه المقالة هي أن البرامج البسيطة تختلف تمامًا عن البرامج التي صممها المهندسون. أبسط تعريف لعملية البرمجة: رسم تسلسل منظم من الإجراءات لجهاز الكمبيوتر من أجل الحصول على شيء محدد كمخرجات، مع مراعاة معلمات الإدخال المحددة. عملية هندسة البرمجيات هي تصميم وكتابة واختبار وتنظيم برنامج كمبيوتر لحل المشكلات للعديد من المستخدمين. يتعلق الأمر بإنشاء حلول موثوقة وآمنة من شأنها أن تصمد أمام اختبار الزمن وتتغلب على بعض التحديات غير المعروفة التي قد تكون غير واضحة.
من هو مهندس البرمجيات؟  هندسة البرمجيات مقابل
يعرف مهندسو البرمجيات كل شيء عن المشكلات التي يحلونها، والحلول التي يقترحونها، وقيود تلك الحلول، وخصوصيتهم وأمانهم. في رأيي، إذا كان الشخص لا يفهم جوهر المشكلة، فلا ينبغي له حتى أن يبدأ في برمجة حلها.

العقلية الهندسية - البحث عن الحلول التطبيقية

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

"المفكرون يحلون المشاكل، العباقرة يمنعون حدوثها"

- البرت اينشتاين

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

جودة البرنامج وجودة الكود

البرامج الجيدة واضحة وسهلة القراءة. من السهل توسيعها، واللعب بشكل جيد مع البرامج الأخرى، ولن يكون العمل معها كابوسًا. جودة الكود غير قابلة للتفاوض. ينبغي أن تكون عالية، هذا كل شيء. عند النظر في الأمر، فإن الأعذار مثل الحالة المزاجية السيئة للمبرمج أو المواعيد النهائية الضيقة جدًا (أوه، تلك المواعيد النهائية!) غير مقبولة. أحد أهم جوانب تطوير البرمجيات هو تصميم البرنامج بطريقة تجعل من السهل صيانته وتعديله في المستقبل (مرحبًا، OOP!). اليوم، أصبحت جميع البرامج تقريبًا قابلة للتعديل، وغالبًا ما تحدث هذه العملية حتى بدون مشاركة المستخدم أو لا تتطلب أي شيء من المستخدم بخلاف "تم تحديث برنامجك، انقر فوق موافق أو تأجيل". بالطبع، يحق للمستخدمين المطالبة بميزات جديدة من التطبيقات (خاصة إذا كنا نتحدث عن برامج المؤسسة طويلة الأمد المكتوبة بلغة Java، أو الألعاب عبر الإنترنت التي يمكن لعبها لسنوات).
هل تريد معرفة المزيد عن برمجة جافا؟ انضم إلى مجموعة مطوري جافا !
من الصعب وصف جزء من التعليمات البرمجية في حد ذاته بأنه مفيد. تبدأ الوظيفة المفيدة للبرنامج حيث تتواصل أجزاء متباينة من التطبيقات مع بعضها البعض، وتتبادل البيانات، وتعمل معًا لأداء مهمة تقديم البيانات والواجهات للمستخدمين.
من هو مهندس البرمجيات؟  هندسة البرمجيات مقابل
وينبغي تصميم البرامج مع أخذ هذه النقاط في الاعتبار! ما هي الرسائل التي يتلقونها؟ ما هي الأحداث التي يتم رصدها؟ كيف تتم المصادقة والترخيص؟ علامة أخرى لا تقل أهمية عن البرنامج الجيد هي وضوح الكود، وليس عدد الاختبارات التي اجتازها التطبيق أو حتى تغطية الاختبار الجيدة. أسئلة تبدو بسيطة: "هل يستطيع شخص آخر غيري فهم الكود الخاص بي؟"، "هل سأتمكن من كتابة هذا الكود اليوم وفهمه في غضون أسابيع قليلة؟" يقول الاقتباس الشائع حول أصعب شيئين في البرمجة:

"هناك شيئان صعبان فقط: إبطال ذاكرة التخزين المؤقت وتسمية الكيان"

- فيل كارلتون.

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

"كنت سأكتبها بشكل أقصر، لكن لم يكن لدي الوقت."

- مارك توين.

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

البيئات والاختبارات

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

التكلفة والكفاءة

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

التركيز على تجربة المستخدم

يتطور المبرمج الجيد مع وضع تجربة المستخدم (UX) في الاعتبار. يعد التفاعل بين الإنسان والآلة موضوعًا يتطلب أبحاثًا وحلولًا لا نهاية لها. كلما تم تطبيق المزيد من الحلول، كلما كان البرنامج أفضل. فيما يلي بعض الأمثلة، فقط لإعطائك فكرة عن ماهية هذا الاتجاه:
  • عند تصميم نماذج إدخال البيانات مثل البريد الإلكتروني، يجب أن يتجاهل البرنامج الجيد حالة عنوان البريد الإلكتروني. لا ينبغي أن يظهر خطأ إذا تم الضغط على مفتاح CAPSLOCK لأن عنوان البريد الإلكتروني فريد بأحرف صغيرة. إذا كان البرنامج يقبل عنوان بريد إلكتروني جديدًا كمدخل، فتحقق منه مبكرًا في عملية الإدخال لتنبيه المستخدم بأنه يستخدم تنسيق العنوان الخاطئ. يتضمن هذا الحل عمليات التحقق الواضحة مثل علامة "@" المفقودة، وكذلك عمليات التحقق غير الواضحة، مثل التحقق من الترتيب الخاطئ للأحرف مثل "gmail.ocm"

  • عندما تتم إعادة توجيه المستخدم لتنفيذ إجراء ما، يجب أن يتذكر البرنامج الجيد موقعه الحالي ويعيده مرة أخرى بعد الانتهاء. يجب أن يتذكر البرنامج الجيد أيضًا البيانات التي أرسلها المستخدم بالفعل، وهو أمر مهم لمزيد من التفاعل معه.

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


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

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

الموثوقية والأمن والسلامة

في رأيي، فإن الفرق الأكثر أهمية بين مطور البرامج المحترف والهاوٍ هو مراعاة معايير مثل الموثوقية والأمان والسلامة للتطبيق عند إنشائه.
يعرف المحترف الحقيقي أنه مسؤول عن سلامة وأمن الحل الذي يقدمه.
يجب أن تكون أجزاء البرنامج متسامحة مع الإدخال غير الصحيح، والحالات غير الصحيحة، والتفاعلات غير الصحيحة. من الصعب جدًا تطبيق هذا بالفعل وهو السبب الرئيسي وراء سماعنا قصصًا عن أشخاص يموتون بسبب أخطاء برمجية. لقد قام المستخدمون بإدخال بيانات غير صحيحة في البرنامج، وهم يدخلون وسيستمرون في إدخالها. ويجب قبول هذا كحقيقة. علاوة على ذلك، فإن البعض سيفعل ذلك عمدًا، بهدف كسر التطبيق والوصول إلى الموارد المتاحة له.
من هو مهندس البرمجيات؟  هندسة البرمجيات مقابل
إليك مثال واقعي: الشخص الذي يُزعم أنه مسؤول عن خرق بيانات Equifax الأخير متهم بالفشل في مسؤوليات وظيفته، والتي كانت تتمثل في تطوير حلول لمقاومة المدخلات السيئة والخبيثة في جميع منتجات البرمجيات المتاحة للجمهور. لا تنطوي الحوادث المتعلقة بأمن المعلومات على إدخالات غير صحيحة وضارة فحسب، بل تتضمن أيضًا بيانات تم إدخالها بشكل غير صحيح. إذا نسي المستخدم كلمة المرور الخاصة به، كم مرة يمكنه محاولة إدخالها؟ هل ستمنعونه بعد هذا؟ ماذا لو حاول شخص آخر حظر حسابه؟ هل يمكن للمستخدم إرسال بيانات الاعتماد الخاصة به عبر قناة بيانات غير مشفرة؟ ماذا لو جاء طلب تسجيل الدخول من مكان غير عادي؟ ماذا ستفعل إذا بدت محاولة تسجيل الدخول تلقائية؟ ماذا فعلت لحماية المستخدمين من البرمجة النصية عبر المواقع، وتزوير الطلبات عبر المواقع، والتصيد الاحتيالي الشائع؟ هل لديك استراتيجية احتياطية في حالة وقوع هجوم DDoS على خوادمك؟ تسلط هذه الأسئلة الضوء على بعض القضايا التي يجب أخذها في الاعتبار. لا يقوم البرنامج المحمي بحفظ المعلومات المهمة في شكل نص. إنه يحميها بتشفير معقد أحادي الاتجاه (يسهل تشفيره ولكن يكاد يكون من المستحيل فك تشفيره بدون المفتاح). هذه إجراءات احتياطية في حالة اختراق البرنامج. سوف يكتشف المتسللون البيانات المشفرة التي لا فائدة منها بالنسبة لهم. تنشأ مشاكل غير متوقعة حتى في أفضل البرامج. من الصعب أن يُطلق على المبرمج غير المستعد لحدوثها لقب محترف. وإلى أن يتوقع سلوكًا غير متوقع، فهو ليس مهندسًا. إنه "مؤلف البرامج غير الآمنة". الأخطاء في البرامج ليست واضحة دائمًا. إن قدرتنا الفكرية على توقع الأخطاء المعروفة ومنعها محدودة. ولهذا السبب يدرك مهندسو البرمجيات أهمية الأدوات الجيدة لتمكينهم من كتابة برامج صحيحة وآمنة.

أدوات المطلوبة

لا شك أننا بحاجة إلى أدوات تطوير مختلفة وجيدة. غالبًا ما يتم الاستهانة بدورهم، لكنهم في الواقع يوفرون الكثير من الوقت والجهد، مما يؤدي إلى تبسيط بعض المهام بأمر من حيث الحجم. تخيل لو كان لا يزال يتعين عليك تحميل الملفات عبر FTP للنشر، إذا جاز التعبير، بالطريقة القديمة. تخيل تصحيح أخطاء الشبكة ومشكلات الأداء بدون استخدام Chrome DevTools! وكم سيكون من غير الفعال كتابة كود JavaScript بدون ESlit وPrettier هذه الأيام!
من هو مهندس البرمجيات؟  هندسة البرمجيات مقابل
يجب الترحيب بأي أداة تقلل من وقت التعليقات أثناء كتابة التعليمات البرمجية. عندما أجد أداة لم تكن مألوفة بالنسبة لي من قبل، ولكنها مفيدة وفعالة حقًا، لا يسعني إلا أن أندم على أنني لم أستخدمها قبل هذه اللحظة السعيدة.
ستساعدك الأدوات الأفضل والأكثر حداثة على أن تصبح مبرمجًا أفضل. ابحث عنها، واستخدمها، وقدّرها، وقم بتحسينها إذا استطعت. ولا تنشغل بنفس الشيء: من يدري، ربما باستخدام أداة جديدة ستقضي وقتًا في التثبيت والتعلم مرة واحدة، وبعد ذلك ستحل المشكلات بشكل أسرع عدة مرات؟

تطور هندسة البرمجيات

لا يمكن لأحد أن يتعلم هندسة البرمجيات في شهرين أو ستة أشهر أو حتى سنة. لن تتعلم كيف تصبح مهندس برمجيات في دورة دراسية أو جامعة أو معسكر تدريبي. لقد كنت أدرس منذ أكثر من عشرين عامًا وما زلت أدرس الآن. لم أتمكن من وصف نفسي بمبرمج ذي خبرة إلا بعد عقد من التعلم والتطوير وإنشاء وصيانة التطبيقات التي يستخدمها آلاف المستخدمين. هندسة البرمجيات ليست للجميع، ولكن يجب على الجميع أن يتعلموا كيفية حل مشاكلهم باستخدام جهاز الكمبيوتر. إذا كان بإمكانك تعلم كتابة برامج بسيطة، فيجب عليك ذلك. إذا كان بإمكانك تعلم كيفية استخدام البرامج المتاحة للعامة، فيجب عليك ذلك. إذا كان بإمكانك تعلم استخدام البرامج مفتوحة المصدر وتخصيصها لنفسك، فلديك قوة خارقة! كل يوم يجلب للمطورين تحديات جديدة ومشاكل جديدة، ولهذا السبب هناك حاجة إلى هندسة البرمجيات. تتمثل المهمة الرئيسية لهذه المهنة في إنشاء برامج بحيث لا يضطر الشخص العادي إلى التعامل معها لسنوات عديدة. بحيث لا تكون هناك حاجة لدراسات طويلة للتفاعل مع البرامج. ومع ذلك، يفكر مهندسو البرمجيات باستمرار في إنشاء أدوات أفضل يمكنها حل المشكلات المعروفة الأكثر تعقيدًا، وبذل كل ما في وسعهم لضمان ظهور المشكلات الجديدة في حالات نادرة قدر الإمكان.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION