هل تعرف ما هي الخوارزميات..أو هندسة البرامج؟
أحد أفضل مصادر فهم الخوارزميات.. هنا فى كوكب المعرفة
كتب: عبدالرحمن زين
لكي تقوم بكتابة أي كود برمجي لتقوم بتحويله بعد ذلك إلى برنامج يعمل على أي جهاز.. تحتاج إلى تخطيط لوظيفة البرنامج ومن ثم تخطيط وظائف هذا البرنامج.
من أهم الطرق بناء برنامج احترافي سليم وخالي من العيوب والأخطاء.. هو التخطيط السليم للبرنامج قبل البدء في انشائه على برامج كتابة الأكواد.
التخطيط لهذا البرنامج يتم فيما يعرف بالخوارزميات Algorithms.
في هذه المقالة، سوف نتعرف على الخوارزميات عن قرب أكثر ونبين مدى أهميتها لكاتب أي برنامج، كما سنتعرف على مصادر لتعلم هذه الخوارزميات بشكل احترافي من الصفر.
بعض النقاط التي سنتحدث عنها:
- ما هي الخوارزميات
- تاريخ الخوارزميات
- أنواع الخوارزميات
- مصادر تعلم الخوارزميات
ما هي الخوارزميات
الخوارزميات هي المخطط الذي يسبق كتابة الكود البرمجي الذي منه يتم انشاء البرنامج أو الموقع أو الشبكة.
لكي تقوم ببناء منزل مثلا، تحتاج إلى تخطيط لهذا المنزل.. من ناحية مكانه، طوله، عرضه، ارتفاعه، عدد النوافذ، أماكنها، وغير ذلك.
بدون هذا التخطيط لن يتم بناء هذا المنزل بشكل جيد أبدا، فسوف تظهر به بعض العيوب والأخطاء من ناحية البناء نفسه أو تنسيق المنزل، لذلك كان يجب أولا رسم تخطيطي للمنزل قبل بنائه وبكامل أبعاده.
هذا ما يحدث بالضبط لأي كود برمجي، فقبل الشروع في كتابة الأوامر البرمجية لبناء البرنامج أو الموقع.. نحتاج إلى تخطيط مسبق ودقيق لكل ما يجب على هذا البرنامج أدائه، وبذلك نكون قد تجنبنا الكثير من المشاكل منها:
التيه
بعض المبرمجين إذا قام بكتابة الأوامر البرمجية، يجد أنه قد أصابه التيه في منتصف الطريق ولا يعرف ما الذي يجب عليه كتابته أو الفكرة المطلوبه، لذلك يأخذ وقتا أطول بكثير من مبرمج خطط للبرنامج قبل كتابته.
عدم صلاحية التطوير
عند تخطيطك للبرنامج منذ البداية.. تكون قد قسمت كل الوظائف في أجزاء معينة أنت تعرف مكانها ووظيفة كل جزء، فإذا أردت تطوير وظيفة معينة فتستطيع بسهولة وذلك لأنك ستذهب إلى الجزء المطلوب وتقوم بتغيير أوامره.
في حالة ما إن لم تقم بتجهيز نموذج قبل كتابة الأوامر ستلاحظ أنك لا تعرف أين الجزء الذي تريد تطويره لأنه ستدمجه مع غيره وأنت لا تعرف.
الفريق غير مجدي
تخطيط البرنامج قبل كتابته أساسي في عمل أي فريق حتى يستطيع أعضاء الفريق معرفة أدوارهم بسهولة وتكون أدوارا مركبة على بعضها بحيث عند تجميعها نحصل على برنامج جيد.
عدم التخطيط للبرنامج منذ البداية يجعل الفريق لا يعرف ماذا يفعل وكيف يتم دمج الأجزاء مع بعضها في المرحلة الأخيرة، وظهور الكثير من الأخطاء ومن الممكن أن تكون أخطاء لا حل لها فيفشل الفريق في أداء مهمته.
هدر الوقت وموارد الجهاز
الخوارزميات لا تعني فقط تخطيط مسبق للبرنامج.. وإنما أيضا تخطيط لطريقة أداء الوظيفة نفسها داخل البرنامج، فربما كود برمجي يؤدي وظيفة معينة في 10 ثواني وكود برمجي آخر يؤدي نفس الوظيفة ولكن في 3 ثواني.
فالخوارزميات تساعدنا في تطوير جودة الكود البرمجي لتوفير الوقت والجهد والموارد.
لذلك، وجب علينا التخطيط أولا باستخدام الخوارزميات سواء داخل الأوامر البرمجية أو قبل الشروع فيها.
تاريخ الخوارزميات
مصطلح الخوارزميات مشتق من اسم العالم المسلم “محمد بن موسى الخوارزمي” المولود في مدينة خوارزم بإيران، عالم رياضيات من القرن التاسع. والاسم اللاتيني هو Algoritmi ويعني “نظام الأرقام العشري” وقد استخدم في هذا المعنى لقرون.
ظهرت الفكرة الحديثة للخوارزميات في اللغة الانجليزية في القرن التاسع عشر ، وأصبحت أكثر شيوعًا منذ 1950، بسبب ظهور أول أجهزة كمبيوتر متوفرة في الأسواق.
ويعتبر هذا العالم هو أول من عرف الصفر، ووضع الأرقام العربية الأصلية وليست الهندية المستعملة حاليا، وبدون علمه لما تم اختراع الحواسيب ولما استطعنا استنتاج علوم التفكير المنطقي والتخطيط الصحيح.
أنواع الخوارزميات
هناك الكثير من الخوارزميات المستعملة في البرمجه ولكن لنظهر الأول مكونات المخطط المسبق وبعدها نعطي أمثلة على الخوارزميات:
كما ترى معي عزيزي القارئ.. لدينا صورة توضح تخطيط مسبق لبرنامج معين هدفه هو التأكد من قيمة متغير يدعى i هل هو أكبر من رقم 6 أم لا.
هناك بعض الأشكال في الصورة لابد من فهم وظيفتها أولا
الشكل البيضاوي
وهو شكل يوضح فقط نقطة البداية والنهاية للمخطط، بمعنى أنه عند بداية البرنامج نقول “إبدا” داخل شكل بيضاوي وعند نهاية البرنامج نقول “انتهى” أيضا داخل الشكل البيضاوي.
الأسهم
وتدل الأسهم على اتجاه العملية، فدائما تبدأ من البداية وتذهب في طريقها للنهاية فتمر ببعض الرموز الأخرى لاكتمال أداء البرنامج.
أحيانا يحتاج السهم للعودة إلى نقطة ما في البداية بما يعرف بالتكرار أو Loops وهي أحد ركائز البرمجة الثلاثة.
الشكل المستطيل
وهذا الشكل يوضح ظهور عملية حسابية داخله، على سبيل المثال في الصورة.. كل مرة يضيف قيمة 1 على المتغير i فهي عملية رياضية.
الشكل متوازي الأضلاع
يوضح هذا الشكل عملية اظهار نتائج معينة أو تعريف متغيرات جديدة، على سبيل المثال في الصورة يعطي للبرنامج أمل بطباعة “ظهور نتائج أو قيم” المتغير i في كل مرة يتم تنفيذ شرط ما.
الشكل المعين
وهذا يدل على الشرطية، بحيث أنه يحتمل قيمتين فقط وهي نعم أم لا أو True, False وذلك عندما تكون القيمة أقل من 6 يقوم بطباقة المتغير i ومن ثم زيادة قيمة 2 على المتغير ومن ثم العودة مرة أخرى إلى الشرط.
فأي برنامج مهما كان حجمة، لابد بأن يمر بهذه الخطوات جميعا حتى يتم تخطيطه بشكل احترافي ومتقن.
والآن هي بنا نتعرف على بعض الخوارزميات المهمة في عالم البرمجة:
الترتيب Sorting
وهو ببساطة مجموعة من الخوارزميات تهدف إلى ترتيب القيم داخل مخزن ما من الأرقام، وكل خوارزمية تختلف عن نظيرتها في عوامل عديدة منها:
- السهولة
- استهلاك الوقت
- استهلاك موارد الجهاز
فكلما كانت الخوارزمية سهلة، كلما كان دليلا على استهلاكها موارد أكثر ووقت أكبر، ولكن ليس شرط في استهلاك خوارزمية معينة للوقت أكثر على أنها سيئة.. إذا لتخلى عنها المبرمجين، ولكن هناك خوارزميات تستهلك وقتا كبيرا ولا تستهلك موارد كثيرة للجهاز، وهناك من يستهلك موارد كبيرة للجهاز ولكن يختصر الوقت بشدة، لذلك يختلف استخدام الخوارزمية على حسب قدرات وامكانيات وسياسات صاحب البرنامج “لا مشكلة عنده في الوقت أم الوقت مهم، لا مشكلة في استهلاك الموارد أم الموارد محدودة” وهكذا.
ملاحظة صغيرة: يتم التعرف على تميز الخوارزمية عن غيرها بعامل يسمى BigO Notation وهو عامل يهدف إلى التعرف على كفائة الخوارزمية مقارنة بباقي الخوارزميات.
الشجرة الثنائية Binary Tree
هو نوع من الخوارزميات يهدف إلى ترتيب الأرقام بطريقة ثنائية، وذلك لتسهيل عملية أكبر وهي عملية البحث.
البحث أو Searching هي عملية لها الكثير من الخوارزميات ومن أهمها خوارزمية Binary Tree، مع بعض القيود البسيطة في هذه الخوارزمية وهو لابد من أن الأرقام مرتبة في مخازنها لكي تتم عملية البحث بدقة أكبر.
تستخدم الشجرة الثنائية Binary Tree كشكل الشجرة في خوارزمية مهمة جدا أخرى تدعى التكرار Recursion.
التكرار Recursion
هو عملية تكرار جزء كامل من الكود البرمجي بحيث في كل مرة يعود بنتائج مختلفة عن المرة التي قبلها.
تستخدم هذه الخوارزمية طريقى الشجرة الثنائية Binary Tree بحيث أنها تختصر في الوقت كثيرا وأنها في اتجاه واحد “كما قلنا في الشجرة الثنائية إما يسار وإما يمين” ولكن مشكلتها الكبرى هو استهلاكها لموارد الجهاز بشكل كبير جدا وذلك على حسب حجم جزئية الكود البرمجي الذي يتكرر.
تعتبر هذه الخوارزمية صعبة نوعا ما في بداية تعلمها، لذلك في تعلمها ننصحك بالتريث والهدوء ولا تحاول التطور فيها بسرعة.. فقط خذ وقتك في تعلمها.
القوائم المتصلة Linked Lists
هو نوع من الخوارزميات يهدف إلى اتصال المتغيرات ببعضها بترتيب ثابت.. حيث أن المتغيرات في الأصل تسبح في الذاكرة العشوائية للكمبيوتر RAM بدون ترتيب، فتمكننا هذه الخوارزمية من ترتيب متغيرات معينة مع بعضها البعض لكي نستفيد من القيم التي تحتويها.
تعتمد هذه الخاصية على برمجة معينة تدعى OOP أو البرمجة كائنية التوجه وهو نوع متقدم نسبيا حيث أنه يعتمد اعتمادا كبيرا على أساسيات البرمجة الثلاثة وهى:
- الجمل الخبرية : x = x + 1
- التكرار : for i in range(10)
- الشرط : if x == y
كل هذه مجرد أمثلة فقط لأساسيات البرمجة الثلاثة وتختلف طريقة التعامل معها وكتابتها من لغة برمجة إلى أخرى، ولكي تبدأ في مجال البرمجة بشكل هام لابد وأن تقرأ مقالة ما هى أهم لغات البرمجة ستفيدك كثيرا.
كيف أتعلم الخوارزميات
يعتبر كورس الخوارزميات Algorithms أو تراكيب البيانات Data Structure هما وجهان لعلمة واحدة، فكلاهما نفس المحتوى ويكملان بعضهما البعض ولكن مع اختلاف في نوع الخوارزميات المشروحه في كل كورس.
هناك العديد من المصادر التي أرشحها لك وهن:
محمد الدسوقي: شرح Data Structure
FCIH جامعة حلوان: شرح Data Structure
عادل نسيم: شرح Data Structure
قناة KMR:شرح Algorithms
فيديو شرح كامل : Algorithms
التخطيط للشيئ قبل انشائه يوفر عليك عناء ووقت كبير في المستقبل.. نصيحة خذها من شاب لديه في البرمجه ما يزيد على 7 سنوات من الخبرة.
كنت أقوم ببناء الموقع من الصفر بدون تخطيط وعندما أريد تطوير شيئا ولو يسيرا لا أستطيع فعل شيء لأني أصبت بحالة من التيه ولا اعرف من يؤدي إلى أين.
عندما دخلت سوق العمل وجدت الشركات تخطط في البداية قبل كتابة الكود البرمجي، ومن هنا عندما أريد تطوير شيء في البرنامج أعرف أين هو وأصل إليه مباشرة وبالتالي تطور مهاراتي بشكل سريع جدا.
التنظيم ثم التنظيم ثم التنظيم، لا أحد يستطيع التطور والتقدم بدون التنظيم.. التنظيم يساعدك في تخطي بعض الناس هم أعلى منك خبرة ولكن أقل منك تنظيما لذلك، لا تستهن بالتخطيط والتنظيم.
فيما سبق قدمنا كل ما هو متعلق بالخوارزميات من حيث ذكر مفهومها، وأنواعها، وكيفية التعامل معها.
[latest-selected-content limit=”5″ display=”title,excerpt” titletag=”strong” url=”yes” linktext=”إقرأ الموضوع كاملا” image=”full” elements=”3″ type=”post” status=”publish” dtag=”yes” orderby=”dateD” show_extra=”taxpos_category_before-title”]