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


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

الاجابه 2:

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

القاعدة العامة للإبهام بالنسبة لي هي أنه على مستوى المكون ، يكون التصميم مطلوبًا ، وعند استخدام مكونات متعددة ، تكون البنية مطلوبة. ومع ذلك ، أعتقد أن القيام بالعمارة جيدًا ، يجب أن تكون قد قمت بالتصميم أولاً ، لا سيما من حيث هندسة النظم والبرامج. العمارة لا تتطلب عقلية معينة ليست واضحة دائما في تلك التي هي جيدة في التصميم. تعد القدرة على التجريد أو التقسيم وتقدير التصنيفات المختلفة أمرًا ضروريًا في بعض أشكال الهندسة المعمارية. أيضا ، فإن القدرة على تقدير استخدام النظام (حسب فهم رغبات المستخدم أو أهداف العمل) وترجمتها إلى تفاعل محسّن والوظائف المطلوبة هي أيضًا في احتياطي المهندس المعماري. أعتقد أحيانًا أن Business Analysts يعتقدون أن هذا هو دورهم ، وبالتالي يمكن أن يخلق بعض التوتر بين المتطلبات التي تلتقطها وتلك التي تقوم بما يشار إليه بالتصميم المفاهيمي - إنشاء مفاهيم نموذجية لما يريد المستخدم القيام به ، و كيف يحتاج النظام أو التطبيق إلى العمل؟

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

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

أنا شخصياً أفضل عدم خلق فجوة كبيرة بين الهندسة المعمارية والتصميم ، كما أراها متشابكة ، لكن هذا ربما لأنني أفضّل تعريفًا أكثر تحيزًا من الناحية الفنية للتصميم: من أجل مواجهة مشكلة ، وتصميم حل يحل مشكلة ولها فوائد أوسع إذا كان ذلك ممكنا (تسمى في بعض الأحيان غير وظائف أو صفات - أي مصطلح لا العدالة IMO). وبالتالي ، فإن التطبيق المصمم بشكل جيد لا يوفر وظائف المستخدم فحسب ، بل يجعله سهل الاستخدام ومريحًا ، ويجعله جميلًا ، مما يجعل التجربة الكلية ممتعة. إذا كان هذا يبدو مثل Apple (على الأقل كما كان) ، فعندئذ أعتذر لأولئك من معسكر Microsoft. ضع في اعتبارك أنك شاهدت Surface Studio للتو ، فقد تكون الجداول قيد التشغيل.

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


الاجابه 3:

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

القاعدة العامة للإبهام بالنسبة لي هي أنه على مستوى المكون ، يكون التصميم مطلوبًا ، وعند استخدام مكونات متعددة ، تكون البنية مطلوبة. ومع ذلك ، أعتقد أن القيام بالعمارة جيدًا ، يجب أن تكون قد قمت بالتصميم أولاً ، لا سيما من حيث هندسة النظم والبرامج. العمارة لا تتطلب عقلية معينة ليست واضحة دائما في تلك التي هي جيدة في التصميم. تعد القدرة على التجريد أو التقسيم وتقدير التصنيفات المختلفة أمرًا ضروريًا في بعض أشكال الهندسة المعمارية. أيضا ، فإن القدرة على تقدير استخدام النظام (حسب فهم رغبات المستخدم أو أهداف العمل) وترجمتها إلى تفاعل محسّن والوظائف المطلوبة هي أيضًا في احتياطي المهندس المعماري. أعتقد أحيانًا أن Business Analysts يعتقدون أن هذا هو دورهم ، وبالتالي يمكن أن يخلق بعض التوتر بين المتطلبات التي تلتقطها وتلك التي تقوم بما يشار إليه بالتصميم المفاهيمي - إنشاء مفاهيم نموذجية لما يريد المستخدم القيام به ، و كيف يحتاج النظام أو التطبيق إلى العمل؟

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

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

أنا شخصياً أفضل عدم خلق فجوة كبيرة بين الهندسة المعمارية والتصميم ، كما أراها متشابكة ، لكن هذا ربما لأنني أفضّل تعريفًا أكثر تحيزًا من الناحية الفنية للتصميم: من أجل مواجهة مشكلة ، وتصميم حل يحل مشكلة ولها فوائد أوسع إذا كان ذلك ممكنا (تسمى في بعض الأحيان غير وظائف أو صفات - أي مصطلح لا العدالة IMO). وبالتالي ، فإن التطبيق المصمم بشكل جيد لا يوفر وظائف المستخدم فحسب ، بل يجعله سهل الاستخدام ومريحًا ، ويجعله جميلًا ، مما يجعل التجربة الكلية ممتعة. إذا كان هذا يبدو مثل Apple (على الأقل كما كان) ، فعندئذ أعتذر لأولئك من معسكر Microsoft. ضع في اعتبارك أنك شاهدت Surface Studio للتو ، فقد تكون الجداول قيد التشغيل.

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