لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 06/15/23 في كل الموقع
-
لا شك تعلم الخوارزميات أحد النصائح المهمة التي وجهت لك إذا قررت تعلم البرمجة فكلمة خوارزمية تتردد كثيرًا في مجال البرمجة وغيرها من المجالات مثل الرياضيات والعلوم والمنطق وكل ما يتعلق بالحاسوب خصوصًا، فهي من أهم المفاهيم التي لا يمكن أن يستقيم لك تعلم البرمجة والرياضيات وعلوم الحاسب بدونها. إذا كنت تتساءل ما هي الخوارزمية، وكيف أتعلم الخوازميات، وما أهمية الخوارزميات في علوم الحاسب وفي البرمجة بشكل خاص، وما هي أنواع الخوارزميات التي علي تعلمها، وكيف أكتب أفضل خوارزمية فهذه المقالة لك، حيث سنستعرض في سياقها كل ما تحتاج معرفته عن الخوارزميات، ونوفر لك مجموعة من المصادر التعليمية العربية الغنية التي تساعدك على تعلم رموز الخوارزميات وطرق حل الخوارزميات في الحاسوب بأفضل طريقة. ما هي الخوارزمية؟ الخوارزمية algorithm هي مجموعة من التعليمات المرتبة لحل مشكلة ما في الرياضيات أو أي مشكلة تواجهك في الحياة اليومية خلال زمن محدد وعدد خطوات محدود. ينبغي أن تكون خطوات وتعليمات الخوارزمية واضحة ومُرتّبة بحيث تنتهي بحل المشكلة. فكّر في الخوارزمية كما لو كانت وصفة طبخ، إذ تقدّم الوصفة طريقة تحضير وجبة ما خطوة بخطوة، ابتداءً بالمقادير الضرورية للوجبة، وحتى آخر خطوة من تحضير الوجبة وتقديمها. ورغم أن مفهوم الخوارزميات يمكن أن يطبق في كل مجالات الحياة لكن تبرز أهمية الخوارزميات في علوم الحاسب بشكل خاص فهي تنظم عمل المبرمج وتعزز تفكيره المنطقي والرياضي وتمكنه من فهم المشكلات وتصورها بشكل أفضل قبل حلها وتطبيقها فعليًا على برامج حاسوبية مكتوبة بإحدى لغات البرمجة. تاريخ الخوارزميات تُعزى أقدم الخوارزميات المعروفة إلى البابليين، إذ عُثِر على أقدم لوح يحتوي تعليمات خوارزمية لإجراء عملية القسمة، ويعود تاريخه لسنة 2500 قبل الميلاد. وقد عثِر كذلك على خوارزميات حسابية تعود إلى المصريين القدامى تعود إلى سنة 1550 قبل الميلاد. ازداد استخدام الخوارزميات في حقبة اليونان، حيث ظهرت الكثير من الخوارزميات الرياضية التي ما تزال تُستخدم حتى يومنا هذا، مثل خوارزمية قسمة إقليدس التي تحسب خارج وباقي عملية القسمة. تطور مفهوم الخوارزميات في عصر الحضارة الإسلامية، إذ استخدم المسلمون الخوارزميات لحل المعادلات والمسائل الرياضية. ولعل أشهر هذه الخوارزميات هي خوارزمية حل المعادلات من الدرجة الثانية التي ذُكِرت في كتاب "حساب الجبر والمقابلة" لعالم الرياضيات المسلم محمد بن موسى الخوارزمي مؤسس علم الجبر، والذي تُنسب إليه كلمة خوارزمية في اللغة العربية، وكذلك الكلمة المقابلة لها في اللغات اللاتينية algorithm المُشتقة من الكلمة al-Khwārizmī، وهو الاسم الرومي للخوارزمي -وأيضًا كلمة الجبر algebra. استخدم الأوروبيون كلمة algorithm للدلالة على القواعد والتقنيات التي استخدمها الخوارزمي لحل المعادلات الجبرية، ثمّ عُمِّم هذا المصطلح ليشمل أيّ مجموعة من القواعد والتقنيات الساعية لحل مشكلة ما. استمر مفهوم الخوارزميات في التطور بعد الحقبة الإسلامية إبّان عصر النهضة، خصوصًا مع تطوّر أسس علم الحوسبة في القرن التاسع عشر وإنتاج أول خوارزمية يمكن تنفيذها على الحاسوب سنة 1840 على يد آدا لوفانس Ada Lovelace. ثمّ الصياغة النهائية لمفهوم الخوارزمية على يد آلان تورنغ Alan Turing عبر آلته الشهيرة آلة تورنغ (Turing machine). دورة علوم الحاسوب دورة تدريبية متكاملة تضعك على بوابة الاحتراف في تعلم أساسيات البرمجة وعلوم الحاسوب اشترك الآن أركان الخوارزمية تملك أي خوارزمية ثلاثة أركان رئيسية وهي: الدخل أو المدخلات: تمثل البيانات أو الأشياء الضرورية والمطلوبة التي تعمل عليها الخوارزمية وإن كان الدخل مؤلفًا من عدة عناصر، فإنّ تعداد عناصره يسمى حجم الدخل، مثلًا إن كان الدخل عبارة عن مصفوفة أو سلسلة نصية مؤلفة من n عنصر، فإنّ حجم الدخل سيساوي n. لو عدنا إلى مثال الطبخ فإنّ دخل خوارزمية طهي وجبة معينة ستكون هي المقادير المُستخدمة لإعداد الوجبة. متن الخوارزمية: تأخذ الخوارزمية الدخل، وتطبّق عليه سلسلة من خطوات المعالجة المتتابعة والمُحدّدة سلفًا. مثلًا، يشمل متن خوارزمية الطبخ كل عمليات تجهيز المقادير وإعدَادها وخطوات طهيها. الخرج أو المُخرجات: بعد أن تنتهي الخوارزمية من تنفيذ كافة الخطوات، تُنتج لنا خرجًا يمثل حل المشكلة. مثلًا خرج خوارزمية طهي وجبة سيكون هو الوجبة نفسها جاهزة ومطهيّة. على سبيل المثال إذا أردنا كتابة خوارزمية جداء عددين صحيحين ستكون أركان هذه الخوارزمية كالتالي: الدخل: هو العددان الصحيحان المطلوب حساب ناتج جدائهما x, y الخرج: هو ناتج الجداء z متن الخوارزمية: الخطوة 1: ابدأ الخطوة 2: قم بالتصريح عن ثلاثة أعداد صحيحة x و y و z الخطوة 3: أدخل قيم المدخلات x و y الخطوة 4: اضرب قيم x بـ y الخطوة 5: خزّن ناتج الضرب في z الخطوة 6: اعرض قيمة z الخطوة 7: توقف خطوات حل الخوارزميات عندما تواجهك أي مشكلة وتريد كتابة خوارزمية لحلها عليك أن تفكر في العثور على إجابات للأسئلة التالية: ما هو دخل الخوارزمية أي ما هي المعلومات التي أحتاج إلى الحصول عليها من المستخدم؟ ما هو خرج الخوارزمية أي ما هي المعلومات التي أحتاج لعرضها على المستخدم؟ ما هي الخطوات الرئيسية المطلوبة لحل هذه المشكلة؟ ما هو ترتيب تنفيذ هذه الخطوات؟ ما هي القرارات أو الشروط التي أحتاج مراعاتها عند معالجة المعلومات؟ هل هناك تعليمات بحاجة لأن أكررها عدة مرات؟ طرق تمثيل الخوارزميات يمكنك ثمثيل الخوارزمية أو التعبير عنها بعدة طرق: الطريقة الأولى من خلال الكلام المبعثر الذي يصف حل المشكلة بلغتك المحكية دون اتباع أي قواعد في الوصف. الطريقة الثانية من خلال ما يسمى الشيفرة الوهمية أو الزائفة pseudocode وهي مجموعة من التعليمات التي تحاكي في طريقة كتابتها لغات البرمجة لكنها لا تلتزم بقواعد البرمجة التي يجب الالتزام بها عندما تكتب شيفرات برمجية فعلية. الطريقة الثالثة تسمى المخططات الانسيابية Flowcharts، والمخطط الانسيابي هو تمثيل رسومي للخوارزمية يرسم باستخدام أنواع مختلفة من الرموز لكل رمز غرض معين وهو في تقسيم المشكلة الكبيرة إلى مشاكل صغيرة سهلة الفهم ويعد طريقة مناسبة للتواصل بين الأشخاص غير التقنيين. تتوافر عدة برامج مساعدة تساعدك على رسم المخططات الانسيابية، وللمزيد يمكنك مطالعة مقال كيفية رسم مخطط انسيابي Flowchart باستخدام PowerPoin. دورة الذكاء الاصطناعي احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة. اشترك الآن مثال على استخدام الخوارزمية في حياتنا اليومية على سبيل المثال إذا طلب منك كتابة خوارزمية توضح طريقة التعامل مع آلة صنع القهوة والشاي ستكون الخطوات التي عليك اتباعها كالتالي: معرفة إن كان الزبون يريد شرب الشاي أم القهوة إضافة الشاي أو القهوة إلى الكوب معرفة إن كان المستخدم يريد إضافة السكر للكوب إذا كان الجواب نعم أضف السكر إلى الكوب سكب الماء الساخن في الكوب للتعبير عن هذه الخوارزمية باستخدام الشيفرة الزائفة سنكتب التالي: START; /Would you like Tea or Coffee?/; if tea { Add Tea in cup; } else { Add Coffee in cup; } /Would you like Sugar?/; if Sugar { Add Sugar in cup; } Pour boiling water in cup END; وللتعبير عنها باستخدام المخطط الانسيابي سنرسم المخطط التالي: أمثلة على الخوارزميات لنفهم بشكل أفضل ما هي الخوارزميات دعنا نستعرض بعض الأمثلة الإضافية على خوارزميات لحل مسائل رياضية بسيطة ونتعرف على أركانها المختلفة وخطوات حلها ونعبر عنها بالطرق المختلفة. خوارزمية لحساب قيمة مضروب عدد في الرياضيات المضروب factorial أو عاملي العدد الصحيح n الذي يعبر عنه بالشكل التالي n! هو جداء كل الأعداد الطبيعية المساوية أو الأصغر من n ما عدا الصفر ولكتابة خوارزمية تحل هذه المسألة الرياضية علينا اتباع الخطوات التالية: الدخل: هو العدد الصحيح المطلوب حساب مضروبه n. الخرج: هو ناتج المضروب factorial المتن: الخطوة 1: إدخال العدد n المراد حساب مضروبه الخطوة 2: تعريف متغير مساعد وليكن i وهو عبارة عن عدد صحيح يأخذ قيمة متغيرة بين الواحد والعدد نفسه ويساعدنا على حساب القيمة المطلوبة. الخطوة 3: تهيئة المتغير factorial الذي يمثل القيمة المؤقتة للمضروب، والمتغير i الذي يمثل المرحلة التي نحن فيها أثناء تنفيذ الخوارزمية بالقيمة واحد أي نجعل factorial = 1 و i = 1 الخطوة 4: إعادة تعيين قيم المتغير factorial بالقيمة factorial*i والمتغير بالقيمة i+1 الخطوة 5: كرر الخطوة 3 حتى تصبح قيمة المتغير i أكبر تمامًا من n الخطوة 6: قم بإيقاف الخوارزمية وإعادة قيمة factorial التي تمثل مضروب العدد n الصورة التالية توضح طريقة رسم المخطط الانسيابي لحل خوارزمية حساب مضروب عدد: هل تعرف طرقًا أو أساليب أخرى لحل هذه المسألة؟ شاركنا إياها في قسم التعليقات أسفل المقال. خوارزمية للعثور على أكبر عدد من بين ثلاثة أعداد سنكتب حل هذه المسألة بأكثر من خوارزمية أو طريقة: طريقة 1: الدخل: 3 أرقام a و b و c الخرج: العدد الأكبر من بينها a أو b أو c المتن: الخطوة 1: أدخل الأرقام الثلاثة وخزنها في المتغيرات a و b و c على التوالي. الخطوة 2: تحقق من كون الرقم الأول a أكبر من الرقم الثاني b و الثالث c عندها اطبع أن a هو العدد الأكبر بين الكل وأنهي التنفيذ الخطوة 3: تحقق من كون b أكبر من a و c عندها اطبع أن b هو العدد الأكبر بين الكل وأنهي التنفيذ الخطوة 4: تحقق من كون c أكبر من a و b عندها اطبع أن c هو العدد الأكبر بين الكل وأنهي التنفيذ الكود الزائف للتعبير عن خوارزمية أكبر عدد بين 3 أعداد: Step-1 Start Step-2 Read three numbers a,b,c Step-3 If a>b then go to step-5 Step-4 IF b>c THEN print b is largest ELSE print c is largest ENDIF GO TO Step-6 Step-5 IF a>c THEN print a is largest ELSE print c is largest ENDIF Step-6 Stop والمخطط الانسيابي للتعبير عن الخوارزمية هو كما يلي: لعلك لاحظت أن الطريقة أعلاه تتطلب اختبار الكثير من الشروط حتى نصل لقرار حول العدد الأكبر من بين الأعداد الثلاثة، دعنا نحاول حلها بطريقة أبسط. كما تلاحظ فإن خوارزمية مقارنة ثلاثة أعداد حتى نصل لقرار حول العدد الأكبر من بين الأعداد الثلاثة تطلبت إجراء خطوتين والمرور مرتين على كل عدد، ولكن ماذا لو كان لدينا 10 أعداد أو أكثر ستزداد الخطوات ومرات المرور على الأعداد وسيزاد زمن الحل وتعقده لذا من الأفضل أن نفكر بطريقة أفضل تمكننا من المرور مرة واحدة على الأعداد ومعرفة العدد الأكبر من بينها. يمكن أن نخزن الأعداد في بنية واحدة مثل المصفوفة ثم نقرأها واحدًا تلو الآخر ونعتبر أن أول عدد هو الأكبر من بين كل الأعداد وكلما قرأنا عددًا جديدًا نقارنه بالذي قبله مباشرة فإن كان أكبر منه نبدل بينهما وإن كان أصغر منه أو يساويه لا نقوم بأي إجراء. لنطبق هذه الطريقة لإيجاد العدد الأكبر من بين ثلاثة أعداد طريقة 2: الدخل: 3 أرقام a و b و c الخرج: max الذي يمثل العدد الأكبر المتن: الخطوة 1: أدخل الأعداد الثلاثة وخزنها في a و b و c على التوالي الخطوة 3: افترض أن العدد الأول a هو الأكبر max = a الخطوة 4: إذا كان العدد الثاني b أكبر من max اجعل max = b الخطوة 5: إذا كان العدد الثالث c أكبر من أكبر من max اجعل max = c الخطوة 6: اعرض قيمة max الكود الزائف للتعبير عن هذه الخوارزمية لإيجاد أكبر عدد من بين 3 أعداد: Step-1 Start Step-2 Read three numbers: a,b,c Step-3 max = a Step-4 IF b > max THEN max = b ENDIF Step-5 IF c > max THEN max = c ENDIF Step-6 print max Step-7 Stop والمخطط الانسيابي للتعبير عن الخوارزمية هو كما يلي: هل لديك خوارزمية أخرى أفضل لحل هذه المسألة؟ يمكن أن تشاركنا إياها لنتناقش حولها. كما تلاحظ فقد مررنا مرة واحدة على الأعداد وعرفنا أيها أكبر، وهذا لن يختلف لو كان لدينا قائمة تحوي 100 عدد أو أكثر، هذا المفهوم ببساطته يسمى بكفاءة الخوارزمية أو تعقيد الخوارزمية والذي يشار إليه برمز Big O وستجده دومًا في أي موضوع يتناول الخوارزميات، لأن من شروط كتابة الخوارزميات أن تكون ذات كفاءة وأقل تعقيدًا ممكنًا. فكل الخوارزميات تعطي في النهاية الخرج الصحيح نفسه ولكن تتميز عن بعضها بكفاءة وكيفية وسرعة الوصول للخرج الصحيح، وهنا تبرز أهمية التفكير المنطقي وضرورة دراسة الخوارزميات وبنى المعطيات لمعرفة الحل الأكثر كفاءة لحل أي مسألة برمجية تواجهها وسنتحدث عن هذا الموضوع بالتفصيل تاليًا في فقرة "تحليل الخوارزميات". هل ترغب في تطوير موقع إلكتروني احترافي؟ وظّف مطور ويب خبير لبرمجة موقعك من مستقل أضف مشروعك الآن تحويل الخوارزمية إلى برنامج حاسوبي إن طرق تمثيل الخوارزمية مفهومة وواضحة لنا كبشر لكنها في الواقع غير قابلة للاستخدام والتطبيق على الحاسوب، لأنّ الخوارزميات خطط عامة ومجرّدة لحل المشاكل. فإن أردنا استخدام الخوارزمية لحل مشكلة ما، فسيكون علينا ترجمتها أو التعبير عنها بإحدى لغات البرمجة كي يفهمها الحاسوب ويعيد لنا النتائج المطلوبة، هذه العملية تُسمّى تحقيق الخوارزمية أو تنفيذ الخوارزمية implementation وينتج عن تحويل الخوارزمية إلى إحدى لغات البرمجة شيفرة برمجية قابلة للتنفيذ execution على الحاسوب. لنضرب مثالًا على ذلك سنحول الخوارزمية التي ذكرناها آنفًا والتي تحاول إيجاد أكبر عدد من بين ثلاثة أعداد إلى برنامج مكتوب بلغة بايثون حتى يتسنّى لنا تنفيذها على الحاسوب. تنفيذ خوارزمية إيجاد أكبر عدد من بين ثلاثة أعداد في لغة بايثون برنامج بايثون لإيجاد أكبر عدد من بين ثلاثة أعداد a = int(input('a= ')) b = int(input('b= ')) c = int(input('c= ')) max = a if b > max : max = b if c > max : max = c print(max, "هو العدد الأكبر") يمكنك الآن تنفيذ هذه الشيفرة على أيّ حاسوب وستعمل كما هو متوقع. كما يمكنك بالطبع تحقيق الخوارزمية بأيّ لغة برمجة أخرى تريدها مثل C أو C++ أو جافا أو جافا سكريبت أو R …إلخ. تمرين ما رأيك أن تجرب تحويل الخوارزمية السابقة إلى برنامج حاسوبي يطلب من المستخدم إدخال مجموعة أعداد تفصل بينها فراغات مثل 4 9 8 7 10 ليحللها البرنامج بتلك الخوارزمية ويعطي العدد الأكبر من بينها (مساعدة: ستحاول استعمال حلقات التكرار loops) مجالات استخدام الخوارزميات كانت الخوارزميات تُستخدم طوال آلاف السنوات من قبل علماء الرياضيات لحل المعادلات والمسائل الرياضية وما تزال إلى يومنا هذا. فالخوارزميات جزء لا يتجزأ من الرياضيات ابتداءً من حل المعادلات الجبرية، وحتى كتابة البراهين المنطقية. وتستخدم الخوارزميات اليوم على نطاق واسع في مجال البرمجة وعلوم الحاسب، فالحاسوب ليس سوى آلة تنفذ الأوامر بكفاءة وسرعة على عكس البشر، الذين يفهمون المطلوب ويحللونه ويفكرون بأدمغتهم لوضع الخوارزميات ثم ينفذونها بواسطة الحاسوب. لذلك، تحتاج إلى تبسيط ووضع خوارزمية للحاسوب لينفذها لك بحذافيرها وبأفضل أداء ممكن. وكل البرامج والتطبيقات وأنظمة التشغيل تعتمد على الخوارزميات وتستخدمها من أجل معالجة البيانات وإجراء الحسابات وحلّ مشكلات العمل كما تستخدم الخوارزميات في عدة مجالات أخرى مثل الفيزياء وتحليل اللغات والاقتصاد وغيرها من مناحي الحياة وهي تطبق اليوم في كل شيء نستخدمه من حولنا ومن أبرز الأمثلة على مجالات استخدام الخوارزميات في حياتنا اليومية نذكر: خوارزميات التواصل الاجتماعي التي تتحكم فيما تراه على مواقع التواصل الاجتماعي خاصتك خوارزميات محركات البحث التي تحسن عمليات البحث وتتنبأ بما سيكتبه المستخدمون. خوارزميات كشف الجرائم باستخدام تقنيات التعرف على الوجه ورسم الخرائط التنبؤية لتوقع الجرائم واتخاذ الإجراءات لمنعها. خوارزميات التشفير التي تقوم بتحويل نص مفهوم إلى نص غير مفهوم وتُستخدم لحماية البيانات المهمة بحيث لا يفهمها إلّا الأشخاص الذين وجهت إليهم. خوارزميات التنبؤ بحالة الطقس ودرجة الحرارة بمساعدة البيانات السابقة وهي تفيد في عدة مجالات أهمها الزراعة والطيران والاتصالات والحروب. خوارزميات تحديد مواعيد وصول الحافلات وجدولتها بأفضل طريقة. خوارزميات تحديد مواقف السيارات المتاحة لمساعدة السائقين على العثور على وجهتم بسرعة وسهولة. خوارزميات توجيه المركبات إلى أفضل طريق. خوارزميات تعديل مسارات الصواريخ. وغيرها الكثير من مجالات الحياة المختلفة في الاقتصاد والعلوم والإعلام وما شابه التي تلعب فيها الخوارزميات دورًا فعالًا وحيويًا، على سبيل المثال عرضت نيتفليكس جائزة قدرها مليون دولار لمن يطور خوارزميتها المستخدمة في اقتراح الأفلام والمسلسلات على الزوار ويجعلها أفضل بنسبة 10%. مواصفات الخوارزمية الجيدة قد تتساءل وهل هناك خوارزمية جيدة وأخرى ليست كذلك؟ وما الذي يجعل الخوارزمية جيدة؟ والجواب هو نعم فكما أنّ هناك وصفات طبخة سيئة ولا تنجح، فكذلك هناك خوارزميات سيئة وغير عملية ولا تصلح للتطبيق، فليست كل سلسلة متتابعة من الخطوات والتعليمات خوارزمية، بل لابد أن تتوفر فيها شروط خاصة تجعلها عملية وقابلة للتطبيق مثل: الوضوح: ينبغي أن تكون كل خطوة من خطوات الخوارزمية واضحة ومفهومة ولا لبس فيها. المحدودية: يجب أن تكون الخوارزمية محدودة، أي أن تكون خطواتها منتهية، وتُنفّذ في مدة زمنية منتهية. فإن كان عدد الخطوات غير منته، أو كان بإمكان إحدى الخطوات أن تستغرق مدة لا منتهية، فإنّها ليست خوارزمية. البساطة والواقعية: ينبغي أن تكون الخوارزمية قابلة للتطبيق بالموارد والتقنيات المتاحة، ولا ينبغي أن تعتمد على تقنية مستقبلية أو غامضة. قابلية التطبيق: يعني الاستقلالية عن لغات البرمجة أي لا ينبغي أن تكون الخوارزمية مرتبطة بلغة برمجة محددة، ويجب أن تكون مجردة وعامّة بحيث تركز على العمل الأساسي للبرنامج بدلًا من التركيز على خصائص لغة برمجة معينة وبعدها يمكن تطبيقها عبر أي لغة برمجة. صحة النتائج: يجب أن تقوم الخوارزمية بتنفيذ المهمة المطلوبة منها دون أخطاء في التنفيذ أو عدم دقة في النتائج. الكفاءة والفعالية: ينبغي أن تستخدم الخوارزمية أفضل الطرق لحل المشكلة بأسرع وقت تنفيذ أو ما يعرف بالتعقيد الزماني للخوارزمية وأقل مساحة ذاكرة أو ما يعرف بالتعقيد المكاني للخوارزمية. هل أحتاج إلى معرفة الرياضيات لتعلم الخوارزميات؟ الجواب هو نعم ولا، وكي أوضح إجابتي أكثر ، فالخوارزميات تُستخدم أساسًا لحل مشاكل حسابية، مثل متوسط مجموعة من القيم، أو أقصر مسار بين نقطتين في شعبة، أو أسهل طريقة لرسم شكل هندسي، أو ترتيب عناصر مصفوفة. كل هذه المشاكل تنطوي على قدر من الرياضيات الأساسية، لذلك فالجواب هو نعم. لكن إن كنت تقصد بمعرفة الرياضيات أنّه ينبغي أن تكون لك شهادة جامعية في الرياضيات، أو تكون لك معرفة عميقة أو حتى متوسطة بها، فالجواب سيكون لا لأنّ الخوارزميات لا تتطلب معرفة عميقة بمفاهيم الرياضيات. تذكر أنّ الخوارزميات هي طرق عامة لحل المشاكل والمسائل الحسابية، لذلك فمقدار الرياضيات التي تحتاجها يتعلق بنوع المشكلة التي تريد حلها، إن كنت تريد حل مشكلة معقدة، مثل التنبؤ بالمناخ، فعلى الأرجح أنّ الخوارزمية ستكون معقدة وتحتاج إلى معرفة متقدمة بالرياضيات لكن لا تدع هذا يخيفك ويصدّك عن تعلم الخوارزميات، إذ أنّ معظم المسائل التي ستُواجهها هي مشاكل لا تحتاج إلا إلى معرفة بسيطة بأساسيات الرياضيات، مثل العمليات الحسابية البسيطة. خلاصة القول هو أنك لا تحتاج إلى تعلم الرياضيات لكي تتعلم الخوارزميات، فما دمت تفهم كيف تجري العمليات الحسابية البسيطة، مثل الجمع والضرب، وبعض المفاهيم البسيطة، مثل المجموعات والدوال وطرق حل المعادلات فيمكنك أن تتعلم الخوارزميات بسهولة. لكن النقطة الأهم هي الارتباط بين التفكير المنطقي أو طرق حل المشكلات وبين الخوارزميات والبرمجة، فالتفكير المنطقي هو بلا شك مهارة ضرورية للبشر عمومًا وللمبرمجين على وجه الخصوص ومن الضروري تعليمه للأطفال من سن مبكرة لمنحهم هذه المهارة المهمة والضرورية جدًا لنجاحهم في مستقبلهم المهني. تحليل الخوارزميات الخوارزمية هي في الأصل خطة لحل مشكلة حسابية فإن لم تكن تملك خطة مُسبقة لحل مشكلة معقدة، فستفشل محاولاتك على الأرجح لحل تلك المشكلة وحتى لو كانت المشكلة بسيطة، فقد يكون هناك العديد من الحلول، وبعض هذه الحلول أسرع وأكفأ من بعض. من هنا تأتي أهمية تحليل الخوارزميات الذي يهتم بدراسة كفاءة الخوارزميات من ناحية الوقت والذاكرة التي يحتاجها تنفيذ الخوارزمية واختيار الحل الأبسط والأسرع والأقل استهلاكًا للموارد، أو بلغة الحوسبة، تريد أن تخفض تعقيد الخوارزمية Algorithms Complexity إلى أقصى حد ممكن. يشمل تعقيد الخوارزمية كل الموارد الضرورية لحل المشكلة، إن كانت الخوارزمية خوارزميةَ طبخ، فإنّ تعقيدها سيكون الوقت والطاقة اللازمة لإعداد الوجبة. أما إن كانت الخوارزمية تسعى لحل مشكلة في الرياضيات، سيكون تعقيدها هو الوقت اللازم لإجراء خطوات الخوارزمية. أما إن كانت الخوارزمية حاسوبية، فإنّ تعقيدها سيكون الوقت ومساحة الذاكرة الضروريان لتنفيذ خطوات الخوارزمية. لهذا السبب ابتكر العلماء فرعًا كاملًا في علم الخوارزميات مُخصّصًا لتقدير تعقيد الخوارزميات يُسمّى نظرية التعقيد، والذي يصنّف الخوارزميات إلى أصناف بحسب تعقيدها الزماني Time Complexity الذي يصف مقدار الوقت الذي يستغرقه تنفيذ الخوارزمية. وتعقيدها المكاني أو ما يسمى بتعقيد المساحة Space Complexity الذي يمثل عدد خلايا الذاكرة اللازمة لتنفيذ عمليات الخوارزمية مع استثناء المساحة المخصصة لدخل الخوارزمية. يتم التعبير عن تعقيد الخوارزمية بتدوين خاص يسمى Big O notation وهو طريقة لوصف تعقيد الخوارزمية الزمني باستخدام مصطلحات جبرية وأدنى هذه الأصناف هو الصنف O(1)، والذي يعني أنّ الخوارزمية تستغرق وقتا ثابتًا لحل المشكلة مهما كان حجم الدخل كما في خوارزمية معرفة كون العدد فردي أم زوجي مثلًا أو خوازرمية طباعة أول رقم من بين قائمة من الأرقام، أما الصنف O(n) فَيعني أنّ مدة تنفيذ الخوارزمية متناسبة مع حجم الدخل n كما في خوارزمية حساب مضروب العدد وخوازمية إيجاد أكبر عدد من بين مجموعة من الأعداد. وإليك قائمة مختصرة بأشهر أنواع تعقيد الخوارزميات وفق تدوين Big O ودلالة كل منها: O(1) تعقيد زمني ثابت: أي تستغرق الخوارزمية نفس الزمن مهما كان حجم الدخل. O(n) تعقيد زمني خطي: أي يتناسب زمن تنفيذ الخوارزمية بشكل خطي مع حجم الدخل، بمعنى آخر إذا كان حجم الدخل n فإن عدد الخطوات المطلوب لحلها سيكون n على الأكثر. O(sqrt(n)) تعقيد جذر تربيعي: أي إذا كان حجم دخل الخوازرمية هو n سوف يتناسب زمن تنفيذ الخوارزمية مع الجذر التربيعي لقيمة الدخل. O(n^c) تعقيد كثير الحدود: يتناسب زمن تنفيذ الخوارزمية مع حجم الدخل مرفوع للأس c وله أنواع فقد يكون تعقيد زمني تربيعي O (n^²) أي يتناسب زمن تنفيذ الخوارزمية مع مكعب حجم الدخل أو تعقيد زمني تكعيبي O(n^3) أي يتناسب زمن تنفيذ الخوارزمية مع مكعب حجم الدخل. O(log n) تعقيد لوغاريتمي: تناسب زمن تنفيذ الخوارزمية مع لوغاريتم حجم الدخل. O(n log n) تعقيد لوغاريتمي خطي: وهو أبطأ قليلاً من الخطي O(2^n) تعقيد أسي: وفيه تتضاعف خطوات الخوارزمية بشكل أسي مع زيادة حجم الدخل. O(n!) تعقيد عاملي: أي يتناسب زمن الخوارزمية مع قيمة عاملي الدخل أي ضرب جميع الأعداد الصحيحة الموجبة الأصغر من قيمة الدخل. يمكنك أن تجد حلًا للمشاكل بدون الخوارزميات، لكن من النادر أن يكون ذلك الحل الذي وجدته هو الحل الأفضل والأكفأ، وهذه فائدة تحليل الخوارزميات فهو يمكّنك من العثور على الحل الأمثل والأنسب والأقل استهلاكًا للموارد. للمزيد من المعلومات أنصح بمطالعة مقال مدخل إلى تحليل الخوارزميات ومقال الدليل الشامل عن تعقيد الخوارزميات أنواع الخوارزميات البرمجية الخوارزميات هي خطط عامة لحل المشاكل وتتنوع أساليب وأنواع الخوارزميات بحسب الأسلوب الذي تتبعه الخوارزمية لحل المشكلة أو بحسب نوع المشكلة التي تحلها، وبناء على ذلك يمكن أن نجد أنواعًا مختلفة من الخوارزميات ومن أبرزها: خوارزميات القوة الغاشمة Brute force algorithms : تحاول الخوارزميات من هذا النوع حل المشكلة بطريقة مباشرة وتمر بجميع الخيارات الممكنة حتى تتمكن من العثور على حل لهذه المشكلة. الخوارزميات الجشعة Greedy algorithms: تحاول الخوارزميات الجشعة حل المشكلة خطوة فخطوة، بحيث تقترب رويدًا رويدًا من الحل العام للمشكلة. خوارزميات البرمجة الديناميكية Dynamic Programming: تقسّم خوارزميات البرمجة الديناميكية المشكلة إلى مشاكل فرعية أبسط، ثمّ تحل تلك المشاكل الفرعية لاستنتاج الحل النهائي خوارزميات فرق تسد Divide and conquer algorithms: تقسِّم خوارزميات فرِّق تسد المسألة إلى مسائل فرعية تشبه المسألة الأصلية، ثمّ تحلها وتدمج الحلول لتقديم حلٍّ المسألة الأصلية. خوارزميات التعقب الخلفي Backtracking algorithms: تحاول خوارزميات التعقب الخلفي حل المشكلة تعاوديًا عبر بناء الحل تصاعديًا خطوة فخطوة، مع حذف الحلول التي لا تستجيب للقيود التي تفرضها المسألة المُراد حلها في أيّ وقت أثناء تنفيذ الخوارزمية. خوارزميات الترتيب Sort algorithms: هي خوارزميات ترتب مجموعة من العناصر القائمة في ترتيب معين رقمي أو هجائي. والفرز هو أحد الخطوات الهامة في الخوارزميات الأكثر تعقيدًا، توجد عدة خوارزميات تمكننا من تحقيق عملية الفرز ولكل منها ميزاتها ومحدوديتها. خوارزميات البحث Search algorithms: هي خوارزميات تقوم بتحديد موقع بيانات محددة بين مجموعة من البيانات أي أنها تبحث عن البيانات المخزنة ضمن بعض الهياكل أو بنى البيانات وتقوم باستردادها. خوارزميات التعلم الآلي: هي خوارزميات تحاول التعلم بناءً على مجموعة من حالات اتخاذ القرار السابقة كي تتمكن من اتخاذ قرارات معقدة بناءً عليها. خوارزميات التشفير: هي الخوارزميات التي تقوم بتحويل نص مقروء إلى نص غير مقروء يُعرف باسم النص المشفر بحيث يمكن للأطراف المصرح لهم فقط بفهم المعلومات الموجودة في هذا النص وهي خوارزميات هامة جدًا في مجال أمن البيانات الحساسة والحفاظ على الخصوصية. كانت تلك بعض أنواع وتصنيفات الخوارزميات الأكثر شيوعًا وهناك بالطبع العديد من الخوارزميات الأخرى للعديد من الحالات المختلفة. هناك أيضًا طرق أخرى يمكن تطبيقها بسهولة في التطبيقات مثل خوارزمية Dijkstra و Cycle Detection و Kruskal Minimum Spanning Trees فهي من الخوارزميات الأساسية للمبتدئين للتعلم منها. أهمية الخوارزميات في البرمجة هناك من قد يقول أنّ تعلم الخوارزميات تَرفٌ، وهو غير ضروري لكتابة البرامج والتطبيقات، وأنّه يمكن للمبرمج أن يكتب برامجه مباشرة دون الحاجة إلى مفاهيم الخوارزميات. صحيح أنّه ليس عليك أن تكون خبيرًا في الخوارزميات لتَكون مبرمجًا، لكن لا يمكنك أن تكون مبرمجًا بارعًا ومحترفًا دون أن تتعلم فن تصميم الخوارزميات. يوفر تعلم الخوارزميات للمبرمج العديد من الفوائد أبرزها: القدرة على حل المشكلات بشكل أفضل الاستخدام الفعال للموارد الحاسوبية يوفر وقت البرمجة يجعل منك مبرمجًا أفضل لنناقش كل فائدة منها بمزيد من التفصيل ونتعرف كيف يسهم تعلم الخوارزميات في تعزيزها. القدرة على حل المشكلات بشكل أفضل سيحسن تعلمك لطرق حل الخوارزميات من قدرتك على حل المشكلات بصورة عامة والمشكلات البرمجية على وجه الخصوص، ويكسبك مرونة ذهنية في التفكير في الحلول ويساعدك لاحقًا في كتابة البرامج الحاسوبية المتنوعة أيًا كانت اللغة البرمجية المستخدمة خصوصًا بأنّ الخوارزميات مستقلة عن لغات البرمجة، لذا يمكنك استخدامها مهما كانت لغة البرمجة التي تعمل عليها. الاستخدام الفعال للموارد يضمن لك اختيار الخوارزمية الصحيحة الاستخدام المناسب للموارد مثل الذاكرة والتخزين والشبكة وغيرها. فلا يكفي أن تكون الفكرة التي بنيت عليها البرنامج أو التطبيق مفيدة ومبتكرة، ينبغي أن تكون عملية بحيث ينفّذها الحاسوب أو الجوال في وقت معقول وموارد محدودة، فما فائدة تطبيق رسم يحتاج دقيقة كاملة ليرسم مربعًا، وما فائدة برنامج يحتاج إلى 10 جيجابايت من الذاكرة ليعمل! توفير وقت البرمجة يوفر عليك تعلم الخوارزميات الكثير من الوقت، إذ أنّ معظم المشاكل والمسائل التي قد تعترضك أثناء كتابة البرامج لها حلول جاهزة على هيئة خوارزميات مُحسّنة وسريعة، ما يغنيك عن إعادة اختراع العجلة في كل مرة تعترضك مشكلة ما، لأنّ هناك من حلّها قبلك على الأرجح وأعدّها على هيئة خوارزمية وكل ما عليك فعله هو تحويلها إلى لغة البرمجة التي تستعملها ثم تنفّذها وقد لا تضطر حتى إلى تنفيذها فمعظم الخوارزميات الشهيرة والفعالة مثل خوارزميات البحث والفرز تدمج في لغات البرمجة بشكل مكتبات جاهزة يمكنك استخدامها في شيفراتك البرمجية. الخوارزميات تجعل منك مبرمجًا أفضل تعلم الخوارزميات سيجعلك مبرمجًا أفضل وأكثر احترافية، فسَواء كنت متخصصًا في تطبيقات الجوال أو تطبيقات سطح المكتب، أو في بناء المواقع أو تصميم الألعاب أو غيرها من مجالات البرمجة، فإنّ تعلم الخوارزميات سيوسع أفق تفكيرك البرمجي ويساعدك على تطوير برامج أجود وأسرع وأكثر موثوقية. أهم مصادر تعلم الخوارزميات هناك للأسف ضعف في المحتوى العربي التقني، هذا الضعف يظهر أكثر ما يظهر في مجالات الخوارزميات. ولسدّ هذا القصور في المحتوى العربي فقد وفرت أكاديمية حسوب العديد من مصادر التعلم القيمة باللغة العربية. فنظرًا للأهمية الكبيرة للخوارزميات في كافة مجالات البرمجة، وفي غيرها من المجالات مثل الرياضيات والتنمية وغيرها، فقد وفرت لك أكاديمية حسوب دورة علوم الحاسب والتي تتضمن مسارات متعددة يحتاجها أي مبتدئ في تعلم البرمجة من أهمها مسار الخوارزميات وبنى المعطيات الذي يعلمك خطوة بخطوة كيفية كتابة الخوارزميات وتحليلها ويعرفك على أهم الخوارزميات التي تفيدك في عملك البرمجي مثل خوارزميات البحث والترتيب والخوارزميات الرياضية وخوارزميات الرسوم البيانية وغيرها الكثير. كما نشرت الأكاديمية سلسلة الخوارزميات للمحترفين التي تشرح الخوارزميات بالتفصيل وتغطّي كافة مفاهيمها الأساسية مثل مفهوم التعقيد لتقدير الموارد التي تستهلكها البرامج كالوقت والذاكرة. إضافة إلى مفاهيم البرمجة الديناميكية، وبعض أنماط الخوارزميات العامة. تلك السلسلة غنية بالأمثلة التطبيقية، إذ تستعرض الكثير من الخوارزميات لحل بعض المشاكل التقليدية في علم الحاسب خصوصًا تلك المتعلقة بالأشجار وترتيب المصفوفات والبحث، علاوة على طائفة من الخوارزميات المتنوعة في مجالات الجبر والهندسة ونظرية الأعداد. كما أن السلسلة تنفذ الخوارزميات التي تستعرضها من خلال العديد من لغات البرمجة، فمهما كانت لغة البرمجة خاصتك، سواء كانت بايثون أو جافا أو C++/C أو #C أو جافا سكريبت، فستجد أمثلة بهذه اللغات وغيرها في هذا الكتاب. وستجد كذلك توثيقًا شاملًا عن الخوارزميات في موسوعة حسوب يضم توثيقات لأهم الخوارزميات المُستخدمة في البرمجة. وننصحك كذلك بأن تشترك في قناة أكاديمية حسوب على يوتيوب وستجد فيها الكثير من الدروس المفيدة والمواضيع الشيقة حول البرمجة والخوارزميات والتفكير المنطقي وغيرها الكثير. وأخيرًا إذا كنت تتساءل هل يجب علي كمبتدئ أن أتعلم الخوارزميات أولًا أم أتعلم إحدى لغات البرمجة أولًا فنصيحتي لك أن تبدأ كخطوة أولى بالتعرف على أساسيات البرمجة وبعد التمكن منها يمكنك البدء بتعلم الخوارزميات وتطوير تفكيرك البرمجي والخوارزمي على التوازي في رحلة التعلم حتى تصل للاحتراف في كليهما. إذا أتقنت تعلم الأساسيات يمكن أن تنتقل لتعلم الأمور المتقدمة وستجد في قسم البرمجة ضمن وتحديدًا في قسم "مقالات برمجة متقدمة" في أكاديمية حسوب مجموعة متنوعة من المقالات المتقدمة التي تزيد معرفتك وخبرتك في مجال الخوارزميات وفي حال واجهك أي سؤال يمكنك طرحه في قسم الأسئلة والأجوبة في الأكاديمية. الخلاصة تعرفنا في مقال اليوم ما هي الخوارزمية وأهمية الخوارزميات في علوم الحاسب وهندسة البرمجيات، وتعرفنا على خطوات حل الخوارزمية وطرق التعبير عن الخوارزميات بالشيفرة الوهمية والمخططات الانسيابية ثم تحويلها بعد ذلك إلى برامج حاسوبية من خلال الأمثلة العملية البسيطة التي تناسب المبتدئين. كما تعرفنا في الختام على أبرز الفوائد التي تجنيها كمبرمج من تعلم الخوارزميات، وأهم المراجع العربية التي تشرح الخوارزميات من الصفر للاحتراف، فإذا كنت تسعى لتكون مبرمجًا محترفًا فتعلم الخوارزميات أحد الأمور المهمة التي ينبغي أن تضعها في الحسبان لتساعدك على تحقيق هذا الهدف. اقرأ أيضًا أمثلة عن أنواع الخوارزميات تعرف على تخصص هندسة البرمجيات مهندس البرمجيات من هو وما هي مهامه ما هي مدة تعلم البرمجة؟1 نقطة
-
1 نقطة
-
1 نقطة
-
path:'',element:<layout/>, children:[ {path:true, element:<home/>} {path:true, element:<navbar/>} {path:true, element:<login/>} {path:true, element:<register/>} {path:true, element:<movies/>} {path:true, element:<layout/>} {path:true, element:<footer/>} {path:"*", element: <notfound/>} ] return ( <> <routerprovider router=(routes)></routerprovider> </> ); export default app;1 نقطة
-
1 نقطة
-
انا اعمل في شركة سعودية (وفي السعودية)، ودخل شريك جديد واشترى حصص بعض الشركاء، كان دخوله شهر 9، والان يطالب أن يدخل في ارباح العام كله وليس من تاريخ انضمامه، لايوجد في عقد التاسيس او الاتفاقية ماينص على ان شريك في كامل ارباح العام، فمنذ متى يتم حساب حصته من الارباح (عن أي مدة)؟ وحاب اعرف المرجع اللي استند عليه عشان هو طالب اثبات المرجع القانوني المالي.1 نقطة
-
انا اعمل بbootstrap في هذا المشروع ولاحظت ان الcard في المشروع التالي لا يريد تطبيق اي margin-top اضافي بcss او mt ب bootstrap وعند اضافة المزيد من الcards بواسطة الgrid systemتظهر تحت بعضها البعض ولا اجد سببا لذلك اريد تفسيرا موضحا لذلك مع بعض النصائح لانني اعاني كثيرا واجد مشاكل لا تظهر مع المدرب عند التطبيق index.html1 نقطة
-
الطريقة صحيحة وتستطيع استيراده بنفس الاسم أو بأي اسم آخر طالما أنك قمت بتصديره عن طريق export default. وسأشرح لك بالتفصيل: لتصدير مكون (component) في React، باستطاعتك استخدام تعبير export قبل تعريف المكون، وهناك عدة طرق لتصدير المكونات في React، وفيما يلي سأقدم لك ثلاث طرق شائعة. 1- تصدير المكون باستخدام export المباشر: حيث تستخدم تعبير export قبل تعريف المكون بشكل مباشر. export function MyComponent() { // اكتب رمز JSX ومنطق المكون هنا } عند استخدام هذا النمط، قم باستيراد المكون في ملف آخر باستخدام import كالتالي ويجب أن تقوم بكتابة نفس الاسم وبداخل قوس معقوف {}: import { MyComponent } from 'MyComponent'; 2- تصدير المكون باستخدام export في نهاية الملف: قم تعريف المكون كما هو، ثم استخدام تعبير export في نهاية الملف لتصدير المكون. function MyComponent() { // اكتب رمز JSX ومنطق المكون هنا } export default MyComponent; وعليك باستيراد المكون في ملف آخر باستخدام import كالتالي: import MyComponent from 'test/MyComponent'; وبالطريقة السابقة تستطيع كتابة أي اسم تريده عند الاستيراد حيث أنك قمت بتصدير المكون عن طريق export default، وحتى عند استخدام الأقواس تستطيع تغيير الاسم أيضًا: import { أي اسم هنا } from 'MyComponent'; لكن الطرق الأخرى يجب كتابة نفس الاسم وداخل أقواس. 3- تصدير المكون باستخدام export عند الحاجة: تستطيع تعريف المكون كما هو، ثم استخدام تعبير export بشكل منفصل لتصدير المكون عند الحاجة. function MyComponent() { // اكتب رمز JSX ومنطق المكون هنا } // يمكن تصدير المكون عند الحاجة باستخدام الكلمة المفتاحية export export { MyComponent }; ثم استيراد المكون في ملف آخر باستخدام import كالتالي: import { MyComponent } from 'MyComponent'; وفي كل الحالات يجب كتابة المسار الصحيح للملف الذي يحتوي على المكون الذي تريد تصديره.1 نقطة
-
استأجرت استضافة مشتركة تستخدم لوحة تحكم cPanel واجهتني فيها مشكلة وهي أن رسائل البريد الإلكتروني التي أرسلها بها تنتقل للspam هل هناك أي إعدادات معينة يجب القيام؟ أم أن المشكلة من مزود الخدمة1 نقطة
-
1 نقطة
-
يهدف هذا المقال أساسًا إلى التعريف ببرمجة الروبوتات Robots Programming، ونظرًا لاختلاف النُهج المتبعة في البرمجة وفقًا لطبيعة عمل الروبوت، ستختلف عملية برمجة الروبوت وأساليبها، لهذا سنتحدث باختصار عن الروبوتات وأنواعها ثم الاستخدامات الأكثر شيوعًا لها، ومن ثم نعرّج على أهم لغات البرمجة المستخدمة في برمجة الروبوتات وكيفية البدء بمسار تعلم برمجة الروبوت المناسب لك ونتحدث في مقالنا عن برمجة الروبوتات للأطفال وأشهر اللغات والمنصات التي تساعد على دخول عالم برمجة الروبوتات والتحكم بها. من الآلات إلى الروبوتات فرض الانتقال إلى المجتمعات الصناعية اختراع كم هائل من الآلات التي سهلت على الصناعيين أداء وظائف كثيرة وأدت إلى ظهور ما يعرف بخطوط الإنتاج التي تضم سلسلة من الآلات المتتابعة لتنفيذ بعض أو كل مراحل المنتج وفق آليات ميكانيكية بحتة. لكن في البدايات الأولى كان وجود العامل البشري أساسيًا في قيادة تلك الآلات، إذ تجد فريقًا من العمال يحيط بكل آلة لتشغيلها واقتصر دور الآلة حينها على تسريع العمل وتخفيف المجهود العضلي. مع الوقت ظهرت الحاجة إلى منح تلك الآلات نوعًا من القيادة الآلية دون تدخل البشر وخاصة في الصناعات الخطرة أو عالية الدقة، وقد استغل المهندسون حينها الثورة في عالم الإلكترونيات لإدخال الآلات عصر الإلكترونيات الصناعية. إذ زودت تلك الآلات بتقنيات تجعلها قادرة على العمل والتوقف تلقائيا وفقا لظروف التشغيل وإدخال المؤقتات الزمنية التي تتحسس لأجزاء من الثانية والمفاتيح الإلكترونية التي تعطي أوامر التشغيل والإغلاق إلكترونيًا عن بعد دون الحاجة إلى المفاتيح الميكانيكية التي لا بد من تشغيلها من قبل العامل البشري. أما المرحلة الثانية من التطور فكانت ظهور المتحكمات الصغرية أو الدقيقة Microcontroller والمعالجات الدقيقة Microprocessor ومن ثم الدارات الرقمية التي طورت على أساسها، إذ مكنت هذه الدارات المهندسين من إعداد بيئة تحكم متكاملة لخط إنتاج أو معمل بأكمله. إذ تُبرمج معطيات التحكم بكل آلة باستخدام لغات برمجة مخصصة ثم تنقل هذه البرمجيات إلى لوحات التحكم المبنية على تلك المعالجات لتقود هذه الآلات بدقة. ولم يعد أمر تغيير برنامج العمل مرهقَا ولن يتطلب تغييرات في التجهيزات وإيقاف خطوط الإنتاج طويلًا لضبط المتغيرات الجديدة، بل تُعدّل البرمجيات خارج إطار خط الإنتاج ثم تحمّل إلى لوحات التحكم ليتوقف بعدها الخط لدقائق ثم يباشر العمل وفق البرنامج الجديد، وتُعرف هذه اللوحات بالدارات المنطقية القابلة للبرمجة PLC وتُبرمح لتقوم بعمل معين عندما تتحسس لمتغير ما أو يأتيها أمر ما. عندما تقود هذه الدارات تجهيزة محددة لتقوم بمجموعة خطوات معقدة لإنجاز عمل متكامل دعونا هذه التجهيزة روبوت Robot وتعرف عملية برمجتها ببرمجة الروبوت. وسرعان ما أخذ مجال الروبوتات أو الروبوتيكس Robotics منحنى مستقلا بذاته وبدأت تكنولوجيا بناء الروبوتات بالتطور السريع مدعومة بالتطور التكنولوجي الكبير لتقنيات الحوسبة في مجالي التجهيزات والبرمجيات من جهة والحاجة الملحة لوجود تجهيزات ذكية قادرة على تحسس البيئة المحيطة واتخاذ القرار بنفسها دون الرجوع إلى الإنسان وخاصةً في المجالات العسكرية أو الصناعات الكيميائية والنووية والعمل خارج كوكب الأرض ناهيك عن الرفاهية التي يسعى البشر إلى تحقيقها. فالطائرات المسيرة ومركبات استكشاف أجرام المجموعة الشمسية والروبوتات الطبية والتجهيزات المنزلية الذكية وألعاب الأطفال التفاعلية وغيرها الكثير من الأمثلة هي روبوتات تختلف في مستوى تعقيدها وبرمجتها وذكائها. لمحة عن الروبوتات قلنا أن الروبوتات هي تجهيزات قابلة للبرمجة يمكنها استشعار البيئة المحيطة والقيام برد فعل محدد سلفًا من قبل صانعها أو قادرة على اتخاذ قرار بنفسها محاكية بذلك السلوك البشري. وهنا لا بد من الإشارة إلى أن الروبوتات القادرة على اتخاذ القرارات باستقلالية تعتمد أساسًا على تقنيات الذكاء الصنعي وتعلم الآلة وهذا بدوره مرتبط بتقنيات أكثر تعقيدًا وتطورًا في برمجة الروبوتات. الأجزاء الرئيسية للروبوت يتكون الروبوت بشكل عام من الأقسام الرئيسية التالية: هيكل فيزيائي Physical Structure مخصص يساعد الروبوت على أداء الوظيفة الخاصة به، وهنا يأتي دور التصميم الصحيح في إنجاز الروبوت المطلوب.فالروبوتات التي تستخدم في صناعة السيارات مثلًا لا بد أن تتمتع بتصميم فيزيائي يناسب عملها. منظومة تحكم Control System تضم كل المكوّنات التي تتلقى البيانات من المحيط وتعالجها. تُبرمج منظومة التحكم لتقود المكوّنات الأخرى للروبوت كي تؤدي العمل المطلوب منها، فهي تتصرف كالدماغ البشري بشكل أو بآخر. الحساسات أو المستشعرات Sensors التي تستكشف البيئة المحيطة (مثل مستشعرات الحرارة والحركة والبعد وغيرها) وتنقل المحرضات إلى منظومة التحكم على شكل إشارات إلكترونية تفهمها منظومة التحكم وتدفع الروبوت إلى الاستجابة لها وفقًا لبرمجة الروبوت المحددة. المشغّلات Actuators المسؤولة عن تحريك الروبوت وتتكون عادة من محركات تتلقى الإشارات من منظومة التحكم لتنفيذ الحركة المطلوبة. وتختلف طريقة عمل هذه المشغلات وفقا لعمل الروبوت، فقد تعمل بالكهرباء أو الهواء المضغوط (مشغلات بنيوماتية pneumatic actuators) أو هيدروليكية وغيرها. مصدر للطاقة الكهربائية لتغذية منظومة التحكم وأجهزة التحسس والمشغلات الكهربائية. الطرفيات المخصصة، وهي مكوّنات خارجية خاصة بكل روبوت لتساعده على أداء وظيفته. فقد تحتاج روبوتات المعامل إلى طرفيات قابلة للتغيير لأغراض الطلاء أو القص أو الثقب، كما يحتاج الروبوت الجراحي إلى معدات خاصة به وهكذا. الأنواع الرئيسية للروبوتات نشير عادة بالروبوتات إلى الروبوتات الفيزيائية التي تأتي بمختلف الأشكال والأحجام من 0.2 ميليمتر إلى روبوتات بطول 200 متر. لكن لا بد من الإشارة أيضًا إلى الروبوتات البرمجية التي تنفذ مهام روبوتية كاملة عبر الحاسوب في العالم الافتراضي. يمكن أن نميز بين خمسة أنواع رئيسية من الروبوتات: الروبوتات مسبقة البرمجة Pre-Programmed Robots: وهي روبوتات مصممة لأداء مهام محددة في بيئة فيزيائية محددة مثل الأذرع الروبوتية التي تعمل على خطوط التجميع والتي تنفذ مهامها بسرعة وكفاءة عالية مقارنة بالعامل البشري. وتُعد برمجة الروبوتات في هذه الحالة سهلة نسبيًا الروبوتات الشبيهة بالبشر Humanoid Robots: وهي روبوتات تبدو كالبشر وتحاكي أفعالهم عادة كالمشي والعدو والقفز وحمل الأغراض، وقد تصمم أحيانًا لتبدي تعابير تحاكي تعابير الوجه التي يبديها البشر. روبوتات ذاتية التصرف Autonomous robots: روبوتات تعمل بشكل مستقل عن المشغلين البشريين وتصمم عادة لتنفيذ مهام في بيئات مفتوحة لا تتطلب مراقبة بشرية أو لا يمكن وجود البشر فيها. وتتميز هذه الروبوتات بوجود بنية قادرة على اتخاذ القرار وهي بنية حاسوبية عادة تقدّر كل خطوة بناءً على البيانات التي ولّتها مسبقًا. تتميز برمجة الروبوتات ذاتية التصرف بالتعقيد وتعتمد على خوارزميات الذكاء الصنعي وتعلم الآلة. وكمثال عليها نجد الطائرات المسيرة ذاتية التصرف والروبوتات الطبية وروبوتات الأعمال المنزلية. الروبوتات الخاضعة للتحكم عن بعد Teleoperated robots: يتصل الإنسان بهذه الروبوتات غالبًا عبر شبكة لاسلكية ويتحكم بها عبر واجهة تحكم خاصة. تعمل هذه الروبوتات في بيئات جغرافية ومناخية قاسية جدًا كالغواصات الروبوتية والمسيرات المتعقبة للألغام. روبوتات الواقع المعزز Augmenting robots: وتستخدم لتعزيز القدرات البشرية أو تعويض القدرات التي قد يفقدها. من هذه الروبوتات الأطراف الصناعية الروبوتية والهياكل الخارجية الروبوتية التي تساعد البشر على رفع الأوزان الثقيلة. الروبوتات البرمجية الروبوتات أو البوتات البرمجية Bots هي برامج حاسوبية تنفذ مجموعة من المهام الحاسوبية ذاتيًا ومن أشهرها روبوتات المحادثة الآلية. يتطور هذه النوع من الروبوتات مدعومًا بالتطور البرمجي الحاصل في مجالات الذكاء الصناعي وعلم البيانات وخوارزميات تعلم الآلة، ويتوقع أن يصبح قادرًا على برمجة الروبوتات الفيزيائية والتحكم بها، فهذه الروبوتات هي المنتج النهائي لعلم الذكاء الصنعي. دورة الذكاء الاصطناعي احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة. اشترك الآن كيفية برمجة الروبوت تضم معظم الروبوتات الفيزيائية نوعًا من منظومات التحكم الحاسوبية القابلة للبرمجة. فقد تُبني هذه الأنظمة على أساس المتحكمات الصغرية أو المعالجات الصغرية وتكون مخصصة لنوع محدد من الروبوتات أي تُبنى وفق رؤية المصنع. تُبرمج الروبوتات المخصصة من قبل مُصنِّعها فقط ولا يمكن تعديل برمجياتها ووظائفها إلا من قبل الشركة المصنعة. كما قد تكون منظومات التحكم معممة يمكن استخدامها لتتحكم بأية روبوتات مثل حواسيب أردوينو المصغرة وحواسب راسبيري باي ووحدات الدارات المنطقية القابلة للبرمجة. يمكن لأي شخص استخدام هذه الحواسب سواءً أكان هاويًا في مجال الروبوتات أو حتى خبيرًا لبناء روبوتات بسيطة وصولًا إلى روبوتات عالية التعقيد. تُبرمج منظومات التحكم المخصصة أو المعممة باستخدام لغات برمجة مختلفة نستعرضها في فقرات قادمة. لا تُعد برمجة الروبوت أمرًا بديهيًا ومباشرًا، بل موضعًا شديد الخصوصية يتعلق أولًا وأخيرا بطبيعة الروبوت ومكوّناته والوظائف المطلوبة منه. ولا يعني ذلك أن برمجة الروبوت أمر معقد وصعب المنال، فحتى الأطفال قادرون على تعلم أساسيات برمجته والتحكم به. برمجة الروبوت فيزيائيًا تُخفي هذه الروبوتات الجزء المتعلق بكتابة برامجها عن المستخدم، فلا حاجة فيها لشاشة وواجهة خاصة ولغة برمجة روبوت بل يعتمد كليًا على أجزاء فيزيائية (أزرار، روافع، قطع) تبرمج الروبوت ليقوم بأعمال معينة وفق تتابع ضغط هذه الأزرار أو تتابع تركيب هذه الأجزاء أو القطع مثل ألعاب الروبوت Bee-Bot: مثال آخر عليها Code-a-Pillar التي تُستخدم لتعليم الأطفال من 3-8 سنوات برمجة الروبوت من منطق التتابع ومبدأ الاستجابة للأفعال. برمجة الروبوت بالمهام لا تختلف هذه الروبوتات عن سابقاتها سوى بفصل منظومة التحكم عن المكونات الفيزيائية للروبوت. تشبه هذه الروبوتات في طبيعتها الألعاب التي يجري التحكم بها عن بعد لكن المستخدم قادر على إدارتها وبرمجة سلوكها من خلال أجهزة تحكم عن بعد أو عن طريق تطبيقات للهواتف الذكية يمكن من خلالها وضع تسلسل معين لعدة مهام مبرمجة مسبقًا ومخزنة في ذاكرة الروبوت لإنجاز وظيفة محددة. تُستخدم هذه الروبوتات كروبوتات تعليمية للمبتدئين والأطفال في مراحل عمرية مبكرة (6-13 عامًا) وتعزز تعليميًا مفهومين اثنين: الفصل والتمييز بين العتاد الصلب والبرمجيات. اتقان تقسيم أي وظيفة إلى مهام منفصلة ووضعها ضمن التسلسل المنطقي الصحيح. اكتساب مهارات أساسية في برمجة الروبوت. ولا تقتصر هذه الطريقة في البرمجة على الروبوتات التعليمية بل تتعداها إلى روبوتات في الخدمة الفعلية كالطيران المسير الاستكشافي الذي يشغله أشخاص غير مختصين. إذ يمكن الوصول إلى هذه الروبوتات عن بعد ثم استخدام برنامج حاسوبي أو تطبيق هاتف محمول لوضع مجموعة من المهام المبرمجة مسبقًا وفق تسلسل محدد لإتمام برمجة الروبوت لإنجاز المطلوب. فإن أراد شخص غير مختص برمجة روبوت طائرة مسيرة تُبرمج بالمهام لرفعها مسافة 100 متر ثم فتح الكاميرا والتقاط صورة وفق اتجاه محدد ثم العودة إلى القاعدة وتكرار الأمر 10 مرات يوميًا، ما عليه مثلًا سوى سحب مهمة "التحليق إلى ارتفاع" من قائمة المهام الجاهزة في التطبيق ويضع بعدها "افتح الكاميرا" ثم تعليمة "وجه الكاميرا" ثم "التقط صورة" ثم "انخفض" ويضع كل تلك التعليمات في تعليمة "كرر الخطوات السابقة" ثم يرسل البرنامج إلى الروبوت ليُبرمج! لا داعٍ في هذه الحالة لأن يعرف أي شيء عن طريقة برمجة كل مهمة ولا عن آلية عمل المستشعرات أو المحركات أو الكاميرا أو آلية التوجيه لكنه يضع المهمات في سياقها الصحيح والنتيجة هي برمجة الروبوت بنجاح. برمجة الروبوت بالتعلم والقيادة تأتي هذه الروبوتات مصنّعة بالكامل ومخصصة، فلا يمكن تطويرها أو تعديلها سوى من قبل الشركات المصنعة وعادة ما تقوم بوظيفة أو مجموعة وظائف محددة سلفًا كالأذرع الروبوتية. وتتطلب برمجة الروبوت في هذه الحالة وحدة تحكم وبرمجة Programming pendant منفصلة عن جسم الروبوت تتيح للمشغل اختيار مكوّن محدد من مكوّنات الروبوت ثم إعطائه مهمة معينة كأن يختار محرك الجزء العلوي من الذراع ثم تدويره بزاوية محددة وتخزين الأمر. ينتقل بعدها إلى مكوّن آخر لتنفيذ حركة أو قياس معين ومن ثم تخزين الأمر لينتقل إلى الأمر التالي، وعند الإنتهاء من إملاء مجموعة الأوامر على الروبوت، يُخزّن المشغل هذه الأوامر في برنامج يعطيه اسمًا محددًا ثم يتأكد من تكرار الروبوت لهذا البرنامج بدقة قبل أن يغلق وضع التعليم Teach وينتقل إلى وضع العمل وفقا للبرنامج الجديد وهكذا تنتهي برمجة الروبوت. الروبوتات المبرمجة بلغات برمجة مع ظهور عصر الحواسيب القوية وغير المكلفة، بدأ الميل إلى برمجة الروبوتات باستخدام لغات برمجة الحواسيب أو نسخ مخصصة منها مزودة بمزايا خاصة لتسهيل برمجة الروبوت والتعامل مع مكوّناته. مع ذلك لا زالت الكثير من الشركات تقدم لغات برمجة خاصة لبرمجة روبوتاتها، معظمها لغات وظيفية أو لغات مرئية. يُصطلح عادة على برامج الروبوت المكتوبة بلغات برمجة مخصصة ببرمجة الروبوتات المطفأة Offline-programming، إذ تكتب البرمجيات على منصات غير متصلة بالروبوت الذي يتابع عمله وفقًا لبرنامجه القديم إن كان مبرمجًا مسبقًا. عند انتهاء برمجة الروبوت على تلك المنصات تجري محاكاة عمل البرنامج الجديد والتأكد من عمله. يُوقف الروبوت لدقائق ريثما يُحمّل برنامجه الجديد ثم يتابع العمل وفق هذا البرنامج. لغات برمجة الروبوت تُستخدم مجموعة متنوعة من لغات البرمجة وأطر العمل لبرمجة الروبوتات واختبار هذه البرمجيات ومن ثم نقلها إلى الروبوت. سنتحدث تاليًا عن مفهوم أنظمة تشغيل الروبوت ومن ثم سنلقي نظرة على لغات البرمجة المخصصة لكتابة برمجيات الروبوتات. مفهوم أنظمة تشغيل الروبوت يُشار عادة إلى البرمجيات وبيئات العمل والمنصات وأدوات البرمجة الوسطية التي تتكامل في سبيل برمجة الروبوتات بمنظومة تشغيل الروبوت Robot Operating System. لا ينبغي الخلط بين منظومة تشغيل الروبوت ونظام تشغيل وحدة التحكم OS وبرمجيات وحدة التحكم الثابتة (برمجيات العتاد) firmware. فإن استخدمت مثلًا حاسوب راسبيري باي للتحكم بروبوت، يكون نظام تشغيل لوحة التحكم هو راسبيان غالبا (نسخة من نظام لينكس) أما الأدوات التي تساعدك برمجة روبوتك ونقل البرنامج إليه والتي تعمل على راسبيان فهي منظومة تشغيل الروبوت. يميل أغلب مصنعي الروبوتات ذات الوظائف الثابتة كروبوتات التغليف والتعبئة أو الروبوتات المخصصة للعمل في ظروف استثنائية على كتابة برنامج واحد فعّال وتحميله على الروبوت. تُعرف هذه البرامج بالبرمجيات الثابتة. برمجة الروبوتات باستخدام لغات البرمجة عامة الأغراض تعتمد برمجة الروبوتات وفق هذه الطريقة على لغات برمجة عامة الأغراض مثل لغة بايثون أو لغة جافا ثم تبنى مكتبات خاصة أو مجموعة أدوات باستخدام هذه اللغات لتنفيذ إجرائيات برمجية تتحكم بمكونات الروبوت على صعيد الحركة أو تحسس البيئة المحيطة أو عمليات اتخاذ قرار. يعتمد الأمر في هذه الحالات على منظومة التحكم بالروبوت. فإما أن تُكتب برامج الروبوت بإحدى لغات البرمجة على حاسوب وتختبر ثم تُنقل إلى منظومة تحكم الروبوت مثل معظم الروبوتات الصناعية والروبوتات المبنية على تجهيزات PLC أو تلك المجمعة حول متحكم صغري مثل لوحات أردوينو. أو أن يُحمّل نظام تشغيل متكامل على لوحة التحكم بالروبوت (راسبيان، ويندوز، لينكس،أندرويد،…إلخ.) وكل ما عليك حينها كتابة برنامج الروبوت باستخدام اللغة التي تريد من خلال تثبيت إحدى بيئات العمل المناسبة على نظام التشغيل ومن ثم تجريب البرنامج على الروبوت مباشرة. من أمثلة لوحات التحكم هذه لوحات راسبيري باي ولوحات أدرويد ADROID وحواسب ASUS Tinker Board، وتدعم اللوحات السابقة أنظمة تشغيل مشتقة من نظام لينكس كما تدعم اللوحتين الأخيريتين نظام أندرويد. إليك قائمة بأكثر لغات البرمجة شيوعًا في برمجة الروبوتات سواء لكتابة البرامج الثابتة أو القابلة للبرمجة المباشرة: لغتي C و ++C: يعتمد الكثير من مبرمجي الروبوتات على هاتين اللغتين في كتابة برامجهم لأن الكثير من مكتبات التحكم بالتجهيزات الفيزيائية للروبوت قد طورت باستخدام هاتين اللغتين. تسمح هذه المكتبات بالتفاعل المنخفض المستوى من العتاد الصلب وتؤمن أداءً عاليًا شديد الكفاءة في زمن التنفيذ، كما تدخل في تطوير الكثير من بيئات التشغيل الأكثر شهرة مثل DART وRobotics Library (RL). وعلى الرغم من صعوبة إنجاز بعض الوظائف بهاتين اللغتين مقارنة بلغة بايثون وماتلاب، لكن أداء هاتين اللغتين في زمن التشغيل جعلهما لغتين معياريتين في برمجة الروبوتات حتى مع زيادة شعبية لغة بايثون. بايثون: ازدادت شعبية هذه اللغة لسهولة استخدامها والكم الهائل من المكتبات التي تساعد على برمجة الروبوتات، فلا حاجة لإعادة اختراع العجلة، إذ ستجد تقريبًا كل ما تبحث عنه ضمن تلك المكتبات. كما أن اعتمادها مع ++C كلغة أساسية في نظام تشغيل الروبوتات ROS وكذلك من الحواسيب المخصصة للتحكم بالروبوتات مثل راسبيري باي سيجعلها مرشحة لتكون اللغة الأكثر شعبية في عالم برمجة الروبوتات. جافا: نظرًا لشعبية هذه اللغة بين مطوري الروبوت المختصين بعلوم الحاسوب وجدت هذه اللغة طريقها إلى برمجة الروبوت. جافا أيضًا هي لغة مفسّرة ويعني ذلك أنك لن تّضطر إلى نقلها إلى لغة آلة محددة ومعالج محدد أو لوحة تحكم محددة بل تعمل آلة جافا الافتراضية على تنفيذ التعليمات أثناء التشغيل مما يعني إمكانية كتابة الشيفرة مرة واحدة وتنفيذها على آلات مختلفة. تُعد جافا لغة أساسية في تطوير روبوتات العديد من الشركات مثل IBM. اللغة #C (بيئة NET.): تأتي شعبيتها من عدة أسباب أهمها: اللغة الرئيسية التي تُستخدم في برمجة الروبوتات ضمن بيئة تطوير الروبوتات Microsoft Robotics Developer Studio من مايكروسوفت، فإن أردت العمل على هذه البيئة لا بد من تعلم هذه اللغة. تُستخدم كأساس في محركات الواقع الافتراضي مثل Unity الذي تزداد شعبيته حاليًا. لغة مفسرة وبالتالي يمكن أن يعمل البرنامج ضمن أية آلة أو روبوت. ماتلاب MATLAB: تشتهر هذه اللغة ضمن صفوف مهندسي ومصممي الروبوت وضمن النطاق الأكاديمي لتحليل البيانات وتطوير أنظمة التحكم. تشتهر هذه اللغة بوجود صندوق الأدوات Robotics Toolbox الذي يمكنه المساعدة في تطوير نظام روبوت كامل باستخدام ماتلاب فقط. لغتي LISP و PROLOG: يُتوقع ازدياد شعبية هاتين اللغتين مستقبلًا مع زيادة الاهتمام بتطبيق تقنيات الذكاء الصنعي، فهاتين اللغتين من أكثر اللغات استعمالًا في خوارزميات الذكاء الصنعي وستجدان طريقًا للدخول إلى عالم برمجة الروبوتات. إذ استخدمت بيئة تطوير الروبوتات ROS لغة LISP في كتابة بعض أجزائها، واستخدمت IBM لغة PROLOG كجزء من الأدوات البرمجية في مشروع IBM's Watson AI. لغة سكراتش Scratch: سكراتش هي لغة برمجة مرئية صُممت لتعليم البرمجة للمبتدئين وتستهدف الفئة العمرية بين 8 و 16 عامًا ويزداد الاعتماد على هذه اللغة في نوادي الروبوت والمدارس التقنية. تتكون اللغة من من مجموعة من الكتل البرمجية التي تُسحب وترتب وفق تسلسل معين لإنجاز البرنامج المطلوب. تدعم سكراتش مجموعة من المكتبات التي يمكنها التحكم بالطرفيات التي تتصل بحاسوب راسبيري باي مما زاد في شعبيتها. بإمكانك الاطلاع ضمن أكاديمية حسوب على كتابة برامج تتحسس للوسط الخارجي باستخدام راسبيري باي ولغتي بايثون وسكراتش دورة تطوير التطبيقات باستخدام لغة Python احترف تطوير التطبيقات مع أكاديمية حسوب والتحق بسوق العمل فور انتهائك من الدورة اشترك الآن برمجة الروبوتات بلغات برمجة مخصصة تظهر الحاجة إلى لغات برمجة مخصصة للروبوتات Robots Programming Languages واختصارًا RPL كنتيجة للتنوع الكبير في الآلات الروبوتية والروبوتات واختلاف وظائفها. إذ تظهر في عالم الصناعة مفاهيم لا بد من أخذها بعين الاعتبار عند برمجة الروبوت مثل التحكم بالقوى المطبقة force control وأداء المهام على التوازي Parallelism. لهذا السبب طوّرت لغات برمجة تمتلك إمكانيات لغات برمجة الحواسيب إلا أنها مخصصة للروبوتات نذكر منها: لغة VAL: طورتها شركة Unimation لبرمجة بروبوتاتها وتستخدم شركة Stäubli حاليا النسخة VAL 3 منها. لغات HELP و RAIL و Karel: وهي لغات مخصصة من الجيل الثاني لبرمجة الروبوتات، وقد أظهرت ميزات متطورة للتحكم بالحركة والتعامل مع واجهات الحساسات والمشغلات والتخاطب البيني ضمن الروبوت وأبدت بعض ملامح الذكاء الصنعي. لغة RAPID: التي تستخدمها شركة ABB لغة KRL: وهي اختصار لعبارة (Kuka Robot Language)وتستخدمها شركة Kuka لغة URScript: وتستخدمها شركة Universal Robots. مسارات تعلم برمجة الروبوتات والروبوتكس ما الغاية من مشروع الروبوت الذي أريد أن أنجزه؟ ما هي مدى معرفتي بالإلكترونيات؟ ما مدى معرفتي بالبرمجة عمومًا؟ هل أنا مهتم حقا ببناء هذا المشروع من الصفر أم أبحث عن حلول سريعة؟ إن الإجابة على الأسئلة السابقة أمر ضروري قبل العمل على أي مشروع يتعلق ببرمجة الروبوتات واستثمارها. فإن كنت هاويًا فضوليًا للمعرفة عليك أن تسلك مسارًا محددًا وإن كنت هاويًا تسعى إلى الاحتراف والعمل في مجال الروبوتات فهي حكاية أخرى وإن كنت ذو خلفية في علوم الحاسوب أو الهندسة يختلف مسار العمل وإن كنت رجل أعمال أو مستشارًا تقنيًا لمؤسسة صناعية يختلف الأمر كذلك. برمجة الروبوت للأطفال علينا أولًا أن نعزز مفاهيم هامة للطفل مثل السبب والنتيجة والتسلسل الصحيح لإنجاز المهام وذلك في سن مبكرة من 3-6 سنوات. يمكننا بداية الاستفادة من الدمى الروبوتية التي تبرمج فيزيائيا لحث الطفل على التعلم مثل الدمى التي تتحرك وتدور وتصدر أصواتًا وفق تسلسل محدد مسبقًا يتعلمه الطفل بالضغط المتتالي على مجموعة أزرار على الدمية. كما يمكن بناء مهاراته في التصميم الفيزيائي من خلال ألعاب فك وتركيب المكعبات الملونة لبناء هياكل متوازنة ومتناظرة التصميم. في سن أكبر من 6-10 سنوات يمكنه العمل على روبوتات مبرمجة بالمهام لإدراك مفهوم البرنامج بشكل منفصل عن الآلة وتنمية الرغبة في التفكير بطريقة عمل هذه المهام. كما يمكن أيضا تلقين الطفل أساسيات الدوائر الكهربائية واستخدام البطاريات وتوصيلها مع أضواء ومحركات صغيرة وحثه على بناء هياكل معدنية أو بلاستيكية عبر ألعاب الفك والتركيب المكونة من قطع متنوعة وعجلات ومحركات وبراغي ومفكات. إن أبدى الطفل بعد عمر الثامنة براعة ورغبة يمكن أن تبدأ بتعليمه البرمجة من خلال لغة سكراتش وبعد أن يتجاوز العاشرة يمكن العمل على روبوتات جاهزة تبرمج بلغة برمجة مثل سكراتش وينقل البرنامج إليها من الحاسوب لتنفيذ مهام معينة. سيبدي الطفل أو اليافع بعد ذلك رغبته في الاطلاع والتعلم أكثر وسيدرك بنفسه طريق البحث وتعلم ما يلزمه وسيخط مساره في مجال برمجة الروبوتات والروبوتيكس عمومًا بنفسه. على الرغم من ذلك يمكنك إرشاده إلى تعلم لغات برمجة جديدة مثل بايثون والعمل على أنظمة تشغيل مثل لينكس وأندرويد ليألفها ثم العمل مع لوحات تحكم حاسوبية مثل راسبيري باي ليتحكم بعناصر فيزيائية كالأضواء والمصوّتات وتحريك اللوحة على هيكل ذو عجلات وموازنتها واستشعار البيئة المحيطة. بإمكانك الاطلاع ضمن أكاديمية حسوب على كتابة برامج تتحسس للوسط الخارجي باستخدام راسبيري باي ولغتي بايثون وسكراتش. وهكذا ستضع الناشئة على الطريق الصحيح للانطلاق في عالم الروبوتات أكاديميًا وتقنيًا. برمجة الروبوت للمبرمجين والمهندسين إن كنت مبرمجًا فأنت جاهز للانطلاق. قد ترغب في تعزيز معلوماتك في مجال الإلكترونيات وخاصة الحساسات والمحركات ومصادر تغذيتها واستثمارها إن كنت ترغب في تصميم روبوت بنفسك. أما إن كنت ترغب في تشغيل روبوت موجود قابل للبرمجة فأنت في الواقع لا تحتاج شيئًا سوى اختيار لغة البرمجة والبحث عن مكتبات جاهزة لتنفيذ ما تريده. ستظهر المشكلة إن أردت أن يقوم الروبوت بوظيفة واضطررت إلى برمجة هذه الوظيفة بنفسك للمرة الأولى (احتمال ضعيف) عندها عليك العودة إلى المراجع الأكاديمية وتعزيز قدراتك في الفيزياء علم التحريك والإلكترونيات! أما إن كنت مهندسًا كهربائيًا أو مهندس إلكترونيات، عليك فقط تعزيز قدراتك البرمجية التي يُفترض أن تكون موجودة وراجع معلوماتك عن الإلكترونيات ومصادر التغذية وستكون جاهزًا لبرمجة أي روبوت واستثماره وحتى تصميم وبناء روبوت من الصفر. اختر المنصة التي تريد العمل عليها واطلع على أفكار ومشاريع الآخرين وانطلق! تبقى التوجيهات نفسها للمهندسين غير الاختصاصيين والتقنيين. تعلم لغة برمجة مستخدمة في برمجة الروبوت وافهم مكوّنات الروبوت الذي تنوي العمل عليه وبرمجته أيًا كانت الأسباب التي دفعتك لذلك. استعن بالإنترنت ومنتديات الروبوتيكس التي تهتم بنفس الروبوت الذي تستهدفه واجتهد قليلًا ولن يذهب عناؤك سدى. لكن غالب الظن أنك في مصنع ما وأوكلت إليك مهمة قيادة روبوت أو برمجته لسبب أو لآخر، اطلع على كتيب التشغيل وافهم تعليمات تشغيل الروبوت على وضع التعلم فغالبًا ما تُبرمج هذه الروبوتات بالتعلم حاول أن تبحث عن مقاطع فيديو تشرح آلية برمجته وخذ بعض الوقت في التجربة (لا تبالغ كثيرًا في التجريب فهذه الروبوتات مكلفة!) وسترى أن الأمر سينجح. برمجة الروبوت للهواة والفضوليين إن كنت طفًلا أو يافعًا أو مبرمجًا أو مهندسًا فقد أرشدناك في فقرات سابقة إلى الطريق الصحيح. أما إن كنت شغوفًا بالتعلم ورأيت أو قرأت محتوى يتحدث عن علم الروبوت ووقع الأمر في نفسك موقعًا حسنًا ورغبت في تجربة الأمر، فاسمح لي أن أهنئك وأشجعك! ابدأ مسيرتك بتعلم أساسيات التحكم الكهربائي التقليدي فهي من ناحية مهنة محترمة ومن ناحية أخرى ستكون مدخلك إلى التحكم الرقمي. ستجد الكثير من المعاهد التعليمية التقنية؛ سجل في أحدها فهذا أسرع من متابعة قناة على اليوتيوب وعملي أكثر. في الوقت ذاته إن لم تكن متقنًا للعمل على الحاسوب (أعي تماما أن الحاسوب قد أهمل من قبل الكثيرين لصالح الهواتف الذكية) فحاول أن تألف التعامل معه، تعلم على الأقل نظامي ويندوز ولينكس فهذا أساسي. عندما تنهي أساسيات التحكم التقليدي انتقل إلى التحكم الرقمي باستخدام وحدات PLC (ستجد أنها الخطوة التالية في مسار التعلم في معهدك إن سجلت في أحدها). يعتمد الكثير من الروبوتات على وحدات PLC كمنظومات تحكم، وستتعرف خلال هذه الفترة على مفهوم البرمجة والبرامج، إذ تُبرمج تلك الوحدات من خلال لغات برمجة مرئية بالمهام. لن يكون الأمر صعبًا، فقط اجتهد قليلًا ولا تستسلم. خلال هذه الفترة تعمق قليلًا في أحد توزيعات نظام التشغيل لينكس وستجني ثمار هذا الجهد بالتأكيد. حتى هذه اللحظة ستكون قد اكتسبت المهارات التالية: إدراك مفهوم التحكم الصناعي. إدراك مفهوم البرنامج وكتابة برمجيات بسيطة للتحكم بالتجهيزات الكهربائية. التعامل مع عناصر كهربائية وإلكترونية عديدة خلال مسار الدورتين السابقتين وسترى أنك تحتاجها في عالم الروبوت. العمل على الحاسوب وبأكثر من نظام تشغيل. قد يلبي طموحك هذا الحد، فقد تتمكن إن اجتهدت من تحريك مركبة وتفادي العقبات واستشعار المحيط لكن قد يكون روبوتك كبير الحجم ومحدود الإمكانات لأن أغلب التجهيزات التي تعلمتها كبيرة الحجم من الحساسات إلى المحركات إلى لوحات التحكم والتغذية، لم لا! فالروبوتات الكبيرة لها جاذبيتها! إن أردت أن تصل إلى روبوت أصغر حجمًا أو ينفذ مهام أعقد وأكثر دقة فعليك متابعة مسيرتك التعليمية. تعلم العمل على الحواسب المصغرة أو حواسب اللوحة الواحدة مثل أردوينو وراسبيري باي من خلال دورات تعليمية في معاهد أو على منصات إلكترونية، فلن يعيقك الآن أي شيء لفهم واستيعاب كل ما يقال. ابدأ بتعلم لغة برمجة وأنصحك بتعلم البرمجة بلغة بايثون على الرغم من أنّ لغة سكراتش تمثل مرحلة انتقالية بين لغات برمجة PLC ولغات برمجة الحواسيب. الخيار لك على أية حال. ستجني خلال هذه الفترة ثمار تعلمك لأنظمة تشغيل الحواسب وعندما تنهيها ستكون ملمًا ببرمجة الحواسيب وبأساسيات الإلكترونيات المتعلقة بالروبوت. انظر دورة تطوير التطبيقات بلغة بايثون التي تقدمها أكاديمية حسوب لتعليم البرمجة بلغة بايثون بلغة عربية ودون الحاجة إلى خبرة مسبقة: أنت مستعد الآن، ابنِ روبوتك الخاص باستخدام حاسوب مصغر مستفيدًا من تجارب الهواة الآخرين. حاول أن تتواصل معهم من خلال المنتديات وأن تعزز قدراتك بالاطلاع المستمر. تتوفر أيضا صناديق أدوات مخصصة لبناء روبوتات متنوعة تختلف في تعقيدها، يمكنك اقتناء واحدة فهي تزودك بالكثير من التجهيزات والقطع لبناء هيكل الروبوت وبرمجته. هؤلاء الذين يريدون تغيير العالم! لا شيء سيقف في طريقك سوى ذاتك. ثق بنفسك وبإمكاناتك ووسع مداركك في كل المجالات فعلم الروبوت لا يقتصر على علم واحد فهو مزيج من كل العلوم. لا تستسلم ولا تردد أبدًا عبارة "لا أعرف كيف أفعل ذلك". كن مبرمجًا محترفًا ومهندسًا محترفًا في عملك وتخيل واحلم كما لو كنت طفلًا. ستسمع كثيرًا عبارة "لا تعد اختراع العجلة"، قد ترى أن هذا صحيح، لكن إن كان عليك إعادة اختراع العجلة فافعل! رحلة سعيدة إن قررت الانطلاق في عالم الروبوتات! وإن احتجت إلى أي مساعدة، أضف سؤالك في قسم التعليقات أو في قسم الأسئلة والأجوبة. اقرأ أيضًا ما هو حاسوب راسبيري باي Raspberry Pi؟ ما هي لوحة أردوينو Arduino؟ تصميم لعبة السلك والحلقة باستخدام برنامج سكراتش وحاسوب راسبيري باي أسهل لغات البرمجة تعلم البرمجة فوائد البرمجة1 نقطة