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

قياسي

ربَّما يكون السؤال الأكثر ” استفزازًا ” لطلاب هندسة البرمجيَّات هوَ : إيش تخصصك ؟! .

حيث ما إن يبادر أحدهم بالجواب ، حتَّى تبدأ موجةٌ أخرى من الأسئلة المكررة والصعبة من نوع : كيف يعني هندسة برمجيات ؟! .. قصدك هندسة كمبيوتر ؟ .. يعني إنت مبرمج ؟ .. وهي أسئلةٌ تصطدم بعقل المسؤول مثل موجةٍ تتركه مبللاً بالسكوتِ فاقدًا القدرة على التوازن في الحديث 😀 .

وقد يكون السبب في ذلكـ هو محدودية انتشار هندسة البرمجيات في العالم العربيّ ، وارتباط الهندسة بالعمل الميداني أو اليدوي أكثر من ارتباطها بمفهومها الحقيقي : ” إيجاد الحلول العلميَّة للمشاكل “ ، وقد يكون السبب أيضًا عدم وجود مؤسسات برمجيَّة جادَّة وقويَّة وداعمة للصناعة البرمجيَّة العربيَّة ممَّا أدَّى إلى الإستغناء نسبيًا عن مهندسي البرمجيات والإكتفاء بالمبرمجين التنفيذيين للأعمال الصغيرة والمتوسطة  .

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

بدايةً ، أحبُّ أن أوضِّح نقطة مهمَّة ، هي أنَّ علم هندسة البرمجيَّات لا يتطرق مطلقًا إلى العتاد hardware من جهة ، ولا إلى كتابة و توليد الكود البرمجي Code Generation من جهةٍ أخرى ، وربط هندسة البرمجيات بهما هو ما يؤدِّي إلى تعسر فهمها لدى الكثيرين .

لكنَّكـ حين تتناول مفهوم ” الهندسة ” لتفسير مصطلح ” هندسة البرمجيات ” تتكوَّن لديكـ صورة حقيقية وبسيطة عنها ، وهي : دراسة الطرق العلميَّة لتصميم وإنشاء وتطوير وإصلاح البرمجيَّات .

معنى هذا أنَّ كلَّ فروع هندسة البرمجيَّات وكتبها ومقالاتها لا تتناول البرمجة التنفيذيَّة ولا تهتمُّ للغات الَّتي تستخدمها لبناء أنظمتكـ ، بل تتناول الطرق الصحيحة لخلق مشاريع برمجيَّة تتميَّز بـ : المرونة – قابلية التوسع والتطوير – توفير الوقت والمال – الألفة مع المستخدم … إلخ .

.

.

دائمًا ما أشبِّه مهندس البرمجيَّات بـ المهندس المعماريّ !

فالثاني يرسم مخطط البنايات ويقابل العملاء ويدرس المشروع ويصمِّمه على الورق ، وهو يعرف زوايا الضوء المناسبة لهذا المبنى .. والشكل الهندسي الأفضل لذاكـ .. والمواد الخام الَّتي تتناسب أسعارها مع إمكانيات العميل الماديَّة … إلخ .

لكنَّه ليس منفِّذًا مباشرًا لعمليَّة البناء كما نعرف .

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

ولكن – لا يشترط – أن يكون مهندس البرمجيات منفِّذًا مباشرًا للبرمجة .

عادةً ، العملاء لا يلجؤون إلى مهندسي المعماريَّة عند بناء عمائر صغيرة أو بيوتًا شعبيَّة ، كما أنَّهم أيضًا لا يلجؤون إلى مهندسي البرمجيات عند الحاجة لإنشاء برامج صغيرة وسهلة لا تحتاج إلى دراسةٍ ماديَّة ولا تستلزم تطويرًا وإصلاحًا على المدى البعيد .

وربَّما لهذا ، لا يرى البعض لتخصص هندسة البرمجيَّات مطلبًا وظيفيًا في الفترة الراهنة ، مقابل مستقبلٍ عظيم بعد سنواتٍ عدَّة إذا أُقِيمت في المملكة صناعة جادَّة للبرمجيّات ( يااااا رب ) .

.

.

دورة حياة البرنامج :

يمكنني أن أقول بأنَّ اهتمام مهندس البرمجيات الرئيسي ينصبُّ على دورة حياة البرنامج ، وهذه الدورة لا تبدأ عند إنشاء البرنامج ولا تنتهي بعد العمل عليه !! .. بل تشمل 7 مراحل تقريبًا يمكن اعتبار كلٍّ منها تخصصًا تقنيًا ضمن هندسة البرمجيات :

