إذا كنت في السنة الثانية من هندسة البرمجيات فأنت غالباً سمعت هذا السؤال من صديقك في علوم الحاسب: «ما الفرق بيننا؟ أنا وأنت نكتب نفس الكود». ثم تفتح خطتك فتجد مواد لا يدرسها صديقك: هندسة المتطلبات، وضمان الجودة، وصيانة البرمجيات وتطورها، وإدارة مشاريع البرمجيات، ومادة كاملة عن ميثاق أخلاقيات هندسة البرمجيات، وتجد معها التفاضل والتكامل والفيزياء التي لا تعرف ما علاقتها بكتابة تطبيق. ثم تقرأ إعلان وظيفة فيه CI/CD وDocker وKubernetes والمراقبة Monitoring، فلا تجد أياً منها في عناوين موادك. فهل الخطة قديمة؟ أم أن هذه المواد لها سبب لا يشرحه أحد؟
الإجابة موجودة في وثيقتين: منهج هندسة البرمجيات SE2014 الذي تبني عليه الأقسام خططها، ودليل المعرفة المهني SWEBOK الذي يصف ما يعرفه المهندس الممارس. وقد قارنا في مقال أي تخصص تقني تختار؟ بين التخصصات التقنية كلها لمن لم يختر بعد، أما هذا المقال فهو لمن اختار هندسة البرمجيات أو يدرسها أو تخرج منها، ولمن يتعلم المجال بنفسه ويريد أن يعرف ما الذي يجعل المبرمج مهندساً. وسوف نقرأ الوثيقتين من مصدرهما، ونضع خطط هندسة البرمجيات في ثلاث جامعات سعودية بجانبهما ببرنامج صغير، ثم نرسم خريطة تكمل بها ما لا تعطيه الخطة من مقالات عرب رووت. وهذا المقال من مرحلة معمارية البرمجيات وتصميمها في مسار هندسة البرمجيات وتصميم الأنظمة.
وسوف نناقش في هذا المقال ما يلي:
- من كتب منهج هندسة البرمجيات، وما الذي تغير بين SE2004 وSE2014.
- ما الفرق بين هندسة البرمجيات وعلوم الحاسب كما يشرحه التقرير نفسه.
- جسم المعرفة SEEK: عشرة مجالات و467 ساعة، ومستويات المعرفة، وما الإلزامي وما المرغوب.
- الرياضيات في هندسة البرمجيات، ولماذا لا يضع المنهج التفاضل في جسم المعرفة.
- الممارسة المهنية والتوجيهات العشرون ومشروع التخرج، وما الذي لا يغطيه المنهج.
- معايير ABET لبرامج هندسة البرمجيات، ولقب مهندس.
- تجربة عملية Lab: برنامج Python يضع خطط KFUPM وKSU وPSU بجانب SEEK وSWEBOK، ومشكلات ظهرت في التصنيف.
- ما يطلبه العمل مما لا تعطيه الخطة، وخريطة التعلم الذاتي، وخطة قراءة فصلاً بفصل، وأخطاء شائعة.
من كتب منهج هندسة البرمجيات؟
القصة تبدأ من فرقة عمل Computing Curricula 2001 التي شكلتها ACM وجمعية الحاسب في IEEE عام 1998، فقد اكتشف أعضاؤها، وأغلبهم من علوم الحاسب، أنهم لا يستطيعون كتابة منهج يغطي الحوسبة كلها، فاكتفوا بمنهج علوم الحاسب، وأوصوا بأن يكون لكل تخصص مجاور منهجه الخاص. ومن هذه التوصية خرج أول منهج لهندسة البرمجيات عام 2004 باسم SE2004، وكان مكتوباً في وقت لم يكن فيه إلا قليل من برامج البكالوريوس في هندسة البرمجيات، لذلك كانت أمثلة المواد فيه أقرب إلى التوقع منها إلى التجربة.
ثم في 2010 كلفت ACM وIEEE-CS فريقاً بتقدير ما يحتاج إلى تحديث، فأجرى الفريق استبياناً على الإنترنت جاءه 477 رداً من أساتذة وممارسين في 42 دولة، وعرض مسودته في ورش عمل منها مؤتمر تعليم هندسة البرمجيات CSEE&T عام 2013، ثم طرحها للمراجعة العامة في خريف 2013. والنتيجة هي Software Engineering 2014، واختصاراً SE2014، المؤرخ في 23 فبراير 2015، وكتبه فريق صغير من ستة أعضاء من وفدي IEEE-CS وACM برئاسة Mark Ardis. ويقول التقرير إن التحديث أبقى البنية الأساسية لـ SE2004، وأعاد كتابة فصل تعريف التخصص، واعترف بظهور نماذج دورة الحياة البديلة ومنها الطرق الرشيقة Agile، ورفع مكانة المتطلبات والأمن لأنهما أصبحا من أكبر الاهتمامات، وأضاف أمثلة مواد وخطط حقيقية في الملاحق بعد أن أصبح لدى الجامعات برامج فعلية. ولم نجد حتى أكتوبر 2026 نسخة أحدث من هذا المنهج من ACM وIEEE-CS، لذلك هو المرجع الحالي، وسوف نكمله في جانب العمل بدليل SWEBOK الذي صدرت نسخته الرابعة في 2024.
ما الفرق بين هندسة البرمجيات وعلوم الحاسب؟
يبدأ التقرير من مشكلة واضحة: البرمجيات من أعقد ما صنعه الإنسان، والطرق التي تنجح مع فرد أو فريق صغير يكتب برنامجاً متوسطاً لا تنجح عندما يكبر النظام إلى ملايين الأسطر ومئات المطورين لسنوات. ثم يعدد خصائص تجعل «الهندسة» في البرمجيات مختلفة: البرمجيات مجردة وغير مرئية، فيصعب قياسها، ولها خصائص ثابتة وأخرى أثناء التشغيل، فيصعب توقع أثر أي تعديل، ولا يوجد مقياس عام لجودتها، ولا توجد فيها مرحلة تصنيع حقيقية، وهي لا تبلى، فالصيانة فيها هي في الحقيقة استمرار للتصميم. ويأخذ التقرير تعريف IEEE لهندسة البرمجيات بأنها تطبيق منهج منظم ومنضبط وقابل للقياس على تطوير البرمجيات وتشغيلها وصيانتها، أي تطبيق الهندسة على البرمجيات.
ثم يذكر ثماني صفات مشتركة بين المهندسين في كل التخصصات، وهي في رأيي أوضح إجابة لسؤال صديقك: المهندس يبدأ من النماذج التي يكتشفها العلماء ويبني بها شيئاً جديداً، ويتخذ سلسلة قرارات ويقارن الخيارات بتحليل المقايضة Trade-off بين التكلفة والفائدة، ويقيس ويعمل بالأرقام، ويتبع عملية منضبطة ويعمل ضمن فريق، ويستخدم الأدوات بشكل منهجي، ويعيد استخدام التصاميم، ويتقدم من خلال الجمعيات المهنية بالمعايير وأفضل الممارسات. وفي المقابل يقول التقرير إن هندسة البرمجيات تختلف عن الهندسة التقليدية في أن أساسها علوم الحاسب وليس العلوم الطبيعية، وأنها تستخدم الرياضيات المتقطعة أكثر من المتصلة، وأنها لا تعتبر دائماً نشاطاً «مهنياً»، وأن من أهداف المنهج نفسه أن يساعد على تحويلها إلى مهنة.
ويقول دليل SWEBOK في نسخته الرابعة الشيء نفسه بمثال أوضح: العلاقة بين هندسة البرمجيات وعلوم الحاسب مثل العلاقة بين الهندسة الكيميائية والكيمياء، فالعلم يهدف إلى توسيع المعرفة، والهندسة تطبقها لحل مشكلة حقيقية بموارد محدودة، ويضرب أمثلة على ممارسات هندسية لا تهم علوم الحاسب كثيراً: أساليب استخراج المتطلبات، ومبادئ مثل التماسك Cohesion والاقتران Coupling، واستراتيجيات الفروع والدمج Branch and Merge، والمراجعة بين الزملاء Peer Review، وحساب تكلفة الجودة. لذلك فإجابة سؤال صديقك ليست «أنا أبرمج أفضل منك»، وإنما «أنا تعلمت كيف يبني فريق نظاماً كبيراً ويحافظ عليه سنوات». وإذا أردت أن ترى الصورة من جانب علوم الحاسب فاقرأ دليل علوم الحاسب من هذه السلسلة.
جسم المعرفة SEEK: عشرة مجالات و467 ساعة
يسمي التقرير محتواه جسم معرفة تعليم هندسة البرمجيات Software Engineering Education Knowledge، واختصاراً SEEK، ويرتبه في ثلاثة مستويات: مجال المعرفة Knowledge Area، مثل الممارسة المهنية واختصاره PRF، ثم وحدات Units داخل المجال، مثل PRF.com لمهارات التواصل، ثم مواضيع Topics داخل كل وحدة. ولكل موضوع مستوى معرفي من ثلاثة مأخوذة من تصنيف بلوم: المعرفة Knowledge واختصاراً k وهي التذكر، والفهم Comprehension واختصاراً c، والتطبيق Application واختصاراً a. ولكل موضوع أيضاً درجة أهمية: أساسي Essential وهو جزء من الجوهر، أو مرغوب Desirable يضيفه البرنامج إن استطاع.
ويقيس التقرير الوقت بساعات المحاضرة، ويقول إن مادة من 15 أسبوعاً بثلاث محاضرات أسبوعياً تعادل نحو 45 ساعة، وإن مجموع SEEK وهو 467 ساعة يعادل نحو عشر مواد، أي نحو ربع محتوى برنامج من أربع سنوات، ويتوقع من الطالب أن يقضي خارج القاعة ضعفي هذا الوقت أو ثلاثة أضعافه. والجدول التالي يعرض المجالات العشرة ووحداتها بساعاتها الدنيا كما في الجدول الأول من التقرير:
| المجال | الساعات | الوحدات وساعاتها |
|---|---|---|
| أساسيات الحوسبة Computing Essentials (CMP) | 152 | أسس علوم الحاسب 120، تقنيات البناء Construction Technologies 20، أدوات البناء 12 |
| الأسس الرياضية والهندسية Mathematical and Engineering Fundamentals (FND) | 80 | الأسس الرياضية 50، الأسس الهندسية للبرمجيات 22، اقتصاديات هندسة البرمجيات 8 |
| تصميم البرمجيات Software Design (DES) | 48 | مفاهيم 3، استراتيجيات 6، التصميم المعماري 12، تصميم التفاعل HCI 10، التصميم التفصيلي 14، تقييم التصميم 3 |
| التحقق والمصادقة Verification and Validation (VAV) | 37 | المصطلحات والأسس 5، المراجعات والتحليل الثابت 9، الاختبار 18، تحليل المشكلات والإبلاغ عنها 5 |
| عملية البرمجيات Software Process (PRO) | 33 | مفاهيم 3، تطبيق العملية 8، تخطيط المشروع ومتابعته 8، إدارة الإعدادات Configuration Management 6، التطور 8 |
| تحليل المتطلبات وتوصيفها Requirements Analysis and Specification (REQ) | 30 | الأسس 6، استخراج المتطلبات 10، التوصيف والتوثيق 10، التحقق من المتطلبات 4 |
| الممارسة المهنية Professional Practice (PRF) | 29 | ديناميكيات الفريق وعلم النفس 8، مهارات التواصل 15، المهنية 6 |
| النمذجة والتحليل Software Modeling and Analysis (MAA) | 28 | أسس النمذجة 8، أنواع النماذج 12، أساسيات التحليل 8 |
| الأمن Security (SEC) | 20 | أساسيات الأمن 4، أمن الحاسب والشبكات 8، تطوير البرمجيات الآمنة 8 |
| الجودة Software Quality (QUA) | 10 | مفاهيم الجودة وثقافتها 2، ضمان العملية 4، ضمان المنتج 4 |
في الجدول أعلاه لاحظ التالي:
- أكبر مجال هو أساسيات الحوسبة، وفيه 120 ساعة من أسس علوم الحاسب نفسها: البرمجة والخوارزميات وهياكل البيانات وتنظيم الحاسب وأنظمة التشغيل وقواعد البيانات وبروتوكولات الشبكات، ويقول التقرير صراحة إن هذا يعكس اعتماد هندسة البرمجيات على علوم الحاسب. لذلك طالب هندسة البرمجيات يدرس أساس علوم الحاسب، ثم يضيف فوقه.
- الجودة 10 ساعات والأمن 20 فقط، ويشرح التقرير أن السبب ليس قلة أهميتهما، وإنما أنهما موضوعان يمران على كل المجالات الأخرى، وقد فصلهما ليرفع ظهورهما.
- مهارات التواصل وحدها 15 ساعة، وأول موضوع فيها «قراءة الكود والتوثيق وفهمه وتلخيصه» بمستوى التطبيق، أي أن قراءة كود غيرك مهارة يدرسها المنهج وليست شيئاً تتعلمه بالصدفة.
- داخل أساسيات الحوسبة وحدة اسمها أدوات البناء بـ 12 ساعة، فيها بيئات التطوير وأدوات اختبار الوحدة Unit Testing، ووحدة تقنيات البناء فيها تصميم API واستخدامه والتعامل مع الأخطاء والتزامن والبناء للحوسبة السحابية والجوال.
ويحذر التقرير من قراءة SEEK كخطة دراسية، فالجوهر بحسب نصه ليس منهجاً كاملاً لأنه حد أدنى، وكلمة «أساسي» تعني إلزامي ولا تعني أنه يدرس في السنة الأولى، وترتيب المجالات والوحدات عشوائي في أغلبه ولا يحدد ترتيب التدريس، وممارسات مثل المتطلبات والتصميم والاختبار يمكن أن توضع في أي نموذج عملية: موجه بالخطة Plan-driven أو تكراري Iterative أو رشيق Agile.

