<?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/page/12/?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>&#x642;&#x627;&#x626;&#x645;&#x629; &#x645;&#x631;&#x627;&#x62C;&#x639;&#x629; &#x627;&#x644;&#x645;&#x634;&#x631;&#x648;&#x639; &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x64A;</title><link>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/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_09/5d8082061d38e_.jpg.1dc9ac9184be7d9b00f2784d05056663.jpg" /></p>

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

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

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2019_09/5d8082100f016_.jpg.f0df3cfdf4e27926e6cf8c93406cf9eb.jpg" data-fileid="31629" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="31629" data-unique="mvaxnodk3" src="https://academy.hsoub.com/uploads/monthly_2019_09/5d80821023d72_.thumb.jpg.9b62852982b88e38bde2052260664d14.jpg" alt="قائمة مراجعة المشروع البرمجي.jpg"></a>
</p>

<p>
	بشكل أساسي هي قائمة بالأسئلة التي يجب على المُراجع الإجابة عليها. عندما يتم جمع كل الإجابات، يكون التقرير جاهزًا. أهم الأسئلة تمَّ طرحها أوّلاً:
</p>

<ul>
<li>
		هل إجراء الإصدار موثَّق، وآلي، وهل يعمل؟
	</li>
	<li>
		هل الإصدارات تتجدد بشكل منتظم، على الأقل مرة أسبوعيًا؟
	</li>
	<li>
		ما حجم الديون التقنية (الأشياء التي يجب إصلاحها "لاحقًا")؟
	</li>
	<li>
		هل خط التسليم موثوقًا بما يكفي لاستبعاد الأخطاء؟
	</li>
	<li>
		هل <a href="https://wiki.hsoub.com/Refactoring/what_is_refactoring" rel="external">الشيفرة نظيفة</a>؟ كم عدد النماذج المضادّة التي تظهر؟
	</li>
	<li>
		هل تمَّ تسجيل جميع الأخطاء والميزات كملاحظات؟
	</li>
	<li>
		هل تم تغطية الشيفرة الأساسية بوحدات اختبار، وهل التغطية مرئية؟
	</li>
	<li>
		هل تم توقيع اتفاقيات "العمل من أجل التوظيف" مع جميع المطورين؟
	</li>
	<li>
		هل تم توثيق القرارات التقنية الهيكلية الرئيسية؟
	</li>
	<li>
		هل التحليل الثابت موضع التنفيذ ومُلزَم لإجراء تغييرات جديدة؟
	</li>
	<li>
		هل التكاملات المستمرة موضع التنفيذ، وهل تؤخذ تقاريرها في الحسبان؟
	</li>
	<li>
		هل الفرع الرئيسي (master branch) للقراءة فقط؟
	</li>
	<li>
		هل يتم جمع المقاييس البرمجية ومراجعتها بانتظام؟
	</li>
	<li>
		هل مستودع الشيفرة المصدرية يخضع لملكية العميل؟
	</li>
	<li>
		هل متطلبات التوثيق قصيرة ومحدَّثة؟
	</li>
	<li>
		هل تحتوي الفئات والطرق والتوابع الرئيسية على توثيق مضمَّن في الشيفرة؟
	</li>
	<li>
		هل مخلفات مستودع الشيفرة المصدرية مجانية؟
	</li>
	<li>
		هل تم توثيق واجهات UI/UX؟
	</li>
	<li>
		هل سجلات الإنتاج مرئية وتتم مراجعتها بانتظام؟
	</li>
	<li>
		ما مدى استجابة الفريق للملاحظات؟
	</li>
	<li>
		هل لدى Git تاريخ واضح للتغيرات الموثَّقة؟
	</li>
</ul>
<p>
	بشكلٍ أساسي، هذا تجميع قصير جدًا لأهم الأشياء التي يمكنك العثور عليها في <a href="https://en.wikipedia.org/wiki/Capability_Maturity_Model_Integration" rel="external nofollow">CMMI</a>. إنها تتطلب كل هذا، بالإضافة لقائمة كبيرة من الأشياء الأخرى موجودة في الأعلى. لكن المشروع الصغير لا يحتاج إلى جميع الأسئلة المذكورة. قائمتي أقصر، وأنا متأكد من أنها ستكون كافية لمعظم القرَّاء.
</p>

<p>
	بكل الأحوال، يمكنك مشاهدة التقارير التي يقوم المتطوعون بإنشائها للمشاركين في <a href="https://www.yegor256.com/award.html" rel="external nofollow">جائزة جودة البرمجيات</a>، إذ يقومون بتحليل المشاريع مفتوحة المصدر والإبلاغ بشكلٍ مختصر عن المشكلات التي يجدونها. أعتقد أنهم يحاولون الإجابة عن نفس مجموعة الأسئلة السابقة تمامًا.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://www.yegor256.com/2019/04/02/software-project-review-checklist.html" rel="external nofollow">Software Project Review Checklist</a> لصاحبه Yegor Bugayenko
</p>
]]></description><guid isPermaLink="false">741</guid><pubDate>Tue, 17 Sep 2019 06:57:30 +0000</pubDate></item><item><title>&#x633;&#x64A;&#x646;&#x627;&#x631;&#x64A;&#x648; &#x627;&#x644;&#x62B;&#x642;&#x629;&#x60C; &#x627;&#x644;&#x62F;&#x641;&#x639;&#x60C; &#x627;&#x644;&#x62E;&#x633;&#x627;&#x631;&#x629;</title><link>https://academy.hsoub.com/programming/general/%D8%B3%D9%8A%D9%86%D8%A7%D8%B1%D9%8A%D9%88-%D8%A7%D9%84%D8%AB%D9%82%D8%A9%D8%8C-%D8%A7%D9%84%D8%AF%D9%81%D8%B9%D8%8C-%D8%A7%D9%84%D8%AE%D8%B3%D8%A7%D8%B1%D8%A9-r737/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_09/5d8068ae7d70c_.jpg.bee3a4ee1c4dbb7b2df8ab11fd5ec7cb.jpg" /></p>

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

<p>
	السيناريو النموذجي لوصف المشكلة "الثقة، الدفع، الخسارة".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="31628" href="https://academy.hsoub.com/uploads/monthly_2019_09/5d8068aa85d67_.jpg.79f0f26c2e99493c356fa8130ee4140e.jpg" rel=""><img alt="سيناريو الدفع الثقة الصداقة.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="31628" data-unique="1zxz8z080" src="https://academy.hsoub.com/uploads/monthly_2019_09/5d8068aa9c67f_.thumb.jpg.b4ced60b29a2b21e39666c545d01427d.jpg"></a>
</p>

<p>
	أولًا ستثق في مبرمجيك، وسيكونون شركاء لك تؤمن بعملهم، وتشعر بأنّك متأكدًا أنَّك قد اخترت الأفضل، سيظهرون لك ثقةً كبيرةً جدًا، وستشعر بالحماس عندما تنظر إلى سيرهم الذاتية، إنهم يعرفون جافاسكربت و <a href="https://academy.hsoub.com/devops/" rel="">DevOps</a> و <a href="https://academy.hsoub.com/programming/workflow/git/" rel="">GitHub</a> وحتى البيانات الضخمة، إنّهم بالتأكيد الأفضل لك، بالإضافة إلى ذلك، لديهم خبرة في هذا العمل لمدة عشر سنوات، فما الذي تحتاجه أكثر من ذلك، صحيح؟
</p>

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

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

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

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

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

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

<p style="text-align: center;">
	<img alt="tweet-stat.png" class="ipsImage ipsImage_thumbnailed" data-fileid="31627" data-unique="cgd1z7xp4" src="https://academy.hsoub.com/uploads/monthly_2019_09/tweet-stat.png.3d394b3d51ad9c57a8dd0696c6ade591.png"></p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://www.yegor256.com/2017/11/21/trust-pay-lose.html" rel="external nofollow">‎Trust. Pay. Lose</a> لصاحبه Yegor Bugayenko
</p>
]]></description><guid isPermaLink="false">737</guid><pubDate>Tue, 17 Sep 2019 05:29:34 +0000</pubDate></item><item><title>&#x647;&#x644; &#x62A;&#x62D;&#x62A;&#x627;&#x62C; &#x644;&#x645;&#x631;&#x627;&#x62C;&#x639;&#x627;&#x62A; &#x62A;&#x642;&#x646;&#x64A;&#x629; &#x645;&#x633;&#x62A;&#x642;&#x644;&#x629;&#x61F;</title><link>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/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_09/5d806042625d8_.jpg.d92674b6c8158e6f895c61f416f49829.jpg" /></p>

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

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

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

<p>
	يتم إجراء مراجعة مستقلة بواسطة مبرمج لا يعرف شيئًا عن فريقك. ينضم إلى الفريق، ويتحقق من الشيفرة في مستودعك، ويقضي بضعة ساعات (أو أيام) في النظر إليها والتفكير بها ويحاول فهم ما الذي تفعله. ثمَّ، يخبرك ما هو الخطأ وأين. يشرح كيف يمكنه تحسينه بشكل أفضل، وأين سيجري التغيير، وما الذي سيفعله بدلًا من ذلك. ثمَّ تدفع له ويغادر. قد لا تشاهده أبدًا مرةً أخرى، لكن استنتاجاته واقتراحاته تساعدك على التحقق من صحة الشيفرة الخاصة بك وتقييم أداء فريقك بشكل صحيح. في <a href="https://www.zerocracy.com/" rel="external nofollow">Zerocracy</a>، نقوم بمراجعات مستقلة لكل مشروع من مشاريعنا، وهذه قائمة بالمبادئ التي نستخدمها: <img alt="zerocrary" src="https://drive.google.com/open?id=1CPQmEOc9HayRwiNsWLeZh28rgHQNN4W5"></p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2019_09/5d806045b3666_.jpg.719257c01c40bda7a71d4af1991513ad.jpg" data-fileid="31626" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="31626" data-unique="xlo4gnklh" src="https://academy.hsoub.com/uploads/monthly_2019_09/5d806045c89d3_.thumb.jpg.54f04a5085cc87ca8470609e8423bb69.jpg" alt="هل تحتاج إلى مراجعات تقنية مستقلة.jpg"></a>
</p>

<h2 id="-">
	اجعل المراجعات المستقلة منهجية
</h2>

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

<h2 id="-">
	ادفع لإيجاد الأخطاء
</h2>

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

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

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

<h2 id="-">
	وظّف الأفضل وادفع أكثر
</h2>

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

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

<p>
	<strong>ملاحظة</strong>: قد تختلف الأسعار في الوطن العربي ويمكن أن تكون أقل مما ذُكِر آنفًا.
</p>

<h2 id="-">
	اسأل وتوقع النقد
</h2>

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

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

<h2 id="-">
	غيّر المراجعين باستمرار
</h2>

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

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

<h2 id="-">
	كن لطيفًا وصادقًا مع فريقك
</h2>

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

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

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

<h2 id="-">
	راجع من اليوم الأول
</h2>

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

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

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

<h2 id="-">
	امنع النقاشات، واطلب تقاريرًا رسمية
</h2>

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

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

<h2 id="-">
	التعامل مع أي سؤال كأنه خطأ
</h2>

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

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

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

<h2 id="-">
	راجع كل شيء، وليس فقط الشيفرة المصدرية
</h2>

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

<h2 id="-">
	تابع كيفية حل التناقضات
</h2>

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

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

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

<p>
	ترجمة -وبتصرف- للمقال <a href="https://www.yegor256.com/2014/12/18/independent-technical-reviews.html" rel="external nofollow">You Do Need Independent Technical Reviews!‎</a> لصاحبه Yegor Bugayenko
</p>
]]></description><guid isPermaLink="false">736</guid><pubDate>Tue, 17 Sep 2019 04:26:53 +0000</pubDate></item><item><title>20 &#x645;&#x62B;&#x627;&#x644; &#x631;&#x627;&#x626;&#x639; &#x644;&#x62D;&#x631;&#x643;&#x627;&#x62A; &#x645;&#x636;&#x627;&#x641;&#x629; &#x644;&#x62A;&#x637;&#x628;&#x64A;&#x642; &#x62C;&#x648;&#x627;&#x644;</title><link>https://academy.hsoub.com/programming/general/20-%D9%85%D8%AB%D8%A7%D9%84-%D8%B1%D8%A7%D8%A6%D8%B9-%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D9%85%D8%B6%D8%A7%D9%81%D8%A9-%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%AC%D9%88%D8%A7%D9%84-r723/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_07/5d3ebd3164fe5_20.png.b859bf4a8b5d2c81405c38cb90a91413.png" /></p>

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

<p>
	أَلْهِم نفسك بهذه الأمثلة لحركات تطبيق الجوال!
</p>

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

<p>
	اطَّلع على هذه الأمثلة الممتازة لحركات تطبيق الجوال التي ستحفزك.
</p>

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

<h2 id="-https-codepen-io-gregh-pen-wxknnv-">
	<a href="https://codepen.io/gregh/pen/WxkNNv" rel="external nofollow">شريط التنقل المتحرك</a>
</h2>

<p>
	هذا زر قائمة متحركة رائع يساعدك في التنقل عبر التطبيق بطريقةٍ مُبتَكرة.
</p>

<p style="text-align: center;">
	<a href="https://codepen.io/gregh/pen/WxkNNv" rel="external nofollow"><img class="ipsImage ipsImage_thumbnailed" data-fileid="30869" data-unique="3qqzu48oy" src="https://academy.hsoub.com/uploads/monthly_2019_07/004721-Animated-Navigation.jpg.4c9826f00ece6d781bb7328392062914.jpg" style="width: 573px; height: auto;" alt="004721-Animated-Navigation.jpg"></a>
</p>

<h2 id="-https-codepen-io-sol0mka-pen-jsyxq-">
	<a href="https://codepen.io/sol0mka/pen/Jsyxq" rel="external nofollow">فكرة القائمة الهلاميَّة اللمسيَّة</a>
</h2>

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

<p style="text-align: center;">
	<a href="https://codepen.io/sol0mka/pen/Jsyxq" rel="external nofollow"><img class="ipsImage ipsImage_thumbnailed" data-fileid="30870" data-unique="6zpn0p7bt" src="https://academy.hsoub.com/uploads/monthly_2019_07/004722-Touch-device-jelly-menu-concept.jpg.164985ff374d222938961baa4fc6601e.jpg" style="width: 573px; height: auto;" alt="004722-Touch-device-jelly-menu-concept.jpg"></a>
</p>

<h2>
	<a href="https://codepen.io/suez/pen/dPqxoM" rel="external nofollow">فكرة حركات بتسجيل الدخول والخروج</a>
</h2>

<p>
	هذه تحريكات تطبيقات جوال مهمة تشمل ميزات تسجيل الدخول والخروج، جاء مصممها بفكرةٍ جميلةٍ تبدو مذهلة.
</p>

<p style="text-align: center;">
	<a href="https://codepen.io/suez/pen/dPqxoM" rel="external nofollow"><img class="ipsImage ipsImage_thumbnailed" data-fileid="30871" data-unique="1jd76d0a6" src="https://academy.hsoub.com/uploads/monthly_2019_07/004723-Login_Logout-animation-concept.jpg.0b6b0f09ccb155361e20e4b9a881ac9c.jpg" style="width: 573px; height: auto;" alt="004723-Login_Logout-animation-concept.jpg"></a>
</p>

<h2 id="-https-codepen-io-mrspok407-pen-onkkop-">
	<a href="https://codepen.io/mrspok407/pen/ONKKOP" rel="external nofollow">تحديث البريد الوارد</a>
</h2>

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

<p style="text-align: center;">
	<a href="https://codepen.io/mrspok407/pen/ONKKOP" rel="external nofollow"><img class="ipsImage ipsImage_thumbnailed" data-fileid="30872" data-unique="k3yddow5y" src="https://academy.hsoub.com/uploads/monthly_2019_07/004724-Inbox-Refresh.jpg.6a5cc5ac1a849dcbcc1b8ffcb124bf54.jpg" style="width: 573px; height: auto;" alt="004724-Inbox-Refresh.jpg"></a>
</p>

<h2 id="-https-codepen-io-lukemac-pen-ldcfu-">
	<a href="https://codepen.io/LukeMac/pen/ldCfu" rel="external nofollow">فيديو واجهة المستخدم</a>
</h2>

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

<p style="text-align: center;">
	<a href="https://codepen.io/LukeMac/pen/ldCfu" rel="external nofollow"><img class="ipsImage ipsImage_thumbnailed" data-fileid="30873" data-unique="mnhtqdg2r" src="https://academy.hsoub.com/uploads/monthly_2019_07/004725-Mobile-Video-UI.jpg.796ca4cdde427ab2ea10e7b7c80c7cbc.jpg" style="width: 573px; height: auto;" alt="004725-Mobile-Video-UI.jpg"></a>
</p>

<h2 id="-https-codepen-io-khadkamhn-pen-bnwxea-">
	<a href="https://codepen.io/khadkamhn/pen/BNwxEa" rel="external nofollow">التصميم الخفيّ</a>
</h2>

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

<p style="text-align: center;">
	<a href="https://codepen.io/khadkamhn/pen/BNwxEa" rel="external nofollow"><img class="ipsImage ipsImage_thumbnailed" data-fileid="30874" data-unique="5awod5k8v" src="https://academy.hsoub.com/uploads/monthly_2019_07/004726-Secret-Project.jpg.99c6a634351e0d6c1218d795d2c3d1a8.jpg" style="width: 573px; height: auto;" alt="004726-Secret-Project.jpg"></a>
</p>

<h2 id="-https-codepen-io-suez-pen-enwwgp-">
	<a href="https://codepen.io/suez/pen/eNwwGp" rel="external nofollow">حركات بطاقات التوصيل</a>
</h2>

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

<p style="text-align: center;">
	<a href="https://codepen.io/suez/pen/eNwwGp" rel="external nofollow"><img class="ipsImage ipsImage_thumbnailed" data-fileid="30875" data-unique="xzfoe3zmm" src="https://academy.hsoub.com/uploads/monthly_2019_07/004727-Delivery-Card-Animation.jpg.798653929f6f79d8f186fa1773708870.jpg" style="width: 573px; height: auto;" alt="004727-Delivery-Card-Animation.jpg"></a>
</p>

<h2 id="-https-codepen-io-cemre-pen-goatk-farmer-parallax-">
	<a href="https://codepen.io/cemre/pen/GoatK" rel="external nofollow">تأثير اختلاف المنظر</a>
</h2>

<p>
	تأثير تغيير منظر التطبيق  (Farmer Parallax) هي لمحة ثلاثية الأبعاد 3D رائعة، تبدو مذهلة لأي مشروع تملكه، هذا مثال جميل لكيفية استخدام تأثير اختلاف منظر التطبيق framer parallax في تطبيقك.
</p>

<p style="text-align: center;">
	<a href="https://codepen.io/cemre/pen/GoatK" rel="external nofollow"><img class="ipsImage ipsImage_thumbnailed" data-fileid="30876" data-unique="zneyg432l" src="https://academy.hsoub.com/uploads/monthly_2019_07/004728-Framer-Parallax.jpg.fd78e2fe7642cb5f0e482310f64badb3.jpg" style="width: 573px; height: auto;" alt="004728-Framer-Parallax.jpg"></a>
</p>

<h2 id="-https-codepen-io-balapa-pen-embyyb-">
	<a href="https://codepen.io/balapa/pen/embYYB" rel="external nofollow">حركات تراكيب التصميم المادي</a>
</h2>

<p>
	هذه حركات بسيطة لكنها فعالة، يمكن إضافته لتطبيقك. تعرف ما إذا كانت فعَّالة لتصاميمك!
</p>

<p style="text-align: center;">
	<a href="https://codepen.io/balapa/pen/embYYB" rel="external nofollow"><img class="ipsImage ipsImage_thumbnailed" data-fileid="30877" data-unique="qfw00zbbs" src="https://academy.hsoub.com/uploads/monthly_2019_07/004729-Material-Overlay-Animation.jpg.dd6e8da40cb5fd1effcd81d08ff95ccb.jpg" style="width: 573px; height: auto;" alt="004729-Material-Overlay-Animation.jpg"></a>
</p>

<h2 id="-https-codepen-io-suez-pen-epgzjk-">
	<a href="https://codepen.io/suez/pen/epgZjK" rel="external nofollow">فكرة السحب المرن للتحديث</a>
