[اخر الاخبار][6]

برمجة
سيكيورتي
لينكس

اصول "الشبحنه" ف الProblem Solving للمبرمجين

ايه الProblem Solving Skill ؟؟

عباره عن Skill بنستخدمها لما مشكله بتقابلنا ف حياتنا اليوميه او ع فترات مختلفه بس بنحتاج لها طريقه اسهل علشان نتغلب عليها او ممكن المشكله ديه يكون لسه محدش وصل لحل ليها. الامثله كتير قوى ف حياتنا وابسطها مثلا لما تكون مع اصحابك بره البيت وعايزين تطلبوا اكل فا واحد بياخد طلب كل واحد مننا وبيروح للكاشير يعمل الأوردر لكن ف اوقات كتير ع ما صاحبنا ده يوصل للكاشير يبقى نسى اول واحد طلب ايه بالظبط. وعلشان نتجنب المشكله ديه ممكن نكتب الطلبات ع ورقه او موبايل حد مننا او ان كل واحد يروح يعمل الاوردر بتاعه بنفسه. طبعا ديه حلول كتير وباختلاف الطرق المستخدمه و ده بيعتمد ف الاساس ع المكانيات التاحاه ليه ف الوقت ده و هنا بيظهر اسلوب لحل المشكله وازاى توصل لانسب حل للمشكله ديه بابسط الطرق المتاحه واقلها تكلفه. ومن هنا طلع حوار الProblem Solving.


طب تعالى نتكلم اكتر عن الProblem Solving
الموضوع ده مبينطبقش ع حياتنا اليوميه الشخصيه لا الموضوع ده بيحصل ف كل حته وكل وقت باختلاف الخصائص. ف الشغل ف المدرسه, الخروجه, المواصلات, المذاكره, ............الخ.
ومن هنا بدانا نطلع مبادئ او بمعنى خطوات لاى حد عايز يحل مشكله لازم يمشى عليها وفيه كورسات وكتب كتير بتكلم عن الموضوع ده.

ايه خطوات حل المشكلة ؟

بص يا صاحبى الخطوات ديه بتختلف من واحد لواحد ومن مشكله لمشكله وده بيعتمد على طبيعه المشكله وكمان على تفكير كل واحد والامكانيات الموجوده قدامك. بس دايما فيه خطوط عريضه الكل بيمشى عليها.

  • حدد المشكله : علشان تقدر تتغلب ع اى حاجه ف الحياه لازم تكون عارف كويس ايه الحاجه ديه وايه اللى بتعمله علشان تلاقى انسب حل يوفر عليك مجهود و امكانيات. زى لعبه الكوره لما فريقين بيتحدد معاد الماتش ما بنهم تلاقى وقتها الكوتش بيدرس طريقه لعب الفريق التانى وايه نقط ضعفهم وايه اسلوبهم ف اللعب.
  • اكتب حلولك : ف المثال اللى قلناه لما الكوتش عرف نقاط ضعفهم وطريقه لعبهم وقتها هيعمل اكتر من خطه واكتر من اسلوب شايفهم كويسين يلعبوا بيهم قصاد الفريق التانى.
  • جرب حلولك فرضيا : احنا قلنا انه طلع اكتر من خطه واسلوب للعب طب دلوقت المفروض اجرب الحلول ديه واشوف ايه اللى هيحصل. فمثلا لو حل من الحلول انه يلعب بخطه هجوم طب اما يلعب بالخطه ديه ايه اللى هيحصل ممكن تلاقى ان هجوم الفريق التانى قوى جدا وقتها انت دفاعك مش قد كده لانك مركز لاعيبتك ع الوسط والهجوم و وتها هتخسر. يبقى الخطه ديه مش هتنفع. وهكذا تجرب حلولك فرضيا وتشوف هيحصل ايه لو نفذت الخطه ديه.
  • نفذ الحل واتعلم منه : لما جربت خططك لقيت خطه هتلعب بيها وهتكسب بيها بعد ما جربتها فرضيا. بس حصل عكس كده ف الماتش والفريق التانى اخد اسلوب تانى ف اللعب وخسرت الماتش. وقتها لازم تتعلم من غلطك وهو انك المفروض يكون عندك خطه بديله لما خطتك الاساسيه تفشل تطبقها ف الشوط الثانى مثلا. وممكن تكسب و وقتها هتكون استفدت ان الSkill عندك بقى احسن واقوى.


