الكتاب مؤلف من مجموعة من الفصول وستكون كل مقالة هي ملخص لفصل كامل. ستشاهد كل فترة عبارة "نصيحة" وبجانبها رقم النصيحة، سجل هذه النصائح ولا تنساها أبداً. سنقدم أيضاً في كل فصل عدداً من التحديات كي تفكر بها وتعتبر منها.
والآن نصيحتين قبل البدء بالفصل الأول:
النصيحة 1: اهتم بالشيء الذي تعمله
إذا لم تعطي العمل الذي تقوم به الأهمية الكافية، فمن المؤكد أن الناتج سيكون هزيلاً وضعيفاً وهذا حال كل عمل نقوم به، لا تجبر نفسك على عمل تكرهه بل اعمل بالشيء الذي تحبه وترغب به.
النصيحة 2: فكر أثناء قيامك بعملك
عندما تعمل حاول دائماً أن تفكر بالعمل الذي تقوم به ؛ أي لا تقم فقط بكتابة الشيفرة المصدرية كالرجل الآلي ، هذا التفكير سيقودك لتحسين الشيفرة المصدرية لتطبيقك وتسريعه ويعطيك صورة شاملة عن التطبيق الذي تعمل به وفهماً كاملاً له.
الفصل الأول: فلسفة المبرمج العملي
ما الذي يميز المبرمج العملي عن غيره؟؟ تقريباً كل شيء، شخصيته، حضوره وتفكيره، دائماً يفكر بالحلول الطويلة الأجل وليس بالحلول القصيرة "الرقع"، يفكر بالمشكلة ويضع كافة الاحتمالات بحسابه.
سر نجاح المبرمج العملي هو تحمله لمسؤولياته، فهو لا يهرب من الفشل وهذا ما سنتكلم عنه في "القط أكل شيفرتي المصدرية"، أن تتحمل المسؤولية هي بأن لا تجلس وتشاهد تطبيقك وهو ينهار أمامك وهذا أيضاً سنناقشه في "خلل البرمجيات" وعن كيفية الحفاظ على التطبيق سليماً وخال من العلل. التغيير صعب على الكثير من الناس وسنخبرك عن الخطوات العملية لكي تستطيع التعود على التغيير في "حساء الصخور وسلق الضفادع".
من فوائد استيعابك لسياق العمل ككل، أنك تستطيع تقييم تطبيقك. ولكن أحياناً تكون هنالك تنازلات، وهذا ما سنكتشفه في "تطبيقات جيدة بما فيه الكفاية". ومن المؤكد أنه يجب أن تمتلك دراية عامة بالشيء الذي ستعمله. سنناقش في "سجل معلوماتك" إستراتيجيات كي تبقى على علم بأهم المعلومات الخاصة بعملك.
أخيراً وليس آخراً، لا أحد منا يعمل بمفرده وهنالك الكثير من النقاش مع العملاء والمطورين. في "التواصل" سنعطيك نصائح لتواصل أفضل معهم.
باختصار هذا الفصل سيعطيك أساسيات المبرمج العملي.
1.1. القط أكل شيفرتي المصدرية:
أهم شيء عند المبرمج العملي هو تحمله للمسؤولية بألا يتهرب من الأخطاء التي تحدث في المشروع الذي يعمل عليه. ولا يلقي اللوم على الآخرين. في كل المشاريع تحدث الأخطاء مهما كانت منظماً ، ومهما استخدمت من أدوات التطوير التي تحافظ على سلامة المشروع، فلابد من ظهور الأخطاء أو التأخير في التسليم.
الأخطاء لابد من حدوثها ومهمتنا كعمليين أن نتعامل معها بعملية أيضاً، هذا يعني أن نكون واضحين وصريحين في شرح المشكلة وفي شرح الأسباب التي أدت إلى ظهورها، لا أن نرمي بالتقصير على كل شيء ونبدأ بالشكوى.
النصيحة 3: قدم خيارات، ولا تعطي أعذاراً واهية.
عند حدوث خطأ أو تأخير توقف قليلاً وأصغي إلى نفسك. ضع نفسك بمكان من ستذهب لمحادثته. تأكد من الأعذار التي ستقولها بأنها منطقية وكيف سيكون وقعها على رئيسك مثلاً. تخيل ماذا سيسألك رئيسك أو بماذا سيعقب على أعذارك، هكذا ستقي نفسك من إحراج كبير. طبعاً يجب أن تكون قد بذلت ما بوسعك وجربت كل الطرق لحل هذا الخطأ.
لا تقل له لا يمكن عمل هذا، بل قدم له الخيارات. قل له نستطيع أن نفعل هذا أو ذاك، نستطيع أن نصرف وقتاً أطول على تحليل المشروع، أو لتجريبه مرات أكثر. ربما ستحتاج للنصيحة فلا تتردد وأسأل غيرك عن هذه المشكلة.
التحدي: كيف ستتصرف لو أن موظف البنك جاءك بأعذار واهية في حال تعطل حسابك المصرفي؟ ماهو رأيك بهم وبشركتهم؟
1.2. خلل البرمجيات:
دائماً ما تحدث الأخطاء والأعطال في المشاريع البرمجية، مهما بلغت دقة المشروع وتنظيمه. وكلما زاد الخلل في المشروع كلما زادت فرصة حدوث الأخطاء. المبرمجون يسمون هذه الأخطاء بـ "تسوس البرمجيات".
من أهم الأسباب التي تؤدي لظهور الأخطاء هي عوامل نفسية وعوامل بيئة العمل. مهما صرف على المشروع والمبرمجين من مال وتدريب، ستظل فرصة حدوث الأخطاء قائمة. وبخلاف ذلك تجد مشاريع تواجه آلاف الصعوبات والمعوقات ومع ذلك يخرج ناجحاً.
ما الذي صنع الفرق بينهم؟
في المدن تجد أبنية نظيفة وجميلة وبالمقابل تجد المهملة والمحطمة. الباحثون اكتشفوا سبباً مدهشاً لتخرب الأبنية وتحولها لأماكن للمشردين، والسبب هو "النافذة المحطمة".
النافذة المحطمة:
نافذة واحدة محطمة تترك لفترة من الزمن، تعطي شعوراً بعدم الاهتمام بهذا البناء. وهكذا تتحطم بعدها نافذة ثانية، ومن ثم يبدأ المتشردون بالظهور فيه وتبدأ رسومات الجدران والقمامة بالازدياد يتحول المبنى لساحة خردة ومجمع قمامة.
النصيحة 4: لا تحيا مع نافذة محطمة.
حاول دائماً تصليح الأخطاء مهما بدت لك صغيرة ومهما كلفتك من وقت، فبالتأكيد ستوفر عليك عملاً كثيراً غداً. ابحث عن هذه الأخطاء وأصلحهم في الحال، وستحصد النتائج فوراً فستجد برنامجك قد أصبح أسرع ويعمل بشكل أفضل بكثير من السابق. بالطبع يوجد أسباب غير الأخطاء الصغيرة لتسوس البرمجيات ولكن سنناقشهم في وقت لاحق.
غالباً ستفكر بأنه ليس لديك الوقت الكافي لتصحيح هذه الأخطاء الصغيرة وتعلل ذلك بأنك على عجلة من أمرك وبدأ وقت التسليم بالاقتراب. إياك وهذا التفكير فهو طريقك إلى الخسارة بالتأكيد.
إخماد النيران:
بخلاف القصة السابقة، لدينا منزل نظيف وأنيق ويحتوي على العديد من التحف. في يوم ما بدأت النيران بالاشتعال وهرعت دائرة الإطفاء إلى المنزل لإخماد الحريق ولكنهم توقفوا قبل الدخول للمنزل لإبعاد السجادة النفيسة الموجودة قرب الباب كي لا تتسخ.
حالة مشهورة جداً، قرار إداري خاطئ أو قطعة فاسدة من البرنامج تجعل حياة المشروع فاشلة. إذا وجدت نفسك في هذا الموقف مع العديد من النوافذ المحطمة فلا تقل: "حسناً سأمضي في المشروع كما هو وسأزيد على فشله فشلاً".
وبنفس الطريقة، إن وجدت نفسك مع فريق ممتاز ومشروع قوي. فيجب عليك أن تعطي المشروع عناية فائقة وأن لا تحاول تعطيله كما فعل رجال الإطفاء. حتى ولو كان أمامك موعد للتسليم أو اجتماع لعرض ما تم إنجازه. لا يجب أن تكون أول من يبدأ بإفشال المشروع.
التحدي: مع الفريق الذي تعمل معه، حاول اختيار ثلاثة أخطاء صغيرة "نوافذ محطمة" وتناقشوا فيما بينكم عن أسباب ظهورها وطرق معالجتها.
1.3. حساء الصخور وسلق الضفادع:
ثلاثة جنود عادوا من الحرب وفي طريقهم إلى الديار صادفوا قرية وكانوا جائعين جداً، سألوا أهل القرية ولكنهم امتنعوا عن ضيافتهم بسب ظروف الحرب القاسية. الجنود قاموا بإحضار وعاء مغلي ووضعوا داخله عدة صخور، فخرج هل القرية كي يشاهدوا هذا المشهد العجيب.
قال الجنود لهم: "إنه حساء الصخور"، فسألهم أهل القرية: "وهل وضعتم به صخوراً فقط!"، أجاب الجنود: "بالطبع، ولكن البعض يقول أنه عند إضافة بعض الجزر يصبح طعمه أفضل"، فركض قروي إلى بيته وأحضر سلة من الجزر. قال الجنود: "وبعض البطاطا تعطيها قواماً أفضل"، فركض قروي آخر وأحضر سلة من البطاطا.
وبعد مدة طلب الجنود العديد من أنواع الخضار لتحسين الحساء وفي كل مرة يهرول أحد القرويين لإحضاره. وبعدها قام الجنود بإزالة الأحجار واستمتعوا مع القرويين بوجبة لم يتذوقوها منذ أشهر.
العديد من الحكم نستطيع استخلاصها من هذه القصة، فالجنود استغلوا فضول القرويين لإحضار مكونات الحساء. والاهم من هذا أن الجنود مثلوا حافزاً للقرويين لتحقيق شيء لم يكونوا ليحققوه بمفردهم وبالأخير الكل خرج رابحاً.
في كل فترة يجب أن تحاكي أسلوب هؤلاء الجنود.
أحياناً تجد كل الخطوات مرسومة بدماغك وبالشكل الصحيح، ولكن عندما تطلب الإذن لتنفيذ ذلك تواجه بالرفض إما لتأخر المشروع أو لعدم الاقتناع بخطتك أو بسبب تجاوز الميزانية.
عليك الآن بجلب الصخور لعمل الحساء، قم بتنفيذ ما تم الموافقة عليه من مديرك وبشكل ممتاز، اعرضه على الباقين وبعدها قل لهم: "بالتأكيد سيصبح أفضل لو أضفنا عليه ..." ولا تلح بالطلب، فقط تظاهر بعدم الاكتراث وبعد ذلك ستجدهم يطلبون منك أن تضيف ما طلبت، فالناس ترى الانضمام لشيء ناجح أسهل. صف لهم شكل المشروع الذي خططت له وستراهم يتسابقون عليه.
النصيحة 5: كن أنت المحفز للتغيير
أهل القرية
أهل القرية اندهشوا بفكرة حساء الأحجار ونسوا كل شيء حتى التفكير المنطقي. هذا ما يحدث لنا يومياً (فقدان التفكير المنطقي) فالأخطاء تتراكم أمام أعيننا كل يوم، فالقصة تبدأ بأخطاء صغيرة وتأخير بسيط ويزداد الأمر صعوبة ويبدأ تأخير التسليم والرقع بالظهور، والسبب هو تراكم الأخطاء كما ذكرنا.
النصيحة 6: تذكر الصورة الكبيرة
لم نجرب هذه التجربة من قبل، أحضر ضفدعاً وضعه في وعاء ماء ساخن فيقفز منه مباشرة. أما لو وضعته بوعاء ماء بارد وسخنته تدريجياً فلن يلاحظ الضفدع هذه الزيادة التدريجية وستحصل في النهاية على ضفدع مسلوق.
لاحظ أن الضفدع المسلوق مختلف عن النافذة المحطمة، فالنافذة المحطمة لم يهتم أحد بالأخطاء لعدم وجود من يتابع ذلك. أما الضفدع المسلوق فلم يلاحظ تراكم الأخطاء التدريجي.
لاتكن مثل الضفدع حاول مراقبة الصورة الكبيرة وتتبع الأداء العام دائماً ولا تحصر اهتمامك بالعمل المخصص لك فقط.
التحدي:في قصة الجنود، قام الجنود بخداع القرويين ولكن للمصلحة العامة، أما في حالة الضفدع فسببت الضرر. هل تستطيع أن تحدد حالتك عندما تحفز الفريق، هل تصنع حساء الصخور أم تسلق الضفدع؟
1.4. تطبيقات جيدة بما فيه الكفاية:
نكتة قديمة تتحدث عن شركة أمريكية ، طلبت من شركة يابانية 100 ألف دارة إلكترونية واشترطت في العقد بأن لا تتجاوز نسبة العيب: دارة واحدة في كل 10 آلاف دارة. بعد عدة أسابيع وصلت الدارات إلى الشركة الأمريكية بصندوق كبير وبجانبه صندوق صغير يحتوي فقط على 10 دارات معطوبة وكتب بجانبه: "هذه هي الدارات المعطوبة".
من منا لا يتمنى هذه الكفاءة في برامجه، ولكن هناك الآلاف من الاحتمالات لظهور الأخطاء في البرنامج. الأخطاء لا يجب أن توقفك أو تحبطك بل هي دائماً موجودة حتى في أنجح البرامج وأشهرها، الشيء المهم لشهرة برنامجك هو أن يوافق رغبات المستخدمين.
تطلعات المستخدمين ورغباتهم هي من أهم العوامل المؤثرة بالنجاح، فرجال التسويق وضعوا هذه الميزات في قواميسهم لعرضها على الزبائن والكل يترقبها الآن. لا يمكنك تجاهل هذه المتطلبات ويجب أن تضعهم بعين الاعتبار من لحظة البداية، أيضاً لا تعرض نفسك لموقف سخيف بإعطاء تواريخ تسليم قصيرة جداً.
النصيحة 7: اجعل الكفاءة متطلباً أساسياً
البرمجة كالرسم، تبدأ بقطعة ورق وعدد من الألوان. تبدأ بالشكل الرئيسي أو المخطط ثم تهتم بالتفاصيل وبعد ذلك تلونهم، وكل فترة تبتعد قليلاً عن الرسمة كي تراها بالمظهر الكلي. في كل مرة ترمي قطعة الورق وتبدأ بأخرى جديدة وتحاول أن تبتعد عن الأخطاء السابقة. لا تعقد الرسمة بالكثير من الطبقات و الألوان فهذا يضيع عملك كله.
لا تخرب برنامج بالكثير من التحسينات والإضافات، اتركه وراقبه لفترة من الزمن. بعد فترة الاختبار ستقرر ماذا ستضيف وتحسن عليه، فهذا أفضل من الإضافة والتحسين السريع الغير منظم.
التحدي: راقب البرامج التي تستخدمها. هل تجد أي دليل بأن الشركة أصدرت البرنامج مع علمها بأنه غير كامل، كمستخدم هل تفضل؟ 1: الانتظار للتخلص من جميع أخطاء البرنامج، 2: الحصول على برنامج معقد مع القليل من الأخطاء، 3: برنامج بسيط مع القليل من الأخطاء.
1.5. سِجل معلوماتك:
ما تعلمه اليوم سيصبح غداً بلا قيمة، هذه مقولة صحيحة في مجال التقنية وخاصة في عصر الإنترنت. التقنية بتغير مستمر والمعلومات تتجدد باستمرار فإذا توقفت لفترة عن ملاحقتها ستصبح معلوماتك بلا قيمة وستصبح أيضاً بدون قيمة في شركتك أو لدى عملائك.
إدارتك لسجل معلوماتك تشبه كثيراً إدارة السجل المالي:
1- المستثمرون الفعليون يستثمرون بشكل مستمر.
2- التنوع هو مفتاح النجاح للمدى البعيد.
3- المستثمرون الأذكياء ينوعون بين الاستثمار المضمون والخطر.
4- المستثمرون يشترون بسعر رخيص ويبيعون بسعر غال.
5- السجل المالي يجب أن يدقق ويراجع بشكل دائم.
لكي تضمن النجاح في مهنتك يجب أن تتبع نفس إستراتيجيات المستثمر الناجح.
1- استثمر بشكل مستمر: استثمر في معلوماتك بشكل دائم، حتى ولو بمقدار بسيط. سنتكلم عن الطرق المختلفة لذلك بعد قليل في الأهداف.
2- التنوع: كلما تنوعت معارفك، كلما زادت قيمتك. بشكل أساسي يجب أن تعرف كل شيء عن التقنية التي تعمل بها، ولكن لا تتوقف عند ذلك. كما ذكرنا التقنيات بتغير مستمر وبتعرفك على تقنيات جديدة ستضمن استمرارك في ركب التقنية.
3- المخاطر: لا تضع كل بيضك في سلة واحدة، أي لا تعتمد على تقنية واحدة وتبقى ملتصقاً بها فربما تصبح هذه التقنية قديمة في حال ظهور منافس لها.
4- اشتر بالرخيص وبع بالغالي: تعرفك على تقنية جديدة غير مشهورة ولكن واعدة هو كشرائك بالرخيص. فمن تعلم الجافا عندما ظهرت كسب الكثير فيما بعد.
5- المراجعة: دائماً راجع معارفك، فربما ستتخلى عن إكمال التعلم بتقنية ثبت فشلها أو ربما ستحتاج لزيادة تركيزك على أخرى تزداد شهرتها يوماً بعد يوم.
النصيحة 8: استثمر بشكل مستمر في سجل معلوماتك.
الأهداف:
تكلمنا عن طرق نظرية لزيادة سجلنا المعرفي ولكن ماهي الطرق العملية أو الفعلية؟
1- تعلم على الأقل لغة جديدة كل عام: بتعلمك للغات أكثر، سيزداد أفقك المعرفي وستتمكن من إيجاد حلول لمشاكل لم تكن تعرف حلها.
2- اقرأ كتاباً تقنياً كل ربع عام: كميات هائلة من الكتب تصدر، فالخيارات أمامك كثيرة ومتنوعة. اختر كتباً تتعلق بمشاريعك الحالية وعندما تتقنها تحول إلى كتب تتعلق بتقنيات أخرى وزد من الإيقاع بقراءتك لكتاب في الشهر.
3- إقرأ كتباً غير تقنية أيضاً: تعاملنا مع الحاسوب كل يوم أنسانا أن مستخدمي الحاسوب هم من البشر، فقراءتك لكتاب أدبي أو ديني ينعش هذا الجانب فيك.
4- اذهب للمحاضرات: ابحث عن محاضرات في الجامعة تعجبك أو ندوات علمية وشارك بها.
5- شارك: لاتكن مستمعاً فقط بل شارك معلوماتك مع رفاقك وشكلوا مجموعات نقاش. الانعزال يقضي على مهنتك وبالعكس المشاركة الاجتماعية تنميها وتشهرك.
6- جرب بيئات مختلفة: تستخدم الويندوز، جرب غيره مثل اللينكس في المنزل. تستخدم برنامج Word مثلاً، جرب غيره وتعرف على ميزات جديدة.
7- ابق متيقظاً: اشترك في مجلات المعلوماتية والتقنية، وفي المواقع، المدونات المفيدة، النشرات البريدية والمنتديات التقنية كي تبقى على إطلاع بكل جديد.
من المهم أن تبقي استثماراتك تعمل في سجل معلوماتك، حالما تتعرف على لغة او تقنية جديدة لا تتوقف وتابع التعرف على غيرها. لا يهم إن كنت تستعمل كل ما تعلمته ولكن تعلم الجديد يكسبك تفكيراً ناضجاً وأفق بعيد، فربما تأخذ أفكار من هنا وهناك لتبتكر حلولاً جديدة.
الوقت دائماً ضيق وخاصة في هذا الزمن، لكن هناك الكثير من الأوقات التي تذهب هدراً (الانتظار في عيادة الطبيب أو في المطار)، حاول دائماً أن يكون الكتاب معك في مثل هذه الأوقات الضائعة.
التحليل الدقيق:
آخر نقطة نذكرها هي التحليل الدقيق لكل ما تقرأه أو تسمعه. يجب أن تكون معلوماتك صائبة ودقيقة، لا تستمع إلى مندوبي الشركات المتخفين في عالم الإنترنت في محاولتهم لتضليلك بشيء كاذب. أحياناً تجد سلعة معروضة في واجهة المحل، هذا لا يعني أنها ممتازة فربما دفعت الشركة مقابل وضعها في هذا المكان.
النصيحة 9: لا تصدق فوراً كل ما تسمعه أو تقرأه بل حلله بشكل دقيق.
التحدي:
- جرب أن تتعلم لغة جديدة هذا الشهر، تبرمج بال PHP مثلاً؟ جرب Perl أو Python أو حتى ASP.
- أقرأ كتاباً تقنياً جديداً، فربما تعمل الآن على تحليل مشروع جديد، حاول أن تقرأ كتاباً عن بنية البرامج أو تصميمها. أو إذا كنت تعمل على كتابة شيفرة مصدرية فاقرأ كتاباً عن تقنيات كتابة الشيفرة المصدرية.
- حاول صنع علاقات عامة مع الكثير من الناس وحدثهم عن التقنيات التي تعمل بها أو عن مشاريعك الحالية.
1.6. التواصل:
كمبرمجين يقع على عاتقنا الكثير من التواصل، التواصل في الاجتماعات، مع رئيسك في العمل، مع العملاء وحتى مع المستخدمين. أيضاً يجب علينا أن نتواصل مع برامجنا بكتابة الشيفرة المصدرية ونتواصل مع باقي المطورين بكتابة التوثيقات والتعليقات.
هذه لائحة بأفكار جيدة للتواصل:
- تعرف على ما يجب أن تقوله:
أحياناً تخوننا الذاكرة وأحياناً نفتقد الكلمة المناسبة، أفضل حل لهذا هو تسجيل الأفكار الهامة التي تجدها تعبر عن ما تريد قوله.
- تعرف على مستمعيك:
عندما تتواصل مع الآخرين تحاول أن تقنعهم بأفكارك. لفعل ذلك عليك أن تعرف تفكيرهم وماذا يريدون. مثلاً تريد أن تقنعهم بأهمية تطوير برنامج للدعم الفني، فالمستخدم يهمه في الأمر أن يستطيع الإبلاغ عن الأعطال مهما كانت الساعة وبدون انتظار. مدراء الدعم الفني يهمه في الأمر أن لا يحتاجوا لعدد كبير من موظفي الدعم الفني وأن يصبح الإبلاغ عن المشاكل بشكل رقمي و مؤرشف. أخيراً، المبرمجين يهمهم بأن يتمكنوا من الحصول على خبرات جديدة في مجال تصميم قاعدة البيانات وبنية الخادم. بإيضاحك هذه النقاط لكل نوع من المستمعين، ستحصل على موافقتهم ومشاركتهم أيضاً.
- اختر اللحظة المناسبة:
الآن أخر الأسبوع وقارب الدوام على نهايته ومديرك بمزاج سيء، لا تسأله عن لوحة مفاتيح جديدة الآن بل اختر وقتاً آخر لهذا الطلب، وفي حال الضرورة ستحتاج لسؤاله إذا كان يريد الاستماع لك أم لا.
- اختر أسلوبك:
بعض الناس يفضلون الشرح المقتضب والمختصر، بينما يفضل البعض الآخر الشرح الطويل. نفس الأمر بالنسبة للتوثيق وملفات المساعدة، فالبعض يفضل الشرح المختصر والمهم والبعض يفضل الشرح الطويل والمليء بالأمثلة.
- اهتم بالمظهر:
المحتوى فقط غير كافي، بل الشكل أيضاً مهم بقدره وربما أكثر. فعرض الشرائح السيئ المظهر أو التوثيق الغير منسق سيخرب عليك كل جهدك. حاول دائماً أن تظهر برامجك ومستنداتك بأجمل مظهر.
- شارك المستخدمين:
شارك بعض المستخدمين بعملية الاختبار للبرنامج وبملفات المساعدة وسجل ملاحظاتهم وآراءهم.
- راجع مستخدميك:
كثيراً ما ننسى إرسال رسالة لمستخدم أرسل شكوى أو مشكلة تم حلها، حتى ولو كنت مشغولاً فأرسل لهم بأنك سترد عليهم بأسرع وقت ممكن. هذا يعطيهم انطباعاً أفضل عنك وعن عملك.
النصيحة 10: المهم هو ما تقوله وكيف تقوله
كلمة أخيرة:
تعرفنا في هذا الفصل على فلسفة المبرمج العملي، كيف يفكر، كيف ينمي قدراته، كيف يقيم برامجه، كيف يوصل مطالبه ويتواصل مع الآخرين. أتمنى أن يكون هذا الكلام عوناً لكم في إحراز المزيد من التقدم ولاتنسى أن تتقيد بهذه النصائح فهي "خبرة العمر" لاثنين من أشهر المبرمجين. معد التلخيص : خالد الحوراني
والآن نصيحتين قبل البدء بالفصل الأول:
النصيحة 1: اهتم بالشيء الذي تعمله
إذا لم تعطي العمل الذي تقوم به الأهمية الكافية، فمن المؤكد أن الناتج سيكون هزيلاً وضعيفاً وهذا حال كل عمل نقوم به، لا تجبر نفسك على عمل تكرهه بل اعمل بالشيء الذي تحبه وترغب به.
النصيحة 2: فكر أثناء قيامك بعملك
عندما تعمل حاول دائماً أن تفكر بالعمل الذي تقوم به ؛ أي لا تقم فقط بكتابة الشيفرة المصدرية كالرجل الآلي ، هذا التفكير سيقودك لتحسين الشيفرة المصدرية لتطبيقك وتسريعه ويعطيك صورة شاملة عن التطبيق الذي تعمل به وفهماً كاملاً له.
الفصل الأول: فلسفة المبرمج العملي
ما الذي يميز المبرمج العملي عن غيره؟؟ تقريباً كل شيء، شخصيته، حضوره وتفكيره، دائماً يفكر بالحلول الطويلة الأجل وليس بالحلول القصيرة "الرقع"، يفكر بالمشكلة ويضع كافة الاحتمالات بحسابه.
سر نجاح المبرمج العملي هو تحمله لمسؤولياته، فهو لا يهرب من الفشل وهذا ما سنتكلم عنه في "القط أكل شيفرتي المصدرية"، أن تتحمل المسؤولية هي بأن لا تجلس وتشاهد تطبيقك وهو ينهار أمامك وهذا أيضاً سنناقشه في "خلل البرمجيات" وعن كيفية الحفاظ على التطبيق سليماً وخال من العلل. التغيير صعب على الكثير من الناس وسنخبرك عن الخطوات العملية لكي تستطيع التعود على التغيير في "حساء الصخور وسلق الضفادع".
من فوائد استيعابك لسياق العمل ككل، أنك تستطيع تقييم تطبيقك. ولكن أحياناً تكون هنالك تنازلات، وهذا ما سنكتشفه في "تطبيقات جيدة بما فيه الكفاية". ومن المؤكد أنه يجب أن تمتلك دراية عامة بالشيء الذي ستعمله. سنناقش في "سجل معلوماتك" إستراتيجيات كي تبقى على علم بأهم المعلومات الخاصة بعملك.
أخيراً وليس آخراً، لا أحد منا يعمل بمفرده وهنالك الكثير من النقاش مع العملاء والمطورين. في "التواصل" سنعطيك نصائح لتواصل أفضل معهم.
باختصار هذا الفصل سيعطيك أساسيات المبرمج العملي.
1.1. القط أكل شيفرتي المصدرية:
أهم شيء عند المبرمج العملي هو تحمله للمسؤولية بألا يتهرب من الأخطاء التي تحدث في المشروع الذي يعمل عليه. ولا يلقي اللوم على الآخرين. في كل المشاريع تحدث الأخطاء مهما كانت منظماً ، ومهما استخدمت من أدوات التطوير التي تحافظ على سلامة المشروع، فلابد من ظهور الأخطاء أو التأخير في التسليم.
الأخطاء لابد من حدوثها ومهمتنا كعمليين أن نتعامل معها بعملية أيضاً، هذا يعني أن نكون واضحين وصريحين في شرح المشكلة وفي شرح الأسباب التي أدت إلى ظهورها، لا أن نرمي بالتقصير على كل شيء ونبدأ بالشكوى.
النصيحة 3: قدم خيارات، ولا تعطي أعذاراً واهية.
عند حدوث خطأ أو تأخير توقف قليلاً وأصغي إلى نفسك. ضع نفسك بمكان من ستذهب لمحادثته. تأكد من الأعذار التي ستقولها بأنها منطقية وكيف سيكون وقعها على رئيسك مثلاً. تخيل ماذا سيسألك رئيسك أو بماذا سيعقب على أعذارك، هكذا ستقي نفسك من إحراج كبير. طبعاً يجب أن تكون قد بذلت ما بوسعك وجربت كل الطرق لحل هذا الخطأ.
لا تقل له لا يمكن عمل هذا، بل قدم له الخيارات. قل له نستطيع أن نفعل هذا أو ذاك، نستطيع أن نصرف وقتاً أطول على تحليل المشروع، أو لتجريبه مرات أكثر. ربما ستحتاج للنصيحة فلا تتردد وأسأل غيرك عن هذه المشكلة.
التحدي: كيف ستتصرف لو أن موظف البنك جاءك بأعذار واهية في حال تعطل حسابك المصرفي؟ ماهو رأيك بهم وبشركتهم؟
1.2. خلل البرمجيات:
دائماً ما تحدث الأخطاء والأعطال في المشاريع البرمجية، مهما بلغت دقة المشروع وتنظيمه. وكلما زاد الخلل في المشروع كلما زادت فرصة حدوث الأخطاء. المبرمجون يسمون هذه الأخطاء بـ "تسوس البرمجيات".
من أهم الأسباب التي تؤدي لظهور الأخطاء هي عوامل نفسية وعوامل بيئة العمل. مهما صرف على المشروع والمبرمجين من مال وتدريب، ستظل فرصة حدوث الأخطاء قائمة. وبخلاف ذلك تجد مشاريع تواجه آلاف الصعوبات والمعوقات ومع ذلك يخرج ناجحاً.
ما الذي صنع الفرق بينهم؟
في المدن تجد أبنية نظيفة وجميلة وبالمقابل تجد المهملة والمحطمة. الباحثون اكتشفوا سبباً مدهشاً لتخرب الأبنية وتحولها لأماكن للمشردين، والسبب هو "النافذة المحطمة".
النافذة المحطمة:
نافذة واحدة محطمة تترك لفترة من الزمن، تعطي شعوراً بعدم الاهتمام بهذا البناء. وهكذا تتحطم بعدها نافذة ثانية، ومن ثم يبدأ المتشردون بالظهور فيه وتبدأ رسومات الجدران والقمامة بالازدياد يتحول المبنى لساحة خردة ومجمع قمامة.
النصيحة 4: لا تحيا مع نافذة محطمة.
حاول دائماً تصليح الأخطاء مهما بدت لك صغيرة ومهما كلفتك من وقت، فبالتأكيد ستوفر عليك عملاً كثيراً غداً. ابحث عن هذه الأخطاء وأصلحهم في الحال، وستحصد النتائج فوراً فستجد برنامجك قد أصبح أسرع ويعمل بشكل أفضل بكثير من السابق. بالطبع يوجد أسباب غير الأخطاء الصغيرة لتسوس البرمجيات ولكن سنناقشهم في وقت لاحق.
غالباً ستفكر بأنه ليس لديك الوقت الكافي لتصحيح هذه الأخطاء الصغيرة وتعلل ذلك بأنك على عجلة من أمرك وبدأ وقت التسليم بالاقتراب. إياك وهذا التفكير فهو طريقك إلى الخسارة بالتأكيد.
إخماد النيران:
بخلاف القصة السابقة، لدينا منزل نظيف وأنيق ويحتوي على العديد من التحف. في يوم ما بدأت النيران بالاشتعال وهرعت دائرة الإطفاء إلى المنزل لإخماد الحريق ولكنهم توقفوا قبل الدخول للمنزل لإبعاد السجادة النفيسة الموجودة قرب الباب كي لا تتسخ.
حالة مشهورة جداً، قرار إداري خاطئ أو قطعة فاسدة من البرنامج تجعل حياة المشروع فاشلة. إذا وجدت نفسك في هذا الموقف مع العديد من النوافذ المحطمة فلا تقل: "حسناً سأمضي في المشروع كما هو وسأزيد على فشله فشلاً".
وبنفس الطريقة، إن وجدت نفسك مع فريق ممتاز ومشروع قوي. فيجب عليك أن تعطي المشروع عناية فائقة وأن لا تحاول تعطيله كما فعل رجال الإطفاء. حتى ولو كان أمامك موعد للتسليم أو اجتماع لعرض ما تم إنجازه. لا يجب أن تكون أول من يبدأ بإفشال المشروع.
التحدي: مع الفريق الذي تعمل معه، حاول اختيار ثلاثة أخطاء صغيرة "نوافذ محطمة" وتناقشوا فيما بينكم عن أسباب ظهورها وطرق معالجتها.
1.3. حساء الصخور وسلق الضفادع:
ثلاثة جنود عادوا من الحرب وفي طريقهم إلى الديار صادفوا قرية وكانوا جائعين جداً، سألوا أهل القرية ولكنهم امتنعوا عن ضيافتهم بسب ظروف الحرب القاسية. الجنود قاموا بإحضار وعاء مغلي ووضعوا داخله عدة صخور، فخرج هل القرية كي يشاهدوا هذا المشهد العجيب.
قال الجنود لهم: "إنه حساء الصخور"، فسألهم أهل القرية: "وهل وضعتم به صخوراً فقط!"، أجاب الجنود: "بالطبع، ولكن البعض يقول أنه عند إضافة بعض الجزر يصبح طعمه أفضل"، فركض قروي إلى بيته وأحضر سلة من الجزر. قال الجنود: "وبعض البطاطا تعطيها قواماً أفضل"، فركض قروي آخر وأحضر سلة من البطاطا.
وبعد مدة طلب الجنود العديد من أنواع الخضار لتحسين الحساء وفي كل مرة يهرول أحد القرويين لإحضاره. وبعدها قام الجنود بإزالة الأحجار واستمتعوا مع القرويين بوجبة لم يتذوقوها منذ أشهر.
العديد من الحكم نستطيع استخلاصها من هذه القصة، فالجنود استغلوا فضول القرويين لإحضار مكونات الحساء. والاهم من هذا أن الجنود مثلوا حافزاً للقرويين لتحقيق شيء لم يكونوا ليحققوه بمفردهم وبالأخير الكل خرج رابحاً.
في كل فترة يجب أن تحاكي أسلوب هؤلاء الجنود.
أحياناً تجد كل الخطوات مرسومة بدماغك وبالشكل الصحيح، ولكن عندما تطلب الإذن لتنفيذ ذلك تواجه بالرفض إما لتأخر المشروع أو لعدم الاقتناع بخطتك أو بسبب تجاوز الميزانية.
عليك الآن بجلب الصخور لعمل الحساء، قم بتنفيذ ما تم الموافقة عليه من مديرك وبشكل ممتاز، اعرضه على الباقين وبعدها قل لهم: "بالتأكيد سيصبح أفضل لو أضفنا عليه ..." ولا تلح بالطلب، فقط تظاهر بعدم الاكتراث وبعد ذلك ستجدهم يطلبون منك أن تضيف ما طلبت، فالناس ترى الانضمام لشيء ناجح أسهل. صف لهم شكل المشروع الذي خططت له وستراهم يتسابقون عليه.
النصيحة 5: كن أنت المحفز للتغيير
أهل القرية
أهل القرية اندهشوا بفكرة حساء الأحجار ونسوا كل شيء حتى التفكير المنطقي. هذا ما يحدث لنا يومياً (فقدان التفكير المنطقي) فالأخطاء تتراكم أمام أعيننا كل يوم، فالقصة تبدأ بأخطاء صغيرة وتأخير بسيط ويزداد الأمر صعوبة ويبدأ تأخير التسليم والرقع بالظهور، والسبب هو تراكم الأخطاء كما ذكرنا.
النصيحة 6: تذكر الصورة الكبيرة
لم نجرب هذه التجربة من قبل، أحضر ضفدعاً وضعه في وعاء ماء ساخن فيقفز منه مباشرة. أما لو وضعته بوعاء ماء بارد وسخنته تدريجياً فلن يلاحظ الضفدع هذه الزيادة التدريجية وستحصل في النهاية على ضفدع مسلوق.
لاحظ أن الضفدع المسلوق مختلف عن النافذة المحطمة، فالنافذة المحطمة لم يهتم أحد بالأخطاء لعدم وجود من يتابع ذلك. أما الضفدع المسلوق فلم يلاحظ تراكم الأخطاء التدريجي.
لاتكن مثل الضفدع حاول مراقبة الصورة الكبيرة وتتبع الأداء العام دائماً ولا تحصر اهتمامك بالعمل المخصص لك فقط.
التحدي:في قصة الجنود، قام الجنود بخداع القرويين ولكن للمصلحة العامة، أما في حالة الضفدع فسببت الضرر. هل تستطيع أن تحدد حالتك عندما تحفز الفريق، هل تصنع حساء الصخور أم تسلق الضفدع؟
1.4. تطبيقات جيدة بما فيه الكفاية:
نكتة قديمة تتحدث عن شركة أمريكية ، طلبت من شركة يابانية 100 ألف دارة إلكترونية واشترطت في العقد بأن لا تتجاوز نسبة العيب: دارة واحدة في كل 10 آلاف دارة. بعد عدة أسابيع وصلت الدارات إلى الشركة الأمريكية بصندوق كبير وبجانبه صندوق صغير يحتوي فقط على 10 دارات معطوبة وكتب بجانبه: "هذه هي الدارات المعطوبة".
من منا لا يتمنى هذه الكفاءة في برامجه، ولكن هناك الآلاف من الاحتمالات لظهور الأخطاء في البرنامج. الأخطاء لا يجب أن توقفك أو تحبطك بل هي دائماً موجودة حتى في أنجح البرامج وأشهرها، الشيء المهم لشهرة برنامجك هو أن يوافق رغبات المستخدمين.
تطلعات المستخدمين ورغباتهم هي من أهم العوامل المؤثرة بالنجاح، فرجال التسويق وضعوا هذه الميزات في قواميسهم لعرضها على الزبائن والكل يترقبها الآن. لا يمكنك تجاهل هذه المتطلبات ويجب أن تضعهم بعين الاعتبار من لحظة البداية، أيضاً لا تعرض نفسك لموقف سخيف بإعطاء تواريخ تسليم قصيرة جداً.
النصيحة 7: اجعل الكفاءة متطلباً أساسياً
البرمجة كالرسم، تبدأ بقطعة ورق وعدد من الألوان. تبدأ بالشكل الرئيسي أو المخطط ثم تهتم بالتفاصيل وبعد ذلك تلونهم، وكل فترة تبتعد قليلاً عن الرسمة كي تراها بالمظهر الكلي. في كل مرة ترمي قطعة الورق وتبدأ بأخرى جديدة وتحاول أن تبتعد عن الأخطاء السابقة. لا تعقد الرسمة بالكثير من الطبقات و الألوان فهذا يضيع عملك كله.
لا تخرب برنامج بالكثير من التحسينات والإضافات، اتركه وراقبه لفترة من الزمن. بعد فترة الاختبار ستقرر ماذا ستضيف وتحسن عليه، فهذا أفضل من الإضافة والتحسين السريع الغير منظم.
التحدي: راقب البرامج التي تستخدمها. هل تجد أي دليل بأن الشركة أصدرت البرنامج مع علمها بأنه غير كامل، كمستخدم هل تفضل؟ 1: الانتظار للتخلص من جميع أخطاء البرنامج، 2: الحصول على برنامج معقد مع القليل من الأخطاء، 3: برنامج بسيط مع القليل من الأخطاء.
1.5. سِجل معلوماتك:
ما تعلمه اليوم سيصبح غداً بلا قيمة، هذه مقولة صحيحة في مجال التقنية وخاصة في عصر الإنترنت. التقنية بتغير مستمر والمعلومات تتجدد باستمرار فإذا توقفت لفترة عن ملاحقتها ستصبح معلوماتك بلا قيمة وستصبح أيضاً بدون قيمة في شركتك أو لدى عملائك.
إدارتك لسجل معلوماتك تشبه كثيراً إدارة السجل المالي:
1- المستثمرون الفعليون يستثمرون بشكل مستمر.
2- التنوع هو مفتاح النجاح للمدى البعيد.
3- المستثمرون الأذكياء ينوعون بين الاستثمار المضمون والخطر.
4- المستثمرون يشترون بسعر رخيص ويبيعون بسعر غال.
5- السجل المالي يجب أن يدقق ويراجع بشكل دائم.
لكي تضمن النجاح في مهنتك يجب أن تتبع نفس إستراتيجيات المستثمر الناجح.
1- استثمر بشكل مستمر: استثمر في معلوماتك بشكل دائم، حتى ولو بمقدار بسيط. سنتكلم عن الطرق المختلفة لذلك بعد قليل في الأهداف.
2- التنوع: كلما تنوعت معارفك، كلما زادت قيمتك. بشكل أساسي يجب أن تعرف كل شيء عن التقنية التي تعمل بها، ولكن لا تتوقف عند ذلك. كما ذكرنا التقنيات بتغير مستمر وبتعرفك على تقنيات جديدة ستضمن استمرارك في ركب التقنية.
3- المخاطر: لا تضع كل بيضك في سلة واحدة، أي لا تعتمد على تقنية واحدة وتبقى ملتصقاً بها فربما تصبح هذه التقنية قديمة في حال ظهور منافس لها.
4- اشتر بالرخيص وبع بالغالي: تعرفك على تقنية جديدة غير مشهورة ولكن واعدة هو كشرائك بالرخيص. فمن تعلم الجافا عندما ظهرت كسب الكثير فيما بعد.
5- المراجعة: دائماً راجع معارفك، فربما ستتخلى عن إكمال التعلم بتقنية ثبت فشلها أو ربما ستحتاج لزيادة تركيزك على أخرى تزداد شهرتها يوماً بعد يوم.
النصيحة 8: استثمر بشكل مستمر في سجل معلوماتك.
الأهداف:
تكلمنا عن طرق نظرية لزيادة سجلنا المعرفي ولكن ماهي الطرق العملية أو الفعلية؟
1- تعلم على الأقل لغة جديدة كل عام: بتعلمك للغات أكثر، سيزداد أفقك المعرفي وستتمكن من إيجاد حلول لمشاكل لم تكن تعرف حلها.
2- اقرأ كتاباً تقنياً كل ربع عام: كميات هائلة من الكتب تصدر، فالخيارات أمامك كثيرة ومتنوعة. اختر كتباً تتعلق بمشاريعك الحالية وعندما تتقنها تحول إلى كتب تتعلق بتقنيات أخرى وزد من الإيقاع بقراءتك لكتاب في الشهر.
3- إقرأ كتباً غير تقنية أيضاً: تعاملنا مع الحاسوب كل يوم أنسانا أن مستخدمي الحاسوب هم من البشر، فقراءتك لكتاب أدبي أو ديني ينعش هذا الجانب فيك.
4- اذهب للمحاضرات: ابحث عن محاضرات في الجامعة تعجبك أو ندوات علمية وشارك بها.
5- شارك: لاتكن مستمعاً فقط بل شارك معلوماتك مع رفاقك وشكلوا مجموعات نقاش. الانعزال يقضي على مهنتك وبالعكس المشاركة الاجتماعية تنميها وتشهرك.
6- جرب بيئات مختلفة: تستخدم الويندوز، جرب غيره مثل اللينكس في المنزل. تستخدم برنامج Word مثلاً، جرب غيره وتعرف على ميزات جديدة.
7- ابق متيقظاً: اشترك في مجلات المعلوماتية والتقنية، وفي المواقع، المدونات المفيدة، النشرات البريدية والمنتديات التقنية كي تبقى على إطلاع بكل جديد.
من المهم أن تبقي استثماراتك تعمل في سجل معلوماتك، حالما تتعرف على لغة او تقنية جديدة لا تتوقف وتابع التعرف على غيرها. لا يهم إن كنت تستعمل كل ما تعلمته ولكن تعلم الجديد يكسبك تفكيراً ناضجاً وأفق بعيد، فربما تأخذ أفكار من هنا وهناك لتبتكر حلولاً جديدة.
الوقت دائماً ضيق وخاصة في هذا الزمن، لكن هناك الكثير من الأوقات التي تذهب هدراً (الانتظار في عيادة الطبيب أو في المطار)، حاول دائماً أن يكون الكتاب معك في مثل هذه الأوقات الضائعة.
التحليل الدقيق:
آخر نقطة نذكرها هي التحليل الدقيق لكل ما تقرأه أو تسمعه. يجب أن تكون معلوماتك صائبة ودقيقة، لا تستمع إلى مندوبي الشركات المتخفين في عالم الإنترنت في محاولتهم لتضليلك بشيء كاذب. أحياناً تجد سلعة معروضة في واجهة المحل، هذا لا يعني أنها ممتازة فربما دفعت الشركة مقابل وضعها في هذا المكان.
النصيحة 9: لا تصدق فوراً كل ما تسمعه أو تقرأه بل حلله بشكل دقيق.
التحدي:
- جرب أن تتعلم لغة جديدة هذا الشهر، تبرمج بال PHP مثلاً؟ جرب Perl أو Python أو حتى ASP.
- أقرأ كتاباً تقنياً جديداً، فربما تعمل الآن على تحليل مشروع جديد، حاول أن تقرأ كتاباً عن بنية البرامج أو تصميمها. أو إذا كنت تعمل على كتابة شيفرة مصدرية فاقرأ كتاباً عن تقنيات كتابة الشيفرة المصدرية.
- حاول صنع علاقات عامة مع الكثير من الناس وحدثهم عن التقنيات التي تعمل بها أو عن مشاريعك الحالية.
1.6. التواصل:
كمبرمجين يقع على عاتقنا الكثير من التواصل، التواصل في الاجتماعات، مع رئيسك في العمل، مع العملاء وحتى مع المستخدمين. أيضاً يجب علينا أن نتواصل مع برامجنا بكتابة الشيفرة المصدرية ونتواصل مع باقي المطورين بكتابة التوثيقات والتعليقات.
هذه لائحة بأفكار جيدة للتواصل:
- تعرف على ما يجب أن تقوله:
أحياناً تخوننا الذاكرة وأحياناً نفتقد الكلمة المناسبة، أفضل حل لهذا هو تسجيل الأفكار الهامة التي تجدها تعبر عن ما تريد قوله.
- تعرف على مستمعيك:
عندما تتواصل مع الآخرين تحاول أن تقنعهم بأفكارك. لفعل ذلك عليك أن تعرف تفكيرهم وماذا يريدون. مثلاً تريد أن تقنعهم بأهمية تطوير برنامج للدعم الفني، فالمستخدم يهمه في الأمر أن يستطيع الإبلاغ عن الأعطال مهما كانت الساعة وبدون انتظار. مدراء الدعم الفني يهمه في الأمر أن لا يحتاجوا لعدد كبير من موظفي الدعم الفني وأن يصبح الإبلاغ عن المشاكل بشكل رقمي و مؤرشف. أخيراً، المبرمجين يهمهم بأن يتمكنوا من الحصول على خبرات جديدة في مجال تصميم قاعدة البيانات وبنية الخادم. بإيضاحك هذه النقاط لكل نوع من المستمعين، ستحصل على موافقتهم ومشاركتهم أيضاً.
- اختر اللحظة المناسبة:
الآن أخر الأسبوع وقارب الدوام على نهايته ومديرك بمزاج سيء، لا تسأله عن لوحة مفاتيح جديدة الآن بل اختر وقتاً آخر لهذا الطلب، وفي حال الضرورة ستحتاج لسؤاله إذا كان يريد الاستماع لك أم لا.
- اختر أسلوبك:
بعض الناس يفضلون الشرح المقتضب والمختصر، بينما يفضل البعض الآخر الشرح الطويل. نفس الأمر بالنسبة للتوثيق وملفات المساعدة، فالبعض يفضل الشرح المختصر والمهم والبعض يفضل الشرح الطويل والمليء بالأمثلة.
- اهتم بالمظهر:
المحتوى فقط غير كافي، بل الشكل أيضاً مهم بقدره وربما أكثر. فعرض الشرائح السيئ المظهر أو التوثيق الغير منسق سيخرب عليك كل جهدك. حاول دائماً أن تظهر برامجك ومستنداتك بأجمل مظهر.
- شارك المستخدمين:
شارك بعض المستخدمين بعملية الاختبار للبرنامج وبملفات المساعدة وسجل ملاحظاتهم وآراءهم.
- راجع مستخدميك:
كثيراً ما ننسى إرسال رسالة لمستخدم أرسل شكوى أو مشكلة تم حلها، حتى ولو كنت مشغولاً فأرسل لهم بأنك سترد عليهم بأسرع وقت ممكن. هذا يعطيهم انطباعاً أفضل عنك وعن عملك.
النصيحة 10: المهم هو ما تقوله وكيف تقوله
كلمة أخيرة:
تعرفنا في هذا الفصل على فلسفة المبرمج العملي، كيف يفكر، كيف ينمي قدراته، كيف يقيم برامجه، كيف يوصل مطالبه ويتواصل مع الآخرين. أتمنى أن يكون هذا الكلام عوناً لكم في إحراز المزيد من التقدم ولاتنسى أن تتقيد بهذه النصائح فهي "خبرة العمر" لاثنين من أشهر المبرمجين. معد التلخيص : خالد الحوراني
disqus