الرياضيات: لماذا لا يضع المنهج التفاضل في جسم المعرفة؟
هنا مفاجأة لكثير من طلاب هندسة البرمجيات. يقول SE2014 إن هندسة البرمجيات تستخدم قليلاً من الرياضيات المتصلة التقليدية مباشرة، وإن هذه المعرفة قد تحتاجها في بعض مجالات التطبيق أو عندما تتعلم الإحصاء، أما ما تستخدمه فعلاً فهو الرياضيات المتقطعة: لنمذجة التعارض بين المتطلبات، ولتصميم الاختبارات، ولنمذجة السلوك في تحليل الأمن. ويضيف أن الإحصاء له دور، فتقدير التكلفة والتخطيط يحتاجان الاحتمالات، وقراءة الدراسات التجريبية تحتاج فهم الدلالة الإحصائية، وأن هذه كلها تطبيقات لا تحتاج بالضرورة إلى إحصاء مبني على التفاضل.
لذلك تجد في وحدة الأسس الرياضية 50 ساعة: الدوال والعلاقات والمجموعات، والمنطق، وطرق البرهان، والعد، والرسوم البيانية والأشجار، والاحتمالات المتقطعة، وآلات الحالة المحدودة Finite State Machines والتعبيرات النمطية، والقواعد الشكلية Grammars، ودقة الأرقام وأخطاؤها. وفي وحدة الأسس الهندسية 22 ساعة: الطرق التجريبية وقياس استهلاك المعالج والذاكرة، والتحليل الإحصائي مثل اختبار الفرضيات والانحدار والارتباط، والقياس والمقاييس Metrics، والتصميم الهندسي. ثم 8 ساعات لاقتصاديات البرمجيات: القيمة عبر دورة الحياة، وتحليل المقايضة والتكلفة والعائد على الاستثمار. ويقول التقرير في فصل تصميم البرنامج إن SEEK لا يتضمن التفاضل لأنه نادراً ما يستخدم في هندسة البرمجيات، وإن البرنامج إذا أراد أن يضعه لسبب وجيه، مثل أن يسمح للطالب بتغيير تخصصه بعد السنة الأولى، فيجب أن يعامله كمتطلب عام وليس كجزء من برنامج هندسة البرمجيات.
وقد يتساءل البعض: إذا كان المنهج لا يطلب التفاضل، فلماذا في خطتي ثلاث مواد منه؟ والإجابة في الاعتماد الهندسي كما سنرى بعد قليل، فمعايير ABET العامة لبرامج الهندسة تطلب 30 ساعة من الرياضيات والعلوم الأساسية، والهيئة السعودية للمهندسين تطلب 32، وهذه الساعات تملؤها الجامعات عادة بالتفاضل والفيزياء. ولكن انتبه إلى نقطة يذكرها التوجيه الثالث في التقرير: يمكن أن تخفف بعض مواضيع العملية المتقدمة من مستوى التطبيق إلى مستوى المعرفة إذا ضاق الوقت، أما المادة ذات المحتوى التقني أو الرياضي العميق فلا يجوز تخفيفها، لأن تعلمها أثناء العمل أصعب بكثير. أي أن الرياضيات المتقطعة والإحصاء هما ما لا تستطيع أن تؤجله.
الممارسة المهنية Professional Practice ونواتج التعلم السبعة
يقول التقرير إن من أهم أهداف أي برنامج هندسي أن يعطي الخريج أدوات البدء في الممارسة المهنية، ويستشهد باستبيان الرابطة الوطنية للكليات وأصحاب العمل الأمريكية NACE لعام 2013، الذي قيم فيه أصحاب العمل أهمية صفات المتقدمين من 1 إلى 5، فكانت مهارات التواصل في المقدمة بمتوسط 4.63، ثم العمل في فريق 4.6، ثم حل المشكلات 4.51، ثم التخطيط والتنظيم 4.46، ثم الحصول على المعلومات ومعالجتها 4.43، ثم تحليل البيانات الكمية 4.3. ويطلب من الأقسام ألا تكتفي بتعريف الطلاب بميثاق أخلاقيات هندسة البرمجيات والممارسة المهنية المشترك بين ACM وIEEE، وإنما أن تناقش مبادئه الثمانية ومعضلاته الحقيقية في بيئة العمل، وهذا سبب وجود مادة كاملة لهذا الميثاق في خطة جامعة الملك سعود.
ويحدد التقرير سبعة نواتج تعلم Expected Student Outcomes للخريج، بأسماء مختصرة تستطيع أن تقيس نفسك عليها: المعرفة المهنية Professional Knowledge، والمعرفة التقنية Technical Knowledge، والعمل في فريق Teamwork، والوعي بالمستخدم النهائي End-User Awareness، وتصميم الحلول في سياقها Design Solutions in Context، والموازنة بين الأهداف المتعارضة Perform Trade-Offs، والتطوير المهني المستمر Continuing Professional Development. ويطلب في ناتج الوعي بالمستخدم أن يتضمن البرنامج نشاطاً كبيراً واحداً على الأقل يبني فيه الطالب حلاً لعميل حقيقي، وأن يتضمن فترة خبرة في الصناعة إن أمكن.
التوجيهات العشرون Curriculum Guidelines ومشروع التخرج Capstone
بعد جسم المعرفة يقدم التقرير عشرين توجيهاً Curriculum Guidelines لمن يصمم الخطة ويدرسها، وبعضها يفسر لك شكل خطتك مباشرة:
- التوجيه الخامس: بعض المواضيع تحتاج نضجاً، فمواضيع العملية والجودة إذا درست مبكراً لا تفهم ولا تقدر، لذلك تأتي في آخر الخطة، بينما يجب أن تأتي البرمجة والعوامل البشرية وجوانب من المتطلبات والتصميم والتحقق مبكراً، ويجب أن يواجه الطالب مبكراً مواقف «صعبة» مثل متطلبات تتغير بسرعة أو نظام كبير قائم يجب أن يفهمه ويعدله. وهذا سبب أن مادة إدارة المشاريع وضمان الجودة في السنة الرابعة غالباً.
- التوجيه السادس: يجب أن يفهم الطالب مجال تطبيق Application Domain واحداً على الأقل بعمق، لأن أغلب عمل المهندس حل مشكلات لعملاء في مجالات أخرى.
- التوجيهان الحادي عشر والثاني عشر معاً: ركز على المبادئ الثابتة لا على تفاصيل أحدث أداة، ولكن يجب أن يكتسب الطالب خبرة في استخدام أدوات مناسبة وحديثة حتى يدخل سوق العمل وهو معتاد على العمل بالأدوات.
- التوجيه السادس عشر: عملية البرمجيات يجب أن تكون مركز تنظيم المنهج وفهم الطالب لممارسة المهنة.
أما مشروع التخرج Capstone فيعتبره التقرير عنصراً أساسياً، ويصفه بأنه يمتد سنة دراسية كاملة، ويفضل أن يكون جماعياً، وينتهي بتنفيذ فعلي، فالمشاريع النظرية مثل كتابة توصيف شكلي فقط لا تصلح، ويقيم بأكثر من «بنيناه واشتغل» عبر المراجعات والمقابلات والتجارب البسيطة، ويفضل أن يكون له «عميل» غير المشرف. ولاحظ أن خطط KFUPM وKSU تقسمه على مادتين متتاليتين بالفعل. ويناقش التقرير نمطين لتنظيم البرنامج: البدء بهندسة البرمجيات SE-first أو البدء بعلوم الحاسب CS-first، ويقول إنه لا يوجد دليل واضح على أن أحدهما أفضل، وإن الثاني أكثر انتشاراً لأسباب عملية مثل مشاركة المواد مع قسم علوم الحاسب، وهذا ما تجده في الجامعات السعودية التي رأيناها، حيث تبدأ السنتان الأوليان بمواد البرمجة وهياكل البيانات المشتركة.
ما الذي لا يغطيه SE2014؟
- جسم المعرفة لا يحتوي الرياضيات المتصلة ولا العلوم الطبيعية، ويحيل الحديث عنها إلى أجزاء أخرى من التقرير، كما رأينا في التفاضل.
- الجوهر ليس منهجاً كاملاً، ولا يحاول التقرير أن يصف ما يضيفه كل برنامج داخل هندسة البرمجيات وخارجها.
- لا يتبنى نموذج عملية واحداً، ويقول إن معرفة العمليات المختلفة جزء من تعليم المهندس نفسه.
- لا يصف المعرفة التي يكتسبها المهندس بعد سنوات من العمل، فهذا دور دليل SWEBOK، ويذكر التقرير أن SWEBOK يغطي مستوى المعرفة بعد أربع سنوات من الممارسة، ويتعمد ألا يغطي المعرفة غير الخاصة بهندسة البرمجيات التي يحتاجها المهندس.
- كتب التقرير في 2013 و2014، لذلك لا تجد فيه DevOps باسمه، ولا الحاويات Containers، ولا الذكاء الاصطناعي التوليدي، وأقرب ما فيه وحدة البناء للحوسبة السحابية والجوال، وإدارة الإعدادات في عملية البرمجيات.
ABET ولقب مهندس
شرحنا في مقال أي تخصص تقني تختار؟ أن هندسة البرمجيات برنامج هندسي تعتمده لجنة الهندسة EAC في ABET، وأن عشرة برامج سعودية لهندسة البرمجيات كانت معتمدة منها عندما قرأنا قاعدة ABET، منها برنامج KFUPM منذ 2008 وKSU منذ 2010 وPSU منذ 2021، وشرحنا أن الهيئة السعودية للمهندسين تسجل في فئة «مهندس» خريج البرنامج الهندسي المعتمد، وتطلب حداً أدنى للتعليم الهندسي فيه 32 ساعة من الرياضيات والعلوم الأساسية و48 ساعة من العلوم الهندسية والتصميم. وهذه هي البوابة الواضحة التي يعطيك فيها اسم التخصص شيئاً لا يعطيه علوم الحاسب. أما هنا فنقرأ ما تطلبه معايير اعتماد برامج الهندسة لدورة 2026-2027 من برنامج هندسة البرمجيات:
- المعايير العامة لكل البرامج الهندسية: 30 ساعة معتمدة على الأقل من الرياضيات والعلوم الأساسية مع خبرة تجريبية، و45 ساعة على الأقل من مواضيع الهندسة، وهي العلوم الهندسية وعلوم الحاسب والتصميم الهندسي باستخدام أدوات حديثة، ومكون تعليمي واسع، وتجربة تصميم هندسي كبرى في النهاية تتضمن معايير هندسية وقيوداً متعددة.
- نواتج التعلم السبعة لكل البرامج الهندسية، ومنها القدرة على إجراء التجارب وتحليل البيانات، والقدرة على اكتساب معرفة جديدة وتطبيقها.
- معايير برامج البرمجيات Software and Similarly Named Engineering Programs، والجمعية المسؤولة عنها CSAB مع IEEE: يجب أن تتضمن الخطة أساسيات الحوسبة، وتصميم البرمجيات وبناءها، وتحليل المتطلبات، والأمن، والتحقق والمصادقة، وعمليات هندسة البرمجيات وأدواتها المناسبة لتطوير الأنظمة المعقدة، والرياضيات المتقطعة والاحتمالات والإحصاء بتطبيقات مناسبة لهندسة البرمجيات.
- والأساتذة الذين يدرسون مواد هندسة البرمجيات الأساسية يجب أن يفهموا الممارسة المهنية فيها، وأن يبقوا على اطلاع في تخصصهم المهني أو البحثي.
لاحظ أن معايير البرنامج نفسها لا تذكر التفاضل، وتذكر الرياضيات المتقطعة والاحتمالات والإحصاء فقط، تماماً مثل SE2014، أما التفاضل والفيزياء فتأتي من المعيار العام للرياضيات والعلوم الأساسية في كل البرامج الهندسية. وهذا يفسر لك لماذا تدرسها، ويفسر أيضاً لماذا لا تجدها في كتب هندسة البرمجيات.
تجربة عملية Lab: خطط ثلاث جامعات بجانب SEEK وSWEBOK
الآن نضع ما قرأناه بجانب الخطط الفعلية. كتبنا برنامجاً بلغة Python يقرأ ملف الخطط الذي جمعناه في مقال المقارنة من المصادر الرسمية، ويأخذ منه خطط هندسة البرمجيات الثلاث: جامعة الملك فهد للبترول والمعادن KFUPM من دليل الطالب في أغسطس 2025، وجامعة الملك سعود KSU من خطة 2023، وجامعة الأمير سلطان PSU من نشرة البكالوريوس 2025-2026. ثم يضع كل مادة إجبارية في أحد مجالات SEEK العشرة، ويقارن الساعات بالحد الأدنى في التقرير، ويفحص معايير الاعتماد بالعناوين، ويختبر أي مجالات SWEBOK تجد لها مادة إجبارية، ثم يقرأ مسارات عرب رووت. والبرنامج يستخدم مكتبة Python الأساسية فقط.
البرنامج se2014_plans.py
# Saudi software engineering study plans against SE2014 (SEEK) and SWEBOK V4, and what ArabRoot covers of each area.
# Standard library only (Python 3.13). Usage, from this folder:
# python se2014_plans.py ../../tech-majors/lab/plans.json ../../../roadmap.json ../../schedule.json
import collections, json, re, sys
plans_file, roadmap_file, schedule_file = sys.argv[1:4]
FAMILY = "SE"
# ---------------------------------------------------------------- SE2014 numbers (Table 1 of the SEEK, minimum lecture hours)
SEEK = {"CMP": 152, "FND": 80, "PRF": 29, "MAA": 28, "REQ": 30, "DES": 48, "VAV": 37, "PRO": 33, "QUA": 10, "SEC": 20}
KAS = list(SEEK)
HOURS_PER_CREDIT = 15 # SE2014 4.4: a 15-week course with three lecture hours a week is about 45 hours
# ---------------------------------------------------------------- keyword map: course title -> SEEK area. FIRST match wins.
# CALC = calculus, differential equations and linear algebra: SE2014 says the SEEK has no continuous mathematics (4.7, 6.1).
RULES = [
("PROJECT", r"graduation|senior (design )?project|capstone|co-?op|cooperative|internship|practical training|summer training"),
("PRF", r"ethic|professional practice"),
("SEC", r"secur|cyber|privacy|cryptograph"),
("QUA", r"quality"),
("VAV", r"test|verification|validation"),
("REQ", r"requirement"),
("DES", r"design and (architecture|construction)|software architecture|software design|design pattern|human.{0,3}computer|user interface|usability"),
("MAA", r"model|formal method|systems? analysis"),
("PRO", r"project management|process|maintenance|evolution|configuration|introduction to software engineering"),
("CALC", r"calculus|diff\. eq|differential|linear algebra"),
("FND", r"discrete|probability|statistic|prob\. and stat|numerical|mathematics for computing"),
("CMP", r"programming|data structure|algorithm|computer organi[sz]ation|digital logic|operating system|database|network|communications|construction|web|data science|artificial intelligence"),
("SCIENCE", r"physics|chemi|biology"),
("BUSINESS", r"business|entrepreneur"),
]
GENERAL = (r"islam|quran|arabic|english|writing|communication skills|academic|university skills|contemporary issues|current issues|"
r"culture|fitness|health|physical education|psychology|belief|discourse|language|career|general education|financial transactions|global & social|it skills")
def title(c): return c.get("title_en") or c.get("title_ar") or ""
def area(c):
t = title(c).lower()
if re.search(GENERAL, t) and not re.search(r"programm|software|network|data|secur", t):
return "GENERAL"
for name, rx in RULES:
if re.search(rx, t):
return name
return "OTHER"
def all_areas(c): # every SEEK area whose pattern matches, for the "what if" split
t = title(c).lower()
return [n for n, rx in RULES if n in SEEK and re.search(rx, t)]
def is_slot(c): return bool(re.search(r"elective|slot", title(c), re.I))
UNI = {"King Fahd": "KFUPM", "King Saud": "KSU", "Prince Sultan": "PSU"}
uni = lambda p: next(v for k, v in UNI.items() if p["university"].startswith(k))
plans = sorted([p for p in json.load(open(plans_file, encoding="utf-8")) if p["major_family"] == FAMILY], key=uni)
plans_by = {uni(p): p for p in plans}
req = {uni(p): [c for c in p["courses"] if c["required"] and not is_slot(c)] for p in plans}
print(f"== 1) required credit hours per SEEK knowledge area, {len(plans)} {FAMILY} plans ==")
print(" (required = not an elective option or empty slot; GENERAL = university requirements, left out)")
cols = KAS + ["CALC", "SCIENCE", "BUSINESS", "PROJECT", "OTHER"]
print(f"{'area':<9}" + "".join(f"{u:>7}" for u in req))
table, other = {}, []
for u, cs in req.items():
h = collections.Counter()
for c in cs:
a = area(c)
if a == "GENERAL": continue
h[a] += float(c["credits"] or 0)
if a == "OTHER": other.append(f"{u}: {title(c)}")
table[u] = h
for a in cols:
print(f"{a:<9}" + "".join(f"{table[u][a]:>7.0f}" for u in req))
print(f"{'total':<9}" + "".join(f"{sum(table[u].values()):>7.0f}" for u in req))
print("left as OTHER:", "; ".join(other) or "none")
print(f"\n== 2) approximate lecture hours (credits x {HOURS_PER_CREDIT}) against the SEEK minimum hours ==")
print(f"{'area':<6}{'SEEK':>6}" + "".join(f"{u:>8}" for u in req))
for a in KAS:
print(f"{a:<6}{SEEK[a]:>6}" + "".join(f"{table[u][a] * HOURS_PER_CREDIT:>8.0f}" for u in req))
print(f"{'all':<6}{sum(SEEK.values()):>6}" + "".join(f"{sum(table[u][a] for a in KAS) * HOURS_PER_CREDIT:>8.0f}" for u in req))
for u in req:
print(f"{u:<6} continuous maths outside the SEEK (calculus, differential equations, linear algebra): {table[u]['CALC']:.0f} credits")
# ---------------------------------------------------------------- 3) accreditation by title: ABET SE program criteria, EAC and SCE minimums
print("\n== 3) ABET software engineering program criteria (2026-2027) and engineering minimums, checked on course titles ==")
TOPICS = [("requirements", r"requirement"), ("design+construction", r"design|construction"), ("security", r"secur|cyber"),
("V&V/testing", r"test|verification|validation"), ("process", r"process|project management"),
("discrete", r"discrete"), ("probability", r"probab|prob\."), ("statistics", r"statist|stat\.")]
for u, cs in req.items():
t = " ".join(title(c).lower() for c in cs)
miss = [k for k, rx in TOPICS if not re.search(rx, t)]
h = table[u]
ms = h["FND"] + h["CALC"] + h["SCIENCE"]
eng = sum(h[a] for a in KAS if a != "FND") + h["PROJECT"]
slots = sum(float(c["credits"] or 0) for c in plans_by[u]["courses"] if c["required"] and is_slot(c) and re.search(r"math|science|statist", title(c), re.I))
print(f"{u:<6} topics missing: {', '.join(miss) or 'none':<5} maths+science {ms:>3.0f} +{slots:.0f} in elective slots = {ms + slots:>3.0f} (ABET >=30, SCE >=32) computing+SE {eng:>3.0f} (ABET >=45, SCE >=48)")
# ---------------------------------------------------------------- 4) what if a course that fits several areas is split between them?
print("\n== 4) what if: split a course equally between every SEEK area its title matches (first match was used above) ==")
for u, cs in req.items():
split = collections.Counter()
multi = []
for c in cs:
aa = all_areas(c)
if area(c) not in SEEK or not aa: continue
for a in aa: split[a] += float(c["credits"] or 0) / len(aa)
if len(aa) > 1: multi.append(f"{title(c)} -> {'+'.join(aa)}")
print(f"{u:<6} " + (" ".join(f"{a}:{table[u][a]:.0f}->{split[a]:.1f}" for a in KAS if abs(table[u][a] - split[a]) > 0.01) or "no required course matches two areas"))
for m in multi: print(f" {m}")
# ---------------------------------------------------------------- 5) SWEBOK V4 knowledge areas: is there a required course with a matching title?
print("\n== 5) SWEBOK Guide V4 knowledge areas (the practice side): a required course whose title matches? ==")
SWEBOK = [("Requirements", r"requirement"), ("Architecture", r"architecture(?! &)(?!.*organi)|design and architecture"), ("Design", r"design"),
("Construction", r"construction|programming"), ("Testing", r"test"), ("Operations", r"operations|devops|deployment|cloud"),
("Maintenance", r"maintenance|evolution"), ("Configuration Mgmt", r"configuration|version control"),
("SE Management", r"project management"), ("SE Process", r"process"), ("Models and Methods", r"model|formal"),
("Quality", r"quality"), ("Security", r"secur|cyber"), ("Professional Practice", r"ethic|professional"),
("SE Economics", r"econom|cost")]
print(f"{'SWEBOK KA':<24}" + "".join(f"{u:>7}" for u in req))
for k, rx in SWEBOK:
print(f"{k:<24}" + "".join(f"{'yes' if any(re.search(rx, title(c).lower()) for c in cs if area(c) != 'GENERAL' or k == 'Professional Practice') else '-':>7}" for u, cs in req.items()))
# ---------------------------------------------------------------- 6) ArabRoot coverage per SEEK area
COVER = {
"CMP": ["stage:programming-basics", "stage:dsa", "stage:programming", "stage:build-deps"],
"FND": ["number-systems", "floating-point", "regex", "stats-tools", "math-for-ml"],
"PRF": ["stage:team-org", "breadth-hacker", "pdpl-hosting"],
"MAA": ["ddd-basics", "architecture-docs", "db-design", "threat-modeling"],
"REQ": ["requirements-engineering", "requirements-practice", "product-discovery", "estimation"],
"DES": ["stage:architecture"],
"VAV": ["stage:qa"],
"PRO": ["agile-scrum", "agile-ai", "estimation", "team-terms", "team-roles", "writing-culture"],
"QUA": ["qa-intro", "code-quality", "code-quality-tools", "sonarqube", "mutation-testing"],
"SEC": ["stage:appsec", "secure-sdlc", "threat-modeling"],
# two SWEBOK V4 areas with no required course in any of the three plans (section 5)
"OPS*": ["stage:devops", "stage:sre", "stage:observability"],
"CM*": ["stage:git"],
}
rm = json.load(open(roadmap_file, encoding="utf-8"))
published = {i["id"] for i in json.load(open(schedule_file, encoding="utf-8"))["items"] if i.get("published_at")}
stages = {s["id"]: s["items"] for s in rm["stages"]}
known = {it["id"] for s in rm["stages"] for it in s["items"] if it.get("id")}
print("\n== 6) ArabRoot posts per SEEK area, plus two SWEBOK areas marked * (published / not yet), from roadmap.json and schedule.json ==")
print(f"{'area':<6}{'pub':>5}{'later':>7} published ids (first 6)")
for a in COVER:
pub, later = set(), set()
for ref in COVER[a]:
items = stages[ref[6:]] if ref.startswith("stage:") else [{"id": ref}]
for it in items:
i = it.get("id")
if i is None: later.add(it.get("title")); continue
if i not in known: raise SystemExit(f"unknown roadmap id {i}")
if i in published: pub.add(i)
elif not i.startswith("major-"): later.add(i)
print(f"{a:<6}{len(pub):>5}{len(later):>7} {', '.join(sorted(pub)[:6])}")في البرنامج أعلاه لاحظ التالي:
- القاموس SEEK ينقل الجدول الأول من التقرير كما هو، والثابت HOURS_PER_CREDIT قيمته 15 لأن التقرير نفسه يعتبر مادة الفصل بثلاث ساعات أسبوعياً نحو 45 ساعة محاضرة.
- في القائمة RULES فئة اسمها CALC للتفاضل والمعادلات التفاضلية والجبر الخطي، لأن SE2014 يقول إن SEEK لا يحتوي الرياضيات المتصلة، فلا نحسبها ضمن الأسس الرياضية FND، ونعرضها منفصلة.
- الترتيب في القائمة مقصود: الأمن قبل غيره، والجودة قبل الاختبار، والاختبار قبل المتطلبات، لأن عنواناً مثل «Software Security Engineering» أو «Software Quality Assurance and Testing» يطابق أكثر من نمط، والمادة تأخذ أول تطابق.
- الدالة all_areas تعيد كل المجالات التي يطابقها العنوان، ونستخدمها في تجربة «ماذا لو» في الجزء الرابع.
- الجزء الخامس يحمل قائمة مجالات SWEBOK الرابعة مع كلمات تبحث عنها في عناوين المواد الإجبارية، وهذا فحص للعناوين فقط، فمادة اسمها «هندسة البرمجيات 1» قد تغطي إدارة الإعدادات دون أن يظهر ذلك في اسمها.
وللتشغيل من مجلد lab:
python se2014_plans.py ../../tech-majors/lab/plans.json ../../../roadmap.json ../../schedule.json > se2014_plans.outالمخرج الأول: الساعات الإجبارية في كل مجال
== 1) required credit hours per SEEK knowledge area, 3 SE plans ==
(required = not an elective option or empty slot; GENERAL = university requirements, left out)
area KFUPM KSU PSU
CMP 36 28 28
FND 6 6 9
PRF 2 4 3
MAA 0 0 0
REQ 3 3 3
DES 3 6 6
VAV 3 3 0
PRO 6 8 6
QUA 3 2 3
SEC 3 3 3
CALC 14 9 9
SCIENCE 8 12 12
BUSINESS 3 1 0
PROJECT 4 7 13
OTHER 0 0 0
total 94 92 95
left as OTHER: noneفي المخرج أعلاه لاحظ التالي:
- أساسيات الحوسبة CMP هي الأكبر في الجامعات الثلاث، بين 28 و36 ساعة، أي أن نحو ثلث الساعات التقنية الإجبارية هو أساس علوم الحاسب نفسه، وهذا قريب مما يقوله التقرير عن أكبر مجال فيه.
- كل الخطط فيها مادة للمتطلبات REQ ومادة للأمن SEC بثلاث ساعات بالضبط، وفيها بين 6 و8 ساعات لعملية البرمجيات PRO، وهذه المواد هي ما يميز هندسة البرمجيات عن علوم الحاسب في الخطة.
- النمذجة والتحليل MAA صفر في الخطط الثلاث، والتحقق والمصادقة VAV صفر في PSU، وسنرى سبب كل منهما في الفقرة التالية.
- صف CALC بين 9 و14 ساعة، وهي الرياضيات المتصلة التي لا يضعها SE2014 في جسم المعرفة، وKFUPM أعلاها لأن خطتها فيها التفاضل 1 و2 و3 ومادة المعادلات التفاضلية والجبر الخطي.
- صف PROJECT في PSU 13 ساعة لأن خطتها فيها تدريب تعاوني بعشر ساعات، بينما التدريب في KFUPM وKSU صيفي بساعة واحدة.