طب انا عرفت دلوقت الخطوات والدنيا حلوه وجميله. طب ما تقلى كده انا هستفاد ايه بقى منها لما الSkill ديه تبقى كويسه عندى ؟؟
بص يا سيدى اى مكان بتشتغل فيه هتلاقى زيك وبخبرتك وبشهادتك وهتلاقى اللى احسن منك كمان. طب ايه اللى انت متميز فيه عنهم ؟؟ لما تكون الSkill بتاعتك كويسه وفتها انت دماغك الالماظات ديه مفيش حد بيعرف بيفكر زيها ممكن احسن منك وممكن اقل منك بس من خبرتك ومن الProblem اللى حليتها ف حياتك هيبقى ليه طريقه تفكير مختلفه عن الباقى وهنا ديه الحاجه اللى بتتميز بيها عن الباقى.


فيه احصائيات كتير دلوقت بتقول ان من الحاجات المطلوبه يكون عندك الSkill ديه وكمان بيختبروا طريقه تفكيره وهل انت حلك سريع ولا بطئ ومكلف ولا بسيط.


وفيه اكتر من مقاله بتتكلم عن اهميه الSkill ديه








طب احنا كده عرفنا اهميتها واقتنعنا بيها وانها ضروريه. انت عايز مننا ايه تانى ؟؟

بص يا صاحبى بقيت الكلام هنا بتتكلم عن المهتمين بالProblem Solving Skill من جانب الPrograming وازاى تدرب نفسك فيه وتبقى قوى وازاى تقدر توصل منه لوظائف كويسه.
معظم حياتنا دلوقت عباره عن Smartphone او Websites . دلوقت فيه تقدم اكتر بكتير من زمان والMachines واخده جزئ كبير من حياتنا اليوميه. وكل ده معمول بالبرمجه باللغات والاساليب المختلفه. علشان تكلم حد بقينا بنستخدم الماسنجر و الواتس اب وبنبعت رسائل على طول وبتوصل ف وقت قليل جدا. بقينا علشان نركب تاكس بنستخدم اوبر وكريم. لما نحتاج تقرا كتاب بتنزله من ع النت وبتقراه pdf. لما تحب تSearch عن حاجه معينه بتكتبها ف جوجل وبيطلعلك النتيجه بسرعه رهيبه. حاجات كتير قوى احنا بنستخدمها بصوره يوميه بس عمرنا ما حاولنا نسال نفسنا الناس ديه وصلت لافكارها ديه ازاى وعملت ايه بالظبط وايه الامكانيات المطلوبه علشان نعمل حاجه زيها.

كل اللى هما عملوه انهم تاملوا شويه ف حياتهم ودوروا ع مشكله او مش شرط انها مشكله ممكن تكون حاجه تافهم بس هما لقوا طريقه احسن واسهل واوفر بكتير من اللى موجوده. وطبعا علشان يعملوا حاجه زى كده لازم تكون الProblem Solving Skill كويسه عندهم بيحيث انهم بقدروا يقدموا حاجه كويسه وتخلي الناس تغير ليهم بدلا من الحاجه القديمه او انها حل جديد ويقدروا يستخدموه.

ازاى احسن من ال Problem Solving Skillف مجال البرمجه ؟
طبعا فيه طرق كتيره زى المسابقات بتاعت البرمجه وانك تدخل ف مجال العمل وتشوف المشكلات اللى هتواجهك وتحلها بطريقه كويسه وغيره من الطرق الكتيره. بس انا دلوقت طالب اعمل ايه علشان اقدر احسن الSkill ديه عندى وابقى كويس فيها لحد ما اتخرج. عندك طريق المسابقات وده هيعلمك كتير قوى وهتوصل بيه اسرع لما يكون معاك كوتش محترف وقوى والطريق ده انصح بيه اللى لسه داخل الكليه. وممكن طريق تانى انك تحل Problems كتير عن طريق الOnline Judges .

