لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 10/05/24 في كل الموقع
-
ماهو نوع هذا التشفير lwlm7ZNVcwznmA187k10P2jvoFfx+U/0ai113oOIstvp9sCCRDe8GZbpzBPxikjktplrR4d5vxOSB8C7vmtpjogiuUqCtCiL/PmrWtQDfD2+m1rWvxb0AsVgqAmpT3D3y1z1W+wI/9x3uCjyWJtb5UnF46BuWK72En3VNxOiehjWDq/PjnW0A9g+GgFmBj6vr8QVURj3yyIsFlSu4oI8hrondLkQ7637C+7t4afe+7XBF+sUwIJC9l76PeJSrDA8lY8TQOZdFo6EzAuIGKA1Ey5iZDCuL3pWbGHXLFGnjDU/uX60bpMJOHwGIZZZKvHVNIeO23Jj8Ay5ivgny8YBZ/mVnXDbXRepGVKJUeB2wGA=2 نقاط
-
2 نقاط
-
سير العمل في التعلم التعزيزي في تعلم الاله وأيضا الشبه الخاضع للإشراف يكون بمخطط Workflow of a semi-supervised learning system2 نقاط
-
السلام عليكم هو اي الفرق ما بين Qualitative and quantitative data ؟ واي الابستخدم اكثر في اتدريب نماذج تعلم الاله ؟2 نقاط
-
1 نقطة
-
السلام عليكم احتاج لمساعدة في تنزيل وتشغيل برنامج KALDI لعمل ابحاث في التعرف الآلي على الكلام، من يجد عنده القدره أرجو مراسلتي لنتفق على التفاصيل. هذا رابط لموقع البرنامج http://kaldi-asr.org/1 نقطة
-
مرحبا هل يمكنني تصميم ذكاء اصطناعي يتنبأ بالطقس لبعد سنتين بمعلومات اليوم وكيف يتم ذلك وشكرا لكم المشروع طرح علي من شركة ابحاث المناخ فأردت ان اخذ رأيكم يا اخوتي وشكرا1 نقطة
-
1 نقطة
-
كما وضحت لك هذا بناء على النموذج المصمم . تخيل لو أن شخص والديه لديهم مرض السكر و أيضا لديه زيادة كبيرة في الوزن فهذا الشخص من المحتمل بشكل كبير أن يصاب بمرض السكر ولكنه لم يصب حتى الآن بالمرض وهذا التنبؤ من شأنه أن ينقذ هذا الشخص أو نحاول مساعدة قبل أن يصاب بمرض السكر. أما التصنيف هل هذا الشخص لديه مرض السكر أم لا . فيمكننا تدريب النموذج على التحاليل مثلا لنقوم بعد ذلك بإعطاء التحليل للنموذج ويخبرنا هل الشخص مصاب حاليا أم لا. فكما وضحت لك هذا بناء على البيانات التي لديك والتي قمت بتدريب النموذج عليها وما تتوقعه من النموذج.1 نقطة
-
وعليكم السلام ورحمة الله وبركاته. هذا يعتمد على النوذج الذي قمت بتصميمه . فيمكنك تصميم نموذج للتنبؤ بخصوص إحتمالية إصابة الشخص بمرض السكر مستقبلا وهذا بناء على عوامل كثيرة مثل العمر والعوامل الوراثية وأيضا و مستوى السكر و الوزن و غيرها . ويمكنك تصميم نموذج لتحديد هل الشخص مصاب بمرض السكر في الوقت الحالي أم لا . بناء على أعراض مرض السكر الذي تظهر عليه أو بناء على التحاليل الخاصة به . لذلك هذا يعتمد على البيانات والمعايير التي إستخدمتها في تدريب النموذج .1 نقطة
-
انا في بدايه الامر وقد شغلت powershell ولكن بعد تثبيت choco خرجت منه وعندما دخلت مرة اخرى ل اسجل المعلومات طلع لي خطا مادري ويش اسوي ارجو الرد اخواني1 نقطة
-
وعليكم السلام، لإنجاز وكتابة سيرة ذاتية احترافية، يمكنك اتباع الخطوات التالية: أولا: جمع المعلومات الأساسية ويشمل ذلك: المعلومات الشخصية: الاسم، البريد الإلكتروني، رقم الهاتف، العنوان (اختياري). الملف الشخصي: فقرة قصيرة عنك تعكس خلفيتك المهنية وأهدافك. التعليم: تفاصيل عن تعليمك، الشهادات، والدورات. الخبرة العملية: قائمة بالوظائف السابقة مع شرح لكل منها، تتضمن المسؤوليات والإنجازات. المهارات: المهارات الفنية والشخصية التي تمتلكها (مثل البرمجة، إدارة المشاريع، التصميم). اللغات: اللغات التي تتقنها. الشهادات والتدريبات: أي شهادات أو دورات قمت بها. ثانيا: تحديد البرمجية او الطريقة التي تستخدمها في كتابة السيرة الذاتية يمكنك الاختيار بين: برامج تحرير النصوص مثل: Microsoft Word و Google Docs القوالب الجاهزة في البرامج السابقة مواقع التصميم مثل Canva, Novoresume, Zety ثالثا: التصميم والهيكل: احرص على أن تكون السيرة الذاتية منظمة وسهلة القراءة. استخدم العناوين الواضحة، واجعل الأقسام مرتبة بالتسلسل المناسب. وتأكد من التدقيق اللغوي ومراجعة الأخطاء الإملائية. رابعا: حفظها وتصديرها بصيغ سهلة المشاركة: احفظ السيرة الذاتية بصيغة PDF مثلا حتى لا تتغير التنسيقات عند إرسالها.1 نقطة
-
السلام عليكم هي اي المشكله الابتحلها الDesign patterns ؟ وهل الا غني عن تعلم Design patterns اي كان انت كمبرمج هتختار تخصص اي او اي لغه هشتغل بيها ؟1 نقطة
-
أريد التواصل مع شخص مسؤول في الموقع لأنني أريد دورة خاصة فأنا رجل عمري 48 سنة وأعيش في ألمانيا وخريج المعهد العالي للمعلوماتية من جامعة حلب في سوريا .. وأريد تعلم أي مجال في الكمبيوتر يمنحني القدرة على الدخول في سوق العمل في ألمانيا... ماهي الطريقة للتواصل فلم أجدها .1 نقطة
-
على حد علمي ذلك غير متوفر في الأكاديمية، لكن للتأكد أرجو التواصل مع مركز المساعدة والاستفسار عن الأمر وسيتم الرد عليك في أقرب وقت.1 نقطة
-
لا تحلّ مشكلة واحدة فقط، بل العديد من المشاكل، كما أنها توفر حلولا للمشاكل الشائعة في البرمجة ممّا يسمح أيضا بإعادة استخدام الأكواد بسهولة، كما تجعل الكود أكثر تنظيما وسهل الفهم، مما يسهل صيانته وتطويره وتسمح بإضافة وظائف جديدة دون تغيير الكود الموجود بشكل كبير أعتبر أنها توفر لغة مشتركة للمطورين لوصف حلول البرمجة كما تقدم حلولا مجربة للمشاكل المعقدة في تصميم البرامج. لذا وبغض النظر عن التخصص أو اللغة التي تختارها كمبرمج، فإن تعلم Design patterns مفيد جدا وأنصح بها لأنها ستساعدك على: فهم أفضل لهيكلة البرامج. حل المشاكل بطريقة أكثر فعالية. كتابة كود أفضل وأكثر قابلية للصيانة. التواصل بشكل أفضل مع المطورين الآخرين. تحسين مهاراتك في تصميم البرمجيات. فعلى الرغم من أنه قد يكون ممكنا البرمجة دون معرفة عميقة بها إلا أن تعلمها يمكن أن يحسن مهاراتك بشكل كبير ويجعلك مبرمجا أفضل، بغض النظر عن مجال تخصصك أو اللغة التي تستخدمها.1 نقطة
-
1 نقطة
-
البيانات النوعية (Qualitative Data) تمثل الخصائص أو الصفات التي لا يمكن قياسها بالأرقام يتم جمعها غالبا من خلال المقابلات، الاستبيانات المفتوحة، أو الملاحظات كالألوان، المشاعر، الآراء، التصنيفات أما البيانات الكمية (Quantitative Data) فتمثل القيم العددية التي يمكن قياسها وتحليلها إحصائيا يتم جمعها غالبا من خلال الاستبيانات المغلقة أو التجارب كالطول، الوزن، العمر وعدد المبيعات. البيانات الكمية تستخدم بشكل أكبر في تدريب نماذج تعلم الآلة، لأنها تسمح بإجراء تحليلات إحصائية دقيقة وتطبيق خوارزميات تعلم الآلة بشكل فعال بينما البيانات النوعية يمكن تحويلها إلى بيانات كمية مثل الترميز لتستخدم في بعض التطبيقات، لكن البيانات الكمية تظل الأكثر شيوعا في النماذج الإحصائية والتعلم الآلي.1 نقطة
-
مرحبًا، الفرق هو أن ال Quantitave تمثل بأرقام فهي عبارة عن مجموعة من القياسات، مثلًا في حال كان لدينا بيانات عن أشخاص، فالمقاييس الرقمية من الممكن أن تكون راتب الشخص، عدد الأطفال، عدد ساعات العمل، العمر، و غيرها الكثير. بينما ال Qualtitave تركز على الإجابة عن أسئلة محددة غالبًا بشكل نصي غير قابل للقياس، إذا أخذنا نفس المثال السابق، يمكن أن تكون هذه البيانات عبارة عن: الجنسية، هل يعمل الشخص بشكل جزئي أم كامل (لاحظ هنا ليس رقم و إنما تصنيف فقط)، المهنة و غيرها الكثير. أما ما يتم استعماله في نماذج تعلم الآلة فهو غالبًا خليط من النوعين، فغالبًا ما تجد بيانات رقمية و بيانات نصية تصنف الشخص، لذلك لا يوجد نوع مفضل على آخر، , لكن من الجدير بالذكر أن البيانات الرقمية يمكن أن تستعمل و يتم تحليلها سواء بنماذج تعلم آلة أو بطرق تقليدية لإنتاج البيانات غير الرقمية، فيمكنك تحليل عدد ساعات العمل لاستنتاج فيما إذا كان الشخص يعمل بشكل كامل أو جزئي، أو تدريب نموذج تعلم آلة لتوقع عدد الأطفال بناء على بيانات أخرى. لذلك يمكنك اعتبار ال qulatitave data على أنها أعلى مستوى من ال quantitave data فهي نتاج تحليل. تحياتي.1 نقطة
-
عليك إنشاء ملف للكود وليكن باسم app.py ثم فتحه في IDLE من خلال الضغط على File ثم open وبعد ذلك سيعمل run معك بدون مشكلة.1 نقطة
-
1 نقطة
-
السلام عليكم عندى صفحه على الفيس بوك مربوطه بحافظه اعمال ولكنى نسيتها ، كيف استطيع ارجاع بيانات حافظه الاعمال او نقل الصفحه لحافظه اعمال اخرى ؟1 نقطة
-
CTRL + , أي علامة الفاصلة وستظهر لك الإعدادات ، ثم ابحث عن font وسيظهر لك Editor: font size قم بتعديل القيمة إلى أي قيمة تريدها مثلاً ضع 201 نقطة
-
منصة leetcode تستخدم إصدار أقدم من بايثون ولا يدعم سلسلة f والتي تم تقديمها في الإصدار 3.6. أيضًا أنت تقوم بإرجاع 1 أو 0 بدلاً من مصفوفة تحتوي على مؤشرات العناصر التي مجموعها يساوي الهدف، كما هو مطلوب في LeetCode. وللعلم استخدام nested loops أي حلقتين متداخلتين يؤدي إلى تعقيد زمني من الدرجة O(n^2)، حيث n هو عدد العناصر في المصفوفة، بمعنى وقت التنفيذ يزداد بشكل سريع جدًا مع زيادة حجم المصفوفة. لذا اعتمد على ميثود format وتعديل الكود كالتالي: class Solution: def twoSum(self, nums, target): num_map = {} for i, num in enumerate(nums): complement = target - num if complement in num_map: return [num_map[complement], i] num_map[num] = i return [] num = Solution() result = num.twoSum([2, 7, 11, 15], 9) print(result) result = num.twoSum([3,2,4],6) print(result) result = num.twoSum([3,3],6) print(result)1 نقطة
-
ستجد أسفل فيديو الدرس صندوق للتعليقات كما هنا يرجى طرح سؤالك أسفل الدرس وليس هنا حيث هنا قسم الأسئلة العامة ولا نقوم بإجابة الأسئلة الخاصة بمحتوى الدورة أو الدرس، وذلك لمعرفة الدرس الذي توجد به مشكلتك و لمساعدتك بشكل أفضل.1 نقطة
-
سنقدم في هذا الدليل 10 نصائح تساعدك على كتابة محتوى بطريقة أسرع، والتغلب على مشكلة قفلة الكاتب writer’s block التي تصيب بعض الكتاب؛ ليس بسبب نقص المهارة، إنما نتيجة عوامل نفسية؛ كما يشرح المقال كيفية بناء عادة منتظمة تساعدك على نشر محتوى قيّم وإيجابي للقراء. لا شك أن تعلم الكتابة السريعة يُعَد أمرًا ضروريًا لتصبح مدونًا ناجحًا، لأنك تحتاج إلى نشر محتوى ثابت بانتظام لجذب الجمهور والمحافظة عليهم؛ أما أن تنشر بعض المقالات من حين إلى آخر وتنتظر لحظات الإلهام لتأتيك، فهو أمر لا ينفع مع من يسعى إلى بناء مدونة ناجحة، إذ لا بُدّ من اتباع إيقاع نشر منتظم، حتى يستمر القراء بزيارتك مدونتك وقراءة المزيد من مقالاتك. قد تبدو الكلمات السابقة رائعةً من الناحية النظرية، وربما أعطتك دفعةً من الحماسة، لكن كيف يبدو الأمر من الناحية الواقعية؟ عندما تفتح مستندًا فارغًا لكتابة محتوى جديد، قد تجد نفسك محدقًا فيه لفترة طويلة دون كتابة أي شيء، ومن ثم تعلن استسلامك. في ذات الصدد، قد تتمكن من كتابة شيء ما، ولكنك تشعر أنك تكتب بعشوائية دون اتباع منهج واضح، أو أنها مجرد جمل إنشائية لا تقدم للقارئ أي قيمة حقيقية؛ كما قد تنتهي من كتابة منشوراتك، ثم تشعر أنها متخبطة تأخذ القارئ في متاهة من المعلومات المتداخلة، فينتهي به المطاف دون تحقيق أي فائدة. قد تظن في قرارة نفسك أنك غير مؤهل لتكون كاتبًا ناجحًا وسريعًا، لكن كن على ثقة بأنه يمكنك تحقيق هدفك إذا فهمت النصائح التالية وبذلت جهدك في تطبيقها. 1. اكتب كل يوم إن أمكن ذلك إذا سألت الكتاب الناجحين من كل المجالات -وليس المدونات فقط- عن سر نجاحهم، فسيخبرك الكثير منهم عن أهمية الكتابة اليومية؛ وهو ما يمكنك تطبيقه عمليًا من خلال منح الكتابة جزءًا أساسيًا من برنامجك اليومي، وقد تستمر في ذلك حتى في أيام العطل والأعياد، أو يمكنك الاقتصار على أيام العمل. الجميل في الانتظام اليومي للكتابة هو أنك ستصل إلى نتائج رائعة بعد فترة دون أن تشعر أنك قد بذلت وقتًا طويلًا في الكتابة. فعلى سبيل المثال، إذا كتبت 500 كلمة فقط يوميًا، ستصل في نهاية العام إلى أكثر من 100 ألف كلمة، حتى وإن لم تكن تكتب في عطلات نهاية الأسبوع وأخذت إجازة لبضعة أسابيع. مع العلم أنك عندما تصبح سريعًا في الكتابة، لن تستغرق في كتابة 500 كلمة ٱكثر من 30 دقيقة. من المهم أن تجد وقتًا من برنامجك اليومي تركز فيه جيدًا على الكتابة، وقد يكون ذلك في الصباح الباكر، أو خلال استراحة الغداء، أو ربما في المساء المتأخر بعد أن ينام أطفالك، أو أيًا كان الوقت الذي يناسبك. إذا لم تكن الكتابة اليومية مناسبةً لطبيعة حياتك، أو إذا كنت تفضل جلسات كتابة بعدد أقل ولمدة أطول، فاحرص على أن تكتب مرتين على الأقل أسبوعيًا. 2. ابدأ بكتابة الخطوط العريضة لهيكلة منشورك الخطوة الأولى لكتابة أي محتوى هي وضع حجر الأساس له، وهذا من خلال تحديد الٱفكار الرئيسية التي سيتناولها منشورك، فهي أشبه بالهيكل العظمي الذي من خلالها ستتمكن من معرفة ما يجب كتابته في بداية المنشور وفي منتصفه وفي نهايته، وستكون أمامك بعض الأفكار الأساسية التي يمكن أن تشكل العناوين الفرعية لمنشورك. إذا كنت تهدف إلى أن كتابة منشورك بسرعة، فقد تظن أن وضع مخطط المنشور ما هو إلا مضيعة للوقت، لكن الحقيقة أن البدء بمخطط المنشور سيساعدك على أن تنجز عملك بسرعة أكبر. سيساعدك مخطط المنشور في البقاء على المسار الصحيح، حتى لا ينتهي بك الأمر في التخبط بين الأفكار والتنقل العشوائي بين المواضيع. علاوةً على ذلك، يمكن لمخطط المنشور أن يبقيك متحفزًا حتى النهاية، كونه يتيح لك معرفة المقدار الذي أنجزته من منشورك، والمقدار المتبقي الذي ما يزال عليك كتابته. 3. اكتب مسودتك الأولى على شكل نقاط في البداية، لن تحتاج إلى كتابة فقرات كاملة أو حتى جمل كاملة، لأنك بالتأكيد ستراجع ما كتبت وترتبه ضمن جمل وفقرات متناسقة؛ لذلك ابدأ عملك بكتابة بعض الأفكار والإلهامات التي تدور في رأسك، واترك ترتيب هذه الأفكار إلى المرحلة التالية. أمور مثل العناوين والاقتباسات والصور وأي محتوى داعم آخر يمكنك تأجيله حتى الانتهاء من كتابة المسودة، لكن الأمر المهم في الوقت الحالي أن تدون أهم الأفكار لديك على الصفحة. وأخيرًا، احرص على تدوين أفكارك على شكل نقاط بسيطة، ولا تشغل نفسك كثيرًا بأمور التنسيق التي غالبًا ما تشتت انتباه الكتاب وتمنعهم من الوصول إلى أفضل مستوياتهم في الكتابة. 4. اكتب بالترتيب الذي تريده ليس من الضروري أن تبدأ عملك بكتابة المقدمة ومن ثم إكمال المقال بالترتيب حتى كتابة الخاتمة، بل يمكنك أن تبدأ بكتابة القسم الذي يجذبك أكثر؛ فإذا كنت تكتب مقالًا من النوع "10 نصائح …" لتعلم القارئ كيفية القيام بشيء ما، فيمكنك أن تبدأ بكتابة النصيحة 3، ثم النصيحة 7، ومن ثم تعود إلى كتابة باقي النصائح. إن وجود المخطط الأولي لمنشورك سيسهل عليك مهمة التنقل كثيرًا، وهي إحدى الأسباب الرئيسية التي يجب أن تدفعك إلى كتابة المخطط الأولي في البداية، فقد ترغب في كتابة الأقسام الأصعب أولًا، وبالتالي تتشجع لإنهاء القسم السهل المتبقي، أو قد ترغب في البدء في الأقسام السهلة كنوع من الإحماء قبل الانتقال إلى الأجزاء الأكثر تعقيدًا في منشورك. 5. اكتب تحت الضغط من خلال تحديد موعد نهائي ثابت من الجيد أن تحدد لنفسك تاريخًا ووقتًا معينًا يجب أن تنشر فيه مقالتك، وعند حلول ذلك الوقت، يجب أن تنشر كل ما كتبته. ولا تقلق حول ما إذا كان المحتوى مثاليًا أو أنه ليس كذلك، إذ يمكنك العودة إليه وتحديثه في اليوم التالي أو الأسبوع التالي أو حتى الشهر المقبل. يكتشف العديد من الكتاب قدرتهم على الكتابة السريعة عندما يواجهون موعدًا نهائيًا عليهم الالتزام به. وبصفتك مدونًا، ليس من المُتوقع أن يكون لديك محررًا أو مديرًا ينتظر عملك، وهذا صحيح، لكن تذكر أن لديك قراءً وجمهورًا ينتظرون منشوراتك. ولكي تزيد حماستك في الكتابة، يمكنك إخبار القراء بأنك ستنشر منشورًا جديدًا كل يوم جمعة مثلًا على مدونتك، مما يمنحك موعدًا نهائيًا محددًا عليك الالتزام به؛ أو في حال كنت تنشر على وسائل التواصل الاجتماعي، فيمكنك إخبار أصدقائك والمتابعين بأنك ستنشر منشورًا جديدًا بحلول الساعة السادسة مساءً كل يوم، أو في أي وقت آخر قد تختاره. يمكن أن يكون الشعور بالمسؤولية العلنية دافعًا قويًا للغاية، ومن المرجح أن تنجز كتابتك بسرعة ٱكبر بكثير، لأنك تتسابق مع الزمن لتوفي بالموعد الذي قدمته لجمهورك، كما قد تجد في الموعد الثابت للنشر عاملًا يساعدك على زيادة التركيز. سيساعدك الموعد الثابت أيضًا على استغلال الوقت بالطريقة المثالية، فعلى سبيل المثال، قد تكتب لمدة ساعة قبل أن تذهب لاصطحاب أطفالك من المدرسة، أو ربما تكتب لمدة 30 دقيقة قبل بداية مباراة كرة القدم التي ترغب في مشاهدتها. 6. إضافة مؤقت للمحافظة على تركيزك في الكتابة السريعة إذا كنت عاجزًا عن الالتزام بموعد نهائي ثابت، فيمكنك تجربة استخدام مؤقت، والذي قد يساعدك على زيادة تركيزك أثناء الكتابة. الطريقة الأكثر شيوعًا لاستخدام مؤقت هي تقنية الطماطم أو تقنية البومودورو Pomodoro Technique، والتي تشير إلى العمل لمدة 25 دقيقة، مقابل استراحة لمدة 5 دقائق؛ إذ يمكنك تكرار ذلك 3 مرات قبل أخذ استراحة لمدة أطول (20-30 دقيقة). ومع ذلك، ليس من الضروري ٱن تتقيد بالأرقام السابقة، إذ يمكنك ضبط مؤقتك بالمدة الزمنية التي تناسبك، كما يمكنك التنويع ما بين المهام التي تحتاج إلى تركيز عالٍ والمهام التي تحتاج إلى تركيز أقل. على سبيل المثال، يمكنك كتابة مقال لمدة 20 دقيقة، ثم الرد على رسائل البريد الإلكتروني لمدة 20 دقيقة أخرى، ومن ثم العودة مجانًا إلى الكتابة لمدة 20 دقيقة أخرى. تُعَد عملية ضبط المؤقت بمثابة التزام تجاه نفسك، وكأنك تقدم لنفسك وعدًا بأنك ستكتب ولن تتشتت بشيء آخر لمدة 25 دقيقة. إذا كنت ما تزال تواجه صعوبةً في المحافظة على تركيزك، فيمكنك تجربة مكون إضافي للمتصفح مثل Strict Workflow لحظر مواقع الويب التي تشتت انتباهك أثناء فترات العمل؛ وإذا لم يكن لديك تطبيق مؤقت، فيمكنك ببساطة البحث على جوجل "المؤقت" ومن ثم اختيار المدة التي تريدها والضغط على زر التشغيل. 7. وضع هدف محدد لرفع الإنتاجية علاوةً على ضبط مؤقت، قد تجد أن من المفيد لك تحديد هدف واضح لنفسك حول عدد الكلمات التي تريد كتابتها، فقد تضع على سبيل المثال هدفًا يوميًا من الكلمات يجب إنجازه، أو قد تحدد مدة معينة لإنجاز ما تبقى من مقالك. ستساعدك الأهداف الذكية على تحسين تركيزك وزيادة سرعة عملك، فإذا كنت تعمل على مشروع طويل، مثل كتابة كتاب إلكتروني، فإن تعيين هدف لعدد الكلمات قد يكون أسلوبًا فعالًا للبقاء على المسار الصحيح. وهنا قد يتبادر إلى ذهنك سؤال "ما هو الهدف الجيد لعدد الكلمات؟" الإجابة في الواقع تختلف من شخص إلى آخر بناءً على سرعة الكتابة ومقدار الوقت المتاح لديك. واحدة من الطرق التي يمكنك اتباعها هي كتابة مقال بطول ألف كلمة، وحساب المدة المستغرقة لكتابته، ومن ثم وضع هدف لإكمال الألف كلمة التالية بمدة زمنية أقل من المدة المستغرقة في المرة الأولى. إذا كنت تعاني من نقص التحفيز، فحاول تحديد هدفين مختلفين لعدد الكلمات، هدف الحد الأدنى وهدف مثالي. فعلى سبيل المثال، يمكنك تعيين 100 كلمة يوميًا كحد أدنى لعدد الكلمات المنجزة، وتحديد 500 كلمة يوميًا كهدف مثالي تسعى إلى تحقيقه، ففي الأيام الصعبة والمشغولة، قد تكتفي بكتابة 100 كلمة ويكون ذلك بمثابة نجاح لك؛ ولكن عندما تكون كل الأمور على ما يُرام ولديك متسع من الوقت، فقد تسعى إلى الوصول إلى 500 كلمة كاملة. 8. بناء عادات كتابة خاصة بك لدى العديد من المدونين عادات خاصة لبدء يومهم، ويمكن أن يكون ذلك أمرًا بسيطًا، مثل قراءة أهدافهم، وفتح مستنداتهم التي يعملون عليها وتدوين 3-5 أفكار رئيسية يخططون لتغطيتها خلال اليوم. يحب بعض الأشخاص إضافة عناصر حسية إلى طقوس الكتابة، مثل إضاءة شمعة أو شرب فنجان من القهوة المفضلة، كما قد يبدأ آخرون بوقت قصير من التأمل أو قراءة بعض الاقتباسات الملهمة. مع ذلك، لا تجعل طقوس كتابتك طويلة جدًا أو معقدة، لأن ذلك لن يخدمك في تعلم الكتابة السريعة، بل الأفضل أن تختار أشياء تستغرق بضعة دقائق فقط؛ كذلك، يجب أن تكون مرنًا ولا تتشبث بعاداتك دائمًا، لا سيما إذا كنت تكتب في أكثر من مكان مختلف، فليس من المناسب مثلًا أن تضيء شمعتك إذا كنت تعمل في مكتبة عامة. قد يكون من المناسب لك أيضًا أن تبني عادات فائقة السرعة لاستخدامها في الأوقات التي تكون فيها بحاجة إلى إعادة التركيز أثناء جلسة الكتابة، فقد تقاطعك مكالمة هاتفية، ثم تتشتت على منصات التواصل الاجتماعي مثلًا؛ حينها، يمكنك إعادة التركيز عن طريق إغلاق التطبيقات وعلامات التبويب غير المهمة على متصفحك قبل أخذ بعض الأنفاس العميقة. 9. لا تحرر أثناء الكتابة إحدى الأخطاء المؤكدة التي تؤدي إلى إبطاء وتيرة عملك هي التحرير أثناء الكتابة، إذ لا يمكن القيام بالأمرين معًا في آن واحد؛ فإذا كتبت جملةً ثم حذفتها، ثم كتبت جملة أخرى وحذفت نصفها، ثم كتبت أكثر قليلًا، ثم رجعت وأصلحت بعض الأخطاء المطبعية أو عدلت عنوان منشورك، فمن الصعب حقًا إحراز أي تقدم بهذه الطريقة. حاول قدر الإمكان أن تكتب منشورًا كاملًا قبل البدء بتحريره، لأنك عندما تدخل في عملية الكتابة، سيكون من السهل الاستمرار فيها، وبمجرد حصولك على مسودة كاملة، يمكنك مراجعة منشورك بالكامل ومعرفة ما يجب تغييره، وقد تكون التعديلات أقل مما تظن. إضافةً إلى عدم التحرير أثناء الكتابة، حاول ألا تتوقف ٱثناء الكتابة وتتشتت في البحث عن الأشياء، وإذا كنت بحاجة إلى التحقق من معلومة معينة أو إضافة رابط ما، فما عليك سوى إضافة تعليق على المستند أو تمييز النص بلون مختلف حتى تتمكن من العودة إليه لاحقًا. صحيح أن الأمر قد يستغرق 30 ثانيةً فقط للتحقق من معلومة ما، ولكنه سيعرقل تقدمك، وقد ينتهي بك الأمر في حلقة تشتت الانتباه؛ إذ يؤدي التحقق من رابط في مدونة صديقك إلى قراءة أحدث مقالاته، والنقر على رابط آخر، والتمرير عبر منصات التواصل الاجتماعي، وما إلى ذلك. 10. استخدم أداة تعديل النصوص Text Expander للعبارات الشائعة هل تجد نفسك تستخدم ذات العبارات في عدد كبير من منشورات مدونتك؟ هل تفكر أحيانًا في الإشارة إلى مدونة أخرى باسم طويل وترى أن ذلك يستغرق وقتًا في الكتابة؟ أو هل ترغب في تدوين الاسم الكامل للمنتج بسرعة؟ يمكنك الحصول على كل المزايا السابقة باستخدام أداة تعديل النصوص text expander، والتي تتيح لك استبدال الاختصار أو الرمز القصير بالاسم الكامل تلقائيًا. على سبيل المثال، يمكنك تحويل الاختصار "SME" تلقائيًا إلى الاسم الكامل "Social Media Examiner". يمكنك أيضًا استخدام أداة تعديل النصوص لتصحيح الأخطاء الإملائية، أو لتعديل الأحرف الكبيرة والصغيرة في بداية الكلمات، بحيث إذا كتبت كلمة ووردبريس باللغة بالإنجليزية بهذه الطريقة "Wordpress" مثلًا، فستعمل الأداة على تصحيحها تلقائيًا إلى الشكل "WordPress". هناك الكثير من أدوات تعديل النصوص المختلفة، يمكنك استخدام أداة Text Expander التي تحتوي على نسخة تجريبية مجانية لمدة 30 يومًا، وكذلك أداة Beeftext التي تُعَد خيارًا مجانيًا جيدًا لنظام التشغيل Windows. يمكنك أيضًا استخدام أدوات تعديل النصوص لأغراض أخرى، مثل الردود التلقائية على رسائل البريد الإلكتروني الشائعة التي تتلقاها من القراء. يجب أن تلاحظ أن هذه الٱدوات لا تساعدك على تسريع كتابتك فوريًا، لكنك مع الوقت ستلاحظ نتائجها الرائعة وقدرتها على توفير الوقت الذي تقضيه في الكتابة. في الختام مهما كانت سرعة كتابتك الحالية، كن على يقين بأنك قادر على تحسينها، وقد عايش الكثير من المدونين التطورات الهائلة التي طرأت على مستوياتهم في الكتابة مع استمرارهم الدؤوب في العمل بانتظام ومحاولة تطوير أنفسهم وزيادة سرعتهم في الكتابة. قد تجد أن بعض هذه النصائح لا تتماشى مع طبيعة عملك أو أنها لا تساعدك على تسريع كتابتك، كما قد تجد أنك ملتزم فعلًا ببعض منها، مثل الكتابة اليومية؛ أو ربما تشعر أن بعض هذه النصائح تزيد الضغط عليك، مثل استخدام المؤقت، لذا اختر النصائح التي تشعر أنها تناسبك، فليس من الضروري أن تطبقها كلها. ومع ذلك، حاول تجربة كل النصائح الواردة في هذا المقال، حتى وإن كنت قد جربت شيئًا من قبل وفشلت في تنفيذه بالكامل، فقد تتمكن من الاستفادة منه في هذه المرة وتكتشف كيفية الكتابة بطريقة أسرع. في هذا الأسبوع، يمكن أن تركز على نصيحة واحدة أو نصيحتين، وسترى خلال وقت قصير الفرق الذي طرأ على كتابتك، ولا تيأس إذا لم تتحسن سرعة كتابتك من يوم إلى آخر، فمجرد تحسنك بنسبة 10% كل أسبوع يعني مضاعفة سرعة كتابتك بعد 9 أسابيع. ترجمة -وبتصرّف- للمقال How to Write Faster Blog Content لصاحبه Ryan Robinson. اقرأ أيضًا كيف تنظم جدول أعمالك ككاتب حر بدوام كامل؟ 9 خطوات لكتابة مقالات بشكل أسرع وزيادة أرباحك كمُستقل مدخل إلى التدوين ونشر المدونات وما يتعلق بها عبر منصة ووردبريس1 نقطة
-
إنَّ التطبيق العملي أمر ضروري لإتقان أي مجال تقني ولا سيما مجال الذكاء الاصطناعي، فإذا كنت مهتمًا بالعمل في هذا التخصص وبدأت تعلمه بالفعل لكنك لاتزال مبتدئًا ولا تعرف ماهي مشاريع الذكاء الاصطناعي التي يمكنك تنفيذها لتطبيق معلوماتك النظرية وتوظيفها في مشاريع عملية تحسن خبراتك وتعزز معرض أعمالك فهذا المقال لك، إذ نقترح لك فيه مجموعة من المشاريع العملية متفاوتة الصعوبة في مجالات الذكاء الاصطناعي المختلفة لتساعدك على تحسين مستواك وصقل مهاراتك. مشاريع ذكاء اصطناعي في مجال تعلم الآلة يعد تعلم الآلة Machine Learning (ML) من أهم المجالات الفرعية لتخصص الذكاء الاصطناعي Artificial Intelligence (AI) فهو مجالٌ يسمح للأجهزة الحاسوبية بالتعلم من البيانات وحل المشكلات واتخاذ القرارات دون الحاجة إلى البرمجة الصريحة لكل جزء من أجزاء المشروع، ويهتم مهندسو تعلم الآلة بتطوير خوارزميات حاسوبية تتطور ذاتيًا باستخدام البيانات. لمجال تعلم الآلة استخدامات وتطبيقات عديدة، من بينها أنظمة التوصية المدمجة في منصات عديدة، كالمتاجر الإلكترونية التي تقترح عليك سلعًا تلائمك، ومنصات الفيديو التي تقترح عليك مقاطع جديدة بناءً على تاريخ مشاهداتك، ومواقع التواصل الاجتماعي التي تُظهِرُ لك منشوراتٍ تبعًا لإعجاباتك وتعليقاتك السابقة. ومن أهم مشاريع الذكاء الاصطناعي المقترحة لمهندسي تعلم الآلة: مشروع تصنيف صور بالذكاء الاصطناعي. مشروع توقع أسعار العقارات بالذكاء الاصطناعي. مشروع كشف الاحتيال المالي بالذكاء الاصطناعي. لنشرح المزيد عن كل مشروع من هذه المشاريع وآلية تنفيذه. 1. مشروع ذكاء اصطناعي لتصنيف صور مستوى الصعوبة: سهل. يعد نموذج تصنيف الصور باستخدام خوارزميات تعلم الآلة من مشاريع الذكاء الاصطناعي السهلة المناسبة للمبتدئين، إذ تقوم فكرة المشروع على بناء نموذج ذكاء اصطناعي يستطيع التمييز بين صورٍ مختلفة لأنواعٍ متعددةٍ من أشياء محددة، مثل: نموذج يميز بين صور الأنواع المختلفة من الحيوانات، ويكون هذا بمنح النموذج قاعدة بيانات بها عدد كبير من الصور المرتبة لكل نوع من الأنواع التي نريد أن يميز النموذج بينها مع نص يوضح ماهية كل نوع ومواصفاته، كأن نمنح النموذج صورًا لكلابٍ وقططٍ مع التوضيح النَّصي أنَّ هذه كلاب وقطط، ويتدرب النموذج على هذه البيانات محاولًا اكتشاف أنماط وسمات كل نوع، ففي مثالنا يحاول النموذج اكتشاف صفات الكلب والقطة، ثم يكون قادرًا على التعرف عليهما من صور أخرى لم يتدرب عليها قبلًا. نمر خلال عملية تطوير نموذج تصنيف صور على خطوات متعددة، وهي: جمع البيانات: يمكنك جمع الصور التي سيتدرب عليها النموذج بنفسك، كما يمكنك العثور على مجموعة بيانات Dataset جاهزة عبر الإنترنت، مثل مجموعات بيانات CIFAR-10. معالجة البيانات: إذا جمعت البيانات التي سيتدرب النموذج عليها بنفسك فعليك معالجتها وتصنيفها ووضع صور الكلاب تحت تصنيف واحد وتوضح أنَّ هذه صور كلاب، وتضع صور القطط تحت تصنيف واحد وتوضح أنها صور قطط، أمَّا إذا حمَّلت مجموعة بيانات جاهزة من الإنترنت فيمكنك الانتقال للخطوة التالية مباشرةً. بناء النموذج: يشير بناء النموذج إلى عملية إنشاء الشبكة العصبية Neural Network التي ستتدرب على البيانات وتتمكن من تصنيف الصور بعد التدريب، وغالبًا ما تستخدم في هذه المرحلة أطر عمل جاهزة لتسهيل وتسريع عملية التطوير مثل تينسرفلو TensorFlow. تدريب النموذج: تمنح النموذج مجموعة البيانات الجاهزة ليبدأ النموذج في محاولة استكشاف الأنماط بين الصور، ويسعى لفهم سبب وضع كل صورة ضمن تصنيفها، فيبدأ بفحص صور القطط ويحاول فهم السمات المميزة لكل قطة حتى يتمكن من التعرف على صور القطط خارج مجموعة البيانات التي تدرَّب عليها. اختبار النموذج: هنا يحين موعد اختبار مدى نجاح المشروع، فتسأل النموذج عن صور لكلابٍ وقططٍ أو أيٍّ كان ما درَّبتَ نموذجكَ عليه، على أن تكون هذه الصور خارج مجموعة البيانات التي تدرَّب عليها النموذج، فإن أجاب بدقة فقد نجح المشروع، وإن أخطأ فتأكد من دقة تصنيفك للبيانات أولًا، فإن كانت مصنفة وموصوفة بدقة فامنحه مزيدًا من البيانات للتدرب عليها ثم أعد اختباره. 2. مشروع توقع أسعار العقارات مستوى الصعوبة: متوسط. يعد نموذج توقع أسعار العقارات من أفكار مشاريع الذكاء الاصطناعي المفيدة متوسطة الصعوبة، ويساعدك نموذج توقع أسعار العقارات على تحديد السعر المناسب للعقار بناءً على معطيات عديدة، بدءًا من موقع العقار، مرورًا بمساحته وعدد الغرف فيه، وصولًا إلى رفاهيات العقار، مثل وجود فناء خلفي ومسبح. لا تختلف خطوات تنفيذ مشروع نموذج توقع أسعار العقارات كثيرًا عن خطوات تنفيذ مشروع نموذج تصنيف الصور، وكذا سائر مشاريع الذكاء الاصطناعي في مجال تعلم الآلة، فكلُّ مشاريع تعلم الآلة تتفق في خطوات جمع البيانات ومعالجتها وبناء النموذج وتدريبه واختباره، ولكن تختلف المشاريع فيما بينها في أحجام البيانات ومدى تعقيدها، ووظائف النموذج ومدى تعقيد خوارزمياته وطريقة تعامله مع البيانات وتعلمه منها. يمكنك في مرحلة جمع البيانات لهذا المشروع الاستعانة بمجموعات البيانات التي توفرها المواقع الرسمية للحكومات حول الإسكان، أو البحث في مواقع العقارات لجمع البيانات المُرادة، ثم معالجة بياناتك وتنظيفها، فإذا كانت هنالك بعض المعلومات المفقودة كمساحة عقار أو ما شابه فيمكنك ملؤها بمتوسط المساحات أو أن تحذف هذه القطعة من البيانات. ينصح في مرحلة بناء النموذج استخدام خوارزميات الانحدار الخطي Linear Regression فهي قادرة على اكتشاف العلاقات بين البيانات المختلفة كالعلاقة بين مساحة العقار وموقعه وسعره، كما يمكنك الاستعانة بمكتبات التحليل التنبؤي للبيانات مثل مكتبة ساي كيت ليرن Scikit-Learn المكتوبة بلغة بايثون. بعد ذلك عليك أن تمرر مجموعة البيانات التي جمعتها للنموذج كي يتدرب عليها ويستكشف الأنماط المختلفة بين البيانات، ويفهم لماذا كان العقار باهظ الثمن في منطقة ما وكان زهيدًا في منطقة أخرى، ويتعلم العلاقة بين المساحة وسعر العقار وغيرها من البيانات ذات الصلة، ويمكنك أخيرًا اختبار مشروعك مع عقارات بمعطياتٍ غير تلك الموجودة في مجموعة البيانات التي تدرب عليها مسبقًا. 3. مشروع كشف الاحتيال المالي مستوى الصعوبة: متقدم. تقع نماذج الكشف على الاحتيال ضمن أهم مشاريع الذكاء الاصطناعي، ولا سيما تلك المتعلقة بالاحتيال المالي، حيث تساعد هذه النماذج على كشف العمليات الاحتيالية في المعاملات المالية بناءً على معطيات عديدة، منها مثلًا التاريخ الإنفاقي للعميل، فإن أُجريَت عملية مالية مفاجئة بمبلغ أعلى بكثيرٍ من متوسط إنفاق العميل تُصنَّف العملية احتيالًا، وكذلك إذا تتابعت العديد من العمليات دون فروق زمنية واسعة تصنفها نماذج الكشف عن الاحتيال كعملياتٍ احتيالية. تكمن صعوبة تطوير مشروع ذكاء اصطناعي للكشف عن الاحتيال في صعوبة جمع ومعالجة البيانات التي سيتدرب عليها النموذج، حيث تحتاج لإنشاء مجموعة بيانات تحتوي على عدة تواريخ إنفاقية مع تفاصيل عن عملائها، وإضافة مجموعة من العمليات إلى مجموعة البيانات هذه ثم تصنيفها كعملياتٍ آمنة وعملياتٍ احتيالية، ثم ومعالجة البيانات والتأكد من اكتمال الخانات وعدم فراغ أيٍّ منها. يمكنك استخدام عدة خوازرميات في تطوير نموذج الكشف عن الاحتيال، مثل خوارزمية الانحدار اللوجستي Logistic Regression التي تستطيع توقع احتماليات الاحتيال في العمليات المالية بناءً على المدخلات، كما يمكنك استخدام خوارزمية الغابة العشوائية Random Forest التي تستطيع اكتشاف العمليات المشبوهة والاحتيالية عن الطبيعية بدقة كبيرة، ويوجد خورازميات أخرى تفيد في هذا المجال مثل خوارزمية تعزيز التدرج Gradient Boosting. بعد كتابة خوارزميات النموذج عليك تزويده بالبيانات ليتدرب عليها ويكتشف العمليات الاحتيالية من بين تاريخ العمليات لكل بطاقة أو حساب موجود في مجموعة البيانات، وما إن ينتهي من التدرب على البيانات يمكنك حينئذٍ اختباره على معاملات مالية جديدة. مشاريع ذكاء اصطناعي في مجال معالجة اللغات الطبيعية يعد مجال معالجة اللغات الطبيعية Natural Language Processing (NLP) واحدًا من المجالات الفرعية الحيوية في الذكاء الاصطناعي، وهو يختص بتمكين الآلات والحواسيب من فهم اللغات البشرية، كالعربية والإنجليزية وغيرها، سواءً كانت اللغة مدخلة نصيًا أو صوتيًا وله تطبيقات عديدة منتشرة، بدءًا من روبوتات الدردشة وأشهرها شات جي بي تي ChatGPT وجوجل جيميني Google Gemini، مرورًا بالمساعدين الصوتيين مثل مساعد جوجل Google Assistant وأليكسا Alexa وسيري Siri، وصولًا إلى أدوات الترجمة بمساعدة الحاسوب وأهمها ترجمة جوجل Google Translation. تتعدد مشاريع الذكاء الاصطناعي المقترحة لمهندسي معالجة اللغات الطبيعية، ومنها: مشروع روبوت دردشة لخدمة العملاء باستخدام الذكاء الاصطناعي. مشروع ذكاء اصطناعي لتحليل مشاعر جمهور مواقع التواصل الاجتماعي. مشروع ذكاء اصطناعي للترجمة الآلية. لنوضح المزيد حول كل مشروع من هذه المشاريع وآلية تنفيذه ومستوى صعوبته. 1. مشروع روبوت دردشة لخدمة العملاء بالذكاء الاصطناعي مستوى الصعوبة: سهل. يعد روبوت الدردشة لخدمة العملاء مشروع ذكاء اصطناعي للمبتدئين، ويتمحور بشكلٍ أساسيٍّ حول بناء روبوت دردشة يفهم استفسارات العملاء ويجيب عليها تلقائيًا بإجاباتٍ واضحةٍ كافيةٍ صحيحةٍ، ويعتمد روبوت الدردشة لخدمة العملاء على خوارزميات معالجة اللغات الطبيعية في المقام الأول، ثم على خوارزميات تعلُّم الآلة في المقام الثاني. نبدأ بناء روبوت دردشة خدمة العملاء بتطوير كل جزء منه على حدة، بدءًا من أساس روبوت الدردشة والذي يمكنك بناؤه مستخدمًا إحدى منصات تطوير روبوتات الدردشة عبر واجهة أمامية بسيطة، مثل Chatfuel، أو أن تكتب شيفرات روبوت الدردشة بنفسك مستعينًا بمكتبات وأطر عمل مساعدة مثل مكتبة NLTK بلغة باثيون ثم نطور بعد ذلك نظام التعرف على النوايا Intent Recognition في روبوت الدردشة، والذي يحاول معرفة المغزى وراء الأمر المُدخل من العميل، كتحديد ما إن كان عميل متجر إلكتروني يتساءل عن سياسات الاسترجاع أو تتبع طلبه أو غيرها. نشرع بعد ذلك في تطوير نظام استخراج الكيانات المُسمَّاة (named entity extraction)، والذي يعمل على استخراج التفاصيل المهمة من رسالة العميل، مثل رقم المنتج واسمه أو رقم الطلب وغيرها، وبعد ذلك نبني منهجية تدفق المحادثة التي تساعد روبوت الدردشة على إدارة المحادثة بكفاءة وكتابة ردود مناسبة لاستفسارات العميل ومساعدته على حل مشكلاته، وأخيرًا نجمع كل هذه الأجزاء ونُضمِّنها ليتكون روبوت الدردشة، ثم نبدأ في اختبار كفاءته في إدارة المحادثات. 2. مشروع ذكاء اصطناعي لتحليل مشاعر جمهور مواقع التواصل الاجتماعي مستوى الصعوبة: متوسط. يعمل نموذج تحليل مشاعر جمهور مواقع التواصل الاجتماعي على تحليل المنشورات والتغريدات، ومحاولة تحديد المشاعر العاطفية خلف الكلمات المكتوبة، فيصنف المنشورات بين منشورات إيجابيةٍ ومنشوراتٍ سلبيةٍ وأخرى طبيعية أو عادية، ويساعد هذا النوع من النماذجِ الأعمالَ على تخصيص حملاتهم التسويقية تبعًا للفئة المستهدفة، ويساعدهم كذلك على إطلاق حملات تسويقية ذات كفاءة، وذلك بتحليل أحجام ضخمة من المحتوى المكتوب من هذه الفئة المستهدفة. نبدأ في العمل على تطوير نموذج تحليل مشاعر منشورات مواقع التواصل الاجتماعي بجمع البيانات، فالبيانات في حالتنا هي منشورات التواصل الاجتماعي، ولأنَّ هذا النوع من البيانات غالبًا ما يكون فوضويًا وغير مهيكل فنحتاج جهدًا كبيرًا في معالجة بيانات هذا المشروع، فيمكننا تطوير برنامج يعيد الجملة إلى تكوينها الأصلي، فيزيل الرموز ويحول الحروف الكبيرة إلى صغيرة، ثم يختصر الجملة ما أمكن. بعد ذلك نبدأ في اختيار منهجية معالجة اللغة الطبيعية المناسبة، ولتكن النهج القائم على المعجم Lexicon-Based Approach، والذي يُقسِّم الجملة إلى كلماتٍ ويُحدِّد ماهية كل كلمة على حدة ما إذا كانت كلمة إيجابية أم سلبية أم عادية، فكلما زادت الكلمات الإيجابية في المنشورات صنَّفها ضمن المنشورات الإيجابية، وكذلك كلما زادت الكلمات السلبية في المنشورات صنَّفها ضمن المنشورات السلبية. وأخيرًا بعد تجهيز البيانات وتحديد المنهجية نبدأ في تطوير النموذج، ونعطيه البيانات ليتدرب عليه، ثم نختبره على محتوى ليس ضمن مجموعة البيانات وننظر هل سيصنفه بشكلٍ صحيحٍ أم يخطئ في التصنيف. ولمزيدٍ من التفاصيل حول مشروع نموذج تحليل المشاعر ننصحك بمطالعة مقال تحليل المشاعر في النصوص العربية باستخدام التعلم العميق. 3. مشروع ذكاء اصطناعي للترجمة الآلية مستوى الصعوبة: متقدم يعد المترجم الآلي متعدد اللغات من أهم مشاريع الذكاء الاصطناعي، وتتمحور فكرته حول تمكين المستخدم من الترجمة بين لغة وأخرى، مع دعم لغات عديدة ومتنوعة، وذلك مع تحري الدقة في الترجمة والمقارنة بين الترجمات المختلفة للكلمة الواحدة واستخدام الترجمة الأنسب لها، وأخيرًا تكوين جملة واضحة مفهومة سليمة. الخطوة الأولى من عملية تطوير مترجم آلي متعدد اللغات هي جمع البيانات وتنظيفها ومعالجتها، وتحتاج في هذا المشروع بالذات للبحث عن مجموعة بيانات جاهزة تحتوي على الكلمات بمرادفاتها في اللغات المختلفة مع أمثلة للكلمة في سياقات حديثية عديدة بكل لغة، ثم تعالج هذه البيانات بالبحث فيها عن الترجمات الناقصة أو المفقودة، ثم تترجمها بنفسك. بعد ذلك تختار منهجية الترجمة ونقترح عليك منهجية الترجمة الآلية العصبية Neural Machine Translation (NMT) لدقة عالية في الترجمة، ومن بعد ذلك تكتب خوارزميات النموذج التي ستتدرب على البيانات، ثم تمنح مجموعة البيانات للنموذج ليتدرب عليها، وتجدر الإشارة لأنَّ هذا المشروع هو من مشاريع الذكاء الاصطناعي التي تتطلب الكثير من الموارد الحاسوبية وقدرات معالجة قوية قادرة على التدرب على البيانات الضخمة. ثم ما إذا انتهى النموذج من التدرب على البيانات يمكنك اختبار دقته في الترجمة بين اللغات المختلفة. مشاريع ذكاء اصطناعي في مجال الرؤية الحاسوبية يعد مجال الرؤية الحاسوبية Computer Vision أحد المجالات الحيوية من مجال الذكاء الاصطناعي ويمكن تنفيذ العديد من مشاريع الذكاء الاصطناعي التي تستفيد من قدرة الآلات على تفسير الصور ومقاطع الفيديو وسائر المرئيات والتعرف على محتوياتها مثل تطبيقات التعرف على الوجوه والتعرف على الأشياء وتتبع الحركة، كما تدخل فيه تطبيقات أعقد من ذلك، مثل أنظمة السيارات ذاتية القيادة، وأنظمة الروبوتات، وغيرها. ومن مشاريع الذكاء الاصطناعي المهمة لمهندسي الرؤية الحاسوبية: مشروع التعرف على الوجوه بالذكاء الاصطناعي. مشروع ذكاء اصطناعي لتتبع الأشياء المرئية. مشروع سيارة ذاتية القيادة. وإليك شرحًا أوفى عن كل مشروع من هذه المشاريع وطريقة تنفيذه. 1. نظام التعرف على الوجوه بالذكاء الاصطناعي مستوى الصعوبة: سهل. يعد نظام التعرف على الوجوه مشروع ذكاء اصطناعي للمبتدئين، وتدور فكرة المشروع حول تطوير برنامج يمكنه تحديد الوجوه في الصور والتعرف على أصحابها، وذلك باستخدام تقنيات تعلم الآلة وتقنيات الرؤية الحاسوبية. في أولى الخطوات وهي خطوة جمع البيانات نجد صور المشاهير خيارًا جيدًا لتدريب النموذج عليها، إذ تتوفر صورٌ لهم من زوايا مختلفة عبر الإنترنت، فيمكنك تحميل مجموعة من الصور لكل شخص وتصنيفها داخل مجموعة البيانات حيث تكون جميع صور الشخص تحت تصنيفٍ باسمه، ثم بعد ذلك تبني النموذج باستخدام المكتبات وأطر العمل الجاهزة، مثل مكتبة face_recognition في لغة بايثون. ثم تسمح للنموذج بالتدرب على البيانات والتعرف على الوجوه وتحديد أصحاب هذه الوجوه، ثم إذا ما انتهى من التدرب على مجموعة البيانات يمكنك اختباره على صورٍ غير الموجودة في مجموعة البيانات لنفس الأشخاص الذين كانوا فيها. طالع المزيد عن أنظمة التعرف على الوجوه بقراء مقال إعداد شبكة عصبية صنعية وتدريبها للتعرف على الوجوه. 2. مشروع ذكاء اصطناعي لتتبع الأشياء المرئية مستوى الصعوبة: متوسط. يشير نظام تتبع الأشياء المرئية إلى نظام برمجي يستخدم الذكاء الاصطناعي للتعرف على الأشياء المختلفة في مقاطع الفيديو وتتبعها، كالتعرف على السيارات وتتبعها في أنظمة الرادارات، والتعرف على الأجساد البشرية وتتبعها في أنظمة كاميرات المراقبة. نبدأ تطوير النموذج بجمع مقاطع للأشياء المرئية التي تود تتبعها، مثل مقاطع متعددة لسياراتٍ تجري على طريقٍ سريع، مع إضافة مربعات حول الأشياء المراد تتبعها في مقاطع الفيديو، ثم تطور نموذجك بإحدى المنهجيتين YOLO أو SSD، ثم تمنح النموذج مجموعة البيانات ليتدرب عليها ويحاول التعرف على الأشياء الموجودة في مقطع الفيديو وتتبع الشيء المطلوب منه تتبعه، ثم تختبر النموذج. 3. مشروع سيارة ذاتية القيادة مستوى الصعوبة: متقدم. يعد بناء نظام لسيارة ذاتية القيادة أمرًا صعبًا، نظرًا لتعقيد هذه الأنظمة وكثرة وظائفها وخواصها، ولكنه مشروعٌ تتعلم منه الكثير، وتتضمن أنظمة السيارات ذاتية القيادة أنظمة تتبع للأشياء، كما تتضمن أنظمة لرسم الخرائط وتحديد الطرق. تمر خلال مشروع تطوير نظام سيارة ذاتية القيادة بمراحلٍ ثلاث: الإدراك: تعمل في هذه المرحلة على بناء النظام الإدراكي للسيارة، والذي يساعدها على رسم الخرائط ثلاثية الأبعاد للمكان المحيط، ويساعدها على التقاط صور للطريق ومعرفة الأشياء أمامها، وكذلك يتضمن النظام الإدراكي نظامًا لتحديد السرعة والمسافة، ويعمل أيضًا على معرفة معلومات عامة عن الموقع المحيط باستخدام نظام تحديد الموقع العالمي GPS. تخطيط المسار: تبني لنظام السيارة ذاتية القيادة في هذه المرحلة نظامًا داخليًا لرسم الخرائط عالية الجودة، ونظامًا لتحديد أفضل المسارات وأسرعهم للسير فيه مع النظر للظروف الحالية من أجواءٍ وغيرها، كما نُعلِّم النظام كيفية تجنُّب الحواجز من بشرٍ وسياراتٍ أخرى وغيرها من الحواجز. اتخاذ القرارات: نجعل النظام قادرًا على السير في المسار الذي خططه قبلًا، ونزده بنظام توقعٍ لحركات المركبات المجاورة، ونحرص في هذه المرحلة على تطوير منطق اتخاذ القرارات التي تؤدي إلى سلامة وأمان الراكب والسيارة. مشاريع ذكاء اصطناعي في مجال برمجة الروبوتات تشير برمجة الروبوتات Robotics Programming إلى عملية استخدام إحدى لغات برمجة الروبوتات لتطوير النظام الذي يستطيع به جسد الروبوت أن يبدأ في تنفيذ مهامه، وتساعد برمجة الروبوتات الروبوت على أن يدرك بيئته، ويضع خططًا، ويتخذ قراراتٍ، وينفذ مهامًا، فمثلًا عند تطوير روبوت للتنقل الأرضي نحتاج إلى تزويد نظامه بخوارزميات الرؤية الحاسوبية التي تسمح له بالإدراك والتعرف على الأشياء من حوله، كما نحتاج إلى جعل النظام قادرًا على رسم خرائط، ويحتاج أيضًا إلى خوارزميات لتخطيط مسارٍ والسير فيه، وخوارزميات للتحكم في محركاته وأجزائه الفيزيائية، وغيرها. ومن أهم مشاريع برمجة الروبوتات: مشروع تحريك ذراع روبوت في مسار محدد. مشروع مساعدة روبوت على تجنب العقبات. مشروع روبوت يتفاعل مع البيئة ويتعلم ويتطور باستقلالية. وإليك المزيد حول كل مشروع من هذه المشاريع الذكية. 1.مشروع لتحريك ذراع الروبوت في مسار محدد مستوى الصعوبة: سهل يهتم هذا المشروع بتطوير خوارزمية لذراع الروبوت تجعله قادرًا على التحرك في مسار محدد مسبقًا لحمل شيء من مكان إلى آخر، ونرى تطبيقات هذا المشروع بكثرة في المصانع المعتمدة كليًا أو جزئيًا على الآلات في تصنيع منتجاتها، إذ تتواجد فيها أذرع روبوتات تنقل المنتجات وتدخلها وتخرجها من آلات التصنيع، ثم تغلفها وتجعلها جاهزة للبيع. تحتاج أولًا في هذا المشروع إلى ذراع روبوت لتطور الخوارزمية له وتختبرها عليه، فما إن حصلت عليه فابدأ بفحصه وتعرف على مواصفاته وعدد مفاصله والنطاق الحركي لكل مفصل، وتعرف على سائر المستعشرات المدمجة فيه، ثم ابدأ بتحديد المسار المناسب للذراع بناءً على هذه المواصفات، وبعد ذلك ابدأ في تحويل هذا المسار إلى شيفرات برمجية تساعد الذراع على التحرك حركةً بحركة، وحدد سرعة تنفيذ كل حركة في المسار، ثم ثبت النظام على ذراع الروبوت واختبر مدى دقته في التحرك من مكان إلى آخر. 2. مشروع مساعدة روبوت على تجنب العقبات مستوى الصعوبة: متوسط يهدف مشروع تطوير نظام يساعد الروبوت على تجنب العقبات إلى تمكين الروبوت من التحرك الحر في بيئة مع تجاوز العقبات المختلفة وعدم الاصطدام بها. يعتمد هذا المشروع على كتابة خوارزميات لمستشعرات الروبوت، ونمر فيه بثلاث خطوات، أمَّا الأولى فهي تحصيل المستشعرات وبرمجتها بحيث يعرف الروبوت من خلالها ما حوله من مرئيات وماديات، ويتعرف على العقبات المحتملة في طريقه، وأمَّا الخطوة الثانية فهي تحديد الخوارزمية المناسبة للنظام حسب حجم الروبوت والهدف منه وسرعته، وتختار بين الخوارزميات الثلاث: خوارزمية متابعة الحائط Wall-Following أو خوارزمية الميادين المحتملة Potential Fields أو خوارزميات الأخطاء Bug Algorithms، وهذه الخوارزميات مسؤولة عن رسم مسار الروبوت وتجنب العقبات أثناء السير في المسار، وأمَّا الخطوة الثالثة والأخيرة هي اختبار النظام على روبوت حقيقي ومراقبة مدى كفاءته في تجاوز العقبات. 3. مشروع روبوت يتفاعل مع البيئة ويتعلم ويتطور باستقلالية مستوى الصعوبة: متقدم يعد نظام روبوت يتفاعل مع البيئة ويتعلم ويتطور باستقلالية واحدًا من أهم وأصعب مشاريع الذكاء الاصطناعي وبرمجة الروبوتات، وكما يتضح من اسم المشروع فإنَّ الهدف منه هو تطوير نظام روبوت يدرك البيئة المحيطة به ويفهم ماهية الأشياء من حوله، ويستطيع أن يتعامل مع المهام المختلفة في مجال محدد ويعالجها، ويتمكن كذلك من التعلم المستمر عن المجال الخاص به والتطور وزيادة القدرة على تنفيذ المهام المتنوعة. تحتاج أولًا إلى جسد روبوت لتنفيذ هذا المشروع، فإذا ما حصلت عليه فابدأ بتطوير المهام الأساسية للروبوت، بدءًا من التعرف على الأشياء والتقاطها، مرورًا بتخطيط المسارات، وصولًا إلى تخطي العقبات، وغيرها من المهام الأساسية للروبوت، وبعد ذلك طوِّر النظام الحركي للروبوت وطوِّر كذلك النظام الإدراكي له، والذي يساعده على معرفة الأشياء في البيئة حوله والتفاعل معها. ابدأ بعد ذلك في تطوير خوارزميات تعلم الآلة الخاصة بالروبوت، ونقترح عليك تطويرها بنهج التعلم المعزز Rainforcement Learning، وزوِّد الروبوت بمجموعات ضخمة من البيانات التي تضم معلومات عن المجال التي تود من الروبوت فهمه بعمق وإتقانه، وغالبًا ما تأخذ هذه المرحلة من تطوير الروبوت الوقت الأطول، ولكنها ضرورية لتمكين الروبوت من فهم المجال المختار جيدًا وتعلمه دون الحاجة إلى إشراف بشري، فإذا ما أنهيتها فأعطِ الروبوت مهامًا في هذا المجال لاختباره وتحديد مدى دقته ومدى نجاح المشروع. تنفيذ مشاريع الذكاء الاصطناعي بلغة البايثون إذا كنت تتساءل ما هي أفضل لغة برمجة لتنفيذ مشاريع الذكاء الاصطناعي فإننا ننصحك باعتماد لغة بايثون فهي تعد لغة رائدة في مجال الذكاء الاصطناعي وتسهل عليك تنفيذ مشاريعك لما تتضمنه من مكتبات وأطر عمل ذكاء اصطناعي قوية من أبرزها: تنسرفلو (TensorFlow) بايتورش (PyTorch) كيراس (Keras) نومباي (NumPy) سايباي (SciPy) سكيت-ليرن (Scikit-learn) بلوتلي (Plotly) ماتبلوتليب (Matplotlib) وإن أردتَّ التعرف على مزيد من مشاريع الذكاء الاصطناعي غير المذكورة في هذا المقال بلغة بايثون فيمكنك الاطلاع على كتب الذكاء الاصطناعي المتنوعة التي توفرها أكاديمية حسوب مجانًا، وأهمها كتاب عشرة مشاريع عملية عن الذكاء الاصطناعي. وإن كنت مهتمًا بالتأسيس السليم في مجال الذكاء الاصطناعي والتعلم على يد خبراءٍ في المجال، مع التطبيق العملي المستمر على كل مصطلح من مصطلحات الذكاء الاصطناعي ننصحك بمطالعة دورة أكاديمية حسوب في الذكاء الاصطناعي، والتي تُحدَّث دوريًا بالمصطلحات والمفاهيم الجديدة في مجال الذكاء الاصطناعي وتساعدك على تنفيذ العديد من مشاريع الذكاء الاصطناعي العملية المفيدة والتي توائم متطلبات سوق العمل. دورة الذكاء الاصطناعي احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة. اشترك الآن اقرأ أيضًا دليلك الشامل لتعلم الذكاء الاصطناعي تطبيقات الذكاء الاصطناعي اسأل مهندس الذكاء الاصطناعي: أسئلة شائعة حول الذكاء الاصطناعي تطوير تطبيق 'اختبرني' باستخدام ChatGPT ولغة جافاسكربت مع Node.js بناء تطبيق بايثون يجيب على أسئلة ملف PDF باستخدام الذكاء الاصطناعي أهم مصطلحات الذكاء الاصطناعي للمبتدئين1 نقطة
-
لاشك أن استخدام نماذج الذكاء الاصطناعي المُدَرَّبة مُسبقًا pretrained model يقلل الوقت والجهد والتكاليف اللازمة لتدريب هذه النماذج من الصفر، فضلًا عن إتاحة الفرصة أمامك لاستخدام أحدث النماذج المتوفرة على منصات متخصصة مثل تلك التي توفرها مكتبة المُحوّلات Transformers من منصة Hugging Face، لذا يلجأ مهندسو الذكاء الاصطناعي لاستخدام النماذج المُدَرَّبة مُسبقًا في كثير من الحالات ويعمدون إلى صقلها أو معايرتها Fine Tuning بدقة وتدريبها على بيانات محددة تناسب أهدافهم، إذ يعني صقل النماذج fine-tuning أخذ نموذج تعلم آلي مدرب مسبقًا ومواصلة تدريبه على مجموعة بيانات أصغر وأكثر تخصصًا للحفاظ على قدرات النموذج المدرب وتكييفه ليناسب استخدامات محددة ويعطي تنبؤاتٍ دقيقة، كما سنطرح بعض الأمثلة التوضيحية على تدريب النماذج باستخدام كل من التقنيات التالية: مُدَرِّب مكتبة المحوّلات Transformers Trainer. إطار العمل تنسرفلو TensorFlow مع كيراس Keras. إطار العمل بايتورش PyTorch لوحده. تحضير مجموعة بيانات التدريب قبل أن نبدأ بصقل النموذج fine-tune سنُحَمِّل مجموعة بيانات Dataset ونُحَضِّر بياناتها كما تعلمنا في المقال السابق المعالجة المُسبقة للبيانات قبل تمريرها لنماذج الذكاء الاصطناعي. اخترنا في هذا المقال مجموعة البيانات Yelp Reviews: >>> from datasets import load_dataset >>> dataset = load_dataset("yelp_review_full") >>> dataset["train"][100] {'label': 0, 'text': 'My expectations for McDonalds are t rarely high. But for one to still fail so spectacularly...that takes something special!\\nThe cashier took my friends\'s order, then promptly ignored me. I had to force myself in front of a cashier who opened his register to wait on the person BEHIND me. I waited over five minutes for a gigantic order that included precisely one kid\'s meal. After watching two people who ordered after me be handed their food, I asked where mine was. The manager started yelling at the cashiers for \\"serving off their orders\\" when they didn\'t have their food. But neither cashier was anywhere near those controls, and the manager was the one serving food to customers and clearing the boards.\\nThe manager was rude when giving me my order. She didn\'t make sure that I had everything ON MY RECEIPT, and never even had the decency to apologize that I felt I was getting poor service.\\nI\'ve eaten at various McDonalds restaurants for over 30 years. I\'ve worked at more than one location. I expect bad days, bad moods, and the occasional mistake. But I have yet to have a decent experience at this store. It will remain a place I avoid unless someone in my party needs to avoid illness from low blood sugar.'} وبما أن مجموعة بياناتنا نصية لذا سنحتاج مُرَمِّزًا tokenizer مناسبًا للنموذج لمعالجتها كما تعلمنا في مقالات السلسلة، تتضمن هذه المعالجة أساليب الحشو والاقتطاع لتوحيد أطوال السلاسل النصية، وسنستخدم دالةً تدعى map لتسريع المعالجة التحضيرية للبيانات وتطبيقها على كامل مجموعة البيانات dataset وفق التالي: >>> from transformers import AutoTokenizer >>> tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-cased") >>> def tokenize_function(examples): return tokenizer(examples["text"], padding="max_length", truncation=True) >>> tokenized_datasets = dataset.map(tokenize_function, batched=True) للسهولة وتسريع العمل يمكنك أخذ جزء من مجموعة البيانات فقط بدلًا من العمل معها كاملةً كما يلي: >>> small_train_dataset = tokenized_datasets["train"].shuffle(seed=42).select(range(1000)) >>> small_eval_dataset = tokenized_datasets["test"].shuffle(seed=42).select(range(1000)) تدريب نموذج ذكاء اصطناعي باستخدام PyTorch Trainer إن المُدَرِّبTrainer هو أحد أصناف مكتبة المحوّلات Transformers حيث يستخدم لتدريب نماذج المكتبة، ويوفر عليك أعباء إنشاء حلقة تدريب خاصة بمشروعك من الصفر، ويتمتع هذا الصنف بواجهة برمجية API متنوعة الخيارات وتؤمن مزايا تدريبية واسعة، مثل: تسجيل الأحداث logging، والتدرج التراكمي gradient accumulation، والدقة المختلطة mixed precision. سنبدأ عملنا بتحميل النموذج وفق الأوامر التالية مع تحديد عدد التسميات التوضيحية labels المتوقعة من البيانات المُدخَلة، وإذا قرأت بطاقة وصف مجموعة البيانات التي حضرناها Yelp Review ستجد أن عدد التسميات labels فيها هو 5: >>> from transformers import AutoModelForSequenceClassification >>> model = AutoModelForSequenceClassification.from_pretrained("google-bert/bert-base-cased", num_labels=5) ملاحة: عندما تُنَفِذ الأوامر السابقة ستواجه تحذيرًا مفاده أن بعض الأوزان المُدَرَّبة مسبقًا في النموذج لن تُسْتَخْدَمْ، وبعضها ستُعاد تهيئته عشوائيًا، يُعدّ هذا التحذير طبيعيًا ولا يستوجب القلق إذ سيُهمَل رأس النموذج BERT المُدَرَّب مسبقًا ويُستَبْدَل برأس تصنيف لا على التعيين، ثم يٌدَرَّب الرأس الجديد على تصنيف السلاسل وتنتقل إليه تلقائيًا كل المعرفة التي اكتسبها النموذج المدرب مسبقًا فيستفيد منها، علمًا أن رأس النموذج model head هو الجزء المسؤول عن معالجة مهمة معينة مثل التصنيف أو الترجمة ويستخدم لتحديد نتائجها. المعاملات الفائقة للنموذج hyperparameters سننشئ صنفًا لوسطاء التدريب TrainingArguments يتضمن كافة المعاملات الفائقة التي يمكننا ضبطها بالإضافة إلى الرايات flags الخاصة بتفعيل خيارات التدريب المختلفة، سنستعمل هنا المعاملات الافتراضية لكن يمكنك استعراض جميع المعاملات الفائقة وتجريبها لتصل إلى الإعدادات الملائمة لحالتك. ملاحظة: المعاملات الفائقة للنموذج هي المعاملات التي نحددها قبل بدء عملية تدريب النموذج وتتحكم في كيفية تعلم النموذج. لا تنسَ أن تحدد مكان حفظ نقاط التحقق checkpoints الناتجة عن التدريب: >>> from transformers import TrainingArguments >>> training_args = TrainingArguments(output_dir="test_trainer") التقييم لا يعطي المُدَرِّب Trainer في الأحوال الطبيعية مؤشراتٍ عن أداء النماذج في أثناء التدريب، فإذا رغبت بالحصول على تقييمٍ لنموذجك، ينبغي أن تمرر دالة خاصة بهذا الأمر تحسب مؤشرات الأداء وترجع لك تقريرًا بتقييم النموذج، وفي هذا المجال توفر مكتبة التقييم Evaluate دالةً بسيطة تدعى accuracy يمكنك تحميلها باستخدام evaluate.load كما في المثال التالي (طالع هذه الجولة السريعة في مكتبة التقييم لمزيدٍ من المعلومات): >>> import numpy as np >>> import evaluate >>> metric = evaluate.load("accuracy") استدعِ الدالة compute مع metric وفق التالي لحساب دقة التنبؤات الناتجة عن نموذجك، ولأن نماذج مكتبة المحوّلات Transformers تضع مخرجاتها في السمة logits (كما تعلمنا سابقًا في مقال جولة سريعة للبدء مع مكتبة المحوّلات Transformers) فينبغي لنا في البداية تحويل logits الناتجة عن النموذج إلى تنبؤات predictions ثم تمريرها لدالة حساب الدقة: >>> def compute_metrics(eval_pred): logits, labels = eval_pred predictions = np.argmax(logits, axis=-1) return metric.compute(predictions=predictions, references=labels) والآن أعطِ القيمة "epoch" للمعامل evaluation_strategy من وسطاء التدريب TrainingArguments لمراقبة أداء نموذجك أثناء التدريب فهذا الخيار سيعطيك تقييمًا في نهاية كل دورة تدريبية epoch للنموذج: >>> from transformers import TrainingArguments, Trainer >>> training_args = TrainingArguments(output_dir="test_trainer", evaluation_strategy="epoch") المُدَرِّب Trainer لننشئ الآن كائن المُدَرِّب Trainer باستخدام جميع الإعدادات السابقة وهي: النموذج الذي اخترناه، ووسطاء التدريب، ومجموعة بيانات التدريب، ودالة التقييم وذلك وفق الأمر التالي: >>> trainer = Trainer( model=model, args=training_args, train_dataset=small_train_dataset, eval_dataset=small_eval_dataset, compute_metrics=compute_metrics, ) ثم دَرِّب نموذجك باستخدامه كما يلي: >>> trainer.train() تدريب نموذج TensorFlow باستخدام Keras نناقش هنا تدريب نماذج من مكتبة Transformers باستخدام إطار العمل تنسرفلو TensorFlow وكيراس Keras API، حيث أن كيراس هو إطار عمل سهل ومفتوح المصدر يسمح بإنشاء شبكات عصبية معقدة بتعليمات قليلة، بدأ مشروعًا مستقلًا ثم اندمج مع TensorFlow (يمكنك معرفة المزيد بمطالعة قسم الذكاء الاصطناعي على أكاديمية حسوب وخاصةً المقال التعريفي مكتبات وأطر عمل الذكاء الاصطناعي). تحويل البيانات إلى صيغة تناسب كيراس Keras يتطلب تدريب نماذج Transformers باستخدام Keras API تحميل مجموعة بيانات بصيغة تتوافق مع كيراس Keras، وإحدى الطرق السهلة لذلك هي تحويل البيانات التدريبية إلى مصفوفات NumPy ثم تمريرها له، تناسب هذه الطريقة مجموعات البيانات صغيرة الحجم وهي ما سنجربه بدايةً قبل الانتقال إلى طرق أكثر تعقيدًا. لنُحمِّل في البداية مجموعة بيانات، وقد اخترنا هنا المجموعة CoLA dataset من GLUE benchmark وهي مجموعة بيانات بسيطة تناسب تصنيف النصوص الثنائية binary text، وسنأخذ منها القسم المخصص للتدريب فقط: from datasets import load_dataset dataset = load_dataset("glue", "cola") dataset = dataset["train"] # أخذنا من مجموعة البيانات القسم الخاص بالتدريب فقط سنُحَمِّل بعد ذلك مُرمِّزًا tokenizer يناسب النموذج ونستخدمه لترميز بيانات الندريب وتحويلها إلى مصفوفات NumPy، ولكن في مثالنا البيانات ثنائية بسيطة وتسمياتها التوضيحية labels هي مجموعة أصفار وواحدات فيمكننا تحويلها إلى مصفوفة NumPy مباشرةً دون ترميز: from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-cased") tokenized_data = tokenizer(dataset["sentence"], return_tensors="np", padding=True) # يرجع المُرَمِّز دفعات مُرَمَّزة من البيانات، حوّلناها هنا إلى قاموس يناسب Keras tokenized_data = dict(tokenized_data) labels = np.array(dataset["label"]) # هذه البيانات في الأساس مصفوفة أصفار وواحدات وفي المرحة الأخيرة سنُحَمِّل النموذج ونخضعه لعملية تصريف compile ثم ملائمة fit، وننوه هنا أن كل نموذج في مكتبة المحوّلات يتضمن دالةً افتراضية لحساب الخسارة loss function تناسب المهمة التي يُستَخدم النموذج لأجلها، فلست بحاجة لضبط أي خيارات بهذا الخصوص: from transformers import TFAutoModelForSequenceClassification from tensorflow.keras.optimizers import Adam # تحميل النموذج وتصريفه model = TFAutoModelForSequenceClassification.from_pretrained("google-bert/bert-base-cased") # غالبًا ما تكون معدلات التَعَلُّم المنخفضة هي الأنسب لصقل نماذج مكتبة المحوّلات المُدَرَّبة مُسبقًا model.compile(optimizer=Adam(3e-5)) # لاحظ عدم وجود أي وسيط يتعلق بدالة حساب الخسارة فهي افتراضية model.fit(tokenized_data, labels) ملاحظة: تختار نماذج Hugging Face تلقائيًا دوال الخسارة المناسبة لبُنيتها ومهامها، لذا لن تضطر لتمرير الوسيط الخاص بحساب الخسارة عند تصريف نموذجك باستخدام compile() لكن الخيار يبقى لك ففي حال لم ترغب باستخدام دالة الخسارة الافتراضية يمكنك حسابها بنفسك. يعمل أسلوب الترميز السابق جيدًا مع مجموعات البيانات صغيرة الحجم لكنه لا يُعدّ عمليًّا أبدًا مع مجموعات البيانات الكبيرة بل وسيؤدي إلى إبطاء عملية التدريب، يعود ذلك لسببين: الأول أن مصفوفتي الرموز والتسميات التوضيحية ستكونان كبيرتي الحجم وتحميلهما بالكامل إلى الذاكرة يُعدّ مشكلة، والسبب الثاني أن مكتبة Numpy لا تستطيع التعامل مع المصفوفات غير منظمة الأطوال المعروفة باسم jagged arrays يعني ذلك أنك ستضطر إلى حشو العناصر القصيرة في المصفوفة بالأصفار لتصبح جميعها بطول موحد يساوي أطول عنصر في المصفوفة، وهذا أيضًا سيُبَطئ التدريب. تحميل مجموعة بيانات بصيغة tf.data.Dataset يمكنك تحميل مجموعة بياناتك بصيغة tf.data.Dataset بدلًا من اتباع الطريقة السابقة والمخاطرة بإبطاء التدريب، سنقترح عليك طريقتين لإنجاز الأمر، وتستطيع إنشاء خط أنابيبك الخاص tf.data يدويًا إذا رغبت بذلك: prepare_tf_dataset(): تعتمد هذه الطريقة على طبيعة نموذجك لذا تُعدّ الطريقة الأنسب والموصى بها في معظم الحالات، فهي تفحص مواصفات النموذج وتتعرف تلقائيًا على أعمدة مجموعة البيانات المتوافقة معه أي التي يمكن استخدامها كمدخلات للنموذج، وتتجاهل الأعمدة غير المتوافقة فتُنشئ بذلك مجموعة بيانات أبسط وأفضل أداءً. to_tf_dataset: طريقة منخفضة المستوى low-level فهي تتحكم بالتفاصيل الدقيقة لطريقة إنشاء مجموعة بيانات التدريب، فتُمَكِّنك من تحديد الأعمدة columns وتسمياتها التوضيحية label_cols التي تود تضمينها في مجموعة البيانات. لنبدأ بالطريقة الأولى prepare_tf_dataset()، ولكن قبل تطبيقها ينبغي لنا ترميز البيانات وإدخال مُخرجات المُرَمِّز بهيئة أعمدة إلى مجموعة البيانات dataset كما يلي: def tokenize_dataset(data): # سنُدخِل مفاتيح القاموس الناتج هنا إلى مجموعة البيانات بصفتها أعمدة return tokenizer(data["text"]) dataset = dataset.map(tokenize_dataset) تُخَزَّن مجموعات بيانات Hugging Face على القرص الصلب افتراضيًا، فلن تسبب ضغطًا على استخدام الذاكرة على حاسوبك، وبمجرد إضافة الأعمدة السابقة تستطيع الحصول على الدفعات batches من مجموعة البيانات، وإضافة رموز الحشو إلى كل دفعة وهو ما يقلل عدد رموز الحشو المطلوبة في كل مرة مقارنةً بحشو مجموعة البيانات كاملةً. tf_dataset = model.prepare_tf_dataset(dataset["train"], batch_size=16, shuffle=True, tokenizer=tokenizer) مررنا إلى Preparation_tf_dataset في التعليمات السابقة وسيطًا خاصًا هو tokenizer يحدد المُرَمِّز الذي سنستخدمه لحشو الدفعات المُحَمَّلة بطريقة صحيحة، لكن يمكنك الاستغناء عنه إذا كانت العينات في مجموعة بياناتك متساوية الطول ولا تحتاج لأي حشو، أو استبداله بوسيطٍ آخر نحو Collate_fn إذا كنت ترغب بتدريب النموذج على حالات أعقد، مثل نمذجة اللغة المقنعة masked language modelling أي إخفاء بعض الرموز ليتنبأ النموذج بالكلمات من السياق أو غيرها من الحالات، تستطيع تحدد نوعية المعالجة التحضيرية التي تريدها للدفعات قبل تمريرها للنموذج، يساعدك الاطلاع على بعض الأمثلة والملاحظات المتعلقة بالموضوع من منصة Hugging Face لتطبيق ذلك عمليًّا. والآن بعد إنشاء مجموعة بيانات tf.data.Dataset يتبقى لنا الخطوة الأخيرة وهي تصريف النموذج compile وملائمته fit وفق التالي: model.compile(optimizer=Adam(3e-5)) # No loss argument! model.fit(tf_dataset) تدريب نموذج ذكاء اصطناعي باستخدام Native PyTorch يساعدك المُدَرِّب Trainer على تدريب نموذجك وضبطه بتعليمة واحدة فقط ويغنيك عن إنشاء حلقة التدريب من الصفر، لكن بعض المستخدمين يفضلون عدم الاعتماد على المُدَرِّب وإنشاء حلقات تدريبهم الخاصة بأنفسهم لتدريب نماذج مكتبة المحوّلات Transformers، فإذا كنت أحدهم يمكنك إجراء ذلك باستخدام إطار العمل PyTorch لوحده أي native PyTorch وفق الخطوات التالية، لكن في البداية ننصحك بتفريغ الذاكرة المؤقتة على جهازك أو دفتر ملاحظاتك notebook بإعادة تشغيله أو بتنفيذ هذه الأوامر: del model del trainer torch.cuda.empty_cache() تتضمن الخطوات التالية المعالجة التي سنجريها يدويًا على البيانات المُرَمَّزة tokenized_dataset لتحضيرها للتدريب. 1. تخَلَّص من عمود النص text لأن النموذج لا يقبل النصوص الخام مدخلاتٍ له: >>> tokenized_datasets = tokenized_datasets.remove_columns(["text"]) 2. عَدِّل اسم العمود label إلى labels ليتوافق مع اسم الوسيط الذي يقبله النموذج: >>> tokenized_datasets = tokenized_datasets.rename_column("label", "labels") 3. اضبط تنسيق مجموعة البيانات لتُرجِع PyTorch tensors بدلًا من القوائم المعتادة: >>> tokenized_datasets.set_format("torch") 4. ثم أنشئ مجموعة بيانات مُصَغَّرة من مجموعة البيانات الكاملة كما فعلنا في الفقرات السابقة لتسريع عملية صقل النموذج fine-tuning: >>> small_train_dataset = tokenized_datasets["train"].shuffle(seed=42).select(range(1000)) >>> small_eval_dataset = tokenized_datasets["test"].shuffle(seed=42).select(range(1000)) مُحَمِّل البيانات DataLoader أنشئ مُحَمِّل بيانات DataLoader لمجموعات بيانات التدريب والاختبار لتٌنَفِّذ العمليات التكرارية على دفعات البيانات: >>> from torch.utils.data import DataLoader >>> train_dataloader = DataLoader(small_train_dataset, shuffle=True, batch_size=8) >>> eval_dataloader = DataLoader(small_eval_dataset, batch_size=8) ثم حَمِّل النموذج وحَدِّد عدد التسميات labels المتوقعة له: >>> from transformers import AutoModelForSequenceClassification >>> model = AutoModelForSequenceClassification.from_pretrained("google-bert/bert-base-cased", num_labels=5) المُحَسِّنْ Optimizer ومُجَدّوِل معدل التعلُّم learning rate scheduler سننشئ مُحَسِّنْ Optimizer ومُجَدّوِل معدل التعلُّم learning rate scheduler لتدريب النموذج وضبطه، اخترنا هنا المُحَسِّنْ AdamW من PyTorch: >>> from torch.optim import AdamW >>> optimizer = AdamW(model.parameters(), lr=5e-5) ثم مُجَدّوِل معدل التعلُّم باستخدام المُجَدّوِل الافتراضي للمُدَّرِب Trainer: >>> from transformers import get_scheduler >>> num_epochs = 3 >>> num_training_steps = num_epochs * len(train_dataloader) >>> lr_scheduler = get_scheduler( name="linear", optimizer=optimizer, num_warmup_steps=0, num_training_steps=num_training_steps ) وأخيرًا حَدِّدْ قيمة المعامل device لتكون "cpu" إذا كان لديك وحدة معالجة رسوميات (GPU) ورغبت باستخدامها للتدريب، فمن دونها سيستغرق التدريب مدةً طويلة في حال الاعتماد على وحدة المعالجة المركزية (CPU) لوحدها وقد تصل المدة لساعات بدلًا من بضع دقائق: >>> import torch >>> device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu") >>> model.to(device) أصبحنا جاهزين الآن للتدريب. حلقة التدريب Training loop إليك نموذجًا للشيفرة البرمجية الخاصة بحلقة التدريب، ويمكنك استخدام المكتبة tqdm لإضافة شريط خاص bar يعرض لك تقدم مراحل التدريب لتتبع سير العملية: >>> from tqdm.auto import tqdm >>> progress_bar = tqdm(range(num_training_steps)) >>> model.train() for epoch in range(num_epochs): for batch in train_dataloader: batch = {k: v.to(device) for k, v in batch.items()} outputs = model(**batch) loss = outputs.loss loss.backward() optimizer.step() lr_scheduler.step() optimizer.zero_grad() progress_bar.update(1) التقييم Evaluate يختلف أسلوب تقييم أداء النموذج في حلقة التدريب المخصصة عنه في صنف المُدَرِّب Trainer، فبدلًا من حساب مؤشرات الأداء وتصدير التقارير عنها في نهاية كل دورة تدربية epoch سيجري التقييم هنا في نهاية التدريب إذ سنُجَمع كافة الدفعات باستخدم add_batch ونحسب مؤشرات الأداء. >>> import evaluate >>> metric = evaluate.load("accuracy") >>> model.eval() for batch in eval_dataloader: batch = {k: v.to(device) for k, v in batch.items()} with torch.no_grad(): outputs = model(**batch) logits = outputs.logits predictions = torch.argmax(logits, dim=-1) metric.add_batch(predictions=predictions, references=batch["labels"]) >>> metric.compute() الخلاصة تغرفنا في مقال اليوم على تقنية الصقل fine-tuning لتدريب نماذج الذكاء الاصطناعي المُدَرَّبة مسبقًا وتحسين أدائها على مهام معينة باستخدام بيانات محددة، ووضحنا الفوائد الرئيسية لاستخدام نماذج مُدَرَّبة مسبقًا وكيفية تحميل وتحضير البيانات لها وتدريبها وضبطها وتقييم أدائها من خلال استخدام مكتبات وأطر عمل متنوعة تساعدنا في تنفيذ مهام الصقل مثل Transformers و TensorFlow و Keras و PyTorch كي نحسن من كفاءة وأداء هذه النماذج في مشاريعنا الخاصة. ترجمة -وبتصرف- لقسم Fine-tune a pretrained model من توثيقات Hugging Face. اقرأ أيضًا المقال السابق: المعالجة المُسبقة للبيانات قبل تمريرها لنماذج الذكاء الاصطناعي تعرف على إطار عمل باي تورش PyTorch وأهميته لتطبيقات الذكاء الاصطناعي كيفية بناء شبكة عصبية لترجمة لغة الإشارة إلى اللغة الإنجليزية تعرف على أفضل دورات الذكاء الاصطناعي1 نقطة
-
يتساءل كل مبتدئ في البرمجة ما هي برامج البرمجة وما أهم البرمجيات التي أحتاجها لتعلم كتابتها بصورة صحيحة، فإذا كنت في المراحل الأولى من تعلم البرمجة ولا تعلم أين تكتب الشيفرات أو الأكواد البرمجية الخاصة بك ولا كيف تنفذها بعد كتابتها وترى نتائج عملية التنفيذ، ولا تدري كيف تتحقق من أدائها ومدى أمانها، ننصحك بأن تقرأ هذا المقال حيث نستعرض فيه أهم برامج البرمجة المستخدمة بكثرة خلال العمل على تطوير التطبيقات وكتابة الشيفرات بكفاءة وسرعة. ما هي برامج البرمجة؟ تعد برامج البرمجة مجموعةً من الأدوات التي يستعملها المبرمج لتطوير تطبيقات برمجية مختلفة بسرعة وفعالية، ولبرامج البرمجة استخداماتٌ عديدة، فهي تساعد المطور على كتابة الكود البرمجي وتقدم له مميزات وخيارات عديدة لتسريع عمله مثل ميزة الاستكمال التلقائي للشيفرات، وكذلك تساعده على أتمتة المهام المتكررة، مثل أتمتة اختبارات الأمان والأداء، كما تساعده على كشف وإحصاء أخطاء الشيفرات البرمجية وتنقيحها ما توفر عليه الكثير من الوقت والجهد. فوائد برامج البرمجة تعد برامج البرمجة بالغة الأهمية على أصعدة عديدة، من أهمها: توفير وقت المبرمج: لعل توفير الوقت أبرز فائدة من استخدام برامج البرمجة، إذ تساعد هذه البرمجيات المطور على أتمتة مهام عديدة، وتوفر له قوالب جاهزة للوظائف البرمجية المستخدمة بكثرة، وكثيرًا من الخيارات والمميزات الأخرى التي سيلي ذكرها خلال المقال. زيادة القدرة على التوسع: تعمل بعض أنواع برامج البرمجة على مزامنة عمليات معالجة البيانات، وبالتالي تساعد هذه البرمجيات على زيادة كمية البيانات التي يمكن معالجتها في آنٍ واحد، ما يؤدي تبعًا إلى سهولة توسعة المواقع وتطوير البرمجيات وزيادة قدرتها على تحمُّل الأعداد الضخمة من المستخدمين. رفع فرص التوظيف: كلُّ برنامجٍ يتعلم المبرمج التعامل معه سيزيد من كفاءته ويعززفرصه في التوظيف، فهذه البرمجيات تساعد المبرمج على كتابة شيفرات أفضل وتسريع عملية التطوير، وهذا بالضبط ما يحتاجه أصحابُ الأعمال. أنواع البرامج المستخدمة في البرمجة تتفرع البرامج المستخدمة في البرمجة إلى أنواع عديدة، ولكل نوعٍ استخداماته، ومن أهم أنواعها: برامج تعلم البرمجة Programming Studying Programs المترجمات والمفسرات Compiler and Interpreter بيئات التطوير المتكاملة IDEs منقّحات الأخطاء Debuggers أنظمة التحكم في الإصدارات Version Control Systems برامج البرمجة المعتمدة على الذكاء الاصطناعي لنتعرف على كل نوع من هذه البرامج بمزيد من التفصيل. برامج تعلم البرمجة Programming Studying Programs لا نعني هنا التطبيقات والبرمجيات المخصصة لتدريس أو تعليم من خلال الدورات التعليمية والتدريب المستمر على كتابة الشيفرات التي تحل مشكلات معينة، ولكن نعني بها الأدوات والبرمجيات التعليمية التي تساعد المبتدئين على دخول تعلم البرمجة وفهم أساسياتها من خلال واجهات رسومية تعتمد على البلوكات أوالكتل التي يمكنك من خلالها تركيب الشيفرات بأسلوب سهل ومبسط وتعلم أساسيات البرمجة من خلالها ومن أبرز هذه البرامج سكراتش Scratch والذي يمكن أن يصنف كلغة برمجة مرئية مصممة بهدف تعلم مفاهيم البرمجة للطلاب في أعمار مبكرة ومساعدتهم في إنشاء ألعاب وقصص ورسوم متحركة ومواضيع تفاعلية تعليمية بطريقة محببة وسهلة وهذه البرامج تناسب المبتدئين بشكل كبير وسنشرح المزيد عنها لاحقًا. المُصرِّفات والمفسرات Compilers and Interpreters تحتاج لغات البرمجة عالية المستوى إلى برنامج حاسوبي لترجمة الشيفرات إلى لغة الآلة machine language كي يفهمها الحاسوب قبل تنفيذها، ويوجد نوعان رئيسيان من هذه البرمجيات: المُصرِّف Compiler: وهو برنامج يترجم الشيفرات أو الأكواد البرمجية كاملةً قبل تنفيذها، وما إذا كان في الشيفرات أخطاء فلن تُنفَّذ، وتتميز لغات البرمجة المُصرَّفة بالسرعة والأمان. المُفسِّر Interpreter: وهو برنامج ينفذ شيفرات البرنامج سطرًا بسطر، ويبدأ تنفيذ البرنامج ولو كان في الشيفرات أخطاء، ولكن سرعان ما يتوقف التنفيذ إذا وصل المُفسِّر إلى شيفرة بها خطأ برمجي. بيئات التطوير المتكاملة IDEs تعد بيئات التطوير المتكاملة Integrated Development Environments أو IDEs اختصارًا من برامج البرمجة المفيدة التي تساعد المطورين على كتابة الشيفرات البرمجية بسرعة وكفاءة، فهي تحتوي على مميزات عديدة تجعل عمل المطور أسهل، من خواص استكمال تلقائي للشيفرات إلى خواص تصحيح فوري للأخطاء في صيغة الشيفرة، كما تحوي بيئات التطوير المتكاملة عدة أدواتٍ مدمجة مفيدة للمطور، مثل: محرر الأكواد ومُنقِّح الأخطاء ومترجم الشيفرة والأكمال التلقائي للكود، وتوفر كذلك إمكانية تثبيت العديد من الإضافات الخارجية المساعدة في عملية التطوير. تتعدد بيئات التطوير المتكاملة، ومن أشهرها نذكر: فيجوال ستوديو كود Visual Studio Code: ذاع صيت فيجوال ستوديو كود حتى صارت بيئة التطوير الأشهر والأكثر استخدامًا بين المبرمجين، وذلك لتعدد مميزاتها، بدءًا من دعمها لغالب لغات البرمجة الحية وجميع لغات البرمجة الشهيرة، مرورًا بتوفيرها لإضافاتٍ عديدة تجعل من كتابة الشيفرات أمرًا يسيرًا على المطورين، وصولًا إلى بساطة واجهتها وسهولة التعامل معها، وكذلك من أبرز ما يميزها مجانيتها وأنها بيئة تطوير مفتوحة المصدر. بايشارم PyCharm: تُستخدم بيئة التطوير المتكاملة بايشارم من مطوري لغة البرمجة بايثون خاصة، وتعد بيئة تطوير مدفوعة، وتدعم بايشارم بالكاد جميع أطر عمل ومكتبات لغة بايثون، كما توفر أدواتٍ مخصصة لاختبار شيفرات بايثون وتنقيح أخطائها، وتدعم تضمين نظام التحكم في الإصدارات غيت داخل بيئة التطوير لتسريع عملية تتبع النُّسخ المختلفة من الشيفرات. إنتيليج إيديا IntelliJ IDEA: بيئة تطوير مدفوعة مصممة لمطوري تطبيقات الأندرويد، وتدعم لغات البرمجة جافا وكوتلن وسكالا وجروفي، وهي أشهر لغات تطوير تطبيقات الأندرويد وأكثرها استخدامًا، وتتميز بيئة التطوير إنتليج إيديا بالدعم الجزئي لعدة لغات برمجة أخرى، مثل: بايثون Python و php وروبي Ruby وغيرها. بي إتش بي ستورم PhpStorm: تعد بيئة تطوير مدفوعة موجهة خصيصًا لمطوري لغة بي إتش بي، وتدعم جميع أطر العمل الشهيرة للغة بي إتش بي، كما تدعم أشهر قواعد البيانات المستخدمة مع بي إتش بي لتطوير تطبيقات الويب، وتدعم تقنيات بناء الواجهة الأمامية لتطبيقات الويب، مثل: لغة HTML ولغة CSS ولغة جافا سكريبت وتايب سكريبت وغيرها. إكس كود XCode: بيئة تطوير مجانية مخصصة لتطوير التطبيقات الموجهة لجميع أنظمة تشغيل آبل، والتي تتضمن نظام تشغيل هواتف آبل أي أو إس iOS، ونظام تشغيل الأجهزة اللوحية أي باد أو إس iPadOS، ونظام تشغيل الحواسيب المحمولة ماك أو إس MacOS، وكذلك نظام تشغيل الساعات الذكية WatchOS، وسائر أنظمة تشغيل آبل. مُنقِّحات الأخطاء Debuggers تدخل عمليتا الاختبار وتنقيح الأخطاء ضمن المهام الأساسية للمطور، ويعد مُنقِّح الأخطاء أداةً تساعد المطور على اختبار التطبيق وتحديد أماكن الخطأ في الشيفرات ثم تنقيحها، ما يساهم في تأمين التطبيق من الثغرات والاختراق. برامج سطر الأوامر Command Line Interpreters تعد برامج سطر الأوامر من البرامج المفيدة التي تسمح للمطور بإدخال أوامر كتابية وتوجيهها إلى نظام التشغيل لتنفيذها، ومن أشهر برامج سطر الأوامر نذكر: موجه الأوامر CMD.exe: وهو البرنامج الافتراضي لنظام التشغيل ويندوز، ويكون على هيئة نافذةٍ سوداءٍ بسيطة يمكن للمبرمج من خلالها كتابة أوامر لتأدية وظائف عديدة، منها مثلًا إنشاء ملفات جديدة والتعديل عليها وحذفها وتغيير مسارها، والتعرُّف على معلومات النظام والشبكة والتحكم فيهما، ويساعد موجهُ الأوامر المطورَ على توفير الكثير من الوقت المستهلك في تنفيذ نفس المهام يدويًا عبر الواجهة الرسومية. ويندوز باورشيل Windows PowerShell: يعد مفسر سطر أوامر مدمج في نظام تشغيل ويندوز، وهو يتشابه كثيرًا مع موجه الأوامر CMD إلا أنه أكثر تطورًا منه ويحوي بعض الخصائص الإضافية، ومنها مثلًا الوصول إلى البرمجيات السحابية لمايكروسوفت. سيمدر CMDER: مفسر أوامر مجاني ومفتوح المصدر متاحٌ على الإنترنت، ويتميز بالواجهة القابلة للتعديل وإمكانية تغيير أحجام الخطوط وألوانها، كما يسمح بتنفيذ بعض سطور أوامر نظام تشغيل لينكس على نظام تشغيل ويندوز، وكذلك يدعم التحكم مع نظام إدارة الإصدارات غيت، ما يجعله مفسر أوامر قوي ومميز. باش Bash: يعد باش مفسر الأوامر الافتراضي لنظامي تشغيل لينكس وماك أو إس، ويتميز بكفاءته في التحكم في نظام التشغيل وإمكانية الوصول إلى أجزاء منه لا يمكن الوصول لها عبر الواجهة الرسومية، كما يساعد على أتمتة مهام عديدة، مثل: الاختبارات الدورية للخوادم. أنظمة التحكم في الإصدارات Version Control System يشير مفهوم التحكم في الإصدارات إلى عملية إدارة التحديثات والتطويرات المتتابعة لشيفرات البرنامج، أما نظام التحكم في الإصدارات فهو نظامٌ يُستخدم لتسجيل النسخ المختلفة من الشيفرات، حتى يتسنى للمطور العودة لأيِّها شاء وقتما أراد وهو أمر يحتاجه أي مبرمج إذ تتعدد فوائد أنظمة التحكم في الإصدارات، ومنها تحسين تعاون فريق المبرمجين وتنظيم تعديلاتهم المختلفة على الشيفرات، كما تعد نسخ الشيفرات المخزنة في نظام التحكم في الإصدارات بمثابة نسخ احتياطية مستقرة يستطيع المطور العودة إليها ما إذا أطلق تحديثًا للبرنامج ثم اكتشف فيه ثغرةً قد تؤدي به إلى الاختراق. يعد غيت Git أشهر برنامج للتحكم في الإصدارات بالمجتمع التقني، ويتتبع غيت التعديلات على شيفرات كل ملف من ملفات البرنامج، ويمكن الوصول إلى النسخ المختلفة من الملفات المُخزَّنة على غيت عن طريقين؛ إما بسطر الأوامر أو بأداة للتحكم في ملفات غيت، ومن أشهر أدوات التحكم في غيت أداة غيت هاب GitHub وأداة غيت لاب GitLab، وتساعد هذه الأدوات على تخزين ملفات المشروع سحابيًا، ما يجعل الوصول إليها سهلًا بين جميع أعضاء الفريق البرمجي. برامج البرمجة المعتمدة على الذكاء الاصطناعي لقد ازدادت إمكانيات البرامج المستخدمة في البرمجة من خلال تعزيزها بقدرات الذكاء الاصطناعي مما سهل على المطورين والمبرمجين عملهم بشكل كبير، ومن أبرز هذه البرامج نذكر: أمازون كود ويسبيرر AWS CodeWhisperer فيجوال ستوديو إنتيليكود Visual Studio IntelliCode ديفن Devin لنعلم أكثر عن كل برنامج من هذه البرامج وكيف تستفيد من الذكاء الاصطناعي في مجال البرمجة. أمازون كود ويسبيرر AWS CodeWhisperer يتشابه أمازون كود ويسبيرر في وظيفته مع جيتهاب كوبايلوت، إلا أنَّه يناسب فئة مختلفة من المطورين، إذ يعد أكثر تخصيصًا وتوجهًا لمهندسي الحوسبة السحابة ومستخدمي خدمات AWS، وكذلك يتميز أمازون كود ويسبيرر عن جيتهاب كوبايلوت بتوافر نسخة مجانية منه. فيجوال ستوديو إنتيليكود Visual Studio IntelliCode تعد فيجوال ستوديو إنتيليكود إضافة مجانية لبيئة التطوير فيجوال ستوديو كود، ولا تدعم إلا لغات برمجة محددة، وهي بايثون وجافا سكريبت وتايب سكريبت وجافا، وتقل إمكانيات فيجوال ستوديو إنتيليكود بشكلٍ ملحوظ عن نظائره جيتهاب كوبايلون وأمازون ويسبيرر. ديفن Devin يعد برنامج Devin الذي أنتجته شركة Cognition أحد برامج البرمجة الأحدث فقد أُعلن عنه بكونه أول مهندس برمجيات في العالم يعتمد على الذكاء الاصطناعي وهو قادر على كتابة أكواد البرمجة بنفسه وتصحيح أخطائها ونشرها كما أنه قادر على التفكير المنطقي والتخطيط واتخاذ القرارات وتحسين أدائه باستمرار. برامج البرمجة للمبتدئين إليك مجموعة من أهم برامج البرمجة التي توفر أدوات مفيدة تساعد المبتدئين على الولوج إلى عالم تطوير البرمجيات دون صعوبات وتعقيدات لغات البرمجة: سكراتش Scratch مايكروسوفت ميك كود Microsoft MakeCode تينكر Tynker لنشرح أكثر عن كل برنامج من برامج البرمجة التي ينصح بها للمبتدئين. سكراتش Scratch يعد سكراتش من أشهر برامج تعليم البرمجة للأطفال والمبتدئين فهو يعتمد على تعلم أساسيات البرمجة من خلال واجهة رسومية تتكون من عدة كتل برمجية لاستخدامات متعددة وتعتمد على سحب وإسقاط الكتل البرمجية المطلوبة لبناء المنطق الصحيح لعمل البرنامج، وهو سهل التعامل ويجعل عملية تعلم البرمجة ممتعة ومشوقة. وينصح به لمساعدة الأطفال على تحسين مهاراتهم في حل المشكلات والتفكير المنطقي، وهما مهارتان من أهم مهارات المبرمج المحترف، وكذلك يتيح سكراتش للمستخدمين مشاركة برمجياتهم ومشاريعهم، مما يخلق جوًا من المتعة والتنافسية ويؤدي إلى الرغبة في التحسن الدائم. مايكروسوفت ميك كود Microsoft MakeCode يتبنى برنامج مايكروسوفت ميك كود نهجًا مشابهًا لمنهج سكراتش في تعليم البرمجة، إذ يساعد المبتدئين والأطفال على تعلم البرمجة بتركيب كتل من الشيفرات البرمجية الجاهزة، ولكنه يختلف عنه في ماهية البرامج المُطوَّرة، فيركز مايكروسوفت ميك كود على تطوير الألعاب البسيطة، وكذلك يتدرج برنامج مايكروسوفت ميك كود مع المبرمج في مستويات الصعوبة حتى ينتهي بالمبتدئ إلى أن يكون قادرًا على تعلُّم لغة جافا سكريبت. تينكر Tynker يعد تينكر أحد أهم برامج البرمجة للمبتدئين، ورغم استناده إلى نفس نهج سكراتش ومايكروسوفت ميك كود في تعليم البرمجة، إلا أنه يبرز عنهما بتطوره، إذ يوفر دوراتٍ في مجالاتٍ حديثة، مثل علوم البيانات والذكاء الاصطناعي وتعلم الآلة، كما يتدرج بالمطور المبتدئ إلى مستويات أعلى من نظيريه سكراتش ومايكروسوفت ميك كود. ولكن يتوفر سكراتش ومايكروسوفت ميك كود مجانًا دون الحاجة لدفع أية رسوم، بينما يعد تينكر مدفوعًا، وذلك نظرًا لتقدمه وصعوبة توفير دوراته ومنهاجه المميز في التعليم بشكل مجاني. وأخيرًا تذكر أن تعلُّم البرمجة اليوم لم يعد صعبًا كما كان في السابق، إذ تتوفر اليوم الكثير من البرمجيات التي تُسهِّل عملية التعلُّم يومًا بعد يوم، كل ما عليك هو اتخاد قرار بالبدء في التعلُّم والحرص على الالتزام والمثابرة، وإذا كنت لا تعلم من أين تبدأ في رحلة تعلم البرمجة فيمكنك الاطلاع على دورات أكاديمية حسوب المميزة التي أعدها خبراء في البرمجة والتي تأخذ بيدك في تعلم البرمجة من الصفر وصولًا للاحتراف والحصول على فرصة عمل في أحد مجالات البرمجة المميزة. الخلاصة تعرفنا في هذا المقال على مجموعة متنوعة من برامج البرمجة التي يحتاجها المطورون في مختلف المجالات، سواء برامج تعلم البرمجة أو برامج كتابة وتنقيح الشيفرات ومفسرات سطر الأوامر كما تطرقنا إلى برامج البرمجة الحديثة التي تعتمد على الذكاء الاصطناعي في عملية البرمجة، وختمنا المقال بذكر أهم برامج البرمجة الموجهة للمبتدئين في عالم البرمجة، هل هناك برنامج مفيد في عملية البرمجة تجده مفيدًا في رحلة تعلم البرمجة يسرنا أن تشاركنا تجربتك في التعليقات أسفل المقال. اقرأ أيضًا أسهل لغات البرمجة فوائد تعلم البرمجة ما هي مدة تعلم البرمجة؟ اكتشف ما هي البرمجة وما أهمية تعلمها برمجة الحاسوب للمبتدئين لماذا يجب أن تعلم طفلك البرمجة؟1 نقطة
-
يعد مجال هندسة الحاسوب Computer Engineering واحدًا من أهم المجالات التقنية وأعرقها، كما تلعب هندسة الحاسوب دورًا رئيسيًا في تطوير أنظمة حاسوبية متكاملة تُستخدم في مختلف المجالات والتخصصات. ويوفر لك هذا المقال لمحة شاملة عن هندسة الحاسوب، بدءًا من تعريفها وأقسامها، مرورًا بموادها ويوضح أبرز الفروق بين تخصص هندسة الحاسوب وبين تخصصات مشابهة مثل هندسة البرمجيات وعلوم الحاسوب، ويختتم بتعريفك على أهم مهارات مهندس الحاسوب والوظائف التي تتاح لك عند دراسة هندسة الحاسوب. ما هي هندسة الحاسوب؟ تعد هندسة الحاسوب أحد فروع الهندسة وهي تخصص شامل وواسع يجمع بين علوم متعددة مثل تصميم الأجهزة وعلم الإلكترونيات وتطوير البرمجيات، إذ تعتمد هندسة الحاسوب على مبادئ من علوم الحاسوب وهندسة الإلكترونيات لتطوير أنظمة حاسوبية مدمجة ومتكاملة تُستخدم في مختلف المجالات، مثل: الصناعة والطب والاتصالات والنقل. يبدأ عمل مهندسي الحاسوب من تصميم الدوائر الإلكترونية والشرائح الإلكترونية للحاسوب، ثم كتابة البرمجيات منخفضة المستوى لتشغيل هذه الدوائر والشرائح وتشغيل عتاد الحاسوب عامة، ثم تطوير أنظمة التشغيل لإدارة موارد الحاسوب، وأخيرًا تطوير البرمجيات الملائمة لاحتياجات المستخدم لتثبيتها على الحاسوب. وتدخل هندسة الحاسوب كما ذكرنا للتو في كثيرٍ من المجالات المختلفة، ما يجعلها إحدى أهم المجالات المعاصرة، ومن هذه المجالات: الصناعة: يساعد مهندسو الحاسوب على تطوير الآلات وتسهيل أتمتة العمليات، ما يزيد إنتاجية المصانع وبالتالي زيادة دخلها وتحسين جودة المنتجات. الطب والخدمات الصحية: يعمل مهندسو الحاسوب على بناء أجهزة طبية متطورة وتطوير برمجياتها وتحديثها باستمرار لزيادة دقتها في تشخيص المريض وتحديد حالته والدواء المناسب له. الاتصالات: يساهم مهندسو الحاسوب في تصميم وتطوير بنية الشبكات التي تدعم اتصالات البيانات بين الأجهزة المختلفة وتطوير برمجيات ت وتطبيقات تسهل عمليات الاتصال ونقل البيانات عبر الشبكات. الاقتصاد: تعزز هندسة الحاسوب من النمو الاقتصادي من خلال تطوير حلول رقمية ومنصات تجارة إلكترونية توسع الوصول إلى الأسواق وتسهل العمليات التجارية. ما أقسام هندسة الحاسوب؟ تتعدد أقسام هندسة الحاسوب وتتفرع، ومن أشهر أقسامها: قسم هندسة البرمجيات Software Engineering قسم هندسة الشبكات Networks Engineering قسم الذكاء الاصطناعي Artificial Intelligence قسم أمن المعلومات Information Technology لنشرح بتفصيلٍ أكبر كل قسم من هذه الأقسام. قسم هندسة البرمجيات Software Engineering يعد قسم هندسة البرمجيات أحد أشهر أقسام هندسة الحاسوب وأكثرها انتشارًا، ويعمل مهندسو البرمجيات على توظيف التقنيات البرمجية من لغات برمجة وأطر عمل وقواعد بيانات وغيرها من التقنيات لتطوير برامج للمستخدمين. وتتعدد المجالات الفرعية من مجال هندسة البرمجيات، ومن أشهرها مجال تطوير الويب، والذي يهتم بتطوير تطبيقات الويب التي يتصفحها المستخدمون عبر متصفحات الويب، وكذا يعد تطوير تطبيقات الجوال أحد المجالات الفرعية من هندسة البرمجيات، وهو المجال المختص في تطوير تطبيقات موجهة إلى أنظمة تشغيل الهواتف الجوالة، مثل: أندرويد وأي أو إس iOS، وكذلك مجال تطوير تطبيقات سطح المكتب الذي يُعنى بتطوير تطبيقات لأنظمة تشغيل الحواسيب، ومنها ويندوز ولينكس وماك أو إس MacOS. قسم هندسة الشبكات Networks Engineering يعمل مهندسو الشبكات على تصميم الشبكات وبنائها وصيانتها دوريًا، والشبكة هي نظامٌ رقميٌّ يسمحُ للأجهزة الإلكترونية بالتواصل وتناقل البيانات، ولا يكاد مجالٌ تقنيٌّ أن يظهر إلا بالاعتماد على الشبكات، ما يجعل من هندسة الشبكات أحد أهم أقسام هندسة الحاسوب. قسم الذكاء الاصطناعي Artificial Intelligence يظفر قسم الذكاء الاصطناعي برواج واسعٍ في الآونة الأخيرة سواءً بين المبرمجين أو غيرهم، وذلك نظرًا للتقدم السريع والكبير في هذا المجال، ويعد الذكاء الاصطناعي قسمًا من أقسام هندسة الحاسوب، ويجمع مهندسو الذكاء الاصطناعي بين مجالات تعلم الآلة وتحليل البيانات ومجالات أخرى لتطوير برمجيات لأتمتة المهام الروتينية، ما يزيد من إنتاجية الشركات ويقلل التكاليف ويرفع الأرباح. قسم أمن المعلومات Information Technology يهتم قسم أمن المعلومات بإدارة أنظمة التشغيل وتنظيم العمليات عليها وحمايتها، كما يهتم بإدارة قواعد البيانات، ما يجعله مجالًا واسعًا يحتاج متخصصوه مهاراتٍ عديدة، منها: إدارة أنظمة التشغيل وإدارة الشبكات وإدارة قواعد البيانات والاختبار وتنقيح الأخطاء وتأمين التطبيقات وغيرها من المهارات. ما هي مواد هندسة الحاسوب؟ يدرس مهندسو الحاسوب مواد عديدة، منها: أساسيات الهندسة الكهربائية Electrical Engineering أساسيات علوم الحاسوب Computer Science أنظمة التشغيل Operating Systems الشبكات Networking التصميم والتحليل الهندسي Engineering Design and Analysis لنتعرف بعمقٍ عن ماهية كل مادة وأهميتها. أساسيات الهندسة الكهربائية تتفرع الهندسة الكهربية من مجال الهندسة، وتهتم الهندسة الكهربية بدراسة التطبيقات الكهربية في الأجهزة الحديثة، ولا سيما الدوائر الإلكترونية المتكاملة Integrated Circuits والترانزستورات Trasistors، واللذان يُعدَّان من القطع الأساسية في عتاد أي حاسوب، كما تهتم الهندسة الكهربية أيضًا بدراسة الإشارات ومعالجتها Signal Processing، وكذلك يدرس الإلكترونيات الدقيقة وأشباه الموصلات Microelectronics and Semiconductors. أساسيات علوم الحاسوب تشير علوم الحاسوب إلى دراسة الحاسوب والأنظمة الحاسوبية وطريقة عملها، ويتضمن ذلك دراسة البرمجة ولغاتها، ودراسة الخوارزميات وهياكل البيانات وتحليل البيانات وتأمين التطبيقات البرمجية، كما يتضمن دراسة أساسيات معمارية الحاسوب، والتي تهتم بمكونات الحاسوب الداخلية من معالج إلى الذاكرة العشوائية والذاكرة الصلبة وكيفية عمل هذه القطع معًا. أنظمة التشغيل يهتم مهندس الحاسوب بدراسة نظام التشغيل ومكوناته وطريقة عمله، ويتعرف على طريقة تطوير وظائف نظام التشغيل، مثل: إدارة الموارد وإدارة العمليات وإدارة الشبكات وغيرها، ويعلم أيضًا عوامل أمان نظام التشغيل وكيفية تطبيقها أثناء تطوير نظام تشغيل ومن ضمن ذلك اختبار النظام وتنقيح أخطائه، كما يدرس كيفية ارتباط هذا النظام بعتاد الحاسوب والتوافق معه. الشبكات تدخل دراسة الشبكات الحاسوبية ضمن مواد هندسة الحاسوب، إذ يدرس مهندس الحاسوب ماهية الشبكة ومكوناتها من حواسيب وخوادم وحواسيب مركزية وأجهزة أخرى، وطريقة عمل الشبكة وبروتوكولات تبادل المعلومات والبيانات والموارد والخدمات عبر الشبكة، ويعرف أنواع الشبكات المختلفة ومعايير اختيار النوع المناسب من الشبكات حسب احتياجات العمل، كما يتعلم بناء الشبكة ومبادئ تأمينها وحمايتها من الاختراق. التصميم والتحليل الهندسي يشير التصميم الهندسي في هندسة الحاسوب إلى عملية تصميم هيكل حاسوب أو جهاز إلكتروني وتحديد مواصفاته وإمكانياته، وتصميم نظام تشغيله وعمليات نظام التشغيل أيضًا، أما عملية التحليل الهندسي في هندسة الحاسوب فهي إحدى خطوات عملية التصميم الهندسي، ويشير التحليل الهندسي إلى عملية تحديد المشكلات التي يواجهها المهندس أثناء عملية التصميم وتفكيكها إلى مشكلات صغيرة وحل هذه المشكلات الصغيرة واحدة تلو الأخرى حتى يصل إلى حل للمشكلات الكبيرة في التصميم. ما الفرق بين علوم الحاسوب وهندسة الحاسوب وهندسة البرمجيات؟ تركز هندسة البرمجيات أساسيًا على دراسة البرمجيات ومكوناتها وطريقة عملها، ودراسة لغات البرمجة والنظريات البرمجية وطريقة تطوير برنامج ذي أداء سريعٍ وأمانٍ عالٍ، بينما تدرس هندسة الحاسوب عتاد الأجهزة الإلكترونية وكيفية بناء جهاز إلكتروني والمكونات الدقيقة للأجهزة، كما تدرس البرمجيات أيضًا ولا سيما التطبيقات منخفضة المستوى المستخدمة لتشغيل قطع العتاد المختلفة داخل الحاسوب. تتشابه علوم الحاسوب مع هندسة البرمجيات تشابهًا كبيرًا، ولكنها تختلف معها في دراسة العتاد، إذ يدرس طلاب علوم الحاسوب أمورًا عن عتاد الحاسب وكيفية عملها، ولكنها تختلف عن هندسة الحاسوب في مدى التعمق في دراسة العتاد، إذ يدرس مهندسو الحواسيب العتاد بعمق، حتى يدرسوا أدق أنواع العتاد، مثل: الدوائر الإلكترونية المتكاملة والترانزستورات، بينما لا يدرس طلاب علوم الحاسوب عن العتاد إلا علومًا نظريةً قليلة. ما هي أهم مهارات مهندس الحاسوب الناجح؟ تعد مهارات مهندس الحاسوب الناجح عديدة، ولعل أهمها: الشهادة التفكير المنطقي التفكير النقدي حل المشكلات المهارات الناعمة لنأخذ لمحة سريعة عن كل مهارة من هذه المهارات وأهميتها لمهندس الحاسوب. الشهادة لا شك أن الشهادة الجامعية في مجال هندسة الحاسوب مفيدة، فالتعليم الجامعي يساعدك على التعلُّم المنظم ويضمن وجود رقيب يتابع تطور مستواك، ولكنها كذلك ليست ضرورية للنجاح في تخصص هندسة الحاسوب وقد تعدلها الدراسة الذاتية والتطبيق العملي والخبرة في المجال فكثير من جهات العمل اليوم تشترط الخبرة في المجال أكثر من اشتراط الشهادات. فمصادر التعلم الذاتي كثيرة ومنوعة ومن بين مصادر التعلم البارزة عربيًا أكاديمية حسوب التي توفر لك من خلال دوراتها البرمجية في مختلف المجالات التقنية مميزات التعليم الأكاديمي من منهجية واضحة في التعلم وشهادة تثبت ما تعلمته ورقابة من خبير في هندسة الحاسوب، كما تمنحك مميزات التعليم الذاتي من مرونة التعلُّم وسهولته وسرعته وغيرها مما لا توفره الجامعة. دورة علوم الحاسوب دورة تدريبية متكاملة تضعك على بوابة الاحتراف في تعلم أساسيات البرمجة وعلوم الحاسوب اشترك الآن التفكير المنطقي لا يستطيع مهندس الحاسوب مزاولة مهنته دون مهارات التفكير المنطقي فهو الذي يجعلك تكر بشكل منظم يساعدك علة فهم عتاد وبرمجيات الحواسيب ويوفر له مهارة التخطيط الجيد ويمنحك القدرة على اتباع خطواتٍ متسلسلة مرتبة مفصلة للوصول إلى أفضل حل للمشكلات التي تواجهها. التفكير النقدي يحتاج كل مهندس حواسيب إلى عقلٍ نقديٍّ يساعده على تحديد مواطن الضعف في برنامجه أو جهازه، فنقاط الضعف في البرنامج الرقمي ينتج عنها وصول المخترقين والمحتالين إلى بيانات المستخدمين، ما يؤدي إلى فقد الموثوقية والمصداقية، أما مواطن الضعف في الأجهزة سواءً حواسيب أو هواتف جوالة أو غيرها فإنَّها تؤدي إلى سوء تجربة المستخدم، مما يؤدي أيضًا إلى خسارة الموثوقية والمصداقية من العملاء. حل المشكلات تواجه مهندس الحاسوب مشكلاتٌ كثيرةٌ أثناء بناء الأجهزة والتطبيقات، مما يُحتِّم عليه تعلُّم مهارة حل المشكلات، وهذه المهارة مرتبطةٌ ارتباطًا وثيقًا بمهارة التفكير المنطقي، إذ يساعد التفكير المنطقي على وضع خطوات متسلسلة للوصول إلى أفضل حلٍّ للمشكلة؛ سواءً كانت هذه المشكلة برمجية أو مشكلة في تصميم الجهاز وتحديد الموارد والخامات أو غيرها. المهارات الناعمة عادةً ما يعمل مهندسو الحاسوب ضمن فرق عمل، فلا يستطيع مهندس حاسوب واحد تنفيذ جميع مهام من بناء جهاز إلكتروني إلى تطوير نظام تشغيل له ثم تطوير برمجيات موجهة لهذا الجهاز، وذلك يجعل تعلُّم مهارات التعامل مع الأصدقاء في فريق العمل أمرًا ضروريًا. ما وظائف هندسة الحاسوب؟ تفتح لك هندسة الحاسوب أبوابًا عديدة أمام وظائفٍ كثيرة، ومنها: متخصص دعم تقني مهندس DevOps خبير أمن معلومات خبير ذكاء اصطناعي مطور تطبيقات لنعرف مزيدًا من المعلومات عن كل وظيفة على حدة. متخصص دعم تقني يعمل متخصص الدعم التقني على تكوين النظام التقني للشركة، بدءًا من تنصيب الخوادم والشبكات، مرورًا باختبار النظام واستخراج نقاط ضعفه وحلها، وصولًا إلى صيانة النظام وترقيته دوريًا لضمان استمرار عمله على أفضل وجه. مهندس DevOps ينتشر مجال ديف أوبس DevOps بسرعة شديدة رغم حداثته، وذلك لما له من فوائد في تسريع عملية تطوير البرمجيات، ولتصبح مهندس DevOps عليك تعلُّم مجموعة من المهارات، أهمها: كتابة الشيفرات البرمجية لأتمتة المهام وإدارة أنظمة التشغيل والشبكات والخوادم، والتعامل مع الحاويات Containers وأشهرها دوكر Docker، وتنفيذ مهام الحوسبة السحابية ومنهجية التكامل المستمر والنشر المستمر CI|CD، وتأمين البنية التحتية اللازمة لتشغيل التطبيقات والخدمات وإدارة السجلات Logs ومراقبة حالة النظام Monitoring للكشف أي أخطاء فور وقوعها. خبير أمن معلومات يشرف خبير أمن المعلومات على اسكتشاف والثغرات الأمنية سواءً في عتاد الحواسيب أو في برمجياتها وحل هذه الثغرات ويعد أمن المعلومات أحد أهم وظائف هندسة الحاسوب، ويجب أن يكون خبير أمن المعلومات على دراية واسعة بأمن الشبكات ونظم التشغيل وقواعد البيانات، ويكون خبيرًا في الأمن السيبراني واختبار التطبيقات وتنقيح أخطائها. خبير ذكاء اصطناعي يعد الذكاء الاصطناعي واحدًا من وظائف البرمجة الحديثة الأكثر طلبًا في سوق العمل اليوم، وتتفرع منه مجالاتٌ عديدة، مثل: تعلم الآلة والتعلم العميق ومعالجة اللغة الطبيعية وغيرها، ويحتاج خبير الذكاء الاصطناعي إلى إتقان لغة برمجة، وتشتهر لغة البرمجة بايثون بشدة في هذا المجال، كما يحتاج إلى معرفة بأطر عمل الذكاء الاصطناعي وتعلُّم الآلة وأشهرها إطار عمل باي تورش PyTorch وتنسر فلو TensorFlow، وأن يتعرف أيضًا على مبادئ الإحصاء والرياضيات وتحليل البيانات، وكذا ينبغي عليه المعرفة بماهية الرؤية الحاسوبية Computer Vision والحوسبة السحابية Cloud Computing. مطور تطبيقات يتعلم مهندس الحاسوب العديد من لغات البرمجة والتقنيات خلال دراسته وتمكنه هذه المعرفة التقنية من تطوير العديد من أنواع التطبيقات ما بين تطبيقات ويب وتطبيقات هاتف وتطبيقات سطح مكتب، فلكلٍّ منها لغات برمجة وأطر عمل ومهارات خاصة به، لذا يشترك مطورو التطبيقات بجميع أنواعها في حاجتهم لدراسة لغة برمجة وإطار عمل وقاعدة بيانات ونظام تحكم في الإصدارات، بينما تختلف نوعية اللغات وأطر العمل بين التطبيقات المختلفة، فمثلًا يحتاج مطورو الويب لمعرفة إحدى لغات الويب، مثل: جافا سكريبت أو PHP أو روبي أو بايثون وغيرها، بينما يحتاج مطورو تطبيقات الهاتف إلى معرفة بلغة البرمجة جافا أو كوتلن لتطبيقات أندرويد وسويفت لتطبيقات أي أو إس iOS، أما مطورو تطبيقات سطح المكتب فيحتاج لمعرفة لغة البرمجة جافا Java أو سي بلس بلس C++ الخاتمة إلى هنا نكون قد وصلنا لنهاية مقالنا الشامل الذي شرحنا فيه كل ما يخص هندسة الحاسوب التي تعد مجالًا واسعًا يوفر لدارسيه فرصًا وظيفية مميزة ذات رواتب مجزية ويفتح لمن يتقن مهاراته الواسعة الكثير من المجالات والتخصصات، وهو مجالٌ ذو مستقبلٍ مميز ولا سيما مجالاته المتعلقة بالذكاء الاصطناعي لذا ننصحك بالبدء بتعلم مهاراته من الآن واللحاق بركب التطور التقني الحاصل في شتى المجالات. اقرأ أيضًا تعرف على تخصص هندسة البرمجيات تعرف على وظائف البرمجة الأعلى أجرًا مدخل إلى تطوير البرمجيات Software Development الأخطاء السبع القاتلة لأيّ مشروع برمجيات شهادات البرمجة: أهميتها وسبل الحصول عليها ما هي مدة تعلم البرمجة؟1 نقطة
-
أهلا، التنبؤ بالمستقبل هو من أصعب الأشياء في الذكاء الاصطناعي، وهذا راجع لطبيعة المستقبل نفسه، فالمستقبل بذاته صعب التنبؤ لأنّه ليس تكرار للماضي. وتصميم وتدريب نموذج لتوقع حالة الطقس لمدّة سنتين هو شيء من ضرب الخيال العلمي! أكثر المؤسسات المتخصصة في توقع الطقس لا تقوم بتوقع حالة الطقس سوى لـ10 أيام أو أسبوعين على أقصى تقدير. هذا ولديها إمكانيات ضخمة من المهندسين في شتى المجالات ويتدفّق عليها كم هائل من البيانات من كل أنحاء العالم، ومع ذلك فهذا أقصى استطاعتها. والأدهى من ذلك أنه في كثير من الأحيان تكون توقعات 10 أيام والأسبوعين خاطئة ويتم تغييرها عند اقتراب ذلك اليوم! لذلك، فإذا كان مطلب الشركة المذكورة هو التوقع الدقيق لحالة الطقس (حالة الجو، درجة الحرارة، نسبة الرطوبة...) فلا أنصحك بالإكمال معهم لأنّ هذه الشركة تريد تحميلك مالا تطيقه لا أنت ولا حتى أكبر الشركات المتخصّصة في العالم. بل إنّ هذا دليل على أنّ هذه الشركة لا تدري ماذا تفعل. يمكنك البحث أكثر من في الأوراق العلمية التي تتحدّث عن weather forecasting، لترى ما هي حدود المتاح حاليا في ميدان التنبؤ بحالة الطقس.1 نقطة
-
نعرفك في مقال اليوم ما هي لغة الآلة أو لغة الأصفار والوحدات والتي تقع في أدنى مستويات لغات البرمجة، وتستخدم للتخاطب والتفاعل المباشر مع أجهزة الحواسيب، ونكتشف معًا ما هي مميزات لغة الآلة، وما الفرق بين لغة الآلة ولغة التجميع، ونستعرض أمثلة على لغة الآلة واستخداماتها، وطريقة تنفيذ تعليماتها من قبل الحواسيب المختلفة. مستويات لغات البرمجة قبل أن نتعرف ما هي لغة الآلة لنوضح ما هي لغة البرمجة؟ وما هي المستويات التي مرت بها لغات البرمجة خلال تطورها قبل أن تتطور وتنبثق منها العديد من الأنواع والتسميات. إن لغة البرمجة هي الأسلوب الذي يعتمده البشر للتخاطب مع الحواسيب وغيرها من الأجهزة القابلة للبرمجة وطلب تنفيذ الأوامر منها، وهي تكتب أو تصاغ على شكل سلسلة من الأوامر المتتالية، وتحفظ على هيئة برامج حاسوبية أو تطبيقات ثم تمرر حاسوب لتنفيذها والحصول على النتائج المطلوبة. وقد مرت لغات البرمجة خلال تطويرها بعدة مراحل أو مستويات ومن أبرزها: لغات منخفضة المستوى Low-Level Languages لغة الآلة Machine Language لغة التجميع Assembly Language لغات متوسطة المستوى Mid-Level Languages لغات عالية المستوى High-Level Languages لنتعرف على مميزات وسمات كل لغة من هذه اللغات. لغات منخفضة المستوى Low-Level Languages كانت لغات الجيل الأول للحواسيب لغات منخفضة المستوى مكونة من مجموعة من التعليمات التي تدخل إلى الحاسوب في شكل قابل للتنفيذ مباشرة بواسطة معالج الحاسوب حيث كانت التعليمات البرمجية مكونة من أرقام مكتوبة بالنظام الثنائي binary system وهو نظام أساسه العدد 2، أو النظام الست عشري hexadecimal وهو نظام أساسه العدد 16وكان من الممكن تنفيذ هذه البرامج مباشرة. على سبيل المثال تسلسل الأرقام التالي ليس سوى مثال على جزء من كود برمجي مكتوب بلغة الآلة لبرنامج حاسوبي يجمع عددين: 11101100, 11011010, 10100001, 11011101, 01011111, 10111110, 11101110, 00101101, 11010111, 11101100, 11011011, 11101110, 11101110, 11011101, 00001010, 10101011, 11101110, 11101110, 11001110, 10111010, 10101010, 10101101, 11101010, 11101111, 00011010, 11010010, 11101110, 00011010, 10101011, 11101110, 11101110, 10101110, 11101010, 11101011, 11101010, 00001000, 00001010, 11101110, 11001010 إن تعليمات البرنامج السابق مكتوبة بالنظام الثنائي Binary System، وفي حال استخدامنا النظام الست عشري hexadecimal لكتابة التعليمات سيكون البرنامج على النحو التالي: 0xEC, 0xDA, 0xA1, 0xDD, 0x5F, 0xBE, 0xEE, 0x2D, 0xD7, 0xEC, 0xDB, 0xEE, 0xEE, 0xDD, 0x0A, 0xAB, 0xEE, 0xEE, 0xCE, 0xBA, 0xAA, 0xAD, 0xEA, 0xEF, 0x1A, 0xD2, 0xEE, 0x1A, 0xAB, 0xEE, 0xEE, 0xAE, 0xEA, 0xEB, 0xEA, 0x08, 0x0A, 0xEE, 0xCA وكما تلاحظ فقد كانت كتابة وقراءة لغة الآلة صعبة ومعقدة للغاية، لهذا السبب ظهرت لغات الجيل الثاني أو ما يعرف بلغات التجميع assembly languages وهي عبارة عن لغات ذات مستوى منخفض أيضًا لكن كودها البرمجي أسهل في الفهم نوعًا ما، فقد ابتكر علماء الحاسوب لغة التجميع لتكون بمثابة لغة وسيطة أسهل في الفهم والقراءة، وهي تتضمن مجموعة محدودة من التعليمات الخاصة بالتعامل المباشر مع العتاد الصلب والتجهيزات الإلكترونية القابلة للبرمجة، وهي تختلف بحسب ببنية كل معالج فكل جيل من المعالجات له لغة التجميع الخاصة به. على سبيل المثال، يوضح الكود التالي برنامجًا مكتوبًا بلغة التجميع لجمع عددين وهو مخصص للعمل على معالج Intel x86 ويجمع العددين 5 و 7 assembly section .data num1 dd 5 num2 dd 7 result dd 0 section .text global _start _start: mov eax, [num1] add eax, [num2] mov [result], eax ; Exit the program mov eax, 1 ; System call number for exit xor ebx, ebx ; Exit status 0 int 0x80 ; Make system call إذا قرأت الكود السابق فستنتج أن أول قسم منه Section .data يعرَف العددين num1 و num2 وهي المدخلات المطلوب جمعهما، كما يعرف متغير result لحفظ نتيجة الجمع، أما القسم _start فهو يشير لبداية البرنامج. وبعدها تبدأ التعليمات الفعلية حيث تنقل التعليمة mov eax, [num1] القيمة المخزنة في num1 إلى المُسجَّل eax وتنقل التعليمة add eax, [num2] القيمة المخزنة في عنوان num2 إلى هذا المُسجَّل، وبعدها تُنقَل قيمة المُسجَّل إلى المتغير result الذي يخزن نتيجة الجمع النهائية، وتستخدم التعليمات الثلاثة الأخيرة للخروج من البرنامج وإنهاء تنفيذه. كما تلاحظ هذه اللغة مفهومة أكثر من لغة الآلة المليئة بالأصفار والوحدات لكنها لا تزال صعبة ومربكة، وتحتاج من المبرمج لأن يهتم بتفصيل دقيقة مثل تحديد المسجلات التي سيتم استخدامها ونقل البيانات إليها أو منها أثناء تنفيذ البرنامج، كما أنها لا تصلح لتطوير البرامج والخوارزميات المتقدمة وستنتج قدرًا كبيرًا من الكود لتنفيذ كل عمليلة. لغات متوسطة المستوى Mid-Level Languages بعد لغة التجميع، طورت لغات برمجة أخرى مثل بيزك BASIC وفورتران FORTRAN وباسكال Pascal وسي C و C++ سميت بلغات البرمجة متوسطة المستوى، وهي لغات تقع في مكان وسطي بين لغات البرمجة منخفضة المستوى ولغات البرمجة ذات عالية المستوى مثل بايثون Python أو جافا Java، وهي تتيح للمبرمجين التحكم في التفاصيل الدقيقة للعتاد، وتوفر في نفس الوقت مستوى أعلى من المرونة في التعامل. على سبيل المثال لجمع عددين بلغة البرمجة C سيكون الكود بالشكل التالي: #include <stdio.h> int main() { // تعريف المتغيرات int num1 = 5; int num2 = 7; int result; // جمع الأرقام result = num1 + num2; // طباعة النتيجة printf("النتيجة هي: %d\n", result); return 0; } لغات عالية المستوى High-Level Languages أخيرًا ظهرت لغات الجيل الثالث أو لغات البرمجة عالية المستوى مثل بايثون Python وروبي Ruby وجافا سكريبت JavaScript لتبسيط البرمجة على المطورين والمبرمجين، فهذه اللغات تعد من أسهل لغات البرمجة وتكتب تعليماتها بمفردات قريبة من مفردات اللغة الانجليزية المحكية، وهي سهلة القراءة والفهم من قبل البشر، ولا تضطرنا للتعامل مع التفاصيل الدقيقة المتعلقة بالعتاد. لكن هذه اللغات تحتاج إلى ترجمتها أو تفسيرها ليفهمها معالج الحاسوب ثم يتمكن من تنفيذها بالشكل الصحيح. وهذه اللغات ليست مرتبطة بنوع جهاز معين حيث يمكن تحويل أوامرها إلى تعليمات مختلفة بلغة الآلة حسب كل جهاز كي يتمكن من تفسيرها وتنفيذها. على سبيل المثال يحقق الكود التالي بلغة بايثون نفس وظيفة الكود السابق لجمع عددين، ويمكنك أن تلاحظ بساطة وسهولة اللغة ومدى قربها من كلامنا المحكي مقارنة بالأكواد السابقة: # تعريف المتغيرات num1 = 5 num2 = 7 # جمع الأرقام result = num1 + num2 # طباعة النتيجة print("النتيجة هي:", result) ما هي لغة الآلة وكيف تعمل لغة الآلة أو لغة الأصفار والواحدات هي لغة برمجة تتكون من أوامر وتعليمات مكتوبة بطريقة يستطيع الحاسوب فهمها ومعالجتها، فالحاسوب يفهم في الواقع فقط الأصفار والواحدات حيث أن الرقم 1 يعني وجود تيار أو جهد كهربائي، والرقم 0 يعني عدم وجود تيار أو جهد كهربائي. وفي بدايات ظهور الحواسيب كانت هذه الأرقام تحول إلى أوامر، ومن ثم تنفذ مباشرة بواسطة وحدة المعالجة المركزية CPU. ويكون كل أمر عبارة عن رمز رقمي أو سلسلة من الرموز الرقمية الممثلة بالنظام الثنائي أو الست عشري كما شرحنا سابقًا، وتجدر الإشارة الأن هذه الرموز الرقمية خاصة بكل جهاز حيث تطور لكل بنية معالجات لغة آلة خاصة به. وقد كانت الطريقة الوحيدة لإدخال هذه التعليمات إلى الحواسيب في بدايات ظهورها هي من خلال البطاقات المثقبة فإجهزة الحواسيب الأولى لم تكن أجهزة قادرة بعد على تخزين البيانات في ملفات لذا إذا أردت كتابة برنامج بلغة الآلة وإدخاله للحاسوب فإن الطريقة الوحيدة هي استخدام هذه البطاقات المثقبة. تحتوي كل بطاقة على ثقوب تُعبر عن تعليمات محددة للكمبيوتر حول المهام التي نريد تنفيذها، فإذا كان الثقب موجودًا سيمثل القيمة 1، وإذا لم يكن هناك ثقب يمثل القيمة 0، وكان لهذه البطاقات أشكال عديدة لكن أشهرها كان البطاقة المكونة من 80 عمودًا التي طورتها شركة IBM في عام 1928 كما هو موضح في الصورة التالية. مصدر الصورة تخيل أنك ستحتاج إلى بطاقة واحدة مشابهة من أجل كتابة كل سطر من التعليمات البرمجية! لذا كانت كتابة برنامج كامل باستخدام هذه البطاقات أمرًا في غاية الصعوبة ويتطلب مجموعة هائلة من البطاقات، وكانت هذه البطاقات تمرر إلى الحاسوب بشكل تسلسلي إلى جهاز مخصص يسمى قارئ البطاقات ليقوم بقراءة تعليماتها عمودًا عمودًا ويحول تسلسل الثقوب إلى معلومات رقمية، ثم يحملها في ذاكرة الحاسوب، وبعد اكتمال قراءة وتحميل كل البطاقات في الذاكرة ينفذ تعليماتها البرمجية ثم يخرج النتائج على شكل بطاقات مثقبة أيضًا. ولك أن تتخيل كم كان المبرمجون الأوائل يبذلون جهدًا في عملية البرمجة والتواصل مع الحاسوب، وقد استمر العمل بهذه الآلية ظهرت الأقراص المغناطيسية والأجهزة الطرفية peripherals لتخزين وإدخال البيانات وظهرت أجهزة الحواسيب الشخصية التي ألغت استخدام البطاقات المثقوبة ووجعلتها جزءًا من تاريخ لغات البرمجة. مميزات لغة الآلة بالرغم من أن لغة الآلة صعبة ومعقدة على البشر، إلا أنها تتمتع بمجموعة من المميزات والخصائص من أهما: تستخدام لغة الآلة الأرقام الثنائية 0 1 التي يفهمهما الحاسوب وينفذها مباشرة دون الحاجة إلى مترجم لتفسيرها. تسمح لغة الآلة للمبرمجين بالتحكم في عتاد الحاسوب مثل المعالج والذاكرة بشكل مباشر. تتميز لغة الآلة بالسرعة والكفاءة مقارنة مع اللغات عالية المستوى. تصلح لغات المستوى المنخفض لتطوير برامج النظام الأساسية للحواسيب. عيوب لغة الآلة من أبرز العيوب التي تعاني منها لغة الآلة ما يلي: من الصعب كتابة البرامج والخوارزميات المعقدة وتنفيذها باستخدام لغة الآلة. تتطلب كتابة الكثير من أسطر التعليمات البرمجية لبرنامج بسيط يتطلب تعديل البرامج الكثير من الوقت والجهد من الصعب تحديد وتصحيح الأخطاء البرمجية للبرامج المكتوبة بلغة الآلة تكون لغة الآلة خاصة بالأجهزة أي أنها تعتمد على نوع أو عائلة معالج الجهاز الذي ستعمل عليه لذا تختلف من جهاز لآخر الخلاصة تعرفنا في مقال اليوم على لغة الآلة التي تقع في أدنى مستويات لغات البرمجة والتي يفهمها الحاسوب بشكل مباشر وينفذها بواسطة وحدة المعالجة المركزية CPU، وتعرفنا على طريقة التعامل معها وأبرز مميزاتها وعيوبها. واليوم لم تعد لغة الآلة أو لغات المستوى المنخفض تستخدم من قبل المبرمجين إلا في مجالات وتطبيقات محدودة للغاية تحتاج للتعامل مع عتاد الحاسوب مباشرة، فقد أصبحت لغات البرمجة عالية المستوى أسهل بكثير ولكن تذكر أن جميع لغات البرمجة تحول في نهاية المطاف إلى برامج بلغة الآلة كي تنفذ من قبل الحاسوب. اقرأ أيضًا مستويات لغات البرمجة دليلك إلى أنواع لغات البرمجة قواعد البرمجة ببساطة للمبتدئين تعلم أساسيات البرمجة1 نقطة
-
يتساءل كثير من المُقبلين على تعلم البرمجة: هل شهادات البرمجة ضرورية؟ هل يجب على المرء أن يدرس في الجامعة حتى يحصل على شهادة برمجة معتمدة؟ كيف يمكن أن يحصل المرء على شهادات احترافية في البرمجة؟ وكيف يمكن أن يتعلمها بنفسه أصلًا؟ هل يمكن الحصول على شهادات برمجة من الإنترنت؟ يجيبك هذا المقال على كافة هذه التساؤلات. ما هي شهادات البرمجة؟ الشهادة توثيق وتأكيد وكفالة تصدرها جهة موثوقة وتضمن بها معرفة شخصٍ ما بمجموعة من المعارف. لا تخرج شهادات البرمجة عن هذا التعريف، فهي شهادات تصدرها جهات موثوقة (من جامعات أو أكاديميات أو منصات تعليمية إلخ)، تكون دليلًا على معرفة حامل الشهادة بمجموعة من المعارف البرمجية. تقدّم المنصات التعليمية على الإنترنت عادةً شهادات برمجة تشهد على إتمام دورة في مجال معين، أما شهادات البرمجة الجامعية فتشهد على أن الطالب قد أتم جميع مواده الدراسية ونجح فيها. هل يجب الحصول شهادة جامعية حتى تكون مبرمجًا؟ لعلك تتساءل هل يجب على كل من يريد تعلم البرمجة أو الحصول على شهادات برمجة معتمدة أن يدرس في الجامعة؟ قبل الإجابة على هذا السؤال تجدر الإشارة لأن إحصائيات موقع statista تشير بأن قرابة 25% من مطوري البرمجيات غير حاصلين على شهادة جامعية في البرمجة! أي إن ربع مطوري البرمجيات عالميًّا لم يتمّوا أو لم يبدؤوا أي تعليم جامعي، وتتوزع النسبة الباقية بين الحاصلين على شهادة بكلوريوس والحاصلين على شهادات أعلى. فكيف يمكن أن نفهم هذه الإحصائيات؟ لا شكّ أن الشهادة الجامعية مفيدة في مجال البرمجة كما في غيره من المجالات. إذ تسهّل الشهادة الجامعية حياتك المهنية لا سيما في بدايتها، حين تكون هي الإثبات الوحيد على معرفتك في المجال. لكن حتى إن كنت حاصلًا على شهادة جامعية، فإن تطورك المهني سيبلغ بك مرحلة تصبح بها خبراتك وأعمالك السابقة أهم من شهادتك الجامعية، إذ تصبح هي الدليل الأقوى على معرفتك ومهارتك. فإذا كنت قبل التقدّم إلى أول وظيفة تملك أعمالًا تشهد على مهارتك، أو تحمل شهادات غير جامعية تضمن معرفتك، فإن هذا سيكون كافيًا لإثبات معرفتك ومهارتك. يمكنك الاستعاضة عن شهادة البرمجة الجامعية بالتعلم الذاتي من جهة موثوقة تمنحك شهادات برمجة تعكس خبراتك. تقدم منصات التعلم على الإنترنت تعليمًا يركّز على الجانب العملي أكثر من الجانب النظري، ويختصر في الوقت نفسه كثيرًا من الوقت على المتعلم. لقد صنع كثير من المطورين أنفسهم في مدة لا تتجاوز عامًا واحدًا من التعلم الذاتي. كيف تتعلم البرمجة ذاتيًّا تتميز البرمجة على غيرها من المجالات بسهولة تعلّمها ذاتيًّا على الإنترنت. فبالإضافة إلى توفر دورات تقدم شهادات معتمدة في البرمجة على الإنترنت (المزيد عنها في الفقرة التالية)، يفيض الإنترنت بمصادر متنوعة لتعلم البرمجة ذاتيًّا. ولا تكاد تخلو لغة برمجة من كتاب رسمي أصدره مجتمعها ليساعد المبرمجين على تعلمها ذاتيًّا. وفي العالم العربي، يلمع نجم أكاديمية حسوب في مساعدة المبرمجين على التعلم الذاتي والحصول على شهادات برمجة، إذ تقدّم الأكاديمية 19 كتابًا في شتى مجالات البرمجة، تناسب مختلف مستويات المتعلمين، منها: تعلم البرمجة للمبتدئين: يأخذك هذا الكتاب في رحلة لتعلم البرمجة من الصفر، يمرّ فيها على محطّات مختلفة، منها أنواع البيانات، وبناء الواجهات الرسومية، وكتابة تطبيقات الويب، وغير ذلك. البرمجة بلغة بايثون: يقدم هذا الكتاب مجموعة من المقالات الكفيلة بإعطاء القارئ فهمًا شاملًا وكاملًا للغة بايثون، وهو، كالكتاب السابق، مناسب للمبتدئين. البرمجة بلغة جافاسكربت: هل فكرت من قبل في استخدام البرمجة لبناء رجل آلي؟ أو في بناء لغة برمجة خاصة بك؟ يمرّ هذا الكتاب على مختلف المفاهيم في لغة جافاسكريبت، ويختم بمشروع بناء موقع باستخدام بيئة نود جي إس Node.js. دورات عربية تقدم شهادات معتمدة في البرمجة بالإضافة إلى كتب تعلم البرمجة، توفر أكاديمية حسوب دورات تعليمية باللغة العربية تقدم شهادات معتمدة في البرمجة. تتنوع مواضيع الدورات ومجالاتها، وتناسب المبتدئين في تعلم البرمجة والذين لا يمتلكون أي خبرة سابقة أو الذين يريدون الحصول على شهادات برمجة. من أبرز هذه الدورات نذكر: دورة علوم الحاسوب: تناسب هذه الدورة المبتدئ الذي يريد تعلم البرمجة ولا يعرف من أين يبدأ. تأخذ الدورة بيد الطالب حتى يصل إلى مستوًى متقدم في علوم الحاسوب (مثل أنظمة التشغيل وقواعد البيانات وتقنيات الويب). دورة تطوير التطبيقات باستخدام لغة Python: تساعدك هذه الدورة على احتراف لغة بايثون دون أي معرفة سابقة بها، لتستطيع بعدها بناء مختلف أنواع التطبيقات باستخدام هذه اللغة. ستحصل في نهاية الدورة على شهادة برمجة معتمدة في لغة بايثون. دورة تطوير التطبيقات باستخدام لغة JavaScript: تعلمك هذه الدورة بناء تطبيقات الويب والحاسوب والجوال باستخدام لغة جافاسكريبت JavaScript، وهي مناسبة لمن ليس له خبرة سابقة في البرمجة. تقدم الأكاديمية للذين أتمّوا هذه الدورة شهادة برمجة معتمدة في لغة البرمجة جافا سكريبت JavaScript. دورة تطوير تطبيقات الويب باستخدام لغة PHP: للمهتمين بمجال الويب والواجهات الخلفية، تقدم هذه الدورة طريقًا نحو احتراف لغة PHP وإطار عمل Laravel، كما تعلّمك تطوير قوالب ووردبريس WordPress. دورة تطوير تطبيقات الويب باستخدام لغة Ruby: تتعلم في هذه الدورة لغة Ruby وإطار العمل Ruby on Rails، كما ستتعلم التعامل مع قواعد البيانات وتطوير شبكة اجتماعية مثل تويتر. دورة الذكاء الاصطناعي: دورة جديدة تقدمها أكاديمية حسوب لتعلم الذكاء الصنعي وتحليل البيانات من الصفر. تناسب هذه الدورة من يعرف لغةً من لغات البرمجة ويريد تطوير مهاراته في الذكاء الصنعي. دورة تطوير واجهات المستخدم: تقدم هذه الدورة للمتعلم معارف متنوعة متعلقة بتطوير واجهات المستخدم، وتعرّفه على تقنيات ويب كثيرة، كما يتعلم فيها بناء صفحات الهبوط وواجهات مواقع الويب. تناسب هذه الدورة كل مستويات المتعلمين. نصائح لاحتراف البرمجة دون شهادة جامعية إليك بعض النصائح التي تساعدك على أن تصبح مبرمجًا دون الحاجة إلى شهادات برمجة أكاديمية: تعلم الخوارزميات وأسس التفكير المنطقي قبل تعلّم البرمجة. ابدأ بمواد مناسبة للمبتدئين (راجع الفقرتين السابقتين). استكشف مجالات البرمجة وأنواعها المختلفة وحدد المجال الذي تريد التخصص فيه مثلًا: برمجة تطبيقات الجوال، أو برمجة مواقع الويب، أو الذكاء الاصطناعي. ابحث عن مشاريع مفتوحة المصدر في المجال الذي اخترته وشارك في تطويرها. انضم إلى مجتمعات برمجية وتشارك خبراتك ومهاراتك مع غيرك من المطورين. ابنِ مشروعًا صغيرًا مفتوح المصدر لتستعمله فيما بعد دليلًا على مهاراتك وخبراتك السابقة. لا تقتصر على لغة برمجة واحدة أو إطار عمل واحد، كلما ازدادت معارفك ازدادت فرص نجاحك في سوق العمل. خاتمة تتنوع الطرق إلى تعلم البرمجة واحترافها من شخص لآخر، وهي لا تقتصر على التعليم الجامعي وحده أو التعلم الذاتي وحده.، وكذلك تتنوع شهادات البرمجة ومصادر الحصول عليها، بين الشهادات الجامعية والشهادات التي تقدمها منصات التعلم الإلكتروني المختلفة ولك أن تختار ما يناسبك من بين هذه الطرق المختلفة. أرجو أن يكون هذا المقال قد أفادك ودلّك على محطة الانطلاق في رحلة تعلم البرمجة والحصول على شهادات برمجة معتمدة. اقرأ أيضًا دليلك الشامل لتعلم البرمجة والتعرف على أهميتها أهمية البرمجة وأهم لغات البرمجة ما هي مدة تعلم البرمجة كيف تصبح مبرمجًا محترفًا تعرف على تخصص هندسة البرمجيات1 نقطة
-
تمثل لغات البرمجة عالية المستوى نسبة تزيد عن ثمانين بالمائة من أشهر خمسين لغة برمجة في المجتمع التقني، ما يجعلنا نتساءل: ما هي لغات البرمجة عالية المستوى؟ ولماذا تعد مشهورة إلى هذا الحد؟ وما أشهر استخدامات هذا النوع من لغات البرمجة؟ تعريف لغات البرمجة عالية المستوى تتعدد مستويات لغات البرمجة، فمن لغات البرمجة لغات منخفضة المستوى تساعد المطور على التخاطب المباشر مع عتاد الحاسوب، ما يجعلها مميزة في إدارة موارد الحاسوب، ويوجد كذلك لغات برمجة عالية المستوى، وتعد أكثر تجريدًا عن عتاد الحاسوب وتجعل تركيز المطور ينصبُّ على خواص التطبيق ومميزاته، وهي أسهل من اللغات منخفضة المستوى وأقرب منها إلى اللغات البشرية. تعد لغات البرمجة عالية المستوى نوعًا من لغات البرمجة يسمح للمطور بتطوير برمجيات مجردة عن عتاد الحاسوب، بمعنى أنَّ المطور لا يحتاج إلى وصف طريقة تعامل الأجزاء المختلفة من البرنامج مع المكونات الداخلية للحاسوب مثل: المعالج والذاكرة المؤقتة والذاكرة الدائمة، وتهدف لغات البرمجة عالية المستوى إلى تسهيل عملية تطوير البرمجيات وزيادة إنتاجية المطور، وكذلك تقريب بنية لغات البرمجة إلى بنية اللغات البشرية حتى تسهُل قراءة الشيفرات وكتابتها. أنواع لغات البرمجة عالية المستوى يجب ترجمة كل برنامج مكتوب بلغة برمجة عالية المستوى إلى لغة الآلة قبل تنفيذه، وتنقسم لغات البرمجة عالية المستوى إلى نوعين رئيسيين تبعًا لطريقة ترجمة الشيفرات، وهما: لغات برمجة مترجمة Compiled Programming Languages: يعد المترجم برنامجًا حاسوبيًا يعمل كوسيط بين برنامجك الرقمي والآلة، ويعمل على ترجمة شيفرات البرنامج كاملة إلى لغة الآلة ثم تنفيذها دفعةً واحدة، ويتميز هذا النوع من لغات البرمجة بالسرعة والكفاءة، ومن أشهر أمثلته لغة سي بلس بلس C++ وراست Rust وجو Go. لغات برمجة مفسرة Interpreted Programming Languages: يتشابه المفسر مع المترجم في وساطته بين البرنامج والآلة ولكنه يختلف في طريقة الترجمة، إذ يقرأ المفسر الشيفرات واحدة تلو الأخرى ويترجمها إلى لغة الحاسوب وينفذ كل شيفرة مباشرة بعد ترجمتها، ويتميز هذا النوع بالسهولة والمرونة، ومن لغاته بايثون Python وجافا سكريبت JavaScript وبي إتش بي PHP. تُستخدم لغات البرمجة عالية المستوى في كل مجال برمجي تقريبًا، فهي تُستخدم في المجالات الكلاسيكية، مثل: تطوير الويب وتطبيقات الهاتف وتطبيقات سطح المكتب، وكذلك تُستخدم في المجالات الحديثة، مثل: الذكاء الاصطناعي وتحليل البيانات، كما تدخل في مجالات الأمن السيبراني ومجالات سلسلة الكتل Blockchain والعملات الرقمية وسائر المجالات التقنية الأخرى، ومن أشهر لغات البرمجة عالية المستوى لغة بايثون وجافا و PHP و R و كوتلن وجو و C وC#. الفرق بين لغات البرمجة عالية المستوى ولغات البرمجة منخفضة المستوى تعد لغات البرمجة منخفضة المستوى نوعًا من اللغات البرمجة يوفر تواصلًا مباشرًا مع عتاد الحاسوب، وتشبه بنيتها بنية لغة الآلة، ومن أبرز الفروق بينها وبين اللغات عالية المستوى نذكر التالي: تتميز لغات البرمجة عالية المستوى بسهولة قراءة وكتابة الشيفرات ما يجعل تطوير البرمجيات سهلًا وسريعًا، وكذلك تسهُل عمليتا الاختبار ومعالجة الأخطاء مما يساعد على حفظ أمان البرنامج، بينما تتميز اللغات منخفضة المستوى بالوصول المباشر لعتاد الجهاز واستهلاك موراده بالطريقة الأمثل. تُستخدم لغات البرمجة عالية المستوى في جميع المجالات البرمجية تقريبًا،مثل برمجة تطبيقات الويب والجوال وتطبيقات الذكاء الاصطناعي وتحليل البيانات، أما لغات البرمجة منخفضة المستوى فتُستخدم اليوم في مجالات محدودة تحتاج للتعامل مع عتاد الحاسوب مباشرة، مثل: تطوير أنظمة التشغيل وتطوير الأنظمة المدمجة. أنواع لغات البرمجة عالية المستوى تعد النماذج البرمجية منهجيات لكتابة الشيفرات وحل المشكلات البرمجية وتختلف أهداف كل نموذج برمجي عن الآخر، وقد تدعم لغة البرمجة الواحدة أكثر من نموذج برمجي، وتتعدد أنواع لغات البرمجة عالية المستوى تبعًا للنماذج البرمجية، منها: لغات البرمجة كائنية التوجه Object-Oriented Programming Languages لغات البرمجة الوظيفية Functional Programming Languages لغات البرمجة الإجرائية Procedural Programming Languages لغات البرمجة المنطقية Logical Programming Languages لنشرح بمزيد من التفصيل مميزات كل نوع من هذه الأنواع وأشهر لغات البرمجة التي تندرج ضمنه. لغات البرمجة كائنية التوجه Object-Oriented Programming Languages يعد نموذج البرمجة كائنية التوجه أشهر نموذج برمجي في المجتمع التقني؛ ذلك لتقسيمه البرنامج كاملًا إلى مجموعات صغيرة من الشيفرات القابلة لإعادة الاستخدام في مواضع أخرى، ما يساعد على تقليل إجمالي عدد الشيفرات النهائي للبرنامج وبالتالي تحسين أدائه، وكذلك يساعد على تنظيم الشيفرات وتسهيل عملية اختبار البرنامج ومعالجة أخطائه مما يرفع من أمان البرنامج. يقوم نموذج البرمجة كائنية التوجه على مفهوم الأصناف Classes التي تحتوي على كائنات Objects، والكائنات هي بيانات البرنامج التي تمتلك واصفات Attributes وطرق أو توابع Methods، والواصفات هي المتغيرات Variables التي تتضمن نوع بيانات الكائن وحجمها وتفاصيلها، وأما الطرق فهي الدوال البرمجية التي تحقق الوظائف Functions التي تقوم بها الكائنات. ويمكننا تشبيه الصنف في نموذج البرمجة كائنية التوجه بنموذج تصنيع لسيارة، فالواصفات في هذا المثال هي مواصفات السيارة بدءًا من لونها مرورًا بسرعتها وصولًا إلى سعرها، أما التوابع فهي أفعال السيارة، مثل: التشغيل وزيادة السرعة وتغيير الاتجاه، أما الكائنات فهي السيارات النهائية الناتجة عن هذا الصنف. class Car: # These are the attributes of the object: color = 'Red' speed = "180KM\H" price = "5500 USD" # These are the methods of the object: def turn_on(self): return 'Car is turned on' def increase_speed(self): return 'Speed is increased' def change_direction(self): return 'Direction is changed' the_car = Car() # This is the object print(the_car.color) # Output: Red print(the_car.turn_on()) # Output: Car is turned on تدعم لغاتُ برمجةٍ عديدة نموذجَ البرمجة كائنية التوجه، ولعل أشهرهم بايثون وجافا وسي بلس بلس C++ وجافا سكريبت وروبي وبي إتش بي PHP وكوتلن. وتُستخدم لغات البرمجة كائنية التوجه في مجالات عديدة، منها: تطوير تطبيقات الويب وتطوير تطبيقات الهاتف. لغات البرمجة الوظيفية Functional Programming Languages تعتمد لغات البرمجة الوظيفية على بناء البرنامج كاملًا من مجموعة من الوظائف البرمجية Functions، ويعد نموذج البرمجة الوظيفية مبنيًا على مصطلح الوظائف النقية Pure Functions، وهو نوع من الوظائف تعتمد نتائجه اعتمادًا كليًّا على البيانات الداخلة له، ولا تحتاج الوظيفة إلى تعديل البيانات الداخلة أو تعيين متغيرات للتمكُّن من إصدار النتائج. def pure_function(a, b): return a + b print(pure_function(2, 3)) # Output: 5 def impure_function(a, b): new_a = a + 3 new_b = b + 4 new_data = a + b return new_data print(impure_function(2, 3)) # Output: 19 تتميز لغات البرمجة الوظيفية بقابلية إعادة استخدام الشيفرات وسهولة الاختبار وحل المشكلات، وتُستخدم لغات البرمجة الوظيفية بكثرة في المجالات المعتمدة على تحليل أحجام ضخمة من البيانات، مثل: معالجة البيانات والذكاء الاصطناعي والحوسبة العلمية والحوسبة الرياضية ومزامنة الأنظمة، ومن أشهر لغات البرمجة الوظيفية هاسكل وسكالا وإرلانج وليسب، كما تدعم بايثون هذا النموذج البرمجي. لغات البرمجة الإجرائية Procedural Programming Languages تعد البرمجة الإجرائية نموذجًا برمجيًا سهلًا يساعد على كتابة البرنامج على هيئة خطوات برمجية منطقية متسلسلة، ويساعد نموذج البرمجة الإجرائية على تنظيم شيفرات البرنامج بطريقة وجعلها سهلة القراءة ومنطقية التسلسل، وتُستخدم لغات البرمجة الإجرائية عادةً لكتابة الخوارزميات والعمليات الحسابية ولكتابة برمجيات التشغيل الآلي أو الأتمتة Automation، كما تُستخدم أحيانًا لتطوير أنظمة التشغيل، وتدعم هذا المجال لغاتٌ مثل لغة ++C وجافا وباسكال. def greet_user(): name = input("Enter your name: ") # Procedure 1: Asking the user about his name # Procedure 2: Storing the name of the user in a variable print(f"Hello {name}!") # Procedure 3: Constructing the greeting message greet_user() # Procedure 4: Displaying the greeting message for the user لغات البرمجة المنطقية Logical Programming Languages تعتمد البرمجة المنطقية على المنطق الرسمي Formal Logic، وهو نظام لتحليل وتقييم النتائج المحتملة بناءً على حقائق Facts وقواعد Rules، ثم استخراج النتيجة السليمة والمنطقية للتساؤلات Queries، وتعد لغة برولوج Prolog أشهر لغة برمجة منطقية، ويشيع استخدام لغات البرمجة المنطقية في مجالات الذكاء الاصطناعي والتعلُّم الآلي ومعالجة اللغة الطبيعية. likes(Mohammed, Apples). % This is a fact that Mohammed likes apples likes(Ahmed, Grapes). likes(Mahmoud, Pizza). % This is a rule that people who share the same food preferences are good friends good_friends(Person1, Person2) :- likes(Person1, Food) likes(Person2, Food) مميزات لغات البرمجة عالية المستوى التجريد Abstraction: تعد اللغات عالية المستوى مجردة عن عتاد الحاسوب، أي إن المطور يعمل على تطوير البرنامج ليناسب نظام التشغيل، ويحاول مراعاة مكونات الحاسوب لكن دون حاجة إلى توصيف طريقة تعامل البرنامج مع العتاد، مما يوفر كثيرًا من الوقت والجهد ويجعل عملية التطوير أسهل ويزيد من كفاءة التطبيقات وخواصها. الأمان: تضم معظم لغات البرمجة عالية المستوى مكتباتٍ وأدواتٍ تساعد على اختبار شيفرات البرنامج واستخراج ثغراتها ثم سد هذه الثغرات، ما يساهم في تقليل احتمالية اختراق التطبيق وتعسير الوصول إلى بيانات المستخدمين. التوافقية Portability: تدعم غالبية اللغات عالية المستوى تعدد المنصات، والتي تعني قدرة البرنامج على العمل على أنظمة تشغيل مختلفة، كأن يعمل برنامج سطح المكتب على ويندوز ولينكس وMacOS، كما تتوافق لغات البرمجة عالية المستوى مع مواصفات العتاد المختلفة للحواسيب أيضًا. تعدد الاستخدامات: تُستخدم لغات البرمجة عالية المستوى في مجالات لا حصر لها، بدءًا من تطوير التطبيقات للمنصات المختلفة، مرورًا بتطوير الألعاب، وصولًا إلى تطوير برمجيات الذكاء الاصطناعي وتحليل البيانات وغيرها. سهولة الاستخدام: يسهل تعلم لغات البرمجة عالية المستوى، وذلك لتشابه الكثير من شيفراتها باللغة الإنجليزية، وكذلك يسهل العمل بها لقلة عدد الشيفرات المطلوبة لتطوير البرمجيات. أمثلة على لغات البرمجة عالية المستوى تنتشر لغات البرمجة عالية المستوى وتكثر، ومن أشهرها: بايثون Python سي بلس بلس C++ جافا Java جافا سكريبت JavaScript بي إتش بي PHP سويفت Swift لنستعرض ماهية كل لغة ونماذجها البرمجية المدعومة وحالات استخدامها. لغة بايثون Python تعد بايثون إحدى لغات البرمجة العصرية التي يزداد رواجها في الأوساط البرمجية، وهي لغة عالية المستوى مفسرة، تدعم البرمجة كائنية التوجه والبرمجة الوظيفية والبرمجة الإجرائية، وتعد لغة عامة الاستخدامات، إذ تُستخدم في مجالات عديدة ومختلفة، مثل: الذكاء الاصطناعي وتحليل البيانات وتطوير الويب وتطوير تطبيقات سطح المكتب وغيرها. لغة C++ تقع لغة C++ ضمن أشهر لغات البرمجة عالية المستوى المترجمة، وتدعم البرمجة كائنية التوجه والبرمجة الإجرائية كليًا، وتدعم بعض خواص البرمجة الوظيفية، وتتعدد استخدامات لغة C++، ومن أشهر استخداماتها تطوير أنظمة التشغيل وتطوير الألعاب وتطوير تطبيقات السحابة وإنترنت الأشياء. لغة جافا Java تعد جافا لغة برمجة عالية المستوى كائنية التوجه تدعم التنفيذ كلغة مترجمة وكلغة مفسرة أيضًا، وتشتهر كثيرًا في مجال تطوير تطبيقات الهاتف ولا سيما الموجهة منها إلى نظام تشغيل أندرويد، كما يشيع استخدامها في مجال تطوير الألعاب. لغة جافا سكريبت JavaScript تتعدد النماذج البرمجية للغة جافا سكريبت، فهي تدعم البرمجة الإجرائية والبرمجة الوظيفية، وكذلك تعد داعمة لنموذج البرمجة كائنية التوجه، وتعد لغة مفسرة، وتبرز جافا سكريبت بشدة في مجال تطوير الواجهات الأمامية لتطبيقات الويب. لغة PHP تعد لغة PHP واحدة من لغات البرمجة المفسرة الكلاسيكية التي لا تزال مستخدمة إلى يومنا هذا، وهي داعمةٌ للبرمجة كائنية التوجه والبرمجة الإجرائية، وتُستخدم في تطوير جهة الخادم Server-Side في تطبيقات الويب. لغة سويفت Swift تحظى لغة سويفت بشعبية واسعة رغم حداثتها وظهورها متأخرًا في الأوساط البرمجية، وهي لغة مترجمة وتتلاءم بشدة مع نموذج البرمجة كائنية التوجه، وكذلك تدعم بعض النماذج البرمجية الأخرى مثل البرمجة الوظيفية، وتُستخدم سويفت لتطوير تطبيقات الجوال الموجهة إلى نظام تشغيل iOS. الخلاصة تعرفنا في مقال اليوم على أهمية لغات البرمجة عالية المستوى وأبرز أنواعها وتطبيقاتها، ويمكن القول أنه لا يمكن الاستغناء عن لغات البرمجة عالية المستوى في عصرنا الحالي، بل يسعى خبراء المطورين لتحديثها وتعديلها تارةً بتارةٍ حتى تكون أسهل وأقرب إلى اللغات البشرية، ولكي تصبح أكفأ وأسرع وأكثر أمانًا، وتُوائِم التغيرات السريعة في عالم التقنية، فاحرص على حجز وظيفتك في المستقبل بتعلُّم إحدى لغات البرمجة عالية المستوى من دورات أكاديمية حسوب المميزة. اقرأ أيضًا ما هي مدة تعلم البرمجة اكتشف ما هي البرمجة وما أهمية تعلمها دليلك الشامل إلى لغات البرمجة لغات برمجة الذكاء الاصطناعي دليلك إلى لغات برمجة الألعاب1 نقطة
-
تتكون الحواسيب والأجهزة الحديثة من شطرين أساسيين هما العتاد Hardware والبرمجيات Software، وتقع أنظمةُ التشغيل Operating System في رأس البرمجيات الضرورية لتشغيل الأجهزة الحديثة، إذ يعد نظام التشغيل البرنامج الأساسي الذي يساعد على تثبيت برمجيات فرعية على الجهاز واستخدامها واستخدام العتاد بالشكل المطلوب، فما هي أنظمة التشغيل، وما مكوناتها؟ ما هي أنظمة التشغيل؟ يشير نظام التشغيل إلى الطبقة الفاصلة بين المستخدم وعتاد الجهاز، ويضم نظام التشغيل مجموعة من البرمجيات المستخدمة في إدارة عتاد الجهاز وموارده، من معالج إلى ذاكرة الوصول العشوائي RAM والذاكرة الصلبة HDD وغيرها من العتاد، وكذلك يوفر نظام التشغيل خدمات إضافية للمستخدم، منها تثبيت التطبيقات الرقمية وتشغيلها وإغلاقها وحذفها. ويعد الهدف الأهم لأنظمة التشغيل هو تسهيل التعامل مع التطبيقات وجعلها جذابة وإضافة واجهة أمامية لها، فبدون نظام تشغيل كانت إدارة التطبيقات ستقتصر على واجهة الأوامر البدائية البسيطة، وبالتالي لم تكن التطبيقات الإلكترونية لتتطور وتمتلئ بالخصائص كما تطورت، ما يجعل أنظمة التشغيل شطرًا أساسيًا من أي تطور تقني حديث. وليس الهدف الأوحد لأنظمة التشغيل هو تسهيل التعامل مع التطبيقات، وإنما لأنظمة التشغيل وظائف عديدة، فمنها مثلًا إدارة موارد الجهاز، وكذلك يساعد نظام التشغيل على تنظيم ومزامنة العمليات على الجهاز، كما يعمل على تنظيم البيانات، فلا تتداخل بيانات أحد التطبيقات مع بيانات تطبيق آخر فتحدث مشكلات أمنية أو فقدان للبيانات. تتعدد أنظمة التشغيل وتكثر، ومن أشهر أنظمة تشغيل الحواسيب نظام ويندوز Windows ونظام لينكس Linux ونظام ماك أو إس MacOS لأجهزة أبل، بينما يشتهر بين أنظمة تشغيل الهواتف نظاما تشغيل أندرويد Android وأي أو إس iOS. ما مكونات نظام التشغيل؟ تتنوع مكونات نظام التشغيل وتختلف من نظام لآخر، لكن تشترك أنظمة التشغيل في مجموعة من المكونات أو البرمجيات التي تؤدي إجراءاتٍ ووظائف محددة، وهي تشمل: استدعاءات النظام System Calls مدير العمليات Processes Manager الإشارات Signals مدير الملفات Files Manager مدير الشبكات Networks Manager مدير الأمن Security Manager مدير أجهزة الإدخال والإخراج I\O Devices Manager مدير الذاكرة الرئيسية Main Memory Manager مدير الذاكرة الثانوية Secondary Memory Manager مترجم الأوامر Commands Interpreter لنشرح كل مكون ووظائفه بمزيدٍ من التفاصيل. استدعاءات النظام System Calls يعد نظام التشغيل وسيطًا بين المستخدم وعتاد الجهاز، وكذلك تعد استدعاءات النظام وسيطًا بين برامج المستخدم ونواة نظام التشغيل، فلو كان الوصول من البرمجيات إلى نظام التشغيل مباشرًا دون وسيط لكان اختراق هذا النظام سهلًا يسيرًا. تدخل استدعاءات النظام في كثيرٍ من عمليات نظام التشغيل، مثل: إدارة الملفات وإدارة العمليات وإدارة الذاكرة الرئيسية والذاكرة الثانوية وإدارة أجهزة الإدخال والإخراج، ما يجعل هذه الاستدعاءات شديدة الأهمية في نظم التشغيل. مدير العمليات Processes Manager تشير العملية Process إلى برنامج قيد التنفيذ، وتتكون العملية من عناصر عديدة أهمها بيانات البرنامج وشيفراته، ويجب أن تكون شيفرات البرنامج قابلة للتنفيذ؛ أي لا تحوي أخطاءً برمجية تمنع من تنفيذها. ويعمل مدير العمليات على إجراء استدعاءات للنظام لإنشاء عملية جديدة أو إنهاء عملية حالية، ويساعد مدير العمليات على مزامنة تنفيذ البرامج المختلفة على الجهاز، حتى لا تتداخل بيانات البرمجيات المختلفة في بعضها بعضًا؛ ما يؤدي إلى حفظ هذه البيانات من التلف، وكذلك يؤدي تنظيم العمليات إلى تقليل احتمالية حدوث خرق أمني نتاج تداخل البرمجيات وبياناتها. الإشارات Signals تُستخدم الإشارات لتنبيه المستخدم إلى حدث محدد متعلق بالعملية، سواءً انتهاء العملية بنجاح أو حدث خطأ أثناء تنفيذها، وتعمل الإشارات على تعليق العملية حتى يتخذ المستخدم الإجراء المناسب بناءً على الإشعار الظاهر له. مدير الملفات Files Manager يعمل مدير الملفات على تنظيم الملفات على الجهاز، فيُجرِي استدعاءاتٍ للنظام للتحكُّم في الملفات، مثل: استدعاء النظام لإنشاء ملف جديد في مُجلَّد محدد أو استدعاء النظام لقراءة بيانات من ملف أو استدعاء للكتابة في ملف أو استدعاء لحذف ملف. مدير الشبكات Networks Manager يوفر مدير الشبكات مجموعة من العمليات والإجراءات التي تساعد على تحديد الوصول إلى الشبكة وتأمينها، كما يساعد مدير الشبكات مسؤولي الشبكات على تحصيل معلومات متقدمة ومتقدمة عن شبكاتهم ومكوناتها، وكذلك يفحص العمليات المتوالية على الشبكة، ما يساعد مسؤولي الشبكات على تطوير الشبكة وتحسينها واختبارها وسد ثغراتها. مدير الأمن Security Manager يعد مدير الأمن أحد أهم أجزاء نظام التشغيل، إذ يعمل على تنظيم الوصول إلى جوهر النظام وتحديد الوصول إلى العتاد، فيسمح للبرمجيات الموثوقة بالتحكم في الجهاز والوصول إلى موارده، بينما يمنع البرمجيات الخارجية وغير الموثوقة من الوصول للموارد حتى يأذن لها المستخدم بنفسه. مدير أجهزة الإدخال والإخراج I\O Devices Manager يعمل مدير أجهزة الإدخال والإخراج على تنظيم عمليات إدخال البيانات عبر أجهزة الإدخال، مثل: لوحة المفاتيح والفأرة، وكذلك يعمل على تنظيم عمليات عرض البيانات وإخراجها عبر أجهزة الإخراج والتي تتضمن شاشة العرض والطابعة وغيرهما، ويعمل مدير أجهزة الإدخال والإخراج على تنظيم العمليات حسب الأولوية، فمثلًا عندما يضغط المستخدم ضغطتين بالفأرة على أحد التطبيقات لتشغيله؛ يقطع مدير أجهزة الإدخال والإخراج جميع العمليات الأخرى لتنفيذ هذه العملية العاجلة. مدير الذاكرة الرئيسية Main Memory Manager تشير الذاكرة الرئيسية إلى الذاكرة العشوائية RAM، وهي ذاكرة مؤقتة تُستخدم لتخزين بيانات البرنامج أثناء تنفيذه، ثم تنتقل هذه البيانات إلى الذاكرة الثانوية أو الدائمة إذا أراد المستخدم أن يحتفظ بها. يعمل مدير الذاكرة الرئيسية على حجز الكمية المناسبة من الذاكرة العشوائية للبرنامج دون تفريط لكيلا تحدث مشكلات بالجهاز، ودون اختزال حتى لا يكون البرنامج المُنفَّذ بطيئًا. مدير الذاكرة الثانوية Secondary Memory Manager تشير الذاكرة الثانوية إلى الذاكرة الدائمة أو قرص التخزين الصلب Hard Disk Storage، ويعمل مدير الذاكرة الثانوية على حجز المساحة المناسبة للبرنامج وبياناته على القرص الصلب، وكذلك يعمل على فصل وتنظيم الملفات والبيانات المُخزَّنة فيها حتى لا يحدث تداخل بينها. مترجم الأوامر Commands Interpreter تعد واجهة سطر الأوامر إحدى الطرق الكلاسيكية في التعامل مع الأجهزة الإلكترونية ولا سيما الحواسيب، ولا تزال ضرورية لكل مبرمج حتى عصرنا هذا، ويسمح مترجم سطرالأوامر للمستخدم بكتابة أوامر متنوعة، مثل: إنشاء ملف أو نسخ ملف أو حذف ملفات أو قراءة معلومات عن النظام وغيرها، ثم يعمل المترجم على ترجمة أوامر المستخدم إلى لغة الآلة ثم تنفيذها، ويشتهر كل من cmd.exe و PowerShell بين مترجمات أوامر نظام تشغيل ويندوز، في حين يبرز مترجم الأوامر Bash لنظام لينكس، بينما يذيع صيت مترجم الأوامر Terminal لنظام تشغيل ماك أو إس. ما الفرق بين مكونات نظم التشغيل؟ تتفرع أنواع أنظمة التشغيل، وتختلف مكونات كل نظام تشغيل عن نظيره اختلافًا طفيفًا، ومن أشهر أنظمة التشغيل: ويندوز Windows لينكس Linux ماك أو إس MacOS أندرويد Android أي أو إس iOS لنستعرض أبرز المكونات الفريدة لكل نظام تشغيل بمزيد من التفصيل. ويندوز Windows يعد ويندوز نظام تشغيل حاسوبي تابع لشركة مايكروسوفت Microsoft، ويتميز بواجهته الرسومية الجذابة وسهلة الاستخدام، ويتكون ويندوز من عدد ضخم من العناصر،ومن أبرزها: لوحة التحكم Control Panel: والتي تساعد المستخدم على تخصيص عناصر نظام التشغيل لملائمة احتياجاته. أداة Windows Update لتثبيت التحديثات الأمنية مركز التحكم Action Center: للتحكم في الشبكات الحاسوبية وأصوات النظام وغيرها. مستكشف الملفات والمجلدات File Explorer. نافذة أوامر Command Prompt، البرمجيات الأساسية لعمل النظام مثل برنامج Svchost.exe لإدارة العمليات ونواة ويندوز Ntoskrnl.exe لإدارة عتاد الجهاز وخدمات نظام التشغيل. لينكس Linux يشتهر نظام تشغيل لينكس بشدة بين المبرمجين ومطوري البرمجيات، ويعد نظام تشغيل حاسوبي، ويتميز في إدارة الشبكات وإدارة عتاد الجهاز، ويتكون نظام التشغيل لينكس من خمسة طبقات رئيسية، وهي: طبقة العتاد Hardware Layer: مسؤولة عن إدارة مكونات عتاد الحاسوب جميعًا، بدءًا من المعالج، مرورًا بالذاكرة الصلبة والعشوائية، وصولًا إلى أجهزة الإدخال والإخراج. النواة kernel: الطبقة الأساسية في نظام تشغيل لينكس، وهي المسؤولة عن بدء العمليات ومزامنتها وتنظيمها وتنفيذها، وتعمل النواة أيضًا على إدارة الموارد والسماح لكل عملية باستهلاك القدر المناسب لها من الموارد. القشرة Shell: الفاصل بين المستخدم والنواة، ويوجه المستخدم أوامره للنواة عبر القشرة، ويوجد نوعان من القشرة، أولاهما واجهة المستخدم الرسومية وتتميز بسهولة الاستخدام والجاذبية، والأخرى واجهة الأوامر والتي يكتب فيها المستخدمُ أوامرَه التي يريد من النواة تنفيذها. مكتبات النظام System Libraries: مجموعة من الوظائف المُبرمَجَة مسبقًا، والتي تسمح لأي برنامج خارجي بالوصول إلى مميزات النواة، وهي أساس بناء أي تطبيق رقمي موجه لنظام تشغيل لينكس. خدمات النظام System Utilities: الوظائف الإدارية بنظام التشغيل، والتي تسمح للمستخدم بإدارة الملفات والشبكات، وإدارة سائر أجزاء نظام التشغيل. ماك أو إس MacOS يعد ماك أو إس نظامًا حاسوبيًا لأجهزة أبل Apple، ويتكون من واجهة أمامية سلسة وجذابة وفعالة تُسمَّى أكوا Aqua، ويحظى بتطبيقات مخصصة مطورة بلغات برمجة، مثل: جافا وسويفت، وكذلك يتميز نظام ماك أو إس برسوم Graphics جذابة مبنية على إطاري عمل Quartz وQuickTime ومكتبة OpenGL، وتعد النواة الأساسية لنظام التشغيل ماك أو إس هي داروين Darwin، والذي يعد نظام تشغيل مبني على نظام تشغيل UNIX، ويعد نظام ماك أو إس بالكامل مبنيًا على نظام تشغيل داروين. أندرويد Android يعد أندرويد نظام تشغيل للهواتف المحمولة، ويعد مبنيًا على نظام لينكس، ويحوي خمسة مكونات رئيسية، وهي: نواة لينكس Linux Kernel: يعد المكون المسؤول عن إدارة عتاد الهاتف بأكمله وإدارة العمليات والشبكات والذاكرة الدائمة والذاكرة العشوائية وغيرها. مكتبات المنصة Platform Libraries: تحتوي هذه الطبقة على بعض المكتبات المساعدة على إدارة النظام، مثل: مكتبات لدعم تشغيل الوسائط، ومكتبات لدعم عرض الرسوم، ومكتبات لدعم التخزين في قواعد بيانات مختلفة، وغيرها. وقت تشغيل أندرويد Android Runtime: توفر هذه الطبقة بيئة تشغيل تحتوي على الخدمات الضرورية لتشغيل التطبيقات المُثبَّتة على الهاتف. أطر عمل التطبيقات Application Frameworks: الطبقة المسؤولة عن إدارة تطبيقات الهاتف، وكذلك تعد مسؤولة عن إدارة الإشعارات وإدارة الواجهة الأمامية للهاتف وأسلوب عرض التطبيقات. التطبيقات Applications: تشير إلى التطبيقات المثبتة على الهاتف، سواءً كانت تطبيقات داخلية، مثل: الكاميرا ومتصفح الصور، أو تطبيقات خارجية مثبتة من المتجر، وتعمل التطبيقات في طبقة وقت تشغيل أندرويد بمساعدة الخدمات المُقدَّمة من طبقة أطر عمل التطبيقات. أي أو إس iOS يعد أي أو إس نظام تشغيل للأجهزة الجوالة التابعة لشركة أبل، مثل: هاتف أيفون iPhone وأي باد iPad وغيرهما، ويتكون نظام تشغيل أي أو إس من أربعة طبقات رئيسية، وهي: نواة نظام التشغيل OS Core: تحوي أطر العمل المسؤولة عن الوظائف الأساسية للنظام، مثل: البلوتوث والأمن والتفويض المحلي. الخدمات الأساسية Core Services: تضم أطر العمل المسؤولة عن وظائف أخرى متعددة، مثل: التخزين السحابي وإدارة البيانات. الوسائط Media: تعد الطبقة الثالثة من مكونات أي أو إس، وهي المسؤولة عن تشغيل الصور والمقاطع الرسومية، طبقة Cocoa Touch: تجعل المستخدم قادرًا على تنفيذ عمليات اللمس والتحريك لاستخدام التطبيقات. ما مراحل إنشاء مكونات نظام التشغيل؟ تمر مكونات نظام التشغيل على مراحل عديدة قبل تجميعها وإطلاق نظام التشغيل، وهي: هيكلة النظام: قبل البدء في تطوير النظام يجب التخطيط له بتحديد الهيكل الأولي له والمميزات التي سيحويها، وتحديد الهدف من تطوير النظام. اختيار محمِّل الإقلاع Boot-loader: يعد محمِّل الإقلاع هو الجزء المسؤول عن تشغيل نظام التشغيل بنقله للذاكرة العشوائية للجهاز، ويمكن تطوير محمل إقلاع خاص كما يمكن استخدام محمل إقلاع موجود بالفعل، مثل: محمل الإقلاع GRUB. اختيار تصميم النواة: تتعدد تصاميم نواة نظام التشغيل kernel، فمنها مثلًا النويات المتجانسة Monolithic Kernels والتي تتميز بالسرعة والأداء المرتفع وتجعل نظام التشغيل سلسًا، ومنها النويات الصغيرة Micro Kernels والتي تتميز بتجريد أفضل لنظام التشغيل عن عتاد الجهاز. تطوير البرمجيات الخدمية: يعمل المطور في هذه المرحلة على تطوير كل برنامج من برامج نظام التشغيل على حدة، فيطور مدير الملفات ويختبره، ويطور مدير الشبكات ويختبره، ويطور بقية البرامج ثم يجمعها معًا في نظام التشغيل. اختبار نظام التشغيل: يختبر المطور نظام التشغيل لاستخراج المشكلات الأمنية ومعرفة الثغرات وحلها قبل إصداره. الخاتمة تعرفنا في مقال اليوم على مكونات أنظمة التشغيل التي تعد جزءًا أساسيًا من جميع الأجهزة الحديثة القابلة للبرمجة، واستعرضنا بإيجاز المكونات الأساسية لكل نظام تشغيل، ونذكر ختامًا أن هذه الأنظمة في تطورٍ دائمٍ وتحديثاتٍ متوالية، لذا ينبغي أن تحرص على تحديث نظام التشغيل لجهازك باستمرار لتضمن له أداءً مستقرًا وآمنًا. اقرأ أيضًا تعرف على نظام لينكس Linux وأبرز مميزاته وعيوبه تثبيت لينكس مع نظام ويندوز كيفية تثبيت توزيعة أوبنتو من لينكس بأبسط طريقة مدخل إلى نظام التشغيل ويندوز 11 وطريقة تثبيته1 نقطة
-
هل أنت مهتم بتعلم البرمجة والتطوير لكنك تتساءل ما هي مدة تعلم البرمجة؟ وكم أحتاج من الوقت لتعلم لغة برمجة معينة، وهل سأستغرق وقتًا طويلًا لتعلمها والعمل بها؟ وفي مقال اليوم نحاول أن نجيبك على كل هذه الأسئلة ونقدم بعض النصائح المفيدة التي تساعدك على التقدم بشكل أسرع. في الواقع قد تختلف الإجابة على هذا السؤال اعتمادًا على عدة عوامل مثل الوقت الذي يمكنك توفيره لدراسة البرمجة يوميًا ومدى استيعابك، وهل تبدأ من الصفر أم لديك بعض المعلومات المسبقة عن البرمجة، وما هو المجال أو التخصص الذي ترغب بتعلمه كم يستغرق تعلم البرمجة دعنا نتفق أنه ليس من السهل تحديد جواب دقيق لهذا السؤال، جرب مثلًا أن تكتب في محرك البحث جوجل "كم يستغرق تعلم البرمجة" ستفاجئ بالحصول على إجابات متفاوتة بشكل كبير على هذا السؤال قد تتراوح من ثلاثة أشهر إلى خمس سنوات! يعزى هذا التفاوت الكبير في الإجابات إلى وجود عوامل عديدة تلعب دورًا في تحديد مدة تعلم البرمجة، بعض هذه العوامل فردية وتختلف من شخص لآخر فهناك أشخاص يتعلمون المفاهيم الجديدة أسرع من غيرهم، وبعضهم لديه متسع من الوقت يمكن تخصيصه يوميًا في دراسة البرمجة أكثر من غيره، وبعضها الآخر عوامل تتعلق بطبيعة لغة البرمجة التي تنوي تعلمها أو التخصص البرمجي التي تود تعلمه وهل ترغب بالتعلم لدخول سوق العمل أم لمجرد اكتساب مهارات شخصية فكل هذه العوامل تؤثر على وتيرة تعلمك وزمن تحقيق أهدافك. سنناقش في الفقرات التالية بعض العوامل المهمة التي تؤثر على مدة تعلم البرمجة ونوضح كم يستغرق تعلم البرمجة بناء على كل حالة من الحالات لنساعدك على تحديد الوقت المطلوب بشكل تقريبي بحسب حالتك. العوامل التي تؤثر على مدة تعلم البرمجة الخبرة المسبقة صعوبة لغة البرمجة المستوى الذي تطمح للوصول إليه التخصص أو المجال البرمجي أسلوب التعلم جودة مصادر التعلم الخبرة المسبقة فإذا كنت تنوي تعلم البرمجة من الصفر ولم يكن لديك أي خلفية تقنية وليس لديك أدنى فكرة عن مبادئ التعامل مع الحاسوب ومفهوم الخوارزميات وأسس التفكير المنطقي وحل المشكلات وعن أي لغة برمجة سابقة فسيستغرق تعلم البرمجة وقتًا طويلاً منك نظرًا لوجود مجموعة واسعة من المفاهيم التي عليك تعلمها وقد يستغرق الأمر عدة أشهر حتى تتمكن من كتابة استيعاب أساسيات البرمجة وفهم مفردات لغة البرمجة التي تستخدمها وكتابة برنامج الأول بها بنفسك وتنفيذه بشكل صحيح. من الضروري أن لا تشعر بالإحباط في بدايات تعلم البرمجة وتأسيس نفسك بها فالبدايات دومًا هي الأصعب فإذا تخطيت هذه المرحلة فستتمكن من التقدم بتعلم البرمجة بوتيرة أسرع وسيسهل عليك الانتقال لتعلم أي لغة برمجة أخرى. صعوبة لغة البرمجة أحد العوامل المهمة في زمن تعلم البرمجة هو اللغة التي تختارها فهناك العديد من لغات البرمجة المختلفة مثل لغة بايثون Python. وجافا Java و C++ و PHP وغيرها الكثير وبعض هذه اللغات سهل التعلم وبعضها الآخر أكثر صعوبة ويستغرق مدة تعلم أطول فتعلم لغة برمجة سهلة نسبيًا يستغرق حوالي أربعة إلى ستة أشهر وستحتاج لوقت أكبر إذا كنت تتعلم لغة برمجة صعبة. لذا عندما تقرر تعلم البرمجة فمن الأفضل أن تبحث عن لغة لها منحنى تعلم "Learning Curve" سهل وغير حاد أو معقد، ومنحنى التعلم هو طريقة بيانية للتعبير عن صعوبة تعلم الشخص لموضوع خلال فترة زمنية معينة ويعبر عن سرعة التقدم والخبرات المكتسبة في هذا الموضوع مع مرور الوقت. على سبيل المثال تملك لغة بايثون Python منحنى تعليمي أسهل من لغة جافا Java بسبب تعتبر لغة تركيبتها التي تشبه إلى حد كبير اللغة الإنجليزية وقواعدها السهلة، لهذا السبب فإن مدة تعلم لغة البايثون ستكون أقصر من مدة تعلم لغة جافا وتقدر المدة الوسطية لتعلم أساسيات بايثون بخمس إلى عشر أسابيع في حين تصل مدة تعلم جافا من ستة أشهر إلى 18 شهرًا، ويمكنك مطالعة المزيد من المعلومات حول لغات البرمجة التي يفضل أن تبدأ بها تعلم البرمجة من خلال مقال أسهل لغات البرمجة. المستوى الذي تطمح للوصول إليه إذا كنت تقصد عند سؤالك ما المدة التي أحتاجها لتعلم البرمجة أن تتعلم أساسيات البرمجة وتتعرف على طريقة أسلوب كتابة الشيفرات والتعليمات وتعريف المتغيرات وأنواع البيانات، والحلقات والشروط والدوال البرمجية …إلخ. لمجرد اكتساب مهارة تنمي تفكيرك المنطقي والتحليلي وتوسع مداركك وتمكنك من كتابة برامج حاسوبية لحل مشكلات بسيطة أو أتمتة مهامك اليومية المتكررة فهذا الأمر لن يتطلب منك سوى ثلاثة إلى ستة أشهر فقط لتعلم البرمجة بأي لغة كانت. لكن هذه المدة لن تكون كافية لك لاحتراف البرمجة ودخول سوق العمل فهذا الأمر قد يتطلب منك حوالي سنة أو أكثر للعمل على بناء برامج معقدة وتطبيقات احترافية متكاملة تتعامل مع مشكلات فعلية وتنبي من خلالها معرض أعمال جيد يعزز فرصتك في الحصول على عمل مناسب وإذا كنت تحتاج علم لغة برمجة سهلة نسبيًا يستغرق حوالي أربعة إلى ستة أشهر. التخصص أو المجال البرمجي إن مجالات البرمجة كثيرة ومتنوعة مثل تطوير الويب وبرمجة المواقع وبرمجة الألعاب والذكاء الاصطناعي وعلوم البيانات والأمن السيبراني وغيرها الكثير وبتطلب كل تخصص برمجي مجموعة مهارات مختلفة عن الآخر فكلما زادت المهارات المطلوبة وزاد تعقيدها، كلما زاد الوقت الذي تحتاجه لتعلمها. على سبيل المثال، تبلغ مدة تعلم برمجة المواقع حوالي ستة أشهر إلى عام واحد، في حين يحتاج تعلم أساسيات الذكاء الاصطناعي مدة أطول قد تصل لسنة أو أكثر لأنه مجال أكثر تعقيدًا ويتطلب وجود أساس جيد في الرياضيات والإحصاء ويحتج بعض الوقت للتآلف مع مصطلحاته والتعرف على تخصصاته المختلفة وتعلم خوارزميات التعلم الآلي ولغات برمجة الذكاء الاصطناعي كما يحتاج للكثير من الممارسة لإتقانه. أسلوب تعلم البرمجة تختلف مدة تعلم البرمجة أيضًا بحسب الطريقة التي تختارها للتعلم، فإذا اخترت دارسة البرمجة عن طريق التعليم الأكاديمي والتسجيل في إحدى الجامعات فستستغرق وقتًا طويلًا لا يقل عن أربع أو خمس سنوات لأنك ستضطر على الالتزام بمنهج محدد. أما إذا اخترت التعلم الذاتي فستتمكن من توفير الكثير من الوقت وتقتصر اعلى لغات البرمجة والتقنيات التي تحتاج لتعلمها وبقدر ما تثابر وتبذل من جهد وتلتزم بخطة تعلم منظمة وساعات تعلم محددة يوميًا فستختصر من زمن تعلم البرمجة وتتمكن من دخول سوق العمل بسرعة أكبر. جودة مصادر التعلم إذا قررت تعلم البرمجة فستجد الكثير من مصادر التعلم المتنوعة من دروس ومقالات وكتب ومقاطع فيديو ودورات تدريبية وغيرها من المصادر التي تساعدك لكن هذه المصادر ليست على نفس المستوى من الجودة وقد يصعب عليك كمبتدئ تمييز الغث من السمين وتحديد الترتيب الصحيح لمواضيع التعلم والتركيز على تعلم ما يهمك. كما أن تعلمك من مصادر مشتتة وبطريقة عبثية فتارة تشاهد مقطع فيديو عن موضوع ما وتارة تقرأ مقالة عن موضوع آخر وتارة تبدأ بقراءة كتاب ثم تمل منه سريعًا سيزيد بلا شك من مدة تعلم البرمجة وتحقيق هدفك وتذكر أن المشتت لا يصل. فإذا كنت تتعلم البرمجة دون خطة منهجية واضحة وتريد اختصار وقت تعلم البرمجة فمن الأفضل أن تستثمر وقتك وجهدك وتسجل في دورة تدريبية المنهجية التي تقدم لك المعرفة التي تحتاجها بالتسلسل الصحيح وتوضح لك الأدوات والتقنيات التي تحتاجها وتقيم مهاراتك بشكل معياري وتساعدك على تنفيذ تطبيقات عملية تعزز ما تعلمته وتزيد فرصتك في الحصول على وظائف برمجة مناسبة لمهاراتك. ستجد في أكاديمية حسوب الكثير من الدورات التعليمية عالية الجودة بمختلف التخصصات توفر لك إمكانية التعلم من الصفر دون الحاجة لأي معرفة مسبقة وتساعدك على التعلم بطريقة منظمة وتقرن التعليم النظري بالتطبيق العملي والأهم أنها توفر لك مدربين خبراء يرشدونك ويدعمونك طوال رحلتك التعليمية ويساعدونك في الإجابة على أي تساؤل وحل أي مشكلة تواجهك ويسعدون بتقديم المشورة التي تحتاجها حتى تحترف البرمجة وتجد فرصة العمل المناسبة. هل فات الوقت على تعلّم البرمجة كثيرًا ما نسمع أسئلة من قبيل أنا مهتم بالبرمجة والتقنية وأرغب في تعلمها لأعمل في وظيفة أفضل وذات مردود مادي أعلى أو أرغب بتعلم البرمجة لمواكبة التطور التقني وتعزيز مهارات حل المشكلات لدي ولكن عمري (كذا سنة) فهل فات الوقت على تعلم البرمجة؟ دعني أخبرك بأنه مهما كان عمرك فإن الأوان لم يفت على تعلم البرمجة فالعمر لا يشكل أي عائق في التعلم سواء في ظل وفرة الموارد المتاحة لمساعدتك. وقد يستغرق تعلم البرمجة مدة أطول مع التقدم في السن لكنك قادر على تقليل هذه المدة في حال خصصت وقتًا أطول وأسست نفسك بشكل جيد بالاعتماد على مصادر عالية الجودة وامتلكت الإرادة والرغبة الحقيقية للتعلم فهذا كفيل بجعلك تتغلب على أي صعوبات أو عوائق تواجهها. نصائح لتقليل مدة تعلم البرمجة حدد هدفك من تعلم البرمجة والتخصص البرمجي المناسب لك، وضع خطة لتعلم التقنيات واللغات التي تفيدك في هذا التخصص. عزز مهارة حل المشكلات والتفكير المنطقي قبل البدء بالبرمجة فهي مهارات أساسية تقلل مدة تعلم البرمجة. ركز على تعلم لغة برمجة سهلة وتناسب المبتدئين فهذا يسهل عليك استيعاب المفاهيم البرمجية بوقت أقل ويسهل عليك الانتقال لتعلم أي لغة برمجة أخرى. لا تستسلم بسرعة، فتعلم أي شيء جديد سيكون صعبًا في البداية ويستغرق بعض الوقت لفهم الأساسيات ومع الوقت والخبرة تصبح الأمور أسهل. اعتمد على مصدر جيد لتعلم البرمجة ولا تشتت نفسك بكثرة المصادر. احرص على التطبيق العملي لما تتعلمه من مفاهيم فهذا يعزز مهاراتك ويساعدك على بناء معرض أعمال يثبت خبرتك. تعلم مع أصدقاء لديهم نفس اهتمامك وضع معهم هدفًا مشترك وخطة للتعلم وتعاون معهم في حل المشكلات وتعلم المفاهيم الجديدة فهذا يجعل التعلم أكثر متعة ويحفزك على المواصلة. الخلاصة نأمل أن يكون هذا المقال قد ساعدك في تحديد كم يستغرق تعلم البرمجة ومعرفة أهم العوامل التي تلعب دورًا في الإجابة على هذا السؤال بشكل تقريبي، وكما وضحنا في المقال لا يوجد جواب واحد يناسب الجميع على هذا السؤال لكن بإمكانك اختصار مدة تعلم البرمجة ودخول سوق العمل بسرعة بالمثابرة والجهد. وتذكر في الختام أن البرمجة تحتاج منك إلى الاستمرار في التعلم وتطوير نفسك حتى بعد الاحتراف ودخول سوق العمل، فالتقنيات تتغير وتتطور باستمرار ومن الضروري مواكبة هذه التغييرات وتطبيقها في عملك للحفاظ على مكانتك التنافسية وتلبية متطلبات سوق العمل المتجددة. اقرأ أيضًا دليل شامل لتعلم البرمجة قواعد البرمجة ببساطة للمبتدئين اكتشف ما هي البرمجة وما أهمية تعلمها برمجة الحاسوب للمبتدئين لماذا يجب أن تعلم طفلك البرمجة؟1 نقطة
-
نعرفك في مقال اليوم على مطور البرمجيات Software Developer ونكتشف مهامه ومسؤولياته المختلفة، وأهمية العمل في هذا المنصب والطلب المرتفع عليه في سوق العمل، كما نتعرف على صفات مطوري البرمجيات وأهم الخطوات التي عليك اتباعها لتتمكن من العمل كمطور برامج، وفي الختام نورد مجموعة من مصادر التعلم المفيدة باللغة العربية لتساعدك على تعلم تطوير البرمجيات من الصفر حتى الاحتراف. من هو مطور البرمجيات مطور البرمجيات هو المبرمج المسؤول عن عملية تطوير التطبيقات والبرامج بمختلف أنواعها سواء برامج سطح المكتب أو الألعاب الإلكترونية أو تطبيقات الويب أو تطبيقات الجوال أو أنظمة التشغيل أو التطبيقات المضمنة أو غيرها من أنواع التطبيقات التي تلبي احتياجات المستخدمين وتحل مشكلاتهم المختلفة. ويستخدم مطور البرمجيات عادة تقنيات ولغات برمجة مختلفة لكتابة الشيفرات والأكواد البرمجية لعمل هذه التطبيقات وتنفيذ وظائفها المختلفة ومن أشهر اللغات التي يستخدمها مطوروا البرمجيات عادة لغة بايثون Python أو جافا سكريبت JavaScript أو C++ أو PHP أو غيرها من لغات البرمجة المعروفة، كما يستخدمون مكتبات وأطر عمل frameworks وأدوات مساعدة تُسرع عملهم، وتزيد إنتاجيتهم، وتحسن من جودة برمجياتهم. مهام مطور البرمجيات عند العمل في وظيفة مطور برمجيات لن تكون مسؤولًا فقط عن كتابة الشيفرات البرمجية وتطوير البرامج والتطبيقات المختلفة، فقد يطلب منك القيام بعدة مهام أخرى حسب طبيعة المكان الذي تعمل به، ومن بين المهام التي قد توكل لك كمطور برمجيات نذكر: تخطيط وتحليل متطلبات البرنامج أو التطبيق المطلوب تطويره. تعديل الشيفرات أو الأكواد البرمجية لبرامج ما من أجل تحسينه أو تغيير طريقة عمله. التأكد من جودة الشيفرات البرمجية واتباعها لقواعد البرمجة الصحيحة. اختيار هياكل البيانات المناسبة لحل المشكلات البرمجية. كشف أخطاء البرامج وتقديم مقترحات فعالة لحلها. التأكد من أمان المواقع والتطبيقات وسلامتها من الثغرات الأمنية. اختبار البرمجيات والتأكد من خلوها من أي مشكلات أو أعطال وحلها فور اكتشافها. نشر البرمجيات والتطبيقات وتثبيتها على بيئة الإنتاج التي سيتعامل معها المستخدمون. إعداد وثائق استخدام البرمجيات، وتدريب المستخدمين على استعمالها. وتذكر أن مطور البرمجيات قد لا يتحمل وحده مسؤولية القيام بكافة هذه المهام لاسيما في شركات التطوير الكبيرة التي تضم تخصصات برمجية مختلفة، ففي هذه الحالة يعمل مطور البرمجيات كجزء من فريق عمل متكامل يضم إلى جانب مطوري البرامج محللين ومختبري برمجيات ومهندسي DevOps ومهندسي ضمان الجودة ...إلخ. بحيث يتولى كل مهمة شخص متخصص وخبير بها. الفرق بين مطور البرمجيات ومهندس البرمجيات كثيرًا ما تتشابه المهام المطلوبة من مطوري البرمجيات ومهندسي البرمجيات في سوق العمل وقد يستخدم هذان المصطلحان بالتبادل مع بعضهما البعض إذ يعمل كل من مطوري البرمجيات ومهندسي البرمجيات على تطوير البرامج والتطبيقات. لكن كما وضحنا سابقًا يتضح الفرق بين التخصصات البرمجية في شركات التطوير الكبيرة حيث تكون مهام تطوير البرمجيات أقل من مهام هندسة البرمجيات، بحيث يركز مطور البرمجيات على كتابة أكواد برامج تؤدي وظائف محددة وتعديلها وتصحيحها لتوافق المتطلبات، بينما يتولى مهندس البرمجيات الإشراف على عملية التطوير الشاملة وتوجيه المطورين للتأكد من تطبيق مبادئ الهندسة على البرمجيات واتباع أفضل الممارسات وتصميم ميزات جديدة والتعاون مع فرق متعددة في شركة التطوير لضمان الحصول على برامج وتطبيقات عالية الجودة، وبالتالي يحتاج مهندس البرمجيات لمهارات أعلى من مهارات مطور البرمجيات. لذا إذا وجدت فرصة للعمل كمهندس برمجيات أو مطور برمجيات في جهة ما، فمن الأفضل أن تتأكد أولًا من الوصف الوظيفي لهذا العمل، وتعرف ما هي المهام والمسؤوليات المطلوبة منك بشكل دقيق لتعرف إن كانت هذه الوظيفة تناسبك أم لا قبل التقدم لها. كيف تصبح مطور برمجيات إذا كنت مهتمًا بتصميم وإنشاء البرامج والتطبيقات فعليك اتباع مجموعة من الخطوات وتعلم مجموعة متنوعة من المهارات الضرورية، وإليك أهم 10 خطوات لتصبح مطور برمجيات محترف: حدد هدفك، فمجال تطوير البرمجيات متنوع ومتشعب التخصصات لذا من الضروري أن تحدد من البداية المجال الذي تود العمل فيه والتطبيقات التي تهتم بتطويرها هل هي الألعاب الإلكترونية، أم مواقع الويب، أم تطبيقات الجوال، أم برمجة الروبوتات أم غير ذلك والتركيز على تعلمه. عزز مهاراتك في التفكير المنطقي وأسس نفسك في الخوارزميات وتعرف على هياكل البيانات الأساسية فهذه المهارات تعزز قدرتك على تعلم البرمجة وتساعدك على تطوير البرمجيات وحل مشكلاتها بشكل أفضل. تعلم دورة حياة تطوير البرمجيات والمراحل الأساسية التي تمر بها الأنظمة البرمجية كالتخطيط planning والتحليل analysis والتصميم design والتنفيذ implementation والمهام المطلوبة في كل مرحلة. ركز على تعلم لغات البرمجة والتقنيات الضرورية لتحقيق هدفك والمجال الذي تنوي التخصص فيه، على سبيل المثال إذا قررت تطوير تطبيقات الويب يمكنك اختيار لغة PHP أو بايثون، وإذا كنت مهتمًا بتطوير تطبيقات الجوال فيمكنك تعلم لغة جافا سكريبت. تعلم تقنيات تحسين الشيفرات البرمجية وجعلها نظيفة ومنظمة باتباع قواعد البرمجة الأساسية مثل وضع تعليقات ومسافات بادئة وأقواس صحيحة عند كتابة الشيفرات فهذا الأمر يميزك كمطور برمجيات. تعرف على أنواع قواعد البيانات المختلفة ومتى تستخدم كل نوع منها من أجل تخزين البيانات ومعالجتها ضمن برامجك وتطبيقاتك. تعلم مهارات وأدوات إضافية مساعدة لأي مطور برمجيات مثل استخدام أطر العمل البرمجية frameworks، وبرامج التحكم بالإصدارات مثل Git فهذه الأدوات ضرورية ومطلوبة في سوق العمل لاسيما عند العمل ضمن فريق عمل. تعرف على طرق اختبار وفحص البرمجيات والتأكد من سلامة الشيفرات البرمجية المكتوبة من الأخطاء البرمجية والتعامل مع هذه الأخطاء وحلها بالشكل الصحيح. احرص على بناء معرض أعمال يتضمن مجموعة متنوعة من التطبيقات والبرامج فهذا يعزز ما تعلمته من مهارات وتقنيات ويثبت مستوى خبراتك للجهة التي ترغب بتوظيفك ويساعدك في الحصول على فرصة عمل. بإتمامك لكل الخطوات السابقة ستكون قد امتلكت المؤهلات الكافية وعليك البحث عن فرصة عمل مناسبة في شركة تطوير برمجيات أو العمل عن بعد عبر الإنترنت كموظف مستقل وعرض خدماتك المدفوعة على مواقع العمل الحر المختلفة مثل موقع بعيد أو مستقل أو خمسات. صفات مطور البرمجيات رغم أهمية المهارات التقنيات التي ذكرناها سابقًا إلا أنها لا تكفي وحدها لتكون مطور برمجيات ناجح في سوق العمل، بل يجب أن تتمتع بمجموعة من السمات الشخصية والمهارات الناعمة كي تتمكن من إنجاز مشاريعك البرمجية بنجاح وضمن الوقت المحدد لها ومن أبرز هذه السمات نذكر: مهارات جيدة في التواصل مع العملاء من أجل فهم المتطلبات بشكل جيد وتنفيذها بالشكل المطلوب، كما يحتاج للتواصل الفعال مع بقية أعضاء الفريق البرمجي وتنسيق العمل معهم لضمان نجاح المشروع. القدرة على العمل الجماعي، لاسيما عند العمل على مشاريع كبيرة وضمن فريق برمجي متكامل من مطورين ومحللين ومتخصصي تقنية معلومات. مهارات في تنظيم وإدارة الوقت والتعامل مع ضغوطات العمل، والمرونة في التعامل مع تغيير المتطلبات والتحسينات المستمرة المطلوب إجراؤها على البرمجيات، ودمج المتطلبات الجديدة بسرعة وضمن الوقت المحدد. معرفة بمنهجيات إدارة المشاريع البرمجية وآليات تطبيقها مثل منهجية أجايل Agile التي تعزز العمل الجماعي ومهارات الاتصال. القدرة على التعلم والتطور المستمر، فتطوير البرمجيات مجال يتطور بوتيرة هائلة وهذا يتطلب من مطور البرمجيات متابعة التعلم والاطلاع على كل جديد في مجاله. ولمعرفة المزيد من المهارات الشخصية التي تحتاجها كمطور برمجيات أنصحك بمطالعة الفيديو التالي: تعلم تطوير البرمجيات يمكنك تعلم تطوير البرمجيات والبدء بدراسة التقنيات المطلوبة بطريقتين، إما من خلال الدراسة الأكاديمية في إحدى الجامعات وهذا الطريق قد يكون طويلًا ومليئًا بالمواد النظرية المملة التي لن تفيدك في حياتك المهنية ويمتد لفترة لا تقل أربع لخمس سنوات. أو دراستها ذاتيًا من خلال مصادر التعلم الكثيرة المتاحة عبر الإنترنت وهذا الطريق مختصر ويساعدك على التركيز على التقنيات التي تفيدك دون سواها وتسرع دخول لسوق العمل. توفر لك أكاديمية حسوب العديد من المصادر المفيدة لتعلم تطوير البرمجيات من دروس ومقالات متنوعة تنشر بصورة دورية، كما توفر موسوعة حسوب توثيقات برمجية شاملة لأهم لغات البرمجة والتقنيات التي يحتاج أي مطور برمجيات لتعلمها وإذا كنت تفضل التعلم من كتب البرمجة لما توفره من طريقة مفصلة ومفهرسة في طرح المعلومات فستجد كذلك في قسم الكتب في الأكاديمية العديد من كتب البرمجة التي تناسب اهتمامك. إضافة لما سبق توفر أكاديمية حسوب العديد من الدورات الشاملة التخصصية التي تساعدك في رحلة تعلم تطوير البرمجيات ومن بين هذه الدورات: دورة تطوير التطبيقات باستخدام لغة بايثون Python: سيتعلم مطور البرمجيات في هذه الدورة كل ما يحتاجه لتطوير تطبيقات ومواقع الويب والمتاجر الإلكترونية إلى جانب تطبيقات تحليل البيانات والذكاء الاصطناعي. دورة تطوير التطبيقات باستخدام لغة جافا سكريبت JavaScript: هذه الدورة موجه للمطورين المهتمين بتطوير تطبيقات الجوال أو تطبيقات سطح المكتب باستخدام لغة جافا سكريبت وأطر عملها القوية المختلفة. دورة تطوير تطبيقات الويب باستخدام لغة PHP: تفيدك هذه الدورة إذا كنت مهتمًا بتطوير مواقع تطبيقات الويب المختلفة والمتاجر الإلكترونية كما ستتعلم فيها كيفية تطوير قوالب نظام إدارة المحتوى الشهير والمطلوب بشدة في سوق العمل ووردبريس. دورة تطوير تطبيقات الويب باستخدام لغة Ruby: تساعدك هذه الدورة على إتقان التعامل مع لغة البرمجة روبي وإطار عملها الشهير روبي أون ريلز Ruby On Reals لتطوير مواقع وتطبيقات الويب. الخلاصة تعرفنا في مقال اليوم على وظيفة مطور البرمجيات ووضحنا أهم المهام والمسؤوليات التي يتولى مطور البرمجيات القيام بها، والفرق بين مطور البرمجيات ومهندس البرمجيات، كما تعرفنا على أبرز التقنيات والمهارات والصفات التي يجب أن يتمتع بها مطور البرمجيات وما الخطوات التي يمكنه اتباعها لتعلم هذه الوظيفة البرمجية المهمة في سوق العمل. هل تجد أنك تملك صفات تؤهلك للعمل كمطور برامج؟ وما هو نوع البرامج الذي تفضل تطويرها؟ وهل بدأت فعلًا بالعمل في هذا التخصص أم أنك لا زلت في طور التعلم. شاركنا رأيك وتجربتك في التعليقات أسفل المقال. اقرأ أيضًا دليلك الشامل لتعلم البرمجة تعرف على تخصص هندسة البرمجيات الطريقة الأمثل لدراسة تخصص هندسة البرمجيات دليلك الشامل إلى برمجة التطبيقات تطوير التطبيقات1 نقطة
-
أدَّى التطور البرمجي المذهل في السنوات الأخيرة إلى تيسير الكثير من المهام وتسهيل تنفيذها، وبدأ التحول الرقمي يدخل في شتى المجالات عامًا بعد عامٍ، وهذا جعل البرمجة إحدى الوظائف الضرورية في عصرنا الحاضر، فما هي البرمجة ومن هو المبرمج؟ وما السبيل لتصبح مبرمجًا محترفًا بسهولة، هذا ما سنجيبك عليه في مقال اليوم؟ ما هي البرمجة ومن هو المبرمج المحترف؟ تشير البرمجة إلى عملية كتابة الشيفرات أو الأكواد البرمجية التي تخبر الحواسيب أو غيرها من الآلات الذكية ما الذي يجب عليها فعله، وتعد البرمجة جزءًا من عملية أكبر وهي تطوير البرمجيات، أما المبرمج فهو الشخص المسؤول عن توظيف كافة الأدوات البرمجية المختلفة ولا سيما لغات البرمجة وأطر العمل لتحويل أي فكرة أو مهمة يود تنفيذه إلى تطبيق أو برنامج حاسوبي فعلي يمكن للمستخدمين استعماله والاستفادة منه في تأدية مهامهم. ونقول عن المبرمج أنه مبرمج محترف إذا كان لا يقتصر على كتابة البرامج وتطوير التطبيقات التي تؤدي المطلوب فحسب، بل إذا تمكَّن من كتابة أكواد هذه التطبيقات بشيفرات برمجية منظمة وخالية من الثغرات الأمنية واتبع في كتابتها كافة قواعد البرمجة الصحيحة للحصول على أداء مثالي وفعال. كما يكون المبرمج محترفًا كلما كان قادرًا على التعامل مع المشكلات البرمجية الحاسوبية بسرعة وكفاءة، وكلما استطاع كتابة برمجيات تحلُّ مشكلاتٍ عديدة من مشكلات المستخدمين، واستطاع تقديم فائدة حقيقية في سوق البرمجيات كما سنشرح المزيد من السمات لاحقًا بمزيد من التفصيل في فقرة ممارسات المبرمج المحترف. أشهر وظائف البرمجة تتعدد فرص العمل في مجالات البرمجة نظرًا لتعدد أنواع البرمجيات التي يمكن تطويرها، ولعل أكثر الوظائف البرمجية انتشارًا ما يلي: مبرمج تطبيقات الويب Web Applications Programmer مبرمج تطبيقات الجوال Mobile Applications Programmer مبرمج تطبيقات سطح المكتب Desktop Applications Programmer مبرمج تطبيقات ذكاء اصطناعي Artificial Intelligence Programmer مطور ألعاب إلكترونية Game Developer مبرمج تطبيقات الأمن السيبراني Cyber Security Applications Programmer ما الفرق بين المبرمج المحترف ومهندس البرمجيات؟ تتعدد الفروق بين المبرمج ومهندس البرمجيات، ومنها: المسؤوليات: يعد مهندس البرمجيات مسؤولًا عن صناعة التطبيق البرمجي بالكامل، ويعد مسؤولًا عن التواصل مع العميل وفهم احتياجاته جيدًا، ثم تحويل هذه الاحتياجات إلى تصميم أولي للتطبيق، ثم تحسين هذا النموذج الأولي، ثم كتابة شيفرات التطبيق، ثم اختبارها وتنقيح أخطائها، وأخيرًا إطلاق التطبيق والإشراف على تحديثاته، أما المبرمج فليس مسؤولًا عادة إلا عن تحويل تصميم التطبيق إلى شيفرات تفهمها الآلة. المهمة في دورة تطوير البرنامج: يشرف مهندس البرمجيات على جميع مراحل تطوير البرنامج، بدءًا من النمذجة أو التصميم الأولي، انتهاءً بالاختبار ومعالجة الأخطاء وإصدار التطبيق، أما المبرمج فلا يقع عمله إلا في مرحلة واحدة من مراحل تطوير التطبيق وهي مرحلة كتابة الشيفرات واختبارها وتنقيح أخطائها. المهارات: يحتاج مهندس البرمجيات مجموعة واسعة من المهارات، والتي تتضمن معرفة قوية بالرياضيات وخبرة في البرمجة وقدرة على التعامل مع الأدوات السحابية، بينما لا يحتاج المبرمج إلا معرفة قوية بلغة برمجة والتعمُّق فيها والتدرُّب على كتابة الخوارزميات باستخدامها. هل أحتاج للدراسة الأكاديمية لأصبح مبرمجًا محترفًا؟ تعد الدراسة الأكاديمية مهمة ومفيدة وتختصر كثيرًا من الوقت والجهد، ولا سيما في مجالات تطوير البرمجيات، فالجامعة أو الجهة الأكاديمية تضع منهجًا واضحًا وخطة طريق من اليوم الدراسي الأول إلى اليوم الدراسي الأخير، مما ينقذ الطالب من التشتت بين المصادر الكثيرة التي لا حصر لها على الإنترنت. لكن بالرغم من هذه الأهمية البالغة للدراسة الأكاديمية إلا أنَّ الخبر الجيد أن مجال البرمجة لا يعد محصورًا على الأكاديميين، ويسهل الحصول على وظيفة مرموقة في المجال إذا امتلكت المهارات المطلوبة، وقد أسفرت إحصائية ستاك أوفر فلو لعام 2023 عن نتائج مذهلة تتعلق بالدراسة الأكاديمية، إذ صرَّح ثمانون بالمائة من المشتركين في الإحصائية عن تعلُّمهم للبرمجة من الدورات عبر الإنترنت وهناك أمثلة عديدة على مبرمجين بارزين تعلموا البرمجة بصورة ذاتية وبرعوا بها! فإذا كنت مهتمًا لتصبح مبرمجًا محترفًا خلال فترة زمنية قصيرة وترغب في مصدر موثوق للتعلم يمكنك الاطلاع على دورات أكاديمية حسوب للجمع بين مزايا التعلُّم الأكاديمي من منهج مميز وخطة طريق واضحة، ومزايا التعلم عبر الإنترنت من حرية في تنظيم الوقت وسهولة الوصول للمعلومات، وتضمن لك أكاديمية حسوب استرداد استثمارك إذا ما لم تحصل على وظيفة في مجال البرمجة خلال ستة أشهر من إنهاء الدورة، كما توفر الأكاديمية مجموعة من المصادر المجانية لتعلُّم البرمجة، بدءًا من الكتب المميزة في المجالات البرمجية المختلفة، مرورًا بالمقالات الكثيرة والمميزة، وصولًا إلى قسم الأسئلة والأجوبة الذي يساعدك فيه المبرمجون المحترفون على حل المشكلات التي تواجهك في البرمجة. دورة علوم الحاسوب دورة تدريبية متكاملة تضعك على بوابة الاحتراف في تعلم أساسيات البرمجة وعلوم الحاسوب اشترك الآن ما هي المهارات المطلوبة لتصبح مبرمجًا محترفًا؟ يمتلك المبرمج المحترف مجموعة من الأدوات والتقنيات البرمجية التي تجعله مميزًا عن المبرمج العادي، ومنها: الخوارزميات: تساعد الخوارزميات المبرمج المحترف على التفكير بمنطقية، وهي مهارة ضرورية لكل مبرمج، إذ إن الحواسيب والأجهزة الرقمية تعمل بتسلسل ومنطقية شديدة وبالتالي يجب أن يكون المبرمج منطقيًا أثناء التعامل معها، وكذلك تساعد الخوارزميات على تحسين أداء التطبيق وجعله فعالًا. أساسيات الحاسوب: يعد التعرُّف على أساسيات الحاسوب من مكونات وطريقة عمل أمرًا ضروريًا للمبرمج المحترف، إذ يجعلك قادرًا على فهم الآلة مما يؤدي إلى تسهيل التعامل معها وكتابة برامج تتعامل مع موارد الآلة بكفاءة. أساسيات البرمجة: يحظى المبرمج المحترف بتأسيس برمجي سليم وقوي يساعده على التوغُّل في أي مجال كان ، إذ إنَّ أساسيات البرمجة تجمع لك أهم المفاهيم المشتركة بين لغات البرمجة، واستيعاب هذه المفاهيم البرمجية المجردة يجعلك قادرًا على تعلُّم أي لغة برمجة بسهولة فيما بعد. التركيز على مجال برمجي محدد: يختار المبرمج المحترف مجالًا برمجيًا محددًا ليتوغل فيه ويتعلَّم جميع أدواته ومهاراته المطلوبة، بدءًا من لغة البرمجة المفضلة في المجال، مرورًا بإطار العمل المناسب، وصولًا إلى النموذج البرمجي الأمثل لكتابة هذا النوع من البرمجيات، وغيرها من مهارات المجال. هياكل البيانات: يهتم كل مبرمج محترف بفهم هياكل البيانات جيدًا لما لها من أهمية في تحسين استغلال الموارد وفي تحسين الوصول إلى البيانات، كما تساعدك هياكل البياننات على تصميم خوارزميات فعَّالة وقوية. أنماط التصميم: تعد أنماط التصميم Design Patterns مجموعة من الحلول الموضوعة مسبقًا لحل مشكلات برمجية شائعة، وتعلم أنماط التصميم أمر اختياري لكنه يساعد المبرمج على شيفرات منظمة وقابلة للاختبار والصيانة وتتسم بالكفاءة والأمن، ما يجعل شيفراته أكثر احترافية ويوفر عليه الكثير من الوقت والجهد. قواعد البيانات: لا يستغني أي مبرمجٌ عن استخدام قواعد البيانات، وذلك لما لها من أهمية قصوى في تنظيم بيانات التطبيق وتأمينها، وجعل الوصول إليها سهلًا يسيرًا سريعًا، والمبرمج المحترف هو القادر على اختيار نوع قواعد البيانات الأنسب لتطبيقه. الشبكات: تهدف الشبكة إلى تسهيل مشاركة البيانات ومشاركة الموارد، كما تهدف أيضًا إلى تمكين مستخدمي التطبيق من التواصل، وتختلف أهمية تعلُّم الشبكات من مجال إلى آخر، فهي شديدة الأهمية للمبرمج الذي يعمل على برمجة التطبيقات من جانب الخادم، لكنها ليست كذلك للمبرمج المختص في تطوير تطبيقات سطح مكتب تعمل على الحاسوب المحلي مثلًا. واجهة برمجة التطبيقات: تساعد واجهات برمجة التطبيقات Application User Interface أو اختصارًا API على توفير الكثير من وقت وجهد المبرمج،وتمكنه من تضمين مميزات جاهزة للتطبيق دون الحاجة إلى إعادة برمجتها، مثل تضمين الخرائط في تطبيق استئجار سيارات، أو تضمين بوابة دفع في متجر إلكتروني وهي ميزات يحتاجها أي مبرمج محترف في برمجة التطبيقات. أمن المعلومات: لا يخفى على أي مبرمج محترف أهمية تعلُّم مبادئ تأمين الشيفرات، فالتطبيق غير الآمن المُعرَّض للاختراق لن يثق به المستخدمون والعملاء، وبالتالي لن يحقق أهدافه سواءً البيعية أو غيرها، وكذلك سيكون عرضة لمشكلات قضائية إذا ما تسربت بيانات المستخدمين، ولذلك ينبغي على كل مبرمج تعلُّم أساسيات تأمين البيانات والتطبيقات والشبكات. ما أهم الأدوات التي تساعدك لتصبح مبرمجًا محترفًا؟ تعد الأدوات التي تساعد المبرمج على الاحتراف وإتقان البرمجة كثيرة وعديدة، ومنها: بيئات التطوير المتكاملة IDEs. أنظمة التحكم في الإصدارات Version Control Systems. الطرفية أو سطر الأوامر Command Line. أدوات الاختبار وتنقيح الأخطاء Testing and Debugging Tools. أدوات تحديد الأداء Performance Profiling Tools. لنعرف أكثر عن كل أداة واستخدامها وأهميتها. بيئات التطوير المتكاملة IDEs تعد بيئات التطوير Integrated Development Environments أو IDEs اختصارًا تطبيقات برمجية مهيئة لكتابة الشيفرات واختبارها وتنقيح أخطائها، وتكون بيئات التطوير المتكاملة مزودة بخواص مميزة تجعل عمل المبرمج أسهل، مثل: الإكمال التلقائي للشيفرات Auto-Completion، وتظليل صيغ لغة البرمجة Syntax Highlighting، وغيرها من المميزات التي توفر على المبرمج كثيرًا من الوقت والجهد، وتعد بيئة تطوير فيجوال ستوديو Visual Studio أشهر بيئة تطوير في الأوساط البرمجية. نظام تحكم في الإصدارات Version Control System أصبحت أنظمة التحكُّم في الإصدارات جزءًا ضروريًا من عمل كل فريق برمجي، إذ تسمح للمبرمجين بتتبع التحديثات المتتالية لشيفرات البرنامج، كما تسمح باستعادة نسخة محددة من الشيفرات، وكذلك تساعد على تنظيم التعديلات المختلفة لشيفرات البرنامج من كل مبرمج في فريق البرمجة، ويترأس نظام التحكم في الإصدارات جيت Git أنظمة التحكُّم الحديثة. الطرفية أو سطر الأوامر Command Line تعد الطرفية أو واجهة الأوامر من الأدوات المساعدة لأي مبرمج إذ يمكنه من خلالها تنفيذ مهام كثيرة في وقتٍ قصير، فهي تسمح له مثلًا بإنشاء أعدادٍ ضخمة من الملفات بأمر واحد، كما تسمح بتعديل محتوى هذه الملفات، فضلًا عن أهميتها في إدارة الشبكات وإدارة أنظمة التشغيل والوصول إلى عناصر جوهرية لا يمكن الوصول لها عبر الواجهة الرسومية. أدوات الاختبار وتنقيح الأخطاء Testing and Debugging Tools تساعد أدواتُ الاختبار المبرمجَ على استخراج أخطاء الشيفرات وثغراتها ومناقب ضعفها، ثم تساعده أدوات تنقيح الأخطاء على سد هذه الثغرات، وتوفر بيئة تطوير فيجوال ستوديو أداة Visual Studio Debugger لتنقيح أخطاء غالبية لغات البرمجة، كما توفر معظم المتصفحات أدوات تطوير DevTools تساعد مبرمجي الويب في عملية تصحيح الأخطاء البرمجية. أدوات تحليل أداء البرمجيات Performance Profiling Tools يجب اختبار أداء التطبيق كما يجب اختبار أمانه، فالأداء واحدٌ من أهم معايير تجربة المستخدم، وتساعد أدوات تحديد الأداء، مثل: Chrome Performance Tab و Apache JMeter المبرمج المحترف على تحليل أسباب ضعف الأداء وتنقيحها والوصول بالبرنامج إلى أسرع مستوياته. ما أهم ممارسات المبرمج المحترف؟ يتميز أي مبرمج محترف باتباع مجموعة من الممارسات كعاداتٍ دائمة، وتساعده هذه الممارسات على كتابة شيفرات متقنة لا تشوبها شائبة، ومن هذه الممارسات: حل المشكلات: احرص على حل مشكلات برمجية يوميًا، فما البرمجة إلا بضع مشكلات عليك الوصول إلى أفضل حل لها، وتوجد مواقع مختصة للتدرُّب على مهارة حل المشكلات، وأشهرها موقع هاكر رانك HackerRank الذي يوفر مسائلًا برمجيةً لكثيرٍ من لغات البرمجة على مستوياتٍ مختلفة. التفكير المنطقي: اقرأ كتبًا في المنطق، وتعلَّم الخوازميات، وفكِّر بمنطقية وتسلسل، وحُلَّ كثيرًا من الألغاز والأحاجي التي تتطلب تفكيرًا منطقيًا لحلها، فالحاسوب شديد المنطقية وهو ينفذ الشيفرات بالتسلسل واحدة تلو الأخرى، ولا يستطيع تخطي شيفرة بها مشكلة لاستكمال تنفيذ البرنامج، فعليك أن تحاكي بدورك أسلوبه في العمل لكتابة خوارزميات قادرة على حل المشكلات بأفضل هيئة ممكنة. التفكير النقدي: سَل نفسك دائمًا قبل كتابة كل شيفرة؛ لماذا أكتب هذه الشيفرة في هذا المكان بالضبط؟ هل ستؤثر هذه الشيفرة على أداء وأمان التطبيق سلبًا أم إيجابًا؟ يساعدك التفكير النقدي على تجنُّب المشكلات قبل ظهورها، كما يساعدك على حلِّها ما إذا ظهرت، وكذلك يساعدك على تحسين أداء وأمان التطبيق باستمرار. الاختبار وتنقيح الأخطاء: اختبر برنامجك باستمرار، ولا تكتفِ باختبارٍ واحد وإنما اختبره دوريًا، إذ تتكشف لك أخطاءٌ جديدة في كل اختبار، فتعمل على تنقيحها حتى تصل بتطبيقك إلى أفضل مستوى من الأداء والأمان. التطبيق الدائم: طبِّق ما تتعلمه في مشاريع عملية باستمرار، ويمكنك البحث عبر الإنترنت عن أفكار مشاريع مناسبة لمستواك ومعارفك، فالتطبيق الدائم يجعلك قادرًا على استذكار المعارف القديمة وربطها بحديث الدراسة، ويكشف لك عن الاستخدامات العملية للعلم الخام الذي تدرسه. المهارات الناعمة: لا تهمل دور المهارات الناعمة في طريقك لاحتراف البرمجة، وابنِ علاقاتٍ جيدة مع المبرمجين الآخرين، فهذا يوفر لك فرصًا عظيمة للتوظيف، كما يساعدك على تطوير مهاراتك البرمجية ومستواك البرمجي، وهذه العلاقات لن تنجح دون المهارات الناعمة، بدءًا من مهارات تكوين العلاقات، مرورًا بمهارات التواصل، وصولًا إلى مهارات العمل ضمن فريق وغيرها. قواعد كتابة الشيفرات النظيفة: تعلَّم مبادئ وقواعد كتابة الشيفرات النظيفة Clean Codes، وهي الشيفرات سهلة القراءة والاختبار والتنقيح، وتكمُن أهمية مبادئ كتابة الشيفرات النظيفة في توفير وقت وتكاليف صيانة التطبيق، كما تساعدك على تحسين أداء التطبيق وأمانه. التعلُّم المستمر: زِد حصيلتك العلمية يوميًا، فمجال البرمجة يتطور يومًا بعد الآخر، وتزداد مهام المبرمج والمهارات التي عليه تعلُّمها في كل يوم وحتى لو تمكنك من الحصول على وظيفة أو عمل حر بالمهارات التي تمتلكها لا تتوقف عن التعلم والتحصيل المستمر لكل ما هو جديد لتحافظ على الصدارة والتميز. وإذا كنت تبحث عن مصادر تعليمية تساعدك على احتراف البرمجة باللغة العربية، فستجد في أكاديمية حسوب الكثير من المصادر التعليمية الحديثة والموثوقة التي تناسبك سواء كنت مبتدئًا أو محترفًا في البرمجة من دروس ومقالات دورية وتوثيقات مرجعية شاملة وكتب تعليمية ومقاطع فيديو مميزة ودورات تدريبية احترافية لمختلف لغات البرمجة والتخصصات المطلوبة في سوق العمل. الخاتمة تعرفنا في مقال اليوم على مفهوم المبرمج المحترف والفرق بين المبرمج ومهندس البرمجيات، وعرفنا مهارات وأدوات وممارسات المبرمج المحترف، وفي الختام أود أن أنصحك باتخاذ خطوة تعلم البرمجة إذا لم تكن بدأت بها بعد، فتعلم البرمجة يقدم لك مجموعة من الفوائد أهمها تعزيز طريقة تفكيرك المنطقي والإبداعي والوصول إلى أفضل حل للمشكلات في عملك أو حياتك الشخصية كما يساعدك على مجاراة التطور التقني المتسارع، وأخيرًا توفر البرمجة أمانًا وظيفيًا ورواتب مجزية للمبرمج المحترف. اقرأ أيضًا تعلم البرمجة تعلم أساسيات البرمجة للمبتدئين تعرف على وظائف البرمجة الأكثر طلبًا الطريقة الأمثل لدراسة تخصص هندسة البرمجيات مجالات البرمجة1 نقطة
-
"أريد تعلم البرمجة لكنني لا أعرف من أين أبدأ!" هذه هي أكثر عبارة تتردد على سمعي من حديثي العهد بالبرمجة، إذ يأتيني هذا السؤال مرارًا وتكرارًا؛ وفي كل مرة أحاول أن أجيب عنه في سياقه، أجد أنني أضيف معلومات جديدة على إجاباتي السابقة، لذا قررت كتابة هذا المقال بعنوان "تعلم البرمجة" لعله يفيد الراغبين في تعلم تطوير التطبيقات في بدء رحلتهم مع تعلم البرمجة من الصفر. جدول المحتويات حرصًا على تنظيم المقالة ولتسهيل الوصول إلى القسم الذي تريده بسهولة، سنذكر هنا جدول المحتويات باختصار: ما هي البرمجة؟ لماذا تتعلم البرمجة؟ ما عليك معرفته لتصبح مبرمجًا الأدوات اللازمة للبدء في تعلم البرمجة لماذا هناك العديد من لغات البرمجة؟ مفاهيم البرمجة مصادر تعلم البرمجة تطوير واجهات المستخدم تطوير الواجهات الخلفية تعلم تطوير تطبيقات الجوال تطوير الألعاب تطوير الأنظمة المدمجة تطوير تطبيقات سطح المكتب كيفية اختيار لغة البرمجة التي تناسبك نصائح لتعلم البرمجة ما هي البرمجة؟ البرمجة هي عملية تقسيم مهمة معينة يراد تنفيذها عبر الحاسوب إلى أجزاء صغيرة ومترابطة وقابلة للتنفيذ بأوامر بسيطة. بعد ذلك، تجري كتابة هذه الأوامر والتعليمات بإحدى لغات البرمجة، والتي هي وسيلة للتخاطب مع الحاسوب. إليك المثال العملي التالي الذي يشرح ماهية البرمجة: إن كنت تتوقع زيارة صديق لك اليوم، واتصل بك ليقول لك: "أنا واقف بجانب الحديقة ولا أعرف كيف أصل إلى منزلك". أنت عادةً تمر كل يوم من جانب الحديقة وتعرف الطريق بينها وبين منزلك شبرًا بشبر. برأيك هل ينفع إن قلت له: "منزلي معروف وقريب من الحديقة وأنا كل يوم أمر من جانبها"؟ لا، بالتأكيد. تحتاج إلى أن تقسِّم المشكلة إلى أجزاء تمثل خطوات بسيطة يستطيع صديقك فهمها وتنفيذها. مثلًا، أخبره أن ينفذ الأوامر التالية: "سر إلى الأمام عشرة أمتار" ثم "اتجه إلى اليمين" ثم "سر إلى نهاية الشارع" ثم "اتجه إلى اليسار". أخبره بعد ذلك: "عُدَّ الأبنية الموجودة على اليسار حتى تصل إلى البناء الرابع" ثم "اصعد إلى الطابق الثاني" ثم "اطرق على الباب الذي سيظهر أمامك". مبارك! بهذه الطريقة، تستطيع أن تدل صديقك على منزلك بدقة. البرمجة هي الشيء نفسه تمامًا. فهل ترى التعابير المكتوبة بين علامتي الاقتباس؟ إنها التعابير التي تكتب بإحدى لغات البرمجة والتي تخاطب الحاسوب بدلًا من صديقك السابق. لغات البرمجة هي مجموعة من المفردات والقواعد اللغوية التي تشكل لغةً وسيطةً للتخاطب مع الحاسوب وأمره بتنفيذ تعليمات وأشياء محدَّدة. فلا الحاسوب يفهم لغة البشر ولا البشر يفهمون لغة الحاسوب، لذا كان هنالك حاجة ملحة لوجود لغة وسيطة يفهمها كلاهما؛ نتيجةً لذلك، انبثق مفهوم لغة البرمجة. بعبارة أخرى، لو أردنا أن نقول للحاسوب "افعل كذا"، فسنحتاج إلى لغةٍ مشتركةٍ بيننا وبينه ليفهم ما نبتغيه، وهنا يأتي دور لغات البرمجة، إذ يمكنك أن تعدّ لغات البرمجة على أنها وسيط بين المبرمج والحاسوب. يهتم المبرمج بالتفكير في تسلسل الخطوات التي على الحاسوب القيام بها لإتمام العمل المطلوب منه (مثل حساب العمر اعتمادًا على تاريخ الولادة)، ثم كتابة هذه الخطوات بترتيب منطقي بإحدى لغات البرمجة. ربما لاحظتَ في الجملة السابقة أن جزءًا من مهمة المبرمج هو التفكير المنطقي، وهذا يجعلنا ننتقل إلى السؤال الشائع "هل أستطيع تعلم البرمجة وأصبح مبرمجًا؟" أو "هل أنا مؤهل لأصبح مبرمجًا؟". لماذا تتعلم البرمجة؟ يبدو أن تعلم البرمجة من الصفر ليس بالصعوبة التي توقعتها، لكنك تريد حافزًا يجعلك تتعلم البرمجة. تسمع كثيرًا أن البرمجة هي مجال المستقبل، وأن وظائف المبرمجين ستكتسح مجال التوظيف في السنوات القادمة؟ أستطيع أن أؤكد لك ذلك، كما أنَّ وظائف البرمجة هي من أعلى الوظائف دخلًا. فلو كنت تريد بدء مشوارك الاحترافي وتريد عملًا مستقرًا وذا دخلٍ ممتاز، فإن تعلم البرمجة والعمل بها هو أفضل خيارٍ أمامك. وظائف البرمجة مريحة عمومًا، فالعمل كله مكتبي أمام حاسوب في بيئة مريحة ومناسبة، وأغلبية الشركات تتبع نظام العمل 40 ساعة في الأسبوع (أي 5 أيام لمدة 8 ساعات يوميًا)، ولا تغفل عن قدرتك على العمل عن بعد من خلال الانترنت أو كمستقل في أوقات فراغك. تعلم البرمجة سيوسع أفق تفكيرك كثيرًا، خصوصًا أن تعاملك مع الحاسوب يتبع إلى التفكير المنطقي، وستجد أن البرمجة ستسهل لك القيام بأمور أخرى في الحاسوب. ما عليك معرفته لتصبح مبرمجًا يتردد الكثيرون في تعلم البرمجة متذرعين بأن مستواهم في الرياضيات ليس ممتازًا، وهذا ليس صحيحًا، فصحيحٌ أنَّ هنالك أمور تعترضك أثناء أداء عملك كمبرمج تتطلب خبرة في الرياضيات، إلا أنَّه قد تمر عليك فترات طويلة لا تحتاج فيها إلى مسائل رياضية. كل ما يلزمك للبدء في تعلم البرمجة هو الأساسيات التي يعرفها الجميع. إلى حين اعتراضك أية مسألة أو مشكلة تتطلب مهارة في الرياضيات، هنالك الكثير من المصادر والمراجع التي تستطيع الرجوع إليها آنذاك. بعبارة أخرى، أجِّل هذا الأمر قليلًا ولا تخف. الأهم من ذلك هو أن تكون قادرًا على التفكير بشكل منطقي. التفكير المنطقي التفكير المنطقي هو المهارة التي تجمع كافة المبرمجين تحت مظلة واحدة، وهي أساس كتابة الخوارزميات، إذ يجب أن تكون قادرًا على اكتساب هذه المهارة وتطويرها. الخوارزميات كلمة "الخوارزميات" هي الكلمة المرعبة التي ينفر منها البعض، فكل ما يتخيلونه عند ذكرها هو الرياضيات المعقدة والمعادلات الطويلة والرموز العجيبة، لكن الأمر بسيط جدًا؛ فالخوازرميات هي تطبيقٌ للتفكير المنطقي في خطوات متسلسلة واضحة تمامًا لحل مشكلة ما. لكي أوضِّح لك أن الخوارزميات ليست أمرًا معقدًا، سأخبرك بكيفية كتابة برنامج يسأل المستخدم عن سنة ميلاده، ثم يعيد عمره الحالي بالسنوات. الخطوة الأولى: إظهار رسالة نصية نطلب فيها من المستخدم إدخال تاريخ ميلاده. الخطوة الثانية: تخزين سنة الميلاد التي أدخلها المستخدم. الخطوة الثالثة: الحصول على السنة الحالية. الخطوة الرابعة: طرح مدخلات المستخدم من السنة الحالية. الخطوة الخامسة والأخيرة: إظهار الناتج. ما سبق هو خوارزمية بسيطة تتألف من خطوات متسلسلة، لكن إذا أمعنّا النظر فيها سنجد خللًا في حال أدخل المستخدم تاريخًا أكبر من التاريخ الحالي، أي لو أدخل 2050 مثلًا بدلًا من 1995. عندها سيصبح العمر المعاد من الخوارزمية سالبًا، ويمكننا أن نحل هذه الإشكالية منطقيًا بوضع شرط يمنع المستخدم من إدخال تاريخ أكبر من التاريخ الحالي. إطارات العمل كلمة أخرى شائعة جدًا في عالم البرمجة هي "إطارات العمل" frameworks، إطارات العمل هي مجموعة من الشيفرات البرمجية التي تسهل على المبرمج إنشاء التطبيقات، بتوفير وحدات جاهزة تقدم خدمات متنوعة مثل تسجيل المستخدمين، وإرسال البريد الإلكتروني، والتعامل مع قواعد البيانات. أي يمكنك أن تعدّها أدوات برمجية تساعدك في برمجة تطبيقك وتسهِّل لك فعل ذلك. الأدوات اللازمة للبدء في تعلم البرمجة تحتاج إلى حاسوبٍ بمواصفات جيدة (ليس من الضروري أن يكون من أفضل الحواسيب، وإنما أن يمتلك مقدارًا جيدًا من الذاكرة العشوائية). لا ننصح بمواصفات معينة أو نظام تشغيل معين، استعمل ما يحلو لك وما ترى نفسك معتادًا عليه (سواءً كان ويندوز أو لينكس أو ماك). ستحتاج أيضًا إلى اتصالٍ جيد بالإنترنت للوصول إلى المواد التعليمية، ولتنزيل البرمجيات والمكتبات اللازمة للتطوير. أما بخصوص أدوات التطوير، فستحتاج إلى برمجية لكتابة الشيفرات، وهنالك نوعان رئيسيان لها: المحررات النصية: مثل Visual Studio Code أو Atom أو Sublime Text أو Bracktes أو Notepad++. وهذه المحررات النصية تكون بسيطة في أغلبها، وتوفر ميزات أساسية مثل تلوين الشيفرات، وبعض ميزات الإكمال التلقائي، وتدعم أغلبيتها إضافات لزيادة وظائفها. وظيفة هذه المحررات النصية عمومًا هي تعديل الشيفرات بسهولة وسرعة. ننصحك بتجربة Visual Studio Code لشهرته حاليًا وكثرة إضافاته ودعمه الممتاز من شركة Microsoft. بيئات التطوير المدمجة: مثل Visual Studio و Eclipse و Android Studio و NetBeans و Apple Xcode وغيرها. وهذه البيئات توفر ميزات أكثر بكثير من المحررات النصية، مثل تشغيل الشيفرات وتنقيحها (debugging) وميزات التحكم بالإصدارات (version control) والاتصال بقواعد البيانات وخلاف ذلك. لماذا هناك العديد من لغات البرمجة؟ قد تتساءل، لماذا هناك العديد من لغات البرمجة؟ أليست هذه اللغات كلها تنفذ الهدف ذاته؟ لماذا لا يكون هنالك لغة موحدة بين المبرمجين والحاسوب؟ الحقيقة أنّه توجد لغة برمجة واحدة ولكن ليست إحدى اللغات التي تراها أمامك في الصورة. اللغة التي نشير إليها هي لغة الآلة التي يستطيع معالج الحاسوب قراءتها وفهمها. أتتساءل ما هي لغة الآلة وكيف تبدو؟ إليك مقطعًا منها: معلومٌ أنّ معالج الحاسوب لا يفهم شيئًا سوى الأصفار والواحدات، وهذه اللغة -أي لغة الآلة- هي تمثيل للأصفار والواحدات بطريقة تخبر الحاسوب بما يجب عليه فعله. الجدير بالذكر أن هذه اللغة عصية الفهم على البشر، وحتى إن استطعت كتابة شيفرة مثل الشيفرة الموضحة بالصورة (كما في السنوات الأولى من بداية اختراع الحاسوب)، لن يفهمها الآخرون ولن يستطيع أحد التعديل على الشيفرة وتطويرها لاحقًا باستثنائك. سعيًا لإيجاد لغة قريبة من لغة البشر، انقسمت لغات البرمجية إلى قسمين: لغات البرمجة منخفضة المستوى، ولغات البرمجة عالية المستوى وذلك تبعًا لمدى قربها من لغة الآلة أو لغة البشر على التوالي. أي أنّ لغات البرمجة منخفضة المستوى هي اللغات الأقرب للغة الآلة آنفة الذكر مثل لغة التجميع Assembly language، ولغات البرمجة عالية المستوى هي اللغات الأقرب للغة البشر مثل لغة بايثون وجافا. تنفيذ البرامج المكتوبة بلغات برمجة عالية المستوى يقودنا الحديث عن اللغات عالية المستوى واللغات منخفضة المستوى إلى الحديث عن كيفية تنفيذ المعالج للشيفرة المكتوبة بلغة عالية المستوى لا يفهمها المعالج (أليس هذا ما تفكر به الآن؟). عرفنا أن المعالج يفهم الأوامر والتعليمات المكتوبة بلغة منخفضة المستوى (لغة الآلة)، فمَثَلُ هذه العملية كمَثَلِ شخصٍ أجنبي تعلم اللغة العربية وبدأ التحدث مع ناطقٍ باللغة العربية، إذ يمكن لهما التواصل مباشرةً - ليخبر كل منها ما يريد من الآخر فعله - دون وسيط. أمَّا مَثَلُ كتابة برنامج بلغة عالية المستوى أقرب إلى لغة البشر والطلب من الحاسوب تنفيذه كمثل ناطق باللغة الهندية يريد التخاطب مع ناطق باللغة العربية دون أن يفقه أحدهما لغة الآخر. في هذه الحالة، لن يستطيع أحدهما فهم ما يتكلم به الآخر وستفشل عملية التواصل. قد تقول: لماذا لا يحضران مترجمًا يترجم ما يقوله كل منها للآخر؟ حسنًا، هذا ما يحصل تمامًا عندما يراد تنفيذ برنامج بلغة لا يفهمها معالج الحاسوب. في اللغات البشرية، هنالك نوع واحد من المترجمين يعرفه الجميع للترجمة من لغة إلى آخرى؛ أما في لغات البرمجة، هنالك نوعان من المترجمين بين اللغات هما: المفسر interpreter، والمترجم compiler. بناءً على ذلك، تنقسم لغات البرمجة إلى لغات مفسرة ولغات مترجمة. (من الآن وصاعدًا، كلما ذكرنا لغات البرمجة، فنحن نشير إلى لغات البرمجة عالية المستوى.) -المفسر (interpreter): وهو برنامج خاصٌ يفسِّر الشيفرة المصدرية لبرنامج مكتوب بلغة عالية المستوى سطرًا بسطر ويحولها إلى لغة منخفضة المستوى لينفذها الحاسوب مباشرةً. -المترجم (compiler): وهو برنامج خاصٌ يحوِّل الملفات المصدرية لبرنامج مكتوب بلغة عالية المستوى إلى ملف تنفيذي مكتوب بلغة الآلة دفعةً واحدةً، ثم يمكن تشغيل الملف التنفيذي على الحاسوب للقيام بالمهمة المطلوبة. لماذا يوجد الكثير من لغات البرمجة عالية المستوى؟ الآن وبعد أن عرفت الفرق بين لغة الآلة ولغة البشر، لربّما ما زلت تتساءل عن كثرة اللغات البرمجية عالية المستوى المتوافرة وعدم وجود لغة واحدة. نستطيع القول أنك خطوت خطوةً جيدةً للأمام إذ أصبحت الآن أكثر دقة. جواب سؤلك هو أنّ كل لغات البرمجة تُستخدم لتحويل فكرة منطقية إلى سلسلة أوامر يمكن للحاسوب أن ينفذها. فعلى سبيل المثال لا الحصر يمكنك استخدام أي من Ruby أو Java أو Python أو C# أو Go أو JavaScript لبناء موقع ويب. لكن يمكنك أن تعدّ لغات البرمجة على أنها أدوات، وكل أداة تسهّل مهمة دونًا عن أخرى. فعلى سبيل المثال، السيارة والحافلة والدراجة والمحراث الزراعي كلها وسائط نقل، لكنها مختلفة الاستخدام؛ فلا يمكنك أن تذهب وعائلتك لقضاء إجازة صيفية مستخدمين المحراث الزراعي، كما لا يمكنك استخدام سيارة سباق في مدينة مكتظة ذات شوارع ضيقة للذهاب بها إلى العمل. مع أن آلية عمل هذه المركبات متشابهة. والأمر سيانٌ بالنسبة إلى البرمجة. خلاصة القول أنّ هنالك لغات برمجة متخصصة بإنشاء تطبيقات سطح المكتب، وأخرى متخصصة بإنشاء تطبيقات الجوال، وأخرى تستعمل خصيصًا لمواقع الويب، وأخرى لبرمجة العتاد، وهذا ما يحيلنا إلى الحديث عن مجالات البرمجة واللغات الأنسب لكلٍ منها. مفاهيم البرمجة "حسنًا، اقتنعتُ أن البرمجة مناسبة لي وليست صعبة كما كنتُ أتخيل، من أين أبدأ طريقي في تعلم البرمجة إذًا؟" قبل الإجابة عن السؤال السابق، سآخذ وقتي لأشرح لك بعض المفاهيم الخاصة بالبرمجة، ثم سنتحدث عن مجالات العمل فيها وما المسار الأفضل لتعلمك كلًا منها. أنت تعلم أن البرنامج هو سلسلة أوامر ينفذها الحاسوب لحل مشكلة ما، والبرنامج نفسه مكتوب بلغة يفهمها الحاسوب تسمى لغة الآلة. من الأمور الملحوظة التركيز كثيرًا على لغة البرمجة ذاتها أثناء بداية تعلم البرمجة. سأخبرك حقيقةً صادمةً: "لغة البرمجة التي تستعملها ليست بتلك الأهمية التي تتوقعها"، أنا لا أقول لك أن جميع لغات البرمجة متماثلة أو تُستعمل لنفس الاستعمالات، لكن لا تركِّز كثيرًا على تعلم كيفية الكتابة في لغة برمجة ما وتهمل المفاهيم البرمجية التي تقف وراءها. المتغيرات والثوابت عليك أن تتعرف على مفهوم المتغيرات variables المستعمل في جميع لغات البرمجة، والذي يعني إسناد قيمة ما إلى رمز أو كلمة وتخزين هذه القيمة في الذاكرة. فلو أردنا أن نخزن العبارة "Hello World" في متغير ما فنكتب شيئًا شبيهًا بما يلي: var variable_name = "Hello World"; أي أننا نسند الجزء الموجود على يمين إشارة المساواة إلى المتغير المذكور على يسار إشارة المساواة. يمكننا أن نستنتج من اسم "المتغيرات" أن قيمتها قابلة للتغيير خلال تنفيذ البرنامج، فيمكننا في مكانٍ ما من الملف المصدري أن نعيد تعريف المتغير السابق بكتابة: var variable_name = "New value"; أما الثوابت فهي تتشابه مع المتغيرات في كثيرٍ من النواحي، إلا أنك لا تستطيع إعادة تعريف قيمتها بعد تعريفها أول مرة. قد تستفيد من الثوابت عندما تكون متأكدًا تمامًا من عدم تغيير القيمة خلال فترة تنفيذ البرنامج. فلو أردنا تعريف ثابت اسمه pi يحتوي على القيمة 3.14 (والتي سنعرف أنها لن تتغير مطلقًا)، فيمكننا أن نكتب: const pi = 3.14; وإذا حاولتَ تغيير قيمة الثابت بعد تعريفه فستحصل على رسالة خطأ. الشروط تدعم جميع لغات البرمجة تعريف شروط تُنفَّذ في حالات معينة. ففي الخوازرمية السابقة التي شرحنا فيها حساب العمر، يمكننا أن نكتب الشرط بالعربية كما يلي: إذا كان (تاريخ الميلاد أكبر من التاريخ الحالي): نقول للمستخدم أن هنالك خطأ وإلا: سنحسب العمر بطرح تاريخ الميلاد من التاريخ الحالي وإذا أردنا كتابتها بإحدى لغات البرمجة فستبدو شبيهةً بما يلي: if ( user_birth > current_year ) { // ERROR! } else { age = current_year - user_birth; } لا تلقِ للأقواس بالًا، فهي جزء من لغة البرمجة، وقد تختلف من لغة لأخرى، وليست موضع اهتمامنا حاليًا. حلقات التكرار ماذا لو كانت لدينا قاعدة بيانات فيها أكثر من مستخدم ولكل مستخدم تاريخ ميلاد. لا تقل لي سنأخذ التواريخ يدويًا وندخلها إلى البرنامج! هذا مضيعةٌ للوقت، والصواب هو إنشاء حلقة تكرار تأخذ قيمة تاريخ الميلاد الخاص بكل مستخدم ثم تحسب عمره كما أسلفنا في القسم السابق. دعنا نعدل الخوارزمية البسيطة لنضيف تكرارًا فيها: ما أجمل البرمجة! تخيل لو كان عندك ألف مستخدم، وكان عليك حساب أعمارهم، يمكنك بضغطة زر أن تحسبها كلها. الدوال الدالة function هي مجموعة من التعليمات البرمجية التي تقبل مدخلات وتعيد القيمة المطلوبة. تكون الدوال عادةً قصيرةً وتقوم بمهمة وحيدة فقط. فمثلًا لو أردنا تعريف دالة باسم divide تقبل عددين، وتعيد ناتج قسمة العدد الكبير على الصغير، فيمكننا أن نكتب الخورزمية الآتية: مصادر تعلم البرمجة للمبتدئين أول ما سيتبادر إلى ذهنك بعد قرارك تعلم البرمجة هو من أين سأتعلم؟ هنا يأتي دور القسم التعليمي المتكامل في حسوب ليقدم للمبتدئ (والمحترف على حدٍ سواء) محتوى علمي مميز ومبسط. تزخر أكاديمية حسوب بالمحتوى المفيد عن تعلم البرمجة للمبتدئين وحتى الخبراء أي على كافة المستويات، ستجد فيها أقسامًا تشرح لغات البرمجة وتقنياتها كلها. ولدينا قسم للأسئلة البرمجية التي يمكنك أن تطرح فيه سؤالك وسيجيب عليه أحد أفراد مجتمع أكاديمية حسوب. أضف إلى ذلك أن الأكاديمية توفر قسمًا للدورات المتخصصة التي تبدأ معك من الصفر وحتى احتراف لغة البرمجة التي تريد تعلمها مع كادر من المدربين المختصين الذي يقدمون لك المساعدة ويجيبون عن جميع استفساراتك. وهنالك قناة للأكاديمية على يوتيوب ننشر فيها دوريًا دروسًا قصيرةً عن تساؤلات محددة ومفاهيم البرمجة وخلافه. لا تنسَ الاشتراك في قناة الأكاديمية لتصلك الفيديوهات الجديدة. ماذا لو أردتَ التعمق أكثر في لغة معيّنة؟ تأتي هنا موسوعة حسوب التي توفِّر توثيقًا عربيًا كاملًا وعالي الجودة، مدعّمًا بالأمثلة لمختلف لغات البرمجة وتقنيات تطوير الويب والجوال. ستكون الموسوعة مرجعًا تعود إليه في مسيرتك البرمجية، وتستعين بها لمعرفة التفاصيل الدقيقة عن لغات البرمجة. فأنت لست مضطرًا لحفظ كل شيء في لغة البرمجة، إذ حتى المبرمجون المختصون ذوو الخبرة يعودون إلى التوثيقات بين الفينة والأخرى أثناء عملهم. لننطلق الآن للتحدث عن مجالات البرمجة الأساسية وما اللغات والتقنيات المستعملة فيها. تطوير واجهات المستخدم يبدأ أغلبية المطورين مشوارهم من خلال تعلم تطوير واجهات المستخدم عند اتخاذ قرارهم لدخول مجال تطوير وبرمجة مواقع الويب، وذلك لسهولة اللغات المستعملة في هذا المجال. هدف هذا المجال هو تطوير صفحات الويب التي تعرض محتوى مختلف مواقع الويب، وهي الصفحات التي تراها عند زيارتك لموقع أكاديمية حسوب أو موسوعة حسوب أو مستقل أو أي موقع آخر. تتألف صفحة الويب من مجموعة من المكونات، وتُكتَب هذه المكونات باستخدام لغة HTML، وبعد كتابة البنية الهيكلية للصفحة سنأتي على تنسيقها باستخدام لغة CSS، وهي اللغة المستعملة لإضفاء شكل وهيئة على عناصر HTML. أي أن عناصر HTML تصف محتوى الصفحة (مثل الترويسات والقوائم والمحتوى الرئيسي والفقرات والروابط والصور والفيدوهات)، وقواعد CSS تُعرِّف كيف يجب أن تبدو هذه العناصر (سواءً من ناحية الألوان أو المساحات أو الخلفيات أو الخطوط أو خلاف ذلك). تأتي لغة JavaScript مكملةً لهما وتستعمل لإعطاء بعض عناصر الصفحة صفاتٍ تفاعلية، مثل شريط متحرك من الصور أو قوائم تظهر عند وقوع حدث معيّن …إلخ. هنالك تقنيات كثيرة تستعمل في تسهيل إنشاء الواجهات الأمامية وسنذكر بعضها: إطار Bootstrap لتسهيل تنسيق عناصر الصفحة. مكتبة jQuery لتسهيل التعامل مع عناصر الصفحة باستخدام JavaScript. مكتبة React JS: لتسهيل تطوير واجهات المستخدم بالاعتماد على مكونات قابلة لإعادة الاستخدام. لغة Sass لإنشاء ملفات CSS بسرعة وسلاسة. أدوات بناء مثل Webpack الذي يسهِّل تحويل الملفات المصدرية للتطبيق إلى النسخة النهائية التي ستعرَض للمستخدم. لتعلم تطوير واجهات المستخدم، ننصحك بالتسجيل في دورة تطوير واجهات المستخدم المقدمة من أكاديمية حسوب، والتي تحتوي على أكثر من 72 ساعة فيديو تتوزع على ثمانية مسارات تعليمية تشرح أمثلة عملية تطبيقية شرحًا مفصلًا. أثناء مشاهدتك للدورة، يمكنك أن تعود إلى موسوعة حسوب لتتعرف على توثيق لغات البرمجة المذكورة، وذلك للاطلاع على تفاصيل وأمثلة أكثر عن كل جزئية من الجزئيات المشروحة في دورة تطوير واجهات المستخدم. اللغات والتقنيات المستخدمة في تطوير واجهات المستخدم: HTML و CSS و JavaScript و Bootstrap و Sass و jQuery و Webpack. تطوير الواجهات الخلفية قد تتساءل: ماذا يعني تطوير الواجهات الخلفية (backend)؟ وما الفرق بينه وبين تطوير واجهات المستخدم (frontend)؟ الفرق بينهما هو أن الواجهات الخلفية هي البرمجيات التي تُنفَّذ على الخوادم وتجري عمليات عليها مثل التعامل مع قواعد البيانات والملفات والخدمات الخارجية، أما واجهات المستخدم فهي الصفحات التي تظهر على شاشة الزائر في متصفحه. سأطرح عليك الخيارات المتاحة أمامك للبدء في مجال تطوير الواجهات الخلفية، وجميع اللغات المذكورة هنا هي لغات ناجحة وقوية ولا يهم أي لغة تختار منها، المهم أن تتطلع على شيفرات بسيطة من كل لغة وتتخذ قرار تعلمها، واحذر من تضييع وقتك في التنقل بين لغات البرمجة والبحث عن أفضلها، فكلُ لغةٍ ممتازةٌ في مجالها. تعلم البرمجة باستخدام لغة PHP بعد تبيان الفرق بين واجهات المستخدم والواجهات الخلفية، يمكن القول بأن أشهر لغة لتطوير الواجهات الخلفية هي لغة PHP، وتتفوق على اللغات المنافسة لها أضعافًا مضاعفة. تعلم البرمجة بلغة PHP أمر سلس، فهي لغة سهلة التعلم وبسيطة الشكل، والمجتمع حولها كبير وتطويرها مستمر. هذه اللغة هي خيار استراتيجي لمن يريد الدخول إلى مجال تطوير الواجهات الخلفية. هنالك عدد من البرمجيات المكتوبة بلغة PHP مثل ووردبريس WordPress ودروبال Drupal وميدياويكي MediaWiki (التي تشغِّل ويكيبيديا وموسوعة حسوب) وغيرها الكثير؛ إضافةً إلى عددٍ كبير من إطارات العمل مثل Laravel و CodeIgniter و Symfony و CakePHP و Yii وغيرها، وهذا ما يدل على إمكانيات اللغة الكبيرة والمجتمع الكبير الذي يحيط بها. لتعلم تطوير الواجهات الخلفية باستخدام PHP، ننصحك بالتسجيل في دورة تطوير تطبيقات الويب باستخدام PHP المقدمة من أكاديمية حسوب، والتي تحتوي على 75 ساعة فيديو تتوزع على اثني عشر مسارًا تعليميًا تبدأ بأساسيات لغة البرمجة PHP للمبتدئين، مرورًا بشرح أمثلة عملية تطبيقية بالتفصيل، ووصولًا لتطوير التطبيقات باستخدام إطار العمل Laravel، وشرح تطوير ووردبريس. أثناء مشاهدتك للدورة، يمكنك أن تعود إلى موسوعة حسوب للاطلاع على توثيق لغة PHP وإطار العمل Laravel. اللغات والتقنيات المستخدمة في تطوير تطبيقات الويب باستخدام PHP هي: PHP و Laravel وقواعد البيانات (مثل MySQL و PostgreSQL وغيرها). تعلم البرمجة باستخدام لغة روبي - Ruby إذا كنتَ تبحث عن لغةٍ أنيقة وسهلة الاستعمال فستجد ضالتك في لغة روبي Ruby فهي من أجمل اللغات وأسلسها كتابةً، وهي لغة برمجة عامة يمكن استخدامها لتطوير مختلف أنواع التطبيقات ومن ضمنها تطوير تطبيقات الويب. ذاع صيت روبي في تطوير الويب بعد نشر إطار العمل Ruby on Rails (يشار إليه اختصارًا "ريلز"). هنالك إطارات عمل أخرى مثل سيناترا Sinatra لكن يبقى ريلز أشهرها. لتعلم تطوير الواجهات الخلفية باستخدام روبي، ننصحك بالتسجيل في دورة تطوير تطبيقات الويب باستخدام روبي المقدمة من أكاديمية حسوب، والتي تحتوي على 20 ساعة فيديو تتوزع على أربعة مسارات تعليمية تشرح أمثلة عملية تطبيقية شرحًا مفصلًا، وتشرح تطوير التطبيقات باستخدام إطار العمل ريلز. أثناء مشاهدتك للدورة، يمكنك أن تعود إلى موسوعة حسوب للاطلاع على توثيق لغة روبي وإطار العمل ريلز. اللغات والتقنيات المستخدمة في تطوير تطبيقات الويب باستخدام روبي: روبي و ريلز وقواعد البيانات (مثل MySQL و PostgreSQL وغيرها). تعلم البرمجة باستخدام لغة جافا سكربت - JavaScript نعم! تستعمل JavaScript في تطوير الواجهات الخلفية أيضًا. الفضل يعود لبيئة Node.js التي تسمح للمطورين باستخدام JavaScript لكتابة برمجيات تعمل من جهة الخادم وذلك لتوليد صفحات ويب ديناميكية قبل إرسالها إلى المتصفح، وتستطيع Node.js التعامل مع الملفات وقواعد البيانات ومختلف أنظمة الشبكات وخدمات أنظمة التشغيل. هل يوجد أجمل من استخدام نفس اللغة لبرمجة الواجهات الأمامية لمواقع الويب والواجهات الخلفية؟ وكل ذلك باستخدام لغة سهلة التعلم والاستعمال ومدعومة دعمًا ممتازًا من المجتمع. تعلم لغة JavaScript لتطوير الواجهات الخلفية من خلال التسجيل في دورة تطوير التطبيقات باستخدام JavaScript المقدمة من أكاديمية حسوب، والتي تحتوي على 69ساعة فيديو تتوزع على أحد عشرمسارًا تعليميًّا تشرح أمثلة عملية تطبيقية شرحًا مفصلًا، وتشرح تطوير الواجهة الخلفية باستخدام Node.js. أثناء مشاهدتك للدورة، يمكنك أن تعود إلى موسوعة حسوب للاطلاع على توثيق لغة JavaScript وبيئة العمل Node.js. اللغات والتقنيات المستخدمة في تطوير تطبيقات الويب باستخدام JavaScript: لغة JavaScript وبيئة Node.js وإطار العمل Express.js وقواعد البيانات (مثل MongoDB و MySQL و PostgreSQL وGraphQL وغيرها). تعلم البرمجة باستخدام لغة بايثون - Python لغة بايثون متعددة الاستعمالات، ويمكن عدّها على أنها أسهل لغة برمجة على الإطلاق، إذ تبدو شيفرتها البرمجية كأنها مقالة مكتوبة باللغة الإنكليزية. إذا أردتَ لغةً سهلةً ومدعومةً دعمًا ممتازًا ولها أطر عمل كثيرة فأنت تبحث عن لغة بايثون. الخيارات المتاحة أمامك هي إطار العمل جانغو (Django) وفلاسك (Flask) وغيرها، يمكنك تعلم لغة البرمجة بايثون لتطوير الواجهات الخلفية من خلال قراءة سلاسل المقالات عن تعلم بايثون في قسم البرمجة في أكاديمية حسوب، ثم الانتقال إلى تعلم إطار العمل جانغو أو فلاسك. يمكنك أن تعود إلى موسوعة حسوب للاطلاع على توثيق لغة بايثون. تعلم لغة بايثون لتطوير الواجهات الخلفية من خلال التسجيل في دورة تطوير التطبيقات باستخدام Python المقدمة من أكاديمية حسوب، والتي تحتوي على 69 ساعة فيديو تتوزع على عشرةمسارات تعليمية تشرح أساسيات لغة بايثون للمبتدئين، ثم تطبق عمليًا بأمثلة واقعية، وتشرح إطار العمل جانغو Django وفلاسك Flask. اللغات والتقنيات المستخدمة في تطوير تطبيقات الويب باستخدام بايثون: لغة بايثون وإطارات العمل المبنية عليها (مثل جانغو وفلاسك) وقواعد البيانات (مثل MySQL و PostgreSQL وغيرها). تعلم تطوير تطبيقات الجوال ازداد عدد تطبيقات الجوال لأنظمة أندرويد و iOS ازديادًا كبيرًا في الفترة الماضية، وأصبح لكل شركة أو خدمة تطبيق خاص بها يسهِّل على مستخدميها الوصول إلى الخدمات التي توفرها. النظامان الرئيسيان المسيطران على سوق الجوال حاليًا هما أندرويد ثم iOS. يمكن برمجة تطبيقات أندرويد بلغة Java أو Kotlin (أو غيرهما) وبرمجة تطبيقات iOS باستخدام Swift (وغيرها). ستكتشف أنَّ عليك تطوير تطبيقين منفصلين تمامًا، واحد لهواتف أندرويد وآخر لهواتف iOS، وذلك يسبب زيادةً في حجم العمل المطلوب وصعوبةً في إدارة التغييرات. بسبب ذلك، ظهر مفهوم "التطبيقات متعددة المنصات"، وهي تطبيقات تعمل على نظام أندرويد و iOS دون أي تعديلات، وذلك باستخدام تقنيات مشتركة وهي في الغالب تقنيات الويب. أي أصبح بإمكان مطوري الويب الاستفادة من معلوماتهم في تطوير تطبيقات الجوال باستخدام منصات مثل آيونيك Ionic. تسمح آيونيك Ionic للمبرمجين بالتعامل مع مختلف وظائف الجهاز باستخدام لغة JavaScript، مثل الوصول إلى الموقع الجغرافي، والتقاط صور بالكاميرا، والتعامل مع الملفات وخلاف ذلك. طوِّرت في الفترة الماضية تقنيات أخرى مبنية على JavaScript مثل React Native المبنية على مكتبة React.js والتي تسمح للمطورين بكتابة تطبيقات أصيلة باستخدام تقنيات الويب. تستطيع تعلم تطوير تطبيقات الجوال عبر Ionic وعبر React Native من خلال التسجيل في دورة تطوير التطبيقات باستخدام لغة JavaScript المقدمة من أكاديمية حسوب، والتي تحتوي على 69 ساعة فيديو تشرح أمثلة عملية تطبيقية شرحًا مفصلًا. وكالعادة يمكنك أثناء مشاهدتك للدورة أن تعود إلى موسوعة حسوب للاطلاع على التوثيقات اللازمة. اللغات والتقنيات المستخدمة في تطوير تطبيقات الجوال: Java و Swift و Kotlin و Ionic و React Native وغيرها. تطوير الألعاب تطوير الألعاب هو المجال الذي يحلم جميع مستخدمي الحاسوب بالدخول إليه. فالأغلبية تعرفوا على الحاسوب من خلال ألعاب الفيديو ومن ثم بدؤوا برحلة الاستكشاف عن البرمجة والتطوير. أغلب من يجيب عن تطوير الألعاب يقول "عليك بتعلم لغة C++" لكن دعني أفصِّل لك الأمر قليلًا. برمجة الألعاب تتطلب عملًا كثيرًا من فريق عمل كبير، مدعوم من شركة تجارية. من الصعب على مطوِّر وحيد أن ينشئ لعبة كاملة من الصفر دون فريق. تُطور أغلبية الألعاب باستخدام محرِّك ألعاب Game Engine والذي يسهِّل الأمر على المطورين ويتيح بيئة تطوير مناسبة للألعاب، ويتيح الميزات الأساسية لجميع الألعاب مثل التحكم بالكاميرا ونمذجة الشخصيات ثلاثية الأبعاد وتحريكها والأمور الفيزيائية الأخرى. هنالك عدد كبير من محركات تطوير الألعاب، ومن المرجح أنك شاهدت شعارها في الألعاب التي لعبتها من قبل، ومن أشهرها: Unreal Engine و Unity و Godot. يمكن التعامل مع هذه المحركات باستخدام عدِّة لغات، مثل C++ (وهي أشهرها)، وجافا (خصوصًا للألعاب على هواتف أندرويد) وحتى يمكن استخدام JavaScript في التعامل مع بعضها. تذكر أنّ الألعاب غير محدودة بتطبيقات سطح المكتب أو الهواتف، فهنالك ألعاب كثيرة تعمل على المتصفحات باستخدام تقنيات HTML5 و JavaScript. اللغات والتقنيات المستخدمة في تطوير الألعاب: C++ و Java و JavaScript ومحركات Unity و Unreal Engine و Godot. برمجة الذكاء الاصطناعي يُعد الذكاء الاصطناعي (AI) من المجالات الرائدة والمطلوبة بكثرة في سوق العمل اليوم، لاسيما بعد أن أصبحت تطبيقاته في متناول الجميع وبات يستخدم في العديد من المجالات فتعلمك لهذا المجال الرائد يعزز قدراتك كمبرمج ويساعد على تعزيز تطبيقاتك بقدرات الذكاء الاصطناعي القوية. يتفرع الذكاء الاصطناعي لعدة مجالات من أبرزها تعلم الآلة والتعلم العميق التي تُمكّن الحواسيب من التعلم من البيانات وتحسين أدائها بمرور الوقت دون الحاجة لبرمجة تقليدية. كي تتعلم برمجة الذكاء الاصطناعي تحتاج لامتلاك فهم جيد للبرمجة وتحليل البيانات ويمكنك استخدام لغات برمجة متعددة في هذا المجال أشهرها لغة البرمجة بايثون التي توفر الكثير من المكتبات والأطر المساعدة مثل تنسرفلو TensorFlow وكيراس Keras وبايتورش PyTorch وباندا Pandas. إذا كنت مهتمًا بتعلم هذا الاختصاص القوي فستوفر لك دورة الذكاء الاصطناعي من أكاديمية حسوب التي تحتوي على 58 ساعدة تدريبية ممتدة على ثمانية مسارات تدريبية شاملة كل ما تحتاج إليه للبدء بتطوير تطبيقات ذكاء اصطناعي قوية واكتساب مهارة في تحليل البيانات من الصفر ودون الحاجة لامتلاك معرفة مسبقة. اللغات والتقنيات المستخدمة في برمجة الذكاء الاصطناعي هي Python و MongoDB وPymongo و TensorFlow و Keras و Pandas والنماذج اللغوية الكبيرة LLMs المختلفة. تطوير الأنظمة المدمجة الأنظمة المدمجة هي أنظمة حاسوبية شبيهة بالحاسوب ولكنها لا تملك كل ميزات الحاسوب الذي تراه أمامك الآن. بعبارة أخرى، النظام المدمج هو حاسوب صغير مبرمج لأداء مهام محددة فقط ومدمج ضمن الجهاز أو البيئة المراد استخدامه فيها. أنت الآن محاط بالكثير من الأنظمة المدمجة الآن مثل جهاز مقياس مستوى المياه وجهاز التحكم بالتلفاز وجهاز إنذار الحريق وأجهزة المراقبة …إلخ. حتى إشارات المرور وتنظيم السير وألعاب الأطفال الآلية تصنَّف على أنها أنظمة مدمجة. هل سمعت أيضًا بمصطلح "إنترنت الأشياء"؟ إنترنت الأشياء هو نظام مدمج متصل بالإنترنت. نعم، بهذه البساطة! لابد الآن أن يتبادر إلى ذهنك الساعات والثلاجات والغسالات الذكية وطائرات الدرون وأنظمة المراقبة عن بعد وأنظمة البيوت الذكية، إذ كلها أمثلة على إنترنت الأشياء. كيفية برمجة الأنظمة المدمجة أشهر وأكثر لغة برمجة تستعمَل في برمجة الأنظمة المدمجة وإنترنت الأشياء هي لغة C (أي لغة سي) وكل اللغات المشتقة منها (مثل لغة أردوينو C). تُستعمَل لغة C++ كثيرًا في هذا المجال، إذ تعدُّ لغة ذات مستوى أعلى من لغة C لدعمها للبرمجة كائنية التوجه. أضف إلى ذلك أنه بدأ حديثًا استعمال لغة بايثون في برمجة تطبيقات الأنظمة المدمجة مع أنها لم ترتبط تقليديًّا بهذا المجال سابقًا. صحيح أنَّ لغة بايثون ليست بقوة لغة C و C++ في هذا المجال إلا أنها تستمد ميزاتها وفعاليتها من المكتبات الهائلة المتوافرة فيها. بعيدًا عن C وبايثون، تستعمل في مجال الأنظمة المدمجة أيضًا لغات أخرى تنضوي ضمن "لغات توصيف العتاد" (Hardware Description Languages)؛ لغتي VHDL و Verilog هما من أشهر لغات توصيف العتاد المستعملة في هذا المجال. تُستعمَل مثل هذه اللغات في برمجة "مصفوفة البوابات المنطقية القابلة للبرمجة" (FPGA أي Field Programmable Gate Array). أخيرًا، قد تجد بعض المراجع تشرح برمجة الأنظمة المدمجة بلغة أخرى تدعى "لغة التجميع" (Assembly Language) التي تصنف من اللغات منخفضة المستوى. يتطلب تعلم البرمجة باستخدام هذه اللغة فهمًا واسعًا بمعمارية وحدة التحكم المركزية والمعالج بالمجمل لأنها أقرب لغة يفهمها الحاسوب. الانتقال إلى هذه اللغة قد يكون في مستويات متقدمة من تعلمك لبرمجة الأنظمة المدمجة وتطبيقات إنترنت الأشياء. من ميزات البرمجة بهذه اللغة هي التحكم الواسع بالعتاد والمعالج الذي لا توفره لغات أخرى. يقال أن هذه اللغة صعبة بعض الشيء ومعقدة، ولكن لا أرى ذلك! قد يكون سبب قول ذلك هو أن لغة التجميع هي لغة منخفضة المستوى وأقرب شيء إلى لغة الآلة ولا يستطيع من يلقي نظرة على شيفرة مكتوبة فيها فهمها مطلقًا إن لم يعرفها. تطوير تطبيقات سطح المكتب مجال تطوير تطبيقات سطح المكتب كالمحيط الواسع؛ إن لم تملك بوصلة وتعرف إلى أين تريد الاتجاه، ستضيع فيه حتمًا. هنالك الكثير من أنظمة التشغيل أشهرها - وأكثرها سيطرةً على السوق حاليًا - هي: نظام التشغيل ويندوز، ولينكس، وماك (macOS)، ويملك كل نظام تشغيل تطبيقات مكتبية خاصة به. لذلك، يجب عليك أولًا -قبل الدخول إلى سوق برمجة تطبيقات سطح المكتب- تحديد نظام التشغيل المستهدف. أي يجب الإجابة على السؤال التالي: هل يستهدف تطبيقك نظام تشغيل محدد، أم تريد لتطبيقك أن يعمل على عدة أنظمة تشغيل في آن واحد؟! بعد تحديد نظام التشغيل المستهدف، اطلع على اللغات المفضل استعمالها في ذلك النظام لبرمجة تطبيقاته؛ فعلى سبيل المثال، اللغات C و C++ و C# و VB.NET هي الأكثر استعمالًا في برمجة تطبيقات نظام التشغيل ويندوز، واللغات C و C++ و Bash هي الأكثر استعمالًا في برمجة تطبيقات توزيعات نظام التشغيل لينكس. أمَّا نظام الشغيل ماك، فينفرد باستعمال لغة Objective-C. حسنًا، دعني أخبرك الحقيقة، كل لغة برمجة عامية الغرض يمكن استعمالها في برمجة التطبيقات، إذ أشهر اللغات التي تُدرَّس أكاديميًّا في هذا المجال هي لغة جافا (Java). لا يخفى على القارئ دخول لغة بايثون بقوة على هذا المجال نظرًا لامتلاكها الكثير من المكتبات الرائعة وسهولة صياغتها. دخلت مؤخرًا لغة جافاسكريبت على سوق برمجة تطبيقات سطح المكتب عبر إطار العمل Electron (إلكترون)، إذ توظف في هذا المجال تقنيات تطوير الويب (HTML و CSS و JavaScript …إلخ.). بدأ هذا الإطار ينتشر كالنار في الهشيم مما دفع شركات كبيرة لتطوير تطبيقات سطح المكتب الخاصة بها باستعمال هذا الإطار ومنها شركة Slack التي استعملت هذا الإطار لتطوير تطبيقها المكتبي. أعلم أنك الآن تشعر بالضياع من كثرة لغات البرمجة والتقنيات المستعملة في هذا المجال؛ معك حق، فقد أخبرتك بذلك منذ قليل. دخول هذا السوق يحتاج منك تحديد هدفك منه بالضبط. هل لديك فكرة تطبيق وتريد إنشاءه والربح منه؟ هل تريد العمل لدى شركة محددة؟ ما هي مواصفات التطبيق الذي تريد إنشاءه أو تريد العمل على تطويره؟ كل ذلك يلعب دورًا في تحديد لغة البرمجة الأنسب لك لتعلمها. في النهاية، إن تعلمت أساسيات البرمجة وأتقنت العمل على لغة برمجية محددة، سيسهل عليك الانتقال إلى لغة برمجة أخرى، إذ أغلب لغات البرمجة تشبه بعضها بعضًا من ناحية المفهوم والمضمون وتختلف بعض الشيء من ناحية الصياغة والشكل. لذلك، اطمئن من هذه الناحية. كيفية اختيار لغة البرمجة التي تناسبك يمكنك اختيار لغة البرمجة اعتمادًا على المجال الذي تحب العمل فيه، سألخص لك مسار التعلم لمختلف مجالات العمل: العمل كمطور ويب full-stack: يعني ذلك تعلم تطوير واجهات المستخدم أو الواجهات الأمامية، وتطوير الواجهات الخلفية. يمكن التخصص بمجال واحد من هذين المجالين فقط، إذ يُطلَب كثيرًا في سوق العمل مبرمجين متخصصين في واجهات المستخدم أو الواجهات الخلفية. العمل كمطور تطبيقات للهواتف المحمولة: يمكنك تعلم برمجة تطبيقات أندرويد أو iOS كلًا على حدة، أو استعمال تقنيات مثل كوردوفا لتطوير لكلا النظامين معًا. العمل كمطور تطبيقات سطح المكتب: يمكنك البدء بالتخصص في تطوير تطبيقات مكتبية لنظام تشغيل محدَّد (مثل نظام التشغيل ويندوز أو لينكس) عبر تعلم لغة البرمجة المستعملة في ذاك المجال (كما أشرنا إلى ذلك في قسم تطوير تطبيقات سطح المكتب)؛ خيار آخر هو تعلم اللغات والتقنيات التي تمكنك من تطوير تطبيقات عابرة للمنصات (تعمل على عدة أنظمة تشغيل) مثل استعمال إطار العمل Electron. العمل كمطور للأنظمة المدمجة والأنظمة الذكية: لغة C هي أساس هذا المجال، سواءً كنتَ تتعامل مع المتحكمات مباشرةً، أو تتعامل مع شريحة مثل أردوينو (والتي تمتلك لغةً مشتقةً من C). يساعدك هذا الفيديو على معرفة المعايير التي من خلالها ستتمكن من اختيار لغة البرمجة التي تتناسب مع تطلعاتك وأهدافك المستقبلية. نصائح لتعلم البرمجة مشوار تعلم البرمجة من الصفر طويل وشائق، ولكنه جميل ومسلٍ بذات الوقت، قد تصاب بالإحباط في بداية طريقك لكثرة الأمور التي عليك الإلمام بها، لذا جهزت إليك النصائح الآتية من تجربتي في البرمجة: حدد هدفك من تعلم لغة البرمجة وسوق العمل الذي تريد دخوله واجعله واقعيًا. بدون هدف، أبشرك بأنك ستتخلى عن فكرة تعلم البرمجة بعد حين. انتبه إلى أن يكون هدفك واقعيًا وقابلًا للقياس والتجزيء على مراحل. بدون ذلك، ستفشل من أول عقبة وتترك تعلم البرمجة. أعرف نفسك جيدًا ونقاط قوتك وضعفك. كلنا لديه نقاط قوة وضعف، ولكن المفلح من عمل على ترميم وتحسين نقاط ضعفه في المجال الذي يرغب بتعلمه. رشح دورة واحدة وكتابًا واحدًا وابدأ بقراءة الكتاب ومتابعة الدورة تدريجيًّا ثم انتقل بعد الانتهاء إلى دورة أخرى وكتاب آخر، إذ سيجنبك ذلك التشتت بين الدورات الكثيرة والكتب العديدة. الشيء الذي أفعله قبل بداية تعلم شيء جديد هو ترشيح قائمة من عدة كتب ودورات ثم ترتيب هذه الكتب والدورات بحسب جودتها ومدى بساطتها وتعقيدها. أرقم الكتب والدورات وأبدأ بالخيار الأول منها. أحدد الوقت التقريبي الذي يأخذه كل خيار لدراسته وأجدول الخيارات البقية على رزنامتي الخاصة. لا تأخذ العلم إلا ممن تثق بعلمه، فالكثير من المبتدئين يحاولون مساعدة غيرهم وقد يضعون معلومات مغلوطة دون قصد. طبق ما تعلمته مباشرة، وأنشئ أي شيء من كل أمر جديد تتعلمه حتى لو كان رسمة بسيطة أو شيفرة من عدة أسطر فقط. فرحة إنجاز شيء مما تعلمته تدفعك لتعلم المزيد والاستمرار في طلب العلم. نظم وقتك بورقة وقلم، حدد بداية كل أسبوع خطةً لسائره والتزم بتنفيذها. أخبر أصدقائك أن لديك التزامات وأمور مهمة عليك إنجازها. خصص وقتًا للاستراحة بالطبع ولا تنسَ نصيبك منها. في نهاية كل أسبوع، وازن مدى الإنجاز الذي حققته ومدى تطبيق الخطة التي وضعها وحاول أن تصل النسبة إلى 100%. أنصحك بقراءة ومتابعة استراتيجيات تنظيم الوقت ورفع الإنتاجية. تمرس على حل المشكلات وتحدى نفسك باستمرار وتابع المسابقات البرمجية واشترك بها إن استطعت، أنصحك بقراءة مقالة حل المشكلات وأهميتها في احتراف البرمجة بعد هذه المقالة. لا تنسَ أن تكافئ نفسك في كل مرة تنهي فيها كتابًا أو تكمل العمل على مشروع. لا تنسَ حظك من الاستراحة، لأن طريق البرمجة قد يكون له بداية ولكن النهاية بعيدة ومتعبة -مثله مثل أي مجال آخر-. في النهاية أرجو لك كل التوفيق في مشوارك البرمجي. وأرجو منك أن تشاركنا تجربتك في تعلم البرمجة، لعل غيرك يستفيد منها. اقرأ أيضًا كيف تتعلم البرمجة المدخل الشامل إلى تعلم علوم الحاسوب المرجع الشامل إلى تعلم لغة بايثون تعرف على أعلى تخصصات البرمجة أجرا تعلم لغة HTML قواعد البرمجة ما هي فوائد تعلم البرمجة؟ أسهل لغات البرمجة أهمية البرمجة1 نقطة
-
أهلاً وسهلاً بك أخي الكريم توجد بالفعل أبحاث في هذا المجال ولكن من وجهة نظري لسنا بحاجتها بالشكل الكبير هي فقط دلالات محددة التي تحتاجها من هوية الألوان ما تأثيرها كيف يرى الشخص المنشورات بشكل عام ما هي النقاط التي يجب ان يركز عليها المصمم الخ.... من التفاصيل التي تعود عليك بالنفع في العادة هنالك نوعان الأول الذي تقوم انت فيه بالعمل على البيانات القديمة وتستخرج منه افضل النتائج لماذا حقق هذا المحتوى هذا الإنتشار ما انطباع العميل من الجيد ان تقوم بجلسات حوار مفتوحة مع عملائك عبر الويبنار تعرف على عملائك بشكل مميز من خلالها النقطة الاخرى هنالك بحوث مميزة في مجلة هارفرد بزنس https://hbr.org/ هنا ستجد مقالات مميزة حقيقة يفضل دائما ان تبحث عن المواضيع باللغة الإنجليزية مع تمنياتي لك بالتوفيق والنجاح1 نقطة
-
ادارة المعرفة كمفهوم مستحدث غير الكثير في شتي المجالات ومن ضمنها التسويق العصبي (اندماج علم التسويق مع علم الاعصاب و الدماغ بأدوات التقنية الثورية الجديدة) .. ولكن ما اقصده ادارة المعرفة (الضمنية) داخل المؤسسة و خارجها ضمن معايير السوق الموجودة .. المعرفة الضمنية مثل مهارات مفعله تلاقئيا في الفرد و مجموع تلك المعرفة لدي الافراد يشكل مجموع تلك المعرفة القاعدة المعرفية للمؤسسة .. فهل هناك من ابحاث و تجارب في ادارة تلك المعرفة ضمن قطاع التسويق ؟1 نقطة
-
ماذا تقصد بإدارة المعرفة في التسويق؟ بقدر ما أستطيع أن أتذكر أنك فقط لتعرف رغبات عملائك وأظهر لهم فوائد منتجاتك. نعم ، أنت بحاجة إلى معرفة الاقتصاد حتى تعرف كيفية تسعير منتجك وبيعه. تعرف على السوق المتخصصة الخاصة بك لتسهيل الأمر.1 نقطة
-
لا شك بأن القدرة على كتابة المقالات والتدوين بسرعة له تأثير كبير على الأرباح التي تحققها كمستقل، ويكمن الفرق هنا بين أن يكون عملك كمدون مستقل بنظام جزئي مجرد هواية تمضي فيها بعض وقتك وبين أن يكون عملاً بدوام كامل تعيش من أرباحه. ومن خلال حديثي مع العديد من المدونين المستقلين أمثالي، أدركت بأن الكثير من المدونين يقضون ساعات طويلة في كتابة وإعداد المقالات والاهتمام بالتفاصيل الدقيقة والمملة، ومع ذلك يبقى لديهم شعور بعدم الارتياح حول جودة الكتابة. أعرف كاتبًا مستقلاً اعتاد على كتابة مقالة واحدة خلال ستة ساعات مقابل 100 دولار فقط، وهو ما يعادل تقريبًا 20 دولار بنظام الساعة، لكن لو استطاع هذا الكاتب نفسه أن يُنهي نفس المقالة خلال ساعتين فسوف يحقق 50 دولار في الساعة، وهنا يتضح السر في كتابة المقالات بسرعة. ما هي السرعة اللازمة؟في الواقع إن تحديد السرعة المثالية للكتابة هي مسألة نسبية تعتمد على الشخص نفسه، لكن إن كان باستطاعتك كتابة مقالة من 1000 كلمة خلال ساعة واحدة أو أقل، فأنت تعمل حينها وفق معدل جيّد. مع ذلك فإن نوعية المحتوى الذي تقوم بكتابته من حيث التعقيد والصعوبة يُملي عليك العمل وفق سرعة معينة. فعلى سبيل المثال، عندما أعمل على كتابة محتوى يتعلق بدليل وطرق التدوين المستقل، يمكنني أن أكتب حوالي 1000 كلمة أو أكثر في الساعة الواحدة لأنني أملك فكرة كافية عن الذي أكتب عنه. نفس الأمر ألاحظه إذا عملت على كتابة مقالات يتعلق محتواها بأفكاري الشخصية وآرائي، فيمكنني أن أكتب ما يصل إلى 2000 كلمة في الساعة. لكن من ناحية أخرى، هناك بعض المقالات التي تحتاج إلى أبحاث عميقة أو إلى اطلاع على بعض المراجع وما شابه ذلك، وعندها تحتاج مقالة الألف كلمة من هذا النوع إلى ما يقارب السّاعتين. في النهاية، الأمر متروك لك لتُقرّر ما إذا كنت راضيًا عن سرعتك في إنشاء المحتوى أم لا. وفي كلا الحالتين، أودّ أن أقترح عليك بعض الخطوات السريعة التي يمكنها أن تعطيك بعض المميزات الإضافية، بغض النظر عن سرعتك الحالية في التدوين. هل تخشى تدنّي جودة كتاباتك؟ غالبًا ما يكون الكُتّاب المستقلوّن قلقين حول إنشاء المحتوى بشكل سريع، وكثيرًا ما يخشون أن يؤثر ذلك على جودة أعمالهم. هم محقون في ذلك لأنه يُمكن إيجاد مبرّرات منطقية لهذا القلق، ولكن ماذا لو كان من المُمكن إنشاء محتوى في وقت قصير دون أن يؤثر ذلك سلبًا على الجودة النهائية للعمل، فالسرعة العالية أثناء العمل لا تؤدي دائمًا إلى جودة متدنية. إضافةً إلى ذلك، هناك قاعدة ذهبية يجب على الكتّاب المستقلين اتباعها (لكنهم يغفلون عنها في معظم الأحيان) وهي يجب عليك أن تكتب وتعمل وفق المعايير التي يضعها العميل، لا وفق معاييرك الشخصية. إذا بدأت عملك الحر للتو ولديك القدرة على كتابة مقالات عالية الجودة، فلا تعمل على كتابة مقالات قيمتها 50 دولار لعملاء لن يدفعوا لك أكثر من20 دولار. وبالطبع فأنا لا أقصد أن تعمل على كتابة مقالات ذات محتوى ضعيف أو متوسط الجودة، ولكن لا تتوقع أن يرفع لك العملاء الأجر المتفق عليه كثيرًا لأنك بذلت المزيد من الجهد على إنشاء محتوى بجودة أعلى من المطلوب. المقصود من ذلك أنه يجب عليك إنشاء محتويات يكون العميل راضيًا عنها، حتى لو كان مستوى هذا العمل أقل من مستوى أعمالك الاعتيادية أو أنّه لا يرتقي إلى معاييرك الخاصّة. ففي هذه الحالة عليك أن تكتب المزيد من المحتوى لكسب المزيد من المال. 9 خطوات عملية لكتابة المقالات بسرعةأعتقد أن أي شخص يمكنه أن يزيد من سرعته في إنتاج المحتوى وكتابة المقالات عبر قراءة اتّباع الخطوات التالية وتطبيقها. لكن قد يكون هذا التحسن طفيفًا في حال ما إذا كان معدل كتابتك سريعًا من الأساس، أما إذا كنت بطيئًا نسبيًا فحينها ستُلاحظ تحسّنا كبيرًا. لقد أدرجت هذه الخطوات هنا وفق التّرتيب الزمني اللازم لتطبيقها، وكلما نفذت خطوة من هذه الخطوات ستجد أن سرعتك تزداد وبالتالي ستصبح محترفًا في الكتابة بسرعة. علاوةً على ذلك، فإن تطبيق هذه الخطوات بأكملها، يجب أن يُسفر عن نتائج فورية رائعة. 1- حضّر بعض المواضيع الجاهزة فكّر ببعض المواضيع التي تأخذ منك وقتًا كبيرًا وقم بتحضيرها، فعندما يُطلب منك بعض المقالات لا يمكنك حينها أن تضيع الوقت على تجهيز الأفكار. يمكنك أن تستوحي هذه الأفكار من خلال أعمالك ومقالاتك. بذلك يجب أن تكون لديك دائمًا قائمة مرجعية يمكنك الاعتماد عليها عندما تقوم بكتابة مقالاتك. حتى لو افترضنا أنك تجد صعوبات في تجهيز أفكار المقالات، فسيكون من الأفضل القيام بهذه العملية دفعة واحدة بدلًا من إعدادها بصورة مُتفرّقة، فمثلًا تخصيص 15 دقيقة للعصف الذهني والخروج بأفكار متعددة لمقالاتك المقبلة قبل الكتابة، سيحقق إنتاجية أكبر بكثير من التفكير في فكرة لموضوع واحد وكتابة مقال حولها. شخصيًا أنصح باستخدام أداة مثل Evernote فهي تساعدك على إنشاء وتسجيل الأفكار الجديدة، وبالطبع فإن نوعية الأداة التي تستخدمها ليست مهمة طالما أنك تمتلك القدرة على الكتابة وجمع الأفكار من أي مكان. (المفكرة هي وسيلة فعالة في حال عدم حاجتك لأداة بديلة غير تقنية أو منخفضة التكاليف). 2- ضع خطةربما تعتبر هذه الخطوة هي الأكثر إشكالية من بين جميع هذه الخطوات، فالتّخطيط بصورة عامة قد يساعدك أحيانًا في زيادة معدل سرعة الكتابة، لكنه في أحيان أخرى لن يُفيد، وهذا يعتمد بشكل رئيسي نوعية المحتوى الذي تعمل على كتابته. من واقع تجربتي اعتدت على استخدام قاعدة بسيطة في هذه المسألة وهي، إذا كنت تشعر بأريحية كبيرة اتجاه الموضوع الذي ترغب في كتابته وتعرف تمامًا الأفكار التي ستطرحها في هذا الموضوع، فلا داعي حينها لإنشاء خطة، فيما عدا ذلك فيجب عليك إنشاء خطة مكتوبة قبل البدء بكتابة المقالة، وفي كلتا الحالتين يجب عليك أن تعرف ما الذي ستكتبه قبل أن تشرع في ذلك، وهذا يشمل بصورة أساسية عزمك على الاقتباس من مصادر الموضوع أو الإشارة لها فقط. غالبًا ما أقوم بإنشاء خططي الخاصة بالكتابة عبر تحديد عدة عناوين فرعية، بحيث يشمل كل عنوان فرعي مجموعة من النقاط المُحدّدة، ويُفضل ألا تكون الخطة معقدة بصورة أكثر من ذلك. 3- اكتب العنوان بعد أن تُنهي كتابة المقاللا أتفق مع المدونين الذين يُفضلون كتابة العناوين في البداية، لأن ذلك سيستغرق الكثير من الوقت. فالأمر الذي يجب أن نعرفه فعلاً قبل البدء بالكتابة هو الرسالة الرئيسية للمقال ووضع تصور خاص بها، وبالتالي من الأفضل إكمال المقالة حتى نهايتها قبل التفكير بكتابة العنوان. في الحقيقة الأمر، السر وراء اقتراحي لهذا الأمر، هو أنك بمجرد الانتهاء من كتابة المقالة ستكون في وضعية تسمح لك بتحديد العنوان الأنسب، كما أن الفكرة الأنسب لعنوان المقال قد تخطر على بالك أثناء الكتابة وليس قبلها. 4- ارفع سرعة رقنك على لوحة المفاتيح هناك عدد قليل الوسائل التي تُساعدك على الكتابة بصورة سريعة منها تحسين قدرتك على الرّقن (الكتابة على لوحة مفاتيح) بسرعة. وفقًا لـويكيبيديا فإن مُتوسّط سرعة الرّقن على لوحة مفاتيح الحواسيب تبلغ 33 كلمة في الدقيقة، بينما تصل إلى 50 أو 80 كلمة في الدقيقة عند الأشخاص المحترفين، وبالتالي يجب أن يكون رفع سرعة الرّقن والوصول إلى مُعدّلات احترافيّة من ضمن أهدافك التي تعمل عليها. يمكن أن تبدأ باختبار سرعتك في الرّقن من هنا. أظهرت نتائج اختباري الشخصي بأنّ معدل سرعتي هو 98 كلمة في الدقيقة، بالرّغم من أنني لم أخصّص أي وقت لتحسين سرعتي بشكل مُباشر. بالرّغم من أنّني لم أجربه من قبل إلّا أن التقييمات التي حصل عليها تُعطي الانطباع بأن برنامجًا كـ TypeRightNow جدير بالتّجربة وبالدّفع مُقابل الحصول عليه لمن أراد أن يزيد من سرعته. 5- قلّل مضيعات الوقتهناك العديد من الأشياء التي تعمل على إبطاء معدل كتابتك، وأبرز هذه الأشياء: ملفات الوسائط المختلفة (صور-فيديو – إلخ) البحث والتخطيط العميق المراجع (مثل الإحصائيات والروابط والاقتباسات) ويجب عليك تقليل مضيعات الوقت هذه بأكبر قدر ممكن، وبالرّغم من أن مثل هذه الأمور من شأنها أن تزيد من قيمة المقالات التي تكتبها، إلا أن تحقيق التّوازن يُعد مطلبًا أساسيًا في هذه المسألة، وتذكر دائمًا القاعدة الذهبية التي أشرنا لها سابقًا: اعمل وفق معايير العميل، لا وفق معاييرك الخاصة (يعني، أضف هذه المصادر بحسب الجودة التي يتطلّبها العميل وليس بالكمّ الذي ترغب فيه شخصيّا). 6- لا تتوقف من أجل التّحقق وأنت منغمس في الكتابةستكون راضيًا عن نفسك جدًا عندما تشرع في الكتابة بمعدل سريع، ولكن يمكن للإحباط أن يتسلل إليك إذا تباطأت سرعتك وظهرت بعض الأشياء التي تؤخرك. إذا كنت قد فوّت شيئًا خلال مرحلة الإعداد فلا تتوقف من أجله، بل انتظر حتى تنتهي من تدوين ما تفكر به وتعمل عليه دون التوقف من أجل التحقق منه. يمكنك أن تضع علامة واضحة بجانب ما تريد مراجعته كـ "للمراجعة"، ثم الاستمرار في الكتابة. فالتحقق من أشياء متعددة معًا ومراجعتها دفعةً واحدة في النهاية أفضل بكثير من العمل عليها بشكل فردي. 7- اكتب من دون الاهتمام بالتّفاصيل ودقّق لاحقًاتُعد مقولة "اكتب وأنت سكران، وراجع وأنت صاحي" من أفضل النصائح التي قدمها الكاتب إرنست همينغوي للذين يرغبون في كسب لقمة العيش من الكتابة. فعلى الرغم من أن التعديل والتّحقق وضبط التفاصيل أثناء الكتابة يمكن أن يكون مُغريًا، إلا أنه يعتبر مضيعة كبيرة للوقت. بدلًا من ذلك، عليك أن تكتب دون الاهتمام بالتفاصيل الدّقيقة، فقط قم بتفريغ أفكارك على الورق، وبمجرد الانتهاء من ذلك، يمكن العودة لما كتبته وتعديله كما تشاء. فتقسيم مرحلة الكتابة إلى قسمين منفصلين بهذا الشكل، سيؤدي إلى تحسن ملحوظ في سرعتك. 8- دع التنسيق للنّهايةيمكن تحسين جودة مقالات المدونات عبر تطبيق بعض التنسيق الانتقائي على المحتويات، أي تطبيق تنسيق الخط العريض والمائل. حيث يجب إبراز المقاطع الرئيسية في المقالة باستخدام الخط العريض، كما يجب تطبيق الخط المائل على بعض الكلمات المحددة والمهمة في النص. ولكن انتبه إلى أنّ يجب تأخير القيام بذلك إلى غاية الفراغ من الكتابة بشكل كامل، أي خلال القسم الثاني من العمل والذي يتضمن عملية التحرير والمُراجعة. هناك فائدة محدودة من التنسيق أثناء مرحلة الكتابة، لأنّه من المُمكن جدّا أن تجد نفسك بعد الفراغ من الكتابة قد أدخلت تغييرات كثيرة على الفقرة أو أنك قد تضطر إلى حذفها بالكامل. 9- نظم وقتك بما أننا جميعًا لدينا القدرة على المنافسة والتحدي، خصوصًا عندما يتعلق الأمر بالتغلب على النفس، فيجب عليك أن تُحدّد وقتًا محددًا لإنهاء المقالة التي تعمل عليها، وحاول التغلب على ذلك الوقت أيضًا. ستتفاجأ بالنتائج الرائعة التي ستحصل عليها بهذه العملية. كن واقعيًا خلال وضع أهدافك، فتركيزك يجب أن يكون منصبًا على الكفاءة والسرعة معًا، وليس السرعة فقط، لأن ذلك يمكن أن يؤدي إلى نتائج غير مرغوبة. فإذا أصبحت المقالة التي تعمل عليها أكبر من المتوقع، فلا تلم نفسك على عدم إنهائها خلال الوقت المحدد. الهدف من هذه العملية هو تحفيزك، وليس تثبيطك. ومع مرور الوقت ستكون قادرًا على تحديد الزمن الذي تحتاجه لكتابة مقالات مختلفة الحجم والنوع، وبالتالي يُمكنك تسعير مقالات بصورة دقيقة بالإضافة إلى وضع جدول زمني أكثر فاعلية. الممارسة ستجعلك أفضلقد تبدو العملية السابقة صعبة ومستحيلة في البداية، ولكنها لا يجب أن تكون كذلك. قم بطباعة نسخة من هذه الخطة، واعمل عليها في المرة القادمة التي ستكتب فيها. اقرأ العملية بأكملها خطوة بخطوة لتعتاد عليها وتصبح مفهومة بشكل جيد. وستلاحظ تحسنًا فوريًا في سرعتك. أخيرًا، ربما لاحظت أن بعض الخطوات تحتاج إلى تطبيق منفصل (مثل وضع أفكار المقالات، وتحسين سرعة الطباعة على لوحة المفاتيح) لذا حاول أن تخصص بعض الوقت الجانبي لكي تعمل على هذه التطبيقات، أما بقية الخطوات ستتطور بشكل طبيعي كلما قمت بكتابة المزيد من المقالات مرة تلو الأخرى. ترجمة – وبتصرّف- للمقال: 9 Steps to Writing Blog Posts Quickly لصاحبهTom Ewer1 نقطة