<?xml version="1.0"?>
<rss version="2.0"><channel><title>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: &#x645;&#x642;&#x627;&#x644;&#x627;&#x62A; &#x639;&#x627;&#x645;&#x629; &#x62D;&#x648;&#x644; &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;</title><link>https://academy.hsoub.com/programming/general/?d=2</link><description>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: &#x645;&#x642;&#x627;&#x644;&#x627;&#x62A; &#x639;&#x627;&#x645;&#x629; &#x62D;&#x648;&#x644; &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;</description><language>ar</language><item><title>&#x62F;&#x644;&#x64A;&#x644; &#x627;&#x644;&#x645;&#x628;&#x62A;&#x62F;&#x626; &#x644;&#x62F;&#x631;&#x627;&#x633;&#x629; &#x639;&#x644;&#x648;&#x645; &#x627;&#x644;&#x62D;&#x627;&#x633;&#x648;&#x628;</title><link>https://academy.hsoub.com/programming/general/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6-%D9%84%D8%AF%D8%B1%D8%A7%D8%B3%D8%A9-%D8%B9%D9%84%D9%88%D9%85-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8-r2600/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2026_02/computerscience.png.db8210ba8599efcc262da75ca0e715dc.png" /></p>
<p>
	سنتحدث في هذا الدليل حول دراسة علوم الحاسوب كطالب مبتدئ سواء كنت تريد البدء في دراستها أو تفكر في نيل شهادة جامعية فيها أو حتى بدأت رحلتك الدراسية بالفعل، وهو خلاصة خبرة أكثر من 40 عامًا لكاتبه برايان "بيج جورجينسن" هول Brian “Beej Jorgensen” Hall، حيث تعلمها ذاتيًا قبل الجامعة ثم أضاف لها عشرين سنة من العمل في السوق، ثم 8 أعوام أخرى في تدريسها للطلبة، وقد بنى الشرح المذكور هنا على الملاحظات التي جمعها من مراقبته للطلاب أثناء ارتكابهم لأخطاء شتى في تعلمهم لتتجنب أنت الوقوع فيها.
</p>

<h2 id="-">
	الجمهور المستهدف
</h2>

<p>
	لقد أعُد هذا الدليل خصيصًا لطلبة الجامعات الذين بدؤوا تعلم البرمجة حديثًا لكنه يصلح أيضًا لطلبة المراحل الثانوية أو أي شخص يرغب في تعلم البرمجة عمومًا.
</p>

<h2 id="-">
	الهدف الرئيسي
</h2>

<p>
	يتعلم الطلاب في الجامعات كيفية البرمجة باللغات المختلفة مثل Flutter و React و Rust وجافاسكربت و C++ و C وباسكال و LISP وفورتران FORTRAN وكوبول COBOL وغيرها من اللغات والتقنيات البرمجية، لكن هنا تبرز المشاكل التالية:
</p>

<ul>
	<li>
		هناك العديد من التقنيات التي يصعب تغطيتها في أربع سنوات.
	</li>
	<li>
		كل هذه اللغات ستُستبدل عاجلًا أم آجلًا وتحل محلها لغات وتقنيات أحدث، كما في حالة لغة كوبول المشار إليها أعلاه.
	</li>
</ul>

<p>
	إن التصرف المنطقي لك كطالب في هذه الحالة هو صرف وقتك وجهدك في تعلم كيفية حل المشاكل البرمجية سواء كنت تعرضت لتلك المشاكل من قبل أو لا، بدلًا من السعي خلف تعلم التقنيات التي لا حصر لها إذ لن تستطيع تعلمها جميعًا، فليس المهم أن تتعلم كيف تصبح مطور تطبيقات آيفون أو أندرويد أو مطور لغة Go إذ أن هذا تحصيل حاصل إذا تعلمت الهدف الأساسي وهو "حل المشاكل البرمجية".
</p>

<p>
	وصحيح أنك لن تتعلم لغة Go في الجامعة لكن ستتعلم كيفية تعلمها بنفسك، فهذه المهارة -أي التعلم الذاتي- مطلوبة في مجال تطوير البرمجيات إذ يستبعد أن تكون وظيفتك الأولى هي استخدام تقنيات استخدمتها في الجامعة من قبل، بل في الواقع قد يستغرب بعض الخريجين الجدد حين يرون أن التقنيات التي استخدموها في الجامعة لا تُستخدم في الوظيفة الأولى لهم.
</p>

<p>
	لماذا إذًا ندرس أربع سنوات لتعلم نظم التشغيل ولغة التجميع Assembly Language وتحليل الخوارزميات وغيرها؟ إذا راجعت مقررات هذه السنوات سترى أنها تدور حول كيفية حل المشاكل البرمجية، وليس تلك التقنيات بذاتها، وذلك لأن الجامعات تريد تعليمك كيفية حل المشكلات البرمجية من خلال التدرب المستمر لصقل مهاراتك، لأنك سترى في مقابلات العمل أو في أثناء عملك نفسه مشاكل لم تتعرض لها من قبل، وليس من المنطق حفظ كل اللغات البرمجية لاستخدام إحداها لحل مشكلة في أثناء مقابلة أو أثناء تنفيذ مشروع، ولن ينفعك حينها إلا المهارة الأساسية التي تبنى عليها تلك اللغات، أي القدرة على حل المشكلات نفسها.
</p>

<p>
	وإياك والغش، حتى في الأمور التي تعلم يقينًا أنك لن تستخدمها في مسيرتك المهنية فيما بعد، فليس الهدف هو تعلم كيفية حذف العنصر الأول في قائمة مرتبطة Linked List مثلًا، وإنما هدفنا التدرب على كيفية حل مثل هذه المشكلات، فاعلم أن استسهال البحث في الويب أو أدوات الذكاء الاصطناعي عن إجابة جاهزة يحرمك من هذا التمرين الذهني، وسيظل مستواك في هذه المهارة متدنيًا غير مصقول.
</p>

<h2 id="-">
	عقلية النمو
</h2>

<p>
	هذه النقطة قد تكون صعبة، خصوصًا لمن لا يتقبّل الفشل. فبعض الناس يتوتر جدًا لدرجة تؤثر على معدته، وقد يبالغ في لوم نفسه وينتقدها بقسوة أكثر مما ينتقد الآخرين، حتى لو كان يعلم أن القسوة في النقد لا طائل منها، وإن كان الأولى هو التوازن بين اللامبالاة والقسوة المفرطة على النفس، أو ما تسميه عالمة النفس كارول دويك Carol Dweck مصطلح “عقلية النمو Growth Mindset”، وملخصه فيما يلي:
</p>

<ul>
	<li>
		المهارات الشخصية قابلة للتطوير مع التدريب المستمر
	</li>
	<li>
		التعلم عملية مستمرة مدى الحياة
	</li>
	<li>
		التحديات هي فرص للنمو
	</li>
	<li>
		تعلم من النقد والفشل
	</li>
	<li>
		لا تستسلم أبدًا
	</li>
</ul>

<p>
	هذا على النقيض من الشخصية التي تقسو على نفسها قسوة تضر بها، كأن تستغرق في اللوم والتقريع على فشل في محاولة لعبة مثلًا، وهذا النوع من الشخصيات هو ما تطلق عليه كارول “العقلية الثابتة Fixed Mindset”، وهو الاعتقاد الخاطئ أنه مهما لعبت فستصطدم بحدود قدراتك الذاتية التي لن تتجاوزها أبدًا حتى لو درست 500000 ساعة، لكن من المستحيل عمليًا لأي شخص ناضج عاقل أن يقضي نصف مليون ساعة في أمر ما ولا يتعلم منه شيئًا.
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			اخسر أول 50 مباراة لك بأسرع ما يمكن. مثل شهير من لعبة Go (لعبة استراتيجية مثل الشطرنج)
		</p>
	</div>
</blockquote>

<p>
	إذا كان هذا في حال نصف مليون ساعة، فكيف بخمسين ألف ساعة أو 50 ساعة، أو خمس ساعات فقط؟ سترى إن تفكرت في الأمر أن أي قدر من الممارسة سيؤدي حتمًا إلى التحسن، حتى لو شعرت أنك عالق في مكانك فإنك على الحقيقة لا تزال تستكشف طرقًا ومسارات ولو تبين أنها مسدودة، فعلى الأقل تعلمت أنها مسدودة.
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			إنما العلم بالتعلم، وإنما الحِلم بالتحلُّم، ومن يتحرَّ الخير يُعطه
		</p>

		<p>
			تعلم فليس المرء يولد عالمًا، وليس أخو علمٍ كمن هو جاهلُ
		</p>

		<p>
			بقدر الكد تُكتسب المعالي، ومن طلب العلا سهر الليالي
		</p>

		<p>
			مع المحبرة إلى المقبرة
		</p>
	</div>
</blockquote>

<p>
	وهكذا فكل نجاح هو تجربة تعلم، وكل فشل هو تجربة تعلم كذلك، وكل تجربة تعلم تطور مهاراتك، فلا تخش الفشل بل استخدمه لتطوير مستواك.
</p>

<h3 id="-">
	الإصرار
</h3>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			لقد فشل المحترف مرات أكثر مما حاول المبتدئ أصلًا
		</p>

		<p>
			ستيفن ماكريني Stephen McCranie
		</p>
	</div>
</blockquote>

<p>
	يرى برايان أن المثال هذا هو أحد سمات من يصل لمرحلة التميز في أي شيء، فمن تظن أنه سيتقدم في حياته، من يستسلم بعد الفشل أم الذي يفشل ويفشل ويفشل ولا يزال ينهض بعد فشله ليحاول مرة أخرى؟
</p>

<p>
	هذا هو الفرق بين المطورين الأكفاء ومن سواهم، فهؤلاء الأكفاء فشلوا مرات ومرات لكن لم يستسلموا، بل أعادوا المحاولة مرة بعد مرة حتى تمكنوا من حل المشكلة التي بأيديهم في النهاية وقد تعلموا شيئًا جديدًا في كل مرة فشلوا فيها.
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			لم أفشل، بل وجدت 10000 طريقة لا تصلح.
		</p>

		<p>
			توماس إديسون
		</p>
	</div>
</blockquote>

<p>
	قد يغيب عن الطالب حقيقة أن المعلِّم فشل مرات لا حصر لها، فإذا نفذ المعلم مثلًا عملية حذف عنصر من قائمة مترابطة Linked List أثناء شرح درس برمجي ونجح الأمر معه من أول محاولة فهذا لا يعني أن تلك أول محاولة له على الحقيقة، بل لعلها كانت المرة المائة التي ينفذ فيها هذه العملية، فإذا تدرب الطالب على عملية كهذا من الصفر مائة مرة ستنجح معه كذلك من أول محاولة إذ يكون قد تعلم دروسًا لا حصر لها في كل مرة.
</p>

<p>
	فلو تسرب اليأس إلى نفسك لأنك ترى مادة ما مستحيلة على الفهم مع رؤيتك للمعلم يبسطها كأنها أمر تافه وحدثتك نفسك أن هذا المعلم أو هؤلاء الزملاء قد ولدوا بموهبة للبرمجة ليست لديك، فاعلم أن هذا صوت العقلية الجامدة Fixed Mindset التي تريد أن تظل في مكانك دون تطور، لكن تيقن أن لا شيء يميز المعلم عنك سوى عدد مرات الفشل التي تجرعها.
</p>

<p>
	فاثبت أثناء تعرضك لهذه المحاولات الفاشلة التي تمر بها أثناء التعلم، واعلم أن وصولك للتميز في مهارة ما لا يأتي إلا بالكد والمثابرة، فنادرًا ما تجد مبرمجًا بالفطر بل الغالب أن نحو 99.999% قد ذاق مر الصبر ليتعلم هذه المهارة، واعلم أن السمة الأبرز التي يتحلى بها كبار المبرمجين في العالم هي الإصرار الذي لا يعرف اللين والانكسار.
</p>

<h3 id="-">
	الدافع للتعلم
</h3>

<p>
	حين أراد برايان -كاتب الدليل- نيل درجة الدكتوراة نصحه مشرفه قائلًا “لابد أن يكون لديك دافع لنيل هذه الدرجة العلمية” لأن الحصول عليها يتطلب جهدًا كبيرًا لا بد له من سبب يدفع المرء لبذل الوقت والجهد الذي تحتاج إليه شهادة كهذه، وتنطبق هذه النصيحة على علوم الحاسوب عمومًا فهناك الكثير من الأمور الصعبة التي تحتاج إلى فهم عميق، مما يتطلب وجود دافع قوي لتعلمها.
</p>

<p>
	يضرب برايان مثلًا بنفسه لو كان محاسبًا، فهو يدرك يقينًا أن لديه المحك المعرفي المطلوب ليعمل محاسبًا بما أنه درس الرياضيات في الجامعة، لكنه يكره المحاسبة كمجال عمل، إذ فتح مرة كتاب محاسبة بالخطأ لأحد زملائه في الجامعة وتأكد مما رآه أن المحاسبة ليست له، بل يكاد عقله يتوقف حين يسمع من حوله يتحدث عن المحاسبة، فما بالك بدراستها لأربع سنوات في الجامعة، لذا يظن أنه من الصعب تحفيز النفس لعمل لا ترغب فيه.
</p>

<p>
	يتابع برايان أنه واجه الكثير من الانتقادات على موقع Hacker News بسبب هذا الادعاء منذ مدة إذ كتب البعض أنهم يكرهون البرمجة ومع هذا فقد نجحوا في بناء مسيرة مهنية فيها، ورد عليهم أن من يحب علوم الحاسوب سيكون أسهل عليه نيل شهادة فيها مقارنة بمن لا يحبها، رغم إمكانية دراستها والعمل فيها لمن لا يحبها أيضًا، لكن الشاهد أن الذي يحب عمله سيقضي وقتًا أكبر في ممارسته والتفكير فيه مما يجعله في مكانة متقدمة عمن لا يحب ذلك المجال ويعطيه اهتمامًا بالقدر المطلوب للنجاح فيه فقط وليس التميز.
</p>

<p>
	فصحيح أنك قد تنجح مهنيًا في عمل لا تحبه، لكن الأولى أن تبحث في مجال يحرك فضولك لتعلم المزيد فيه على أن تتجرع غصة العمل في أمر لا تطيقه لأنه يدر مالًا فقط، وكي نتحدث من الواقع فقد لا يكون لديك رفاهية اختيار ما تحب، فاحرص في كل حال أن تبحث عما يبعثك على العمل، سواء تحقيق الكفاية المادية أو اهتمامك بحل المشكلات أو غيرها، المهم أن يكون لديك دافع لتعلم المجال، وأن تجعل هذا الدافع واضحًا نصب عينيك.
</p>

<h3 id="-">
	عملية التعلم ليست سهلة
</h3>

<p>
	إذا تعودت فهم المادة العلمية دون كثير من الدراسة فقد تصدمك بعض المفاهيم هنا لصعوبتها، إذ لا تُعد علوم الحاسوب عادة من العلوم السهلة، لكن اعلم أنك لن تكون وحدك في هذا فكل من يخوض هذا المجال يعاني صعوبته، لئلا تشعر أن عندك قصور في إدراكك أو قدرتك على تعلم علوم الحاسوب، فكما أن قيادة الطائرات صعبة حتى على الذين أتقنوها، فكذلك علوم الحاسوب، وما ينجح فيها من ينجح إلا بالممارسة المستمرة والتدريب الذي لا يعرف الكلل.
</p>

<p>
	المبشر في هذا الصدد أن الدراسة تكون أصعب في العادة من البيئة العملية، حيث تتعلم تقنيات ومفاهيم جديدة باستمرار وما تكاد تستوعب أحد المفاهيم حتى تنتقل إلى مفهوم جديد يتحدى قدراتك المعرفية، فمدة التعلم تلك طالت أو قصرت تمثل محاولات من الصمود بشق الأنفس أمام سيل من المواد المعرفية المتجددة.
</p>

<p>
	وسترى إذا حصلت على شهادة جامعية والتحقت بوظيفة أن الأشهر الثلاثة الأولى تمضي عليك كأنها تجربة تعلم متسارعة بالكاد تمسك فيها بزمام الأمور، لكن يستقر الوضع بعد تلك الأشهر ويتلاشى ذلك الإجهاد رويدًا لتصبح الوظيفة نفسها مملة وسهلة رغم صعوبة تصديق ذلك وأنت لا زلت في بداية تعلمك، وسيدفعك الملل من سهولتها إلى البحث عن وظيفة جديدة فيها تحديات أكثر.
</p>

<h2 id="-">
	حل المشكلات
</h2>

<p>
	يقتبس هذا القسم فكرته من كتاب How to Solve it لمؤلفه جورج بوليا George Pólya، وهو كتاب يتناول كيفية التعامل مع المشاكل الرياضية، وذلك أن علوم الحاسوب في جوهرها إنما هي فرع من أفرع الرياضيات، فيمكن تطويع قواعد حل المشكلات الرياضية لتناسب علوم الحاسوب، وتتلخص منهجية الكتاب فيما يلي:
</p>

<ol>
	<li>
		فهم المشكلة
	</li>
	<li>
		التخطيط لكيفية حلها
	</li>
	<li>
		كتابة الحل برمجيًا
	</li>
	<li>
		مراجعة الحل لتحسينه
	</li>
</ol>

<p>
	تبدو هذه الخطوات الأربعة عند التفكر فيها مناسبة لحل أي مشكلة تقريبًا، فيمكن تطبيقها إلى حد كبير إذا تعطل أحد الأجهزة المنزلية لديك مثلًا.
</p>

<p>
	وبناء على هذا المنطق فإن البرمجة ليست مجرد كتابة شيفرات أو أكواد برمجية، فلو نظرت إلى خطوات حل المشكلات التي ذكرناها أعلاه لوجدت أن ثلاثة منها ليس لها علاقة بالبرمجة، إذ تجري هذه الخطوات في ذهنك أو على الورق وقد لا تتطلب حاسوبًا حتى من الأساس، وعلى قدر ما يبدو هذا الأمر منافيًا للمنطق إلا أن هذا هو محل العمل الحقيقي لحل المشكلة، خاصة في الخطوة الثانية المتعلقة بوضع خطة للحل، فهو الجزء الأصعب والسبب الذي يجعلك تتقاضى راتبًا مجزيًا، فأي شخص يستطيع كتابة برنامج ما بمجرد أن تُحل المشكلة نفسها، فما هي إلا تدوين للحل الذي تم التوصل إليه.
</p>

<p>
	واعلم أنه يُستبعد أن يكون مسار تعلمك متسلسلًا إذا اتبعت هذه الخطوات، بل ستجد نفسك مضطرًا لمراجعة خطوات سابقة من حين لآخر، لكن المهم أن تظل تحاول وتتقدم للأمام، كما ينبغي أن تتجنب البحث عن إجابات جاهزة على الإنترنت، فالهدف هنا هو تمرين عضلات "حل المشكلات" لديك، فلن يوظفك أحد دون أن تكون لديك تلك المهارة، ذلك أن أي مشكلة تقريبًا تراها ستكون مشروحة بحلولها في الإنترنت أو باستخدام أدوات الذكاء الاصطناعي، لكن ليس الهدف أن تصل إلى الإجابة الصحيحة أثناء التعلم، وإنما التعود على المنهج الصحيح لحل المشكلات لتتمكن من إيجاد حل لأي معضلة تواجهك في المستقبل. لننظر الآن في تفصيل هذه الخطوات الأربعة.
</p>

<h3 id="-">
	فهم المشكلة
</h3>

<p>
	يحلو للكثير من الناس -خاصة الطلاب- تجاوز خطوة "فهم" المشكلة إلى ما بعدها، لذا يلجأ المعلم الخبير إلى وضع اختبار قصير يختبر فهم الطلاب واستيعابهم للمشكلة قبل البدء في وضع خطة لحلها أو كتابة ذلك الحل، لكن إذا كنت تدرس البرمجة ذاتيًا فيجب أن تعود نفسك تلك الخطوة لتكون ركنًا لديك لا تتجاوزه إلى ما بعده دون إتمامه، ذلك أنك إذا لم تستوعب المشكلة وتفهمها فهمًا عميقًا ستخرج بحل مثالي في النهاية ولكن للمشكلة الخطأ، وهذا في أفضل أحواله هدر لموارد صاحب العمل أو مديرك إذا كنت موظفًا، وهدر لوقتك كطالب في حين كان الأجدر بك استغلاله في أمر نافع. إليك بعض الاقتراحات التي تسهل عليك عملية الفهم للمشكلة التي تتعرض لها:
</p>

<ul>
	<li>
		اقرأ نص المشكلة ببطء وبمنهجية حتى لو عنى ذلك أن تعيد قراءة الجمل عدة مرات، فتوصيفات المشاكل عادة ما تكون موجزة ومعقدة
	</li>
	<li>
		دون ملاحظات عما تقرؤه، خاصة حول التناقضات أو النقاط المحذوفة أو الأخطاء أو الأسئلة التي تطرأ على ذهنك أثناء قراءتك
	</li>
	<li>
		أعد صياغة المشكلة بأسلوبك الخاص، فهذا أسلوب فعال لاكتشاف الفجوات في فهمك للمشكلة
	</li>
	<li>
		ابحث في مصادر خارجية عما يستشكل عليك من النقاط المذكورة في وصف المشكلة
	</li>
	<li>
		اكتب أسئلة تستوضح النقاط التي أشكلت عليك
	</li>
</ul>

<p>
	ستعرف أنك أتممت خطوة "فهم المشكلة" إذا استطعت شرح المشكلة لشخص آخر، ذلك أنه يصعب كتابة وصف كامل لمشكلة ما إذا لم تستوعبها بنفسك أولًا، وستجد أثناء دراستك أو عملك أن توصيفات المشاكل التي تقابلك لا بد أن يعتريها وجه أو أكثر من وجوه النقص، فأكاد أجزم أنك لو حاولت أن تكتب قواعد لعبة بسيطة مثل XO ستجد فيما كتبت تفصيلًا نسيته هنا أو هناك، وهنا تبرز أهمية الأسئلة الاستيضاحية.
</p>

<p>
	يضرب برايان مثلًا على هذا بمشروع عمل عليه من قبل حيث تولى مهمة برمجة الواجهة الأمامية Front-end فيه، بينما تولى شخص آخر مهمة الواجهة الخلفية، وكان بينهما مستند يصف بدقة آلية العمل بين الواجهتين، حيث نصت إحدى آليات العمل على إرسال نتيجة عملية حسابية، مع مثال يوضح النتيجة بصيغة ست عشرية Hexadecimal كما يلي: إذا كانت المدخلات هي <code>abc</code> و <code>xyz</code> فتكون النتيجة هي الرقم <code>f319c2c6dcfb</code>.
</p>

<p>
	كتب برايان هذه العملية برمجيًا واستخرج النتيجة الصحيحة ثم أضاف الشيفرة اللازمة لإرسال الرقم المكون من 6 بايتات إلى الخادم، لكن المسؤول عن الخادم راسله قائلًا أن هذا الاستنتاج خاطئ، وتبين بعد عدة محادثات بينهما أن المسؤول عن الخادم فهم من المستند أنه سيرسل سلسلة نصية string تحتوي على تلك الأرقام الست عشرية، بينما كان ما فهمه برايان هو أنه سيرسل بايتات خام raw bytes، وفي النهاية كان الحل الأسهل هو تحويل الرقم إلى سلسلة نصية وإرسالها. يوضح هذا المثال كيف أن وصف المشكلة قد يكون غامضًا ويمكن فهمه على أكثر من وجه، وأهمية الفهم الصحيح للمشكلة قبل البدء في حلها.
</p>

<h3 id="-">
	وضع خطة الحل
</h3>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			البرمجة هي أن تخبر إنسانًا آخر بما تريد من الحاسوب أن يفعله
		</p>

		<p>
			دونالد نوث Donald Knuth، عالم حاسوب
		</p>
	</div>
</blockquote>

<p>
	لم يحن بعد وقت الكتابة البرمجية، حيث تمثل هذه الخطوة  -أي وضع خطة الحل- الجوهر الحقيقي لعملية البرمجة، وهذا ما يجعل العمل في مجال علوم الحاسوب أو البرمجة صعبًا وهو نفس السبب الذي يجعل رواتب المبرمجين عالية، فيجب أن تبرع في وضع خطط ناجحة إذا أردت أن تصبح مطورًا متميزًا.
</p>

<p>
	يجب أولًا أن نفهم المشكلة إلى الدرجة التي تمكنك من شرحها للآخرين رغم أن هذا لا يعني أنك ستعرف كيفية حلها، وقد يكون وضع خطة الحل سهلًا وسريعًا إذا كانت المشكلة بسيطة ومألوفة لك خاصة حين تزيد خبرتك مع الوقت والممارسة، لكن قد تواجهك مشكلات لم ترها من قبل، فحينئذ ستحتاج إلى وقت طويل لوضع خطة الحل، حتى لو وصلت إلى مستوى خبرة عالي. إليك بعض المحاور التي ينبغي التفكير فيها للوصول إلى الحل، ربما يفيدك استخدام القلم والورقة هنا:
</p>

<ul>
	<li>
		كيف ستتدفق البيانات في النظام وكيف تتحول من مدخلات معروفة إلى المنتج النهائي المطلوب؟
	</li>
	<li>
		ما هي الأنظمة الفرعية التي ستنفذ كل خطوة أثناء عمليات التحول تلك؟
	</li>
	<li>
		ما هي التقنيات التي ستحتاجها لتنفيذ هذه الخطوات؟
	</li>
	<li>
		ما هي المجاهيل المعروفة، أي الأمور التي تدرك أنك لا تملك لها إجابة بعد؟
	</li>
</ul>

<p>
	لاحظ أننا نتحدث هنا عن تفكيك المشكلة إلى أجزاء صغيرة، قد يكون من الصعب فعل ذلك في بداية تعلمك لكن الأمر يصير أسهل مع الممارسة، فأحد طرق تفكيك المشكلات مثلًا هو أن تقول لنفسك أن المشروع سيكون أسهل لو كانت المدخلات على الصيغة كذا، ثم تحاول كتابة شيفرة برمجية تحول البيانات إلى تلك الصيغة (سنتناول هذا بالتفصيل لاحقًا).
</p>

<p>
	كذلك فإن تفكيك المشروع إلى أجزاء صغيرة يوجهك تلقائيًا إلى تقسيم شيفرتك البرمجية إلى دوال Functions أو أصناف Classes مما يسهل عملية قراءة الشيفرة البرمجية وصيانتها فيما بعد، ومن المتوقع في هذه المرحلة أن تلجأ إلى البحث لتعلم الأدوات التي ستستخدمها في حل المشكلة، وأن تكتشف قصورًا في فهمك الأولي للمشكلة، فإذا رأيت هذا فارجع إلى مرحلة الفهم السابقة لتبني تصورك وفقًا للبيانات الجديدة التي جمعتها، ثم استأنف مرحلة التخطيط بعدها.
</p>

<p>
	ستعلم أنك انتهيت من مرحلة التخطيط حين تستطيع محاكاة تشغيل البرنامج أو تنفيذ الحل على الورق وفي ذهنك، وتثق تمامًا في نجاحه، وكذلك حين تستطيع كتابة شيفرة وصفية Pseudocode عالية المستوى، وهنا من المفيد أن تعرض حلك على بعض الأشخاص لنقده وتحسينه.
</p>

<h3 id="-">
	كتابة الحل البرمجي
</h3>

<p>
	كل ما عليك فعله هنا هو ترجمة الخطط المكتوبة بالشيفرة الوصفية إلى شيفرة برمجية حقيقية، فإذا كنت قد استوعبت المشكلة جيدًا ووضعت خطة مناسبة لها فستعمل الشيفرة البرمجية بنجاح، بل ربما تنجح من المحاولة الأولى حتى، أما إذا أهملت المراحل السابقة من فهم للمشكلة ووضع خطة مناسبة فلن تكون كتابة الحل برمجيًا سهلة، بل سترى مشاكل لا نهاية لها، وقد يكون مآل المشروع إلى إخفاق مخيب، فهذا يبرز الأهمية البالغة للفهم والتخطيط الصحيح قبل الشروع في الحل.
</p>

<p>
	صحيح أننا بشر وقد نرتكب أخطاءً أو هفوات أثناء كتابة الحل، لكن تصحيح تلك الأخطاء أسهل من محاولة إصلاح الخطة التي نبني عليها ذلك الحل نفسه، وأسهل من تصحيح فهم خاطئ للمشكلة من الأساس. سترى أن التحديات التي تواجهها في هذه المرحلة تتمثل فيما يلي:
</p>

<ul>
	<li>
		إتقان قواعد اللغة البرمجية التي تستخدمها
	</li>
	<li>
		معرفة المكتبات البرمجية المتاحة والتي يمكن استخدامها
	</li>
	<li>
		تجنب الوقوع في الأخطاء البديهية أو الصغيرة
	</li>
	<li>
		الالتزام بخطة الحل الموضوع بدقة
	</li>
</ul>

<p>
	سنتحدث عن كيفية تعلم اللغات البرمجية لاحقًا، لكن النقطتين الأخيرتين يمكن معالجتهما عبر توخي الحذر أو اتباع أسلوب البرمجة الثنائية Pair Programming -أسلوب برمجة يتشارك فيه اثنان من المبرمجين في كتابة الحل، حيث يكتب أحدهما الشيفرة البرمجية بينما يراقبه الثاني لتصحيح الأخطاء أو تقديم الملاحظات، ويتبادلان هذين الدورين أثناء كتابة الشيفرة البرمجية-، أو الاستعانة بالذكاء الاصطناعي.
</p>

<p>
	ويكثر هنا أن تكتشف ثغرة في خطتك أثناء كتابة الحل البرمجي، وعندئذ يجب العودة فورًا إلى المرحلة التي تسببت في هذه الثغرة، سواء كانت مرحلة التخطيط أو حتى مرحلة الفهم الأولي للمشكلة. ستعلم أنك أتممت مرحلة كتابة الحل البرمجي إذا عملت الشيفرة البرمجية بنجاح واجتازت جميع اختباراتك لها.
</p>

<h3 id="-">
	المراجعة والتحسين
</h3>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			البرمجة حرفة، فافتخر بما صنعته يداك
		</p>

		<p>
			برايان هول (مؤلف الدليل)
		</p>
	</div>
</blockquote>

<p>
	نأتي هنا إلى مرحلة المراجعة لما أنجزناه لنلقي عليه نظرة ناقدة، صحيح أن الشيفرة تعمل واجتازت اختباراتنا لها، لكن هل هي سهلة القراءة والصيانة، وهل توجد أجزاء هشة قد تنهار أمام مدخلات غير متوقعة؟ ثمة فرص للتحسين مهما كنت خبيرًا في مجالك، وتُعد مراجعة الشيفرات القديمة التي كتبناها هي إحدى أنجح الطرق التي نتعلم بها ونطور مهاراتنا، لنبحث في كيفية تحسينها وكتابتها بشكل أفضل، إما بمراجعتها بنفسك أو بطلب ذلك من مبرمج آخر لتقديم مقترحات للتحسين قد تقبلها وتنفذها أو ترى أنها غير مناسبة لشيفرتك، فكلا الأمرين وارد، لكن العملية نفسها، أي مراجعة الشيفرات Code Reviews لا غنى عنها لصقل قريحتك البرمجية.
</p>

<p>
	وتستطيع هنا الاستعانة بالذكاء الاصطناعي عند حل المشكلة ورؤية الحل يعمل بكفاءة، حيث تعرض الحل على أداة ذكاء اصطناعي مناسبة لاقتراح تحسينات على شيفرتك وتراجع تلك الاقتراحات لترى إن كان فيها ما يناسب الحالة التي لديك، لكن اعلم أن هذا الاقتراح مناسب للشيفرات الصغيرة فقط وليس المشاريع الكبيرة، مما يجعله مناسبة للمساعدة في فهم التكليفات والمشاكل التي يطلب منك حلها أثناء الدراسة.
</p>

<p>
	ونؤكد هنا أن عليك حل المشكلة بنفسك أولًا قبل النظر في مساعدة خارجية لتحسينها، فالهدف من التدريب أثناء الدراسة هو نفسه الهدف من التدريب الرياضي، أي ممارسة التمرين والحصول على الفائدة الرياضية للجسد وتقييم الأداء، لا أن يقوم شخص آخر بأداء التمرين بدلًا منك.
</p>

<p>
	قد تمتلئ الشيفرة البرمجية بالأخطاء bugs أو تفتقر للكفاءة أو التنسيق الجيد، أو قد تكون صعبة القراءة، فينبغي الانتباه هنا إلى أن الشيفرة البرمجية يجب أن تكون سهلة القراءة والفهم من قبل غيرك من المبرمجين كي تكون سهلة الصيانة، وهذا يعني أن يكون مظهر الشيفرة البرمجية منسقًا، ذلك أن شكل الشيفرة قد لا يهم بالنسبة للمصرِّف compiler، لكن لا ينبغي أن نعذب البشر بقراءة طلاسم صعبة الفهم.
</p>

<p>
	لا تتوقع أن تنتهي هذه المرحلة أبدًا، على عكس ما سبق، لكن تستطيع أن تنتقل إلى غيرها حين تقرر أنك تعلمت ما يكفي من تحسين الشيفرة التي بيدك، فمن المستبعد أن تصل إلى الحل المثالي والنهائي لمشكلة ما، لأن المبرمج المتميز لا يتوقف عن التعلم طول حياته، فهذه المرحلة هي موطن التعلم الحقيقي حيث يمكن رفع مستوى مهاراتك فيها بجهد بسيط نسبيًا، فاحرص على تخصيص وقت ولو قليل بعد نهاية كل مشروع لمراجعة ما تم تنفيذه والطرق الممكنة لتحسين تنفيذ ذلك الحل في المستقبل.
</p>

<p>
	وتكون مرحلة المراجعة في بيئة العمل أثناء جلسات تحليل ما بعد المشروع، حيث يجتمع العاملون على المشروع لدراسة ما تم فيه بشكل صحيح وما كان ينبغي تجنبه أو تحسينه.
</p>

<h3 id="-">
	توقع أخطاء المستخدمين
</h3>

<p>
	من المفيد عند التفكير في حل المشكلات أن تفكر من منظور المستخدم الذي قد يستخدم البرنامج أو النظام الذي تبنيه استخدامًا خاطئًا عامدًا أو غير متعمد من أجل تلافي أخطاء المستخدمين غير المتوقعة قدر الإمكان. على سبيل المثال، إذا كان لدينا دالة لحساب الجذر التربيعي فإن التفكير المنطقي يقول أن الاختبار الجيد لمثل تلك الدالة هو إعطاؤها أرقامًا مربعة كاملة وغير كاملة وكسورًا كذلك، وتكون الدالة سليمة إذا نجحت في إعطاء نتائج صحيحة لكل تلك المدخلات التي أدخلناها، لكن ماذا لو أدخلنا إليها أرقامًا سالبة مثلًا، كيف ستتصرف الدالة حينها؟ هذا ما نقصده بتوقع الأخطاء التي قد يُستبعد أن يفكر أحد فيها، لكنها واردة الحدوث من المستخدمين.
</p>

<p>
	يروي برايان أحد الأمثلة الواقعية على هذا في صورة متجر إلكتروني يسمح بطلب كميات سالبة من المنتجات، ونتيجة لهذا صارت القيمة المطلوبة في صفحة إتمام الشراء بالسالب، أي ستضاف إلى حساب برايان بدلًا من أن تخصم منه. هذا مثال جيد على أهمية توقع ما لا يمكن توقعه فيما يخص البيانات التي ستتلقاها شيفرتك البرمجية، فمن الوارد أن يوجد مخربون يغذون النظام ببيانات مضللة في محاولة منهم للوصول غير المصرح به، أو التلاعب بالنظام على وجه لا تريده، فيجب أن نضع الشيفرة البرمجية محل اختبار في هذه الحالات أيضًا، أي يجب أن تضع نفسك مكان شخص مخرب يقصد إساءة استخدام النظام، وتختبر شيفرتك عبر محاولة محاكاة سلوكه، وهذا ينطبق على جميع المراحل التي ذكرناها من الفهم وصولًا إلى المراجعة والتحسين.
</p>

<p>
	ويذكر مثالًا لزميل له عمل لصالح الجيش حيث كان يفحص مخططات لآلات عسكرية مثل الدبابات قبل دخولها خط الإنتاج، وكانت مهمته تتلخص في التفكير بالحالات غير المتوقعة وطرح أسئلة مثل "كيف ستدخل مفتاح ربط بين هذه الأنابيب لتثبيت هذا المسمار؟"، فهذا المنهج في التفكير يساعدك على رصد المشكلات التي قد تغيب عن بالك، وإلى فهم أعمق للمشروع مما ينتج عنه شيفرة برمجية أمتن وأكثر قابلية للصيانة في المستقبل.
</p>

<h3 id="-">
	تطبيق هذه المبادئ في مقابلات العمل
</h3>

<p>
	تتسم المشكلات التي يتعرض لها المتقدم لوظيفة برمجية بكونها مخادعة نوعًا ما بحيث لا يكون لها إجابات بديهية، وذلك لأن مسؤول التوظيف الذي يجري معك المقابلة سيطرح أسئلة ملتوية لا تبدو إجابتها واضحة مهما كنت مستعدًا لها، وهم يريدون بهذا أن يروا الطريقة التي تحل بها المشكلات التي تواجهك، وإن كان هذا ليس بقاعدة لجميع المقابلات البرمجية، حيث يهدف بعضها إلى أن يرى عدد الإجابات الصحيحة التي ستخرج بها، لكن كاتب الدليل يرى أن هذه الطرق على النحو الحالي غير مثالية، وأن الطريقة الوحيدة للوصول إلى الإجابة الصحيحة هي تطبيق خطوات حل المشكلات التي ذكرناها من قبل.
</p>

<p>
	قد ينتابك الذعر تحت ضغط المقابلة حين ترى مشكلة تبدو مستحيلة الحل في البداية، فتبهتك وطأة الموقف وتتبخر كل معلوماتك فجأة وتشعر أن الوظيفة قد ضاعت من يديك، لكن انتبه أن هذا طبيعي ووارد فينبغي أن تتمالك نفسك وتطمئنها أن المهم الآن هو فهم المشكلة، ولا تشغل بالك بالحل ولا كتابة الشيفرة البرمجية، بل هذه الخطوة فقط، أي فهم المشكلة.
</p>

<p>
	وأهمية هذا النهج تظهر إذا علمت أن من يجري معك المقابلة يريدك أن تبدأ من نقطة فهم المشكلة، وهذا في حد ذاته يُعد سببًا كافيًا، وأن البدء بفهم المشكلة سيحفز عقلك على أن يعمل بمنطقية ويبتكر استراتيجية للحل، وهي الخطوة الثانية في إطار العمل الذي وضحناه من قبل، أي خطوة وضع خطة الحل.
</p>

<p>
	حاول هنا أن تفكر في الاحتمالات غير المتوقعة والنقاط الغامضة في وصف المشكلة، واطرح أسئلة على مسؤول التوظيف للاستفهام منه في تلك النقاط، مثل أسئلة عن المدخلات والمخرجات وحدودها، وكذلك كيفية التصرف في حالات الخطأ، فقد يكون هذا إما في صورة سؤال مباشر أو في اقتراح أمثلة لمدخلات ومخرجات معينة والتأكد من صحتها بسؤال مسؤول التوظيف، فهذا يظهر اهتمامك بالتفاصيل وهي سمة مهمة للغاية في أي مهنة عمومًا وفي البرمجة خاصة، كما يوحي هذا لمحاورك أنك تبدأ مشاريعك يقرارات مدروسة ومتأنية.
</p>

<p>
	وقد تتفاجأ إذا علمت كثيرًا ممن يجرون مقابلات التوظيف البرمجية يهمهم رؤيتك تفكك مشكلة بطريقة منهجية وفعالة أكثر من وصولك للإجابة الصحيحة، بل إن إعطاء إجابة صحيحة دون إظهار مهاراتك وكيف وصلت إلى تلك الإجابة قد يتسبب في استبعادك من تلك الوظيفة.
</p>

<p>
	يضرب كاتب الدليل مثلًا على هذا بمقابلة أجراها في شركة Activision حيث فشل في الوصول إلى حل صحيح لسؤالين، لكنه واصل التفكير بصوت عالي وبذل قصارى جهده لتوضيح كيفية تفكيره في المشكلة التي أمامه، ونال تلك الوظيفة في النهاية، وكان السؤالان اللذان أخفق فيهما هما "ما هي أسرع طريقة لعكس ترتيب البتات داخل البايت الواحد؟" و"حسِّن كفاءة عملية حسابية تبني شبكة مسافات بين جميع لاعبي كرة القدم في الملعب".
</p>

<p>
	شاهد المثال السابق أن تجعل عملية التفكير كلها واضحة لمن تجري معه المقابلة، ولا تنس خطوة المراجعة والتحسين: ما الذي كنت ستفعله بشكل أفضل، أو كيف يمكن تطوير الحل وما هي المزايا التي يمكن إضافتها في المستقبل، فإن المحاورين يحبون هذه التفاصيل في المقابلات البرمجية.
</p>

<h3 id="-">
	تكلفة كل مرحلة
</h3>

<p>
	تجدر الإشارة إلى ملاحظة هامة حول إطار العمل الخاص بحل المشكلات، وهي أن تكلفة التعديل على البرمجيات تزداد أضعافًا مضاعفة كلما تقدمنا في مراحل تطويرها، ففي مرحلة الفهم الأولى تكون التعديلات قليلة التكلفة في الوقت والجهد والثمن، بل مجانية أحيانًا إذ ليس لدينا خطة بعد حيث نكون في مرحلة العصف الذهني، وتظل تكلفة التعديلات قليلة في مرحلة التخطيط، لكن لن تكون مجانية قطعًا، فإجراء تعديل واحد قد يؤثر على أجزاء أخرى من الخطة، مما يتطلب إعادة رسمها، أو العودة إلى مرحلة الفهم السابقة.
</p>

<p>
	أما عند الوصول إلى المرحلة الثالثة، وهي مرحلة البرمجة Coding، فهنا تكون التعديلات عالية التكلفة، فقد تكتشف أن عليك التخلص من شيفرات برمجية تكلف تطويرها آلاف أو ملايين الدولارات، ثم إعادة كتابتها مرة أخرى، رغم أن مثل هذه الحالات يرد حدوثها كثيرًا في الشركات، لكنها تلجأ إلى مثل هذه العملية بعد إجراء تحليل عميق للتكلفة مقابل القيمة Cost-Benefit لترى إن كان التعديل يستحق.
</p>

<p>
	وتصل تكلفة التعديلات إلى مداها بعد إطلاق البرنامج لأن العملاء لا يحبون فرض التحديثات عليهم بعد أن بنوا أنماط عملهم حول النسخة التي بأيديهم، مما قد يحمل هنا تكاليف خفية وغير مباشرة مرتبطة بالتغيير، إضافة إلى التكلفة الظاهرة في إعادة التخطيط والبرمجة والبناء والاختبار وإرسال التحديثات إلى العملاء.
</p>

<p>
	لكنك في أثناء دراستك لعلوم الحاسوب لن تشغل بالك كثيرًا بالتكاليف والخسائر التي سيتكبدها المشروع، بل سيكون همك امتلاك الوقت الكافي لإنهاء المهمة التي بيديك والحصول على تقييم جيد فيها، لذا ينبغي أن تركز على مرحلتين الفهم والتخطيط حيث تكون التعديلات قليلة التكلفة من حيث الوقت، لتضمن الوصول إلى أفضل النتائج بسرعة وكفاءة وبأقل قدر مطلوب من الجهد، وقبل موعد التسليم أيضًا.
</p>

<h2 id="-">
	تفكيك المشكلات
</h2>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			ما خفي كان أعظم
		</p>
	</div>
</blockquote>

<p>
	تساعدك الخطوات التي ذكرناها سابقًا لحل المشكلات (الفهم، التخطيط، كتابة الحل البرمجي، المراجعة والتحسين) على تجاوز أي مشكلة تتعرض لها تقريبًا، لكن الواقع يخبرنا أن المشاكل تكون أجزاءً أصغر من مشاكل أكبر منها، وتلك المشاكل تمثل أجزاءًا في مشاكل أكبر، وهكذا. على سبيل المثال، إذا أردنا أن نبني طاولة فسيكون وصف المشكلة هو "اصنع طاولة" وكفى، لكن الواقع يقول أن هذا الوصف لا يكفي إذا لم تكن قد صنعت طاولة من قبل، فينبغي في تلك الحالة أن نقسم المشكلة إلى أجزاء أصغر منها، مثال:
</p>

<ul>
	<li>
		صناعة الطاولة
	</li>
	<li>
		تثبيت أرجل الطاولة في القرص العلوي
		<ul>
			<li>
				صناعة القرص العلوي للطاولة
			</li>
			<li>
				صناعة أرجل الطاولة
			</li>
		</ul>
	</li>
</ul>

<p>
	وحتى هذا التفصيل قد لا يكون كافيًا، فكيف نصنع أرجل الطاولة؟ وكيف نصنع القرص العلوي لها؟ ستكون التفاصيل وفقًا لهذه الأسئلة كما يلي:
</p>

<ul>
	<li>
		صناعة الطاولة
		<ul>
			<li>
				تثبيت أرجل الطاولة في القرص العلوي
				<ul>
					<li>
						صناعة القرص العلوي
						<ul>
							<li>
								صنفرة سطح القرص العلوي
								<ul>
									<li>
										لصق حواف جانبية للقرص العلوي
										<ul>
											<li>
												قص الجزء العلوي الأساسي
												<ul>
													<li>
														تعلم كيفية استخدام منشار الطاولة
													</li>
												</ul>
											</li>
											<li>
												قص حواف الجزء العلوي
											</li>
										</ul>
									</li>
								</ul>
							</li>
						</ul>
					</li>
					<li>
						صناعة أرجل الطاولة
						<ul>
							<li>
								قص الأرجل
							</li>
							<li>
								استخدم المخرطة لصناعة الشكل النهائي للأرجل
								<ul>
									<li>
										تعلم استخدام المخرطة
									</li>
								</ul>
							</li>
						</ul>
					</li>
				</ul>
			</li>
		</ul>
	</li>
</ul>

<p>
	وهكذا، قد نستغرق في تقسيم المشكلة إلى أن نصل إلى خطوات صغيرة ندرك يقينًا أننا نستطيع تنفيذها، وقد تضطر في بداية تعلمك أن تفكك المشكلة وصولًا إلى مستوى السطر البرمجي الواحد، أما المطور الخبير فلا يحتاج غالبًا أن يصل إلى هذا المستوى لأنه يتقن الخطوات الفرعية، فالنجار متوسط الخبرة قد يكتفي بتفكيك خطوات صناعة الطاولة إلى المستوى الثاني فقط، دون الدخول في تفاصيل استخدام المنشار مثلًا.
</p>

<p>
	وتذكر أن تفكيك المشكلات مهارة تصقلها الممارسة، ونريدك أن تستحضر القاعدة التي ذكرناها من قبل، وهي أن هذه المشكلة ستصير سهلة لو كانت البيانات بصيغة كذا، فهي إشارة لك لكي تخصص خطوة لمشكلة فرعية تحول البيانات إلى تلك الصيغة التي تظنها سهلة، من أجل تصير المشكلة الأساسية نفسها أسهل عليك.
</p>

<p>
	وينبغي عند التعامل مع أي من هذه المشاكل الفرعية أن تتعامل معها كأنها المشكلة الوحيدة التي لديك، لتركز عليها وتحاول حلها بمعزل عن غيرها، وإذا تعسر ذلك فحاول أن تقسمها إلى مشاكل فرعية أصغر وهكذا، ستجد مع كثرة الممارسة أنك لم تعد بحاجة إلى تفكيك المشكلات إلى مستويات عميقة كما في السابق، بل ستشرع فيها كخبير يستطيع تمييز الأنماط المتكررة التي يمكنه إعادة استخدامها.
</p>

<p>
	قد لا يكون من السهل تفكيك المشكلة في كل مرة، وعندها يفيدك أن تتخيل تجسيدًا ماديًا لما تحاول برمجته، فإذا كنت تكتب خوارزمية للفرز والترتيب مثلًا، تخيل مجموعة مكعبات أبجدية على طاولة تريد ترتيبها، ثم تخيل أنك تشرح لصديق غير تقني كيفية حلها، كيف ستصف له الخطوات والشروط والصورة النهائية التي تنبغي أن تكون عليها تلك المكعبات. إذا كنت تستطيع ترتيب الكتب في مكتبتك يدويًا فأنت حتمًا قادر على كتابة خوارزمية تشرح كيفية تنفيذ ذلك الترتيب، كل ما عليك فعله هو تفكيك الخطوات التي نفذتها فقط.
</p>

<h3 id="-pseudocode">
	الشيفرة الوصفية Pseudocode
</h3>

<p>
	تعد الشيفرة الوصفية من أهم الأدوات التي يستخدمها المطور لاستكشاف الأفكار، فهي موجهة للبشر وليس للحواسيب، أي لا يستطيع الحاسوب قراءتها، رغم أن البعض يرى لغة بايثون قريبة جدًا من الشيفرة الوصفية، وتستطيع استخدام الشيفرة الوصفية لرسم الخطوط العريضة لخطوات خوارزمية أو عملية ما لإجراء فحص سريع أو لمجرد اكتشاف كيفية إنجاز مهمة ما، فتستطيع مثلًا أن تكتب شيفرة وصفية تدرج قيمة في قائمة من القيم مرتبة مسبقًا كما يلي:
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			 <code>ابحث عن المكان الصحيح في القائمة<br>
			أدخل القيمة هناك</code>
		</p>
	</div>
</blockquote>

<p>
	لكن هذه الخطوات لا تصف المطلوب بدقة، لذا سنفككها أكثر:<code> </code>
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			<code>ابحث عن المكان الصحيح في القائمة</code>
		</p>

		<p>
			<code>ابحث عن أول عنصر أكبر من القيمة الجديدة</code>
		</p>

		<p>
			<code>أدرج القيمة هناك </code>
		</p>

		<p>
			<code>أزح جميع القيم الأكبر إلى اليمين</code>
		</p>

		<p>
			<code>ضع القيمة الجديدة في المكان الذي فرغ للتو</code>
		</p>
	</div>
</blockquote>

<p>
	هكذا تكون الصورة قد اتضحت قليلًا، لكن لا زال يمكن تحسينها كما يلي:<code> </code>
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			<code>ابحث عن المكان الصحيح في القائمة </code>
		</p>

		<p>
			<code>ابحث عن أول عنصر أكبر من القيمة الجديدة </code>
		</p>

		<p>
			<code>أنشئ حلقة تكرارية‫ <span class="hljs-keyword">Loop</span> تمر على العناصر</code>
		</p>

		<p>
			<code>أوقف الحلقة حين تعثر على عنصر أكبر</code>
		</p>

		<p>
			<code>أدرج القيمة هناك </code>
		</p>

		<p>
			<code>أزح جميع القيم الأكبر إلى اليمين </code>
		</p>

		<p>
			<code>ضع القيمة الجديدة في المكان الذي فرغ للتو</code>
		</p>
	</div>
</blockquote>

<p>
	لا زال لدينا مرحلة أخرى من التحسين على هذه الخطوات:
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			<code>ابحث عن المكان الصحيح في القائمة </code>
		</p>

		<p>
			<code>ابحث عن أول عنصر أكبر من القيمة الجديدة </code>
		</p>

		<p>
			<code>أنشئ حلقة تكرارية‫ <span class="hljs-keyword">Loop</span> تمر على العناصر</code>
		</p>

		<p>
			<code>أوقف الحلقة حين تعثر على عنصر أكبر</code>
		</p>

		<p>
			<code>سجّل الفهرس الذي يسبق هذا العنصر </code>
		</p>

		<p>
			<code>أدرج القيمة هناك </code>
		</p>

		<p>
			<code>أزح جميع القيم الأكبر إلى اليمين </code>
		</p>

		<p>
			<code>ضع القيمة الجديدة في المكان الذي فرغ للتو </code>
		</p>

		<p>
			<code>اضبط قيمة العنصر عند ذلك الفهرس لتكون هي القيمة الجديدة</code>
		</p>
	</div>
</blockquote>

<p>
	هكذا نكون قد اقتربنا كثيرًا من تحويل شيفرتنا الوصفية إلى شيفرة حقيقية، فمثلًا لا تزال الآلية الخاصة بإزاحة القيم غير واضحة وربما ينبغي أن نفككها أكثر.
</p>

<p>
	يلجأ المطورون أحيانًا إلى إضافة الشيفرة الوصفية كتعليقات داخل الشيفرة الحقيقية للبرنامج، بحيث تكون الشيفرة الحقيقية تحت وصفها لتسهيل فهمها وصيانتها في المستقبل، وهذه الطريقة -أي الشيفرة الوصفية- وسيلة ممتازة أثناء مرحلة التخطيط لأنها تعينك على إتقان مرحلة التفكير والتخطيط للعملية البرمجية كلها.
</p>

<h3 id="-proof-of-concept">
	بناء النموذج الأولي Proof of Concept
</h3>

<p>
	إلى هنا نكون قد فهمنا المشكلة الأصلية التي نريد حلها وقسمناها إلى أجزاء أصغر منها تمثل مشكلات فرعية، لكننا لا نعرف بعد إن كانت تلك المشكلات الفرعية قابلة للتنفيذ أصلًا أم لا، فهل تستطيع مثلًا معالجة صورة في عنصر <code>canvas</code> في HTML ثم حفظ تلك الصورة مباشرة إلى معرض الصور في هاتف محمول؟
</p>

<p>
	لعلك لم تنفذ هذه العملية من قبل، ولا تعرف هل يمكن تنفيذها تقنيًا أم لا، وهنا تبرز أهمية بناء نموذج أولي proof of concept يثبت إمكانية تنفيذها، وتطبيقًا على مثال الصورة هنا، سننشئ صفحة ويب ونضيف عنصر <code>canvas</code> ثم نرسم فيه شكلًا بسيطًا مثل مربع أو مستطيل، ثم نضيف الشيفرة التي تحمّل هذا الشكل كصورة إلى المعرض عند النقر على زر التحميل.
</p>

<p>
	كانت هذه الخطوة في السابق تتطلب الكثير من البحث وقراءة المراجع والكتب خاصة إن لم تكن تعرضت من قبل للمفهوم أو المشكلة التي تحاول حلها، لكن صار الأمر أسهل بالاعتماد الصحيح على أدوات الذكاء الاصطناعي للإجابة على أسئلة مثل "هل كذا ممكن؟ وكيف؟"، بل وكتابة بعض الشيفرات التي يمكن استخدامها في النموذج الأولي، سنخرج باستنتاجين إذا بنينا هذا النموذج الأولي وعمل بدون مشاكل:
</p>

<ol>
	<li>
		أن الفكرة يمكن تنفيذها عمليًا
	</li>
	<li>
		أننا عرفنا كيف نكتب الشيفرة الحقيقية المطلوبة لتنفيذها
	</li>
</ol>

<p>
	تشكل الشيفرة التجريبية التي نستخدمها في النموذج الأولي نواة لما ستكون عليه الشيفرة الحقيقية في بيئة التشغيل الحقيقية للبرنامج، لكنها لا تُستخدم بذاتها ويتم التخلص منها في الغالب، رغم أن هذا قد يكون صعبًا خاصة بعد بذل وقت ومجهود في التوصل إليها أو كتابتها لكن اعلم أن هذه الشيفرة تجريبية وغرضها إثبات نجاح الفكرة أو قابلية تنفيذها عمليًا، والمهم هنا هو المعرفة والخبرة التي اكتسبتها أثناء العمل عليها، وليس الشيفرة ذاتها.
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			التخلص من إحدى النسخ أمر حتمي
		</p>

		<p>
			فريد بروكس Fred Brooks، كتاب The Mythical Man-Month
		</p>
	</div>
</blockquote>

<p>
	تصلح شيفرة النموذج الأولي في عرض شكل المنتج النهائي أو كيفية عمله للآخرين، ذلك أن المطورين يكتبون نماذج محاكاة mock implementation للتطبيق أو البرنامج الذي يعملون عليه، لا يعمل فيه إلا جزء صغير فقط من واجهة المستخدم لكنه يعطي فكرة عامة عن آلية عمل البرنامج مستقبلًا.
</p>

<h2 id="-">
	استخدام الأداة المناسبة
</h2>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			ما هي أفضل لغة برمجة؟
		</p>
	</div>
</blockquote>

<p>
	يُعد هذا السؤال من أكثر الأسئلة شيوعًا بين المبتدئين في مجال البرمجة، ويكثر أن يكون لدى كل واحد انحياز معين لهذه اللغة أو تلك، خاصة في بداية تعلمهم للبرمجة، لكن الواقع المشاهد لأي شخص قضى فترة في هذا المجال يقول أنه لا توجد لغة "فضلى" على إطلاق الوصف دون معرفة سياق المشكلة التي تحاول حلها، فلا أحد يقول مثلًا أن لغة Bash هي أفضل لغة في العالم، لكن توجد يقينًا مشكلات تحلها هذه اللغة بالطريقة المثلى.
</p>

<p>
	لنضرب مثلًا للتوضيح، إن السؤال عن لغة البرمجة الأفضل يشبه سؤالك هل المفك أفضل أم المطرقة، هذا ليس سؤالًا منطقيًا أو مقبولًا بذاته، بل يُعد سؤالًا ناقصًا، إذ كان ينبغي أن تُذكر المشكلة التي نريد حلها باستخدام المفك أو المطرقة، وعندها نستطيع الإجابة عن علم، أما إطلاق السؤال على عمومه يجعل الإجابة لا معنى لها، فكلاهما الأفضل بالنسبة للوظيفة التي صنع من أجلها.
</p>

<p>
	تحتوي كل لغة برمجية على نقاط قوة وضعف معًا، وتتمثل مهمتك كمطور أن تختار المطرقة للمسامير والمفك للبراغي، وأن تتقن استخدام هاتين الأداتين لوظيفة كل منهما، أما أن تقول مثلًا أنك لا تحب استخدام منشار الطاولة ولا تعرف استخدامه، وبناء عليه ستستخدم المطرقة لقطع ألواح الخشب، فهذه ليست الإجابة التي يبحث عنها مديرك.
</p>

<p>
	يذكر برايان -كاتب الدليل- أن مدربه في رياضة الغوص قدم له نصيحة حين أراد شراء بعض المعدات وكان يفاضل بين نوعين منها، إذ نصحه قائلًا أن المهم أن يشغل باله بالغوص نفسه وإتقانه، وليس الأدوات التي يستخدمها للغوص.
</p>

<p>
	وبإسقاط هذا المثال على مجال البرمجة سترى أن أفضل المطورين يتقنون أدوات كثيرة، ويعرفون متى يستخدمون كلًا منها، فإذا حدثتك نفسك بالابتعاد عن لغة ما لأنك تكره أمرًا فيها، فابحث عن الحالات التي تُستخدم فيها تلك اللغة وتصلح لها فهي لم تُبتكر عبثًا، فإذا عرفت حالات استخدامها عرفت مدى أهميتها لرحلة تعلمك ومتى يتعين عليك استخدامها تحديدًا، فإذا سألت مطورًا خبيرًا عن لغته المفضلة ربما يقول لك أنها Rust، أو بايثون، أو C أو جافاسكربت أو SQL أو AWK أو Bash، لكن دقة هذه الإجابة تتوقف على حالة الاستخدام التي تسأل عنها.
</p>

<h3 id="-">
	تبني الآراء التقنية
</h3>

<p>
	لا يناقض هذا القسم ما سبقه من أن كل اللغات أو الأدوات مناسبة للحالات التي صممت لها، فصحيح أن على المطور ألا يتحيز إلى لغة دون الأخرى وأنه بالنهاية يختار اللغة الأنسب للمشكلة التي بين يديه، لكن الرأي أو وجهة النظر المدعومة بمنطق سليم ستجبرك على فحص نقاط القوة والضعف للتقنيات المحتمل استخدامها لحل المشكلة التي لديك للتأكد من أنك اخترت الأداة المناسبة لحلها، هذا لا يعني أن تكون متعصبًا لرأيك وليس له علاقة بمن كان محقًا ومن على خطأ، فهذه أمور ليست ثوابت مقدسة، بل قد تكون كل الأطراف على صواب وخطأ في نفس الوقت، كأنها مثال قطة شرودنجر ولكن برمجية.
</p>

<p>
	يجب أن يكون لك رأيك الخاص في الأدوات التي تختارها، ويكون ذلك الرأي مدعومًا بمنطق مقبول وسليم لديك، سواء في لغة البرمجة أو المحرر النصي أو هذه المكتبة أو تلك، ينبغي أن تستطيع تبرير سبب اختيارك لتلك الأدوات بعينها لحالتك رغم أن غيرها موجود ويفي بالغرض.
</p>

<p>
	كذلك ينبغي أن يكون لك رأي في هياكل البيانات التي تختارها، ذلك أن البرمجة عمل إبداعي تستطيع فيه تحويل أي شيء تقريبًا إلى آلة تيورنج وحل مشكلتك بها، لكن في نفس الوقت توجد خيارات لا حصر لها يمكن استخدامها، فاختر الذي تراه الأفضل منها بناءً على منطقك وحاجتك في المشروع الذي تعمل عليه أو المشكلة التي تحلها.
</p>

<p>
	كن صاحب رأي كذلك في الخوارزميات التي تختارها، بنفس منطق الفقرتين السابقتين فستجد الكثير من الخوارزميات التي يمكن استخدامها، فانظر أيها تخدم حالتك أو تحل مشكلتك وبناء على ذلك تستطيع اتخاذ قرار باستخدام خورازمية فرز الدمج Mergesort مثلًا أو الفرز بالإدراج Insertion sort، وبالمثل هل الأفضل أن نستخدم البحث الثنائي Binary search أم البحث الخطي Linear search.
</p>

<p>
	ستحتاج عند اتخاذ قرار حول أي من التقنيات سالفة الذكر إلى أركان للمنطق الذي تقرر وفقًا له هل تستخدم هذه التقنية أم تلك، إليك بعض أمثلة تلك الأركان التي تساعدك في تكوين رأي صحيح:
</p>

<ul>
	<li>
		كفاءة تلك التقنية في حل المشكلة التي لديك وأداؤها مقارنة بغيرها
	</li>
	<li>
		سهولة قراءة الشيفرة الخاصة بالتقنية أو الخوارزمية أو لغة البرمجة وصيانتها مستقبلًا
	</li>
	<li>
		الوقت المستغرق في كتابتها وتطويرها
	</li>
	<li>
		تكلفة الأداة أو التقنية نفسها
	</li>
	<li>
		التقنيات المستخدمة بالفعل في المشروع ومدى توافق الأداة الجديدة معها
	</li>
</ul>

<p>
	واعلم أنه حتى بعد اعتبار هذه العوامل وغيرها في اتخاذ قرارك لا بد أن تتهيأ نفسيًا للتعلم المستمر لما لا تعرفه أو تضطر لاستخدامه، فهما كانت التقنية التي تستخدمها ستجد من يخالفك الرأي فيها، أو قد تجد نفسك تتخلى عنها بعد مدة لتغير العوامل التي جعلتك تستخدمها من قبل، ولا يهم ذلك التغير أو التحول طالما أنه مبني على منطق سليم وواعي، فستكتشف مع التعلم حالات خاصة قد تكون فيها تقنية هي أفضل من غيرها على خلاف ما كنت تظن من قبل، فتقبّل فرص التعلم الجديدة هذه واترك قناعاتك الأولى إذا وجدت غيرها أفضل لحالتك، سواء كان ذلك في أمر بسيط مثل اختيار أسماء المصفوفات في الشيفرة أو كبيرًا مثل اختيار إطار عمل Framework للمنتج الأساسي لشركتك.
</p>

<h2 id="-">
	نصائح للتعلم
</h2>

<p>
	توجد العديد من النصائح الخاصة بزيادة سرعة تعلمك وضمان استدامته، ويدرك المطورون مدى فائدة هذه النصائح لكنهم يصرون على تجاهلها في أغلب الأحيان، ورغم أننا لا نضمن نجاح تلك النصائح مع جميع المتعلمين إلا أننا نأمل أن تجد من بينها ما يفيدك في تعلمك للبرمجة.
</p>

<p>
	أحد الأمثلة على هذا هو الأسلوب الذي تحقق به التركيز المطلوب للدراسة أو تنفيذ المهمة التي بيديك، فقد يفضل البعض الصمت التام وبيئة خالية من المشتتات السمعية أو البصرية، أي لا نوافذ مفتوحة أو إضاءة وهاجة أو أصوات في الخلفية أو ألوان فاقعة أو هاتف بجوارهم، بينما يصل غيرهم إلى حالة التركيز تلك بسماع الضوضاء البيضاء White noise التي تمثل موجات أو أصوات لا تتغير وتيرتها فتحقق لهم عزلًا عن المحيط الذي حولهم، وهكذا، فاختر ما يصلح حالتك منها.
</p>

<h3 id="-">
	حالة التركيز العميق
</h3>

<p>
	توصف حالة التركيز العميق -تسمى أحيانًا حالة التدفق flow- في سياق الدراسة أو العمل بأنها الحالة الذهنية التي تبلغ فيها قمة تركيزك حيث تترابط أفكارك بلا مشتتات أو عوائق، وهذه الحالة مطلب كثير من المبرمجين الذين يريدون تحقيق أقصى قدر من الإنتاجية. إليك بعض خصائص هذه الحالة مقتبسة من موسوعة ويكيبيديا:
</p>

<ul>
	<li>
		تركيز عميق على ما يحدث في الوقت الحالي فقط
	</li>
	<li>
		اندماج بين الوعي والإدراك والفعل المترتب على ذلك الوعي
	</li>
	<li>
		تلاشي الشعور بالذات النقدية أو صوتك الداخلي
	</li>
	<li>
		إحساس بتمام السيطرة على الموقف أو النشاط الذي بين يديك
	</li>
	<li>
		اختلال في إدراك الوقت، حيث يتغير وعيك بالوقت الذي استغرقته في العمل أو التفكير في المهمة التي بيدك
	</li>
	<li>
		الشعور أن النشاط نفسه الذي تبذله أثناء الدراسة أو العمل على المهمة يمثل مكافأة في ذاته
	</li>
</ul>

<p>
	قد تكون مررت بهذه التجربة من قبل أثناء العمل على أمر أثار فضولك أو تطلب تركيزًا منك، فتيقن أن مثل هذه الحالة الذهنية عظيمة الفائدة للمبرمجين.
</p>

<h3 id="-">
	القراءة المسبقة
</h3>

<p>
	يغلب على الطلاب تأجيل العمل على المهام حتى اللحظة الأخيرة، فإذا كان عندك تكليف يوم الأحد فقد تطلع عليه صباح ذلك اليوم لأول مرة، لكن الأفضل أن تطلع على هذا التكليف بمجرد أن يطلب منك، حتى لو لم تكن لديك المعرفة الكافية لاستيعابه ولم تقرؤه بتركيز أو تعمق، بل من المفيد كذلك أن تعيد الاطلاع عليه بعد أن تكون قد أنهيت مهامًا غيره ولكن المهم أن يكون ذلك قبل الشروع في تنفيذ التكليف بأيام، وكل ذلك قراءة فقط دون أن تشغل بالك بكيفية الحل.
</p>

<p>
	فائدة هذه الطريقة أنها تهيئ عقلك بمعلومات عما ستعمل عليه فيما بعد، ومن المنطقي ألا تستوعب كل ما تقرؤه أو تحفظه، لكن عقلك سيعالج هذه البيانات في الخلفية، وسيسهل عليك التعامل مع التكليف أو المشروع نفسه عند الشروع في العمل عليه متبعًا الخطوات الأربع التي ذكرناها من قبل في حل المشاكل، وهي الفهم والتخطيط وكتابة الحل برمجيًا ثم مراجعته وتحسينه. ثمة أسلوب آخر ممتاز مشتق من هذه الطريقة، وهو أن تتم مرحلة الفهم للمشكلة في مرحلة مبكرة دون أن تشغل بالك بكيفية بتخطيط أو تنفيذ الحل نفسه.
</p>

<h3 id="-">
	نسخ الحلول الجاهزة
</h3>

<p>
	قد تواجهك عقبة ما أثناء العمل على مشروع أو تكليف فتبحث عن حل لها في المواقع المشهورة مثلما كان يحدث في Stackoverflow قبل تطور أدوات الذكاء الاصطناعي، أو باستخدام أدوات الذكاء الاصطناعي نفسها، وستجد الحل ببضع نقرات، فتريث هنا قبل أن تنسخ شيفرة أو حلًا إلى المشكلة التي بيدك، بل يفضل تجنب هذا السلوك بالمرة في بداية تعلمك أو بداية مسيرتك المهنية، ذلك أن الهدف الرئيسي هنا هو تطوير مهارات استثنائية في حل المشكلات ولن يفيدك النسخ واللصق في التعلم أبدًا، بل على النقيض يعود ذهنك استسهال الحلول الجاهزة دون إعمال العقل فيها.
</p>

<p>
	يوجد استثناء واحد لتلك القاعدة، حين تحاول حل المشكلة بنفسك، كما سنوضح في القسم التالي، ولكن حتى إذا وصلت إلى طريق مسدود ينبغي أن تكون مدركًا للشيفرة التي تنسخها وتستوعب وظيفتها وأداءها 100% قبل استخدامها.
</p>

<h3 id="-30-">
	قاعدة 30 دقيقة
</h3>

<p>
	قد يحدث أن تحاول الوصول إلى حل في مشكلة ما دون جدوى وعندئذ لا بأس من الاستعانة بأحد الحلول الجاهزة، لكن تأكد أنك قد حاولت أكثر من طريقة وقضيت فيها نصف ساعة على الأقل، يضرب برايان -كاتب الدليل- مثلًا على هذه النقطة بكتاب هيكلة وتفسير برامج الحاسوب The Structure and Interpretation of Computer Programs وهو أحد كتب تعلم البرمجة، إذ حدد لنفسه ست ساعات لحل كل مشكلة برمجية مذكورة في الكتاب لا ينظر إلى الحل فيها قبل نهاية ذلك الوقت.
</p>

<p>
	ويوضح أنه حتى لو لم يصل إلى الحل الصحيح فسيكون بنهاية الساعات الست قد بنى تصورًا ذهنيًا عما ينبغي أن يكون عليه الحل، هذا يعينه في الحكم على الحلول الجاهزة التي قد يجدها واختيار ما يصلح حالته منها، قارن ذلك بمحاولة البحث عن إجابة جاهزة باستخدام الذكاء الاصطناعي أو موقع stackoverflow دون أن يكون لديك تصور وفهم عميق للمشكلة التي تريد حلها، فلن يكون من السهل استيعاب المنطق وراء ذلك الحل الجاهز الذي تجده.
</p>

<p>
	وستدرك هنا أن المعاناة التي رأيتها أثناء محاولتك حل المشكلة بنفسك -حتى لو لم تصل إلى حل- ضرورية لبناء مهارة حل المشكلات لديك، لكن لا تطل البقاء في تلك المرحلة إذا وصلت لطريق مسدود، فلا بأس بطلب المساعدة من زميل أو معلم أو حتى ذكاءً اصطناعيًا إذا كان مناسبًا أو مسموحًا به في دراستك. ربما حان الوقت بعد هذا الجهد لقليل من التمشي في الهواء الطلق.
</p>

<h3 id="-">
	الخروج للتنزه
</h3>

<p>
	يمثل الخروج للتنزه قليلًا محاولة للتحرر من الطرق التي جربتها لحل المشكلة التي استعصت عليك، فقد تستغرق في تجربة حلول مختلفة لها لكنك تصل إلى نهايات مسدودة لأن عقلك يدور في نفس المسارات التي جربتها كأنها أخاديد أو آثار سير تركتها في المحاولات التي جربتها ولم تنجح، وستجد نفسك حبيس الأساليب التي جربتها من قبل دون أن تشعر مهما حاولت التفكير في تجربة حل مختلف، ونحن نقع في هذا كثيرًا بغض النظر عن المشكلة التي نحلها سواء برمجية أو غيرها، فقد تقول لنفسك "لو أني غيرت هذا الجزء أو تعديله قليلًا لربما نجح"، لكن دون جدوى.
</p>

<p>
	إذا وصلت إلى هذه المرحلة فجرب تغيير نشاطك إلى غيره مما لا يحتاج طاقة ذهنية، كأن تخرج للمشي قليلًا أو حتى الوقوف في شرفة أو أمام المبنى أو فوق السطح، واترك التفكير في حل المشكلة، وسترى أن هذه الخطوة على بساطتها ستعين عقلك على التحرر من أنماط التفكير التي علقت فيها، فلربما خطر على بالك الحل أو طريقة جديدة بمجرد أن تخطو خطوتين بعيدًا عن الحاسوب.
</p>

<h3 id="-">
	اشرح المشكلة لغيرك
</h3>

<p>
	من المفيد أيضًا في حل المشاكل المستعصية أن تستشير غيرك أو تتحدث معه حول المشكلة، حتى لو كان جمادًا مثل بطة مطاطية، المهم أنك تُسمع نفسك عناصر المشكلة وخطوات حلها وأنت تشرحها لغيرك حتى يفهمها، ثم اطلب منه أن يساعدك في الوصول إلى حل لها بعد أن يكون قد فهمها، وهذه الطريقة تنجح على خلاف المتوقع حتى لو كان الشخص الذي تحدثه ليس من العاملين في المجال التقني، حتى لو كان جمادًا تحدثه كبطة مطاطية مثلًا، ذلك أن المغزى هنا أن فهم المشكلة والتخطيط لحلها لا يحتاجان إلى معرفة بالبرمجة بالضرورة.
</p>

<p>
	والمثير للدهشة هنا أن الشخص الذي تحدثه قد لا يحتاج إلى أن ينطق بكلمة أصلًا، كما ذكرنا أنك تعيد المشكلة على سمعك أنت أولًا بصوت عالي كأنك تشرحها، فقد تكتشف تفصيلة هنا أو هناك غفلت عنها، أو ثغرة لم تنتبه لها من قبل، حيث يذكر برايان -كاتب الدليل- أن أحد زملائه أتاه يسأله عن حل مشكلة تواجهه، لكنه بمجرد أن وصل إليه وهم بالتحدث توقف لحظة ثم قال "لا عليك، عرفت الحل!"، فكفاه هنا أن يقوم من مكتبه ويتمشى قليلًا وهو يرتب المشكلة في ذهنه ليشرحها لصديقه.
</p>

<h3 id="-">
	تدوين الأسئلة
</h3>

<p>
	ستتعرض لنوعين من الأسئلة عند تعمقك في قراءة وصف مشكلة ما أو عند تعلم لغة أو أداة جديدة:
</p>

<ul>
	<li>
		أسئلة معيقة Blocking Questions: وهي الأسئلة التي تعيق تقدمك بحيث لا تستطيع إنجاز شيء آخر قبل معرفة إجابتها
	</li>
	<li>
		أسئلة غير معيقة: وهي أمور تثير فضولك أثناء عملك على المشكلة، لكن تستطيع مواصلة العمل دون معرفة إجابتها في الوقت الحالي
	</li>
</ul>

<p>
	قد تكون الأسئلة غير المعيقة على شاكلة هل تدعم هذه اللغة تفكيك الكائنات destructuring assignments؟ أو هل توفر هذه المكتبة أرقامًا عشوائية داخل نطاق أرقام صحيحة؟ أو ما هي بروتوكولات الشبكة الأخرى المدمجة في المكتبة القياسية؟ وهذه أسئلة لا تؤثر معرفة إجابتها على سير عملي الحالي لكنها قد تطرأ على ذهنك أثناء العمل فالأفضل تدوينها الآن ثم العودة لاحقًا للإجابة عنها.
</p>

<h3 id="-">
	بناء النسيج المعرفي
</h3>

<p>
	قد تشعر في بداية تعلمك للبرمجة أنك في وسط عالم شاسع غير مستكشف بعد، ربما تكون قد نجحت في طباعة عبارة Hello World! على الشاشة، لكن تشعر أنك بعيد عن المستوى الحقيقي لسوق العمل أو للمطور المحترف، فلا يدفعك هذا إلى اليأس بل إلى محاولة رسم تضاريس هذا العالم الجديد حيث ستكتشف وجود الدوال والمتغيرات وعمليات الإدخال والإخراج I/O، وستدرك كيف تترابط هذه العناصر ثم تتعرف إلى الشبكات وعلاقتها بنظم الإدخال والإخراج في نظم التشغيل.
</p>

<p>
	ومع اتساع هذه الخريطة المعرفية سترسم روابط بين هذه المفاهيم التي تتعلمها وتكتشف أن عالم تطوير البرمجيات مرتبط ببعضه ارتباطًا وثيقًا حيث تلاحظ تشابه العديد من المشكلات في هذه المفاهيم المختلفة مع بعضها، وستدرك مدى تأثير هذه المعرفة التي ستجمعها حين تتعرف على كثير من هذه المشكلات وتحاول إسقاطها على التحديات الجديدة التي تواجهك حيث ستلاحظ أنماط التشابه بين تلك التحديات الجديدة وبين ما تعرفت عليه أثناء دراستك للبرمجة، فترى أن مشكلة س تشبه ص التي رأيتها من قبل، فربما يصلح نفس أسلوب الحل معها كذلك. انظر المثال التالي:
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			لديك مجموعة من 10 أشخاص مرقمين من 0 إلى 9، ويصطفون جميعًا أمام نافذة في بنك ما، تريد أن تحاكي عملية ترتيبهم عشوائيًا بدون تكرار في الوقت الفعلي O(n)‎، كيف تكتب شيفرة تحل هذه المشكلة؟
		</p>
	</div>
</blockquote>

<p>
	ربما تكون قد كتبت برنامجًا من قبل يخلط أوراق اللعب باستخدام خوارزمية Fisher-Yates، فهذه مشكلة قد تشبه التحدي الذي لدينا هنا، فربما نجرب إنشاء قائمة بهؤلاء الأشخاص من 0 إلى 9 ثم خلط هذه القائمة تمامًا كأوراق اللعب، فهي نفس المشكلة عند التفكر فيها.
</p>

<p>
	يميل المبرمجون المبتدئون إلى حل المشكلات التي يواجهونها من خلال المنطق والاستنتاج المحض، وكذلك يفعل المطور الخبير أيضًا إلا أنه يسأل نفسه "ما هو أفضل نمط برمجي أعرفه ويحل هذا النوع من المشكلات؟"، فهو يعتمد على النسيج المعرفي الذي تكون لديه من تراكم خبرة سنوات من البرمجة، فحري بك أن تبحث من الآن عن الطرق التي تترابط بها المفاهيم التي تتعلمها كي تستطيع استخدامها في المستقبل حين تواجهك مشكلة تستعصي عليك في الحل.
</p>

<h3 id="-">
	مراجعة الشيفرات البرمجية
</h3>

<p>
	قد يصعب على البعض عرض شيفراتهم البرمجية على غيرهم من المبرمجين لطلب نصيحة فيها أو مراجعتها لتحسين كفاءتها، ذلك أن من السهل جدًا الانزلاق إلى أخذ النصائح على محمل شخصي مما يمنع الاستفادة منها، لكن مقاومة هذا الشعور مفيد لتطوير مهاراتك البرمجية.
</p>

<p>
	فانظر لكل نصيحة أو مراجعة تتلقاها على أنها هدية من شخص خصص من وقته لمساعدتك كي تصير مبرمجًا أفضل، دون مقابل منك في الغالب، فكن لطيفًا أثناء مراجعتك للشيفرة سواء كنت أنت صاحبها أو تراجع شيفرة غيرك، واجعل ملاحظاتك بناءة من منظور متواضع غرضه النصح لا الاستعلاء على صاحب الشيفرة لإظهار جهله، ولا تأخذ النصيحة على محمل شخصي إذا كانت النصيحة موجهة لك.
</p>

<p>
	أما إذا لم تجد مبرمجًا حولك يراجع شيفرتك فمن الممكن عرضها على أداة ذكاء اصطناعي لمراجعتها، وإذا طُلب منك مراجعة شيفرة برمجية فلا تتردد حتى لو لم تكن خبيرًا باللغة التي كتبت بها، فمجرد قراءة ما كتبه غيرك يعرض لأساليب برمجة وأنماط خوارزمية قد لا تكون تعرضت لها من قبل.
</p>

<p>
	لكن تذكر النصيحة التي قدمناها من قبل في هذا الدليل حول تكوين رأي مستقل وإسقاطها على هذه النقطة هنا، بأن يبني رأيك الخاص حول الملاحظات التي تتلقاها وتحكم وفقًا لمنطقك والبيانات التي لديك حول المشكلة، فأنت صاحب القرار الأخير في تعديل شيفرتك وفقًا لهذه الملاحظات وإضافتها إلى الشيفرة النهائية للبرنامج.
</p>

<h3 id="-">
	الانضمام إلى المجتمعات البرمجية
</h3>

<p>
	ارتبطت البرمجة عبر تاريخها بأنها عمل فردي على الأقل فيما يخص الوقت الذي تجلس فيه إلى الحاسوب لتكتب الشيفرة، لكن قد تميل إلى العمل وحدك حتى في بعض المراحل الأخرى من حل المشكلة، مثل مرحلتي الفهم والتخطيط، فاعلم أن يفضل أن تكون في مجتمع يشاركك نفس الاهتمامات وأسلوب التفكير حيث تستفيد من عرض وتبادل الأفكار والمشاريع والأخطاء في صقل قريحتك وتوسيع مداركك، فربما تتعرض لأنماط جديدة لم تستخدمها في عملك، أو أساليب جديدة لحل المشكلات لم تفكر فيها من قبل أو تدرك بوجودها.
</p>

<p>
	ومن أهم الفوائد الأخرى لهذه المجتمعات هو بناء شبكة علاقات قوية، فكثير من هذه المجتمعات تعقد مؤتمرات إما على الأرض أو على الإنترنت تستطيع حضورها أو حتى التحدث فيها، فهذا يخفف وطأة الشعور بالوحدة من ناحية، ويبني جسورًا من العلاقات المهنية في نفس مجالك تفيدك في مسيرتك المهنية مستقبلًا.
</p>

<h2 id="-debugging">
	تنقيح الأخطاء البرمجية Debugging
</h2>

<p>
	اعلم أن أفضل طريقة لتنقيح الأخطاء البرمجية هي ألا يحتوي البرنامج على أخطاء أصلًا، لكننا بشر وسنرتكب أخطاء لا محالة، فلابد من اتباع منهج حل المشاكل الذي ذكرناه من قبل -مراحل الفهم والتخطيط وكتابة الحل البرمجي ثم المراجعة والتحسين- من أجل تقليل فرصة حدوث هذه الأخطاء، وتذكر أن المعركة البرمجية تُحسم في مرحلتي الفهم والتخطيط، فكلما كانت هاتين المرحلتين ناجحتين قلت الأخطاء التي ستقع أثناء كتابة الحل البرمجي.
</p>

<h2 id="-">
	النموذج الذهني
</h2>

<p>
	يقصد بالنموذج الذهني هنا أن تستطيع كمطور أن تتخيل ما سينتج عن الشيفرة التي تقرؤها، مثال:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7461_24" style=""><span class="kwd">def</span><span class="pln"> foo</span><span class="pun">(</span><span class="pln">n</span><span class="pun">):</span><span class="pln">
    i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pln">

    </span><span class="kwd">while</span><span class="pln"> i </span><span class="pun">&lt;</span><span class="pln"> n</span><span class="pun">:</span><span class="pln">
        i </span><span class="pun">=</span><span class="pln"> i </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="pun">(</span><span class="pln">i </span><span class="pun">%</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln">

    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">i</span><span class="pun">)</span><span class="pln">

foo</span><span class="pun">(</span><span class="lit">5</span><span class="pun">)</span></pre>

<p>
	تأمل شيفرة بايثون أعلاه وحاول محاكاتها في عقلك واستنتاج مخرجاتها ثم تحقق إن كنت محقًا في استنتاجك، واعلم أن هذه المهارة من الأهمية بمكان بحيث إن لم تستطع محاكاة تشغيل الشيفرة في رأسك فلن يسهل عليك تنقيح الأخطاء البرمجية، فالتنقيح هو فن العثور على الموضع من الشيفرة الذي تنفصل فيه محاكاتك العقلية لها عند تشغيلها عما تفعله الشيفرة في تشغيلها الفعلي، ثم إصلاح ذلك الموضع، ومن ثم فإن لم يكن لديك نموذج ذهني جيد فلن تجد ما تقارن به ما يحدث أمامك على الشاشة. إليك كيفية تطوير هذا النموذج الذهني:
</p>

<ul>
	<li>
		دراسة الشيفرات: توجد ملايين الشيفرات البرمجية على مواقع مثل Github و HackerRank، إضافة إلى شيفرات زملائك أو حتى الشيفرات التي كتبتها منذ مدة ونسيت كيفية عملها، فكل ذلك يمكن استغلاله في عملية التعلم وتطوير قدرتك على محاكاة تشغيل الشيفرة ذهنيًا.
	</li>
	<li>
		توقع المخرجات: حاول أثناء دراسة الشيفرة أن تتوقع كيف ستتصرف عند تشغيلها.
	</li>
	<li>
		تتبع مسار الشيفرة يدويًا: استخدم سبورة بيضاء لتتبع القيم التي تأخذها المتغيرات والدوال التي تُستدعى، والسطر البرمجي الذي يُنفذ حاليًا.
	</li>
	<li>
		كتابة المواصفات التقنية: اختر شيفرة وادرسها ثم اعكس هندستها، أي اكتشف وظيفتها ثم اكتب وصفًا يشرح الخوارزمية بدقة تجعل من يقرؤها قادرًا على إعادة برمجتها من الصفر.
	</li>
	<li>
		خاصية الخطوة الواحدة: اجعل الحاسوب يريك مسار تدفق البرنامج خطوة بخطوة باستخدام أداة التنقيح Debugger، سنتحدث عن هذه بالتفصيل لاحقًا.
	</li>
</ul>

<p>
	إذا اتبعت هذه الخطوات مرة بعد مرة ستتطور لديك مهارة المحاكاة الذهنية.
</p>

<h3 id="-">
	إعادة إنتاج الخطأ
</h3>

<p>
	يجب أن نتحقق أولًا إذا كنا نستطيع جعل الخطأ يتكرر حدوثه بانتظام من أجل فهم سبب حدوثه ومن ثم معرفة كيفية إصلاحه، تسمى هذه العملية أحيانًا repro كاختصار إلى الكلمة الإنجليزية reproduction أو إعادة إنتاج الخطأ، وهي أول خطوة نحو إصلاح الخطأ، بل قد تكون أحيانًا هي الجزء الأصعب إذ تكون أنت الذي رأيت الخطأ يحدث مرة واحدة فقط -أو أبلغ شخص عن حدوثه معه- لكن لم يتكرر مرة أخرى ولا تستطيع إعادة إنتاجه.
</p>

<p>
	فهنا قد ترجو أن يكون ما رأيته مجرد سراب أو ألا يظهر هذا الخطأ مرة أخرى، لكن الواقع يقول أنه إذا رأى شخص واحد فقط هذا الخطأ أثناء اختبار البرنامج فسيظهر لآلاف أو ملايين الأشخاص حتمًا بعد إطلاق البرنامج رسميًا، ربما يفسر هذه الظاهرة كل من الإحصائيات وقانون ميرفي، حيث ينص قانون ميرفي على أن الأخطاء التي يحتمل حدوثها ستقع لا محالة.
</p>

<p>
	أما إذا لم تستطع إعادة إنتاج الخطأ فستكون كل محاولات إصلاحك كمن يطلق النار في الظلام أملًا أن يصيب هدفه، لهذا يجب أن تجعل الخطأ يتكرر بأي ثمن، فعد إلى الوراء قليلًا وفكر بمنطقية: ما الذي يمكن أن يكون قد حدث أثناء تشغيل البرنامج لكي يقع هذا الخطأ، ولا تستبعد أي شرط أو عامل يمكن أن يكون سببًا في حدوث الخطأ حتى لو بدا مستحيل الحدوث، فطالما أن الخطأ قد وقع وهذا الشرط لازم لحدوثه فلا بد أن يكون ذلك الشرط قد تحقق، فلا تتوقف عن تتبع هذا التسلسل المنطقي حتى تصل إلى النقطة التي تنفصل فيها محاكاة تشغيل البرنامج التي تصورتها في عقلك عن سير التشغيل الفعلي للبرنامج، فهي النقطة التي حدث عندها ذلك الخطأ.
</p>

<p>
	وقد يحدث أن تتمكن من إعادة إنتاج هذا الخطأ بشكل متقطع، أي قد يحدث بضع مرات فقط لكن ليس كل مرة يعمل فيها البرنامج، فهذا أفضل من لا شيء لكن سيحتاج الأمر جهدًا منك حتى تصل إلى إعادة إنتاج ثابتة للخطأ Consistent repro كي توفر على نفسك وقتًا طويلًا تحاول الإمساك بخطأ نادر الحدوث.
</p>

<p>
	فإذا توصلت إلى جعل الخطأ يحدث في كل مرة تشغيل للبرنامج استطعت الانتقال إلى طريق أكثر منهجية في إصلاحه بأن تبحث عن الحد الأدنى من الخطوات التي تؤدي إلى حدوثه، فعلى سبيل المثال إذا كنت تلعب لعبة ووجدت خطأ يظهر بعد إكمال 20 لفة حول مضمار سباق والاصطدام بشجرة، فينبغي أن تجرب الاصطدام بالشجرة أولًا فربما يحدث الخطأ فتعرف أن المشكلة في الشجرة وتوفر على نفسك عناء تنفيذ 20 لفة قبل أن ترى الخطأ، أما إذا لم يحدث شيء فتعلم أن هذه اللفات العشرين جزء من المشكلة، فتجرب حينها لفة واحدة ثم تصطدم بالشجرة وترى هل يتكرر الخطأ أم لا.
</p>

<p>
	وهكذا فإن الوصول إلى الحد الأدنى من الخطوات اللازمة لحدوث الخطأ يساعدك في تحديد مكانه بدقة أكبر ويجعل اختبار الإصلاح الذي تنفذه أسهل كذلك لأنك ستوفر وقتًا كان سيذهب هدرًا في إعادة إنتاج الخطأ في كل مرة.
</p>

<h3 id="-">
	العثور على الخطأ
</h3>

<p>
	لنفترض الآن أنك عرفت بوجود خطأ ما لأنك تحصل على مخرجات لم تكن تتوقعها من المدخلات التي أعطيتها لشيفرتك، لكن كل ما تعرفه إلى الآن هو أن هناك خطأ ما بين 10000 سطر برمجي وأنك إذا أعطيت الشيفرة الرقم 2 ينبغي أن تخرج لك الرقم <code>3490</code> لكنها أعطتك <code>299792458</code> بدلًا منها، إذًا لا بد أن يكون الخطأ في مكان ما بين المدخلات والمخرجات.
</p>

<p>
	قد تغريك فكرة البدء بتغيير أشياء عشوائيًا هنا وهناك في الشيفرة لترى إن كانت ستصلح نفسها، يسمى هذا أحيانًا بتنقيح الطلقات العشوائية shotgun debugging ويندر أن ينجح، بل قد تزيد الطين بلة وتصعب على نفسك عملية العثور على الموضع الأصلي للخلل، كأنك تحاول إصلاح عطلًا كهربائيًا في سيارتك من خلال قص أسلاك وتوصيل أسلاك أخرى عشوائيًا، هل ترى أن هذا قد يصلح السيارة أم يزيدها تعطلًا؟
</p>

<p>
	وعلى بداهة هذا المبدأ إلا أنه خطأ شائع يقع فيه الكثير ممن يدرسون البرمجة حول العالم، فتجنب أنت أن تقع فيه بل اتبع منهجًا سليمًا في تتبع المشكلة كي تصل إليها ثم تحلها، فبالعودة إلى مثال المشكلة البرمجية التي ذكرناها قبل قليل نستنتج أن القيم التي حُسبت داخل أنبوب الحوسبة بين المدخلات والمخرجات قد انحرفت عما توقعته من محاكاتك الذهنية لسلوكها، فمهمتك الآن هي تحديد الموضع الذي حدث فيه هذا الانحراف.
</p>

<p>
	ابدأ بفحص نقاط مختلفة في البرنامج لتحدد النقطة التي انحرف فيها القطار عن مساره الصحيح، ومن المفيد هنا اتباع تقنية البحث الثنائي Binary Search، بمعنى أن تختار نقطة تتوسط المسار الزمني لتنفيذ البرنامج وتفحص القيم الموجودة هناك أثناء تشغيل البرنامج، فإذا كانت سليمة علمت أنه لا توجد مشكلة إلى هذه النقطة، ولا بد أن تكون المشكلة بين هذه النقطة ونهاية البرنامج، وهكذا تكرر هذه العملية حتى تضيق نطاق البحث إلى أن ترى الخطأ.
</p>

<p>
	يزعم برايان -كاتب الدليل- أن الخطأ لا يكون مكتشَفًا حتى تفهم سلوكه فهمًا تامًا، أي عندما تفهم كيف أنتج برنامجك القيمة <code>299792458</code> بدلًا من <code>3490</code>، ثم تصلح الخطأ جذريًا وفقًا لهذا الفهم. وهذا الأسلوب له عدة فوائد منها مثلًا:
</p>

<ul>
	<li>
		تصبح أكثر ثقة أنك أصلحت الخطأ إصلاحًا جذريًا
	</li>
	<li>
		تتعلم كيفية تمييز الأنماط التي أدت إلى حدوث هذا الخطأ لتتجنبها في المستقبل أو تدركها مبكرًا
	</li>
	<li>
		تصقل مهارتك في حل المشكلات أثناء معالجتك للخطأ وفهمه
	</li>
</ul>

<p>
	وإذا كانت وظيفتك هي اكتشاف الخطأ فقط وتقديم تقرير عنه ليصلحه غيرك فإن تتبع الخطأ وفهم سلوكه يجعلك أقدر على تقديم الحد الأدنى من الخطوات المطلوبة لإعادة إنتاج الخطأ، وهذا يزيد أهميتك عند من تكتب له هذا التقرير لأنك تسهل عليه مهمة إيجاد الخطأ وإصلاحه.
</p>

<h3 id="-">
	التنقيح باستخدام أوامر الطباعة
</h3>

<p>
	تعتمد طريقة التنقيح بأوامر الطباعة Print Debugging أو printf debugging كما يسميها مبرمجو لغة C على توزيع أوامر الطباعة توزيعًا مدروسًا داخل الشيفرة لمعرفة حالة البرنامج في لحظة معينة، وهي الطريقة الكلاسيكية لفحص البرمجيات أثناء التشغيل ويكثر استخدامها في حالتين مشهورتين:
</p>

<ol>
	<li>
		التحقق من مسار التدفق: حيث نجعل البرنامج يطبع أي شيء في لحظة ما لنرى إن كانت الشيفرة تعمل عند ذلك الجزء.
	</li>
</ol>

<p>
	 
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7461_28" style=""><span class="kwd">print</span><span class="pun">(</span><span class="str">"A"</span><span class="pun">)</span><span class="pln">

x </span><span class="pun">=</span><span class="pln"> foo</span><span class="pun">()</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"B"</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">if</span><span class="pln"> x </span><span class="pun">==</span><span class="pln"> </span><span class="lit">3</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"C"</span><span class="pun">)</span><span class="pln">
    x </span><span class="pun">*=</span><span class="pln"> </span><span class="lit">2</span><span class="pln">
</span><span class="kwd">else</span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"D"</span><span class="pun">)</span><span class="pln">
    bar</span><span class="pun">()</span><span class="pln">

</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"E"</span><span class="pun">)</span></pre>

<p>
	لاحظ هنا أننا نستطيع عند تشغيل البرنامج تحديد المسافة التي وصل إليها قبل أن ينهار crash ومعرفة إذا كانت قيمة <code>x</code> تساوي <code>3</code> أم لا بناء على المحارف المطبوعة على الشاشة.
</p>

<p>
	      2. فحص القيم: بأن نطبع قيم متغيرات معينة لرؤيتها ومعرفة ما هي، في المثال أدناه نحصل على بيانات من مستشعر sensor داخل حلقة تكرارية، ونشك أن بعض           هذه البيانات مغلوطة لكن لا نعرف إن كان المستشعر هو السبب فهنا نطبع البيانات على الشاشة لنرى ما نحصل عليه:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7461_30" style=""><span class="kwd">while</span><span class="pln"> </span><span class="kwd">not</span><span class="pln"> done</span><span class="pun">:</span><span class="pln">
    data </span><span class="pun">=</span><span class="pln"> get_sensor_data</span><span class="pun">()</span><span class="pln">

    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">f</span><span class="str">"Got sensor data: {data}"</span><span class="pun">)</span><span class="pln">

    process_sensor_data</span><span class="pun">(</span><span class="pln">data</span><span class="pun">)</span><span class="pln">

    done </span><span class="pun">=</span><span class="pln"> data </span><span class="pun">&lt;</span><span class="pln"> </span><span class="lit">0</span></pre>

<p>
	هنا تجدر الإشارة إلى نصيحة أخلاقية وعملية، لا تستخدم ألفاظًا نابية في عبارات التنقيح داخل شيفرتك، فهي سلوك غير لائق فضلًا عن أنك ستنسى إزالتها بعد إنهاء العمل على البرنامج وستراها تظهر أثناء عرض تجريبي مع مديرك أو العميل الذي طلب البرنامج، وستتمنى حينها لو أنك لم تكتبها أصلًا.
</p>

<p>
	وإن كانت حالة الانزعاج التي تحدث أثناء تنقيح الأخطاء والبحث عنها متفهمة لكن احرص ألا يخرج هذا إلى الشيفرة، بل استبدلها برمز تعبيري أو حتى حرفًا مكررًا كأن تطبع شيئًا كهذا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7461_32" style=""><span class="kwd">print</span><span class="pun">(</span><span class="str">"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"</span><span class="pun">);</span></pre>

<p>
	فهي جملة تظهر بوضوح على الشاشة وإذا رآها العميل فلن تعدو كونها أكثر من مجرد هفوة أو خطأ كتابي لا أكثر.
</p>

<p>
	بالعودة إلى التنقيح بالطباعة، يرى البعض أن هذا الأسلوب بدائي مقارنة باستخدام منقح حديث كما سنرى في القسم التالي، لكنك كمبرمج ستلجأ إلى هذا الأسلوب عاجلًا أو آجلًا، ويظهر تميزها في حالتين:
</p>

<ul>
	<li>
		حين تريد جمع بيانات كثيرة لملاحظة نمط عام يظهر على المدى الطويل.
	</li>
	<li>
		حين تريد اكتشاف خطأ نادر يحدث مرة كل 10000 مرة تشغيل مثلًا، لأن تتبع الخطأ بالمنقح سيأخذ وقتًا طويلًا جدًا، على عكس طريقة التنقيح بالطباعة التي تستطيع بها إضافة بعض تعليمات الطباعة وسكربت يشغل البرنامج 10000 مرة وتراقب المخرجات لترى متى يحدث الخطأ.
	</li>
</ul>

<p>
	لكن ينبغي هنا أن ننبه على صعوبة قراءة المخرجات بصريًا إن كانت كثيرة جدًا، وقد تضيع رسائل الخطأ الحقيقية وسطها، فهنا ينبغي توجيه المخرجات إلى ملف نصي لتفتحه بمحرر نصوص ليسهل البحث عليك، ثم لا تنسى إزالة تعليمات الطباعة قبل تسليم النسخة النهائية من البرنامج.
</p>

<h3 id="-debuggers">
	المنقحات Debuggers
</h3>

<p>
	المنقحات هي أدوات تساعدك على العثور على الأخطاء البرمجية، وتشترك جميعها رغم تعدد أنواعها في مزايا جوهرية:
</p>

<ul>
	<li>
		إضافة نقاط التوقف breakpoints التي تأمر البرنامج أن يتوقف عندها لتتحكم أنت في عملية التنقيح
	</li>
	<li>
		التنفيذ خطوة خطوة Single step الذي يمرر البرنامج سطرًا واحدًا في كل مرة
	</li>
	<li>
		فحص قيم المتغيرات
	</li>
</ul>

<p>
	إضافة إلى مزايا أخرى تشمل ما يلي:
</p>

<ul>
	<li>
		الدخول إلى الدالة Step into لتتبع ما يحدث فيها
	</li>
	<li>
		الخروج من الدالة Continue out للرجوع إلى الشيفرة المستدعاة بعد فحص الدالة
	</li>
	<li>
		تجاوز الدالة Step over لتنفيذ الدالة كاملة والانتقال لما بعدها دون دخول تفاصيلها
	</li>
	<li>
		ضبط قيم المتغيرات، حيث تستطيع تعديل البيانات أثناء التشغيل لتجربة سيناريوهات مختلفة
	</li>
	<li>
		فحص مكدس الاستدعاءات Call Stack لمعرفة تسلسل الدوال التي أدت إلى الوصول إلى النقطة الحالية
	</li>
	<li>
		نقاط التوقف المشروطة التي لا توقف البرنامج إلا عند تحقق شرط معين
	</li>
</ul>

<p>
	توجد منقحات أخرى تسمى منقحات "السفر عبر الزمن" Time-travel debuggers وإن كانت نادرة، وهي تسمح لك بالذهاب لنقطة متقدمة في شيفرتك أو الرجوع إلى الخلف فيها، وهذا مفيد جدًا إذا تجاوزت النقطة التي حدث عندها الخطأ وأردت العودة إليها.
</p>

<p>
	توفر جميع بيئات التطوير المتكاملة إمكانية التنقيح فيها إضافة إلى وجود منقحات مستقلة لأغلب لغات البرمجة، وتلك المزايا التي في المنقحات تجعل منها أدوات لا غنى عنها للمبرمجين، فما عليك مثلًا إذا شككت في وجود خطأ في الدالة <code>foo()‎</code> سوى أن تضع نقطة توقف عندها وتشغل الشيفرة وستقف عند تنفيذ هذه الدالة ثم تتولى أنت التحكم يدويًا في المنقح وتفحص المتغيرات سطرًا بسطر دون الحاجة لإضافة تعليمات طباعة.
</p>

<h2 id="-">
	تعلم لغات برمجية جديدة
</h2>

<p>
	تُعد اللغة البرمجية الأولى التي تتعلمها هي الأصعب على الإطلاق حيث تشمل عملية تعلمها استيعاب المفاهيم الأساسية المستخدمة فيها مثل كيفية تنظيم الدوال وتمرير الوسائط arguments وتشغيل الحلقات التكرارية وصياغة التعليمات الشرطية وغيرها، لكن بما أن جميع اللغات تقريبًا تحتوي على نفس المفاهيم فإن تعلم اللغة الثانية لا يعدو كونه تطبيقًا على تلك المفاهيم التي تعلمتها في الأولى مع اختلاف أن أسلوب تنفيذ هذه المفاهيم مختلف قليلًا، كأنك تتعلم الإيطالية بعدما أتقنت الإسبانية، حيث سترى أن الفجوة بينهما ليست كبيرة.
</p>

<p>
	نتحدث في هذا القسم عن كيفية تعلم لغات إضافية بعد إتقان اللغة الأولى إذ ستحتاج إلى ممارسة هذا النشاط طول مسيرتك المهنية، لكن بما أن تعلم اللغات مهارة في ذاته فكلما تعلمت لغات أكثر سهلت عليك عملية التعلم نفسها.
</p>

<p>
	وهناك ركنان أساسيان ينبغي اعتبارهما عند تعلم لغة جديدة لها نمط paradigm تعرفه مسبقًا، كأن تكون لغة إجرائية procedural أو كائنية التوجه object oriented أو وظيفية functional:
</p>

<ol>
	<li>
		تعلم القواعد syntax مثل كيفية كتابة تعليمات <code>if</code> و <code>while</code> وكيفي التصريح عن المتغيرات والدوال
	</li>
	<li>
		تعلم المكتبات القياسية، وهي الوظائف المدمجة التي تستطيع استخدامها كقراءة الملفات وكتابتها أو الطباعة على الشاشة أو الاتصال بخادم ويب
	</li>
</ol>

<p>
	يكون تعلم القواعد هو الجزء الأسهل في الغالب لأن معظم لغات البرمجة تبنى على قواعد بسيطة نسبيًا، لكن لا زال عليك تعلم الكثير من وظائف المكتبات القياسية وغيرها لكي تكون محترفًا، تمامًا كما أن معرفة الأفعال والأسماء والصفات وإعراب الجمل في اللغات البشرية لا يكفي لأن تكتب رواية أو شعرًا.
</p>

<h3 id="-">
	تعلم قواعد اللغة البرمجية
</h3>

<p>
	أفضل طريقة لتعلم قواعد اللغة هي اقتحام المجال مباشرة بأن تتابع درسًا تعليميًا وتكتب برنامج وإن كان لتوضيح المثال فقط، أي تتمرن بها على جانب ما من اللغة التي تتعلمها، على سبيل المثال، كيف تصيغ التعليمات الشرطية في لغة Rust؟ لم لا تكتب برنامجًا بسيطًا للتدرب على هذا:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7461_34" style=""><span class="pln">fn main</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="lit">1</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        println</span><span class="pun">!(</span><span class="str">"هناك خطأ فادح"</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        println</span><span class="pun">!(</span><span class="str">"هذا صحيح"</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	فتمرين بسيط كهذا يجعلك تتفكر إن كانت هذه الأقواس حول تعليمة <code>if</code> ضرورية، دعنا نتحقق:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_7461_36" style=""><span class="pln">$ rustc foo</span><span class="pun">.</span><span class="pln">c
  warning</span><span class="pun">:</span><span class="pln"> unnecessary parentheses around </span><span class="pun">`</span><span class="kwd">if</span><span class="pun">`</span><span class="pln"> condition</span></pre>

<p>
	تبين أنها ليست ضرورية! هذا هو الهدف من التعلم بمثل هذه التمارين البسيطة، من المفيد أيضًا أن تبحث عن كيفية تطبيق المفاهيم التي عرفتها من لغتك الأولى في اللغة الجديدة التي تتعلمها، مثل الدالة الرئيسية والمتغيرات والتعليمات الشرطية وحلقات التكرار والأصناف Classes وغيرها.
</p>

<p>
	قد تجد نفسك تبحث عن كل صغيرة وكبيرة في البداية، تمامًا كما لو كنت تتعلم لغة بشرية جديدة وأردت الذهاب إلى المتجر، صحيح أنك تعلم ما تريد وكيف تقوله بلغتك، لكن ستحتاج إلى البحث عن الكلمات المرادفة في اللغة الجديدة إذا لم تكن تعرفها بعد، الجميل هنا أن قواعد لغات البرمجة أبسط كثيرًا من اللغات البشرية ويمكن إتقانها بسرعة نسبيًا.
</p>

<h3 id="-">
	تعلم المكتبات القياسية
</h3>

<p>
	تأتي المكتبة القياسية مدمجة في لغة البرمجة نفسها، وتحتوي على وظائف جاهزة للاستخدام لتوفير الوقت والجهد من ناحية ولتضمن وجودها عند أي شخص لديه هذه اللغة مثبتة على حاسوبه، لكن ينبغي أن تعلم محتويات هذه المكتبة كي تعرف ما تستطيع اللغة إنجازه فور تثبيتها ولا تضيع وقتك في إعادة اختراع العجلة دون داعي.
</p>

<p>
	ننصحك هنا بتصفح المكتبة القياسية للغة التي تستخدمها حتى لو لم تعرف كيفية استخدام وظائف بعينها -كوظائف بروتوكول IMAP في بايثون مثلًا- لكن مجرد العلم بأنها موجودة سيجعلك تدرك أن بايثون خيار مناسب وقوي إذا احتجت إلى تنفيذ عمل يتعلق بالبريد الإلكتروني، ثم إذا احتجت مثل هذه الوظيفة يمكنك حينها أن تقرأ التوثيقات والأمثلة التي تشرح كيفية عملها.
</p>

<p>
	يميل برايان -كاتب الدليل- إلى تعلم المكتبات تدريجيًا إذ يتعلم بالتفصيل ما يحتاجه لإنجاز مهمة محددة أما بقية الوظائف فيكفيه عرفة وجودها بما أنه تصفح وثائق المكتبة واللغة، لكن لا يتقنها وإنما يتعلم ما يكفيه أن يستطيع استخدامها فقط.
</p>

<p>
	وهذا طبيعي لمن يتعلم البرمجة نظرًا لحجم المكتبات الضخم، فيستبعد أن تصل إلى مرحلة الإتقان لكل ما تحتويه هذه المكتبات، ولا تحتاج إلا إلى أن تكون قادرًا على تعلم ما يلزمك لإتمام عملك عند حاجتك إليه.
</p>

<h3 id="-">
	تعلم نموذج برمجي جديد
</h3>

<p>
	النموذج البرمجي programming paradigm هو طريقة تصف المشكلة وفقًا لنموذج بحيث يمكن الوصول إلى حل لها بسهولة، على سبيل المثال إذا كنت تملأ استمارة ضريبية فستجد نفسك تتبع سلسلة من الخطوات المرتبة، تكتب اسمك ثم دخلك، وإذا كان الدخل أكبر من قيمة معينة فستفعل كذا، وإلا فافعل كذا، فما هي إلا إجراءات تتبعها لنمذجة المشكلة في سلسلة من الخطوات التي يسهل حلها بها.
</p>

<p>
	لنفرض الآن أنك تحاكي عالم افتراضي ثلاثي الأبعاد، قد يكون لدينا في هذا العالم نوع من الكائنات يسمى غول orc يتجول في أرجاء هذا العالم، لكل واحد منها إحداثياته الخاصة ونقاط الحياة الخاصة به، لكنها جميعًا تتبع نفس السلوك عندما يقترب اللاعب منها، فهنا نستطيع نمذجة المشكلة كمجموعة من الكائنات المستقلة التي تشترك في سلوكيات معينة.
</p>

<p>
	وتوجد طريقتان مختلفتان لحل المشكلة، إما بنمذجتها كسلسلة خطوات أو ككائنات، ونسمي هذه النماذج المختلفة نماذج برمجية، فالنوع الأول -أي الخطوات المتسلسلة- نسميه البرمجة الإجرائية Procedural Programming أما النوع الثاني فنسميه البرمجة كائنية التوجه Object-Oriented Programming. صحيح أن هناك نماذج غيرها لكن أشهرها هي البرمجة الكائنية والإجرائية والوظيفية functional.
</p>

<p>
	لكن انتبه إلى أن تعلم نموذج برمجي جديد والانتقال إليه أصعب كثيرًا من تعلم لغة برمجية تتبع نفس النموذج، وبالتشبيه باللغات البشرية مرة أخرى ستجد أن الانتقال من الإسبانية إلى الإيطالية سهل نسبيًا لجذورهما اللاتينية، لكن تعلم اللغة الصينية مثلًا أمر مختلف كليًا إذ يتعين عليك تعلم تقنيات ومفاهيم قد لا تكون مدركًا لوجودها أصلًا.
</p>

<p>
	يذكر برايان -كاتب الدليل- أنه تعلم لغة Erlang وهي لغة وظيفية، مع ضعف مستواه في هذا النموذج، حيث لا تتغير قيمة متغير بعد تحديده أبدًا، وهذا كان خلاف ما تعود عليه من قبل، لكن الواقع يقول أن هذه اللغة قد بنيت عليها أنظمة ضخمة وناجحة، لذا تحتم عليه تغيير طريقة تفكيره في كيفية نمذجة المشكلات. النصيحة الأساسية هنا هي التعرض لأمثلة كثيرة لترى كيف تنفذ هذه اللغة المهام البسيطة، أي تحاول التمرن على برامج صغيرة وإن كانت بقصد التجربة كما شرحنا أول الفصل، وأن تحاول ابتكار تحديات متعلقة بهذا النموذج تم تحاول حلها، تستطيع طلب ذلك من أدوات الذكاء الاصطناعي كذلك، فهذا مفيد في بناء مهاراتك واكتشاف الثغرات في فهمك للنموذج.
</p>

<h2 id="-">
	استخدام الذكاء الاصطناعي
</h2>

<p>
	يُعد الذكاء الاصطناعي هذه الأيام الحدث الأبرز على الساحة التقنية إذ يستخدمه الجميع تقريبًا ولا تكاد تجد أحدًا لا يتحدث عنه أو يحاول إقحامه فيما يفعل، لكن يبدو ألا أحد يستطيع الإجابة على سؤال ماذا سيحدث في المستقبل كنتيجة لهذه الموجة الجديدة من التقنية، قد يحلو لمدراء شركات الذكاء الاصطناعي التصريح بأن الذكاء الاصطناعي في طريقه للسيطرة على العالم وحل كل المشكلات التي تعاني منها البشرية وستقل الحاجة إلى الأيدي العاملة عن السابق.
</p>

<p>
	لكن الغالب أن هذا لن يحدث حتى لو استطاع الذكاء الاصطناعي حقًا أن يحل مشاكلنا، إذ سيظل البشر يحاولون تخطي حدود الممكن بالنسبة لهم إلى مستويات تصعب على الذكاء الاصطناعي.
</p>

<p>
	ما أهمية مثل هذا الحديث لك كطالب تدرس علوم الحاسوب حاليًا؟ سنوضح في هذا الفصل كيفية استخدام الذكاء الاصطناعي كمعين لك في دراستك ثم كيفية استخدامه في بيئة العمل، وكذلك ما يجب تجنبه عند استخدامه.
</p>

<h3 id="-">
	ما يجب تجنبه مع الذكاء الاصطناعي
</h3>

<p>
	يذكر برايان -كاتب الدليل- أنه يحب دراسة كتاب Structure and Interpretation of Computer Programs لتطوير قدراته البرمجية وأنه يعطي نفسه ست ساعات لحل كل مشكلة في ذلك الكتاب، لاحظ أن المشكلات التي نتحدث عنها هنا ليست مشكلات حقيقية بل تدريبية مصطنعة، وحلولها متوفرة مجانًا على الإنترنت، فلماذا يقضي ست ساعات في حلها إذًا، ألا يبدو هذا مضيعة للوقت في حين كان يستطيع نسخ مستودع repo كتبه شخص آخر أو ينسخ الحل من مكان ما أو ربما يدفع لمبرمج كي يحل له هذه المشاكل؟
</p>

<p>
	لا شك أن الإجابة بديهية هنا إذ أن قضاء هذا الوقت في التفكير للوصول إلى حل المشكلة هو محل التعلم بعد المحاولات المضنية التي تجتهد فيها في الوصول إلى الحل، وبالمثل فطلبك من الذكاء الاصطناعي حل المشكلة التي لديك لن يطور مهاراتك أبدًا، فهو يشبه أنك طلبت من مبرمج غيرك أن يحل لك المشكلة بدلًا عنك، أو استخدامك لإنسان آلي يرفع الأثقال عنك في الصالة الرياضية، صحيح أنك أتممت التمارين بنجاح لكنك لم تستفد بثانية واحدة منها.
</p>

<p>
	قد يتحجج البعض أن بعض الأنشطة في التمارين لا يوجد مثلها في الحياة الواقعية، فما هو النشاط الحقيقي في الحياة الذي يتطلب منك رفع الأثقال طول اليوم أو بالطريقة التي تتمرن بها في الصالة الرياضية؟ لا يوجد شيء كهذا في الواقع، لكنها أدوات وأساليب تستخدمها لتحقيق هدف أسمى من مجرد تأدية النشاط، وهو أن يكون جسدك أقوى وأن تصير أصح بدنًا وأكفأ في ممارسة نشاطاتك اليومية لسنوات وسنوات، وهذا نفسه ما يحدث في المدرسة فما المشاكل والمسائل التي يطلب منك حلها إلا أثقال غير واقعية صممت لتستخرج أقصى ما عندك من طاقة لتصل حعلى القوة اللازمة لأداء الوظائف الحقيقية في سوق العمل.
</p>

<p>
	ولأن هذه المشكلات غير حقيقية فيستطيع الذكاء الاصطناعي حلها كلها بسهولة، فقد تدرب على أطنان من البيانات ليصير بهذا المستوى، لكن لا يخدعك هذا فتظن أنه يستطيع حل المشاكل الواقعية التي تقابلها في عملك، على الأقل إلى الآن، من يدري، فلو كان يستطيع حلها لما كانت أجور المطورين عالية، ذلك أن حل المشاكل التي تواجهك في العمل برمجيًا أمر ليس باليسير ولا يمكن التحايل عليه بكتابة سؤال لذكاء اصطناعي، وإلا لصارت أجور المطورين زهيدة لا تتعدى الحد الأدنى للرواتب، فشاهد هذه الفقرة أنك لن تصل إلى وظيفة براتب عالي إذا كان كل ما تفعله هو سؤال الذكاء الاصطناعي.
</p>

<p>
	من ناحية أخرى فهذا لا يعني ألا تتقن استخدام هذه الأدوات، فلا بأس من استخدامه بالطريقة الصحيحة التي تفيدك في دراستك وعملك ولا تؤثر على إدراكك ومهاراتك، فمثلًا لا تطلب منه تنفيذ المشروع المطلوب منك بالكامل، فلن تتعلم شيئًا حتى لو استطاع تنفيذه، فالهدف من المشروع أثناء الدراسة هو التمرين الذهني الذي تمارسه أثناء العمل عليه بنفسك.
</p>

<h3 id="-">
	الاستخدام الصحيح للذكاء الاصطناعي في الدراسة
</h3>

<p>
	قبل أن نشرح الكيفية المناسبة لاستخدام الذكاء الاصطناعي يجب أن نوضح أنه إذا كانت جامعتك أو معلمك يحظرون استخدام الذكاء الاصطناعي فالتزم بهذا وتجاهل ما نذكره هنا، أما على فرض أنك تتعلم ذاتيًا أو كان استخدام الذكاء الاصطناعي مسموحًا به فاتبع ما يلي.
</p>

<p>
	أولًا ينبغي أن تستخدمه كأنه مدرب خاص يعرف إلى حد كبير العديد من جوانب المهارة التي تتعلمها، لكنه قد يخطئ أو يقدم نصيحة سيئة من وقت لآخر، لذا يجب أن تنتبه إلى كل ما يصدر منه لتنتقي ما تستطيع تعلمه. إليك بعض الأمثلة التي تستطيع اللجوء فيها إلى الذكاء الاصطناعي:
</p>

<ul>
	<li>
		النقاط الصغيرة: جزء بسيط من المشروع وقفت عنده أو قاعدة معينة نسيتها
	</li>
	<li>
		الطرق النموذجية: الطريقة النموذجية لكتابة حلقة تكرارية تحذف عناصر مثلًا من مصفوفة
	</li>
	<li>
		استخدام الأدوات: وظيفة معامل معين operator أو كيفية استخدامه
	</li>
	<li>
		استكشاف اللغات والمكتبات: أسئلة حول مكتبات أو لغات برمجية تعرضت لها أو تريد العمل بها أو استخدامها
	</li>
</ul>

<p>
	مثل هذه الأسئلة الصغيرة أمثلة ممتازة على تطعيم عملية الدراسة بإجابات كنت ستقضي وقتًا أطول في التوصل إليها باستخدام محركات البحث العادية.
</p>

<p>
	كذلك يُستخدم الذكاء الاصطناعي في تقديم تلميحات عن الحل لمساعدتك في الوصول إليه، كأن تعطيه جزءًا من الشيفرة كدالة أو نحوها ثم تطلب تخبره بوجود خطأ في هذه الشيفرة، لكن تطلب منه أن يعطيك تلميحات فقط عن الإجابة أو كيفية التفكير في المشكلة لتجد الحل بنفسك.
</p>

<p>
	فإذا أكملت المشروع وتأكدت من نجاحه تستطيع سؤاله عن حل مختلف يمكن تطبيقه ثم تقارنه مع ما توصلت إليه أو تسأله عن طرق لتحسين الحل الذي وصلت إليه بنفسك، لكن انتبه إلى أن هذه التحسينات التي سيقترحها قد لا تكون تحسينات حقيقية بل قد تعطل شيفرتك، فافحصها بعين ناقدة تعلم لماذا قبلت هذا التحسين أو رفضته.
</p>

<p>
	بقي أن نذكر الحالة الأخيرة التي يكون مقبولًا فيها استخدام الذكاء الاصطناعي، وهو حين يسمح لك المعلم بهذا إن كنت في دراسة منتظمة، فقد يريد تدريبك على ممارسة واقعية بدلًا من بيئة التدريب، وكلا النوعين لازمين لنجاحك في دراستك.
</p>

<h3 id="-">
	استخدام الذكاء الاصطناعي في العمل
</h3>

<p>
	يذكر برايان -كاتب الدليل- أن الذكاء الاصطناعي لم يكن موجودًا بالصورة المعروفة حاليًا حين كان يعمل في السوق البرمجي، لكنه مع هذا يستخدمه الآن لإنجاز مهام بسرعة أكبر بسبب مستوى خبرته الحالي.
</p>

<p>
	وقد ذكرنا أن المطور المبتدئ يعتمد على الاستنتاج المنطقي في حل المشكلات بينما يضيف المطور الخبير إلى هذا إمكانية تمييزه لأنماط المشكلات، وستكتسب كلما زادت خبرتك فهمًا أعمق للعناصر التي تتكون منها أي مشكلة حيث تميز الأجزاء التي تحتاج إليها فقط وتفكر منطقيًا في كيفية ترابطها أو تركيبها، هذا يعني أن المطور الخبير أفضل في مرحلتي الفهم والتخطيط -من المراحل الأربعة لحل المشكلات- حيث تُحسم معركة المشكلة البرمجية في هاتين المرحلتين.
</p>

<p>
	ويستطيع الخبير أن يستغل الذكاء الاصطناعي في كتابة شيفرة معينة لأحد أجزاء المشكلة، كأن يقول له مثلًا "أريد تصفية هذه النتائج بناء على تعبير نمطي regex معين" ثم يطلب منه برمجة هذا الجزء ويتأكد بعدها من صحة الشيفرة التي كتبها ويعدلها وفقًا لاحتياجه ثم ينتقل إلى حل مشكلة أخرى، بل قد يستخدمونه في التقنيات التي لا يتقنون العمل عليها ثم يعتمدون على خبرتهم لمعرفة متى يجب التوقف والعودة لتعلم المزيد عن التقنية، كأنها حاسة سادسة تولدت مع الخبرة للشيفرات التي قد تسبب مشاكل لاحقًا، وكذلك سيعرف متى يمكنه التقدم بحذر وجمع المزيد من المعلومات حول ما يعطيه الذكاء الاصطناعي له.
</p>

<p>
	فيكون الذكاء الاصطناعي مفيدًا جدًا في بناء النموذج الأولي لفكرة ما وبسرعة لتشكيل تصور عن الصورة النهائية للحل، لكن نكرر مرة أخرى أنك أثناء دراستك للبرمجة لن تستطيع استخدام خبرة لا تمتلكها، وإذا حاولت استخدام الذكاء الاصطناعي مثل المطور الخبير فستخرج بشيفرة هشة وملأى بالأخطاء ولن تعرف كيف تصلحها، أو أسوأ من هذا بأن تظل مهاراتك بدائية لا تتطور، لكن مع الوقت تستطيع تدريجيًا توظيف الذكاء الاصطناعي بالطريقة المثلى لكتابة كميات كبيرة من الشيفرات الروتينية التي تعرف منطقها وسلوكها فتوفر وقتًا وجهدًا على نفسك.
</p>

<h3 id="-">
	الذكاء الاصطناعي في سوق العمل
</h3>

<p>
	يذكر برايان أنه كان يظن أن شركة ياهو فكرتها غبية حين خرجت للنور أول مرة، لكنها حققت أرباحًا بمليارات الدولارات، وهو أمر يتكرر كثيرًا في السوق البرمجي كل فترة، أن هذه التقنية أو تلك ستكون ثورة جديدة تلغي ما سبقها وتقلل الحاجة إلى المطورين لأن كتابة البرمجيات ستكون أمرًا سهلًا على كل الناس، كما حدث في موجة No Code، لكن قد يحدث حقًا أن توجد طفرة لا تنطبق عليها القوانين السابقة كما نرى في حالة النماذج اللغوية وأدوات الذكاءالاصطناعي مثل ChatGPT.
</p>

<p>
	وصحيح أن شركات No Code كانت تبالغ في تصريحاتها لرفع قيمتها السوقية وتحقيق عوائد ضخمة للمستثمرين فيها، وبالمثل تفعل الآن شركات الذكاء الاصطناعي، فهو نمط يتكرر بغض النظر عما إذا كانوا سيحققون هذه العوائد أم لا، ورغم أن النماذج اللغوية تظهر خبرة برمجية استثنائية، لكن لا زال لها حدود منطقية.
</p>

<p>
	فإذا فرضنا أن لدينا أداة ذكاء اصطناعي خارقة إلى حد أنها تستطيع تنفيذ مطلوب مثل "صمم وابن شركة تحطم جميع منافسيّ وتجعلني أغنى شخص على الكوكب"، فهل تظن أن هذا سيحدث حقًا في الواقع؟ ألا ترى أنه إذا كان لديك وصول إلى هذه الأداة فكذلك كل شخص على كوكب الأرض؟ ستكون النتيجة الحتمية لهذا أن نعود جميعًا إلى نقطة الصفر حيث يكون الجميع متساوون.
</p>

<p>
	لكن البشر بطبعهم يحبون التميز، فستجد من يحاول تعديل الناتج الذي يخرج به الذكاء الاصطناعي ليختلف عن منافسه، وهكذا يستمر هذا التوجه ربما إلى ما لا نهاية، فربما تقل الوظائف الروتينية السهلة لأن الذكاء الاصطناعي يستطيع حلها دون الحاجة إلى فريق كبير من المهندسين، لكن ستظل المشكلات المبتكرة والجديدة تحتاج إلى الكثير من العمل البشري، والأهم من هذا أن وتيرة تنفيذ المهام نفسها ستكون أسرع باستخدام الطرق التي ذكرناها من قبل عن توظيف الذكاء الاصطناعي في الدراسة والعمل.
</p>

<p>
	وإذا عدنا بالزمن إلى بدايات البرمجة لاستقراء ما قد يحدث في المستقبل بناء على تاريخ المجال نفسه، فسنجد أن أغلب البرامج كانت تكتب بلغة التجميع Assembly وكانت تحتاج إلى معرفة متخصصة ضخمة لكتابة برامج ملأى بالأخطاء البرمجية، ثم انتشرت المصرفات compilers التي ألغت الحاجة إلى الكتابة بلغة التجميع واختفت وظائفها وحلت محلها طرق برمجة أسرع وأسهل، واستطاع البشر الانتقال إلى حل مشاكل أعقد وأصعب، فلا شك أن البشر سيواصلون تخطي سقف الممكن وقد يكون الذكاء الاصطناعي مفيدًا للغاية، لكن مع وجود بشري في كرسي القيادة.
</p>

<h2 id="-">
	خاتمة
</h2>

<p>
	تعرفنا في هذا الدليل على المنهج الذي ينبغي أن يتبعه الدارس لعلوم الحاسوب، والأسلوب الأمثل لحل المشكلات البرمجية، والسمات النفسية التي ينبغي أن تكون لدى الدارس لهذا المجال والعامل فيه، إضافة إلى توضيح حول استخدام الذكاء الاصطناعي في التعلم، ونأمل بعده أن يقتحم الطالب هذا المجال على بينة من المطلوب منه أثناء الدراسة أو العمل.
</p>

<p>
	ترجمة -بتصرف- <a href="https://beej.us/guide/bglcs/html/" rel="external nofollow">للدليل Beej's Guide to Learning Computer Science</a> لصاحبه Brian “Beej Jorgensen” Hall
</p>
]]></description><guid isPermaLink="false">2600</guid><pubDate>Sun, 22 Feb 2026 12:54:00 +0000</pubDate></item><item><title>&#x647;&#x644; &#x646;&#x62D;&#x62A;&#x627;&#x62C; &#x62D;&#x642;&#x627; &#x625;&#x644;&#x649; &#x627;&#x644;&#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x627;&#x644;&#x636;&#x62E;&#x645;&#x629; &#x641;&#x64A; &#x627;&#x644;&#x639;&#x645;&#x644;</title><link>https://academy.hsoub.com/programming/general/%D9%87%D9%84-%D9%86%D8%AD%D8%AA%D8%A7%D8%AC-%D8%AD%D9%82%D8%A7-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D8%B6%D8%AE%D9%85%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D8%B9%D9%85%D9%84-r2578/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2025_05/6.--------.png.592952bb9ade91356cc26ea4d4c0258a.png" /></p>
<p>
	شاع استخدام مصطلح البيانات الضخمة Big Data في الآونة الأخيرة، فبعد أن صارت البيانات تُجمع بمعدل غير مسبوق من كل شيء حولنا، سواءً من أجهزة الاستشعار الخاصة بأجهزة إنترنت الأشياء IoT، أو إشارات نظام تحديد المواقع العالمي GPS من الهواتف المحمولة، أو منشورات وسائل التواصل الاجتماعي، أو المعاملات التجارية التي نجريها عبر الإنترنت، وغيرها من المصادر المتنوعة، مما زاد من حجم البيانات كثيرًا؛ دفع هذا الأمر الشركات للاستفادة من هذه البيانات وتحليلها واتخاذ القرارات بناءً عليها، وعليه صارت الكثير من القطاعات اليوم تسعى للاستفادة من هذا الكم الهائل من هذه البيانات لفهم توقعات عملائها وتعزيز عملياتها التجارية وزيادة قدرتها التنافسية في السوق.
</p>

<p>
	وفي ظل هذا التوجه والسعي الكبير لجمع البيانات وتحليلها، قد يخطر ببالنا سؤال مهم وهو هل البيانات الضخمة ضرورية بالفعل لعملنا؟ وهل تمتلك الشركات التي تستفيد من البيانات الضخمة قدرةً أكبر على تطوير الحلول المبتكرة مقارنةً بتلك التي نكتفي بالتعامل مع البيانات الصغيرة والمتوسطة الحجم أو التي تعرف باسم البيانات التقليدية؟ سنحاول في هذا المقال الإجابة على هذه التساؤلات، ونعقد مقارنةً بين البيانات الضخمة والبيانات التقليدية وحالات استخدام كل منهما.
</p>

<h2 id="bigdata">
	ما هي البيانات الضخمة Big Data
</h2>

<p>
	<a href="https://academy.hsoub.com/programming/general/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D8%B6%D8%AE%D9%85%D8%A9-big-data-r1579/" rel="">البيانات الضخمة</a> هي بيانات تستخدم لاستخراج وتحليل وإدارة معالجة أحجام هائلة ومعقدة من البيانات التي تنمو بتسارع. ووفقًا لمعدل أُسِّي، فهي تجمع باستمرار من مختلف المصادر وقد يصل حجمها إلى أرقام مهولة وضخمة جدًا.
</p>

<p>
	تتسم البيانات الضخمة بتنوع أشكالها، فهي لا تقتصر على البيانات المنظمة المخزنة في قواعد البيانات، بل تشمل أيضًا بيانات غير منظمة مثل النصوص والصور ومقاطع الفيديو. تتدفق هذه البيانات بسرعة كبيرة، لذا يصعب تسجيلها أو تخزينها أو تحليلها باستخدام <a href="https://academy.hsoub.com/devops/servers/databases/%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-database/" rel="">أنظمة إدارة قواعد البيانات</a> التقليدية، وهذا يستدعي منا استخدام تقنيات متقدمة للتعامل معها.
</p>

<p>
	تتميز البيانات الضخمة بخمس سمات رئيسية يشار لها اختصارًا بـ 5Vs، وهي:
</p>

<ul>
	<li>
		<strong>الحجم Volume</strong>: الذي يشير لكمية البيانات الإجمالية، والذي قد يصل إلى عشرات التيرابايت TeraByte
	</li>
	<li>
		<strong>السرعة Velocity</strong>: وتشير لسرعة توليد البيانات ومعالجتها وتحليلها
	</li>
	<li>
		<strong>التنوع Variety</strong>: ويشمل بيانات بأشكال مختلفة
	</li>
	<li>
		<strong>الدقة Veracity</strong>: وتحدد مدى موثوقية البيانات وصحتها وخلوها من الأخطاء
	</li>
	<li>
		<strong>القيمة Value</strong>: فتراكم البيانات وحده لا يخلق قيمة للبيانات بل يجب أن توفر هذه البيانات فائدة فعلية للعمل وإلا فلا داعي لتكديسها
	</li>
</ul>

<p>
	تُستخدم البيانات الضخمة في العديد من المجالات لتحسين العمليات واتخاذ القرارات الذكية؛ ففي الرعاية الصحية، تساعد في تقديم رعاية مخصصة واكتشاف الأمراض مبكرًا؛ أما في تجارة التجزئة، فتُستخدم <a href="https://academy.hsoub.com/marketing/core-concepts-of-marketing/%D9%81%D9%87%D9%85-%D8%B3%D9%84%D9%88%D9%83-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D9%87%D9%84%D9%83%D9%8A%D9%86-r426/" rel="">لتحليل سلوك العملاء</a> وتقديم توصيات مخصصة وتحسين إدارة المخزون؛ وفي القطاع المالي، تساهم في كشف الاحتيال وتقييم المخاطر الائتمانية؛ أما في قطاع الطاقة، فهي تُستخدم للتنبؤ بالطلب وتحسين كفاءة التوزيع والاستهلاك؛ وفي المدن الذكية، تعزز كفاءة الخدمات عبر تحليل البيانات المتعلقة بالمرور وإدارة الموارد وصيانة البنية التحتية.
</p>

<h2 id="">
	مصادر البيانات الضخمة
</h2>

<p>
	قد تكون البيانات الضخمة بأشكال متنوعة ومن مصادر عديدة تشمل:
</p>

<h3 id="structureddata">
	البيانات المنظمة Structured Data
</h3>

<p>
	على شكل جداول يسهل البحث فيها وتحليلها باستخدام استعلامات محددة تشبه جداول إكسل وقواعد البيانات العلاقية Relational Database، ومن الأمثلة عليها البيانات التي نجمعها من التطبيقات والمواقع الإلكترونية كسجلات المستخدمين أو سجلات المعاملات البنكية.
</p>

<h3 id="unstructureddata">
	البيانات غير المنظمة Unstructured Data
</h3>

<p>
	من الصعب هيكلتها ضمن جداول، مثل مقاطع الفيديو والتغريدات ومنشورات وسائل التواصل الاجتماعي، أو بيانات أجهزة <a href="https://academy.hsoub.com/programming/os-embedded-systems/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D9%81%D9%8A-%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-%D8%A7%D9%84%D8%A3%D8%B4%D9%8A%D8%A7%D8%A1-iot-r1514/" rel="">إنترنت الأشياء IoT</a>، وهي تحتوي على قيمة تحليلية عالية، لكنها أصعب في التحليل وتحتاج لأساليب متقدمة لتخزين وتحليل البيانات.
</p>

<h3 id="semistructureddata">
	البيانات شبه المنظمة Semi-Structured Data
</h3>

<p>
	وهي نوع هجين يحتوي على بعض التنظيم، ولكنه لا يتناسب تمامًا مع قواعد البيانات التقليدية كالبيانات التي تجمعها أجهزة الاستشعار ورسائل البريد الإلكتروني وملفات XML <a href="https://academy.hsoub.com/programming/javascript/%D8%AA%D8%B9%D9%84%D9%85-json-r604/" rel="">وJSON</a>.
</p>

<h2 id="-1">
	أدوات التعامل مع البيانات الضخمة
</h2>

<p>
	عند اعتماد البيانات الضخمة في بيئة العمل، سنحتاج لاستخدام العديد من الأدوات الاحترافية والمتخصصة للتعامل مع حجمها الهائل وتعقيدها. يمكن تقسيم هذه الأدوات إلى أربع أنواع رئيسية نوضحها فيما يلي:
</p>

<h3 id="-2">
	أدوات التخزين
</h3>

<p>
	يجب أن تتمتع أنظمة تخزين البيانات الضخمة بالقدرة على استيعاب كميات ضخمة من البيانات مع إمكانية التوسع مع مرور الوقت وضمان سرعة نقل البيانات إلى أنظمة المعالجة والتحليل. ومن أبرز التقنيات المستخدمة في هذا المجال منصات تخزين البيانات الموزعة مثل Hadoop HDFS وAmazon S3.
</p>

<h3 id="-3">
	أدوات التنقيب في البيانات
</h3>

<p>
	تهدف إلى استخراج أنماط ورؤى ذات قيمة من كم هائل من البيانات، مما يمكن المؤسسات من التنبؤ بالاتجاهات المستقبلية واتخاذ قرارات أدق. من بين الأدوات المستخدمة في التنقيب في البيانات Apache Spark MLlib وGoogle BigQuery، والتي تعتمد على تقنيات <a href="https://academy.hsoub.com/files/17-%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D9%88%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9/" rel="">الذكاء الاصطناعي وتعلم الآلة</a>.
</p>

<h3 id="-4">
	أدوات تنظيف البيانات
</h3>

<p>
	قبل تحليل البيانات، يجب تنظيفها والتأكد من خلوها من الأخطاء وتوحيدها قبل معالجتها. تستخدم في هذه المرحلة أدوات مثل Trifacta و OpenRefine لضمان دقة البيانات وتحسين جودتها.
</p>

<h3 id="-5">
	أدوات تحليل البيانات
</h3>

<p>
	بعد تنظيف البيانات، سنحتاج لمعالجتها وتحليلها لاستخلاص رؤى واضحة حول الأنماط والاتجاهات المستقبلية. سنحتاج لأدوات مختلفة لإجراء التحليل مثل Apache Kafka وTableau وPower BI لعرض البيانات بطريقة مرئية تدعم اتخاذ القرارات وتساعدنا على الإجابة على أسئلة معينة حول هذه البيانات
</p>

<p>
	وكما نلاحظ، فالعملية ليست بالسهولة التي قد تبدو عليها، إذ يتطلب التعامل مع البيانات الضخمة استخدام عدة أدوات وتقنيات، كما يحتاج لبنية تحتية قوية، ووجود خبرات بشرية متخصصة في هذا المجال، وسنواجه كذلك عدة تحديات أخرى سنناقشها في فقرة لاحقة يجب أخذها بالحسبان قبل أن نقرر جمعها والاعتماد عليها في أعمالنا.
</p>

<h2 id="-6">
	حالات استخدام البيانات الضخمة
</h2>

<p>
	تتيح البيانات الضخمة للشركات والمؤسسات إمكانية جمع ومعالجة أحجام هائلة من البيانات في الوقت الفعلي، لكن البيانات الضخمة التي تجمعها الشركات بحد ذاتها ليس الهدف، فإن لم تكن لدى الشركة أهداف فعلية للاستفادة من هذه البيانات، فلا جدوى من جمعها وتكديسها لديها، وفيما يلي بعض حالات استخدام البيانات الضخمة المفيدة:
</p>

<ul>
	<li>
		كشف الاتجاهات والأنماط في سلوك العملاء من أجل توقع احتياجاتهم المستقبلية وتلبيتها
	</li>
	<li>
		تحليل تفضيلات العملاء وسلوكهم الشرائي لتخصيص المنتجات وفقًا لاحتياجاتهم مما يعزز رضاهم ويساهم في زيادة المبيعات
	</li>
	<li>
		المرونة والتكيف مع تغيرات السوق بسرعة والعمل على تحسين المنتجات الحالية أو <a href="https://academy.hsoub.com/marketing/core-concepts-of-marketing/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D9%86%D8%AA%D8%AC-%D8%AC%D8%AF%D9%8A%D8%AF-%D8%AE%D8%B7%D9%88%D8%A9-%D8%A8%D8%AE%D8%B7%D9%88%D8%A9-r435/" rel="">تطوير منتجات جديدة</a>
	</li>
	<li>
		اتخاذ قرارات استراتيجية في العمل وإيجاد فرص نمو جديدة
	</li>
	<li>
		تحديد نقاط الضعف في العمل واكتشاف الجوانب التي يمكن تحسينها، مثل تقليل التكاليف أو تحسين العمليات التشغيلية
	</li>
	<li>
		تقييم المخاطر والتعرف على التهديدات المحتملة في العمل بوقت مبكر وقبل أن تفع فعلًا، ووضع استراتيجيات فعالة لإدارتها والتخفيف من آثارها
	</li>
	<li>
		التنبؤ في الوقت الفعلي كأن نتوقع متى وأين سيزيد الطلب على <a href="https://academy.hsoub.com/marketing/core-concepts-of-marketing/%D8%AA%D8%B9%D8%B1%D9%8A%D9%81-%D8%A7%D9%84%D9%85%D9%86%D8%AA%D8%AC-%D9%88%D8%A3%D9%86%D9%88%D8%A7%D8%B9%D9%87-r433/" rel="">منتج</a> معين لتلبية احتياجات السوق وضمان وصوله للعملاء في الوقت المناسب
	</li>
</ul>

<p>
	فإذا لم تكن أولويات العمل تحتاج لتحليل سلوك العملاء، واتخاذ قرارات استراتيجية بناءً عليها، فلا داعي لتخزين البيانات بكميات ضخمة وتكبد وقت وجهد وتكلفة في تخزينها ومعالجتها.
</p>

<h2 id="-7">
	تحديات التعامل مع البيانات الضخمة
</h2>

<p>
	ينشأ عن الاعتماد على البيانات الضخمة في العمل عدة تحديات وعوائق يجب الانتباه لها ومن أهمها:
</p>

<h3 id="-8">
	الخصوصية والأمان
</h3>

<p>
	يمكن أن تصبح الكمية الضخمة من البيانات في المؤسسات هدفًا سهلًا للتهديدات الأمنية لاحتوائها على معلومات حساسة؛ فمع تزايد حجم البيانات، سيزداد خطر اختراقها وتسريبها، لذا يتوجب على الشركات الحفاظ على أمن بياناتها من خلال المصادقة المناسبة، والتشفير القوي والامتثال لمعايير صارمة لحمايتها.
</p>

<h3 id="-9">
	نمو البيانات بسرعة
</h3>

<p>
	إن نمو البيانات بمعدل سريع يجعل من الصعب استخلاص الرؤى منها؛ فهناك المزيد والمزيد من البيانات التي يتم إنتاجها كل ثانية. ومن بين هذه البيانات، يجب انتقاء البيانات ذات الصلة والمفيدة فعليًا لتحليلها، كما يصعب على المؤسسات تخزين وإدارة كمية كبيرة من البيانات بدون الأدوات والتقنيات المناسبة.
</p>

<h3 id="-10">
	سرعة المعالجة
</h3>

<p>
	بعض التطبيقات مثل أنظمة كشف الاحتيال تتطلب منا تحليل البيانات في الوقت الفعلي، وبالتالي سنحتاج لاستخدام تقنيات مخصصة، مثل Apache Flink و Spark Streaming لضمان الاستجابة الفورية بالوقت المناسب دون أي تأخير
</p>

<h3 id="-11">
	مشكلات جودة البيانات
</h3>

<p>
	لا يمكن أن تكون البيانات الضخمة دقيقةً بنسبة 100٪، كما قد تحتوي على بيانات مكررة أو غير مكتملة؛ إضافةً إلى وجود ضوضاء وأخطاء عديدة فيها، لذا إن لم ننظف هذه البيانات ونجهز جيدًا فستؤدي إلى تحليلات غير دقيقة واستنتاجات خاطئة في العمل
</p>

<h3 id="-12">
	صعوبة دمج وتكامل البيانات
</h3>

<p>
	تستورد فلبيانات من مصادر مختلفة وبصيغ متعددة، وقد لا تكون البيانات من مصدر معين محدثة مقارنةً مع البيانات من مصدر آخر.
</p>

<h3 id="-13">
	نقص الكفاءات المتخصصة
</h3>

<p>
	يتطلب تحليل البيانات الضخمة مهارات تقنية متقدمة، مثل علم البيانات وتحليل البيانات، وعدد المتخصصين في هذا المجال لا يزال محدودًا لا سيما عربيًا.
</p>

<h3 id="-14">
	تحديات إدارية وتنظيمية
</h3>

<p>
	قد تظهر بعض التحديات الإدارية والتنظيمية خلال التعامل مع الكم الهائل للبيانات الضخمة، مثل ضعف الحوكمة وعدم وجود سياسات وآليات واضحة لضبط جمع بيانات الأشخاص، وعدم وجود توضيحات كافية لطريقة استخدامها تضمن التعامل معها بأمان؛ لذا وقبل أن نقرر التعامل مع البيانات الضخمة، يجب أن تطرح على نفسنا السؤال التالي: هل نحن بحاجة فعلًا لكل هذا الكم الكبير من البيانات وكل هذه التحليلات المعقدة لنجاح عملنا، أم أن البيانات التقليدية ـأي البيانات الصغيرة والمتوسطة الحجم- وحدها تكفينا لتسيير أمور العمل بنجاح واستقرار.
</p>

<h2 id="-15">
	ما هي البيانات التقليدية؟
</h2>

<p>
	تشير البيانات التقليدية إلى البيانات المهيكلة التي يمكن تخزينها على هيئة جداول مكونة من أسطر وأعمدة بهيكلية واضحة ومنظمة، مثل معلومات العملاء وقوائم المخزون والسجلات المالية. وتعتمد معالجة البيانات في هذه الأنظمة على الأساليب الإحصائية التقليدية والأدوات، مثل <a href="https://academy.hsoub.com/programming/sql/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B3%D8%B1%D9%8A%D8%B9%D8%A9-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%B9%D9%84%D8%A7%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D9%87%D9%8A%D9%83%D9%84%D9%8A%D8%A9-sql-r1368/" rel="">لغة الاستعلامات الهيكلية SQL</a> للبحث عن المعلومات واسترجاعها؛ فباستخدام هذه الأدوات، يمكن <a href="https://academy.hsoub.com/entrepreneurship/managementleadership/%D8%A7%D8%AA%D8%AE%D8%A7%D8%B0-%D8%A7%D9%84%D9%82%D8%B1%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D8%A5%D8%AF%D8%A7%D8%B1%D9%8A%D8%A9-r542/" rel="">للشركات اتخاذ قرارات مفيدة</a> وتحسين أدائها؛ وعلى الرغم من أن هذه البيانات المنظمة سهلة في التعامل، إلا أنها تكون قد محدودةً في حال احتجنا لتقديم رؤى متطورة ومعقدة تخص بعض الأعمال، مثل الحاجة لنظام مراقبة ذكي يراقب الأسواق المالية ويكشف الاحتيال في المعاملات البنكية فورًا.
</p>

<h2 id="-16">
	أدوات التعامل مع البيانات التقليدية
</h2>

<p>
	البيانات التقليدية أسهل في التعامل من البيانات الضخمة لأنها غالبًا ما تكون صغيرة الحجم ومنظمةً جيدًا ومن أبرز أدوات البيانات التقليدية نذكر:
</p>

<ul>
	<li>
		قواعد البيانات العلائقية RDBM مثل MySQL و Oracle و SQL Server، والتي تستخدم لتخزين البيانات في جداول مترابطة، وهي مثالية للبيانات المنظمة والمهيكلة
	</li>
	<li>
		جداول البيانات Spreadsheets مثل إكسل Excel أو جداول جوجل Google Sheets لتحليل البيانات الصغيرة والمتوسطة خاصة عندما تكون البيانات محدودة ومنظمة
	</li>
	<li>
		برامج إدارة البيانات مثل SQLite التي تستخدم لتخزين وإدارة البيانات الصغيرة وتوفر لنا القدرة على إجراء بعض العمليات البسيطة على البيانات
	</li>
</ul>

<h2 id="-17">
	حالات استخدام البيانات التقليدية
</h2>

<p>
	إذا كانت البيانات التي نجمعها في العمل هي بيانات منظمة مثل قواعد البيانات الجاهزة، فإن الحلول التقليدية مثل قواعد البيانات العلائقية غالبا ستكون كافيةً لإدارتها وتحليلها ولا داعي لأن نرهق أنفسنا بتعقيدات البيانات الضخمة.
</p>

<p>
	وفيما يلي بعض الحالات التي تعد فيها البيانات التقليدية هي الأنسب للاستخدام:
</p>

<ul>
	<li>
		إدارة السجلات المالية ضمن نظام يتعامل مع كمية محدودة من بيانات الفواتير والمدفوعات ويصدر تقارير مالية منظمة
	</li>
	<li>
		إدارة المخزون في متاجر صغيرة أو متوسطة تتضمن بيانات عن المنتجات والمبيعات ومستويات المخزون وتسعى لتحسين استراتيجيات المبيعات باستخدام قواعد بيانات تقليدية
	</li>
	<li>
		الرعاية الصحية ضمن مستشفيات تنظم وتدير معلومات المرضى، مع تتبع تاريخ المرضى ونتائج فحوصاتهم وتتابع خطط علاجهم وترقب التقدم في حالتهم الصحية
	</li>
	<li>
		إدارة الموظفين في الشركات الصغيرة والمتوسط باستخدام أنظمة تقليدية لتخزين المعلومات الشخصية للموظفين وجداول حضورهم وأدائهم
	</li>
	<li>
		إدارة المنصات التعليمية كالمدارس والمعاهد التعليمية التي تحتاج لإدارة بيانات الطلاب وتخزين درجاتهم وتتبع حضورهم ومستوياتهم الدراسية
	</li>
</ul>

<p>
	في كل هذه الحالات والحالات المشابهة، سيكون حجم البيانات محدودًا نسبيًا، أو ستكون البيانات منظمةً جيدًا، مما يسهّل معالجتها باستخدام الأنظمة التقليدية دون الحاجة إلى تقنيات معقدة كتلك التي تتطلبها البيانات الضخمة؛ أما في حال زاد تعقيد البيانات سواءً من حيث الحجم أو السرعة أو تنوع المصادر وكانت هناك حاجة لتحليلها بدقة واتخاذ قرارات بناءً عليها بسرعة، فعندها سيكون اللجوء إلى تقنيات البيانات الضخمة أمرًا ضروريًا.
</p>

<h2 id="-18">
	مميزات التعامل مع البيانات التقليدية
</h2>

<p>
	يتسم التعامل مع البيانات التقليدية بما يلي:
</p>

<h3 id="-19">
	السهولة
</h3>

<p>
	يمكن التعامل مع البيانات المعالجة باستخدام الأساليب التقليدية بسهولة باستخدام الأدوات القياسية، مما يجعلها أكثر سهولةً في التعامل ولا تتطلب معرفةً تقنيةً متقدمة.
</p>

<h3 id="-20">
	الوصول السريع للبيانات
</h3>

<p>
	تقدم قواعد البيانات التقليدية وصولًا سريعًا وموثوقًا إلى البيانات من خلال العمل المستقل على خادم أو حاسوب محلي لا على بيئات سحابية أو خارجية، وتتجاوز مشكلات تأخير الشبكة أو انقطاع الخدمة أو اختراقات الأمان.
</p>

<h3 id="-21">
	سهولة حماية البيانات
</h3>

<p>
	تُعَد البيانات الصغيرة والمتوسطة أسهل في تأمينها وحمايتها نظرًا لصغر حجمها وعدم اعتمادها على الهيكلية الموزعة، خاصةً وأنها لا تعتمد في أغلب الأحيان على التخزين الخارجي، مما يجعلها مناسبةً لإدارة المعلومات الحساسة أو السرية.
</p>

<h3 id="-22">
	سهولة إدارة البيانات
</h3>

<p>
	تقدم قواعد البيانات التقليدية للمستخدمين تحكمًا كبيرًا في إدارة البيانات، حيث يمكن للمستخدمين تعريف أنواع البيانات، وتحديد القواعد بينها، وإنشاء العلاقات المخصصة وفقًا لاحتياجاتهم.
</p>

<h3 id="-23">
	تتطلب تكاليف وموارد أقل
</h3>

<p>
	تتطلب الأساليب التقليدية تكاليف أقل وموارد أقل مقارنة بأنظمة معالجة البيانات الضخمة التي تتطلب تكاليف وموارد ضخمة.
</p>

<h2 id="-24">
	الخلاصة
</h2>

<p>
	أصبحت البيانات الضخمة بلا شك جزءًا أساسيًا من العمليات التجارية والخدمات الحكومية، نظرًا للنمو السريع في حجم البيانات الرقمية. ومع تطور تقنيات الذكاء الاصطناعي، أتاح ذلك للمؤسسات القدرة على استخراج رؤى أكثر دقة واتخاذ قرارات أكثر ذكاءً وتحسينات كبيرة في مختلف القطاعات؛ لكن مع ذلك، ينبغي أن نتذكر أن البيانات الضخمة ليست مجرد جمع كميات هائلة من المعلومات، بل هي عملية تتطلب استراتيجيات مدروسة، وأدوات متخصصة، وتخطيطًا دقيقًا لتحقيق أقصى استفادة منها وتحويلها إلى قرارات تدعم النجاح والنمو.
</p>

<p>
	مع ذلك، وبالرغم من هذا التطور الكبير في مجال البيانات الضخمة، لازالت البيانات التقليدية الصغيرة والمتوسطة كافية للعديد من الحالات إن لم نقل أغلبها نظرًا لتوفير هذا النوع من البيانات حلولًا مناسبةً سهلة التعامل وبتكاليف أقل.
</p>

<p>
	لذا، متى لم يكن ما نعمل عليه يتطلب بيانات ضخمة للحصول على تحليلات وفهم كاف، فلا حاجة لأن نلجأ في أعمالنا لحلول البيانات الضخمة، لاسيما أنها تحتاج لخبرة وتكاليف أكبر وتعقيدات تقنية للتعامل مع البيانات وتحليلها وإدارتها، خاصةً وأننا إذا لم نحسن التعامل مع هذه البيانات ونستخدمها بطريقة صحيحة، فلن نتمكن من فهمها أو اتخاذ قرارات صائبة بناءً عليها.
</p>

<h2 id="-25">
	المصادر
</h2>

<ul>
	<li>
		<a href="https://cloud.google.com/learn/what-is-big-data" rel="external nofollow">?What is Big Data</a>
	</li>
	<li>
		<a href="https://blogs.cfainstitute.org/investor/2021/01/25/when-to-use-big-data-and-when-not-to/" rel="external nofollow">When to Use Big Data — and When Not To</a>
	</li>
	<li>
		<a href="https://www.datamation.com/big-data/big-data-pros-and-cons/" rel="external nofollow">7‎ Pros and Cons of Big Data</a>
	</li>
	<li>
		<a href="https://www.geeksforgeeks.org/difference-between-traditional-data-and-big-data/" rel="external nofollow">Difference Between Traditional Data and Big Data</a>
	</li>
	<li>
		<a href="https://infomineo.com/data-analytics/big-data-analytics-versus-traditional-data-analytics/" rel="external nofollow">Big Data Analytics Versus Traditional Data Analytics: A Comprehensive Overview</a>
	</li>
</ul>

<h2 id="-26">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D8%B6%D8%AE%D9%85%D8%A9-big-data-r1579/" rel="">مقدمة إلى مفهوم البيانات الضخمة Big Data</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-r1009/" rel="">المفاهيم الأساسية لتعلم الآلة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-r2239/" rel="">أساسيات الذكاء الاصطناعي: دليل المبتدئين</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/artificial-intelligence/" rel="">تعلم الذكاء الاصطناعي</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2578</guid><pubDate>Wed, 04 Jun 2025 16:08:01 +0000</pubDate></item><item><title>&#x623;&#x647;&#x645; &#x623;&#x633;&#x626;&#x644;&#x629; &#x627;&#x644;&#x645;&#x642;&#x627;&#x628;&#x644;&#x627;&#x62A; &#x644;&#x62A;&#x648;&#x638;&#x64A;&#x641; &#x645;&#x637;&#x648;&#x631; &#x648;&#x627;&#x62C;&#x647;&#x629; &#x623;&#x645;&#x627;&#x645;&#x64A;&#x629;</title><link>https://academy.hsoub.com/programming/general/%D8%A3%D9%87%D9%85-%D8%A3%D8%B3%D8%A6%D9%84%D8%A9-%D8%A7%D9%84%D9%85%D9%82%D8%A7%D8%A8%D9%84%D8%A7%D8%AA-%D9%84%D8%AA%D9%88%D8%B8%D9%8A%D9%81-%D9%85%D8%B7%D9%88%D8%B1-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A3%D9%85%D8%A7%D9%85%D9%8A%D8%A9-r2569/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2025_05/3.--------.png.f4a212b53b0ba96d6e7dff2bbd489233.png" /></p>
<p>
	يعمل مطورو الواجهات الأمامية لتطبيقات الويب على بناء واجهة مستخدم تفاعلية جذابة تعرض البيانات التي ترسلها الواجهة الخلفية ردًا على طلب من مستخدم التطبيق. وهكذا، ستكون سهولة تفاعل المستخدم مع التطبيق وسهولة استخدام واجهاته وطريقة عرض البيانات ضمنها معايير أساسية في نجاح التطبيق. وهنا يبرز الدور الإبداعي لمطوري الواجهة الأمامية.
</p>

<p>
	يسعى معظم مطوري الواجهات الأمامية إلى العمل ضمن فعاليات أو شركات لزيادة معارفهم واكتساب الخبرات اللازمة في طريقهم إلى الاحتراف، لكن الخطوة الأصعب كما يراها الكثيرون هي إجتياز مقابلات العمل وهذا هو موضوع مقالنا.
</p>

<h2 id="">
	المهارات المطلوبة من مطور الواجهات الأمامية
</h2>

<p>
	تلخص النقاط التالية المهارات المطلوبة من مطور الواجهات الأمامية:
</p>

<ul>
	<li>
		إتقان اللغات الثلاثة الأساسية للويب: لغة <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> ولغة <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> ولغة <a href="https://wiki.hsoub.com/JavaScript" rel="external">جافا سكريبت</a>
	</li>
	<li>
		إتقان العمل على إطار عمل جافا سكريبت عصري واحد على الأقل مثل <a href="https://wiki.hsoub.com/React" rel="external">React</a> أو Angular.js أو Vue.js
	</li>
	<li>
		إتقان استخدام مكتبات CSS مثل <a href="https://wiki.hsoub.com/Bootstrap" rel="external">Bootstrap</a> أو Tailwind وغيرها
	</li>
	<li>
		إتقان العمل على بيئة اختبار مثل Mocha أو Jest
	</li>
	<li>
		إتقان العمل مع الواجهات البرمجية RESTful APIs للتواصل مع الواجهة الخلفية
	</li>
	<li>
		القدرة على تنفيذ <a href="https://academy.hsoub.com/design/user-experience/%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-%D9%88%D8%AA%D8%AC%D8%B1%D8%A8%D8%A9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-ui-ux-r831/" rel="">تصاميم UI/UX</a> بدقة وسهولة
	</li>
</ul>

<p>
	سنعرض في الفقرات التالية بعضًا من الأسئلة التي تُطرح على مطوري الواجهات الأمامية في مقابلات العمل، وقد قدمناها وفق ثلاثة أقسام: يغطي القسم الأول لغة HTML، ويغطي الثاني لغة CSS ومكتباتها، أما القسم الثالث فيغطي جافا سكريبت ومفاهيم تطوير الويب العصرية.
</p>

<p>
	سنبدأ مع أهم الأسئلة التي قد تُطرح على المتقدم حول لغة HTML5 وميزاتها، وكيفية الرد على كل سؤال بطريقة مناسبة.
</p>

<h2 id="html">
	أهم الأسئلة التي تُطرح حول HTML
</h2>

<p style="text-align: center;">
	<img alt="شعار HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="171823" data-ratio="100.00" data-unique="zimphubck" style="width: 225px; height: auto;" width="225" src="https://academy.hsoub.com/uploads/monthly_2025_05/images-2.png.59c0a592425b1ac2946651eae1531747.png">
</p>

<p>
	من أكثر الأسئلة شيوعًا حول لغة HTML، نذكر الآتي.
</p>

<h3 id="html5">
	ما هي لغة HTML5؟
</h3>

<p>
	لغة HTML هي لغة توصيف Mark language تعطي صفحة الويب هيكلها، فهي بمثابة الأساسات والجدران والسقف إن شبهنا صفحة الويب بمنزل قيد البناء. أحدث نسخة من هذه اللغة هي HTML5، ويمكن أن نلخّص الغاية الأساسية من تطوير مواصفات HTML5 بإيجاد عناصر أصلية تنفّذ وظائف شائعة مثل استخدام عنصر مشغّل الفيديو <code>&lt;video&gt;</code>، بدلًا من استخدام إضافات خارجية؛ إضافةً إلى تقديم عناصر دلالية Semantic elements تهيكل محتوى الصفحة بطريقة توضح طبيعة المحتوى الذي يضمه العنصر مثل <code>&lt;article&gt;</code> و <code>&lt;table&gt;</code> وغيرها.
</p>

<h3 id="html-1">
	هل تحتاج الصفحة إلى عناصر HTML أساسية حتى تعمل جيدًا؟
</h3>

<p>
	علينا أن نميز هنا بين سياقين أساسيين:
</p>

<ul>
	<li>
		عرض الصفحة الذي يقع على عاتق المتصفح غالبًا
	</li>
	<li>
		الهيكلية البنّاءة للصفحة التي تقع على عاتق المطوّر
	</li>
</ul>

<p>
	يحاول المتصفح في العادة عرض الصفحة أيًا كانت العناصر المستخدمة، سواءً بشكلها الصحيح أو الخاطئ، ولهذا لا توجد بالمعنى الحرفي عناصر ضرورية لعمل الصفحة في هذا السياق؛ لكن من ناحية أخرى، تَعُد HTML5 عدم استخدام العنصر المناسب في المكان المناسب أمرًا غير مرغوب فيه، لأن ذلك سيصعّب توضيح طبيعة المحتوى ودوره ويزيد من اللبس.
</p>

<p>
	لحل الإشكال، تساعد تقنيات ويب أخرى غير المتصفح على تفسير المحتوى بطريقة صحيحة، لذا يمكن القول لا أنه توجد عناصر معينة تمنع عرض الصفحة على متصفح، لكنها قد تفسر بطريقة خاطئة من قِبل عميل آخر.
</p>

<h3 id="blockelementsinlineelements">
	ما الفرق بين عناصر الكتل Block elements والعناصر السطرية Inline elements؟
</h3>

<p>
	يبدأ العنصر الكتلي Block elements سطرًا جديدًا في الصفحة ويمتد ليغطي كامل اتساع السطر حتى لو احتاج المحتوى إلى مساحة أقل، في حين لا يبدأ العنصر السطري Inline elements سطرًا جديدًا ويحتل فقط مساحة تعادل المساحة المطلوبة، وبالتالي يمكن أن يأتي عنصر آخر إلى جواره في السطر ذاته.
</p>

<p>
	لا يُسمح للمطور بضبط أبعاد العنصر السطري، لكنه يستطيع ذلك مع العناصر الكتلية. ومن الأمثلة على العناصر الكتلية نجد العنصرين <code>&lt;p&gt;</code> و <code>&lt;div&gt;</code>، بينما نجد أن العنصر <code>&lt;span&gt;</code> هو عنصر سطري.
</p>

<h3 id="html-2">
	ما هي HTML الدلالية؟ وأين تظهر أهميتها؟
</h3>

<p>
	تتلخص HTML الدلالية باستخدام عناصر تعرف بكل وضوح طبيعة المحتوى الذي تضمه وطريقة هيكلة هذا المحتوى مثل استخدام عنصر تحديد ترويسة الصفحة <code>&lt;header&gt;</code> وعناصر تقسيم الصفحة إلى أجزاء مثل <code>&lt;section&gt;</code> و <code>&lt;article&gt;</code>. وتظهر أهميته في نواح ثلاث:
</p>

<ul>
	<li>
		سهولة القراءة Readability
	</li>
	<li>
		سهولة الوصول Accessibility
	</li>
	<li>
		تحسين محركات البحث SEO
	</li>
</ul>

<h3 id="wcag">
	ماهي WCAG؟
</h3>

<p>
	WCAG هي اختصار لعبارة Web Content Accessibility Guidelines طورتها منظمة اسمها W3C وتعني إرشادات إتاحة محتوى الويب، وهي مجموعة من الإرشادات التي تضمن أن تكون مواقع الويب سهلة الوصول Accessible وقابلة للاستخدام السلس والتشغيل الجيد وأن تكون مفهومة ومناسبة لجميع المستخدمين، بمن في ذلك ذوي الاحتياجات الخاصة.
</p>

<h3 id="html-3">
	أعط امثلة عن ممارسات في HTML تزيد من سهولة الوصول إلى محتوى الصفحة
</h3>

<p>
	هنالك العديد من الممارسات التي تزيد من سهولة الوصول إلى الصفحة، نذكر منها ما يلي:
</p>

<ul>
	<li>
		استخدام العنصر الأصلي <code>&lt;button&gt;</code> في كل مرة نحتاج فيها إلى زر، بدلًا من أي عناصر أخرى مشابهة مثل <code>&lt;input&gt;</code> أو <code>&lt;div&gt;</code>، فهو يدعم تلقائيًا استخدام لوحة المفاتيح والفأرة
	</li>
	<li>
		استخدام الخاصية <code>alt</code> في الصور <code>&lt;img&gt;</code>، فهي تشرح نصيًا محتوى الصورة في حال لم يتمكن المتصفح من عرضها
	</li>
	<li>
		استخدام عناصر HTML الدلالية مثل <code>&lt;figure&gt;</code> لأنه يقدم إمكانيات أكبر من <code>&lt;img&gt;</code> تتعلق بسهولة الوصول
	</li>
	<li>
		استخدام خاصيات WCAG عندما لا تكون الخاصيات الأصلية للعناصر كافية مثل <code>role</code> و <code>-aria</code> وغيرها
	</li>
</ul>

<h3 id="formshtml">
	ما هي الاستمارات forms في HTML؟ لخص آلية عملها؟
</h3>

<p>
	<a href="https://academy.hsoub.com/programming/html/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D8%B3%D8%AA%D9%85%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-web-forms-r2368/" rel="">الاستمارة <code>&lt;form&gt;</code></a> هي عنصر أصلي في HTML، وغايته هي نقل محتوى عناصره إلى الخادم وفق تنسيق معين. تضم الاستمارة عناصر إدخال مختلفة، مثل الأزرار والصناديق النصية وصناديق التحقق وغيرها.
</p>

<p>
	نحتاج في الاستمارة إلى خاصيتين:
</p>

<ol>
	<li>
		خاصية <code>action</code> لتحديد وجهة البيانات المرسلة
	</li>
	<li>
		خاصية <code>method</code> لتحديد طريقة الإرسال POST أو GET
	</li>
</ol>

<p>
	لا بد أيضًا من استخدام الخاصية <code>name</code> لكل عنصر إدخال ضمن الاستمارة، لأن قيمة كل عنصر سترتبط بقيمة الخاصية <code>name</code> قبل إرسالها إلى الخادم، وستعالج سكربتات مخصصة معلومات الاستمارة المرسلة وفقًا لما هو مطلوب.
</p>

<h3 id="html-4">
	ما الآليات المقترحة لتحسين محركات البحث من خلال هيكلية HTML؟
</h3>

<p>
	بإمكاننا الانتباه إلى الكثير من الممارسات أثناء هيكلة الصفحة <a href="https://academy.hsoub.com/programming/html/%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-html-r1702/" rel="">باستخدام HTML</a> لتحسين محركات البحث منها:
</p>

<ul>
	<li>
		استخدام عناصر HTML دلالية لأنها تعطي هيكلة ومعنى محدد لهذه الهيكلية مثل <code>&lt;nav&gt;</code> و <code>&lt;header&gt;</code> و <code>&lt;main&gt;</code> وغيرها
	</li>
	<li>
		استخدام العنصر الوصفي <code>&lt;meta&gt;</code> لوصف الصفحة وتحدي كلمات مفتاحية للبحث وتحديد نافذة العرض وغيرها من البيانات الوصفية
	</li>
	<li>
		استخدام النصوص البديلة عن الصور لأن محركات البحث تفضل النصوص المكتوبة
	</li>
	<li>
		استخدام الروابط الداخلية ضمن الصّفحة الواحدة أو الموقع لتساعد زواحف محركات البحث.
	</li>
</ul>

<h2 id="css">
	نماذج عن الأسئلة التي تُطرح حول CSS وأطر عملها والتصميم المتجاوب
</h2>

<p style="text-align: center;">
	<img alt="شعار CSS" class="ipsImage ipsImage_thumbnailed" data-fileid="171822" data-ratio="100.00" data-unique="laomrckoe" style="width: 225px; height: auto;" width="225" src="https://academy.hsoub.com/uploads/monthly_2025_05/csslogo.png.f21c8ab1b073a47dbede7c809badb47d.png">
</p>

<p>
	فيما يلي أهم النقاط التي قد يُسأل فيها المتقدم للوظيفة مطور واجهات أمامية حول لغة CSS
</p>

<h3 id="css-1">
	ما هي لغة CSS؟ وما آخر إصداراتها؟
</h3>

<p>
	أولًا، لا تُعَدّ CSS لغة برمجة وليست لغة توصيف Mark Up أيضًا، وإنما هي لغة تنسيق صفحات؛ إذ تُستخدم لتطبيق تنسيقات تتعلق باللون والموقع وخطوط الكتابة والأبعاد وغيرها على عناصر HTM. آخر إصدارات اللغة هي CSS3، وتتفاوت المتصفحات في دعم قواعدها فهي لغة محمولة تفسرها المتصفحات.
</p>

<h3 id="selectorscss">
	ما هي المحددات Selectors في CSS؟ تحدث عن أهم أنواعها باختصار
</h3>

<p>
	<a href="https://academy.hsoub.com/programming/css/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D9%81%D9%8A-css-r2044/" rel="">المحددات</a> هي وسيلة لاستهداف عنصر أو عناصر محددة من عناصر HTML وفقًا لمعايير مختلفة وذلك لتطبيق التنسيقات المطلوبة عليها. ومن أنواع المحددات نجد:
</p>

<ul>
	<li>
		<strong>محدد المعرفّ ID Selector</strong>: ويستهدف العنصر وفق قيمة الخاصية <code>id</code> له
	</li>
	<li>
		<strong>محدد الصنف Class Selector</strong>: يطبق التنسيق على أي عنصر يمتلك قيمةً محددةً للخاصية <code>class</code>
	</li>
	<li>
		<strong>محدد الخاصيات Attribute Selector</strong>: يستهدف العناصر التي تمتلك قيمةً محددةً لخاصية محددة
	</li>
	<li>
		<strong>محددات زائفة Pseudo Selectors</strong>: تستهدف العناصر التي تتميز بوضع معين، كأن تكون العناصر الأولى من نوعها أو أن يكون مؤشر الفأرة مارًا فوقها
	</li>
</ul>

<h3 id="-1">
	ما الفرق بين العناصر الزائفة والأصناف الزائفة؟
</h3>

<p>
	<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B5%D9%86%D8%A7%D9%81-%D8%A7%D9%84%D8%B2%D8%A7%D8%A6%D9%81%D8%A9-pseudo-classes-%D9%88%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D8%A7%D9%84%D8%B2%D8%A7%D8%A6%D9%81%D8%A9-pseudo-elements-%D9%81%D9%8A-css-r2124/" rel="">العناصر والأصناف الزائفة</a> كيانان مختلفان في CSS يشكلان معًا المحدد الزائف؛ فالأصناف الزائفة Pseudo Classes هي أصناف تستهدف العناصر بناءً على حالتها وموقعها مثل <code>hover:</code> الذي يطبق التنسيق على عنصر يمر مؤشر الفأرة فوقه؛ أما العنصر الزائف Pseudo element، فهو عنصر افتراضي يُعرّف فقط لتطبيق تنسيق على جزء محدد من عنصر HTML، كأن تنسّق النص الذي يحدّده المستخدم <code>selection::</code>.
</p>

<h3 id="css-2">
	اشرح أفضلية تطبيق قواعد التنسيق في CSS
</h3>

<p>
	إذا لم يكن لقاعدة ما أفضلية على أخرى، فيجدر بنا تطبيق آخر قاعدة تنسيق، وترتب الأفضلية تنازليًا كالتالي:
</p>

<ol>
	<li>
		محدد معرّف
	</li>
	<li>
		محدد الصنف
	</li>
	<li>
		محدد العنصر
	</li>
</ol>

<p>
	مع ذلك، فقد يُطبق أكثر من محدد على عنصر ولن يكون الترتيب فعالًا، لهذا <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%82%D8%A8-%D9%88%D8%A7%D9%84%D8%AA%D8%AE%D8%B5%D9%8A%D8%B5-%D9%88%D8%A7%D9%84%D9%88%D8%B1%D8%A7%D8%AB%D8%A9-%D9%81%D9%8A-css-r2042/" rel="">يُتبع ترتيب عام آخر</a> يعتمد على منح كل محدد عددًا من النقاط وتُطبق القاعدة التي تكتسب عدد نقاط أكبر، فمثلًا محدد المعرف مع محدد الصنف يكون أعلى ترتيبًا من محدد المعرّف مع محدد العنصر.
</p>

<h3 id="css-3">
	ما هي استعلامات الوسائط في CSS؟
</h3>

<p>
	<a href="https://academy.hsoub.com/programming/css/%D8%AF%D9%84%D9%8A%D9%84%D9%83-%D8%A5%D9%84%D9%89-%D8%A7%D8%B3%D8%AA%D8%B9%D9%84%D8%A7%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D8%B3%D8%A7%D8%A6%D8%B7-media-queries-%D9%81%D9%8A-css-r2309/" rel="">استعلامات الوسائط</a> هي ميزة تقدمها CSS لمطوري الواجهة الأمامية، تسمح لهم بتطبيق تنسيقات مختلفة على مستند وفقًا لنوع الجهاز الذي يعرضه وأبعاد واجهة العرض؛ كأن نغيّر مخطط الصفحة عندما تعرض على هاتف محمول أو على حاسوب مكتبي. وهي أداة أساسية في التصميم المتجاوب لمواقع الويب.
</p>

<h3 id="scss">
	ما هي SCSS؟ وكيف تعمل؟
</h3>

<p>
	SCSS هي معالج أولي Preprocessor للغة CSS لتوسيع إمكاناتها بإضافة متغيرات ودوال ودعم الوراثة والتداخل وغيرها من الميزات. تفسّر شيفرة SCSS إلى CSS ثم تُستخدم.
</p>

<h3 id="bootstraptailwindbulma">
	اشرح كيف تدعم Bootstrap و Tailwind و Bulma الصور المتجاوبة
</h3>

<p>
	تقدم كل من Bootstrap و Bulma صنفي تنسيق مخصصين للتحكم بطريقة عرض الصورة؛ إذ تقدم Bootstrap الصنف <code>img-fluid.</code>، بينما تقدم Bulma الصنف <code>is-responsive.</code>، أما Tailwind، فلا تقدم صنفًا جاهزًا، لكن يمكن استخدام الفئتين <code>max-w-full</code> و <code>h-auto</code> ونقاط التوقف <code>*-w</code> التي تضبط حجم الصورة وفقًا لأبعاد شاشات العرض.
</p>

<h3 id="bootstraptailwindbulmanavbar">
	اشرح كيف تنسق Bootstrap و Tailwind و Bulma شريط التنقل Navbar
</h3>

<p>
	تدعم كل من Bootstrap وBulma تنسيق شريط التنقل بسهولة من خلال الصنف الجاهز <code>navbar</code>، الذي يحمل نفس الاسم في الإطارين ويوفر تصميمًا مدمجًا تلقائيًا. أما في Tailwind CSS، فليس هناك مكون جاهز لشريط التنقل، مما يتطلب بناءه يدويًا باستخدام الأصناف الفردية لتحديد كل جزء من التصميم.
</p>

<h3 id="mobilefirst">
	ما هو نهج التصميم للهاتف أولا Mobile-First؟ وكيف يعزز التصميم المتجاوب لصفحة الويب؟
</h3>

<p>
	يعتمد هذا النهج على تصميم الصفحة للأجهزة ذات الشاشات الصغيرة بدايةً مثل شاشات الهواتف المحمولة، ثم الانتقال إلى الشاشات الأكبر. ولهذا النهج إيجابيات عدة منها:
</p>

<ul>
	<li>
		تحسين الأداء لقلة عدد الموارد التي ستُعرض على الشاشات الصغيرة
	</li>
	<li>
		سهولة الصيانة، لأن العناصر في الصفحة تتعاقب طبيعيًا
	</li>
	<li>
		تحسين محركات البحث، إذ يولي محرك البحث جوجل مثلًا أولوية للصفحات المخصصة للهواتف المحمولة
	</li>
</ul>

<h3 id="viewport">
	وضح كيف يستخدم العنصر الوصفي Viewport في تحسين التصميم المتجاوب للصفحة
</h3>

<p>
	يُستخدم العنصر كالتالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2226_12" style=""><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"viewport"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"width=device-width, initial-scale=1.0"</span><span class="tag">&gt;</span></pre>

<p>
	إذ تفرض الخاصية <code>content="width=device-width, initial-scale=1.0"</code> على المتصفح أن يجعل اتساع الصفحة مطابقًا لاتساع شاشة الجهاز الذي يعرضها، وبأبعادها الفعلية دون تكبير أو تصغير.
</p>

<h3 id="-2">
	كيف نقدم صورا متجاوبة ونزيد فعالية تحميلها؟
</h3>

<p>
	يمكن أن نقدم صورًا متجاوبة بتأمين عدة نسخ من الصورة بأبعاد مختلفة، ثم نستخدم بعد ذلك الخاصيتين <code>scrset</code> و <code>sizes</code> للعنصر <code>&lt;img&gt;</code>، أو استخدام العنصر الدلالي <code>&lt;picture&gt;</code> لتقديم هذه النسخ إلى المتصفح كي يختار الأنسب، وفقًا لأبعاد شاشة العرض.
</p>

<h3 id="fluidgrid">
	كيف يحسن تخطيط الشبكة الانسيابية Fluid Grid تجاوب الصفحة وكيف يُطبق؟
</h3>

<p>
	يقسِّم تخطيط الشبكة الانسيابية الصفحة إلى أعمدة ذات اتساع نسبي وليس ثابت، مما يسمح بتغيير أبعاد العناصر، مثل الصور وخطوط الكتابة دينياميكيًا عند تغير أبعاد شاشة العرض. يُطبق هذا التخطيط باستخدام CSS، كما تطبقه افتراضيًا أطر عمل مثل بوتستراب Bootstrap.
</p>

<h2 id="javascript">
	نماذج عن الأسئلة التي تطرح حول لغة جافا سكريبت JavaScript وأطر عملها
</h2>

<p style="text-align: center;">
	<img alt="شعار لغة جافاسكربت" class="ipsImage ipsImage_thumbnailed" data-fileid="171821" data-ratio="100.00" data-unique="crqj8xwi3" style="width: 225px; height: auto;" width="225" src="https://academy.hsoub.com/uploads/monthly_2025_05/images.png.9b810994f90a07af350339211dff75bc.png">
</p>

<p>
	في ما يلي بعض المواضيع التي تطرح بمقابلات توظيف مطوري الواجهات الأمامية حول لغة جافا سكريبت وأطر عمل الواجهات الأمامية التي تعتمد عليها.
</p>

<h3 id="-3">
	ماهي لغة جافا سكريبت؟ ما هي أهم ميزاتها؟
</h3>

<p>
	جافا سكريبت هي لغة سكريبت خفيفة ومحمولة تُستخدم لبناء صفحات ويب ديناميكية وتفاعلية، تفسرها وتنفذها متصفحات الويب، وتقدم ميزات كثيرة، مثل الرسوميات والتأكد من صلاحية المدخلات والتحديث المباشر للمحتوى والاستجابة لتفاعل المستخدم مع الصفحة.
</p>

<h3 id="-4">
	ما هي الأنواع التي تدعمها جافا سكريبت؟ وكيف تحدد النوع؟
</h3>

<p>
	تدعم جافا سكريبت الأنواع الأولية <code>string</code> و <code>number</code> و <code>boolean</code> و <code>null</code> و <code>undefined</code> و <code>symbol</code> و <code>bigint</code>، وأيضًا أنواع مركبة مثل <code>object</code> و <code>array</code> و <code>function</code>. تُعَد لغة جافاسكربت ديناميكية من ناحية تحديد نوع المتغيرات، فلن نحتاج إلى تحديد نوع المتغير عند التصريح عنه، بل يحدد لاحقًا أثناء التنفيذ.
</p>

<h3 id="nullundefined">
	ما الفرق بين القيمتين <code>null</code> و <code>undefined؟</code>
</h3>

<p>
	<code>undefined</code> هي القيمة الافتراضية التي تعطيها جافا سكريبت إلى متغير صُرِّح عنه، وتدل على أن التصريح قد تم، لكن دون إسناد قيمة إلى المتغير؛ أما <code>null</code> فهي قيمة تشير إلى أن متغيرًا لا يمثل قيمة ولا كائنًا، ويمكن فقط للمطور أن يسندها إلى متغير وليس جافا سكريبت.
</p>

<h3 id="higherorder">
	وضح كيف تعمل الدوال المسماة وغير المسماة والدوال من مراتب عليا Higher-Order
</h3>

<p>
	يمكن استدعاء الدوال المسماة باسمها في أي مكان، بينما تُنفذ الدالة غير المسماة في مكان تصريحها فقط ولا يمكن استدعائها خارج شيفرة تصريحها؛ أما مفهوم الدوال من مراتب عليا، فيتضمن استخدام دالة كمعامل لدالة أخرى أو الدوال التي تعيد دوال.
</p>

<h3 id="api">
	ما هي الواجهات البرمجية الأصلية <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr> في جافا سكريبت؟ اُذكر أهمها
</h3>

<p>
	يشير مصطلح <a href="https://academy.hsoub.com/programming/javascript/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%88%D8%A7%D8%AC%D9%87%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-web-apis-r2355/" rel="">الواجهات البرمجية</a> الأصلية إلى برمجيات مضمّنة ضمن المتصفح أو بيئة تنفيذ داخل جافا سكريبت تساعد المطور على التفاعل مع المتصفح والوصول إلى بعض وظائف نظام التشفيل وغيرها من الوظائف المهمة دون الحاجة إلى مكتبات خارجية.
</p>

<p>
	من أهم هذه الواجهات هي:
</p>

<ul>
	<li>
		واجهة DOM
	</li>
	<li>
		واجهة إحضار البيانات Fetch
	</li>
	<li>
		واجهة الطرفية Console
	</li>
	<li>
		واجهتي تخزين البيانات في طرف العميل LocalStorage و SessionStorage
	</li>
	<li>
		واجهة العمل مع الملفات File
	</li>
</ul>

<h3 id="dom">
	ما هي واجهة DOM؟ وما هي أهم الدوال المستخدمة فيها؟
</h3>

<p>
	تقدم <a href="https://academy.hsoub.com/programming/javascript/%D8%A7%D9%84%D9%88%D8%A7%D8%AC%D9%87%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%B4%D8%AC%D8%B1%D8%A9-dom-%D9%81%D9%8A-%D8%AC%D8%A7%D9%81%D8%A7-%D8%B3%D9%83%D8%B1%D9%8A%D8%A8%D8%AA-r2360/" rel="">واجهة DOM</a> وسيلةً للتعامل مع هيكلية HTML أو XML للصفحة، وذلك عن طريق ترتيب عناصرها على شكل شجرة تمثل كل عقدة فيها جزءًا من الصفحة عنصر، خاصية، وهكذا. تستخدم الواجهة في إجراء تعديلات أو إضافات إلى هيكلية الصفحة. من الدوال المستخدمة <code>()document</code> و <code>()element</code>.
</p>

<h3 id="-5">
	وضح بإيجاز مفهوم البرمجة غير المتزامنة والوعد في جافا سكريبت، واعط مثال عن ذلك
</h3>

<p>
	<a href="https://academy.hsoub.com/programming/javascript/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AC%D8%A7%D9%81%D8%A7-%D8%B3%D9%83%D8%B1%D9%8A%D8%A8%D8%AA-%D8%BA%D9%8A%D8%B1-%D8%A7%D9%84%D9%85%D8%AA%D8%B2%D8%A7%D9%85%D9%86%D8%A9-r2337/" rel="">البرمجة غير المتزامنة</a> هي وسيلة لمتابعة تنفيذ الشيفرة والتأكد مما إن كان تنفيذ عملية ما سيستغرق وقتًا معتبرًا، وذلك كي لا تتجمد صفحة الويب ويفقد المستخدم القدرة على التفاعل معها أثناء تنفيذ تلك العملية.
</p>

<p>
	أما <a href="https://academy.hsoub.com/programming/javascript/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D9%88%D8%B9%D9%88%D8%AF-promises-%D9%81%D9%8A-%D8%AC%D8%A7%D9%81%D8%A7-%D8%B3%D9%83%D8%B1%D9%8A%D8%A8%D8%AA-r2341/" rel="">الوعد</a>، فهو كائن في جافا سكريبت يظهر عند اكتمال تنفيذ عملية غير متزامنة لمعالجة حالات فشل أو نجاح تلك العملية. وكمثال عن العمليات غير المتزامنة، انتظار نتيجة استعلام من قاعدة بيانات، فقد يطول زمن انتظار إنجاز العملية لهذا نستخدم في هذه الحالة استدعاءً غير متزامن لدالة الاستعلام كي نسمح للمتصفح بمتابعة تنفيذ الشيفرة دون انتظار النتيجة. عندما تكتمل عملية الاستعلام في أي وقت يُنجز الوعد، أي يستطيع كائن الوعد عندها إعلامنا بالنتيجة.
</p>

<h3 id="json">
	ما هو تنسيق JSON؟ وكيف يستخدم في جافا سكريبت؟
</h3>

<p>
	هو تنسيق بسيط للبيانات يُستخدم في تخزين وتبادل البيانات. يتميز هذا التنسيق بسهولة كتابته وقرائته بالنسبة إلى المطور أو للآلة. يخزن البيانات على شكل أزواج [مفتاح: قيمة] ويدعم مختلف أنواع القيم سواءً كان صحيح أو نص أو مصفوفة.
</p>

<p>
	<a href="https://academy.hsoub.com/programming/javascript/%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A8%D8%B5%D9%8A%D8%BA%D8%A9-json-%D9%81%D9%8A-%D8%AC%D8%A7%D9%81%D8%A7-%D8%B3%D9%83%D8%B1%D9%8A%D8%A8%D8%AA-r2318/" rel="">يستخدم JSON في جافا سكريبت</a> عادةً لتبادل البيانات بين الخادم والعميل، ونستخدم التابع <code>()JSON.stringify</code> لتحويل كائن جافا سكريبت إلى كائن JSON و <code>()JSON.parse</code> لتحويل كائن JSON إلى كائن جافا سكريبت.
</p>

<h3 id="xmlhttprequestfetch">
	وضح وظيفة الواجهتين XMLhttpRequest و Fetch وما الفرق الجوهري بينهما
</h3>

<p>
	كلاهما واجهتان لتنفيذ طلبات HTTP من وإلى الخادم. تعتمد الأولى على الاستدعاءات، بينا تعتمد الثانية الأكثر تطورًا على الوعود. لا يُنصح حاليًا باستخدام <a href="https://academy.hsoub.com/programming/javascript/%D8%A7%D9%84%D9%83%D8%A7%D8%A6%D9%86-xmlhttprequest-%D9%81%D9%8A-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r1299/" rel="">XHR</a>، وينبغي استبدالها <a href="https://academy.hsoub.com/programming/javascript/%D8%A5%D8%AD%D8%B6%D8%A7%D8%B1-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%85%D9%86-%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AC%D8%A7%D9%81%D8%A7-%D8%B3%D9%83%D8%B1%D9%8A%D8%A8%D8%AA-r2419/" rel="">بالواجهة Fetch</a> التي تدعمها معظم المتصفحات الحديثة.
</p>

<h3 id="localstoragesessionstorageindexeddb">
	تحدث بإيجاز عن LocalStorage و SessionStorage و IndexedDB وحالات استخدامها
</h3>

<p>
	كل من LocalStorage و SessionStorage و IndexedDB هي وسائل لتخزين البيانات على طرف العميل أو المتصفح، أي أنها توفر لنا طرق لحفظ المعلومات محليًا في جهاز المستخدم بدون الحاجة إلى إرسالها إلى الخادم وفيما يلي أبرز الفروقات فيما بينها.
</p>

<p>
	تُعَد <a href="https://academy.hsoub.com/programming/javascript/%D8%AA%D8%AE%D8%B2%D9%8A%D9%86-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B7%D8%B1%D9%81-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%84-%D9%85%D8%AE%D8%A7%D8%B2%D9%86-%D9%88%D9%8A%D8%A8-web-storage-r2443/" rel="">SessionStorge</a> ذاكرة تخزين مؤقتة محدودة الحجم يقارب حجمها حوالي 5 ميجابايت، وتستخدم لتخزين البيانات النصية فقط مؤقتًا خلال جلسة العمل، بحيث تفقد محتواها عند إغلاق المتصفح. من حالات استخدامها تخزين بيانات استمارات الويب مؤقتًا خلال الجلسة لتفادي فقدانها.
</p>

<p>
	أما LocalStorage فهي مشابهة للذاكرة السابقة من حيث الحجم وطريقة التخزين، إلا أنها لا تفقد محتواها عند إغلاق المتصفح، وتحفظ المعلومات على شكل زوج مفتاح وقيمة لحفظ تفضيلات المستخدم مثل لغة الموقع أو تفعيل الوضع الليلي. 
</p>

<p>
	في حين أن <a href="https://academy.hsoub.com/programming/javascript/%D8%AA%D8%AE%D8%B2%D9%8A%D9%86-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B7%D8%B1%D9%81-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%84-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%82%D8%A7%D8%B9%D8%AF%D8%A9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%81%D9%87%D8%B1%D8%B3%D8%A9-indexeddb-r2454/" rel="">IndexedDB</a><span style="display: none;">  </span>هي قاعدة بيانات مدمجة في المتصفح، توفر ذاكرة كبيرة الحجم ومفهرسة وتدعم العمليات غير المتزامنة. تخزن هذه الذاكرة مختلف أنواع البيانات مثل تخزين قواعد بيانات أو الملفات الكبيرة لاستخدامها دون اتصال مع الإنترنت.
</p>

<h3 id="componentreactangularvuejs">
	ماهو المكون Component؟ وكيف تقدمه كل من أطر React و Angular و Vue.js؟
</h3>

<p>
	المكون Component هو وحدة مستقلة في واجهة المستخدم، تجمع بين الهيكلية بلغة HTML والتنسيق بلغة CSS ومنطق العمل بلغة JavaScript أو TypeScript، وهو قابل لإعادة الاستخدام بسهولة عبر أجزاء مختلفة من التطبيق.
</p>

<p>
	تقدم كل مكتبة أو إطار من أطر عمل <a href="https://academy.hsoub.com/javascript/" rel="">جافا سكريبت</a> المكونات بطريقة مختلفة ففي مكتبة رياكت React يكون المكوّن عبارة عن دالة أو صنف Class يعيد شيفرة JSX، وهي صيغة قريبة من HTML تكتب داخل JavaScript. أما في إطار عمل أنغولار Angular فيكون المكون عبارة عن صنف مكتوب بلغة TypeScript يُعرّف باستخدام مُزخرف Decorator مثل <code>Component@</code> لتحديد القالب Template والنمط Style المرتبط به. أما بالنسبة لفيو جي إس Vue.js فالمكون فيه عبارة عن ملف مفرد له الامتداد .vue، يحتوي على ثلاثة أقسام هي القالب Template والتنسيق Style، والمنطق البرمجي Script.
</p>

<h3 id="reactangularvuejs">
	اشرح المقصود بإدارة الحالة وكيف نتعامل معه في كل من React و Angular و Vue.js
</h3>

<p>
	تعني إدارة الحالة State Management تنظيم البيانات المشتركة بين مكونات واجهة المستخدم المختلفة ومتابعة تغييراتها بطريقة تضمن تحديث الواجهة بشكل متناسق وسليم كلما تغيرت هذه البيانات.
</p>

<p>
	يتعامل كل إطار عمل جافا سكريبت مع إدارة الحالة بأسلوبه الخاص ففي رياكت React مثلًا، تعتمد إدارة الحالة على استخدام دوال مثل <code>useState</code> و<code>useReducer</code> لإدارة الحالة داخل المكوّنات، أو عبر مكتبات خارجية مثل Redux و Zustand لإدارة حالات أكثر تعقيدًا ومشاركة الحالة عبر التطبيق. في حين يستخدم أنغولار Angular الخدمات Services لنقل وإدارة البيانات بين المكوّنات، مع دعم قوي للمكتبات التفاعلية مثل RxJS، ويمكن أيضًا الاعتماد على مكتبات إدارة الحالة مثل NgRx لبناء أنظمة معقدة تعتمد على التدفق أحادي الاتجاه للبيانات One-way Data Flow من المصدر للوجهة وبهذا يسهل علينا تتبع أين وكيف تتغير البيانات. 
</p>

<p>
	مثلًا لو كان لدينا تطبيق يحتوي على صفحة تعرض اسم المستخدم، فبدلاً من أن يعدل كل مكون هذا الاسم مباشرة، نخزنه في مكان مركزي ونرسل التحديثات لصفحة العرض عند الحاجة فقط. 
</p>

<p>
	أخيرًا في فيو جي إس Vue.js نتعامل مع الحالة محليًا داخل المكون باستخدام الدالة <code>()data</code>، وعند الحاجة لمشاركة الحالة بين المكونات أو إدارة حالة أوسع، يمكننا استخدام مكتبات مثل Vuex أو Pinia لتوفير إدارة حالة مركزية.
</p>

<h3 id="routingreactangularvuejs">
	ماهو التوجيه Routing؟ وكيف تحققه كل من React و Angular و Vue.js؟
</h3>

<p>
	التوجيه Routing هو عملية إدارة التنقل بين صفحات أو مكونات التطبيق دون الحاجة لإعادة تحميل الصفحة بأكملها. وهو يسمح للمطورين ببناء تطبيقات الصفحة الواحدة SPA بسهولة وذلك عن طريق تحميل المحتوى المطلوب فقط وتحديثه على الصفحة الحالية.
</p>

<p>
	تحقق المكتبة رياكت React التوجيه من خلال استخدام الوحدة البرمجية <code>react-router-dom</code> التي تسمح بتحديد الوجهات routes داخل التطبيق وتوجيه المستخدم إلى المكونات المناسبة بناءً على عنوان URL.
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2226_14" style=""><span class="kwd">import</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="typ">BrowserRouter</span><span class="pln"> as </span><span class="typ">Router</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Route</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Switch</span><span class="pln"> </span><span class="pun">}</span><span class="pln"> from </span><span class="str">'react-router-dom'</span><span class="pun">;</span></pre>

<p>
	ويستخدم أنغولار Angular الوحدة البرمجية <code>angular/router@</code> المدمجة داخله لتحديد الوجهات والتعامل مع التنقل بين المكونات ضمن تطبيق واحد دون إعادة تحميل الصفحة.
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2226_16" style=""><span class="kwd">import</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="typ">RouterModule</span><span class="pln"> </span><span class="pun">}</span><span class="pln"> from </span><span class="str">'@angular/router'</span><span class="pun">;</span></pre>

<p>
	بينما يستخدم إطار فيو جي إس Vue.js الوحدة <code>vue-router</code>، وهي مكتبة مخصصة تسهل إدارة الوجهات والتنقل بين المكونات
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2226_18" style=""><span class="kwd">import</span><span class="pln"> </span><span class="typ">VueRouter</span><span class="pln"> from </span><span class="str">'vue-router'</span><span class="pun">;</span></pre>

<h3 id="ssr">
	ما المقصود بالتصيير من جانب الخادم SSR؟ اشرح آلية عمله
</h3>

<p>
	التصيير من جانب الخادم Server-Side Rendering -أو SSR اختصارًا- هو أسلوب يقوم فيه الخادم بتوليد الصفحة كاملة بصيغة HTML قبل إرسالها إلى المتصفح، أي يتولى الخادم مهمة تحضير المحتوى وتجميعه، ثم يرسله للمستخدم جاهزًا للعرض، بدلاً من أن ينتظر المتصفح كي يقوم بتجميع الصفحة.
</p>

<p>
	يعمل التصيير من جانب الخادم SSR على النحو التالي:
</p>

<ul>
	<li>
		يرسل المستخدم طلب HTTP Request للوصول لصفحة معينة على الموقع
	</li>
	<li>
		يستجيب الخادم للطلب بجلب البيانات المطلوبة من قاعدة بيانات مثلاً، ثم يستخدم قوالب HTML أو مكونات أطر عمل لبناء صفحة HTML كاملة جاهزة للعرض
	</li>
	<li>
		ترسل الصفحة المصيّرة للمتصفح، مما يسمح للمستخدم برؤية المحتوى مباشرة دون الحاجة للانتظار حتى يجري تحميل جافا سكريبت وتشغيلها
	</li>
	<li>
		بعد عرض الصفحة، يبدأ تحميل ملفات جافا سكريبت وإضافة الوظائف التفاعلية للصفحة كالأزرار القابلة للنقر والنماذج الديناميكية
	</li>
</ul>

<h3 id="ssg">
	ما المقصود بالتوليد الساكن للصفحات SSG؟ اشرح هي آلية عمله
</h3>

<p>
	توليد الصفحات الساكن Static Site Generation -أو SSG اختصارًا- هو أسلوب لإنشاء صفحات HTML جاهزة في وقت بناء وتجهيز الموقع Build Time، وليس عند كل طلب من المستخدم. أي أن الخادم أو أداة البناء تعد الصفحات مرة واحدة ثم تُخزنها كملفات HTML ثابتة يمكن تقديمها مباشرة عند طلبها.
</p>

<p>
	في هذه الحالة يُحمّل المتصفح ملف HTML بأبسط شكل ممكن Minimal HTML file ثم يستخدم جافا سكريبت لإحضار المحتوى وتصييره وعرضه ديناميكيًا وفق الآلية التالية:
</p>

<ul>
	<li>
		تنشأ ملفات HTML الثابتة لكل صفحة بشكل مسبق في وقت البناء بحسب البيانات المتوفرة من <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr> مثلاً أو من قاعدة بيانات ويجري حينها التصيير وتحضير الصفحات وحفظها
	</li>
	<li>
		عند زيارة المستخدم للصفحة، يُرسل له ملف HTML ثابت جاهز دون الحاجة إلى توليده من جديد أو إجراء استعلامات من قواعد بيانات
	</li>
	<li>
		تحمّل ملفات جافا سكريبت التي تتولى جلب بيانات إضافية أو إضافة تفاعلية للصفحة عند الحاجة.
	</li>
</ul>

<h3 id="ssrssg">
	كيف تتعامل أطر العمل المختلفة مع SSR و SSG؟
</h3>

<p>
	تسهم كل من تقنية توليد الصفحات عند الطلب من الخادم SSR وتقنية توليد الصفحات بشكل ثابت أثناء بناء المشروع SSG في تحسين تحميل المواقع وأدائها وتجربة المستخدم، عبر تجهيز الصفحات مسبقًا على الخادم بدلاً من الاعتماد كليًا على المتصفح.
</p>

<ul>
	<li>
		تعتمد React على إطار العمل Next.js، الذي يوفّر دعمًا كاملاً لكل من SSR وSSG
	</li>
	<li>
		يعتمد Vue.js على إطار العمل Nuxt.js، الذي يدعم كلا النمطين SSR و SSG *يستخدم أنغولار إطار العمل Angular Universal لتحقيق SSR ولا يدعم SSG بشكل رسمي
	</li>
</ul>

<h3 id="typescript">
	ما هي لغة TypeScript؟
</h3>

<p>
	لغة <a href="https://academy.hsoub.com/programming/javascript/%D9%85%D9%82%D8%A7%D8%B1%D9%86%D8%A9-%D8%A8%D9%8A%D9%86-javascript-%D9%88-typescript-r1598/" rel="">TypeScript</a> هي لغة مبنية على على جافا سكريبت لتعزيز قدراتها من خلال إضافة ميزات جديدة لها مثل إضافة طريقة لتعريف الأنواع يدويًا، وتقديم واجهات Interfaces لفرض هيكلية محددة على الكائنات، ودعم البرمجة غرضية التوجه <abbr title="Object-Oriented Programming | البرمجة كائنية التوجه"><abbr title="Object-Oriented Programming | البرمجة كائنية التوجه">OOP</abbr></abbr> والتصريف المبكر لتلافي أخطاء زمن التنفيذ.
</p>

<h2 id="-6">
	نصائح للمتقدمين لوظيفة مطور واجهات أمامية
</h2>

<p>
	حاولنا أن نقدم في هذا المقال بعض الأفكار الأساسية التي يُسأل عنها مطورو الواجهات الأمامية بكثرة في مقابلات العمل. وركزنا في الأسئلة على لغات HTML و CSS وجافا سكريبت وبعض أطر العمل الأكثر شهرة. ونختم المقال بتوجيه بعض النصائح المهمة التي ينبغي للمتقدم أخذها بالحسبان:
</p>

<h3>
	إتقان الأساسيات
</h3>

<p>
	ونقصد بذلك مراجعة أساسيات تطوير الواجهات الأمامية وهي لغات HTML و CSS وجافا سكريبت والطريقة التي تتكامل فيها تلك اللغات لبناء صفحات ويب تفاعلية متجاوبة
</p>

<h3>
	الاطلاع على مشاريع سابقة
</h3>

<p>
	سواء أكانت من إنتاج المطوّر ذاته، أو مشاريع نموذجية تشرح بعض التقنيات، فهذه المشاريع أداة فعالة في مراجعة المفاهيم الأساسية وربط المعلومات المتعلقة باللغات الأساسية لتطوير الواجهات الأمامية
</p>

<h3>
	فهم أساسيات مكتبات وأطر عمل الواجهة الأمامية
</h3>

<p>
	من المهم جدًا إتقان أساسيات بعض <a href="https://academy.hsoub.com/programming/javascript/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A3%D8%B4%D9%87%D8%B1-%D8%A3%D8%B7%D8%B1-%D8%B9%D9%85%D9%84-%D8%AC%D8%A7%D9%81%D8%A7-%D8%B3%D9%83%D8%B1%D9%8A%D8%A8%D8%AA-r2462/" rel="">أطر عمل جافا سكريبت</a> مثل React أو Angular.js أو Vue.js وفقًا لمتطلبات الشاغر الوظيفي المطلوب
</p>

<h3>
	فهم أساسيات واجهة المستخدم وتجربة المستخدم UI/UX
</h3>

<p>
	فهذه الأساسيات أصبحت معايير في تطوير الواجهات الأمامية ومعرفتها أمر مستحب، ويفضل امتلاك أساس جيد حول <a href="https://academy.hsoub.com/programming/html/%D8%B4%D9%85%D9%88%D9%84%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D9%88%D8%B5%D9%88%D9%84-%D8%AC%D9%85%D9%8A%D8%B9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85%D9%8A%D9%86-%D9%84%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1640/" rel="">سهولة الوصول Accessiblity</a> والتصميم <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D8%A7%D9%84%D9%85%D8%AA%D8%AC%D8%A7%D9%88%D8%A8-%D9%84%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-responsive-web-design-r2302/" rel="">المتجاوب Responsive Design</a> ومبادئ تطوير واجهات مستخدم سهلة الفهم والاستخدام.
</p>

<h2 id="-7">
	المراجع
</h2>

<ol>
	<li>
		<a href="https://github.com/h5bp/Front-end-Developer-Interview-Questions" rel="external nofollow">h5bp/Front-end-Developer-Interview-Questions</a>
	</li>
	<li>
		<a href="https://www.interviewbit.com/front-end-developer-interview-questions/" rel="external nofollow">Front End Developer Interview Questions</a>
	</li>
	<li>
		<a href="https://www.frontendinterviewhandbook.com" rel="external nofollow">Front End Interview Handbook</a>
	</li>
</ol>

<h2 id="-8">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/design/user-experience/%D8%AF%D9%84%D9%8A%D9%84%D9%83-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D9%84%D9%81%D9%87%D9%85-%D8%A7%D9%84%D9%85%D8%B3%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%87%D9%86%D9%8A%D8%A9-%D9%84%D9%85%D8%AC%D8%A7%D9%84-%D8%AA%D8%AC%D8%B1%D8%A8%D8%A9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-r713/" rel="">دليلك الشامل لفهم المسارات المهنية لمجال تجربة المستخدم</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/entrepreneurship/tips/%D9%83%D9%8A%D9%81-%D8%AA%D8%AD%D8%B6%D8%B1-%D9%84%D9%85%D9%82%D8%A7%D8%A8%D9%84%D8%A9-%D8%B9%D9%85%D9%84-%D9%86%D8%A7%D8%AC%D8%AD%D8%A9%D8%9F-r1036/" rel="">كيف تحضر لمقابلة عمل ناجحة؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/entrepreneurship/managementleadership/%D8%A7%D9%84%D8%AA%D8%AD%D8%B6%D9%8A%D8%B1-%D9%84%D9%85%D9%82%D8%A7%D8%A8%D9%84%D8%A9-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D8%A8%D9%87%D8%AF%D9%81-%D8%A7%D9%84%D8%AD%D8%B5%D9%88%D9%84-%D8%B9%D9%84%D9%89-%D9%88%D8%B8%D9%8A%D9%81%D8%A9-%D9%85%D8%AF%D9%8A%D8%B1-%D8%A7%D9%84%D9%85%D9%86%D8%AA%D8%AC-r856/" rel="">التحضير لمقابلة العمل بهدف الحصول على وظيفة مدير المنتج</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2569</guid><pubDate>Tue, 06 May 2025 16:01:01 +0000</pubDate></item><item><title>&#x634;&#x631;&#x62D; &#x645;&#x628;&#x627;&#x62F;&#x626; SOLID &#x641;&#x64A; &#x627;&#x644;&#x62A;&#x635;&#x645;&#x64A;&#x645; &#x643;&#x627;&#x626;&#x646;&#x64A; &#x627;&#x644;&#x62A;&#x648;&#x62C;&#x647;</title><link>https://academy.hsoub.com/programming/general/%D8%B4%D8%B1%D8%AD-%D9%85%D8%A8%D8%A7%D8%AF%D8%A6-solid-%D9%81%D9%8A-%D8%A7%D9%84%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D9%83%D8%A7%D8%A6%D9%86%D9%8A-%D8%A7%D9%84%D8%AA%D9%88%D8%AC%D9%87-r2525/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2025_03/SOLID_.png.b0ac989eb544df09eae7d7674af925dd.png" /></p>
<p>
	يأتي مصطلح SOLID من الأحرف الأولى للمبادئ الخمسة للتصميم الكائني التوجه Object Oriented Design -أو  OOD  اختصارًا- والتي وضعها <a href="http://en.wikipedia.org/wiki/Robert_Cecil_Martin" rel="external nofollow">روبرت سي مارتن</a> حيث تؤسس هذه المبادئ لممارسات تطبيقية أثناء تطوير البرمجيات مع الأخذ بعين الاعتبار سهولة الصيانة وقابلية التوسع مع نمو المشروع. ويساعد تبني هذه الممارسات على تفادي مشكلات كتابة الشيفرة وتحسين إعادة إنتاجها وتطوير برمجيات تعتمد نهج <a href="https://academy.hsoub.com/entrepreneurship/business/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D9%84%D9%85%D9%86%D9%87%D8%AC%D9%8A%D8%A9-%D8%A3%D8%AC%D8%A7%D9%8A%D9%84-agile-r1047/" rel="">Agile</a> أو Adaptive.
</p>

<h2>
	مبادئ SOLID
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="169011" href="https://academy.hsoub.com/uploads/monthly_2025_03/SOLID_.png.6d109aa18011bc36ca1e2512739711b7.png" rel=""><img alt="مبادئ SOLID" class="ipsImage ipsImage_thumbnailed" data-fileid="169011" data-ratio="62.50" data-unique="h2xo1ucv9" style="width: 400px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2025_03/SOLID_.thumb.png.cd9018d1ad6137c360661d49ce49f910.png"></a>
</p>

<p>
	يرتكز مفهوم على المبادئ الخمس التالية:
</p>

<ul>
	<li>
		مبدأ المسؤولية المفردة Single-responsibility Principle الحرف S.
	</li>
	<li>
		مبدأ المفتوح والمغلق Open-closed Principle الحرف O.
	</li>
	<li>
		مبدأ استبدال ليسكوف Liskov Substitution Principle الحرف L.
	</li>
	<li>
		مبدأ عزل الواجهة Interface Segregation Principle الحرف I.
	</li>
	<li>
		مبدأ الاعتماديات المتبادلة Dependency Inversion Principle الحرف D.
	</li>
</ul>

<p>
	سنوضح في الفقرات التالية كل مبدأ من هذه المبادئ الخمسة على حدة، ونوضح فائدة SOLID في تطوير منتجات برمجية أفضل.
</p>

<p>
	<strong>ملاحظة</strong>: يمكن تطبيق هذه المبادئ على مختلف لغات البرمجة، لكن شيفرة الأمثلة في هذا المقال مكتوبة بلغة <a href="https://academy.hsoub.com/programming/php/" rel="">PHP</a>.
</p>

<h3 id="">
	مبدأ المسؤولية المفردة
</h3>

<p>
	ينص مبدأ المسؤولية المفردة SRP على مايلي:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		يجب أن يكون هناك سبب واحد فقط لكي يتغير الصنف، بمعنى أن يمتلك الصنف عملًا واحدًا فقط.
	</p>
</blockquote>

<p>
	لنتأمل على سبيل المثال تطبيقًا يتلقى مجموعة من الأشكال هي عبارة عن دوائر ومربعات ويحسب مجموع مساحات الأشكال في هذه المجموعة.
</p>

<p>
	لتنفيذ المطلوب، ننشئ أصنافًا للأشكال ونضبط المعاملات المطلوبة لحساب المساحة عبر الدوال البانية constructor funcations. سنحتاج هنا إلى المتغير <code>length</code> لتخزين طول ضلع المربع
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_13" style=""><span class="kwd">class</span><span class="pln"> </span><span class="typ">Square</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">public</span><span class="pln"> $length</span><span class="pun">;</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> construct</span><span class="pun">(</span><span class="pln">$length</span><span class="pun">)</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    $this</span><span class="pun">-&gt;</span><span class="pln">length </span><span class="pun">=</span><span class="pln"> $length</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	كما سنحتاج إلى المتغير <code>radius</code> لتحديد نصف قطر الدائرة:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_15" style=""><span class="kwd">class</span><span class="pln"> </span><span class="typ">Circle</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">public</span><span class="pln"> $radius</span><span class="pun">;</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> construct</span><span class="pun">(</span><span class="pln">$radius</span><span class="pun">)</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    $this</span><span class="pun">-&gt;</span><span class="pln">radius </span><span class="pun">=</span><span class="pln"> $radius</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	ننشئ تاليًا الصنف <code>AreaCalculator</code> ونكتب منطق جمع مساحات جميع الأشكال الموجودة، فمساحة المربع هي مربع طول الضلع ومساحة الدائرة هي مربع نصف القطر مضروبًا بالثابت Pi:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_17" style=""><span class="kwd">class</span><span class="pln"> </span><span class="typ">AreaCalculator</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">protected</span><span class="pln"> $shapes</span><span class="pun">;</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __construct</span><span class="pun">(</span><span class="pln">$shapes </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[])</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    $this</span><span class="pun">-&gt;</span><span class="pln">shapes </span><span class="pun">=</span><span class="pln"> $shapes</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> sum</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">foreach</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$this</span><span class="pun">-&gt;</span><span class="pln">shapes </span><span class="kwd">as</span><span class="pln"> $shape</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">is_a</span><span class="pun">(</span><span class="pln">$shape</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Square'</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        $area</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> pow</span><span class="pun">(</span><span class="pln">$shape</span><span class="pun">-&gt;</span><span class="pln">length</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">);</span><span class="pln">
      </span><span class="pun">}</span><span class="pln"> elseif </span><span class="pun">(</span><span class="pln">is_a</span><span class="pun">(</span><span class="pln">$shape</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Circle'</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        $area</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> pi</span><span class="pun">()</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> pow</span><span class="pun">(</span><span class="pln">$shape</span><span class="pun">-&gt;</span><span class="pln">radius</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">);</span><span class="pln">
      </span><span class="pun">}</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="kwd">return</span><span class="pln"> array_sum</span><span class="pun">(</span><span class="pln">$area</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> output</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> implode</span><span class="pun">(</span><span class="str">''</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
     </span><span class="str">''</span><span class="pun">,</span><span class="pln">
       </span><span class="str">'Sum of the areas of provided shapes: '</span><span class="pun">,</span><span class="pln">
       $this</span><span class="pun">-&gt;</span><span class="pln">sum</span><span class="pun">(),</span><span class="pln">
     </span><span class="str">''</span><span class="pun">,</span><span class="pln">
   </span><span class="pun">]);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	ولاستخدام الصنف <code>AreaCalculator</code> لا بد من إنشاء نسخة عنه نمرر لها مصفوفة من الأشكال ومن ثم نعرض نتيجة حساب مجموع المساحات. إليك مثالًا عن مجموعة من ثلاث أشكال:
</p>

<ul>
	<li>
		دائرة نصف قطرها 2
	</li>
	<li>
		مربع طول ضلعه 5
	</li>
	<li>
		مربع طول ضلعه 6
	</li>
</ul>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_19" style=""><span class="pln">$shapes </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
 </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Circle</span><span class="pun">(</span><span class="lit">2</span><span class="pun">),</span><span class="pln">
 </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Square</span><span class="pun">(</span><span class="lit">5</span><span class="pun">),</span><span class="pln">
 </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Square</span><span class="pun">(</span><span class="lit">6</span><span class="pun">),</span><span class="pln">
</span><span class="pun">];</span><span class="pln">

$areas </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">AreaCalculator</span><span class="pun">(</span><span class="pln">$shapes</span><span class="pun">);</span><span class="pln">

echo $areas</span><span class="pun">-&gt;</span><span class="pln">output</span><span class="pun">();</span></pre>

<p>
	إن المشكلة في تابع الخرج هي أن الصنف <code>AreaCalculator</code> يعالج منطق إخراج البيانات. فلو تأملنا حالة يطلب فيها تحويل الخرج إلى صيغة أخرى مثل صيغة <a href="https://academy.hsoub.com/programming/javascript/%D8%AA%D8%B9%D9%84%D9%85-json-r604/" rel="">JSON</a>، سيعالج الصنف <code>AreaCalculator</code> في هذه الحالة منطق تحويل الخرج إلى الصيغة المطلوبة وهذا خرق لمبدأ المسؤولية المفردة. لهذا ينبغي أن يكون الصنف <code>AreaCalculator</code> مسؤولًا فقط عن حساب مجموع مساحات الأشكال ولا يهتم بطريقة إخراج النتائج أيًا كانت.
</p>

<p>
	ولحل المشكلة، بإمكاننا إنشاء صنف آخر <code>SumCalculatorOutputter</code> واستخدامه لمعالجة منطق الخرج:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_22" style=""><span class="kwd">class</span><span class="pln"> </span><span class="typ">SumCalculatorOutputter</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">protected</span><span class="pln"> $calculator</span><span class="pun">;</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __constructor</span><span class="pun">(</span><span class="typ">AreaCalculator</span><span class="pln"> $calculator</span><span class="pun">)</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    $this</span><span class="pun">-&gt;</span><span class="pln">calculator </span><span class="pun">=</span><span class="pln"> $calculator</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> JSON</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    $data </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
     </span><span class="str">'sum'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> $this</span><span class="pun">-&gt;</span><span class="pln">calculator</span><span class="pun">-&gt;</span><span class="pln">sum</span><span class="pun">(),</span><span class="pln">
   </span><span class="pun">];</span><span class="pln">

    </span><span class="kwd">return</span><span class="pln"> json_encode</span><span class="pun">(</span><span class="pln">$data</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> HTML</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> implode</span><span class="pun">(</span><span class="str">''</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
     </span><span class="str">''</span><span class="pun">,</span><span class="pln">
       </span><span class="str">'Sum of the areas of provided shapes: '</span><span class="pun">,</span><span class="pln">
       $this</span><span class="pun">-&gt;</span><span class="pln">calculator</span><span class="pun">-&gt;</span><span class="pln">sum</span><span class="pun">(),</span><span class="pln">
     </span><span class="str">''</span><span class="pun">,</span><span class="pln">
   </span><span class="pun">]);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	نستخدم الصنف <code>SumCalculatorOutputter</code> كالتالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_24" style=""><span class="pln">$shapes </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
 </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Circle</span><span class="pun">(</span><span class="lit">2</span><span class="pun">),</span><span class="pln">
 </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Square</span><span class="pun">(</span><span class="lit">5</span><span class="pun">),</span><span class="pln">
 </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Square</span><span class="pun">(</span><span class="lit">6</span><span class="pun">),</span><span class="pln">
</span><span class="pun">];</span><span class="pln">

$areas </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">AreaCalculator</span><span class="pun">(</span><span class="pln">$shapes</span><span class="pun">);</span><span class="pln">
$output </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">SumCalculatorOutputter</span><span class="pun">(</span><span class="pln">$areas</span><span class="pun">);</span><span class="pln">

echo $output</span><span class="pun">-&gt;</span><span class="pln">JSON</span><span class="pun">();</span><span class="pln">
echo $output</span><span class="pun">-&gt;</span><span class="pln">HTML</span><span class="pun">();</span></pre>

<p>
	في هذه الحالة يتولى الصنف <code>SumCalculatorOutputter</code> عملية إخراج البيانات إلى المستخدم ويحقق مبدأ المسؤولية المفردة.
</p>

<h3 id="-1">
	مبدأ المفتوح والمغلق
</h3>

<p>
	ينص المبدأ على ما يلي:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		يجب أن تكون الكائنات أو الكيانات مفتوحة من ناحية القدرة على التوسع ومغلقة في وجه التعديلات.
	</p>
</blockquote>

<p>
	ويعني ذلك أن الصنف ينبغي أن يكون قادرًا على التوسع دون الحاجة لتعديل أي شيء موجود فيه.
</p>

<p>
	لنعد مجددًا إلى الصنف <code>AreaCalculator</code> ونركز هذه المرة على التابع <code>sum</code>:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_26" style=""><span class="kwd">class</span><span class="pln"> </span><span class="typ">AreaCalculator</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">protected</span><span class="pln"> $shapes</span><span class="pun">;</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __construct</span><span class="pun">(</span><span class="pln">$shapes </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[])</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    $this</span><span class="pun">-&gt;</span><span class="pln">shapes </span><span class="pun">=</span><span class="pln"> $shapes</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> sum</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">foreach</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$this</span><span class="pun">-&gt;</span><span class="pln">shapes </span><span class="kwd">as</span><span class="pln"> $shape</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">is_a</span><span class="pun">(</span><span class="pln">$shape</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Square'</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        $area</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> pow</span><span class="pun">(</span><span class="pln">$shape</span><span class="pun">-&gt;</span><span class="pln">length</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">);</span><span class="pln">
      </span><span class="pun">}</span><span class="pln"> elseif </span><span class="pun">(</span><span class="pln">is_a</span><span class="pun">(</span><span class="pln">$shape</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Circle'</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        $area</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> pi</span><span class="pun">()</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> pow</span><span class="pun">(</span><span class="pln">$shape</span><span class="pun">-&gt;</span><span class="pln">radius</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">);</span><span class="pln">
      </span><span class="pun">}</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="kwd">return</span><span class="pln"> array_sum</span><span class="pun">(</span><span class="pln">$area</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	لنتأمل الآن حالة يرغب فيها المستخدم بجمع مساحات أشكال أخرى مثل المثلثات والمخمسات والمسدسات. سيكون علينا في هذا الحالة إضافة شروط جديدة في كتلة <code>if/else</code>، وهذا سيخرق مبدأ المفتوح والمغلق.
</p>

<p>
	سيكون أحد الحلول التي تحسن التابع <code>sum</code> هو إزالة منطق حساب مساحة كل شكل وتنفيذ العملية في كل صنف على حدة.
</p>

<p>
	نضيف هنا التابع <code>area</code> للصنف <code>square</code>:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_28" style=""><span class="kwd">class</span><span class="pln"> </span><span class="typ">Square</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">public</span><span class="pln"> $length</span><span class="pun">;</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __construct</span><span class="pun">(</span><span class="pln">$length</span><span class="pun">)</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    $this</span><span class="pun">-&gt;</span><span class="pln">length </span><span class="pun">=</span><span class="pln"> $length</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> area</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> pow</span><span class="pun">(</span><span class="pln">$this</span><span class="pun">-&gt;</span><span class="pln">length</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	نضيف هنا التابع <code>area</code> للصنف <code>Circle</code>:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_30" style=""><span class="kwd">class</span><span class="pln"> </span><span class="typ">Circle</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">public</span><span class="pln"> $radius</span><span class="pun">;</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> construct</span><span class="pun">(</span><span class="pln">$radius</span><span class="pun">)</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    $this</span><span class="pun">-&gt;</span><span class="pln">radius </span><span class="pun">=</span><span class="pln"> $radius</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> area</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> pi</span><span class="pun">()</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> pow</span><span class="pun">(</span><span class="pln">$shape</span><span class="pun">-&gt;</span><span class="pln">radius</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	ويمكن الآن إعادة كتابة التابع <code>sum</code> للصنف <code>AreaCalculator</code> كالتالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_32" style=""><span class="kwd">class</span><span class="pln"> </span><span class="typ">AreaCalculator</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="com">// ...</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> sum</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">foreach</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$this</span><span class="pun">-&gt;</span><span class="pln">shapes </span><span class="kwd">as</span><span class="pln"> $shape</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      $area</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> $shape</span><span class="pun">-&gt;</span><span class="pln">area</span><span class="pun">();</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="kwd">return</span><span class="pln"> array_sum</span><span class="pun">(</span><span class="pln">$area</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	في هذه الحالة بإمكاننا إنشاء أصناف جديدة لأشكال جديدة ثم تمريرها إلى صنف حساب مجموع المساحات دون أن نغير الشيفرة. مع ذلك، ستظهر مشكلة جديدة تتمثل في عدم القدرة على تمييز إن كان الكائن المرر إلى الصنف <code>AreaCalculator</code> هو شكل أو يمتلك تابعًا اسمه <code>area</code>.
</p>

<p>
	ولأن بناء واجهة Interface هو جزء أساسي من SOLID، لننشئ واجهة <code>ShapeInterface</code> تملك التابع <code>area</code>:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_34" style=""><span class="kwd">interface</span><span class="pln"> </span><span class="typ">ShapeInterface</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> area</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	نعدّل أصناف الأشكال لتتخذ من <code>ShapeInterface</code> واجهة لها، ونبدأ بالصنف <code>Square</code>:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_36" style=""><span class="kwd">class</span><span class="pln"> </span><span class="typ">Square</span><span class="pln"> </span><span class="kwd">implements</span><span class="pln"> </span><span class="typ">ShapeInterface</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="com">// ...</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	ثم الدائرة <code>Circle</code>:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_38" style=""><span class="kwd">class</span><span class="pln"> </span><span class="typ">Circle</span><span class="pln"> </span><span class="kwd">implements</span><span class="pln"> </span><span class="typ">ShapeInterface</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="com">// ...</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	نتحقق بعد ذلك أثناء تنفيذ التابع <code>sum</code> إن كان للكائن الممرر واجهة شكل، أي أنه نسخة عن <code>ShapeInterface</code> ويرمي استثناء <a href="https://wiki.hsoub.com/PHP/exceptions" rel="external">Exception</a>خلاف ذلك:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_42" style=""><span class="pln"> </span><span class="kwd">class</span><span class="pln"> </span><span class="typ">AreaCalculator</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="com">// ...</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> sum</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">foreach</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$this</span><span class="pun">-&gt;</span><span class="pln">shapes </span><span class="kwd">as</span><span class="pln"> $shape</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">is_a</span><span class="pun">(</span><span class="pln">$shape</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ShapeInterface'</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        $area</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> $shape</span><span class="pun">-&gt;</span><span class="pln">area</span><span class="pun">();</span><span class="pln">
        </span><span class="kwd">continue</span><span class="pun">;</span><span class="pln">
      </span><span class="pun">}</span><span class="pln">

      </span><span class="kwd">throw</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">AreaCalculatorInvalidShapeException</span><span class="pun">();</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="kwd">return</span><span class="pln"> array_sum</span><span class="pun">(</span><span class="pln">$area</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	وهكذا نكون قد حققنا مبدأ المفتوح والمغلق.
</p>

<h3 id="-2">
	مبدأ استبدال ليسكوف
</h3>

<p>
	ينص المبدأ على ما يلي:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		لتكن الخاصية (q(x محققة من أجل كائن x من النوع T، يجب عندها أن تتحقق الخاصية بالنسبة لكائن y من النوع S إذا كان S نوع فرعي من T.
	</p>
</blockquote>

<p>
	ويعني ذلك أن أي صنف فرعي subclass أو مشتق قابل للاستبدال بواسطة الصنف الأب. لنعد إلى مثالنا السابق ولنفرض وجود صنف جديد <code>VolumeCalculator</code> يوسّع الصنف <code>AreaCalculator</code>:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_44" style=""><span class="kwd">class</span><span class="pln"> </span><span class="typ">VolumeCalculator</span><span class="pln"> </span><span class="kwd">extends</span><span class="pln"> </span><span class="typ">AreaCalculator</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> construct</span><span class="pun">(</span><span class="pln">$shapes </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[])</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    parent</span><span class="pun">::</span><span class="pln">construct</span><span class="pun">(</span><span class="pln">$shapes</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> sum</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="com">// logic to calculate the volumes and then return an array of output</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> </span><span class="pun">[</span><span class="pln">$summedData</span><span class="pun">];</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	نتذكر أن الصنف <code>SumCalculatorOutputter</code> هو كالتالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_46" style=""><span class="kwd">class</span><span class="pln"> </span><span class="typ">SumCalculatorOutputter</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">protected</span><span class="pln"> $calculator</span><span class="pun">;</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __constructor</span><span class="pun">(</span><span class="typ">AreaCalculator</span><span class="pln"> $calculator</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    $this</span><span class="pun">-&gt;</span><span class="pln">calculator </span><span class="pun">=</span><span class="pln"> $calculator</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> JSON</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    $data </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">(</span><span class="pln">
      </span><span class="str">'sum'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> $this</span><span class="pun">-&gt;</span><span class="pln">calculator</span><span class="pun">-&gt;</span><span class="pln">sum</span><span class="pun">();</span><span class="pln">
    </span><span class="pun">);</span><span class="pln">

    </span><span class="kwd">return</span><span class="pln"> json_encode</span><span class="pun">(</span><span class="pln">$data</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> HTML</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> implode</span><span class="pun">(</span><span class="str">''</span><span class="pun">,</span><span class="pln"> array</span><span class="pun">(</span><span class="pln">
      </span><span class="str">''</span><span class="pun">,</span><span class="pln">
        </span><span class="str">'Sum of the areas of provided shapes: '</span><span class="pun">,</span><span class="pln">
        $this</span><span class="pun">-&gt;</span><span class="pln">calculator</span><span class="pun">-&gt;</span><span class="pln">sum</span><span class="pun">(),</span><span class="pln">
      </span><span class="str">''</span><span class="pln">
    </span><span class="pun">));</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	فلو حاولنا تنفيذ المثال كالتالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_48" style=""><span class="pln">$areas </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">AreaCalculator</span><span class="pun">(</span><span class="pln">$shapes</span><span class="pun">);</span><span class="pln">
$volumes </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">VolumeCalculator</span><span class="pun">(</span><span class="pln">$solidShapes</span><span class="pun">);</span><span class="pln">

$outputArea </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">SumCalculatorOutputter</span><span class="pun">(</span><span class="pln">$areas</span><span class="pun">);</span><span class="pln">
$outputVolume </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">SumCalculatorOutputter</span><span class="pun">(</span><span class="pln">$volumes</span><span class="pun">);</span></pre>

<p>
	عندما نستدعي التابع <code>()HTML</code> للكائن <code>outputVoulme$</code> سنحصل على خطأ <code>E_NOTICE</code> يخبرنا بوجود عملية تحويل من مصفوفة إلى نص. ولحل المشكلة نعيد المتغير <code>summedData$</code> في الصنف <code>VolumeCalculator</code> بدلًا من إعادة مصفوفة:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_50" style=""><span class="kwd">class</span><span class="pln"> </span><span class="typ">VolumeCalculator</span><span class="pln"> </span><span class="kwd">extends</span><span class="pln"> </span><span class="typ">AreaCalculator</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> construct</span><span class="pun">(</span><span class="pln">$shapes </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[])</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    parent</span><span class="pun">::</span><span class="pln">construct</span><span class="pun">(</span><span class="pln">$shapes</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> sum</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="com">// logic to calculate the volumes and then return a value of output</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> $summedData</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	قد يكون المتغير <code>summedData$</code> من النوع float أو double أو integer وهذا سيحقق مبدأ استبدال ليسكوف.
</p>

<h3 id="-3">
	مبدأ فصل الواجهة
</h3>

<p>
	ينص المبدأ على ما يلي:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		لا يُجبر المستخدم على تنفيذ واجهة لا يحتاجها، أو لا يُجبر العميل على اعتماد توابع لا يستخدمها.
	</p>
</blockquote>

<p>
	نوضح هذا المبدأ بمتابعة العمل على مثالنا السابق وننطلق من الواجهة <code>ShapeInterface</code>. سنحتاج الآن إلى دعم ثلاث أشكال ثلاثية الأبعاد هي <code>Cuboid</code> و <code>Spheroid</code>، ونريد حساب حجومها <code>volume</code>.
</p>

<p>
	لنتأمل ما قد يحدث إن عدّلنا الواجهة <code>ShapeInterface</code> لإضافة تابع جديد:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_52" style=""><span class="kwd">interface</span><span class="pln"> </span><span class="typ">ShapeInterface</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> area</span><span class="pun">();</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> volume</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	في هذه الحالة سيكون كل شكل مجبرًا على تبني تابع الحجم <code>volume</code>، لكن كما نعلم لا أحجام للأشكال ثنائية البعد مثل الدائرة وهذه الواجهة ستجبر الصنف <code>Circle</code> على تنفيذ هذا التابع الذي لا يحتاجه.
</p>

<p>
	يُعد هذا الأمر خرقًا لمبدأ عزل الواجهة، وبدلًا من ذلك، بإمكانك إنشاء واجهة جديدة تُدعى <code>ThreeDimensionalShapeInterface</code> تقدم التابع <code>volume</code> وتتبناها الأشكال ثلاثية الأبعاد:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_54" style=""><span class="kwd">interface</span><span class="pln"> </span><span class="typ">ShapeInterface</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> area</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">interface</span><span class="pln"> </span><span class="typ">ThreeDimensionalShapeInterface</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> volume</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">Cuboid</span><span class="pln"> </span><span class="kwd">implements</span><span class="pln"> </span><span class="typ">ShapeInterface</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ThreeDimensionalShapeInterface</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> area</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="com">// calculate the surface area of the cuboid</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> volume</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="com">// calculate the volume of the cuboid</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	هذه النهج أفضل بكثير، لكن الأمر سيبدو مربكًا عند توضيح نوع استخدام الواجهة بالتعليقات مثلًا. لهذا، بدلًا من استخدام الواجهتين السابقتين بإمكاننا إنشاء واجهة أخرى مثل <code>ManageShapeInterface</code> وتطبيقها على الأشكال ثنائية وثلاثية البعد. وهكذا سيكون لدينا واجهة برمجية واحدة تدير الأشكال:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_56" style=""><span class="kwd">interface</span><span class="pln"> </span><span class="typ">ManageShapeInterface</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> calculate</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">Square</span><span class="pln"> </span><span class="kwd">implements</span><span class="pln"> </span><span class="typ">ShapeInterface</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ManageShapeInterface</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> area</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="com">// calculate the area of the square</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> calculate</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> $this</span><span class="pun">-&gt;</span><span class="pln">area</span><span class="pun">();</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">Cuboid</span><span class="pln"> </span><span class="kwd">implements</span><span class="pln"> </span><span class="typ">ShapeInterface</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ThreeDimensionalShapeInterface</span><span class="pun">,</span><span class="pln"> </span><span class="typ">ManageShapeInterface</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> area</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="com">// calculate the surface area of the cuboid</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> volume</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="com">// calculate the volume of the cuboid</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> calculate</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> $this</span><span class="pun">-&gt;</span><span class="pln">area</span><span class="pun">();</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	في هذا النهج، بإمكاننا استبدال التابع <code>area</code> في الصنف <code>AreaCalculatot</code> بالتابع <code>calculate</code>، ونتحقق أيضًا أن الكائن هو نسخة عن الصنف <code>ManageShapeInterface</code> وليس <code>ShapeInterface</code> وهكذا يكون مبدأ فصل الواجهة قد تحقق لدينا.
</p>

<h3 id="-4">
	مبدأ الاعتماديات المتبادلة
</h3>

<p>
	ينص هذا المبدأ على ما يلي:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		ينبغي أن تعتمد الكيانات البرمجية على التجريد abstraction وليس على طريقة التنفيذ implementation. فلا يجب أن تعتمد الوحدات ذات المستوى الأعلى على وحدات المستوى الأدنى بل على الشيفرة المجردة.
	</p>
</blockquote>

<p>
	يسمح هذا المبدأ بفصل الشيفرة. ولإيضاح المبدأ لنأخذ مثالًا عن صنف <code>PasswordReminder</code> يربط الشيفرة بقاعدة البيانات <a href="https://academy.hsoub.com/devops/servers/databases/mysql/" rel="">MySQL</a>:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_58" style=""><span class="kwd">class</span><span class="pln"> </span><span class="typ">MySQLConnection</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> connect</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="com">// handle the database connection</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> </span><span class="str">'Database connection'</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">PasswordReminder</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">private</span><span class="pln"> $dbConnection</span><span class="pun">;</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __construct</span><span class="pun">(</span><span class="typ">MySQLConnection</span><span class="pln"> $dbConnection</span><span class="pun">)</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    $this</span><span class="pun">-&gt;</span><span class="pln">dbConnection </span><span class="pun">=</span><span class="pln"> $dbConnection</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	يمثل الصنف <code>MySQLConnection</code> الوحدة البرمجية ذات المستوى الأدنى بينما يمثل الصنف <code>PasswordReminder</code> الوحدة ذات المستوى الأعلى لاعتماد الثاني على الأول. لكن ووفقًا لتعريف المبدأ الأخير الذي ينص على ضرورة الاعتماد على التجريد وليس طريقة التنفيذ، يخرق النهج السابق هذه القاعدة لأن الصنف <code>PasswordReminder</code> مجبر على الاعتماد على الصنف <code>MySQLConnection</code>. وإن حاولت مسبقًا تغيير قاعدة البيانات عليك تعديل الصنف <code>PasswordReminder</code> وفي هذا خرق للمبدأ O أي مبدأ المفتوح والمغلق.
</p>

<p>
	لا ينبغي أن يهتم الصنف <code>PasswordReminder</code> بنوع قاعدة البيانات المستخدمة، ولتلافي ذلك، بإمكانك بناء واجهة طالما أن المبدأ الأخير ينص على ضرورة اعتماد وحدات المستوى الأعلى والأدنى على التجريد:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_61" style=""><span class="kwd">interface</span><span class="pln"> </span><span class="typ">DBConnectionInterface</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> connect</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	تقدم الواجهة السابقة طريقة للاتصال بقاعدة البيانات ويتبناها الصنف <code>MySQLConnection</code>. وبدلًا من الإشارة إلى الصنف <code>MySQLConnection</code> ضمن بانية <code>PasswordReminder</code> بإمكانك الإشارة إلى <code>DBConnectionInterface</code>. وأيًا كان نوع قاعدة البيانات التي تستخدمها، سيتمكن الصنف <code>PasswordReminder</code> من الاتصال بها دون مشاكل، ولن تخرق القاعدة الثانية (المفتوح والمغلق).
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8628_63" style=""><span class="kwd">class</span><span class="pln"> </span><span class="typ">MySQLConnection</span><span class="pln"> </span><span class="kwd">implements</span><span class="pln"> </span><span class="typ">DBConnectionInterface</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> connect</span><span class="pun">()</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="com">// handle the database connection</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> </span><span class="str">'Database connection'</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">PasswordReminder</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">private</span><span class="pln"> $dbConnection</span><span class="pun">;</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __construct</span><span class="pun">(</span><span class="typ">DBConnectionInterface</span><span class="pln"> $dbConnection</span><span class="pun">)</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    $this</span><span class="pun">-&gt;</span><span class="pln">dbConnection </span><span class="pun">=</span><span class="pln"> $dbConnection</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	وهكذا ستعتمد وحدات المستوى الأعلى والأدنى على التجريد.
</p>

<h2 id="-5">
	الخلاصة
</h2>

<p>
	قدمنا في هذا المقال المبادئ الأساسية الخمسة SOLID في كتابة الشيفرة البرمجية، ومن المفيد اتباعها في المشاريع البرمجية لجعلها تتمتع بإمكانيات المشاركة بين أطراف العمل بسهولة، والتعديل والاختبار وإعادة الإنتاج بأدنى مقدار من التعقيدات.
</p>

<p>
	ترجمة-وبتصرف- للمقال: <a href="https://www.digitalocean.com/community/conceptual-articles/s-o-l-i-d-the-first-five-principles-of-object-oriented-design" rel="external nofollow">SOLID: the first 5 principles of object oriented design</a> لمؤلفيه Samuel Oloruntoba و Anish Singh Walia
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%83%D9%8A%D9%81-%D8%AA%D9%83%D8%AA%D8%A8-%D9%83%D9%88%D8%AF-%D8%A8%D8%B1%D9%85%D8%AC%D9%8A-%D9%85%D8%AB%D9%84-%D9%85%D9%87%D9%86%D8%AF%D8%B3%D9%8A-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-r2506/" rel="">كيف تكتب كود برمجي مثل مهندسي البرمجيات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D8%A8%D8%B3%D8%A7%D8%B7%D8%A9-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-r1870/" rel="">قواعد البرمجة ببساطة للمبتدئين</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D8%A7%D9%84%D9%83%D8%A7%D8%A6%D9%86%D8%A7%D8%AA-oop/" rel="">البرمجة بالكائنات Object-Oriented Programming</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%AA%D8%B9%D9%84%D9%85-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%A3%D9%83%D9%88%D8%A7%D8%AF-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-%D9%85%D9%86-%D8%AE%D9%84%D8%A7%D9%84-%D8%A7%D9%84%D8%A3%D9%85%D8%AB%D9%84%D8%A9-%D8%A7%D9%84%D8%B9%D9%85%D9%84%D9%8A%D8%A9-r2048/" rel="">تعلم كتابة أكواد بايثون من خلال الأمثلة العملية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A3%D9%83%D9%88%D8%A7%D8%AF-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r2244/" rel="">ما هي أكواد البرمجة</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2525</guid><pubDate>Wed, 05 Mar 2025 12:06:03 +0000</pubDate></item><item><title>&#x62F;&#x644;&#x64A;&#x644; &#x625;&#x646;&#x634;&#x627;&#x621; &#x62A;&#x648;&#x62B;&#x64A;&#x642;&#x627;&#x62A; &#x62A;&#x642;&#x646;&#x64A;&#x629; &#x641;&#x639;&#x627;&#x644;&#x629;</title><link>https://academy.hsoub.com/programming/general/%D8%AF%D9%84%D9%8A%D9%84-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AA%D9%88%D8%AB%D9%8A%D9%82%D8%A7%D8%AA-%D8%AA%D9%82%D9%86%D9%8A%D8%A9-%D9%81%D8%B9%D8%A7%D9%84%D8%A9-r2510/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2025_02/----.png.d037720d8abd6ef93ab6592f4dfa46af.png" /></p>
<p>
	يُعَدّ التوثيق التقني أمرًا ضروريًا في تحسين تجربة المستخدم، حيث يوفر إرشادات واضحة حول كيفية استخدام منتج أو تطبيق ويشجعهم على استخدامه وتجربته، يقدم هذا المقال نظرة عامة على المبادئ الأساسية لكتابة التوثيقات التقنية، ويسلّط الضوء على أفضل الممارسات لإنشاء وثائق واضحة وسهلة الفهم. وسواء كنتم بحاجة لتوثيق مشاريعكم أو منتجاتكم البرمجية، أو كتابة أي محتوى تقني آخر، سيساعدكم تطبيق المبادئ التي سنشرحها في الفقرات التالية على كتابة التوثيقات التقنية بجودة عالية.
</p>

<h2>
	ما هو التوثيق التقني
</h2>

<p>
	التوثيق التقني هو بمثابة دليل استخدام أو كتيب إرشادات خاص بتقنية ما، حيث يركز على توفير معلومات تفصيلية للمطورين والمستخدمين، ويتضمن وصفًا تفصيليًا حول طريقة التعامل معها، وشرحًا للتفاصيل الفنية الخاصة بها من دوال وواجهات برمجية، ومعلومات عن صيانتها وحل المشكلات الشائعة التي قد تواجههم عند التعامل معها.
</p>

<p>
	لنتعرف على أهم النصائح الواجب اتباعها لكتابة التوثيقات التقنية بوضوح واحترافية.
</p>

<h2 id="-1">
	أولًا: الالتزام بالوضوح والإيجاز والاتساق
</h2>

<p>
	تشكل هذه العناصر الثلاثة المبادئ الأساسية لكتابة التوثيقات التقنية، وتساعد في إنشاء وثائق عالية الجودة، ولنوضح كل عنصر من هذه العناصر بمزيد من التفصيل.
</p>

<h3 id="-2">
	الوضوح
</h3>

<p>
	كي يحقق التوثيق التقني سمة الوضوح، يتوجب علينا تطبيق الإرشادات التالية:
</p>

<ul>
	<li>
		استخدام كلمات بسيطة ولغة واضحة ووضع الجمهور المستهدف في الحسبان
	</li>
	<li>
		الوضوح عند كتابة تعليمات لتنفيذ دالة ما، ويفضل استخدام الأفعال المبنية للمعلوم لتوضيح الفاعل وتحديد هل ستُشَغّل الدالة بواسطة حدث معين، أم على المستخدم استدعاؤها بشكل صريح
	</li>
	<li>
		شرح المصطلحات الجديدة بوضوح، حيث يساعد ذلك في وضع أساسيات للمفاهيم التي سنتحدث عنها لاحقًا
	</li>
	<li>
		استبدال الضمائر بأسماء علم إن كانت تشير لأكثر من شيء واحد في السياق المحدد
	</li>
	<li>
		تقديم فكرة واحدة في كل جملة لتحسين المقروئية، والالتزام بفكرة رئيسية واحدة في كل فقرة
	</li>
	<li>
		ربط كل جملة منطقيًا بالجمل التي قبلها، كما لو أن كل جملة في الفقرة هي حلقة في سلسلة، فإن فهمنا الحلقة الأولى، فيجب أن تتبعها الحلقات الأخرى في السلسلة، لتشكل سلسلة مترابطة تتدفق فيها الأفكار بسلاسة
	</li>
</ul>

<h3 id="-3">
	الإيجاز
</h3>

<p>
	من الجيد إبقاء الجمل قصيرة وموجزة قدر المستطاع لتعزز وضوح المستند وسهولة قراءته، وتساعد على الفهم السريع، فقد يكون فهم الجمل الطويلة أصعب بسبب بنيتها المعقدة. وبناءً على معايير سهولة القراءة الشائعة، من الأفضل كتابة 15 إلى 20 كلمة وسطيًا في كل جملة. وللحصول على معلومات إضافية حول هذا المعيار ننصح بمطالعة <a href="https://ar.wikipedia.org/wiki/%D8%A7%D9%86%D9%82%D8%B1%D8%A7%D8%A6%D9%8A%D8%A9" rel="external nofollow">صفحة المقروئية على ويكيبيديا</a>.
</p>

<h3 id="-4">
	الاتساق
</h3>

<p>
	يتوجب علينا استخدام نفس المصطلحات في التوثيق البرمجي لضمان تجربة قراءة سلسة. على سبيل المثال، إذا استخدمنا مصطلح وكلاء المستخدم user agents للإشارة إلى المتصفحات browsers، فعلينا الالتزام بهذا المصطلح في كل السياق، إذ يجنبنا ذلك الالتباس الذي قد ينشأ نتيجة لاستخدام مصطلحات عدة، حتى لو كان لها المعنى نفسه.
</p>

<p>
	كما ينبغي اتباع أسلوب تنسيق موحد في جميع الوثائق، والحفاظ على تناسق الكلمات، من حيث استخدام الأحرف الكبيرة والصغيرة -في حال استخدام اللغة الإنجليزية في التوثيق- إذ تُحَسّن هذه الممارسات مقروئية المستند، وتظهره بشكل احترافي.
</p>

<h2 id="-5">
	ثانيًا: تنظيم المحتوى
</h2>

<p>
	ينبغي أن نطبّق نفس <a href="https://academy.hsoub.com/programming/general/%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D8%A8%D8%B3%D8%A7%D8%B7%D8%A9-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-r1870/" rel="">القواعد</a> المستخدمة لتنظيم الشيفرات البرمجية عند تنظيم المحتوى التقني، وذلك من خلال تحديد هدف واضح للمحتوى، والتفكير في البنية التي نريد اعتمادها في التوثيقات. والحرص على أن تساهم كلّ الأقسام الفرعية في تحقيق هذا الهدف تدريجيًا، ولنوضح أهم الأقسام التي تساعدنا على تنظيم محتوانا التقني.
</p>

<h3 id="-6">
	مقدمة التوثيق
</h3>

<p>
	أولاً، علينا وصف الميزة التقنية التي سنوثّقها في المقدمة، ونوضّح لماذا سيكون التعرف على تلك الميزة مفيدًا كأن نذكر حالات عملية مفيدة لاستخدامها. فكلما أضفنا حالات واقعية ذات أهمية، سَهُلَ على القراء فهم المحتوى والتفاعل معه.
</p>

<h3 id="-7">
	التسلسل المنطقي
</h3>

<p>
	ستساعدنا الأسئلة التالية في تنظيم المحتوى وفق تسلسل منطقي صحيح:
</p>

<ul>
	<li>
		هل التوثيق مصمم لتوجيه القراء بدايةً من المفاهيم الأساسية إلى المفاهيم المتقدمة
	</li>
	<li>
		هل توجد أقسام مخصصة للتعريف بالأساسيات النظرية وكل ما يلزم، قبل الانتقال إلى كيفية التنفيذ
	</li>
	<li>
		هل تُماثِل بنية المستند مسار التعلم الطبيعي للموضوع، فهذا يساعد على بناء المعلومات خطوة خطوة ويعزز تجربة التعلم
	</li>
	<li>
		هل توجد أدلة إرشادية وأمثلة كافية تعزز الأقسام النظرية والمفاهيمية
	</li>
	<li>
		هل يتبع المحتوى تسلسلاً منطقيًا من حيث الجمل والفقرات والأقسام
	</li>
	<li>
		وهل يعتمد كل قسم على المعلومات السابقة، مع تجنب الفجوات في المحتوى
	</li>
</ul>

<h3 id="-8">
	استخدام الأمثلة
</h3>

<p>
	استخدام الأمثلة في التوثيق البرمجي أمر بالغ الأهمية ويساعدنا على توصيل الفكرة بوضوح وسهولة، يمكن أن نتخيل أننا نجلس بجوار شخص ما ونشرح له المفاهيم، كما يمكن أن نستبق أسئلته ونعالجها في الكتابة، ونستخدم هذا الأسلوب لإضافة أكبر عدد ممكن من الأمثلة الواضحة ذات الصلة بما نشرحه.
</p>

<p>
	وعند كتابة التوثيق البرمجي، ليس بالضرورة أن نقتصر على تقديم الأمثلة البرمجية فقط بل يمكننا أيضًا تضمين أمثلة عملية وحالات غير برمجية تساعد في توضيح فائدة الميزة وكيفية استخدامها وتطبيقها عمليًا. هذا سيساعد القراء على استيعاب المفاهيم بصورة أفضل ويلبي أيضًا أنماط التعلم المختلفة.
</p>

<h2 id="-9">
	ثالثًا: تحسين بنية التوثيق
</h2>

<p>
	من الضروري تقييم بنية مستندات التوثيق للتأكد من أنها تحافظ على تسلسل هرمي منطقي ومتوازن باتباع الإرشادات التالية:
</p>

<ul>
	<li>
		يجب أن يكون لكل قسم رئيسي ولكل قسم فرعي غرض واضح، ولا يجب أن يكون هناك أقسام بلا هدف محدد أو بلا محتوى كافٍ
	</li>
	<li>
		التعامل مع الأقسام اليتيمة Orphan Sections وهي الأقسام الرئيسية التي تحتوي على قسم فرعي واحد فقط، كأن يكون لدينا قسم فرعي واحد من المستوى الثالث H3 ضمن قسم رئيسي من المستوى الثاني H2، هذا يشير لضرورة إعادة توسيع هذا القسم أو دمجه مع قسم آخر
	</li>
	<li>
		التحقق من عدم وجود الكثير من العناوين من المستوى الرابع H4، فكثرة الأقسام الفرعية قد يكون مرهقًا للقراء، وقد يُصعّب عليهم فهم المعلومات
	</li>
	<li>
		الانتباه للطول الإجمالي لكل قسم فإذا كان أحد الأقسام طويلًا جدًا، فقد يشتت القارئ، لذا نقسّم الأقسام الكبيرة لأقسام فرعية منطقية متعددة، أو نعيد هيكلة المحتوى
	</li>
</ul>

<h2 id="-12">
	تدقيق المحتوى
</h2>

<p>
	من أكثر الخطوات أهمية في التوثيق البرمجي هي المراجعة الذاتية وتدقيق المحتوى، سواء كنا بصدد إنشاء مستند كبير أو فقرة قصيرة، فهذه الخطوة ضرورية جدًا. لذا نحتاج لأن نخصص وقتًا مناسبًا لمراجعة العمل كاملًا ونحدد الأقسام التي يمكن تحسينها وتوضيحها أكثر، ونزيل الحشو من الأفكار التي لا تضيف قيمة، ونتخلص من الكلمات والعبارات المكررة. ستضمن هذه التعديلات وضوح النص وتماسكه ووصول الأفكار على النحو المطلوب.
</p>

<p>
	كما نحتاج لتدقيق المحتوى لغويًا ويفضل أن نستريح قليلًا قبل مراجعته مرة أخرى، ونبحث عن أي تناقضات في الأسلوب أو أزمنة الأفعال أو التنسيق ثم نعدّل ما يلزم فالمراجعة بعد فترة من الاستراحة تمكننا من ملاحظة الأخطاء التي قد تفوتنا أول مرة.
</p>

<h2 id="-10">
	نصائح إضافية
</h2>

<p>
	نختم بجملة من النصائح التالية لتحسين وضوح الوثائق التقنية:
</p>

<ul>
	<li>
		استخدام القوائم ذات التعداد الرقمي عندما يتوجب علينا اتباع الخطوات بترتيب محدد، أو التعداد النقطي عندما لا يكون للعناصر ترتيب محدد، ونسبق القائمة دائمًا بجملة أولية توضح السياق
	</li>
	<li>
		استخدام الفواصل وعلامات الترقيم المناسبة لتحسين المقروئية وتوضيح بنية الجملة
	</li>
	<li>
		وضع نص بديل Alternative text للصور، وإرفاق ملفات الفيديو والصوت بنصوص وصفية لجعل الوثائق مناسبة للجميع
	</li>
	<li>
		الحرص على أن تكون جميع نصوص الروابط واضحة وتشير بوضوح إلى وجهة الرابط لمساعدة الأشخاص الذين يستخدمون برامج قراءة الشاشة على فهم وجهة الروابط. مثلًا، نستخدم الجملة التالية اطلع على بعض <a href="https://academy.hsoub.com/marketing/search-engine-optimisation/%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D9%85%D8%AC%D8%A7%D9%86%D9%8A%D8%A9-%D9%84%D8%AA%D8%AD%D8%B3%D9%8A%D9%86-%D9%85%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-r720/" rel="">الأدوات مجانية لتحسين محركات البحث</a> بدلاً من جملة انقر هنا
	</li>
	<li>
		استخدام لغة مناسبة ومفردات تحترم تنوع الجمهور، وتجعل من الوثائق موضع ترحيب للجميع
	</li>
</ul>

<h2 id="-11">
	الخاتمة
</h2>

<p>
	بهذا وصلنا إلى نهاية مقالنا الذي قدمنا فيه نصائح مفيدة للمطورين والكتّاب التقنيين المهتمين بتحسين جودة التوثيقات التقنية والبرمجية. ولنتذكر في الختام أن إنشاء توثيقات تقنية فعالة وسهلة الاستخدام عملية مهمة تبدأ بفهم الجمهور المستهدف والهدف من الوثائق التي نكتبها، مع الحرص على تطبيق المبادئ التي تعلمناها لتحسين جودة الوثائق وفهمها.
</p>

<p>
	ترجمة، وبتصرّف، للمقال <a href="https://developer.mozilla.org/en-US/blog/technical-writing/" rel="external nofollow">Creating effective technical documentation</a> لكاتبته Dipika Bhattacharya.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%83%D9%8A%D9%81-%D8%AA%D9%83%D8%AA%D8%A8-%D9%83%D9%88%D8%AF-%D8%A8%D8%B1%D9%85%D8%AC%D9%8A-%D9%85%D8%AB%D9%84-%D9%85%D9%87%D9%86%D8%AF%D8%B3%D9%8A-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-r2506/" rel="">كيف تكتب كود برمجي مثل مهندسي البرمجيات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%87%D9%84-%D8%AA%D8%AD%D8%AA%D8%A7%D8%AC-%D9%84%D9%85%D8%B1%D8%A7%D8%AC%D8%B9%D8%A7%D8%AA-%D8%AA%D9%82%D9%86%D9%8A%D8%A9-%D9%85%D8%B3%D8%AA%D9%82%D9%84%D8%A9%D8%9F-r736/" rel="">هل تحتاج لمراجعات تقنية مستقلة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%82%D8%A7%D8%A6%D9%85%D8%A9-%D9%85%D8%B1%D8%A7%D8%AC%D8%B9%D8%A9-%D8%A7%D9%84%D9%85%D8%B4%D8%B1%D9%88%D8%B9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A-r741/" rel="">قائمة مراجعة المشروع البرمجي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/entrepreneurship/tips/%D8%A3%D8%B3%D8%B3-%D8%A7%D9%84%D9%82%D9%8A%D8%A7%D8%AF%D8%A9-%D8%A7%D9%84%D8%AA%D9%82%D9%86%D9%8A%D8%A9-r452/" rel="">أسس القيادة التقنية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D8%A8%D8%B3%D8%A7%D8%B7%D8%A9-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-r1870/" rel="">قواعد البرمجة ببساطة للمبتدئين</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2510</guid><pubDate>Thu, 13 Feb 2025 15:00:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x643;&#x62A;&#x628; &#x643;&#x648;&#x62F; &#x628;&#x631;&#x645;&#x62C;&#x64A; &#x645;&#x62B;&#x644; &#x645;&#x647;&#x646;&#x62F;&#x633;&#x64A; &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x64A;&#x627;&#x62A;</title><link>https://academy.hsoub.com/programming/general/%D9%83%D9%8A%D9%81-%D8%AA%D9%83%D8%AA%D8%A8-%D9%83%D9%88%D8%AF-%D8%A8%D8%B1%D9%85%D8%AC%D9%8A-%D9%85%D8%AB%D9%84-%D9%85%D9%87%D9%86%D8%AF%D8%B3%D9%8A-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-r2506/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2025_02/125981210_.png.8ea6b0685ef053690380e50398781005.png" /></p>
<p>
	تُعَد كتابة كود برمجي احترافي مثل مهندسي البرمجيات اليوم من أبرز المهارات التقنية المطلوبة، لما لها من دور في رفع جودة وكفاءة الكود البرمجي الذي كلما كان مكتوبًا بتسلسل منطقي وبخطوات احترافية محكمة، انعكس ذلك على ارتفاع جودة المشروع البرمجي وزادت دقته، وقلت أخطاؤه.
</p>

<p>
	سنشرح في هذا المقال المفاهيم الأساسية لكتابة كود برمجي بجودة عالية مثل مهندسي البرمجيات، مع تقديم أمثلة توضيحية من شأنها تطوير مهارات المبرمج وتمكينه من تحويل الأفكار إلى نتائج ملموسة والوصول إلى مستوى احترافي.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		سنفترض في هذا المقال أن أمامنا مشروع لكتابة كود برمجي يحسب متوسط درجات الطلاب في مادة معينة، ويحدد أعلى وأقل درجة، إلى جانب تحديد عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط.
	</p>
</blockquote>

<h2>
	فهم وتحليل المشكلة البرمجية
</h2>

<p>
	من المهم فهم وتحليل المشكلة البرمجية أولًا لبناء كود برمجي فعال واحترافي؛ ولفعل ذلك، لا بد من فهم الأهداف المرجوة من الكود، وتحليل متطلباته وتصميم حل برمجي مناسب له. حسب مثال مشروعنا بهذا المقال، سيكون ذلك كما يلي:
</p>

<h3>
	فهم الأهداف المرجوة وتسطيرها
</h3>

<p>
	مع تحليل المشكلة والتفكير بطريقة حلها برمجيًا نجد أن أهداف الكود الذي سنكتبه في هذه الحالة هي:
</p>

<ul>
	<li>
		حساب متوسط درجات الطلاب، ونحتاج لذلك إلى حساب المتوسط الحسابي لدرجات الطلاب
	</li>
	<li>
		تحديد أعلى وأقل درجة
	</li>
	<li>
		تحديد عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط
	</li>
</ul>

<h3>
	تحليل متطلبات الكود البرمجي
</h3>

<p>
	نحدد هنا ما هي البيانات أو المدخلات التي يحتاجها الكود للعمل بشكل صحيح، والتي هي في هذه الحالة قائمة تحتوي على درجات الطلاب مثل: 85 و 90 و 78 و 92 و 88.
</p>

<h3>
	تصميم الحل البرمجي
</h3>

<p>
	يسهّل استخدام المخططات الانسيابية لتصميم الحلول البرمجية عملية التفاعل مع المشكلة وفهمها بوضوح؛ ورغم أنه اختياري إلا أنه مهم. في المثال التالي مخطط انسيابي لمثال المشكلة البرمجية التي نريد كتابة كود احترافي لها:
</p>

<h2 style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2025_03/Screenshot2025-03-25at3_40_01PM.png.4a6c7e39905c458f981cc3f2f34c34f7.png" data-fileid="169878" data-fileext="png" rel=""><img alt="تصميم الحل البرمجي" class="ipsImage ipsImage_thumbnailed" data-fileid="169878" data-ratio="156.25" data-unique="un1tkxjux" style="width: 384px; height: auto;" width="384" src="https://academy.hsoub.com/uploads/monthly_2025_03/Screenshot2025-03-25at3_40_01PM.thumb.png.0d551de3c79bb28fc168c5d080548d40.png"></a>
</h2>

<h2 id="-1">
	شروط كتابة كود برمجي جيد مثل مهندسي البرمجيات
</h2>

<p>
	تتطلب عملية كتابة كود برمجي مثل <a href="https://academy.hsoub.com/programming/general/%D9%85%D9%87%D9%86%D8%AF%D8%B3-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D9%85%D9%86-%D9%87%D9%88-%D9%88%D9%85%D8%A7-%D9%87%D9%8A-%D9%85%D9%87%D8%A7%D9%85%D9%87-r2264/" rel="">مهندسي البرمجيات</a>، الالتزام بمعايير الكتابة الاحترافية لضمان وضوح وسهولة ونظام الكود. ومن أهم هذه المعايير ما يلي:
</p>

<h3 id="-4">
	استخدام أسلوب موحد في تسمية المتغيرات
</h3>

<p>
	يجب استخدام نفس التسميات أو المفردات لنفس نوع المتغيرات عبر الكود لزيادة الاتساق. وكما يوضح المثال التالي، فطريقة التسمية غير موحدة، حيث تم اعتماد نمطين مختلفين، وهذا قلل من اتساق الكود ومفهوميته
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_901_7" style=""><span class="com"># تسمية سيئة</span><span class="pln">
gradeOne </span><span class="pun">=</span><span class="pln"> </span><span class="lit">85</span><span class="pln">
gradeTwo </span><span class="pun">=</span><span class="pln"> </span><span class="lit">90</span><span class="pln">
scoreThree </span><span class="pun">=</span><span class="pln"> </span><span class="lit">78</span></pre>

<p>
	في حين تم بالمثال التالي استخدام الأسماء المتسقة بكامل الكود على النحو gradeOne و gradeTwo و gradeThree.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_901_9" style=""><span class="com"># تسمية جيدة</span><span class="pln">
gradeOne </span><span class="pun">=</span><span class="pln"> </span><span class="lit">85</span><span class="pln">
gradeTwo </span><span class="pun">=</span><span class="pln"> </span><span class="lit">90</span><span class="pln">
gradeThree</span><span class="pun">=</span><span class="pln"> </span><span class="lit">78</span></pre>

<h3 id="-2">
	استخدام أسماء واضحة ومعبرة للمتغيرات
</h3>

<p>
	من المهم أن تكون أسماء المتغيرات والدوال واضحة ومفهومة، بحيث تعكس غرضها وتساعدك أو تساعد المبرمجين الآخرين لاحقًا على فهم الكود بسهولة. دعنا نأخذ المثال التالي بلغة البرمجة بايثون لتوضيح أهمية اختيار أسماء واضحة للمتغيرات:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_901_11" style=""><span class="com"># كود سيء</span><span class="pln">
x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">85</span><span class="pln">
y </span><span class="pun">=</span><span class="pln"> </span><span class="lit">90</span><span class="pln">
z </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">x </span><span class="pun">+</span><span class="pln"> y</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span></pre>

<p>
	وكما نلاحظ، يُعَد هذا المثال سيئًا لأن الأسماء x و y و z لا توضح غرض المتغيرات؛ على عكس المثال التالي الذي ستكون فيه الأسماء معبرة بوضوح عن محتويات المتغيرات، وهو درجات الطلاب:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_901_13" style=""><span class="com">#  كود جيد</span><span class="pln">
gradeOne </span><span class="pun">=</span><span class="pln"> </span><span class="lit">85</span><span class="pln">
gradeTwo </span><span class="pun">=</span><span class="pln"> </span><span class="lit">90</span><span class="pln">
averageGrade </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">gradeOne </span><span class="pun">+</span><span class="pln"> gradeTwo</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span></pre>

<h3 id="-5">
	يجب أن تعبر أسماء الدوال عما تفعله
</h3>

<p>
	اسم الدالة يجب أن يعكس بدقة الوظيفة التي تؤديها.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8295_7" style=""><span class="com"># سيء </span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> calc</span><span class="pun">(</span><span class="pln">x</span><span class="pun">,</span><span class="pln"> y</span><span class="pun">):</span><span class="pln">
  </span><span class="kwd">return</span><span class="pln"> x </span><span class="pun">+</span><span class="pln"> y    </span></pre>

<p>
	وكما نلاحظ، فاسم الدالة calc لا يوضح دورها، في حين أن استخدام اسم الدالة calculateAverage في المثال الآتي، عبر بدقة عن العملية التي تقوم بها الدالة.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_901_17" style=""><span class="com"># جيد </span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> calculateAverage</span><span class="pun">(</span><span class="pln">gradeOne</span><span class="pun">,</span><span class="pln"> gradeTwo</span><span class="pun">):</span><span class="pln">
   </span><span class="kwd">return</span><span class="pln"> </span><span class="pun">(</span><span class="pln">gradeOne </span><span class="pun">+</span><span class="pln"> gradeTwo</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span></pre>

<h3 id="-3">
	تقليل التكرار وجعل الكود سهل القراءة
</h3>

<p>
	من المهم كتابة كود لا يحتوي على تكرار غير ضروري ويكون سهل القراءة لفهمه بسرعة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_8295_9" style=""><span class="com"># كود سيء</span><span class="pln">
</span><span class="com"># حساب المعدل بطريقة غير فعالة</span><span class="pln">
totalOne </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">85</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">90</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pln">
totalTwo </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">78</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">92</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pln">
totalThree </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">88</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">81</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pln">

average </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">totalOne </span><span class="pun">+</span><span class="pln"> totalTwo </span><span class="pun">+</span><span class="pln"> totalThree</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">3</span></pre>

<p>
	وكما نرى، كتابة الكود بهذه الطريقة يؤدي إلى تكرار نفس العملية لحساب المتوسط الحسابي عدة مرات؛ على عكس المثال التالي، الذي سننشئ به دالة calculateAverage لجعل الكود أكثر وضوحًا ومرونة. 
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_901_22" style=""><span class="com"># كود جيد</span><span class="pln">
</span><span class="com"># تعريف دالة لحساب معدل درجتين</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> calculateAverage</span><span class="pun">(</span><span class="pln">gradeOne</span><span class="pun">,</span><span class="pln"> gradeTwo</span><span class="pun">):</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> </span><span class="pun">(</span><span class="pln">gradeOne </span><span class="pun">+</span><span class="pln"> gradeTwo</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pln">  

</span><span class="com"># استخدام الدالة لتقليل التكرار</span><span class="pln">
totalOne </span><span class="pun">=</span><span class="pln"> calculateAverage</span><span class="pun">(</span><span class="lit">85</span><span class="pun">,</span><span class="pln"> </span><span class="lit">90</span><span class="pun">)</span><span class="pln">
totalTwo </span><span class="pun">=</span><span class="pln"> calculateAverage</span><span class="pun">(</span><span class="lit">78</span><span class="pun">,</span><span class="pln"> </span><span class="lit">92</span><span class="pun">)</span><span class="pln">
totalThree </span><span class="pun">=</span><span class="pln"> calculateAverage</span><span class="pun">(</span><span class="lit">88</span><span class="pun">,</span><span class="pln"> </span><span class="lit">81</span><span class="pun">)</span><span class="pln">

</span><span class="com"># حساب المعدل العام</span><span class="pln">
overallAverage </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">totalOne </span><span class="pun">+</span><span class="pln"> totalTwo </span><span class="pun">+</span><span class="pln"> totalThree</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">3</span></pre>

<p>
	إن استخدام الدالة calculateAverage يتيح إعادة استخدام نفس الوظيفة عدة مرات عند الحاجة، مما يقلل تكرار الكود ويحسن من تنظيمه وسهولة صيانته.
</p>

<h2 id="-6">
	طريقة تنظيم الكود وهيكلته
</h2>

<p>
	تتجلى أهمية التنظيم الجيد للكود البرمجي في تحسين قابليته للقراءة، وتقليل احتمالية وقوع الأخطاء، وتسهيل عملية صيانته، مما يجعل تصحيح الأخطاء أو إضافة ميزات جديدة أمرًا أكثر سلاسةً وفعالية. للوصول إلى كود منظم واحترافي مثل مهندسي البرمجيات، يمكن اتباع الخطوات التالية:
</p>

<h3 id="-7">
	استخدام الفواصل والفراغات لتنظيم الكود
</h3>

<p>
	نحاول إضافة فواصل مناسبة بين الأقسام المختلفة، وذلك بترك سطر فارغ بين تعريفات المتغيرات والدوال لجعل الكود أكثر وضوحا، على سبيل المثال:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_901_24" style=""><span class="com"># تعريف المتغيرات</span><span class="pln">
gradeOne </span><span class="pun">=</span><span class="pln"> </span><span class="lit">85</span><span class="pln">
gradeTwo </span><span class="pun">=</span><span class="pln"> </span><span class="lit">90</span><span class="pln">

</span><span class="com"># دالة لحساب المتوسط </span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> calculateAverage</span><span class="pun">(</span><span class="pln">gradeOne</span><span class="pun">,</span><span class="pln"> gradeTwo</span><span class="pun">):</span><span class="pln">
     </span><span class="kwd">return</span><span class="pln"> </span><span class="pun">(</span><span class="pln">gradeOne </span><span class="pun">+</span><span class="pln"> gradeTwo</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pln">

</span><span class="com"># حساب المتوسط وطباعة النتيجة </span><span class="pln">
average </span><span class="pun">=</span><span class="pln"> calculateAverage </span><span class="pun">(</span><span class="pln">gradeOne </span><span class="pun">,</span><span class="pln">gradeTwo</span><span class="pun">)</span><span class="pln"> 
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">average</span><span class="pun">)</span></pre>

<h3 id="-8">
	تقسيم الكود إلى وحدات ووظائف صغيرة
</h3>

<p>
	عند كتابة الكود، من الأفضل تقسيمه إلى دوال ووظائف صغيرة تنفذ مهمة واحدة فقط. هذا يسهل إعادة استخدام هذه الدوال في أماكن مختلفة، كما يسهل صيانة الكود وتحديثه. لحل المشكلة البرمجية الخاصة بمقالنا سنحتاج إلى عدة دوال تتمثل في حساب متوسط درجات الطلاب، ودالة لتحديد أعلى وأقل درجة، ودالة أخرى لحساب عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط، وأخرى تدعى بالدالة الرئيسية التي تنظم تنفيذ الخطوات.
</p>

<p>
	نلاحظ الكود التالي، المنظم والمهيكل لحل المشكلة البرمجية السابقة، والذي يتضمن الدوال الأساسية المطلوبة لتنفيذ الحل
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_6714_6" style=""><span class="pln">grades </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">85</span><span class="pun">,</span><span class="pln"> </span><span class="lit">90</span><span class="pun">,</span><span class="pln"> </span><span class="lit">78</span><span class="pun">,</span><span class="pln"> </span><span class="lit">92</span><span class="pun">,</span><span class="pln"> </span><span class="lit">88</span><span class="pun">]</span><span class="pln">

</span><span class="com"># تعريف دالة لحساب المتوسط</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> calculateAverage</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">):</span><span class="pln">
     </span><span class="kwd">return</span><span class="pln"> sum</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> len</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">

</span><span class="com"># تعريف دالة لتحديد أعلى وأقل درجة </span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> findHighestAndLowest</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">):</span><span class="pln">
    highest </span><span class="pun">=</span><span class="pln"> max</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">
    lowest </span><span class="pun">=</span><span class="pln"> min</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> highest</span><span class="pun">,</span><span class="pln"> lowest
    
</span><span class="com"># تعريف دالة لحساب عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط </span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> countAboveAverage</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">,</span><span class="pln">average</span><span class="pun">):</span><span class="pln">
    count </span><span class="pun">=</span><span class="pln"> sum</span><span class="pun">(</span><span class="lit">1</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> grade </span><span class="kwd">in</span><span class="pln"> grades </span><span class="kwd">if</span><span class="pln"> grade </span><span class="pun">&gt;</span><span class="pln"> average</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> count
    
</span><span class="com"># الوظيفة الرئيسية التي تنظم تنفيذ الخطوات</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> main</span><span class="pun">():</span><span class="pln">
	grades </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">85</span><span class="pun">,</span><span class="pln"> </span><span class="lit">90</span><span class="pun">,</span><span class="pln"> </span><span class="lit">78</span><span class="pun">,</span><span class="pln"> </span><span class="lit">92</span><span class="pun">,</span><span class="pln"> </span><span class="lit">88</span><span class="pun">]</span><span class="pln">
    </span><span class="com"># التحقق من إذا كانت القائمة فارغة  </span><span class="pln">
	</span><span class="kwd">if</span><span class="pln"> </span><span class="kwd">not</span><span class="pln"> grades</span><span class="pun">:</span><span class="pln">
    	  </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"القائمة فارغة. لا يمكن إجراء الحسابات."</span><span class="pun">)</span><span class="pln">
    	  </span><span class="kwd">return</span><span class="pln"> </span><span class="com"># إنهاء التنفيذ إذا كانت القائمة فارغة</span><span class="pln">
    
</span><span class="com"># حساب متوسط الدرجات </span><span class="pln">
average </span><span class="pun">=</span><span class="pln"> calculateAverage</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">f</span><span class="str">"متوسط الدرجات: {average:.2f}"</span><span class="pun">)</span><span class="pln">

</span><span class="com"># تحديد أعلى وأقل درجة </span><span class="pln">
highest</span><span class="pun">,</span><span class="pln"> lowest </span><span class="pun">=</span><span class="pln"> findHighestAndLowest</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">f</span><span class="str">"أعلى درجة: {highest}"</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">f</span><span class="str">"أقل درجة: {lowest}"</span><span class="pun">)</span><span class="pln">

</span><span class="com"># حساب عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط</span><span class="pln">
aboveAverageCount </span><span class="pun">=</span><span class="pln"> countAboveAverage</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">,</span><span class="pln">average</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">f</span><span class="str">"عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط: {aboveAverageCount}"</span><span class="pun">)</span><span class="pln">

</span><span class="com"># استدعاء الوظيفة الرئيسية </span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> __name__ </span><span class="pun">==</span><span class="pln"> </span><span class="str">"__main__"</span><span class="pun">:</span><span class="pln">
    main</span><span class="pun">()</span></pre>

<h2 id="-9">
	استخدام التوثيق والتعليقات لشرح الأكواد
</h2>

<p>
	التوثيق هو أحد العناصر الأساسية في كتابة كود احترافي مثل مهندسي البرمجيات، حيث يسهم في تسهيل فهم الكود وصيانته بسرعة وكفاءة. يساعد التوثيق الواضح والموجز على توضيح الغرض الرئيسي للكود وآلية عمله، مما يجعل التعامل معه أكثر سهولة سواء بالنسبة لك أو للمبرمجين الآخرين؛ مع ذلك من المهم تجنب الإفراط في التوثيق أو شرح التفاصيل الواضحة للحفاظ على التركيز على الجوانب الجوهرية فقط.
</p>

<h3 id="-10">
	حالة التوثيق المفرط
</h3>

<p>
	يكون التوثيق مفرطًا إذا كان يشرح كل سطر برمجي دون الحاجة لكل ذلك، مما يشتت القارئ ويجعل الكود يبدو مزدحمًا، مثل:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_325_67" style=""><span class="com"># قائمة تحتوي على درجات الطلاب </span><span class="pln">
</span><span class="com"># هذه القائمة تمثل درجات الطلاب في مادة معينة، وهي عبارة عن أرقام صحيحة </span><span class="pln">
grades </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">85</span><span class="pun">,</span><span class="pln"> </span><span class="lit">90</span><span class="pun">,</span><span class="pln"> </span><span class="lit">78</span><span class="pun">,</span><span class="pln"> </span><span class="lit">92</span><span class="pun">,</span><span class="pln"> </span><span class="lit">88</span><span class="pun">]</span><span class="pln">

</span><span class="com"># حساب متوسط الدرجات </span><span class="pln">
</span><span class="com"># يتم استخدام الدالة المدمجة sum لحساب مجموع الدرجات في القائمة </span><span class="pln">
</span><span class="com"># ثم يتم استخدام len لحساب عدد العناصر في القائمة </span><span class="pln">
average </span><span class="pun">=</span><span class="pln"> sum</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> len</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">

</span><span class="com"># طباعة المتوسط</span><span class="pln">
</span><span class="com"># يتم طباعة متوسط الدرجات باستخدام دالة  print </span><span class="pln">
</span><span class="com"># يتم تضمين المتوسط داخل سلسلة نصية باستخدام f-string</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">f</span><span class="str">"The average grade is: {average}"</span><span class="pun">)</span></pre>

<h3 id="-11">
	حالة انعدام التوثيق رغم الحاجة له
</h3>

<p>
	يكون الكود هنا غير واضح، وبدون إرشادات مساعدة على فهمه في التعليقات، بحيث يترك القارئ في حيرة بشأن الغرض أو المنطق العام للكود، مثل:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_325_69" style=""><span class="pln">grades </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">85</span><span class="pun">,</span><span class="pln"> </span><span class="lit">90</span><span class="pun">,</span><span class="pln"> </span><span class="lit">78</span><span class="pun">,</span><span class="pln"> </span><span class="lit">92</span><span class="pun">,</span><span class="pln"> </span><span class="lit">88</span><span class="pun">]</span><span class="pln">
average </span><span class="pun">=</span><span class="pln"> sum</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> len</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">f</span><span class="str">"The average grade is: {average}"</span><span class="pun">)</span></pre>

<h3 id="-12">
	حالة التوثيق الفعال
</h3>

<p>
	يكون التوثيق فعال عندما يكون متوازن ويحوي توضيحات حسب الحاجة فقط ضمن الكود دون مبالغة، مثل:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_325_71" style=""><span class="com"># قائمة تحتوي على درجات الطلاب </span><span class="pln">
grades </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">85</span><span class="pun">,</span><span class="pln"> </span><span class="lit">90</span><span class="pun">,</span><span class="pln"> </span><span class="lit">78</span><span class="pun">,</span><span class="pln"> </span><span class="lit">92</span><span class="pun">,</span><span class="pln"> </span><span class="lit">88</span><span class="pun">]</span><span class="pln">

</span><span class="com"># حساب متوسط الدرجات </span><span class="pln">
average </span><span class="pun">=</span><span class="pln"> sum</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> len</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">

</span><span class="com"># طباعة المتوسط </span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">f</span><span class="str">"The average grade is: {average}"</span><span class="pun">)</span></pre>

<h2 id="-13">
	استخدام الحزم البرمجية والمكتبات الجاهزة
</h2>

<p>
	يستخدم مهندس البرمجيات المحترف المكتبات الجاهزة والدوال المدمجة لتبسيط العمليات وتقليل عدد الأسطر المطلوبة في الكود البرمجي، بحيث تتميز كل لغة برمجة بالعديد من المكتبات والحزم التي تتناسب مع المشكلة البرمجية. 
</p>

<p>
	لفهم الفرق، سنأخذ على سبيل المثال طريقة كتابة الكود بدون استخدام المكتبات الجاهزة والدوال المدمجة لحساب المطلوب في مقالنا كما هو واضح في الكود التالي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_325_75" style=""><span class="pln">grades </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">85</span><span class="pun">,</span><span class="pln"> </span><span class="lit">90</span><span class="pun">,</span><span class="pln"> </span><span class="lit">78</span><span class="pun">,</span><span class="pln"> </span><span class="lit">92</span><span class="pun">,</span><span class="pln"> </span><span class="lit">88</span><span class="pun">]</span><span class="pln">

</span><span class="com"># تعريف دالة لحساب المتوسط</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> calculateAverage</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">):</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> sum</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> len</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">

</span><span class="com"># تعريف دالة لتحديد أعلى وأقل درجة</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> findHighestAndLowest</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">):</span><span class="pln">
    highest </span><span class="pun">=</span><span class="pln"> max</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">
    lowest </span><span class="pun">=</span><span class="pln"> min</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> highest</span><span class="pun">,</span><span class="pln"> lowest

</span><span class="com"># تعريف دالة لحساب عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> countAboveAverage</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">,</span><span class="pln">average</span><span class="pun">):</span><span class="pln">
    count </span><span class="pun">=</span><span class="pln"> sum</span><span class="pun">(</span><span class="lit">1</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> grade </span><span class="kwd">in</span><span class="pln"> grades </span><span class="kwd">if</span><span class="pln"> grade </span><span class="pun">&gt;</span><span class="pln"> average</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> count
    
</span><span class="com"># الوظيفة الرئيسية التي تنظم تنفيذ الخطوات</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> main</span><span class="pun">():</span><span class="pln">
    grades </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">85</span><span class="pun">,</span><span class="pln"> </span><span class="lit">90</span><span class="pun">,</span><span class="pln"> </span><span class="lit">78</span><span class="pun">,</span><span class="pln"> </span><span class="lit">92</span><span class="pun">,</span><span class="pln"> </span><span class="lit">88</span><span class="pun">]</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="kwd">not</span><span class="pln"> grades</span><span class="pun">:</span><span class="pln">
          </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"القائمة فارغة. لا يمكن إجراء الحسابات."</span><span class="pun">)</span><span class="pln">
          </span><span class="kwd">return</span><span class="pln"> </span><span class="com"># إنهاء التنفيذ إذا كانت القائمة فارغة</span><span class="pln">

</span><span class="com"># حساب متوسط الدرجات </span><span class="pln">
average </span><span class="pun">=</span><span class="pln"> calculateAverage</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">f</span><span class="str">"متوسط الدرجات: {average:.2f}"</span><span class="pun">)</span><span class="pln">

</span><span class="com"># تحديد أعلى وأقل درجة </span><span class="pln">
highest</span><span class="pun">,</span><span class="pln"> lowest </span><span class="pun">=</span><span class="pln"> findHighestAndLowest</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">f</span><span class="str">"أعلى درجة: {highest}"</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">f</span><span class="str">"أقل درجة: {lowest}"</span><span class="pun">)</span><span class="pln">

</span><span class="com"># حساب عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط </span><span class="pln">
aboveAverageCount </span><span class="pun">=</span><span class="pln"> countAboveAverage</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">,</span><span class="pln">average</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">f</span><span class="str">"عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط: {aboveAverageCount}"</span><span class="pun">)</span><span class="pln">

</span><span class="com"># استدعاء الوظيفة الرئيسية  </span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> __name__ </span><span class="pun">==</span><span class="pln"> </span><span class="str">"__main__"</span><span class="pun">:</span><span class="pln">
    main</span><span class="pun">()</span></pre>

<p>
	وكما هو واضح، فالكود طويل وصعب القراءة.
</p>

<p>
	سنجرب الوصول لنفس نتيجة الكود، لكن باختصاره وتبسيطه عبر مكتبة مناسبة، وفي حالتنا سنستخدم مكتبة <strong>statistics</strong> لحساب المتوسط واستخدام الدوال المدمجة مثل <strong>max</strong> و <strong>min</strong> لتحديد أعلى وأقل درجة، لتكون النتيجة كما في الكود الآتي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_246_9" style=""><span class="kwd">import</span><span class="pln"> statistics

</span><span class="kwd">def</span><span class="pln"> main</span><span class="pun">():</span><span class="pln">
    </span><span class="com">#  قائمة درجات الطلاب</span><span class="pln">
    grades </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">85</span><span class="pun">,</span><span class="pln"> </span><span class="lit">90</span><span class="pun">,</span><span class="pln"> </span><span class="lit">78</span><span class="pun">,</span><span class="pln"> </span><span class="lit">92</span><span class="pun">,</span><span class="pln"> </span><span class="lit">88</span><span class="pun">]</span><span class="pln">
    </span><span class="com"># حساب متوسط الدرجات باستخدام مكتبة statistics</span><span class="pln">
    average </span><span class="pun">=</span><span class="pln"> statistics</span><span class="pun">.</span><span class="pln">mean</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">f</span><span class="str">"متوسط الدرجات: {average:.2f}"</span><span class="pun">)</span><span class="pln">
    </span><span class="com"># تحديد أعلى وأقل درجة باستخدام max و min</span><span class="pln">
    highest </span><span class="pun">=</span><span class="pln"> max</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">
    lowest </span><span class="pun">=</span><span class="pln"> min</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">f</span><span class="str">"أعلى درجة: {highest}"</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">f</span><span class="str">"أقل درجة: {lowest}"</span><span class="pun">)</span><span class="pln">
    </span><span class="com"># حساب عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط</span><span class="pln">
    aboveAverageCount </span><span class="pun">=</span><span class="pln"> sum</span><span class="pun">(</span><span class="lit">1</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> grade </span><span class="kwd">in</span><span class="pln"> grades </span><span class="kwd">if</span><span class="pln"> grade </span><span class="pun">&gt;</span><span class="pln"> average</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">f</span><span class="str">"عدد الطلاب الذين حصلوا على درجات أعلى من المتوسط: {aboveAverageCount}"</span><span class="pun">)</span><span class="pln">

</span><span class="com"># استدعاء الوظيفة الرئيسية</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> __name__ </span><span class="pun">==</span><span class="pln"> </span><span class="str">"__main__"</span><span class="pun">:</span><span class="pln">
   main</span><span class="pun">()</span></pre>

<p>
	وكما هو واضح، فطريقة كتابة هذا الكود كانت أبسط وأوضح وأكثر احترافية.
</p>

<h2 id="-13">
	اختبار الكود البرمجي وتصحيحه
</h2>

<p>
	يقوم مهندس البرمجيات باختبار الكود عبر تجربة تنفيذه والتأكد من أن الكود يحقق الأهداف المطلوبة، كما يقوم باكتشاف الأخطاء وتصحيحها لضمان صحة النتائج وتحسين أداء الكود. يمكنك اختبار الكود البرمجي من خلال:
</p>

<ul>
	<li>
		<strong>اختبار الوظائف الفردية</strong>: بحيث يتم اختبار كل دالة على حدة باستخدام بيانات إدخال مختلفة للتحقق من صحة النتائج
	</li>
	<li>
		<strong>اختبار التكامل</strong>: يتم التحقق من كيفية تفاعل الدوال أو الوحدات البرمجية مع بعضها البعض
	</li>
</ul>

<p>
	دعنا نأخذ مثالًا عن كيفية اختبار دوال الكود البرمجي السابق:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_901_27" style=""><span class="com"># اختبار الكود</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> testCalculateAverage</span><span class="pun">():</span><span class="pln">
    grades </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">85</span><span class="pun">,</span><span class="pln"> </span><span class="lit">90</span><span class="pun">,</span><span class="pln"> </span><span class="lit">78</span><span class="pun">,</span><span class="pln"> </span><span class="lit">92</span><span class="pun">,</span><span class="pln"> </span><span class="lit">88</span><span class="pun">]</span><span class="pln">
    expectedAverage </span><span class="pun">=</span><span class="pln"> </span><span class="lit">86.6</span><span class="pln">
    </span><span class="kwd">assert</span><span class="pln"> abs</span><span class="pun">(</span><span class="pln">calculateAverage</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> expectedAverage</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&lt;</span><span class="pln"> </span><span class="lit">0.01</span><span class="pun">,</span><span class="pln"> </span><span class="str">"خطأ في دالة حساب المتوسط"</span><span class="pln">


</span><span class="kwd">def</span><span class="pln"> testCountAboveAverage</span><span class="pun">():</span><span class="pln">
    grades </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">85</span><span class="pun">,</span><span class="pln"> </span><span class="lit">90</span><span class="pun">,</span><span class="pln"> </span><span class="lit">78</span><span class="pun">,</span><span class="pln"> </span><span class="lit">92</span><span class="pun">,</span><span class="pln"> </span><span class="lit">88</span><span class="pun">]</span><span class="pln">
    average </span><span class="pun">=</span><span class="pln"> </span><span class="lit">86.6</span><span class="pln">
    expectedCount </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3</span><span class="pln">
    </span><span class="kwd">assert</span><span class="pln"> countAboveAverage</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> expectedCount</span><span class="pun">,</span><span class="pln"> </span><span class="str">"خطأ في حساب عدد الطلاب فوق المتوسط"</span><span class="pln">


</span><span class="kwd">def</span><span class="pln"> runTests</span><span class="pun">():</span><span class="pln">
    </span><span class="com"># تشغيل اختبارات الكود </span><span class="pln">
    testCalculateAverage</span><span class="pun">()</span><span class="pln">
    testCountAboveAverage</span><span class="pun">()</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="str">"جميع الاختبارات ناجحة!"</span><span class="pun">)</span><span class="pln">


</span><span class="kwd">if</span><span class="pln"> __name__ </span><span class="pun">==</span><span class="pln"> </span><span class="str">"__main__"</span><span class="pun">:</span><span class="pln">
    runTests</span><span class="pun">()</span></pre>

<p>
	<strong>ملاحظة</strong>: يمكن استخدام الأسلوب اليدوي في الاختبار لكن في التطبيقات الاحترافية تستخدم أطر عمل مخصصة للاختبارات يمكن الاعتماد عليها.
</p>

<h2 id="-15">
	الفرق بين الكود البرمجي الاحترافي لمهندسي البرمجيات والكود العادي
</h2>

<p>
	لكي نتمكن من كتابة كود احترافي مثل مهندسي البرمجيات، يجب أن نكون قادرين على التمييز بين تقنيات كتابة الكود الاحترافي وتقنيات الكتابة العادية. تتميز الأكواد الخاصة بمهندسي البرمجيات ببعض الميزات، نذكر ما يلي:
</p>

<h3>
	عدم وجود الأكواد الميتة
</h3>

<p>
	نقصد بعدم وجود أكواد ميتة، أن لا نستعمل الأجزاء غير المستخدمة في البرنامج، لأنها تضيف تعقيدًا غير ضروري فالكود الخاص بمهندس البرمجيات المحترف يكون خاليًا منها، في المثال التالي بعض التعليمات البرمجية التي لا تحتاجها الدالة calculateAverage لحساب المتوسط الحسابي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_246_17" style=""><span class="kwd">def</span><span class="pln"> calculateAverage</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">):</span><span class="pln">
    total </span><span class="pun">=</span><span class="pln"> sum</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">
    aboveAverageCount </span><span class="pun">=</span><span class="pln"> countAboveAverage</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">,</span><span class="pln">average</span><span class="pun">)</span><span class="pln">  </span><span class="com">#تعليمة برمجية ميتة</span><span class="pln">
    average </span><span class="pun">=</span><span class="pln"> </span><span class="lit">86.6</span><span class="pln"> </span><span class="com"># تعليمة برمجية ميتة</span><span class="pln">
    unused_variable </span><span class="pun">=</span><span class="pln"> </span><span class="str">"This is not used"</span><span class="pln">  </span><span class="com"># تعليمة برمجية ميتة</span><span class="pln">
    average </span><span class="pun">=</span><span class="pln"> total </span><span class="pun">/</span><span class="pln"> len</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> average</span></pre>

<p>
	مع ذلك يجب الانتباه إلى أنه من الممكن في بعض الحالات ظهور الأكواد الميتة في المشروع بسبب تغييرات سابقة، أو أثناء تجربة حلول مختلفة، أو نتيجة استبدال منطق معين دون إزالة الكود القديم.
</p>

<h3>
	تقليل التعقيد Cyclomatic Complexity
</h3>

<p>
	يتميز كود مهندس البرمجيات المحترف بتقليل تعقيد الكود، مما يجعله أكثر قابليةً للفهم والصيانة. يجب أن تكون الدوال قصيرةً وبسيطة، بحيث لا تحتوي على الكثير من الشروط أو العمليات المعقدة.
</p>

<h3>
	التعامل مع البيانات بفعالية أكبر
</h3>

<p>
	قد يقوم الكود العادي بمعالجة البيانات بطريقة غير فعالة، مثل التكرار في التعامل مع القوائم أو استخدام العمليات البطيئة، لكن في كتابة مهندس البرمجيات للكود، لا بد له من التعامل معها بفعالية أكبر.
</p>

<p>
	نلاحظ المثال التالي طريقة عادية لكتابة الكود:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_901_29" style=""><span class="com"># الكود العادي</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> countAboveAverage</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">):</span><span class="pln">
    count </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> grade </span><span class="kwd">in</span><span class="pln"> grades</span><span class="pun">:</span><span class="pln">
        </span><span class="kwd">if</span><span class="pln"> grade </span><span class="pun">&gt;</span><span class="pln"> average</span><span class="pun">:</span><span class="pln">
            count </span><span class="pun">+=</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
            </span><span class="kwd">return</span><span class="pln"> count</span></pre>

<p>
	في حين أن الكود الاحترافي يكون أبسط شكلًا وأقل تكرارًا كما يلي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_901_31" style=""><span class="com"># الكود الاحترافي </span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> countAboveAverage</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">):</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> sum</span><span class="pun">(</span><span class="lit">1</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> grade </span><span class="kwd">in</span><span class="pln"> grades </span><span class="kwd">if</span><span class="pln"> grade </span><span class="pun">&gt;</span><span class="pln"> average</span><span class="pun">)</span></pre>

<h3>
	التفكير في قابلية التوسع
</h3>

<p>
	يتميز كود مهندس البرمجيات المحترف بالقابلية للتوسع والتعديل في المستقبل، مما يضمن أن الكود يمكن تطويره بسهولة عند الحاجة إلى إضافة ميزات جديدة على سبيل المثال:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_901_33" style=""><span class="com"># الكود العادي</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> calculateSum</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">):</span><span class="pln">
   </span><span class="kwd">return</span><span class="pln"> sum</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">
</span></pre>

<p>
	وكما نرى، فالكود أعلاه بسيط وواضح، لكنه غير قابل للتوسع أو التطوير مستقبلًا، في حين أنه يمكن كتابته بشكل أكثر احترافية قابلة للتوسع على النحو الآتي:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_901_35" style=""><span class="com"># الكود الاحترافي (قابل للتوسع)</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> calculate</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">,</span><span class="pln"> operation</span><span class="pun">):</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> operation </span><span class="pun">==</span><span class="pln"> </span><span class="str">'sum'</span><span class="pun">:</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> sum</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">elif</span><span class="pln"> operation </span><span class="pun">==</span><span class="pln"> </span><span class="str">'average'</span><span class="pun">:</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> sum</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> len</span><span class="pun">(</span><span class="pln">grades</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">else</span><span class="pun">:</span><span class="pln">
        </span><span class="kwd">raise</span><span class="pln"> </span><span class="typ">ValueError</span><span class="pun">(</span><span class="str">"Operation not supported"</span><span class="pun">)</span></pre>

<h2 id="-16">
	الخاتمة
</h2>

<p>
	إلى هنا نكون قد وصلنا إلى نهاية مقالنا الذي تناولنا فيه أساسيات كتابة كود برمجي احترافي مثل مهندسي البرمجيات. نأمل أن نكون قد قدمنا معلومات مفيدة، وساعدنا في التعرف على الأساسيات التي تساهم في تحسين المهارات البرمجية. يجب أن نتذكّر دائمًا أن البرمجة ليست مجرد كتابة أكواد، بل هي رحلة تعلم مستمرة تعتمد على التفكير المنطقي والإبداعي، وأن نحرص على تطوير مهاراتنا البرمجية باستمرار، فمجال البرمجة يشهد تطورًا متسارعًا كل يوم، مما يفتح أمامنا آفاقًا وفرصًا جديدة.
</p>

<h2 id="-17">
	المصادر
</h2>

<ul>
	<li>
		<a href="https://medium.com/javascript-scene/so-you-want-to-be-a-professional-coder-a3b5deb5329f" rel="external nofollow">So you want to be a professional coder</a>
	</li>
	<li>
		<a href="https://repoteq.com/blogs/Details/5" rel="external nofollow">أهم النصائح لكتابة أفضل كود</a>
	</li>
	<li>
		<a href="https://blog.ajsrp.com/%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D9%83%D9%88%D8%AF-%D8%A8%D8%B1%D9%85%D8%AC%D9%8A-%D8%A8%D9%83%D9%84-%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%AF%D9%84%D9%8A%D9%84%D9%83-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84/" rel="external nofollow">المدونة العربية</a>
	</li>
	<li>
		<a href="https://github.com/martinmurciego/good-books/blob/master/Clean%20Code_%20A%20Handbook%20of%20Agile%20Software%20Craftsmanship%20-%20Robert%20C.%20Martin.pdf" rel="external nofollow">Clean Code: A Handbook of Agile Software Craftsmanship</a>
	</li>
	<li>
		<a href="https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/" rel="external nofollow">The Pragmatic Programmer</a>
	</li>
</ul>

<h2 id="-18">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%85%D9%87%D9%86%D8%AF%D8%B3-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D9%85%D9%86-%D9%87%D9%88-%D9%88%D9%85%D8%A7-%D9%87%D9%8A-%D9%85%D9%87%D8%A7%D9%85%D9%87-r2264/" rel="">مهندس البرمجيات من هو وما هي مهامه</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/https://academy.hsoub.com/programming/general/%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/" rel="">تعرف على تخصص هندسة البرمجيات</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2506</guid><pubDate>Thu, 06 Feb 2025 16:00:00 +0000</pubDate></item><item><title>&#x645;&#x627; &#x647;&#x64A; &#x647;&#x646;&#x62F;&#x633;&#x629; &#x627;&#x644;&#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A;: &#x627;&#x644;&#x645;&#x647;&#x627;&#x631;&#x627;&#x62A; &#x648;&#x627;&#x644;&#x623;&#x62F;&#x648;&#x627;&#x62A; &#x648;&#x627;&#x644;&#x634;&#x647;&#x627;&#x62F;&#x627;&#x62A;</title><link>https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%87%D8%A7%D8%B1%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%B4%D9%87%D8%A7%D8%AF%D8%A7%D8%AA-r2440/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_10/------.png.d30aa3f8eecbaa3477d66f410b7a98b6.png" /></p>
<p>
	سنستعرض في مقالنا هذا ما هي هندسة البيانات وما أبرز مهام مهندس البيانات ودوره وأهميته. سنبدأ بنظرة عامة على مهام هذا التخصص، ومن ثم نغوص في تفاصيل المهام المختلفة لمهندسي البيانات وكيف تساهم في عملية التحليل واتخاذ القرار.
</p>

<h2>
	ما هي هندسة البيانات Data engineering؟
</h2>

<p>
	إن هندسة البيانات Data engineering هي عملية تصميم وتنفيذ حلول لجمع وتخزين وتحليل كميات كبيرة من البيانات ويُطلق على هذه العملية عادةً اسم <strong>ETL </strong>وهي اختصار لثلاث كلمات هي استخراج <strong>E</strong>xtract وتحويل <strong>T</strong>ransform وتحميل <strong>L</strong>oad البيانات.
</p>

<ul>
	<li>
		<strong>استخراج البيانات Extract</strong>: يعني استخراج البيانات من مصادر منوعة مثل قواعد البيانات، وملفات نصية وصفحات ويب …إلخ.
	</li>
	<li>
		<strong>تحويل البيانات Transform</strong>: يشير إلى إجراء عمليات معالجة على البيانات لتحويلها لصيغة صالحة للاستخدام في مجالات مختلفة.
	</li>
	<li>
		<strong>تحميل البيانات</strong> <strong>Load</strong>: يعني تحميل البيانات التي تمت معالجتها إلى نظام التخزين المعتمد مثل قاعدة بيانات علاقية أو نظام لتخزين البيانات الضخمة Big Data تمهيدًا لعملية تحليلها والاستفادة منها في اتخاذ قرارات مفيدة.
	</li>
</ul>

<p>
	بعد هذه المراحل الثلاثة، تبدأ مرحلة إعداد البيانات وتجهيزها في تنسيقات مختلفة كي يستخدمها المتخصصون في البيانات مثل <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AD%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">محللي البيانات</a> و<a href="https://academy.hsoub.com/programming/general/%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">علماء البيانات</a> حيث يختلف تنسيق البيانات الناتجة حسب الجهة المستهدفة.
</p>

<p>
	لذا يتوجب على مهندس البيانات معرفة كيفية تقديم أفضل طريقة لعرض كميات ضخمة من مجموعات البيانات المختلفة بطريقة يمكن تحليلها والتعامل معها سواء من قبل محلل البيانات أو عالم البيانات أو مدير المنتجات أو غيرها من الجهات التي تعنى بالتعامل مع كميات ضخمة من البيانات.
</p>

<h2 id="-1">
	ما هي مهام مهندس البيانات؟
</h2>

<p>
	مهندس البيانات هو المهندس المسؤول عن إنشاء حلول من البيانات الخام أو البيانات الأولية، فهو يتولى أمور تطوير وبناء واختبار وصيانة <a href="https://academy.hsoub.com/programming/general/%D9%87%D9%8A%D8%A7%D9%83%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-data-structures/" rel="">هياكل البيانات</a> data architectures.
</p>

<h2 id="-2">
	مهام مهندس البيانات من منظور شامل
</h2>

<p style="text-align: center;">
	<img alt="مهام مهندس البيانات.png" class="ipsImage ipsImage_thumbnailed" data-fileid="160801" data-ratio="69.25" data-unique="fj23im1oc" style="width: 400px; height: auto;" width="628" src="https://academy.hsoub.com/uploads/monthly_2024_10/280377991_.png.f8eed390005ef8965b4d4d4f832fd110.png">
</p>

<p>
	تشمل مهام مهندسي البيانات بشكل عام التعامل مع <a href="https://ar.wikipedia.org/wiki/%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA_%D8%AE%D8%A7%D9%85" rel="external nofollow">البيانات الخام row data</a>. ويتطلب ذلك منهم معرفة جيدة بلغة الاستعلام البنيوية  <a href="SQL" rel="">SQL</a> كما يحتاج لامتلاك خبرة جيدة في التعامل مع مختلف <a href="https://www.google.com/url?q=https://academy.hsoub.com/devops/servers/databases/%25D8%25A3%25D9%2586%25D9%2588%25D8%25A7%25D8%25B9-%25D9%2582%25D9%2588%25D8%25A7%25D8%25B9%25D8%25AF-%25D8%25A7%25D9%2584%25D8%25A8%25D9%258A%25D8%25A7%25D9%2586%25D8%25A7%25D8%25AA/&amp;sa=D&amp;source=docs&amp;ust=1713383664246268&amp;usg=AOvVaw23GhKSwXwSwskxreMOkUwi" rel="external nofollow">أنواع قواعد البيانات</a>، سواء كانت علاقية relational أو غير علاقية non-relational، وفهم صيغ البيانات الشائعة (مثل JSON و CSV و XML) ومعرفة الخيارات المختلفة للتعامل مع البيانات واستدعائها وما هي مزايا وعيوب كل طريقة.
</p>

<p>
	فمهندسو البيانات هم المسؤولون عن تحويل البيانات إلى تنسيق سهل الوصول، وتحديد الاتجاهات أو الأنماط المتبعة في التعامل مع مجموعات البيانات، وإنشاء خوارزميات لجعل البيانات الخام أكثر فائدة لقطاعات الأعمال. كما يتمتع مهندسو البيانات بالقدرة على تحويل البيانات الخام إلى رؤى أو قرارات مفيدة حيث يستفيد علماء البيانات من الجهود التي يبذلها مهندسو البيانات في إعداد البيانات وهذا يمكنهم من تحويلها إلى قرارات مستنيرة بسرعة وسهولة.
</p>

<p>
	على سبيل المثال، يمكن لمهندس البيانات تحديد فترات الذروة في المبيعات أو تحديد المنتجات التي يُفضل العملاء شراءها مع بعضها، وبالتالي اتخاذ قرارات بإصدار عروض ترويجية مناسبة على المبيعات أو تحسين إدارة المخزون أو غيرها من القرارات بناءً على رؤى مستمدة من البيانات.
</p>

<h2 id="-3">
	مهام مهندس البيانات بالتفصيل
</h2>

<p>
	يعمل مهندس البيانات على هياكل بيانات تتضمن عدة عناصر ومكونات، ونظرًا لأن هذه البيانات تأتي من مصادر مختلفة سواء من قواعد البيانات العلاقية أو غير العلاقية إلى جانب أنظمة خاصة وأدوات مختلفة لمعالجة البيانات. لهذا يتوجب على مهندس البيانات أن يستخدم عدة خدمات وأدوات للتعامل مع هذه البنى المختلفة وتجهيزها بطريقة مناسبة وإتاحة الوصول لها من قبل علماء البيانات.
</p>

<p>
	نوهنا سابقًا في بداية المقال لمصطلح ETL الذي يشير إلى استخراج وتحويل وتحميل البيانات حيث يستخدم مهندسو البيانات هذه المنهجية على هياكل البيانات التي ينشؤونها، ويتمثل عملهم الأساسي في اتباع هذه الخطوات الثلاثة أي استخراج البيانات الخام، وتحميلها، وتحويلها لصيغة مناسبة.
</p>

<p>
	تحتوي هذه البيانات الخام في الغالب على كثير من الأخطاء والحالات الشاذة مثل تكرار نفس البيانات وعدم التوافق والتطابق في بعض البيانات أو ما يعرف بتضارب البيانات data Inconsistency. لذا تلقى على عاتق مهندس البيانات مسؤولية مراجعة كافة البيانات التي يجمعها واقتراح طرق مناسبة لتحسين جودتها وزيادة صحتها وموثوقيتها.
</p>

<h2 id="-4">
	مثال بسيط على الأدوات التي يستخدمها مهندسو البيانات
</h2>

<p>
	هنالك عدة أدوات يمكن لمهندسي البيانات استخدامها للتعامل مع البيانات على سبيل المثال يمكنهم استخدام أداة لاستيراد بيانات تستورد فقط الصفوف التي تفي بمعايير وشروط معينة وتتجاهل أي صفوف لا تفي بهذه المعايير، حيث يمكن أن يشترط استيراد البيانات النصية فقط، أو البيانات الرقمية التي لها طول محدد دون غيرها من مصادر البيانات المتوفرة.
</p>

<p>
	كما يمكنهم استخدام سكريبتات برمجية مكتوبة بلغة مثل <a href="https://wiki.hsoub.com/Python" rel="external">لغة البرمجة بايثون</a> لتحويل أو استبدال أحرف محددة ضمن حقول البيانات والتالي يمكن لمهندس البيانات المحترف تحديد أي مشكلات موجودة في البيانات بسرعة وتحديد الأدوات والتقنيات المناسبة التي تحقق له أفضل الحلول لهذه المشكلات.
</p>

<h2 id="-5">
	كيف تصبح مهندس بيانات
</h2>

<p>
	كي تصبح مهندس بيانات محترف عليك اتباع مجموعة من الخطوات الأساسية والتي تشمل:
</p>

<ol>
	<li>
		فهم أساسيات البيانات.
	</li>
	<li>
		فهم أساسيات لغة الاستعلام البنيوية SQL.
	</li>
	<li>
		معرفة جيدة باستخدام التعابير النظامية RegEx.
	</li>
	<li>
		معرفة بالتعامل مع تنسيق جيسون JSON.
	</li>
	<li>
		امتلاك أساس نظري وممارسة عملية بتعلم الآلة ML.
	</li>
	<li>
		امتلاك خبرة جيدة بإحدى لغات البرمجة.
	</li>
</ol>

<p>
	لنشرح تاليًا كل خطوة من هذه الخطوات بتفصيل أكبر.
</p>

<h3 id="1">
	الخطوة1: فهم أساسيات البيانات
</h3>

<p>
	لابد أن يمتلك أي مهندس بيانات فهمًا جيدًا بطريقة تخزين البيانات وتنظيمها في الحاسوب. ويعرف ما هي أنواع البيانات المختلفة التي يمكن استخدامها، ويعرف مفاهيم أساسية مرتبة بالبيانات مثل:
</p>

<ul>
	<li>
		<strong>variables</strong>: وهي تمثل مساحات في الذاكرة مخصصة لتخزين البيانات.
	</li>
	<li>
		<strong>varchar</strong>: نوع بيانات يستخدم لتخزين البيانات النصية ذات حجم متغير.
	</li>
	<li>
		<strong>char</strong>: نوع بيانات يستخدم لتخزين البيانات النصية ذات حجم ثابت من الأحرف
	</li>
	<li>
		<strong>int</strong>: نوع بيانات يستخدم لتخزين الأرقام الصحيحة التي لا تحتوي على أجزاء عشرية.
	</li>
	<li>
		<strong>prime numbers</strong>: الأعداد الأولية، وهي الأعداد الطبيعية الأكبر من الصفر والتي لا يمكن قسمها على أي عدد آخر سوى 1 ونفسها دون باقٍ.
	</li>
	<li>
		named pairs: أزواج البيانات المسماة، وهي بنى معطيات تملك عنصرين الأول يمثل الاسم أو المفتاح key والثاني يمثل القيمة المقابلة له value ويعرف كيفية تخزينها في هياكل بيانات تعتمد على SQL.
	</li>
</ul>

<p>
	توفر هذه المفاهيم على بساطتها أساسًا متينًا لمهندس البيانات يساعده على فهم البيانات data ومجموعات البيانات datasets والتعامل معها بالشكل المناسب
</p>

<h3 id="2sql">
	الخطوة 2: فهم أساسيات لغة SQL
</h3>

<p>
	يعد فهم <a href="https://academy.hsoub.com/programming/sql/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B3%D8%B1%D9%8A%D8%B9%D8%A9-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%B9%D9%84%D8%A7%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D9%87%D9%8A%D9%83%D9%84%D9%8A%D8%A9-sql-r1368/" rel="">لغة SQL</a> من الأمور الأساسية المطلوبة لأي مهندس بيانات فهي اللغة الأساسية للتعامل مع <a href="https://academy.hsoub.com/programming/sql/%D9%81%D9%87%D9%85-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D8%B9%D9%84%D8%A7%D9%82%D9%8A%D8%A9-r2216/" rel="">قواعد البيانات العلائقية</a> المختلفة وتنفيذ الوظائف على البيانات وكتابة الاستعلامات المناسبة لتحقيق هذه الوظائف.
</p>

<h3 id="3regex">
	الخطوة 3: امتلاك معرفة جيدة بالتعابير النظامية RegEx
</h3>

<p>
	إن فهم <a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D8%A8%D9%8A%D8%B1-%D8%A7%D9%84%D9%86%D9%85%D8%B7%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r1374/" rel="">التعابير النظامية</a> regular expressions وطريقة استخدامها للبحث في النصوص أمر أساسي، حيث يستخدمها مهندس البيانات في معالجة وتعديل البيانات المختلفة، وتتميز التعابير النظامية بكونها قابلة للاستخدام مع جميع تنسيقات البيانات ومنصات البيانات الأساسية.
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="315" id="ips_uid_1487_6" referrerpolicy="strict-origin-when-cross-origin" src="https://academy.hsoub.com/applications/core/interface/index.html" title="YouTube video player" width="560" data-embed-src="https://www.youtube.com/embed/xvnnAX7zYAw?si=8d9yTKgZ5XRdugwW"></iframe>
</p>

<h3 id="4json">
	الخطوة 4: امتلاك خبرة في تنسيق جيسون JSON
</h3>

<p>
	من الجيد أن يمتلك مهندس البيانات خبرة عملية بتنسيق جيسون <a href="https://www.google.com/url?q=https://academy.hsoub.com/programming/javascript/%25D8%25AA%25D8%25B9%25D9%2584%25D9%2585-json-r604/&amp;sa=D&amp;source=docs&amp;ust=1713383664247587&amp;usg=AOvVaw0NB-nVa55Ed2tjuUy0_UkF" rel="external nofollow">JSON</a> الذي يعد جزءًا لا يتجزأ من قواعد البيانات غير العلاقية non-relational وهياكل البيانات data schemas بشكل خاص ويعرف طريقة كتابة استعلامات للاستعلام عن بيانات بتنسيق جيسون.
</p>

<h3 id="5">
	الخطوة 5: فهم المبادئ النظرية والتطبيق العملي لتعلم الآلة
</h3>

<p>
	إن فهم المبادئ النظرية والتطبيقات العملية لمجال تعلم الآلة <a href="https://www.google.com/url?q=https://academy.hsoub.com/programming/artificial-intelligence/%25D8%25AA%25D8%25B9%25D9%2584%25D9%2585-%25D8%25A7%25D9%2584%25D8%25A2%25D9%2584%25D8%25A9/&amp;sa=D&amp;source=docs&amp;ust=1713383664248321&amp;usg=AOvVaw1C9xx9dDeTd9YliM3b-WOD" rel="external nofollow">machine learning</a> أمر مفيد أيضًا لمهندس البيانات فهو يمكنه من تصميم الحلول لعلماء البيانات. وهو يعد أمرًا ضروريًا حتى لو لم يكن العمل باستخدام نماذج تعلم الآلة جزءًا أساسيًا من العمل اليومي لمهندس البيانات.
</p>

<h3 id="6">
	الخطوة 6: امتلاك خبرة في لغات البرمجة
</h3>

<p>
	بالرغم من أن مهندس البيانات قد لا يحتاج بالضرورة لكتابة <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A3%D9%83%D9%88%D8%A7%D8%AF-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r2244/" rel="">أكواد برمجية</a> في عمله اليومي لكن من المفيد وجود خبرة جيدة بإحدى لغات البرمجة مثل <a href="https://academy.hsoub.com/python/" rel="">لغة البرمجة بايثون Python</a> التي تتميز بمرونتها وقدرتها على التعامل مع العديد من أنواع البيانات كما تعد لغات مثل <a href="https://academy.hsoub.com/programming/java/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7-java-r2275/" rel="">جافا Java</a> وسكالا Scala وجو Go مفيدة في مجال <a href="https://academy.hsoub.com/programming/general/%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">هندسة البيانات</a>.
</p>

<h2 id="-6">
	المهارات الناعمة المفيدة لتخصص هندسة البيانات
</h2>

<p>
	يحتاج العمل في تخصص هندسة البيانات لامتلاك مجموعة من المهارات الشخصية أو المهارات الناعمة ومن أبرزها:
</p>

<ol>
	<li>
		مهارة حل المشكلات باستخدام الأساليب المعتمدة على البيانات فمن الضروري أن يمتلك مهندس البيانات منهجية لحل المشكلات قائمة على البيانات ويعتمد على المعلومات الفعلية لإرشاده ليجد الحل الأمثل.
	</li>
	<li>
		القدرة على توصيل المفاهيم المعقدة وتصويرها مرئيًا visualize إذ يحتاج مهندسو البيانات إلى التعاون مع العملاء من جهة والتعاون مع الزملاء والفرق التقنية المختلفة داخل مكان العمل ومشاركة أفكاره مع أشخاص من خلفيات مختلفة لذا يحتاج لامتلاك مهارة التواصل الفعال لشرح ما يريد التعبير عنه بشكل واضح ومفهوم.
	</li>
	<li>
		شعور كبير بالمسؤولية، فمهندس البيانات مسؤول عن حل المشكلات المعقدة في مجالات حيوية وحل هذه المشكلات بالشكل الأنسب هو أساس وجوهر وظيفة هندسة البيانات.
	</li>
</ol>

<h2 id="-7">
	الأدوات والمصادر المطلوبة في تخصص هندسة البيانات
</h2>

<p>
	يتطلب تخصص هندسة البيانات مجموعة من الأدوات المهمة والتي سنوضحها تاليًا، كما سنوضح أهم المصادر التي تشرح لك هندسة البيانات.
</p>

<h3 id="-8">
	فهم قواعد البيانات العلاقية وغير العلاقية
</h3>

<p>
	ففهم أنواع وأنظمة قواعد البيانات المختلفة المستخدمة في العالم الحقيقي أداة أساسية في تخصص هندسة البيانات مثل:
</p>

<ul>
	<li>
		أنظمة إدارة قواعد البيانات العلائقية المعتمدة على سيكوال <a href="http://%20https://academy.hsoub.com/programming/sql/" rel="external nofollow">SQL</a>  مثل <a href="https://academy.hsoub.com/devops/servers/databases/mysql/" rel="">MySQL </a> أو Microsoft SQL Server.
	</li>
	<li>
		أنظمة إدارة قواعد البيانات غير العلاقية NoSQL كقواعد البيانات المعتمدة على المستندات مثل <a href="http://%20https://academy.hsoub.com/devops/servers/databases/mongodb/" rel="external nofollow">MongoDB</a>.
	</li>
</ul>

<h3 id="-9">
	معرفة بأساسيات إدارة ومعالجة ونمذجة البيانات
</h3>

<p>
	عليك كمهندس بيانات تعلم تنسيقات ومنصات أنظمة قواعد البيانات الشائعة وتعلم طريقة إعدادها وفهم فوائد كل نظام إدارة قاعدة بيانات وطريقة التعامل معه.
</p>

<h3 id="apachekafka">
	تعلم Apache Kafka
</h3>

<p>
	تدعم مؤسسة أباتشي Apache للبرمجيات عدّة مشاريع <a href="https://academy.hsoub.com/programming/general/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D8%B6%D8%AE%D9%85%D8%A9-big-data-r1579/" rel="">للبيانات الضخمة</a>، التي يمكن لمهندس البيانات تعلم التعامل معها، ومن بين هذه المشاريع المفيدة مشروع أباتشي كافكا Apache Kafka وهو عبارة عن هو منصة بيانات مفتوحة المصدر توفّر آلية تسمح للمستخدمين بالاتصال المستمر مع مصادر البيانات وتمكنهم من استقبالها وتحديثاتها لحظيًا بموثوقية عالية.
</p>

<p>
	كما تتوفر أدوات أخرى للتعامل مع البيانات الضخمة مثل أباتشي سبارك Apache Spark الذي يعد محركًا تحليليًا مفتوح المصدر لمعالجة البيانات. وسيفيدك كمهندس بيانات تعلم طريقة إعداده على مجموعة من الأجهزة لإنشاء محرك حوسبة موزع يمكنه معالجة كميات ضخمة من البيانات بسرعة كبيرة.
</p>

<p>
	كما تُعدّ أباتشي هادوب Apache Hadoop أداة مفيدة كذلك في تحليل البيانات الضخمة فهي تسمح بمعالجة موزعة لمجموعات بيانات كبيرة وهي تتوفر بشكل خدمة مُدارة managed service متوفرة كجزء من خدمة Google Cloud Dataproc والمستخدمة في معالجة البيانات الضخمة وتعلم الآلة.
</p>

<h3>
	تعلم لغة البرمجة بايثون أو جافا
</h3>

<p>
	سيفيدك ت<a href="https://academy.hsoub.com/python/" rel="">علم لغة البرمجة بايثون</a> كمهندس بيانات بشكل كبير فبايثون هي لغة برمجة قوية ومرنة يمكنها التعامل مع العديد من أنواع البيانات. كما تعد لغة البرمجة جافا <a href="https://academy.hsoub.com/programming/java/" rel="">Java</a> لغة قوية وتشكل أساسًا للكثير من أعمال هندسة البيانات. لذا سيفيدك تعلم أساسيات جافا، بما في ذلك الصياغة النحوية والدوال والوحدات و<a href="https://academy.hsoub.com/programming/general/%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D8%A7%D9%84%D9%83%D8%A7%D8%A6%D9%86%D8%A7%D8%AA-oop/" rel="">مبادئ البرمجة كائنية التوجه oop</a> وكتابة برامج وتطبيقات باستخدامها في عملك كمهندس بيانات.
</p>

<h2 id="-10">
	شهادات مفيدة لمهندس البيانات
</h2>

<p>
	لا شك أن وجودة شهادة في مجال هندسة البيانات يساعدك في إثبات معرفتك لأصحاب العمل وستجد الكثير توفر مسارات التعلم للشهادات التالية طرقًا مُحدثة ومُثبتة ومفصلة لتعلم كل ما تحتاج إليه حول هندسة البيانات.
</p>

<h3 id="awsdataengineering">
	شهادة AWS Data Engineering
</h3>

<p>
	تضمن شهادة ‎<a href="https://cloudacademy.com/learning-paths/aws-certified-data-analytics-specialty-das-c01-certification-preparation-for-aws-1804/" rel="external nofollow">AWS Certified Data Analytics Specialty (DAS-01‎‌‌)</a> خدمات تحليل البيانات في أمازون ويب، وهي تشرح توافق خدمات البيانات في أمازون ويب مع دورة حياة البيانات ومراحلها المختلفة مثل التخزين والمعالجة والتمثيل الرسومي للبيانات وغيرها من الوظائف الضرورية التي يجب على أي مهندس بيانات معرفتها.
</p>

<h3 id="azuredataengineering">
	شهادة Azure Data Engineering
</h3>

<p>
	تفيد شهادة <a href="https://cloudacademy.com/learning-paths/dp-900-exam-preparation-microsoft-azure-data-fundamentals-2256/" rel="external nofollow">DP-900 Exam Preparation: Microsoft Azure Data Fundamentals</a> الأفراد التقنيين وغير التقنيين الراغبين في اكتساب معرفة بالمفاهيم الأساسية للبيانات وكيفية تنفيذها باستخدام خدمات بيانات Azure. ستتعلم من خلال هذه الشهادة أساسيات مفاهيم البيانات، بالإضافة إلى بيانات Azure العلاقية وغير العلاقية، وتتعلم كيفية وصف التحليلات التي تقوم بها على البيانات من خلال Azure analytics.
</p>

<p>
	كما تفيد شهادة <a href="https://cloudacademy.com/learning-paths/dp-203-exam-preparation-data-engineering-on-microsoft-azure-3191/" rel="external nofollow">DP-203 Exam Preparation: Data Engineering on Microsoft Azure</a> في تعلم كيفية إدارة ونشر مجموعة من حلول بيانات Azure، ومعرفة كيفية تصميم وبناء تخزين البيانات وتصميم وتطوير وإدارة معالجة البيانات وكيفية الحفاظ على أمانها وتحسين طرق تخزينها.
</p>

<h3 id="googleclouddataengineering">
	شهادة Google Cloud Data Engineering
</h3>

<p>
	تساعد شهادة <a href="https://cloudacademy.com/learning-paths/data-engineer-professional-certification-preparation-for-google-83/" rel="external nofollow">Google Data Engineer Exam – Professional Certification Preparation</a> في فهم تقنية الاستعلامات الضخمة BigQuery وهو خدمة لتحليل البيانات تقدمها شركة Google Cloud Platform والتعامل مع مستودع البيانات السحابي المُدار من جوجل. كما ستتعلم في هذه الدورة كيفية تحميل واستعلام ومعالجة بياناتك وكيفية استخدام تعلم الآلة في تحليل البيانات، وبناء أنابيب البيانات، واستخدام الجداول الضخمة BigTable لتطبيقات البيانات الضخمة.
</p>

<h2 id="-11">
	ما الفرق بين مهندس البيانات وعالم البيانات؟
</h2>

<p>
	قد يقوم نفس الشخص بمهام مهندس البيانات وعالم البيانات في بعض مواقع العمل لكنهما وظيفتان متكاملتان فعلماء البيانات ومهندسو البيانات يدرسون تخصصين مختلفين ويحتاجون لمجموعة مهارات مختلفة ويقومون بمهام مختلفة مرتبطة بكل تخصص.
</p>

<p>
	إذ يهتم مهندسو البيانات بتصميم البيانات واختبارها وصيانتها، بينما يهتم علماء البيانات بتنظيم البيانات ومعالجتها من أجل اكتساب رؤى ومعرفة مفيدة منها. بمعنى آخر مهندسو البيانات هم المسؤولون عن إنشاء وتجهيز البيانات التي يستخدمها علماء البيانات.
</p>

<p>
	يمكن اعتبار مهندس البيانات المتحكم الأساسي في البيانات وبنيتها التحتية فهو من يقوم <strong>بإعدادها وتجهيزها</strong>، بينما يعد عالم البيانات الشخص المتخصص الذي ي<strong>ستنتج رؤى وقرارات من هذه البيانات</strong> التي عالجها مهندس البيانات وأعدها له بالصورة المناسبة، وكلا هذين الدورين مهمان ويحتاجان إلى تعاون وثيق لتحقيق النتائج المرجوة.
</p>

<h2 id="-12">
	ما هي هندسة البيانات الضخمة
</h2>

<p>
	إن هندسة البيانات الضخمة Big Data كلمة رائجة اليوم وهي مصطلح شامل يتضمن كل ما يتعلق بعالم هندسة البيانات. ففي تخصص هندسة البيانات الضخمة يتوجب التعامل مع أنظمة معالجة البيانات الضخمة وقواعد بيانات موجودة في بيئات حوسبة سحابية واسعة النطاق والاستفادة من طبيعتها الموزعة وقابليتها للتوسع بالإضافة سهولة تثبيتها وإعدادها السريع الأمر الذي يساهم بشكل كبير في تسريع عملية التطوير والنشر.
</p>

<h2 id="-13">
	أسئلة شائعة حول هندسة البيانات
</h2>

<p>
	نختم المقال بمجموعة من الأسئلة الشائعة حول هندسة البيانات ونوفر لك إجابات موجزة عليها.
</p>

<h3 id="-14">
	هل هندسة البيانات مجال سهل؟
</h3>

<p>
	لا تعد هندسة البيانات من التخصصات البرمجية السهلة، ولكنها بالتأكيد مهنة مميزة ومجزية ويمكن تعلمها ذاتيًا والتفوق بها في مجال العمل ولاسيما أنها مجال مطلوب بكثرة وهناك نقص في الكفاءات الفعلية في سوق العمل.
</p>

<h3 id="-15">
	هل يحتاج مهندس البيانات لمعرفة بالرياضيات؟
</h3>

<p>
	لا تتطلب هندسة البيانات معرفة متعمقة بالرياضيات، لكن من المفيد أن يعرف مهندس البيانات أساسيات الإحصاءات والاحتمالات لفهم ما سيقوم به علماء البيانات في فريق عمله، كما سيحتاج لامتلاك فهم جيد <a href="https://academy.hsoub.com/programming/general/%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%81%D9%83%D9%8A%D8%B1-%D8%A7%D9%84%D9%85%D9%86%D8%B7%D9%82%D9%8A-%D9%81%D9%8A-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r2095/" rel="">للتفكير المنطقي</a> وحل المشكلات من منظور هندسة البرمجيات وهندسة السحابة لحل المشكلات المختلفة التي قد يواجهها في عمله.
</p>

<h3 id="-16">
	هل هناك طلب على مهندسي البيانات في سوق العمل؟
</h3>

<p>
	نعم، هناك طلب كبير على مهندسي البيانات، خاصة مع اهتمام شركات الأعمال مؤخرًا على علم البيانات المعتمدة على عمل مهندسي البيانات. فالطلب كبير على مهندسي البيانات الخبراء القادرين على التعامل مع البيانات بكفاءة واحترافية وإحداث تغيير إيجابي في العمل.
</p>

<h3 id="-17">
	هل يحتاج مهندس البيانات إلى معرفة بالبرمجة؟
</h3>

<p>
	نعم، فقد يحتاج مهندسو البيانات لكتابة العديد من الأكواد البرمجية لتنظيم وإدارة خطوط أنابيب البيانات data pipeline والتي تمثل سلسلة من الخطوات يتم خلالها تحميل وتنظيف وتحويل وتحليل البيانات من مصادر مختلفة إلى الوجهة المطلوبة، لذا يحتاج مهندس البيانات لمعرفة جيدبو بلغات البرمجة مثل بايثون وجافا و R ولغات التعامل مع قواعدالبيانات SQL وامتلاك مهارة حل المشكلات و<a href="https://academy.hsoub.com/programming/general/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-r1342/" rel="">تصحيح الأخطاء البرمجية</a>.
</p>

<h3 id="-18">
	كم يكسب مهندسو البيانات؟
</h3>

<p>
	تعد هندسة البيانات مهنة مجزية وتوضح بعض الأرقام الموجودة على مواقع العمل الشهيرة أن متوسط رواتب مهندسي البيانات في الولايات المتحدة (عام 2022) مرتفع مقارنة ببقية المهن حيث يبلغ متوسط رواتب مهندسي البيانات حسب موقع Glassdoor حوالي 112,000 دولار سنويًا، ويبلغ 93.000 دولار سنويًا حسب موقع Payscale.
</p>

<h2 id="-19">
	الخلاصة
</h2>

<p>
	بهذا نكون قد وصلنا لختام مقالنا الذي شرحنا فيه أهم المفاهيم المرتبطة بتخصص هندسة البيانات Data engineering وبينا  أهميته وطرق دراسته والطلب عليه في سوق العمل، كما وضحنا أبرز مهام مهندس البيانات والأعمال التي يقوم بها جملة وتفصيلًا، ونرجو أن نكون قد أجبناك على أهم الأسئلة المرتبطة بهذا المجال الحيوي. إذا كان لديك أي سؤال حول ما ورد في المقال يمكنك تركه في قسم التعليقات أسفل المقال.
</p>

<p>
	ترجمة وبتصرف للمقال <a href="https://cloudacademy.com/blog/what-is-data-engineering-skills-tools-and-certifications/" rel="external nofollow">What is Data Engineering? Skills, Tools, and Certifications</a>
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">الدليل الشامل إلى هندسة البيانات Data Engineering</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">علم البيانات Data science: الدليل الشامل</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%81%D9%88%D8%A7%D8%A6%D8%AF-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">ما هي فوائد تعلم البرمجة؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A3%D8%B9%D9%84%D9%89-%D8%AA%D8%AE%D8%B5%D8%B5%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A3%D8%AC%D8%B1%D9%8B%D8%A7-r1939/" rel="">تعرف على أعلى تخصصات البرمجة أجرًا</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%85%D9%87%D9%86%D8%AF%D8%B3-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D9%85%D9%86-%D9%87%D9%88-%D9%88%D9%85%D8%A7-%D9%87%D9%8A-%D9%85%D9%87%D8%A7%D9%85%D9%87-r2264/" rel="">مهندس البرمجيات من هو وما هي مهامه</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/databases/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">مدخل إلى تصميم قواعد البيانات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%85%D9%86-%D9%87%D9%88-%D9%85%D9%87%D9%86%D8%AF%D8%B3-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D9%88%D9%85%D8%A7-%D8%A3%D8%A8%D8%B1%D8%B2-%D9%85%D9%87%D8%A7%D9%85%D9%87-r2319/" rel="">من هو مهندس الذكاء الاصطناعي وما أبرز مهامه</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2440</guid><pubDate>Mon, 04 Nov 2024 15:07:00 +0000</pubDate></item><item><title>&#x645;&#x627; &#x623;&#x646;&#x648;&#x627;&#x639; &#x627;&#x644;&#x623;&#x62E;&#x637;&#x627;&#x621; &#x627;&#x644;&#x62A;&#x64A; &#x62A;&#x638;&#x647;&#x631; &#x639;&#x644;&#x649; &#x645;&#x648;&#x642;&#x639; &#x625;&#x644;&#x643;&#x62A;&#x631;&#x648;&#x646;&#x64A;&#x60C; &#x648;&#x643;&#x64A;&#x641; &#x646;&#x62A;&#x639;&#x627;&#x645;&#x644; &#x645;&#x639;&#x647;&#x627;&#x61F;</title><link>https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-%D8%A7%D9%84%D8%AA%D9%8A-%D8%AA%D8%B8%D9%87%D8%B1-%D8%B9%D9%84%D9%89-%D9%85%D9%88%D9%82%D8%B9-%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A%D8%8C-%D9%88%D9%83%D9%8A%D9%81-%D9%86%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9%D9%87%D8%A7%D8%9F-r2417/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_09/-----------.png.216177a84d808dcda61608088a630513.png" /></p>
<p>
	سنكتشف في مقال اليوم أهم الأخطاء التي تظهر في المواقع الإلكترونية وكيفية التعامل معها بكفاءة، وسنركز على تحديد وتصحيح الأخطاء الشائعة التي قد تؤثر سلبًا على تجربة المستخدم وأداء الموقع بشكل عام، ونوضح أهم أنواعها، ونوضح كيفية اكتشاف هذه الأخطاء وآلية التعامل معها، كما سنتناول كيفية التعامل مع الأخطاء الأمنية مثل الثغرات والتهديدات الأمنية التي قد تعرض سلامة الموقع وبيانات المستخدمين للخطر وكيفية اتخاذ خطوات فعالة لتحسين جودة وأمان موقعك على الويب، مما يساهم في تعزيز تجربة المستخدم وتعزيز مصداقية موقعك على الإنترنت.
</p>

<h2 id="-2">
	مفهوم أخطاء المواقع الإلكترونية
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="158694" href="https://academy.hsoub.com/uploads/monthly_2024_09/-----------.png.af4de6072a00f872e5de736c82b543e8.png" rel=""><img alt="أخطاء المواقع " class="ipsImage ipsImage_thumbnailed" data-fileid="158694" data-ratio="62.50" data-unique="8ffbogrl6" style="width: 400px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2024_09/-----------.thumb.png.310cf6023135582098c1d2b7be5f0314.png"></a>
</p>

<p>
	الأخطاء في الواقع هي مشاكل تقنية أو تصميمية تنشأ على <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8%D8%9F-r2094/" rel="">صفحات الويب</a> وتؤثر بشكل مباشر على أداء الموقع وتجربة المستخدم. تتنوع هذه الأخطاء بشكل كبير وقد تشمل مشكلات التحميل البطيء للصفحات، أو عدم استجابة الروابط، أو الحصول على <a href="https://academy.hsoub.com/design/user-experience/%D9%83%D9%8A%D9%81-%D8%AA%D8%B9%D9%8A%D8%AF-%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D9%85%D9%88%D9%82%D8%B9-%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A-%D9%82%D8%A7%D8%A6%D9%85-%D8%A8%D8%A7%D9%84%D8%B4%D9%83%D9%84-%D8%A7%D9%84%D8%B5%D8%AD%D9%8A%D8%AD-r519/" rel="">تصميم موقع </a>غير ملائم يُصعّب على المستخدمين الاستفادة من المحتوى بشكل فعال فهذه الأخطاء قد تتسبب في تراجع <a href="https://academy.hsoub.com/marketing/search-engine-optimisation/%D8%AA%D8%AD%D8%B3%D9%8A%D9%86-%D8%AA%D8%B1%D8%AA%D9%8A%D8%A8-%D8%A7%D9%84%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D9%81%D9%8A-%D9%86%D8%AA%D8%A7%D8%A6%D8%AC-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-%D8%A8%D8%A7%D9%84%D9%86%D8%B3%D8%A8%D8%A9-%D9%84%D9%84%D8%B4%D8%B1%D9%83%D8%A7%D8%AA-r466/" rel="">ترتيب الموقع</a> في نتائج محركات البحث، وبالتالي فإن فهمها وتصحيحها يعد أمرًا حيويًا لنجاح أي موقع على الإنترنت.
</p>

<h2 id="-3">
	كيف تؤثر الأخطاء سلبًا على الموقع الإلكتروني؟
</h2>

<p>
	تعتبر الأخطاء مشاكل فعلية تواجه أصحاب المواقع و تستوجب التدخل المباشر والسريع لحلها، فكلما تأخرت في حلها، كلما زادت الأضرار الحاصلة في الموقع بسببها، فهذه الأخطاء قد تؤدي إلى تأثيرات سلبية متعددة على الأداء والتجربة العامة للمستخدمين، من بينها:
</p>

<ol>
	<li>
		<strong>تقليل مصداقية الموقع</strong>: إذا تكرر تعرض المستخدم لأخطاء أو مشاكل تقنية، سيؤثر هذا سلبًا على ثقته في جودة الموقع ومصداقيته. فعندما يواجه المستخدم على سبيل المثال صعوبة في تصفح موقع ما، أو يتعرض لمشكلات تقنية متكررة فيه، فإنه سيفقد ثقته به ويفضل بالتأكيد التعامل مع مواقع أخرى تقدم تجربة مستخدم أفضل.
	</li>
	<li>
		<strong>تقليل التحويلات والمبيعات</strong>: ستتسبب الأخطاء في الموقع في تراجع معدلات الزيارات التي تتحول إلى مبيعات. فإذا كان الموقع مخصصًا لأغراض تجارية، فإن وجود الأخطاء قد يثير القلق لدى الزوار ويقلل رغبتهم في استكشاف منتجات أو خدمات الموقع، وبالتالي يقلل من احتمالية إتمام عمليات الشراء.
	</li>
	<li>
		<strong>التأثير على ترتيب الموقع في محركات البحث</strong>: وهذا يحدث عندما تواجه المواقع أخطاء تقنية مثل بطئ التحميل أو ظهور صفحات الخطأ، مما يؤدي إلى تراجع رتبة الموقع في نتائج البحث وبالتالي لن يتمكن المستخدمون من إيجاد الموقع بسهولة، مما يقلل بالتالي من رؤيتهم له وتفاعلهم معه.
	</li>
	<li>
		<strong>تدهور تجربة المستخدم</strong>: يحدث عندما يواجه المستخدم <a href="https://academy.hsoub.com/marketing/search-engine-optimisation/%D8%A7%D9%84%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-%D8%A7%D9%84%D8%B4%D8%A7%D8%A6%D8%B9%D8%A9-%D9%81%D9%8A-%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D8%A7%D9%84%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%AA%D9%8A-%D8%AA%D8%B6%D8%B1-%D8%A8%D8%AA%D8%AD%D8%B3%D9%8A%D9%86-%D9%85%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-r644/" rel="">أخطاء في تصميم الموقع</a>، أو يواجه صعوبات في التفاعل مع هذا الموقع، مما يؤثر سلبًا على تجربته العامة. هذا الوضع قد يجعل المستخدم يشعر بالإحباط ويتخلى عن استخدام الموقع بسرعة، مما يؤدي بالتالي لفقدان الزوار وانخفاض معدلات التفاعل والتحويل.
	</li>
	<li>
		<strong>تعريض البيانات للخطر</strong>: يحدث عندما ترتبط الأخطاء بالأمان، مما قد تعرض بيانات المستخدمين للخطر، ويؤدي إلى فقدان الثقة في الموقع، والتسبب في مشاكل قانونية وسمعة سلبية.
	</li>
</ol>

<p>
	ونظرًا لأهمية تفادي مصادفة مثل هذه الآثار السلبية أو حتى التقليل من حدتها قدر الإمكان، فلابد من فحص وتصحيح الأخطاء على المواقع باستمرار وبسرعة لضمان سلامة الموقع وتحسين تجربة مستخدميه.
</p>

<h2 id="-4">
	أنواع أخطاء المواقع الإلكترونية
</h2>

<p>
	هناك أنواع متعددة من الأخطاء التي يمكن أن تؤثر على أداء الموقع وتجربة المستخدم بشكل سلبي سنذكر هنا أشهرها، مع ذلك يمكن القول أن الأخطاء بالعموم على الرغم من كثرتها إلا أنها تنقسم إلى فئتين أساسيتين هما:
</p>

<ol>
	<li>
		الأخطاء الخاصة بالجانب التقني.
	</li>
	<li>
		الأخطاء الخاصة بالتصميم.
	</li>
</ol>

<h3>
	1. الأخطاء التقنية في مواقع الويب
</h3>

<p>
	هي الأخطاء التي تتعلق <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8/" rel="">ببرمجة مواقع الويب</a>، والتنفيذ التقني لها، وتشمل مشكلات الكود البرمجي وقد تؤدي إلى عدم عمل وظائف الموقع بالشكل الصحيح. ومن بين هذه الأخطاء قد تكون أخطاء في لغة البرمجة المستخدمة في تطوير الموقع، والتي يمكن أن تتسبب في عدم تنفيذ الأوامر بشكل صحيح.
</p>

<p>
	كما قد تحدث أخطاء في التواصل بين قواعد البيانات وصفحات الويب، مما يؤثر على استرجاع البيانات بشكل صحيح وعرضها للمستخدمين. ولحل هذه المشكلات، يتطلب الأمر فحصًا دقيقًا للشفرة وتصحيح الأخطاء واختبارها للتأكد من استقرار وأداء الموقع
</p>

<h3>
	2. الأخطاء التصميمية في مواقع الويب
</h3>

<p>
	تشمل العديد من الجوانب مثل تخطيط الصفحة بشكل غير فعال، أو استخدام الألوان والخطوط بطريقة غير ملائمة، مما يؤثر على سهولة القراءة وجاذبية الموقع للمستخدمين. وتعيق هذه الأخطاء تصفح الموقع بشكل سلس وفعال، وتقلل تجربة المستخدمين الإيجابية أثناء تفاعلهم مع المحتوى. فمن خلال تصميم صفحات الويب بشكل متناسق وجذاب، وضمان <a href="https://academy.hsoub.com/design/user-interface/%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-%D8%A7%D9%84%D8%A3%D9%84%D9%88%D8%A7%D9%86-%D8%A7%D9%84%D9%85%D9%86%D8%A7%D8%B3%D8%A8%D8%A9-%D9%84%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-r757/" rel="">اختيار الألوان</a> والخطوط بشكل متناسق ومناسب، يمكن تجنب هذه الأخطاء وتعزيز تجربة المستخدم وجاذبية الموقع بشكل عام.
</p>

<h2 id="-5">
	أهم الأخطاء التقنية في مواقع الويب
</h2>

<p>
	تشمل أهم الأخطاء التقنية التي يمكن أن تظهر في مواقع الويب ما يلي:
</p>

<ul>
	<li>
		خطأ 301 Moved Permanently
	</li>
	<li>
		خطأ  302 Found
	</li>
	<li>
		خطأ 304 Not Modified
	</li>
	<li>
		خطأ 307 Temporary Redirect
	</li>
	<li>
		خطأ 403 Forbidden
	</li>
	<li>
		خطأ 400 Bad Request
	</li>
	<li>
		خطأ 401 Unauthorized
	</li>
	<li>
		خطأ 403 Forbidden
	</li>
	<li>
		خطأ 404 Not Found
	</li>
	<li>
		خطأ 408 Request Timeout
	</li>
	<li>
		خطأ 500 Internal Server Error
	</li>
	<li>
		خطأ 501 Not Implemented
	</li>
	<li>
		خطأ 502 Bad Gateway
	</li>
</ul>

<p>
	لنشرح بالتفصيل أسباب حدوث كل خطا من هذه الأخطاء التقنية والحلول الفعالة للتعامل معه.
</p>

<h3 id="301movedpermanently">
	خطأ 301 Moved Permanently
</h3>

<p>
	هو خطأ يحدث عندما يقوم الخادم بإعادة توجيه الزوار إلى عنوان URL جديد دائمًا. تحدث هذه الحالة عندما ينقل المحتوى بشكل دائم إلى موقع جديد. والسبب الأساسي لحدوث هذا الخطأ هو أن العنوان الذي يحاول الزائر الوصول إليه قد تغير نهائيًا. ولحل هذا الخطأ، يمكن اتباع هذه الخطوات:
</p>

<ol>
	<li>
		<strong>التأكد من صحة عنوان URL</strong>: يجب التحقق من عنوان URL الجديد الذي يجري توجيه الزوار إليه، فقد يحدث هذا الخطأ عند توجيه الزوار إلى عنوان URL غير صحيح.
	</li>
	<li>
		<strong>تحديث روابط الموقع</strong>: في حالة وجود روابط داخلية أو خارجية تشير للعنوان القديم، يجب تحديثها بالعنوان الجديد.
	</li>
	<li>
		<strong>التحقق من إعدادات التوجيه</strong>: يجب التحقق من إعدادات التوجيه على الخادم للتأكد من أن صحة التوجيه وإرجاع الكود 301.
	</li>
	<li>
		<strong>تحديث محتوى الصفحة</strong>: في حالة وجود محتوى يشير للعنوان القديم، يجب تحديثه بالعنوان الجديد.
	</li>
</ol>

<h3 id="302found">
	خطأ 302 Found
</h3>

<p>
	يحدث عندما يقوم الخادم بإعادة توجيه الزوار إلى عنوان URL مؤقتًا. وهو يشير لأن المورد المطلوب مؤقتًا موجود في مكان آخر ويجب على العميل زيارة هذا المكان للحصول على المورد. ولحل هذا الخطأ، يمكن اتباع الخطوات التالية:
</p>

<ol>
	<li>
		<strong>التحقق من صحة عنوان URL الموجود في إعادة التوجيه</strong>: يجب التحقق من أن العنوان URL الموجود في رأس الاستجابة يشير للمكان الصحيح حيث يمكن العثور على المورد المطلوب.
	</li>
	<li>
		<strong>التحقق من إعدادات التوجيه</strong>: يجب التأكد من أن إعدادات التوجيه على الخادم مضبوطة بشكل صحيح لإرسال رمز الحالة 302 بشكل صحيح.
	</li>
	<li>
		<strong>التحقق من الروابط</strong>: يجب التحقق من الروابط في الصفحة المطلوبة والتأكد من أنها تشير إلى العنوان URL الصحيح.
	</li>
	<li>
		<strong>التحقق من زمن الانتهاء Expiration time</strong>: في بعض الأحيان، يمكن أن ينتج هذا الخطأ عن وقت انتهاء صلاحية إعادة التوجيه، لذا يجب التحقق من ذلك وتجديده إذا لزم الأمر.
	</li>
</ol>

<h3 id="304notmodified">
	خطأ 304 Not Modified
</h3>

<p>
	هو رمز حالة في البروتوكول HTTP يُستخدم لإشعار العميل أن النسخة المخزنة محليًا من المورد لم يتم تعديلها منذ آخر مرة طلب فيها المورد. يُستخدم هذا الرمز لتقليل حجم حركة المرور بين الخادم والعميل عندما يكون المحتوى غير معدل. والتعامل مع هذا الخطأ 304 Not Modified، يُفضل اتخاذ الخطوات التالية:
</p>

<ol>
	<li>
		استخدام طلبات مشروطة (Conditional Requests): استخدام طلبات مثل "If-Modified-Since" و "If-None-Match" يمكنه تقليل حجم حركة المرور. يتيح هذا للخادم تحديد ما إذا كان يجب إرسال المحتوى أم إشعار العميل بأن النسخة المحلية لديه لا تزال صالحة.
	</li>
	<li>
		تحديث العناصر المخزنة محليًا: يمكن تجنب حدوث هذا الخطأ بتحديث العناصر المخزنة محليًا عند الحاجة. هذا يمكن أن يكون مفيدًا لتجنب تحميل نسخة جديدة من المورد إذا كانت لا تزال صالحة.
	</li>
	<li>
		فهم رؤوس الاستجابة (Response Headers): يجب على المطور فهم رؤوس الاستجابة التي يتم إرجاعها مع رمز الحالة 304 لضمان أن التفاعل مع المورد يتم بشكل صحيح. وباتباع هذه الإجراءات، يمكن للمطورين التعامل بشكل فعال مع خطأ 304 Not Modified وضمان تحسين أداء التحميل واستخدام فعال لحركة المرور.
	</li>
</ol>

<h3 id="307temporaryredirect">
	4. خطأ 307 Temporary Redirect
</h3>

<p>
	هو رمز حالة في بروتوكول HTTP يُستخدم لإعادة توجيه الزوار إلى عنوان URL مؤقتًا. يُشير هذا الخطأ لأن المورد المطلوب مؤقتًا متواجد في موقع آخر ويجب على العميل زيارة هذا الموقع للحصول على المورد. و للتعامل مع هذا الخطأ يُمكن اتخاذ الخطوات التالية:
</p>

<ol>
	<li>
		ا<strong>لتحقق من صحة عنوان URL الجديد</strong>: يجب التحقق من أن العنوان URL الذي يتم توجيه الزوار إليه صحيح ويؤدي إلى المورد المطلوب بشكل صحيح.
	</li>
	<li>
		<strong>التحقق من إعدادات التوجيه</strong>: يجب التأكد من أن إعدادات التوجيه على الخادم مضبوطة بشكل صحيح لإرسال رمز الحالة 307 بشكل صحيح.
	</li>
	<li>
		<strong>التحقق من الروابط:</strong> يجب التحقق من صحة الروابط في الصفحة المطلوبة والتأكد من أنها تشير إلى العنوان URL الصحيح الذي يتم توجيه الزوار إليه.
	</li>
	<li>
		<strong>تحديث المحتوى إن لزم الأمر</strong>: في حالة وجود محتوى يشير إلى العنوان القديم، يجب تحديثه بالعنوان الجديد.
	</li>
</ol>

<h3 id="400badrequest">
	خطأ 400 Bad Request (طلب غير صالح)
</h3>

<p>
	هو خطأ يظهر عندما يرسل المتصفح أو العميل طلبًا غير صالح إلى الخادم. يمكن أن يكون السبب وراء هذا الخطأ متعددًا، ولكن في الغالب يرتبط بصيغة أو بنية الطلب التي تم إرسالها.
</p>

<p>
	<strong>كيف يحدث هذا الخطأ؟</strong>
</p>

<ol>
	<li>
		<strong>صيغة الطلب غير صالحة</strong>: بمعني قد يكون هناك خطأ في بنية الطلب الذي تم إرساله، مثل تنسيق خاطئ لعنوان URL أو بيانات الطلب.
	</li>
	<li>
		<strong>طلب مفقود أو غير كامل</strong>: قد يكون الطلب ناقصًا أو يفتقد إلى معلومات مطلوبة، مما يجعله غير قابل للمعالجة من قبل الخادم.
	</li>
</ol>

<p>
	<strong>الحلول المقترحة</strong>
</p>

<ol>
	<li>
		<strong>فحص بيانات الطلب</strong>: تحقق من بنية ومحتوى الطلب المرسل إلى الخادم وتأكد من أنها صالحة وتتوافق مع المتطلبات المحددة.
	</li>
	<li>
		<strong>التحقق من عنوان </strong>URL: تأكد من أن عنوان URL الذي تم إرسال الطلب من خلاله صحيح ويشير إلى الموارد الصحيحة على الخادم.
	</li>
	<li>
		<strong>التحقق من المعلومات والبيانات</strong>: تأكد من توفر جميع المعلومات والبيانات المطلوبة في الطلب، وأنها مكتملة وغير مفقودة.
	</li>
	<li>
		<strong>استخدام رموز الحالة الصحيحة</strong>: في حالة حدوث خطأ من جانب العميل، استخدم رمز الحالة 400 للإشارة إلى أن الطلب غير صالح.
	</li>
	<li>
		<strong>تحليل السجلات والأخطاء</strong>: افحص سجلات الخادم لمزيد من المعلومات حول سبب الخطأ، ثم حدد الإجراءات اللازمة لتصحيحه.
	</li>
</ol>

<h3 id="401unauthorized">
	خطأ 401 Unauthorized (الوصول غير المصرح به)
</h3>

<p>
	يحدث الخطأ 401 Unauthorized عندما يطلب المستخدمون موارد محمية بكلمة مرور أو بيانات اعتماد، ولكنهم لم يقدموا هذه البيانات أو قدموها بشكل غير صحيح. لنوضح كيفية حدوثه وكيفية التعامل معه.
</p>

<p id="-8">
	<strong>كيف يحدث هذا الخطأ؟</strong>
</p>

<ol>
	<li>
		الوصول غير المصرح به: فممكن يتطلب المستخدمون موارد تتطلب توثيق للوصول إليها، مثل صفحة محمية بكلمة مرور أو ملف محمي.
	</li>
	<li>
		عدم تقديم بيانات الاعتماد الصحيحة: المستخدمون قد يقدمون بيانات اعتماد غير صالحة، أو قد لا يقدمون أي بيانات اعتماد عند الطلب.
	</li>
</ol>

<p id="-9">
	<strong>كيفية التعامل معه</strong>
</p>

<ol>
	<li>
		<strong>تقديم بيانات الاعتماد الصحيحة</strong>: إذا كانت الموارد محمية بكلمة مرور أو بيانات اعتماد، يجب على المستخدمين تقديم البيانات الصحيحة للوصول إليها.
	</li>
	<li>
		<strong>فحص إعدادات الوصول</strong>: تأكد من أن إعدادات الوصول إلى الموارد مثل الصفحات المحمية بكلمة مرور مُكوَّنة بشكل صحيح وأن الأذونات اللازمة موجودة.
	</li>
	<li>
		<strong>تقديم رمز استجابة مناسب</strong>: استخدم رمز الحالة 401 لإشعار المستخدمين بأنهم غير مصرح لهم بالوصول إلى الموارد، واحتمالية الحصول على إذن معين.
	</li>
	<li>
		<strong>تسجيل الدخول مرة أخرى</strong>: في حالة وجود خطأ في بيانات الاعتماد، يجب على المستخدمين إعادة تسجيل الدخول باستخدام بيانات صحيحة.
	</li>
	<li>
		<strong>توفير رسالة توضيحية</strong>: قدم رسالة توضيحية تشرح للمستخدمين السبب الرئيسي والخطوات اللازمة للحصول على الوصول المصرح به.
	</li>
</ol>

<h3 id="403forbidden">
	خطأ 403 Forbidden
</h3>

<p>
	يظهر هذا الخطأ عندما يكون لدى المستخدم الطلبيات الصحيحة للوصول إلى الموارد، ولكنه غير مصرح له بالوصول إليها. هذا الخطأ يُرسل من قبل الخادم إلى المتصفح للإشارة إلى أن الوصول إلى الموارد المطلوبة ممنوع. إليك سبب ظهوره وخطوات لحل المشكلة.
</p>

<p id="-10">
	<strong>كيف يحدث هذا الخطأ؟</strong>
</p>

<ol>
	<li>
		أذونات وصلاحيات محدودة: أي عندما تكون لدى المستخدم صلاحيات محدودة أو غير كافية للوصول إلى الموارد المطلوبة.
	</li>
	<li>
		تكوين خاطئ للخادم: قد يكون هناك خطأ في تكوينات الخادم تمنع الوصول إلى الموارد، مثل قواعد الوصول أو تكوينات ملف htaccess.
	</li>
</ol>

<p id="-11">
	<strong>كيفية التعامل معه</strong>
</p>

<ol>
	<li>
		<strong>فحص صلاحيات الوصول</strong>: تأكد من أن المستخدم لديه الأذونات الصحيحة للوصول إلى الموارد المطلوبة، وحدِّث هذه الأذونات إن لزم الأمر.
	</li>
	<li>
		ا<strong>لتحقق من إعدادات الخادم</strong>: افحص إعدادات الخادم مثل ملفات htaccess للتأكد من أنها لا تحظر الوصول إلى الموارد المطلوبة.
	</li>
	<li>
		<strong>التحقق من القيود الأمنية</strong>: تأكد من عدم وجود قيود أمنية تمنع الوصول إلى الموارد، مثل جدران الحماية أو قواعد الجدار الناري.
	</li>
	<li>
		<strong>الاتصال بمسؤول النظام أو مدير الموقع</strong>: إذا كنت غير قادر على حل المشكلة بنفسك، فيمكنك الاتصال بمسؤول النظام أو مدير الموقع لمساعدتك في تحديد سبب الخطأ وحله.
	</li>
</ol>

<h3 id="404notfound">
	خطأ 404 Not Found (الصفحة غير متاحة)
</h3>

<p>
	يظهر هذا الخطأ عندما يحاول المستخدم الوصول إلى صفحة على الموقع ولكن الخادم لا يستطيع العثور عليها. هناك عدة أسباب لظهور هذه الخطأ وطرق لتفاديها وتصحيحها.
</p>

<p id="-12">
	<strong>كيف يحدث هذا الخطأ؟</strong>
</p>

<p>
	عندما تواجه رسالة الخطأ 404، أعرف أن هناك ثلاثة أسباب رئيسية قد تكون وراء ذلك
</p>

<ol>
	<li>
		ربما المسار الذي تحاول الوصول إليه غير صحيح، أو ربما حُذفت الصفحة.
	</li>
	<li>
		ربما الرابط الذي اتبعته تالف أو غير صحيح، مما يمنعك من الوصول إلى المحتوى المطلوب.
	</li>
	<li>
		قد يكون هناك تغيير في تنظيم الموقع دون تحديث الروابط، مما يؤدي إلى ظهور الخطأ 404.
	</li>
</ol>

<p id="-13">
	<strong>كيفية التعامل معه</strong>
</p>

<ol>
	<li>
		<strong>التأكد من استخدام الرابط الصحيح: </strong>تأكد من استخدام رابط للصفحة الصحيحة المناسبة، وتجنب استخدام الروابط التالفة أو الروابط غير الصحيحة.
	</li>
	<li>
		<strong>استخدام إعادة التوجيه (Redirects)</strong>: في حالة تغيير مسار الصفحة، استخدم إعادة التوجيه 301 فهذا يسمح بتوجيه المستخدمين تلقائياً إلى الصفحة الجديدة بدلاً من ظهور خطأ 404.
	</li>
	<li>
		<strong>توفير صفحة خطأ مخصصة (Custom 404 Page)</strong>: ابنِ <a href="https://academy.hsoub.com/programming/php/wordpress/%D9%83%D9%8A%D9%81-%D8%AA%D9%86%D8%B4%D8%A3-%D8%B5%D9%81%D8%AD%D8%A9-%D8%AE%D8%B7%D8%A3-404-%D9%85%D8%AE%D8%B5%D8%B5%D8%A9-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r626/" rel="">صفحة خطأ مخصصة</a> توضح للزوار أنهم وصلوا إلى صفحة غير متوفرة، وتقدم روابط أخرى للمحتوى المتاح على الموقع. يمكن أن توفر هذه الصفحة توجيهًا سريعًا للمستخدمين إلى المحتوى الصحيح.
	</li>
	<li>
		<strong>التحقق الدوري من الروابط</strong>: قم بفحص الروابط بانتظام للتأكد من صحتها وسلامتها. عند اكتشاف أي روابط معطلة أو تالفة، أصلحها على الفور لتجنب خطأ 404.
	</li>
</ol>

<h3 id="408requesttimeout">
	خطأ 408 Request Timeout (الطلب المتأخر)
</h3>

<p>
	يحدث هذا الخطأ عندما يستغرق الخادم وقتًا طويلاً جدًا في الاستجابة للطلب الذي تم إرساله من قبل المتصفح أو العميل، ويتسبب ذلك في إنهاء الاتصال من قبل العميل بعد فترة زمنية محددة. سيشعر المستخدم بإحباط عندما يواجه خطأ الطلب المتأخر، خاصة إذا كان يتوقع الاستجابة الفورية، وفي حالة إرسال البيانات من المتصفح إلى الخادم قبل انقضاء مهلة الطلب، قد يفقد المستخدم البيانات التي لم تحفظ بشكل صحيح.
</p>

<p id="-15">
	<strong>كيفية التعامل معه</strong>
</p>

<ol>
	<li>
		<strong>زيادة مهلة الطلب:</strong> قم بزيادة مهلة الطلب على الخادم لتمديد الوقت المسموح به للاستجابة للطلبات.
	</li>
	<li>
		<strong>تحسين أداء الخادم</strong>: حسن أداء الخادم عن طريق تحسين إعدادته أو زيادة الموارد المتاحة له.
	</li>
	<li>
		<strong>تقليل حجم البيانات المُرسَلة</strong>: في حالة إرسال الكثير من البيانات للخادم، قد يتسبب ذلك في تأخر الاستجابة، لذا قم حاول تقليل حجم البيانات قدر المستطلع.
	</li>
	<li>
		<strong>استخدام تقنيات التخزين المؤقت (Caching)</strong>: استخدم تقنيات التخزين المؤقت لتخزين الموارد المطلوبة مسبقًا وتقليل الحاجة لاستجابة الخادم في كل مرة.
	</li>
</ol>

<h3 id="500internalservererror">
	خطأ 500 Internal Server Error (خطأ الخادم الداخلي)
</h3>

<p>
	يظهر هذا الخطأ عندما يواجه الخادم صعوبات في معالجة الطلب الذي تلقاه من المستخدم بسبب مشكلة داخلية في الخادم نفسه.
</p>

<p id="-16">
	<strong>كيف يحدث هذا الخطأ؟</strong>
</p>

<ol>
	<li>
		<strong>أخطاء في البرمجة أو التنفيذ:</strong> قد يحدث الخطأ نتيجة لأخطاء في الكود البرمجي المستخدم على الخادم.
	</li>
	<li>
		<strong>مشكلات في إعدادات الخادم</strong>: قد يكون هناك مشكلات في إعدادات الخادم مثل قلة الموارد أو الإعدادت الخاطئة.
	</li>
	<li>
		<strong>تعارض في برمجيات الخادم</strong>: قد يتسبب استخدام برمجيات متعددة على الخادم في حدوث تعارض بينها وظهور خطأ الخادم الداخلي.
	</li>
</ol>

<p id="-17">
	<strong>كيفية التعامل معه</strong>
</p>

<ol>
	<li>
		<strong>فحص سجلات الخادم (Server Logs) وسجلات الأخطاء</strong>: يمكن أن يكشف تحليل سجلات الخادم عن المشكلة الدقيقة التي أدت لظهور الخطأ، مما يساعد في حلها.
	</li>
	<li>
		<strong>إعادة تشغيل الخادم أو إعادة تحميل برمجيات الخادم</strong>: قد يساعد إعادة تشغيل الخادم أو إعادة تحميل البرمجيات المثبتة عليه في استعادة الوظائف الصحيحة للخادم وحل المشكلة.
	</li>
	<li>
		<strong>التحقق من الإعدادات</strong>: تحقق من إعدادات الخادم وتأكد من صحتها، وعدل أي إعدادات خاطئة أو غير ملائمة.
	</li>
	<li>
		<strong>الاتصال بالدعم الفني لمزود الخدمة</strong>: في حالة عدم قدرتك على حل المشكلة بنفسك، يمكن الاتصال بفريق دعم العملاء أو الفني لمزود الخدمة للمساعدة في تحديد وحل المشكلة.
	</li>
</ol>

<h3 id="501notimplemented">
	خطأ 501 Not Implemented (غير مُنفَّذ)
</h3>

<p>
	يظهر هذا الخطأ عندما يتلقى الخادم طلبًا للتعامل مع طريقة أو خاصية غير مدعومة أو غير مُنفّذة بواسطة الخادم. ويشير لأن الخادم غير قادر على فهم الطلب والتعامل معه بشكل صحيح.
</p>

<p id="-18">
	<strong>كيف يحدث هذا الخطأ؟</strong>
</p>

<ol>
	<li>
		<strong>طلب غير معروف</strong>: يُرسل الخادم خطأ 501 عندما يتلقى طلبًا يحتوي على طريقة أو خاصية لا يعرف كيفية التعامل معها.
	</li>
	<li>
		<strong>تقنية غير مدعومة</strong>: قد يكون الخطأ ناتجًا عن استخدام تقنية أو بروتوكول غير مدعوم من قبل الخادم.
	</li>
</ol>

<p id="-19">
	<strong>كيفية التعامل معه</strong>
</p>

<ol>
	<li>
		<strong>التحقق من الطلب</strong>: افحص الطلب المرسل إلى الخادم وتأكد من أنه يحتوي على طرق مدعومة وقابلة للتنفيذ.
	</li>
	<li>
		<strong>تحديث التطبيق أو الخادم:</strong> في بعض الأحيان، يكون الخطأ بسبب عدم دعم الطرق المطلوبة في النسخة الحالية من التطبيق أو الخادم، لذا قد يتطلب الأمر تحديث التطبيق أو الخادم إلى نسخة تدعم الطرق المطلوبة.
	</li>
	<li>
		<strong>إرسال استجابة مناسبة</strong>: عند حدوث خطأ 501، يجب على الخادم إرسال استجابة مناسبة تشير لأن الطريقة غير مدعومة وتوجيه المستخدم إلى خيارات بديلة إذا كانت متوفرة.
	</li>
	<li>
		<strong>التواصل مع مزود الخدمة</strong>: في حالة عدم تمكنك من تصحيح الخطأ، يمكنك التواصل مع مزود الخدمة للحصول على مساعدة أو التحقق من إعدادات الخادم وتوافر الطرق المطلوبة.
	</li>
</ol>

<h3 id="502badgateway">
	خطأ 502 Bad Gateway (البوابة السيئة)
</h3>

<p>
	يحدث هذا الخطأ عندما يتلقى الخادم استجابة غير صالحة من خادم آخر يقوم بالوساطة بينه وبين المتصفح أو العميل. وهو يشير لعدم قدرة البوابة Gateway على تمرير الطلب إلى الخادم النهائي بشكل صحيح.
</p>

<p id="-20">
	<strong>كيف يحدث هذا الخطأ؟</strong>
</p>

<ol>
	<li>
		<strong>خادم غير متاح</strong>: قد يكون الخادم النهائي غير متاح أو غير قادر على معالجة الطلبات بشكل صحيح.
	</li>
	<li>
		<strong>مشكلة في الاتصال بين الخوادم</strong>: قد تواجه البوابة مشكلة في الاتصال بينها وبين الخادم النهائي، سواء كان ذلك بسبب مشكلة في الشبكة أو توقف الخادم النهائي عن العمل.
	</li>
	<li>
		<strong>إعدادات خاطئة</strong>: قد تكون هناك إعدادات خاطئة في البوابة تمنعها من تمرير الطلبات بشكل صحيح إلى الخادم النهائي.
	</li>
	<li>
		<strong>حمل زائد على الخادم</strong>: قد يكون هناك حمل زائد على الخادم النهائي يؤدي إلى تأخر في استجابته للطلبات.
	</li>
</ol>

<p id="-21">
	<strong>كيفية التعامل معه</strong>
</p>

<ol>
	<li>
		<strong>إعادة التحميل Refresh</strong>: حدّث الصفحة أو أعد تحميلها لربما يكون الخطأ مؤقتًا.
	</li>
	<li>
		<strong>التحقق من حالة الخادم النهائي</strong>: تحقق من حالة الخادم النهائي وتأكد من أنه يعمل بشكل صحيح ومتاح للاستجابة للطلبات.
	</li>
	<li>
		<strong>فحص الإعدادات</strong>: افحص إعدادات البوابة للتأكد من صحتها وتمريرها للطلبات بشكل صحيح للخادم النهائي.
	</li>
	<li>
		<strong>مراجعة سجلات الخطأ</strong>: راجع سجلات الخطأ للبوابة والخادم النهائي وافحصها لتحديد أي مشكلات تقنية والتعامل معها.
	</li>
	<li>
		<strong>تحسين أداء الخادم النهائي</strong>: في حالة وجود حمل زائد على الخادم النهائي، حاول تحسين أداءه أو زيادة موارده.
	</li>
</ol>

<h2>
	أهم الأخطاء التصميمية في مواقع الويب
</h2>

<p>
	بعد أن تحدثنا عن معظم الأخطاء التقنية السابقة التي قد تواجه موقعك في بداية الأمر. دعنا الآن نتحدث عن بعض الأخطاء التصميمية التي قد تواجه موقعك، فلا شك أنه تجربة المستخدم للموقع تعتبر تعامله مع الواجهة الأمامية فقط دون النظر الي ما الذي يحدث خلف ذلك.
</p>

<h3>
	تصميم واجهة غير مناسبة
</h3>

<p>
	قد يتضمن تصميم واجهة الموقع العديد من العيوب، مثل الألوان الزاهية المتضاربة التي تجعل النصوص غير قابلة للقراءة بوضوح، أو التخطيط غير المنظم الذي يجعل من الصعب على المستخدمين العثور على المعلومات بسهولة. كما يمكن أن يكون هناك تجاهل لمبادئ تجربة المستخدم، مما يؤدي إلى صعوبة في التنقل وفهم كيفية استخدام الموقع. جميع هذه العوامل تقلل من جاذبية الموقع وتقلل من احتمالية التفاعل والتفاعلية معه.
</p>

<h3>
	عدم توفير تجربة مستخدم محسنة
</h3>

<p>
	إن عدم توفير تجربة مستخدم ممتازة يمكن أن يؤدي إلى صعوبة في التنقل، وعدم وضوح المعلومات، وتجربة عامة سيئة للمستخدم. على سبيل المثال، إذا كان التصميم معقدًا جدًا أو غير واضح، فإن المستخدم قد يجد صعوبة في إيجاد ما يبحث عنه، مما يؤدي إلى إحباطه وترك الموقع. كما أن عدم توفير مسارات تنقل واضحة يمكن أن يتسبب في فقدان المستخدم للاهتمام والتخلي عن زيارة الموقع مرة أخرى.
</p>

<h3>
	عدم التجاوب مع الأجهزة المختلفة
</h3>

<p>
	يمكن أن يكون <a href="https://academy.hsoub.com/design/user-experience/%D8%A7%D9%84%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D8%A7%D9%84%D9%85%D8%AA%D8%AC%D8%A7%D9%88%D8%A8-responsive-design-r751/" rel="">التصميم غير متجاوب</a> مع أحجام الشاشات المختلفة أو الأجهزة المحمولة، مما يُصعِّب على المستخدمين تصفح الموقع بشكل مريح وفعال.على سبيل المثال، قد يكون الموقع مصممًا بشكل جيد على أجهزة الكمبيوتر الشخصية، ولكن عند فتحه على هاتف ذكي، تكون العناصر متناثرة بشكل غير منتظم وصعبة الوصول إليها أو قراءتها. في حالة عدم استجابة التصميم، قد يتسبب ذلك في عرض مكونات الموقع بشكل غير ملائم، مما يؤدي إلى انتقادات المستخدمين وتدهور تجربتهم.
</p>

<h3>
	استخدام صور ذات جودة منخفضة
</h3>

<p>
	يمكن أن يؤثر استخدام الصور ذات الجودة المنخفضة على مظهر الموقع وجاذبيته بشكل سلبي. فعندما يكون لدينا صور غير واضحة أو ذات دقة منخفضة، فإنها قد لا تنقل الرسالة المطلوبة بشكل فعال، وقد تجعل الموقع يبدو غير احترافي. علاوة على ذلك، قد تؤدي الصور ذات الجودة المنخفضة إلى بطء في تحميل الموقع، مما يزيد من فترة انتظار المستخدمين ويقلل من رغبتهم في البقاء على الموقع.
</p>

<h3>
	عدم مراعاة التناسق اللوني
</h3>

<p>
	يمكن أن يؤدي إهمال التنسيق اللوني بين مكونات الموقع إلى انطباع سلبي على المستخدمين ويقلل من مصداقية الموقع. على سبيل المثال، إذا كانت هناك عدم تناسق بين الألوان المستخدمة في الخلفية والنصوص و العناصر الأخرى، فقد يبدو الموقع غير متناسق وغير جذاب للمستخدمين. بالإضافة إلى ذلك، قد يرتبك المستخدمون في البحث عن المعلومات على الموقع نتيجة لعدم تناسق الألوان المستخدمة، مما يقلل من قدرتهم على الاستفادة من الموقع بشكل كامل.
</p>

<ul>
</ul>

<h2 id="-22">
	أدوات اكتشاف الأخطاء
</h2>

<p>
	يمكن اكتشاف الأخطاء وتفاديها حتى قبل وقوعها والتعرف بسرعة عليها في حال وقوعها عبر الاستعانة بعدة خطوات وأدوات مخصصة لها، سنذكرها في الفقرات التالية.
</p>

<h3 id="-23">
	استخدام أدوات فحص المواقع
</h3>

<p>
	لكشف الأخطاء في المواقع وتحديد المشاكل التقنية، يمكنك الاعتماد على عدة أدوات متخصصة توفر تحليلًا شاملاً لأداء الموقع والاكتشاف الفعال للأخطاء. إليك استخدام بعض الأدوات المهمة:
</p>

<ol>
	<li>
		<strong><a href="https://academy.hsoub.com/marketing/search-engine-optimisation/%D8%A3%D8%AF%D8%A7%D8%A9-%D9%85%D8%B4%D8%B1%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D9%85%D9%86-%D8%AC%D9%88%D8%AC%D9%84-google-search-console-r499/" rel="">أداة مشرفي المواقع من جوجل Google Search Console</a></strong>: هي أداة مجانية تهدف لمساعدة أصحاب المواقع على فهم كيفية ظهور مواقعهم في نتائج البحث. توفر هذه الأداة تقارير شاملة حول أداء الموقع في محرك البحث جوجل، بما في ذلك الأخطاء الفنية مثل الصفحات المفقودة 404 ومشكلات تهيئة <a href="https://academy.hsoub.com/marketing/search-engine-optimisation/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%B9%D9%85%D9%84-%D9%85%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-%D9%88%D8%AA%D8%B1%D8%AA%D9%8A%D8%A8-%D8%AC%D9%88%D8%AC%D9%84-%D9%84%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A-r491/" rel="">ملف robots.txt</a>. بالإضافة إلى ذلك، يمكن لمستخدمي هذه الأداة مراقبة تغيرات تصنيف موقعهم وتلقي تنبيهات حول أي مشاكل محتملة تؤثر على ظهورهم في نتائج البحث.
	</li>
	<li>
		<a href="https://www.screamingfrog.co.uk/seo-spider/" rel="external nofollow"><strong>أداة Screaming Frog SEO Spider</strong></a>: هي أداة متقدمة لتحليل مواقع الويب <a href="https://academy.hsoub.com/marketing/search-engine-optimisation/%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D9%85%D8%AC%D8%A7%D9%86%D9%8A%D8%A9-%D9%84%D8%AA%D8%AD%D8%B3%D9%8A%D9%86-%D9%85%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-r720/" rel="">وتحسينها لمحركات البحث</a>، فهي تفحص الموقع بشكل شامل وتحلله لاكتشاف الروابط المفقودة وتتحقق من إعداداته التقنية وتكشف الأخطاء الفنية. كما توفر تقارير مفصلة تشمل معلومات حول كل صفحة من صفحات الموقع، بما في ذلك العناوين والعناصر المشتركة والعناصر المفقودة، مما يساعد على تحديد الأخطاء وتصحيحها بسرعة.
	</li>
	<li>
		<strong>أداة W3C Markup Validation Service:</strong> هي أداة مجانية تُقدمها World Wide Web Consortium (W3C) تفحص صحة وتوافق تنسيق <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> و <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> في صفحات الموقع وتقدم تقارير دقيقة ومفصلة حول الأخطاء والتحذيرات المتعلقة بتنسيق الصفحات، مما يساعد على تصحيح الأخطاء وتحسين جودة الكود المستخدم في الموقع.
	</li>
</ol>

<h3 id="-24">
	استخدام أدوات تحليل الأداء و تحديد المشكلات التقنية
</h3>

<p>
	عندما يتعلق الأمر بتحليل وتحسين موقع الويب، يمكن الجمع بين أدوات الفحص وأدوات التحليل لضمان أداء الموقع الأمثل وتجربة مستخدم مريحة. في حين تقدم أدوات الفحص تقارير دقيقة حول الأخطاء التقنية والتصميمية، تقدم أدوات التحليل تحليلًا شاملاً لأداء الموقع وتقديم التوصيات لتحسينه. وباستخدام هذه الأدوات بشكل متكامل، يمكن لأصحاب المواقع تحديد الأخطاء بدقة واتخاذ الإجراءات اللازمة لتصحيحها وتحسين أداء الموقع بشكل عام.
</p>

<p>
	على سبيل المثال، يمكن استخدام أدوات الفحص مثل Google Search Console و Screaming Frog SEO Spider لتحديد الأخطاء التقنية والتصميمية، مثل الروابط المفقودة والعلامات غير الصحيحة. واستخدام أدوات التحليل مثل Google PageSpeed Insights و GTMetrix وPingdom Tools لتوفير تحليل شامل لأداء الموقع، مثل سرعة التحميل وحجم الصفحة وعدد الطلبات، وتقديم توصيات محددة لتحسين أداء الموقع وتحسين تجربة المستخدم. لنستكشف بعض هذه الأدوات بشكل من التفاصيل:
</p>

<ol>
	<li>
		<strong><a href="https://pagespeed.web.dev/" rel="external nofollow">أداة Google PageSpeed Insights</a>:</strong> هي أداة مجانية من جوجل لتحليل أداء صفحات الموقع وتقديم توصيات لتحسين سرعة التحميل والأداء. تقيِّم الأداة صفحات الموقع على أساس مجموعة من المعايير الفنية وتقدم تقريرًا شاملًا يشمل معلومات عن سرعة التحميل وأداء الموقع على أجهزة الحاسوب والهواتف الذكية كما تقدم توصيات مخصصة لتحسين أداء الموقع وجعله أسرع وأكثر استجابة.
	</li>
	<li>
		<strong><a href="https://gtmetrix.com/" rel="external nofollow">أداة GTmetrix</a>:</strong> هي أداة متقدمة تقدم تقارير مفصلة حول سرعة التحميل وأداء الموقع، فهي تعمل على تحليل كافة جوانب أداء الموقع بما في ذلك وقت التحميل وحجم الصفحة وعدد الطلبات، وتقدم تقريرًا شاملًا يوضح العوائق التقنية التي تؤثر على الأداء مثل الصور كبيرة الحجم والملفات غير الضرورية. كما تقدم توصيات محددة لتحسين أداء الموقع وتسريع وقت تحميله.
	</li>
	<li>
		<strong><a href="https://tools.pingdom.com/" rel="external nofollow">أداة Pingdom</a></strong>: أداة شهيرة لتحليل أداء المواقع وتحديد المشكلات التقنية التي تؤثر على الأداء. تقدم الأداة تحليلاً شاملاً لأداء الموقع مع تحديد الأخطاء التقنية مثل الصور الكبيرة والموارد التي تتطلب تحسينًا. كما تصدر تقارير مفصلة حول أداء الموقع في مناطق مختلفة من العالم، مما يساعد على تحديد المشكلات الجغرافية وتحسين استجابة الموقع على مستوى عالمي.
	</li>
</ol>

<p>
	باستخدام هذه الأدوات، يمكنك فحص الموقع بشكل دوري لاكتشاف الأخطاء والمشكلات التقنية، ومن ثم اتخاذ الإجراءات اللازمة لتصحيحها وتحسين أداء الموقع بشكل عام.
</p>

<h2 id="-25">
	كيف تتجنب الوقوع في الأخطاء؟
</h2>

<p>
	لتجنب الأخطاء في تصميم وتطوير المواقع، ولتحقيق أقصى استفادة من جهود تصميم وتطوير المواقع وضمان تقديم تجربة ممتازة للمستخدمين، من الضروري اتخاذ بعض الإجراءات المهمة قبل بدء عملية التصميم والتطوير، إذ يتوجب على مصصمي الموقع إجراء تخطيط جيد له، بما في ذلك تحديد هيكل الموقع ووظائفه وأهدافه. هذا يساعد في تحديد الاحتياجات والمتطلبات بشكل دقيق قبل الشروع في التنفيذ.
</p>

<p>
	من الإجراءات التي يمكن اتخاذها:
</p>

<ul>
	<li>
		مراجعة الكود بانتظام للتأكد من جودته وعدم وجود أخطاء وضرورة إجراء اختبارات متعددة للتأكد من أن الموقع يظهر بشكل صحيح على <a href="https://academy.hsoub.com/programming/html/%D9%85%D8%B9%D8%A7%D9%84%D8%AC%D8%A9-%D8%A7%D9%84%D9%85%D8%B4%D8%A7%D9%83%D9%84-%D8%A7%D9%84%D8%B4%D8%A7%D8%A6%D8%B9%D8%A9-%D9%84%D9%84%D8%AA%D9%88%D8%A7%D9%81%D9%82-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D9%81%D9%8A-html-%D9%88-css-r1955/" rel="">مختلف المتصفحات</a> والأجهزة.
	</li>
	<li>
		يجب أن يكون فريق التطوير على دراية بأحدث التقنيات والاتجاهات في مجال برمجة وتطوير المواقع. هذا يساعد في البقاء على اطلاع دائم وتطبيق أفضل الممارسات لتحقيق أداء متميز للموقع.
	</li>
	<li>
		ومن الضروري التحقق من<a href="https://academy.hsoub.com/programming/advanced/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A3%D9%85%D8%A7%D9%86-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r2020/" rel=""> أمان الموقع</a> وتثبيت التحديثات الأمنية للأنظمة والإضافات المستخدمة في الموقع بانتظام، واستخدام أدوات الحماية مثل برامج مكافحة الفيروسات وجدار الحماية للحفاظ على أمان الموقع.
	</li>
	<li>
		<a href="https://academy.hsoub.com/design/general/%D8%AE%D9%85%D8%B3-%D9%85%D9%85%D8%A7%D8%B1%D8%B3%D8%A7%D8%AA-%D8%AA%D8%AC%D8%B9%D9%84-%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D9%85%D9%88%D9%82%D8%B9%D9%83-%D8%B9%D8%B8%D9%8A%D9%85%D8%A7-r115/" rel="">اتباع أفضل الممارسات في تصميم المواقع</a> مثل استخدام HTML و CSS صحيحة البنية وسهلة القراءة وتحسين سرعة التحميل وتجربة المستخدم وجعل الموقع متوافقًا مع مختلف الأجهزة والشاشات.
	</li>
	<li>
		تجنب التأثير السلبي على محركات البحث لتصنيف الموقع، وذلك عبر اتباع الآتي:
	</li>
</ul>

<ol style="margin-right: 40px;">
	<li>
		<strong>تصميم وتطوير الموقع وفقًا لمتطلبات محركات البحث</strong>: أي تصميم وبرمجة الموقع بطريقة تجعله سهل الفهم والتصفح من قبل محركات البحث مثل Google و Bing وغيرها بستخدام تنسيقات صحيحة العناوين والروابط، وتوفير محتوى جيد التنظيم والجودة، وتحسين سرعة التحميل وتجربة المستخدم.
	</li>
	<li>
		<strong>تجنب استخدام</strong><a href="https://academy.hsoub.com/marketing/search-engine-optimisation/%D8%AA%D9%82%D9%86%D9%8A%D8%A7%D8%AA-%D8%AA%D8%AD%D8%B3%D9%8A%D9%86-%D9%85%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-%D8%A7%D9%84%D8%B6%D8%A7%D9%84%D8%A9-black-hat-seo-r716/" rel=""> تقنيات تحسين محركات البحث الضالة (Black Hat SEO)</a>: أي عدم استخدام تقنيات غير أخلاقية أو مخالفة لسياسات محركات البحث للترويج للموقع أو زيادة تصنيفه كاستخدام الكلمات الرئيسية بشكل مفرط في المحتوى، أو تكرار الروابط بشكل غير طبيعي، أو إنشاء صفحات ذات محتوى مختلف تمامًا لمحركات البحث والمستخدمين.
	</li>
	<li>
		<strong>الالتزام<a href="https://academy.hsoub.com/marketing/search-engine-optimisation/%D8%AA%D9%82%D9%86%D9%8A%D8%A7%D8%AA-%D8%AA%D8%AD%D8%B3%D9%8A%D9%86-%D9%85%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-%D8%A7%D9%84%D8%B3%D9%84%D9%8A%D9%85%D8%A9-white-hat-seo-r717/" rel=""> بأساليب السيو السليمة (White Hat SEO)</a></strong>: أي اتباع أساليب سيو موثوقة وأخلاقية لتحسين تصنيف الموقع، مثل إنشاء محتوى جيد الجودة ومفيد للمستخدمين، والتركيز على بناء روابط ذات جودة وموثوقة، وتحسين تجربة المستخدم و توافق الموقع مع الهواتف الذكية والأجهزة اللوحية.
	</li>
</ol>

<h2 id="-26">
	الخلاصة
</h2>

<p>
	يتطلب تصميم وتطوير موقع الويب جهدًا مستمرًا لتجنب الأخطاء وضمان أداء موثوق وتجربة مستخدم مرضية. باستخدام أدوات فحص المواقع وتحليل الأداء، ومراجعة واختبار الكود بانتظام، بالإضافة إلى ضمان تحديثات الأمان والالتزام بأفضل الممارسات، يمكنك تحقيق موقع ويب متميز وفعال.لذا من الضروري أن تحرص على استمرارية تحسين موقعك وصيانته بشكل دوري ليلبي احتياجات الجمهور ويحافظ على تجربة مستخدم ممتازة.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/design/user-interface/%D8%A3%D9%81%D8%B6%D9%84-%D8%A7%D9%84%D9%86%D8%B5%D8%A7%D8%A6%D8%AD-%D9%84%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-r818/" rel="">أفضل النصائح لتصميم واجهة المستخدم</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/design/user-experience/%D8%AA%D8%AD%D9%84%D9%8A%D9%84-%D8%AA%D8%AC%D8%B1%D8%A8%D8%A9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-%D9%88%D9%86%D8%B5%D8%A7%D8%A6%D8%AD-%D9%84%D8%AA%D8%AD%D9%88%D9%8A%D9%84-%D8%A7%D9%84%D8%B2%D9%88%D8%A7%D8%B1-%D8%A5%D9%84%D9%89-%D8%B9%D9%85%D9%84%D8%A7%D8%A1-r678/" rel="">تحليل تجربة المستخدم ونصائح لتحويل الزوار إلى عملاء</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/freelance/jobs/%D8%A7%D9%84%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-%D8%A7%D9%84%D9%82%D8%A7%D8%AA%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%A7%D8%AC%D8%A8-%D8%B9%D9%84%D9%89-%D9%85%D8%B5%D9%85%D9%85%D9%8A-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-%D8%AA%D8%AC%D9%86%D8%A8%D9%87%D8%A7-r72/" rel="">الأخطاء القاتلة الواجب على مصممي مواقع الإنترنت تجنبها</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/marketing/search-engine-optimisation/%D8%A7%D9%84%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-%D8%A7%D9%84%D8%B4%D8%A7%D8%A6%D8%B9%D8%A9-%D9%81%D9%8A-%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D8%A7%D9%84%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%AA%D9%8A-%D8%AA%D8%B6%D8%B1-%D8%A8%D8%AA%D8%AD%D8%B3%D9%8A%D9%86-%D9%85%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-r644/" rel="">الأخطاء الشائعة في تصميم المواقع الإلكترونية والتي تضر بتحسين محركات البحث</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/marketing/performance-marketing/analytics/%D8%AA%D9%8E%D8%B9%D8%B1%D9%91%D9%81-%D8%B9%D9%84%D9%89-%D8%AA%D9%82%D8%A7%D8%B1%D9%8A%D8%B1-google-analytics-r9/" rel="">تَعرّف على تقارير Google Analytics</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2417</guid><pubDate>Sat, 21 Sep 2024 15:00:00 +0000</pubDate></item><item><title>&#x62A;&#x639;&#x631;&#x641; &#x639;&#x644;&#x649; &#x623;&#x647;&#x645; &#x628;&#x631;&#x627;&#x645;&#x62C; &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;</title><link>https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A3%D9%87%D9%85-%D8%A8%D8%B1%D8%A7%D9%85%D8%AC-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r2303/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_04/---.png.f6aa5c66609dcea4cf09ab540abb6aaf.png" /></p>
<p>
	يتساءل كل مبتدئ في البرمجة ما هي برامج البرمجة وما أهم البرمجيات التي أحتاجها لتعلم كتابتها بصورة صحيحة، فإذا كنت في المراحل الأولى من تعلم البرمجة ولا تعلم أين تكتب الشيفرات أو الأكواد البرمجية الخاصة بك ولا كيف تنفذها بعد كتابتها وترى نتائج عملية التنفيذ، ولا تدري كيف تتحقق من أدائها ومدى أمانها، ننصحك بأن تقرأ هذا المقال حيث نستعرض فيه أهم برامج البرمجة المستخدمة بكثرة خلال العمل على تطوير التطبيقات وكتابة الشيفرات بكفاءة وسرعة.
</p>

<h2 id="">
	ما هي برامج البرمجة؟
</h2>

<p>
	تعد برامج البرمجة مجموعةً من الأدوات التي يستعملها المبرمج لتطوير تطبيقات برمجية مختلفة بسرعة وفعالية، ولبرامج البرمجة استخداماتٌ عديدة، فهي تساعد المطور على كتابة الكود البرمجي وتقدم له مميزات وخيارات عديدة لتسريع عمله مثل ميزة الاستكمال التلقائي للشيفرات، وكذلك تساعده على أتمتة المهام المتكررة، مثل أتمتة اختبارات الأمان والأداء، كما تساعده على كشف وإحصاء أخطاء الشيفرات البرمجية وتنقيحها ما توفر عليه الكثير من الوقت والجهد.
</p>

<h2 id="-1">
	فوائد برامج البرمجة
</h2>

<p>
	تعد برامج البرمجة بالغة الأهمية على أصعدة عديدة، من أهمها:
</p>

<ul>
	<li>
		<strong>توفير وقت المبرمج</strong>: لعل توفير الوقت أبرز فائدة من استخدام برامج البرمجة، إذ تساعد هذه البرمجيات المطور على أتمتة مهام عديدة، وتوفر له قوالب جاهزة للوظائف البرمجية المستخدمة بكثرة، وكثيرًا من الخيارات والمميزات الأخرى التي سيلي ذكرها خلال المقال.
	</li>
	<li>
		<strong>زيادة القدرة على التوسع</strong>: تعمل بعض أنواع برامج البرمجة على مزامنة عمليات معالجة البيانات، وبالتالي تساعد هذه البرمجيات على زيادة كمية البيانات التي يمكن معالجتها في آنٍ واحد، ما يؤدي تبعًا إلى سهولة توسعة المواقع وتطوير البرمجيات وزيادة قدرتها على تحمُّل الأعداد الضخمة من المستخدمين.
	</li>
	<li>
		<strong>رفع فرص التوظيف:</strong> كلُّ برنامجٍ يتعلم المبرمج التعامل معه سيزيد من كفاءته ويعززفرصه في التوظيف، فهذه البرمجيات تساعد المبرمج على كتابة شيفرات أفضل وتسريع عملية التطوير، وهذا بالضبط ما يحتاجه أصحابُ الأعمال.
	</li>
</ul>

<h2 id="-2">
	أنواع البرامج المستخدمة في البرمجة
</h2>

<p>
	تتفرع البرامج المستخدمة في البرمجة إلى أنواع عديدة، ولكل نوعٍ استخداماته، ومن أهم أنواعها:
</p>

<ul>
	<li>
		برامج تعلم البرمجة Programming Studying Programs
	</li>
	<li>
		المترجمات والمفسرات Compiler and Interpreter
	</li>
	<li>
		بيئات التطوير المتكاملة IDEs⁦
	</li>
	<li>
		منقّحات الأخطاء Debuggers
	</li>
	<li>
		أنظمة التحكم في الإصدارات Version Control Systems
	</li>
	<li>
		برامج البرمجة المعتمدة على الذكاء الاصطناعي
	</li>
</ul>

<p>
	لنتعرف على كل نوع من هذه البرامج بمزيد من التفصيل.
</p>

<h3 id="programmingstudyingprograms">
	برامج تعلم البرمجة Programming Studying Programs
</h3>

<p>
	لا نعني هنا التطبيقات والبرمجيات المخصصة لتدريس أو تعليم من خلال <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%B7%D8%B1%D9%82-%D8%AF%D8%B1%D8%A7%D8%B3%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%85%D9%86-%D8%A7%D9%84%D8%B5%D9%81%D8%B1-r2253/" rel="">الدورات التعليمية</a> والتدريب المستمر على كتابة الشيفرات التي تحل مشكلات معينة، ولكن نعني بها الأدوات والبرمجيات التعليمية التي تساعد المبتدئين على دخول تعلم البرمجة وفهم أ<a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">ساسياتها</a> من خلال واجهات رسومية تعتمد على البلوكات أوالكتل التي يمكنك من خلالها تركيب الشيفرات بأسلوب سهل ومبسط وتعلم أساسيات البرمجة من خلالها ومن أبرز هذه البرامج <a href="https://academy.hsoub.com/programming/os-embedded-systems/%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%B3%D9%83%D8%B1%D8%A7%D8%AA%D8%B4-scratch-r1407/" rel="">سكراتش Scratch</a> والذي يمكن أن يصنف كلغة برمجة مرئية مصممة بهدف تعلم مفاهيم البرمجة للطلاب في أعمار مبكرة ومساعدتهم في إنشاء ألعاب وقصص ورسوم متحركة ومواضيع تفاعلية تعليمية بطريقة محببة وسهلة وهذه البرامج تناسب المبتدئين بشكل كبير وسنشرح المزيد عنها لاحقًا.
</p>

<h3 id="compilersandinterpreters">
	المُصرِّفات والمفسرات Compilers and Interpreters
</h3>

<p>
	تحتاج <a href="https://academy.hsoub.com/programming/general/%D8%AF%D9%84%D9%8A%D9%84%D9%83-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%B9%D8%A7%D9%84%D9%8A%D8%A9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D9%88%D9%89-r2261/" rel="">لغات البرمجة عالية المستوى</a> إلى برنامج حاسوبي لترجمة الشيفرات إلى <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-machine-language-r2272/" rel="">لغة الآلة machine language</a> كي يفهمها الحاسوب قبل تنفيذها، ويوجد نوعان رئيسيان من هذه البرمجيات:
</p>

<ul>
	<li>
		<strong>المُصرِّف Compiler:</strong> وهو برنامج يترجم الشيفرات أو الأكواد البرمجية كاملةً قبل تنفيذها، وما إذا كان في الشيفرات أخطاء فلن تُنفَّذ، وتتميز <a href="https://academy.hsoub.com/programming/c/%D8%A7%D9%84%D9%81%D8%B5%D9%84-%D8%A7%D9%84%D8%A3%D9%88%D9%84-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%AA%D8%B5%D8%B1%D9%8A%D9%81-compilation-%D9%81%D9%8A-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r976/" rel="">لغات البرمجة المُصرَّفة</a> بالسرعة والأمان.
	</li>
	<li>
		<strong>المُفسِّر Interpreter:</strong> وهو برنامج ينفذ شيفرات البرنامج سطرًا بسطر، ويبدأ تنفيذ البرنامج ولو كان في الشيفرات أخطاء، ولكن سرعان ما يتوقف التنفيذ إذا وصل المُفسِّر إلى شيفرة بها <a href="https://academy.hsoub.com/programming/general/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-r1342/" rel="">خطأ برمجي</a>.
	</li>
</ul>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="148639" href="https://academy.hsoub.com/uploads/monthly_2024_04/___.png.8a7e912a7e29ed792e169dedf46b9dfc.png" rel=""><img alt="الفرق_بين_المترجم_والمفسر.png" class="ipsImage ipsImage_thumbnailed" data-fileid="148639" data-ratio="59.83" data-unique="qv1uscwhb" style="width: 600px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2024_04/___.thumb.png.a988d4e59151cecbb273292caa4a0d69.png"></a>
</p>

<h3 id="integrateddevelopmentenvironmentsides">
	بيئات التطوير المتكاملة IDEs⁦
</h3>

<p>
	تعد <a href="https://academy.hsoub.com/programming/workflow/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%85%D8%AA%D9%83%D8%A7%D9%85%D9%84%D8%A9-ide-r1513/" rel="">بيئات التطوير المتكاملة</a> Integrated Development Environments أو IDEs اختصارًا من برامج البرمجة المفيدة التي تساعد المطورين على كتابة الشيفرات البرمجية بسرعة وكفاءة، فهي تحتوي على مميزات عديدة تجعل عمل المطور أسهل، من خواص استكمال تلقائي للشيفرات إلى خواص تصحيح فوري للأخطاء في صيغة الشيفرة، كما تحوي بيئات التطوير المتكاملة عدة أدواتٍ مدمجة مفيدة للمطور، مثل: محرر الأكواد ومُنقِّح الأخطاء ومترجم الشيفرة والأكمال التلقائي للكود، وتوفر كذلك إمكانية تثبيت العديد من الإضافات الخارجية المساعدة في عملية التطوير.
</p>

<p>
	تتعدد بيئات التطوير المتكاملة، ومن أشهرها نذكر:
</p>

<ul>
	<li>
		<strong>فيجوال ستوديو كود Visual Studio Code:</strong> ذاع صيت فيجوال ستوديو كود حتى صارت بيئة التطوير الأشهر والأكثر استخدامًا بين المبرمجين، وذلك لتعدد مميزاتها، بدءًا من دعمها لغالب لغات البرمجة الحية وجميع لغات البرمجة الشهيرة، مرورًا بتوفيرها لإضافاتٍ عديدة تجعل من كتابة الشيفرات أمرًا يسيرًا على المطورين، وصولًا إلى بساطة واجهتها وسهولة التعامل معها، وكذلك من أبرز ما يميزها مجانيتها وأنها بيئة تطوير مفتوحة المصدر.
	</li>
	<li>
		<strong>بايشارم PyCharm:</strong> تُستخدم بيئة التطوير المتكاملة بايشارم من مطوري لغة البرمجة <a href="https://academy.hsoub.com/python/" rel="">بايثون</a> خاصة، وتعد بيئة تطوير مدفوعة، وتدعم بايشارم بالكاد جميع <a href="https://academy.hsoub.com/programming/general/%D8%A5%D8%B7%D8%A7%D8%B1-%D8%B9%D9%85%D9%84-framework/" rel="">أطر عمل</a> ومكتبات لغة بايثون، كما توفر أدواتٍ مخصصة لاختبار شيفرات بايثون وتنقيح أخطائها، وتدعم تضمين نظام التحكم في الإصدارات غيت داخل بيئة التطوير لتسريع عملية تتبع النُّسخ المختلفة من الشيفرات.
	</li>
	<li>
		<strong>إنتيليج إيديا IntelliJ IDEA:</strong> بيئة تطوير مدفوعة مصممة <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF-r1802/" rel="">لمطوري تطبيقات الأندرويد</a>، وتدعم لغات البرمجة <a href="https://academy.hsoub.com/programming/java/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%85%D8%A7-%D9%87%D9%8A%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7-java-r1515/" rel="">جافا</a> و<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D9%83%D9%88%D8%AA%D9%84%D9%86-kotlin-r2251/" rel="">كوتلن</a> وسكالا وجروفي، وهي أشهر لغات تطوير تطبيقات الأندرويد وأكثرها استخدامًا، وتتميز بيئة التطوير إنتليج إيديا بالدعم الجزئي لعدة لغات برمجة أخرى، مثل: بايثون <a href="https://wiki.hsoub.com/Python" rel="external">Python</a> و <a href="https://wiki.hsoub.com/PHP" rel="external">php </a>وروبي <a href="https://wiki.hsoub.com/Ruby" rel="external">Ruby</a> وغيرها.
	</li>
	<li>
		<strong>بي إتش بي ستورم PhpStorm:</strong> تعد بيئة تطوير مدفوعة موجهة خصيصًا لمطوري لغة <a href="https://academy.hsoub.com/php/" rel="">بي إتش بي</a>، وتدعم جميع أطر العمل الشهيرة للغة بي إتش بي، كما تدعم أشهر قواعد البيانات المستخدمة مع بي إتش بي لتطوير تطبيقات الويب، وتدعم تقنيات بناء الواجهة الأمامية لتطبيقات الويب، مثل: <a href="https://academy.hsoub.com/programming/html/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-html-r1752/" rel="">لغة HTML</a> و<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-css-r2000/" rel="">لغة CSS</a> ول<a href="https://academy.hsoub.com/javascript/" rel="">غة جافا سكريبت</a> و<a href="https://academy.hsoub.com/programming/javascript/typescript/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-typescript-r1214/" rel="">تايب سكريبت</a> وغيرها.
	</li>
	<li>
		<strong>إكس كود XCode:</strong> بيئة تطوير مجانية مخصصة لتطوير التطبيقات الموجهة لجميع أنظمة تشغيل آبل، والتي تتضمن نظام تشغيل هواتف آبل أي أو إس iOS، ونظام تشغيل الأجهزة اللوحية أي باد أو إس iPadOS، ونظام تشغيل الحواسيب المحمولة ماك أو إس MacOS، وكذلك نظام تشغيل الساعات الذكية WatchOS، وسائر أنظمة تشغيل آبل.
	</li>
</ul>

<h3 id="debuggers">
	مُنقِّحات الأخطاء Debuggers
</h3>

<p>
	تدخل عمليتا الاختبار وتنقيح الأخطاء ضمن المهام الأساسية للمطور، ويعد مُنقِّح الأخطاء أداةً تساعد المطور على اختبار التطبيق وتحديد أماكن الخطأ في الشيفرات ثم تنقيحها، ما يساهم في تأمين التطبيق من الثغرات والاختراق.
</p>

<h3 id="commandlineinterpreters">
	برامج سطر الأوامر Command Line Interpreters
</h3>

<p>
	تعد <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%A7-%D9%87%D9%88-%D8%B3%D8%B7%D8%B1-%D8%A7%D9%84%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D8%9F-r353" rel="">برامج سطر الأوامر</a> من البرامج المفيدة التي تسمح للمطور بإدخال أوامر كتابية وتوجيهها إلى <a href="https://academy.hsoub.com/apps/operating-systems/%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84/#:~:text=%D8%AA%D8%B9%D8%B1%D9%8A%D9%81%20%D9%86%D8%B8%D8%A7%D9%85%20%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84&amp;text=%D9%8A%D8%B9%D8%A7%D9%84%D8%AC%20%D9%86%D8%B8%D8%A7%D9%85%20%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84%20%D8%AA%D9%84%D9%83%20%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA,%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA%20%D9%81%D9%8A%D9%83%D9%88%D9%86%20%D8%A7%D9%84%D8%B5%D9%88%D8%B1%D8%A9%20%D8%A7%D9%84%D8%AA%D9%8A%20%D8%A7%D9%84%D8%AA%D9%82%D8%B7%D9%86%D8%A7%D9%87%D8%A7." rel="">نظام التشغيل</a> لتنفيذها،
</p>

<p>
	ومن أشهر برامج سطر الأوامر نذكر:
</p>

<ul>
	<li>
		<p>
			<strong>موجه الأوامر CMD.exe</strong>: وهو البرنامج الافتراضي لنظام التشغيل ويندوز، ويكون على هيئة نافذةٍ سوداءٍ بسيطة يمكن للمبرمج من خلالها كتابة أوامر لتأدية وظائف عديدة، منها مثلًا إنشاء ملفات جديدة والتعديل عليها وحذفها وتغيير مسارها، والتعرُّف على معلومات النظام والشبكة والتحكم فيهما، ويساعد موجهُ الأوامر المطورَ على توفير الكثير من الوقت المستهلك في تنفيذ نفس المهام يدويًا عبر الواجهة الرسومية.
		</p>
	</li>
	<li>
		<p>
			<strong>ويندوز باورشيل Windows PowerShell</strong>: يعد مفسر سطر أوامر مدمج في نظام تشغيل ويندوز، وهو يتشابه كثيرًا مع موجه الأوامر CMD إلا أنه أكثر تطورًا منه ويحوي بعض الخصائص الإضافية، ومنها مثلًا الوصول إلى البرمجيات السحابية لمايكروسوفت.
		</p>
	</li>
	<li>
		<p>
			<strong>سيمدر CMDER</strong>: مفسر أوامر مجاني ومفتوح المصدر متاحٌ على الإنترنت، ويتميز بالواجهة القابلة للتعديل وإمكانية تغيير أحجام الخطوط وألوانها، كما يسمح بتنفيذ بعض سطور أوامر نظام تشغيل لينكس على نظام تشغيل ويندوز، وكذلك يدعم التحكم مع نظام إدارة الإصدارات غيت، ما يجعله مفسر أوامر قوي ومميز.
		</p>
	</li>
	<li>
		<p>
			<strong>باش Bash</strong>: يعد <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%B5%D8%AF%D9%81%D8%A9-%D8%A8%D8%A7%D8%B4-bash-r606/" rel="">باش</a> مفسر الأوامر الافتراضي لنظامي تشغيل لينكس وماك أو إس، ويتميز بكفاءته في التحكم في نظام التشغيل وإمكانية الوصول إلى أجزاء منه لا يمكن الوصول لها عبر الواجهة الرسومية، كما يساعد على أتمتة مهام عديدة، مثل: الاختبارات الدورية للخوادم.
		</p>
	</li>
</ul>

<h3 id="versioncontrolsystem">
	أنظمة التحكم في الإصدارات Version Control System
</h3>

<p>
	يشير مفهوم التحكم في الإصدارات إلى عملية إدارة التحديثات والتطويرات المتتابعة لشيفرات البرنامج، أما نظام التحكم في الإصدارات فهو نظامٌ يُستخدم لتسجيل النسخ المختلفة من الشيفرات، حتى يتسنى للمطور العودة لأيِّها شاء وقتما أراد وهو أمر يحتاجه أي مبرمج إذ تتعدد فوائد أنظمة التحكم في الإصدارات، ومنها تحسين تعاون فريق المبرمجين وتنظيم تعديلاتهم المختلفة على الشيفرات، كما تعد نسخ الشيفرات المخزنة في نظام التحكم في الإصدارات بمثابة نسخ احتياطية مستقرة يستطيع المطور العودة إليها ما إذا أطلق تحديثًا للبرنامج ثم اكتشف فيه ثغرةً قد تؤدي به إلى الاختراق.
</p>

<p>
	يعد <a href="https://academy.hsoub.com/programming/workflow/git/%D9%81%D9%87%D9%85-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%AD%D9%83%D9%85-%D8%A8%D8%A7%D9%84%D8%A5%D8%B5%D8%AF%D8%A7%D8%B1%D8%A7%D8%AA-git-%D9%88%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%D9%87-%D9%81%D9%8A-%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r2034/" rel="">غيت Git</a> أشهر برنامج للتحكم في الإصدارات بالمجتمع التقني، ويتتبع غيت التعديلات على شيفرات كل ملف من ملفات البرنامج، ويمكن الوصول إلى النسخ المختلفة من الملفات المُخزَّنة على غيت عن طريقين؛ إما بسطر الأوامر أو بأداة للتحكم في ملفات غيت، ومن أشهر أدوات التحكم في غيت أداة غيت هاب GitHub وأداة غيت لاب GitLab، وتساعد هذه الأدوات على تخزين ملفات المشروع سحابيًا، ما يجعل الوصول إليها سهلًا بين جميع أعضاء الفريق البرمجي.
</p>

<h2 id="-3">
	برامج البرمجة المعتمدة على الذكاء الاصطناعي
</h2>

<p>
	لقد ازدادت إمكانيات البرامج المستخدمة في البرمجة من خلال تعزيزها بقدرات الذكاء الاصطناعي مما سهل على المطورين والمبرمجين عملهم بشكل كبير، ومن أبرز هذه البرامج نذكر:
</p>

<ul>
	<li>
		أمازون كود ويسبيرر AWS CodeWhisperer
	</li>
	<li>
		فيجوال ستوديو إنتيليكود Visual Studio IntelliCode
	</li>
	<li>
		ديفن Devin
	</li>
</ul>

<p>
	لنعلم أكثر عن كل برنامج من هذه البرامج وكيف تستفيد من الذكاء الاصطناعي في مجال البرمجة.
</p>

<h3 id="awscodewhisperer">
	أمازون كود ويسبيرر AWS CodeWhisperer
</h3>

<p>
	يتشابه أمازون كود ويسبيرر في وظيفته مع جيتهاب كوبايلوت، إلا أنَّه يناسب فئة مختلفة من المطورين، إذ يعد أكثر تخصيصًا وتوجهًا لمهندسي <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D9%91%D8%A9-%D8%A7%D9%84%D9%85%D8%AA%D8%B7%D9%84%D8%A8%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D9%91%D8%A9%D8%8C-%D9%88%D9%83%D9%8A%D9%81-%D8%AA%D8%B5%D8%A8%D8%AD-%D9%85%D9%87%D9%86%D8%AF%D8%B3-%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D9%91%D8%A9-r457/" rel="">الحوسبة السحابة</a> ومستخدمي خدمات AWS، وكذلك يتميز أمازون كود ويسبيرر عن جيتهاب كوبايلوت بتوافر نسخة مجانية منه.
</p>

<h3 id="visualstudiointellicode">
	فيجوال ستوديو إنتيليكود Visual Studio IntelliCode
</h3>

<p>
	تعد فيجوال ستوديو إنتيليكود إضافة مجانية لبيئة التطوير فيجوال ستوديو كود، ولا تدعم إلا لغات برمجة محددة، وهي بايثون وجافا سكريبت وتايب سكريبت وجافا، وتقل إمكانيات فيجوال ستوديو إنتيليكود بشكلٍ ملحوظ عن نظائره جيتهاب كوبايلون وأمازون ويسبيرر.
</p>

<h3 id="devin">
	ديفن Devin
</h3>

<p>
	يعد برنامج Devin الذي أنتجته شركة Cognition أحد برامج البرمجة الأحدث فقد أُعلن عنه بكونه أول مهندس برمجيات في العالم يعتمد على الذكاء الاصطناعي وهو قادر على كتابة أكواد البرمجة بنفسه وتصحيح أخطائها ونشرها كما أنه قادر على التفكير المنطقي والتخطيط واتخاذ القرارات وتحسين أدائه باستمرار.
</p>

<h2 id="-4">
	برامج البرمجة للمبتدئين
</h2>

<p>
	إليك مجموعة من أهم برامج البرمجة التي توفر أدوات مفيدة تساعد المبتدئين على الولوج إلى عالم تطوير البرمجيات دون صعوبات وتعقيدات لغات البرمجة:
</p>

<ul>
	<li>
		سكراتش Scratch
	</li>
	<li>
		مايكروسوفت ميك كود Microsoft MakeCode
	</li>
	<li>
		تينكر Tynker
	</li>
</ul>

<p>
	لنشرح أكثر عن كل برنامج من برامج البرمجة التي ينصح بها للمبتدئين.
</p>

<h3 id="scratch">
	سكراتش Scratch
</h3>

<p>
	يعد <a href="https://academy.hsoub.com/programming/general/%D9%84%D8%BA%D8%A9-%D8%B3%D9%83%D8%B1%D8%A7%D8%AA%D8%B4-scratch/" rel="">سكراتش</a> من أشهر برامج تعليم البرمجة للأطفال والمبتدئين فهو يعتمد على تعلم أساسيات البرمجة من خلال واجهة رسومية تتكون من عدة كتل برمجية لاستخدامات متعددة وتعتمد على سحب وإسقاط الكتل البرمجية المطلوبة لبناء المنطق الصحيح لعمل البرنامج، وهو سهل التعامل ويجعل عملية تعلم البرمجة ممتعة ومشوقة.
</p>

<p>
	وينصح به لمساعدة الأطفال على تحسين مهاراتهم في حل المشكلات و<a href="https://academy.hsoub.com/programming/general/%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%81%D9%83%D9%8A%D8%B1-%D8%A7%D9%84%D9%85%D9%86%D8%B7%D9%82%D9%8A-%D9%81%D9%8A-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r2095/" rel="">التفكير المنطقي</a>، وهما مهارتان من أهم مهارات <a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D9%85%D8%A8%D8%B1%D9%85%D8%AC-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D8%B1%D9%81/" rel="">المبرمج المحترف</a>، وكذلك يتيح سكراتش للمستخدمين مشاركة برمجياتهم ومشاريعهم، مما يخلق جوًا من المتعة والتنافسية ويؤدي إلى الرغبة في التحسن الدائم.
</p>

<h3 id="microsoftmakecode">
	مايكروسوفت ميك كود Microsoft MakeCode
</h3>

<p>
	يتبنى برنامج مايكروسوفت ميك كود نهجًا مشابهًا لمنهج سكراتش في تعليم البرمجة، إذ يساعد المبتدئين والأطفال على تعلم البرمجة بتركيب كتل من الشيفرات البرمجية الجاهزة، ولكنه يختلف عنه في ماهية البرامج المُطوَّرة، فيركز مايكروسوفت ميك كود على تطوير الألعاب البسيطة، وكذلك يتدرج برنامج مايكروسوفت ميك كود مع المبرمج في مستويات الصعوبة حتى ينتهي بالمبتدئ إلى أن يكون قادرًا على تعلُّم لغة جافا سكريبت.
</p>

<h3 id="tynker">
	تينكر Tynker
</h3>

<p>
	يعد تينكر أحد أهم برامج البرمجة للمبتدئين، ورغم استناده إلى نفس نهج سكراتش ومايكروسوفت ميك كود في تعليم البرمجة، إلا أنه يبرز عنهما بتطوره، إذ يوفر دوراتٍ في مجالاتٍ حديثة، مثل علوم البيانات والذكاء الاصطناعي وتعلم الآلة، كما يتدرج بالمطور المبتدئ إلى مستويات أعلى من نظيريه سكراتش ومايكروسوفت ميك كود.
</p>

<p>
	ولكن يتوفر سكراتش ومايكروسوفت ميك كود مجانًا دون الحاجة لدفع أية رسوم، بينما يعد تينكر مدفوعًا، وذلك نظرًا لتقدمه وصعوبة توفير دوراته ومنهاجه المميز في التعليم بشكل مجاني.
</p>

<p>
	وأخيرًا تذكر أن تعلُّم البرمجة اليوم لم يعد صعبًا كما كان في السابق، إذ تتوفر اليوم الكثير من البرمجيات التي تُسهِّل عملية التعلُّم يومًا بعد يوم، كل ما عليك هو اتخاد قرار بالبدء في التعلُّم والحرص على الالتزام والمثابرة، وإذا كنت لا تعلم من أين تبدأ في رحلة تعلم البرمجة فيمكنك الاطلاع على <a href="https://academy.hsoub.com/store/c1-%D8%AF%D9%88%D8%B1%D8%A7%D8%AA-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D9%8A%D8%A9/" rel="">دورات أكاديمية حسوب</a> المميزة التي أعدها خبراء في البرمجة والتي تأخذ بيدك في تعلم البرمجة من الصفر وصولًا للاحتراف والحصول على فرصة عمل في أحد مجالات البرمجة المميزة.
</p>

<h2 id="-5">
	الخلاصة
</h2>

<p>
	تعرفنا في هذا المقال على مجموعة متنوعة من برامج البرمجة التي يحتاجها المطورون في مختلف المجالات، سواء برامج تعلم البرمجة أو برامج كتابة وتنقيح الشيفرات ومفسرات سطر الأوامر كما تطرقنا إلى برامج البرمجة الحديثة التي تعتمد على الذكاء الاصطناعي في عملية البرمجة، وختمنا المقال بذكر أهم برامج البرمجة الموجهة للمبتدئين في عالم البرمجة، هل هناك برنامج مفيد في عملية البرمجة تجده مفيدًا في رحلة تعلم البرمجة يسرنا أن تشاركنا تجربتك في التعليقات أسفل المقال.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D9%87%D9%84-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">أسهل لغات البرمجة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%81%D9%88%D8%A7%D8%A6%D8%AF-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">فوائد تعلم البرمجة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D9%85%D8%AF%D8%A9-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9%D8%9F-r2257/" rel="">ما هي مدة تعلم البرمجة؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">اكتشف ما هي البرمجة وما أهمية تعلمها</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8/" rel="">برمجة الحاسوب للمبتدئين</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%84%D9%85%D8%A7%D8%B0%D8%A7-%D9%8A%D8%AC%D8%A8-%D8%A3%D9%86-%D8%AA%D8%B9%D9%84%D9%85-%D8%B7%D9%81%D9%84%D9%83-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9%D8%9F-r2052/" rel="">لماذا يجب أن تعلم طفلك البرمجة؟</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2303</guid><pubDate>Sat, 20 Apr 2024 12:00:00 +0000</pubDate></item><item><title>&#x643;&#x644; &#x645;&#x627; &#x62A;&#x62D;&#x62A;&#x627;&#x62C; &#x645;&#x639;&#x631;&#x641;&#x62A;&#x647; &#x639;&#x646; &#x645;&#x62C;&#x627;&#x644; &#x647;&#x646;&#x62F;&#x633;&#x629; &#x627;&#x644;&#x62D;&#x627;&#x633;&#x648;&#x628;</title><link>https://academy.hsoub.com/programming/general/%D9%83%D9%84-%D9%85%D8%A7-%D8%AA%D8%AD%D8%AA%D8%A7%D8%AC-%D9%85%D8%B9%D8%B1%D9%81%D8%AA%D9%87-%D8%B9%D9%86-%D9%85%D8%AC%D8%A7%D9%84-%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8-r2301/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_04/-------.png.ac036be8f841f62379683ea78ae20001.png" /></p>
<p>
	يعد مجال هندسة الحاسوب Computer Engineering واحدًا من أهم المجالات التقنية وأعرقها، كما تلعب هندسة الحاسوب دورًا رئيسيًا في تطوير أنظمة حاسوبية متكاملة تُستخدم في مختلف المجالات والتخصصات.
</p>

<p>
	ويوفر لك هذا المقال لمحة شاملة عن هندسة الحاسوب، بدءًا من تعريفها وأقسامها، مرورًا بموادها ويوضح أبرز الفروق بين تخصص هندسة الحاسوب وبين تخصصات مشابهة مثل هندسة البرمجيات وعلوم الحاسوب، ويختتم بتعريفك على أهم مهارات مهندس الحاسوب والوظائف التي تتاح لك عند دراسة هندسة الحاسوب.
</p>

<h2 id="-1">
	ما هي هندسة الحاسوب؟
</h2>

<p>
	تعد هندسة الحاسوب أحد فروع الهندسة وهي تخصص شامل وواسع يجمع بين علوم متعددة مثل تصميم الأجهزة وعلم الإلكترونيات وتطوير البرمجيات، إذ تعتمد هندسة الحاسوب على مبادئ من <a href="https://academy.hsoub.com/programming/general/%D8%B9%D9%84%D9%88%D9%85-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8/" rel="">علوم الحاسوب</a> وهندسة <a href="https://academy.hsoub.com/programming/os-embedded-systems/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B9%D8%A7%D9%84%D9%85-%D8%A7%D9%84%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%8A%D8%A7%D8%B1-%D9%88%D8%A7%D9%84%D8%AC%D9%87%D8%AF-%D9%88%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D8%A7%D9%84%D8%B3%D8%A7%D9%83%D9%86%D8%A9-r2294/" rel="">الإلكترونيات</a> لتطوير أنظمة حاسوبية مدمجة ومتكاملة تُستخدم في مختلف المجالات، مثل: الصناعة والطب والاتصالات والنقل.
</p>

<p>
	يبدأ عمل مهندسي الحاسوب من تصميم الدوائر الإلكترونية والشرائح الإلكترونية للحاسوب، ثم كتابة البرمجيات منخفضة المستوى لتشغيل هذه الدوائر والشرائح وتشغيل عتاد الحاسوب عامة، ثم تطوير أنظمة التشغيل لإدارة موارد الحاسوب، وأخيرًا تطوير البرمجيات الملائمة لاحتياجات المستخدم لتثبيتها على الحاسوب.
</p>

<p>
	وتدخل هندسة الحاسوب كما ذكرنا للتو في كثيرٍ من المجالات المختلفة، ما يجعلها إحدى أهم المجالات المعاصرة، ومن هذه المجالات:
</p>

<ul>
	<li>
		<strong>الصناعة:</strong> يساعد مهندسو الحاسوب على تطوير الآلات وتسهيل أتمتة العمليات، ما يزيد إنتاجية المصانع وبالتالي زيادة دخلها وتحسين جودة المنتجات.
	</li>
	<li>
		<strong>الطب والخدمات الصحية:</strong> يعمل مهندسو الحاسوب على بناء أجهزة طبية متطورة وتطوير برمجياتها وتحديثها باستمرار لزيادة دقتها في تشخيص المريض وتحديد حالته والدواء المناسب له.
	</li>
	<li>
		<strong>الاتصالات:</strong> يساهم مهندسو الحاسوب في تصميم وتطوير بنية الشبكات التي تدعم اتصالات البيانات بين الأجهزة المختلفة وتطوير برمجيات ت وتطبيقات تسهل عمليات الاتصال ونقل البيانات عبر الشبكات.
	</li>
	<li>
		<strong>الاقتصاد</strong>: تعزز هندسة الحاسوب من النمو الاقتصادي من خلال تطوير حلول رقمية ومنصات تجارة إلكترونية توسع الوصول إلى الأسواق وتسهل العمليات التجارية.
	</li>
</ul>

<h2 id="-2">
	ما أقسام هندسة الحاسوب؟
</h2>

<p>
	تتعدد أقسام هندسة الحاسوب وتتفرع، ومن أشهر أقسامها:
</p>

<ul>
	<li>
		قسم هندسة البرمجيات Software Engineering
	</li>
	<li>
		قسم هندسة الشبكات Networks Engineering
	</li>
	<li>
		قسم الذكاء الاصطناعي Artificial Intelligence
	</li>
	<li>
		قسم أمن المعلومات Information Technology
	</li>
</ul>

<p>
	لنشرح بتفصيلٍ أكبر كل قسم من هذه الأقسام.
</p>

<h3 id="softwareengineering">
	قسم هندسة البرمجيات Software Engineering
</h3>

<p>
	يعد قسم <a href="https://academy.hsoub.com/programming/general/%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/" rel="">هندسة البرمجيات</a> أحد أشهر أقسام هندسة الحاسوب وأكثرها انتشارًا، ويعمل مهندسو البرمجيات على توظيف التقنيات البرمجية من لغات برمجة وأطر عمل وقواعد بيانات وغيرها من التقنيات لتطوير برامج للمستخدمين.
</p>

<p>
	وتتعدد المجالات الفرعية من مجال هندسة البرمجيات، ومن أشهرها مجال <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D9%84%D9%85-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8/" rel="">تطوير الويب</a>، والذي يهتم بتطوير تطبيقات الويب التي يتصفحها المستخدمون عبر متصفحات الويب، وكذا يعد <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%AC%D9%88%D8%A7%D9%84-r1801/" rel="">تطوير تطبيقات الجوال</a> أحد المجالات الفرعية من هندسة البرمجيات، وهو المجال المختص في تطوير تطبيقات موجهة إلى أنظمة تشغيل الهواتف الجوالة، مثل: <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF-r1802/" rel="">أندرويد</a> وأي أو إس iOS، وكذلك مجال <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%B3%D8%B7%D8%AD-%D8%A7%D9%84%D9%85%D9%83%D8%AA%D8%A8/" rel="">تطوير تطبيقات سطح المكتب</a> الذي يُعنى بتطوير تطبيقات لأنظمة تشغيل الحواسيب، ومنها ويندوز ولينكس وماك أو إس MacOS.
</p>

<h3 id="networksengineering">
	قسم هندسة الشبكات Networks Engineering
</h3>

<p>
	يعمل مهندسو الشبكات على تصميم الشبكات وبنائها وصيانتها دوريًا، <a href="https://academy.hsoub.com/devops/networking/%D8%B4%D8%A8%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D8%A8/" rel="">والشبكة</a> هي نظامٌ رقميٌّ يسمحُ للأجهزة الإلكترونية بالتواصل وتناقل البيانات، ولا يكاد مجالٌ تقنيٌّ أن يظهر إلا بالاعتماد على الشبكات، ما يجعل من هندسة الشبكات أحد أهم أقسام هندسة الحاسوب.
</p>

<h3 id="artificialintelligence">
	قسم الذكاء الاصطناعي Artificial Intelligence
</h3>

<p>
	يظفر قسم <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">الذكاء الاصطناعي</a> برواج واسعٍ في الآونة الأخيرة سواءً بين المبرمجين أو غيرهم، وذلك نظرًا للتقدم السريع والكبير في هذا المجال، ويعد الذكاء الاصطناعي قسمًا من أقسام هندسة الحاسوب، ويجمع مهندسو الذكاء الاصطناعي بين مجالات تعلم الآلة وتحليل البيانات ومجالات أخرى لتطوير برمجيات لأتمتة المهام الروتينية، ما يزيد من إنتاجية الشركات ويقلل التكاليف ويرفع الأرباح.
</p>

<h3 id="informationtechnology">
	قسم أمن المعلومات Information Technology
</h3>

<p>
	يهتم قسم أمن المعلومات بإدارة أنظمة التشغيل وتنظيم العمليات عليها وحمايتها، كما يهتم بإدارة قواعد البيانات، ما يجعله مجالًا واسعًا يحتاج متخصصوه مهاراتٍ عديدة، منها: إدارة أنظمة التشغيل وإدارة الشبكات وإدارة قواعد البيانات والاختبار وتنقيح الأخطاء وتأمين التطبيقات وغيرها من المهارات.
</p>

<h2 id="-3">
	ما هي مواد هندسة الحاسوب؟
</h2>

<p>
	يدرس مهندسو الحاسوب مواد عديدة، منها:
</p>

<ul>
	<li>
		أساسيات الهندسة الكهربائية Electrical Engineering
	</li>
	<li>
		أساسيات علوم الحاسوب Computer Science
	</li>
	<li>
		أنظمة التشغيل Operating Systems
	</li>
	<li>
		الشبكات Networking
	</li>
	<li>
		التصميم والتحليل الهندسي Engineering Design and Analysis
	</li>
</ul>

<p>
	لنتعرف بعمقٍ عن ماهية كل مادة وأهميتها.
</p>

<h3 id="electricalengineeringfundamentals">
	أساسيات الهندسة الكهربائية
</h3>

<p>
	تتفرع الهندسة الكهربية من مجال الهندسة، وتهتم الهندسة الكهربية بدراسة التطبيقات الكهربية في الأجهزة الحديثة، ولا سيما الدوائر الإلكترونية المتكاملة Integrated Circuits والترانزستورات Trasistors، واللذان يُعدَّان من القطع الأساسية في عتاد أي حاسوب، كما تهتم الهندسة الكهربية أيضًا بدراسة الإشارات ومعالجتها Signal Processing، وكذلك يدرس الإلكترونيات الدقيقة وأشباه الموصلات Microelectronics and Semiconductors.
</p>

<h3 id="computersciencefundamentals">
	أساسيات علوم الحاسوب
</h3>

<p>
	تشير <a href="https://www.youtube.com/watch?v=Lfa6ImudnIU" rel="external nofollow">علوم الحاسوب</a> إلى دراسة الحاسوب والأنظمة الحاسوبية وطريقة عملها، ويتضمن ذلك دراسة البرمجة و<a href="https://academy.hsoub.com/programming/general/%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">لغاتها</a>، ودراسة <a href="https://academy.hsoub.com/programming/advanced/%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA/#:~:text=%D9%85%D8%A7%20%D9%87%D9%8A%20%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A9%D8%9F,%D9%88%D9%85%D9%8F%D8%B1%D8%AA%D9%91%D8%A8%D8%A9%20%D8%A8%D8%AD%D9%8A%D8%AB%20%D8%AA%D9%86%D8%AA%D9%87%D9%8A%20%D8%A8%D8%AD%D9%84%20%D8%A7%D9%84%D9%85%D8%B4%D9%83%D9%84%D8%A9." rel="">الخوارزميات</a> و<a href="https://academy.hsoub.com/programming/general/%D9%87%D9%8A%D8%A7%D9%83%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-data-structures/#:~:text=%D9%87%D9%8A%20%D9%87%D9%8A%D8%A7%D9%83%D9%84%20%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA%20%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9%20%D9%88%D8%A7%D9%84%D8%A8%D8%B3%D9%8A%D8%B7%D8%A9,float%3A%20%D9%85%D9%86%20%D8%A3%D8%AC%D9%84%20%D8%A7%D9%84%D8%A3%D8%B9%D8%AF%D8%A7%D8%AF%20%D8%A7%D9%84%D8%B9%D8%B4%D8%B1%D9%8A%D8%A9." rel="">هياكل البيانات</a> و<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AD%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/#:~:text=%D8%B9%D9%84%D9%85%20%D8%AA%D8%AD%D9%84%D9%8A%D9%84%20%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA%20Data%20analysis,%D8%A7%D9%84%D8%A3%D8%AE%D9%8A%D8%B1%D8%A9%20%D9%87%D9%8A%20%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA%20%D9%84%D9%87%D8%A7%20%D9%85%D8%B9%D9%86%D9%89" rel="">تحليل البيانات</a> وتأمين التطبيقات البرمجية، كما يتضمن دراسة أساسيات معمارية الحاسوب، والتي تهتم بمكونات الحاسوب الداخلية من معالج إلى الذاكرة العشوائية والذاكرة الصلبة وكيفية عمل هذه القطع معًا.
</p>

<h3 id="operatingsystems">
	أنظمة التشغيل
</h3>

<p>
	يهتم مهندس الحاسوب بدراسة <a href="https://academy.hsoub.com/apps/operating-systems/%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84/" rel="">نظام التشغيل</a> ومكوناته وطريقة عمله، ويتعرف على طريقة تطوير وظائف نظام التشغيل، مثل: إدارة الموارد وإدارة العمليات وإدارة الشبكات وغيرها، ويعلم أيضًا عوامل أمان نظام التشغيل وكيفية تطبيقها أثناء تطوير نظام تشغيل ومن ضمن ذلك اختبار النظام وتنقيح أخطائه، كما يدرس كيفية ارتباط هذا النظام بعتاد الحاسوب والتوافق معه.
</p>

<h3 id="networking">
	الشبكات
</h3>

<p>
	تدخل دراسة <a href="https://academy.hsoub.com/devops/networking/%D8%B4%D8%A8%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D8%A8/" rel="">الشبكات الحاسوبية</a> ضمن مواد هندسة الحاسوب، إذ يدرس مهندس الحاسوب ماهية الشبكة ومكوناتها من حواسيب وخوادم وحواسيب مركزية وأجهزة أخرى، وطريقة عمل الشبكة وبروتوكولات تبادل المعلومات والبيانات والموارد والخدمات عبر الشبكة، ويعرف أنواع الشبكات المختلفة ومعايير اختيار النوع المناسب من الشبكات حسب احتياجات العمل، كما يتعلم بناء الشبكة ومبادئ تأمينها وحمايتها من الاختراق.
</p>

<h3 id="engineeringdesignandanalysis">
	التصميم والتحليل الهندسي
</h3>

<p>
	يشير التصميم الهندسي في هندسة الحاسوب إلى عملية تصميم هيكل حاسوب أو جهاز إلكتروني وتحديد مواصفاته وإمكانياته، وتصميم نظام تشغيله وعمليات نظام التشغيل أيضًا، أما عملية التحليل الهندسي في هندسة الحاسوب فهي إحدى خطوات عملية التصميم الهندسي، ويشير التحليل الهندسي إلى عملية تحديد المشكلات التي يواجهها المهندس أثناء عملية التصميم وتفكيكها إلى مشكلات صغيرة وحل هذه المشكلات الصغيرة واحدة تلو الأخرى حتى يصل إلى حل للمشكلات الكبيرة في التصميم.
</p>

<h2 id="-4">
	ما الفرق بين علوم الحاسوب وهندسة الحاسوب وهندسة البرمجيات؟
</h2>

<p>
	تركز هندسة البرمجيات أساسيًا على دراسة البرمجيات ومكوناتها وطريقة عملها، ودراسة لغات البرمجة والنظريات البرمجية وطريقة تطوير برنامج ذي أداء سريعٍ وأمانٍ عالٍ، بينما تدرس هندسة الحاسوب عتاد الأجهزة الإلكترونية وكيفية بناء جهاز إلكتروني والمكونات الدقيقة للأجهزة، كما تدرس البرمجيات أيضًا ولا سيما التطبيقات منخفضة المستوى المستخدمة لتشغيل قطع العتاد المختلفة داخل الحاسوب.
</p>

<p>
	تتشابه علوم الحاسوب مع هندسة البرمجيات تشابهًا كبيرًا، ولكنها تختلف معها في دراسة العتاد، إذ يدرس طلاب علوم الحاسوب أمورًا عن عتاد الحاسب وكيفية عملها، ولكنها تختلف عن هندسة الحاسوب في مدى التعمق في دراسة العتاد، إذ يدرس مهندسو الحواسيب العتاد بعمق، حتى يدرسوا أدق أنواع العتاد، مثل: الدوائر الإلكترونية المتكاملة والترانزستورات، بينما لا يدرس طلاب علوم الحاسوب عن العتاد إلا علومًا نظريةً قليلة.
</p>

<h2 id="-5">
	ما هي أهم مهارات مهندس الحاسوب الناجح؟
</h2>

<p>
	تعد مهارات مهندس الحاسوب الناجح عديدة، ولعل أهمها:
</p>

<ul>
	<li>
		الشهادة
	</li>
	<li>
		التفكير المنطقي
	</li>
	<li>
		التفكير النقدي
	</li>
	<li>
		حل المشكلات
	</li>
	<li>
		المهارات الناعمة 
	</li>
</ul>

<p>
	لنأخذ لمحة سريعة عن كل مهارة من هذه المهارات وأهميتها لمهندس الحاسوب.
</p>

<h3 id="degree">
	الشهادة
</h3>

<p>
	لا شك أن الشهادة الجامعية في مجال هندسة الحاسوب مفيدة، فالتعليم الجامعي يساعدك على التعلُّم المنظم ويضمن وجود رقيب يتابع تطور مستواك، ولكنها كذلك ليست ضرورية للنجاح في تخصص هندسة الحاسوب وقد تعدلها <a href="https://academy.hsoub.com/programming/general/%D8%AF%D8%B1%D8%A7%D8%B3%D8%A9-%D8%AA%D8%AE%D8%B5%D8%B5-%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/" rel="">الدراسة الذاتية</a> والتطبيق العملي والخبرة في المجال فكثير من جهات العمل اليوم تشترط الخبرة في المجال أكثر من اشتراط الشهادات. فمصادر التعلم الذاتي كثيرة ومنوعة ومن بين مصادر التعلم البارزة عربيًا أكاديمية حسوب التي توفر لك من خلال <a href="https://academy.hsoub.com/store/c1-%D8%AF%D9%88%D8%B1%D8%A7%D8%AA-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D9%8A%D8%A9/" rel="">دوراتها البرمجية</a> في مختلف المجالات التقنية مميزات التعليم الأكاديمي من منهجية واضحة في التعلم وشهادة تثبت ما تعلمته ورقابة من خبير في هندسة الحاسوب، كما تمنحك مميزات التعليم الذاتي من مرونة التعلُّم وسهولته وسرعته وغيرها مما لا توفره الجامعة.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة علوم الحاسوب
		</p>

		<p class="banner-subtitle">
			دورة تدريبية متكاملة تضعك على بوابة الاحتراف في تعلم أساسيات البرمجة وعلوم الحاسوب
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/computer-science/" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<a href="https://academy.hsoub.com/learn/computer-science/" rel=""><img alt="دورة علوم الحاسوب" src="https://academy.hsoub.com/learn/assets/images/courses/computer-science.png"></a>
	</div>
</div>

<h3 id="logicalthinking">
	التفكير المنطقي
</h3>

<p>
	لا يستطيع مهندس الحاسوب مزاولة مهنته دون <a href="https://academy.hsoub.com/programming/general/%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%81%D9%83%D9%8A%D8%B1-%D8%A7%D9%84%D9%85%D9%86%D8%B7%D9%82%D9%8A-%D9%81%D9%8A-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r2095/" rel="">مهارات التفكير المنطقي</a> فهو الذي يجعلك تكر بشكل منظم يساعدك علة فهم  عتاد وبرمجيات الحواسيب  ويوفر له مهارة التخطيط الجيد ويمنحك القدرة على اتباع خطواتٍ متسلسلة مرتبة مفصلة للوصول إلى أفضل حل للمشكلات التي تواجهها.
</p>

<h3 id="criticalthinking">
	التفكير النقدي
</h3>

<p>
	يحتاج كل مهندس حواسيب إلى عقلٍ نقديٍّ يساعده على تحديد مواطن الضعف في برنامجه أو جهازه، فنقاط الضعف في البرنامج الرقمي ينتج عنها وصول المخترقين والمحتالين إلى بيانات المستخدمين، ما يؤدي إلى فقد الموثوقية والمصداقية، أما مواطن الضعف في الأجهزة سواءً حواسيب أو هواتف جوالة أو غيرها فإنَّها تؤدي إلى سوء تجربة المستخدم، مما يؤدي أيضًا إلى خسارة الموثوقية والمصداقية من العملاء.
</p>

<h3 id="problemsolving">
	حل المشكلات
</h3>

<p>
	تواجه مهندس الحاسوب مشكلاتٌ كثيرةٌ أثناء بناء الأجهزة والتطبيقات، مما يُحتِّم عليه تعلُّم <a href="https://academy.hsoub.com/programming/general/%D8%AD%D9%84-%D8%A7%D9%84%D9%85%D8%B4%D9%83%D9%84%D8%A7%D8%AA-%D9%88%D8%A3%D9%87%D9%85%D9%8A%D8%AA%D9%87%D8%A7-%D9%81%D9%8A-%D8%A7%D8%AD%D8%AA%D8%B1%D8%A7%D9%81-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r760/" rel="">مهارة حل المشكلات</a>، وهذه المهارة مرتبطةٌ ارتباطًا وثيقًا بمهارة التفكير المنطقي، إذ يساعد التفكير المنطقي على وضع خطوات متسلسلة للوصول إلى أفضل حلٍّ للمشكلة؛ سواءً كانت هذه المشكلة برمجية أو مشكلة في تصميم الجهاز وتحديد الموارد والخامات أو غيرها.
</p>

<h3 id="softskills">
	المهارات الناعمة
</h3>

<p>
	عادةً ما يعمل مهندسو الحاسوب ضمن فرق عمل، فلا يستطيع مهندس حاسوب واحد تنفيذ جميع مهام من بناء جهاز إلكتروني إلى تطوير نظام تشغيل له ثم تطوير برمجيات موجهة لهذا الجهاز، وذلك يجعل تعلُّم <a href="https://www.youtube.com/watch?v=VnLOR7HVc8Y" rel="external nofollow">مهارات التعامل مع الأصدقاء</a> في فريق العمل أمرًا ضروريًا.
</p>

<h2 id="-6">
	ما وظائف هندسة الحاسوب؟
</h2>

<p>
	تفتح لك هندسة الحاسوب أبوابًا عديدة أمام وظائفٍ كثيرة، ومنها:
</p>

<ul>
	<li>
		متخصص دعم تقني
	</li>
	<li>
		مهندس DevOps
	</li>
	<li>
		خبير أمن معلومات
	</li>
	<li>
		خبير ذكاء اصطناعي
	</li>
	<li>
		مطور تطبيقات
	</li>
</ul>

<p>
	لنعرف مزيدًا من المعلومات عن كل وظيفة على حدة.
</p>

<h3 id="-7">
	متخصص دعم تقني
</h3>

<p>
	يعمل <a href="https://academy.hsoub.com/programming/general/%D8%AA%D9%82%D9%86%D9%8A%D8%A9-%D8%A7%D9%84%D9%85%D8%B9%D9%84%D9%88%D9%85%D8%A7%D8%AA/" rel="">متخصص الدعم التقني</a> على تكوين النظام التقني للشركة، بدءًا من تنصيب الخوادم والشبكات، مرورًا باختبار النظام واستخراج نقاط ضعفه وحلها، وصولًا إلى صيانة النظام وترقيته دوريًا لضمان استمرار عمله على أفضل وجه.
</p>

<h3 id="devops">
	مهندس DevOps
</h3>

<p>
	ينتشر <a href="https://academy.hsoub.com/devops/general/%D8%AA%D8%B9%D9%84%D9%85-devops/#:~:text=%D9%87%D8%AF%D9%81%20DevOps%20%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%20%D9%85%D8%B3%D8%A7%D8%B9%D8%AF%D8%A9%20%D9%85%D9%86,%D8%B9%D9%86%D8%AF%20%D8%B0%D9%84%D9%83%D8%8C%20%D9%88%D8%A7%D9%84%D9%81%D8%B1%D9%8A%D9%82%20%D8%A7%D9%84%D8%A2%D8%AE%D8%B1%20%D9%87%D9%88" rel="">مجال ديف أوبس DevOps</a> بسرعة شديدة رغم حداثته، وذلك لما له من فوائد في تسريع عملية تطوير البرمجيات، ولتصبح مهندس DevOps عليك تعلُّم مجموعة من المهارات، أهمها: كتابة الشيفرات البرمجية لأتمتة المهام وإدارة أنظمة التشغيل والشبكات والخوادم، والتعامل مع الحاويات Containers وأشهرها دوكر Docker، وتنفيذ مهام الحوسبة السحابية ومنهجية التكامل المستمر والنشر المستمر CI|CD، وتأمين البنية التحتية اللازمة لتشغيل التطبيقات والخدمات وإدارة السجلات Logs ومراقبة حالة النظام Monitoring للكشف أي أخطاء فور وقوعها.
</p>

<h3 id="-8">
	خبير أمن معلومات
</h3>

<p>
	يشرف خبير أمن المعلومات على اسكتشاف والثغرات الأمنية سواءً في عتاد الحواسيب أو في برمجياتها وحل هذه الثغرات ويعد أمن المعلومات أحد أهم وظائف هندسة الحاسوب، ويجب أن يكون خبير أمن المعلومات على دراية واسعة بأمن الشبكات ونظم التشغيل وقواعد البيانات، ويكون خبيرًا في الأمن السيبراني واختبار التطبيقات وتنقيح أخطائها.
</p>

<h3 id="-9">
	خبير ذكاء اصطناعي
</h3>

<p>
	يعد<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel=""> الذكاء الاصطناعي</a> واحدًا من <a href="https://academy.hsoub.com/programming/general/%D9%88%D8%B8%D8%A7%D8%A6%D9%81-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%A3%D9%83%D8%AB%D8%B1-%D8%B7%D9%84%D8%A8%D9%8B%D8%A7/" rel="">وظائف البرمجة</a> الحديثة الأكثر طلبًا في سوق العمل اليوم، وتتفرع منه مجالاتٌ عديدة، مثل: <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%85%D8%A7%D8%B0%D8%A7-%D9%8A%D8%B9%D9%86%D9%8A-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9%D8%9F-r2074/" rel="">تعلم الآلة</a> والتعلم العميق ومعالجة اللغة الطبيعية وغيرها، ويحتاج خبير الذكاء الاصطناعي إلى إتقان لغة برمجة، وتشتهر لغة البرمجة <a href="https://academy.hsoub.com/python/" rel="">بايثون</a> بشدة في هذا المجال، كما يحتاج إلى معرفة بأطر عمل الذكاء الاصطناعي وتعلُّم الآلة وأشهرها إطار عمل باي تورش PyTorch وتنسر فلو TensorFlow، وأن يتعرف أيضًا على مبادئ الإحصاء والرياضيات وتحليل البيانات، وكذا ينبغي عليه المعرفة بماهية الرؤية الحاسوبية Computer Vision والحوسبة السحابية Cloud Computing.
</p>

<h3 id="-10">
	مطور تطبيقات
</h3>

<p>
	يتعلم مهندس الحاسوب العديد من لغات البرمجة والتقنيات خلال دراسته وتمكنه هذه المعرفة التقنية من ت<a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA/" rel="">طوير العديد من أنواع التطبيقات</a> ما بين تطبيقات ويب وتطبيقات هاتف وتطبيقات سطح مكتب، فلكلٍّ منها لغات برمجة وأطر عمل ومهارات خاصة به، لذا يشترك مطورو التطبيقات بجميع أنواعها في حاجتهم لدراسة لغة برمجة وإطار عمل وقاعدة بيانات ونظام تحكم في الإصدارات، بينما تختلف نوعية اللغات وأطر العمل بين التطبيقات المختلفة، فمثلًا يحتاج مطورو الويب لمعرفة إحدى لغات الويب، مثل: جافا سكريبت أو PHP أو روبي أو بايثون وغيرها، بينما يحتاج مطورو تطبيقات الهاتف إلى معرفة بلغة البرمجة جافا أو كوتلن لتطبيقات أندرويد وسويفت لتطبيقات أي أو إس iOS، أما مطورو تطبيقات سطح المكتب فيحتاج لمعرفة لغة البرمجة جافا <a href="https://academy.hsoub.com/programming/java/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7-java-r2275/" rel="">Java </a>أو سي بلس بلس ⁦<a href="https://academy.hsoub.com/programming/cpp/" rel="">C++⁧⁧⁧</a>
</p>

<h3 id="-11">
	الخاتمة
</h3>

<p>
	إلى هنا نكون قد وصلنا لنهاية مقالنا الشامل الذي شرحنا فيه كل ما يخص هندسة الحاسوب التي تعد مجالًا واسعًا يوفر لدارسيه فرصًا وظيفية مميزة ذات رواتب مجزية ويفتح لمن يتقن مهاراته الواسعة الكثير من المجالات والتخصصات، وهو مجالٌ ذو مستقبلٍ مميز ولا سيما مجالاته المتعلقة بالذكاء الاصطناعي لذا ننصحك بالبدء بتعلم مهاراته من الآن واللحاق بركب التطور التقني الحاصل في شتى المجالات.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/" rel="">تعرف على تخصص هندسة البرمجيات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%88%D8%B8%D8%A7%D8%A6%D9%81-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%A3%D9%83%D8%AB%D8%B1-%D8%B7%D9%84%D8%A8%D9%8B%D8%A7/" rel="">تعرف على وظائف البرمجة الأعلى أجرًا</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/" rel="">مدخل إلى تطوير البرمجيات Software Development</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-%D8%A7%D9%84%D8%B3%D8%A8%D8%B9-%D8%A7%D9%84%D9%82%D8%A7%D8%AA%D9%84%D8%A9-%D9%84%D8%A3%D9%8A%D9%91-%D9%85%D8%B4%D8%B1%D9%88%D8%B9-%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-r742/" rel="">الأخطاء السبع القاتلة لأيّ مشروع برمجيات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%B4%D9%87%D8%A7%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A3%D9%87%D9%85%D9%8A%D8%AA%D9%87%D8%A7-%D9%88%D8%B3%D8%A8%D9%84-%D8%A7%D9%84%D8%AD%D8%B5%D9%88%D9%84-%D8%B9%D9%84%D9%8A%D9%87%D8%A7-r2262/" rel="">شهادات البرمجة: أهميتها وسبل الحصول عليها</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D9%85%D8%AF%D8%A9-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9%D8%9F-r2257/" rel="">ما هي مدة تعلم البرمجة؟</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2301</guid><pubDate>Mon, 15 Apr 2024 12:00:00 +0000</pubDate></item><item><title>&#x645;&#x627; &#x647;&#x64A; &#x644;&#x63A;&#x629; &#x627;&#x644;&#x622;&#x644;&#x629; Machine Language</title><link>https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A2%D9%84%D8%A9-machine-language-r2272/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_03/---.png.5adedec368dc104cc70cd177cae672a3.png" /></p>
<p>
	نعرفك في مقال اليوم ما هي لغة الآلة أو لغة الأصفار والوحدات والتي تقع في أدنى مستويات لغات البرمجة، وتستخدم للتخاطب والتفاعل المباشر مع أجهزة الحواسيب، ونكتشف معًا ما هي مميزات لغة الآلة، وما الفرق بين لغة الآلة ولغة التجميع، ونستعرض أمثلة على لغة الآلة واستخداماتها، وطريقة تنفيذ تعليماتها من قبل الحواسيب المختلفة.
</p>

<h2 id="">
	مستويات لغات البرمجة
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="146560" href="https://academy.hsoub.com/uploads/monthly_2024_03/--.png.2db63d5270f615fbf0e9b7b918b1e887.png" rel=""><img alt="مستويات لغات البرمجة" class="ipsImage ipsImage_thumbnailed" data-fileid="146560" data-ratio="102.33" data-unique="tc93petus" style="width: 300px; height: auto;" width="300" src="https://academy.hsoub.com/uploads/monthly_2024_03/--.thumb.png.ce0b550b1a713f0444c064b089537380.png"> </a>
</p>

<p>
	قبل أن نتعرف ما هي لغة الآلة لنوضح ما هي لغة البرمجة؟ وما هي المستويات التي مرت بها لغات البرمجة خلال تطورها قبل أن تتطور وتنبثق منها العديد من الأنواع والتسميات.
</p>

<p>
	إن لغة البرمجة هي الأسلوب الذي يعتمده البشر للتخاطب مع الحواسيب وغيرها من الأجهزة القابلة للبرمجة وطلب تنفيذ الأوامر منها، وهي تكتب أو تصاغ على شكل سلسلة من الأوامر  المتتالية، وتحفظ على هيئة برامج حاسوبية أو تطبيقات ثم تمرر حاسوب لتنفيذها والحصول على النتائج المطلوبة.
</p>

<p>
	وقد مرت لغات البرمجة خلال تطويرها بعدة مراحل أو مستويات ومن أبرزها:
</p>

<ul>
	<li>
		<p>
			لغات منخفضة المستوى Low-Level Languages
		</p>
	</li>
	<li>
		<p>
			لغة الآلة Machine Language
		</p>
	</li>
	<li>
		<p>
			لغة التجميع Assembly Language
		</p>
	</li>
	<li>
		<p>
			لغات متوسطة المستوى Mid-Level Languages
		</p>
	</li>
	<li>
		<p>
			لغات عالية المستوى High-Level Languages
		</p>

		<p>
			لنتعرف على مميزات وسمات كل لغة من هذه اللغات.
		</p>
	</li>
</ul>

<h3 id="lowlevellanguages">
	لغات منخفضة المستوى Low-Level Languages
</h3>

<p>
	كانت لغات الجيل الأول للحواسيب لغات منخفضة المستوى مكونة من مجموعة من التعليمات التي تدخل إلى الحاسوب في شكل <strong>قابل للتنفيذ مباشرة</strong> بواسطة معالج الحاسوب حيث كانت التعليمات البرمجية مكونة من أرقام مكتوبة ب<a href="https://academy.hsoub.com/programming/os-embedded-systems/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%B9%D8%AF-%D8%A7%D9%84%D8%AB%D9%86%D8%A7%D8%A6%D9%8A-binary-%D8%A3%D8%B3%D8%A7%D8%B3-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-r1658/" rel="">النظام الثنائي binary system</a> وهو نظام أساسه العدد 2، أو النظام الست عشري hexadecimal وهو نظام أساسه العدد 16وكان من الممكن تنفيذ هذه البرامج مباشرة.
</p>

<p>
	على سبيل المثال تسلسل الأرقام التالي ليس سوى مثال على جزء من كود برمجي مكتوب بلغة الآلة لبرنامج حاسوبي يجمع عددين:
</p>

<pre class="ipsCode" id="ips_uid_3880_7">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
</pre>

<p>
	إن تعليمات البرنامج السابق مكتوبة بالنظام الثنائي Binary System، وفي حال استخدامنا النظام الست عشري hexadecimal  لكتابة التعليمات سيكون البرنامج على النحو التالي:
</p>

<pre class="ipsCode" id="ips_uid_3880_9">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
</pre>

<p>
	وكما تلاحظ فقد كانت كتابة وقراءة لغة الآلة صعبة ومعقدة للغاية، لهذا السبب ظهرت لغات الجيل الثاني أو ما يعرف بلغات التجميع assembly languages وهي عبارة عن لغات ذات مستوى منخفض أيضًا لكن كودها البرمجي أسهل في الفهم نوعًا ما، فقد ابتكر علماء الحاسوب لغة التجميع لتكون بمثابة لغة وسيطة أسهل في الفهم والقراءة، وهي تتضمن مجموعة محدودة من التعليمات الخاصة بالتعامل المباشر مع العتاد الصلب والتجهيزات الإلكترونية القابلة للبرمجة، وهي تختلف بحسب ببنية كل معالج فكل جيل من المعالجات له لغة التجميع الخاصة به.
</p>

<p>
	على سبيل المثال، يوضح الكود التالي برنامجًا مكتوبًا بلغة التجميع لجمع عددين  وهو مخصص للعمل على معالج Intel x86 ويجمع العددين 5 و 7
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_2744_14" style=""><span class="pln">assembly
section </span><span class="pun">.</span><span class="pln">data
  num1 dd </span><span class="lit">5</span><span class="pln">
  num2 dd </span><span class="lit">7</span><span class="pln">
  result dd </span><span class="lit">0</span><span class="pln">

section </span><span class="pun">.</span><span class="pln">text
  global _start

_start</span><span class="pun">:</span><span class="pln">
  mov eax</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="pln">num1</span><span class="pun">]</span><span class="pln">
  add eax</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="pln">num2</span><span class="pun">]</span><span class="pln">
  mov </span><span class="pun">[</span><span class="pln">result</span><span class="pun">],</span><span class="pln"> eax

  </span><span class="pun">;</span><span class="pln"> </span><span class="typ">Exit</span><span class="pln"> the program
  mov eax</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pln">     </span><span class="pun">;</span><span class="pln"> </span><span class="typ">System</span><span class="pln"> call number </span><span class="kwd">for</span><span class="pln"> exit
  xor ebx</span><span class="pun">,</span><span class="pln"> ebx    </span><span class="pun">;</span><span class="pln"> </span><span class="typ">Exit</span><span class="pln"> status </span><span class="lit">0</span><span class="pln">
  </span><span class="typ">int</span><span class="pln"> </span><span class="lit">0x80</span><span class="pln">      </span><span class="pun">;</span><span class="pln"> </span><span class="typ">Make</span><span class="pln"> system call</span></pre>

<p>
	إذا قرأت الكود السابق فستنتج أن أول قسم منه Section .data يعرَف العددين num1 و num2 وهي المدخلات المطلوب جمعهما، كما يعرف متغير result لحفظ نتيجة الجمع، أما القسم _start فهو يشير لبداية البرنامج.
</p>

<p>
	وبعدها تبدأ التعليمات الفعلية حيث تنقل التعليمة <code>mov eax, [num1]</code> القيمة المخزنة في <code>num1</code> إلى المُسجَّل <code>eax</code> وتنقل التعليمة <code>add eax, [num2]</code> القيمة المخزنة في عنوان num2 إلى هذا المُسجَّل، وبعدها تُنقَل قيمة المُسجَّل إلى المتغير result الذي يخزن نتيجة الجمع النهائية، وتستخدم التعليمات الثلاثة الأخيرة للخروج من البرنامج وإنهاء تنفيذه.
</p>

<p>
	كما تلاحظ هذه اللغة مفهومة أكثر من لغة الآلة المليئة بالأصفار والوحدات لكنها لا تزال صعبة ومربكة، وتحتاج من المبرمج لأن يهتم بتفصيل دقيقة مثل تحديد المسجلات التي سيتم استخدامها ونقل البيانات إليها أو منها أثناء تنفيذ البرنامج، كما أنها لا تصلح لتطوير البرامج والخوارزميات المتقدمة وستنتج قدرًا كبيرًا من الكود لتنفيذ كل عمليلة.
</p>

<h3 id="midlevellanguages">
	لغات متوسطة المستوى Mid-Level Languages
</h3>

<p>
	بعد لغة التجميع، طورت لغات برمجة أخرى مثل بيزك BASIC وفورتران FORTRAN وباسكال Pascal و<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-c-%D9%88%D9%85%D9%85%D9%8A%D8%B2%D8%A7%D8%AA%D9%87%D8%A7-%D9%88%D8%AE%D8%B7%D9%88%D8%A7%D8%AA-%D8%AA%D8%B9%D9%84%D9%85%D9%87%D8%A7-r2268/" rel="">سي C</a> و C++‎ سميت بلغات البرمجة متوسطة المستوى، وهي لغات تقع في مكان وسطي بين لغات البرمجة منخفضة المستوى ولغات البرمجة ذات عالية المستوى مثل <a href="https://wiki.hsoub.com/Python" rel="external">بايثون Python</a> أو <a href="https://academy.hsoub.com/programming/java/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7-java-r2275/" rel="">جافا Java</a>، وهي تتيح للمبرمجين التحكم في التفاصيل الدقيقة للعتاد، وتوفر في نفس الوقت مستوى أعلى من المرونة في التعامل.
</p>

<p>
	على سبيل المثال لجمع عددين بلغة البرمجة C سيكون الكود بالشكل التالي:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_2744_8" style=""><span class="com">#include</span><span class="pln"> </span><span class="str">&lt;stdio.h&gt;</span><span class="pln">

</span><span class="typ">int</span><span class="pln"> main</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="com">// تعريف المتغيرات</span><span class="pln">
  </span><span class="typ">int</span><span class="pln"> num1 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pun">;</span><span class="pln">
  </span><span class="typ">int</span><span class="pln"> num2 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">7</span><span class="pun">;</span><span class="pln">
  </span><span class="typ">int</span><span class="pln"> result</span><span class="pun">;</span><span class="pln">

  </span><span class="com">// جمع الأرقام</span><span class="pln">
  result </span><span class="pun">=</span><span class="pln"> num1 </span><span class="pun">+</span><span class="pln"> num2</span><span class="pun">;</span><span class="pln">

  </span><span class="com">// طباعة النتيجة</span><span class="pln">
  printf</span><span class="pun">(</span><span class="str">"النتيجة هي: %d\n"</span><span class="pun">,</span><span class="pln"> result</span><span class="pun">);</span><span class="pln">

  </span><span class="kwd">return</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<h3 id="highlevellanguages">
	لغات عالية المستوى High-Level Languages
</h3>

<p>
	أخيرًا ظهرت لغات الجيل الثالث أو لغات البرمجة عالية المستوى مثل بايثون Python وروبي Ruby و<a href="https://academy.hsoub.com/programming/javascript/%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7-%D8%B3%D9%83%D8%B1%D9%8A%D8%A8%D8%AA-%D9%85%D9%86-%D8%A7%D9%84%D8%B5%D9%81%D8%B1-%D8%AD%D8%AA%D9%89-%D8%A7%D9%84%D8%A7%D8%AD%D8%AA%D8%B1%D8%A7%D9%81-r2046/" rel="">جافا سكريبت JavaScript</a> لتبسيط البرمجة على المطورين والمبرمجين، فهذه اللغات تعد من <a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D9%87%D9%84-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">أسهل لغات البرمجة</a> وتكتب تعليماتها بمفردات قريبة من مفردات اللغة الانجليزية المحكية، وهي سهلة القراءة والفهم من قبل البشر، ولا تضطرنا للتعامل مع التفاصيل الدقيقة المتعلقة بالعتاد.
</p>

<p>
	لكن هذه اللغات تحتاج إلى ترجمتها أو تفسيرها ليفهمها معالج الحاسوب ثم يتمكن من تنفيذها بالشكل الصحيح. وهذه اللغات ليست مرتبطة بنوع جهاز معين حيث يمكن تحويل أوامرها إلى تعليمات مختلفة بلغة الآلة حسب كل جهاز كي يتمكن من تفسيرها وتنفيذها.
</p>

<p>
	على سبيل المثال يحقق الكود التالي بلغة بايثون نفس وظيفة الكود السابق لجمع عددين، ويمكنك أن تلاحظ بساطة وسهولة اللغة ومدى قربها من كلامنا المحكي مقارنة بالأكواد السابقة:
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_2744_11" style=""><span class="com"># تعريف المتغيرات</span><span class="pln">
num1 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pln">
num2 </span><span class="pun">=</span><span class="pln"> </span><span class="lit">7</span><span class="pln">

</span><span class="com"># جمع الأرقام</span><span class="pln">
result </span><span class="pun">=</span><span class="pln"> num1 </span><span class="pun">+</span><span class="pln"> num2

</span><span class="com"># طباعة النتيجة</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"النتيجة هي:"</span><span class="pun">,</span><span class="pln"> result</span><span class="pun">)</span></pre>

<h2 id="-1">
	ما هي لغة الآلة وكيف تعمل
</h2>

<p>
	لغة الآلة أو لغة الأصفار والواحدات هي لغة برمجة تتكون من أوامر وتعليمات مكتوبة بطريقة يستطيع الحاسوب فهمها ومعالجتها، فالحاسوب يفهم في الواقع فقط الأصفار والواحدات حيث أن الرقم 1 يعني وجود تيار أو جهد كهربائي، والرقم 0 يعني عدم وجود تيار أو جهد كهربائي.
</p>

<p>
	وفي بدايات ظهور الحواسيب كانت هذه الأرقام تحول إلى أوامر، ومن ثم تنفذ مباشرة بواسطة وحدة المعالجة المركزية <a href="https://academy.hsoub.com/apps/operating-systems/%D9%88%D8%AD%D8%AF%D8%A9-%D8%A7%D9%84%D9%85%D8%B9%D8%A7%D9%84%D8%AC%D8%A9-%D8%A7%D9%84%D9%85%D8%B1%D9%83%D8%B2%D9%8A%D8%A9-r879/" rel="">CPU</a>. ويكون كل أمر عبارة عن رمز رقمي أو سلسلة من الرموز الرقمية الممثلة بالنظام الثنائي أو الست عشري كما شرحنا سابقًا، وتجدر الإشارة الأن هذه الرموز الرقمية خاصة بكل جهاز حيث تطور لكل بنية معالجات لغة آلة خاصة به.
</p>

<p>
	وقد كانت الطريقة الوحيدة لإدخال هذه التعليمات إلى الحواسيب في بدايات ظهورها هي من خلال <strong>البطاقات المثقبة</strong> فإجهزة الحواسيب الأولى لم تكن أجهزة قادرة بعد على تخزين البيانات في ملفات لذا إذا أردت كتابة برنامج بلغة الآلة وإدخاله للحاسوب فإن الطريقة الوحيدة هي استخدام هذه البطاقات المثقبة.
</p>

<p>
	تحتوي كل بطاقة على ثقوب تُعبر عن تعليمات محددة للكمبيوتر حول المهام التي نريد تنفيذها، فإذا كان الثقب موجودًا سيمثل القيمة 1، وإذا لم يكن هناك ثقب يمثل القيمة 0، وكان لهذه البطاقات أشكال عديدة لكن أشهرها كان البطاقة المكونة من 80 عمودًا التي طورتها شركة IBM في عام 1928 كما هو موضح في الصورة التالية.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="146559" href="https://academy.hsoub.com/uploads/monthly_2024_03/--IBM.jpg.c7a7f6c604382202ff4341b83de3564a.jpg" rel=""><img alt="بطاقة مثقبة ibm" class="ipsImage ipsImage_thumbnailed" data-fileid="146559" data-ratio="43.83" data-unique="y51wrni0u" style="width: 600px; height: auto;" width="600" src="https://academy.hsoub.com/uploads/monthly_2024_03/--IBM.thumb.jpg.286bb3f74c8d13a57c5d3677c04d5894.jpg"> </a>
</p>

<p>
	<a href="https://en.wikipedia.org/wiki/Punched_card" rel="external nofollow">مصدر الصورة</a>
</p>

<p>
	تخيل أنك ستحتاج إلى بطاقة واحدة مشابهة من أجل كتابة كل سطر من التعليمات البرمجية! لذا كانت كتابة برنامج كامل باستخدام هذه البطاقات أمرًا في غاية الصعوبة ويتطلب مجموعة هائلة من البطاقات، وكانت هذه البطاقات تمرر إلى الحاسوب بشكل تسلسلي إلى جهاز مخصص يسمى <strong>قارئ البطاقات</strong> ليقوم بقراءة تعليماتها عمودًا عمودًا ويحول تسلسل الثقوب إلى معلومات رقمية، ثم يحملها في ذاكرة الحاسوب، وبعد اكتمال قراءة وتحميل كل البطاقات في الذاكرة ينفذ تعليماتها البرمجية ثم يخرج النتائج على شكل بطاقات مثقبة أيضًا.
</p>

<p>
	ولك أن تتخيل كم كان المبرمجون الأوائل يبذلون جهدًا في عملية البرمجة والتواصل مع الحاسوب، وقد استمر العمل بهذه الآلية ظهرت الأقراص المغناطيسية والأجهزة الطرفية <a href="https://academy.hsoub.com/programming/os-embedded-systems/%D8%A7%D9%84%D8%A3%D8%AC%D9%87%D8%B2%D8%A9-%D8%A7%D9%84%D8%B7%D8%B1%D9%81%D9%8A%D8%A9-peripherals-%D9%88%D9%86%D9%88%D8%A7%D9%82%D9%84%D9%87%D8%A7-buses-%D9%81%D9%8A-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%D9%8A%D8%A9-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8-r1721/" rel="">peripherals</a> لتخزين وإدخال البيانات وظهرت أجهزة الحواسيب الشخصية التي ألغت استخدام البطاقات المثقوبة ووجعلتها جزءًا من تاريخ لغات البرمجة.
</p>

<h2 id="-2">
	مميزات لغة الآلة
</h2>

<p>
	بالرغم من أن لغة الآلة صعبة ومعقدة على البشر، إلا أنها تتمتع بمجموعة من المميزات والخصائص من أهما:
</p>

<ul>
	<li>
		تستخدام لغة الآلة الأرقام الثنائية 0 1 التي يفهمهما الحاسوب وينفذها مباشرة دون الحاجة إلى مترجم لتفسيرها.
	</li>
	<li>
		تسمح لغة الآلة للمبرمجين بالتحكم في عتاد الحاسوب مثل المعالج والذاكرة بشكل مباشر.
	</li>
	<li>
		تتميز لغة الآلة بالسرعة والكفاءة مقارنة مع اللغات عالية المستوى.
	</li>
	<li>
		تصلح لغات المستوى المنخفض لتطوير برامج النظام الأساسية للحواسيب.
	</li>
</ul>

<h2 id="-3">
	عيوب لغة الآلة
</h2>

<p>
	من أبرز العيوب التي تعاني منها لغة الآلة ما يلي:
</p>

<ul>
	<li>
		من الصعب كتابة البرامج والخوارزميات المعقدة وتنفيذها باستخدام لغة الآلة.
	</li>
	<li>
		تتطلب كتابة الكثير من أسطر التعليمات البرمجية لبرنامج بسيط
	</li>
	<li>
		يتطلب تعديل البرامج الكثير من الوقت والجهد
	</li>
	<li>
		من الصعب تحديد وتصحيح الأخطاء البرمجية للبرامج المكتوبة بلغة الآلة
	</li>
	<li>
		تكون لغة الآلة خاصة بالأجهزة أي أنها تعتمد على نوع أو عائلة معالج الجهاز الذي ستعمل عليه لذا تختلف من جهاز لآخر
	</li>
</ul>

<h2 id="-4">
	الخلاصة
</h2>

<p>
	تعرفنا في مقال اليوم على لغة الآلة التي تقع في أدنى مستويات لغات البرمجة والتي يفهمها الحاسوب بشكل مباشر وينفذها بواسطة وحدة المعالجة المركزية CPU، وتعرفنا على طريقة التعامل معها وأبرز مميزاتها وعيوبها. واليوم لم تعد لغة الآلة أو لغات المستوى المنخفض تستخدم من قبل المبرمجين إلا في مجالات وتطبيقات محدودة للغاية تحتاج للتعامل مع عتاد الحاسوب مباشرة، فقد أصبحت لغات البرمجة عالية المستوى أسهل بكثير ولكن تذكر أن جميع لغات البرمجة تحول في نهاية المطاف إلى برامج بلغة الآلة كي تنفذ من قبل الحاسوب.
</p>

<h2 id="-5">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%85%D8%B3%D8%AA%D9%88%D9%8A%D8%A7%D8%AA-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">مستويات لغات البرمجة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">دليلك إلى أنواع لغات البرمجة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D8%A8%D8%B3%D8%A7%D8%B7%D8%A9-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-r1870/" rel="">قواعد البرمجة ببساطة للمبتدئين</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">تعلم أساسيات البرمجة</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2272</guid><pubDate>Wed, 13 Mar 2024 12:04:00 +0000</pubDate></item><item><title>&#x62A;&#x639;&#x631;&#x641; &#x639;&#x644;&#x649; &#x644;&#x63A;&#x629; C &#x648;&#x645;&#x645;&#x64A;&#x632;&#x627;&#x62A;&#x647;&#x627; &#x648;&#x62E;&#x637;&#x648;&#x627;&#x62A; &#x62A;&#x639;&#x644;&#x645;&#x647;&#x627;</title><link>https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-c-%D9%88%D9%85%D9%85%D9%8A%D8%B2%D8%A7%D8%AA%D9%87%D8%A7-%D9%88%D8%AE%D8%B7%D9%88%D8%A7%D8%AA-%D8%AA%D8%B9%D9%84%D9%85%D9%87%D8%A7-r2268/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_03/---.png.b1746698e148ef85eea014c544f669eb.png" /></p>
<p>
	يعرفك هذا المقال على لغة سي C التي تعد واحدة من أقوى لغات البرمجة وأكثرها عراقة في تاريخ علوم الحاسوب وهندسة البرمجيات، فهي اللغة التي اعتمدت عليها كثير من لغات البرمجة، وطورت باستخدامها معظم أنظمة التشغيل، وعلى الرغم من ظهور العديد من لغات البرمجة الأحدث منها لا تزال لغة البرمجة C حتى اليوم لغة منتشرة ومستخدمة في العديد من التطبيقات والمجالات لما توفره من ميزات وخصائص لا تتوفر في غيرها.
</p>

<h2 id="c">
	ما هي لغة سي C
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="145964" href="https://academy.hsoub.com/uploads/monthly_2024_03/---.png.1dccc1aa73fc6fc5f3366a3ba95f6004.png" rel=""><img alt="ما هي لغة سي" class="ipsImage ipsImage_thumbnailed" data-fileid="145964" data-ratio="62.60" data-unique="yg953d5nc" style="width: 500px; height: auto;" width="500" src="https://academy.hsoub.com/uploads/monthly_2024_03/---.thumb.png.af09834727c246ce78a0db761d4bdd7b.png"> </a>
</p>

<p>
	لغة سي C هي لغة برمجة عامة الأغراض طورها المبرمج دينيس ريتشي Dennis Ritchie من شركة Bell Labs عام 1972 بهدف إيجاد لغة برمجة فعالة ومفهومة تصلح لبرمجة أنظمة التشغيل، فكانت لغة سي C التي اتسمت ببساطتها وقوتها ووفرت إمكانية الوصول المباشر لموارد الحاسوب.
</p>

<p>
	كما استخدمت لغة سي لبرمجة نظام التشغيل يونكس Unix المُطوَّر كذلك في شركة Bell Labs فقد كانت نواة يونكس مكتوبة بلغة التجميع assembly وهي لغة برمجة <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%B3%D8%AA%D9%88%D9%8A%D8%A7%D8%AA-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">منخفضة المستوى</a>، ثم نقلت للغة C التي تفوقت عليها وتمكنت من تأدية مهامها بنفس الكفاءة وبعدد أقل من أسطر التعليمات البرمجية وهذا زاد من قوتها وشهرتها وبدأ استخدامها في العديد من المجالات والتطبيقات العديدة الأخرى.
</p>

<p>
	ستجد أن لغة C تصنف وفق عدة <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%B3%D8%AA%D9%88%D9%8A%D8%A7%D8%AA-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">مستويات للغات البرمجة</a> فبعض المراجع تصنفها على أنها لغة برمجة عالية المستوى high level programming language في حين تصنفها مراجع أخرى بأنها لغة برمجة متوسطة المستوى medium level programming language لكونها تتضمن العديد من الميزات والوظائف منخفضة المستوى وعالية المستوى بنفس الوقت، ويمكن اعتبارها كلغة وسيطة بين اللغات منخفضة المستوى المنخفض مثل لغة الآلة أو لغة التجميع، واللغات عالية المستوى مثل لغة <a href="https://academy.hsoub.com/programming/java/" rel="">جافا</a> أو <a href="https://academy.hsoub.com/programming/python/" rel="">بايثون</a>.
</p>

<p>
	كما تسمى لغة البرمجة C بأم لغات البرمجة حيث اعتمدت معظم لغات البرمجة الأحدث مثل C++‎ و C#‎ وجافا وبايثون و PHP وجو Go على طريقتها وأسلوبها في كتابة التعليمات ولهذا السبب ستجد أن لغة سي C أول لغة برمجة يقرر تعليمها لطلاب كليات هندسة البرمجيات وعلوم الحاسوب والتعرف على أساسيات البرمجة من خلالها، فتعلم هذه اللغة يوفر الأساس المتين الذي يمكن المبرمج من فهم <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A3%D9%83%D9%88%D8%A7%D8%AF-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r2244/" rel="">أكواد</a> أي لغة برمجة أخرى بسهولة أكبر واحتراف حل المشكلات البرمجية وبعد تعلمها لن يصعب عليه تعلم أي لغة برمجة أخرى.
</p>

<h2 id="c-1">
	استخدامات لغة سي C
</h2>

<p>
	تستخدم لغة C في مجموعة منوعة من التطبيقات والمجالات ومن أبرز استخداماتها:
</p>

<ul>
	<li>
		<p>
			تطوير أنظمة التشغيل فنواة نظام التشغيل يونكس UNIX ولينكس Linux وويندوز Windows ونواة أنظمة Apple OS X كلها مكتوبة بلغة سي C.
		</p>
	</li>
	<li>
		<p>
			برمجة التطبيقات المساعدة لنظام التشغيل فمعظم متصفحات الويب على سبيل المثال مبرمجة بلغة C كما أن معظم إضافات المتصفحات مكتوبة بها.
		</p>
	</li>
	<li>
		<p>
			تطوير لغات البرمجة ومصرفاتها Compilers أو مفسراتها Interpreters وهي عبارة عن برامج تحول أو تترجم لغات البرمجة عالية المستوى إلى لغة الآلة، على سبيل المثال مفسر لغة <a href="https://wiki.hsoub.com/Python" rel="external" target="_blank">بايثون</a> Python Interpreter مطور باستخدام لغة C.
		</p>
	</li>
	<li>
		<p>
			برمجة التطبيقات المضمنة وتطبيقات انترنت الأشياء <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%88-%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-%D8%A7%D9%84%D8%A3%D8%B4%D9%8A%D8%A7%D8%A1-iot-r1783/" rel="">IoT</a> والأنظمة المدمجة وبرمجة المتحكمات الدقيقة المستخدمة في برمجة الأجهزة الذكية كالسيارات ذاتية القيادة أو الروبوتات الذكية لما توفره من تحكم مباشر بالعتاد.
		</p>
	</li>
	<li>
		<p>
			بناء قواعد البيانات فالعديد من أنظمة إدارة قواعد البيانات المعروفة مثل أوراكل Oracle و MySQL و PostgreSQL تستخدم لغة C.
		</p>
	</li>
	<li>
		<p>
			تعد لغة C كذلك لغة مثالية <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%B3%D8%B7%D8%AD-%D8%A7%D9%84%D9%85%D9%83%D8%AA%D8%A8/" rel="">لبرمجة تطبيقات سطح المكتب</a> فعالة وعالية الأداء، فهي تمكن المطور من الوصول بسهولة لموارد الحاسوب كالمعالج والذاكرة والتحكم في أداء التطبيق بمرونة كبيرة.
		</p>
	</li>
	<li>
		<p>
			<a href="https://academy.hsoub.com/programming/game-development/%D9%84%D8%BA%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%A3%D9%84%D8%B9%D8%A7%D8%A8/" rel="">برمجة الألعاب الإلكترونية</a> وتطوير محركات الألعاب <a href="https://academy.hsoub.com/programming/game-development/%D9%85%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D9%84%D8%B9%D8%A7%D8%A8-game-engines/" rel="">Game Engines</a> ومن أشهر الألعاب المطورة باستخدام لغة سي C لعبة Quake و Doom.
		</p>
	</li>
	<li>
		<p>
			تطوير خوادم الويب الكبيرة التي تحتاج إلى التعامل مع عدد كبير من الطلبات في وقت واحد و معالجة البيانات بسرعة مثل خادم أباتشي <a href="https://academy.hsoub.com/devops/servers/web/apache/" rel="">Apache</a> أو إنجن إكس <a href="https://academy.hsoub.com/devops/servers/web/nginx/" rel="">Nginx</a>
		</p>
	</li>
	<li>
		<p>
			وبالعموم تصلح لغة سي بشكل عام لتطوير كافة التطبيقات عالية الأداء التي تحتاج لإنجاز الكثير من العمليات أو تتطلب معالجة كمية ضخمة من البيانات بسرعة.
		</p>
	</li>
</ul>

<h2 id="c-2">
	مميزات لغة سي C
</h2>

<ul>
	<li>
		لغة C مشهورة على نطاق واسع فهي واحدة من أكثر لغات البرمجة شعبية بين المطورين.
	</li>
	<li>
		لغة منظمة ومستقلة عن نظام التشغيل حيث يمكن تصريف تعليماتها للعمل على منصات وأنظمة مختلفة مثل ويندوز Windows ولينكس Linux وماك macOS وأندرويد Android.
	</li>
	<li>
		تشكل لغة سي الأساس للعديد من اللغات الأخرى فمعظم لغات البرمجة الحديثة تتبع أسلوبها في كتابة التعليمات.
	</li>
	<li>
		تتبع لغة البرمجة C نموذج البرمجة الإجرائية procedural programming language التي تعتمد على تقسيم المشكلة إلى سلسلة من الإجراءات أو الخطوات التي تستدعى بترتيب معين لحل المشكلة وهذا الأسلوب سهل في التعلم والفهم.
	</li>
	<li>
		توفر لغة C وصولاً مباشرًا إلى موارد النظام وإدارة الذاكرة والتحكم بها وتخصيصها ما يساعد على تطوير برامج فعالة عالية الكفاءة.
	</li>
	<li>
		تعد لغة سي قابلة للتوسيع وتوفر للمطورين مفهوم <a href="https://academy.hsoub.com/programming/c/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D9%85%D9%83%D8%AA%D8%A8%D8%A7%D8%AA-%D9%84%D8%BA%D8%A9-%D8%B3%D9%8A-c-r1777/" rel="">المكتبات libraries</a> التي توسع وظائف اللغة كما تحتوي على العديد من المكتبات المضمنة التي توفر للمطورين وظائف جاهزة للاستخدام.
	</li>
	<li>
		لغة C متعددة الاستخدامات حيث يمكن استخدامها لتطوير أنظمة التشغيل وبرامج تشغيل الأجهزة والألعاب وأنظمة قواعد البيانات وغيرها<br>
		من التطبيقات العديدة الأخرى.
	</li>
	<li>
		تعد C من لغات البرمجة المصرفة <a href="https://academy.hsoub.com/programming/c/%D8%A7%D9%84%D9%81%D8%B5%D9%84-%D8%A7%D9%84%D8%A3%D9%88%D9%84-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%AA%D8%B5%D8%B1%D9%8A%D9%81-compilation-%D9%81%D9%8A-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r976/" rel="">compiled</a> وهي أسرع من لغات البرمجة المُفسرة interpreted.
	</li>
</ul>

<h2 id="c-3">
	عيوب لغة سي C
</h2>

<ul>
	<li>
		لا تدعم لغة سي مبدأ البرمجة كائنية التوجه <abbr title="Object-Oriented Programming | البرمجة كائنية التوجه"><abbr title="Object-Oriented Programming | البرمجة كائنية التوجه">OOP</abbr></abbr> بشكل ضمني وتدعم فقط نموذج البرمجة الإجرائية وهذا يجعل إعادة استخدام الشيفرة محدود ويصعب صيانة البرامج الكبيرة، لكن هناك مكتبات يمكن أن توسع ميزات اللغة وتضيف لها بعض الميزات كائنية التوجه للغة مثل مكتبة OOPC.
	</li>
	<li>
		تجبرك لغة سي C على تحديد نوع المتغير عند التصريح عنه، لكنها لا تفرض قيودًا صارمة على أنواع المتغيرات، حيث يمكنك على سبيل المثال تعريف متغير من نوع عدد صحيح int واستخدامه لاحقًا لتخزين قيمة من نوع عدد حقيقي float وهذا قد يؤدي إلى وقوع بعص الأخطاء في البرنامج.
	</li>
	<li>
		تتحقق لغة C من الأخطاء البرمجية وقت تشغيل الكود "runtime" مما يصعب عملية فحص الكود وتصحيح الأخطاء البرمجية خاصة في المشاريع الضخمة.
	</li>
	<li>
		لا تدعم لغة C مفهوم الاستثناءات exceptions وهو مفهوم برمجي يسهل تحديد الأخطاء البرمجية وتصحيحها.
	</li>
	<li>
		لا تدعم لغة C مفهوم فضاءات الأسماء namespace التي تعد من الميزات البرمجية المفيدة في منع تضارب بين أسماء المتغيرات أو الوظائف وتساعد في تنظيم التعليمات البرمجية.
	</li>
</ul>

<h2 id="cc">
	الفرق بين لغة C ولغة C++‎
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="145963" href="https://academy.hsoub.com/uploads/monthly_2024_03/---C--Cpp.png.c7c40bfbe9a03aae3281806666911e11.png" rel=""><img alt="الفرق بين لغة c ولغة cpp" class="ipsImage ipsImage_thumbnailed" data-fileid="145963" data-ratio="62.60" data-unique="mrk3v69n9" style="width: 500px; height: auto;" width="500" src="https://academy.hsoub.com/uploads/monthly_2024_03/---C--Cpp.thumb.png.ee71523a9f3ac370e93f56414b6aa21c.png"> </a>
</p>

<p>
	تعد لغة <a href="https://academy.hsoub.com/programming/cpp/" rel="">++C</a> امتدادًا للغة البرمجة C، فهي لغة برمجة عامة الأغراض طورها بيارن ستروستروب Bjarne Stroustup عام 1979 لتكون مزيجًا من لغة C ومن الأصناف البرمجية <a href="https://academy.hsoub.com/programming/cpp/%D8%A7%D9%84%D8%A3%D8%B5%D9%86%D8%A7%D9%81-classes-%D9%88%D8%A7%D9%84%D8%A8%D9%86%D9%8A%D8%A7%D8%AA-structures-%D9%81%D9%8A-cpp-r933/" rel="">Classes</a> فهي تدعم كلاً من نموذج البرمجة الإجرائية المتبع في لغة C كما تدعم نموذج البرمجة كائنية التوجه بنفس الوقت.
</p>

<p>
	حيث تحتوي لغة C++‎ على جميع ميزات لغة سي C مثل التوافق مع معظم بيئات التشغيل وإدارة الذاكرة بصورة فعالة وتوفير مكتبة غنية من الوظائف البرمجية، كما تضيف لها ميزات أخرى عديدة لزيادة كفاءتها على سبيل المثال تدعم C++‎ <a href="https://academy.hsoub.com/programming/cpp/%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%AB%D9%86%D8%A7%D8%A1%D8%A7%D8%AA-exceptions-%D9%81%D9%8A-cpp-r959/" rel="">معالجة الاستثناءات</a> وميزة <a href="https://academy.hsoub.com/programming/cpp/%D9%81%D8%B6%D8%A7%D8%A1%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D9%85%D8%A7%D8%A1-namespaces-%D9%81%D9%8A-cpp-r938/" rel="">فضاءات الأسماء</a> وميزات حماية البيانات وغيرها من الميزات غير المدعومة في لغة C بشكل ضمني.
</p>

<p>
	يمكن القول أن لغة C مناسبة أكثر لبرمجة التطبيقات منخفضة المستوى مثل أنظمة التشغيل وبرامج تشغيل الأجهزة التي تحتاج لمقدار كبير من التحكم بالعتاد، في حين تعد لغة C++‎ مناسبة أكثر لتطوير التطبيقات الأكثر تعقيدًا والتي تحتاج لمستوى أمان عالي وسرعة في الأداء.
</p>

<h2 id="c-4">
	خطوات تعلم لغة سي C
</h2>

<p>
	إليك أهم الخطوات الرئيسية التي تساعدك على تعلم لغة <span class="ipsEmoji">?</span>
</p>

<ul>
	<li>
		قبل البدء بخطوات تعلم لغة سي حاول أن تفهم مبادئ <a href="https://academy.hsoub.com/programming/advanced/%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA/" rel="">الخوارزميات</a> <a href="https://academy.hsoub.com/programming/general/%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%81%D9%83%D9%8A%D8%B1-%D8%A7%D9%84%D9%85%D9%86%D8%B7%D9%82%D9%8A-%D9%81%D9%8A-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r2095/" rel="">والتفكير المنطقي</a> فهي خطوة أساسية تسرع زمن تعلم البرمجة.
	</li>
	<li>
		تعلم تثبيت مصرف لغة C على جهازك ومحرر لكتابة الأكواد البرمجية وجرب كتابة البرنامج الأول وتصريفه وتشغيله.
	</li>
	<li>
		ابدأ بتعلم ا<a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">لمفاهيم الأساسية للبرمجة</a> بهذه اللغة مثل تعريف المتغيرات وانواعها واستخداماتها وإجراء العمليات عليها واستخدام عبارات التحكم مثل الشروط والحلقات والمصفوفات <a href="https://academy.hsoub.com/programming/c/%D9%87%D9%8A%D8%A7%D9%83%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D8%AA%D8%AD%D8%A7%D8%AF%D8%A7%D8%AA-unions-%D9%88%D8%AD%D9%82%D9%88%D9%84-%D8%A7%D9%84%D8%A8%D8%AA%D8%A7%D8%AA-bitfields-%D9%88%D8%A7%D9%84%D9%85%D8%B9%D8%AF%D8%AF%D8%A7%D8%AA-eums-%D9%81%D9%8A-%D9%84%D8%BA%D8%A9-%D8%B3%D9%8A-c-r1748/" rel="">والاتحادات</a> والسلاسل وغيرها من <a href="https://academy.hsoub.com/programming/c/%D9%87%D9%8A%D8%A7%D9%83%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-%D8%A7%D9%84%D9%85%D8%AA%D8%B1%D8%A7%D8%A8%D8%B7%D8%A9-linked-lists-%D9%88%D8%A7%D9%84%D8%A3%D8%B4%D8%AC%D8%A7%D8%B1-trees-%D9%81%D9%8A-%D9%84%D8%BA%D8%A9-%D8%B3%D9%8A-c-r1747/" rel="">هياكل البيانات</a>، ومفهوم الدوال البرمجية وطريقة استخدامها.
	</li>
	<li>
		طبق ما تتعلمه من مفاهيم أساسية على <a href="https://academy.hsoub.com/programming/c/%D8%A8%D8%B9%D8%B6-%D8%A7%D9%84%D8%A8%D8%B1%D8%A7%D9%85%D8%AC-%D8%A7%D9%84%D8%A8%D8%B3%D9%8A%D8%B7%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%B3%D9%8A-c-%D8%A7%D9%84%D9%85%D8%B5%D9%81%D9%88%D9%81%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%B9%D9%85%D9%84%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B3%D8%A7%D8%A8%D9%8A%D8%A9-r1608/" rel="">كتابة بعض البرامج بسيطة بلغة سي</a> وتأكد من أنك فهمت الأساسيات جيدًا وتدربت على استكشاف الأخطاء وإصلاحها قبل أن تنتقل للخطوة التالية.
	</li>
	<li>
		ابدأ بدراسة مواضيع متقدمة مثل المؤشرات والقوائم المتسلسلة وتعلم أساليب تخصيص الذاكرة الديناميكية والتعامل مع الملفات.
	</li>
	<li>
		حدد نوع التطبيقات العملية الذي تهتم به وتعرف على أهم المكتبات والأدوات التي تساعدك على تطوير هذا النوع من التطبيقات، على سبيل المثال إذا كنت مهتمًا بتطوير التطبيقات المضمنة فعليك الاهتمام بأمور المتحكمات الدقيقة ومنافذها والتحكم بالذاكرة بشكل فعال، والبدء ببناء تطبيقات عملية تعزز خبراتك وتساعدك على بناء معرض أعمال والحصول على فرصة عمل مناسبة.
	</li>
	<li>
		ستجد الكثير من مصادر تعلم لغة C من دروس ومنتديات ومقاطع فيديو وكتب ودورات تدريبية وغيرها، لكن أنصحك أن لا تشتت نفسك بكثرة المصادر وركز على تعلم موثوقة تناسب أسلوبك في التعلم، ستجد في أكاديمية حسوب الكثير من <a href="https://academy.hsoub.com/programming/c/" rel="">المقالات والدروس</a> الدورية التي تساعدك على تعلم لغة C، وإذا كنت تفضل التعلم من الكتب فقد وفرت لك أكاديمية حسوب كتاب البرمجة بلغة C وهو كتاب شامل يناسب المبتدئين ويضم الكثير من المواضيع المفيدة.<br>
		 
	</li>
</ul>
<iframe allowfullscreen="" class="ipsEmbed_finishedLoading" data-controller="core.front.core.autosizeiframe" data-embedauthorid="3889" data-embedcontent="" data-embedid="embed4263995197" src="https://academy.hsoub.com/files/37-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%B3%D9%8A/?do=embed" style="overflow: hidden; height: 470px; max-width: 500px; margin:auto;"></iframe>

<h2 id="">
	الخلاصة
</h2>

<p>
	بهذا تكون وصلت لنهاية هذا المقال الذي تعرف فيه على لغة سي C وتعرفت على أبرز خصائصها ومزاياها واستخداماتها، فإذا كنت مهتمًا بتعلم لغة برمجة قوية وفعالة ومتعددة الأغراض، فإن لغة C هي خيار مثالي للبدء فمن خلالها تعلمها ستتمكن من إتقان مفاهيم البرمجة وإنشاء تطبيقات احترافية وعالية الأداء.
</p>

<h2 id="-1">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/c/%D8%A8%D9%86%D9%8A%D8%A9-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D8%AC-%D9%84%D8%BA%D8%A9-%D8%B3%D9%8A-c-r1607/" rel="">بنية برنامج لغة سي C</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/c/%D8%AA%D9%87%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D9%85%D8%AA%D8%BA%D9%8A%D8%B1%D8%A7%D8%AA-%D9%88%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D9%84%D8%BA%D8%A9-%D8%B3%D9%8A-c-r1749/" rel="">تهيئة المتغيرات وأنواع البيانات في لغة سي C</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/c/%D8%A7%D9%84%D8%AF%D9%88%D8%A7%D9%84-%D9%81%D9%8A-%D9%84%D8%BA%D8%A9-c-r1646/" rel="">الدوال في لغة C</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/cpp/%D9%85%D8%AF%D8%AE%D9%84-%E2%80%8E%D8%A5%D9%84%D9%89-c-r802/" rel="">مدخل إلى ++C</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2268</guid><pubDate>Fri, 08 Mar 2024 12:02:01 +0000</pubDate></item><item><title>&#x645;&#x647;&#x646;&#x62F;&#x633; &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x64A;&#x627;&#x62A; &#x645;&#x646; &#x647;&#x648; &#x648;&#x645;&#x627; &#x647;&#x64A; &#x645;&#x647;&#x627;&#x645;&#x647;</title><link>https://academy.hsoub.com/programming/general/%D9%85%D9%87%D9%86%D8%AF%D8%B3-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D9%85%D9%86-%D9%87%D9%88-%D9%88%D9%85%D8%A7-%D9%87%D9%8A-%D9%85%D9%87%D8%A7%D9%85%D9%87-r2264/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_02/------.png.c446ee1b2c6a7ad0060217431fffa024.png" /></p>
<p>
	إذا كنت مهتمًا لأن تصبح مهندس برمجيات وتتساءل عن طبيعة عمل مهندس البرمجيات وعن المهام التي ستوكل إليك عند العمل في هذه الوظيفة في شركة ما، وهل راتب مهندس البرمجيات مجزي أم لا ويتناسب مع الجهد المبذول، ففي مقال اليوم سنجيبك على كل هذه التساؤلات ونساعدك في معرفة أهم التقنيات والمتطلبات التي عليك تعلمها كي تصبح مهندس برمجيات محترف ونضع لك قائمة بأهم مصادر تعلمها.
</p>

<h2 id="">
	من هو مهندس البرمجيات
</h2>

<p>
	مهندس البرمجيات هو المبرمج الذي يطبق مبادئ الهندسة في عملية تصميم وتطوير البرمجيات، فهو شخص خبير يمتلك معرفة دقيقة بأنواع البرمجيات المختلفة مثل برامج النظام والبرامج التطبيقية ويعرف الكثير من لغات البرمجة والتقنيات الرقمية.
</p>

<p>
	كما يعرف مهندس البرمجيات كيف يحدد احتياجات مستخدمي البرامج والتطبيقات بدقة وكيف يصفها ويعبر عنها بشكل واضح ومفهوم ويقسمها لمهام متعددة لتنفيذها وفق خطوات محددة ومنظمة، فهو يطور هذه البرمجيات خلال مراحل متخلفة وباتباع منهجيات محددة <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/" rel="">لتطوير البرمجيات</a> مثل منهجية الشلال Waterfall أو منهجية أجايل <a href="https://academy.hsoub.com/entrepreneurship/business/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D9%84%D9%85%D9%86%D9%87%D8%AC%D9%8A%D8%A9-%D8%A3%D8%AC%D8%A7%D9%8A%D9%84-agile-r1047/" rel="">Agile</a> ويطبق المبادئ الهندسية في كل مرحلة من هذه المراحل للحصول على برمجيات عالية الأداء تلبي المتطلبات.
</p>

<h2 id="-1">
	الفرق بين المبرمج ومهندس البرمجيات؟
</h2>

<p>
	انتبه فليس كل مبرمج أو <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-r1827/" rel="">مطور تطبيقات</a> هو مهندس برمجيات، وعلى الرغم من أن مصطلحات مثل مطور ومبرمج ومهندس برمجيات تستخدم في كثير من الأحيان للدلالة على نفس الوظيفة إلا أن هناك اختلافات بينهما، فمسؤوليات مهندسي البرمجيات أشمل وأوسع.
</p>

<p>
	فدور المبرمج يقتصر على مهمة محددة وهي كتابة الشيفرات والأكواد البرمجية ويتطلب هذا الدور فهمًا قويًا بلغات البرمجة و<a href="https://academy.hsoub.com/programming/advanced/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA-r1282/" rel="">الخوارزميات</a> و<a href="https://academy.hsoub.com/programming/advanced/%D8%A3%D9%85%D8%AB%D9%84%D8%A9-%D8%B9%D9%86-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA-r1410/" rel="">أنواعها</a> وهياكل البيانات واستخداماتها، في حين يشرف مهندس البرمجيات على كامل عملية تطوير البرمجيات بدءًا من مرحلة وضع المتطلبات والتصميم الأولي وصولًا لمرحلة البرمجة وكتابة الأكواد، وانتهاء بمرحلة الاختبار والصيانة، ويتطلب منه هذا الدو الشامل فهمًا قويًا بدورة حياة تطوير البرمجيات ومنهجيات تطويرها وأنماط تصميم البرمجيات إضافة لفهم لغات البرمجة والخوارزميات.
</p>

<p>
	بمعنى آخر يهتم المبرمج بأمور تنفيذ المشروع ويكتب الكود البرمجي الخاص به وهو ما يعرف بمصطلح implementation، أما مهندس البرمجيات فيقوم بأكثر من ذلك بكثير فهو يخطط ويحلل متطلبات المشروع ويقدم أنسب الحلول لتحقيقه بناءً على معرفته وخبرته الهندسية ويبدأ دوره قبل بدء المبرمج بمرحلة كتابة الكود إذ يكون لديه تصور واضح عن مراحل العمل ككل قبل البدء بإنجازه.
</p>


<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			هل ترغب في تصميم وتطوير برمجيات متقنة لأعمالك؟
		</p>

		<p class="banner-subtitle">
			وظّف مهندس برمجيات خبير من مستقل
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://mostaql.com/freelancers/software-engineer" rel="external">أضف مشروعك الآن</a>
		</div>
	</div>
</div>



<h2 id="-2">
	أهمية هندسة البرمجيات
</h2>

<p>
	تعد هندسة البرمجيات واحدة من أكثر الوظائف المطلوبة اليوم والتي ستظل مطلوبة في <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%B3%D8%AA%D9%82%D8%A8%D9%84-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">المستقبل</a>، نظرًا للتطور التقني المتسارع والمتشعب في مختلف المجالات ما يستدعي الحاجة إلى توظيف مهندسي البرمجيات لتطوير برامج وتطبيقات تحل مختلف المشكلات بشرعة واحترافية.
</p>

<p>
	ولا تقتصر أهمية هندسىة البرمجيات على شركات التطوير البرمجي بل تلجأ معظم القطاعات والصناعات اليوم مثل شركات الاتصالات والبنوك ومؤسسات القطاع الصحي وغيرها من قطاعات العمل إلى التحول الرقمي وتحتاج إلى تعيين مهندسي البرمجيات للاستفادة من مهاراتهم في <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA/" rel="">برمجة التطبيقات</a> المختلفة وصيانتها وتحسينها.
</p>

<p>
	وهذا الطلب المرتفع يجعل رواتب مهندسي البرمجيات أعلى بكثير من المهن الأخرى، وبالطبع يختلف راتب مهندس البرمجيات اعتمادًا على الخبرة ومكان العمل لكنه بالعموم يتقاضى رواتب مرتفعة ومجزية مقارنة ببقية الوظائف لذا احرص على تطوير خبراتك ومهاراتك إذا أردت أن تضمن راتبًا مجزيًا.
</p>

<h2 id="-3">
	مهام مهندس البرمجيات
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="145488" href="https://academy.hsoub.com/uploads/monthly_2024_02/-.png.c752fd6e3979c983288e6d9e37e9fd5d.png" rel=""><img alt="مهندس برمجيات" class="ipsImage ipsImage_thumbnailed" data-fileid="145488" data-ratio="62.67" data-unique="jj4vrr5x0" style="width: 450px; height: auto;" width="500" src="https://academy.hsoub.com/uploads/monthly_2024_02/-.thumb.png.dc3613e030a725e5f205cc1fc57e0dc4.png"></a>
</p>

<p>
	قد تختلف مهام مهندس البرمجيات من مكان عمل لآخر وحسب نوع البرمجيات التي يطلب منه تطويرها، لكن بشكل عام إذا قررت العمل في وظيفة مهندس برمجيات فقد يطلب منك القيام بالمهام التالية:
</p>

<ul>
	<li>
		تحليل متطلبات مستخدمي المنتج البرمجي المطلوب تطويره وتحديد مواصفاته بناء على هذه المتطلبات
	</li>
	<li>
		تصميم البرمجيات وإعداد وثائق تخطيط المشروع والمواصفات ووثائق اختبار الوحدات التي تحدد التصور العام للبرامج المطلوب تطويرها وتوضح تفاصيل عملها وهيكليتها ومكوناتها المختلفة قبل البدء بنتفيذها.
	</li>
	<li>
		اختيار لغة البرمجة والتقنيات المناسبة <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-r1827/" rel="">لتطوير التطبيقات</a> وكتابة الشيفرات البرمجة اللازمة لتنفيذها.
	</li>
	<li>
		اختبار البرمجيات بشكل مؤتمت أو يدوي والتأكد من خلوها من الأخطاء وإصلاحها في حال وجودها.
	</li>
	<li>
		الإشراف على عملية نشر البرمجيات وإتاحتها للمستخدمين.
	</li>
	<li>
		فحص أي عيوب في البرمجيات بعد نشرها، وصيانتها بصورة دورية وضمان توافقها مع أي أجهزة أو تقنيات جديدة.
	</li>
	<li>
		وضع تصور لتطويرات مستقبلية وإضافة ميزات جديدة تحسن هذه البرمجيات.
	</li>
</ul>

<h2 id="-4">
	مهارات مهندس البرمجيات
</h2>

<p>
	يحتاج أي مهندس البرمجيات لامتلاك مجموعة من المهارات الفنية والسمات الشخصية ومن أهم هذه السمات نذكر:
</p>

<ul>
	<li>
		مهارات في <a href="https://academy.hsoub.com/programming/general/%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%81%D9%83%D9%8A%D8%B1-%D8%A7%D9%84%D9%85%D9%86%D8%B7%D9%82%D9%8A-%D9%81%D9%8A-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r2095/" rel="">التفكير المنطقي</a> والتحليلي ومرونة في التعامل مع المشكلات وإيجاد حلول فعالة لها.
	</li>
	<li>
		معرفة جيدة بالخوارزميات وهياكل البيانات
	</li>
	<li>
		مهارات تقنية ومعرفة جيدة بلغات البرمجة وأهم أطر العمل والمكتبات المساعدة
	</li>
	<li>
		التنظيم ومهارات التواصل الجيدة للتفاعل مع فريق العمل البرمجي والعملاء ومدراء المشاريع.
	</li>
	<li>
		معرفة بدورة حياة البرمجيات ومراحل تطويرها ومعرفة بمنهجيات تطوير البرمجيات وآلية تطبيقها.
	</li>
	<li>
		القدرة على التطور المستمر ومتابعة أحدث التقنيات واستخدامها فالمجال البرمجي سريع التطور.
	</li>
</ul>

<p>
	ولمطالعة المزيد من السمات الشخصية التي تحتاج لامتلاكتها لتكون مهندس برمجيات ناجح أنصحك بمشاهدة الفيديو التالي:
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="487" id="ips_uid_5717_6" src="https://academy.hsoub.com/applications/core/interface/index.html" title="المهارات الشخصية التي يجب توافرها في المبرمجين" width="866" data-embed-src="https://www.youtube.com/embed/VnLOR7HVc8Y"></iframe>
</p>

<h2>
	مجالات عمل هندسة البرمجيات
</h2>

<p>
	إذا قررت العمل في وظيفة هندسة البرمجيات فلن يقتصر عملك على الإشراف على عملية تطوير البرمجيات وتطبيق مبادئ الهندسة على البرمجيات كما شرحنا سابقًا، <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AC%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">فمجالات البرمجة</a><span id="cke_bm_1767C" style="display: none;"> </span> كثيرة ومتنوعة لذا ستجد العديد من المجالات التي يمكنك العمل بها بحسب خبرتك والمهارات التي تتقنها والتقنيات التي تهتم للعمل بها.
</p>

<p>
	ومن أهم مجالات عمل هندسة البرمجيات نذكر:
</p>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%85%D8%B7%D9%88%D8%B1-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/" rel="">مطور برمجيات</a>  أو مطور تطبيقات مثل تطبيقات الويب أو تطبيقات الجوال أو التطبيقات المدمجة <a href="https://academy.hsoub.com/programming/os-embedded-systems/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D9%81%D9%8A-%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-%D8%A7%D9%84%D8%A3%D8%B4%D9%8A%D8%A7%D8%A1-iot-r1514/" rel="">وإنترنت الأشياء IoT</a>.
	</li>
	<li>
		مهندس <a href="https://academy.hsoub.com/devops/general/%D8%AA%D8%B9%D9%84%D9%85-devops/" rel="">DevOps </a>أو مهندس حوسبة سحابية مسؤول عن إدارة دورة حياة تطوير البرمجيات ونشر التطبيقات.
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">عالم بيانات</a> أو <a href="https://academy.hsoub.com/programming/general/%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">مهندس بيانات</a> تحلل وتستخرج رؤى وقرارات مفيدة من البيانات باستخدام الأساليب الإحصائية وخوارزميات التعلم الآلي.
	</li>
	<li>
		مهندس <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-r2239/" rel="">ذكاء اصطناعي</a> وتعلم آلي تطور وتنفذ خوارزميات التعلم الآلي لحل المشكلات والتنبؤ بالتوقعات المستقبلية.
	</li>
	<li>
		مهندس <a href="https://academy.hsoub.com/devops/security/%D9%85%D8%A7-%D9%87%D9%88-%D8%A7%D9%84%D8%A3%D9%85%D9%86-%D8%A7%D9%84%D8%B3%D9%8A%D8%A8%D8%B1%D8%A7%D9%86%D9%8A-%D9%88%D9%85%D8%A7-%D8%A3%D9%87%D9%85%D9%8A%D8%AA%D9%87%D8%9F-r664/" rel="">أمن سيبراني</a> تكتشف وتعالج أي ثغرات أو تهديدات أمنية تهدد الشبكات والأنظمة الحاسوبية.
	</li>
	<li>
		مهندس <a href="https://academy.hsoub.com/devops/servers/databases/%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-database/" rel="">قواعد بيانات</a> مسؤول عن تصميم وإنشاء وإدارة قواعد البيانات الخاصة بالجهة التي تعمل بها أو التطبيقات التي تستخدم هذه البيانات.
	</li>
</ul>

<p>
	  كانت هذه نبذة سريعة عن أهم مجالات عمل مهندسي البرمجيات، وبالطيع تختلف طبيعة عمل مهندس البرمجيات بحسب الدور الذي يؤديه، وحجم مكان العمل، والتقنيات المستخدمة لتأدية هذا العمل، لذا إذا وجدت فرصة عمل تتطلب تخصص هندسة البرمجيات في شركة ما، فمن الأفضل أن تتأكد أولًا من الوصف الوظيفي لها وتسأل عن المهام والمسؤوليات المطلوبة منك بشكل دقيق لتعرف إن كانت هذه الوظيفة تلائمك أم لا.
</p>


<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			وفر وقتك وجهدك بتطوير حلول برمجية احترافية لأعمالك
		</p>

		<p class="banner-subtitle">
			استعن بأفضل مهندسي البرمجيات على خمسات
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://khamsat.com/programming/software-development" rel="external">اطلب خدمتك الآن</a>
		</div>
	</div>
</div>




<h2 id="-5">
	كيف أصبح مهندس برمجيات
</h2>

<p>
	إذا كنت تطمح لأن تدرس <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8/" rel="">برمجة الحاسوب</a> وتتعلم كافة المهارات اللازمة للتصبح مهندس برمجيات محترف، فأمامك طريقان الأول هو الدراسة الأكاديمية لتخصص هندسة البرمجيات والتسجيل في إحدى الجامعات المتخصصة في هندسة الحاسوب أو هندسة البرمجيات أو أي تخصص مشابه، لكن هذا الطريق طويل ويستغرق مدة لا تقل عن أربع إلى خمس سنوات وقد لا يتاح للجميع بسبب تكلفة الدراسة الجامعية وعدد المقاعد المحدود في كل كلية.
</p>

<p>
	لذا قد ترغب في اختصار الجهد والتكاليف وتلجأ إلى تعلم هندسة البرمجيات بشكل ذاتي من خلال اكتساب المؤهلات والمهارات التقنية بنفسك والجيد في هذا الخيار أنه يساعدك على اختصار وقت التعلم ودخول سوق العمل التقني لاسيما أن الكثير من الشركات اليوم لم تعد تشترط الشهادات بل تهتم بوجود الخبرات اللازمة والمثبتة لتوظيفك.
</p>

<p>
	ستجد الكثير من مصادر التعلم المفيدة من دروس مقالات وكتب ودورات تدريبية على الإنترنت تساعدك على احتراف لغات البرمجة ومبادئ هندسة البرمجيات لكن معظمها باللغة الإنجليزية، وإذا كنت تبحث عن مصدر عربي عالي الجودة لتعلم هندسة البرمجيات فقد وفرت لك أكاديمية حسوب العديد من الدورس والمقالات المجانية التي تساعدك على تعلم كافة لغات البرمجة المشهورة والمطلوبة مثل لغة بايثون Python أو جافا Java أو C++ أو غيرها من لغات البرمجة، ومن الأفضل أن تركز على لغات البرمجة المطلوبة في سوق العمل الذي تستهدفه أو المنطقة التي تهدف للبحث عن وظيفة فيها.
</p>

<p>
	كما توفر دروس متعددة لتعلم أساسيات <a href="https://academy.hsoub.com/programming/advanced/%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA/" rel="">الخوارزميات</a> و<a href="https://academy.hsoub.com/programming/general/%D9%87%D9%8A%D8%A7%D9%83%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-data-structures/" rel="">هياكل البيانات</a> والتعرف على <a href="https://academy.hsoub.com/programming/general/%D8%AF%D9%88%D8%B1%D8%A9-%D8%AD%D9%8A%D8%A7%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/" rel="">دورة حياة تطوير البرمجيات</a> وكيفية <a href="https://academy.hsoub.com/programming/general/%D9%87%D9%8A%D8%A7%D9%83%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-data-structures/" rel="">وأنماط التصميم البرمجية</a> وغيرها من المفاهيم التي تساعدك على تعلم مبادئ الهندسة وتطبيقها على تطوير البرمجيات، وبالتدريب وتطوير العديد من المشاريع البرمجية التي تحل مشكلات برمجية مختلفة ستتمكن تطبيق ما تعلمته من مهارات واكتساب خبرة أكبر في هندسة البرمجيات وبناء معرض أعمال يعزز فرصتك في الحصول على العمل.
</p>

<p>
	ولا تنسى أن تعزز مهاراتك الناعمة كالتنظيم و<a href="https://academy.hsoub.com/programming/general/%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%81%D9%83%D9%8A%D8%B1-%D8%A7%D9%84%D9%85%D9%86%D8%B7%D9%82%D9%8A-%D9%81%D9%8A-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r2095/" rel="">التفكير المنطقي</a> والإبداعي والقدرة على التواصل والعمل الجماعي فهذه المهارات لا تقل أهمية عن المهارات البرمجية ويركز عليها أصحاب العمل، وبعد اكتسابك لهذه الخبرات أنصحك بالبحث عن فرصة للتدرب او التطوع في إحدى الشركات التي توفر فرصًا لمهندسي البرمجيات الجدد للتدرب واكتساب خبرة عملية وقد هذه الفرص تكون مدفوعة أو غير مدفوعة لكنها تساعدك بشكل كبير لاكتساب الخبرات اللازمة التي تؤهلك للعمل في إحدى مجالات عمل مهندس البرمجيات في الشركات والمؤسسات.
</p>

<p>
	وإذا كنت مهتمًا بتعلم مهارات هندسة البرمجيات الأساسية لكنك مشتت وتائه ولا تعرف من أين تبدأ أنصحك بالبدء مع <a href="https://academy.hsoub.com/learn/computer-science/" rel="">دورة علوم الحاسوب</a> من أكاديمية حسوب فهي توفر العديد من المسارات التعليمية المفيدة التي يحتاج أي مهندس برمجيات لمعرفتها، تمتد هذه الدورة لأكثر من 60 ساعة تدريبية تتعلم من خلالها مبادئ البرمجة وأسس هندسة البرمجيات وغيرها من المعلومات القيمة، كما توفر لك مدربين أكفاء يرشدونك خلال التعلم ويجيبون على أي تساؤل يواجهك كما يمكنك الحصول في النهاية على شهادة معتمدة تعزز فرصتك في الحصول على فرصة العمل التي تطمح لها.
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="443" id="ips_uid_9826_5" src="https://academy.hsoub.com/applications/core/interface/index.html" title="دورة علوم الحاسوب - أكاديمية حسوب" width="787" data-embed-src="https://www.youtube.com/embed/EkvUFDevMlM"></iframe>
</p>

<p>
	أوجزنا لك في هذه الفقرة أهم الخطوات التي يمكنك اتباعها لتكون مهندس برمجيات محترف، وإذا كنت مهتمًا بمطالعة المزيد من المعلومات حول هذا الموضوع أنصحك بمطالعة مقالنا <a href="https://academy.hsoub.com/programming/general/%D8%AF%D8%B1%D8%A7%D8%B3%D8%A9-%D8%AA%D8%AE%D8%B5%D8%B5-%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/" rel="">الطريقة الأمثل لدراسة تخصص هندسة البرمجيات</a>.
</p>

<h2>
	الخلاصة
</h2>

<p>
	تعرفنا في مقال اليوم على وظيفة مهندس البرمجيات وأهميتها، وأهم المهارات التي تحتاجها لتصبح مهندس برمجيات والواجبات التي عليك القيام بها عند العمل في هذه الوظيفة، وفي ختام المقال تذكر أن أي شخص اليوم يمكنه أن يتعلم البرمجة و<span ipsnoautolink="true">يدرس هندسة البرمجيات</span> وينجح في مزاولة هذا التخصص، كل ما يحتاجه هو امتلاك الصبر والإرادة والكثير من الالتزام والمثابرة.
</p>

<h2 id="-6">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/" rel="">تعرف على تخصص هندسة البرمجيات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%88%D8%B8%D8%A7%D8%A6%D9%81-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%A3%D9%83%D8%AB%D8%B1-%D8%B7%D9%84%D8%A8%D9%8B%D8%A7/" rel="">تعرف على وظائف البرمجة الأعلى أجرًا</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/" rel="">مدخل إلى تطوير البرمجيات Software Development</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-%D8%A7%D9%84%D8%B3%D8%A8%D8%B9-%D8%A7%D9%84%D9%82%D8%A7%D8%AA%D9%84%D8%A9-%D9%84%D8%A3%D9%8A%D9%91-%D9%85%D8%B4%D8%B1%D9%88%D8%B9-%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-r742/" rel="">الأخطاء السبع القاتلة لأيّ مشروع برمجيات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%B4%D9%87%D8%A7%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A3%D9%87%D9%85%D9%8A%D8%AA%D9%87%D8%A7-%D9%88%D8%B3%D8%A8%D9%84-%D8%A7%D9%84%D8%AD%D8%B5%D9%88%D9%84-%D8%B9%D9%84%D9%8A%D9%87%D8%A7-r2262/" rel="">شهادات البرمجة: أهميتها وسبل الحصول عليها</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D9%85%D8%AF%D8%A9-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9%D8%9F-r2257/" rel="">ما هي مدة تعلم البرمجة؟</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2264</guid><pubDate>Mon, 04 Mar 2024 12:03:00 +0000</pubDate></item><item><title>&#x634;&#x647;&#x627;&#x62F;&#x627;&#x62A; &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: &#x623;&#x647;&#x645;&#x64A;&#x62A;&#x647;&#x627; &#x648;&#x633;&#x628;&#x644; &#x627;&#x644;&#x62D;&#x635;&#x648;&#x644; &#x639;&#x644;&#x64A;&#x647;&#x627;</title><link>https://academy.hsoub.com/programming/general/%D8%B4%D9%87%D8%A7%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A3%D9%87%D9%85%D9%8A%D8%AA%D9%87%D8%A7-%D9%88%D8%B3%D8%A8%D9%84-%D8%A7%D9%84%D8%AD%D8%B5%D9%88%D9%84-%D8%B9%D9%84%D9%8A%D9%87%D8%A7-r2262/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_02/1051322910_.png.9934aab4a7e6e1b3233e3b4d3b707880.png" /></p>
<p>
	يتساءل كثير من المُقبلين على تعلم البرمجة: هل شهادات البرمجة ضرورية؟ هل يجب على المرء أن يدرس في الجامعة حتى يحصل على شهادة برمجة معتمدة؟ كيف يمكن أن يحصل المرء على شهادات احترافية في البرمجة؟ وكيف يمكن أن يتعلمها بنفسه أصلًا؟ هل يمكن الحصول على شهادات برمجة من الإنترنت؟ يجيبك هذا المقال على كافة هذه التساؤلات.
</p>

<h2 id="-1">
	ما هي شهادات البرمجة؟
</h2>

<p>
	الشهادة توثيق وتأكيد وكفالة تصدرها جهة موثوقة وتضمن بها معرفة شخصٍ ما بمجموعة من المعارف. لا تخرج شهادات البرمجة عن هذا التعريف، فهي شهادات تصدرها جهات موثوقة (من جامعات أو أكاديميات أو منصات تعليمية إلخ)، تكون دليلًا على معرفة حامل الشهادة بمجموعة من المعارف البرمجية. تقدّم المنصات التعليمية على الإنترنت عادةً شهادات برمجة تشهد على إتمام دورة في مجال معين، أما شهادات البرمجة الجامعية فتشهد على أن الطالب قد أتم جميع مواده الدراسية ونجح فيها.
</p>

<h2 id="-2">
	هل يجب الحصول شهادة جامعية حتى تكون مبرمجًا؟
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="145428" href="https://academy.hsoub.com/uploads/monthly_2024_02/2029806249_.png.4be02702bb81644fa25b4813ee109fe5.png" rel=""><img alt="شهادات البرمجة" class="ipsImage ipsImage_thumbnailed" data-fileid="145428" data-ratio="62.50" data-unique="p1d5fw354" style="width: 400px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2024_02/.thumb.png.d11f4e8a3834a4994349f0d41c63f239.png"></a>
</p>

<p>
	لعلك تتساءل هل يجب على كل من يريد تعلم البرمجة أو الحصول على شهادات برمجة معتمدة أن يدرس في الجامعة؟ قبل الإجابة على هذا السؤال تجدر الإشارة لأن <a href="https://www.statista.com/statistics/793568/worldwide-developer-survey-level-formal-education/" rel="external nofollow" target="_blank">إحصائيات موقع statista</a> تشير بأن قرابة 25% من مطوري البرمجيات غير حاصلين على شهادة جامعية في البرمجة! أي إن ربع مطوري البرمجيات عالميًّا لم يتمّوا أو لم يبدؤوا أي تعليم جامعي، وتتوزع النسبة الباقية بين الحاصلين على شهادة بكلوريوس والحاصلين على شهادات أعلى. فكيف يمكن أن نفهم هذه الإحصائيات؟
</p>

<p>
	لا شكّ أن الشهادة الجامعية مفيدة في مجال البرمجة كما في غيره من المجالات. إذ تسهّل الشهادة الجامعية حياتك المهنية لا سيما في بدايتها، حين تكون هي الإثبات الوحيد على معرفتك في المجال.
</p>

<p>
	لكن حتى إن كنت حاصلًا على شهادة جامعية، فإن تطورك المهني سيبلغ بك مرحلة تصبح بها خبراتك وأعمالك السابقة أهم من شهادتك الجامعية، إذ تصبح هي الدليل الأقوى على معرفتك ومهارتك. فإذا كنت قبل التقدّم إلى أول وظيفة تملك أعمالًا تشهد على مهارتك، أو تحمل شهادات غير جامعية تضمن معرفتك، فإن هذا سيكون كافيًا لإثبات معرفتك ومهارتك.
</p>

<p>
	يمكنك الاستعاضة عن شهادة البرمجة الجامعية بالتعلم الذاتي من جهة موثوقة تمنحك شهادات برمجة تعكس خبراتك. تقدم منصات التعلم على الإنترنت تعليمًا يركّز على الجانب العملي أكثر من الجانب النظري، ويختصر في الوقت نفسه كثيرًا من الوقت على المتعلم. لقد صنع كثير من المطورين أنفسهم في مدة لا تتجاوز عامًا واحدًا من التعلم الذاتي.
</p>

<h2 id="-3">
	كيف تتعلم البرمجة ذاتيًّا
</h2>

<p>
	تتميز البرمجة على غيرها من المجالات بسهولة تعلّمها ذاتيًّا على الإنترنت. فبالإضافة إلى توفر دورات تقدم شهادات معتمدة في البرمجة على الإنترنت (المزيد عنها في الفقرة التالية)، يفيض الإنترنت بمصادر متنوعة لتعلم البرمجة ذاتيًّا.
</p>

<p>
	ولا تكاد تخلو لغة برمجة من كتاب رسمي أصدره مجتمعها ليساعد المبرمجين على تعلمها ذاتيًّا. وفي العالم العربي، يلمع نجم أكاديمية حسوب في مساعدة المبرمجين على التعلم الذاتي والحصول على شهادات برمجة، إذ تقدّم الأكاديمية <a href="https://academy.hsoub.com/files/c5-%D9%83%D8%AA%D8%A8-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">19 كتابًا</a> في شتى مجالات البرمجة، تناسب مختلف مستويات المتعلمين، منها:
</p>

<ul>
	<li>
		<a href="https://academy.hsoub.com/files/35-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86/" rel="">تعلم البرمجة للمبتدئين</a>: يأخذك هذا الكتاب في رحلة لتعلم البرمجة من الصفر، يمرّ فيها على محطّات مختلفة، منها أنواع البيانات، وبناء الواجهات الرسومية، وكتابة تطبيقات الويب، وغير ذلك.
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">البرمجة بلغة بايثون</a>: يقدم هذا الكتاب مجموعة من المقالات الكفيلة بإعطاء القارئ فهمًا شاملًا وكاملًا للغة بايثون، وهو، كالكتاب السابق، مناسب للمبتدئين.
	</li>
	<li>
		<a href="https://academy.hsoub.com/files/27-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA/" rel="">البرمجة بلغة جافاسكربت</a>: هل فكرت من قبل في استخدام البرمجة لبناء رجل آلي؟ أو في بناء لغة برمجة خاصة بك؟ يمرّ هذا الكتاب على مختلف المفاهيم في لغة جافاسكريبت، ويختم بمشروع بناء موقع باستخدام بيئة نود جي إس Node.js.
	</li>
</ul>

<h2 id="-4">
	دورات عربية تقدم شهادات معتمدة في البرمجة
</h2>

<p>
	بالإضافة إلى كتب تعلم البرمجة، توفر أكاديمية حسوب دورات تعليمية باللغة العربية تقدم شهادات معتمدة في البرمجة. تتنوع مواضيع الدورات ومجالاتها، وتناسب المبتدئين في تعلم البرمجة والذين لا يمتلكون أي خبرة سابقة أو الذين يريدون الحصول على شهادات برمجة. من أبرز هذه الدورات نذكر:
</p>

<ul>
	<li>
		<a href="https://academy.hsoub.com/store/7-%D8%AF%D9%88%D8%B1%D8%A9-%D8%B9%D9%84%D9%88%D9%85-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8/" rel="">دورة علوم الحاسوب</a>: تناسب هذه الدورة المبتدئ الذي يريد تعلم البرمجة ولا يعرف من أين يبدأ. تأخذ الدورة بيد الطالب حتى يصل إلى مستوًى متقدم في علوم الحاسوب (مثل أنظمة التشغيل وقواعد البيانات وتقنيات الويب).
	</li>
	<li>
		<a href="https://academy.hsoub.com/store/9-%D8%AF%D9%88%D8%B1%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D8%BA%D8%A9-python/" rel="">دورة تطوير التطبيقات باستخدام لغة Python</a>: تساعدك هذه الدورة على احتراف لغة بايثون دون أي معرفة سابقة بها، لتستطيع بعدها بناء مختلف أنواع التطبيقات باستخدام هذه اللغة. ستحصل في نهاية الدورة على شهادة برمجة معتمدة في لغة بايثون.
	</li>
	<li>
		<a href="https://academy.hsoub.com/store/5-%D8%AF%D9%88%D8%B1%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D8%BA%D8%A9-javascript/" rel="">دورة تطوير التطبيقات باستخدام لغة JavaScript</a>: تعلمك هذه الدورة بناء تطبيقات الويب والحاسوب والجوال باستخدام لغة جافاسكريبت JavaScript، وهي مناسبة لمن ليس له خبرة سابقة في البرمجة. تقدم الأكاديمية للذين أتمّوا هذه الدورة شهادة برمجة معتمدة في لغة البرمجة<br>
		جافا سكريبت JavaScript.
	</li>
	<li>
		<a href="https://academy.hsoub.com/store/2-%D8%AF%D9%88%D8%B1%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D8%BA%D8%A9-php/" rel="">دورة تطوير تطبيقات الويب باستخدام لغة PHP</a>: للمهتمين بمجال الويب والواجهات الخلفية، تقدم هذه الدورة طريقًا نحو احتراف لغة PHP وإطار عمل Laravel، كما تعلّمك تطوير قوالب ووردبريس WordPress.
	</li>
	<li>
		<a href="https://academy.hsoub.com/store/4-%D8%AF%D9%88%D8%B1%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D8%BA%D8%A9-ruby/" rel="">دورة تطوير تطبيقات الويب باستخدام لغة Ruby</a>: تتعلم في هذه الدورة لغة Ruby وإطار العمل Ruby on Rails، كما ستتعلم التعامل مع قواعد البيانات وتطوير شبكة اجتماعية مثل تويتر.
	</li>
	<li>
		<a href="https://academy.hsoub.com/store/12-%D8%AF%D9%88%D8%B1%D8%A9-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">دورة الذكاء الاصطناعي</a>: دورة جديدة تقدمها أكاديمية حسوب لتعلم الذكاء الصنعي وتحليل البيانات من الصفر. تناسب هذه الدورة من يعرف لغةً من لغات البرمجة ويريد تطوير مهاراته في الذكاء الصنعي.
	</li>
	<li>
		<a href="https://academy.hsoub.com/store/1-%D8%AF%D9%88%D8%B1%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%88%D8%A7%D8%AC%D9%87%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85/" rel="">دورة تطوير واجهات المستخدم</a>: تقدم هذه الدورة للمتعلم معارف متنوعة متعلقة بتطوير واجهات المستخدم، وتعرّفه على تقنيات ويب كثيرة، كما يتعلم فيها بناء صفحات الهبوط وواجهات مواقع الويب. تناسب هذه الدورة كل مستويات المتعلمين.
	</li>
</ul>

<h2 id="-5">
	نصائح لاحتراف البرمجة دون شهادة جامعية
</h2>

<p>
	إليك بعض النصائح التي تساعدك على أن تصبح مبرمجًا دون الحاجة إلى شهادات برمجة أكاديمية:
</p>

<ul>
	<li>
		تعلم <a href="https://academy.hsoub.com/programming/advanced/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA-r1282/" rel="">الخوارزميات</a> وأسس <a href="https://academy.hsoub.com/programming/general/%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%81%D9%83%D9%8A%D8%B1-%D8%A7%D9%84%D9%85%D9%86%D8%B7%D9%82%D9%8A-%D9%81%D9%8A-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r2095/" rel="">التفكير المنطقي</a> قبل تعلّم البرمجة.
	</li>
	<li>
		ابدأ بمواد مناسبة للمبتدئين (راجع الفقرتين السابقتين).
	</li>
	<li>
		استكشف مجالات البرمجة وأنواعها المختلفة وحدد المجال الذي تريد التخصص فيه مثلًا: <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%AC%D9%88%D8%A7%D9%84-r1801/" rel="">برمجة تطبيقات الجوال</a>، أو <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8/" rel="">برمجة مواقع الويب</a>، أو <a href="https://academy.hsoub.com/files/17-%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A-%D9%88%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9/" rel="">الذكاء الاصطناعي</a>.
	</li>
	<li>
		ابحث عن مشاريع مفتوحة المصدر في المجال الذي اخترته وشارك في تطويرها.
	</li>
	<li>
		انضم إلى مجتمعات برمجية وتشارك خبراتك ومهاراتك مع غيرك من المطورين.
	</li>
	<li>
		ابنِ مشروعًا صغيرًا مفتوح المصدر لتستعمله فيما بعد دليلًا على مهاراتك وخبراتك السابقة.
	</li>
	<li>
		لا تقتصر على لغة برمجة واحدة أو إطار عمل واحد، كلما ازدادت معارفك ازدادت فرص نجاحك في سوق العمل.
	</li>
</ul>

<h2 id="-6">
	خاتمة
</h2>

<p>
	تتنوع الطرق إلى تعلم البرمجة واحترافها من شخص لآخر، وهي لا تقتصر على التعليم الجامعي وحده أو التعلم الذاتي وحده.، وكذلك تتنوع شهادات البرمجة ومصادر الحصول عليها، بين الشهادات الجامعية والشهادات التي تقدمها منصات التعلم الإلكتروني المختلفة ولك أن تختار ما يناسبك من بين هذه الطرق المختلفة. أرجو أن يكون هذا المقال قد أفادك ودلّك على محطة الانطلاق في رحلة تعلم البرمجة والحصول على شهادات برمجة معتمدة.
</p>

<p>
	اقرأ أيضًا
</p>

<ul>
	<li>
		<a href="https://academy.hsoub.com/learn-programming/" rel="">دليلك الشامل لتعلم البرمجة والتعرف على أهميتها</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%88%D8%A3%D9%87%D9%85-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r1854/" rel="">أهمية البرمجة وأهم لغات البرمجة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D9%85%D8%AF%D8%A9-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9%D8%9F-r2257" rel="">ما هي مدة تعلم البرمجة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D9%85%D8%A8%D8%B1%D9%85%D8%AC-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D8%B1%D9%81/" rel="">كيف تصبح مبرمجًا محترفًا</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/" rel="">تعرف على تخصص هندسة البرمجيات</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2262</guid><pubDate>Wed, 28 Feb 2024 12:00:16 +0000</pubDate></item><item><title>&#x62F;&#x644;&#x64A;&#x644;&#x643; &#x627;&#x644;&#x634;&#x627;&#x645;&#x644; &#x625;&#x644;&#x649; &#x644;&#x63A;&#x627;&#x62A; &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629; &#x639;&#x627;&#x644;&#x64A;&#x629; &#x627;&#x644;&#x645;&#x633;&#x62A;&#x648;&#x649;</title><link>https://academy.hsoub.com/programming/general/%D8%AF%D9%84%D9%8A%D9%84%D9%83-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%B9%D8%A7%D9%84%D9%8A%D8%A9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D9%88%D9%89-r2261/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_02/------.png.ffd4a9291fe149a945de5c21d41889ff.png" /></p>
<p>
	تمثل لغات البرمجة عالية المستوى نسبة تزيد عن ثمانين بالمائة من أشهر خمسين لغة برمجة في المجتمع التقني، ما يجعلنا نتساءل: ما هي لغات البرمجة عالية المستوى؟ ولماذا تعد مشهورة إلى هذا الحد؟ وما أشهر استخدامات هذا النوع من لغات البرمجة؟
</p>

<h2 id="">
	تعريف لغات البرمجة عالية المستوى
</h2>

<p>
	تتعدد <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%B3%D8%AA%D9%88%D9%8A%D8%A7%D8%AA-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">مستويات لغات البرمجة</a>، فمن لغات البرمجة لغات منخفضة المستوى تساعد المطور على التخاطب المباشر مع عتاد الحاسوب، ما يجعلها مميزة في إدارة موارد الحاسوب، ويوجد كذلك لغات برمجة عالية المستوى، وتعد أكثر تجريدًا عن عتاد الحاسوب وتجعل تركيز المطور ينصبُّ على خواص التطبيق ومميزاته، وهي أسهل من اللغات منخفضة المستوى وأقرب منها إلى اللغات البشرية.
</p>

<p>
	تعد لغات البرمجة عالية المستوى نوعًا من لغات البرمجة يسمح للمطور بتطوير برمجيات مجردة عن عتاد الحاسوب، بمعنى أنَّ المطور لا يحتاج إلى وصف طريقة تعامل الأجزاء المختلفة من البرنامج مع المكونات الداخلية للحاسوب مثل: المعالج والذاكرة المؤقتة والذاكرة الدائمة، وتهدف لغات البرمجة عالية المستوى إلى تسهيل عملية تطوير البرمجيات وزيادة إنتاجية المطور، وكذلك تقريب بنية لغات البرمجة إلى بنية اللغات البشرية حتى تسهُل قراءة الشيفرات وكتابتها.
</p>

<h2>
	أنواع لغات البرمجة عالية المستوى
</h2>

<p>
	يجب ترجمة كل برنامج مكتوب بلغة برمجة عالية المستوى إلى لغة الآلة قبل تنفيذه، وتنقسم لغات البرمجة عالية المستوى إلى نوعين رئيسيين تبعًا لطريقة ترجمة الشيفرات، وهما:
</p>

<ul>
	<li>
		<strong>لغات برمجة مترجمة Compiled Programming Languages</strong>: يعد المترجم برنامجًا حاسوبيًا يعمل كوسيط بين برنامجك الرقمي والآلة، ويعمل على ترجمة شيفرات البرنامج كاملة إلى لغة الآلة ثم تنفيذها دفعةً واحدة، ويتميز هذا النوع من لغات البرمجة بالسرعة والكفاءة، ومن أشهر أمثلته لغة سي بلس بلس <a href="https://academy.hsoub.com/programming/cpp/" rel="">C++‎</a> وراست <a href="https://academy.hsoub.com/programming/rust/" rel="">Rust </a>وجو <a href="https://academy.hsoub.com/programming/go/" rel="">Go</a>.
	</li>
	<li>
		<strong>لغات برمجة مفسرة Interpreted Programming Languages</strong>: يتشابه المفسر مع المترجم في وساطته بين البرنامج والآلة ولكنه يختلف في طريقة الترجمة، إذ يقرأ المفسر الشيفرات واحدة تلو الأخرى ويترجمها إلى لغة الحاسوب وينفذ كل شيفرة مباشرة بعد ترجمتها، ويتميز هذا النوع بالسهولة والمرونة، ومن لغاته بايثون <a href="https://academy.hsoub.com/programming/python/" rel="">Python</a> وجافا سكريبت J<a href="https://academy.hsoub.com/programming/javascript/" rel="">avaScript</a>  وبي إتش بي <a href="https://academy.hsoub.com/programming/php/" rel="">PHP</a>.
	</li>
</ul>

<p>
	تُستخدم لغات البرمجة عالية المستوى في كل <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AC%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">مجال برمجي</a> تقريبًا، فهي تُستخدم في المجالات الكلاسيكية، مثل: <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D9%84%D9%85-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8/" rel="">تطوير الويب</a> وتطبيقات الهاتف وتطبيقات سطح المكتب، وكذلك تُستخدم في المجالات الحديثة، مثل: <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">الذكاء الاصطناعي</a> و<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AD%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">تحليل البيانات</a>، كما تدخل في مجالات <a href="https://academy.hsoub.com/devops/security/%D9%85%D8%A7-%D9%87%D9%88-%D8%A7%D9%84%D8%A3%D9%85%D9%86-%D8%A7%D9%84%D8%B3%D9%8A%D8%A8%D8%B1%D8%A7%D9%86%D9%8A-%D9%88%D9%85%D8%A7-%D8%A3%D9%87%D9%85%D9%8A%D8%AA%D9%87%D8%9F-r664/" rel="">الأمن السيبراني</a> ومجالات سلسلة الكتل Blockchain والعملات الرقمية وسائر المجالات التقنية الأخرى، ومن أشهر لغات البرمجة عالية المستوى لغة بايثون وجافا و PHP و R و كوتلن وجو و C وC#‎.
</p>

<h2 id="-1">
	الفرق بين لغات البرمجة عالية المستوى ولغات البرمجة منخفضة المستوى
</h2>

<p>
	تعد لغات البرمجة منخفضة المستوى نوعًا من اللغات البرمجة يوفر تواصلًا مباشرًا مع عتاد الحاسوب، وتشبه بنيتها بنية لغة الآلة، ومن أبرز الفروق بينها وبين اللغات عالية المستوى نذكر التالي:
</p>

<ul>
	<li>
		تتميز لغات البرمجة عالية المستوى بسهولة قراءة وكتابة الشيفرات ما يجعل تطوير البرمجيات سهلًا وسريعًا، وكذلك تسهُل عمليتا الاختبار ومعالجة الأخطاء مما يساعد على حفظ أمان البرنامج، بينما تتميز اللغات منخفضة المستوى بالوصول المباشر لعتاد الجهاز واستهلاك موراده بالطريقة الأمثل.
	</li>
	<li>
		تُستخدم لغات البرمجة عالية المستوى في جميع <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AC%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">المجالات البرمجية</a> تقريبًا،مثل  برمجة تطبيقات الويب والجوال وتطبيقات الذكاء الاصطناعي وتحليل البيانات، أما لغات البرمجة منخفضة المستوى فتُستخدم اليوم في مجالات محدودة تحتاج للتعامل مع عتاد الحاسوب مباشرة، مثل: تطوير <a href="https://academy.hsoub.com/apps/operating-systems/%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84/" rel="">أنظمة التشغيل</a> وتطوير الأنظمة المدمجة.
	</li>
</ul>

<h2 id="-2">
	أنواع لغات البرمجة عالية المستوى
</h2>

<p>
	تعد النماذج البرمجية منهجيات لكتابة الشيفرات وحل المشكلات البرمجية وتختلف أهداف كل نموذج برمجي عن الآخر، وقد تدعم لغة البرمجة الواحدة أكثر من نموذج برمجي، وتتعدد أنواع لغات البرمجة عالية المستوى تبعًا للنماذج البرمجية، منها:
</p>

<ul>
	<li>
		لغات البرمجة كائنية التوجه Object-Oriented Programming Languages
	</li>
	<li>
		لغات البرمجة الوظيفية Functional Programming Languages
	</li>
	<li>
		لغات البرمجة الإجرائية Procedural Programming Languages
	</li>
	<li>
		لغات البرمجة المنطقية Logical Programming Languages
	</li>
</ul>

<p>
	لنشرح بمزيد من التفصيل مميزات كل نوع من هذه الأنواع وأشهر لغات البرمجة التي تندرج ضمنه.
</p>

<h3 id="objectorientedprogramminglanguages">
	لغات البرمجة كائنية التوجه Object-Oriented Programming Languages
</h3>

<p>
	يعد <a href="https://academy.hsoub.com/programming/general/%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D8%A7%D9%84%D9%83%D8%A7%D8%A6%D9%86%D8%A7%D8%AA-oop/" rel="">نموذج البرمجة كائنية التوجه</a> أشهر نموذج برمجي في المجتمع التقني؛ ذلك لتقسيمه البرنامج كاملًا إلى مجموعات صغيرة من الشيفرات القابلة لإعادة الاستخدام في مواضع أخرى، ما يساعد على تقليل إجمالي عدد الشيفرات النهائي للبرنامج وبالتالي تحسين أدائه، وكذلك يساعد على تنظيم الشيفرات وتسهيل عملية اختبار البرنامج ومعالجة أخطائه مما يرفع من أمان البرنامج.
</p>

<p>
	يقوم نموذج البرمجة كائنية التوجه على مفهوم الأصناف Classes التي تحتوي على كائنات Objects، والكائنات هي بيانات البرنامج التي تمتلك واصفات Attributes وطرق أو توابع Methods، والواصفات هي المتغيرات Variables التي تتضمن نوع بيانات الكائن وحجمها وتفاصيلها، وأما الطرق فهي الدوال البرمجية التي تحقق الوظائف Functions التي تقوم بها الكائنات.
</p>

<p>
	ويمكننا تشبيه الصنف في نموذج البرمجة كائنية التوجه بنموذج تصنيع لسيارة، فالواصفات في هذا المثال هي مواصفات السيارة بدءًا من لونها مرورًا بسرعتها وصولًا إلى سعرها، أما التوابع فهي أفعال السيارة، مثل: التشغيل وزيادة السرعة وتغيير الاتجاه، أما الكائنات فهي السيارات النهائية الناتجة عن هذا الصنف.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_868_7" style=""><span class="kwd">class</span><span class="pln"> </span><span class="typ">Car</span><span class="pun">:</span><span class="pln">
    </span><span class="com"># These are the attributes of the object:</span><span class="pln">
    color </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Red'</span><span class="pln">
    speed </span><span class="pun">=</span><span class="pln"> </span><span class="str">"180KM\H"</span><span class="pln">
    price </span><span class="pun">=</span><span class="pln"> </span><span class="str">"5500 USD"</span><span class="pln">

    </span><span class="com"># These are the methods of the object:</span><span class="pln">
    def turn_on</span><span class="pun">(</span><span class="pln">self</span><span class="pun">):</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> </span><span class="str">'Car is turned on'</span><span class="pln">
    def increase_speed</span><span class="pun">(</span><span class="pln">self</span><span class="pun">):</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> </span><span class="str">'Speed is increased'</span><span class="pln">
    def change_direction</span><span class="pun">(</span><span class="pln">self</span><span class="pun">):</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> </span><span class="str">'Direction is changed'</span><span class="pln">

the_car </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Car</span><span class="pun">()</span><span class="pln"> </span><span class="com"># This is the object</span><span class="pln">
print</span><span class="pun">(</span><span class="pln">the_car</span><span class="pun">.</span><span class="pln">color</span><span class="pun">)</span><span class="pln"> </span><span class="com"># Output: Red</span><span class="pln">
print</span><span class="pun">(</span><span class="pln">the_car</span><span class="pun">.</span><span class="pln">turn_on</span><span class="pun">())</span><span class="pln"> </span><span class="com"># Output: Car is turned on</span></pre>

<p>
	تدعم لغاتُ برمجةٍ عديدة نموذجَ البرمجة كائنية التوجه، ولعل أشهرهم بايثون وجافا وسي بلس بلس C++‎ وجافا سكريبت وروبي وبي إتش بي PHP وكوتلن. وتُستخدم لغات البرمجة كائنية التوجه في مجالات عديدة، منها: تطوير تطبيقات الويب وتطوير تطبيقات الهاتف.
</p>

<h3 id="functionalprogramminglanguages">
	لغات البرمجة الوظيفية Functional Programming Languages
</h3>

<p>
	تعتمد <a href="https://academy.hsoub.com/programming/general/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D9%88%D8%B8%D9%8A%D9%81%D9%8A%D8%A9-functional-programming-r1391/" rel="">لغات البرمجة الوظيفية</a> على بناء البرنامج كاملًا من مجموعة من الوظائف البرمجية Functions، ويعد نموذج البرمجة الوظيفية مبنيًا على مصطلح الوظائف النقية Pure Functions، وهو نوع من الوظائف تعتمد نتائجه اعتمادًا كليًّا على البيانات الداخلة له، ولا تحتاج الوظيفة إلى تعديل البيانات الداخلة أو تعيين متغيرات للتمكُّن من إصدار النتائج.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_868_9" style=""><span class="kwd">def</span><span class="pln"> pure_function</span><span class="pun">(</span><span class="pln">a</span><span class="pun">,</span><span class="pln"> b</span><span class="pun">):</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> a </span><span class="pun">+</span><span class="pln"> b
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">pure_function</span><span class="pun">(</span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3</span><span class="pun">))</span><span class="pln"> </span><span class="com"># Output: 5</span><span class="pln">

</span><span class="kwd">def</span><span class="pln"> impure_function</span><span class="pun">(</span><span class="pln">a</span><span class="pun">,</span><span class="pln"> b</span><span class="pun">):</span><span class="pln">
    new_a </span><span class="pun">=</span><span class="pln"> a </span><span class="pun">+</span><span class="pln"> </span><span class="lit">3</span><span class="pln">
    new_b </span><span class="pun">=</span><span class="pln"> b </span><span class="pun">+</span><span class="pln"> </span><span class="lit">4</span><span class="pln">
    new_data </span><span class="pun">=</span><span class="pln"> a </span><span class="pun">+</span><span class="pln"> b
    </span><span class="kwd">return</span><span class="pln"> new_data
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">impure_function</span><span class="pun">(</span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3</span><span class="pun">))</span><span class="pln"> </span><span class="com"># Output: 19</span></pre>

<p>
	تتميز لغات البرمجة الوظيفية بقابلية إعادة استخدام الشيفرات وسهولة الاختبار وحل المشكلات، وتُستخدم لغات البرمجة الوظيفية بكثرة في المجالات المعتمدة على تحليل أحجام ضخمة من البيانات، مثل: معالجة البيانات والذكاء الاصطناعي والحوسبة العلمية والحوسبة الرياضية ومزامنة الأنظمة، ومن أشهر لغات البرمجة الوظيفية هاسكل وسكالا وإرلانج وليسب، كما تدعم بايثون هذا النموذج البرمجي.
</p>

<h3 id="proceduralprogramminglanguages">
	لغات البرمجة الإجرائية Procedural Programming Languages
</h3>

<p>
	تعد البرمجة الإجرائية نموذجًا برمجيًا سهلًا يساعد على كتابة البرنامج على هيئة خطوات برمجية منطقية متسلسلة، ويساعد نموذج البرمجة الإجرائية على تنظيم شيفرات البرنامج بطريقة وجعلها سهلة القراءة ومنطقية التسلسل، وتُستخدم لغات البرمجة الإجرائية عادةً لكتابة الخوارزميات والعمليات الحسابية ولكتابة برمجيات التشغيل الآلي أو الأتمتة Automation، كما تُستخدم أحيانًا لتطوير <a href="https://academy.hsoub.com/programming/os-embedded-systems/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A3%D9%86%D8%B8%D9%85%D8%A9-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84/" rel="">أنظمة التشغيل</a>، وتدعم هذا المجال لغاتٌ مثل لغة  ++C‎ وجافا وباسكال.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_868_11" style=""><span class="kwd">def</span><span class="pln"> greet_user</span><span class="pun">():</span><span class="pln">
    name </span><span class="pun">=</span><span class="pln"> input</span><span class="pun">(</span><span class="str">"Enter your name: "</span><span class="pun">)</span><span class="pln">
        </span><span class="com"># Procedure 1: Asking the user about his name</span><span class="pln">
        </span><span class="com"># Procedure 2: Storing the name of the user in a variable</span><span class="pln">
    </span><span class="kwd">print</span><span class="pun">(</span><span class="pln">f</span><span class="str">"Hello {name}!"</span><span class="pun">)</span><span class="pln"> </span><span class="com"># Procedure 3: Constructing the greeting message</span><span class="pln">

greet_user</span><span class="pun">()</span><span class="pln"> </span><span class="com"># Procedure 4: Displaying the greeting message for the user</span></pre>

<h3 id="logicalprogramminglanguages">
	لغات البرمجة المنطقية Logical Programming Languages
</h3>

<p>
	تعتمد البرمجة المنطقية على المنطق الرسمي Formal Logic، وهو نظام لتحليل وتقييم النتائج المحتملة بناءً على حقائق Facts وقواعد Rules، ثم استخراج النتيجة السليمة والمنطقية للتساؤلات Queries، وتعد لغة برولوج Prolog أشهر لغة برمجة منطقية، ويشيع استخدام لغات البرمجة المنطقية في مجالات الذكاء الاصطناعي والتعلُّم الآلي ومعالجة اللغة الطبيعية.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_868_13" style=""><span class="pln">likes</span><span class="pun">(</span><span class="typ">Mohammed</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Apples</span><span class="pun">).</span><span class="pln"> </span><span class="pun">%</span><span class="pln"> </span><span class="typ">This</span><span class="pln"> is a fact that </span><span class="typ">Mohammed</span><span class="pln"> likes apples
likes</span><span class="pun">(</span><span class="typ">Ahmed</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Grapes</span><span class="pun">).</span><span class="pln">
likes</span><span class="pun">(</span><span class="typ">Mahmoud</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Pizza</span><span class="pun">).</span><span class="pln">

</span><span class="pun">%</span><span class="pln"> </span><span class="typ">This</span><span class="pln"> is a rule that people who share the same food preferences are good friends
good_friends</span><span class="pun">(</span><span class="typ">Person1</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Person2</span><span class="pun">)</span><span class="pln"> </span><span class="pun">:-</span><span class="pln"> 
    likes</span><span class="pun">(</span><span class="typ">Person1</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Food</span><span class="pun">)</span><span class="pln">
    likes</span><span class="pun">(</span><span class="typ">Person2</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Food</span><span class="pun">)</span></pre>

<h2 id="-3">
	مميزات لغات البرمجة عالية المستوى
</h2>

<ul>
	<li>
		<strong>التجريد Abstraction:</strong> تعد اللغات عالية المستوى مجردة عن عتاد الحاسوب، أي إن المطور يعمل على تطوير البرنامج ليناسب نظام التشغيل، ويحاول مراعاة مكونات الحاسوب لكن دون حاجة إلى توصيف طريقة تعامل البرنامج مع العتاد، مما يوفر كثيرًا من الوقت والجهد ويجعل عملية التطوير أسهل ويزيد من كفاءة التطبيقات وخواصها.
	</li>
	<li>
		<strong>الأمان:</strong> تضم معظم لغات البرمجة عالية المستوى مكتباتٍ وأدواتٍ تساعد على اختبار شيفرات البرنامج واستخراج ثغراتها ثم سد هذه الثغرات، ما يساهم في تقليل احتمالية اختراق التطبيق وتعسير الوصول إلى بيانات المستخدمين.
	</li>
	<li>
		<strong>التوافقية Portability:</strong> تدعم غالبية اللغات عالية المستوى تعدد المنصات، والتي تعني قدرة البرنامج على العمل على أنظمة تشغيل مختلفة، كأن يعمل برنامج سطح المكتب على ويندوز ولينكس وMacOS، كما تتوافق لغات البرمجة عالية المستوى مع مواصفات العتاد المختلفة للحواسيب أيضًا.
	</li>
	<li>
		<strong>تعدد الاستخدامات:</strong> تُستخدم لغات البرمجة عالية المستوى في مجالات لا حصر لها، بدءًا من تطوير التطبيقات للمنصات المختلفة، مرورًا بتطوير الألعاب، وصولًا إلى تطوير برمجيات الذكاء الاصطناعي وتحليل البيانات وغيرها.
	</li>
	<li>
		<strong>سهولة الاستخدام:</strong> يسهل تعلم لغات البرمجة عالية المستوى، وذلك لتشابه الكثير من شيفراتها باللغة الإنجليزية، وكذلك يسهل العمل بها لقلة عدد الشيفرات المطلوبة لتطوير البرمجيات.
	</li>
</ul>

<h2 id="-4">
	أمثلة على لغات البرمجة عالية المستوى
</h2>

<p>
	تنتشر لغات البرمجة عالية المستوى وتكثر، ومن أشهرها:
</p>

<ul>
	<li>
		بايثون Python
	</li>
	<li>
		سي بلس بلس C++‎
	</li>
	<li>
		جافا Java
	</li>
	<li>
		جافا سكريبت JavaScript
	</li>
	<li>
		بي إتش بي PHP
	</li>
	<li>
		سويفت Swift
	</li>
</ul>

<p>
	لنستعرض ماهية كل لغة ونماذجها البرمجية المدعومة وحالات استخدامها.
</p>

<h3>
	لغة بايثون Python
</h3>

<p>
	تعد <a href="https://academy.hsoub.com/store/9-%D8%AF%D9%88%D8%B1%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D8%BA%D8%A9-python/" rel="">بايثون</a> إحدى لغات البرمجة العصرية التي يزداد رواجها في الأوساط البرمجية، وهي لغة عالية المستوى مفسرة، تدعم البرمجة كائنية التوجه والبرمجة الوظيفية والبرمجة الإجرائية، وتعد لغة عامة الاستخدامات، إذ تُستخدم في مجالات عديدة ومختلفة، مثل: الذكاء الاصطناعي وتحليل البيانات وتطوير الويب وتطوير تطبيقات سطح المكتب وغيرها.
</p>

<h3>
	لغة C++‎
</h3>

<p>
	تقع لغة C++‎ ضمن أشهر لغات البرمجة عالية المستوى المترجمة، وتدعم البرمجة كائنية التوجه والبرمجة الإجرائية كليًا، وتدعم بعض خواص البرمجة الوظيفية، وتتعدد استخدامات لغة C++‎‎‎، ومن أشهر استخداماتها تطوير أنظمة التشغيل وتطوير الألعاب وتطوير تطبيقات السحابة وإنترنت الأشياء.
</p>

<h3>
	لغة جافا Java
</h3>

<p>
	تعد جافا لغة برمجة عالية المستوى كائنية التوجه تدعم التنفيذ كلغة مترجمة وكلغة مفسرة أيضًا، وتشتهر كثيرًا في مجال تطوير تطبيقات الهاتف ولا سيما الموجهة منها إلى نظام تشغيل أندرويد، كما يشيع استخدامها في مجال <a href="https://academy.hsoub.com/programming/game-development/%D9%85%D8%B7%D9%88%D8%B1-%D8%A7%D9%84%D8%A3%D9%84%D8%B9%D8%A7%D8%A8/" rel="">تطوير الألعاب</a>.
</p>

<h3>
	لغة جافا سكريبت JavaScript
</h3>

<p>
	تتعدد النماذج البرمجية للغة <a href="https://academy.hsoub.com/store/5-%D8%AF%D9%88%D8%B1%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D8%BA%D8%A9-javascript/" rel="">جافا سكريبت</a>، فهي تدعم البرمجة الإجرائية والبرمجة الوظيفية، وكذلك تعد داعمة لنموذج البرمجة كائنية التوجه، وتعد لغة مفسرة، وتبرز جافا سكريبت بشدة في مجال تطوير الواجهات الأمامية لتطبيقات الويب.
</p>

<h3>
	لغة PHP
</h3>

<p>
	تعد لغة <a href="https://academy.hsoub.com/store/2-%D8%AF%D9%88%D8%B1%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D8%BA%D8%A9-php/" rel="">PHP</a> واحدة من لغات البرمجة المفسرة الكلاسيكية التي لا تزال مستخدمة إلى يومنا هذا، وهي داعمةٌ للبرمجة كائنية التوجه والبرمجة الإجرائية، وتُستخدم في <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D8%AE%D9%84%D9%81%D9%8A%D8%A9-backend-web-development/" rel="">تطوير جهة الخادم Server-Side</a> في تطبيقات الويب.
</p>

<h3>
	لغة سويفت Swift
</h3>

<p>
	تحظى لغة سويفت بشعبية واسعة رغم حداثتها وظهورها متأخرًا في الأوساط البرمجية، وهي لغة مترجمة وتتلاءم بشدة مع نموذج البرمجة كائنية التوجه، وكذلك تدعم بعض النماذج البرمجية الأخرى مثل البرمجة الوظيفية، وتُستخدم سويفت <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%AC%D9%88%D8%A7%D9%84-r1801/" rel="">لتطوير تطبيقات الجوال</a> الموجهة إلى نظام تشغيل iOS.
</p>

<h2>
	الخلاصة
</h2>

<p>
	تعرفنا في مقال اليوم على أهمية لغات البرمجة عالية المستوى وأبرز أنواعها وتطبيقاتها، ويمكن القول أنه لا يمكن الاستغناء عن لغات البرمجة عالية المستوى في عصرنا الحالي، بل يسعى خبراء المطورين لتحديثها وتعديلها تارةً بتارةٍ حتى تكون أسهل وأقرب إلى اللغات البشرية، ولكي تصبح أكفأ وأسرع وأكثر أمانًا، وتُوائِم التغيرات السريعة في عالم التقنية، فاحرص على حجز وظيفتك في المستقبل بتعلُّم إحدى لغات البرمجة عالية المستوى من <a href="https://academy.hsoub.com/store/c1-%d8%af%d9%88%d8%b1%d8%a7%d8%aa-%d8%aa%d8%b9%d9%84%d9%8a%d9%85%d9%8a%d8%a9/" rel="">دورات أكاديمية حسوب المميزة</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D9%85%D8%AF%D8%A9-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9%D8%9F-r2257/" rel="">ما هي مدة تعلم البرمجة</a>
	</li>
	<li>
		<a href="http://xn--%20%20%20%20%20%20-0ii0abcbdhoeen2a8g7bxh1gtb6amihddf6bnhv4dq" rel="external nofollow">اكتشف ما هي البرمجة وما أهمية تعلمها</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">دليلك الشامل إلى لغات البرمجة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/artificial-intelligence/%D9%84%D8%BA%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">لغات برمجة الذكاء الاصطناعي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/game-development/%D9%84%D8%BA%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%A3%D9%84%D8%B9%D8%A7%D8%A8/" rel="">دليلك إلى لغات برمجة الألعاب</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2261</guid><pubDate>Sun, 25 Feb 2024 12:00:00 +0000</pubDate></item><item><title>&#x62A;&#x639;&#x631;&#x641; &#x639;&#x644;&#x649; &#x644;&#x63A;&#x629; &#x643;&#x648;&#x62A;&#x644;&#x646; Kotlin</title><link>https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D9%83%D9%88%D8%AA%D9%84%D9%86-kotlin-r2251/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_02/---.png.7b72a2925c4f590cd2df067869b73e22.png" /></p>
<p>
	نقدم لك في مقال اليوم نظرةً عامة على لغة البرمجة كوتلن Kotlin، اللغة الأحدث والمفضلة لمطوري أندرويد Android والمتكاملة بشكل مثالي مع لغة البرمجة العريقة جافا Java، ونستعرض أبرز استخداماتها وتطبيقاتها ومميزاتها، ونختم المقال بخطوات تساعدك على تعلم لغة كوتلن Kotlin من الصفر للاحتراف.
</p>

<h2>
	ما هي لغة البرمجة كوتلن Kotlin
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="144554" href="https://academy.hsoub.com/uploads/monthly_2024_02/---.png.574db0a1fbcc86ad01657c6b2a53f099.png" rel=""><img alt="ما هي لغة كوتلن" class="ipsImage ipsImage_thumbnailed" data-fileid="144554" data-ratio="62.60" data-unique="ytngqz7yq" style="width: 500px; height: auto;" width="500" src="https://academy.hsoub.com/uploads/monthly_2024_02/---.thumb.png.7a36bb340c0fafe881d0b50870530be7.png"> </a>
</p>

<p>
	لغة كوتلن Kotlin هي لغة برمجة حديثة مفتوحة المصدر وعامة الأغراض طورتها شركة <a href="https://www.jetbrains.com/" rel="external nofollow">JetBrains</a> عام 2011 وهي نفس الشركة التي طورت لغة البرمجة جافا Java وطورت الكثير من بيئات التطوير المتكاملة الأدوات القوية للمبرمجين مثل IntelliJ IDE.
</p>

<p>
	بعد ذلك استحوذت شركة جوجل Google على لغة كوتلن عام 2017 وعملت على دعمها وتطويرها وجعلها اللغة الرسمية لتطوير تطبيقات أندرويد بدلاً من لغة جافا بدءًا من إصدار Android Studio 3.0 وهذا زاد من شعبيتها وشهرتها وجعلها واحدة من أهم لغات البرمجة لتطوير تطبيقات الجوال، إلى جانب استخدامها في العديد من المجالات والتطبيقات الأخرى.
</p>

<p>
	وعلى الرغم من حداثة عهدها، إلا أن لغة كوتلن أثبتت نفسها كلغة برمجة قوية وحققت نجاحًا كبيرًا وتمكنت من منافسة لغة جافا التي انبثقت منها، وتواصل جوجل تحديثها باستمرار وتعزيزها بميزات إضافية فأحدث إصدار من لغة كوتلن عند كتابة هذا المقال هو <a href="https://kotlinlang.org/docs/whatsnew1920.html" rel="external nofollow">Kotlin 1.9.20</a> ويتميز هذا الإصدار بوجود العديد من التحسينات التي تزيد من قوة اللغة وكفاءتها.
</p>

<h2 id="">
	استخدامات لغة كوتلن
</h2>

<p>
	تستخدم لغة كوتلن Kotlin بشكل أساسي من أجل تطوير تطبيقات أندرويد، لكنها لغة عامة الأغراض وأثبتت كفاءتها في العديد من التطبيقات الأخرى، وإليك قامة بأبرز استخدامات لغة كوتلن:
</p>

<ul>
	<li>
		تطوير تطبيقات الجوال
	</li>
	<li>
		تطوير تطبيقات الويب
	</li>
	<li>
		أتمتة المهام المتكررة
	</li>
	<li>
		تحليل البيانات وعلوم البيانات
	</li>
	<li>
		برمجة تطبيقات سطح المكتب
	</li>
	<li>
		برمجة الألعاب
	</li>
</ul>

<p>
	لنناقش بمزيد من التفصيل أهمية لغة كوتلن Kotlin وتطبيقها في كل من هذه المجالات.
</p>

<h3 id="-1">
	تطوير تطبيقات الجوال
</h3>

<p>
	من أبرز استخدامات لغة كوتلن Kotlin تطوير تطبيقات الجوال لنظام التشغيل أندرويد Android فهي مدعومة رسميًا من قبل بيئة التطوير المتكاملة أندرويد ستوديو Android Studio الغنية بالميزات والتي توفر <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A8%D8%B1%D9%85%D8%AC-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA/" rel="">لمبرمج التطبيقات</a> الكثير من الأدوات المساعدة <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF-r1802/" rel="">لبرمجة تطبيقات أندرويد</a> احترافية، ولذا ستجد أن معظم التطبيقات القوية على متجر جوجل بلاي مكتوبة بلغة كوتلن Kotlin ومن أشهر هذه التطبيقات تطبيق تريللو Trello ودولينغو Duolingo و Pinterest.
</p>

<p>
	كما يمكن من خلال لغة كوتلن تطوير تطبيقات جوال متعددة المنصات Cross-platform تعمل على أنظمة أندرويد Android وآي أو إس iOS بذات الوقت بفضل تقنية <a href="https://www.jetbrains.com/kotlin-multiplatform/" rel="external nofollow">Kotlin Multiplatform</a> التي تسمح بتشغيل نفس الكود على أنظمة تشغيل مختلفة.
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="498" id="ips_uid_1362_6" src="https://academy.hsoub.com/applications/core/interface/index.html" title="ما هي تطبيقات الجوال متعددة المنصات" width="885" data-embed-src="https://www.youtube.com/embed/nMnBfl-fQJo"></iframe>
</p>

<h3 id="-2">
	تطوير تطبيقات الويب
</h3>

<p>
	تعد لغة كوتلن Kotlin خيارًا مناسبًا لمجال <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D9%84%D9%85-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8/" rel="">تطوير الويب</a> فهي تمكنك من تطوير تطبيقات ويب كاملة full-stack web app بسهولة، وتصلح لتطوير واجهات برمجة التطبيقات <a href="https://academy.hsoub.com/programming/general/%D8%B4%D8%B1%D8%AD-%D9%81%D9%84%D8%B3%D9%81%D8%A9-restful-%D8%AA%D8%B9%D9%84%D9%85-%D9%83%D9%8A%D9%81-%D8%AA%D8%A8%D9%86%D9%8A-%D9%88%D8%A7%D8%AC%D9%87%D8%A7%D8%AA-rest-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-r635/" rel="">RESTful <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr></a>، وتطوير الواجهات الخلفية لتطبيقات الويب باستخدام <a href="https://academy.hsoub.com/devops/servers/%D8%A3%D8%B7%D8%B1-%D8%B9%D9%85%D9%84-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%85%D9%86-%D8%B7%D8%B1%D9%81-%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-r784/" rel="">أطر عمل الويب من طرف الخادم</a> مثل Spring Boot و Ktor.
</p>

<p>
	كما يمكن استخدام لغة برمجة كوتلن Kotlin في <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D8%A3%D9%85%D8%A7%D9%85%D9%8A%D8%A9-frontend-web-development/" rel="">تطوير الواجهات الأمامية</a> فهي توفر مكتبة <a href="https://kotlinlang.org/docs/js-overview.html" rel="external nofollow">Kotlin/JS</a> التي تمكنك من كتابة الشيفرة بلغة كوتلن وتحويلها إلى جافا سكريبت لتشغيلها في المتصفح، كما توفر لمطور الواجهة الأمامية العديد من مكتبات وأطر عمل <span ipsnoautolink="true">تطوير الواجهة الأمامية</span> المتوافقة مع Kotlin/JS مثل KVision﻿ أو fritz2 أو Kotlin React.
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="498" id="ips_uid_1362_7" src="https://academy.hsoub.com/applications/core/interface/index.html" title="ما هو تطوير الواجهات الأمامية وكيفية تعلمه" width="885" data-embed-src="https://www.youtube.com/embed/zrkE_dFffEU"></iframe>
</p>

<h3 id="-3">
	أتمتة المهام المتكررة
</h3>

<p>
	تسهل لغة كوتلن Kotlin على المبرمجين كتابة أكواد لأتمتة المهام البسيطة المتكررة مثل جدولة نشر المحتوى، وإرسال رسائل البريد الإلكتروني، وتنزيل الملفات من الإنترنت بسرعة ومرونة بفضل شيفراتها البرمجية المختصرة القادرة على تنفيذ المهام المطلوبة بكتابة بضعة أسطر من التعليمات البرمجية وهذا يساعد في توفير وقت وجهد المبرمجين وزيادة إنتاجيتهم.
</p>

<h3 id="-4">
	علوم البيانات وتحليل البيانات
</h3>

<p>
	تناسب لغة كوتلن تطوير تطبيقات <a href="https://academy.hsoub.com/programming/general/%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">علوم البيانات</a> <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AD%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">وتحليل البيانات</a> فهي توفر مجموعة متنوعة من المكتبات المساعدة في هذا المجال مثل مكتبة KotlinDL المستوحاة من مكتبة Keras، ومكتبة kmath المستوحاة من NumPy، ومكتبة DataFrame و Apache SparkK وغيرها الكثير من المكتبات التي تسهل مهام معالجة البيانات.
</p>

<p>
	كما يمكنك أيضًا استخدام مكتبات وأطر عمل Java لتحليل وتمثيل البيانات في شيفرات وبرامج لغة كوتلن Kotlin الخاصة بك مثل مكتبة ND4J ومكتبة Charts<br>
	و Tablesaw نظرًا لأن Kotlin توفر توافقًا كاملاً مع لغة البرمجة جافا Java وتتيح لك استخدام كافة مكتباتها بسهولة.
</p>

<h3 id="-5">
	تطوير تطبيقات سطح المكتب
</h3>

<p>
	توفر لغة كوتلن Kotlin عدة مكتبات وأطر عمل <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%B3%D8%B7%D8%AD-%D8%A7%D9%84%D9%85%D9%83%D8%AA%D8%A8/" rel="">لبرمجة تطبيقات سطح المكتب</a> مثل Compose for Desktop و TornadoFX والتي يمكنك من خلالها إنشاء تطبيقات سطح المكتب بواجهات مستخدم أنيقة ومتوافقة مع كافة أنظمة تشغيل سطح المكتب الأساسية مثل ويندوز Windows ولينكس Linux وماك macOS بسرعة وفعالية وسيكون عليك كتابة التعليمات البرمجية لتطبيقك مرة واحدة فقط وتشغيلها على كافة أنظمة التشغيل.
</p>

<h3 id="-6">
	برمجة الألعاب
</h3>

<p>
	بالرغم من وجود العديد من <a href="https://academy.hsoub.com/programming/game-development/%D9%84%D8%BA%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%A3%D9%84%D8%B9%D8%A7%D8%A8/" rel="">لغات برمجة الألعاب</a> القوية والاحترافية مثل لغة ++C أو #C أو Lua إلا أن لغة كوتلن Kotlin يمكن أن تستخدم كذلك في مجال تطوير الألعاب حيث تتوفر عدة محركات ألعاب <a href="https://academy.hsoub.com/programming/game-development/%D9%85%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D9%84%D8%B9%D8%A7%D8%A8-game-engines/" rel="">Game engines</a> تدعم لغة كوتلن مثل محرك ألعاب <a href="https://korge.org/" rel="external nofollow">KorGE</a> و <a href="https://libgdx.com/" rel="external nofollow">LibGDX</a> التي تمكنك من إنشاء ألعاب بسيطة ثنائية الأبعاد 2D بلغة كوتلن ومحرك <a href="https://github.com/minigdx/minigdx" rel="external nofollow">MiniGDX</a> لإنشاء ألعاب ثلاثية الأبعاد 3D، ومن الألعاب المعروفة التي تستخدم لغة كوتلن نذكر Dinoleon و TetroCrate<br>
	و Beat The High Score.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="144553" href="https://academy.hsoub.com/uploads/monthly_2024_02/---.png.04261a343197f7f20a6b63d603042e7a.png" rel=""><img alt="برمجة ألعاب بلغة كوتلن" class="ipsImage ipsImage_thumbnailed" data-fileid="144553" data-ratio="47.60" data-unique="ro4dji8yg" style="width: 500px; height: auto;" width="500" src="https://academy.hsoub.com/uploads/monthly_2024_02/---.thumb.png.e5d2941e9352fdecd5bf084d9c775def.png"> </a>
</p>

<h2 id="kotlin-1">
	مميزات كوتلن Kotlin
</h2>

<p>
	تتصف كوتلن Kotlin بمجموعة من المميزات ومن أهمها نذكر:
</p>

<ul>
	<li>
		لغة برمجة حديثة ومفتوحة المصدر.
	</li>
	<li>
		مدعومة من شركة جوجل التي توفر لها تحديثات وتحسينات مستمرة.
	</li>
	<li>
		شيفراتها البرمجية مختصرة ومعبرة وسهلة القراءة.
	</li>
	<li>
		لغة برمجة متعددة الاستخدامات وتصلح لحل العديد من المشكلات البرمجية وتطوير العديد من التطبيقات.
	</li>
	<li>
		متوافقة مع لغة جافا Java و<a href="https://academy.hsoub.com/programming/java/%D8%A2%D9%84%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7-%D8%A7%D9%84%D8%A7%D9%81%D8%AA%D8%B1%D8%A7%D8%B6%D9%8A%D8%A9-java-virtual-machine-r964/" rel="">آلة جافا الافتراضية JVM</a> وتسهل تطوير تطبيقات ثنائية اللغة تجمع بين لغة كوتلن ولغة جافا.
	</li>
	<li>
		يمكن تصريف أو تحويل أكواد لغة كوتلن Kotlin إلى لغة <a href="https://wiki.hsoub.com/Kotlin/js_overview" rel="external">جافا سكربيت JavaScript</a> بسهولة وفعالية والتعامل مع عناصر DOM.
	</li>
	<li>
		لغة آمنة وموثوقة تحسن أمان التطبيقات وتمنع حدوث العديد من الأخطاء الشائعة.
	</li>
	<li>
		لغة متعددة الأنماط تجمع ميزات البرمجة كائنية التوجه <a href="https://academy.hsoub.com/programming/general/%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D8%A7%D9%84%D9%83%D8%A7%D8%A6%D9%86%D8%A7%D8%AA-oop/" rel=""><abbr title="Object-Oriented Programming | البرمجة كائنية التوجه"><abbr title="Object-Oriented Programming | البرمجة كائنية التوجه">OOP</abbr></abbr></a> والبرمجة الوظيفية <a href="https://academy.hsoub.com/programming/general/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D9%88%D8%B8%D9%8A%D9%81%D9%8A%D8%A9-functional-programming-r1391/" rel="">Functional Programming</a>.
	</li>
	<li>
		متوافقة مع مختلف المنصات أي يمكنها العمل على أنظمة تشغيل مختلفة مثل ويندوز Windows ولينكس Linux وأندوريد Android وآي أو إس iOS.
	</li>
</ul>

<h2 id="kotlin-2">
	عيوب لغة كوتلن Kotlin
</h2>

<p>
	لا تخلو لغة البرمجة كوتلن Kotlin من بعض العيوب ومن بينها:
</p>

<ul>
	<li>
		لغة برمجة حديثة نسبيًا ولها صياغة لغوية وبنية تعليمات مختلفة عن لغة جافا Java لذا قد يحتاج مبرمجو جافا لبعض الوقت للتآلف معها.
	</li>
	<li>
		لا يزال مجتمع دعم لغة كوتلن Kotlin صغيرًا نوعًا ما لذا قد يكون من الصعب العثور على حل سريع لمشكلاتك البرمجية.
	</li>
	<li>
		تملك كوتلن عددًا قليلًا نسبيًا من المكتبات وأطر العمل والأدوات المساعدة مقارنةً بلغة جافا Java.
	</li>
</ul>

<h2 id="-7">
	الفرق بين جافا وكوتلن
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="144555" href="https://academy.hsoub.com/uploads/monthly_2024_02/---.png.ed9a2467ecc3e598a7938454f8647d6f.png" rel=""><img alt="مقارنة بين جافا وكوتلن" class="ipsImage ipsImage_thumbnailed" data-fileid="144555" data-ratio="62.60" data-unique="tqymglh4h" style="width: 500px; height: auto;" width="500" src="https://academy.hsoub.com/uploads/monthly_2024_02/---.thumb.png.c67a0226932f2335ddd224b0fc400dea.png"> </a>
</p>

<p>
	تعد كل من لغة جافا Java ولغة كوتلن Kotlin المنبثقة عنها من لغات البرمجة القوية، وهما تملكان الكثير من الجوانب المتشابهة فكلاهما تعملان ضمن آلة جافا الافتراضية <a href="https://academy.hsoub.com/programming/java/%D8%A2%D9%84%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7-%D8%A7%D9%84%D8%A7%D9%81%D8%AA%D8%B1%D8%A7%D8%B6%D9%8A%D8%A9-java-virtual-machine-r964/" rel="">JVM </a>وتتوافقان مع مختلف المنصات وأنظمة التشغيل وتدعمان نموذج <a href="https://academy.hsoub.com/programming/general/%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D8%A7%D9%84%D9%83%D8%A7%D8%A6%D9%86%D8%A7%D8%AA-oop/" rel="">البرمجة كائنية التوجه <abbr title="Object-Oriented Programming | البرمجة كائنية التوجه">OOP</abbr></a> وتصلحان لتطوير العديد من التطبيقات مثل تطبيقات الجوال وتطبيقات الويب وغيرها.
</p>

<p>
	ورغم التشابه بين اللغتين إلا أن هناك بعض الاختلافات الرئيسية بين اللغتين، فلغة كوتلن Kotlin أحدث من جافا وقد وجدت كي تحسن بعض سلبيات لغة جافا فمن أبرز التحسينات التي تميز لغة كوتلن عن جافا:
</p>

<ul>
	<li>
		أكواد لغة كوتلن مختصرة أكثر وأسهل مقروئيةً من أكواد لغة جافا.
	</li>
	<li>
		تستهلك البرامج المكتوبة بلغة كوتلن موارد وذاكرة أقل من البرامج المكتوبة بلغة جافا Java.
	</li>
	<li>
		توفر كوتلن نظامًا صارمًا للتحقق من الأنواع لتساعد المبرمجين على كشف الأخطاء وتسهل صيانة الكود البرمجي.
	</li>
	<li>
		توفر كوتلن ميزات تعزز أمان التطبيقات مثل ميزة أمان القيم الفارغة <a href="https://kotlinlang.org/docs/null-safety.html" rel="external nofollow">Null Safety</a> التي تمنع تعيين قيمة فارغة لمتغير ما.
	</li>
	<li>
		تدعم لغة كوتلن كتابة دوال أو وظائف جديدة توسع الأصناف البرمجية دون الحاجة إلى تعديل الأصناف نفسها.
	</li>
</ul>

<p>
	لاحظ الصورة التالية التي تقارن بين أكواد لغة كوتلن وأكواد لغة جافا لبرنامج يتحقق من كون عدد ما عددً أوليٍّا Prime Number أم لا:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="144552" href="https://academy.hsoub.com/uploads/monthly_2024_02/---.png.aca9aaf54df30a5614f68e4627edc0fa.png" rel=""><img alt="الفرق بين جافا وكوتلن" class="ipsImage ipsImage_thumbnailed" data-fileid="144552" data-unique="tje5lm16f" src="https://academy.hsoub.com/uploads/monthly_2024_02/---.thumb.png.7d498aafd88ff487a5454d184a64067c.png"> </a>
</p>

<p>
	كما ترى من الصورة أعلاه، فقد كتبنا هذا البرنامج البسيط بشيفرات أقل عند استخدام لغة كوتلن وبالطبع سنختصر أكواد أكثر عندما يزداد حجم البرنامج، لهذا السبب يفضل المطورون لغة كوتلن على لغة جافا لاختصار وقت تطوير التطبيقات.
</p>

<p>
	وبالعموم يعتمد اختيار لغة كوتلن أو جافا في برمجة تطبيقاتك بالمقام الأول على احتياجاتك وتفضيلاتك، فاللغتان كما ذكرت سابقًا متوافقتان مع بعضهما البعض ويمكنك بسهولة استخدام كود كوتلن Kotlin في تطبيقات جافا Java ، أو استخدام كود جافا Java في تطبيقات كوتلن Kotlin والاستفادة من مميزات كل لغة منهما.
</p>

<h2 id="-8">
	مستقبل كوتلن
</h2>

<p>
	يُتوقع أن تكون لغة كوتلن من اللغات المطلوبة في المستقبل، فهي واحدة من أسرع لغات البرمجة الحديثة نموًا وانتشارًا، وهي موجزة وسهلة التعلم وتتمتع بالعديد من المميزات القوية التي تسرّع عمل المبرمجين وتحسّن إنتاجيتهم لذا نجد أن شعبيتها تتزايد بين أوساط المطورين.
</p>

<p>
	كما يزداد الطلب على مبرمجي كوتلن Kotlin لا سيما في تخصص <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%AC%D9%88%D8%A7%D9%84-r1801/" rel="">تطوير تطبيقات الجوال</a> وتحديدًا تطبيقات أندرويد، إلى جانب الأنواع المختلفة من التطبيقات وهو أحد <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AC%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">مجالات البرمجة</a> المهمة والمطلوبة في سوق العمل، فإذا كنت تخطط لتعلم تطوير تطبيقات الجوال فمن المفيد أن تضع لغة كوتلن Kotlin ضمن خطة تعلمك وتطور مهارتك بها لتحقق أهدافك المهنية بزمن قياسي.
</p>

<h2 id="kotlin-3">
	خطوات تعلم لغة البرمجة كوتلن Kotlin
</h2>

<p>
	إليك أهم الخطوات التي عليك اتباعها لتتعلم لغة البرمجة كوتلن:
</p>

<ul>
	<li>
		يفضل قبل البدء بخطوات تعلم لغة كوتلن أو أي لغة برمجة أخرى أن تأسس نفسك في <a href="https://academy.hsoub.com/programming/advanced/%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA/" rel="">الخوارزميات</a> <a href="https://academy.hsoub.com/programming/general/%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%81%D9%83%D9%8A%D8%B1-%D8%A7%D9%84%D9%85%D9%86%D8%B7%D9%82%D9%8A-%D9%81%D9%8A-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r2095/" rel="">والتفكير المنطقي</a> فهذا يساعدك على تعلم البرمجة بسرعة وكفاءة أكبر.
	</li>
	<li>
		ابدأ بتعلم <a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">أساسيات البرمجة</a> بلغة كوتلن مثل مفهوم المتغيرات وأنواع البيانات والتعليمات الشرطية والحلقات التكرارية والدوال البرمجية وهياكل البيانات وإذا كنت على دراية مسبقة بلغة برمجة أخرى فستكون هذه الأساسيات بديهية لديك.
	</li>
	<li>
		تعلم إعداد بيئة تطوير كوتلن وتثبيت كافة الأدوات والمكتبات الضرورية لكتابة وتشغيل أكواد لغة كوتلن على جهازك وإنشاء التطبيقات المطلوبة مثل JDK ومحرر IntelliJ IDEA، كما يمكنك في بداية تعلمك تجربة تنفيذ الأكواد على <a href="https://play.kotlinlang.org/" rel="external nofollow">منصات جاهزة على الإنترنت</a> دون الحاجة لإعداد بيئة التطوير على جهازك.
	</li>
	<li>
		تعلم نماذج البرمجة التي تدعمها كوتلن مثل البرمجة الوظيفية ومبادئ البرمجة كائنية التوجه <abbr title="Object-Oriented Programming | البرمجة كائنية التوجه"><abbr title="Object-Oriented Programming | البرمجة كائنية التوجه">OOP</abbr></abbr> وكتابة البرامج بكل منهجية وتعلم موضوعات متقدمة في كوتلن مثل الروتينات المساعدة <a href="https://wiki.hsoub.com/Kotlin/coroutines" rel="external">Coroutines</a> والانعكاسات <a href="https://wiki.hsoub.com/Kotlin/reflection" rel="external">Reflections</a> و DSLs وغيرها.
	</li>
	<li>
		ابدأ بإنشاء تطبيقات فعلية بلغة كوتلن مثل إنشاء تطبيقات سطر أوامر لأتمتة المهام أو <a href="https://academy.hsoub.com/programming/kotlin/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-kotlin-%D8%A8%D8%B3%D9%8A%D8%B7-%D9%84%D9%84%D8%A3%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF-r614/" rel="">إنشاء تطبيق أندوريد بلغة كوتلن</a> فالتطبيق على مشاريع فعلية هي أفضل طريقة لتتعلم لغة Kotlin بكفاءة واحترافية.
	</li>
	<li>
		اعتمد على مصادر تعلم جيدة من دروس ومقالات وكتب ومقاطع فيديو وغيرها، ستجد في أكاديمية حسوب <a href="https://wiki.hsoub.com/Kotlin" rel="external">توثيقًا شاملًا للغة كوتلن Kotlin</a> باللغة العربية كما تنشر أكاديمية حسوب العديد من <a href="https://academy.hsoub.com/programming/kotlin/" rel="">الدروس والمقالات</a> المفيدة حول لغة كوتلن تناسب المبتدئين والمحترفين، ويمكن أن تجد في <a href="https://kotlinlang.org/" rel="external nofollow">موقع كوتلن الرسمي</a> معلومات غنية حول اللغة وأحدث إصداراتها.
	</li>
	<li>
		أخيرًا فإن لغة كوتلن تُطوّر وتُحدّث باستمرار لذا من الضروري أن تطور معلوماتك باستمرار، وتطّلع على كل جديد حول اللغة وتستفيد منها وتطبقها في مشاريعك المختلفة.
	</li>
</ul>

<h2 id="-9">
	الخلاصة
</h2>

<p>
	تعرفنا في مقال اليوم على لغة كوتلن Kotlin التي تعد واحدة من أشهر لغات البرمجة المتوافقة مع آلة جافا الافتراضية JVM بعد لغة Java والتي تدعمها لغة جوجل وتصنفها كلغة برمجة من الصنف الأول First-Class، وضحنا أهم مميزاتها ومجالات استخدامها وأنواع التطبيقات التي يمكن تطويرها باستخدامها، ووضحنا أهم الخطوات والمصادر المفيدة التي تساعدك على تعلمها.<br>
	فإذا كنت تخطط لتعلم لغة برمجة جديدة فلغة كوتلن خيار مناسب لك تمامًا وخصوصًا إذا كنت مهتمًا بمجال تطوير تطبيقات الجوال.
</p>

<h2 id="-10">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/kotlin/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B3%D8%B1%D9%8A%D8%B9-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-kotlin-r603/" rel="">الدليل السريع إلى لغة البرمجة Kotlin</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/kotlin/kotlin-%D9%87%D9%88-%D8%AC%D8%A7%D9%81%D8%A7-%D8%A7%D9%84%D8%AC%D8%AF%D9%8A%D8%AF-r641/" rel="">Kotlin هو جافا الجديد</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/kotlin/%D8%A5%D8%B6%D8%A7%D9%81%D8%A7%D8%AA-%D8%A3%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF-%D9%84%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-kotlin-r618/" rel="">إضافات أندرويد للغة البرمجة Kotlin</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA/" rel="">دليلك الشامل إلى برمجة التطبيقات</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2251</guid><pubDate>Sat, 24 Feb 2024 12:08:02 +0000</pubDate></item><item><title>&#x645;&#x627; &#x647;&#x64A; &#x645;&#x62F;&#x629; &#x62A;&#x639;&#x644;&#x645; &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;&#x61F;</title><link>https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D9%85%D8%AF%D8%A9-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9%D8%9F-r2257/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_02/771937999_.png.7f18857d19bea1ffaf3289016ce297e5.png" /></p>
<p>
	هل أنت مهتم بتعلم البرمجة والتطوير لكنك تتساءل ما هي مدة تعلم البرمجة؟ وكم أحتاج من الوقت لتعلم لغة برمجة معينة، وهل سأستغرق وقتًا طويلًا لتعلمها والعمل بها؟ وفي مقال اليوم نحاول أن نجيبك على كل هذه الأسئلة ونقدم بعض النصائح المفيدة التي تساعدك على التقدم بشكل أسرع.
</p>

<p>
	في الواقع قد تختلف الإجابة على هذا السؤال اعتمادًا على عدة عوامل مثل الوقت الذي يمكنك توفيره لدراسة البرمجة يوميًا ومدى استيعابك، وهل تبدأ من الصفر أم لديك بعض المعلومات المسبقة عن البرمجة، وما هو المجال أو التخصص الذي ترغب بتعلمه
</p>

<h2 id="-1">
	كم يستغرق تعلم البرمجة
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="144636" href="https://academy.hsoub.com/uploads/monthly_2024_02/2018660204_.png.91f681b850dbc2aead18235100f60e00.png" rel=""><img alt="مدة تعلم البرمجة" class="ipsImage ipsImage_thumbnailed" data-fileid="144636" data-ratio="62.50" data-unique="mh49e0ap6" style="width: 500px; height: auto;" width="400" src="https://academy.hsoub.com/uploads/monthly_2024_02/.thumb.png.99d4aecea493068b6adb2caf2fa79ade.png"> </a>
</p>

<p>
	دعنا نتفق أنه ليس من السهل تحديد جواب دقيق لهذا السؤال، جرب مثلًا أن تكتب في محرك البحث جوجل "كم يستغرق تعلم البرمجة" ستفاجئ بالحصول على إجابات متفاوتة بشكل كبير على هذا السؤال قد تتراوح من ثلاثة أشهر إلى خمس سنوات!
</p>

<p>
	يعزى هذا التفاوت الكبير في الإجابات إلى وجود عوامل عديدة تلعب دورًا في تحديد مدة تعلم البرمجة، بعض هذه العوامل فردية وتختلف من شخص لآخر فهناك أشخاص يتعلمون المفاهيم الجديدة أسرع من غيرهم، وبعضهم لديه متسع من الوقت يمكن تخصيصه يوميًا في دراسة البرمجة أكثر من غيره، وبعضها الآخر عوامل تتعلق بطبيعة لغة البرمجة التي تنوي تعلمها أو التخصص البرمجي التي تود تعلمه وهل ترغب بالتعلم لدخول سوق العمل أم لمجرد اكتساب مهارات شخصية فكل هذه العوامل تؤثر على وتيرة تعلمك وزمن تحقيق أهدافك.
</p>

<p>
	سنناقش في الفقرات التالية بعض العوامل المهمة التي تؤثر على مدة تعلم البرمجة ونوضح كم يستغرق تعلم البرمجة بناء على كل حالة من الحالات لنساعدك على تحديد الوقت المطلوب بشكل تقريبي بحسب حالتك.
</p>

<h2 id="-2">
	العوامل التي تؤثر على مدة تعلم البرمجة
</h2>

<ol>
	<li>
		الخبرة المسبقة
	</li>
	<li>
		صعوبة لغة البرمجة
	</li>
	<li>
		المستوى الذي تطمح للوصول إليه
	</li>
	<li>
		التخصص أو المجال البرمجي
	</li>
	<li>
		أسلوب التعلم
	</li>
	<li>
		جودة مصادر التعلم
	</li>
</ol>

<h3 id="-3">
	الخبرة المسبقة
</h3>

<p>
	فإذا كنت تنوي تعلم البرمجة من الصفر ولم يكن لديك أي خلفية تقنية وليس لديك أدنى فكرة عن مبادئ التعامل مع الحاسوب ومفهوم الخوارزميات وأسس التفكير المنطقي وحل المشكلات وعن أي لغة برمجة سابقة فسيستغرق تعلم البرمجة وقتًا طويلاً منك نظرًا لوجود مجموعة واسعة من المفاهيم التي عليك تعلمها وقد يستغرق الأمر عدة أشهر حتى تتمكن من كتابة استيعاب أساسيات البرمجة وفهم مفردات لغة البرمجة التي تستخدمها وكتابة برنامج الأول بها بنفسك وتنفيذه بشكل صحيح.
</p>

<p>
	من الضروري أن لا تشعر بالإحباط في بدايات تعلم البرمجة وتأسيس نفسك بها فالبدايات دومًا هي الأصعب فإذا تخطيت هذه المرحلة فستتمكن من التقدم بتعلم البرمجة بوتيرة أسرع وسيسهل عليك الانتقال لتعلم أي لغة برمجة أخرى.
</p>

<h3 id="-4">
	صعوبة لغة البرمجة
</h3>

<p>
	أحد العوامل المهمة في زمن تعلم البرمجة هو اللغة التي تختارها فهناك العديد من لغات البرمجة المختلفة مثل لغة بايثون Python. وجافا Java و C++ و PHP وغيرها الكثير وبعض هذه اللغات سهل التعلم وبعضها الآخر أكثر صعوبة ويستغرق مدة تعلم أطول فتعلم لغة برمجة سهلة نسبيًا يستغرق حوالي أربعة إلى ستة أشهر وستحتاج لوقت أكبر إذا كنت تتعلم لغة برمجة صعبة.
</p>

<p>
	لذا عندما تقرر تعلم البرمجة فمن الأفضل أن تبحث عن لغة لها منحنى تعلم "Learning Curve" سهل وغير حاد أو معقد، ومنحنى التعلم هو طريقة بيانية للتعبير عن صعوبة تعلم الشخص لموضوع خلال فترة زمنية معينة ويعبر عن سرعة التقدم والخبرات المكتسبة في هذا الموضوع مع مرور الوقت.
</p>

<p>
	على سبيل المثال تملك لغة بايثون <a href="https://wiki.hsoub.com/Python" rel="external">Python</a> منحنى تعليمي أسهل من لغة جافا <a href="https://academy.hsoub.com/programming/java/" rel="">Java</a>  بسبب تعتبر لغة تركيبتها التي تشبه إلى حد كبير اللغة الإنجليزية وقواعدها السهلة، لهذا السبب فإن مدة تعلم لغة البايثون ستكون أقصر من مدة تعلم لغة جافا وتقدر المدة الوسطية لتعلم أساسيات بايثون بخمس إلى عشر أسابيع في حين تصل مدة تعلم جافا من ستة أشهر إلى 18 شهرًا، ويمكنك مطالعة المزيد من المعلومات حول لغات البرمجة التي يفضل أن تبدأ بها تعلم البرمجة من خلال مقال <a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D9%87%D9%84-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">أسهل لغات البرمجة</a>.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="144635" href="https://academy.hsoub.com/uploads/monthly_2024_02/174264942_.png.3337bfa2daa95067772183b7ecef034f.png" rel=""><img alt="أسهل لغات البرمجة لتعلمها" class="ipsImage ipsImage_thumbnailed" data-fileid="144635" data-ratio="62.50" data-unique="2r6cq89j1" style="width: 600px; height: auto;" width="600" src="https://academy.hsoub.com/uploads/monthly_2024_02/.thumb.png.27678ba0c960dd0a6c0860283f29d592.png"> </a>
</p>

<h3 id="-5">
	المستوى الذي تطمح للوصول إليه
</h3>

<p>
	إذا كنت تقصد عند سؤالك ما المدة التي أحتاجها لتعلم البرمجة أن تتعلم <a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">أساسيات البرمجة</a> وتتعرف على طريقة أسلوب كتابة الشيفرات والتعليمات وتعريف المتغيرات وأنواع البيانات، والحلقات والشروط والدوال البرمجية …إلخ. لمجرد اكتساب مهارة تنمي تفكيرك المنطقي والتحليلي وتوسع مداركك وتمكنك من كتابة برامج حاسوبية لحل مشكلات بسيطة أو أتمتة مهامك اليومية المتكررة فهذا الأمر لن يتطلب منك سوى ثلاثة إلى ستة أشهر فقط لتعلم البرمجة بأي لغة كانت.
</p>

<p>
	لكن هذه المدة لن تكون كافية لك لاحتراف البرمجة ودخول سوق العمل فهذا الأمر قد يتطلب منك حوالي سنة أو أكثر للعمل على بناء برامج معقدة وتطبيقات احترافية متكاملة تتعامل مع مشكلات فعلية وتنبي من خلالها معرض أعمال جيد يعزز فرصتك في الحصول على عمل مناسب وإذا كنت تحتاج علم لغة برمجة سهلة نسبيًا يستغرق حوالي أربعة إلى ستة أشهر.
</p>

<h3 id="-6">
	التخصص أو المجال البرمجي
</h3>

<p>
	إن <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AC%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">مجالات البرمجة</a> كثيرة ومتنوعة مثل <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D9%84%D9%85-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8/" rel="">تطوير الويب وبرمجة المواقع</a> وبرمجة الألعاب والذكاء الاصطناعي وعلوم البيانات والأمن السيبراني وغيرها الكثير وبتطلب كل تخصص برمجي مجموعة مهارات مختلفة عن الآخر فكلما زادت المهارات المطلوبة وزاد تعقيدها، كلما زاد الوقت الذي تحتاجه لتعلمها.
</p>

<p>
	على سبيل المثال، تبلغ مدة تعلم برمجة المواقع حوالي ستة أشهر إلى عام واحد، في حين يحتاج تعلم أساسيات الذكاء الاصطناعي مدة أطول قد تصل لسنة أو أكثر لأنه مجال أكثر تعقيدًا ويتطلب وجود أساس جيد في الرياضيات والإحصاء ويحتج بعض الوقت للتآلف مع مصطلحاته والتعرف على تخصصاته المختلفة وتعلم خوارزميات التعلم الآلي ولغات <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">برمجة الذكاء الاصطناعي</a> كما يحتاج للكثير من الممارسة لإتقانه.
</p>

<h3 id="-7">
	أسلوب تعلم البرمجة
</h3>

<p>
	تختلف مدة تعلم البرمجة أيضًا بحسب الطريقة التي تختارها للتعلم، فإذا اخترت <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%B7%D8%B1%D9%82-%D8%AF%D8%B1%D8%A7%D8%B3%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%85%D9%86-%D8%A7%D9%84%D8%B5%D9%81%D8%B1-r2253/" rel="">دارسة البرمجة</a> عن طريق التعليم الأكاديمي والتسجيل في إحدى الجامعات فستستغرق وقتًا طويلًا لا يقل عن أربع أو خمس سنوات لأنك ستضطر على الالتزام بمنهج محدد.
</p>

<p>
	أما إذا اخترت التعلم الذاتي فستتمكن من توفير الكثير من الوقت وتقتصر اعلى لغات البرمجة والتقنيات التي تحتاج لتعلمها وبقدر ما تثابر وتبذل من جهد وتلتزم بخطة تعلم منظمة وساعات تعلم محددة يوميًا فستختصر من زمن تعلم البرمجة وتتمكن من دخول سوق العمل بسرعة أكبر.
</p>

<h3 id="-8">
	جودة مصادر التعلم
</h3>

<p>
	إذا قررت تعلم البرمجة فستجد الكثير من مصادر التعلم المتنوعة من دروس ومقالات وكتب ومقاطع فيديو ودورات تدريبية وغيرها من المصادر التي تساعدك لكن هذه المصادر ليست على نفس المستوى من الجودة وقد يصعب عليك كمبتدئ تمييز الغث من السمين وتحديد الترتيب الصحيح لمواضيع التعلم والتركيز على تعلم ما يهمك.
</p>

<p>
	كما أن تعلمك من مصادر مشتتة وبطريقة عبثية فتارة تشاهد مقطع فيديو عن موضوع ما وتارة تقرأ مقالة عن موضوع آخر وتارة تبدأ بقراءة كتاب ثم تمل منه سريعًا سيزيد بلا شك من مدة تعلم البرمجة وتحقيق هدفك وتذكر أن المشتت لا يصل.
</p>

<p>
	فإذا كنت تتعلم البرمجة دون خطة منهجية واضحة وتريد اختصار وقت تعلم البرمجة فمن الأفضل أن تستثمر وقتك وجهدك وتسجل في دورة تدريبية المنهجية التي تقدم لك المعرفة التي تحتاجها بالتسلسل الصحيح وتوضح لك الأدوات والتقنيات التي تحتاجها وتقيم مهاراتك بشكل معياري وتساعدك على تنفيذ تطبيقات عملية تعزز ما تعلمته وتزيد فرصتك في الحصول على و<a href="https://academy.hsoub.com/programming/general/%D9%88%D8%B8%D8%A7%D8%A6%D9%81-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%A3%D9%83%D8%AB%D8%B1-%D8%B7%D9%84%D8%A8%D9%8B%D8%A7/" rel="">ظائف برمجة</a> مناسبة لمهاراتك.
</p>

<p>
	ستجد في أكاديمية حسوب الكثير من <a href="https://academy.hsoub.com/store/c1-%d8%af%d9%88%d8%b1%d8%a7%d8%aa-%d8%aa%d8%b9%d9%84%d9%8a%d9%85%d9%8a%d8%a9/" rel="">الدورات التعليمية</a> عالية الجودة بمختلف التخصصات توفر لك إمكانية التعلم من الصفر دون الحاجة لأي معرفة مسبقة وتساعدك على التعلم بطريقة منظمة وتقرن التعليم النظري بالتطبيق العملي والأهم أنها توفر لك مدربين خبراء يرشدونك ويدعمونك طوال رحلتك التعليمية ويساعدونك في الإجابة على أي تساؤل وحل أي مشكلة تواجهك ويسعدون بتقديم المشورة التي تحتاجها حتى تحترف البرمجة وتجد فرصة العمل المناسبة.
</p>

<h2 id="-9">
	هل فات الوقت على تعلّم البرمجة
</h2>

<p>
	كثيرًا ما نسمع أسئلة من قبيل أنا مهتم بالبرمجة والتقنية وأرغب في تعلمها لأعمل في وظيفة أفضل وذات مردود مادي أعلى أو أرغب بتعلم البرمجة لمواكبة التطور التقني وتعزيز مهارات حل المشكلات لدي ولكن عمري (كذا سنة) فهل فات الوقت على تعلم البرمجة؟
</p>

<p>
	دعني أخبرك بأنه مهما كان عمرك فإن الأوان لم يفت على تعلم البرمجة فالعمر لا يشكل أي عائق في التعلم سواء في ظل وفرة الموارد المتاحة لمساعدتك. وقد يستغرق تعلم البرمجة مدة أطول مع التقدم في السن لكنك قادر على تقليل هذه المدة في حال خصصت وقتًا أطول وأسست نفسك بشكل جيد بالاعتماد على مصادر عالية الجودة وامتلكت الإرادة والرغبة الحقيقية للتعلم فهذا كفيل بجعلك تتغلب على أي صعوبات أو عوائق تواجهها.
</p>

<h2 id="-10">
	نصائح لتقليل مدة تعلم البرمجة
</h2>

<ul>
	<li>
		حدد هدفك من تعلم البرمجة والتخصص البرمجي المناسب لك، وضع خطة لتعلم التقنيات واللغات التي تفيدك في هذا التخصص.
	</li>
	<li>
		عزز مهارة حل المشكلات والتفكير المنطقي قبل البدء بالبرمجة فهي مهارات أساسية تقلل مدة تعلم البرمجة.
	</li>
	<li>
		ركز على تعلم لغة برمجة سهلة وتناسب المبتدئين فهذا يسهل عليك استيعاب المفاهيم البرمجية بوقت أقل ويسهل عليك الانتقال لتعلم أي لغة برمجة أخرى.
	</li>
	<li>
		لا تستسلم بسرعة، فتعلم أي شيء جديد سيكون صعبًا في البداية ويستغرق بعض الوقت لفهم الأساسيات ومع الوقت والخبرة تصبح الأمور أسهل.
	</li>
	<li>
		اعتمد على مصدر جيد لتعلم البرمجة ولا تشتت نفسك بكثرة المصادر.
	</li>
	<li>
		احرص على التطبيق العملي لما تتعلمه من مفاهيم فهذا يعزز مهاراتك ويساعدك على بناء معرض أعمال يثبت خبرتك.
	</li>
	<li>
		تعلم مع أصدقاء لديهم نفس اهتمامك وضع معهم هدفًا مشترك وخطة للتعلم وتعاون معهم في حل المشكلات وتعلم المفاهيم الجديدة فهذا يجعل التعلم أكثر متعة ويحفزك على المواصلة.
	</li>
</ul>

<h2 id="-11">
	الخلاصة
</h2>

<p>
	نأمل أن يكون هذا المقال قد ساعدك في تحديد كم يستغرق تعلم البرمجة ومعرفة أهم العوامل التي تلعب دورًا في الإجابة على هذا السؤال بشكل تقريبي، وكما وضحنا في المقال لا يوجد جواب واحد يناسب الجميع على هذا السؤال لكن بإمكانك اختصار مدة تعلم البرمجة ودخول سوق العمل بسرعة بالمثابرة والجهد.
</p>

<p>
	وتذكر في الختام أن البرمجة تحتاج منك إلى الاستمرار في التعلم وتطوير نفسك حتى بعد الاحتراف ودخول سوق العمل، فالتقنيات تتغير وتتطور باستمرار ومن الضروري مواكبة هذه التغييرات وتطبيقها في عملك للحفاظ على مكانتك التنافسية وتلبية متطلبات سوق العمل المتجددة.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/learn-programming/" rel="">دليل شامل لتعلم البرمجة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D8%A8%D8%B3%D8%A7%D8%B7%D8%A9-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-r1870/" rel="">قواعد البرمجة ببساطة للمبتدئين</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">اكتشف ما هي البرمجة وما أهمية تعلمها</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8/" rel="">برمجة الحاسوب للمبتدئين</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%84%D9%85%D8%A7%D8%B0%D8%A7-%D9%8A%D8%AC%D8%A8-%D8%A3%D9%86-%D8%AA%D8%B9%D9%84%D9%85-%D8%B7%D9%81%D9%84%D9%83-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9%D8%9F-r2052/" rel="">لماذا يجب أن تعلم طفلك البرمجة؟</a>
	</li>
</ul>

<p>
	 
</p>
]]></description><guid isPermaLink="false">2257</guid><pubDate>Thu, 22 Feb 2024 12:03:00 +0000</pubDate></item><item><title>&#x645;&#x637;&#x648;&#x631; &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x64A;&#x627;&#x62A; &#x645;&#x646; &#x647;&#x648; &#x648;&#x645;&#x627; &#x647;&#x64A; &#x645;&#x647;&#x627;&#x645;&#x647;&#x61F;</title><link>https://academy.hsoub.com/programming/general/%D9%85%D8%B7%D9%88%D8%B1-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_02/-----(1).png.0a2ab81f242f6544ae4c0b09821d585c.png" /></p>
<p>
	 نعرفك في مقال اليوم على مطور البرمجيات Software Developer ونكتشف مهامه ومسؤولياته المختلفة، وأهمية العمل في هذا المنصب والطلب المرتفع عليه في سوق العمل، كما نتعرف على صفات مطوري البرمجيات وأهم الخطوات التي عليك اتباعها لتتمكن من العمل كمطور برامج، وفي الختام نورد مجموعة من مصادر التعلم المفيدة باللغة العربية لتساعدك على تعلم تطوير البرمجيات من الصفر حتى الاحتراف.
</p>

<h2 id="-1">
	من هو مطور البرمجيات
</h2>

<p>
	مطور البرمجيات هو المبرمج المسؤول عن عملية تطوير التطبيقات والبرامج بمختلف أنواعها سواء <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%B3%D8%B7%D8%AD-%D8%A7%D9%84%D9%85%D9%83%D8%AA%D8%A8/" rel="">برامج سطح المكتب</a> أو <a href="https://academy.hsoub.com/programming/game-development/%D9%85%D8%B7%D9%88%D8%B1-%D8%A7%D9%84%D8%A3%D9%84%D8%B9%D8%A7%D8%A8/" rel="">الألعاب الإلكترونية</a> أو <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D9%84%D9%85-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8/" rel="">تطبيقات الويب</a> أو <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%AC%D9%88%D8%A7%D9%84-r1801/" rel="">تطبيقات الجوال</a> أو أنظمة التشغيل أو التطبيقات المضمنة أو غيرها من أنواع التطبيقات التي تلبي احتياجات المستخدمين وتحل مشكلاتهم المختلفة.
</p>

<p>
	ويستخدم مطور البرمجيات عادة تقنيات ولغات برمجة مختلفة لكتابة الشيفرات <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A3%D9%83%D9%88%D8%A7%D8%AF-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r2244/" rel="">والأكواد البرمجية</a> لعمل هذه التطبيقات وتنفيذ وظائفها المختلفة ومن أشهر اللغات التي يستخدمها مطوروا البرمجيات عادة لغة بايثون <a href="https://wiki.hsoub.com/Python" rel="external" target="_blank">Python</a> أو جافا سكريبت <a href="https://wiki.hsoub.com/JavaScript" rel="external" target="_blank">JavaScript</a> أو <a href="https://academy.hsoub.com/programming/cpp/" rel="">C++</a>‎ أو <a href="https://wiki.hsoub.com/PHP" rel="external" target="_blank">PHP</a> أو غيرها من لغات البرمجة المعروفة، كما يستخدمون مكتبات وأطر عمل <a href="https://academy.hsoub.com/programming/general/%D8%A5%D8%B7%D8%A7%D8%B1-%D8%B9%D9%85%D9%84-framework/" rel="">frameworks</a> وأدوات مساعدة تُسرع عملهم، وتزيد إنتاجيتهم، وتحسن من جودة برمجياتهم.
</p>

<h2 id="-2">
	مهام مطور البرمجيات
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="144559" href="https://academy.hsoub.com/uploads/monthly_2024_02/1573035991_.png.eba4a2d598282d2f4be9af04977bff0f.png" rel=""><img alt="مهام مطور البرمجيات" class="ipsImage ipsImage_thumbnailed" data-fileid="144559" data-unique="jd6xkzj2e" style="width: 500px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2024_02/.thumb.png.bf87fe6cbdc44a46753e0fd7fb13c427.png"> </a>
</p>

<p>
	عند العمل في وظيفة مطور برمجيات لن تكون مسؤولًا فقط عن كتابة الشيفرات البرمجية وتطوير البرامج والتطبيقات المختلفة، فقد يطلب منك القيام بعدة مهام أخرى حسب طبيعة المكان الذي تعمل به، ومن بين المهام التي قد توكل لك كمطور برمجيات نذكر:
</p>

<ul>
	<li>
		تخطيط وتحليل متطلبات البرنامج أو التطبيق المطلوب تطويره.
	</li>
	<li>
		تعديل الشيفرات أو <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A3%D9%83%D9%88%D8%A7%D8%AF-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r2244/" rel="">الأكواد البرمجية</a> لبرامج ما من أجل تحسينه أو تغيير طريقة عمله.
	</li>
	<li>
		التأكد من جودة الشيفرات البرمجية واتباعها <a href="https://academy.hsoub.com/programming/general/%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D8%A8%D8%B3%D8%A7%D8%B7%D8%A9-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-r1870/" rel="">لقواعد البرمجة</a> الصحيحة.
	</li>
	<li>
		اختيار <a href="https://academy.hsoub.com/programming/general/%D9%87%D9%8A%D8%A7%D9%83%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-data-structures/" rel="">هياكل البيانات</a> المناسبة لحل المشكلات البرمجية.
	</li>
	<li>
		كشف <a href="https://academy.hsoub.com/programming/general/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-r1342/" rel="">أخطاء البرامج</a> وتقديم مقترحات فعالة لحلها.
	</li>
	<li>
		التأكد من <a href="https://academy.hsoub.com/programming/advanced/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A3%D9%85%D8%A7%D9%86-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r2020/" rel="">أمان المواقع</a> والتطبيقات وسلامتها من الثغرات الأمنية.
	</li>
	<li>
		اختبار البرمجيات والتأكد من خلوها من أي مشكلات أو أعطال وحلها فور اكتشافها.
	</li>
	<li>
		نشر البرمجيات والتطبيقات وتثبيتها على بيئة الإنتاج التي سيتعامل معها المستخدمون.
	</li>
	<li>
		إعداد وثائق استخدام البرمجيات، وتدريب المستخدمين على استعمالها.
	</li>
</ul>

<p>
	وتذكر أن مطور البرمجيات قد لا يتحمل وحده مسؤولية القيام بكافة هذه المهام لاسيما في شركات التطوير الكبيرة التي تضم تخصصات برمجية مختلفة، ففي هذه الحالة يعمل مطور البرمجيات كجزء من فريق عمل متكامل يضم إلى جانب مطوري البرامج محللين ومختبري برمجيات ومهندسي <a href="https://academy.hsoub.com/devops/general/%D8%AA%D8%B9%D9%84%D9%85-devops/" rel="">DevOps</a> ومهندسي ضمان الجودة ...إلخ. بحيث يتولى كل مهمة شخص متخصص وخبير بها.
</p>

<h2 id="-3">
	الفرق بين مطور البرمجيات ومهندس البرمجيات
</h2>

<p>
	كثيرًا ما تتشابه المهام المطلوبة من مطوري البرمجيات ومهندسي البرمجيات في سوق العمل وقد يستخدم هذان المصطلحان بالتبادل مع بعضهما البعض إذ يعمل كل من مطوري البرمجيات ومهندسي البرمجيات على تطوير البرامج والتطبيقات.
</p>

<p>
	لكن كما وضحنا سابقًا يتضح الفرق بين التخصصات البرمجية في شركات التطوير الكبيرة حيث تكون مهام تطوير البرمجيات أقل من مهام <a href="https://academy.hsoub.com/programming/general/%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/" rel="">هندسة البرمجيات</a>، بحيث يركز مطور البرمجيات على كتابة أكواد برامج تؤدي وظائف محددة وتعديلها وتصحيحها لتوافق المتطلبات، بينما يتولى مهندس البرمجيات الإشراف على عملية التطوير الشاملة وتوجيه المطورين للتأكد من تطبيق مبادئ الهندسة على البرمجيات واتباع أفضل الممارسات وتصميم ميزات جديدة والتعاون مع فرق متعددة في شركة التطوير لضمان الحصول على برامج وتطبيقات عالية الجودة، وبالتالي يحتاج مهندس البرمجيات لمهارات أعلى من مهارات مطور البرمجيات.
</p>

<p>
	لذا إذا وجدت فرصة للعمل كمهندس برمجيات أو مطور برمجيات في جهة ما، فمن الأفضل أن تتأكد أولًا من الوصف الوظيفي لهذا العمل، وتعرف ما هي المهام والمسؤوليات المطلوبة منك بشكل دقيق لتعرف إن كانت هذه الوظيفة تناسبك أم لا قبل التقدم لها.
</p>

<h2 id="-4">
	كيف تصبح مطور برمجيات
</h2>

<p>
	إذا كنت مهتمًا بتصميم وإنشاء البرامج والتطبيقات فعليك اتباع مجموعة من الخطوات وتعلم مجموعة متنوعة من المهارات الضرورية، وإليك أهم 10 خطوات لتصبح مطور برمجيات محترف:
</p>

<ol>
	<li>
		حدد هدفك، فمجال تطوير البرمجيات متنوع ومتشعب التخصصات لذا من الضروري أن تحدد من البداية المجال الذي تود العمل فيه والتطبيقات التي تهتم بتطويرها هل هي <a href="https://academy.hsoub.com/programming/game-development/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%B5%D9%86%D8%A7%D8%B9%D8%A9-%D8%A7%D9%84%D8%A3%D9%84%D8%B9%D8%A7%D8%A8-%D8%A7%D9%84%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A%D8%A9-r2228/" rel="">الألعاب الإلكترونية</a>، أم مواقع الويب، أم تطبيقات الجوال، أم <a href="https://academy.hsoub.com/programming/os-embedded-systems/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%B1%D9%88%D8%A8%D9%88%D8%AA-%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-r1855/" rel="">برمجة الروبوتات</a> أم غير ذلك والتركيز على تعلمه.
	</li>
	<li>
		عزز مهاراتك في التفكير المنطقي وأسس نفسك في <a href="https://academy.hsoub.com/programming/advanced/%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA/" rel="">الخوارزميات</a> وتعرف على <a href="https://academy.hsoub.com/programming/general/%D9%87%D9%8A%D8%A7%D9%83%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-data-structures/" rel="">هياكل البيانات الأساسية</a> فهذه المهارات تعزز قدرتك على تعلم البرمجة وتساعدك على تطوير البرمجيات وحل مشكلاتها بشكل أفضل.
	</li>
	<li>
		تعلم <a href="https://academy.hsoub.com/programming/general/%D8%AF%D9%88%D8%B1%D8%A9-%D8%AD%D9%8A%D8%A7%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/" rel="">دورة حياة تطوير البرمجيات</a> والمراحل الأساسية التي تمر بها الأنظمة البرمجية كالتخطيط planning والتحليل analysis والتصميم design والتنفيذ implementation والمهام المطلوبة في كل مرحلة.
	</li>
	<li>
		ركز على تعلم لغات البرمجة والتقنيات الضرورية لتحقيق هدفك والمجال الذي تنوي التخصص فيه، على سبيل المثال إذا قررت <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-r1827/" rel="">تطوير تطبيقات</a> الويب يمكنك اختيار لغة <a href="https://academy.hsoub.com/PHP/" rel="">PHP</a> أو <a href="https://academy.hsoub.com/python/" rel="">بايثون</a>، وإذا كنت مهتمًا <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%AC%D9%88%D8%A7%D9%84-r1801/" rel="">بتطوير تطبيقات الجوال</a> فيمكنك تعلم لغة <a href="https://academy.hsoub.com/JavaScript/" rel="">جافا سكريبت</a>.
	</li>
	<li>
		تعلم تقنيات تحسين الشيفرات البرمجية وجعلها نظيفة ومنظمة باتباع <a href="https://academy.hsoub.com/programming/general/%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D8%A8%D8%B3%D8%A7%D8%B7%D8%A9-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-r1870/" rel="">قواعد البرمجة الأساسية</a> مثل وضع تعليقات ومسافات بادئة وأقواس صحيحة عند كتابة الشيفرات فهذا الأمر يميزك كمطور برمجيات.
	</li>
	<li>
		تعرف على <a href="https://academy.hsoub.com/devops/servers/databases/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">أنواع قواعد البيانات المختلفة</a> ومتى تستخدم كل نوع منها من أجل تخزين البيانات ومعالجتها ضمن برامجك وتطبيقاتك.
	</li>
	<li>
		تعلم مهارات وأدوات إضافية مساعدة لأي مطور برمجيات مثل استخدام<a href="https://academy.hsoub.com/programming/general/%D8%A5%D8%B7%D8%A7%D8%B1-%D8%B9%D9%85%D9%84-framework/" rel=""> أطر العمل البرمجية frameworks</a>، وبرامج التحكم بالإصدارات مثل <a href="https://academy.hsoub.com/programming/workflow/git/%D9%85%D8%A7-%D9%87%D9%88-git%D8%9F-r1592/" rel="">Git</a> فهذه الأدوات ضرورية ومطلوبة في سوق العمل لاسيما عند العمل ضمن فريق عمل.
	</li>
	<li>
		تعرف على طرق اختبار وفحص البرمجيات والتأكد من سلامة الشيفرات البرمجية المكتوبة من <a href="https://academy.hsoub.com/programming/general/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-r1342/" rel="">الأخطاء البرمجية</a> والتعامل مع هذه الأخطاء وحلها بالشكل الصحيح.
	</li>
	<li>
		احرص على بناء معرض أعمال يتضمن مجموعة متنوعة من التطبيقات والبرامج فهذا يعزز ما تعلمته من مهارات وتقنيات ويثبت مستوى خبراتك للجهة التي ترغب بتوظيفك ويساعدك في الحصول على فرصة عمل.
	</li>
	<li>
		بإتمامك لكل الخطوات السابقة ستكون قد امتلكت المؤهلات الكافية وعليك البحث عن فرصة عمل مناسبة في شركة تطوير برمجيات أو العمل عن بعد عبر الإنترنت كموظف مستقل وعرض خدماتك المدفوعة على مواقع العمل الحر المختلفة مثل موقع <a href="https://baaeed.com/" rel="external nofollow" target="_blank">بعيد</a> أو <a href="https://mostaql.com/" rel="external" target="_blank">مستقل</a> أو <a href="https://khamsat.com/" rel="external" target="_blank">خمسات</a>.
	</li>
</ol>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="499" id="ips_uid_7854_6" src="https://academy.hsoub.com/applications/core/interface/index.html" title="كيفية التعامل مع الأخطاء البرمجية" width="887" data-embed-src="https://www.youtube.com/embed/Pgje6nWuDkg"></iframe>
</p>

<h2 id="-5">
	صفات مطور البرمجيات
</h2>

<p>
	رغم أهمية المهارات التقنيات التي ذكرناها سابقًا إلا أنها لا تكفي وحدها لتكون مطور برمجيات ناجح في سوق العمل، بل يجب أن تتمتع بمجموعة من السمات الشخصية والمهارات الناعمة كي تتمكن من إنجاز مشاريعك البرمجية بنجاح وضمن الوقت المحدد لها ومن أبرز هذه السمات نذكر:
</p>

<ul>
	<li>
		مهارات جيدة في التواصل مع العملاء من أجل فهم المتطلبات بشكل جيد وتنفيذها بالشكل المطلوب، كما يحتاج للتواصل الفعال مع بقية أعضاء الفريق البرمجي وتنسيق العمل معهم لضمان نجاح المشروع.
	</li>
	<li>
		القدرة على العمل الجماعي، لاسيما عند العمل على مشاريع كبيرة وضمن فريق برمجي متكامل من مطورين ومحللين ومتخصصي تقنية معلومات.
	</li>
	<li>
		مهارات في تنظيم وإدارة الوقت والتعامل مع ضغوطات العمل، والمرونة في التعامل مع تغيير المتطلبات والتحسينات المستمرة المطلوب إجراؤها على البرمجيات، ودمج المتطلبات الجديدة بسرعة وضمن الوقت المحدد.
	</li>
	<li>
		معرفة بمنهجيات إدارة المشاريع البرمجية وآليات تطبيقها مثل <a href="https://academy.hsoub.com/entrepreneurship/business/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D9%84%D9%85%D9%86%D9%87%D8%AC%D9%8A%D8%A9-%D8%A3%D8%AC%D8%A7%D9%8A%D9%84-agile-r1047/" rel="">منهجية أجايل Agile</a> التي تعزز العمل الجماعي ومهارات الاتصال.
	</li>
	<li>
		القدرة على التعلم والتطور المستمر، فتطوير البرمجيات مجال يتطور بوتيرة هائلة وهذا يتطلب من مطور البرمجيات متابعة التعلم والاطلاع على كل جديد في مجاله.
	</li>
</ul>

<p>
	ولمعرفة المزيد من المهارات الشخصية التي تحتاجها كمطور برمجيات أنصحك بمطالعة الفيديو التالي:
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="499" id="ips_uid_7854_7" src="https://academy.hsoub.com/applications/core/interface/index.html" title="المهارات الشخصية التي يجب توافرها في المبرمجين" width="887" data-embed-src="https://www.youtube.com/embed/VnLOR7HVc8Y"></iframe>
</p>

<h2 id="-6">
	تعلم تطوير البرمجيات
</h2>

<p>
	يمكنك تعلم تطوير البرمجيات والبدء بدراسة التقنيات المطلوبة بطريقتين، إما من خلال الدراسة الأكاديمية في إحدى الجامعات وهذا الطريق قد يكون طويلًا ومليئًا بالمواد النظرية المملة التي لن تفيدك في حياتك المهنية ويمتد لفترة لا تقل أربع لخمس سنوات. أو دراستها ذاتيًا من خلال مصادر التعلم الكثيرة المتاحة عبر الإنترنت وهذا الطريق مختصر ويساعدك على التركيز على التقنيات التي تفيدك دون سواها وتسرع دخول لسوق العمل.
</p>

<p>
	توفر لك أكاديمية حسوب العديد من المصادر المفيدة لتعلم تطوير البرمجيات من <a href="https://academy.hsoub.com/programming/" rel="">دروس ومقالات</a> متنوعة تنشر بصورة دورية، كما <a href="https://wiki.hsoub.com/" rel="external" target="_blank">توفر موسوعة حسوب</a> توثيقات برمجية شاملة لأهم لغات البرمجة والتقنيات التي يحتاج أي مطور برمجيات لتعلمها وإذا كنت تفضل التعلم من كتب البرمجة لما توفره من طريقة مفصلة ومفهرسة في طرح المعلومات فستجد كذلك في قسم الكتب في الأكاديمية العديد من <a href="https://academy.hsoub.com/files/" rel="">كتب البرمجة</a> التي تناسب اهتمامك.
</p>
<iframe allowfullscreen="" class="ipsEmbed_finishedLoading" data-controller="core.front.core.autosizeiframe" data-embedauthorid="3889" data-embedcontent="" data-embedid="embed1817613916" src="https://academy.hsoub.com/files/35-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86/?do=embed" style="overflow: hidden; height: 469px; max-width: 500px; margin:auto"></iframe>

<p>
	إضافة لما سبق توفر أكاديمية حسوب العديد من الدورات الشاملة التخصصية التي تساعدك في رحلة تعلم تطوير البرمجيات ومن بين هذه الدورات:
</p>

<ul>
	<li>
		<a href="https://academy.hsoub.com/store/9-%D8%AF%D9%88%D8%B1%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D8%BA%D8%A9-python/" rel="">دورة تطوير التطبيقات باستخدام لغة بايثون Python</a>: سيتعلم مطور البرمجيات في هذه الدورة كل ما يحتاجه لتطوير تطبيقات ومواقع الويب والمتاجر الإلكترونية إلى جانب تطبيقات تحليل البيانات والذكاء الاصطناعي.
	</li>
	<li>
		<a href="https://academy.hsoub.com/store/5-%D8%AF%D9%88%D8%B1%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D8%BA%D8%A9-javascript/" rel="">دورة تطوير التطبيقات باستخدام لغة جافا سكريبت JavaScript</a>: هذه الدورة موجه للمطورين المهتمين بتطوير تطبيقات الجوال أو تطبيقات سطح المكتب باستخدام لغة جافا سكريبت وأطر عملها القوية المختلفة.
	</li>
	<li>
		<a href="https://academy.hsoub.com/store/2-%D8%AF%D9%88%D8%B1%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D8%BA%D8%A9-php/" rel="">دورة تطوير تطبيقات الويب باستخدام لغة PHP</a>: تفيدك هذه الدورة إذا كنت مهتمًا بتطوير مواقع تطبيقات الويب المختلفة والمتاجر الإلكترونية كما ستتعلم فيها كيفية تطوير قوالب نظام إدارة المحتوى الشهير والمطلوب بشدة في سوق العمل ووردبريس.
	</li>
	<li>
		<a href="https://academy.hsoub.com/store/4-%D8%AF%D9%88%D8%B1%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D8%BA%D8%A9-ruby/" rel="">دورة تطوير تطبيقات الويب باستخدام لغة Ruby</a>: تساعدك هذه الدورة على إتقان التعامل مع لغة البرمجة روبي وإطار عملها الشهير روبي أون ريلز Ruby On Reals لتطوير مواقع وتطبيقات الويب.
	</li>
</ul>

<h2 id="-7">
	الخلاصة
</h2>

<p>
	تعرفنا في مقال اليوم على وظيفة مطور البرمجيات ووضحنا أهم المهام والمسؤوليات التي يتولى مطور البرمجيات القيام بها، والفرق بين مطور البرمجيات ومهندس البرمجيات، كما تعرفنا على أبرز التقنيات والمهارات والصفات التي يجب أن يتمتع بها مطور البرمجيات وما الخطوات التي يمكنه اتباعها لتعلم هذه الوظيفة البرمجية المهمة في سوق العمل.
</p>

<p>
	هل تجد أنك تملك صفات تؤهلك للعمل كمطور برامج؟ وما هو نوع البرامج الذي تفضل تطويرها؟ وهل بدأت فعلًا بالعمل في هذا التخصص أم أنك لا زلت في طور التعلم. شاركنا رأيك وتجربتك في التعليقات أسفل المقال.
</p>

<h2 id="-8">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/learn-programming/" rel="">دليلك الشامل لتعلم البرمجة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/" rel="">تعرف على تخصص هندسة البرمجيات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AF%D8%B1%D8%A7%D8%B3%D8%A9-%D8%AA%D8%AE%D8%B5%D8%B5-%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/" rel="">الطريقة الأمثل لدراسة تخصص هندسة البرمجيات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA/" rel="">دليلك الشامل إلى برمجة التطبيقات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-r1827/" rel="">تطوير التطبيقات</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2254</guid><pubDate>Sat, 17 Feb 2024 12:07:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x635;&#x628;&#x62D; &#x645;&#x628;&#x631;&#x645;&#x62C;&#x64B;&#x627; &#x645;&#x62D;&#x62A;&#x631;&#x641;&#x64B;&#x627;</title><link>https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D9%85%D8%A8%D8%B1%D9%85%D8%AC-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D8%B1%D9%81/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_02/-----.png.9ac0f55a91c8502c80933a2efabcca43.png" /></p>
<p>
	أدَّى التطور البرمجي المذهل في السنوات الأخيرة إلى تيسير الكثير من المهام وتسهيل تنفيذها، وبدأ التحول الرقمي يدخل في شتى المجالات عامًا بعد عامٍ، وهذا جعل البرمجة إحدى الوظائف الضرورية في عصرنا الحاضر، فما هي البرمجة ومن هو المبرمج؟ وما السبيل لتصبح مبرمجًا محترفًا بسهولة، هذا ما سنجيبك عليه في مقال اليوم؟
</p>

<h2 id="">
	ما هي البرمجة ومن هو المبرمج المحترف؟
</h2>

<p>
	تشير البرمجة إلى عملية كتابة الشيفرات أو <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A3%D9%83%D9%88%D8%A7%D8%AF-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r2244/" rel="">الأكواد البرمجية</a> التي تخبر الحواسيب أو غيرها من الآلات الذكية ما الذي يجب عليها فعله، وتعد البرمجة جزءًا من عملية أكبر وهي <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/" rel="">تطوير البرمجيات</a>، أما المبرمج فهو الشخص المسؤول عن توظيف كافة الأدوات البرمجية المختلفة ولا سيما <a href="https://academy.hsoub.com/programming/general/%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">لغات البرمجة</a> و<a href="https://academy.hsoub.com/programming/general/%D8%A5%D8%B7%D8%A7%D8%B1-%D8%B9%D9%85%D9%84-framework/" rel="">أطر العمل</a> لتحويل أي فكرة أو مهمة يود تنفيذه إلى تطبيق أو برنامج حاسوبي فعلي يمكن للمستخدمين استعماله والاستفادة منه في تأدية مهامهم.
</p>

<p>
	ونقول عن المبرمج أنه <strong>مبرمج محترف</strong> إذا كان لا يقتصر على كتابة البرامج و<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-r1827/" rel="">تطوير التطبيقات</a> التي تؤدي المطلوب فحسب، بل إذا تمكَّن من كتابة أكواد هذه التطبيقات بشيفرات برمجية منظمة وخالية من الثغرات الأمنية واتبع في كتابتها كافة <a href="https://academy.hsoub.com/programming/general/%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D8%A8%D8%B3%D8%A7%D8%B7%D8%A9-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-r1870/" rel="">قواعد البرمجة</a> الصحيحة للحصول على أداء مثالي وفعال.
</p>

<p>
	كما يكون المبرمج محترفًا كلما كان قادرًا على التعامل مع المشكلات البرمجية الحاسوبية بسرعة وكفاءة، وكلما استطاع كتابة برمجيات تحلُّ مشكلاتٍ عديدة من مشكلات المستخدمين، واستطاع تقديم فائدة حقيقية في سوق البرمجيات كما سنشرح المزيد من السمات لاحقًا بمزيد من التفصيل في فقرة ممارسات المبرمج المحترف.
</p>

<div class="ipsEmbeddedVideo" contenteditable="false">
	<div>
		<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="113" src="https://www.youtube-nocookie.com/embed/LB3ueddlR54?feature=oembed" title="كيف تحترف البرمجة" width="200"></iframe>
	</div>
</div>

<h2>
	أشهر وظائف البرمجة
</h2>

<p>
	تتعدد فرص العمل في <a href="https://academy.hsoub.com/programming/general/%D9%88%D8%B8%D8%A7%D8%A6%D9%81-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%A3%D9%83%D8%AB%D8%B1-%D8%B7%D9%84%D8%A8%D9%8B%D8%A7/" rel="">مجالات البرمجة</a> نظرًا لتعدد أنواع البرمجيات التي يمكن تطويرها، ولعل أكثر الوظائف البرمجية انتشارًا ما يلي:
</p>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA/" rel="">مبرمج تطبيقات</a> الويب Web Applications Programmer
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%AC%D9%88%D8%A7%D9%84-r1801/" rel="">مبرمج تطبيقات الجوال</a> Mobile Applications Programmer
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%B3%D8%B7%D8%AD-%D8%A7%D9%84%D9%85%D9%83%D8%AA%D8%A8/" rel="">مبرمج تطبيقات سطح المكتب</a> Desktop Applications Programmer
	</li>
	<li>
		مبرمج <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%B0%D9%83%D8%A7%D8%A1-%D8%A7%D9%84%D8%A7%D8%B5%D8%B7%D9%86%D8%A7%D8%B9%D9%8A/" rel="">تطبيقات ذكاء اصطناعي</a> Artificial Intelligence Programmer
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/game-development/%D9%85%D8%B7%D9%88%D8%B1-%D8%A7%D9%84%D8%A3%D9%84%D8%B9%D8%A7%D8%A8/" rel="">مطور ألعاب إلكترونية</a> Game Developer
	</li>
	<li>
		مبرمج تطبيقات <a href="https://academy.hsoub.com/devops/security/%D9%85%D8%A7-%D9%87%D9%88-%D8%A7%D9%84%D8%A3%D9%85%D9%86-%D8%A7%D9%84%D8%B3%D9%8A%D8%A8%D8%B1%D8%A7%D9%86%D9%8A-%D9%88%D9%85%D8%A7-%D8%A3%D9%87%D9%85%D9%8A%D8%AA%D9%87%D8%9F-r664/" rel="">الأمن السيبراني</a> Cyber Security Applications Programmer
	</li>
</ul>

<h2 id="-1">
	ما الفرق بين المبرمج المحترف ومهندس البرمجيات؟
</h2>

<p>
	تتعدد الفروق بين المبرمج و<a href="https://academy.hsoub.com/programming/general/%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/" rel="">مهندس البرمجيات</a>، ومنها:
</p>

<ul>
	<li>
		<strong>المسؤوليات:</strong> يعد مهندس البرمجيات مسؤولًا عن صناعة التطبيق البرمجي بالكامل، ويعد مسؤولًا عن التواصل مع العميل وفهم احتياجاته جيدًا، ثم تحويل هذه الاحتياجات إلى تصميم أولي للتطبيق، ثم تحسين هذا النموذج الأولي، ثم كتابة شيفرات التطبيق، ثم اختبارها وتنقيح أخطائها، وأخيرًا إطلاق التطبيق والإشراف على تحديثاته، أما المبرمج فليس مسؤولًا عادة إلا عن تحويل تصميم التطبيق إلى شيفرات تفهمها الآلة.
	</li>
	<li>
		<strong>المهمة في دورة تطوير البرنامج:</strong> يشرف مهندس البرمجيات على جميع مراحل تطوير البرنامج، بدءًا من النمذجة أو التصميم الأولي، انتهاءً بالاختبار ومعالجة الأخطاء وإصدار التطبيق، أما المبرمج فلا يقع عمله إلا في مرحلة واحدة من مراحل تطوير التطبيق وهي مرحلة كتابة الشيفرات واختبارها وتنقيح أخطائها.
	</li>
	<li>
		<strong>المهارات:</strong> يحتاج مهندس البرمجيات مجموعة واسعة من المهارات، والتي تتضمن معرفة قوية بالرياضيات وخبرة في البرمجة وقدرة على التعامل مع الأدوات السحابية، بينما لا يحتاج المبرمج إلا معرفة قوية بلغة برمجة والتعمُّق فيها والتدرُّب على كتابة الخوارزميات باستخدامها.
	</li>
</ul>

<h2 id="-2">
	هل أحتاج للدراسة الأكاديمية لأصبح مبرمجًا محترفًا؟
</h2>

<p>
	تعد الدراسة الأكاديمية مهمة ومفيدة وتختصر كثيرًا من الوقت والجهد، ولا سيما في مجالات تطوير البرمجيات، فالجامعة أو الجهة الأكاديمية تضع منهجًا واضحًا وخطة طريق من اليوم الدراسي الأول إلى اليوم الدراسي الأخير، مما ينقذ الطالب من التشتت بين المصادر الكثيرة التي لا حصر لها على الإنترنت.
</p>

<p>
	لكن بالرغم من هذه الأهمية البالغة للدراسة الأكاديمية إلا أنَّ الخبر الجيد أن مجال البرمجة لا يعد محصورًا على الأكاديميين، ويسهل الحصول على وظيفة مرموقة في المجال إذا امتلكت المهارات المطلوبة، وقد أسفرت <a href="https://survey.stackoverflow.co/2023/#learning-to-code-learn-code" rel="external nofollow" target="_blank">إحصائية ستاك أوفر فلو لعام 2023</a> عن نتائج مذهلة تتعلق بالدراسة الأكاديمية، إذ صرَّح ثمانون بالمائة من المشتركين في الإحصائية عن تعلُّمهم للبرمجة من الدورات عبر الإنترنت وهناك أمثلة عديدة على مبرمجين بارزين <a href="https://academy.hsoub.com/learn-programming/" rel="">تعلموا البرمجة</a> بصورة ذاتية وبرعوا بها!
</p>

<p>
	فإذا كنت مهتمًا لتصبح مبرمجًا محترفًا خلال فترة زمنية قصيرة وترغب في مصدر موثوق للتعلم يمكنك الاطلاع على <a href="https://academy.hsoub.com/store/c1-%d8%af%d9%88%d8%b1%d8%a7%d8%aa-%d8%aa%d8%b9%d9%84%d9%8a%d9%85%d9%8a%d8%a9/" rel="">دورات أكاديمية حسوب</a> للجمع بين مزايا التعلُّم الأكاديمي من منهج مميز وخطة طريق واضحة، ومزايا التعلم عبر الإنترنت من حرية في تنظيم الوقت وسهولة الوصول للمعلومات، وتضمن لك أكاديمية حسوب استرداد استثمارك إذا ما لم تحصل على وظيفة في مجال البرمجة خلال ستة أشهر من إنهاء الدورة، كما توفر الأكاديمية مجموعة من المصادر المجانية لتعلُّم البرمجة، بدءًا من <a href="https://academy.hsoub.com/files/c5-programming/" rel="">الكتب</a> المميزة في المجالات البرمجية المختلفة، مرورًا <a href="https://academy.hsoub.com/programming/" rel="">بالمقالات</a> الكثيرة والمميزة، وصولًا إلى <a href="https://academy.hsoub.com/questions/c3-programming/" rel="">قسم الأسئلة والأجوبة</a> الذي يساعدك فيه المبرمجون المحترفون على حل المشكلات التي تواجهك في البرمجة.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة علوم الحاسوب
		</p>

		<p class="banner-subtitle">
			دورة تدريبية متكاملة تضعك على بوابة الاحتراف في تعلم أساسيات البرمجة وعلوم الحاسوب
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/computer-science/" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<a href="https://academy.hsoub.com/learn/computer-science/" rel=""><img alt="دورة علوم الحاسوب" src="https://academy.hsoub.com/learn/assets/images/courses/computer-science.png"></a>
	</div>
</div>

<h2 id="-3">
	ما هي المهارات المطلوبة لتصبح مبرمجًا محترفًا؟
</h2>

<p>
	يمتلك المبرمج المحترف مجموعة من الأدوات والتقنيات البرمجية التي تجعله مميزًا عن المبرمج العادي، ومنها:
</p>

<ul>
	<li>
		<strong>الخوارزميات</strong>: تساعد <a href="https://academy.hsoub.com/programming/advanced/%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA/" rel="">الخوارزميات</a> المبرمج المحترف على التفكير بمنطقية، وهي مهارة ضرورية لكل مبرمج، إذ إن الحواسيب والأجهزة الرقمية تعمل بتسلسل ومنطقية شديدة وبالتالي يجب أن يكون المبرمج منطقيًا أثناء التعامل معها، وكذلك تساعد الخوارزميات على تحسين أداء التطبيق وجعله فعالًا.
	</li>
	<li>
		<strong>أساسيات الحاسوب</strong>: يعد التعرُّف على أساسيات الحاسوب من مكونات وطريقة عمل أمرًا ضروريًا للمبرمج المحترف، إذ يجعلك قادرًا على فهم الآلة مما يؤدي إلى تسهيل التعامل معها وكتابة برامج تتعامل مع موارد الآلة بكفاءة.
	</li>
	<li>
		<strong>أساسيات البرمجة</strong>: يحظى المبرمج المحترف بتأسيس برمجي سليم وقوي يساعده على التوغُّل في أي مجال كان ، إذ إنَّ <a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">أساسيات البرمجة</a> تجمع لك أهم المفاهيم المشتركة بين لغات البرمجة، واستيعاب هذه المفاهيم البرمجية المجردة يجعلك قادرًا على تعلُّم أي لغة برمجة بسهولة فيما بعد.
	</li>
	<li>
		<strong>التركيز على مجال برمجي محدد</strong>: يختار المبرمج المحترف مجالًا برمجيًا محددًا ليتوغل فيه ويتعلَّم جميع أدواته ومهاراته المطلوبة، بدءًا من لغة البرمجة المفضلة في المجال، مرورًا بإطار العمل المناسب، وصولًا إلى النموذج البرمجي الأمثل لكتابة هذا النوع من البرمجيات، وغيرها من مهارات المجال.
	</li>
	<li>
		<strong>هياكل البيانات</strong>: يهتم كل مبرمج محترف بفهم <a href="https://academy.hsoub.com/programming/general/%D9%87%D9%8A%D8%A7%D9%83%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-data-structures/" rel="">هياكل البيانات</a> جيدًا لما لها من أهمية في تحسين استغلال الموارد وفي تحسين الوصول إلى البيانات، كما تساعدك هياكل البياننات على تصميم خوارزميات فعَّالة وقوية.
	</li>
	<li>
		<strong>أنماط التصميم</strong>: تعد <a href="https://wiki.hsoub.com/Design_Patterns" rel="external" target="_blank">أنماط التصميم</a> Design Pattern<strong>s </strong>مجموعة من الحلول الموضوعة مسبقًا لحل مشكلات برمجية شائعة، وتعلم أنماط التصميم أمر اختياري لكنه يساعد المبرمج على شيفرات منظمة وقابلة للاختبار والصيانة وتتسم بالكفاءة والأمن، ما يجعل شيفراته أكثر احترافية ويوفر عليه الكثير من الوقت والجهد.
	</li>
	<li>
		<strong>قواعد البيانات</strong>: لا يستغني أي مبرمجٌ عن استخدام <a href="https://academy.hsoub.com/devops/servers/databases/%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-database/" rel="">قواعد البيانات</a>، وذلك لما لها من أهمية قصوى في تنظيم بيانات التطبيق وتأمينها، وجعل الوصول إليها سهلًا يسيرًا سريعًا، والمبرمج المحترف هو القادر على اختيار نوع قواعد البيانات الأنسب لتطبيقه.
	</li>
	<li>
		<strong>الشبكات</strong>: تهدف <a href="https://academy.hsoub.com/devops/networking/%D8%B4%D8%A8%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D8%A8/" rel="">الشبكة</a> إلى تسهيل مشاركة البيانات ومشاركة الموارد، كما تهدف أيضًا إلى تمكين مستخدمي التطبيق من التواصل، وتختلف أهمية تعلُّم الشبكات من مجال إلى آخر، فهي شديدة الأهمية للمبرمج الذي يعمل على برمجة التطبيقات من جانب الخادم، لكنها ليست كذلك للمبرمج المختص في تطوير تطبيقات سطح مكتب تعمل على الحاسوب المحلي مثلًا.
	</li>
	<li>
		<strong>واجهة برمجة التطبيقات:</strong> تساعد <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D9%84%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-%D9%84%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-api%D8%9F-r1512/" rel="">واجهات برمجة التطبيقات</a> Application User Interface أو اختصارًا <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr> على توفير الكثير من وقت وجهد المبرمج،وتمكنه من تضمين مميزات جاهزة للتطبيق دون الحاجة إلى إعادة برمجتها، مثل تضمين الخرائط في تطبيق استئجار سيارات، أو تضمين <a href="https://academy.hsoub.com/entrepreneurship/ecommerce/%D8%A8%D9%88%D8%A7%D8%A8%D8%A7%D8%AA-%D8%A7%D9%84%D8%AF%D9%81%D8%B9-%D8%A7%D9%84%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A-r906/" rel="">بوابة دفع</a> في متجر إلكتروني وهي ميزات يحتاجها أي مبرمج محترف في <a href="https://academy.hsoub.com/programming/general/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA/" rel="">برمجة التطبيقات</a>.
	</li>
	<li>
		<strong>أمن المعلومات:</strong> لا يخفى على أي مبرمج محترف أهمية تعلُّم مبادئ تأمين الشيفرات، فالتطبيق غير الآمن المُعرَّض للاختراق لن يثق به المستخدمون والعملاء،  وبالتالي لن يحقق أهدافه سواءً البيعية أو غيرها، وكذلك سيكون عرضة لمشكلات قضائية إذا ما تسربت بيانات المستخدمين، ولذلك ينبغي على كل مبرمج تعلُّم أساسيات تأمين البيانات والتطبيقات والشبكات.
	</li>
</ul>

<h3 id="-4">
	ما أهم الأدوات التي تساعدك لتصبح مبرمجًا محترفًا؟
</h3>

<p>
	تعد الأدوات التي تساعد المبرمج على الاحتراف وإتقان البرمجة كثيرة وعديدة، ومنها:
</p>

<ul>
	<li>
		بيئات التطوير المتكاملة IDEs‎.
	</li>
	<li>
		أنظمة التحكم في الإصدارات Version Control Systems.
	</li>
	<li>
		الطرفية أو سطر الأوامر Command Line.
	</li>
	<li>
		أدوات الاختبار وتنقيح الأخطاء Testing and Debugging Tools.
	</li>
	<li>
		أدوات تحديد الأداء Performance Profiling Tools.
	</li>
</ul>

<p>
	لنعرف أكثر عن كل أداة واستخدامها وأهميتها.
</p>

<h3 id="integrateddevelopmentenvironmentsides">
	بيئات التطوير المتكاملة IDEs
</h3>

<p>
	تعد <a href="https://academy.hsoub.com/programming/workflow/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%85%D8%AA%D9%83%D8%A7%D9%85%D9%84%D8%A9-ide-r1513/" rel="">بيئات التطوير</a> Integrated Development Environments أو IDEs اختصارًا تطبيقات برمجية مهيئة لكتابة الشيفرات واختبارها وتنقيح أخطائها، وتكون بيئات التطوير المتكاملة مزودة بخواص مميزة تجعل عمل المبرمج أسهل، مثل: الإكمال التلقائي للشيفرات Auto-Completion، وتظليل صيغ لغة البرمجة Syntax Highlighting، وغيرها من المميزات التي توفر على المبرمج كثيرًا من الوقت والجهد، وتعد بيئة تطوير فيجوال ستوديو Visual Studio أشهر بيئة تطوير في الأوساط البرمجية.
</p>

<h3 id="versioncontrolsystem">
	نظام تحكم في الإصدارات Version Control System
</h3>

<p>
	أصبحت <a href="https://academy.hsoub.com/programming/workflow/git/%D9%81%D9%87%D9%85-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%AD%D9%83%D9%85-%D8%A8%D8%A7%D9%84%D8%A5%D8%B5%D8%AF%D8%A7%D8%B1%D8%A7%D8%AA-git-%D9%88%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%D9%87-%D9%81%D9%8A-%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r2034/" rel="">أنظمة التحكُّم في الإصدارات</a> جزءًا ضروريًا من عمل كل فريق برمجي، إذ تسمح للمبرمجين بتتبع التحديثات المتتالية لشيفرات البرنامج، كما تسمح باستعادة نسخة محددة من الشيفرات، وكذلك تساعد على تنظيم التعديلات المختلفة لشيفرات البرنامج من كل مبرمج في فريق البرمجة، ويترأس نظام التحكم في الإصدارات جيت Git أنظمة التحكُّم الحديثة.
</p>

<h3 id="commandline">
	الطرفية أو سطر الأوامر Command Line
</h3>

<p>
	تعد الطرفية أو <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%A7-%D9%87%D9%88-%D8%B3%D8%B7%D8%B1-%D8%A7%D9%84%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D8%9F-r353/" rel="">واجهة الأوامر</a> من الأدوات المساعدة لأي مبرمج إذ يمكنه من خلالها تنفيذ مهام كثيرة في وقتٍ قصير، فهي تسمح له مثلًا بإنشاء أعدادٍ ضخمة من الملفات بأمر واحد، كما تسمح بتعديل محتوى هذه الملفات، فضلًا عن أهميتها في إدارة الشبكات وإدارة أنظمة التشغيل والوصول إلى عناصر جوهرية لا يمكن الوصول لها عبر الواجهة الرسومية.
</p>

<h3 id="testinganddebuggingtools">
	أدوات الاختبار وتنقيح الأخطاء Testing and Debugging Tools
</h3>

<p>
	تساعد أدواتُ الاختبار المبرمجَ على استخراج أخطاء الشيفرات وثغراتها ومناقب ضعفها، ثم تساعده أدوات تنقيح الأخطاء على سد هذه الثغرات، وتوفر بيئة تطوير فيجوال ستوديو أداة Visual Studio Debugger لتنقيح أخطاء غالبية لغات البرمجة، كما توفر معظم المتصفحات أدوات تطوير <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%81%D9%8A-%D9%85%D8%AA%D8%B5%D9%81%D8%AD-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-devtools-r277/" rel="">DevTools </a>تساعد مبرمجي الويب في عملية تصحيح الأخطاء البرمجية.
</p>

<h3 id="performanceprofilingtools">
	أدوات تحليل أداء البرمجيات Performance Profiling Tools
</h3>

<p>
	يجب اختبار أداء التطبيق كما يجب اختبار أمانه، فالأداء واحدٌ من أهم معايير تجربة المستخدم، وتساعد أدوات تحديد الأداء، مثل: Chrome Performance Tab و Apache JMeter المبرمج المحترف على تحليل أسباب ضعف الأداء وتنقيحها والوصول بالبرنامج إلى أسرع مستوياته.
</p>

<h2 id="-5">
	ما أهم ممارسات المبرمج المحترف؟
</h2>

<p>
	يتميز أي مبرمج محترف باتباع مجموعة من الممارسات كعاداتٍ دائمة، وتساعده هذه الممارسات على كتابة شيفرات متقنة لا تشوبها شائبة، ومن هذه الممارسات:
</p>

<ul>
	<li>
		<strong>حل المشكلات</strong>: احرص على حل مشكلات برمجية يوميًا، فما البرمجة إلا بضع مشكلات عليك الوصول إلى أفضل حل لها، وتوجد مواقع مختصة للتدرُّب على مهارة حل المشكلات، وأشهرها موقع <a href="https://www.hackerrank.com/" rel="external nofollow" target="_blank">هاكر رانك HackerRank</a> الذي يوفر مسائلًا برمجيةً لكثيرٍ من لغات البرمجة على مستوياتٍ مختلفة.
	</li>
	<li>
		<strong>التفكير المنطقي</strong>: اقرأ كتبًا في المنطق، وتعلَّم الخوازميات، وفكِّر بمنطقية وتسلسل، وحُلَّ كثيرًا من الألغاز والأحاجي التي تتطلب تفكيرًا منطقيًا لحلها، فالحاسوب شديد المنطقية وهو ينفذ الشيفرات بالتسلسل واحدة تلو الأخرى، ولا يستطيع تخطي شيفرة بها مشكلة لاستكمال تنفيذ البرنامج، فعليك أن تحاكي بدورك أسلوبه في العمل لكتابة خوارزميات قادرة على حل المشكلات بأفضل هيئة ممكنة.
	</li>
	<li>
		<strong>التفكير النقدي</strong>: سَل نفسك دائمًا قبل كتابة كل شيفرة؛ لماذا أكتب هذه الشيفرة في هذا المكان بالضبط؟ هل ستؤثر هذه الشيفرة على أداء وأمان التطبيق سلبًا أم إيجابًا؟ يساعدك التفكير النقدي على تجنُّب المشكلات قبل ظهورها، كما يساعدك على حلِّها ما إذا ظهرت، وكذلك يساعدك على تحسين أداء وأمان التطبيق باستمرار.
	</li>
	<li>
		<strong>الاختبار وتنقيح الأخطاء:</strong> اختبر برنامجك باستمرار، ولا تكتفِ باختبارٍ واحد وإنما اختبره دوريًا، إذ تتكشف لك أخطاءٌ جديدة في كل اختبار، فتعمل على تنقيحها حتى تصل بتطبيقك إلى أفضل مستوى من الأداء والأمان.
	</li>
	<li>
		<strong>التطبيق الدائم</strong>: طبِّق ما تتعلمه في مشاريع عملية باستمرار، ويمكنك البحث عبر الإنترنت عن أفكار مشاريع مناسبة لمستواك ومعارفك، فالتطبيق الدائم يجعلك قادرًا على استذكار المعارف القديمة وربطها بحديث الدراسة، ويكشف لك عن الاستخدامات العملية للعلم الخام الذي تدرسه.
	</li>
	<li>
		<strong>المهارات الناعمة</strong>: لا تهمل دور المهارات الناعمة في طريقك لاحتراف البرمجة، وابنِ علاقاتٍ جيدة مع المبرمجين الآخرين، فهذا يوفر لك فرصًا عظيمة للتوظيف، كما يساعدك على تطوير مهاراتك البرمجية ومستواك البرمجي، وهذه العلاقات لن تنجح دون المهارات الناعمة، بدءًا من مهارات تكوين العلاقات، مرورًا بمهارات التواصل، وصولًا إلى مهارات العمل ضمن فريق وغيرها.
	</li>
	<li>
		<strong>قواعد كتابة الشيفرات النظيفة</strong>: تعلَّم مبادئ وقواعد كتابة الشيفرات النظيفة Clean Codes، وهي الشيفرات سهلة القراءة والاختبار والتنقيح، وتكمُن أهمية مبادئ كتابة الشيفرات النظيفة في توفير وقت وتكاليف صيانة التطبيق، كما تساعدك على تحسين أداء التطبيق وأمانه.
	</li>
	<li>
		<strong>التعلُّم المستمر</strong>: زِد حصيلتك العلمية يوميًا، فمجال البرمجة يتطور يومًا بعد الآخر، وتزداد مهام المبرمج والمهارات التي عليه تعلُّمها في كل يوم وحتى لو تمكنك من الحصول على وظيفة أو عمل حر بالمهارات التي تمتلكها لا تتوقف عن التعلم والتحصيل المستمر لكل ما هو جديد لتحافظ على الصدارة والتميز.
	</li>
</ul>

<div class="ipsEmbeddedVideo" contenteditable="false">
	<div>
		<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="113" src="https://www.youtube-nocookie.com/embed/RCMby7c16fQ?feature=oembed" title="تعلمت البرمجة وصرت موظف، هل علي تعلم المزيد؟" width="200"></iframe>
	</div>
</div>

<p>
	وإذا كنت تبحث عن مصادر تعليمية تساعدك على احتراف البرمجة باللغة العربية، فستجد في أكاديمية حسوب الكثير من المصادر التعليمية الحديثة والموثوقة التي تناسبك سواء كنت مبتدئًا أو محترفًا في البرمجة من <a href="https://academy.hsoub.com/programming/" rel="">دروس ومقالات دورية</a> و<a href="https://wiki.hsoub.com/%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9_%D8%A7%D9%84%D8%B1%D8%A6%D9%8A%D8%B3%D9%8A%D8%A9" rel="external" target="_blank">توثيقات مرجعية شاملة</a> و<a href="https://academy.hsoub.com/files/c5-%D9%83%D8%AA%D8%A8-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">كتب تعليمية</a> و<a href="https://www.youtube.com/channel/UCJv37tcBvJlBF2MoVMRMvbQ" rel="external nofollow" target="_blank">مقاطع فيديو</a> مميزة و<a href="https://academy.hsoub.com/#courses" rel="">دورات تدريبية</a> احترافية لمختلف لغات البرمجة والتخصصات المطلوبة في سوق العمل.
</p>
<iframe allowfullscreen="" class="ipsEmbed_finishedLoading" data-controller="core.front.core.autosizeiframe" data-embedauthorid="3889" data-embedcontent="" data-embedid="embed544509682" src="https://academy.hsoub.com/files/35-%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86/?do=embed" style="overflow: hidden; height: 470px; max-width: 500px; margin: auto;"></iframe>

<h2 id="-6">
	الخاتمة
</h2>

<p>
	تعرفنا في مقال اليوم على مفهوم المبرمج المحترف والفرق بين المبرمج ومهندس البرمجيات، وعرفنا مهارات وأدوات وممارسات المبرمج المحترف، وفي الختام أود أن أنصحك باتخاذ خطوة تعلم البرمجة إذا لم تكن بدأت بها بعد، فتعلم البرمجة يقدم لك مجموعة من الفوائد أهمها تعزيز طريقة تفكيرك المنطقي والإبداعي والوصول إلى أفضل حل للمشكلات في عملك أو حياتك الشخصية كما يساعدك على مجاراة التطور التقني المتسارع، وأخيرًا توفر البرمجة أمانًا وظيفيًا ورواتب مجزية للمبرمج المحترف.
</p>

<h2 id="-7">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r662/" rel="">تعلم البرمجة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">تعلم أساسيات البرمجة للمبتدئين</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%88%D8%B8%D8%A7%D8%A6%D9%81-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%A3%D9%83%D8%AB%D8%B1-%D8%B7%D9%84%D8%A8%D9%8B%D8%A7/" rel="">تعرف على وظائف البرمجة الأكثر طلبًا</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AF%D8%B1%D8%A7%D8%B3%D8%A9-%D8%AA%D8%AE%D8%B5%D8%B5-%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA/" rel="">الطريقة الأمثل لدراسة تخصص هندسة البرمجيات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AC%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">مجالات البرمجة</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2245</guid><pubDate>Fri, 16 Feb 2024 12:06:00 +0000</pubDate></item><item><title>&#x62A;&#x639;&#x631;&#x641; &#x639;&#x644;&#x649; &#x645;&#x643;&#x648;&#x646;&#x627;&#x62A; &#x646;&#x638;&#x627;&#x645; &#x627;&#x644;&#x62A;&#x634;&#x63A;&#x64A;&#x644; &#x648;&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x639;&#x645;&#x644;&#x647;&#x627;</title><link>https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%85%D9%83%D9%88%D9%86%D8%A7%D8%AA-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%B9%D9%85%D9%84%D9%87%D8%A7-r2260/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_02/------.png.b9bc54e918346b35667d20296f479f56.png" /></p>
<p>
	تتكون الحواسيب والأجهزة الحديثة من شطرين أساسيين هما العتاد Hardware والبرمجيات Software، وتقع أنظمةُ التشغيل Operating System في رأس البرمجيات الضرورية لتشغيل الأجهزة الحديثة، إذ يعد نظام التشغيل البرنامج الأساسي الذي يساعد على تثبيت برمجيات فرعية على الجهاز واستخدامها واستخدام العتاد بالشكل المطلوب، فما هي أنظمة التشغيل، وما مكوناتها؟
</p>

<h2 id="">
	ما هي أنظمة التشغيل؟
</h2>

<p>
	يشير <a href="https://academy.hsoub.com/apps/operating-systems/%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84/" rel="">نظام التشغيل</a> إلى الطبقة الفاصلة بين المستخدم وعتاد الجهاز، ويضم نظام التشغيل مجموعة من البرمجيات المستخدمة في إدارة عتاد الجهاز وموارده، من <a href="https://academy.hsoub.com/apps/operating-systems/%D9%88%D8%AD%D8%AF%D8%A9-%D8%A7%D9%84%D9%85%D8%B9%D8%A7%D9%84%D8%AC%D8%A9-%D8%A7%D9%84%D9%85%D8%B1%D9%83%D8%B2%D9%8A%D8%A9-r879/" rel="">معالج</a> إلى <a href="https://academy.hsoub.com/apps/operating-systems/%D8%A7%D9%84%D8%B0%D8%A7%D9%83%D8%B1%D8%A9-%D9%88%D8%A3%D9%86%D9%88%D8%A7%D8%B9%D9%87%D8%A7-r880/" rel="">ذاكرة الوصول العشوائي RAM والذاكرة الصلبة HDD</a> وغيرها من العتاد، وكذلك يوفر نظام التشغيل خدمات إضافية للمستخدم، منها تثبيت التطبيقات الرقمية وتشغيلها وإغلاقها وحذفها.
</p>

<p>
	ويعد الهدف الأهم لأنظمة التشغيل هو تسهيل التعامل مع التطبيقات وجعلها جذابة وإضافة واجهة أمامية لها، فبدون نظام تشغيل كانت إدارة التطبيقات ستقتصر على <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%A7-%D9%87%D9%88-%D8%B3%D8%B7%D8%B1-%D8%A7%D9%84%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D8%9F-r353/" rel="">واجهة الأوامر</a> البدائية البسيطة، وبالتالي لم تكن التطبيقات الإلكترونية لتتطور وتمتلئ بالخصائص كما تطورت، ما يجعل أنظمة التشغيل شطرًا أساسيًا من أي تطور تقني حديث.
</p>

<p>
	وليس الهدف الأوحد لأنظمة التشغيل هو تسهيل التعامل مع التطبيقات، وإنما <a href="https://academy.hsoub.com/programming/general/%D9%85%D9%87%D8%A7%D9%85-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84/" rel="">لأنظمة التشغيل وظائف</a> عديدة، فمنها مثلًا إدارة موارد الجهاز، وكذلك يساعد نظام التشغيل على تنظيم ومزامنة العمليات على الجهاز، كما يعمل على تنظيم البيانات، فلا تتداخل بيانات أحد التطبيقات مع بيانات تطبيق آخر فتحدث مشكلات أمنية أو فقدان للبيانات.
</p>

<p>
	تتعدد أنظمة التشغيل وتكثر، ومن أشهر أنظمة تشغيل الحواسيب نظام ويندوز Windows ونظام <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r799/" rel="">لينكس Linux</a> ونظام ماك أو إس MacOS لأجهزة أبل، بينما يشتهر بين أنظمة تشغيل الهواتف نظاما تشغيل أندرويد Android وأي أو إس iOS.
</p>

<h2 id="-1">
	ما مكونات نظام التشغيل؟
</h2>

<p>
	تتنوع مكونات نظام التشغيل وتختلف من نظام لآخر، لكن تشترك أنظمة التشغيل في مجموعة من المكونات أو البرمجيات التي تؤدي إجراءاتٍ ووظائف محددة، وهي تشمل:
</p>

<ul>
	<li>
		استدعاءات النظام System Calls
	</li>
	<li>
		مدير العمليات Processes Manager
	</li>
	<li>
		الإشارات Signals
	</li>
	<li>
		مدير الملفات Files Manager
	</li>
	<li>
		مدير الشبكات Networks Manager
	</li>
	<li>
		مدير الأمن Security Manager
	</li>
	<li>
		مدير أجهزة الإدخال والإخراج I\O Devices Manager
	</li>
	<li>
		مدير الذاكرة الرئيسية Main Memory Manager
	</li>
	<li>
		مدير الذاكرة الثانوية Secondary Memory Manager
	</li>
	<li>
		مترجم الأوامر Commands Interpreter
	</li>
</ul>

<p>
	لنشرح كل مكون ووظائفه بمزيدٍ من التفاصيل.
</p>

<h3 id="systemcalls">
	استدعاءات النظام System Calls
</h3>

<p>
	يعد نظام التشغيل وسيطًا بين المستخدم وعتاد الجهاز، وكذلك تعد <a href="https://academy.hsoub.com/programming/os-embedded-systems/%D8%A7%D8%B3%D8%AA%D8%AF%D8%B9%D8%A7%D8%A1%D8%A7%D8%AA-%D8%A7%D9%84%D9%86%D8%B8%D8%A7%D9%85-%D9%88%D8%A7%D9%84%D8%B5%D9%84%D8%A7%D8%AD%D9%8A%D8%A7%D8%AA-%D9%81%D9%8A-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-r1757/" rel="">استدعاءات النظام</a> وسيطًا بين برامج المستخدم ونواة نظام التشغيل، فلو كان الوصول من البرمجيات إلى نظام التشغيل مباشرًا دون وسيط لكان اختراق هذا النظام سهلًا يسيرًا.
</p>

<p>
	تدخل استدعاءات النظام في كثيرٍ من عمليات نظام التشغيل، مثل: إدارة الملفات وإدارة العمليات وإدارة الذاكرة الرئيسية والذاكرة الثانوية وإدارة أجهزة الإدخال والإخراج، ما يجعل هذه الاستدعاءات شديدة الأهمية في نظم التشغيل.
</p>

<h3 id="processesmanager">
	مدير العمليات Processes Manager
</h3>

<p>
	تشير <a href="https://academy.hsoub.com/programming/os-embedded-systems/%D8%A7%D9%84%D8%B9%D9%85%D9%84%D9%8A%D8%A7%D8%AA-%D9%88%D8%B9%D9%86%D8%A7%D8%B5%D8%B1%D9%87%D8%A7-%D9%81%D9%8A-%D9%86%D8%B8%D8%A7%D9%85-%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8-r1758/" rel="">العملية Process</a> إلى برنامج قيد التنفيذ، وتتكون العملية من عناصر عديدة أهمها بيانات البرنامج وشيفراته، ويجب أن تكون شيفرات البرنامج قابلة للتنفيذ؛ أي لا تحوي أخطاءً برمجية تمنع من تنفيذها.
</p>

<p>
	ويعمل مدير العمليات على إجراء استدعاءات للنظام لإنشاء عملية جديدة أو إنهاء عملية حالية، ويساعد مدير العمليات على مزامنة تنفيذ البرامج المختلفة على الجهاز، حتى لا تتداخل بيانات البرمجيات المختلفة في بعضها بعضًا؛ ما يؤدي إلى حفظ هذه البيانات من التلف، وكذلك يؤدي تنظيم العمليات إلى تقليل احتمالية حدوث خرق أمني نتاج تداخل البرمجيات وبياناتها.
</p>

<h3 id="signals">
	الإشارات Signals
</h3>

<p>
	تُستخدم الإشارات لتنبيه المستخدم إلى حدث محدد متعلق بالعملية، سواءً انتهاء العملية بنجاح أو حدث خطأ أثناء تنفيذها، وتعمل الإشارات على تعليق العملية حتى يتخذ المستخدم الإجراء المناسب بناءً على الإشعار الظاهر له.
</p>

<h3 id="filesmanager">
	مدير الملفات Files Manager
</h3>

<p>
	يعمل مدير الملفات على تنظيم الملفات على الجهاز، فيُجرِي استدعاءاتٍ للنظام للتحكُّم في الملفات، مثل: استدعاء النظام لإنشاء ملف جديد في مُجلَّد محدد أو استدعاء النظام لقراءة بيانات من ملف أو استدعاء للكتابة في ملف أو استدعاء لحذف ملف.
</p>

<h3 id="networksmanager">
	مدير الشبكات Networks Manager
</h3>

<p>
	يوفر مدير <a href="https://academy.hsoub.com/devops/networking/%D8%B4%D8%A8%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D8%A8/" rel="">الشبكات</a> مجموعة من العمليات والإجراءات التي تساعد على تحديد الوصول إلى الشبكة وتأمينها، كما يساعد مدير الشبكات مسؤولي الشبكات على تحصيل معلومات متقدمة ومتقدمة عن شبكاتهم ومكوناتها، وكذلك يفحص العمليات المتوالية على الشبكة، ما يساعد مسؤولي الشبكات على تطوير الشبكة وتحسينها واختبارها وسد ثغراتها.
</p>

<h3 id="securitymanager">
	مدير الأمن Security Manager
</h3>

<p>
	يعد مدير الأمن أحد أهم أجزاء نظام التشغيل، إذ يعمل على تنظيم الوصول إلى جوهر النظام وتحديد الوصول إلى العتاد، فيسمح للبرمجيات الموثوقة بالتحكم في الجهاز والوصول إلى موارده، بينما يمنع البرمجيات الخارجية وغير الموثوقة من الوصول للموارد حتى يأذن لها المستخدم بنفسه.
</p>

<h3 id="iodevicesmanager">
	مدير أجهزة الإدخال والإخراج I\O Devices Manager
</h3>

<p>
	يعمل مدير أجهزة الإدخال والإخراج على تنظيم عمليات إدخال البيانات عبر أجهزة الإدخال، مثل: لوحة المفاتيح والفأرة، وكذلك يعمل على تنظيم عمليات عرض البيانات وإخراجها عبر أجهزة الإخراج والتي تتضمن شاشة العرض والطابعة وغيرهما، ويعمل مدير أجهزة الإدخال والإخراج على تنظيم العمليات حسب الأولوية، فمثلًا عندما يضغط المستخدم ضغطتين بالفأرة على أحد التطبيقات لتشغيله؛ يقطع مدير أجهزة الإدخال والإخراج جميع العمليات الأخرى لتنفيذ هذه العملية العاجلة.
</p>

<h3 id="mainmemorymanager">
	مدير الذاكرة الرئيسية Main Memory Manager
</h3>

<p>
	تشير الذاكرة الرئيسية إلى الذاكرة العشوائية RAM، وهي ذاكرة مؤقتة تُستخدم لتخزين بيانات البرنامج أثناء تنفيذه، ثم تنتقل هذه البيانات إلى الذاكرة الثانوية أو الدائمة إذا أراد المستخدم أن يحتفظ بها. يعمل مدير الذاكرة الرئيسية على حجز الكمية المناسبة من الذاكرة العشوائية للبرنامج دون تفريط لكيلا تحدث مشكلات بالجهاز، ودون اختزال حتى لا يكون البرنامج المُنفَّذ بطيئًا.
</p>

<h3 id="secondarymemorymanager">
	مدير الذاكرة الثانوية Secondary Memory Manager
</h3>

<p>
	تشير الذاكرة الثانوية إلى الذاكرة الدائمة أو قرص التخزين الصلب Hard Disk Storage، ويعمل مدير الذاكرة الثانوية على حجز المساحة المناسبة للبرنامج وبياناته على القرص الصلب، وكذلك يعمل على فصل وتنظيم الملفات والبيانات المُخزَّنة فيها حتى لا يحدث تداخل بينها.
</p>

<h3 id="commandsinterpreter">
	مترجم الأوامر Commands Interpreter
</h3>

<p>
	تعد واجهة <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%A7-%D9%87%D9%88-%D8%B3%D8%B7%D8%B1-%D8%A7%D9%84%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D8%9F-r353/" rel="">سطر الأوامر</a> إحدى الطرق الكلاسيكية في التعامل مع الأجهزة الإلكترونية ولا سيما الحواسيب، ولا تزال ضرورية لكل مبرمج حتى عصرنا هذا، ويسمح مترجم سطرالأوامر للمستخدم بكتابة أوامر متنوعة، مثل: إنشاء ملف أو نسخ ملف أو حذف ملفات أو قراءة معلومات عن النظام وغيرها، ثم يعمل المترجم على ترجمة أوامر المستخدم إلى لغة الآلة ثم تنفيذها، ويشتهر كل من cmd.exe و PowerShell بين مترجمات أوامر نظام تشغيل ويندوز، في حين يبرز مترجم الأوامر <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%B5%D8%AF%D9%81%D8%A9-%D8%A8%D8%A7%D8%B4-bash-r606/" rel="">Bash</a> لنظام لينكس، بينما يذيع صيت مترجم الأوامر Terminal لنظام تشغيل ماك أو إس.
</p>

<h2 id="-2">
	ما الفرق بين مكونات نظم التشغيل؟
</h2>

<p>
	تتفرع <a href="https://academy.hsoub.com/programming/os-embedded-systems/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A3%D9%86%D8%B8%D9%85%D8%A9-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84/" rel="">أنواع أنظمة التشغيل</a>، وتختلف مكونات كل نظام تشغيل عن نظيره اختلافًا طفيفًا، ومن أشهر أنظمة التشغيل:
</p>

<ul>
	<li>
		ويندوز Windows
	</li>
	<li>
		لينكس Linux
	</li>
	<li>
		ماك أو إس MacOS
	</li>
	<li>
		أندرويد Android
	</li>
	<li>
		أي أو إس iOS
	</li>
</ul>

<p>
	لنستعرض أبرز المكونات الفريدة لكل نظام تشغيل بمزيد من التفصيل.
</p>

<h3 id="windows">
	ويندوز Windows
</h3>

<p>
	يعد ويندوز نظام تشغيل حاسوبي تابع لشركة مايكروسوفت Microsoft، ويتميز بواجهته الرسومية الجذابة وسهلة الاستخدام، ويتكون ويندوز من عدد ضخم من العناصر،ومن أبرزها:
</p>

<ul>
	<li>
		لوحة التحكم Control Panel: والتي تساعد المستخدم على تخصيص عناصر نظام التشغيل لملائمة احتياجاته.
	</li>
	<li>
		أداة Windows Update لتثبيت التحديثات الأمنية
	</li>
	<li>
		مركز التحكم Action Center<span>:</span> للتحكم في الشبكات الحاسوبية وأصوات النظام وغيرها.
	</li>
	<li>
		مستكشف الملفات والمجلدات File Explorer.
	</li>
	<li>
		نافذة أوامر Command Prompt،
	</li>
	<li>
		البرمجيات الأساسية لعمل النظام مثل برنامج Svchost.exe لإدارة العمليات ونواة ويندوز Ntoskrnl.exe لإدارة عتاد الجهاز وخدمات نظام التشغيل.
	</li>
</ul>

<h3 id="linux">
	لينكس Linux
</h3>

<p>
	يشتهر نظام تشغيل لينكس بشدة بين المبرمجين و<a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A8%D8%B1%D9%85%D8%AC-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA/" rel="">مطوري البرمجيات</a>، ويعد نظام تشغيل حاسوبي، ويتميز في إدارة الشبكات وإدارة عتاد الجهاز، ويتكون نظام التشغيل لينكس من خمسة طبقات رئيسية، وهي:
</p>

<ul>
	<li>
		طبقة العتاد Hardware Layer: مسؤولة عن إدارة مكونات عتاد الحاسوب جميعًا، بدءًا من المعالج، مرورًا بالذاكرة الصلبة والعشوائية، وصولًا إلى أجهزة الإدخال والإخراج.
	</li>
	<li>
		النواة kernel: الطبقة الأساسية في نظام تشغيل لينكس، وهي المسؤولة عن بدء العمليات ومزامنتها وتنظيمها وتنفيذها، وتعمل النواة أيضًا على إدارة الموارد والسماح لكل عملية باستهلاك القدر المناسب لها من الموارد.
	</li>
	<li>
		القشرة Shell: الفاصل بين المستخدم والنواة، ويوجه المستخدم أوامره للنواة عبر القشرة، ويوجد نوعان من القشرة، أولاهما واجهة المستخدم الرسومية وتتميز بسهولة الاستخدام والجاذبية، والأخرى واجهة الأوامر والتي يكتب فيها المستخدمُ أوامرَه التي يريد من النواة تنفيذها.
	</li>
	<li>
		مكتبات النظام System Libraries: مجموعة من الوظائف المُبرمَجَة مسبقًا، والتي تسمح لأي برنامج خارجي بالوصول إلى مميزات النواة، وهي أساس بناء أي تطبيق رقمي موجه لنظام تشغيل لينكس.
	</li>
	<li>
		خدمات النظام System Utilities: الوظائف الإدارية بنظام التشغيل، والتي تسمح للمستخدم بإدارة الملفات والشبكات، وإدارة سائر أجزاء نظام التشغيل.
	</li>
</ul>

<h3 id="macos">
	ماك أو إس MacOS
</h3>

<p>
	يعد ماك أو إس نظامًا حاسوبيًا لأجهزة أبل Apple، ويتكون من واجهة أمامية سلسة وجذابة وفعالة تُسمَّى أكوا Aqua، ويحظى بتطبيقات مخصصة مطورة بلغات برمجة، مثل: جافا وسويفت، وكذلك يتميز نظام ماك أو إس برسوم Graphics جذابة مبنية على <a href="https://academy.hsoub.com/programming/general/%D8%A5%D8%B7%D8%A7%D8%B1-%D8%B9%D9%85%D9%84-framework/" rel="">إطاري عمل</a> Quartz وQuickTime ومكتبة OpenGL، وتعد النواة الأساسية لنظام التشغيل ماك أو إس هي داروين Darwin، والذي يعد نظام تشغيل مبني على نظام تشغيل UNIX، ويعد نظام ماك أو إس بالكامل مبنيًا على نظام تشغيل داروين.
</p>

<h3 id="android">
	أندرويد Android
</h3>

<p>
	يعد أندرويد نظام تشغيل للهواتف المحمولة، ويعد مبنيًا على نظام لينكس، ويحوي خمسة مكونات رئيسية، وهي:
</p>

<ul>
	<li>
		نواة لينكس Linux Kernel: يعد المكون المسؤول عن إدارة عتاد الهاتف بأكمله وإدارة العمليات والشبكات والذاكرة الدائمة والذاكرة العشوائية وغيرها.
	</li>
	<li>
		مكتبات المنصة Platform Libraries: تحتوي هذه الطبقة على بعض المكتبات المساعدة على إدارة النظام، مثل: مكتبات لدعم تشغيل الوسائط، ومكتبات لدعم عرض الرسوم، ومكتبات لدعم التخزين في قواعد بيانات مختلفة، وغيرها.
	</li>
	<li>
		وقت تشغيل أندرويد Android Runtime: توفر هذه الطبقة بيئة تشغيل تحتوي على الخدمات الضرورية لتشغيل التطبيقات المُثبَّتة على الهاتف.
	</li>
	<li>
		أطر عمل التطبيقات Application Frameworks: الطبقة المسؤولة عن إدارة تطبيقات الهاتف، وكذلك تعد مسؤولة عن إدارة الإشعارات وإدارة الواجهة الأمامية للهاتف وأسلوب عرض التطبيقات.
	</li>
	<li>
		التطبيقات Applications: تشير إلى التطبيقات المثبتة على الهاتف، سواءً كانت تطبيقات داخلية، مثل: الكاميرا ومتصفح الصور، أو تطبيقات خارجية مثبتة من المتجر، وتعمل التطبيقات في طبقة وقت تشغيل أندرويد بمساعدة الخدمات المُقدَّمة من طبقة أطر عمل التطبيقات.
	</li>
</ul>

<h3 id="ios">
	أي أو إس iOS
</h3>

<p>
	يعد أي أو إس نظام تشغيل للأجهزة الجوالة التابعة لشركة أبل، مثل: هاتف أيفون iPhone وأي باد iPad وغيرهما، ويتكون نظام تشغيل أي أو إس من أربعة طبقات رئيسية، وهي:
</p>

<ul>
	<li>
		نواة نظام التشغيل OS Core: تحوي أطر العمل المسؤولة عن الوظائف الأساسية للنظام، مثل: البلوتوث والأمن والتفويض المحلي.
	</li>
	<li>
		الخدمات الأساسية Core Services: تضم أطر العمل المسؤولة عن وظائف أخرى متعددة، مثل: التخزين السحابي وإدارة البيانات.
	</li>
	<li>
		الوسائط Media: تعد الطبقة الثالثة من مكونات أي أو إس، وهي المسؤولة عن تشغيل الصور والمقاطع الرسومية،
	</li>
	<li>
		طبقة Cocoa Touch: تجعل المستخدم قادرًا على تنفيذ عمليات اللمس والتحريك لاستخدام التطبيقات.
	</li>
</ul>

<h2 id="-3">
	ما مراحل إنشاء مكونات نظام التشغيل؟
</h2>

<p>
	تمر مكونات نظام التشغيل على مراحل عديدة قبل تجميعها وإطلاق نظام التشغيل، وهي:
</p>

<ul>
	<li>
		<strong>هيكلة النظام:</strong> قبل البدء في تطوير النظام يجب التخطيط له بتحديد الهيكل الأولي له والمميزات التي سيحويها، وتحديد الهدف من تطوير النظام.
	</li>
	<li>
		<strong>اختيار محمِّل الإقلاع Boot-loader:</strong> يعد محمِّل الإقلاع هو الجزء المسؤول عن تشغيل نظام التشغيل بنقله للذاكرة العشوائية للجهاز، ويمكن تطوير محمل إقلاع خاص كما يمكن استخدام محمل إقلاع موجود بالفعل، مثل: محمل الإقلاع GRUB.
	</li>
	<li>
		<strong>اختيار تصميم النواة:</strong> تتعدد تصاميم نواة نظام التشغيل kernel، فمنها مثلًا النويات المتجانسة Monolithic Kernels والتي تتميز بالسرعة والأداء المرتفع وتجعل نظام التشغيل سلسًا، ومنها النويات الصغيرة Micro Kernels والتي تتميز بتجريد أفضل لنظام التشغيل عن عتاد الجهاز.
	</li>
	<li>
		<strong>تطوير البرمجيات الخدمية:</strong> يعمل المطور في هذه المرحلة على تطوير كل برنامج من برامج نظام التشغيل على حدة، فيطور مدير الملفات ويختبره، ويطور مدير الشبكات ويختبره، ويطور بقية البرامج ثم يجمعها معًا في نظام التشغيل.
	</li>
	<li>
		<strong>اختبار نظام التشغيل:</strong> يختبر المطور نظام التشغيل لاستخراج المشكلات الأمنية ومعرفة الثغرات وحلها قبل إصداره.
	</li>
</ul>

<h2 id="-4">
	الخاتمة
</h2>

<p>
	تعرفنا في مقال اليوم على مكونات أنظمة التشغيل التي تعد جزءًا أساسيًا من جميع الأجهزة الحديثة القابلة للبرمجة، واستعرضنا بإيجاز المكونات الأساسية لكل نظام تشغيل، ونذكر ختامًا أن هذه الأنظمة في تطورٍ دائمٍ وتحديثاتٍ متوالية، لذا ينبغي أن تحرص على تحديث نظام التشغيل لجهازك باستمرار لتضمن له أداءً مستقرًا وآمنًا.
</p>

<p>
	اقرأ أيضًا
</p>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%86%D8%B8%D8%A7%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-linux-%D9%88%D8%A3%D8%A8%D8%B1%D8%B2-%D9%85%D9%85%D9%8A%D8%B2%D8%A7%D8%AA%D9%87-%D9%88%D8%B9%D9%8A%D9%88%D8%A8%D9%87-r2252/" rel="">تعرف على نظام لينكس Linux وأبرز مميزاته وعيوبه</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D9%85%D8%B9-%D9%86%D8%B8%D8%A7%D9%85-%D9%88%D9%8A%D9%86%D8%AF%D9%88%D8%B2-r576/" rel="">تثبيت لينكس مع نظام ويندوز</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-%D9%85%D9%86-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%A8%D8%A3%D8%A8%D8%B3%D8%B7-%D8%B7%D8%B1%D9%8A%D9%82%D8%A9-r575/" rel="">كيفية تثبيت توزيعة أوبنتو من لينكس بأبسط طريقة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/operating-systems/windows/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%88%D9%8A%D9%86%D8%AF%D9%88%D8%B2-11-%D9%88%D8%B7%D8%B1%D9%8A%D9%82%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA%D9%87-r704/" rel="">مدخل إلى نظام التشغيل ويندوز 11 وطريقة تثبيته</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2260</guid><pubDate>Wed, 14 Feb 2024 12:00:00 +0000</pubDate></item></channel></rss>