مشكلات حقيقية ظهرت في التصنيف
- مادة في مجالين: «Software Quality Assurance and Testing» في PSU تطابق الجودة والاختبار معاً، وأخذت الجودة لأنها قبل الاختبار في القائمة، فظهر VAV صفراً في PSU. وهذا ليس غياباً للاختبار، فالمادة تحمله في اسمها. وكذلك «Software Design and Construction» في KFUPM تطابق التصميم وأساسيات البناء. وقررنا ألا نصحح الترتيب لكل حالة بيدنا، وإنما نضيف تجربة تقسم الساعات، وسوف تراها في الجزء الرابع.
- الصفر في النمذجة: لا توجد مادة إجبارية بكلمة «model» أو «formal» أو «systems analysis» في عناوين الخطط الثلاث، والمواد الموجودة اختيارية، مثل «Formal Methods and Models in Software Engineering» في KFUPM و«Software System Modelling» في PSU. ومواضيع النمذجة مثل UML ونماذج الحالة تدرس عادة داخل مواد المتطلبات والتصميم، لذلك اقرأ الصفر هنا كما قرأته في دليل علوم الحاسب: لا توجد مادة بهذا الاسم، فارجع إلى توصيف المواد.
- مادة جامعية باسم تقني: في التشغيل الأول دخلت مادة «IT Skills» في السنة الأولى المشتركة بجامعة الملك سعود إلى أساسيات الحوسبة، وهي مادة مهارات حاسب عامة لكل طلاب الجامعة، فنقلناها إلى المتطلبات العامة، فانخفض CMP في KSU من 31 إلى 28.
- الخانات الفارغة تغير الحكم: في الجزء الثالث سوف ترى أن مجموع الرياضيات والعلوم في KFUPM وKSU أقل من 30 إذا عددنا المواد المسماة فقط، والسبب أن الخطتين تتركان جزءاً منها خانات اختيارية مثل «Science Elective» و«Mathematics and Statistics Elective»، والبرنامج يستبعد الخانات من الجدول. لذلك أضفنا عموداً يجمع هذه الخانات حتى لا نحكم على الخطة بنصف الصورة.
المخرج الثاني: الخطط مقابل الحد الأدنى في SEEK
== 2) approximate lecture hours (credits x 15) against the SEEK minimum hours ==
area SEEK KFUPM KSU PSU
CMP 152 540 420 420
FND 80 90 90 135
PRF 29 30 60 45
MAA 28 0 0 0
REQ 30 45 45 45
DES 48 45 90 90
VAV 37 45 45 0
PRO 33 90 120 90
QUA 10 45 30 45
SEC 20 45 45 45
all 467 975 945 915
KFUPM continuous maths outside the SEEK (calculus, differential equations, linear algebra): 14 credits
KSU continuous maths outside the SEEK (calculus, differential equations, linear algebra): 9 credits
PSU continuous maths outside the SEEK (calculus, differential equations, linear algebra): 9 creditsالخطط الثلاث تعطي مجالات SEEK بين 915 و975 ساعة تقريباً، أي نحو ضعف الحد الأدنى البالغ 467، وهذا يتفق مع قول التقرير إن الجوهر ربع البرنامج تقريباً وإن البرامج تضيف فوقه. والزيادة الأكبر في أساسيات الحوسبة، فهي بين 420 و540 ساعة مقابل 152، أي أن الجامعات السعودية تأخذ نمط CS-first الذي وصفه التقرير بوضوح. أما ما يقل عن الحد الأدنى فهو النمذجة في الثلاث، والتصميم في KFUPM (45 مقابل 48، أي مادة واحدة)، والتحقق في PSU بسبب التصنيف الذي شرحناه. ولاحظ أن الجودة في كل الخطط بين 30 و45 ساعة مقابل 10 في SEEK، لأن الجامعات وضعت لها مادة كاملة، بينما يعتبرها التقرير موضوعاً يمر على كل المواد.