1- planning | التخطيط :

دراسة الجدوى للمشروع ، المقابلة الأوَّليَّة مع العميل ، كتابة تقرير مبدئيّ عنه … إلخ .

2- requirements | جمع المتطلبات :

نجيب في جمع المتطلبات على سؤالين : ماذا نريد من البرامج ؟! .. وما هي الأدوات الَّتي نحتاجها لإنشاء البرنامج ؟! .

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

تكتب الإستبيانات وتوزِّعها على الفئات المستهدفة من النظام في حال كان البرنامج لا يستهدف مؤسسةً معيَّنة .

تدرس أنظمةً سابقة تشبه ما تودُّ إنشاءه ، تستفيد منه بتجنُّب مساوءه وتطوير مميزاته.

ماذا أحتاج لبناء البرنامج ؟! .. الأنظمة والأدوات ولغات البرمجة المناسبة وأنظمة إدارة قواعد البيانات و …….. إلخ .

من سأحتاج ؟! .. سأحتاج لمصمِّمٍ ومبرمج وخبير في الشبكات العصبيَّة مثلاً أو مطور ويب أو خبير في الذكاء الصناعي … وغيرها .

هذا قيضٌ من فيض الفيض في علم ( هندسة المتطلَّبات ) ، لا أتذكَّر جزئيةً أصعب وأطول و ” أغثَّ ” منها في الجامعة حتى الآن 🙂 ، لكنَّها تقودك نحو تصميم جيد وبرنامجٍ قوي ، كما أنَّها تساعد جدًا جدًا على تجنُّبِ الأخطاء المستقبليَّة .

3-  Analysis | التحليل :

هذه مرحلة تابعة للمرحلة السابقة ، وقد ترى من يجمعهما في مرحلةٍ واحدة  ، وهي تعني بأخذ ما تمَّ جمعه في المرحلة السابقة وتحليله والإستفادة منه ، وتحويل الكلماتِ إلى لغةٍ يفهمها المصمم في المرحلة التالية .

لذلك نجد المهندس في هذه المرحلة يقوم برسم المخططات من نوع :  DFD – CFD .. وغيرها .

4- Design | التصميم :

الكثير من الناس – وحتى مطوري البرامج – يعتقد بأنَّ التصميم لا يشمل إلاَّ إنشاء واجهة المستخدم  ، والحقيقة أنَّ التصميم أكبر من ذلكـ بكثير ، وهو يشمل التصميم المعماري وتصميم الواجهة وتصميم المكونات وتصميم النماذج وغيرها .

موضوع التصميم موضوع كبير جدًا وواسع ، وهو الفرع الوحيد لهندسة البرمجيات الَّذي ندرسه على فصلين  .

وهذا درس رائع جدًا قدمه المهندس أ.صالح الزيد عن هندسة البرمجيات – اضغط هنا – .

5- Code Generation | توليد الكود البرمجيّ :

لستُ بحاجة للحديث هنا .

6- Test | الاختبار :

توجد هناك أنواع من الإختبارات : الصندوق الأبيض و الصندوق الأسود مثلاً 🙂 .

7- Maintenance | الصيانة :

” البرمجيات لا تبلى ولكن تتطور ، بعكس العتاد ” .. هذا ما علمتناه هندسة البرمجيَّات .

.

.

مصادر دراسية لهندسة البرمجيات :

الكتاب الأهمّ والأفضل والمصدر الرئيسي  لدراسة هندسة البرمجيات هو ( هندسة البرمجيات ) لـ pressman .

توجد له ترجمة عربيَّة أو أكثر ، لم ترقني أبدًا .. مملَّة و ” غثيثة ” ، ربَّما كنتُ أكرهها لأنَّ اللغة العربية توصيفية ، بعكس الإنجليزية العملية ، وربَّما كان السبب هو الترجمة الحرفية السيئة الآتية بألفاظ ما أنزلت الهندسة بها من سلطان ! .

.

.

أخيرًا أحبُّ أن أقول بأنَّ هندسة البرمجيات أضافت لي الكثير في حياتي ، تفاصيل أعجز عن كتابتها ، الحياديَة وتجنُّب الخلط بين الأمور ومخاطبة النَّاس على قدر عقولهم والكثير الكثير .

وهو تخصص مناسبٌ جدًا للفتيات ، لأنَّ الفتاة بطبعها ” تفصيليَّة ” بعكس الرجال الَّذين يفضِّلون رؤية الأمور ” من فوق ” 🙂 .

