عن المبرمج نتحدث

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

من هنا تأتي الأهمية الكبيرة للمبرمج في صناعة البرمجيات، و هي أهمية بالطبع تفوق أهمية العاملين في أي صناعة أخري.

علي الرغم من أهمية المبرمج بالنسبة لصناعة البرمجيات إلا أن هناك عجز في عدد المبرمجين علي مستوي العالم، و هو ما يعني أن عدد المبرمجين المتاحين أقل من فرص العمل المفتوحة المطلوب لها مبرمجين. للأسف هذا العجز يزيد كل عام بنسبة 12,5 % عن العام السابق.

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

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

بل إن الأمر قد يتعدي هذا ليصل لاختلاف معدلات الإنتاج لدي المبرمج الواحد بناء علي العمل الذي يقوم به. المبرمج عادة ما يكون مبدعاً في مجال ما (لغة برمجة معينة، نوعية معينة من البرامج،إلخ) و ضعيفاً في مجالات أخري و هو ما يعني أن العاملين في مجال البرمجيات لا يمكن أن يحل كل منهم محل الآخر بسهولة.

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

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

لفهم المبرمج، كيفية تفكيره، كيفية إختياره و التعامل معه فإننا علينا أن ننظر إلي طبيعة الأعمال و الأنشطة المطلوب من المبرمج القيام بها و ما يميز هذا الأنشطة عن غيرها من الأعمال و الأنشطة الأخري في باقي الصناعات.

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

وظيفة المبرمج هو أن يستخدم عقله البشري في وصف عمليات للكمبيوتر بطريقة يفهمها الكمبيوتر. ما دام الإختلاف بين العقلين (البشري و الآلي) ضخماً فإن المبرمج مطلوب منه أن يفكر بطريقة غير الطريقة التي إعتاد العقل البشري أن يفكر بها.

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

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

علماء النفس خرجوا من دراساتهم توصلوا إلي أن العقل البشري لا يمكنه أن يركز في أكثر من 5 – 7 نقاط تتعلق بموضوع واحد في نفس الوقت، و باقي النقاط سيهملها العقل شاء أم أبي.

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

لو وضعنا في الإعتبار أن العقل البشري لا يمكنه التركيز في عشرات الاشياء في نفس الوقت لوجدنا أن المبرمج مطلوب منه ما لا يستطيع البشر القيام به ! .

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

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

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

المشكلة أن متوسط ما يقرؤه المبرمجون علي مستوي العالم هو أقل من كتاب واحد سنوياً. هذا يعني فجوة رهيبة بين كمية العلم المطلوبة ليكون المرء مبرمجاً جيداً و بين كمية العلم الموجودة بالفعل لدي المبرمجين.

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

0 مشاركات:

إرسال تعليق