المخرج الثالث: معايير الاعتماد بالعناوين
== 3) ABET software engineering program criteria (2026-2027) and engineering minimums, checked on course titles ==
KFUPM topics missing: none maths+science 28 +3 in elective slots = 31 (ABET >=30, SCE >=32) computing+SE 63 (ABET >=45, SCE >=48)
KSU topics missing: none maths+science 27 +9 in elective slots = 36 (ABET >=30, SCE >=32) computing+SE 64 (ABET >=45, SCE >=48)
PSU topics missing: none maths+science 30 +0 in elective slots = 30 (ABET >=30, SCE >=32) computing+SE 65 (ABET >=45, SCE >=48)كل المواضيع التي تذكرها معايير ABET لبرامج البرمجيات موجودة بالاسم في الخطط الثلاث، من المتطلبات إلى الاحتمالات والإحصاء. وفي الرياضيات والعلوم ترتفع KFUPM إلى 31 وKSU إلى 36 بعد احتساب الخانات الاختيارية، وPSU عند 30 تماماً بحسب تصنيفنا. ولاحظ أن رقم 32 للهيئة السعودية للمهندسين لا يعني أن خطة PSU لا تحققه، فتصنيف الهيئة للمواد قد يختلف عن تصنيف عنوان في برنامجنا، وإنما يعني أن هذا سؤال تسأله لقسمك إذا كان التسجيل في الهيئة مهماً لك. أما مواضيع الحوسبة وهندسة البرمجيات فبين 63 و65 ساعة، أي فوق الحدين.
ماذا يحدث إذا قسمنا المادة على مجالاتها؟
الجزء الرابع يعيد الحساب بطريقة ثانية: بدلاً من أن تأخذ المادة أول مجال يطابق عنوانها، تقسم ساعاتها بالتساوي على كل المجالات التي يطابقها العنوان:
== 4) what if: split a course equally between every SEEK area its title matches (first match was used above) ==
KFUPM CMP:36->37.5 DES:3->1.5
Software Design and Construction -> DES+CMP
KSU no required course matches two areas
PSU VAV:0->1.5 QUA:3->1.5
Software Quality Assurance and Testing -> QUA+VAVمع التقسيم يظهر التحقق في PSU بساعة ونصف بدلاً من الصفر، وتنخفض الجودة إلى ساعة ونصف، ويتوزع «Software Design and Construction» في KFUPM بين التصميم والبناء. والدرس هنا أن أي رقم في الجدول الأول يحمل قراراً منا، فالجامعة لم تحذف الاختبار، وإنما دمجته مع الجودة في مادة واحدة، وهذا اختيار يجعل الاختبار يأخذ نصف مادة بدلاً من مادة كاملة كما في KFUPM وKSU. وإذا كنت طالباً في خطة كهذه فهذا مكان واضح للتعلم الذاتي.
ما الذي يطلبه العمل ولا تعطيه الخطة؟
دليل SWEBOK الرابع: ما يعرفه المهندس الممارس
دليل جسم معرفة هندسة البرمجيات Guide to the Software Engineering Body of Knowledge، واختصاراً SWEBOK، مشروع من جمعية الحاسب في IEEE، اعتمد مجلسها المهني النسخة الرابعة منه في سبتمبر 2024 ومجلس إدارتها في أكتوبر 2024، وقرأنا هنا النسخة V4.0a الصادرة في أغسطس 2026. ويقول الدليل إن أحد أهدافه أن يكون أساساً لتطوير المناهج وللشهادات المهنية والترخيص، وإن المعرفة «المقبولة عموماً» فيه يمكن أن تفهم كمادة اختبار ترخيص يأخذه الخريج في الولايات المتحدة بعد أربع سنوات من الخبرة، أي أنه يصف المهندس بعد التخرج بسنوات، وليس الطالب.
وفي النسخة الرابعة ثمانية عشر مجالاً، وأهم ما تغير فيها منذ النسخة الثالثة في 2014 أنها أضافت ثلاثة مجالات جديدة هي معمارية البرمجيات Software Architecture، وأمن البرمجيات Software Security، وتشغيل هندسة البرمجيات Software Engineering Operations، وأدخلت Agile وDevOps في أغلب المجالات لأنهما أصبحا مقبولين على نطاق واسع، وأضافت الذكاء الاصطناعي وتعلم الآلة وإنترنت الأشياء إلى مجالات الأسس. ومجال التشغيل الجديد هو تحديداً ما تراه في إعلانات الوظائف: النشر والتشغيل والمراقبة وأتمتة البنية. والجزء الخامس من البرنامج يبحث لكل مجال من مجالات SWEBOK عن مادة إجبارية يطابق عنوانها:
== 5) SWEBOK Guide V4 knowledge areas (the practice side): a required course whose title matches? ==
SWEBOK KA KFUPM KSU PSU
Requirements yes yes yes
Architecture - yes yes
Design yes yes yes
Construction yes yes yes
Testing yes yes yes
Operations - - -
Maintenance - yes -
Configuration Mgmt - - -
SE Management yes yes yes
SE Process - - -
Models and Methods - - -
Quality yes yes yes
Security yes yes yes
Professional Practice yes yes yes
SE Economics - - -في المخرج أعلاه لاحظ التالي:
- المجالات التي يشترك فيها SWEBOK مع SE2014 موجودة كلها تقريباً: المتطلبات والتصميم والبناء والاختبار والإدارة والجودة والأمن والممارسة المهنية.
- التشغيل Operations وإدارة الإعدادات Configuration Management وعملية هندسة البرمجيات Process والنماذج والطرق Models and Methods والاقتصاديات Economics لا تجد لها مادة إجبارية باسمها في أي من الخطط الثلاث.
- المعمارية مادة إجبارية في KSU وPSU، أما في KFUPM فهي اختيارية باسم «Software Architecture».
- الصيانة والتطور لها مادة إجبارية في KSU وحدها، وهي اختيارية في PSU.
والتشغيل وإدارة الإعدادات تحديداً هما ما يسأل عنه إعلان الوظيفة الذي فتحته في البداية: Git والفروع والدمج، وCI/CD، والنشر والمراقبة. وكلاهما في SE2014 أيضاً، فوحدة إدارة الإعدادات فيها 6 ساعات، والتوجيه الثاني عشر يطلب خبرة بالأدوات الحديثة، ولكنهما لا يظهران في عناوين المواد، وقد يكونان داخل مادة «مقدمة هندسة البرمجيات» أو مشروع التخرج، وقد لا يكونان. لذلك اسأل أستاذك، ولا تنتظر.