</h2>

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

<p style="text-align: center;">
	<a href="https://codepen.io/suez/pen/epgZjK" rel="external nofollow"><img class="ipsImage ipsImage_thumbnailed" data-fileid="30878" data-unique="wp3g6qiao" src="https://academy.hsoub.com/uploads/monthly_2019_07/004730-Elastic-Pull-To-Refresh-Concept.jpg.a85e9589b4185a23bff48819c325c160.jpg" style="width: 573px; height: auto;" alt="004730-Elastic-Pull-To-Refresh-Concept.jpg"></a>
</p>

<h2 id="-https-codepen-io-noeldelgado-pen-ewcho-">
	<a href="https://codepen.io/noeldelgado/pen/Ewcho" rel="external nofollow">حركة معرض الصور غير المنتهي</a>
</h2>

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

<p style="text-align: center;">
	<a href="https://codepen.io/noeldelgado/pen/Ewcho" rel="external nofollow"><img class="ipsImage ipsImage_thumbnailed" data-fileid="30879" data-unique="fyk0gh5l0" src="https://academy.hsoub.com/uploads/monthly_2019_07/004731-Endless-Gallery-Animation.jpg.388eac8b187d40f6d9ff028cab7b611f.jpg" style="width: 573px; height: auto;" alt="004731-Endless-Gallery-Animation.jpg"></a>
</p>

<h2 id="-">
	قائمة واجهة التطبيق
</h2>

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

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="30880" data-unique="2rtmoyz3d" src="https://academy.hsoub.com/uploads/monthly_2019_07/004732-Menu-App-Interface.jpg.0715b6de48a351a501001ca4afadc918.jpg" alt="004732-Menu-App-Interface.jpg"></p>

<h2 id="-svg-https-codepen-io-suez-pen-emjwvp-">
	<a href="https://codepen.io/suez/pen/emjwvP" rel="external nofollow">تصميم مادي SVG مرن للأشرطة الجانبية</a>
</h2>

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

<p style="text-align: center;">
	<a href="https://codepen.io/suez/pen/emjwvP" rel="external nofollow"><img class="ipsImage ipsImage_thumbnailed" data-fileid="30881" data-unique="f13y29cp8" src="https://academy.hsoub.com/uploads/monthly_2019_07/004733-Elastic-SVG-Sidebar-Material-Design.jpg.8f1a6b6f6851a5ebb2ba48fbca6c5edf.jpg" style="width: 573px; height: auto;" alt="004733-Elastic-SVG-Sidebar-Material-Design.jpg"></a>
</p>

<h2 id="-https-codepen-io-suez-pen-wvjrmb-webkit-">
	<a href="https://codepen.io/suez/pen/WvjRMb" rel="external nofollow">قائمة الشريط الجانبي الثلاثي</a> (Webkit فقط)
</h2>

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

<p style="text-align: center;">
	<a href="https://codepen.io/suez/pen/WvjRMb" rel="external nofollow"><img class="ipsImage ipsImage_thumbnailed" data-fileid="30882" data-unique="so0r59rtt" src="https://academy.hsoub.com/uploads/monthly_2019_07/004734-Triangular-Sidebar-Menu-webkit-only.jpg.31672e0c40a0b81b7cb0d78476b2b228.jpg" style="width: 573px; height: auto;" alt="004734-Triangular-Sidebar-Menu-webkit-only.jpg"></a>
</p>

<h2 id="-css-https-codepen-io-davidkpiano-pen-xwyvxo-">
	<a href="https://codepen.io/davidkpiano/pen/xwyVXO" rel="external nofollow">مفكرة ملونة باستخدام css فقط</a>
</h2>

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

<p style="text-align: center;">
	<a href="https://codepen.io/davidkpiano/pen/xwyVXO" rel="external nofollow"><img class="ipsImage ipsImage_thumbnailed" data-fileid="30883" data-unique="lve9d2l2h" src="https://academy.hsoub.com/uploads/monthly_2019_07/004735-CSS-only-Colorful-Calendar-Concept.jpg.4cea758cd0f67e6ce10e2f7daaaf9fa8.jpg" style="width: 573px; height: auto;" alt="004735-CSS-only-Colorful-Calendar-Concept.jpg"></a>
</p>

<h2 id="-https-codepen-io-lance-jernigan-pen-yjbxok-">
	<a href="https://codepen.io/Lance-Jernigan/pen/yJbXOK" rel="external nofollow">تجربة مستخدم مع حركات لتطبيق بريد إلكتروني</a>
</h2>

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

<p style="text-align: center;">
	<a href="https://codepen.io/Lance-Jernigan/pen/yJbXOK" rel="external nofollow"><img class="ipsImage ipsImage_thumbnailed" data-fileid="30884" data-unique="buiy86t0e" src="https://academy.hsoub.com/uploads/monthly_2019_07/004736-Email-App-UI-With-Animations.jpg.bccd7e7aca1098bb5d14093b4772336d.jpg" style="width: 573px; height: auto;" alt="004736-Email-App-UI-With-Animations.jpg"></a>
</p>

<h2 id="-https-codepen-io-fbrz-pen-bndmwz-">
	<a href="https://codepen.io/fbrz/pen/bNdMwZ" rel="external nofollow">سحب القائمة - مفهوم القائمة التفاعلية</a>
</h2>

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

<p style="text-align: center;">
	<a href="https://codepen.io/fbrz/pen/bNdMwZ" rel="external nofollow"><img class="ipsImage ipsImage_thumbnailed" data-fileid="30885" data-unique="7jp5ngyox" src="https://academy.hsoub.com/uploads/monthly_2019_07/004737-Pull-Menu-Menu-Interaction-Concept.jpg.f591596cb15aaba5e72a423db2d36997.jpg" style="width: 573px; height: auto;" alt="004737-Pull-Menu-Menu-Interaction-Concept.jpg"></a>
</p>

<h2 id="-ios-7-https-codepen-io-rikschennink-pen-zvcgx">
	<a href="https://codepen.io/rikschennink/pen/zvcgx" rel="external nofollow">الترويسات الضبابية iOS 7 </a>
</h2>

<p>
	هذه حركة رائعة يمكنك استخدامها لإضافة تأثير ضبابي لترويسات (headers) تطبيق iOS الخاص بك.
</p>

<p style="text-align: center;">
	<a href="https://codepen.io/rikschennink/pen/zvcgx" rel="external nofollow"><img class="ipsImage ipsImage_thumbnailed" data-fileid="30886" data-unique="h2eip5sxk" src="https://academy.hsoub.com/uploads/monthly_2019_07/004739-iOS-7-Blurred-Header.jpg.1a3f6689368f0c9910a419ccd3d7ff41.jpg" style="width: 573px; height: auto;" alt="004739-iOS-7-Blurred-Header.jpg"></a>
</p>

<h2 id="-https-codepen-io-plloyd11-pen-yepogo-">
	<a href="https://codepen.io/plloyd11/pen/yepOGO" rel="external nofollow">قائمة تذييل تطبيق الجوال المتحركة</a>
</h2>

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

<p style="text-align: center;">
	<a href="https://codepen.io/plloyd11/pen/yepOGO" rel="external nofollow"><img class="ipsImage ipsImage_thumbnailed" data-fileid="30887" data-unique="u30z5inem" src="https://academy.hsoub.com/uploads/monthly_2019_07/004741-Animated-Mobile-Footer-Menu.jpg.5275dbb1210fccc88d39a63012568af0.jpg" style="width: 573px; height: auto;" alt="004741-Animated-Mobile-Footer-Menu.jpg"></a>
</p>

<h2 id="-https-codepen-io-adam2326-pen-qwqmex-">
	<a href="https://codepen.io/adam2326/pen/QwQmEX" rel="external nofollow">التصميم الدَّوامِي للتطبيق</a>
</h2>

<p>
	هذا تخطيط دوَّامي بسيط لكنَّه مؤثر جدًا يمكنك استخدامه في العديد من تطبيقات الجوال. اطلع عليه وانظر ما إذا كان يناسب نمط تصميمك.
</p>

<p style="text-align: center;">
	<a href="https://codepen.io/adam2326/pen/QwQmEX" rel="external nofollow"><img class="ipsImage ipsImage_thumbnailed" data-fileid="30888" data-unique="wdqxmtuvz" src="https://academy.hsoub.com/uploads/monthly_2019_07/004742-Swipe-mobile-layout.jpg.68cc63a2f52e1b9fc6cad3806dac2481.jpg" style="width: 573px; height: auto;" alt="004742-Swipe-mobile-layout.jpg"></a>
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://line25.com/inspiration/mobile-app-animation" rel="external nofollow">Mobile App Animation | 20 Excellent Examples</a> من موقع line25
</p>
]]></description><guid isPermaLink="false">723</guid><pubDate>Sat, 03 Aug 2019 18:04:01 +0000</pubDate></item><item><title>&#x62D;&#x631;&#x643;&#x627;&#x62A; &#x627;&#x644;&#x648;&#x64A;&#x628; &#x645;&#x627; &#x628;&#x639;&#x62F; &#x639;&#x635;&#x631; &#x627;&#x644;&#x641;&#x644;&#x627;&#x634; (Flash)</title><link>https://academy.hsoub.com/programming/general/%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%85%D8%A7-%D8%A8%D8%B9%D8%AF-%D8%B9%D8%B5%D8%B1-%D8%A7%D9%84%D9%81%D9%84%D8%A7%D8%B4-flash-r722/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_07/5d3eae3e7286f_.jpg.ee939f0f0e636b98c4959a5a007ca92d.jpg" /></p>

<p>
	تتغير العناصر البصرية حولنا مع الزمن، ونحس بهذا التغيير كحركة. تكمل عقولنا العناصر المفقودة في مقاطع الفيديو أو اللوحات الفنية باستخدام تصورنا، من أجل إنتاج شعور بالحركة. نستخدمُ الرمز في كثير من الأحيان لنقل فكرة، إذ نحاول تقديم غاية القصة بصريًا لنمنح غيرنا فهمًا أعمق.
</p>
<style type="text/css">
table {
    width: 100%;
}

thead {
    vertical-align: middle;
    text-align: center;
}

td, th {
    border: 1px solid #dddddd;
    text-align: right;
    padding: 8px;
    text-align: inherit;

}
tr:nth-child(even) {
    background-color: #dddddd;
}</style>
<p>
	فكرة جيدة أن نستخدام نوعًا من التصوُّر لرسم صورة كاملة للقصة التي نحاول سردها، إلا أن استخدام الحركات لتوصيل الرسالة يمكن أن يكون أفضل؛ إذا كانت الصورة تستحق ألف كلمة، فكم ستستحق من الحركات لوصفها؟
</p>

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

<h2 id="-">
	كيف بدأت حركات الويب
</h2>

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30865" href="https://academy.hsoub.com/uploads/monthly_2019_07/toptal-blog-image-1438754677783-280579448a03bb07efa6c772097689d5.gif.412916ee88481975907a4c1129e1ff38.gif" rel=""><img alt="toptal-blog-image-1438754677783-280579448a03bb07efa6c772097689d5.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="30865" data-unique="ijoa9fmqd" src="https://academy.hsoub.com/uploads/monthly_2019_07/toptal-blog-image-1438754677783-280579448a03bb07efa6c772097689d5.thumb.gif.3825c48d0a840dfd1cab0a4879ff5adf.gif"></a>
</p>

<p>
	حركات GIF كانت البداية في نهضة <a href="https://www.toptal.com/designers/web" rel="external nofollow">تصميم الويب</a> لكنها لم تكن مثالية. صور GIF ثقيلة نسبيًا؛ فالنتيجة عادة ما تكون دقة منخفضة، وتسلسل غير متساوي في توزيع الضوء و لوحة ألوان ذات 8 بت محدودة، ما أدى إلى القليل من التردد للمصممين بخصوص عدد الألوان اللازم استخدامها في المشهد.
</p>

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

<p>
	قدَّم Flash لمحة عن إمكانيات <a href="https://www.toptal.com/designers/web/portfolios" rel="external nofollow">تصميم الويب الديناميكي</a>، الذي يتيح للمصممين إعادة الفحص وتجريب الأأداء ما سبب فترة من التطور السريع في حركات الويب.
</p>

<p>
	رسوم Flash المتحركة بُنيَت بِواسطة Flash أو برمجات التحريك المماثلة، وغالبًا ما يتم توزيعها بتنسيق ملف SWF، وهي خفيفة الحجم وسهلة الصنع. فملف يستخدم الصوت مع وضوح وبدون فقدان في دقة رسومات المتجهات وبحجم كيلوبايتات قليلة يجعل التحريك عملية بسيطة ولا تضيف كثيرا إلى وقت تحميل الصفحة. التفاعل في Flash ممكنًا من خلال (Action Script (AS، لغة برمجة كائنية التوجه مثل javascript. تم تصميم AS في البداية لتدير تحريكات المتجهات ذات بعدين (2d).
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30868" href="https://academy.hsoub.com/uploads/monthly_2019_07/toptal-blog-image-1438754691344-81b7402b311d05d42d7f6801e1943dc3.gif.efb3573f5291e57a2ea733df9c177486.gif" rel=""><img alt="toptal-blog-image-1438754691344-81b7402b311d05d42d7f6801e1943dc3.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="30868" data-unique="8mfmkpq6w" src="https://academy.hsoub.com/uploads/monthly_2019_07/toptal-blog-image-1438754691344-81b7402b311d05d42d7f6801e1943dc3.thumb.gif.28402475333304f63355927b52cca21e.gif"></a>
</p>

<p>
	قال Jobs:
</p>

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

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

<h2 id="-">
	حركات الويب هذه الأيام
</h2>

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

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30866" href="https://academy.hsoub.com/uploads/monthly_2019_07/toptal-blog-image-1438754756202-e0461584f828bbeea6816f9a4b0f1cb0.gif.8eba77c6aa8f506c89e6bd166b31a272.gif" rel=""><img alt="toptal-blog-image-1438754756202-e0461584f828bbeea6816f9a4b0f1cb0.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="30866" data-unique="8tnzk9ll2" src="https://academy.hsoub.com/uploads/monthly_2019_07/toptal-blog-image-1438754756202-e0461584f828bbeea6816f9a4b0f1cb0.thumb.gif.a3a7c3afa9e53dc40ee7bc189fa1f22b.gif"></a>
</p>

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

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

<h2 id="-">
	لماذا تستخدم الحركات في المواقع
</h2>

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

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

	<p>
		لا تنظر إلى الحركات من منظور تقني بحت، بل عليك أن تنظر لها من منظور المستخدم أيضًا.
	</p>
</blockquote>

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

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

<p>
	من وجهة نظر منطقية، يمكننا تقسيم الحركات على شبكة الإنترنت إلى نوعين أساسيين:
</p>

<ul>
<li>
		الحركات الثابت مع منطق بسيط، لا توجد معايير ديناميكية معقدة، على سبيل المثال الرسوم المتحركة ‎.gif.
	</li>
	<li>
		الحركات الديناميكية مع نوع من مشاركة المستخدم، يعتمد على إدخال المستخدم، والمتغيرات الأخرى، ويمكن أن يكون له العديد من النتائج المختلفة.
	</li>
</ul>
<p>
	الحركات الديناميكية لها منطقها الخاص، محددةً كيفية جريان الحركة. أفضل مثال على الحركات الديناميكية هو الألعاب، حيث يتعامل المستخدمون مع المحتوى على الشاشة. مثال بسيط هو تغيير مواضع العناصر من خلال التمرير الذي يتحكم فيْه المستخدم حسب مكانه في الموقع، هذا يستفتح سلسلة من الحركات. <a href="http://ivo.sinmc.org/" rel="external nofollow">هنا أمثلة واضحة</a>.
</p>

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

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

<h2 id="-">
	إيجابيات وسلبيات حركات الويب
</h2>

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

<table><tbody>
<tr>
<td>
				<strong>التقنية</strong>
			</td>
			<td>
				<strong>الإيجابيات</strong>
			</td>
			<td>
				<strong>السلبيات</strong>
			</td>
		</tr>
<tr>
<td>
				GIF
			</td>
			<td>
				بسيطة ومتاحة للجميع؛ لأنها تتيح تسلسل الصور المتحركة، ويمكن أن تكون مثل الفيديو
			</td>
			<td>
				وزن ملفات gif المتحركة ضخم. الشفافية مروعة. لا تدعم مجرى ألفا. لديها ضغط منخفض. ومنقطة.
			</td>
		</tr>
<tr>
<td>
				APGN
			</td>
			<td>
				يدعم قناة ألفا.
			</td>
			<td>
				غير معتمد في جميع المتصفحات.
			</td>
		</tr>
<tr>
<td>
				Flash
			</td>
			<td>
				ملف (swf) المتحرك له وزن منخفض. سريع وتفاعلي. تتيح تحريك المتجهات. التحريك العضوي في بيئة مستخدم بسيطة، لا عشوائية أو تخمين في الكود. يمكن أن يتم ذلك بشكل متجاوب.
			</td>
			<td>
				لم تعد مدعومة على منصات الهواتف المحمولة.
			</td>
		</tr>
<tr>
<td>
				HTML/CSS
			</td>
			<td>
				بسيطة وسهلة التعلم. جيدة للتحويلات والانتقالات. تُنفذ الرسوم المتحركة لـ HTML / CSS على الأجهزة المحمولة. تتيح التحريك للمتجهات أو نقاط الشاشة pixel. يمكن معالجة رسومات (SVG)
			</td>
			<td>
				لا يمكن تنشيط جميع خصائص SVG باستخدام CSS. لديها إمكانيات محدودة لِجافا سكريبت و SMIL .تفعل ما يُبرمجه مصممها ولذلك فهي أحد التقنيات الثابتة، لا يمكن الاستجابة للمدخلات الجديدة أو البيئة المتغيرة (التحريك الديناميكي).
			</td>
		</tr>
<tr>
<td>
				SMIL
			</td>
			<td>
				مدمجة وقادرة على تنشيط الخصائص التي لا تستطيع CSS التعامل معها. يُحافَظ عليها عندما يتم تضمين SVG كصورة.
			</td>
			<td>
				غير مدعوم في جميع المتصفحات.
			</td>
		</tr>
<tr>
<td>
				JavaScript
			</td>
			<td>
				يجعل التحريك سهل إذا كنت تستخدم مكتبة رسوم متحركة لـ SVG تنشئ تسلسل صور (تسلسل .png)
			</td>
			<td>
				لا يُحافَظ عليه عندما يتم تضمين SVG كصورة
			</td>
		</tr>
</tbody></table>
<p>
	ولكن ماذا عن إيجابيات وسلبيات حركات الويب بشكل عام؟ حتى الحركات جيدة التنفيذ يمكن أن تبدو في غير محلها بعض الأحيان، لذلك من الأفضل دائمًا أن تطرح بعض الأسئلة على نفسك (والعميل) قبل مواصلة إضافه الحركات في تصميمك.
</p>

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

<ul>
<li>
		تفحُّص عن كثب للتصميم الحالي (إن وجد).
	</li>
	<li>
		تفحص الجمهور المستهدف ومنصات أجهزته.
	</li>
	<li>
		تحقق من زمن تحميل الموقع وتحمُّل وحدة المعالجة المركزية CPU.
	</li>
	<li>
		استعرِض البدائل الأخرى.
	</li>
	<li>
		دائما ضع خاصية سهولة الإستخدام في الحسبان.
	</li>
</ul>
<p>
	قرار استخدام الحركات يجب أن يكون كأي قرار تصميم آخر؛ عليك أن تزن الإيجابيات والسلبيات وتتأكد من أن تجربة المستخدم لا تتأثرسلبًا، وأنك لن تتعثر مع الكثير من التعليمات البرمجية غير الفعالة (والتي قد تضطرك لإضافة شيفرة جديدة والتحديثات في وقت لاحق).
</p>

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

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

<p>
	ترجمة -وبتصرف- للمقال <a href="https://www.toptal.com/designers/web/animating-the-web-in-the-post-flash-era" rel="external nofollow">Web Animation In The Post-Flash Era</a> لصاحبته Ana Gregurec
</p>
]]></description><guid isPermaLink="false">722</guid><pubDate>Mon, 29 Jul 2019 08:39:03 +0000</pubDate></item><item><title>&#x627;&#x644;&#x636;&#x63A;&#x637; &#x627;&#x644;&#x646;&#x634;&#x637; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; GZIP</title><link>https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%B6%D8%BA%D8%B7-%D8%A7%D9%84%D9%86%D8%B4%D8%B7-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-gzip-r686/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5cf58eb0eb4b4_.png.f734cf017f06b88341d86b7e9b40b75b.png" /></p>