ولا أنسى قول أحد الدكاترة : ( هندسة البرمجيات للفتيات ، وهندسة الشبكات للفتيان ) ، والحقيقة أنَّني أستغرب من قلَّة إقبال الفتيات عليه مقابل تخصصي CS أو IS ، حتَّى بالنسبة للواتي يذهبن للدارسة في الخارج .

تمنياتي للجميع بالتوفيق ..

ودعواتكم لي بالتخرج ” بسلام ” 🙂

Advertisements

18 responses »

  1. اقتباس :
    “والحقيقة أنَّني أستغرب من قلَّة إقبال الفتيات عليه مقابل تخصصي CS أو IS ”
    باختصار شديد ، هندسة البرمجيات تخصص غير موجود في جامعاتنا الحكومية ،،
    عند دخولي الجامعة كان تخصص الحاسب عبارة عن قسمين : علوم حاسب و إحصاء حاسب ،،
    في علوم حاسب يتم قبول أعلى 50 معدل متقدم ، و في إحصاء حاسب يقومون بقبول 30 طالبة من اللآتي تليهن ،،
    و منذ السمستر الماضي قامت الجامعة بافتتاح قسمين جديدن : IT , IS ،، و إلغاء إحصاء حاسب ،،
    أتحدث هنا عن جامعة الملك عبدالعزيز ،، =]
    ،
    الله يوفقك ، و تتخرجي بأعلى الدرجات يااااااااارب =]

  2. لدينا في جامعة البترول . . تخصصا هندسة البرمجيات و علوم الحاسب

    يخلط كثير من الطلاب بينهما . .

    أنا تخرجت من علوم الحاسب . . و كنت قبل تخرجي بشهر . .

    أرى هندسة البرمجيات . . عديمة النفع (تأمل . .!)

    عديمة النفع من دون خبرة . .
    كيف يدرس الطالب التصميم و التخطيط و لم ير مشروعا برمجيا كبيرا ؟
    لكن تبين لي بعد خطأ نظرتي . .

  3. والله هذا التخصص , غريب كثيير !

    وفي البلدان العربية (مثل ما قلتِ ) غير ناجح

    لأنه اساسا البرمجة في الوطن العربي صفر ! 😦

    حتى البرامج الاسلامية نجد ان مبرمجيها ليسوا عرب !

    اما عن معلوماتي حول هندسة البرمجيات , كنت اعتقد انه يبرمج او يتعلم البرمجة واساسياتها فقط !

    معلوماتك حول الموضوع افادتني كثيرا 🙂

    شكرا لك على الموضوع الجميل والحساس ..

    موفقة ان شاء الله

  4. مم

    عندي كم سؤال على الموضوع

    (( دائمًا ما أشبِّه مهندس البرمجيَّات بـ المهندس المعماريّ !))

    اتوقع اتشبيه فيه شوية خطأ فالمهندس المعماري مافي غنا عنو حتى لو كنت بتسوي بيت من دور واحد عكس مهندس البرمجيات
    اتوقع التشبيه الأفضل مهندس (هندسة مدنية ) هم الي تحتاجهم لمن تسوي مشروع ضخم مثل الجسور او الكباري او ناطحات السحاب ودي الأشياء

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

    (( تخصصات خاسب آلي)) خطأ املائي في الوسوم 😀

    والله يوفقكـ تتخرجي بأعلى الدرجات

  5. مرحبا مينو ..

    عزيزتي أنا أقصد الإتجاه العام ، وليس على نطاق دراسي محلِّي ، إذا تحدَّثنا على نطاق محلِّي فأحبُّ أن تعلمي أنَّ عدد المنتسبات إلى تخصص CS في كليتي = صفر ! .

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

    هذا بالإضافة إلى أنَّ 90 % من المنتسبات لتخصص هندسة البرمجيات لا يمكنهنَّ التعبير بـ3 أسطرٍ عنها !! .

    🙂
    كل الأمنيات

  6. الأخ أ.حمود .. مرحباً بك
    أعرف من تخرج من هندسة البرمجيات وهو موقنٌ حتَّى اللحظة الأخيرة من أنَّه لا جدوى من دراسة هذا التخصص ! .
    المشكلة يا أخي الكريم تكمن في انعدام قنوات الصناعة الجادَّة للبرمجيات هنا ، فنحن لا نتخيَّل أن يقضي مهندسٌ 3 أشهرٍ فقط في جمع المتطلبات وتحليلها ، والسبب أنَّنا لا نتخيل من الأساس وجود برمجيات كبيرة تحتاج لذلك .

    شكرًا لمرورك أستاذنا الكريم

  7. أخي إعصار ..

    بالنسبة للخلط بين المهندس المدني والمهندس المعماري فلا أعلم بما أجيبك !.

    لأنَّني أقرأ أنَّ الأول لا يمكن الإستغناء عنه بعكس الثاني ، وأقرأ أيضًا ما يخالف هذا الكلام .. حيروني !!

    لكنَّ الرأي الأكثر انتشاراً هو الرأي الثاني والله أعلم ، لأنَّ المهندس المدني لا يقتصر دوره على المشاريع المدنية فقط ، وهذه معلومة أنا متأكدة منها .

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

    .
    .

    وعن تحليل الأنظمة فهذا يقع ضمن هندسة البرمجيات ، فالثانية أعم وأشمل ، وطلاب هندسة البرمجيات في كليتي مثلاً يدرسون التحليل والبرمجة والتصميم ، لكنَّ طلاب نظم المعلومات البرمجية يدرسون التحليل ” بشكلٍ أكثر توسعًا ” ويدرسون البرمجة ولا يدرسون التصميم .

    أتمنى لك التوفيق في الجامعة أخي الكريم ..
    دعواتي

  8. هع!

    شكلك يا إحسان بتخرجيني من تدوينتك محبة لتخصصي،،

    اممم مبرمجه لكن مش مهندسة برمجيات

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

    عندنا مادة هندسة برمجيات كمقرر ولها معمل،

    بصراحه وايد حلوة وتعتمد على متطلب قواعد البيانات،،

    الحقيقة انها حلوة لمن يحبها وكنت احبها

    بس تبين الصج ماعدت اعرف ليهـ هالتفرعات في علم الحاسب

    انا لما كنت ادرس طلعت وانا ماعرف شو ابي او احتاج من دراستي

    ولاافهم شيء فيها ، احس عندي معلومات
    ولااعرف استخدمها او اوظفها صح..

    بس بالاخير اكتشفت شيء:)

    المبرمج يحتاج يكون مصمم والمصمم يحتاج يكون مبرمج
    وبنحتاج لمعرفة في علم الهارد وير واننا نكون وعا ما هندسة
    في الشغل ومواجهة الواقع نحتاج نكون all in 1

    واسئل مجرب:)

    حقيقة كوني دارسة برمجهـ نفعني اني اتحول للتصميم

    لانه المبرمج ممكن يكون مصمم لكن المصمم
    صعب يكون مبرمج..

    احسان العلم تطور والاشغال تطورت
    ثقي انك بتلاقين من يتمنى ان تكوني موظفة لديهـ

    الله يوفقك ويسر لك امورك ..

  9. مقاله رآئعه جدآ ..
    كآنت أسوأ مآده درستهآ .. تقريبا قراءه فقط 😦 دون شئ آخر ..
    ولكن بدأت استرجاع المتطلبات الاستبيان المقابله الشخصيه وغيرهم
    الآن صآر عندي حب وشغف لهذه المآده ان شاء الله القى لها مصادر ..
    جزاك الله كل خير ../

  10. ترقبوا اعلانى ثورة التحرير على الاوضاع التى نحياها فى مصر ان شاء الله بعد 6 سنين

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

    وشكرا لأختي الغاليه على الموضوع المتميز ..

  12. شكرآ على الموضوع … استفدت منه كثير وفهمت تخصصي اكثر
    نفس ماقلتي اذا احد سألني وش معنى تخصصك اقول برمجه كمبيوتر وبس
    مااقدر اعبر عنه اكثر من كذا …
    واتمنى واتمنى اني استفيد من شهادتي اذا تخرجت ان شاء الله لان ديرتي مايوجد به مؤاهلات
    لتخصصي

  13. انا طالب ادر س هندسة البرمجيات بصراحة هو تخصص صعب شوي عمل مهندس البرمجيات هو التخطيط ومتابعة البرامج وفحص البرامج ومعرفة متطلباتها وتحديد الكلفةوتطويرها والمشروح البرمجي الكبير مثل منظومات البنوك وغيرها تكلف مئات الألف وتذهب نسبة60% من الكلفة الى مطوري النظام ونسبة اربعين بالمئه الى فحص النظام ونحن مهندسين البرمجيات نقوم بعملية التطوير…….

اترك رد

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s