ماذا تقول البيانات الأخرى؟
في استبيان Stack Overflow 2020 الذي قرأناه في مقال المقارنة، كان علوم الحاسب وهندسة الحاسب وهندسة البرمجيات خياراً واحداً في سؤال التخصص، أي أن استبياناً شارك فيه أكثر من أربعين ألف مطور محترف لم ير فرقاً يستحق السؤال بين هذه التخصصات في وظائف التطوير، وكانت هذه العائلة بين 64% و71% من مطوري Backend وFrontend والجوال وDevOps. وفي استبيان 2026 كان مطور Full-stack أكبر دور بـ 6,932 مشاركاً، 24% منهم بلا بكالوريوس. ومعنى ذلك لك أن صاحب العمل في أغلب وظائف التطوير لن يسألك عن الفرق بين تخصصك وتخصص صديقك، وإنما سيسأل ماذا بنيت وكيف عملت مع فريق، وهنا تتفوق إذا استثمرت ما تعلمته في المتطلبات والاختبار والعملية في مشاريع حقيقية. أما البوابة التي يتفوق فيها اسم تخصصك فهي لقب مهندس والوظائف التي تشترط التسجيل في الهيئة السعودية للمهندسين.
وفي نفس الاتجاه يطلب SE2014 في ناتج الوعي بالمستخدم مشروعاً لعميل حقيقي وفترة خبرة في الصناعة، والخطط الثلاث فيها تدريب، ولكنه صيفي بساعة واحدة في KFUPM وKSU مقابل تدريب تعاوني بعشر ساعات في PSU، وهذا فرق كبير في الخبرة التي تخرج بها. لذلك إذا كانت خطتك فيها تدريب صيفي قصير، فابحث عن تدريب إضافي بنفسك، واقرأ تخطيط برنامج التدريب Internship في 12 أسبوعاً لتعرف ما الذي يجب أن تتعلمه في التدريب الجيد.
خريطة التعلم الذاتي: كل مجال ومقالاته في عرب رووت
الجزء السادس من المخرج يعد مقالات عرب رووت المنشورة والمخططة لكل مجال من مجالات SEEK، ومعها مجالا SWEBOK اللذان لم نجد لهما مادة إجبارية، وعلامتهما النجمة:
== 6) ArabRoot posts per SEEK area, plus two SWEBOK areas marked * (published / not yet), from roadmap.json and schedule.json ==
area pub later published ids (first 6)
CMP 14 11 algorithms-bigo, build-tools, cpu-concurrency, data-structures, error-handling, git-basics
FND 4 1 floating-point, number-systems, regex, stats-tools
PRF 5 3 breadth-hacker, pdpl-hosting, production-accountability, stakeholders, team-size
MAA 4 0 architecture-docs, db-design, ddd-basics, threat-modeling
REQ 3 1 product-discovery, requirements-engineering, requirements-practice
DES 8 3 arch-intro, architecture-docs, architecture-styles, clean-architecture, code-quality, ddd-basics
VAV 18 2 accessibility-basics, accessibility-testing, ai-code-review, ai-confidently-wrong, ai-testing, api-testing
PRO 2 4 agile-ai, agile-scrum
QUA 5 0 code-quality, code-quality-tools, mutation-testing, qa-intro, sonarqube
SEC 19 1 api-security, appsec-controls, asvs-review, crypto-for-devs, dast, gpg-basics
OPS* 17 22 behind-proxy, cors, deployment-history, dev-checklist, docker, environments-gitops
CM* 6 6 git-basics, git-workflows, gitea, gitea-authentik, linux-cli, trunk-basedمسار هندسة البرمجيات في عرب رووت قوي في الاختبار والأمن والتشغيل، لأن المقالات بدأت من عمل الفريق الحقيقي، وفيه 17 مقالاً منشوراً في التشغيل وحده، وهو أكبر فراغ في الخطط. أما الضعف فهو في عملية البرمجيات (مقالان منشوران وأربعة مخططة منها التقدير Estimation وأدوار الفريق)، وفي الأسس الرياضية، والمتطلبات بثلاثة مقالات. والجدول التالي يحول ذلك إلى خريطة، بروابط المقالات المنشورة فقط:
| المجال | ابدأ من | ما زال ناقصاً في عرب رووت |
|---|---|---|
| CMP أساسيات الحوسبة | هياكل البيانات، Big-O، كيف تتعامل اللغات مع الأخطاء، أدوات البناء | البرمجة الكائنية OOP، وأساسيات البرمجة للمبتدئ (مخططة) |
| FND الأسس الرياضية والهندسية | التعبيرات النمطية Regex، Floating Point من الداخل، التحليل الإحصائي دون SPSS | الرياضيات المتقطعة والاحتمالات للمبرمج، واقتصاديات البرمجيات (لا يوجد بعد) |
| PRF الممارسة المهنية | قانون Brooks، مواءمة أصحاب المصلحة، من يتحمل المسؤولية عندما يتعطل الإنتاج | العمل عن بعد، والدين التقني، واجتماع ما بعد الحادثة (مخططة)، وميثاق الأخلاقيات (لا يوجد بعد) |
| MAA النمذجة والتحليل | التصميم الموجه بالمجال DDD، مخططات C4 وADR، تصميم قواعد البيانات، نمذجة التهديدات | UML ونماذج الحالة والأساليب الشكلية (لا يوجد بعد) |
| REQ المتطلبات | هندسة المتطلبات، من فكرة غامضة إلى متطلبات واضحة، اكتشاف المنتج | التقدير Estimation (مخطط) |
| DES التصميم | التصميم والمعمارية، مبادئ التصميم، أنماط التصميم، Clean Architecture، أنماط المعمارية | OOP، والاقتران والتماسك (مخططة) |
| VAV التحقق والمصادقة | أنواع الاختبارات، E2E مع Playwright، اختبار API، اختبار العقود، اختبار الضغط | اختبارات الوحدة عملياً، والاختبارات في خط CI (مخططة) |
| PRO العملية | Agile بلا شعارات، Agile في عصر الذكاء الاصطناعي | مصطلحات الفرق، وأدوار الفريق، والتقدير، وثقافة الكتابة RFC وADR (مخططة) |
| QUA الجودة | ما هو ضمان الجودة QA، جودة الكود، SonarQube عملياً، اختبار الطفرات | |
| SEC الأمن | Secure SDLC، OWASP Top 10، البرمجة الآمنة، أمن سلسلة التوريد | أمن تطبيقات الجوال (مخطط) |
| التشغيل (SWEBOK) | طرق نشر التطبيقات من FTP إلى GitOps، من الفرع إلى الإنتاج، Gitea Actions، قائمة تحقق قبل النشر | مفهوم CI/CD للمبتدئين، ومفاهيم SRE، وإدارة الحوادث (مخططة) |
| إدارة الإعدادات (SWEBOK) | Git للمبتدئين، Git في العمل اليومي، Trunk-Based Development | أول مستودع، ومراجعة الكود Code Review (مخططة) |