<p>
	يُخفّض الضّغط من أوقات الاستجابة من خلال تقليص حجم استجابة HTTP. يُعدُّ Gzip طريقةَ الضّغط الأكثر شيوعًا وفعاليّةً في الوقت الحاضر و عادةً ما يُقلّص حجم الاستجابة بما يقارب 70%.
</p>

<p>
	في عام 2009، كانت 90% من حركة البيانات على الإنترنت تعبر من خلال متصفّحات تدعم Gzip. أمّا <a href="https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/optimize-encoding-and-transfer?hl=en#text-compression-with-gzip" rel="external nofollow">اليوم</a>:
</p>

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

	<p>
		تدعم جميع المُتصفّحات الحديثة وتُفاوض أوتوماتيكيًّا لإجراء الضّغط باستخدام GZIP لجميع طلبيات HTTP؛ واجبنا أن نضمن إعداد الخادم على نحوٍ سليم لتخديم الموارد المضغوطة عند طلبها من قبل العميل.
	</p>
</blockquote>

<p>
	يمكنك القيام بذلك على خادم مبنيٍّ على Apache من خلال الملف <code>‎.htaccess</code>:
</p>

<pre class="ipsCode" id="ips_uid_2389_6">
# BEGIN GZIP
&lt;ifmodule mod_deflate.c&gt;
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
&lt;/ifmodule&gt;
# END GZIP
</pre>

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

<p>
	يُقدّم مشروع HTML5 Boilerplate <a href="https://github.com/h5bp/server-configs" rel="external nofollow">إعدادات الخواديم</a> لجميع الخواديم الشائعة. هذه هي نسخة المشروع لملف <code>htaccess</code>.
</p>

<pre class="ipsCode">
&lt;IfModule mod_filter.c&gt;
    AddOutputFilterByType DEFLATE <span class="hljs-string">"application/atom+xml"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"application/javascript"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"application/json"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"application/ld+json"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"application/manifest+json"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"application/rdf+xml"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"application/rss+xml"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"application/schema+json"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"application/vnd.geo+json"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"application/vnd.ms-fontobject"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"application/x-font-ttf"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"application/x-javascript"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"application/x-web-app-manifest+json"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"application/xhtml+xml"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"application/xml"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"font/eot"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"font/opentype"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"image/bmp"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"image/svg+xml"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"image/vnd.microsoft.icon"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"image/x-icon"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"text/cache-manifest"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"text/css"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"text/html"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"text/javascript"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"text/plain"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"text/vcard"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"text/vnd.rim.location.xloc"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"text/vtt"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"text/x-component"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"text/x-cross-domain-policy"</span> <span class="hljs-string">\</span>
                                  <span class="hljs-string">"text/xml"</span>
&lt;/IfModule&gt;
</pre>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://css-tricks.com/snippets/htaccess/active-gzip-compression/" rel="external nofollow">Active Gzip Compression</a> لصاحبه Chris Coyier
</p>
]]></description><guid isPermaLink="false">686</guid><pubDate>Mon, 03 Jun 2019 21:23:28 +0000</pubDate></item><item><title>&#x62B;&#x645;&#x627;&#x646;&#x64A; &#x646;&#x635;&#x627;&#x626;&#x62D; &#x644;&#x62C;&#x639;&#x644; &#x642;&#x627;&#x626;&#x645;&#x629; &#x627;&#x644;&#x62A;&#x646;&#x642;&#x644; &#x641;&#x64A; &#x627;&#x644;&#x645;&#x648;&#x642;&#x639; &#x623;&#x643;&#x62B;&#x631; &#x642;&#x627;&#x628;&#x644;&#x64A;&#x629; &#x644;&#x644;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645;</title><link>https://academy.hsoub.com/programming/general/%D8%AB%D9%85%D8%A7%D9%86%D9%8A-%D9%86%D8%B5%D8%A7%D8%A6%D8%AD-%D9%84%D8%AC%D8%B9%D9%84-%D9%82%D8%A7%D8%A6%D9%85%D8%A9-%D8%A7%D9%84%D8%AA%D9%86%D9%82%D9%84-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D9%88%D9%82%D8%B9-%D8%A3%D9%83%D8%AB%D8%B1-%D9%82%D8%A7%D8%A8%D9%84%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-r680/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_05/5ce984823f127_.png.72db84e12d21ce4c711e93f21afbce88.png" /></p>

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

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

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

<h2 id="1-">
	1. التنقل الثابت
</h2>

<p>
	<img alt="fixed.png" class="ipsImage ipsImage_thumbnailed" data-fileid="29608" data-unique="tog5c6hc9" src="https://academy.hsoub.com/uploads/monthly_2019_05/fixed.png.7686e5f5071297053d8c760c71ff7904.png"></p>

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

<p>
	بفرض أن موقعك يحتوي شريط تنقل أفقي، فسيمرر زائر الموقع وصولًا لنهاية الصفحة ثم قد يريد بعد ذلك إلقاء نظرة على صفحة «حول الموقع» (About Our Website)! سيحتاج آنذاك إلى التمرير طويلًا للأعلى للعثور على رابط الصفحة المنشودة .القائمة الثابتة في أعلى الصفحة تساعدك على حل هذه المشكلة.
</p>

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

<h2 id="2-">
	2. الاهتمام بعملية التنقل على نسخة الهاتف المحمول
</h2>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="29609" href="https://academy.hsoub.com/uploads/monthly_2019_05/mobile.png.bf8862dca6838ddc1b0aa0a6c61aa924.png" rel=""><img alt="mobile.png" class="ipsImage ipsImage_thumbnailed" data-fileid="29609" data-unique="lj0368rgl" src="https://academy.hsoub.com/uploads/monthly_2019_05/mobile.thumb.png.4f1bcd2797b68a4d5ef3237fae07c1ac.png"></a>
</p>

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

<p>
	الجوانب السلبية الوحيدة لنظام التنقل في موقع الويب خاصتك عبر الأجهزة المحمولة هي أنهم لا يحصلون على دعم الحومان (hover).
</p>

<p>
	لذلك، إذا كنت قد كتبت استعلام الوسائط (media query) بطريقة تعتمد على التنقل مع تأثيرات الحومان (hover)، قد تبدو موحدة على الأجهزة المحمولة ولكنها لن تؤدي نفس العمل.
</p>

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

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

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

<h2 id="3-">
	3. وضع شريط للبحث
</h2>

<p>
	<img alt="search.png" class="ipsImage ipsImage_thumbnailed" data-fileid="29611" data-unique="wspmgqryo" src="https://academy.hsoub.com/uploads/monthly_2019_05/search.png.e1085a9d55565df637a4eda853eea089.png"></p>

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

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

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

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

<h2 id="4-">
	4. قائمة أفضل تنظيما
</h2>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="29610" href="https://academy.hsoub.com/uploads/monthly_2019_05/organized.png.58f6e9c1853b31c6338ba42e1b90e6f5.png" rel=""><img alt="organized.png" class="ipsImage ipsImage_thumbnailed" data-fileid="29610" data-unique="pr59yzg2l" src="https://academy.hsoub.com/uploads/monthly_2019_05/organized.thumb.png.9ed6d85ed57c9dfc149956ad0e4a4442.png"></a>
</p>

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

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

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

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

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

<h2 id="5-">
	5. القائمة العمودية
</h2>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="29612" href="https://academy.hsoub.com/uploads/monthly_2019_05/vertical.png.b7418111db205ba4a7e2fad6c8cec88c.png" rel=""><img alt="vertical.png" class="ipsImage ipsImage_thumbnailed" data-fileid="29612" data-unique="vsy5pxvr8" src="https://academy.hsoub.com/uploads/monthly_2019_05/vertical.thumb.png.57566742960bb64bfbaf05020e010133.png"></a>
</p>

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

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

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

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

<h2 id="6-">
	6. تقييم عناصر القائمة
</h2>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="29607" href="https://academy.hsoub.com/uploads/monthly_2019_05/evaluate.png.8d0978c7151247b0d2d90f53a302360b.png" rel=""><img alt="evaluate.png" class="ipsImage ipsImage_thumbnailed" data-fileid="29607" data-unique="plqi16zkx" src="https://academy.hsoub.com/uploads/monthly_2019_05/evaluate.thumb.png.75f482ad6fe6e558f7cda368bb417257.png"></a>
</p>

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

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

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

<p>
	قد تكون الأداة Google Analytics أفضل طريقة لك لمعرفة روابط التنقل التي يتم النقر عليها. وترشِّح الأداة Goto Behavio Filter النتيجة التي تبدأ بـ / أو الصفحة الرئيسية.
</p>

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

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

<h2 id="7-">
	7. تجنب الكثير من التشعبات
</h2>

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

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

<h2 id="8-">
	8. أشياء متنوعة بسيطة
</h2>

<p>
	هناك بعض الأشياء المتنوعة التي يمكنك أخذها بالحسبان أثناء تصميم قائمة التنقل وهي:
</p>

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

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

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

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

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

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

<p>
	ترجمة -وبتصرف- للمقال <a href="https://www.script-tutorials.com/eight-tips-to-make-website-navigation-menu-more-usable/" rel="external nofollow">Eight tips to make website navigation menu more usable</a> لصاحبه Darshan
</p>
]]></description><guid isPermaLink="false">680</guid><pubDate>Sun, 02 Jun 2019 08:07:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x641;&#x631;&#x642; &#x628;&#x64A;&#x646; &#x627;&#x644;&#x636;&#x63A;&#x637; (Gzipping) &#x648;&#x627;&#x644;&#x62A;&#x635;&#x63A;&#x64A;&#x631; (Minification)</title><link>https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%B6%D8%BA%D8%B7-gzipping-%D9%88%D8%A7%D9%84%D8%AA%D8%B5%D8%BA%D9%8A%D8%B1-minification-r679/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_05/5ce96c5c82110_.png.65ff3df43149fec5962ee31a61553703.png" /></p>

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

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

<p>
	يُنشئ التّصغير ملفًا جديدًا تقومُ أنتَ باستخدامه في نهاية المطاف. على سبيل المثال، تستطيع إنشاء ملف <code>style.css</code> لتعمل عليه، ومن ثمّ بإمكانك تصغيره إلى <code>style.min.css</code>.
</p>

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

<p>
	قدّمت جوليا إيفانز Julia Evans طريقةً رائعة لفهم ما سبق (<a href="http://jvns.ca/blog/2013/10/24/day-16-gzip-plus-poetry-equals-awesome/" rel="external nofollow">راجع منشورها والفيديو</a>). إليك الفقرة الأولى من القصيدة:
</p>
<style type="text/css">
.red {
    color: red;
}</style>
<div dir="LTR">
	<p>
		Once upon a midnight dreary, while I <span class="red">{pon}</span>dered weak an<span class="red">{d wea}</span><span class="red">{ry,}</span><br>
		Over many<span class="red">{ a }</span>quaint<span class="red">{ and }</span>curious volume of forgotten lore,<br>
		W<span class="red">{hile I }</span>nodded, n<span class="red">{ear}</span>ly napping, su<span class="red">{dde}</span>n<span class="red">{ly }</span>th<span class="red">{ere}</span> ca<span class="red">{me }</span>a t<span class="red">{apping,}</span><br>
		As<span class="red">{ of }</span>so<span class="red">{me o}</span>ne gent<span class="red">{ly }</span>r<span class="red">{apping, }</span><span class="red">{rapping}</span> at my chamb<span class="red">{er }</span>door.<br>
		`'Tis<span class="red">{ some }</span>visitor,'<span class="red">{ I }</span>mu<span class="red">{tte}</span>r<span class="red">{ed, }</span>`t<span class="red">{apping at my chamber door}</span> -<br>
		O<span class="red">{nly th}</span>is,<span class="red">{ and }</span>no<span class="red">{thi}</span><span class="red">{ng }</span>m<span class="red">{ore}</span>.
	</p>
</div>

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

<p>
	تخيّل فقط عدد مرّات ورود <code>‎&lt;div</code> في ملف HTML أو عدد مرّات ورود <code>{</code> في ملف CSS.
</p>

<p>
	يمكنك إنشاء إصدارات مضغوطة من الملفات، على سبيل المثال style.css.zip لكنّك <strong>نادرًا ما ستضطّر لذلك</strong> و<strong>لن يعرف المتصفّح ماذا يفعل بهذه الإصدارات</strong>.
</p>

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

<p>
	<a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%B6%D8%BA%D8%B7-%D8%A7%D9%84%D9%86%D8%B4%D8%B7-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-gzip-r686/" rel="">إليك كيفيّة تفعيل عمليّة الضّغط على خادم Apache</a> من خلال استخدام الوحدة <code>mod_deflate</code> . كما يّقدّم H5BP <a href="https://github.com/h5bp/server-configs" rel="external nofollow">إعدادات الخواديم</a> لجميع الخواديم الشّائعة التي تدعم الضّغط.
</p>

<h2 id="-">
	مثال
</h2>

<p>
	سنستخدم ملف CSS من <a href="http://getbootstrap.com/" rel="external nofollow">Bootstrap</a> على اعتباره مرجعًا شائعًا.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="29605" href="https://academy.hsoub.com/uploads/monthly_2019_05/001compressing.jpg.f7d98defbdbac0386d6334aaafea663d.jpg" rel=""><img alt="001compressing.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="29605" data-unique="u6f04uh7b" src="https://academy.hsoub.com/uploads/monthly_2019_05/001compressing.thumb.jpg.0485e9e89ec68e1c25966da58c363061.jpg"></a>
</p>

<p>
	ستُوفّر ما يقارب 17% عند تصغير ملف CSS، أو 85% عند ضغطه أو 86% عند قيامك بكليهما. الوضع المثاليّ عند التأكد من عمل كلِّ شيءٍ كما ينبغي من خلال أدوات المطور (DevTools) موضّح كما يلي:
</p>

<p>
	<img alt="002idealDevTools.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="29606" data-unique="lxpnji4rm" src="https://academy.hsoub.com/uploads/monthly_2019_05/002idealDevTools.jpg.6aee9712c290ef61471904e6a200c639.jpg"></p>

<p>
	الضّغط أكثر فعاليّة، لكنّ القيام بكليهما هو الأفضل بالمطلق.
</p>

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

<p>
	هناك أيضًا <a href="http://carlos.bueno.org/2010/02/measuring-javascript-parse-and-load.html#minifi" rel="external nofollow">دليلٌ</a> على أنّ المتصفّحات تقرأ وتحلّل الملف المُصغّر أسرع:
</p>

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

	<p>
		كما هو مُتوقّع، يُفيد التّصغير في التّحليل والتّحميل parse-n-load بالإضافة إلى زمن الإرسال عبر الشّبكة. يعود هذا على الأرجح إلى غياب التّعليقات والفواصل الإضافيّة.
	</p>
</blockquote>

<p>
	شرَعَت مايكروسوفت هي الأخرى بتحسين مُحلّلاتها لهذا الأمر:
</p>

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

	<p>
		لقد أضَفنا في كلٍّ من النّظام Windows 10 والمتصفّح Microsoft Edge مسارات سريعة جديدة، كما طوّرنا الإدخالات السّطريّة، وعمدنا إلى تحسين بعض الكسبيّة في مترجم Chakra الآنيّ لضمان تنفيذ الشّيفرة البرمجيّة المُصغّرة بسرعةٍ تُضاهي، إن لم تكون تفوق الإصدارات غير المُصغّرة. تحسّن بفضل هذه التّغييرات أداء أنماط الشّيفرات البرمجيّة المنفردة المُصغّرة باستخدام UglifyJS التي اختبرناها بمقدارِ يتراوح بين 20% إلى 50%.
	</p>
</blockquote>

<p>
	يندرج <em>التّخزين المؤقّت</em> للأصول في هذا السّياق أيضًا حيث لا يوجد ما هو أسرع من مُتصفّح لا يحتاج إلى طلب الأصول على الإطلاق. يوجد الكثير من المعلومات حول هذا الموضوع على الوِيب (أو في <a href="https://www.amazon.com/Designing-Performance-Weighing-Aesthetics-Speed/dp/1491902515/ref=as_li_ss_tl?ie=UTF8&amp;linkCode=sl1&amp;tag=css-tricks-20&amp;linkId=d4d794b5604a084164c8ba33d2540283" rel="external nofollow">الكتب</a>)، وقد نقوم بنشر مقال حول هذا الموضوع قريبًا.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://css-tricks.com/the-difference-between-minification-and-gzipping/" rel="external nofollow">The Difference Between Minification and Gzipping</a> لصاحبه Chris Coyier
</p>
]]></description><guid isPermaLink="false">679</guid><pubDate>Sun, 26 May 2019 08:07:00 +0000</pubDate></item><item><title>&#x62A;&#x639;&#x644;&#x645; &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;</title><link>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/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_03/Blog-Cover.png.10faad5e8a7964acb6e9f3e9b9d1c964.png" /></p>
<p>
	"أريد تعلم البرمجة لكنني لا أعرف من أين أبدأ!" هذه هي أكثر عبارة تتردد على سمعي من حديثي العهد بالبرمجة، إذ يأتيني هذا السؤال مرارًا وتكرارًا؛ وفي كل مرة أحاول أن أجيب عنه في سياقه، أجد أنني أضيف معلومات جديدة على إجاباتي السابقة، لذا قررت كتابة هذا المقال بعنوان "تعلم البرمجة" لعله يفيد الراغبين في تعلم تطوير التطبيقات في بدء رحلتهم مع تعلم البرمجة من الصفر.
</p>

<h2 id="">
	جدول المحتويات
</h2>

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

<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/#%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9%D8%9F" rel="">ما هي البرمجة؟</a>
	</li>
	<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/#%D9%84%D9%85%D8%A7%D8%B0%D8%A7-%D8%AA%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9%D8%9F" rel="">لماذا تتعلم البرمجة؟</a>
	</li>
	<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/#%D9%85%D8%A7-%D8%B9%D9%84%D9%8A%D9%83-%D9%85%D8%B9%D8%B1%D9%81%D8%AA%D9%87-%D9%84%D8%AA%D8%B5%D8%A8%D8%AD-%D9%85%D8%A8%D8%B1%D9%85%D8%AC%D8%A7" rel="">ما عليك معرفته لتصبح مبرمجًا</a>
	</li>
	<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/#%D8%A7%D9%84%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%A7%D9%84%D9%84%D8%A7%D8%B2%D9%85%D8%A9-%D9%84%D9%84%D8%A8%D8%AF%D8%A1-%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" rel="">الأدوات اللازمة للبدء في تعلم البرمجة</a>
	</li>
	<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/#%D9%84%D9%85%D8%A7%D8%B0%D8%A7-%D9%87%D9%86%D8%A7%D9%83-%D8%A7%D9%84%D8%B9%D8%AF%D9%8A%D8%AF-%D9%85%D9%86-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9%D8%9F" rel="">لماذا هناك العديد من لغات البرمجة؟</a>
	</li>
	<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/#%D9%85%D9%81%D8%A7%D9%87%D9%8A%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%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r662/#%D9%85%D8%B5%D8%A7%D8%AF%D8%B1-%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%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r662/#%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>
	<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/#%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D8%A7%D8%AC%D9%87%D8%A7%D8%AA-%D8%A7%D9%84%D8%AE%D9%84%D9%81%D9%8A%D8%A9" rel="">تطوير الواجهات الخلفية</a>
	</li>
	<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/#%D8%AA%D8%B9%D9%84%D9%85-%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%D8%AC%D9%88%D8%A7%D9%84" rel="">تعلم تطوير تطبيقات الجوال</a>
	</li>
	<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/#%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%A3%D9%84%D8%B9%D8%A7%D8%A8" rel="">تطوير الألعاب</a>
	</li>
	<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/#%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D8%A3%D9%86%D8%B8%D9%85%D8%A9-%D8%A7%D9%84%D9%85%D8%AF%D9%85%D8%AC%D8%A9" rel="">تطوير الأنظمة المدمجة</a>
	</li>
	<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/#%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%B3%D8%B7%D8%AD-%D8%A7%D9%84%D9%85%D9%83%D8%AA%D8%A8" rel="">تطوير تطبيقات سطح المكتب</a>
	</li>
	<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/#%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D9%8A-%D8%AA%D9%86%D8%A7%D8%B3%D8%A8%D9%83" rel="">كيفية اختيار لغة البرمجة التي تناسبك</a>
	</li>
	<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/#%D9%86%D8%B5%D8%A7%D8%A6%D8%AD-%D9%84%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>
