لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 08/27/23 في كل الموقع
-
الان لدي ملف فيه مفاتيح او كلمات السر الخاصة بالتطبيق، ومعلوم ان الملف لا يتم نقله كما هو ولكن يتم انشاء متغيرات على السيرفر كيف يتم عمل هذا ؟ وهل يجب تغيير طريق قراءة المتغيرات عند عمل build للتطبيق ؟2 نقاط
-
السلام عليكم دمتم بخير جميعا أمتلك مشروع متجر إلكتروني بإطار django ووصلت مرحلة عايز أعمل deploy للمشروع عشان يكون متاح للاستخدام مع العلم أن المشروع حيكبر مع مرور الوقت السؤال أي إستضافة تعتبر مناسبة لهذا المشروع؟ سواء من ناحية السرعة، الأمان، السعر، المميزات الأخرى وأنا محتار بين Digital Ocean و Hostinger شاكر ومقدر لكم2 نقاط
-
2 نقاط
-
هل من الاحسن اتفرج علي مشاريع وانا بتعلم جافا سكريبت ولا لا ؟ ولا اركز اكتر ف التعلم2 نقاط
-
2 نقاط
-
صباح / مساء الخير اذا سمحتو لدي استفسار واحتاج الى معرفة جواب واضح جدا اخواني واخواتي الافاضل انا اريد ان ابني تطبيق مختص لحجوزات السفر من فنادق وطيران مثل trivago وذلك باستخدام flutter استفساراتي 1- هل باستطاعتي بناء تطبيق مشابه له عن طريق برنامج فلاتر ؟ 2- من اين اتي بمجموعة الفنادق واسعارها لعمل المقارانات واظهارها ؟ 3- بالنسبه لطريقة الربح هل يمكن شرحها وكيفية ربطها بحيث اذا احد نقر على الفندق , هل ذلك يتم عن طريق api 4- ارجو منكم التكرم بشرح الاليه وطريقة عملها اخيرا اذا كانت لديكم اي فيديوهات مختصه بطريقه مشابه باستخدام فلاتر ارجو تزويدي شاكرا لكم تعاونكم1 نقطة
-
الإصدار 1.0.0
62023 تنزيل
لا يخفى على أي متعلم لمجال علوم الحاسوب كثرة الاهتمام بمجال الذكاء الاصطناعي وتعلم الآلة، وكذلك الأمر بالنسبة لمستخدم التقنية العادي الذي بات يرى تطورًا كبيرًا في الآلات والتقنيات التي تحيط به بدءًا من المساعد الصوتي الآلي في جواله وحتى سيارته وبقية الأشياء الذكية المحيطة به. تتوالى الاختراعات والاكتشافات يومًا بعد يوم وتتنافس كبرى الشركات حول من يحرز أكبر تقدم ليخطف الأضواء من غيره. ونظرًا لهذا الاهتمام، ولضعف المحتوى العربي وسطحيته في هذا المجال أيضًا، قررنا توفير مصدر عربي دسم لشرح مجال الذكاء الاصطناعي وتعلم الآلة نظريًا وعمليًا لذا وضعنا فهرس المحتوى آنذاك وبدأنا العمل. هذا الكتاب هو الجزء الأول النظري التأسيسي من أصل جزآن عن الذكاء الاصطناعي وتعلم الآلة، ويبدأ بعرض أهمية الذكاء الاصطناعي وتعلم الآلة عبر الإشارة إلى المشاريع والإنجازات التي قدَّمها هذا المجال إلى البشرية حتى يومنا هذا وكيف أثرت على كل مجالات حياتنا اليومية. ينتقل بعدها إلى لمحة تاريخية عن المجال وكيفية ولادته ومراحل حياته حتى يومنا الحالي. ستجد بعدئذٍ المعلومات الدسمة في الفصل الثالث الذي يشرح المصطلحات المتعلقة بمجال تعلم الآلة ويشرح أساليب تعليم الإنسان للآلة والأسس التي بنيت عليها عمليات تعليم الآلة (منها شرح طرائق تعلم الآلة التقليدية ثم التجميع والتعلم المعزز وحتى الشبكات العصبية والتعلم العميق). يعرض الفصل الأخير تحديات عملية تعليم الآلة وما علاقة البيانات فيها، ثم أخيرًا عرض خارطة طريق لأهم المفاهيم التي يجب أن تتقنها في حال أردت التوسع في المجال وإتقانه. بعد الانتهاء من الجزء الأول في هذا الكتاب وتأسيس المفاهيم والمصطلحات التي يقوم عليها مجال الذكاء الاصطناعي وتعلم الآلة، يمكنك الانتقال إلى الجزء الثاني وهو كتاب عشرة مشاريع عملية عن الذكاء الاصطناعي لبدء تطبيق مشاريع عملية تطبيقية مبنية على بيانات واقعية وتنفيذ أفكار مشاريع من الحياة العملية باستخدام الذكاء الاصطناعي. ساهم بالعمل على هذا الكتاب، محمد لحلح تأليفًا، وجميل بيلوني تحريرًا وإشرافًا، وأخرجه فنيًا فرج الشامي. أرجو أن نكون قد وُفقنَا في هذا العمل لسد ثغرةً كبيرةً في المحتوى العربي -كما خططنا لذلك- الذي يفتقر أشد الافتقار إلى محتوى جيد ورصين في مجال الذكاء الاصطناعي وتعلم الآلة. هذا الكتاب مرخص بموجب رخصة المشاع الإبداعي Creative Commons «نسب المُصنَّف - غير تجاري - الترخيص بالمثل 4.0». يمكنك قراءة فصول الكتاب على شكل مقالات من هذه الصفحة، «الذكاء الاصطناعي: أهم الإنجازات والاختراعات وكيف أثرت في حياتنا اليومية»، أو من مباشرةً من الآتي: الفصل الأول: الذكاء الاصطناعي: أهم الإنجازات والاختراعات وكيف أثرت في حياتنا اليومية الفصل الثاني: الذكاء الاصطناعي: مراحل البدء والتطور والأسس التي نشأ عليها الفصل الثالث: المفاهيم الأساسية لتعلم الآلة الفصل الرابع: تعلم الآلة: التحديات الرئيسية وكيفية التوسع في المجال1 نقطة -
1 نقطة
-
هل تقومين بتصفح مشروعك بإستخدام pretty url أم بإستخدام رابط عادي ؟ http://localhost:8000/ عموما، جربي التعديل على قيمة APP_URL من ملف env. APP_URL=http://localhost:8000/ أو: APP_URL=http://bookstore.test/ في حالة ما كنت تقومين بإستخدام pretty url هل حل ذلك المشكلة لديك؟1 نقطة
-
1 نقطة
-
1 نقطة
-
1 نقطة
-
قمت بذلك لكن مازالت المشكلة كما هي مع انها كانت بدون اية مشكلة bookstore.zip(ملفات المشروع)1 نقطة
-
مرحبا رباب، ان كان السؤال يخص درسا من دروس الدورات، فينصح بوضع تعليق في قسم تعليقات الطلبة للمتابعة معك خلال الدرس. بخصوص مشكلتك، يرجح أن تكون هنالك مشكلة أساسا بحقن سطر تضمين ملفات css في ملف النسق layout الذي يستعمله ملف العرض الذي يعرض هاته الصفحة، يبدوا أنك تستعملين لارافيل، افتحي ملف app.blade.php واضيفي السطر التالي: @vite(['resources/css/app.css']) أيضا تأكدي من احتواء ملف app.css على التنسيقات اللازمة. تنسيقات tailwindcss مثلا: @tailwind base; @tailwind components; @tailwind utilities;1 نقطة
-
من الصعب تشخيص المشكلة من ملف الجافاسكربت وحده، ولكن يرجح إلى أن هنالك مشكلة بتوصيف العنصر بالمعرف المناسب، فجافاسكربت لا تتعرف على أي عنصر يمتلك آي دي بالقيمة: serviceRequestForm تأكد من وجود عنصر استمارة form يمتلك هذا المعرف على نحو: <form id="serviceRequestForm" .. اعرف أكثر عن addEventListener:1 نقطة
-
1 نقطة
-
يجب عليك معرفة سبب حدوث المُشكلة حتى تستطيع حلها، أحد الخطوات التي يجب القيام بها هي فحص عُنصر الصورة من المتصفح عبر الضغط على مكان الصورة بالزر الأيمن ثم إختيار Inspect و التحقق من مسار الصورة هل هو صحيح أم لا. يُمكن الوصول للصور من خلال المتصفح عبر رابط المشروع + مسار الصورة إن كان المسار نسبي، أو مباشرة إن كان المسار مطلق: http://127.0.0.1:8000/storage/posts/4.jpg قك بفتح نافذة في المتصفح و تجربة ذلك على أحد الصور الموجودة لديك في ملفات المشروع بالمجلد public. يُمكن أيضاً حذف الوصلة storage من مجلد public و إعادة إنشائها عبر تنفيذ الأمر: php artisan storage:link إذا فهمت جيداً سبب المُشكلة ستتمكن من حلها، فالأكيد أن هناك خلل ما لا يُمكن أن تحدث المُشكلة و كل شيء سليم.1 نقطة
-
السلام عليكم لدي سيرفر اوبنتو واريد تشغيل عليه برنامج مصمم ب nuxtjs عبارة عن app ssr هل احتاج تثبيت برنامج nginx على السيرفر ؟ وهل هو مطلوب لتثبيت شهادة الامان على السيرفر ؟1 نقطة
-
وعليكم السلام، نعم، إذا كنت تخطط لتشغيل تطبيق Nuxt.js SSR (Server-Side Rendering) على خادم Ubuntu، فإنه من المستحسن تثبيت خادم وكيل عكسي يمكنه التعامل مع طلبات المستخدمين وتوجيهها إلى تطبيقك الذي يعمل على الخادم. وسيكون nginx خيارا جيدا نعم. فيما يلي تكوين nginx الخاص بتطبيق Nuxtjs المستعمل عادة: server { listen 80; server_name domain_name.test; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } استبدل domain_name.test بدومينك الكامل. طبعا لا تنسى تشغيل npm run start لخادم node الخاص بالتطبيق، فـ nginx ستقوم بإرسال الطلبات إليه وتحويلها إلى العميل كخادم وكيل، لتدعم فكرة التصيير على الخادم server side rendering بهاته المقاربة. بالنسبة لشهادة الأمان SSL، فإن تثبيت شهادة SSL يعتبر أمرًا جيدًا ومهمًا لتأمين اتصالات موقعك. لك كامل الحرية في ذلك، ولكنه شيء منصوح به بطبيعة الحال.1 نقطة
-
1 نقطة
-
دائمًا ما أنصحك بعدم الإنتقال مباشرًة إلى تعلم React.js والصبر والتأني في تعلم جافاسكريبت بشكل جيد، وعدم الإكتفاء بالأساسيات فقط بل التعمق وتنفيذ مشروع كبير وذلك بفرض أن لديك الوقت لذلك فلا يوجد نصيحة واحدة قابلة للتطبيق على الجميع. والمشروع الذي اًنصح به هو مشروع single page app من خلال جافاسكريبت وستتعلم الكثير خلال تنفيذه، وتستطيع البحث على اليوتيوب عن ذلك وبالطبع المشروع يجب أن يتم به استخدام API. وبإمكانك أيضًا التدرج في مستوى صعوبة المشاريع، ابحث عن مشروع بسيط ثم متوسط ثم مشروع single page app على اليوتيوب من خلال كتابة مشاريع جافاسكريبت أو js project وأنا أفضل بالإنجليزية إذا استطعت. وتلك مدارس فالبعض قد ينصحك بتعلم الأساسيات ثم الإنتقال مباشرًة لـ React لكن تلك التجربة لا أنصح بها. بالطبع لا يوجد شخص على علم بجميع تفاصيل اللغة لكن يوجد مبرمج متمكن من اللغة من خلال تعلمه للأساسيات بشكل قوي والتطبيق عليها والبحث والقراءة عن ما لا يفهمه أو يعرفه وأيضًا سنوات الخبرة والمشاريع التي عمل عليها يتعلم من خلالها ما لا يمكن تعلمه من خلال مشاهدة بعض الشروحات. وجميع المبرمجين يعتمدوا على البحث بشكل كبير من أجل تذكر أو معرفة كيفية تنفيذ أمر معين فهو لن يتذكر كل شيء وأيضًا الكثير من المشاكل تم حلها من قبل، وبخصوص تلك النقطة الأفضل التفكير في الحل بمفردك وتفقد سبب المشكلة قبل البحث إن كانت في الكود الخاص بك وليس مشكلة في مكتبة مثلاً. وبالطبع المشاريع المتقدمة تتعلم من خلالها الكثير مقارنًة بالمشاريع البسيطة لذلك أخبرتك بتنفيذ مشروع مثل single page app، ولكن كن رحيمًا بنفسك ولا ترهقها بالتفكير الزائد فأنت ما زلت تتعلم ولا مشكلة في كونك لا تعلم لكنك تتعلم وتحاول. لا أنصحك إطلاقًا بالإبتعاد لمدة 3 أشهر ستنسى ما تعلمته في البداية عليك بتثبيت ذلك من خلال المشاريع واكتساب الخبرة لذلك عليك بتقسيم الوقت ما بين تنفيذ مشاريع وما بين تعلم مهارة الـ Problem Solving إدارة الوقت هي أهم شيء. ولكن هل أنت تعلم مهارت الـ Problem Solving من أجل مقابلة العمل أم ماذا؟ فإذا كنت كذلك فمن الأفضل لك حل المسائل من على موقع leetcode وأيضًا البدء بالحل بعد الإنتهاء من مسارك البرمجي وتعلم اللغات والتقنيات المطلوبة للوظيفة التي تريدها أي عند بدء رحلة التقديم على الوظائف مباشرًة1 نقطة
-
واحدة من المفارقات التي لا ينتبه لها الطلاب عادة هي التدريب أثناء التعلم، انظر لموضوع تعلم React على أنه لا يتعارض أصلا مع موضوع تطبيق جافاسكربت، فرياكت ما هي إلا مكتبة جافاسكربت، وممارستها ليست إلا ممارسة لمفاهيم جافاسكربت التي تعرفها فقط. فضلا عن أن مكتبات وأطر عمل جافاسكرربت تحسن من مستواك في فهم اللغة نفسها. نفس الشيء بالنسبة لمهارات حل المشكلات وغيرها، فأنت ستتعلمها هي الأخرى بتطبيقك لمثل هاته المفاهيم. ولذلك فإن الخطوة التالية هي مواصلة المسير، والتعرض للمزيد من المادة العلمية مع ممارستها وتطبيقها. ثالثا، لا يوجد أي شيء لا أهمية منه. كل ما تعلمته ستحتاجه في جزئية ما، والإلمام به سيعطيك بعد نظر وسعة إطلاع تساعدك في حل المشكلات واقتباس الحلول وايجادها. ولذلك لا تستهن بأي ما تتعلمه وانظر لكل ذلك على أنه مهم سيأتي وقته.1 نقطة
-
أولاً يمكنك البدء في تعلم React.js ستجد أن فهم مفاهيم JavaScript الأساسية سيساعدك في فهم وتطبيق React.js بشكل أفضل والمعلومات التي تعلمتها حسب المعلومات التي قمت بكتابتها فإنك لا تحتاج لأي مهارة اخرى للبدأ في تعلم React.js ولكن . إذا كنت تشعر بالرغبة في تعزيز فهمك وخبرتك في JavaScript قبل الانتقال إلى React.js، يمكنك بدء بناء تطبيقات عملية باستخدام JavaScript كما أن بناء تطبيق كامل بواسطة javascript سيوضح لك الفائدة من استخدام إطار العمل react.js عملياً وذلك مهم جداً و إليك بعض المشاريع العملية التي يمكنك تطبيقها لتعزيز فهمك وتطبيق مفاهيم JavaScript: يمكنك إنشاء تطبيق واجهة مستخدم تفاعلية باستخدام HTML وCSS مع إضافة تفاعلات JavaScript. يمكنك إنشاء نموذج تسجيل الدخول أو معرض صور يعرض الصور بشكل ديناميكي أو قائمة مهام قابلة للتعديل. قم بإنشاء لعبة بسيطة باستخدام JavaScript. يمكنك إنشاء لعبة تفاعلية مثل لعبة تخمين الأرقام أو لعبة تطابق البطاقات أو لعبة تتبع النقاط. قم بربط تطبيقك بواجهة برمجة التطبيقات (API) للحصول على البيانات من مصادر خارجية. يمكنك استخدام API للحصول على بيانات الطقس أو الأخبار أو الأفلام وعرضها بشكل ديناميكي في تطبيقك. قم بتطوير ألعاب على الويب باستخدام إطار عمل مثل Phaser أو Three.js. يمكنك إنشاء ألعاب ثنائية الأبعاد أو ثلاثية الأبعاد وتضمين المنطق والتفاعلات باستخدام JavaScript. قم بإنشاء تطبيقات ويب فعالة مثل تطبيقات الدردشة ثانياً بالنسبة للخصائص والوظائف المتقدمة في JavaScript، يمكنك تعلمها وتطبيقها عندما تبدأ في بناء مشاريع متقدمة. قد يتطلب ذلك مزيدًا من الاستكشاف والممارسة على نحو أعمق بعد اكتسابك للمفاهيم الأساسية والمتوسطة والمبرمج لا يتوقف عن التعلم حيث بعض التطبيقات والمشاريع تتطلب منك تعلم المزيد . ثالثاً مراجعة المفاهيم بعد الثلاث شهور: بعد فترة الانتقال إلى تطوير تطبيقات الموبايل وتنمية مهارات Problem Solving في C++، يمكنك مراجعة مفاهيم JavaScript التي تعلمتها بسرعة. ولكن من الجيد أن تقوم بتنمية مهاراتك في Problem Solving من خلال حل التحديات في JavaScript . هذا سيساعدك في تطوير منطقك البرمجي وتعزيز قدراتك في الحلول الفعالة للمشاكل. ومع ذلك، لن تترك JavaScript أما إذا كنت تريد التدريب بواسطة اللغة ++c فالأفضل هو التعلم بالتوازي مع متابعة الدورة1 نقطة
-
نتعرف في مقال اليوم على مفهوم الخوارزميات Algorithms التي تعد واحدة من المفاهيم الأساسية المستخدمة في مجال الرياضيات والبرمجة وعلوم الحاسوب والعديد من المجالات المختلفة الأخرى كما يمكننا تطبيقها في حل مشكلات حياتنا اليومية، ونكتشف أهم خصائصها وطرق كتابتها والتعبير عنها وطريقة تحويلها إلى كود برمجي. كما نوفر في ختام المقال أهم النصائح التي تساعدك في تعلم الخوارزميات بالطريقة الصحيحة. ما هي الخوارزميات Algorithms الخوارزمية هي مصطلح يشير إلى مجموعة من الخطوات المرتبة المتبعة لحل مشكلة ما أو إنجاز مهمة معينة، ويعود أصل هذا المفهوم إلى العالم المسلم أبي عبد الله محمد بن موسى الخوارزمي مؤلف كتاب “المختصر في حساب الجبر والمقابلة” والذي قدم فيه طرقًا منهجية جديدة لإجراء العمليات الحسابية وحل المعادلات الخطية والتربيعية بشكل خطوات متسلسلة ومن هنا نشأت كلمة خوارزمية نسبة إلى طريقة التفكير التي أوجدها لحل المسائل والتي كان لها أثرًا كبيرًا في تطوير الخوارزميات المستخدمة في شتى المجالات. فهناك خوارزميات تستخدم في مجال الرياضيات مثل خوارزمية خوارزمية إقليدس Euclidean algorithm وخوارزمية غربال إراتوستينس Sieve of Eratosthenes و خوارزميات تستخدم في مجال البرمجة وعلوم الحاسوب مثل خوارزميات الترتيب Sorting algorithms التي تساعدك على ترتيب مجموعة من العناصر وفق ترتيب تصاعدي، ويفيدنا الترتيب في حل الكثير من المشكلات الحاسوبية بسهولة أكبر على سبيل المثال البحث عن اسم ما في سلسلة عناصر مرتبة وفق التسلسل الأبجدي أسرع وأسهل من البحث في سلسلة عناصر غير مرتبة لذا من الأفضل أن ترتب العناصر قبل البحث فيها. كما تستخدم الخوارزميات كذلك في حياتنا اليومية في العديد من المواقف، على سبيل المثال لكل منا طريقة أو خوارزمية يعد من خلالها كوب القهوة الصباحي يوميًا بنفس الطريقة، بالنسبة لي أتبع الخطوات التالية: املأ الركوة أو دلة القهوة بالماء. سخّن الماء. انتظر حتى يغلي الماء. أضف القهوة وحركها. اسكب القهوة في الكوب. أعتقد أن فكرة الخوارزمية قد أصبحت واضحة بالنسبة لك، فهي ببساطة ليست سوى مجوعة من الخطوات المرتبة لإنجاز مهمة محددة وقد تختلف خطوات الخوارزمية المتبعة لإنجاز المهمة من شخص لآخر لكن المهم أن تكون النتيجة النهائية صحيحة. سنركز في فقراتنا التالية على مفهوم الخوارزميات في علوم الحاسوب والتي تعني بشكل محدد مجموعة من الخطوات المفصلة والمرتبة التي تخبر الحاسوب بطريقة أداء مهمة ما والتي تحوّل بسهولة إلى برامج حاسوبية يمكن للحاسوب تنفيذها. خصائص الخوارزميات يجب أن تتسم الخوارزمية بمجموعة من المواصفات أو الخصائص الأساسية، وتساعدك معرفة هذه الخصائص على تصميم الخوارزمية بشكل صحيح، ومن أهم هذه الخصائص: يجب أن تتكون الخوارزمية من تعليمات محددة وواضحة ومفهومة وقابلة للتنفيذ. يجب أن تكون الخوارزمية فعالة وقادرة على حل المشكلة المطلوبة بطريقة صحيحة وبسيطة قدر المستطاع. يمكن أن لا تحتوي الخوارزمية على مدخلات أو قد تتضمن عدة مدخلات. يجب أن تحتوي الخوارزمية على خرج واحد أو أكثر وينبغي أن تؤدي نفس المدخلات دائمًا إلى نفس النتائج أو المخرجات. يجب أن تجد الخوارزمية حلاً للمشكلة المطلوبة بعد عدد منتهي من الخطوات وتنجز خلال فترة زمنية محددة لتكون فعالة وذات جدوى. طرق تمثيل الخوارزمية يمكن تمثيل الخوارزمية بطرق مختلفة تصف من خلالها كيفية حل المشكلة، وفيما يلي نوضح عدة طرق ممكنة لتمثيل الخوارزمية: يمكنك تمثيل الخوارزمية بلغتك المحكية أو اللغة العامية بأي طريقة تفهمها وتستوعبها دون الحاجة للالتزام بأي قواعد محددة، وهذا الأسلوب يسهل عليك مشاركة الخوارزمية مع أشخاص آخرين مهما كانت خلفياتهم التقنية. كما يكمن أن تتبع طريقة أكثر رسمية في التعبير اللفظي باستخدام ما يعرف بالكود الزائف Pseudo-code الذي يشبه أسلوب الكتابة في لغة البرمجة ويعمل كحل وسط بين اللغة المحكية ولغة البرمجة. كما يمكن تمثيل الخوارزمية بطريقة رسومية باستخدام المخططات الهيكلية أو المخططات الانسيابية Flowcharts التي تتكون من رموز وأشكال أساسية مرتبطة بأسهم تظهر الترتيب المنطقي للخطوات، ولكل شكل هدف محدد. حيث يمثل الشكل البيضوي بداية ونهاية المخطط، ويمثل المستطيل عملية ما، ويشير متوازي الأضلاع إلى إدخال وإخراج البيانات، ويدل المعين على عملية اتخاذ قرار. على سبيل المثال إذا جربنا كتابة خوارزمية صنع كوب قهوة التي وضحناها سابقًا بشكل لفظي على شكل كود زائف يمكن أن نعبر عنها بالأسلوب التالي: ابدأ . املأ دلة القهوة بالماء. سخن الماء. تحقق مما إذا كان الماء يغلي. إذا كان الجواب صحيح انتقل إلى الخطوة التالية. إذا لم يكن الجواب صحيح عد إلى الخطوة السابقة. ضع القهوة فوق الماء المغلي وحركها. اسكب القوة في الكوب. النهاية. ويمكن كذلك تمثيل خوارزمية عمل كوب القهوة بشكل مخطط تدفقي رسومي كما يلي: خطوات كتابة الخوارزمية لتحديد خطوات الخوارزمية وكتابتها بشكل صحيح علينا بدايةً فهم المشكلة بشكل جيد وبعدها البدء بتحديد مشكلة الخوارزمية وتحديد مدخلات الخوارزمية من خلال تحديد كافة الأمثلة أو الحالات التطبيقية instances التي تعمل عليها الخوارزمية، ثم تحديد الخرج التي سنحصل عليه بعد تشغيل الخوارزمية على إحدى تلك الحالات، واعلم أن التمييز بين المشكلة نفسها والحالة التطبيقية عليها instance مهم جدًا. على سبيل المثال تُعرَّف مشكلة خوارزمية الفرز أو الترتيب sorting على النحو التالي: المشكلة: الترتيب. المدخلات: تسلسل من عدد n من المفاتيح a_1, a_2, ..., a_n الخرج: إعادة ترتيب تسلسل المدخلات بحيث يكون لدينا: b_1, b_2,<= ... <= b_{n-1}, b_n يمكن أن تعمل خوارزمية الفرز على عدة حالات instances، على سبيل المثال يمكن أن يكون دخل هذه الخوارزمية عبارة عن مصفوفة من السلاسل النصية التي نحتاج لترتيبها أبجديًا مثل {Haskell, Emacs} أو يكون عبارة عن تسلسل من الأرقام التي نريد ترتيبها تصاعديًا مثل {154، 245، 1337}. الخطوة التالية هي معرفة التعليمات التي ستعمل بها الخوارزمية وتعالج المدخلات للحصول على المخرجات وكتابتها بالترتيب الصحيح والتعبير عنها بالطريقة التي تفضلها وبعدها ستكون جاهزًا لتحويل الخوارزمية إلى كود برمجي قابل للتنفيذ على الحاسوب. مثال على كتابة خوارزمية Fizz Buzz سنوضح في هذه الفقرة كيفية حل مسألة Fizz Buzz وهي خوارزمية معروفة تحل مشكلة بسيطة ويطلب منك حلها في معظم المقابلات البرمجية والهدف منها طباعة مجموعة من الأعداد الصحيحة من واحد إلى N ولكنك ستطبع كلمة Fizz إذا كان العدد قابلاً للقسمة على 3، و كلمة Buzz إذا كان العدد قابلاً للقسمة على 5، وكلمة Fizzbuzz إذا كان العدد قابلاً للقسمة على العددين 3 و 5 بذات الوقت. يشير المعنى الحرفي لهاتين الكلمتين إلى الصوت التي تحدثه كل كلمة منهما، ويرجع أصل استخدامها إلى لعبة أطفال شهيرة تُسمّى fizz buzz تقوم على نفس المبدأ وتستخدم لتعلم الأطفال عملية القسمة. في الفقرات التالية سنكتب هذه الخوارزمية بلغة البرمجة سويفت Swift وفي حال لم تكن تملك خبرة في هذه اللغة اكتبها بأي لغة برمجة تعرفها مثل لغة بايثون أو جافا او اكتبها بالكود الزائف. بفرض أن دخل الخوارزمية هو سلسلة الأرقام التالية: 1 2 3 4 5 6 7 8 9 10 كما وضحنا سابقًا، يشير المصطلحَان Fizz و Buzz إلى أيّ عدد مضاعف للعدد 3 أو 5 على الترتيب، أي إذا كان العدد يقبل القسمة على 3 فيمكن استبداله بالكلمة Fizz، وإذا كان قابلاً للقسمة على 5 فيمكن استبداله بكلمة Buzz. أما إذا كان من مضاعفات 3 و 5 بذات الوقت فيُستبدَل بكلمة FzzBuzz أي سيكون الخرج كما هو مبين في الصورة التالية: يمكن التعبير عن الخوارزمية بشكل كود زائف كما يلي: ابدأ. قم بتكرار الأعداد من 1 إلى 10. تحقق مما إذا كان العدد الحالي قابلاً للقسمة على 3. إذا كان الجواب صحيح اطبع الكلمة fizz. إذا لم يكن الجواب صحيح، انتقل إلى الخطوة التالية. تحقق فيما إذا كان العدد الحالي قابلاً للقسمة على 5. إذا كان الجواب صحيح اطبع الكلمة buzz. إذا لم يكن الجواب صحيح، اعرض العدد الحالي. كرر الحلقة حتى تصل إلى الرقم 10. النهاية. لنعبر عن هذه الخطوات من خلال رسم مخطط تدفقي يوضح بشكل رسومي خطوات عمل الخوارزمية. تنفيذ خوارزمية Fizz Buzz من خلال لغة البرمجة Swift بعد أن فهمت الخوارزمية ستتمكن من تنفيذ هذه الخوارزمية بسهولة وتحويلها لبرنامج حاسوبي، افتح محرر الأكواد البرمجية Xcode أو VS code أو أي محرر آخر تفضله لكتابة برنامج جديد، يبدأ البرنامج بتعلمية تهيئة مصفوفة من 1 إلى 10 let number = [1,2,3,4,5,6,7,8,9,10] نريد أن نعالج مصفوفة الدخل والحصول على الخرج المطلوب، أي نريد أن نستبدل 3 بالكلمة fizz هنا و 5 بالكلمة buzz كما شرحنا سابقًا. ولتحقيق ذلك نمرّ على جميع عناصر المصفوفة والتحقق من كل عنصر من عناصرها ولذا سننشئ حلقة for تمرّ عبر هذه العناصر كما يلي: for num in number { // الحسابات هنا } بعد هذا، سنستخدم العبارة الشرطية if else، وعامل باقي القسمة module operator في لغة swift أي % لتحديد مواقع fizz و buzz كما يلي: for num in number { if num % 3 == 0 { print("\(num) fizz") } else { print(num) } } يكون الخرج الناتج من تنفيذ البرنامج هو كالتالي: 1 2 3 fizz 4 5 6 fizz 7 8 9 fizz 10 سنضيف الآن الجزء المتعلق بالكلمة Buzz مستخدمين نفس الآلية التي اتبعناها في كتابة الكود السابق: for num in number { if num % 3 == 0 { print("\(num) fizz") } else if num % 5 == 0 { print("\(num) buzz") } else { print(num) } } بعد إضافة الكود السابق سيكون الخرج الناتج من تنفيذ البرنامج بالشكل التالي: 1 2 3 fizz 4 5 buzz 6 fizz 7 8 9 fizz 10 سنزيد عناصر المصفوفة إلى 1-15. لاحظ أنّه بما أن 15 مضاعف لكلّ من 3 و 5، فينبغي استبدالها بـ fizz buzz: for num in number { if num % 3 == 0 && num % 5 == 0 { print("\(num) fizz buzz") } else if num % 3 == 0 { print("\(num) fizz") } else if num % 5 == 0 { print("\(num) buzz") } else { print(num) } } لا تزال لدينا مشكلة قائمة في الكود أعلاه، فالغرض الأساسي من الخوارزمية هو ترشيد وقت التنفيذ. تخيّل لو زدنا نطاق المصفوفة من 1-15 إلى 1-100، سيكون على مُصرِّف اللغة فحص كل عدد على حدة لتحديد ما إذا كان قابلاً للقسمة على 3 أو 5، ثمّ سيمرّ على الأعداد ثانيةً للتحقق ممّا إذا كانت قابلة للقسمة على 3 و 5 (معًا)، كما سيتعيّن على الشيفرة أن تمرّ على كلّ عدد في المصفوفة مرّتين لأنّها ستتحقق من قابلية قسمة العدد على 3 أولًا، ثمّ على 5. ولتسريع هذه العملية، يمكن أن نأمر المصرّف بقسمة الأعداد على 15 مباشرة. انظر الشيفرة النهائية: for num in number { if num % 15 == 0 { print("\(num) fizz buzz") } else if num % 3 == 0 { print("\(num) fizz") } else if num % 5 == 0 { print("\(num) buzz") } else { print(num) } } هنيئًا لك، بهذا تكون قد كتبت أوّل خوارزمية لك، يمكنك استخدامها في أيّ لغة برمجة، وستعمل كما هو مُتوقّع. تعلم الخوارزميات إن تعلم الخوارزميات خطوة مهمة لأي شخص مهتم بالبرمجة والتطوير فهي تساعده على فهم البرمجة بشكل أفضل وتكسبه مهارة فهم المشكلات البرمجية المعقدة واختيار الطرق الأنسب والأكثر كفاءة لحلها. كما يرتبط تعلم الخوارزميات مع تعلم هياكل البيانات التي تساعدك على تنظيم وإدارة وتخزين ومعالجة البيانات بكفاءة وتتضمن معظم مقابلات العمل للوظائف البرمجية أسئلة متعلقة بفهم أساسيات الخوارزميات وهياكل البيانات لذا من الضروري لأي مهتم بمجالات العمل البرمجي تعلمها بشكل جيد. وإليك أهم النصائح والخطوات التي تساعدك على تعلم الخوارزميات بكفاءة: عزز مهارة التفكير المنطقي فهي مهارة أساسية يحتاجها أي مبرمج. درب نفسك على التفكير الخوارزمي أي التفكير في أي مشكلة تواجهك بطريقة تشبه طريقة تفكير الحاسوب من خلال تحديد الخطوات المفصلة للحل أو تقسيم المشكلة إلى مشكلات أصغر وحل كل جزء على حدا. تعلم أهم أنواع الخوارزميات المعروفة التي يحتاجها معظم المطورين والطرق المختلفة لتنفيذها وكفاءة كل طريقة منها. تعلم كيف تحلل أي مشكلة برمجية وتفهمها جيدًا وتخطط لها على الورق وتمثلها بالطرق الخوارزمية وتأكد من أنك فهمتها بشكل كامل قبل كتابة كودها البرمجي. تعرف على أهم هياكل البيانات في لغة البرمجة التي تستخدمها لكتابة برامجك وتطبيقاتك وفكر بالبنية الأفضل لحل مشكلتك. طبق الخوارزميات لحل مشكلات بسيطة وتدرب على حل التحديات البرمجية Problem Solving وهي كثيرة عبر الإنترنت وتضم الكثير من المهتمين بالبرمجة والتطوير وقارن إجاباتك مع إجابات الآخرين وتناقش معهم حول حلولهم لتكسب المزيد من الخبرات. فكر في تنفيذ عدة طرق لحل المشكلات البرمجية التي تواجهك وقارن أيّ هذه الطرق أسرع وأكثر كفاءة وفعالية. تعلم مفهوم تعقيد الخوارزميات الذي يعبر عن مقدار الوقت أو مساحة الذاكرة التي تستغرقها الخوارزمية للتنفيذ واستفذ منه في كتابة شيفرات برمجية فعالة. اعتمد مصادر تعلم موثوقة ومنهجية، ستجد في أكاديمية حسوب الكثير من المقالات والدروس المفيدة لتعلم البرمجة والخوارزميات، كما توفر موسوعة حسوب توثيقًا باللغة العربية لأشهر الخوارزميات التي يحتاج أي مطور لمعرفتها، كما يمكنك الانضمام إلى دورة علوم الحاسوب التي تضم العديد من المسارات المفيدة لتعلم أساسيات البرمجة وتتضمن عدة مسارات تشرح الخوارزميات وطريقة التفكير المنهجي في حل أي مشكلة وكتابة خوارزمياتها قبل البدء ببرمجتها مما يصقل مهاراتك التقنية لتفكر كمهندس برمجيات بدلاً من أن تكون مجرد مبرمج يكتب الأكواد وينفذها فحسب. الخلاصة تعرفنا في مقال اليوم على ما هي الخوارزميات وما الخطوات التي يجب اتباعها لكتابة الخوارزمية وتمثيلها بطرق مختلفة واستعرضنا في الختام أهمية تعلم الخوارزميات واكتساب مهارة التفكير المنهجي لحل المشكلات بطريقة تشبه طريقة عمل الحاسوب وأهم النصائح التي تساعدك على تعلمها وإتقانها كخطوة أساسية قبل تطوير مهارات البرمجة والتطوير. ترجمة -بتصرّف- للفصل الأول من كتاب Algorithms Notes for Professionals. اقرأ أيضًا المرجع الشامل إلى تعلم الخوارزميات للمبتدئين دليل شامل عن تحليل تعقيد الخوارزمية بناء مصنف بالاعتماد على طرق تعلم الآلة بلغة بايثون باستخدام مكتبة Scikit-Learn - النسخة الكاملة لكتاب مدخل إلى الذكاء الاصطناعي وتعلم الآلة1 نقطة