خطة قراءة فصلاً بفصل
الخطط الثلاث تبدأ بنمط CS-first: برمجة وهياكل بيانات ورياضيات في السنتين الأوليين، ثم المتطلبات والتصميم والاختبار، ثم العملية والجودة والإدارة والمشروع في الأخيرتين، كما يوصي التوجيه الخامس. والجدول التالي يضع بجانب كل مرحلة ما تقرؤه وما تبنيه بيدك:
| الفصل | مواد الخطة غالباً | اقرأ معها | أضف بيدك |
|---|---|---|---|
| 1 و2 | البرمجة 1 و2، التفاضل، الفيزياء، الرياضيات المتقطعة | Git للمبتدئين، Hello World من الداخل | كل واجب في مستودع Git، بفروع ورسائل Commit واضحة |
| 3 | هياكل البيانات، مقدمة هندسة البرمجيات، الإحصاء | هياكل البيانات، Agile بلا شعارات | مشروع صغير مع زميلين بلوحة مهام وطلبات دمج Pull Requests |
| 4 | قواعد البيانات، تنظيم الحاسب، المتطلبات | SQL، هندسة المتطلبات، من فكرة غامضة إلى متطلبات | اكتب متطلبات مشروعك قبل الكود، وراجعها مع زميل |
| 5 | التصميم والمعمارية، أنظمة التشغيل، الشبكات | مبادئ التصميم، أنماط التصميم، مخططات C4 | وثق تصميم مشروعك بمخطط C4 وسجل قرار ADR |
| 6 | الاختبار، تطوير الويب، الأمن، HCI | أنواع الاختبارات، Playwright، OWASP Top 10، سهولة الوصول | اختبارات آلية تعمل في خط CI مع كل Pull Request |
| 7 | الجودة، الصيانة، مشروع التخرج 1 | جودة الكود، SonarQube، Secure SDLC | بوابة جودة وتحليل ثابت في مشروع التخرج |
| 8 | إدارة المشاريع، أخلاقيات المهنة، مشروع التخرج 2، التدريب | طرق النشر، البيئات وGitOps، الاستعداد لمقابلة مطور | نشر مشروع التخرج على سيرفر حقيقي بمراقبة بسيطة |