</ul>

<h2 id="-1">
	ما هي البرمجة؟
</h2>

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

<p>
	إليك المثال العملي التالي الذي يشرح ماهية البرمجة:
</p>

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

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

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

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

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

<p>
	ربما لاحظتَ في الجملة السابقة أن جزءًا من مهمة المبرمج هو التفكير المنطقي، وهذا يجعلنا ننتقل إلى السؤال الشائع "هل أستطيع <a href="https://academy.hsoub.com/learn-programming/" rel="">تعلم البرمجة</a> وأصبح مبرمجًا؟" أو "هل أنا مؤهل لأصبح مبرمجًا؟".
</p>

<h2 id="-2">
	لماذا تتعلم البرمجة؟
</h2>

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

<p>
	وظائف البرمجة مريحة عمومًا، فالعمل كله مكتبي أمام حاسوب في بيئة مريحة ومناسبة، وأغلبية الشركات تتبع نظام العمل 40 ساعة في الأسبوع (أي 5 أيام لمدة 8 ساعات يوميًا)، ولا تغفل عن قدرتك على العمل عن بعد من خلال الانترنت أو كمستقل في أوقات فراغك.
</p>

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

<h2 id="-3">
	ما عليك معرفته لتصبح مبرمجًا
</h2>

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

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

<h3 id="-4">
	التفكير المنطقي
</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="-5">
	الخوارزميات
</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>

<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> ليست أمرًا معقدًا، سأخبرك بكيفية كتابة برنامج يسأل المستخدم عن سنة ميلاده، ثم يعيد عمره الحالي بالسنوات.
</p>

<ul>
	<li>
		الخطوة الأولى: إظهار رسالة نصية نطلب فيها من المستخدم إدخال تاريخ ميلاده.
	</li>
	<li>
		الخطوة الثانية: تخزين سنة الميلاد التي أدخلها المستخدم.
	</li>
	<li>
		الخطوة الثالثة: الحصول على السنة الحالية.
	</li>
	<li>
		الخطوة الرابعة: طرح مدخلات المستخدم من السنة الحالية.
	</li>
	<li>
		الخطوة الخامسة والأخيرة: إظهار الناتج.
	</li>
</ul>

<p style="text-align: center;">
	<a data-fileext="png" data-fileid="37698" href="https://academy.hsoub.com/uploads/monthly_2020_04/Algorithm-flowchart.png.273896e2eaa582a698cca67e3a7eec00.png" rel=""><img alt="مفهوم الخوازرميات في تعلم البرمجة" data-fileid="37698" src="https://academy.hsoub.com/uploads/monthly_2020_04/Algorithm-flowchart.thumb.png.5b9d9a4f041766eab428b22dc3a1914c.png"></a>
</p>

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

<p style="text-align: center;">
	<a data-fileext="png" data-fileid="37699" href="https://academy.hsoub.com/uploads/monthly_2020_04/Algorithms-problems-solving.png.48a50c7afd5a6f6908be89ff8555eabc.png" rel=""><img alt="خوارزمية جلب مدخلات من المستخدم" data-fileid="37699" src="https://academy.hsoub.com/uploads/monthly_2020_04/Algorithms-problems-solving.thumb.png.2b734a0e0e61bd8a41124e5f5aeb25a9.png"></a>
</p>

<h3 id="-6">
	إطارات العمل
</h3>

<p>
	كلمة أخرى شائعة جدًا في عالم البرمجة هي "إطارات العمل" frameworks، <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> هي مجموعة من الشيفرات البرمجية التي تسهل على المبرمج إنشاء التطبيقات، بتوفير وحدات جاهزة تقدم خدمات متنوعة مثل تسجيل المستخدمين، وإرسال البريد الإلكتروني، والتعامل مع <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>

<h2 id="-7">
	الأدوات اللازمة للبدء في تعلم البرمجة
</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> معين، استعمل ما يحلو لك وما ترى نفسك معتادًا عليه (سواءً كان ويندوز أو لينكس أو ماك).
</p>

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

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

<ul>
	<li>
		المحررات النصية: مثل Visual Studio Code أو Atom أو Sublime Text أو Bracktes أو Notepad++‎. وهذه المحررات النصية تكون بسيطة في أغلبها، وتوفر ميزات أساسية مثل تلوين الشيفرات، وبعض ميزات الإكمال التلقائي، وتدعم أغلبيتها إضافات لزيادة وظائفها. وظيفة هذه المحررات النصية عمومًا هي تعديل الشيفرات بسهولة وسرعة. ننصحك بتجربة Visual Studio Code لشهرته حاليًا وكثرة إضافاته ودعمه الممتاز من شركة Microsoft.
	</li>
	<li>
		بيئات التطوير المدمجة: مثل Visual Studio و Eclipse و Android Studio و NetBeans و Apple Xcode وغيرها. وهذه البيئات توفر ميزات أكثر بكثير من المحررات النصية، مثل تشغيل الشيفرات وتنقيحها (debugging) وميزات التحكم بالإصدارات (version control) والاتصال بقواعد البيانات وخلاف ذلك.
	</li>
</ul>

<h2 id="-8">
	لماذا هناك العديد من لغات البرمجة؟
</h2>

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

<p>
	الحقيقة أنّه توجد لغة برمجة واحدة ولكن ليست إحدى اللغات التي تراها أمامك في الصورة. اللغة التي نشير إليها هي <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="">لغة الآلة</a> التي يستطيع معالج الحاسوب قراءتها وفهمها. أتتساءل ما هي لغة الآلة وكيف تبدو؟ إليك مقطعًا منها:
</p>

<p style="text-align: center;">
	<a data-fileext="png" data-fileid="37701" href="https://academy.hsoub.com/uploads/monthly_2020_04/learning-programming.png.0af8b5457377f20f048206bb05e55d6c.png" rel=""><img alt="learning-programming.png" data-fileid="37701" src="https://academy.hsoub.com/uploads/monthly_2020_04/learning-programming.png.0af8b5457377f20f048206bb05e55d6c.png"></a>
</p>

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

<p>
	سعيًا لإيجاد لغة قريبة من لغة البشر، انقسمت لغات البرمجية إلى قسمين: لغات البرمجة منخفضة المستوى، ولغات البرمجة عالية المستوى وذلك تبعًا لمدى قربها من لغة الآلة أو لغة البشر على التوالي. أي أنّ لغات البرمجة منخفضة المستوى هي اللغات الأقرب للغة الآلة آنفة الذكر مثل لغة التجميع Assembly language، ولغات البرمجة عالية المستوى هي اللغات الأقرب للغة البشر مثل لغة <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a> <a href="https://academy.hsoub.com/programming/java/" rel="">وجافا</a>.
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="480" id="ips_uid_6639_6" referrerpolicy="strict-origin-when-cross-origin" src="https://academy.hsoub.com/applications/core/interface/index.html" title="أنواع لغات البرمجة" width="853" data-embed-src="https://www.youtube.com/embed/BKNJCxHc7-g"></iframe>
</p>

<h3 id="-9">
	تنفيذ البرامج المكتوبة بلغات برمجة عالية المستوى
</h3>

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

<p>
	عرفنا أن المعالج يفهم الأوامر والتعليمات المكتوبة بلغة منخفضة المستوى (لغة الآلة)، فمَثَلُ هذه العملية كمَثَلِ شخصٍ أجنبي تعلم اللغة العربية وبدأ التحدث مع ناطقٍ باللغة العربية، إذ يمكن لهما التواصل مباشرةً - ليخبر كل منها ما يريد من الآخر فعله - دون وسيط. أمَّا مَثَلُ كتابة برنامج بلغة عالية المستوى أقرب إلى لغة البشر والطلب من الحاسوب تنفيذه كمثل ناطق باللغة الهندية يريد التخاطب مع ناطق باللغة العربية دون أن يفقه أحدهما لغة الآخر. في هذه الحالة، لن يستطيع أحدهما فهم ما يتكلم به الآخر وستفشل عملية التواصل. قد تقول: لماذا لا يحضران مترجمًا يترجم ما يقوله كل منها للآخر؟ حسنًا، هذا ما يحصل تمامًا عندما يراد تنفيذ برنامج بلغة لا يفهمها معالج الحاسوب.
</p>

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

<p>
	-المفسر (interpreter): وهو برنامج خاصٌ يفسِّر الشيفرة المصدرية لبرنامج مكتوب بلغة عالية المستوى سطرًا بسطر ويحولها إلى لغة منخفضة المستوى لينفذها الحاسوب مباشرةً. -المترجم (compiler): وهو برنامج خاصٌ يحوِّل الملفات المصدرية لبرنامج مكتوب بلغة عالية المستوى إلى ملف تنفيذي مكتوب بلغة الآلة دفعةً واحدةً، ثم يمكن تشغيل الملف التنفيذي على الحاسوب للقيام بالمهمة المطلوبة.
</p>

<h3 id="-10">
	لماذا يوجد الكثير من لغات البرمجة عالية المستوى؟
</h3>

<p style="text-align: center;">
	<a data-fileext="png" data-fileid="37703" href="https://academy.hsoub.com/uploads/monthly_2020_04/programming-languages-compiling-process.png.4e3a8f9f48e0fa91cc9b0da4d0c1e541.png" rel=""><img alt="صورة توضيحية لتحويل اللغات عالية المستوى إلى لغة الآلة" data-fileid="37703" src="https://academy.hsoub.com/uploads/monthly_2020_04/programming-languages-compiling-process.png.4e3a8f9f48e0fa91cc9b0da4d0c1e541.png"></a>
</p>

<p>
	الآن وبعد أن عرفت الفرق بين لغة الآلة ولغة البشر، لربّما ما زلت تتساءل عن كثرة اللغات البرمجية عالية المستوى المتوافرة وعدم وجود لغة واحدة. نستطيع القول أنك خطوت خطوةً جيدةً للأمام إذ أصبحت الآن أكثر دقة. جواب سؤلك هو أنّ كل لغات البرمجة تُستخدم لتحويل فكرة منطقية إلى سلسلة أوامر يمكن للحاسوب أن ينفذها. فعلى سبيل المثال لا الحصر يمكنك استخدام أي من Ruby أو Java أو Python أو C#‎ أو Go أو JavaScript لبناء موقع ويب. لكن يمكنك أن تعدّ لغات البرمجة على أنها أدوات، وكل أداة تسهّل مهمة دونًا عن أخرى. فعلى سبيل المثال، السيارة والحافلة والدراجة والمحراث الزراعي كلها وسائط نقل، لكنها مختلفة الاستخدام؛ فلا يمكنك أن تذهب وعائلتك لقضاء إجازة صيفية مستخدمين المحراث الزراعي، كما لا يمكنك استخدام سيارة سباق في مدينة مكتظة ذات شوارع ضيقة للذهاب بها إلى العمل. مع أن آلية عمل هذه المركبات متشابهة. والأمر سيانٌ بالنسبة إلى البرمجة.
</p>

<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> واللغات الأنسب لكلٍ منها.
</p>

<h2 id="-11">
	مفاهيم البرمجة
</h2>

<p>
	"حسنًا، اقتنعتُ أن البرمجة مناسبة لي وليست صعبة كما كنتُ أتخيل، من أين أبدأ طريقي في تعلم البرمجة إذًا؟"
</p>

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

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

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

<h3 id="-12">
	المتغيرات والثوابت
</h3>

<p>
	عليك أن تتعرف على مفهوم المتغيرات variables المستعمل في جميع لغات البرمجة، والذي يعني إسناد قيمة ما إلى رمز أو كلمة وتخزين هذه القيمة في الذاكرة. فلو أردنا أن نخزن العبارة "Hello World" في متغير ما فنكتب شيئًا شبيهًا بما يلي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_7715_6" style=""><span class="kwd">var</span><span class="pln"> variable_name </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Hello World"</span><span class="pun">;</span></pre>

<p>
	أي أننا نسند الجزء الموجود على يمين إشارة المساواة إلى المتغير المذكور على يسار إشارة المساواة.
</p>

<p>
	يمكننا أن نستنتج من اسم "المتغيرات" أن قيمتها قابلة للتغيير خلال تنفيذ البرنامج، فيمكننا في مكانٍ ما من الملف المصدري أن نعيد تعريف المتغير السابق بكتابة:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_7715_8" style=""><span class="kwd">var</span><span class="pln"> variable_name </span><span class="pun">=</span><span class="pln"> </span><span class="str">"New value"</span><span class="pun">;</span></pre>

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

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_7715_10" style=""><span class="kwd">const</span><span class="pln"> pi </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3.14</span><span class="pun">;</span></pre>

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

<h3 id="-13">
	الشروط
</h3>

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

<ul>
	<li>
		إذا كان (تاريخ الميلاد أكبر من التاريخ الحالي): نقول للمستخدم أن هنالك خطأ
	</li>
	<li>
		وإلا: سنحسب العمر بطرح تاريخ الميلاد من التاريخ الحالي
	</li>
</ul>

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

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_7715_12" style=""><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> user_birth </span><span class="pun">&gt;</span><span class="pln"> current_year </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
 </span><span class="com">// ERROR!</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">
 age </span><span class="pun">=</span><span class="pln"> current_year </span><span class="pun">-</span><span class="pln"> user_birth</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<h3 id="-14">
	حلقات التكرار
</h3>

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

<p>
	دعنا نعدل الخوارزمية البسيطة لنضيف تكرارًا فيها:
</p>

<p style="text-align: center;">
	<a data-fileext="png" data-fileid="37702" href="https://academy.hsoub.com/uploads/monthly_2020_04/loops-concept-in-a-programming-language.png.8f07252cfabb3f40fa1cd724f6129d68.png" rel=""><img alt="مفهوم حلقات التكرار في لغات البرمجة" data-fileid="37702" src="https://academy.hsoub.com/uploads/monthly_2020_04/loops-concept-in-a-programming-language.thumb.png.c6d4644f310af1c2d4a61824fe05a091.png"></a>
</p>

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

<h3 id="-15">
	الدوال
</h3>

<p>
	الدالة function هي مجموعة من التعليمات البرمجية التي تقبل مدخلات وتعيد القيمة المطلوبة. تكون <a href="https://academy.hsoub.com/programming/javascript/%D8%A7%D9%84%D8%AF%D9%88%D8%A7%D9%84-functions-%D9%81%D9%8A-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D9%8A%D8%A8%D8%AA-r620/" rel="">الدوال </a>عادةً قصيرةً وتقوم بمهمة وحيدة فقط. فمثلًا لو أردنا تعريف دالة باسم divide تقبل عددين، وتعيد ناتج قسمة العدد الكبير على الصغير، فيمكننا أن نكتب الخورزمية الآتية:
</p>

<p style="text-align: center;">
	<a data-fileext="png" data-fileid="37700" href="https://academy.hsoub.com/uploads/monthly_2020_04/function-concept-in-a-programming-language.png.c53fe8b3acdbed3c59889d75ef7a8764.png" rel=""><img alt="مخطط تعريف دالة في أي لغة برمجة" data-fileid="37700" src="https://academy.hsoub.com/uploads/monthly_2020_04/function-concept-in-a-programming-language.thumb.png.3716dd913d76b91e4aafe10e0bd9052d.png"></a>
</p>

<h2 id="-16">
	مصادر تعلم البرمجة للمبتدئين
</h2>

<p>
	أول ما سيتبادر إلى ذهنك بعد قرارك تعلم البرمجة هو من أين سأتعلم؟ هنا يأتي دور القسم التعليمي المتكامل في حسوب ليقدم للمبتدئ (والمحترف على حدٍ سواء) محتوى علمي مميز ومبسط.
</p>

<p>
	تزخر أكاديمية حسوب بالمحتوى المفيد عن تعلم البرمجة للمبتدئين وحتى الخبراء أي على كافة المستويات، ستجد فيها أقسامًا تشرح لغات البرمجة وتقنياتها كلها. ولدينا قسم <a href="https://academy.hsoub.com/questions/" 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>

<p>
	وهنالك <a href="https://www.youtube.com/channel/UCJv37tcBvJlBF2MoVMRMvbQ" rel="external nofollow">قناة للأكاديمية على يوتيوب</a> ننشر فيها دوريًا دروسًا قصيرةً عن تساؤلات محددة ومفاهيم البرمجة وخلافه. لا تنسَ الاشتراك في قناة الأكاديمية لتصلك الفيديوهات الجديدة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="153782" href="https://academy.hsoub.com/uploads/monthly_2024_07/629448258_.png.434dec4a645e7d633a50e2664f8f5e83.png" rel=""><img alt="قناة أكاديمية حسوب على يوتيوب.png" class="ipsImage ipsImage_thumbnailed" data-fileid="153782" data-ratio="66.33" data-unique="wjhlq6b1b" width="900" src="https://academy.hsoub.com/uploads/monthly_2024_07/.thumb.png.a4220664c3b7acbf239b1d6ae9e3d7fc.png"></a>
</p>

<p>
	ماذا لو أردتَ التعمق أكثر في لغة معيّنة؟ تأتي هنا <a href="https://wiki.hsoub.com/" rel="external">موسوعة حسوب</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 style="text-align: center;">
	<a href="https://wiki.hsoub.com/" rel="external"><img alt="الصفحة الرئيسية لموقع موسوعة حسوب الموقع العربي لتوثيقات لغات البرمجة" data-fileid="37826" src="https://academy.hsoub.com/uploads/monthly_2020_04/wiki-hsoub.png.d4a6376df22ab6ffd293db3991b96e0c.png"></a>
</p>

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

<h2 id="-17">
	تطوير واجهات المستخدم
</h2>

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

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

<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>، وبعد كتابة البنية الهيكلية للصفحة سنأتي على تنسيقها باستخدام لغة CSS، وهي اللغة المستعملة لإضفاء شكل وهيئة على عناصر HTML. أي أن عناصر HTML تصف محتوى الصفحة (مثل الترويسات والقوائم والمحتوى الرئيسي والفقرات والروابط والصور والفيدوهات)، وقواعد <a href="https://academy.hsoub.com/programming/html/html-%D9%88-css-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D9%83%D9%8A%D9%81-%D8%AA%D8%B5%D9%85%D9%85-%D8%A3%D9%88%D9%84-%D8%B5%D9%81%D8%AD%D8%A9-%D9%88%D9%8A%D8%A8-%D9%84%D9%83-r242/" rel="">CSS </a> تُعرِّف كيف يجب أن تبدو هذه العناصر (سواءً من ناحية الألوان أو المساحات أو الخلفيات أو الخطوط أو خلاف ذلك).
</p>

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

<p>
	هنالك تقنيات كثيرة تستعمل في تسهيل إنشاء الواجهات الأمامية وسنذكر بعضها:
</p>

<ul>
	<li>
		إطار <a href="https://academy.hsoub.com/programming/css/bootstrap/%D8%AF%D9%84%D9%8A%D9%84%D9%83-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D9%84%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D9%88%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A5%D8%B7%D8%A7%D8%B1-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D8%A8%D9%88%D8%AA%D8%B3%D8%AA%D8%B1%D8%A7%D8%A8-bootstrap-r2256/" rel="">Bootstrap</a> لتسهيل تنسيق عناصر الصفحة.
	</li>
	<li>
		مكتبة jQuery لتسهيل التعامل مع عناصر الصفحة باستخدام JavaScript.
	</li>
	<li>
		مكتبة React JS: لتسهيل تطوير واجهات المستخدم بالاعتماد على مكونات قابلة لإعادة الاستخدام.
	</li>
	<li>
		لغة <a href="https://academy.hsoub.com/programming/css/sass/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-sass-r2288/" rel="">Sass</a> لإنشاء ملفات CSS بسرعة وسلاسة.
	</li>
	<li>
		أدوات بناء مثل <a href="https://academy.hsoub.com/programming/workflow/%D8%AF%D9%84%D9%8A%D9%84-webpack-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-r866/" rel="">Webpack</a> الذي يسهِّل تحويل الملفات المصدرية للتطبيق إلى النسخة النهائية التي ستعرَض للمستخدم.
	</li>