ايه الOnline Judge ؟؟
هو عباره عن Website بيديلك مساله تحلها فا بتكتب الكود بتاعك وبتبعته وهو بيقلك اذا كان حلك صح ولا غلط . طبعا مفيش حد بيبقى قاعد هناك  يجرب البرنامج بتاعتك ويقلك هو صح ولا غلط فا اللى بيحصل كالاتى :
انت بتبعت الكود فا بيتعمله Compile باللغه اللى انت اختارتها وانت بتSubmit الكود فا هنا بيجربوا الكود بتاعك ع شويه Test Cases ويقارن الOutput بتاعك بالOutput بتاعهم ويقلك صح ولا غلط .

Problem example
 المسألة هيكون شكلها ازاي ؟
بص يا سيدى عندك كل مسأله بتتكون من 4 اجزاء :
  • Problem Statement
  • Input & Output
  • Input & output Sample
تعالى نتكلم عنهم واحده واحده .
  • ايه هيا الProblem Statement  ؟
    هو عباره عن paragraph صغير (او كبير ع حسب المساله) بيشرحلك البرنامج اللى هتعمله ده هيكون بيعمل ايه بالظبط.
     مثال : عندنا ف الصوره اللى فوق اسم المساله 00 والسطر اللى بعدها بيشرحك البرنامج هيعمل ايه وهو انه برنامج بيقرا رقمين وبيطلع ناتج الجمع بتاعهم .

  • ايه الInput & Output ؟
    1. كل برنامج بيتدخله Input و ع حسب اللى دخلته البرنامج هيطلعلك الOutput اللى انته عملت البرناج علشانه .
      مثال : عندنا ف الصوره اللى فوق بيقلك اول سطر هيبقى فيه الInput رقم (T) وهو اللى هتستخدمه ف البرنامج ع انه عدد الTest Cases وبعدها بعدد الرقم اللى دخلهولك (Tهبقى فيه عدد اسطر كل سطر فيه رقمين مش سوالب وانه هيكون 32 bit Number.
    2. طب ده كان بالنسبه للInput اومال ايه نظام الOutput ؟؟
       ف المثال اللى فوق قالك انا عايز منك الOutput تكتبهولى بالصيغه ديه "A + B = C." الA ده هيبقى اول رقم دخلتهولك من الرقمين اللى هتجمعهم والB ده هيبقى تانى رقم انما الC ده هبقى الناتج . ب خلى بالك من الحاجات التانيه وهيا بعد اول رقم فيه مسافه وبعده علامه الجمع وبعدها مسافه وبعدها الرقم التانى ومسافه وعلامه الناتج ومسافه وبعد كده الناتج ونقطه . ومتنساش ان كل ده هبقى ف سطر لوحده يعنى مش عايز يتكتب قبله ولا بعده اى حاجه خالص .

  • ايه الInput & output Sample ؟؟بص يا سيدى ده عباره عن مثال صغير للى المفروض يحصل لما ترن البرنامج وتدخله الInput بالشكل ده بيطلعلك الOutput بالشكل ده . ممكن Sample واحده او اكتر .


ايه المشاكل اللي هتقابلك ؟

  • اهم حاجه لازم تحطها ف بالك ان ده عباره عن حاجه توماتيكيه خالص بمعنى انك متعملش حاجه اكتر من اللى طلبها منك ومتقلش عن اى حاجه من اللى طلبها منك.
  • زى مثلا ف المثال اللى فات نسيت تكتب النقطه اللى ف اخر كل سطر هيطلعلك رساله يقولك حلك غلط يا فا لازم تركز كويس قوى جدا خالص يعني علشان متحصلش مشكله زى ديه وتخليك تكره نفسك وانت بتحل مساله بسبب حاجه زى كده حاجه تافهه مش غلط ف الكود بتاعك لكن ف طريقه عرضك.
    ملحوظه : بعض المواقع بتوضح الغلط ايه بالظبط يعنى الغلط اللى فوق ده مواقع تطلعلك غلط وخلاص وتسيبك محتار هو الغلط منين ومواقع تانيه تطلعلك غلطك ايه بالظبط وف الحاله اللى فوق ديه هيقلك Presentation Error.
  •  ممكن يقلك اقرى من فايل وقتها لازم وغصب عنك تتعامل مع الFile وتقرى منه مش من الConsole وممكن يقلك اكتبلى ف File معين برضه هتكتبله ف المكان اللى طلبه منك.
  • احنا قلنا انه بيديلك Input & Output Sample وديه طبعا مش كل الTest Cases اللى هيجرب كودك عليها بس . لا ده هيجربها ع كتير قوى . فا يفضل انك تبقى تجرب كودك مع نفسك ع Input تانى انت تحطه بحيث انك اما تSubmit كودك يتقبل ع طول.
  • الOnline Judge مش بس بيقارن الOutput لا ده بيقارن حاجات تانيه كتير زى الوقت اللى البرنامج بيرن فيه لحد ما يطلعلى الOutput والبرنامج بتاعك بيستخدم قد ايه من الRAM وحاجات تانيه كمان بيقارنها.
  •  لما بتSubmit الكود بتاعك فيه مواقع بيتقولك ع الTest Cases اللى جربتها ع الكود بتاعك زى Top Coder و Codeforces وفيه مواقع تانيه مبتقلك عليهم زى UVA و A2OJ.
  •  مشكله تانيه بتقابل ناس كتير مننا وهيا الDatatypes اللى هتستخدمها ف البرنامج بمعنى انه لو طلب انه هيدخله رقم بيتكون من 30 رقم لازم تستخدم Datatype مناسبه لل 30 رقم دول.
    مثال المساله اللى فوق قاللك انه هيدخلك رقم 32 بت فلازم تعمل البرنامج يستقبل الرقم ده ف Datatype مناسبه ليه (مش شرط تكون ع قده بالظبط) بس ع الاقل تقدر تشيله . ونقطه كمان انك لازم تراعى الناتج من جمع الرقمين دول لانه ممكن وهو بيجرب الكود يدخلك رقمين الاتنين 32 bit Number وقتها ناتج الجمع لازم يتحط ف Datatype مناسبه له تقدر تشيله كامل.


ايه اللى بيحصل اما بSubmit الكود بتاعى ؟؟
  • بص يا سيدى بيحصل حاجه من اتنين ياما الكود بتاعك اتقبل وانت كده ف السليم . او ان الكود بتاعك فيه غلطه و وقتها فيه اكتر من سيناريو ممكن يحصل وده بيختلف من Website لWebsite تانى فيه مواثه بيبقى ليها سيناريوهاتها لوحدها بس اغلب المواقع زى بعض . وهما :
    1. WA : وديه بتطلع لما الكود بتاعك يبقى غلط . وديه حاجه عامه جدا مش محدد الغلط فين بالظبط .
      (
      WA >> Wrong Answer)
    2. PE : وديه لما تكون بتطلع الOutput المطلوب لكن فيه حاجه مش مظبوطه ف الشكل زى سطر زياده مثلا . اغلب المواقع لما بيكون عندك الError بيقلك WA.(PE >> Presentation Error)
    3. TLE  : وديه لما يكون البرنامج بتاعك بياخد وقت كبير او وقت اكبر من المطلوب.(TLE >> Time Limit Exceeded)

    4. MLE : وديه لما البرنامج يكون بيستهلك كميه اكبر من المسموح بيها من الRAM.(MLE >> Memory Limit Exceeded)
    5. RTE : وديه لما يحصل حاجه غلط ف البرنامج وقت الRUN زي انك تقسم ع صفر مثلا.(RTE >> Run Time Error)

تعالى بقى نعرف اشهر Online Judges :
1)      Top Coder
2)      Codeforces
3)      Hackerrank
4)      A2OJ
5)      وغيرهم كتير : Codility , LiveArchive , Timus , Project Euler , CodeJam , Codechef , SPOJ .........
طب انا لسه هبدا جديد ومعرفش ايه الطريق اللى همشى عليه ومعرفش اتعامل ازاى مع المواقع ديه. كل الحاجات ديه هنتكلم عنها مره تانيه ان شاء الله. استنونا بعد الفاصل(^-^)

إبدء الكتابة للبحث ثم أنقر enter