لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 11/26/23 في كل الموقع
-
الإصدار 1.0.0
14680 تنزيل
لا يزال تعلم البرمجة نفسه مفيدًا لكثير من مستخدمي الحواسيب حتى لو كانوا لن يكتبوا برامج بأنفسهم، ذلك أن فهم كيفية تفكير الحواسيب معين على جعل التطبيقات أكثر منطقية وصديقة للمستخدم، فكثير من البرامج تسمح بتخصيصها أو تعديلها عن طريق كتابة بعض البريمجات الصغيرة التي تسمى بالشيفرات الجامعة أو الماكرو macro، وتلك يكتبها المستخدم حتى لو لم يكن مبرمجًا. إضافة إلى أن لدينا الويب بما فيه من فرص لإنشاء موقعك الخاص الشخصي أو التجاري، وإن فعلت ستجد أنك محتاج في مرحلة ما إلى إضافة بعض الخصائص الديناميكية لصفحاتك، وهذا من البرمجة لا شك، ثم إن الإنترنت والويب يحفزان المرء على الاهتمام العام بالحواسيب، وسيقود ذلك الاهتمام لا محالة إلى الرغبة في التحكم والسيطرة على ما يراه المرء فيهما، وما ذلك مرة أخرى إلا برمجة! هذا الكتاب مترجم عن الكتاب Learning to Program لكاتبه Alan Gauld وهو مبرمج شبه متقاعد بخبرة تصل إلى أربعين عامًا في البرمجة، ويُعد الكتاب من أفضل المراجع وأوضحها لتعلم البرمجة وقد اختارته أكاديمية حسوب بعناية لنقله للعربية. سنتحدث في الكتاب عن النظرية الأساسية التي بنيت عليها برمجة الحواسيب، وبعض من تاريخها، والتقنيات الأساسية المطلوبة لحل المشاكل التي تواجهنا كمبرمجين، لكن لن نتعمق بحيث نشرح تقنيات أو تفاصيل خاصة بلغة برمجة بعينها، بل سنستخدم عدة لغات برمجة كي ترى بنفسك أن كل لغة تمتاز عن غيرها في مجال بعينه أو مهام بعينها، لكن مع هذا فأغلب محتوى الكتاب سيكون بلغة اسمها بايثون Python، وكذلك سنذكر في الكتاب لغتي برمجة إضافيتين للغة بايثون منهما لغة اسمها جافاسكربت JavaScript كلغات بديلة، وذلك لبيان أن المفاهيم والتقنيات الأساسية ستعمل بغض النظر عن اللغة التي تستخدمها، وبمجرد أن تتقن الكتابة بلغة ما تستطيع الانتقال إلى غيرها بسهولة في بضعة أيام. وإن سبب اختيارنا للغة بايثون والتركيز عليها في شرح هذا الكتاب أنها سهلة التعلم، فبنيتها اللغوية بسيطة وبها مزايا قوية مدمجة فيها بنفس الوقت، كما تدعم كثيرًا من أنماط البرمجة، بداية من تلك البسيطة إلى المتقدمة، إضافة إلى أنها تعمل على المنصات على اختلافها، من يونكس إلى ويندوز إلى ماك وغيرها، وأخيرًا فإن لها مجتمعًا لطيفًا ومستعد للمساعدة من مستخدميها، وكل ذلك مهم للمبتدئ الراغب في تعلم البرمجة. يستهدف الكتاب القارئ الذي يعلم كيف يستخدم نظام التشغيل الذي لديه سواء كان ويندوز أو ماك أو لينكس أو غيرها رغم أن غير المحترفين لتلك النظم سيتمكنون من التعلم أيضًا وإن كان بوتيرة أبطأ قليلًا، كما نتوقع أن يفهم القارئ بعض المفاهيم الرياضية الأساسية مثل حساب الأشكال البسيطة والإحداثيات الهندسية والمجموعات وبعض الجبر، أي في مستوى طالب الصف الثاني الثانوي مثلًا. يمكنك قراءة الكتاب على شكل فصول منشورة على موقع أكاديمية حسوب مباشرةً إن كنت تحب القراءة على المتصفح مباشرة، وتجد الفصول مجمعة تحت وسم "تعلم البرمجة" وإليك روابطها تاليًا: ما هي البرمجة ومتطلبات تعلمها؟ بداية رحلة تعلم البرمجة التسلسلات البسيطة في البرمجة مدخل إلى البيانات وأنواعها: أنواع البيانات الأساسية مدخل إلى البيانات وأنواعها: التجميعات Collections بعض التسلسلات النصية المهمة لتعلم البرمجة الحلقات التكرارية في البرمجة أسلوب كتابة الشيفرات البرمجية وتحقيق سهولة قراءتها كيفية قراءة البرامج لمدخلات المستخدم مقدمة في البرمجة الشرطية البرمجة باستخدام الوحدات التعامل مع الملفات في البرمجة كيفية التعامل مع النصوص في البرمجة كيفية التعامل مع الأخطاء البرمجية فضاءات الأسماء Namespaces في البرمجة التعابير النمطية RegEx في البرمجة البرمجة كائنية التوجه object oriented programming البرمجة الحدثية Event Driven Programming المساقة بالأحداث برمجة الواجهات الرسومية باستخدام Tkinter مفهوم التعاودية Recursion مقدمة إلى البرمجة الوظيفية Functional Programming دراسة حالة برمجية التعامل مع قواعد البيانات التواصل مع نظام التشغيل عبر بايثون التواصل بين العمليات في البرمجة تواصل البرامج والعمليات البرمجية عبر الشبكة كيفية التعامل مع الويب برمجة عملاء ويب باستخدام بايثون كيفية كتابة تطبيقات الويب استخدام أطر العمل في برمجة تطبيقات الويب: فلاسك نموذجا البرمجة المتزامنة وفائدتها في برمجة التطبيقات1 نقطة -
الإصدار 1.0.0
6312 تنزيل
تُعدّ هياكل البيانات data structures والخوارزميات algorithms واحدةً من أهم الاختراعات التي وقعت بالخمسين عامًا الأخيرة، وهي من الأدوات الأساسية التي لابُدّ أن يدرسها مهندسي البرمجيات. غالبًا ما تكون الكتب المتناولة لتلك الموضوعات -وفقًا للكاتب- ضخمةً للغاية، كما أنها عادةً ما تُركزّ على الجانب النظري، وتُقدِّم هذه المادة العلمية بدون سياق واضح وبدون أي حافز، فتَعرِض الهياكل البيانية واحدةً تلو الأخرى. هذا الكتاب مترجم عن الكتاب الشهير Think Data Structures لمؤلفه Allen B. Downey والذي يعد مرجعًا عمليًا في شرح موضوعي هياكل البيانات والخوارزميات اللذين يحتاج إلى تعلمهما كل مبرمج ومهندس برمجيات يتطلع إلى احتراف مهنته وصقل عمله ورفع مستواه. يحاول هذا الكتاب تنظيم الموضوعات نوعًا ما من خلال التركيز على برمجة تطبيق -برمجة محرك بحث-، ويَستخدِم هذا التطبيق هياكل البيانات بشكل مكثف، وهو في الواقع موضوع مهم وشيق بحد ذاته. في الحقيقة، سيدفعنا هذا التطبيق إلى دراسة بعض الموضوعات التي ربما لن تتعرَّض لها ببعض الفصول الدراسية التمهيدية الخاصة بمادة هياكل البيانات، حيث سنتعرَّض هنا مثلًا، لحفظ هياكل البيانات persistent data structure مثل ريدس Redis. يُقدِّم الكتاب أيضًا بعض الأساسيات التي تُمارَس عادةً بهندسة البرمجيات، بما في ذلك نظم التحكُّم بالإصدار version control، واختبار الوحدات unit testing. تتضمَّن غالبية فصول الكتاب تمرينًا يَسمَح للقراء بتطبيق ما تعلموه خلال الفصل، حيث يُوفِّر كل تمرين اختبارات أوتوماتيكية لفحص الحل، وبالإضافة إلى ذلك، يُوفِّر الكاتب حلًا لغالبية التمارين ببداية الفصل التالي. هذا الكتاب مُخصَّص لطلبة الجامعات بمجال علوم الحاسوب والمجالات المرتبطة به، ولمهندسي البرمجيات المحترفين، وللمتدربين بمجال هندسة البرمجيات، وكذلك للأشخاص الذين يستعدون لمقابلات العمل التقنية. ينبغي أن تكون على معرفة جيدة بلغة البرمجة جافا قبل أن تبدأ بقراءة هذا الكتاب. وبالتحديد، لابُدّ أن تَعرِف كيف تُعرِّف صنفًا class جديدًا يمتدّ extend أو يرث من صنف آخر موجود، إلى جانب إمكانية تعريف صنف يُنفِّذ واجهة interface. إذا لم تكن لديك تلك المعرفة، فيُمكِنك البدء بسلسلة مدخل إلى جافا فهي مترجمة عن كتاب شهير يشرح لغة البرمجة جافا. يمكنك قراءة الكتاب على شكل فصول منشورة على موقع أكاديمية حسوب مباشرةً إن كنت تحب القراءة على المتصفح مباشرة، وتجد الفصول مجمعة تحت وسم "هياكل البيانات 101" وإليك روابطها تاليًا: طريقة عمل الواجهات في لغة جافا مدخل إلى تحليل الخوارزميات تحليل زمن تشغيل القوائم المنفذة باستخدام مصفوفة تحليل زمن تشغيل القوائم المنفذة باستخدام قائمة مترابطة تحليل زمن تشغيل القوائم المنفذة باستخدام قائمة ازدواجية الترابط تنفيذ أسلوب البحث بالعمق أولا باستخدام طريقتي التعاود والتكرار في جافا تنفيذ أسلوب البحث بالعمق أولا باستخدام الواجهتين Iterables وIterators استخدام خريطة ومجموعة لبناء مفهرس Indexer تحليل زمن تشغيل الخرائط المنفذة باستخدام مصفوفة في جافا تنفيذ الخرائط باستخدام التعمية hashing في جافا تحسين أداء الخرائط المنفذة باستخدام التعمية HashMap في جافا تحليل زمن تشغيل الخرائط المنفذة باستخدام شجرة بحث ثنائية TreeMap في جافا استخدام أشجار البحث الثنائية والأشجار المتزنة balanced trees لتنفيذ الخرائط استخدام قاعدة بيانات Redis لحفظ البيانات فهرسة الصفحات وتحليل زمن تشغيلها باستخدام قاعدة بيانات Redis البحث الثنائي Boolean search ودمج نتائج البحث وترتيبها نظرة سريعة على بعض خوارزميات الترتيب1 نقطة -
السلام عليكم ورحمة الله وبركاته, أريد أن اجعل حجم الخط متجاوب بحسب طول النص وليس بحسب عرض الشاشة, لأن كما ترون في الصور التي في الأسفل إذا كانت الكلمة طويلة تخرج من المساحة الخاصة بها, ولا أريد تصغير حجم الخط لأنني أرى بأن الحجم مناسب للكلمات القصيرة, فهل يوجد حل لهذه المشكلة ؟ مع العلم أنني استخدم مكتبة Material UI مع React JS وشكرًا لكم1 نقطة
-
السلام عليكم. في الكود التالي تظهر لي رسالة خطأ { "message": "Invalid Id" } الكود /**----------------------------------------------- * @desc Get Posts Count * @route /api/posts/count * @method GET * @access public ------------------------------------------------*/ const getPostCountCtrl = asyncHandler(async (req, res) => { const countPosts = await Post.count(); console.log(countPosts) res.status(200).json(countPosts); }); ********************************************************** // /api/posts/count router.get("/count", getPostCountCtrl) رسالة الخطأ التي سبق أن ذكرتها تظهر فقط عند إستعمال الوسيط التالي (validateObjectId) module.exports = (req, res, next) => { if (!mongoose.Types.ObjectId.isValid(req.params.id)) { return res.status(400).json({message: "Invalid Id"}) } next() } لم أفهم سبب الخطأ لأني لم أستعمل الوسيط و لم أفهم كيف ظهرت رسالة الخطأ. شكرا على المساعدة.1 نقطة
-
الخطأ في الرابط يجب ان يطابق الرابط الموجود في الواجهة الامامية الرابط الموجود في السيرفر من اجل الحصول على id. وهذا ما يفسر انه يعمل في postman ولا يعمل في المتصفح. يجب تعديل المسار الخاص ب Route في الواجهة الامامية كالتالي: <Route path="/edit-title/:id" element="{<EeditTitle />}" />1 نقطة
-
هل يمكنني أن أحصل على كود يقوم بفرز الكلمات على حسب الطول ويقوم بطبع من الأكبر طولاً إلى الأصغر1 نقطة
-
الوسيط validateObjectId يقوم بفحص قيمة المُعامل req.params.id للتحقق من قيمة ObjectId وإن لم تكن القيمة صالحة، فسيُرجع الوسيط استجابة HTTP 400 مع رسالة خطأ Invalid Id. حاول تفقد أين تقع المشكلة، من خلال عرض المزيد من المعلومات كالتالي: module.exports = (req, res, next) => { if (!mongoose.Types.ObjectId.isValid(req.params.id)) { return res.status(400).json({ message: "Invalid Id", invalidId: req.params.id }); } next(); }; أيضًأ هنا: const getPostCountCtrl = asyncHandler(async (req, res) => { console.log("Request params:", req.params); const countPosts = await Post.count(); console.log("Count posts:", countPosts); res.status(200).json(countPosts); });1 نقطة
-
حسب ما فهمت فإنه يمكنك تحقيق هذا السلوك بواسطة تكوين الخط بناءً على طول النص. في React JS مع Material UI، يمكنك تحقيق ذلك باستخدام Typography . import React from 'react'; import Typography from '@material-ui/core/Typography'; const DynamicFontSizeText = ({ text }) => { // تحديد حجم الخط بناءً على طول النص const fontSize = text.length > 10 ? '16px' : '24px'; return ( <Typography variant="body1" style={{ fontSize }}> {text} </Typography> ); }; export default DynamicFontSizeText; في هذا المثال، إذا كانت النصوص قصيرة (10 حروف أو أقل)، سيتم تعيين حجم الخط إلى 24px، وإلا سيتم تعيينه إلى 16px، يمكنك ضبط هذه القيم وفقًا لاحتياجات التصميم الخاصة بك. يمكنك استخدام هذا المكون في مكان أي مكون Typography في تطبيقك وتمرير النص كخاصية text: <DynamicFontSizeText text="هنا يكون النص" />1 نقطة
-
import os import requests urls = [ 'https://www.noor-book.com/book/review/577461' ] assa = '.\Outputs' for url in urls: responste = requests.get(url) if responste.status_code == 20: file_path = os.path.join(assa, os.path.basename(url)) with open(file_path, 'wb') as f: f.write(responste.content) اواجة مشكلة في هذا الكود لم ينزل من المتصفح كتاب (pdf)1 نقطة
-
ما طلبته في التحويل السابق، يتطلب وقت ليس ببسيط لتجهيز حل يعمل مع التحويل الخاص بك لأن الملف الذي وضعته يحوي على عمود يحوي 4 اعمدة و كذلك 4 اعمدة تحوي 4 اعمدة متماثلة هذا يعني سوف تقوم بتفكيك قيم هذه الأعمدة، حيث يجب أن تقوم بتعريف قاموس بقيم فارغة وهذا القاموس سوف نضع في جزء المفتاح اسم المادة وفي جزء القيم مصفوفة تحوي اربع قيم خاصة بأعمال السنة والنهائي والمجموع و التقدير وتقوم بفعل ذلك لكل دور ثم بعد الحصول على هذه المعلومات تستطيع بناء ملف excel من جديد ولكن كما ذكرت سوف يستغرق منك ذلك وقت ليس صغير1 نقطة
-
عليك أستخدام خاصية overflow-wrap مع بعض التنسيقات الأخرى لضمان عدم حدوث أية مشاكل، وإليك مثال: HTML: <div class="container"> <p class="long-text">هذا هو نص طويل جدا يحتوي على الكثير من الكلمات والجمل. هذا هو نص طويل جدا يحتوي على الكثير من الكلمات والجمل.</p> </div> CSS: .long-text { overflow-wrap: break-word; /* يُستخدم لتحديد تكسير الكلمات في حال تجاوزت الحاوية حدودها، للحفاظ على التنسيق. */ hyphens: auto; /* تُستخدم لتحديد ما إذا كانت الهوامش (الواصلات) مسموح بها لتقسيم الكلمات عند التمدد على السطر. */ white-space: normal; /* يُستخدم لتحديد كيفية التعامل مع المسافات البيضاء داخل العنصر . */ }1 نقطة
-
1 نقطة
-
في حال كانت المشكلة عامة أي تواجه ذلك مع جميع الإضافات، حاول تجربة حذف الملفات والمجلدات في مجلد الإضافات extensions لحذف جميع الملفات الخاصة بالإضافات والبدء من الجديد، ويقع في المسار التالي: C:\Users\waleed\.vscode\extensions قم باستبدال waleed باسم المستخدم لديك في الويندوز وستجد مجلدات وملفات كالتالي قم بحذفها: في حال استمرت المشكلة قم بتجربة استخدام vpn ثم المحاولة من جديد، وفي حال استمرت المشكلة حاول تثبيت الإضافة يدويًا من خلال ملف VSIX كما بالشرح التالي: وفي حال استمرت المشكلة قم بحذف vscode تمامًا أي uninstall ثم تثبيت أحدث نسخة من جديد.1 نقطة
-
في المشهد سريع التطور للذكاء الصناعي Artificial Intellegence، تلعب لغات البرمجة الذكاء الاصطناعي دورًا محوريًا في تشكيل الطريقة التي نطّور بها الأنظمة والتطبيقات الذكية. توفر لغات البرمجة للمطورين اللبنات الأساسية لتسخير إمكانات الذكاء الاصطناعي وإنشاء حلول مبتكرة من خلال تسهيل عملية بناء نماذج التعلم الآلي وتطبيقات الرؤية الحاسوبية وأدوات معالجة اللغة الطبيعية. تتعمق هذه المقالة الشاملة في المشهد العام للغات برمجة الذكاء الاصطناعي، وتوجهك من خلال عرض المفاهيم الأساسية للغات البرمجة التي تشكل أساس تطوير الذكاء الاصطناعي. سوف نستكشف الأسباب الكامنة وراء بروز لغات معينة في عالم برمجة الذكاء الاصطناعي، مثل لغة بايثون Python ولغة R، ونطلع على العديد من لغات برمجة الذكاء الاصطناعي الأخرى المُستخدمة في بناء نماذج وأنظمة الذكاء الصناعي. سواء كنت مطورًا طموحًا لتعلّم الذكاء الاصطناعي، أو مبرمجًا متمرّسًا يتطلع إلى الانتقال إلى الذكاء الاصطناعي، أو متحمسًا فضوليًا حريصًا على فهم تفاصيل تقنية الذكاء الاصطناعي، تهدف مقالة لغات برمجة الذكاء الاصطناعي هذه إلى تزويدك بفهم شامل للغات برمجة الذكاء الاصطناعي. دعنا نبدأ رحلة لاكتشاف لغات برمجة الذكاء الصناعي التي تعمل على تعزيز مستقبل الآلات الذكية. معايير اختيار لغات برمجة الذكاء الاصطناعي تلعب لغات البرمجة دورًا محوريًا في مجال الذكاء الاصطناعي. إنها بمثابة الوسيلة التي يتم من خلالها تطوير خوارزميات ونماذج وأنظمة الذكاء الاصطناعي وتنفيذها ونشرها. يمكن فهم أهمية لغات برمجة الذكاء الاصطناعي من خلال عدة جوانب رئيسية نذكر منها ما يلي. التعبير والمرونة توفر لغات البرمجة وسيلة للتعبير عن خوارزميات الذكاء الاصطناعي المعقدة والمنطق بطريقة منظمة ومفهومة. توفر مجموعة واسعة من هياكل البيانات والمكتبات التي تُمكّن مطوري الذكاء الاصطناعي من تنفيذ مختلف تقنيات التعلم الآلي والتعلم العميق. المجتمع تتمتع لغات البرمجة المشهورة المستخدمة في الذكاء الاصطناعي، مثل بايثون، بمجتمعات واسعة ونشطة. وهذا يعزز تبادل المعرفة والتعاون وتطوير مكتبات وأطر الذكاء الاصطناعي. على سبيل المثال، لدى موقع حسوب I/O مجتمع خاص بلغة بايثون، وهو مخصص لطرح الأسئلة وتبادل المعارف المتعلقة بلغة بايثون ..إلخ. السرعة والكفاءة تسمح لغات البرمجة مثل بايثون Python وجوليا Julia وC++ لخوارزميات الذكاء الاصطناعي بالعمل بشكل أسرع والتعامل مع مجموعات البيانات الكبيرة بكفاءة. تعتبر تقنيات التحسين في هذه اللغات ضرورية لتطبيقات الذكاء الاصطناعي التي تتطلب معالجة في الزمن الحقيقي Real Time. النماذج الأولية والتجارب لغات مثل بايثون معروفة ببساطتها وسهولة قراءتها، مما يجعلها مثالية للنماذج الأولية السريعة والتجارب في أبحاث وتطوير الذكاء الصناعي. منحنى التعلم بعض لغات البرمجة مثل بايثون Python مناسبة للمبتدئين، مما يتيح لمجموعة واسعة من الأشخاص دخول مجال الذكاء الصناعي. غالبًا ما تحتوي لغات برمجة الذكاء الصناعي على وثائق واسعة النطاق وموارد عبر الإنترنت للتعلم. مكتبات وأطر عمل خاصة بالذكاء الاصطناعي توفر المكتبات وأطر العمل مثل نمباي NumPy وسكاي باي SciPy وباندا pandas في لغة بايثون وظائفًا أساسيةً متعلقة بالذكاء الاصطناعي. قابلية التوسع تصمّم بعض لغات البرمجة لتكون ذات قابلية التوسع، مما يجعلها مناسبة لتطبيقات الذكاء الاصطناعي التي تحتاج إلى معالجة البيانات الضخمة أو العمل في بيئات موزعة. باختصار، لغات البرمجة هي الأدوات الأساسية لتطوير الذكاء الاصطناعي. إنها تمكن مهندسي الذكاء الاصطناعي وعلماء البيانات والباحثين من إنشاء أنظمة ذكية وتحليل البيانات وحل المشكلات المعقدة. يعتمد اختيار لغة البرمجة على تطبيق الذكاء الاصطناعي المحدد وخبرة فريق التطوير ومتطلبات المشروع، ولكن الفهم القوي للغات البرمجة أمر أساسي للنجاح في الذكاء الاصطناعي. دورة الذكاء الاصطناعي احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة. اشترك الآن أشهر لغات برمجة الذكاء الاصطناعي هناك العديد من لغات البرمجة المُستخدمة في مجال الذكاء الصناعي، لكل منها قدرات مختلفة عن الأخرى. نستعرض في هذا القسم أشهر اللغات المستخدمة في برمجة الذكاء الاصطناعي وهي باختصار: لغة بايثون لغة R لغة جافا لغة C++ لغة جوليا Julia لغة برولوج Prolog لغة ماتلاب Matlab لغة سويفت لغة رست Rust لغة ليسب Lisp لغة لوا Lua لغة بيرل Perl بايثون في المشهد الكبير لتطوير الذكاء الاصطناعي، تلعب لغات البرمجة دورًا حاسمًا في تشكيل الطريقة التي تتعلم بها الآلات الذكية وتتحدث وتتفاعل مع العالم. برزت لغة بايثون من بين هذه اللغات كحجر زاوية يقود الابتكار والتحوّل في مجال الذكاء الاصطناعي. اكتسبت لغة بايثون، وهي لغة برمجة عالية المستوى ومتعددة الاستخدامات -شعبية هائلة لبساطتها وقابليتها للقراءة وقوّتها. تؤكد فلسفة تصميم اللغة المعروفة باسم زن بايثون Zen of Python، وهي تسعة عشر «مبدءًا توجيهيًا» لكتابة برامج الحاسب -على الأناقة والبساطة والتطبيق العملي. هذه الفلسفة لها صدى جيد بين أوساط ممارسي الذكاء الاصطناعي الذين يبحثون عن أدوات فعّالة لتسهيل حل المشاكل المعقدة. يمكن أن يُعزى صعود بايثون وهيمنتها على مجال برمجة الذكاء الاصطناعي إلى عدة عوامل: بيئة غنية بالمكتبات وأطر العمل: تفتخر بايثون بمجموعة واسعة من المكتبات والأطر المصممة للذكاء الاصطناعي والتعلم الآلي مثل مكتبة نمباي NumPy وباندا Pandas وماتبلوتليب Matplotlib وأطر عمل مثل تنسرفلو Tensorflow وباي تورش PyTorch وسكايت ليرن Scikit-learn التي توفر إمكانات هائلة لتطبيقات التعلم العميق والتعلم الآلي، مما يتيح للمطورين إنشاء نماذج معقدة وتدريبها بسهولة. سهولة الاستخدام وقابلية القراءة: تعمل صياغة بايثون البسيطة والسهلة على تسريع عملية التطوير مما يقلل منحنى التعلم عند العمل في مشاريع الذكاء الاصطناعي المعقدة، حيث تجذب سهولة الاستخدام هذه المطورين المخضرمين والوافدين الجدد إلى هذا المجال. النماذج الأولية السريعة والتجارب: تسمح الطبيعة الديناميكية لبايثون للمطورين بتجربة نماذج الذكاء الاصطناعي بسرعة. تشجع البيئة التفاعلية على النماذج الأولية السريعة، مما يتيح التطوير التكراري والاختبار الفعّال للفرضيات. دعم المجتمع الكبير: يعزز مجتمع بايثون النشط للغاية مشاركة المعرفة والتعاون وإنشاء أدوات مفتوحة المصدر. يمكن للمطورين العثور على وثائق وبرامج تعليمية ومنتديات شاملة للتعاون وتشارك المعرفة وحل المشاكل، مما يسهل التغلب على التحديات ومواكبة أحدث اتجاهات الذكاء الاصطناعي. يوسع تعدد استخدامات بايثون نفوذها عبر مجالات الذكاء الاصطناعي المختلفة، مما يتيح للمطورين صياغة حلول معقدة لمجموعة واسعة من تطبيقات الذكاء الصناعي. معالجة اللغة الطبيعية: بايثون هي الخيار المفضل لمهام البرمجة اللغوية العصبية. توفر مكتبات مثل NLTK و SpaCy أدوات لتحليل النص والمعالجة المسبقة وفهم اللغة وتحليل المشاعر ..إلخ. يمكن للمطورين باستخدام بايثون إنشاء روبوتات محادثة ومترجمات آلية للغات المختلفة وأنظمة تلخيص نصية وكل ما يتعلق بهذا المجال. الرؤية الحاسوبية: مكتبة OpenCV، التي تُستخدم غالبًا مع بايثون، تُساعد المبرمجين على إنشاء تطبيقات رؤية الحاسب المختلفة. يمكن للمطورين بناء أنظمة التعرف على الصور واكتشاف الأشياء والتعرف على الوجه، ودفع التقدم في مجالات مثل المركبات ذاتية القيادة والتصوير الطبي. التعلم الآلي والتعلم العميق: تتيح مكتبات بايثون وأطر عملها إنشاء نماذج التعلم الآلي المختلفة مثل مكتبة سكايت ليرن Scikit-learn. بينما تُسهّل أطر التعلم العميق مثل تنسرفلو Tensorflow وباي تورش PyTorch تطوير الشبكات العصبية للمهام المعقدة مثل التعرّف على الصور وفهم اللغة الطبيعية وتركيب الكلام. يمتد تأثير بايثون إلى ما وراء التطبيقات العملية؛ لقد أصبح عنصرًا أساسيًا في أبحاث الذكاء الاصطناعي. تسمح مرونته وتوافر مكتبات عالية المستوى للباحثين بالتركيز على تصميم الخوارزمية وتجريبها بدلًا من تفاصيل التنفيذ منخفضة المستوى. أدى هذا التسريع في البحث إلى حدوث طفرة في الذكاء الاصطناعي وساهم في التطور السريع لهذا المجال. لغة R برزت لغة R في مجال علم البيانات والتحليل الإحصائي كأداة قوية تُمكّن الباحثين والمحللين ومحترفي البيانات من فتح الرؤى واتخاذ قرارات مستنيرة من البيانات. بفضل مكتباتها وحزمها الواسعة المصممة للحساب الإحصائي وتصور البيانات والنمذجة التنبؤية، أصبحت لغة R حجر الأساس لأولئك الذين يسعون إلى اشتقاق المعاني من مجموعات البيانات المعقدة. طوّرت لغة البرمجة R في البداية في جامعة أوكلاند في عام 1993، مع التركيز بشكل أساسي على الحوسبة والرسومات الإحصائية. أدت طبيعتها مفتوحة المصدر ومجتمعها النشط إلى إنشاء بيئة واسعة النطاق من الحزم التي تلبي مجموعة واسعة من مهام تحليل البيانات. تكمن قوة لغة R في قدرتها على التعامل مع البيانات ومعالجتها وإجراء الاختبارات الإحصائية وإنشاء تصوّرات مقنعة تُسهّل تفسير مجموعات البيانات المعقدة. إن قدرة لغة R على التعامل مع المهام الإحصائية المعقدة وتحليل وتصور البيانات وتلبية متطلبات المجالات ذات الصلة تجعلها أداة لا غنى عنها لمحترفي البيانات عبر الصناعات المختلفة. عند الحديث عن لغات برمجة الذكاء الاصطناعي، فإن أول الخيارات التي يجب أن تفكر فيها هي بايثون ولغة R، فهما الخياران الأكثر شيوعًا بين المطورين والشركات. لكن هذا لايعني أن نتجاهل لغات برمجة أخرى يمكن استخدامها لدعم تطبيقات الذكاء الاصطناعي والتي تلبي تطبيقات وتفضيلات خاصة في الذكاء الاصطناعي سنذكرها تاليًا. جافا Java وجدت لغة جافا المعروفة بقوتها وقابليتها للنقل -طريقها إلى تطوير الذكاء الاصطناعي. مع مكتبات مثل Deeplearning4j و DL4J، يمكن لعشاق جافا الاستفادة من قوة التعلم العميق والشبكات العصبية. إن بنية جافا غرضية التوجّه وتعدد الاستخدامات الذي تتمتع به والمكتبات الواسعة تجعلها مناسبة لبناء حلول الذكاء الاصطناعي التي تتطلب قابلية التوسع والتكامل مع تطبيقات جافا. لغة C++ تحظى لغة C++ بتقدير كبير على أدائها وتحكمها، مما يجعلها خيارًا مناسبًا لتطبيقات الذكاء الاصطناعي التي تتطلب الكفاءة الحوسبية. توفر مكتبات مثل Shark و dlib قدرات التعلم الآلي ورؤية الحاسب. تعد سرعة C++ أمرًا بالغ الأهمية في تطبيقات الزمن الحقيقي مثل المركبات ذاتية القيادة والروبوتات، حيث تكون القرارات في أجزاء من الثانية أمرًا ضروريًا. جوليا Julia تزداد شعبية جوليا في برمجة الذكاء الاصطناعي بشكل مطرد بسبب تركيزها على الحوسبة الرقمية عالية الأداء، إذ يمكن من خلال تصريف JIT الخاص بها مطابقة أداء لغات مثل C++ مع تقديم بنية أكثر سهولة في الاستخدام، وتكمن نقطة جوليا الرائعة في التطبيقات كثيفة البيانات والمحاكاة والحوسبة العلمية. برولوج Prolog يشيع استخدام لغة برولوج Prolog في برمجة الذكاء الاصطناعي وهي لغة برمجة منطقية، تتفوق في المهام التي تتضمن التفكير والاستدلال. يُبسّط بناء الجملة التصريحي الذي تتبعه اللغة بناء الأنظمة المعقدة المستندة إلى القواعد، مما يجعلها مناسبة للأنظمة الخبيرة وفهم اللغة الطبيعية. ماتلاب MATLAB إن اقتران لغة ماتلاب بالحوسبة الرياضية والذكاء الاصطناعي يجعلها المفضلة لدى الكثير من المهندسين والباحثين. يوفر صندوق الأدوات الغني الخاص بها دوالًا لمعالجة الإشارات وتحليل الصور والتعلم الآلي. سويفت Swift هي لغة برمجة سهلة الاستخدام، ويسهل تعلمها عند مقارنتها باللغات الأخرى المستخدمة عادةً لتطبيقات الذكاء الاصطناعي. تخطو لغة سويفت (لغة برمجة Apple) خطوات واسعة في مجال الذكاء الاصطناعي، حيث برز Swift for TensorFlow كأداة قوية تجمع بين بناء الجملة البديهي وإمكانيات تحسين الأداء من لغة سويفت مع بيئة تنسرفلو. رست Rust إن تركيز لغة رست على السلامة والتزامن يجعلها مُرشحًا مُقنعًا لبناء أنظمة آمنة للذكاء الاصطناعي. على الرغم من عدم ارتباطه تقليديًا بالذكاء الاصطناعي، إلا أن ميزات راست الحديثة وإدارة الذاكرة القوية يمكن أن تساهم في بناء حلول ذكاء اصطناعي موثوقة تعطي الأولوية للأمان. ليسب Lisp تحمل لغة ليسب علاقة فريدة وتاريخية بمجال الذكاء الاصطناعي. طوّرت ليسب بواسطة جون مكارثي في أواخر الخمسينيات من القرن الماضي، وتم تصميمها كلغة برمجة مناسبة خصيصًا للبحث والتطوير في مجال الذكاء الاصطناعي. إن طبيعتها المرنة والتي تعتمد على الرموز جعلتها خيارًا مثاليًا لبناء الانظمة الخبيرة وتمثيل المعرفة والمنطق، وهذا ما يتوافق بشكل جيد مع أهداف أنظمة الذكاء الاصطناعي في ذلك الوقت. لوا Lua هي لغة برمجة خفيفة بسيطة تُستخدم غالبًا لدمج مكونات الذكاء الاصطناعي في التطبيقات والألعاب، وهي معروفة ببساطتها وكفاءتها. بيرل Perl تشتهر لغة بيرل بقدراتها على معالجة النصوص وتستخدم أحيانًا للمهام التي تتضمن معالجة البيانات في مشاريع الذكاء الاصطناعي. أخيرًا وليس آخرًا، يمتد مشهد برمجة الذكاء الاصطناعي إلى ما هو أبعد من بايثون Python ولغة R، مما يوفر عددًا كبيرًا من الخيارات للمطورين لاستكشافها. تقدم كل لغة نقاط قوتها الفريدة إلى الطاولة، حيث تلبي مجالات وتطبيقات الذكاء الاصطناعي المختلفة. من تعدد استخدامات لغة جافا إلى سرعة C++ إلى حوسبة جوليا عالية الأداء إلى معالجة برولوغ وليسب المنطقية، فإن لدينا خيارات كثيرة كمبرمجين. مقارنة بين لغات برمجة الذكاء الاصطناعي تتضمن مقارنة لغات برمجة الذكاء الاصطناعي تقييم ميزاتها وقدراتها ومدى ملاءمتها للمهام المتعلقة بالذكاء الاصطناعي. لقد استعرضنا في فقرة سابقة بالفعل ميزات كل لغة برمجة فيما يتعلق بمجال الذكاء الصناعي، لذا نُسلّط في هذا القسم الضوء على التحديات ونقاط الضعف لأبرز لغات البرمجة التي ذكرناها. سلبيات لغة بايثون Python أثبتت لغة بايثون نفسها كقوة كبيرة في مجال البرمجة عمومًا. ومع ذلك، ومثل أي تقنية، فإن بايثون لا تخلو من التحديات والاعتبارات: الأداء والسرعة: قد نرى أحيانًا اختناقات في الأداء وبطء في لغة بايثون، خاصةً عند مقارنتها بلغات مثل C++ أو Java. يمكن أن يكون هذا ملحوظًا بشكل خاص عند التعامل مع مهام حسابية مكثفة أو مجموعات بيانات كبيرة أو معالجة في الوقت الفعلي. لمواجهة هذا التحدي، غالبًا ما يلجأ المطورون إلى تقنيات التحسين، مثل استخدام المكتبات الخارجية (مثلًا مكتبة مكتوبة بلغة سي C++ نستخدمها في بايثون)، وأبرز مثال على ذلك مكتبة نمباي للحسابات الرقمية. ** التنفيذ المتوازي**: بايثون لاتدعم فكرة تعدد الخيوط multi-threading والبرمجة المتوازية بشكل جيد، مما يعني أن بايثون قد لا تستفيد بشكل كامل من المعالجات متعددة النواة للتنفيذ المتوازي. يلجأ المطورون أحيانًا إلى استخدام لغات أخرى جنبًا إلى جنب مع بايثون للتغلب على هذا القيد، أي بشكل مشابه لما ذكرناه منذ قليل. استهلاك الذاكرة: يمكن أن يكون استهلاك الذاكرة في بايثون أعلى أحيانًا من استهلاك لغات مثل C أو C++. يمكن أن يكون هذا مصدر قلق عند التعامل مع التطبيقات واسعة النطاق أو البيئات محدودة الموارد. إدارة تبعية المكتبات: تعد بيئة بايثون الشاملة نقطة قوة بلا شك، ولكنها يمكن أن تشكل أيضًا تحديات من حيث إدارة التبعية. مع نمو المشاريع والاعتماد على مكتبات خارجية متعددة، قد يصبح الحفاظ على التوافق وإدارة التبعيات أمرًا معقدًا. يمكن أن تظهر تعارضات الإصدار والحزم المهملة والثغرات الأمنية إذا لم تتم إدارتها بعناية. سلبيات لغة R بينما تعد لغة R أداة قوية لعلوم البيانات، إلا أنها لا تخلو من التحديات أيضًا: الأداء: كما في لغة بايثون، قد تعاني لغة R من بطء تنفيذ العمليات الحسابية الكبيرة. استخدام الذاكرة: قد يتطلب التعامل مع مجموعات البيانات الكبيرة إدارة دقيقة للذاكرة. منحنى التعلم: يمكن أن يكون إتقان لغة البرمجة R وحزمها مضيعة للوقت للمبتدئين نظرًا لصعوبتها. سلبيات لغة جافا Java تُعتبر لغة جافا خيارًا قيمًا لتطوير الذكاء الاصطناعي في السيناريوهات التي تفوق فيها نقاط قوتها، مثل الاستقلالية عن نظام التشغيل والأداء وقابلية التوسع. إلا أن لها العديد من التحديات، أهمها: الكود المطول: تشتهر لغة جافا بإسهابها verbosity، مما يعني الحاجة إلى قدر كبير من التعليمات البرمجية للتعبير عن وظيفة معينة. هذا يمكن أن يجعل تطوير الذكاء الاصطناعي في جافا أكثر استهلاكًا للوقت مقارنة باللغات ذات بناء الجملة الأكثر إيجازًا مثل بايثون التي يمكننا فيها التعبير عن وظيفة معينة ببضع تعليمات برمجية. منحنى التعلم: تتميز جافا بمنحنى تعليمي أكثر حدة، خاصة للمبتدئين في برمجة الذكاء الاصطناعي. يمكن أن يكون نظام الكتابة الصارم وبناء الجملة المعقد أمرًا مخيفًا لأولئك الجدد في اللغة. نماذج أولية متأخرة: قد لا تكون الخيار الأفضل للنماذج الأولية السريعة والتجارب (مثلًا تريد بناء تطبيق ذكاء اصطناعي بسرعة لتجربة فكرة أو ميزة معينة). غالبًا ما يفضل باحثو الذكاء الاصطناعي لغات مثل بايثون أو لغة R، والتي تتيح لهم اختبار الأفكار والخوارزميات بسرعة. مكتبات محدودة: على الرغم من أن جافا تحتوي على مكتبات للذكاء الاصطناعي، إلا أن نظامها البيئي ليس غنيًا وواسع النطاق مثل نظام بايثون. أعباء الأداء: يمكن أن يكون أداء جافا أقل قليلاً من لغات مثل C++ أو جوليا Julia. النظام البيئي للتعلم العميق: النظام البيئي للتعلم العميق في جافا ليس ناضجًا مثل نظام بايثون. في حين أنه من الممكن بناء نماذج التعلم العميق في جافا، فإن مجتمع التعلم العميق يستخدم في الغالب بايثون لهذا الغرض. سلبيات لغة C++ على الرغم من السرعة والأداء العالي الذي تتمتع به هذه اللغة، إلا أنها مثل أي لغة برمجة أخرى لها جوانب سلبية في سياقات معينة، وأهمها: منحنى التعلم: كما في جافا وربما أكثر. إدارة الذاكرة: تتطلب إدارة يدوية للذاكرة، مما قد يؤدي إلى تسرب الذاكرة وحدوث أخطاء إذا لم يتم التعامل معها بشكل صحيح. مكتبات أقل خاصة بالذكاء الاصطناعي: ليست واسعة النطاق مثل تلك المتوفرة في بايثون Python أو لغة R. الكود المطول: كما في جافا. عدم الاستقلالية عن نظام التشعيل: مما يجعله أقل قابلية للتنقل عبر الأنظمة المختلفة دون تعديلات. سلبيات ماتلاب MATLAB يُعتبر ماتلاب MATLAB برنامجًا خاصًا يتطلب ترخيصًا للاستخدام التجاري، مما يجعله مكلفًا (ممكن أن يكون باهظ الثمن) للشركات وأنظمة الإنتاج واسعة النطاق. كما أن مكتباتها ليست غنية ودعم المجتمع لها محدود ومنحنى التعلم فيها حاد. بالنسبة للغات البرمجة الأخرى فمعظمها تعاني من مشاكل مثل الدعم المجتمعي الضعيف وقلة المكتبات. يعتمد اختيار لغة برمجة الذكاء الاصطناعي على عوامل مثل مجال الذكاء الاصطناعي المحدد ومتطلبات المشروع والمهارات الحالية ودعم المجتمع. لا تزال لغة بايثون هي اللغة المهيمنة في الذكاء الاصطناعي بسبب نظامها البيئي الواسع، ولكن اللغات الأخرى يمكن أن تكون ذات قيمة للمهام المتخصصة أو احتياجات المشروع الفريدة، فكل لغة من لغات برمجة الذكاء الاصطناعي لديها مزاياها الفريدة وسلبياتها، مثلًا تتفوق لغة R في التحليل الإحصائي وتصوّر البيانات، مما يجعلها الخيار الأفضل في مجال تحليل البيانات. تشتهر جوليا بقدراتها الحاسوبية عالية الأداء، مما يجعلها مناسبة لتطبيقات الذكاء الاصطناعي التي تتطلب حسابات مكثفة. يعد سويفت Swift من خلال دمجه في منصات الأجهزة المحمولة، مثاليًا لتطبيقات الأجهزة المحمولة التي تعمل بالذكاء الاصطناعي. في النهاية، يجب أن يتوافق اختيار لغة البرمجة مع المتطلبات المحددة لمشروعك وخبرة فريقك. من الضروري الموازنة بين إيجابيات وسلبيات كل لغة والأخذ في الاعتبار عوامل مثل السرعة ودعم المكتبة وقابلية التوسع لاتخاذ قرار مستنير يهيئ مشروع الذكاء الاصطناعي الخاص بك لتحقيق النجاح. الخاتمة: تشكيل مستقبل الذكاء الاصطناعي بلغات البرمجة ظهرت لغات البرمجة باعتبارها حجر الأساس الذي يُبنى عليه مستقبل الآلات الذكية. تلعب هذه الأدوات دورًا تحويليًا، ليس فقط في تسخير قوة البيانات والخوارزميات ولكن أيضًا في إطلاق العنان لإمكانية إنشاء حلول مبتكرة كانت تعتبر في السابق غير قابلة للتحقيق. أصبحت لغات برمجة الذكاء الاصطناعي مثل لغة بايثون ولغة R حجر الأساس في تطوير تطبيقات الذكاء الاصطناعي، مما يوفر للمطورين خيارات كثيرة لبناء النماذج والخوارزميات المعقدة. تعمل هذه اللغات على تمكين المبرمجين من معالجة البيانات وتحليلها وتصميم شبكات عصبية معقدة وصياغة أنظمة ذكية يمكنها التعلم والتكيف. كما في أي مجال علمي آخر هناك قيود واعتبارات لابد من الإشارة إليها لأخذها بعين الاعتبار. من المهم لممارسي الذكاء الاصطناعي اختيار لغة البرمجة التي تتوافق بشكل أفضل مع متطلبات مشروعهم المحددة مع إدراكهم للقيود المحتملة وإيجاد طرق للتغلب عليها. لا يقوم المطورون فقط بإنشاء التعليمات البرمجية؛ إنهم يصممون مستقبل الذكاء نفسه. نظرًا لأننا نقف على أعتاب الاحتمالات التي لم يتم استكشافها بعد، هناك شيء واحد مؤكد: رحلة برمجة الذكاء الاصطناعي لا تشكل المستقبل فحسب، بل تعمل أيضًا على تمكين المطورين من صياغة حلول ذكية تحدد عالم الغد. اقرأ أيضًا تعلم الذكاء الاصطناعي تعلم البرمجة أسهل لغات البرمجة مستويات لغات البرمجة أهمية الذكاء الاصطناعي مستقبل الذكاء الاصطناعي1 نقطة
-
نتعرف في مقال اليوم على مفهوم أنظمة التشغيل وما هي أشهر أنواع أنظمة التشغيل ونقارن بين أنواع أنظمة التشغيل المختلفة ونوضح مميزاتها وأبرز الاختلافات فيما بينها. مفهوم أنظمة التشغيل نظام تشغيل الحاسوب هو برنامج ضروري يعمل كوسيط بينك كمستخدم وبين عتاد الحاسوب الذي تستخدمه يمكّنك من استخدام الحاسوب بسهولة ويفهم أوامرك ويعطيك النتيجة المطلوبة، كما يتولى إدارة كافة موارد الحاسوب ويضمن استخدامها بشكل فعال. تثّبت أنظمة التشغيل عادةً بشكل ضمني في أي جهاز حاسوب تشتريه أو تتطلب تثبيتها بشكل يدوي، ويوفر كل نظام تشغيل واجهة رسومية أو نصية خاصة به تسهل عليك التعامل مع حاسوبك وتكون قابلة للتخصيص وفق احتياجاتك وتتلقى أنظمة التشغيل حالها كحال أي برمجيات أخرى العديد من التحسينات الدورية لإضافة ميزات جديدة أو إصلاح أخطاء سابقة. تحتاج مختلف أنواع الأجهزة الإلكترونية إلى نظام تشغيل سواء كانت أجهزة الحواسيب المكتبية أو الأجهزة اللوحية والهواتف الذكية و أجهزة الصراف الآلي والساعات الذكية ووحدات التحكم بالألعاب وغيرها من الأجهزة لتجعلها قابلة للاستخدام فنظام التشغيل ضروري لعمل أي جهاز إلكتروني وبدونه لن يكون هذا الجهاز سوى خردة لا تقوم بأي عمل. بالإضافة إلى هذه الأنظمة ذات الأغراض العامة، تعمل أنظمة التشغيل ذات الأغراض الخاصة على أجهزة الكمبيوتر الصغيرة التي تتحكم في خطوط التجميع والطائرات وحتى الأجهزة المنزلية. إنها أنظمة تستجيب فوريًا، أي مصممة لتوفير استجابة سريعة لأجهزة الاستشعار واستخدام مدخلاتها للتحكم في الآلات. كما تم تطوير أنظمة التشغيل للأجهزة المحمولة مثل الهواتف الذكية والأجهزة اللوحية. يُعد نظام التشغيل iOS التابع لشركة آبل Apple Inc، والذي يعمل على أجهزة أيفون iPhone وأيباد iPad، ونظام أندرويد Android التابع لشركة غوغل Google Inc. هما نظامان بارزان لتشغيل الهواتف المحمولة. دورة علوم الحاسوب دورة تدريبية متكاملة تضعك على بوابة الاحتراف في تعلم أساسيات البرمجة وعلوم الحاسوب اشترك الآن مهام نظام التشغيل يعمل نظام التشغيل طوال فترة تشغيل جهاز الحاسوب ويتولى القيام بالعديد من المهام التي تضمن عمل حاسوبك بالشكل المطلوب وأهمها: توفير واجهة مستخدم رسومية GUI أو واجهة أوامر نصية تمكّن المستخدم من التفاعل مع تطبيقات وعتاد الحاسوب بسهولة. إدارة كافة موارد الحاسوب مثل وحدة المعالجة المركزية CPU أو المعالج والذاكرة وأقراص التخزين وضمان تخصيصها بالشكل الأمثل للبرامج المختلفة. تنسيق عملية تنفيذ البرامج والتطبيقات التي يشغلها المستخدم. تنظيم أمور معالجة وتخزين البيانات على أقراص التخزين. حماية المعلومات المخزنة على حاسوبك ومنع الوصول غير المصرح به إلى البرامج والبيانات. إدارة الملفات والمجلدات. إدارة أجهزة الإدخال والإخراج وضمان عملها بشكل صحيح. الاتصال بالشبكة واتخاذ إجراءات أمان تضمن حمايتها. اكتشاف ومراقبة أي أخطاء قد تحدث أثناء تشغيل البرامج أو أي مهمة أخرى. جدولة المهام وتحديد ترتيب تنفيذها. أشهر أنواع أنظمة التشغيل هناك أنواع متعددة لأنظمة تشغيل الحاسوب، ولكننا سنهتم في مقال اليوم بتوضيح أشهر أنواع أنظمة التشغيل الرئيسية المستخدمة في الأجهزة المختلفة والتي تشمل: نظام تشغيل يونكس UNIX نظام تشغيل لينكس LINUX نظام التشغيل ماك أو إس macOS نظام التشغيل إم إس دوس MS-DOS نظام تشغيل مايكروسوفت ويندوز Windows نظام تشغيل كروم Chrome OS نظام تشغيل أي أو إس iOS نظام تشغيل أندرويد Android لنتعرف بمزيد من التفصيل على كل نظام من بينها وأبرز مميزاته واستخداماته. نظام التشغيل يونكس UNIX نظام يونكس UNIX أحد أقدم أنظمة التشغيل فقد طور عام 1969 باستخدام لغة البرمجة C وكان متاحًا مجانًا خلال سنواته الأولى ثم أصبحت بعض إصداراته تجارية، يتميز نظام يونكس بالمرونة والتكامل وهو نظام متعدد المستخدمين ومتعدد المهام، وقد شكّل الأساس لتطوير أنظمة تشغيل شبيهة به أو متوافقة معه مثل نظام التشغيل لينكس Linux وماك MacOS X. يوفر نظام يونكس واجهة سطر أوامر CLI تسمى صدفة يونكس Unix shell تستخدم لتوجيه الأوامر لنظام التشغيل والتفاعل معه، وفي أوائل الثمانينيات أضيف لنظام يونكس واجهة مستخدم رسومية إلى جانب واجهة سطر الأوامر لتجعل التعامل معه أكثر سهولة. يقتصر استخدام نظام يونكس اليوم على أجهزة الحاسوب العملاقة عالية الأداء كالخوادم ومراكز البيانات وحواسيب الشركات الكبيرة والجامعات وتشغيل التطبيقات المتطورة كتطبيقات تحليل البيانات الضخمة. نظام التشغيل لينكس LINUX نظام التشغيل لينكس Linux هو نظام تشغيل مجاني صغير الحجم ومفتوح المصدر أي أن الشيفرة المصدرية الخاصة به متاحة لأي شخص ويمكن تعديلها وإعادة توزيعها، وقد طور لينكس بالاعتماد على نظام التشغيل يونكس Unix وباستخدام لغة البرمجة C ولغة التجميع assembly وهو يتضمن نسخة محسنة من برنامج صدفة يونكس تسمى صدفة باش bash. أول من برمج نظام لينكس هو طالب جامعي فنلندي يدعى Linus Torvalds ثم تولى العمل عليه المبرمج الأمريكي Richard Stallman وطوره ليصبح اليوم أحد أكثر أنظمة التشغيل مرونة وأمانًا واستقرارًا وهو سهل التخصيص بشكل كبير ما يجعله النظام المفضل من قبل المستخدمين التقنيين والأكثر استخدامًا في الخوادم والحواسيب العملاقة إضافة إلى الحواسيب المكتبية الشخصية كما أنه يستخدم في الروبوتات وأجهزة إنترنت الأشياء IoT. يوفر نظام لينكس مجموعة متنوعة من الإصدارات أو التوزيعات distributions مثل توزيعة أبونتو Ubuntu وديبيان Debian ومينت Mint وجينتو Gentoo …إلخ. كل منها مصمم لاحتياجات معينة لذا عند التفكير في استخدام هذا النظام عليك أن تختار التوزيعة التي تناسب متطلباتك بعناية، ولمطالعة مزيد من التفاصيل حول توزيعات لينكس بينها أنصح بمطالعة مقال ما هو نظام لينكس ولماذا توجد 100 توزيعة منه؟. هل ترغب في تصميم وتطوير برمجيات متقنة لأعمالك؟ وظّف مهندس برمجيات خبير من مستقل أضف مشروعك الآن نظام التشغيل ماك أو إس macOS نظام التشغيل macOS هو نظام تشغيل شهير طورته شركة أبل Apple الأمريكية عام 1984، وهو مخصص للعمل على حواسيب ماك التي تصنعها أبل فقط مثل جهاز Apple Macbook و Apple Macbook Pro و Apple Macbook Air كما يتكامل مع مع منتجات شركة أبل الأخرى مثل أيفون iPhone وأيباد iPad وساعة أبل Apple Watch وخدمة آي كلاود iCloud على عكس لينكس Linux أو ويندوز Windows والتي يمكن أن تعمل على مجموعة كبيرة من أجهزة الحاسوب من مختلف الشركات المصنعة. يتميز نظام ماك macOS بأمانه واستقراره ويوفر واجهة سهلة الاستخدام ذات تصميم أنيق وهو فعليًا أول نظام تشغيل أدخل واجهة المستخدم الرسومية GUI بدلًا من كتابة الأوامر في نافذة سطر أوامر وهو النظام الذي ألهم شركة مايكروسوفت لتطوير واجهة المستخدم الرسومية الخاصة بنظام تشغيلها ويندوز Windows. يطور نظام ماك باستمرار ويوفر المزيد من التحديثات ليحسن تجربة المستخدم ومن أشهر إصدارته macOS X و macOS 11 Big Sur و macOS Monterey. نظام التشغيل إم إس دوس MS-DOS نظام دوس MS-DOS واحد من أقدم أنظمة التشغيل طورته مايكروسوفت في الثمانينيات لأجهزة الحاسوب الشخصية، وكلمة DOS اختصار لـ Disk Operating System وتعني نظام تشغيل القرص، وهو نظام واجهة سطر أوامر بسيط وبدائي يمكن من أداء مهمة واحدة في الوقت الواحد ولمستخدم واحد يتم التفاعل معه عن طريق كتابة أوامر نصية لكل أمر خيارات محددة ويوفر مجموعة من الوظائف مثل إدارة الملفات وتخصيص موارد النظام وتشغيل التطبيقات وتخصيص موارد النظام والتحكم في الأجهزة. ظل نظام دوس مستخدمًا في معظم أجهزة الحواسيب الشخصية فترة الثمانينيات وأوائل التسعينيات قبل أن تظهر أنواع أنظمة تشغيل أخرى أكثر تطورًا وتوفر ميزات لا يوفرها كتعدد المهام وواجهة المستخدم، وبالرغم من بساطة نظام تشغيل MS-DOS إلا أنه لعب دورًا مهمًا في تطوير أنظمة تشغيل أكثر تطورًا مثل نظام ويندوز، ولا زال يضمن كتطبيق في أنظمة ويندوز لأداء بعض المهام. نظام التشغيل ويندوز Windows نظام التشغيل ويندوز Windows هو أحد أكثر أنظمة التشغيل شهرة واستخدامًا طورته شركة مايكروسوفت عام 1985 لتشغيل أجهزة الحواسيب الشخصية ليكون امتدادًا لنظام تشغيلها MS-DOS المعتمد على واجهة سطر الأوامر. من مميزات نظام التشغيل ويندوز هو كونه نظام سهل الاستخدام من قبل غير المختصين بفضل واجهته الرسومية الواضحة البسيطة، وهو نظام متعدد المستخدمين ومتعدد المهام، حيث يسمح للمستخدمين بتشغيل واستخدام برامج متعددة في نفس الوقت، ويدعم مجموعة واسعة من الأجهزة والبرامج. يسيطر نظام تشغيل ويندوز اليوم على سوق أنظمة التشغيل ويشغل معظم أجهزة الحواسيب الشخصية -أو ما يعرف بالحواسيب المتوافقة مع IBM- من علامات تجارية مختلفة مثل حواسيب Toshiba و HP و Dell و Lenovo وغيرها لكنه ليس نظامًا مجانيًا بل يحتاج لدفع رسوم ترخيص لاستخدامه، وهو يوفر تحديثات مستمرة وإصدارات مختلفة بميزات وأسعار مختلفة وأحدث إصدار منه عند كتابة المقال هو أحدث هو ويندوز11. نظام إي أو إس iOS نظام iOS هو نظام تشغيل طورته شركة أبل Apple Inc وأطلق لأول مرة عام عام 2007 مع ظهور شاشات اللمس للهواتف المحمولة وهو موجه لتشغيل هواتف آيفون ولا يوجد سوى متجر تطبيقات واحد هو متجر تطبيقات أبل Apple App Store يمكن من خلاله تنزيل التطبيقات لأجهزة آيفون. يتميز بواجهة المستخدم وأمانه وسهولة استخدامه كما يوفر مجموعة كبيرة من التطبيقات والميزات مثل المساعد الشخصي سيري Siri وميزة مشاركة الوسائط بسهولة مع مستخدمي iOS القريبين باستخدام ميزة AirDrop وغيرها من الميزات التي توفر الوقت والجهد وهو يحدّث بشكل مستمر ليوفر المزيد من الميزات لمستخدميه. نظام تشغيل كروم Chrome OS نظام التشغيل كروم Chrome OS هو نظام تشغيل مفتوح المصدر طورته جوجل عام 2011 بالاعتماد على نظام التشغيل لينكس وهو مخصص للعمل على أجهزة Chromebook وهي نوع من أجهزة الحاسوب مصممة لتنفيذ المهام بسهولة وسرعة فهي تختلف عن الحواسيب التقليدية بكونها مصممة للعمل وهي متصلة بالإنترنت أكثر من العمل دون اتصال. يتميز نظام التشغيل كروم بسهولة الاستخدام ويوفر بيئة سطح مكتب تشبه نظام ويندوز لكنه يعمل ضمن متصفح ويب ويستخدمها كواجهة مستخدم رئيسية فالهدف الأساسي من نظام التشغيل كروم هو تشغيل تطبيقات الويب ضمن الهواتف المحمولة حيث يمكنك من خلاله مشاهدة مقاطع الفيديو وتصفح شبكات التواصل الاجتماعي والقيام بالعديد من الأمور التي تقوم بها عادة ضمن أنظمة التشغيل الأخرى لكن من داخل بيئة متصفح. لا تخلط بين متصفح كروم ونظام تشغيل كروم فمتصفح كروم هو تطبيق مخصص للوصول إلى الإنترنت ويعمل على جميع الأنظمة الأساسية مثل ويندوز Windows وماك أو إس macOS وأندرويد Android أما نظام تشغيل كروم فهو نظام مخصص لتشغيل أجهزة Chromebook. نظام تشغيل أندرويد Android نظام التشغيل أندرويد Android هو نظام تشغيل من جوجل مخصص للأجهزة المحمولة التي تعمل باللمس ويستخدم في طيف واسع من الأجهزة مثل الهواتف الذكية والأجهزة اللوحية والساعات الذكية كما أنه يشغل العديد من التلفزيونات الذكية وتستخدمه علامات تجارية مختلفة مثل LG و Samsung و HUAWEI. يعد نظام التشغيل أندرويد نظام مجاني ومفتوح المصدر فهو يعتمد في برمجته على نسخة معدلة من نواة نظام لينكس Linux kernel كما يستخدم عدة برامج مفتوحة المصدر التي طورتها جوجل بشكل أساسي للأجهزة المحمولة، لكن تجدر الإشارة إلى أن نظام تشغيل أندرويد المضمن في الهواتف الذكية قد يتضمن عدة برامج أخرى مغلقة المصدر كجزء من خدمات متجر التطبيقات جوجل بلاي Google Play والتي تعتمد عليها جوجل بكسب الأرباح. تطور جوجل نظام التشغيل بصورة دورية وتضيف له العديد من الميزات، أحدث إصدار رئيسي لحظة كتابة هذا المقال هو Android 13 وقريبًا سيصدر Android 14، وفي حال كنت تستخدم جهاز أندرويد فيمكنك معرفة الإصدار المثبت على جهازك وتحديثه من خلال قائمة الإعدادات ثم حول الهاتف. مقارنة بين أنواع أنظمة التشغيل قد تتساءل لماذا توجد أنواع أنظمة تشغيل مختلفة مستخدمة على الأجهزة الإلكترونية وأي نظام علي اختياره؟ والجواب أن لكل نظام تشغيل مزاياه وعيوبه واختيار الإصدار المناسب لك يعتمد على نوع الجهاز المستخدم والتطبيقات التي تحتاج للتعامل معها وخبرتك في التعامل مع نظام التشغيل وغيرها من العوامل بحسب أولوياتك واحتياجاتك. فنظام ويندوز على سبيل المثال يستهلك موارد أعلى من نظام لينكس وماك لكونه يدعم تطبيقات أكثر لذا قد لا يكون استخدامه مفضلًا على حاسوب ضعيف الأداء، من جهة أخرى يستهلك نظام ماك موارد أقل من أنظمة التشغيل الأخرى لكنه يوفر تطبيقات محدودة ولا يناسب بعض التطبيقات كالألعاب، أما نظام لينكس فهو يوفر أداءً عاليًا وخيارات تخصيص متعددة ومجموعة تطبيقات متنوعة مفتوحة المصدر لكنه يتطلب معرفة تقنية ويصعب استخدامه على المستخدمين العاديين بل يشيع استخدامه بين المبرمجين. وفي حال كنت تستخدم هاتفًا جوالًا ففي هذه الحالة عليك اختيار نظام تشغيل مصمم ليتناسب مع صغر حجم شاشات الهواتف ومحدودية مواردها وأبرز خيارين متاحين للاستخدام هما نظام التشغيل أندرويد Android ونظام التشغيل iOS، ومن الأفضل اختيار هاتف يعمل أندرويد إذا كنت تحتاج لهاتف يوفر لك خيارات تخصيص عالية ويمكّنك من تنزيل تطبيقات متنوعة من خلال متجر التطبيقات الخاص به Google Play الذي يضم ملايين التطبيقات أو غيره من المصادر العديدة الأخرى على الويب. لكن تذكر أن نظام أندرويد مفتوح المصدر ما يجعله عرضة للمشاكل الأمنية أكثر من نظام iOS، لذا في حال كنت تفضل الأمن والحماية على تنوع التطبيقات فنظام تشغيل iOS المخصص لأجهزة آبل هو الخيار الأنسب. الخلاصة تعرفنا في مقال اليوم على أبرز أنواع أنظمة التشغيل ورأينا أنها برامج أساسية لا غنى عنها فهي تدير حواسيبنا وهواتفنا الذكية وغيرها من الأجهزة الإلكترونية التي نستخدمها وتتحكم بمواردها وتسهل علينا التعامل معها ووضحنا أهم أنواع أنظمة التشغيل الرائجة حاليًا وأبرز مميزاتها وأنواع الأجهزة التي تستخدمها. اقرأ أيضًا النسخة العربية الكاملة من كتاب أنظمة التشغيل للمبرمجين مدخل إلى نظام التشغيل Operating System دور نظام التشغيل وتنظيمه في معمارية الحاسوب تثبيت نظام لينكس داخل نظام ويندوز في بيئة وهمية1 نقطة
-
قد لا نحتاج إلى هذا المقال في أغلب التطبيقات التي نكتبها، إذ إنه موضوع متقدم في البرمجة (خصوصًا في مراحل تعلم البرمجة الأولى)، وسنعرضه هنا لمجرد الدراسة واحتمال احتياجه في مشروع ما، ولا تقلق إذا وجدت أن عناصره صعبة الفهم. سنشرح في هذا المقال ما يلي: تعريف التعاودية، وكيفية عملها. كيف تساعد التعاودية في تبسيط بعض المشاكل الصعبة. تعريف التعاودية رغم قولنا سابقًا إن الحلقات التكرارية loops هي إحدى ركائز البرمجة، إلا أنه يمكننا كتابة برامج كاملة دون استخدام صريح لهذه البنية، بل إن بعض اللغات مثل Scheme لا تحوي بنية حلقة تكرارية صريحةً مثل For وWhile وغيرهما، وإنما تستخدم تقنيةً تسمى التعاودية، وقد تبين أن هذه التقنية قوية للغاية في حل بعض أنواع المشاكل، وهي تعني تطبيق دالة كجزء من تعريف نفس الدالة، ولننظر مثالًا على ذلك أحد الاختصارات التعاودية المشهورة في الكلمات، وهو أحد أساليب التلاعب بالاختصارات يحتوي الاختصار نفسه على كلمة تطابق حروف الاختصار، مثل مشروع GNU مثلًا -وهو أحد أهم المشاريع في البرمجيات مفتوحة المصدر- والذي تشير حروف كلمته إلى "نظام GNU ليس يونكس" أو GNU's Not UNIX، فتكون اختصارًا تعاوديًا لأن كلمة GNU التي في الاختصار هي نفسها كلمة GNU المختصرة كلها، أما معنى الكلمة الحرفي فهو حيوان الثور الإفريقي. ويجب أن يوجد في الدالة شرط إنهاء، بحيث تتفرع الدالة إلى حل غير تعاودي عند نقطة ما، على عكس مثال GNU الذي ليس فيه هذا الشرط ويظل يتعاود إلى ما لا نهاية، وهو ما نطلق عليه الحلقة اللانهائية infinite loop. لننظر هنا في مثال بسيط، تُعرَّف فيه دالة المضروب الرياضي factorial function المشار إليها بعلامة التعجب بعد العدد n!، على أنها ناتج ضرب جميع الأعداد من الواحد حتى العدد المطلوب -بما في ذلك العدد نفسه-، ومضروب الصفر هو الواحد، فإذا أردنا التعبير عن هذا المثال بطريقة أخرى فسنقول إن مضروب N يساوي (N(N-1، وعليه سيكون: 1! = 1 2! = 1 x 2 = 2 3! = 1 x 2 x 3 = 2! x 3 = 6 N! = 1 x 2 x 3 x .... (N-2) x (N-1) x N = (N-1)! x N ويمكن التعبير عن ذلك في بايثون كما يلي: def factorial(n): if n == 0: return 1 else: return n * factorial(n-1) يجب أن تنتهي الدالة بما أننا نقلل قيمة N في كل مرة ونتحقق هل تساوي 1 أم لا، لكن ثمة مشكلة بسيطة في هذا التعريف، إذ سيدخل في حلقة لا نهائية إذا استدعيناه برقم سالب، ولحل هذا نضيف اختبارًا للتحقق من أن n أقل من صفر، ويعيد None إذا كان كذلك لأن مضروب العدد السالب غير معرَّف undefined. يظهر هذا مدى سهولة ارتكاب أخطاء في شروط الإنهاء، وهي أشهر حالة للزلات البرمجية bugs في الدوال التعاودية، إذ يجب أن نتأكد من اختبار جميع القيم حول حالة الإنتهاء لضمان التنفيذ الصحيح. لنرى الآن كيف يكون هذا عند تنفيذه، لاحظ أن تعليمة الإعادة تعيد * n (نتيجة استدعاء المضروب التالي)، فنحصل على ما يلي: factorial(4) = 4 * factorial(3) factorial(3) = 3 * factorial(2) factorial(2) = 2 * factorial(1) factorial(1) = 1 وتعود بايثون أدراجها لتستبدل القيم كما يلي: factorial(2) = 2 * 1 = 2 factorial(3) = 3 * 2 = 6 factorial(4) = 4 * 6 = 24 ليس من الصعب كتابة دالة مضروب دون استخدام التعاودية، ويمكنك تجريب هذا، إذ يجب أن تمر على جميع الأعداد حتى N؛ وتنفذ عمليات ضرب أثناء ذلك المرور التكراري، لكن قد يصعب كتابة بعض الدوال دون التعاودية، كما سنرى أدناه. التعاودية على القوائم إحدى الحالات التي تكون التعاودية مفيدةً فيها هي معالجة القوائم Lists، بشرط أن نستطيع التحقق من فراغ القائمة، وتوليد قائمة دون عنصرها الأول، ونفعل هذا في بايثون باستخدام تقنية تسمى التشريح Slicing، لكن كل ما يجب معرفته في هذا الفصل هو أن استخدام فهرس [1:] يعيد جميع العناصر من العنصر ذي الفهرس 1 حتى نهاية القائمة، لذا نكتب ما يلي لنصل إلى العنصر الأول من قائمة اسمها L: first = L[0] # استخدم الفهرسة العادية وللوصول إلى بقية القائمة: # استخدم التشريح للوصول إلى العناصر 1،2،3 وما بعدها butfirst = L[1:] لنجرب ذلك في محث بايثون، لنتأكد أنه يعمل: >>> L =[1,2,3,4,5] >>> print( L[0] ) 1 >>> print( L[1:] ) [2,3,4,5] نعود الآن إلى استخدام التعاودية لطبع القوائم، ولنفرض حالةً نطبع فيها كل عنصر من قائمة سلاسل نصية باستخدام الدالة printList: def printList(L): if L: print( L[0] ) printList(L[1:]) إذا تحققت L -أي كانت true ولم تكن فارغةً- فسنطبع العنصر الأول، ثم نعالج بقية القائمة كما يلي: # شيفرة وهمية ليست بايثون PrintList([1,2,3]) prints [1,2,3][0] => 1 runs printList([1,2,3][1:]) => printList([2,3]) => we're now in printList([2,3]) prints [2,3][0] => 2 runs printList([2,3][1:]) => printList([3]) => we are now in printList([3]) prints [3][0] => 3 runs printList([3][1:]) => printList([]) => we are now in printList([]) "if L" is false for an empty list, so we return None => we are back in printList([3]) it reaches the end of the function and returns None => we are back in printList([2,3]) it reaches the end of the function and returns None => we are back in printList([1,2,3]) it reaches the end of the function and returns None لاحظ أن الشرح أعلاه مأخوذ من شرح في نشرة تعليم بايثون البريدية بواسطة Zak Arnston بتاريخ يوليو 2003. يسهل تنفيذ هذا الأمر لقائمة بسيطة باستخدام حلقة for، لكن ماذا لو كانت القائمة معقدةً وتحتوي قوائم أخرى فيها، فإذا استطعنا التحقق من كون عنصر ما قائمةً باستخدام دالة type() المضمنة وكان قائمة حقًا؛ فسنستدعي printList() تعاوديًا، أما إن لم يكن قائمةً فنطبعه: def printList(L): # لا تفعل شيًا إن كانت فارغة if not L: return # على العنصر الأول printList إذا كانت قائمة فاستدع if type(L[0]) == list: printList(L[0]) else: # لا توجد قوائم لذا نطبع هنا print( L[0] ) # L نعالج بقية عناصر printList( L[1:] ) سيصعب تنفيذ ذلك باستخدام الحلقة التكرارية العادية، ويظهر الفرق مع استخدام التعاودية في تسهيل ذلك التنفيذ، لكن ثمة مشكلة هنا، فالتعاودية على بنى البيانات الكبيرة يستهلك الذاكرة كثيرًا، لذا عند وجود ذاكرة صغيرة أو بنى بيانات كبيرة لمعالجتها، فيجب تفضيل الشيفرة المعتادة للأمان، وبسبب مشكلة الذاكرة تلك واحتمال أن يتعطل المفسر interpreter بسببها فقد وضعت بايثون حدًا لعدد مستويات التعاودية التي تسمح بها، فإذا تجاوزنا ذلك الحد فسيُنهى برنامجنا مع خطأ RecusrionError، والذي نلتقطه باستخدام try/except: >>> def f(n): return f(n+1) نلاحظ أن سبب هذه الحالة هو عدم وجود شرط إنهاء، لكن يجب أن تكون مجموعةً كبيرةً من بيانات الدخل كافيةً لإطلاقها حتى في الدوال المكتوبة بإتقان، وهنا يكون الحل الوحيد هو إعادة الكتابة مرةً أخرى باستخدام الحلقات التكرارية المعتادة، وهذا ممكن دومًا مهما بدا صعبًا. جافاسكربت ولغة VBScript تدعم كل من لغة جافاسكربت ولغة VBScript التعاودية، لكن بما أننا ذكرنا كل شيء تقريبًا فسنتركك مع نسخة تعاودية من دالة المضروب للغتين: <script type="text/vbscript"> Function factorial(N) if N < 0 Then Factorial = -1 'a negative result is "impossible" if N = 0 Then Factorial = 1 Else Factorial = N * Factorial(N-1) End If End Function Document.Write "7! = " & CStr(Factorial(7)) </script> <script type="text/javascript"> function factorial(n){ if (n < 0) return NaN // NaN - Not a Number - يعني أنه غير صالح if (n == 0) return 1; else return n * factorial(n-1); }; document.write("6! = " + factorial(6)); </script> لننظر الآن في البرمجة الدالية Functional Programming (أو البرمجة الوظيفية) في الفصل التالي. خاتمة نأمل بنهاية هذا الفصل أن تكون تعلمت ما يلي: تستدعي الدوال التعاودية نفسها من داخل تعريفها. يجب أن تحتوي الدوال التعاودية على شرط إنهاء غير تعاودي نصل إليه في النهاية، وإلا فسنقع في حلقة لا نهائية من التكرار. التعاودية مستهلكة للذاكرة عادةً، لكن ليس في كل الحالات. ترجمة -بتصرف- للفصل العشرين: Recursion, or doing it to yourself، من كتاب Learn To Program لصاحبه Alan Gauld. اقرأ أيضًا المقال التالي: مقدمة إلى البرمجة الوظيفية Functional Programming المقال السابق: برمجة الواجهات الرسومية باستخدام Tkinter التعاود recursion والمكدس stack في جافاسكربت التعاود recursion في جافا مفهوم التعاود (Recursion) والكائنات القابلة للاستدعاء (Callable Objects) في Cpp1 نقطة