</ul>

<p>
	لتعلم تطوير واجهات المستخدم، ننصحك بالتسجيل في <a href="https://academy.hsoub.com/learn/front-end-web-development/" rel="">دورة تطوير واجهات المستخدم المقدمة من أكاديمية حسوب</a>، والتي تحتوي على أكثر من 72 ساعة فيديو تتوزع على ثمانية مسارات تعليمية تشرح أمثلة عملية تطبيقية شرحًا مفصلًا.
</p>

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

<p>
	اللغات والتقنيات المستخدمة في تطوير واجهات المستخدم: <a href="https://wiki.hsoub.com/HTML" rel="external">HTML </a>و <a href="https://wiki.hsoub.com/CSS" rel="external">CSS </a>و JavaScript و Bootstrap و Sass و jQuery و Webpack.
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="480" id="ips_uid_6639_7" referrerpolicy="strict-origin-when-cross-origin" src="https://academy.hsoub.com/applications/core/interface/index.html" title="ما هو تطوير الواجهات الأمامية وكيفية تعلمه" width="853" data-embed-src="https://www.youtube.com/embed/zrkE_dFffEU"></iframe>
</p>

<h2 id="-18">
	تطوير الواجهات الخلفية
</h2>

<p>
	قد تتساءل: ماذا يعني <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="">تطوير الواجهات الخلفية (backend)</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%A3%D9%85%D8%A7%D9%85%D9%8A%D8%A9-frontend-web-development/" rel="">تطوير واجهات المستخدم (frontend)</a>؟ الفرق بينهما هو أن الواجهات الخلفية هي البرمجيات التي تُنفَّذ على الخوادم وتجري عمليات عليها مثل التعامل مع قواعد البيانات والملفات والخدمات الخارجية، أما واجهات المستخدم فهي الصفحات التي تظهر على شاشة الزائر في متصفحه.
</p>

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

<h3 id="php">
	تعلم البرمجة باستخدام لغة PHP
</h3>

<p>
	بعد تبيان الفرق بين واجهات المستخدم والواجهات الخلفية، يمكن القول بأن أشهر لغة لتطوير الواجهات الخلفية هي<a href="https://academy.hsoub.com/programming/php/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-php-r2040/" rel=""> لغة PHP</a>، وتتفوق على اللغات المنافسة لها أضعافًا مضاعفة.
</p>

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

<p>
	هنالك عدد من البرمجيات المكتوبة بلغة PHP مثل ووردبريس WordPress ودروبال Drupal وميدياويكي MediaWiki (التي تشغِّل ويكيبيديا وموسوعة حسوب) وغيرها الكثير؛ إضافةً إلى عددٍ كبير من إطارات العمل مثل Laravel و CodeIgniter و Symfony و CakePHP و Yii وغيرها، وهذا ما يدل على إمكانيات اللغة الكبيرة والمجتمع الكبير الذي يحيط بها.
</p>

<p>
	لتعلم تطوير الواجهات الخلفية باستخدام PHP، ننصحك بالتسجيل في <a href="https://academy.hsoub.com/learn/php-web-application-development/" rel="">دورة تطوير تطبيقات الويب باستخدام PHP المقدمة من أكاديمية حسوب</a>، والتي تحتوي على 75 ساعة فيديو تتوزع على اثني عشر مسارًا تعليميًا تبدأ بأساسيات لغة البرمجة PHP للمبتدئين، مرورًا بشرح أمثلة عملية تطبيقية بالتفصيل، ووصولًا لتطوير التطبيقات باستخدام إطار العمل Laravel، وشرح تطوير ووردبريس.
</p>

<p>
	أثناء مشاهدتك للدورة، يمكنك أن تعود إلى موسوعة حسوب للاطلاع على <a href="https://wiki.hsoub.com/PHP" rel="external">توثيق لغة PHP</a> وإطار العمل Laravel.
</p>

<p>
	اللغات والتقنيات المستخدمة في تطوير تطبيقات الويب باستخدام PHP هي: PHP و Laravel وقواعد البيانات (مثل <a href="https://academy.hsoub.com/devops/servers/databases/mysql/%D8%AA%D8%B9%D9%84%D9%85-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-mysql-r297/" rel="">MySQL </a>و PostgreSQL وغيرها).
</p>

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

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

<p>
	ذاع صيت روبي في تطوير الويب بعد نشر إطار العمل Ruby on Rails (يشار إليه اختصارًا "ريلز"). هنالك إطارات عمل أخرى مثل سيناترا Sinatra لكن يبقى ريلز أشهرها.
</p>

<p>
	لتعلم تطوير الواجهات الخلفية باستخدام روبي، ننصحك بالتسجيل في <a href="https://academy.hsoub.com/learn/ruby-web-application-development/" rel="">دورة تطوير تطبيقات الويب باستخدام روبي المقدمة من أكاديمية حسوب</a>، والتي تحتوي على 20 ساعة فيديو تتوزع على أربعة مسارات تعليمية تشرح أمثلة عملية تطبيقية شرحًا مفصلًا، وتشرح تطوير التطبيقات باستخدام إطار العمل ريلز.
</p>

<p>
	أثناء مشاهدتك للدورة، يمكنك أن تعود إلى موسوعة حسوب للاطلاع على<a href="https://wiki.hsoub.com/Ruby" rel="external"> توثيق لغة روبي</a> وإطار العمل <a href="https://wiki.hsoub.com/Rails" rel="external">ريلز</a>.
</p>

<p>
	اللغات والتقنيات المستخدمة في تطوير تطبيقات الويب باستخدام روبي: روبي و ريلز وقواعد البيانات (مثل MySQL و PostgreSQL وغيرها).
</p>

<h3 id="javascript">
	تعلم البرمجة باستخدام لغة جافا سكربت - JavaScript
</h3>

<p>
	نعم! تستعمل <a href="https://academy.hsoub.com/programming/javascript/%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-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D9%8A%D8%A8%D8%AA-javascript-r550/" rel="">JavaScript</a> في تطوير الواجهات الخلفية أيضًا. الفضل يعود لبيئة Node.js التي تسمح للمطورين باستخدام JavaScript لكتابة برمجيات تعمل من جهة الخادم وذلك لتوليد صفحات ويب ديناميكية قبل إرسالها إلى المتصفح، وتستطيع Node.js التعامل مع الملفات وقواعد البيانات ومختلف أنظمة الشبكات وخدمات أنظمة التشغيل.
</p>

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

<p>
	تعلم لغة JavaScript لتطوير الواجهات الخلفية من خلال التسجيل في <a href="https://academy.hsoub.com/learn/javascript-application-development/" rel="">دورة تطوير التطبيقات باستخدام JavaScript المقدمة من أكاديمية حسوب</a>، والتي تحتوي على 69ساعة فيديو تتوزع على أحد عشرمسارًا تعليميًّا تشرح أمثلة عملية تطبيقية شرحًا مفصلًا، وتشرح تطوير الواجهة الخلفية باستخدام Node.js.
</p>

<p>
	أثناء مشاهدتك للدورة، يمكنك أن تعود إلى موسوعة حسوب للاطلاع على <a href="https://wiki.hsoub.com/JavaScript" rel="external">توثيق لغة JavaScript</a> وبيئة العمل <a href="https://wiki.hsoub.com/Node.js" rel="external">Node.js</a>.
</p>

<p>
	اللغات والتقنيات المستخدمة في تطوير تطبيقات الويب باستخدام JavaScript: لغة JavaScript وبيئة Node.js وإطار العمل Express.js وقواعد البيانات (مثل MongoDB و MySQL و PostgreSQL وGraphQL وغيرها).
</p>

<h3 id="python">
	تعلم البرمجة باستخدام لغة بايثون - Python
</h3>

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

<p>
	الخيارات المتاحة أمامك هي إطار العمل جانغو (Django) وفلاسك (Flask) وغيرها، يمكنك تعلم لغة البرمجة بايثون لتطوير الواجهات الخلفية من خلال قراءة <a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">سلاسل المقالات عن تعلم بايثون</a> في <a href="https://academy.hsoub.com/programming/" rel="">قسم البرمجة في أكاديمية حسوب</a>، ثم الانتقال إلى تعلم إطار العمل جانغو أو فلاسك. يمكنك أن تعود إلى موسوعة حسوب للاطلاع على <a href="https://wiki.hsoub.com/Python" rel="external">توثيق لغة بايثون</a>.
</p>

<p>
	<a href="https://academy.hsoub.com/python/" rel="">تعلم لغة بايثون</a> لتطوير الواجهات الخلفية من خلال التسجيل في <a href="https://academy.hsoub.com/learn/python-application-development/" rel="">دورة تطوير التطبيقات باستخدام Python المقدمة من أكاديمية حسوب</a>، والتي تحتوي على 69 ساعة فيديو تتوزع على عشرةمسارات تعليمية تشرح أساسيات لغة بايثون للمبتدئين، ثم تطبق عمليًا بأمثلة واقعية، وتشرح إطار العمل جانغو Django وفلاسك Flask.
</p>

<p>
	اللغات والتقنيات المستخدمة في تطوير تطبيقات الويب باستخدام بايثون: لغة بايثون وإطارات العمل المبنية عليها (مثل جانغو وفلاسك) وقواعد البيانات (مثل MySQL و PostgreSQL وغيرها).
</p>

<h2 id="-19">
	تعلم تطوير تطبيقات الجوال
</h2>

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

<p>
	النظامان الرئيسيان المسيطران على سوق الجوال حاليًا هما أندرويد ثم iOS. يمكن برمجة تطبيقات أندرويد بلغة Java أو Kotlin (أو غيرهما) وبرمجة تطبيقات iOS باستخدام Swift (وغيرها).
</p>

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

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

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

<p>
	طوِّرت في الفترة الماضية تقنيات أخرى مبنية على JavaScript مثل React Native المبنية على مكتبة React.js والتي تسمح للمطورين بكتابة تطبيقات أصيلة باستخدام تقنيات الويب.
</p>

<p>
	تستطيع تعلم تطوير تطبيقات الجوال عبر Ionic وعبر React Native من خلال التسجيل في <a href="https://academy.hsoub.com/learn/javascript-application-development/" rel="">دورة تطوير التطبيقات باستخدام لغة JavaScript المقدمة من أكاديمية حسوب</a>، والتي تحتوي على 69 ساعة فيديو تشرح أمثلة عملية تطبيقية شرحًا مفصلًا.
</p>

<p>
	وكالعادة يمكنك أثناء مشاهدتك للدورة أن تعود إلى <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">موسوعة حسوب</a> للاطلاع على التوثيقات اللازمة.
</p>

<p>
	اللغات والتقنيات المستخدمة في تطوير تطبيقات الجوال: Java و Swift و Kotlin و Ionic و React Native وغيرها.
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="480" id="ips_uid_6639_8" referrerpolicy="strict-origin-when-cross-origin" src="https://academy.hsoub.com/applications/core/interface/index.html" title="أساليب تطوير تطبيقات الموبايل" width="853" data-embed-src="https://www.youtube.com/embed/Rn2F9bLC5UU"></iframe>
</p>

<h2 id="-20">
	تطوير الألعاب
</h2>

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

<p>
	أغلب من يجيب عن تطوير الألعاب يقول "عليك بتعلم لغة <a href="https://academy.hsoub.com/programming/cpp/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-c-r802/" rel="">C++‎</a>" لكن دعني أفصِّل لك الأمر قليلًا.
</p>

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

<p>
	تُطور أغلبية الألعاب باستخدام محرِّك ألعاب <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 Engine</a> والذي يسهِّل الأمر على المطورين ويتيح بيئة تطوير مناسبة للألعاب، ويتيح الميزات الأساسية لجميع الألعاب مثل التحكم بالكاميرا ونمذجة الشخصيات ثلاثية الأبعاد وتحريكها والأمور الفيزيائية الأخرى. هنالك عدد كبير من محركات تطوير الألعاب، ومن المرجح أنك شاهدت شعارها في الألعاب التي لعبتها من قبل، ومن أشهرها: Unreal Engine و Unity و Godot.
</p>

<p>
	يمكن التعامل مع هذه المحركات باستخدام عدِّة لغات، مثل C++‎ (وهي أشهرها)، وجافا (خصوصًا للألعاب على هواتف أندرويد) وحتى يمكن استخدام JavaScript في التعامل مع بعضها.
</p>

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

<p>
	اللغات والتقنيات المستخدمة في تطوير الألعاب: C++‎ و Java و JavaScript ومحركات Unity و Unreal Engine و Godot.
</p>

<h2 id="-21">
	برمجة الذكاء الاصطناعي
</h2>

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

<p>
	يتفرع الذكاء الاصطناعي لعدة مجالات من أبرزها <a href="https://academy.hsoub.com/programming/artificial-intelligence/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A2%D9%84%D8%A9/" rel="">تعلم الآلة</a> والتعلم العميق التي تُمكّن الحواسيب من التعلم من البيانات وتحسين أدائها بمرور الوقت دون الحاجة لبرمجة تقليدية.
</p>

<p>
	كي تتعلم برمجة الذكاء الاصطناعي تحتاج لامتلاك فهم جيد للبرمجة وتحليل البيانات ويمكنك استخدام لغات برمجة متعددة في هذا المجال أشهرها لغة البرمجة بايثون التي توفر الكثير من المكتبات والأطر المساعدة مثل تنسرفلو TensorFlow وكيراس Keras وبايتورش PyTorch وباندا Pandas.
</p>

<p>
	إذا كنت مهتمًا بتعلم هذا الاختصاص القوي فستوفر لك <a href="https://academy.hsoub.com/learn/artificial-intelligence/" rel="">دورة الذكاء الاصطناعي</a> من أكاديمية حسوب التي تحتوي على 58 ساعدة تدريبية ممتدة على ثمانية مسارات تدريبية شاملة كل ما تحتاج إليه للبدء بتطوير تطبيقات ذكاء اصطناعي قوية واكتساب مهارة في تحليل البيانات من الصفر ودون الحاجة لامتلاك معرفة مسبقة.
</p>

<p>
	اللغات والتقنيات المستخدمة في برمجة الذكاء الاصطناعي هي Python و MongoDB وPymongo و TensorFlow و Keras و Pandas والنماذج اللغوية الكبيرة LLMs المختلفة.
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="480" id="ips_uid_6639_9" referrerpolicy="strict-origin-when-cross-origin" src="https://academy.hsoub.com/applications/core/interface/index.html" title="كيف تبدأ في مجال الذكاء الاصطناعي AI" width="853" data-embed-src="https://www.youtube.com/embed/GeJTSuIW25s"></iframe>
</p>

<h2 id="-22">
	تطوير الأنظمة المدمجة
</h2>

<p>
	<a href="https://academy.hsoub.com/programming/os-embedded-systems/" rel="">الأنظمة المدمجة</a> هي أنظمة حاسوبية شبيهة بالحاسوب ولكنها لا تملك كل ميزات الحاسوب الذي تراه أمامك الآن. بعبارة أخرى، النظام المدمج هو حاسوب صغير مبرمج لأداء مهام محددة فقط ومدمج ضمن الجهاز أو البيئة المراد استخدامه فيها. أنت الآن محاط بالكثير من الأنظمة المدمجة الآن مثل جهاز مقياس مستوى المياه وجهاز التحكم بالتلفاز وجهاز إنذار الحريق وأجهزة المراقبة …إلخ. حتى إشارات المرور وتنظيم السير وألعاب الأطفال الآلية تصنَّف على أنها أنظمة مدمجة.
</p>

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

<h3 id="-23">
	كيفية برمجة الأنظمة المدمجة
</h3>

<p>
	أشهر وأكثر لغة برمجة تستعمَل في برمجة الأنظمة المدمجة وإنترنت الأشياء هي لغة C (أي لغة سي) وكل اللغات المشتقة منها (مثل‎ لغة أردوينو C). تُستعمَل لغة C++‎ كثيرًا في هذا المجال، إذ تعدُّ لغة ذات مستوى أعلى من لغة C لدعمها <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>. أضف إلى ذلك أنه بدأ حديثًا استعمال لغة بايثون في برمجة تطبيقات الأنظمة المدمجة مع أنها لم ترتبط تقليديًّا بهذا المجال سابقًا. صحيح أنَّ لغة بايثون ليست بقوة لغة C و C++‎ في هذا المجال إلا أنها تستمد ميزاتها وفعاليتها من المكتبات الهائلة المتوافرة فيها.
</p>

<p>
	بعيدًا عن C وبايثون، تستعمل في مجال الأنظمة المدمجة أيضًا لغات أخرى تنضوي ضمن "لغات توصيف العتاد" (Hardware Description Languages)؛ لغتي VHDL و Verilog هما من أشهر لغات توصيف العتاد المستعملة في هذا المجال. تُستعمَل مثل هذه اللغات في برمجة "مصفوفة البوابات المنطقية القابلة للبرمجة" (FPGA أي Field Programmable Gate Array).
</p>

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

<h2 id="-24">
	تطوير تطبيقات سطح المكتب
</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> ويندوز، ولينكس، وماك (macOS)، ويملك كل نظام تشغيل تطبيقات مكتبية خاصة به. لذلك، يجب عليك أولًا -قبل الدخول إلى سوق <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>

<p>
	بعد تحديد نظام التشغيل المستهدف، اطلع على اللغات المفضل استعمالها في ذلك النظام لبرمجة تطبيقاته؛ فعلى سبيل المثال، اللغات C و C++‎ و C#‎ و VB.NET هي الأكثر استعمالًا في برمجة تطبيقات نظام التشغيل ويندوز، واللغات C و C++‎ و Bash هي الأكثر استعمالًا في برمجة تطبيقات توزيعات نظام التشغيل لينكس. أمَّا نظام الشغيل ماك، فينفرد باستعمال لغة Objective-C.
</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>، إذ أشهر اللغات التي تُدرَّس أكاديميًّا في هذا المجال هي لغة جافا (Java). لا يخفى على القارئ دخول لغة بايثون بقوة على هذا المجال نظرًا لامتلاكها الكثير من المكتبات الرائعة وسهولة صياغتها.
</p>

<p>
	دخلت مؤخرًا لغة جافاسكريبت على سوق برمجة تطبيقات سطح المكتب عبر إطار العمل Electron (إلكترون)، إذ توظف في هذا المجال تقنيات تطوير الويب (HTML و CSS و JavaScript …إلخ.). بدأ هذا الإطار ينتشر كالنار في الهشيم مما دفع شركات كبيرة لتطوير تطبيقات سطح المكتب الخاصة بها باستعمال هذا الإطار ومنها شركة Slack التي استعملت هذا الإطار لتطوير تطبيقها المكتبي.
</p>

<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>

<h2 id="-25">
	كيفية اختيار لغة البرمجة التي تناسبك
</h2>

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

<ul>
	<li>
		العمل كمطور ويب full-stack: يعني ذلك تعلم تطوير واجهات المستخدم أو الواجهات الأمامية، وتطوير الواجهات الخلفية. يمكن التخصص بمجال واحد من هذين المجالين فقط، إذ يُطلَب كثيرًا في سوق العمل مبرمجين متخصصين في واجهات المستخدم أو الواجهات الخلفية.
	</li>
	<li>
		العمل كمطور تطبيقات للهواتف المحمولة: يمكنك تعلم برمجة تطبيقات أندرويد أو iOS كلًا على حدة، أو استعمال تقنيات مثل كوردوفا لتطوير لكلا النظامين معًا.
	</li>
	<li>
		العمل كمطور تطبيقات سطح المكتب: يمكنك البدء بالتخصص في تطوير تطبيقات مكتبية لنظام تشغيل محدَّد (مثل نظام التشغيل ويندوز أو لينكس) عبر تعلم لغة البرمجة المستعملة في ذاك المجال (كما أشرنا إلى ذلك في قسم تطوير تطبيقات سطح المكتب)؛ خيار آخر هو تعلم اللغات والتقنيات التي تمكنك من تطوير تطبيقات عابرة للمنصات (تعمل على عدة أنظمة تشغيل) مثل استعمال إطار العمل Electron.
	</li>
	<li>
		العمل كمطور للأنظمة المدمجة والأنظمة الذكية: لغة C هي أساس هذا المجال، سواءً كنتَ تتعامل مع المتحكمات مباشرةً، أو تتعامل مع شريحة مثل أردوينو (والتي تمتلك لغةً مشتقةً من C).
	</li>