أخطاء شائعة عند طلاب هندسة البرمجيات
- اعتبار مواد المتطلبات والعملية والجودة «كلاماً»: التقرير يضعها في آخر الخطة لأنها تحتاج نضجاً، ومن لم يفهمها في الجامعة يتعلمها لاحقاً بثمن أعلى في مشروع فشل.
- كتابة الكود قبل المتطلبات في كل مشروع: هذا بالضبط عقلية «اكتب ثم أصلح» Code-and-fix التي يحذر منها التقرير.
- تأجيل Git وCI والنشر إلى العمل: SWEBOK يجعل التشغيل مجالاً مستقلاً، ولا تجد له مادة في الخطة، فابدأ به بنفسك من السنة الأولى.
- تجاهل الرياضيات المتقطعة والإحصاء لأنك «مهندس برمجيات وليس عالماً»: التقرير يقول إن هذه المادة بالذات لا يجوز تخفيفها لأن تعلمها في العمل أصعب.
- مشروع تخرج بلا عميل وبلا اختبارات: التقرير يطلب تنفيذاً فعلياً وتقييماً أبعد من «بنيناه واشتغل»، فاختر مشكلة لجهة حقيقية.
- الظن أن لقب «مهندس» يكفي للتوظيف: هو بوابة للوظائف التي تشترطه، أما في أغلب وظائف التطوير فالمهارة والمشاريع والخبرة هي ما يحسم.
- التدريب الصيفي القصير كأنه كل الخبرة: ساعة معتمدة واحدة لا تعادل التدريب التعاوني، فاستكمل الخبرة بمشاريع مفتوحة المصدر أو تدريب إضافي.
قائمة تحقق Checklist لطالب هندسة البرمجيات
- اقرأ نواتج التعلم السبعة في SE2014 وقيم نفسك عليها في نهاية كل سنة.
- صنف موادك الإجبارية على مجالات SEEK العشرة، واعرف أين النمذجة والتحقق في خطتك.
- اسأل القسم: هل البرنامج معتمد من ABET EAC؟ وهل يحقق متطلبات الهيئة السعودية للمهندسين؟
- استخدم Git في كل واجب، وطلبات الدمج والمراجعة في كل مشروع جماعي.
- اكتب اختبارات آلية لمشاريعك من السنة الثالثة، وشغلها في خط CI.
- اختر مجال تطبيق واحداً تفهمه بعمق، كما يطلب التوجيه السادس.
- اجعل مشروع التخرج لعميل حقيقي، وانشره على سيرفر بمراقبة بسيطة.
- احصل على خبرة عمل حقيقية قبل التخرج، تعاونية أو تدريب إضافي.
الخلاصة
وصلنا لنهاية الموضوع، وأهم ما فيه:
- SE2014 من ACM وIEEE-CS بتاريخ 23 فبراير 2015، وهو تحديث SE2004، ولم نجد نسخة أحدث حتى أكتوبر 2026.
- جسم المعرفة SEEK عشرة مجالات و467 ساعة، أي نحو عشر مواد وربع البرنامج، وأكبر مجال فيه أسس الحوسبة بـ 152 ساعة.
- الرياضيات في SEEK متقطعة وإحصائية، ولا يتضمن التفاضل، أما التفاضل والفيزياء في خطتك فمصدرهما المعايير العامة للبرامج الهندسية.
- ABET تطلب لبرامج البرمجيات المتطلبات والتصميم والبناء والأمن والتحقق والعملية والأدوات والرياضيات المتقطعة والاحتمالات والإحصاء، والهيئة السعودية للمهندسين تسجل خريج البرنامج الهندسي المعتمد في فئة مهندس.
- في خطط KFUPM وKSU وPSU: أساس علوم الحاسب نحو الثلث، والمتطلبات والأمن مادة لكل منهما، والنمذجة بلا مادة باسمها، والخطط نحو ضعف الحد الأدنى في SEEK.
- SWEBOK الرابع أضاف المعمارية والأمن والتشغيل، والتشغيل وإدارة الإعدادات هما أوضح ما يطلبه العمل ولا تجده باسمه في الخطط، وعرب رووت فيه أكثر من عشرين مقالاً منشوراً فيهما.
وإذا وجدت أن ما يشدك هو النظرية والخوارزميات والذكاء الاصطناعي العميق أكثر من بناء الأنظمة في فريق، فاقرأ دليل علوم الحاسب من هذه السلسلة. وأقرب المقالات إلى هذا الموضوع على الموقع:
دليلأي تخصص تقني تختار؟ ما تدرسه فعلاً وأين تعمل بعدهماذا تدرس فعلاً في كل تخصص تقني بحسب الخطط الدراسية السعودية، وأين يعمل خريجوه، ومتى يهم اسم التخصص ومتى تهم المهارة.
دليلهندسة المتطلبات Requirements Engineering من الطلب إلى ما يبنىما هو المتطلب Requirement، وكيف تجمعه وتكتبه وتراجعه وتدير تغييره، ولماذا تفشل مشاريع كبيرة عندما تهمل هذه الخطوة.
دليلالتصميم والمعمارية: أربعة مستويات لنشاط واحدما الفرق بين تصميم البرمجيات ومعماريتها وتصميم الأنظمة ومعمارية المؤسسة، ومن يقرر في كل مستوى وكم يعيش قراره.
دليلأنواع الاختبارات للمبتدئين: من Unit إلى E2E مع Playwrightما الذي يكشفه كل نوع من الاختبارات وما الذي يفوته، وكم اختباراً تكتب من كل نوع، وأين يعمل كل منها في خط CI.
دليلAgile بلا شعارات: Scrum وKanban كما يطبقان فعلاًمن أين جاءت Agile، وكيف تعمل Scrum وKanban كما تصفها أدلتها الرسمية، وما الأخطاء التي تحولها إلى اجتماعات بلا فائدة.
دليلما هي جودة الكود Code Quality وكيف تقيسها؟ما الذي يجعل الكود سهل التغيير، وماذا تقيس أدوات الفحص فعلاً، ولماذا يحتاج كود الوكلاء الأذكياء إلى بوابة جودة.
دليلطرق نشر التطبيقات من FTP إلى GitOps، وأين تقف أنتكيف تطور نشر التطبيقات عبر السنين، وما الذي يتعطل في كل طريقة، وكيف تعرف أين تقف وما خطوتك التالية.
دليلمدخل إلى تصميم الأنظمة: من سيرفر واحد إلى ملايين المستخدمينكيف يكبر متجر إلكتروني من سيرفر واحد إلى نظام يخدم ملايين المستخدمين، وما الثمن الذي تدفعه في كل خطوة.سجل التحديثات
- أكتوبر 2026: كتابة المقال، وقراءة SE2014 (23 فبراير 2015) ودليل SWEBOK V4.0a (أغسطس 2026) ومعايير ABET لبرامج الهندسة 2026-2027، وتشغيل البرنامج se2014_plans.py على Python 3.13 على ثلاث خطط هندسة برمجيات سعودية من ملف خطط مقال المقارنة.