</ul>

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

<h2 id="-26">
	نصائح لتعلم البرمجة
</h2>

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

<ul>
	<li>
		حدد هدفك من تعلم لغة البرمجة وسوق العمل الذي تريد دخوله واجعله واقعيًا. بدون هدف، أبشرك بأنك ستتخلى عن فكرة تعلم البرمجة بعد حين. انتبه إلى أن يكون هدفك واقعيًا وقابلًا للقياس والتجزيء على مراحل. بدون ذلك، ستفشل من أول عقبة وتترك تعلم البرمجة.
	</li>
	<li>
		أعرف نفسك جيدًا ونقاط قوتك وضعفك. كلنا لديه نقاط قوة وضعف، ولكن المفلح من عمل على ترميم وتحسين نقاط ضعفه في المجال الذي يرغب بتعلمه.
	</li>
	<li>
		رشح دورة واحدة وكتابًا واحدًا وابدأ بقراءة الكتاب ومتابعة الدورة تدريجيًّا ثم انتقل بعد الانتهاء إلى دورة أخرى وكتاب آخر، إذ سيجنبك ذلك التشتت بين الدورات الكثيرة والكتب العديدة. الشيء الذي أفعله قبل بداية تعلم شيء جديد هو ترشيح قائمة من عدة كتب ودورات ثم ترتيب هذه الكتب والدورات بحسب جودتها ومدى بساطتها وتعقيدها. أرقم الكتب والدورات وأبدأ بالخيار الأول منها. أحدد الوقت التقريبي الذي يأخذه كل خيار لدراسته وأجدول الخيارات البقية على رزنامتي الخاصة.
	</li>
	<li>
		لا تأخذ العلم إلا ممن تثق بعلمه، فالكثير من المبتدئين يحاولون مساعدة غيرهم وقد يضعون معلومات مغلوطة دون قصد.
	</li>
	<li>
		طبق ما تعلمته مباشرة، وأنشئ أي شيء من كل أمر جديد تتعلمه حتى لو كان رسمة بسيطة أو شيفرة من عدة أسطر فقط. فرحة إنجاز شيء مما تعلمته تدفعك لتعلم المزيد والاستمرار في طلب العلم.
	</li>
	<li>
		نظم وقتك بورقة وقلم، حدد بداية كل أسبوع خطةً لسائره والتزم بتنفيذها. أخبر أصدقائك أن لديك التزامات وأمور مهمة عليك إنجازها. خصص وقتًا للاستراحة بالطبع ولا تنسَ نصيبك منها. في نهاية كل أسبوع، وازن مدى الإنجاز الذي حققته ومدى تطبيق الخطة التي وضعها وحاول أن تصل النسبة إلى 100%. أنصحك بقراءة ومتابعة استراتيجيات تنظيم الوقت ورفع الإنتاجية.
	</li>
	<li>
		تمرس على حل المشكلات وتحدى نفسك باستمرار وتابع المسابقات البرمجية واشترك بها إن استطعت، أنصحك بقراءة مقالة <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> بعد هذه المقالة.
	</li>
	<li>
		لا تنسَ أن تكافئ نفسك في كل مرة تنهي فيها كتابًا أو تكمل العمل على مشروع.
	</li>
	<li>
		لا تنسَ حظك من الاستراحة، لأن طريق البرمجة قد يكون له بداية ولكن النهاية بعيدة ومتعبة -مثله مثل أي مجال آخر-.
	</li>
</ul>

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

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

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%83%D9%8A%D9%81-%D8%AA%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%86%D8%B5%D8%A7%D8%A6%D8%AD-%D9%88%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D9%84%D8%B1%D8%AD%D9%84%D8%AA%D9%83-%D9%81%D9%8A-%D8%B9%D8%A7%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r206/" rel="">كيف تتعلم البرمجة</a>
	</li>
	<li>
		<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>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" 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%D8%A7-r1939/" rel="">تعرف على أعلى تخصصات البرمجة أجرا</a>
	</li>
	<li>
		<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>
	</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%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%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/%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>
</ul>
]]></description><guid isPermaLink="false">662</guid><pubDate>Wed, 13 Mar 2019 13:00:00 +0000</pubDate></item><item><title>&#x645;&#x627; &#x647;&#x64A; &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629; &#x648;&#x644;&#x645;&#x627;&#x630;&#x627; &#x62A;&#x635;&#x628;&#x62D; &#x645;&#x628;&#x631;&#x645;&#x62C;&#x64B;&#x627;</title><link>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-%D9%88%D9%84%D9%85%D8%A7%D8%B0%D8%A7-%D8%AA%D8%B5%D8%A8%D8%AD-%D9%85%D8%A8%D8%B1%D9%85%D8%AC%D9%8B%D8%A7-r659/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_02/how-to-be-a-programmer.png.1993a4325e21b9aa71610d4b09f7ca60.png" /></p>

<p>
	<iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="500" src="https://www.youtube.com/embed/AF8eVG0I9pw" width="560"></iframe>
</p>

<p>
	هل تتساءل ماذا تعني البرمجة وتريد دخول سوق عمل البرمجة وترغب بالتعرف على مجالات عمل المبرمج؟ هذا الفيديو سيجيبك عن استفساراتك ويبين لك معنى الخوارزميات والتفكير المنطقي المستعمل في <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>.
</p>
]]></description><guid isPermaLink="false">659</guid><pubDate>Sat, 09 Feb 2019 10:32:00 +0000</pubDate></item><item><title>&#x645;&#x62F;&#x62E;&#x644; &#x625;&#x644;&#x649; &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629; &#x639;&#x628;&#x631; &#x644;&#x63A;&#x629; &#x62C;&#x627;&#x641;&#x627;&#x633;&#x643;&#x631;&#x64A;&#x628;&#x62A;</title><link>https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%B9%D8%A8%D8%B1-%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-r651/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2018_11/5bf68b428c5cc_.png.5a669c83045ef8bfe38748388ac94c15.png" /></p>

<p>
	<iframe allow="autoplay; encrypted-media" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/KcGWJErbRe8?rel=0" width="560"></iframe>
</p>

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

<p>
	سنستخدم لغة JavaScript لشرح المفاهيم الأساسية كالمتغيرات والجمل الشرطية وحلقات التكرار loops وأخيرا الدوال functions، وسنكتب أول برنامج لنا باستخدام لغة جافاسكريبت.
</p>
]]></description><guid isPermaLink="false">651</guid><pubDate>Thu, 22 Nov 2018 08:17:00 +0000</pubDate></item><item><title>&#x646;&#x634;&#x631; &#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A; iOS &#x639;&#x644;&#x649; &#x645;&#x62A;&#x62C;&#x631; Apple Store</title><link>https://academy.hsoub.com/programming/general/%D9%86%D8%B4%D8%B1-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-ios-%D8%B9%D9%84%D9%89-%D9%85%D8%AA%D8%AC%D8%B1-apple-store-r650/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2018_10/ios.png.66b098866f9033c51a5af0bce166a879.png" /></p>

<p>
	<iframe allow="autoplay; encrypted-media" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/kQ6FT7YpFUA?rel=0" width="560"></iframe>
</p>

<p>
	 
</p>

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

<h2>
	خطوات نشر تطبيق iOS
</h2>

<p>
	لنشر التطبيق على متجر App Store سنمر بالمراحل التالية:
</p>

<ul>
<li>
		شراء حساب مطور
	</li>
	<li>
		توليد الشهادات المطلوبة لتوقيع التطبيق
	</li>
	<li>
		رفع التطبيق على المتجر
	</li>
</ul>
]]></description><guid isPermaLink="false">650</guid><pubDate>Mon, 08 Oct 2018 06:53:00 +0000</pubDate></item><item><title>&#x646;&#x634;&#x631; &#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A; &#x623;&#x646;&#x62F;&#x648;&#x631;&#x64A;&#x62F; &#x639;&#x644;&#x649; &#x645;&#x62A;&#x62C;&#x631; Google Play</title><link>https://academy.hsoub.com/programming/general/%D9%86%D8%B4%D8%B1-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A3%D9%86%D8%AF%D9%88%D8%B1%D9%8A%D8%AF-%D8%B9%D9%84%D9%89-%D9%85%D8%AA%D8%AC%D8%B1-google-play-r649/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2018_10/Untitled-1.png.ad76525f57cec5be71c9b36d616c0ea7.png" /></p>

<p>
	<iframe allow="autoplay; encrypted-media" allowfullscreen="" frameborder="0" height="394" src="https://www.youtube.com/embed/eCKdWaqluGk?rel=0" width="700"></iframe>
</p>

<p>
	يوجد العديد من المتاجر التي تمكنك من نشر تطبيق أندرويد ولكن متجر Google Play هو المتجر الرسمي وصاحب الحصة الأكبر بين جميع المتاجر.
</p>

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

<h2>
	خطوات رفع تطبيق أندرويد
</h2>

<ul>
<li>
		<p>
			العمل على بناء النسخة النهائية من التطبيق Release Version وهي النسخة القابلة للرفع على المتجر، وبالصيغة  APK.
		</p>
	</li>
	<li>
		<p>
			العمل على إنشاء حساب مطور لمتجر Google Play
		</p>
	</li>
	<li>
		رفع النسخة النهائية من التطبيق إلى المتجر لتتم مراجعته ونشره بعد الموافقة عليه.
	</li>
</ul>
]]></description><guid isPermaLink="false">649</guid><pubDate>Mon, 01 Oct 2018 12:25:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A; &#x627;&#x644;&#x647;&#x62C;&#x64A;&#x646;&#x629; Hybrid Apps &#x648;&#x627;&#x644;&#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A; &#x627;&#x644;&#x623;&#x635;&#x64A;&#x644;&#x629; Native Apps</title><link>https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%87%D8%AC%D9%8A%D9%86%D8%A9-hybrid-apps-%D9%88%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B5%D9%8A%D9%84%D8%A9-native-apps-r638/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2018_06/with_logo.png.b7a9214b744fbb0d00108f9838635049.png" /></p>

<p>
	<iframe allow="autoplay; encrypted-media" allowfullscreen="" frameborder="0" height="394" src="https://www.youtube.com/embed/wcnQDqeeoBw?rel=0" width="700"></iframe>
</p>

<p style="direction: rtl; text-align: right;">
	سنتحدث في هذا الدرس عن الفرق بين التطبيقات الهجينة Hybrid Apps والتطبيقات الأصيلة Native Apps وذلك لنوضح أبرز الفروقات والمميزات.
</p>

<p style="direction: rtl; text-align: right;">
	التطبيقات الأصيلة هي تطبيقات تكتب باللغة البرمجية المعتمدة من قبل نظام التشغيل الذي نطور له ولا تعمل إلا على هذا النظام. وتختلف أنظمة التشغيل عن بعضها في لغات البرمجة المدعومة، أيضا تختلف أدوات التطوير ومكونات الواجهة المرئية (UI) فمثلاً التطبيقات التي تعمل بنظام IOS تستخدم لغة Objective C أو Swift، والتطبيقات التي تعمل بنظام Android تستخدم لغة Java أو Kotlin ، والتطبيقات التي تعمل بنظام Windows Phone  تستخدم لغة C# وتسمى هذه اللغات باللغات الأم لنظام التشغيل.
</p>

<p style="direction: rtl; text-align: right;">
	أما التطبيقات الهجينة فهي تطبيقات مكونة من صفحات ويب تم برمجتها بتقنيات الويب HTML, CSS, Javascript وتعرُض داخل متصفح النظام (Native Browser) ولهذا السبب يمكن للتطبيقات الهجينة دعم منصات عدة بدون إعادة برمجة التطبيق لكل نظام، وللتعامل مع عناصر منصة الجهاز الأصلية يتم استخدام إضافات Plugins مكتوبة باللغة الأم. وهذا يعني أنه يمكن تشغيل تطبيقات الويب على جهاز المحمول والوصول إلى عتاد الجهاز الفيزيائي والتعامل مع حساساته Mobile Sensors مثل الكاميرا و الملفات ومسجل الصوت والبلوتوث ونظام تحديد المواقع العالمي GPS وغيرها.
</p>
]]></description><guid isPermaLink="false">638</guid><pubDate>Mon, 18 Jun 2018 07:39:00 +0000</pubDate></item><item><title>&#x634;&#x631;&#x62D; &#x641;&#x644;&#x633;&#x641;&#x629; RESTful - &#x62A;&#x639;&#x644;&#x645; &#x643;&#x64A;&#x641; &#x62A;&#x628;&#x646;&#x64A; &#x648;&#x627;&#x62C;&#x647;&#x627;&#x62A; REST &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x64A;&#x629;</title><link>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/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2018_04/5ac6a2e85fcd7_-RESTful-(3).png.2d6d55ae046aa1e7d58ea9e2acee7e2b.png" /></p>

<p>
	<iframe allowfullscreen="" frameborder="0" gesture="media" height="394" src="https://www.youtube.com/embed/MgWJympekBU?rel=0&amp;showinfo=0" width="700"></iframe>
</p>

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

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

<p>
	بعد التعرف على RESTful ستكون قادر على الانطلاق لتصميم الخدمة الخاصة بك دون القلق بشأن من سيستخدم الخدمة الخاصة بك.
</p>
]]></description><guid isPermaLink="false">635</guid><pubDate>Fri, 06 Apr 2018 12:48:00 +0000</pubDate></item><item><title>&#x645;&#x642;&#x627;&#x631;&#x646;&#x629; &#x628;&#x64A;&#x646; Django &#x648; Laravel &#x648; Rails</title><link>https://academy.hsoub.com/programming/general/%D9%85%D9%82%D8%A7%D8%B1%D9%86%D8%A9-%D8%A8%D9%8A%D9%86-django-%D9%88-laravel-%D9%88-rails-r634/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2018_04/5ac54c7f3c2a4_LaravelvsDjangovsRails.png.b1bfc73ac66808d91cb1b51cb3353636.png" /></p>

<p>
	يحتار المطورون في اختيار أفضل إطار لمشاريعهم وسيكون هذا تحديًا حقيقيًا للمبتدئين في الأطر الحديثة. بعد العمل على الأطر الثلاثة (Django، Laravel و Rails – والذي يُعرف باسم Ruby On -rails)، سأقارن بين هذه الأطر الرائعة على أساس شعارها، سهولة تعلمها، أدائها، قوة وضعف مكتباتها وقوالبها، دعمها، آفاقها المستقبلية، فرص العمل، التكلفة والصيانة. <br>
	ملاحظة: ينتقد بعض المعجبين عند التحدث عن نقاط ضعف أطرهم، ولا أستطيع فعل أي شيء لأنه لا يمكن إخفاء الحقيقة، كل إطار لديه بعض المزايا مع بعض العيوب.
</p>

<h2>
	المقدمة
</h2>

<h3>
	لغة البرمجة
</h3>

<p>
	أهم فرق بين هذه الأطر هي أن Django بلغة بايثون، Laravel بلغة PHP وRails بلغة الروبي، لذا إذا كنت تنوي استخدام أي من هذه الأطر فيجب عليك تعلم لغتها أولاً، وبسبب هذا، العديد من المطورين يختارون الإطار الذي يتطابق مع اللغة التي يعرفونها.<br>
	إن التحول من لغة إلى أخرى ليس صعبًا بل يحتاج إلى بعض الوقت، وإذا احترت في اختيار لغة البرمجة،<a href="https://academy.hsoub.com/programming/general/%D9%85%D9%82%D8%A7%D8%B1%D9%86%D8%A9-%D8%A8%D9%8A%D9%86-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-%D9%88php-%D9%88%D8%B1%D9%88%D8%A8%D9%8A-r630/" rel=""> فهذه مقارنة بين لغات بايثون و PHP وروبي</a>.
</p>

<h3>
	الشعار
</h3>

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

<h3>
	المواقع
</h3>

<p>
	بعض المواقع المعروفة تستخدم Django مثل Pinterest، Instagram، Mozilla، The Washington Times، Disqus، the Public Broadcasting Service و Bitbucket.<br>
	في حين أن Laravel هو إطار جديد، حيث صدر في يونيو عام 2011، لكنه أصبح مشهورا جدا، ومن بين المواقع التي تستخدمه هي Deltanet Travel، Sublimity، Neighborhood Lender، Sendity و MyRank.<br>
	يعتبر Rails من الأطر الرائعة فمن المواقع التي تستخدمه Twitter، Shopify، SoundCloud، Heroku، Github، Bloomberg و Hulu.
</p>

<h2>
	سهولة التعلم
</h2>

<p>
	على الرغم من أن الأطر الثلاثة لديها مجتمعات كبيرة وتوثيق رسمي، إلا أن تعلم Django وLaravel أسهل بكثير من تعلم Rails، فالتوثيق الحالي ل Django يجعلها الأسهل، وإذا كنت تملك خلفية PHP فيمكنك تعلم Laravel في غضون أسبوعين أو ثلاثة أسابيع، وهذه هي الوثائق الرسمية:<a href="https://docs.djangoproject.com/en/2.0/" rel="external nofollow"> وثائق Django</a> <a href="https://laravel.com/docs/5.6" rel="external nofollow">ووثائق Laravel </a><a href="http://guides.rubyonrails.org/" rel="external nofollow">وثائق Rails</a>.
</p>

<h2>
	الأداء
</h2>

<h3>
	الأمن
</h3>

<p>
	جميع هذه الأطر آمنة جدا إذا لم يرتكب المبرمج أخطاء، فيمتلك Django برمجيات وسيطة ويمتلك Rails Active Records وأما Laravel فيمتلك برمجيات HTTP وسيطة، وتوفر كل هذه الأطر رموز csrf للنماذج.<br>
	لا يوجد فرق أمني كبير بين هذه الأطر، وكل هذا يعتمد على خبرة المبرمج.
</p>

<p>
	<strong>تحديث:</strong>أشار بعض القراء أن المبرمجين هم بشر وسيخطئون، لذا سأقول في هذه الحالة أن Django هو الأكثر أمانا وLaravel هو الأقل أمانًا، اطلع على هذا التوثيق<a href="https://docs.djangoproject.com/en/1.8/topics/security/" rel="external nofollow"> عن أمن Django</a> و<a href="http://guides.rubyonrails.org/security.html" rel="external nofollow">هذا دليل أمن Rails </a>و هذا<a href="https://laravel.com/docs/4.2/security" rel="external nofollow"> دليل أمن Laravel</a>، وسأقول أيضا أنه لا يوجد إطار آمن بشكل كامل لأن المطورين هم أيضا بشر، ويمكنك زيادة الأمن لكنك لا تستطيع جعله آمن بنسبة 100%، لكن إذا كتبت التعليمات البرمجية بعناية وحذر فإن جميع الأطر متساوية من ناحية الأمن.
</p>

<h3>
	السرعة
</h3>

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

<h3>
	الوقت المطلوب لإنشاء تطبيق
</h3>

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

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

<h2>
	قوة وضعف المكتبة
</h2>

<p>
	<strong>الأشياء المشتركة في جميع الأطر:</strong>
</p>

<ul>
<li>
		جميعها MVC (يسمى Django MTV أيضا لكن على الرغم من أن الاسم مختلف إلا أن المفهوم هو نفسه).
	</li>
	<li>
		تركز جميع الأطر على قابلية القراءة وبساطة الشيفرة البرمجية وتوزيع الملفات.
	</li>
	<li>
		جميعها تستعلم تلقائيًا من قاعدة البيانات، فلا يجب عليك كتابة استعلامات قاعدة البيانات بشكل مباشر.
	</li>
	<li>
		 تبنى الجداول تلقائيا في قاعدة البيانات من النماذج (models).
	</li>
	<li>
		جميع الأطر تملك نظام توجيه سهل وآمن، وتعرض صفحات الويب بشكل حيوي.
	</li>
	<li>
		تملك جميعها أنظمة قوالب خاصة بها وكل نظام قوالب غني بالمرشحات والدوال المعرّفة مسبقًا، الفرق الوحيد في الصياغة.
	</li>
	<li>
		جميعها مرنة ومحمولة مع تقنيات حديثة أخرى.
	</li>
</ul>
<h3>
	Django
</h3>

<p>
	يمتلك Django مكتبة قوية مع المميزات التالية:
</p>

<ul>
<li>
		يعتبر قسم الإدارة المدمجة، المزخرف (decorator)، وأصناف المناظر نقاط قوة ل Django.
	</li>
	<li>
		الاستمارات المولدة تلقائيا للنماذج مع عملية التحقيق تجعلها سهلة للغاية.
	</li>
	<li>
		يدعم الإطار خاصية التخزين المؤقت وستتمكن من استخدام أي من أساليب التخزين المؤقت المتاحة.
	</li>
	<li>
		يدعم الأصناف البرمجيات الوسطيّة والتي يمكن أن تتدخّل في مراحل مختلفة من معالجة الطلب وتُنفّذ دوال مخصصة.
	</li>
	<li>
		يسمح لك نظام مرسل (dispatcher) داخلي لمكونات التطبيق اتصال الأحداث مع بعضها البعض عبر إشارات محددة مسبقا.
	</li>
	<li>
		يملك نظام تدويل يتضمن ترجمات لمكونات Django إلى لغات مختلفة.
	</li>
	<li>
		يملك نظام تسلسل الذي يمكنك من إنتاج وقراءة تمثيل XML و/أو JSON لمثيلات نموذج Django.
	</li>
	<li>
		واجهة بايثون مدمجة في إطار اختبار الوحدة.
	</li>
	<li>
		نظام مصادقة (authentication) موسّع.
	</li>
	<li>
		واجهة إدارة حيوية.
	</li>
	<li>
		أدوات لتوليد RSS وتغذيات (feed) خلاصات Atom.
	</li>
	<li>
		إطار مواقع تسمح ل Django واحد بتشغيل مواقع متعددة، ولكل منها المحتوى والتطبيقات الخاصة به.
	</li>
	<li>
		يملك أدوات لتوليد Google Sitemap.
	</li>
	<li>
		يملك تقنيات مدمجة للتخفيف من التزوير عبر الموقع، ثغرات XSS، ثغرات حقن SQL، تكسير كلمات المرور وهجمات الويب النموذجية، ومعظمها يعمل افتراضيا.
	</li>
	<li>
		إطار لإنشاء تطبيقات GIS.
	</li>
</ul>
<h3>
	Laravel
</h3>

<p>
	على الرغم من أن مكتبات Laravel ليست قوية مثل Django وRails إلا أنها كافية لإنشاء أي نوع من المواقع.
</p>

<ul>
<li>
		يوفر Bundles و composer عدد من حزم نظام وحدات التحزيم والاعتماديات.
	</li>
	<li>
		التوجيه (Routing) – يوّفر طريقة سهلة وبسيطة لإدارة وتوجيه الروابط إلى متحكم أو دالة تُنفَّذ عند زيارة رابط محدَّد.
	</li>
	<li>
		دعم Eloquent ORM – خدمة أخرى مقدمة لتجريد وأتمتة جزء النموذج، حيث سنطبق التقنيات المتعارف عليها على الإعدادات.
	</li>
	<li>
		التهجيرات – طريقة لإصدار سكربتات قواعد البيانات بطريقة أنيقة للغاية، فلا حاجة للحفاظ على جميع التحققات على التهجيرات، يمكن لفريق عمل المشروع سحب الهجرة المقدمة وستعيّن جميعها وستكون جاهزة للعمل.
	</li>
	<li>
		إدارة قائمة الانتظار (Queue management) – لتجريد المهام غير الضرورية ووضعهم في قائمة الانتظار وجعل وقت استجابة المستخدم أسرع بكثير.
	</li>
	<li>
		دعم Redis، ويمكن توسيعها إلى memcached.
	</li>
	<li>
		حقن الإعتماديّة – اختبار سهل وأتمتة تحميل الإعتماديّة.
	</li>
	<li>
		Artisan – لإنشاء تطبيقات سطر الأوامر في لحظة.
	</li>
</ul>
<p>
	تعلم استخدام Laravel عن طريق <a href="https://academy.hsoub.com/programming/php/laravel/" rel="">هذه الدروس</a>.
</p>

<h3>
	Rails
</h3>

<ul>
<li>
		يتضمن Rails أدوات لجعل مهام التطوير الشائعة أسهل (خارج الصندوق)، مثل scaffolding الذي يستطيع إنشاء بعض النماذج تلقائيًا والمناظر اللازمة لموقع ويب الأساسي، بالإضافة إلى WEBrick وهو خادم ويب روبي بسيط الموزع مع روبي و Rake والذي هو نظام بناء موزع كـ gem. وتوفر هذه الأدوات جنبا إلى جنب مع Rails بيئة تطوير أساسية.
	</li>
	<li>
		Active record: يلعب دورا رئيسيا في تطبيقات Rails، وهو أفضل من Eloquent ORM في Laravel ومن النماذج في Django.
	</li>
	<li>
		اختصارات: يعبر الكثير من الناس الذين يأتون من لغات برمجة أو إطارات أخرى أن هذا الإطار سحري بسبب الاختصارات الكثيرة، فأغلب الأشياء معرّفة مسبقًا ويجب عليك كتابة بعض الأسطر البرمجية لإنشاء تطبيقات معقدة.
	</li>
	<li>
		التوجيه التلقائي: بعض الدوال الشائع في جدول قاعدة البيانات مثل الإنشاء ، التعديل والعرض مُعرّفة تلقائيًا، وهذا يعني أننا لا نحتاج إلى تضييع الوقت في المهام البسيطة ويمكننا قضاء وقت أطول على الأجزاء المعقدة من المشروع.
	</li>
	<li>
		سطر الأوامر: الكثير من الأشياء يمكن إنجازها عن طريق سطر الأوامر مثل استخدام rake وهي Ruby Make، أداة روبي مستقلة تستبدل أداة يونكس 'make' وتستخدم 'Rakefile' وملفات .rake لبناء قائمة مهام.
	</li>
	<li>
		في Rails، يُستخدم Rake لمهام الإدارة الشائعة، خاصة المعقدة منها التي تبني من بعضها البعض.
	</li>
	<li>
		تحتوي وحدة ActiveModelHelper على أساليب المساعدة لإنشاء النماذج من الكائنات بسرعة التي تتبع اتفاقيات Active Model، بداية من Active Record.
	</li>
</ul>
<h2>
	 خدمات الاستضافة
</h2>

<p>
	يمكنك تشغيل أي تطبيق على VPS أو على خدمة استضافة مخصصة، وهذه مجموعة من الروابط لمواقع تسمح لك باستضافة مشروعك مجانا أو على خطط الاستضافة المشتركة.<br><strong>Django</strong>: بعض من المواقع التي تستضيف مشاريع Django هي: <a href="https://www.webfaction.com/?aid=83061" rel="external nofollow">WebFaction</a>، <a href="https://www.pythonanywhere.com/" rel="external nofollow">PythonAnywhere</a> ، <a href="https://heroku.com/" rel="external nofollow">Heroku</a> ، <a href="https://www.digitalocean.com/?refcode=3c4576ec8ebd" rel="external nofollow">Digital Ocean</a> ، <a href="http://www.bluehost.com/track/28harishkumar/rightSidebar" rel="external nofollow">Bulehost</a> ، <a href="http://www.dreamhost.com/r.cgi?2129502" rel="external nofollow">Dreamhost</a> ، <a href="http://www.arvixe.com/10626.html" rel="external nofollow">Arvixe</a> و <a href="https://cloud.google.com/appengine/" rel="external nofollow">Google App Engine</a>.<br><strong>Laravel</strong>: يمكنك الاستضافة على <a href="https://heroku.com/" rel="external nofollow">Heroku</a> ، <a href="http://www.bluehost.com/track/28harishkumar/rightSidebar" rel="external nofollow">Bulehost</a> ، <a href="https://www.inmotionhosting.com/" rel="external nofollow">Inmotion Hosting</a> ، <a href="http://www.site5.com/in.php?id=238336" rel="external nofollow">Site5</a> ، <a href="http://www.dreamhost.com/r.cgi?2129502" rel="external nofollow">Dreamhost</a> ، <a href="https://www.digitalocean.com/?refcode=3c4576ec8ebd" rel="external nofollow">Digital Ocean</a> و <a href="https://www.arvixe.com/" rel="external nofollow">Arvixe</a>.<br><strong>Rails</strong>: مواقع لتطبيقات Rails هي: <a href="https://www.heroku.com/" rel="external nofollow">Heroku</a> ، <a href="https://www.bluehost.com/?utm_source=%28direct%29&amp;utm_medium=affiliate&amp;utm_campaign=affiliate-link_28harishkumar_notype" rel="external nofollow">Bulehost</a> ، <a href="http://www.dreamhost.com/r.cgi?2129502" rel="external nofollow">Dreamhost</a> ، <a href="https://www.arvixe.com/" rel="external nofollow">Arvixe</a> ، <a href="https://www.hosting24.com/ref/202607" rel="external nofollow">Hosting24</a> و <a href="https://www.digitalocean.com/?refcode=3c4576ec8ebd" rel="external nofollow">Digital Ocean</a>.
</p>

<h2>
	معايير أخرى
</h2>

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

<h2>
	خاتمة
</h2>

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

<p>
	ترجمة -وبتصرّف- للمقال <a href="http://www.findalltogether.com/post/django-vs-laravel-vs-rails/" rel="external nofollow">Django vs Laravel vs Rails</a> لصاحبه Harish Kumar
</p>
]]></description><guid isPermaLink="false">634</guid><pubDate>Fri, 06 Apr 2018 08:03:00 +0000</pubDate></item><item><title>&#x62A;&#x639;&#x644;&#x651;&#x645; &#x648;&#x627;&#x646;&#x633; &#x648;&#x623;&#x639;&#x62F; &#x627;&#x644;&#x62A;&#x639;&#x644;&#x651;&#x645;- &#x627;&#x644;&#x648;&#x62C;&#x647; &#x627;&#x644;&#x645;&#x62A;&#x63A;&#x64A;&#x631; &#x644;&#x645;&#x633;&#x64A;&#x631;&#x62A;&#x643; &#x627;&#x644;&#x647;&#x646;&#x62F;&#x633;&#x64A;&#x629;</title><link>https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D9%84%D9%91%D9%85-%D9%88%D8%A7%D9%86%D8%B3-%D9%88%D8%A3%D8%B9%D8%AF-%D8%A7%D9%84%D8%AA%D8%B9%D9%84%D9%91%D9%85-%D8%A7%D9%84%D9%88%D8%AC%D9%87-%D8%A7%D9%84%D9%85%D8%AA%D8%BA%D9%8A%D8%B1-%D9%84%D9%85%D8%B3%D9%8A%D8%B1%D8%AA%D9%83-%D8%A7%D9%84%D9%87%D9%86%D8%AF%D8%B3%D9%8A%D8%A9-r553/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_10/31-2.png.c729df77a4ee15553060576d9f8ebf3c.png" /></p>
<p>
	في الماضي القريب، كانت مهنة الهندسة واضحةً نسبياً. درست لغة معينةً أو أكثر، حصلت على عمل ونجحت.
</p>

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

<h2 id="عدد-لا-متناه-من-المبتدئين">
	عدد لا متناهٍ من المبتدئين
</h2>

<p>
	في كتابه الأخير “المحتوم The Inevitable”، يدّعي المحرر التنفيذي المؤسس لـ وييرد Wired كيفن كيلي Kevin Kelly أن هذه الوتيرة السريعة والمتزايدة للتغيير تخلق ما يصفه بـ “العدد اللامتناهي من المبتدئين”. التقنيات التي ستسيطر على مدى 30 سنة المقبلة لم تُخترع بعد وبالتالي سنكون جميعنا “مبتدئين” بالنسبة لها، بغض النظر عن العمر أو الخبرة.
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="25328" href="https://academy.hsoub.com/uploads/monthly_2017_10/01_T.png.76d942cd83f3baf9dad2743695bb4947.png" rel=""><img alt="01_T.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25328" data-unique="7q8016rn3" src="https://academy.hsoub.com/uploads/monthly_2017_10/01_T.thumb.png.b2ef324f328ae77def487eea623f66e6.png"></a>
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="25327" href="https://academy.hsoub.com/uploads/monthly_2017_10/02_T.png.f570f8a169e888d38d8098f87e3113b4.png" rel=""><img alt="02_T.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25327" data-unique="6os6os404" src="https://academy.hsoub.com/uploads/monthly_2017_10/02_T.thumb.png.f48372ac4d594b5bae0e3af1f3d59f8d.png"></a>
</p>

<p>
	يعني الشكل الجديد للحرف T زمناً وخبرة أقل من أجل تقنية معينة.
</p>

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

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

<h2 id="أعطني-t">
	أعطني T
</h2>

<p>
	لقد واجهت هذا مؤخراً عندما كنت أعمل على خدمة التخزين S3 من <a href="https://academy.hsoub.com/certificates/aws/" rel="">خدمات ويب أمازون (AWS)</a>. كنت أحاول الاستعلام عن البيانات المخزنة في S3، وهو ما كان يعني في السابق استخراج وتحويل البيانات لأتمكّن من استجوابها. بجميع الأحوال، أطلقت AWS في السنة الماضية خدمة جديدة تدعى Athena ، مما يعني أنه بإمكاني الاستعلام عن البيانات في S3 لحظياً.
</p>

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

<p>
	هناك خدمات “جديدة” لكنها مبنية على مهارات أخرى، مثل استخدام استعلامات SQL للاستعلام عن البيانات أو معرفة المنتجات مثل S3 و Redshift. في السابق، كنت تركز على تقنية لقاعدة البيانات مثل <a href="https://academy.hsoub.com/devops/servers/databases/mysql/" rel="">MySQL</a> أو <a href="https://academy.hsoub.com/devops/servers/databases/postgresql/" rel="">Postgres</a> وتقوم بزيادة التعمق العامودي لل T الخاص بك. في الوقت الراهن، ومع التغير السريع للمنتجات والخدمات، فإن كلمة خبير تعني التبديل بين المهارات بسرعة أكبر والتكيف مع التغيرات الجديدة والتخلي عن بعض المهارات.
</p>

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

<p>
	إن تعلّم أشياء جديدة بسرعة دون التعمق فيها كما اعتدنا أن نفعل، أمر يسهل قوله أكثر من فعله. نقدّر نحن البشر مهاراتنا ومعارفنا ونحرص على ألا ننساها.<br>
	عندما بدأت العمل في مجال عمليّات التطوير <a href="https://academy.hsoub.com/devops" rel="">DevOps</a>، كنت أستخدم <a href="https://academy.hsoub.com/tags/%D9%85%D8%AF%D8%AE%D9%84%20%D8%A5%D9%84%D9%89%20%D9%83%D8%AA%D8%A7%D8%A8%D8%A9%20%D8%B3%D9%83%D8%B1%D8%A8%D8%AA%D8%A7%D8%AA%20%D8%A7%D9%84%D8%B5%D8%AF%D9%81%D8%A9/#elSearch_main" rel="">Bash</a> لغة برمجة أساسية. عندما تعتاد على البرمجة باستخدام Bash، يمكنك أن تقوم بأشياء فظيعة بواسطتها. تابعت تعلّم لغات برمجة أخرى مثل <a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">تعلم بايثون </a>لكنني بقيت استخدم Bash في الكثير من الحالات لأنني كنت على دراية بها. الآن، أنظر إلى الوراء وأدرك أنني كنت بطيئاً جداً في التخلي عن Bash، وأن تعلّم شيء كبايثون بسرعة أكبر كان ليساعد مسيرتي المهنية أكثر. يصعب التخلي عن شيء تشعر أنك جيد أو ملمّ به.
</p>

<h2 id="قم-بجولة-في-عالم-الهندسة">
	قم بجولة في عالم الهندسة
</h2>

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

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

<p>
	نحاول في Intercom إعداد الناس لهذا المستقبل وذلك من خلال ضمان قيام المهندسين “بجولات” على مختلف الفرق. يقضي المهندسون بضعة أسابيع في العمل على فريق مختلف أو على جزء مختلف من المنتج. فقد يعمل الشخص الذي اعتاد العمل على القضايا التشغيلية الخلفية <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="">Backend </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%A3%D9%85%D8%A7%D9%85%D9%8A%D8%A9-frontend-web-development/" rel="">Frontend</a>. وبطريقة مماثلة، قد يعمل شخص ما مع فريق التحليل لمدة من الزمن ليتعلم عن عرض البيانات أو تعليم الآلة.
</p>

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

<h2 id="تعلم-كيف-تنسى">
	تعلم كيف تنسى
</h2>

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

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

<p>
	ترجمة - بتصرّف - للمقال <a href="https://blog.intercom.com/learn-unlearn-relearn-changing-face-engineering-career/" rel="external nofollow">Learn, unlearn and relearn: the changing face of your engineering career</a> لصاحبه Cathal Horan.
</p>

<p>
	حقوق الصورة البارزة محفوظة لـ <a href="https://www.freepik.com/free-vector/two-developers-planning-their-work_1311469.htm" rel="external nofollow">Freepik</a>
</p>
]]></description><guid isPermaLink="false">553</guid><pubDate>Tue, 31 Oct 2017 10:06:00 +0000</pubDate></item><item><title>&#x62B;&#x644;&#x627;&#x62B; &#x62A;&#x644;&#x645;&#x64A;&#x62D;&#x627;&#x62A; &#x623;&#x645;&#x646;&#x64A;&#x629; &#x644;&#x645;&#x637;&#x648;&#x631;&#x64A; &#x627;&#x644;&#x628;&#x631;&#x627;&#x645;&#x62C;</title><link>https://academy.hsoub.com/programming/general/%D8%AB%D9%84%D8%A7%D8%AB-%D8%AA%D9%84%D9%85%D9%8A%D8%AD%D8%A7%D8%AA-%D8%A3%D9%85%D9%86%D9%8A%D8%A9-%D9%84%D9%85%D8%B7%D9%88%D8%B1%D9%8A-%D8%A7%D9%84%D8%A8%D8%B1%D8%A7%D9%85%D8%AC-r552/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_10/29-2.png.3e4d1dbc684f0eb2d71188508f7c1555.png" /></p>

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

<h2 id="لا-تستخدم-التعمية-لكلمات-السر-بل-التجزئة-hash">
	لا تستخدم التعمية لكلمات السّر .. بل التجزئة Hash
</h2>

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

<p>
	استخدمتُ حاسوب العمل للدخول إلى نظام المعلومات ولاحظتُ أمرا غريبا. رغم أن هذه الحادثة كانت قبل انتشار <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr> إلا أنني لم أكن أتوقّع أن أرى نصوصا واضحة تحوي حقولا مثل <code>username</code> (اسم المستخدِم) و<code>password</code> (كلمة السرّ). بدا بعد التدقيق أن النظام كان يُرسِل اسم المستخدم الخاصّ بي وسلسلة محارف عشوائية - لم تكن كلمتي للسرّ - عبر الشبكة. لم أستطع ترك الأمر على تلك الحال، فحاولتُ تسجيل الدخول مجدّدا إلا أنني هذه المرة أدخلتُ - عن قصد - كلمة سرّ خاطئة. لم أغيّر كلمة السّر كليّةً، بل اكتفيتُ بتغيير محرف واحد فقط.
</p>

<p>
	كنتُ أتوقّع رؤية سلسلة محارف جديدة مختلفة تمامًا تمثّل كلمتي للسّر تمرّ عبر الشبكة. بدلا من ذلك، لم يتغيّر سوى أول محرفيْن من سلسلة المحارف. كان الأمر مثيرًا للانتباه، فرغم أن خبرتي كانت متواضعة نوعا ما، إلا أنني كنتُ أعرف أنه إن طُبِّقت دالة <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AA%D8%B1%D9%85%D9%8A%D8%B2-encoding%D8%8C-%D8%A7%D9%84%D8%AA%D8%B9%D9%85%D9%8A%D8%A9-encryption%D8%8C-%D8%A7%D9%84%D8%AA%D8%AC%D8%B2%D8%A6%D8%A9-hashing-%D9%88%D8%A7%D9%84%D8%AA%D8%B4%D9%88%D9%8A%D8%B4-obfuscation%D8%9F-r308/" rel="">تجزئة Hash</a> بطريقة صحيحة على كلمتي للسرّ فستكون سلسلة المحارف مختلفة تماما، وليس فقط أول محرفين. ياللهوْل.. حتى مخطّط تعميّة (تشفير) <strong><em>جيّد</em></strong> كان سيُنتج سلسلتيْ محارف مختلفتين تماما، وهو ما يبدو أن مخطّط التعمية المستخدَم لا يقوم به. جرّبتُ كلمتي سرّ أخرييْن.
</p>

<p>
	تسلّحتُ بأوراق وقلم رصاص وقضيتُ الساعتيْن المواليتيْن في محاولة العثور على مخطّط فكّ التعمية. كان لديّ بانتهاء هاتيْن الساعتيْن سكريبت <a href="https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r735/" rel="">بايثون </a>يمكنه أخذ أي واحدة كلمات السّر “المعمّاة” تلك ثوم فكّ تعميّتها وكشف كلمة السّر الأصلية؛ أمر يُفترَض أن لا أحد بإمكانه فعله. أنا متأكّد من أنه لم يدُر بخلد الشخص الذي وضع ذلك المخطَّط أن أحدا سيجلس ساعتيْن ويعمل على تفكيك مخطّطه؛ إلا أني فعلتُ ذلك.
</p>

<p>
	لماذا؟ لأنه كان بإمكاني ذلك.
</p>

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

<h2 id="2-لا-تترك-منافذ-خلفية-backdoors-سرية-في-البرامج">
	2. لا تترك منافذ خلفية Backdoors سريّة في البرامج
</h2>

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

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

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

<p>
	أجاب “آه.. فعلا”، وأكمل “أضفنا ذلك الرابط ليسهل علينا الوصول. ولا أحد - قبلك - أبدا عثر عليه. سنحذفه فورا”. سألني قبل أن ننهي المكالمة سؤالا أخيرا: “لماذا بدأت في النظر إلى شفرات <a href="https://academy.hsoub.com/programming/html5/" rel="">HTML</a> في صفحة الدخول؟”
</p>

<p>
	كانت إجابتي بسيطة: “لأنني أستطيع ذلك”.
</p>

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

<h2 id="3-استوثق-من-المستخدمين-على-جميع-الصفحات-وليس-فقط-صفحة-الدخول">
	3. استوثق من المستخدمين على جميع الصفحات.. وليس فقط صفحة الدخول
</h2>

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

<p>
	إن علمتُ Bookmarked رابطا بعد تسجيل الدخول والتجول في النظام فإن بإمكاني نسخه ثم لصقه في متصفّح آخر وسأحصُل على نفس الصفحة المُعلَّمة، دون الحاجة لتسجيل الدخول. سألتُ المطوّر “لماذا لا تتحقّق في كل صفحة من أن المستخدم مسجَّل الدخول؟ إذ يكفي أن أحصُل على رابط بعد تسجيل الدخول ونسخه ويمكنني الوصول إلى هذه الصفحة متى أردت دون الحاجة لتسجيل الدخول”، فسألني “لماذا تفعل ذلك؟”.
</p>

<p>
	أجبتُه: “لأنه يمكنني ذلك”.
</p>

<h3 id="لا-تترك-أي-شيء-للصدفة">
	لا تترك أي شيء للصدفة
</h3>

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

<p>
	لماذا؟ لأن باستطاعتهم فعل ذلك.
</p>

<p>
	ترجمة - بتصرّف - للمقال <a href="https://opensource.com/article/17/6/3-security-musts-software-developers" rel="external nofollow">3 security tips for software developers</a> لصاحبه Pete Savage.
</p>

<p>
	حقوق الصورة البارزة محفوظة لـ <a href="https://www.freepik.com/free-vector/shiny-security-background-with-padlocks_1138959.htm" rel="external nofollow">Freepik</a>
</p>
]]></description><guid isPermaLink="false">552</guid><pubDate>Sun, 29 Oct 2017 15:24:00 +0000</pubDate></item><item><title>&#x645;&#x627; &#x647;&#x64A; &#x627;&#x644;&#x62A;&#x623;&#x62B;&#x64A;&#x631;&#x627;&#x62A; &#x627;&#x644;&#x62C;&#x627;&#x646;&#x628;&#x64A;&#x651;&#x64E;&#x629; Side Effects &#x641;&#x64A; &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;&#x61F;</title><link>https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D9%84%D8%AA%D8%A3%D8%AB%D9%8A%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D8%AC%D8%A7%D9%86%D8%A8%D9%8A%D9%91%D9%8E%D8%A9-side-effects-%D9%81%D9%8A-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9%D8%9F-r549/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_10/22.jpg.3ae3be0e072ed1bc61e8cedd2ef69d5e.jpg" /></p>

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

<p>
	تطرَّقت سابقًا باختصار إلى فكرة التأثيرات الجانبية في البرمجة ولكنَّني توسَّعت فيها عندما تحدثت عن استخدام<a href="https://academy.hsoub.com/programming/php/%D9%85%D9%85%D8%A7%D8%B1%D8%B3%D8%A7%D8%AA-%D9%88%D9%85%D8%B9%D8%A7%D9%8A%D9%8A%D8%B1-%D8%AC%D8%AF%D9%8A%D8%AF%D8%A9-%D9%84%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%B4%D9%8A%D9%81%D8%B1%D8%A9-php-%D9%85%D8%B9%D8%A7%D8%B5%D8%B1%D8%A9-%D9%82%D8%AF-%D9%84%D8%A7-%D8%AA%D8%B9%D9%84%D9%85%D9%87%D8%A7-r343/#comment-1121" rel=""> معايير PSR</a> والتي يجب أن يفهمها من يهتم بأخذ فكرة عامة عن بعض نواحي البرمجة. أذكِّرك بتعريف التأثيرات الجانبية كما ذكر في معيار PSR-1 وهو:
</p>

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

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

<p>
	التحدث عن التأثيرات الجانبية في أحد السياقات قد لا يختلف عن سياقات أخرى بينما في البرمجة قد يعني شيئًا آخر.
</p>

<h2>
	التأثيرات الجانبيَّة في البرمجة
</h2>

<p>
	فكرة «التأثيرات الجانبية» عمومًا أو التعريف العام لها بسيط جدًا وهو:
</p>

<p>
	تأثير اعتيادي أو ثانوي غير مرغوب به لدواء أو علاج طبي.
</p>

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

<ul>
<li>
		نختار أن <a href="http://php.net/manual/en/function.include-once.php" rel="external nofollow">نضمِّن</a> ملفًا؛
	</li>
	<li>
		نعلم ما يفعله هذا الملف؛
	</li>
	<li>
		وبذلك، إن كنا نعلم ما الذي أدرجناه وما الذي يفعله فكيف يستطيع أن يضيف شيئًا غير مرغوب فيه؟
	</li>
</ul>
<p>
	هكذا أُسأل غالبًا عندما تميل دفة الحديث تجاه موضوع التأثيرات الجانبيَّة. لقد عمَّمتُ مفهوم التأثيرات الجانبيَّة دومًا في البرمجة على أنّه «أي شيء» يغير حالة البرنامج.
</p>

<h2>
	التأثيرات الجانبيَّة في ووردبريس
</h2>

<p>
	لنفترض أنَّك تعمل على ووردبريس ولديك ملفًا مسؤولًا عن إضافة قائمة فرعيَّة إلى قائمة موجودة في أعلى مستوى.
</p>

<p>
	يمكن أن يكون ذلك الصنف (class) بسيطًا إذ يتلخص عمله باستدعاء جزء من الواجهة البرمجية لورردبريس (<a href="https://developer.wordpress.org/reference/functions/add_submenu_page/" rel="external nofollow">WordPress <abbr title="Application Programming Interface | واجهة برمجية">API</abbr></a>)؛ وستُنفَّذ إحدى الدوال عند وقوع حدث معيّن مرتبط بخطَّاف (hook) ثمَّ ستُضاف بعدئذٍ القائمة الفرعية.
</p>

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

<p>
	يمكننا أن ندعو ما سبق بالتأثير الجانبي الذي يغير من حالة البرنامج.
</p>

<h2>
	ما الذي يجب أن تفعله الوحدة (Module)؟
</h2>

<p>
	يجب على الصنف القيام بشيء واحد بحسب مبدأ المسؤولية الواحدة (single responsibility principle) وهو:
</p>

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

<p>
	لكن عندما نضيف أمرًا جديدًا إلى الصنف ليزيد من وظائفه أو نغيّر جزءًا جوهريًا فيه فهذا يمثِّل تأثيرًا جانبيًا.
</p>

<p>
	تذكر أنَّ إضافة مسؤوليات جديدة إلى الصنف ليست أمرًا سيئًا بالمطلق (فالأمر لا يماثل التأثيرات الجانبيَّة التي تحدَّث عنها معيار PSR-1) ولكن من المهم معرفة متى يجوز ذلك ومتى يكون من المستحسن تجنبه.
</p>

<h2>
	كيف نضيف وظيفةً أخرى للبرنامج؟
</h2>

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

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

<p>
	لكن التأثيرات الجانبيَّة تظهر عند حدوث إحدى حالات البرنامج.
</p>

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

<p>
	طريقة إضافة وظيفة تعمل بالطريقة نفسها وهي: تعريف أصناف تكون مسؤولة عن أداء غرض محدَّد ثم ترك تلك الأصناف لتنفِّذ ما هي مسؤولةٌ عنه.
</p>

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

<h2>
	الخلاصة
</h2>

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

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

<p>
	إذًا هكذا تتأكد أنَّ الدالة أو الصنف أو الوحدة لا تحوي تأثيرات جانبيَّة.
</p>

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

<p>
	 
</p>

<p>
	ترجمة -وبتصرف- للمقال<a href="https://tommcfarlin.com/programming-side-effects/" rel="external nofollow"> What Are Programming Side Effects, Anyway?‎‎</a> لصاحبه Tom McFarlin.
</p>

<p>
	حقوق الصورة البارزة محفوظة لـ <a href="http://www.freepik.com/free-photo/programming-code-with-laptop-background_902700.htm" rel="external nofollow">Freepik</a>
</p>
]]></description><guid isPermaLink="false">549</guid><pubDate>Sun, 22 Oct 2017 06:01:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x645;&#x631;&#x648;&#x646;&#x629; &#x641;&#x64A; &#x635;&#x64A;&#x627;&#x63A;&#x629; &#x627;&#x644;&#x634;&#x641;&#x631;&#x629; &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x64A;&#x629; &#x62A;&#x639;&#x646;&#x64A; &#x627;&#x646;&#x62E;&#x641;&#x627;&#x636;&#x64B;&#x627; &#x641;&#x64A; &#x627;&#x644;&#x62C;&#x648;&#x62F;&#x629;</title><link>https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D9%85%D8%B1%D9%88%D9%86%D8%A9-%D9%81%D9%8A-%D8%B5%D9%8A%D8%A7%D8%BA%D8%A9-%D8%A7%D9%84%D8%B4%D9%81%D8%B1%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-%D8%AA%D8%B9%D9%86%D9%8A-%D8%A7%D9%86%D8%AE%D9%81%D8%A7%D8%B6%D9%8B%D8%A7-%D9%81%D9%8A-%D8%A7%D9%84%D8%AC%D9%88%D8%AF%D8%A9-r523/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_08/59a16ff9c09b4_main(1).png.691d9705699da50c064c5169f71f5034.png" /></p>

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

<p>
	كل يوم تقريبًا أقرأ هذه العبارة وأشباهها في تعليقات المدونة: “ما الحاجة إلى مبادئ <a href="https://academy.hsoub.com/search/?&amp;q=%D9%83%D8%A7%D8%A6%D9%86%D9%8A%D8%A9%20%D8%A7%D9%84%D8%AA%D9%88%D8%AC%D9%87&amp;type=cms_records2&amp;search_in=titles&amp;sortby=relevancy#elSearch_main" rel="">البرمجة كائنية التوجه</a> إن كانت الشفرة البرمجية تعمل بشكل جيّد دون استخدامها؟ ما الهدف من إدخال طرق وأساليب جديدة يفترض بها أن تكون أفضل من سابقاتها، إن كانت الطريقة التقليدية الحالية - والتي تتوسط <a href="https://academy.hsoub.com/programming/php/laravel/%D8%A7%D9%84%D9%85%D8%A8%D8%A7%D8%AF%D8%A6-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D9%91%D8%A9-%D9%84%D8%A5%D8%B7%D8%A7%D8%B1-%D8%A7%D9%84%D8%B9%D9%85%D9%84-eloquent-orm-r410/#%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%83%D8%A7%D8%A6%D9%86%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%88%D8%AC%D9%87" rel="">البرمجة الإجرائية وكائنية التوجه</a> - تعمل جيّدًا؟”
</p>

<p>
	لنفكّر في الأمر من زاوية مختلفة، وننظر إلى الأمور على نحو أعمّ ونفكّر من ناحية تطوير البرمجيات لا من ناحية البرمجة كائنية التوجه. هناك الكثير من الأمثلة التي تنطبق عليها عقلية “المهمّ أنّه يعمل”.
</p>

<p>
	لنأخذ لغة Perl، وهي لغة برمجية تشتهر بقدرتها على القيام بأيّ شيء بثلاث طرق مختلفة، بمعنى أنّه لا وجود لطريقة واحدة صحيحة. لست خبيرًا في Perl، لذا فلنلق نظرة على شفرة <a href="https://academy.hsoub.com/programming/ruby/" rel="">Ruby</a> التالية:
</p>

<pre class="ipsCode prettyprint lang-ruby prettyprinted" id="ips_uid_3092_7" style="">
<span class="kwd">if</span><span class="pln"> a </span><span class="pun">&gt;</span><span class="pln"> b
  m </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Hello!'</span><span class="pln">
</span><span class="kwd">end</span></pre>

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

<pre class="ipsCode prettyprint lang-ruby prettyprinted" id="ips_uid_3092_9" style="">
<span class="pln">m </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> a </span><span class="pun">&gt;</span><span class="pln"> b
  </span><span class="str">'Hello!'</span><span class="pln">
</span><span class="kwd">end</span></pre>

<p>
	أو هذه:
</p>

<pre class="ipsCode prettyprint lang-ruby prettyprinted" id="ips_uid_3092_11" style="">
<span class="pln">m </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Hello!'</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> a </span><span class="pun">&gt;</span><span class="pln"> b</span></pre>

<p>
	وإليك المزيد:
</p>

<pre class="ipsCode prettyprint lang-ruby prettyprinted" id="ips_uid_3092_13" style="">
<span class="pln">m </span><span class="pun">=</span><span class="pln"> a </span><span class="pun">&gt;</span><span class="pln"> b </span><span class="pun">?</span><span class="pln"> </span><span class="str">'Hello'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="kwd">nil</span></pre>

<p>
	أيّ الشفرات السابقة صحيحة؟ هل يمكن ﻷي مبرمج بلغة Perl أن يخبرنا بذلك؟ هل يمكن اقتراح طرق أخرى للوصول إلى نفس النتيجة؟
</p>

<p>
	أما في لغة <a href="https://academy.hsoub.com/programming/java/" rel="">Java</a> (وهي لغة أكثر صرامة من Ruby) فليس من المفاجئ أن تكون هناك طريقة واحدة للقيام بذلك:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3092_15" style="">
<span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">a </span><span class="pun">&gt;</span><span class="pln"> b</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  m </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Hello!"</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	أعتقد أنّني أخطأت، فهنالك طريقة ثانية:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3092_17" style="">
<span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">a </span><span class="pun">&gt;</span><span class="pln"> b</span><span class="pun">)</span><span class="pln"> m </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Hello!"</span><span class="pun">;</span></pre>

<p>
	ما الذي يمكن أن يجنيه المبرمجون من هذا التنوّع الكبير؟ أعتقد أن الإجابة تعتمد على كوننا نكتب الشفرة أم نقرؤها؟ كذلك يعتمد الأمر على <a href="https://academy.hsoub.com/programming/general/%D9%87%D9%84-%D8%A3%D9%86%D8%AA-%D9%85%D8%A8%D8%B1%D9%85%D8%AC-%D9%85%D8%AE%D8%AA%D8%B1%D9%82-hacker-%D8%A3%D9%85-%D9%85%D8%B5%D9%85%D9%91%D9%85-designer-%D8%9F-r522/" rel="">موقفنا تجاه البرنامج</a> الذي نعمل على إنشائه، فإما نرى بأنّه ملكنا (عقلية المخترق) أو أنّنا نبنيه وحسب (عقلية المصمّم).
</p>

<p>
	إن كنا نكتب الشفرة البرمجية، وكنا نرى أنفسنا أصحاب تلك الشفرة، فسنحتاج إلى ترسانة أسلحة <a href="https://ar.wikipedia.org/wiki/%D8%A7%D9%84%D8%AA%D8%AC%D9%85%D9%8A%D9%84_%D8%A7%D9%84%D9%84%D8%BA%D9%88%D9%8A" rel="external nofollow">التجميل اللغوي</a> Syntactic sugar لنثبت لأنفسنا بأننا أذكياء، وبالتأكيد لنتباهى أمام أصدقائنا بمفسّر Ruby الكئيب.
</p>

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

<p>
	يمكن أن نعدّ صياغة لغة Ruby والتي تتيح هذا القدر الكبير من التجميل اللغوي مثالًا واضحًا على التناقض الحاصل بين مبدأي “المهمّ أن تعمل” و “المهم أن تكون جيدة”. إذ تتمثل فلسفة Ruby في أنّه لا أهمّية لطريقة كتابة الشفرة البرمجية ما دامت تؤدّي عملها المطلوب منها. أما فلسفة Java فمختلفة تمامًا، وهي أقرب ما تكون إلى: اكتب شفرة صحيحة وستعمل بالتأكيد. إضافة إلى ذلك، فإن نوع البيانات الضعيف والديناميكي Weak and dynamic type الذي تتمتع به لغة Ruby مقابل نوع البيانات الصلب والثابت Strong and static type في Java، يعدّ دليلًا آخر عمّا أتحدّث عنه.
</p>

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

<p>
	وهذا الأمر ينطبق كذلك على عملية تطوير البرمجيات: فكلما زادت القيود المفروضة على المبرمجين وقلّت الخيارات المتاحة أمامهم في طريقة كتابة الشفرة البرمجية، زادت جودة البرنامج المكتوب بتلك اللغة. تحاول المحلّلات الساكنة Static analyzers مثل <a href="http://checkstyle.sourceforge.net/" rel="external nofollow">Checkstyle</a> في لغة Java أو <a href="https://github.com/bbatsov/rubocop" rel="external nofollow">Rubocop</a> في لغة Ruby حلّ هذه المشكلة وذلك بمنعنا من استخدام خصائص معيّنة في اللغة البرمجية، ولكنّها لا تقدّم نتائج جيّدة لأنّنا مبدعون في كتابة الشفرات بأساليب وأشكال متنوعة.
</p>

<p>
	لنعد الآن إلى السؤال الخاص بالبرمجة كائنية التوجه: ما الحاجة إلى تطوير أي شيء إن كان يؤدي عمله بهيئته الحالية؟ الجواب: البرمجة كائنية التوجه الحديثة (كما في Java، Ruby و ++C) لا تنتج شفرة برمجية ذات جودة عالية لأنّها لا تتبع تصوّرا برمجيًّا Paradigm قويًا ومقيّدًا بشكل ملائم. كل ما في الأمر أنّها توفّر الكثير من “الميزات” التي أدخلتها في الغالب ++C وبقيت فيها لأجل منفعتنا المتبادلة.
</p>

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

<p>
	ترجمة - وبتصرّف - للمقال <a href="http://www.yegor256.com/2017/04/11/flexibility-equates-lower-quality.html" rel="external nofollow">Flexibility Equates to Lower Quality</a> لصاحبه Yegor Bugayenko.<br>
	 
</p>
]]></description><guid isPermaLink="false">523</guid><pubDate>Sun, 27 Aug 2017 14:02:01 +0000</pubDate></item></channel></rss>
