لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 07/28/21 في كل الموقع
-
"أريد تعلم البرمجة لكنني لا أعرف من أين أبدأ!" هذه هي أكثر عبارة تتردد على سمعي من حديثي العهد بالبرمجة، إذ يأتيني هذا السؤال مرارًا وتكرارًا؛ وفي كل مرة أحاول أن أجيب عنه في سياقه، أجد أنني أضيف معلومات جديدة على إجاباتي السابقة، لذا قررت كتابة هذا المقال بعنوان "تعلم البرمجة" لعله يفيد الراغبين في تعلم تطوير التطبيقات في بدء رحلتهم مع تعلم البرمجة من الصفر. جدول المحتويات حرصًا على تنظيم المقالة ولتسهيل الوصول إلى القسم الذي تريده بسهولة، سنذكر هنا جدول المحتويات باختصار: ما هي البرمجة؟ لماذا تتعلم البرمجة؟ ما عليك معرفته لتصبح مبرمجًا الأدوات اللازمة للبدء في تعلم البرمجة لماذا هناك العديد من لغات البرمجة؟ مفاهيم البرمجة مصادر تعلم البرمجة تطوير واجهات المستخدم تطوير الواجهات الخلفية تعلم تطوير تطبيقات الجوال تطوير الألعاب تطوير الأنظمة المدمجة تطوير تطبيقات سطح المكتب كيفية اختيار لغة البرمجة التي تناسبك نصائح لتعلم البرمجة ما هي البرمجة؟ البرمجة هي عملية تقسيم مهمة معينة يراد تنفيذها عبر الحاسوب إلى أجزاء صغيرة ومترابطة وقابلة للتنفيذ بأوامر بسيطة. بعد ذلك، تجري كتابة هذه الأوامر والتعليمات بإحدى لغات البرمجة، والتي هي وسيلة للتخاطب مع الحاسوب. إليك المثال العملي التالي الذي يشرح ماهية البرمجة: إن كنت تتوقع زيارة صديق لك اليوم، واتصل بك ليقول لك: "أنا واقف بجانب الحديقة ولا أعرف كيف أصل إلى منزلك". أنت عادةً تمر كل يوم من جانب الحديقة وتعرف الطريق بينها وبين منزلك شبرًا بشبر. برأيك هل ينفع إن قلت له: "منزلي معروف وقريب من الحديقة وأنا كل يوم أمر من جانبها"؟ لا، بالتأكيد. تحتاج إلى أن تقسِّم المشكلة إلى أجزاء تمثل خطوات بسيطة يستطيع صديقك فهمها وتنفيذها. مثلًا، أخبره أن ينفذ الأوامر التالية: "سر إلى الأمام عشرة أمتار" ثم "اتجه إلى اليمين" ثم "سر إلى نهاية الشارع" ثم "اتجه إلى اليسار". أخبره بعد ذلك: "عُدَّ الأبنية الموجودة على اليسار حتى تصل إلى البناء الرابع" ثم "اصعد إلى الطابق الثاني" ثم "اطرق على الباب الذي سيظهر أمامك". مبارك! بهذه الطريقة، تستطيع أن تدل صديقك على منزلك بدقة. البرمجة هي الشيء نفسه تمامًا. فهل ترى التعابير المكتوبة بين علامتي الاقتباس؟ إنها التعابير التي تكتب بإحدى لغات البرمجة والتي تخاطب الحاسوب بدلًا من صديقك السابق. لغات البرمجة هي مجموعة من المفردات والقواعد اللغوية التي تشكل لغةً وسيطةً للتخاطب مع الحاسوب وأمره بتنفيذ تعليمات وأشياء محدَّدة. فلا الحاسوب يفهم لغة البشر ولا البشر يفهمون لغة الحاسوب، لذا كان هنالك حاجة ملحة لوجود لغة وسيطة يفهمها كلاهما؛ نتيجةً لذلك، انبثق مفهوم لغة البرمجة. بعبارة أخرى، لو أردنا أن نقول للحاسوب "افعل كذا"، فسنحتاج إلى لغةٍ مشتركةٍ بيننا وبينه ليفهم ما نبتغيه، وهنا يأتي دور لغات البرمجة، إذ يمكنك أن تعدّ لغات البرمجة على أنها وسيط بين المبرمج والحاسوب. يهتم المبرمج بالتفكير في تسلسل الخطوات التي على الحاسوب القيام بها لإتمام العمل المطلوب منه (مثل حساب العمر اعتمادًا على تاريخ الولادة)، ثم كتابة هذه الخطوات بترتيب منطقي بإحدى لغات البرمجة. ربما لاحظتَ في الجملة السابقة أن جزءًا من مهمة المبرمج هو التفكير المنطقي، وهذا يجعلنا ننتقل إلى السؤال الشائع "هل أستطيع تعلم البرمجة وأصبح مبرمجًا؟" أو "هل أنا مؤهل لأصبح مبرمجًا؟". لماذا تتعلم البرمجة؟ يبدو أن تعلم البرمجة من الصفر ليس بالصعوبة التي توقعتها، لكنك تريد حافزًا يجعلك تتعلم البرمجة. تسمع كثيرًا أن البرمجة هي مجال المستقبل، وأن وظائف المبرمجين ستكتسح مجال التوظيف في السنوات القادمة؟ أستطيع أن أؤكد لك ذلك، كما أنَّ وظائف البرمجة هي من أعلى الوظائف دخلًا. فلو كنت تريد بدء مشوارك الاحترافي وتريد عملًا مستقرًا وذا دخلٍ ممتاز، فإن تعلم البرمجة والعمل بها هو أفضل خيارٍ أمامك. وظائف البرمجة مريحة عمومًا، فالعمل كله مكتبي أمام حاسوب في بيئة مريحة ومناسبة، وأغلبية الشركات تتبع نظام العمل 40 ساعة في الأسبوع (أي 5 أيام لمدة 8 ساعات يوميًا)، ولا تغفل عن قدرتك على العمل عن بعد من خلال الانترنت أو كمستقل في أوقات فراغك. تعلم البرمجة سيوسع أفق تفكيرك كثيرًا، خصوصًا أن تعاملك مع الحاسوب يتبع إلى التفكير المنطقي، وستجد أن البرمجة ستسهل لك القيام بأمور أخرى في الحاسوب. ما عليك معرفته لتصبح مبرمجًا يتردد الكثيرون في تعلم البرمجة متذرعين بأن مستواهم في الرياضيات ليس ممتازًا، وهذا ليس صحيحًا، فصحيحٌ أنَّ هنالك أمور تعترضك أثناء أداء عملك كمبرمج تتطلب خبرة في الرياضيات، إلا أنَّه قد تمر عليك فترات طويلة لا تحتاج فيها إلى مسائل رياضية. كل ما يلزمك للبدء في تعلم البرمجة هو الأساسيات التي يعرفها الجميع. إلى حين اعتراضك أية مسألة أو مشكلة تتطلب مهارة في الرياضيات، هنالك الكثير من المصادر والمراجع التي تستطيع الرجوع إليها آنذاك. بعبارة أخرى، أجِّل هذا الأمر قليلًا ولا تخف. الأهم من ذلك هو أن تكون قادرًا على التفكير بشكل منطقي. التفكير المنطقي التفكير المنطقي هو المهارة التي تجمع كافة المبرمجين تحت مظلة واحدة، وهي أساس كتابة الخوارزميات، إذ يجب أن تكون قادرًا على اكتساب هذه المهارة وتطويرها. الخوارزميات كلمة "الخوارزميات" هي الكلمة المرعبة التي ينفر منها البعض، فكل ما يتخيلونه عند ذكرها هو الرياضيات المعقدة والمعادلات الطويلة والرموز العجيبة، لكن الأمر بسيط جدًا؛ فالخوازرميات هي تطبيقٌ للتفكير المنطقي في خطوات متسلسلة واضحة تمامًا لحل مشكلة ما. لكي أوضِّح لك أن الخوارزميات ليست أمرًا معقدًا، سأخبرك بكيفية كتابة برنامج يسأل المستخدم عن سنة ميلاده، ثم يعيد عمره الحالي بالسنوات. الخطوة الأولى: إظهار رسالة نصية نطلب فيها من المستخدم إدخال تاريخ ميلاده. الخطوة الثانية: تخزين سنة الميلاد التي أدخلها المستخدم. الخطوة الثالثة: الحصول على السنة الحالية. الخطوة الرابعة: طرح مدخلات المستخدم من السنة الحالية. الخطوة الخامسة والأخيرة: إظهار الناتج. ما سبق هو خوارزمية بسيطة تتألف من خطوات متسلسلة، لكن إذا أمعنّا النظر فيها سنجد خللًا في حال أدخل المستخدم تاريخًا أكبر من التاريخ الحالي، أي لو أدخل 2050 مثلًا بدلًا من 1995. عندها سيصبح العمر المعاد من الخوارزمية سالبًا، ويمكننا أن نحل هذه الإشكالية منطقيًا بوضع شرط يمنع المستخدم من إدخال تاريخ أكبر من التاريخ الحالي. إطارات العمل كلمة أخرى شائعة جدًا في عالم البرمجة هي "إطارات العمل" frameworks، إطارات العمل هي مجموعة من الشيفرات البرمجية التي تسهل على المبرمج إنشاء التطبيقات، بتوفير وحدات جاهزة تقدم خدمات متنوعة مثل تسجيل المستخدمين، وإرسال البريد الإلكتروني، والتعامل مع قواعد البيانات. أي يمكنك أن تعدّها أدوات برمجية تساعدك في برمجة تطبيقك وتسهِّل لك فعل ذلك. الأدوات اللازمة للبدء في تعلم البرمجة تحتاج إلى حاسوبٍ بمواصفات جيدة (ليس من الضروري أن يكون من أفضل الحواسيب، وإنما أن يمتلك مقدارًا جيدًا من الذاكرة العشوائية). لا ننصح بمواصفات معينة أو نظام تشغيل معين، استعمل ما يحلو لك وما ترى نفسك معتادًا عليه (سواءً كان ويندوز أو لينكس أو ماك). ستحتاج أيضًا إلى اتصالٍ جيد بالإنترنت للوصول إلى المواد التعليمية، ولتنزيل البرمجيات والمكتبات اللازمة للتطوير. أما بخصوص أدوات التطوير، فستحتاج إلى برمجية لكتابة الشيفرات، وهنالك نوعان رئيسيان لها: المحررات النصية: مثل Visual Studio Code أو Atom أو Sublime Text أو Bracktes أو Notepad++. وهذه المحررات النصية تكون بسيطة في أغلبها، وتوفر ميزات أساسية مثل تلوين الشيفرات، وبعض ميزات الإكمال التلقائي، وتدعم أغلبيتها إضافات لزيادة وظائفها. وظيفة هذه المحررات النصية عمومًا هي تعديل الشيفرات بسهولة وسرعة. ننصحك بتجربة Visual Studio Code لشهرته حاليًا وكثرة إضافاته ودعمه الممتاز من شركة Microsoft. بيئات التطوير المدمجة: مثل Visual Studio و Eclipse و Android Studio و NetBeans و Apple Xcode وغيرها. وهذه البيئات توفر ميزات أكثر بكثير من المحررات النصية، مثل تشغيل الشيفرات وتنقيحها (debugging) وميزات التحكم بالإصدارات (version control) والاتصال بقواعد البيانات وخلاف ذلك. لماذا هناك العديد من لغات البرمجة؟ قد تتساءل، لماذا هناك العديد من لغات البرمجة؟ أليست هذه اللغات كلها تنفذ الهدف ذاته؟ لماذا لا يكون هنالك لغة موحدة بين المبرمجين والحاسوب؟ الحقيقة أنّه توجد لغة برمجة واحدة ولكن ليست إحدى اللغات التي تراها أمامك في الصورة. اللغة التي نشير إليها هي لغة الآلة التي يستطيع معالج الحاسوب قراءتها وفهمها. أتتساءل ما هي لغة الآلة وكيف تبدو؟ إليك مقطعًا منها: معلومٌ أنّ معالج الحاسوب لا يفهم شيئًا سوى الأصفار والواحدات، وهذه اللغة -أي لغة الآلة- هي تمثيل للأصفار والواحدات بطريقة تخبر الحاسوب بما يجب عليه فعله. الجدير بالذكر أن هذه اللغة عصية الفهم على البشر، وحتى إن استطعت كتابة شيفرة مثل الشيفرة الموضحة بالصورة (كما في السنوات الأولى من بداية اختراع الحاسوب)، لن يفهمها الآخرون ولن يستطيع أحد التعديل على الشيفرة وتطويرها لاحقًا باستثنائك. سعيًا لإيجاد لغة قريبة من لغة البشر، انقسمت لغات البرمجية إلى قسمين: لغات البرمجة منخفضة المستوى، ولغات البرمجة عالية المستوى وذلك تبعًا لمدى قربها من لغة الآلة أو لغة البشر على التوالي. أي أنّ لغات البرمجة منخفضة المستوى هي اللغات الأقرب للغة الآلة آنفة الذكر مثل لغة التجميع Assembly language، ولغات البرمجة عالية المستوى هي اللغات الأقرب للغة البشر مثل لغة بايثون وجافا. تنفيذ البرامج المكتوبة بلغات برمجة عالية المستوى يقودنا الحديث عن اللغات عالية المستوى واللغات منخفضة المستوى إلى الحديث عن كيفية تنفيذ المعالج للشيفرة المكتوبة بلغة عالية المستوى لا يفهمها المعالج (أليس هذا ما تفكر به الآن؟). عرفنا أن المعالج يفهم الأوامر والتعليمات المكتوبة بلغة منخفضة المستوى (لغة الآلة)، فمَثَلُ هذه العملية كمَثَلِ شخصٍ أجنبي تعلم اللغة العربية وبدأ التحدث مع ناطقٍ باللغة العربية، إذ يمكن لهما التواصل مباشرةً - ليخبر كل منها ما يريد من الآخر فعله - دون وسيط. أمَّا مَثَلُ كتابة برنامج بلغة عالية المستوى أقرب إلى لغة البشر والطلب من الحاسوب تنفيذه كمثل ناطق باللغة الهندية يريد التخاطب مع ناطق باللغة العربية دون أن يفقه أحدهما لغة الآخر. في هذه الحالة، لن يستطيع أحدهما فهم ما يتكلم به الآخر وستفشل عملية التواصل. قد تقول: لماذا لا يحضران مترجمًا يترجم ما يقوله كل منها للآخر؟ حسنًا، هذا ما يحصل تمامًا عندما يراد تنفيذ برنامج بلغة لا يفهمها معالج الحاسوب. في اللغات البشرية، هنالك نوع واحد من المترجمين يعرفه الجميع للترجمة من لغة إلى آخرى؛ أما في لغات البرمجة، هنالك نوعان من المترجمين بين اللغات هما: المفسر interpreter، والمترجم compiler. بناءً على ذلك، تنقسم لغات البرمجة إلى لغات مفسرة ولغات مترجمة. (من الآن وصاعدًا، كلما ذكرنا لغات البرمجة، فنحن نشير إلى لغات البرمجة عالية المستوى.) -المفسر (interpreter): وهو برنامج خاصٌ يفسِّر الشيفرة المصدرية لبرنامج مكتوب بلغة عالية المستوى سطرًا بسطر ويحولها إلى لغة منخفضة المستوى لينفذها الحاسوب مباشرةً. -المترجم (compiler): وهو برنامج خاصٌ يحوِّل الملفات المصدرية لبرنامج مكتوب بلغة عالية المستوى إلى ملف تنفيذي مكتوب بلغة الآلة دفعةً واحدةً، ثم يمكن تشغيل الملف التنفيذي على الحاسوب للقيام بالمهمة المطلوبة. لماذا يوجد الكثير من لغات البرمجة عالية المستوى؟ الآن وبعد أن عرفت الفرق بين لغة الآلة ولغة البشر، لربّما ما زلت تتساءل عن كثرة اللغات البرمجية عالية المستوى المتوافرة وعدم وجود لغة واحدة. نستطيع القول أنك خطوت خطوةً جيدةً للأمام إذ أصبحت الآن أكثر دقة. جواب سؤلك هو أنّ كل لغات البرمجة تُستخدم لتحويل فكرة منطقية إلى سلسلة أوامر يمكن للحاسوب أن ينفذها. فعلى سبيل المثال لا الحصر يمكنك استخدام أي من Ruby أو Java أو Python أو C# أو Go أو JavaScript لبناء موقع ويب. لكن يمكنك أن تعدّ لغات البرمجة على أنها أدوات، وكل أداة تسهّل مهمة دونًا عن أخرى. فعلى سبيل المثال، السيارة والحافلة والدراجة والمحراث الزراعي كلها وسائط نقل، لكنها مختلفة الاستخدام؛ فلا يمكنك أن تذهب وعائلتك لقضاء إجازة صيفية مستخدمين المحراث الزراعي، كما لا يمكنك استخدام سيارة سباق في مدينة مكتظة ذات شوارع ضيقة للذهاب بها إلى العمل. مع أن آلية عمل هذه المركبات متشابهة. والأمر سيانٌ بالنسبة إلى البرمجة. خلاصة القول أنّ هنالك لغات برمجة متخصصة بإنشاء تطبيقات سطح المكتب، وأخرى متخصصة بإنشاء تطبيقات الجوال، وأخرى تستعمل خصيصًا لمواقع الويب، وأخرى لبرمجة العتاد، وهذا ما يحيلنا إلى الحديث عن مجالات البرمجة واللغات الأنسب لكلٍ منها. مفاهيم البرمجة "حسنًا، اقتنعتُ أن البرمجة مناسبة لي وليست صعبة كما كنتُ أتخيل، من أين أبدأ طريقي في تعلم البرمجة إذًا؟" قبل الإجابة عن السؤال السابق، سآخذ وقتي لأشرح لك بعض المفاهيم الخاصة بالبرمجة، ثم سنتحدث عن مجالات العمل فيها وما المسار الأفضل لتعلمك كلًا منها. أنت تعلم أن البرنامج هو سلسلة أوامر ينفذها الحاسوب لحل مشكلة ما، والبرنامج نفسه مكتوب بلغة يفهمها الحاسوب تسمى لغة الآلة. من الأمور الملحوظة التركيز كثيرًا على لغة البرمجة ذاتها أثناء بداية تعلم البرمجة. سأخبرك حقيقةً صادمةً: "لغة البرمجة التي تستعملها ليست بتلك الأهمية التي تتوقعها"، أنا لا أقول لك أن جميع لغات البرمجة متماثلة أو تُستعمل لنفس الاستعمالات، لكن لا تركِّز كثيرًا على تعلم كيفية الكتابة في لغة برمجة ما وتهمل المفاهيم البرمجية التي تقف وراءها. المتغيرات والثوابت عليك أن تتعرف على مفهوم المتغيرات variables المستعمل في جميع لغات البرمجة، والذي يعني إسناد قيمة ما إلى رمز أو كلمة وتخزين هذه القيمة في الذاكرة. فلو أردنا أن نخزن العبارة "Hello World" في متغير ما فنكتب شيئًا شبيهًا بما يلي: var variable_name = "Hello World"; أي أننا نسند الجزء الموجود على يمين إشارة المساواة إلى المتغير المذكور على يسار إشارة المساواة. يمكننا أن نستنتج من اسم "المتغيرات" أن قيمتها قابلة للتغيير خلال تنفيذ البرنامج، فيمكننا في مكانٍ ما من الملف المصدري أن نعيد تعريف المتغير السابق بكتابة: var variable_name = "New value"; أما الثوابت فهي تتشابه مع المتغيرات في كثيرٍ من النواحي، إلا أنك لا تستطيع إعادة تعريف قيمتها بعد تعريفها أول مرة. قد تستفيد من الثوابت عندما تكون متأكدًا تمامًا من عدم تغيير القيمة خلال فترة تنفيذ البرنامج. فلو أردنا تعريف ثابت اسمه pi يحتوي على القيمة 3.14 (والتي سنعرف أنها لن تتغير مطلقًا)، فيمكننا أن نكتب: const pi = 3.14; وإذا حاولتَ تغيير قيمة الثابت بعد تعريفه فستحصل على رسالة خطأ. الشروط تدعم جميع لغات البرمجة تعريف شروط تُنفَّذ في حالات معينة. ففي الخوازرمية السابقة التي شرحنا فيها حساب العمر، يمكننا أن نكتب الشرط بالعربية كما يلي: إذا كان (تاريخ الميلاد أكبر من التاريخ الحالي): نقول للمستخدم أن هنالك خطأ وإلا: سنحسب العمر بطرح تاريخ الميلاد من التاريخ الحالي وإذا أردنا كتابتها بإحدى لغات البرمجة فستبدو شبيهةً بما يلي: if ( user_birth > current_year ) { // ERROR! } else { age = current_year - user_birth; } لا تلقِ للأقواس بالًا، فهي جزء من لغة البرمجة، وقد تختلف من لغة لأخرى، وليست موضع اهتمامنا حاليًا. حلقات التكرار ماذا لو كانت لدينا قاعدة بيانات فيها أكثر من مستخدم ولكل مستخدم تاريخ ميلاد. لا تقل لي سنأخذ التواريخ يدويًا وندخلها إلى البرنامج! هذا مضيعةٌ للوقت، والصواب هو إنشاء حلقة تكرار تأخذ قيمة تاريخ الميلاد الخاص بكل مستخدم ثم تحسب عمره كما أسلفنا في القسم السابق. دعنا نعدل الخوارزمية البسيطة لنضيف تكرارًا فيها: ما أجمل البرمجة! تخيل لو كان عندك ألف مستخدم، وكان عليك حساب أعمارهم، يمكنك بضغطة زر أن تحسبها كلها. الدوال الدالة function هي مجموعة من التعليمات البرمجية التي تقبل مدخلات وتعيد القيمة المطلوبة. تكون الدوال عادةً قصيرةً وتقوم بمهمة وحيدة فقط. فمثلًا لو أردنا تعريف دالة باسم divide تقبل عددين، وتعيد ناتج قسمة العدد الكبير على الصغير، فيمكننا أن نكتب الخورزمية الآتية: مصادر تعلم البرمجة للمبتدئين أول ما سيتبادر إلى ذهنك بعد قرارك تعلم البرمجة هو من أين سأتعلم؟ هنا يأتي دور القسم التعليمي المتكامل في حسوب ليقدم للمبتدئ (والمحترف على حدٍ سواء) محتوى علمي مميز ومبسط. تزخر أكاديمية حسوب بالمحتوى المفيد عن تعلم البرمجة للمبتدئين وحتى الخبراء أي على كافة المستويات، ستجد فيها أقسامًا تشرح لغات البرمجة وتقنياتها كلها. ولدينا قسم للأسئلة البرمجية التي يمكنك أن تطرح فيه سؤالك وسيجيب عليه أحد أفراد مجتمع أكاديمية حسوب. أضف إلى ذلك أن الأكاديمية توفر قسمًا للدورات المتخصصة التي تبدأ معك من الصفر وحتى احتراف لغة البرمجة التي تريد تعلمها مع كادر من المدربين المختصين الذي يقدمون لك المساعدة ويجيبون عن جميع استفساراتك. وهنالك قناة للأكاديمية على يوتيوب ننشر فيها دوريًا دروسًا قصيرةً عن تساؤلات محددة ومفاهيم البرمجة وخلافه. لا تنسَ الاشتراك في قناة الأكاديمية لتصلك الفيديوهات الجديدة. ماذا لو أردتَ التعمق أكثر في لغة معيّنة؟ تأتي هنا موسوعة حسوب التي توفِّر توثيقًا عربيًا كاملًا وعالي الجودة، مدعّمًا بالأمثلة لمختلف لغات البرمجة وتقنيات تطوير الويب والجوال. ستكون الموسوعة مرجعًا تعود إليه في مسيرتك البرمجية، وتستعين بها لمعرفة التفاصيل الدقيقة عن لغات البرمجة. فأنت لست مضطرًا لحفظ كل شيء في لغة البرمجة، إذ حتى المبرمجون المختصون ذوو الخبرة يعودون إلى التوثيقات بين الفينة والأخرى أثناء عملهم. لننطلق الآن للتحدث عن مجالات البرمجة الأساسية وما اللغات والتقنيات المستعملة فيها. تطوير واجهات المستخدم يبدأ أغلبية المطورين مشوارهم من خلال تعلم تطوير واجهات المستخدم عند اتخاذ قرارهم لدخول مجال تطوير وبرمجة مواقع الويب، وذلك لسهولة اللغات المستعملة في هذا المجال. هدف هذا المجال هو تطوير صفحات الويب التي تعرض محتوى مختلف مواقع الويب، وهي الصفحات التي تراها عند زيارتك لموقع أكاديمية حسوب أو موسوعة حسوب أو مستقل أو أي موقع آخر. تتألف صفحة الويب من مجموعة من المكونات، وتُكتَب هذه المكونات باستخدام لغة HTML، وبعد كتابة البنية الهيكلية للصفحة سنأتي على تنسيقها باستخدام لغة CSS، وهي اللغة المستعملة لإضفاء شكل وهيئة على عناصر HTML. أي أن عناصر HTML تصف محتوى الصفحة (مثل الترويسات والقوائم والمحتوى الرئيسي والفقرات والروابط والصور والفيدوهات)، وقواعد CSS تُعرِّف كيف يجب أن تبدو هذه العناصر (سواءً من ناحية الألوان أو المساحات أو الخلفيات أو الخطوط أو خلاف ذلك). تأتي لغة JavaScript مكملةً لهما وتستعمل لإعطاء بعض عناصر الصفحة صفاتٍ تفاعلية، مثل شريط متحرك من الصور أو قوائم تظهر عند وقوع حدث معيّن …إلخ. هنالك تقنيات كثيرة تستعمل في تسهيل إنشاء الواجهات الأمامية وسنذكر بعضها: إطار Bootstrap لتسهيل تنسيق عناصر الصفحة. مكتبة jQuery لتسهيل التعامل مع عناصر الصفحة باستخدام JavaScript. مكتبة React JS: لتسهيل تطوير واجهات المستخدم بالاعتماد على مكونات قابلة لإعادة الاستخدام. لغة Sass لإنشاء ملفات CSS بسرعة وسلاسة. أدوات بناء مثل Webpack الذي يسهِّل تحويل الملفات المصدرية للتطبيق إلى النسخة النهائية التي ستعرَض للمستخدم. لتعلم تطوير واجهات المستخدم، ننصحك بالتسجيل في دورة تطوير واجهات المستخدم المقدمة من أكاديمية حسوب، والتي تحتوي على أكثر من 72 ساعة فيديو تتوزع على ثمانية مسارات تعليمية تشرح أمثلة عملية تطبيقية شرحًا مفصلًا. أثناء مشاهدتك للدورة، يمكنك أن تعود إلى موسوعة حسوب لتتعرف على توثيق لغات البرمجة المذكورة، وذلك للاطلاع على تفاصيل وأمثلة أكثر عن كل جزئية من الجزئيات المشروحة في دورة تطوير واجهات المستخدم. اللغات والتقنيات المستخدمة في تطوير واجهات المستخدم: HTML و CSS و JavaScript و Bootstrap و Sass و jQuery و Webpack. تطوير الواجهات الخلفية قد تتساءل: ماذا يعني تطوير الواجهات الخلفية (backend)؟ وما الفرق بينه وبين تطوير واجهات المستخدم (frontend)؟ الفرق بينهما هو أن الواجهات الخلفية هي البرمجيات التي تُنفَّذ على الخوادم وتجري عمليات عليها مثل التعامل مع قواعد البيانات والملفات والخدمات الخارجية، أما واجهات المستخدم فهي الصفحات التي تظهر على شاشة الزائر في متصفحه. سأطرح عليك الخيارات المتاحة أمامك للبدء في مجال تطوير الواجهات الخلفية، وجميع اللغات المذكورة هنا هي لغات ناجحة وقوية ولا يهم أي لغة تختار منها، المهم أن تتطلع على شيفرات بسيطة من كل لغة وتتخذ قرار تعلمها، واحذر من تضييع وقتك في التنقل بين لغات البرمجة والبحث عن أفضلها، فكلُ لغةٍ ممتازةٌ في مجالها. تعلم البرمجة باستخدام لغة PHP بعد تبيان الفرق بين واجهات المستخدم والواجهات الخلفية، يمكن القول بأن أشهر لغة لتطوير الواجهات الخلفية هي لغة PHP، وتتفوق على اللغات المنافسة لها أضعافًا مضاعفة. تعلم البرمجة بلغة PHP أمر سلس، فهي لغة سهلة التعلم وبسيطة الشكل، والمجتمع حولها كبير وتطويرها مستمر. هذه اللغة هي خيار استراتيجي لمن يريد الدخول إلى مجال تطوير الواجهات الخلفية. هنالك عدد من البرمجيات المكتوبة بلغة PHP مثل ووردبريس WordPress ودروبال Drupal وميدياويكي MediaWiki (التي تشغِّل ويكيبيديا وموسوعة حسوب) وغيرها الكثير؛ إضافةً إلى عددٍ كبير من إطارات العمل مثل Laravel و CodeIgniter و Symfony و CakePHP و Yii وغيرها، وهذا ما يدل على إمكانيات اللغة الكبيرة والمجتمع الكبير الذي يحيط بها. لتعلم تطوير الواجهات الخلفية باستخدام PHP، ننصحك بالتسجيل في دورة تطوير تطبيقات الويب باستخدام PHP المقدمة من أكاديمية حسوب، والتي تحتوي على 75 ساعة فيديو تتوزع على اثني عشر مسارًا تعليميًا تبدأ بأساسيات لغة البرمجة PHP للمبتدئين، مرورًا بشرح أمثلة عملية تطبيقية بالتفصيل، ووصولًا لتطوير التطبيقات باستخدام إطار العمل Laravel، وشرح تطوير ووردبريس. أثناء مشاهدتك للدورة، يمكنك أن تعود إلى موسوعة حسوب للاطلاع على توثيق لغة PHP وإطار العمل Laravel. اللغات والتقنيات المستخدمة في تطوير تطبيقات الويب باستخدام PHP هي: PHP و Laravel وقواعد البيانات (مثل MySQL و PostgreSQL وغيرها). تعلم البرمجة باستخدام لغة روبي - Ruby إذا كنتَ تبحث عن لغةٍ أنيقة وسهلة الاستعمال فستجد ضالتك في لغة روبي Ruby فهي من أجمل اللغات وأسلسها كتابةً، وهي لغة برمجة عامة يمكن استخدامها لتطوير مختلف أنواع التطبيقات ومن ضمنها تطوير تطبيقات الويب. ذاع صيت روبي في تطوير الويب بعد نشر إطار العمل Ruby on Rails (يشار إليه اختصارًا "ريلز"). هنالك إطارات عمل أخرى مثل سيناترا Sinatra لكن يبقى ريلز أشهرها. لتعلم تطوير الواجهات الخلفية باستخدام روبي، ننصحك بالتسجيل في دورة تطوير تطبيقات الويب باستخدام روبي المقدمة من أكاديمية حسوب، والتي تحتوي على 20 ساعة فيديو تتوزع على أربعة مسارات تعليمية تشرح أمثلة عملية تطبيقية شرحًا مفصلًا، وتشرح تطوير التطبيقات باستخدام إطار العمل ريلز. أثناء مشاهدتك للدورة، يمكنك أن تعود إلى موسوعة حسوب للاطلاع على توثيق لغة روبي وإطار العمل ريلز. اللغات والتقنيات المستخدمة في تطوير تطبيقات الويب باستخدام روبي: روبي و ريلز وقواعد البيانات (مثل MySQL و PostgreSQL وغيرها). تعلم البرمجة باستخدام لغة جافا سكربت - JavaScript نعم! تستعمل JavaScript في تطوير الواجهات الخلفية أيضًا. الفضل يعود لبيئة Node.js التي تسمح للمطورين باستخدام JavaScript لكتابة برمجيات تعمل من جهة الخادم وذلك لتوليد صفحات ويب ديناميكية قبل إرسالها إلى المتصفح، وتستطيع Node.js التعامل مع الملفات وقواعد البيانات ومختلف أنظمة الشبكات وخدمات أنظمة التشغيل. هل يوجد أجمل من استخدام نفس اللغة لبرمجة الواجهات الأمامية لمواقع الويب والواجهات الخلفية؟ وكل ذلك باستخدام لغة سهلة التعلم والاستعمال ومدعومة دعمًا ممتازًا من المجتمع. تعلم لغة JavaScript لتطوير الواجهات الخلفية من خلال التسجيل في دورة تطوير التطبيقات باستخدام JavaScript المقدمة من أكاديمية حسوب، والتي تحتوي على 69ساعة فيديو تتوزع على أحد عشرمسارًا تعليميًّا تشرح أمثلة عملية تطبيقية شرحًا مفصلًا، وتشرح تطوير الواجهة الخلفية باستخدام Node.js. أثناء مشاهدتك للدورة، يمكنك أن تعود إلى موسوعة حسوب للاطلاع على توثيق لغة JavaScript وبيئة العمل Node.js. اللغات والتقنيات المستخدمة في تطوير تطبيقات الويب باستخدام JavaScript: لغة JavaScript وبيئة Node.js وإطار العمل Express.js وقواعد البيانات (مثل MongoDB و MySQL و PostgreSQL وGraphQL وغيرها). تعلم البرمجة باستخدام لغة بايثون - Python لغة بايثون متعددة الاستعمالات، ويمكن عدّها على أنها أسهل لغة برمجة على الإطلاق، إذ تبدو شيفرتها البرمجية كأنها مقالة مكتوبة باللغة الإنكليزية. إذا أردتَ لغةً سهلةً ومدعومةً دعمًا ممتازًا ولها أطر عمل كثيرة فأنت تبحث عن لغة بايثون. الخيارات المتاحة أمامك هي إطار العمل جانغو (Django) وفلاسك (Flask) وغيرها، يمكنك تعلم لغة البرمجة بايثون لتطوير الواجهات الخلفية من خلال قراءة سلاسل المقالات عن تعلم بايثون في قسم البرمجة في أكاديمية حسوب، ثم الانتقال إلى تعلم إطار العمل جانغو أو فلاسك. يمكنك أن تعود إلى موسوعة حسوب للاطلاع على توثيق لغة بايثون. تعلم لغة بايثون لتطوير الواجهات الخلفية من خلال التسجيل في دورة تطوير التطبيقات باستخدام Python المقدمة من أكاديمية حسوب، والتي تحتوي على 69 ساعة فيديو تتوزع على عشرةمسارات تعليمية تشرح أساسيات لغة بايثون للمبتدئين، ثم تطبق عمليًا بأمثلة واقعية، وتشرح إطار العمل جانغو Django وفلاسك Flask. اللغات والتقنيات المستخدمة في تطوير تطبيقات الويب باستخدام بايثون: لغة بايثون وإطارات العمل المبنية عليها (مثل جانغو وفلاسك) وقواعد البيانات (مثل MySQL و PostgreSQL وغيرها). تعلم تطوير تطبيقات الجوال ازداد عدد تطبيقات الجوال لأنظمة أندرويد و iOS ازديادًا كبيرًا في الفترة الماضية، وأصبح لكل شركة أو خدمة تطبيق خاص بها يسهِّل على مستخدميها الوصول إلى الخدمات التي توفرها. النظامان الرئيسيان المسيطران على سوق الجوال حاليًا هما أندرويد ثم iOS. يمكن برمجة تطبيقات أندرويد بلغة Java أو Kotlin (أو غيرهما) وبرمجة تطبيقات iOS باستخدام Swift (وغيرها). ستكتشف أنَّ عليك تطوير تطبيقين منفصلين تمامًا، واحد لهواتف أندرويد وآخر لهواتف iOS، وذلك يسبب زيادةً في حجم العمل المطلوب وصعوبةً في إدارة التغييرات. بسبب ذلك، ظهر مفهوم "التطبيقات متعددة المنصات"، وهي تطبيقات تعمل على نظام أندرويد و iOS دون أي تعديلات، وذلك باستخدام تقنيات مشتركة وهي في الغالب تقنيات الويب. أي أصبح بإمكان مطوري الويب الاستفادة من معلوماتهم في تطوير تطبيقات الجوال باستخدام منصات مثل آيونيك Ionic. تسمح آيونيك Ionic للمبرمجين بالتعامل مع مختلف وظائف الجهاز باستخدام لغة JavaScript، مثل الوصول إلى الموقع الجغرافي، والتقاط صور بالكاميرا، والتعامل مع الملفات وخلاف ذلك. طوِّرت في الفترة الماضية تقنيات أخرى مبنية على JavaScript مثل React Native المبنية على مكتبة React.js والتي تسمح للمطورين بكتابة تطبيقات أصيلة باستخدام تقنيات الويب. تستطيع تعلم تطوير تطبيقات الجوال عبر Ionic وعبر React Native من خلال التسجيل في دورة تطوير التطبيقات باستخدام لغة JavaScript المقدمة من أكاديمية حسوب، والتي تحتوي على 69 ساعة فيديو تشرح أمثلة عملية تطبيقية شرحًا مفصلًا. وكالعادة يمكنك أثناء مشاهدتك للدورة أن تعود إلى موسوعة حسوب للاطلاع على التوثيقات اللازمة. اللغات والتقنيات المستخدمة في تطوير تطبيقات الجوال: Java و Swift و Kotlin و Ionic و React Native وغيرها. تطوير الألعاب تطوير الألعاب هو المجال الذي يحلم جميع مستخدمي الحاسوب بالدخول إليه. فالأغلبية تعرفوا على الحاسوب من خلال ألعاب الفيديو ومن ثم بدؤوا برحلة الاستكشاف عن البرمجة والتطوير. أغلب من يجيب عن تطوير الألعاب يقول "عليك بتعلم لغة C++" لكن دعني أفصِّل لك الأمر قليلًا. برمجة الألعاب تتطلب عملًا كثيرًا من فريق عمل كبير، مدعوم من شركة تجارية. من الصعب على مطوِّر وحيد أن ينشئ لعبة كاملة من الصفر دون فريق. تُطور أغلبية الألعاب باستخدام محرِّك ألعاب Game Engine والذي يسهِّل الأمر على المطورين ويتيح بيئة تطوير مناسبة للألعاب، ويتيح الميزات الأساسية لجميع الألعاب مثل التحكم بالكاميرا ونمذجة الشخصيات ثلاثية الأبعاد وتحريكها والأمور الفيزيائية الأخرى. هنالك عدد كبير من محركات تطوير الألعاب، ومن المرجح أنك شاهدت شعارها في الألعاب التي لعبتها من قبل، ومن أشهرها: Unreal Engine و Unity و Godot. يمكن التعامل مع هذه المحركات باستخدام عدِّة لغات، مثل C++ (وهي أشهرها)، وجافا (خصوصًا للألعاب على هواتف أندرويد) وحتى يمكن استخدام JavaScript في التعامل مع بعضها. تذكر أنّ الألعاب غير محدودة بتطبيقات سطح المكتب أو الهواتف، فهنالك ألعاب كثيرة تعمل على المتصفحات باستخدام تقنيات HTML5 و JavaScript. اللغات والتقنيات المستخدمة في تطوير الألعاب: C++ و Java و JavaScript ومحركات Unity و Unreal Engine و Godot. برمجة الذكاء الاصطناعي يُعد الذكاء الاصطناعي (AI) من المجالات الرائدة والمطلوبة بكثرة في سوق العمل اليوم، لاسيما بعد أن أصبحت تطبيقاته في متناول الجميع وبات يستخدم في العديد من المجالات فتعلمك لهذا المجال الرائد يعزز قدراتك كمبرمج ويساعد على تعزيز تطبيقاتك بقدرات الذكاء الاصطناعي القوية. يتفرع الذكاء الاصطناعي لعدة مجالات من أبرزها تعلم الآلة والتعلم العميق التي تُمكّن الحواسيب من التعلم من البيانات وتحسين أدائها بمرور الوقت دون الحاجة لبرمجة تقليدية. كي تتعلم برمجة الذكاء الاصطناعي تحتاج لامتلاك فهم جيد للبرمجة وتحليل البيانات ويمكنك استخدام لغات برمجة متعددة في هذا المجال أشهرها لغة البرمجة بايثون التي توفر الكثير من المكتبات والأطر المساعدة مثل تنسرفلو TensorFlow وكيراس Keras وبايتورش PyTorch وباندا Pandas. إذا كنت مهتمًا بتعلم هذا الاختصاص القوي فستوفر لك دورة الذكاء الاصطناعي من أكاديمية حسوب التي تحتوي على 58 ساعدة تدريبية ممتدة على ثمانية مسارات تدريبية شاملة كل ما تحتاج إليه للبدء بتطوير تطبيقات ذكاء اصطناعي قوية واكتساب مهارة في تحليل البيانات من الصفر ودون الحاجة لامتلاك معرفة مسبقة. اللغات والتقنيات المستخدمة في برمجة الذكاء الاصطناعي هي Python و MongoDB وPymongo و TensorFlow و Keras و Pandas والنماذج اللغوية الكبيرة LLMs المختلفة. تطوير الأنظمة المدمجة الأنظمة المدمجة هي أنظمة حاسوبية شبيهة بالحاسوب ولكنها لا تملك كل ميزات الحاسوب الذي تراه أمامك الآن. بعبارة أخرى، النظام المدمج هو حاسوب صغير مبرمج لأداء مهام محددة فقط ومدمج ضمن الجهاز أو البيئة المراد استخدامه فيها. أنت الآن محاط بالكثير من الأنظمة المدمجة الآن مثل جهاز مقياس مستوى المياه وجهاز التحكم بالتلفاز وجهاز إنذار الحريق وأجهزة المراقبة …إلخ. حتى إشارات المرور وتنظيم السير وألعاب الأطفال الآلية تصنَّف على أنها أنظمة مدمجة. هل سمعت أيضًا بمصطلح "إنترنت الأشياء"؟ إنترنت الأشياء هو نظام مدمج متصل بالإنترنت. نعم، بهذه البساطة! لابد الآن أن يتبادر إلى ذهنك الساعات والثلاجات والغسالات الذكية وطائرات الدرون وأنظمة المراقبة عن بعد وأنظمة البيوت الذكية، إذ كلها أمثلة على إنترنت الأشياء. كيفية برمجة الأنظمة المدمجة أشهر وأكثر لغة برمجة تستعمَل في برمجة الأنظمة المدمجة وإنترنت الأشياء هي لغة C (أي لغة سي) وكل اللغات المشتقة منها (مثل لغة أردوينو C). تُستعمَل لغة C++ كثيرًا في هذا المجال، إذ تعدُّ لغة ذات مستوى أعلى من لغة C لدعمها للبرمجة كائنية التوجه. أضف إلى ذلك أنه بدأ حديثًا استعمال لغة بايثون في برمجة تطبيقات الأنظمة المدمجة مع أنها لم ترتبط تقليديًّا بهذا المجال سابقًا. صحيح أنَّ لغة بايثون ليست بقوة لغة C و C++ في هذا المجال إلا أنها تستمد ميزاتها وفعاليتها من المكتبات الهائلة المتوافرة فيها. بعيدًا عن C وبايثون، تستعمل في مجال الأنظمة المدمجة أيضًا لغات أخرى تنضوي ضمن "لغات توصيف العتاد" (Hardware Description Languages)؛ لغتي VHDL و Verilog هما من أشهر لغات توصيف العتاد المستعملة في هذا المجال. تُستعمَل مثل هذه اللغات في برمجة "مصفوفة البوابات المنطقية القابلة للبرمجة" (FPGA أي Field Programmable Gate Array). أخيرًا، قد تجد بعض المراجع تشرح برمجة الأنظمة المدمجة بلغة أخرى تدعى "لغة التجميع" (Assembly Language) التي تصنف من اللغات منخفضة المستوى. يتطلب تعلم البرمجة باستخدام هذه اللغة فهمًا واسعًا بمعمارية وحدة التحكم المركزية والمعالج بالمجمل لأنها أقرب لغة يفهمها الحاسوب. الانتقال إلى هذه اللغة قد يكون في مستويات متقدمة من تعلمك لبرمجة الأنظمة المدمجة وتطبيقات إنترنت الأشياء. من ميزات البرمجة بهذه اللغة هي التحكم الواسع بالعتاد والمعالج الذي لا توفره لغات أخرى. يقال أن هذه اللغة صعبة بعض الشيء ومعقدة، ولكن لا أرى ذلك! قد يكون سبب قول ذلك هو أن لغة التجميع هي لغة منخفضة المستوى وأقرب شيء إلى لغة الآلة ولا يستطيع من يلقي نظرة على شيفرة مكتوبة فيها فهمها مطلقًا إن لم يعرفها. تطوير تطبيقات سطح المكتب مجال تطوير تطبيقات سطح المكتب كالمحيط الواسع؛ إن لم تملك بوصلة وتعرف إلى أين تريد الاتجاه، ستضيع فيه حتمًا. هنالك الكثير من أنظمة التشغيل أشهرها - وأكثرها سيطرةً على السوق حاليًا - هي: نظام التشغيل ويندوز، ولينكس، وماك (macOS)، ويملك كل نظام تشغيل تطبيقات مكتبية خاصة به. لذلك، يجب عليك أولًا -قبل الدخول إلى سوق برمجة تطبيقات سطح المكتب- تحديد نظام التشغيل المستهدف. أي يجب الإجابة على السؤال التالي: هل يستهدف تطبيقك نظام تشغيل محدد، أم تريد لتطبيقك أن يعمل على عدة أنظمة تشغيل في آن واحد؟! بعد تحديد نظام التشغيل المستهدف، اطلع على اللغات المفضل استعمالها في ذلك النظام لبرمجة تطبيقاته؛ فعلى سبيل المثال، اللغات C و C++ و C# و VB.NET هي الأكثر استعمالًا في برمجة تطبيقات نظام التشغيل ويندوز، واللغات C و C++ و Bash هي الأكثر استعمالًا في برمجة تطبيقات توزيعات نظام التشغيل لينكس. أمَّا نظام الشغيل ماك، فينفرد باستعمال لغة Objective-C. حسنًا، دعني أخبرك الحقيقة، كل لغة برمجة عامية الغرض يمكن استعمالها في برمجة التطبيقات، إذ أشهر اللغات التي تُدرَّس أكاديميًّا في هذا المجال هي لغة جافا (Java). لا يخفى على القارئ دخول لغة بايثون بقوة على هذا المجال نظرًا لامتلاكها الكثير من المكتبات الرائعة وسهولة صياغتها. دخلت مؤخرًا لغة جافاسكريبت على سوق برمجة تطبيقات سطح المكتب عبر إطار العمل Electron (إلكترون)، إذ توظف في هذا المجال تقنيات تطوير الويب (HTML و CSS و JavaScript …إلخ.). بدأ هذا الإطار ينتشر كالنار في الهشيم مما دفع شركات كبيرة لتطوير تطبيقات سطح المكتب الخاصة بها باستعمال هذا الإطار ومنها شركة Slack التي استعملت هذا الإطار لتطوير تطبيقها المكتبي. أعلم أنك الآن تشعر بالضياع من كثرة لغات البرمجة والتقنيات المستعملة في هذا المجال؛ معك حق، فقد أخبرتك بذلك منذ قليل. دخول هذا السوق يحتاج منك تحديد هدفك منه بالضبط. هل لديك فكرة تطبيق وتريد إنشاءه والربح منه؟ هل تريد العمل لدى شركة محددة؟ ما هي مواصفات التطبيق الذي تريد إنشاءه أو تريد العمل على تطويره؟ كل ذلك يلعب دورًا في تحديد لغة البرمجة الأنسب لك لتعلمها. في النهاية، إن تعلمت أساسيات البرمجة وأتقنت العمل على لغة برمجية محددة، سيسهل عليك الانتقال إلى لغة برمجة أخرى، إذ أغلب لغات البرمجة تشبه بعضها بعضًا من ناحية المفهوم والمضمون وتختلف بعض الشيء من ناحية الصياغة والشكل. لذلك، اطمئن من هذه الناحية. كيفية اختيار لغة البرمجة التي تناسبك يمكنك اختيار لغة البرمجة اعتمادًا على المجال الذي تحب العمل فيه، سألخص لك مسار التعلم لمختلف مجالات العمل: العمل كمطور ويب full-stack: يعني ذلك تعلم تطوير واجهات المستخدم أو الواجهات الأمامية، وتطوير الواجهات الخلفية. يمكن التخصص بمجال واحد من هذين المجالين فقط، إذ يُطلَب كثيرًا في سوق العمل مبرمجين متخصصين في واجهات المستخدم أو الواجهات الخلفية. العمل كمطور تطبيقات للهواتف المحمولة: يمكنك تعلم برمجة تطبيقات أندرويد أو iOS كلًا على حدة، أو استعمال تقنيات مثل كوردوفا لتطوير لكلا النظامين معًا. العمل كمطور تطبيقات سطح المكتب: يمكنك البدء بالتخصص في تطوير تطبيقات مكتبية لنظام تشغيل محدَّد (مثل نظام التشغيل ويندوز أو لينكس) عبر تعلم لغة البرمجة المستعملة في ذاك المجال (كما أشرنا إلى ذلك في قسم تطوير تطبيقات سطح المكتب)؛ خيار آخر هو تعلم اللغات والتقنيات التي تمكنك من تطوير تطبيقات عابرة للمنصات (تعمل على عدة أنظمة تشغيل) مثل استعمال إطار العمل Electron. العمل كمطور للأنظمة المدمجة والأنظمة الذكية: لغة C هي أساس هذا المجال، سواءً كنتَ تتعامل مع المتحكمات مباشرةً، أو تتعامل مع شريحة مثل أردوينو (والتي تمتلك لغةً مشتقةً من C). يساعدك هذا الفيديو على معرفة المعايير التي من خلالها ستتمكن من اختيار لغة البرمجة التي تتناسب مع تطلعاتك وأهدافك المستقبلية. نصائح لتعلم البرمجة مشوار تعلم البرمجة من الصفر طويل وشائق، ولكنه جميل ومسلٍ بذات الوقت، قد تصاب بالإحباط في بداية طريقك لكثرة الأمور التي عليك الإلمام بها، لذا جهزت إليك النصائح الآتية من تجربتي في البرمجة: حدد هدفك من تعلم لغة البرمجة وسوق العمل الذي تريد دخوله واجعله واقعيًا. بدون هدف، أبشرك بأنك ستتخلى عن فكرة تعلم البرمجة بعد حين. انتبه إلى أن يكون هدفك واقعيًا وقابلًا للقياس والتجزيء على مراحل. بدون ذلك، ستفشل من أول عقبة وتترك تعلم البرمجة. أعرف نفسك جيدًا ونقاط قوتك وضعفك. كلنا لديه نقاط قوة وضعف، ولكن المفلح من عمل على ترميم وتحسين نقاط ضعفه في المجال الذي يرغب بتعلمه. رشح دورة واحدة وكتابًا واحدًا وابدأ بقراءة الكتاب ومتابعة الدورة تدريجيًّا ثم انتقل بعد الانتهاء إلى دورة أخرى وكتاب آخر، إذ سيجنبك ذلك التشتت بين الدورات الكثيرة والكتب العديدة. الشيء الذي أفعله قبل بداية تعلم شيء جديد هو ترشيح قائمة من عدة كتب ودورات ثم ترتيب هذه الكتب والدورات بحسب جودتها ومدى بساطتها وتعقيدها. أرقم الكتب والدورات وأبدأ بالخيار الأول منها. أحدد الوقت التقريبي الذي يأخذه كل خيار لدراسته وأجدول الخيارات البقية على رزنامتي الخاصة. لا تأخذ العلم إلا ممن تثق بعلمه، فالكثير من المبتدئين يحاولون مساعدة غيرهم وقد يضعون معلومات مغلوطة دون قصد. طبق ما تعلمته مباشرة، وأنشئ أي شيء من كل أمر جديد تتعلمه حتى لو كان رسمة بسيطة أو شيفرة من عدة أسطر فقط. فرحة إنجاز شيء مما تعلمته تدفعك لتعلم المزيد والاستمرار في طلب العلم. نظم وقتك بورقة وقلم، حدد بداية كل أسبوع خطةً لسائره والتزم بتنفيذها. أخبر أصدقائك أن لديك التزامات وأمور مهمة عليك إنجازها. خصص وقتًا للاستراحة بالطبع ولا تنسَ نصيبك منها. في نهاية كل أسبوع، وازن مدى الإنجاز الذي حققته ومدى تطبيق الخطة التي وضعها وحاول أن تصل النسبة إلى 100%. أنصحك بقراءة ومتابعة استراتيجيات تنظيم الوقت ورفع الإنتاجية. تمرس على حل المشكلات وتحدى نفسك باستمرار وتابع المسابقات البرمجية واشترك بها إن استطعت، أنصحك بقراءة مقالة حل المشكلات وأهميتها في احتراف البرمجة بعد هذه المقالة. لا تنسَ أن تكافئ نفسك في كل مرة تنهي فيها كتابًا أو تكمل العمل على مشروع. لا تنسَ حظك من الاستراحة، لأن طريق البرمجة قد يكون له بداية ولكن النهاية بعيدة ومتعبة -مثله مثل أي مجال آخر-. في النهاية أرجو لك كل التوفيق في مشوارك البرمجي. وأرجو منك أن تشاركنا تجربتك في تعلم البرمجة، لعل غيرك يستفيد منها. اقرأ أيضًا كيف تتعلم البرمجة المدخل الشامل إلى تعلم علوم الحاسوب المرجع الشامل إلى تعلم لغة بايثون تعرف على أعلى تخصصات البرمجة أجرا تعلم لغة HTML قواعد البرمجة ما هي فوائد تعلم البرمجة؟ أسهل لغات البرمجة أهمية البرمجة1 نقطة
-
هل يمكننا ان نحفظ عملنا بصيغة مختلفة او مثلا نحفظه كالعبة؟1 نقطة
-
لدي مصفوفة من نوع ndarray كالتالي: arr = numpy.array([0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1]) عندما أحاول حساب عدد مرات تكرار رقم 0 أو 1 كالتالي: arr.count(0) يظهر لي الخطأ التالي: AttributeError: 'numpy.ndarray' object has no attribute 'count' لماذا يظهر هذا الخطأ؟ وكيف أقوم بحساب عدد مرات تكرار عنصر معين في مصفوفة Numpy؟1 نقطة
-
أعلم أن هناك دالة لقائمة بايثون List لإرجاع الفهرس الأول لشيء ما: >>> lst = [1, 2, 3] >>> lst.index(2) 1 هل هناك شيء مشابهة لهذه الدالة في مصفوفات NumPy؟ حاولت أن استعمل التالي: numpy.index(2) لكن يظهر لي خطأ بعد وجود مثل هذه الدالة: AttributeError: module 'numpy' has no attribute 'index'1 نقطة
-
كيف يمكنني إعادة ترتيب عناصر مصفوفة في NumPy حسب العمود n مثلًا؟ على سبيل المثال لدي المصفوفة التالية: arr = array([[9, 2, 3], [4, 5, 6], [7, 0, 5]]) كيف يمكنني ترتيب الصفوفة وفقًا لقيم العمود الثاني؟ لتكون النتيجة كالتالي: array([[7, 0, 5], [9, 2, 3], [4, 5, 6]])1 نقطة
-
مرحبا, لدي زر بعد الضغط عليه يرسل بيانات للكونترولر حتى يتم حفظها في قاعدة البيانات عن طريق ajax, لكن المشكلة انه لو كان الموقع بطيئ و ضغطت أكثر من مرة على الزر يتم ارسال البيانات و حفظها اكثر من مرة و هذا مايسبب لي مشاكل, كيف بامكاني المنع من ارسال request اكثر من مرة اي ينتظر حتى يتم الحفظ و اقوم باسترجاع الرد من ثم يقوم بارسال request آاخر؟ هذه صورة لما يحدث:1 نقطة
-
يمكنك وضع متغير بولياني تتغير قيمته مثلا من true إلى false بعد النقر على الزر، و حتى إسترجاع الطلب تعود على ماكانت عليه وستضع شرطا في اول جزء معالجة الطلب يختبر المتغير إن كان false يعمل return مباشرة. ويمكن وضع مؤقت زمني يضمن حصول تأخير بعد وصول الطلبية و الأفضل هنا عرض إشعار بنجاح إضافة البيانات، يفضل دمج الخاصتين سويا.و يمكنك ايضا إبطال الزر بعمل disable له حتى إكتمال الطلبية. getElementById("Button"). disabled = true1 نقطة
-
السلام عليكم عندي فكرة بناء قاعدة بيانات لادارة المواشي والنخيل وقد واجهتني مشكلة وهي اني اريد انشاء عمود في الجداول يكون اسمه (رمز الحيوان) يحتوي على رمز يكون تلقائي ويكون فريد ولا يتكرر مثال :CD-00001-84-133 تدل الحروف على اختصار صنف الحوان والرقم (00001)على رقمه في المزرعة والارقام (84 و 133) على رقم الوالدين اريد طريقة لعمل مثل هذا الترميز وايضا ان ياخذ المولود الجديد ترميز الوالدين تلقائيا مع العلم ان نوع قاعدة البيانات SQL Server ارجوا ان تفيدوني بالمعلومات وشكرا1 نقطة
-
السلام عليكم , انا مشترك في كورس php وكان مكتوب انه هيكون في دعم معاك اثناء فترة التعلم لمساعدتك وانا لا استطيع تفسير الكود بسببب ان حجم الكود صغير جدا اثناء الفيديو لا اعلم لما لم يضع في الاعتبار توضيح الكود بشكل جيد وحجم الكود صغير جدا لا يفسر بالرغم من اني اشاهد بأعلي جودة ممكنة 1080p , ولا استطيع تفسير الكود وفشل الاتصال مع قواعد البيانات واكثر من كود , ولا يوجد دعم معي للرد ولا اي شئ ارجو الافادة1 نقطة
-
يمكنك في كل درس تواجه به مشكلة معينة أو لم تفهم كود ما, يمكنك وضع سؤال و هناك الكثير من المدربين الذين سيعملون على إجابتك و توضيح ما لم تفهمه و يساعدونك على تجاوز أي مشكلة تواجهك , يمكنك وضع السؤال تحت كل درس تشاهده في قسم التعليقات حتى يظهر تحت الفيديو الذي تشاهده. ايضا يمكنك طلب شرح أي جزئية او كود و سنعمل على شرحه بإذن الله لك .1 نقطة
-
دعنا نفهم ما هي case لنعرف كيف تعمل أولا: case تشبة if في بعض اللغات، وما بداخلها هو الكود الذي يتم تنفيذة اذا حدث الشرط الذي يوضع بجوار case. لذلك فانها تعتبر حلقة مغلقة ، واذا اردت تعريف متغير أكثر من مرة بداخله، عليك أن تكرره أكثر من مرة. لذلك أبسط حل هو أن تقوم بتعريف الأربع متغيرات الذي تريد استخدامهم في ال global ، خارج أي case منهم، فتقوم بوضع الكود التالي قبل اول case: $colorSelect = $_POST['colorSelect']; $colorNumber = $_POST['colorNumber']; $countPiece = $_POST['countPiece']; $total = $_POST['total']; وبما انه تم تعريفهم في ال global فلا داعي لاعادة تعرفيهم داخل أي case منهم، كمثال: $colorSelect = $_POST['colorSelect']; $colorNumber = $_POST['colorNumber']; $countPiece = $_POST['countPiece']; $total = $_POST['total']; case 'add_buttons': // var_dump($_POST);exit; $order = $_POST['order']; $buttons = $_POST['buttons']; // $result = $conn->query("DELETE FROM order_buttons WHERE order_id='$order'"); for ($i =0; $i < count($buttons); $i++){ try { $result = $conn->query("INSERT INTO order_buttons(order_id, button_id, color_select, colorNumber_input, countPiece , total ) VALUES('$order','$buttons[$i]','$colorSelect[$i]' ,'$colorNumber[$i]','$countPiece[$i]','$total[$i]')"); } catch (Exception $e) { var_dump($e->getTrace()); // or to get the full error info, just var_dump($e); } هذا يسهل ويقلل من حجم الكود ويجعله أسرع ُأثناء تشغيله.1 نقطة
-
كيف اعرف مسار الملف php عندي ملف style وابغا اخلية يتعرف علية من خلال المسار اتوماتيك يقرا الملفات ويوصلني للمسار في دوال في php ممكن احد يفيدني1 نقطة
-
عندما أقوم بطباعة مصفوفة عددية ، أحصل على بعض البيانات فقط كالتالي: >>> x= numpy.arange(10000) >>> x array([ 0, 1, 2, ..., 9997, 9998, 9999]) >>> لكنني أريد طباعة المصفوفة الكاملة، كيف أقوم بذلك؟1 نقطة
-
يمكنك القيام بذلك في نمباي حيث أنها تمكننا من إزالة الاقتطاع وعرض النتائج كما هي ويتم ذلك باستخدام numpy.set_printoptions() وذلك اعتماداً على الوسيط threshold الذي يأخذ القيمتين threshold = np.inf أو threshold = sys.maxsize أو عدد صحيح، من خلال هذا الوسيط يتم طباعة أول 1000 رقم بدون اقتطاع "بشكل افتراضي أي إذا لم نضع maxsize أو inf ": """ numpy.set_printoptions(precision=None, threshold=None, edgeitems=None, linewidth=None, suppress=None, nanstr=None, infstr=None, formatter=None) """ import numpy as np import sys nums = np.arange(100) np.set_printoptions(threshold=sys.maxsize) # هنا وضعنا أعلى عدد ممكن للعرض print(nums) """ [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99] """ #أو import numpy as np import sys nums = np.arange(100) np.set_printoptions(threshold=np.inf) print(nums) # انظر أيضاًَ import numpy as np import sys nums = np.arange(200) np.set_printoptions(threshold=1000,sign="-") print(nums) """ import numpy as np import sys nums = np.arange(200) np.set_printoptions(threshold=1000,sign="-") print(nums) [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199] """ أهم الوسطاء، precision عدد أرقام الدقة لطباعة النقطة العائمة floating point (الافتراضي 8). threshold العدد الإجمالي لعناصر المصفوفة التي تؤدي إلى التلخيص بدلاً من العرض الكامل للمصفوفة (الافتراضي 1000). لعرض المصفوفة كاملة بدون تلخيص، مرر sys.maxsize. أو np.inf. أما linewidth فهو عدد المحارف في كل سطر. ويمكنك أيضاً استخدام التابع tolist الذي يقوم بتحويلها إلى قائمة كالتالي: import numpy as np import sys nums = np.arange(200) print(nums.tolist()) """ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199] """1 نقطة
-
سؤال يشغل بالي حول تطوير واجهات المواقع فأنا لا أعرف ما هي طبيعة العمل التي سوف أعمل بها أنا اعلم ان الموقع يمر بثلاثة مراحل التصميم وتطوير الواجهة و backend في مرحلة التصميم كيف يمكنني التعامل مع الزبائن التي لا تعرف طبيعة العمل وهي انني يجب أن اعلم من المصمم كل شيء حول التصميم مثل نوع الخطوط وأحجامها وأحجام الصور والعناصر والمسافات وكل هذه الأشياء ولكن البعض يأتي لك فقط بصورة أو بفكرة عن التصميم ولا يعطيك التفاصيل ووجدت المثير من هذا النوع وانا اتصفح المشاريع علي مواقع العمل الحر كيف يمكن للمبرمجين تقليد التصميم أو الفكرة أو الصورة بشكل دقيق هل يوجد طريقة معينة أم فقط يجب أن اجلس وأجرب الأحجام وأحاول الموازنة بين التصميم لأنني في فترة التدريب وأخشي أن يؤثر هذا علي عملي وأجد صعوبة كبيرة في تقليد التصاميم أو الأفكار1 نقطة
-
هل هناك طريقة لتفريغ مصفوفة NumPy في ملف CSV؟ لدي مصفوفة NumPy ثنائة الأبعاد وأحتاج إلى حفظها بتنسيق يمكن للبشر قراءته مثل ملفات CSV. كيف أقوم بهذا الأمر؟ علمًا أن المصفوفة كبيرة بعض الشيء . هل يمكن أن أستعمل مكتبة Numpy فقط في هذه المهمة أم يجب أن أستعمل مكتبات أخرى مثل Pandas؟1 نقطة
-
هناك عدة طرق للقيام بذلك، أولها استخدام باندا: import pandas as pd import numpy as np # إنشاءمصفوفة a = np.arange(3,4).reshape(-1,2) # طباعة المصفوفة print(a) # تحويل المصفوفة إلى DataFrame df = pd.DataFrame(a) #CSV حفظ الداتافريم كملف df.to_csv("data1.csv", index=False) #يفضل إلغاء تخزين عمود الفهرس لأنه قد يسبب لك مشاكل عند إعادة تحميل الملف الطريقة الثانية هي استخدام numpy_array.tofile(): import numpy as np # إنشاء مصفوفة a = np.arange(3,4) # عرض المصفوفة print(a) #tofile() استخدام الطريقة #',' يجب أن تستخدم الفاصلة # إنشاء الملف a.tofile('data2.csv', sep = ',') استخدام numpy.savetext(): """ numpy.savetxt(fname, arr, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ', encoding=None) """ import numpy as np # إنشاء مصفوفة arr = np.array([[11, 16, 3], [1, 0, 8]]) #CSV حفظ المصفوفة في ملف np.savetxt("a.csv", arr, delimiter = ",") لكن هنا سيتم تخزين البيانات في تنسيق أسي ك float مثل 2.000000000000000000e+00 لذا يجب عليك تغيير ال formatting باستخدام الوسيط fmt كما يلي: np.savetxt('a.csv', arr, fmt="%d", delimiter=",") طبعاً delimiter هو سلسلة أو حرف لاستخدامه كفاصل عنصر. و newline سلسلة أو حرف لاستخدامه كفاصل أسطر. و header تكتب سلسلة في بداية ملف txt أي ترويسة. أما footer فتكتب سلسلة في نهاية الملف (ذيل). و fmt افتراضياً تكون %.18e أي بالتنسيق الأسي. أما arr فهي مصفوفة أحادية أو ثنائية البعد حصراً. مثال آخر: import numpy as np arr = np.array([6, 1, 4, 2, 18, 9, 3, 4, 2, 8, 11]) np.savetxt('array.csv', [arr], delimiter=',', fmt='%d') # ستخزن بالشكل التالي # 6,1,4,2,18,9,3,4,2,8,11 مررنا المحدد "،" لجعله بتنسيق csv. تم قمنا بتمرير نوع التنسيق أيضاً كـ "٪ d" ، أي تخزين العناصر كأعداد صحيحة. وكما أشرت فإنه بشكل افتراضي، سيتم تخزين الأرقام بتنسيق عائم flotting point. وللتنويه أيضاً، إذا لم تقم بإحاطة مصفوفة numpy ب [] أي تحويلها إلى قائمة أثناء تمريرها إلى numpy.savetxt () فقد لا يعمل محدد الفاصلة، وسيستخدم "\ n" كمحدد افتراضي. لذا يفضل إحاطتها. مثال آخر مع إضافة ترويسة وذيل: np.savetxt('array_hf.csv', [arr], delimiter=',', fmt='%d' , header='A Sample 2D Numpy Array :: Header', footer='This is footer') """ # A Sample 2D Numpy Array :: Header 6,1,4,2,18,9,3,4,2,8,11 # This is footer """ مثال آخر مع مصفوفة ثنائية الأبعاد: arr2D = np.array([[11, 12, 13, 22], [21, 7, 23, 14], [31, 10, 33, 7]]) np.savetxt('2darray.csv', arr2D, delimiter=',', fmt='%d') """ 11,12,13,22 21,7,23,14 31,10,33,7 """ أيضاً، بدلاً من حفظ مصفوفة كاملة ثنائية الأبعاد في ملف csv ، إذا أردنا، يمكننا حفظ أعمدة أو صفوف فردية أو متعددة فقط. # حفظ عمود np.savetxt('a.csv', [arr2D[:,1]], delimiter=',', fmt='%d') """ 12,7,10 """ # حفظ سطر np.savetxt('aa.csv', [arr2D[1] ], delimiter=',', fmt='%d') """ 21,7,23,14 """ ولحفظ مصفوفة مهيكلة Structured Numpy array: dtype = [('Name', (np.str_, 10)), ('Marks', np.float64)] structure = np.array([('Ali', 21.2, 5), ('Eyad', 22.3, 4)], dtype=dtype) print(structure) # [('Ali', 21.2, 5) ('Eyad', 22.3, 4)] np.savetxt('structured.csv', structure, delimiter=',', fmt=['%s' , '%f', '%d'], header='Name,Marks,Age', comments='') """ Name,Marks,Age Ali,21.2, 5 Eyad,22.3, 4 """ وبما أن كل عنصر في المصفوفة الرقمية الخاصة بنا كان عبارة عن مزيج من سلسلة ، عدد عشري وعدد صحيح ، لذلك أثناء حفظه في ملف csv ، نقوم بتمرير خيارات التنسيق كلها أي ["٪ s" ، "٪ f" ، "٪ d"] ويمكنك لاحقاً تحميل الملف بعدة طرق، باستخدام loadtxt: from numpy import loadtxt # تحميل المصفوفة data = loadtxt('data.csv', delimiter=',') # طباعتها print(data) أو من باندا: import pandas as pd data = pd.read_csv("filename.csv") # عرض أول 5 أسطر من الملف data.head() # إذا أردت عرض أسطر أكثر مرر عددها إلى الوسيط التالي data.head(n=10)1 نقطة
-
كتابة المصفوفات كملفات CSV ذات الرؤوس تتطلب مزيدًا من العمل. هذا المثال يقرأ من ملف CSV ( example.csv) ويكتب محتوياته إلى ملف CSV آخر ( out.csv). import numpy as np # كتابة ملف # example.csv # مع رؤوس في السطر الأول with open('example.csv', 'w') as fp: fp.write('''\ col1,col2,col3 1,100.1,string1 2,222.2,second string ''') # قراءة الملف كمصفوفة # Numpy ar = np.recfromcsv('example.csv', encoding='ascii') print(repr(ar)) # rec.array([(1, 100.1, 'string1'), (2, 222.2, 'second string')], # dtype=[('col1', '<i8'), ('col2', '<f8'), ('col3', '<U13')]) # كتابته كملف # CSV # مع الرؤوس في السطر الأول with open('out.csv', 'w') as fp: fp.write(','.join(ar.dtype.names) + '\n') np.savetxt(fp, ar, '%s', ',') لاحظ أن المثال أعلاه لا يمكنه معالجة القيم التي تكون سلاسل نصية وبها فاصلات. لتضمين القيم غير الرقمية دائمًا بين علامات الاقتباس ، استخدم الوحدة csv المضمنة: import csv with open('out2.csv', 'w', newline='') as fp: writer = csv.writer(fp, quoting=csv.QUOTE_NONNUMERIC) writer.writerow(ar.dtype.names) writer.writerows(ar.tolist())1 نقطة
-
الإجابات السابقة صحيحة ولكن إذا كنت تريد حلاً بديلاً فيمكنك تحويلها الى قائمة كالآتي >>> numpy.arange(100).reshape(25,4).tolist() [ 0, 1, 2, ..., 9997, 9998, 9999] وإليك طريقة للقيام بذلك ، وهي مفيدة إذا كنت لا تريد تغيير إعداداتك الافتراضية: def fullprint(*args, **kwargs): from pprint import pprint import numpy opt = numpy.get_printoptions() numpy.set_printoptions(threshold=numpy.inf) pprint(*args, **kwargs) numpy.set_printoptions(**opt)1 نقطة
-
hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.1 نقطة
-
يمكنك استخدام savetxt وستعمل بشكل سليم ولكن إذا كان هناك بعض المصفوفات بالنمط int32 ربما لن يتم حفظ المصفوفة في الملف بشكل صحيح والنمط السابق بل ربما يتم تغيير النمط ولن تكون قابلة للقراءة لذلك نحتاج لاستخدام المعامل fmt كالتالي np.savetxt('values.csv', narr, fmt="%d", delimiter=",") #integer تعني أن يكون من نوع %d لاحظ ال وإذا كانت المصفوفة كبيرة نوعاً ما يمكنك استخدام الصيغة gz وهي تجعل الملف مضغوط عن طريق تغيير صيغة الملف فقط كالتالي #بدلاً من np.savetxt('values.csv', narr, fmt="%d", delimiter=",") #استخدم np.savetxt('values.gz', narr, fmt="%d", delimiter=",")1 نقطة
-
كما ترى أنه يمكنك من خلال set_printoptions تغيير إعدادات الطباعة لذلك ستبقى كذلك دائماً ولكن إذا كنت تريد طباعة مصفوفة في مكان واحد مثلاً أي لا تريد تغيير الإعدادات وجعلها دائمة تريدها مؤقتة يمكنك استخدام ال context manager بواسطة with كالتالي with numpy.printoptions(threshold=numpy.inf): #with لاحظ استخدام print(arr) كما يمكنك استخدام الطريقة التالية arr = numpy.arange(10000).reshape(250,40) #المصفوفة المطلوب طباعتها for row in arr: print row1 نقطة
-
1 نقطة
-
يمكن استخدام الوحدة numpy.savetxt لعمل المطلوب و حفظ المصفوفة في ملف CSV: import numpy a = numpy.asarray([ [1,2,3], [1,2,3], [1,2,3] ]) # تحديد اسم الملف و الفاصل بين البيانات numpy.savetxt("file.csv", a, delimiter=",") ويمكن باستعمال panda: import pandas as pd pd.DataFrame(np_array).to_csv("path/to/file.csv") أو الوحدة toFile: import numpy as np a = np.asarray([ [1,2,3], [4,5,6], [7,8,9] ]) a.tofile('foo.csv',sep=',',format='%10.5f')1 نقطة
-
يمكنك اتباع أحد الطرق التالية لجعل المكتية numpy تطبع جميع العناصر, #1 import sys import numpy numpy.set_printoptions(threshold=sys.maxsize) #2 import numpy as np np.set_printoptions(threshold=np.inf) #3 numpy.arange(100).reshape(25,4).tolist() حيث تم تحديد عتبة إظهار النتائج في console لأعلى عدد ممكن1 نقطة
-
مرحبا, ارغب في طريقة لحساب عدد "الزوار" المتواجدين حاليا في الصفحة ؟ استعمل اطار العمل لارافيل.1 نقطة
-
يمكنك أن تستخدم حزمة joshrainwater/active-users حيث تقوم بمعرفة المستخدمين الحالين (الذي قد سجلوا الدخول والضيوف أيضًا)، ويمكنك أن تحصل منها على إجمالي عدد المستخدمين أيضًا أولًا عليك تثبيت الحزمة من خلال الأوامر التالية: composer require joshrainwater/active-users ثم قم بإضافة السطر التالي إلى ملف .env : SESSION_DRIVER=database في النهاية يجب تهجير بيانات الحزمة من خلال الأوامر التالية: php artisan session:table php artisan migrate في النهاية يجب تعديل ملف config/app.php وإضافة provider و alias كالتالي: // .... 'providers' => [ //Laravel Framework Service Providers... //Package Service Providers... Rainwater\Active\ActiveServiceProvider::class, ], 'aliases' => [ // .... 'Active' => Rainwater\Active\ActiveFacade::class ], الآن يمكنك أن تستخدم الحزمة كالتالي: // Import at the top use Rainwater\Active\Active; // الحصول على كل المستخدمين الحاليين $users = Active::users()->get(); // طباعة اسم كل مستخدم foreach ($users as $activity) { echo $activity->user->name . '<br>'; } // الحصول على إجمالي عدد المستخدمين الحاليين $numberOfUsers = Active::users()->count(); كما يمكن إستخدام الحزمة في حساب عدد الضيوف بنفس الطريقة: // الحصول على هدد الضيوف الحاليين $numberOfGuests = Active::guests()->count();1 نقطة
-
عندما تكون عدد الأصناف n في مشكلتنا أكبر من 2، يجب أن تحوي طبقتك الأخيرة على n خلية بغض النظر عن نوع دالة التكلفة التي استخدمتها (أي حتى لو استخدمت sparse_categorical_crossentropy) حيث أن الغاية الأساسية من ال sparse_categorical_crossentropy هو الراحة في الاستخدام (عدم الاضطرار إلى تحويل البيانات إلى ترميز ال One-Hot)، لكنها لاتغنيك عن وجود عدد من الخلايا يطابق عدد الأصناف في آخر طبقة، وبما أنك تتعامل مع مهمة لتصنيف الأخبار ولديك 46 صنف وبالتالي يكون التصحيح: from keras.datasets import reuters (train_data, train_labels), (test_data, test_labels) = reuters.load_data( num_words=10000) word_index = reuters.get_word_index() reverse_word_index = dict([(value, key) for (key, value) in word_index.items()]) decoded_newswire = ' '.join([reverse_word_index.get(i - 3, '?') for i in train_data[0]]) import numpy as np def vectorize_sequences(sequences, dimension=10000): results = np.zeros((len(sequences), dimension)) for i, sequence in enumerate(sequences): results[i, sequence] = 1. return results x_train = vectorize_sequences(train_data) x_test = vectorize_sequences(test_data) from keras.utils.np_utils import to_categorical one_hot_train_labels = to_categorical(train_labels) one_hot_test_labels = to_categorical(test_labels) from keras import models from keras import layers model = models.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=(10000,))) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(46, activation='softmax')) # يجب أن يتطابق عدد الأصناف مع عدد المخرجات model.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy', metrics=['accuracy']) x_val = x_train[:1000] partial_x_train = x_train[1000:] y_val = train_labels[:1000] partial_y_train = train_labels[1000:] history = model.fit(partial_x_train, partial_y_train, epochs=20, batch_size=512, validation_data=(x_val, y_val)) للتنويه: هناك هدف آخر من استخدام sparse_categorical_crossentropy وهو زيادة الكفاءة في التخزين والأداء (فهي لاتحتاج إلى تمثيل الفئات في متجهات عالية الأبعاد إضافة إلى أنها تقلل عدد العمليات الحسابية اللازمة).1 نقطة
-
للقيام بهذا الأمر، يمكنك استخدام الأوامر التالية: npm install react-native-eject ثم npm install @react-native-community/cli ثم react-native eject1 نقطة
-
قد يختلف الأمر قليلا خصوصا لو كنت قادم من نظام تشغيل ويندوز , فلن تجد واجهة تفاعلية تخبرك بما عليك فعله . و سيتم كل ذلك عن طريق التارمنل . عن طريق ما يعرف بمدراء الحزم . و بالطبع فإن الأمر ليس دستورا ثابتا , فهو يختلف من توزيعة لينكس إلى أخرى , و من مدير حزم إلى مدير اخر . و لنأخذ على سبيل المثال توزيعة ubuntu الغنية عن التعريف . في ubuntu يمكننا تثبيت البرنامج بـ 3 طرق مختلفة : عن طريق مركز برمجيات أوبونتو أو Ubuntu Software Center : وهو عبارة عن برنامج يوفر واجهة تفاعلية يسهل من عليها استعراض البرامج المتوفرة و تثبيتها عن طريق ضغطة زر . قد توفر توزيعات أخرى نفس الفكرة . عن طريق snap : وهو مدير حزم يقوم بتحميل الحزم و تحميلها من متجر snap , يتوفر snap في عديد من توزيعات لينكس من مثل فيدوار و لينكس مينت . و سنحتاج للتارمنل في التعامل معه لأن snap لا يوفر واجهة تفاعلية . يتم تثبيت البرامج عن طريقه بأوامر مشابهة : sudo snap install <app-name> عن طريق مدير الحزم apt : sudo apt install <app-name> و كوننا قد قمنا بثتبيت البرنامج لن يجعل من المنطقي ان نقوم بتثبيته كل مرة غرض تشغيله , و بالتالي فإنك لن تحتاج ذلك و يكفي تثبيته مرة واحدة . و لتشغيل البرنامج نقوم إما بطباعة اسمه في التارمنل أو بالتصفح إليه في قائمة البرامج . كما يمكنك إنشاء أيقونة سطح المكتب للوصول السهل إليها .1 نقطة
-
لتنزيل أي برنامج عبر اللينكس يوجد طريقتين: الأول باستخدام الترمينال terminal وهذة هي الطريقة الأكثر اتباعا عبر كتابة التالي: sudo apt install <اسم البرنامج> أو تقوم بتنزيله بامتداد .tar وتثبيته بالطريقة المعتاده مثل ويندوز. أما عن استخدام البرنامج بعد ذلك فلا حاجة لاعادة تنزيله في كل مره، فقط اذهب الى "show applications" أسفل يسار الصفحة، ثم تبحث في خانة البحث عن اسم البرنامج وسوف تجده وتفتحه بالطريقة العادية عن طريق الضغط عليه مرتين.1 نقطة
-
يعاني تعلم الالة من كمية المعلومات الكثيرة التي يجب علي الموديل أن يتعلمها ، وذلك لان كمية البيانات التي تدخل الى النظام كبيره للغاية، وهذا قد يستغرق اسابيع وربما شهور لو تركنا حجم البيانات الأصلية كما هي، بالاضافة الى أن معظم هذة البيانات تكون غير هامة وتركها قد يسبب نتائج سيئة، لذلك لجأ العلماء الي طرق كثيرة لتخفيض حجم البيانات وترك المهم منها فقط. التجميع المكاني أو كما يعرف ايضا ب اخذ عينات فرعية subsampling أو الاختزال downsampling يقوم بتقليص الأبعاد لكل خريطة خصائص مع اعتبار الإبقاء على المعلومات المهمة. التجميع المكاني له عدة انواع مثل: Max (اعلى قيمة)، Average (حساب المتوسط)، Sum (المجموع) . في حالة التجميع باستخدام اعلى قيمة Max Pooling فإننا نقوم بتحديد المنطقة المكانية المتجاورة (نافذة بحجم ٢x٢ على سبيل المثال) ونقوم باستخراج العنصر (البكسل) صاحب اعلى قيمة في النافذة المحددة من خريطة الخصائص المصححة. وبنفس الطريقة لو استخدمنا المتوسط Average فسنقوم بحساب متوسط الاعداد في تلك النافذة فقط او مجموعهم في حال Sum. بشكل عام فإن التجميع باستخدام اعلى قيمة Max Pooling قد اظهر اداء افضل. الشكل البياني التفاعلي الأتي يستعرض مثال لاستخدام التجميع باستخدام اعلى قيمة Max Pooling على خريطة الخصائص المصححة المستخرجة بعد عملية الالتفاف convolution بالاضافة لعملية الريلو ReLU باستخدام نافذة ذات حجم ٢x٢ وتستخدم ال maxpooling في تقليص حجم البيانات باستخراج الاكبر منها كقيمه عددية، وتستخدم بشده مع الشبكات العصبية التلاففية CNN وتستطيع تحديد حجم النافذة والحركات التي تقوم بها بسهولة في بايثون. اما عن maxpooling في keras فهي كالتالي: tf.keras.layers.MaxPooling2D( pool_size=(2, 2), strides=None, padding="valid", data_format=None ) pool_size: وهي حجم النافذة التي تقوم بتحديد أبعادها لأختيار القيمة الأكبر منها، كما هو موضح في الكود السابق وكذلك الشكل التفاعلي بالاعلى، فان حجم النافذة هنا 2*2، أي يقوم باختيار مربع به 4 عناصر ويختار فقط القيمة الأعلى بينهم ويهمل الباقي. strides: هي حجم الخطوة التي تتحركها النافذة من قيمه لأخرى، أي لو كانت =1 ، فانه سيتحرك خطوة واحده لليمين في كل خطوة ويرسم المربع ذاته بنفس الأبعاد ويختار أكبر قيمة وهكذا. القيمة الافتراضية لها none ويمكن وضعها بأي رقم صحيح. padding: هي الطبقة الصفرية التي يمكن أن تحيط بالصورة، أي عند أستخدامها فانها تضيف اطارا عباره عن صف او عمود في كل حد من حدود الصورة وذلك ليحافظ على اول قيمة تأخذ اطلاقا من ال maxpooling .الوضع الافتراضي لها هو valid أي موجودة. الكود التالي يوضح كيف يمكن أستخدامها داخل موديل باستخدام keras. import keras from keras.models import Sequential from keras.layers import Activation from keras.layers.core import Dense, Flatten from keras.layers.convolutional import * from keras.layers.pooling import * model_valid = Sequential([ Dense(16, input_shape=(20,20,3), activation='relu'), Conv2D(32, kernel_size=(3,3), activation='relu', padding='same'), MaxPooling2D(pool_size=(2, 2), strides=2, padding='valid'), #هنا نستخدم maxpooling Conv2D(64, kernel_size=(5,5), activation='relu', padding='same'), Flatten(), Dense(2, activation='softmax') ]) وتكون نتيجة تشغيل الكود اذا اردنا استخراج ابعاد الصوره بعد كل عملية كاتالي: > model_valid.summary() _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense_2 (Dense) (None, 20, 20, 16) 64 _________________________________________________________________ conv2d_1 (Conv2D) (None, 20, 20, 32) 4640 _________________________________________________________________ max_pooling2d_1 (MaxPooling2 (None, 10, 10, 32) 0 _________________________________________________________________ conv2d_2 (Conv2D) (None, 10, 10, 64) 51264 _________________________________________________________________ flatten_1 (Flatten) (None, 6400) 0 _________________________________________________________________ dense_2 (Dense) (None, 2) 12802 ================================================================= Total params: 68,770 Trainable params: 68,770 Non-trainable params: 0 _________________________ يمكننا أن نلاحظ من خلال الخرج output_shape أن حجم الصورة قد قل للنصف بعد استخدام ال maxpooling، وذلك لاننا وضعنا حجم النافذة (2,2) وكذلك حجم الخطوة stride =2، حيناها ساخذ قيمه واحده من كل مربع به عنصرين فتقل حجم الصورة للنصف.1 نقطة
-
تستخدم بشكل أساسي مع الشبكات العصبية التلاففية CNN حيث غالباً ماتتبع طبقة ال CNN طبقة MaxPooling. مبدأياً تأمل الصورة التالية: هنا لدينا مصفوفة 4*4 ونافذة حجمها 2*2 تمر على المصفوفة (لاحظ أن النافذة التي حجمها2*2 تتحرك بمقدار خطوتين) في البداية كانت النافذة موضوعة على المربع الأحمر وبالتالي ستأخذ أكبر قيمة فيه هي 20، ثم ستمشي على المصفوفة أفقياً بمقدار خطوتين (أي بكسلين أفقياً) وبالتالي ستصيح النافذة موجودة على المربع الأصفر وبالتالي ستأخذ أكبر قيمة فيه وهي 30 ، الآن وصلنا لنهاية حدود المصفوفة وبالتالي ننزل بمقدار خطوتين (أي بكسلين عمودياً) وبالتالي تصبح النافذة على المربع الأزرق وأكبر قيمة هي 112 وهكذا.. لاحظ كيف تم اختزال أبعاد المصفوفة من 4*4 إلى 2*2. حسناً لماذا نستخدم هذه الطبقة؟ السبب الأول هو أنها تقوم بتخفيف العبء الحسابي "Reducing computational load" فنظراً لأن MaxPooling يقلل من دقة الإخراج المعطى من الطبقة التلافيفية، وبالتالي ستنظر الشبكة في مناطق أكبر من الصورة في وقت واحد ، مما يقلل من كمية المعلمات في الشبكة وبالتالي يقلل من الحمل الحسابي. والسبب الثاني هو "Reducing overfitting" فهي تساعد في محاربة الضبط الزائد، حيث أن الفكرة وراء عمل max pooling هو أنها بالنسبة لصورة معينة، ستبحث شبكتنا لاستخراج بعض الميزات الخاصة. فهي تبحث عن الحواف والمنحنيات والدوائر وما إلى ذلك من السمات التي تميز الصورة (يمكننا التفكير في وحدات البكسل الأعلى قيمة على أنها الأكثر نشاطاً). وبالتلي فهي تركز على البكسلات الأعلى قيمة وتتجاهل البكسلات الأقل قيمة. طبعاُ يمكننا أن نغير حجم النافذة وأن نغير حجم الخطوات أو أن نقوم بخطوة نسميها الحشو padding التي تقوم بحشو حدود المصفوفة بأصفار لكي تحافظ على أبعاد المصفوفة (الصورة). كيراس أو تنسرفلو تؤمن لك طريقة سهلة للقيام بهذا. لها الشكل التالي: tf.keras.layers.MaxPooling2D( pool_size=(2, 2), strides=None, padding="valid", data_format=None ) # الوسيط الأخير سأتحدث عنه في النهاية pool_size: يمثل حجم النافذة، ويمكنك إسناد عدد صحيح أو tuple بحيث إذا استخدمت عدد صحيح مثلاً 2 فهذا يعني أنك سوف تستخدم نافذة بحجم 2*2 وإما إذا استخدمت tuple فمثلاً (2,2) فهذا يعني أن حجم النافذة سيكون 2*2. الوسيط الثاني strides هو حجم الخطوة أي مقدار إزاحة النافذة، فمثلاً إذا اخترت (1,1) هذا يعني أنه ستتم إزاحة النافذة بمقدار 1 بكسل في العرض و 1 بكسل في الطول (النافذة تمشي على طول سطر المصفوفة بمقدار بكسل واحد وعندما تصل لنهاية أول سطر ستنزل للسطر التالي بمقدار بكسل واحد). أما بالنسبة لآخر وسيط فهو يمثل ال padding أي الحشو ففي حال استخدمت vaild فلن يتم حشو حدود المصفوفة بأصفار (أي لن يتم الحفاظ على أبعاد المصفوفة أي كما في المثال في الأعلى ويجب أن تعلم أن عملية الحشو هذه تتم بما يتلائم مع المصفوفة ولاتقلق فكيراس تتكفل بكل هذا الأمر) والمصفوفة الناتجة في هذه الحالة: output_shape = math.floor((input_shape - pool_size) / strides) + 1 (when input_shape >= pool_size) أما في حالة استخدمت same فسوف يقوم بعملية الحشو. والمصفوفة الناتجة في هذه الحالة: output_shape = math.floor((input_shape - 1) / strides) + 1 الآن انظر للأمثلة التالية: # مصفوفة بحجم 3*3 # حجم الخطوة هنا اخترناه بمقدار بكسل واحد # حجم النافذة اخترناها 2*2 #valid الحشو x = tf.constant([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]) # قمت بتحويل مصفوفة ال 3*3 إلى مصفوفة ب 4 أبعاد لأن هذه الطبقة لاتستقبل إلى مصفوفة بأربع أبعاد كما سأوضح بعد قليل x = tf.reshape(x, [1, 3, 3, 1]) max_pool_2d = tf.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=(1, 1), padding='valid') c=max_pool_2d(x) # هنا قمت بتحويل الخرج من رباعي إلى ثنائي الأبعاد لتسهل قراءة الخرج tf.reshape(c, [ 2, 2]) # الخرج """ <tf.Tensor: shape=(2, 2), dtype=float32, numpy= array([[5., 6.], [8., 9.]], dtype=float32)> """ مثال آخر: # مصفوفة بحجم 3*3 # حجم الخطوة هنا اخترناه بمقدار بكسل واحد # حجم النافذة اخترناها 2*2 #same الحشو x = tf.constant([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]) x = tf.reshape(x, [1, 3, 3, 1]) max_pool_2d = tf.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=(1, 1), padding='same') # تمت إضافةعمود بأصفار وسطر بأصفار للحفاظ على الأبعاد c=max_pool_2d(x) c tf.reshape(c, [ 3, 3]) """ <tf.Tensor: shape=(3, 3), dtype=float32, numpy= array([[5., 6., 6.], [8., 9., 9.], [8., 9., 9.]], dtype=float32)> """ يمكنك الآن التلاعب بقيم الوسطاء لتفهم أكثر. الآن سأستخدم لك هذه الطبقة في نموذج يحتوي على طبقة إدخال تقبل إدخال أبعاده 20 × 20 × 3 ، ثم طبقة كثيفة تليها طبقة تلافيفية تليها طبقة تجميع قصوى ، ثم طبقة تلافيفية أخرى ، تليها طبقة مخرجات.، ونظراً لأن الطبقات التلافيفية هنا ثنائية الأبعاد ، فإننا نستخدم طبقة MaxPooling2D من Keras ، لكن Keras لديها أيضًا طبقات تجميع 1d و 3 d max أيضاً.: import keras from keras.models import Sequential from keras.layers import Activation from keras.layers.core import Dense, Flatten from keras.layers.convolutional import * from keras.layers.pooling import * # بناء نموذج model_valid = Sequential([ # الدخل هو صورة بأبعاد 20 ب 20 و 3 قنوات لونية أي صورة ملونة Dense(16, input_shape=(20,20,3), activation='relu'), Conv2D(32, kernel_size=(3,3), activation='relu', padding='same'), MaxPooling2D(pool_size=(2, 2), strides=2, padding='valid'), Conv2D(64, kernel_size=(5,5), activation='relu', padding='same'), Flatten(), Dense(2, activation='softmax') ]) # هكذا سيكون شكل النموذج """ _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense_2 (Dense) (None, 20, 20, 16) 64 _________________________________________________________________ conv2d_1 (Conv2D) (None, 20, 20, 32) 4640 _________________________________________________________________ max_pooling2d_1 (MaxPooling2 (None, 10, 10, 32) 0 _________________________________________________________________ conv2d_2 (Conv2D) (None, 10, 10, 64) 51264 _________________________________________________________________ flatten_1 (Flatten) (None, 6400) 0 _________________________________________________________________ dense_2 (Dense) (None, 2) 12802 ================================================================= Total params: 68,770 Trainable params: 68,770 Non-trainable params: 0 _________________________________________________________________ """ الدخل والخرج: نعود الآن إلى الوسيط الرابع هو data_format هذا الوسيط يحدد ترتيب الأبعاد في المدخلات. يأخذ قيمتين إما channels_last وهي الحالة الافتراضية أي أن آخر وسيط في الإدخال سيمثل عدد القنوات اللونية في الصورة، أو channels_first أي ستكون في البداية، وعلى هذه الأساس سيختلف شكل الإدخال والإخراج لطبقتك : # الدخل data_format='channels_last': 4D tensor with shape (batch_size, rows, cols, channels). data_format='channels_first': 4D tensor with shape (batch_size, channels, rows, cols). # الخرج data_format='channels_last': 4D tensor with shape (batch_size, pooled_rows, pooled_cols, channels). data_format='channels_first': 4D tensor with shape (batch_size, channels, pooled_rows, pooled_cols).1 نقطة
-
المشكلة هي في ضبط شبكة lstm لأنها في هذه الحالة ستخرج كل سلسلة الحالات المخفية hidden states و في شكل البيانات و قبل إستدعاء طبقة dense نريد فقط خرج اخر خطوة زمنية final time step of the hidden state. يمكن تفادي الخطأ بضبط return_sequence=False أو يمكنك مسحها لأن حسب تعريف شبكة lstm قيمتها false: tf.keras.layers.LSTM( units, activation="tanh", recurrent_activation="sigmoid", use_bias=True, kernel_initializer="glorot_uniform", recurrent_initializer="orthogonal", bias_initializer="zeros", unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, return_sequences=False, return_state=False, go_backwards=False, stateful=False, time_major=False, unroll=False, **kwargs )1 نقطة
-
يمكنك استخدام المعاملات المنطقية التي توفرها numpy وفي حالتك تريد تنفيذ عدة شروط فيمكنك استخدام المعامل numpy.logical_and ليصبح الكود كالتالي np.where(np.logical_and(np.greater_equal(dists,r),np.greater_equal(dists,r + dr))) لاحظ أننا استخدمنا المعامل greater_equal يمكننا قراءة المزيد من المعلومات حول المعاملات المنطقية من هنا1 نقطة
-
أفضل طريقة في حالتك الخاصة هي فقط تغيير المعيارين إلى معيار واحد: dists[abs(dists - r - dr/2.) <= dr/2.] والإجابة على سؤالك: انت لست بحاجة فعلاً الى where إذا كنت تحاول فقط تصفية عناصر dists التي لا تتناسب مع معاييرك: dists[(dists >= r) & (dists <= r+dr)] لأن & سيعطيك عنصرًا أساسيًا and (الأقواس ضرورية). أو ، إذا كنت تريد الاستخدام where لسبب ما ، فيمكنك القيام بما يلي: dists[(np.where((dists >= r) & (dists <= r + dr)))]1 نقطة
-
نستخدم verbose لمراقبة عملية تدريب النموذج خلال مرحلة ال Validation بحيث: إذا وضعنا لها القيمة 0 فهذا يعني أن عملية التدريب ستكون صامتة كما نسميها أو مخفية عنك أو بعنى آخر لن ترى أي شيء خلال عملية التدريب، وإذا وضعنا لها القيمة 1 فهذا يعني أنك ستكون قادر على مراقبة عملية التدريب ورؤية النتائج بعد كل epoch وسيظهر لك شريط يمثل عملية التقدم خلال كل epoch أثناء التدريب، وفي حال وضعت 2 لن فسيكون الأمر مشابهاً للحالة السابقة لكن بدون شريط التقدم، انظر للأمثلة التالية التي توضح الأمر جيداً. ############################################ verbose=1 ############################################################## from keras.datasets import boston_housing (train_data, train_targets), (test_data, test_targets) =boston_housing.load_data() mean = train_data.mean(axis=0) train_data -= mean std = train_data.std(axis=0) train_data /= std test_data -= mean test_data /= std from keras import models from keras import layers model = models.Sequential() # يمكنك تمريره إلى طبقتك بالشكل التالي # أو tf.keras.activations.relu() model.add(layers.Dense(64, activation='relu', input_shape=(train_data.shape[1],))) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(1)) model.compile(optimizer='rmsprop', loss='mse', metrics=['mae']) history = model.fit(train_data, train_targets,epochs=7, batch_size=1, verbose=1) ----------------------------------------------------------------------------------------- Epoch 1/7 404/404 [==============================] - 3s 1ms/step - loss: 321.6080 - mae: 14.8919 Epoch 2/7 404/404 [==============================] - 0s 1ms/step - loss: 20.1112 - mae: 3.1887 Epoch 3/7 404/404 [==============================] - 1s 1ms/step - loss: 20.4705 - mae: 2.8889 Epoch 4/7 404/404 [==============================] - 1s 1ms/step - loss: 17.5232 - mae: 2.5841 ETA: 0s - loss: 13.2 Epoch 5/7 404/404 [==============================] - 0s 1ms/step - loss: 14.8107 - mae: 2.4500 Epoch 6/7 404/404 [==============================] - 1s 1ms/step - loss: 18.6534 - mae: 2.6635 Epoch 7/7 404/404 [==============================] - 0s 1ms/step - loss: 13.8696 - mae: 2.2664 ############################################ verbose=2 ############################################################## Epoch 1/7 404/404 - 1s - loss: 146.2869 - mae: 8.8513 Epoch 2/7 404/404 - 0s - loss: 26.0904 - mae: 3.3522 Epoch 3/7 404/404 - 0s - loss: 19.3153 - mae: 2.8920 Epoch 4/7 404/404 - 0s - loss: 15.3334 - mae: 2.7163 Epoch 5/7 404/404 - 0s - loss: 13.5590 - mae: 2.5430 Epoch 6/7 404/404 - 0s - loss: 13.1906 - mae: 2.4175 Epoch 7/7 404/404 - 0s - loss: 12.6008 - mae: 2.3849 ############################################ verbose=0 ############################################################## لن يظهر أي شيء1 نقطة
-
هل تمضي وقتًا في استخدام وسائل التواصل الاجتماعي أيًّا كانت مُدته؟ لم لا تستغل الفُرص المُجدية التي بين يديك طالما أنك مثل ملايين البشر حول العالم ممن يستخدمون وسائل التواصل الاجتماعي لأسبابٍ عدة؟ قد لا يتبادر إلى ذهنك وجود مهارات تؤهلك للعمل كمُدير لوسائل التواصل الاجتماعي بعائد مادي ودون أن يذهب وقتك في استخدام وسائل التواصل الاجتماعي دون فائدة. يظن الكثيرون أن مُهمة مدير وسائل التواصل الاجتماعي سهلة وبسيطة؛ لكنها في الواقع تتطلب إتقان بعض المهارات الهامة التي من شأنها أن تُمهد الطريق لبداية موفقة في هذا المجال؛ وحتى تتضح الصورة أكثر، وضعنا عدة نقاط تُرشدك للمسار الصحيح في هذا المضمار. كيف يمكن أن تصبح مديرا لوسائل التواصل الاجتماعي؟ كل ما عليك فعله هو اتباع الخطوات الست التالية للبدء في مُهمتك بصفتك مُديرًا التواصل الاجتماعي والتي من مهامها استقطاب باكورة روادها من العملاء. حدد منصات وسائل التواصل الاجتماعي التي ترغب التخصص بإدارتها تُعَد تحديد المنصات التي ترغب بإدارتها هي أولى الخطوات في مسارك لتُصبح مُديرًا لوسائل التواصل الاجتماعي؛ ويرجع السبب الكامن وراء ذلك هو تفرّد كل منصة من منصات التواصل الاجتماعي عن الأخرى من ناحية مُرتاديها واستخداماتها وخصائصها. يُفضل لمدير مواقع التواصل الاجتماعي الإلمام بالمِنصات العريقة كافةً، والتي تستخدمها الشركات للتسويق، وليس من المُجدي استيعابها كافةً في بداياتك المهنية على الأقل لما قد يتسبب في تشتتك والإخفاق في إتقانها، وتكون عبئًا ثقيلاً عليك. فيما يلي لمحة عن شبكات التواصل الاجتماعي الأكثر استخدامًا من قبل مختلف الشركات: فيسبوك Facebook: يُعد موقع الفيسبوك عميد مِنصات التواصل الاجتماعي، ويمتلك 2.5 مليار مُستخدم نشط، وأصبح الفيس بوك أداة من أدوات التسويق عبر وسائل التواصل الاجتماعي بالنسبة للشركات، فالصفحات التجارية والاجتماعية (المجموعات) من أهم السُبل التي تعتمدها الشركات للوصول للشريحة المُستهدفة على هذه المِنصة. لينكد إن LinkedIn: يُعرَّف موقع لينكد إن بقناة التواصل الاجتماعي لأرباب المِهن، حيث يقوم الموقع برمته على أساس الأعمال والوظائف؛ والربط الشبكي والمحتوى القيّم، مثل: الفيديوهات، ومنشورات المُدونات، ومواد الريادة الفكرية، والنشرات الصوتية (البودكاست). تُعَد غالبية رواد هذا الموقع من فئة البالغين ممن تتراوح أعمارهم بين سن 45 عامًا فما فوق؛ أما النسبة الكُبرى من مستخدمي هذا الموقع هم أصحاب الشركات والموظفين التنفيذيين للأعمال. إنستغرام Instagram: تقوم فكرة عمل موقع الإنستغرام على شبكة تواصل اجتماعية ترتكز على الصور ومقاطع الفيديو القصيرة. يُتابع حوالي نصف مُستخدمي مِنصة الإنستغرام شركة واحدة على الأقل؛ وأصبح الموقع وجهةً للتعرف على العلامات التجارية والمُنتجات. توجه الإنستغرام حديثًا نحو تسهيل الشراء المُباشر من منِصته بسلاسة فائقة للمُتسوقين. بنترست Pinterset: هي أيضًا مِنصة اجتماعية قائمة على الصور، كما أنها مُحرك بحث. يقصدها المُستخدمون للتعرف على الاهتمامات والهوايات والمُنتجات ولشراء السلع أيضًا؛ وأغلب مُرتادي المِنصة من النساء من فئة الدخل المُرتفع، وتتضاعف نسبة المبيعات على مِنصة بنترست أربع مرات عن غيرها من المِنصات. تويتر Twitter: لم تبلغ شبكة التواصل الاجتماعي توتير درجة الرواج التي بلغها موقع الفيسبوك والإنستغرام عند بداية ظهوره للمُستخدمين، لكنه أصبح مُنافسًا لها عندما توجه نحو الأعمال التجارية والتسويق، وأغلب مُستخدمي تويتر من جيل الألفية الأثرياء، وهم أكبر فئة من المُستهلكين، وهو مِنصة من المِنصات التي يقصدها المُستخدمون للتعرف على العلامات التجارية والشركات؛ وبمتوسط مُتابعة المُستخدم لخمس شركات على الأقل. يوتيوب YouTube: لم يذع صيت موقع اليوتيوب في بداية ظهوره مثل شبكة تواصلٍ اجتماعية؛ لكنه أصبح فيما بعد من أقوى شبكات التواصل وثاني أكبر مُحرك بحث (بعد مُحرك البحث جوجل)؛ يضم ملايين المُستخدمين لمنصته يوميًا لتعلم الأمور جوالهوايات والاهتمامات كافةً…إلخ؛ أما من يُغذيه بغالبية محتواه فهم الشركات والأعمال التجارية والمُسوقون. اختر قناتين إلى ثلاث قنوات للتواصل الاجتماعي للبدء في تعلمها، وتعرف على مكنونها من منظور الأعمال التجارية والتسويق. تختلف المِنصات الأخرى في ملاءمتها لعملائها بناءً على مجال نشاطهم التجاري وأهدافهم. أنشىء موقعك الإلكتروني الخاص بإدارة وسائل التواصل الاجتماعي إذا عقدت العزم للعمل مثل مُدير لوسائل التواصل الاجتماعي، فإن إنشاء موقع إلكتروني للترويج لخدماتك الإدارية لوسائل التواصل الاجتماعي يُعَد جُزءًا من هذه العملية. فعملك مُدير لوسائل التواصل الاجتماعي يُحتّم عليك التواصل مع المجتمع عبر الإنترنت؛ فالموقع الإلكتروني أساسي لعرض مهاراتك. كما يُعَد الموقع الإلكتروني الخاص بعملك يجعله قانونيًا ويؤسس قاعدةً من العملاء المُحتملين ويسوق خدماتك الموثوقة لهم. اصنع لعملك تواجدا في وسائل التواصل الاجتماعي بعد أن تُحدد منصات التواصل الاجتماعي التي ستختص بإدارتها؛ يتعين عليك صنع تواجد خاص بك على شبكة الإنترنت أو تحسينه إذا كنت تمتلكه من ذي قبل، لأجل مجال عملك الجديد الذي وقع عليه اختيارك، فالتواجد القوي عبر الإنترنت من أفضل الطُرق للعثور على العملاء بالنسبة لمدير وسائل التواصل الاجتماعي؛ حيث يتسنى لك عرض مهاراتك بوسائل التواصل الاجتماعي عبر استخدامك لحساباتك عليها. أما فيما يخص تواجدك عبر وسائل التواصل الاجتماعي؛ فمن المُهم جدًا عمل صفحات خاصة بعملك في إدارة هذه الوسائل؛ ومن المحتمل أنها المكان الأوّل للتواصل عبرها واستقطاب العملاء المُحتملين، وقد يُحدد انطباعهم الأولي عنك -بناءً على صفحاتك- نجاح أو فشل علاقتك المُستقبلية بهم؛ لذا من المُهم أن تهتم بكل ما تنشره على صفحاتك، ويُفضل مُراجعة صفحاتك الشخصية ومسح كل ما يُقلل من مهنيّتك أو موثوقيّت، كما يُفضّل أن تفصل بين عملك وحياتك الشخصية؛ والمُحصلة أنه في عالم إدارة وسائل التواصل الاجتماعي تخضع مناحي ظهورك كافةً عبر الإنترنت لأنظار الجمهور، وسيبحث عنك العُملاء المُحتملون؛ فكن مُستعدًا لذلك. حدد عروض خدمتك وأجرك بصفتك مديرا لوسائل التواصل الاجتماعي الخطوة التالية في مسيرتك في مجال إدارة وسائل التواصل الاجتماعي هي تحديد الخدمات التي ستُقدمها وتكلفتها. ومن أفضل مُميزات العمل كمُدير لوسائل التواصل الاجتماعي هي أنها غنية جدًا بالكثير من الفرص للتخصص بها؛ وأهم ما يعود بالنفع من ميزة التخصص هذه، هو طلبك لأجور مُرتفعة بالمُقابل. ستكتشف بمرور الوقت في أثناء عملك مُديرًا لوسائل التواصل الاجتماعي وجود خدمات مُمتعة تُقدمها وتُتقنها وعليها الكثير من الطلب، ويستغرق الوصول لهذه المرحلة بعضًا من الوقت، ومن الأفضل التركيز على تعلم بعض الخدمات وإتقانها بسرعة وتقديمها بثقة للعملاء وسيكون خيارًا موفقًا -حينئذٍ- أن تقدّم لعملائك مزيدًا من الخدْمات على قدرٍ كافٍ من العلم والإتقان. يُساعدك اختيار بعض الخدمات للبدء بتقديمها على التركيز، ويُسهل عليك مُهمة العثور على العُملاء؛ فعملية اختيار منصتين أو ثلاث مِنصات للتواصل الاجتماعي للتركيز عليها؛ ستزيد من ثقتك في عملك على نقيض من يدعي مقدرته تقديم كل الخدمات، كما ستتضح لك فئة العملاء التي تستهدفها لترويج خدماتك. ثماني خدمات رائجة في وسائل التواصل الاجتماعي إنشاء وتحسين الصفحة الشخصية. ترتيب المُحتوى. التصميم الجرافيكي. بحث الوسم (الهاشتاق). الحملات والإعلانات الدعائية المدفوعة. إدارة المجموعة / المُجتمع. تجديد المحتوى. خدمة العملاء. اختر ثلاثةً من هذه الخدمات لبدء التركيز عليها وتعلمها؛ وليس هناك إشكالية في إلمامك بالمفاهيم الأساسية لكل خدمة منها، ولكن حدد القليل منها والتي تسترعي اهتمامك. تعرف الآن على الخدمات التي ستُقدمها؛ إذ حان الوقت لتحديد أجرك مُقابل خدماتك. قد تكون هذه الجُزئية محيرةً لمُديري وسائل التواصل الاجتماعي، لكن لا عليك، بعد أن تكتسب بعض الخبرة في المجال ويُصبح لديك بعض العُملاء، ستحتاج للانتقال من مرحلة التسعير بالساعة إلى مرحلة تكلفة أجور مجموعة الخدمات، وسيُسهل ذلك الأمور عليك وعلى العميل؛ كما ستوفر الوقت ويزيد دخلك من ممارستك لنفس المهام التي زادت خبرتك بها، كما سيُثني عليك عملاؤك عند معرفتهم الخدمات التي يدفعون مُقابلها كل شهر. ننصحك بالبدء بثلاث مجموعات للخدمات؛ بدايةً من الدرجة الأقل، ثم المتوسطة، ثم الأعلى. حيث سيشعر العملاء بتوفر الخيارات لديهم بالطريقة التي يرغبون من خلالها بالتعامل معك وما هو الأنسب لاحتياجاتهم في وسائل التواصل الاجتماعي. ابدأ باستهداف العملاء لخدماتك لوسائل التواصل الاجتماعي بعد أن تعرفت على أساسيات إدارة وسائل التواصل الاجتماعي وتواجدك عبر الإنترنت والخدمات والأجور؛ حان وقت العثور على العملاء في ذلك المضمار، فقد قضيت وقتًا في تعلم كيفية ظهورك وتواجدك في وسائل التواصل الاجتماعي؛ وعليك أن تُمضي مزيدًا من الوقت في مجال عملك الجديد لاستهداف العملاء وهو بمثابة عصب حياة بالنسبة لعملك، وإذا لم تُنجز هذه المُهمة على الوجه الأكمل فلن تحصل على أي عميل. توجد الكثير من الأماكن للبحث عن عُملاء وسائل التواصل الاجتماعي المُحتملين؛ فغالبية الشركات والأعمال التجارية تُسوق عبر وسائل التواصل الاجتماعي (وإذا لم تكن تسوق من خلال وسائل التواصل الاجتماعي، فيتعين عليها التوجه لها والتسويق عبرها)؛ مع ذلك لا يرغب أكثر أصحاب الأعمال التجارية بإدارة صفحاته على وسائل التواصل الاجتماعي؛ مما يوفر لك الكثير من الفرص لتقديم خدماتك على نطاقٍ واسع. فيما يلي بعض الأماكن لبدء البحث عن عُملاء: مواقع التواصل الاجتماعي: أنشىء شبكتك الخاصة للتواصل الاجتماعي وضع على صفحاتها منشوراتك بين الحين والآخر لتعرض فيها خدماتك؛ وانضم للمجموعات والمُجتمعات وامضِ وقتًا تُنمي فيه علاقاتك بنشاط. شبكة تواصلك المُباشرة: تواصل مع أرباب الأعمال الذين تعرفهم واستعلم منهم عن حاجتهم لخدماتك أو إذا ما كانوا يعرفون من هم بحاجةٍ لها، وأطلع أصدقاءك وعائلتك على نشاطك وعلى بحثك عن عُملاء واطلب منهم تذكّرك عند معرفتهم لمن هم بحاجة لخدماتك. أجرِ البحث: اقضِ بعض الوقت للبحث عبر الإنترنت أو حتى في مُجتمعك المحلي أو في الشركات التي بحاجة لتحسين ظهورها عبر وسائل التواصل الاجتماعي أو أنّ ظُهورها غير مُنتظم أو لا من ليس لها ظهور على الإطلاق. أعد ملفا خاصا بدراسات الحالة والمقاييس أنشىء ملفًا بمُجرد حصولك على أوّل عميل أو ثلاثة عُملاء لتُطلع عليه فيما بعد العُملاء الجُدد؛ فإدارة وسائل التواصل الاجتماعي عبارة عن "أطلعني على خدماتك المُقدمة"، فكما أن ظهورك على وسائل التواصل أمر جوهري ونقطة انطلاقك؛ فإن عرض الخدمات التي أنجزتها للعملاء من أقوى الوسائل لتكوين عملك. إذا رغبت في نقلةٍ كُبرى لإعداد ملف دراسات الحالة قُبيل العثور على عملاء، فقدّم خدمتك لصديق من الأصدقاء أو لعمل خيري محلي مثل الأعمال غير الربحية، فهذه من أفضل الطُرق لاكتساب الخبرة، ولا ننصحك بالعمل دون مقابل لمُدة طويلة. كيف تزيد من فرص نجاحك؟ هناك أمور يتعين عليك وضعها في الحسبان طالما أنك قررت خوض عالم إدارة وسائل التواصل الاجتماعي المطلوب جدًا ومُحتمل الربحية؛ وهي كالتالي: لماذا أنت ماضٍ في هذا العمل، وما أسباب نجاحك فيه؟ إلى أي مدى أنت مُستعد لتحسين مهارات نمط حياتك الحالي أو مهارات تنظيم وقتك لتنجح؟ هل توجد لديك أمور أنت بحاجة لتغييرها أو إيقافها لتوفر الوقت لعملك؟ هل أنت قادر على ذلك؟ كيف يبدو النجاح بالنسبة لك؟ إلى ماذا تتطلع أن تكون عليه بعد عام أو ثلاثة أعوام أو خمسة أعوام من الآن؟ ستنجح بالتأكيد كمُدير لوسائل التواصل الاجتماعي نتيجة المعلومات الصحيحة والتركيز، وإذا أخذت عملك على محمل الجد؛ فمثلًا إذا كنت جديًا في عملك وعلى قدر المسؤولية، فسيكون عائده المادي عليك مثل العمل بدوامٍ كامل، وعلى النقيض من ذلك إذا استهنت بعملك فلن يزيد العائد المادي بالنسبة لك عن نطاق مُمارسته مثل هواية. إليك بعض الخطوات لاتباعها لتأخذ عملك على محمل الجد وتبذل كل ما في وسعك كمُدير لوسائل التواصل الاجتماعي. 1. لا تبرح التواصل وشبكات التواصل هل تبادر إلى مسامعك أن شبكة اتصالك هي رأس مالك؟ وهي الحقيقة؛ اقضِ وقتًا لإقامة العلاقات وتوثيقها عبر وسائل التواصل الاجتماعي وعلى جميع الأصعدة المتوفرة لديك مثل مُناسبات التواصل شخصيًا، وتواصل مع هذه العلاقات برغبة صادقة لأجل التواصل والتعلم على عكس بقائك في دوامة العمل؛ وستُبهرك قيمة العلاقة التي ستعود بالكثير من النفع على حياتك وعملك؛ قد لا يتحول التواصل المُباشر إلى علاقة عمل ولكن قد يعود منها بالنفع في مجالات أُخرى، مثل: الإحالة،أو اكتساب بعض المهارات، أو تعلم بعض الأشياء الجديدة التي تُثري شخصيتك. امضِ وقتًا في مجموعات وسائل التواصل الاجتماعي التي تُركز على سوقك المُستهدف مثل المجال الذي خصصت العمل فيه، وأجب على التعليقات بالمعلومات النافعة وبث الحماسة، أو تفاعل بأي شكل من الأشكال بالمُشاركة الفعلية، وبادر بالحوار واطلب من الأعضاء مراسلتك عبر الرسائل الخاصة للتعرف أكثر عليهم وكن دائمًا مُستعدًا لتقديم المُساعدة. إن الرغبة الصادقة لمُساعدة الآخرين مُثمرة جدًا بشكل لا يوصف. 2. لا تتوقف عن التعلم أغدق على نفسك بالتعلم المُستمر قدر المُستطاع؛ بحيث يتمحور التعلم حول بعض الأمور المُتعلقة بوسائل التواصل الاجتماعي، مما سيدفعك لأخذ عملك على محمل الجد؛ فأنت بذلك تستثمر في نفسك ومهارتك. استمر في التدرب فيما يخص المِنصات ومجالات الخدمة التي وقع اختيارك عليها لتُصبح مُديرًا لوسائل التواصل الاجتماعي ومُنافسًا حقيقيًا في هذا المضمار. تتوافر الكثير من المصادر المجانية على شبكة الإنترنت؛ وهناك العديد من الدورات الخاصة بالمِنصات والخدمات المُتعلقة بها؛ وننصح بالبحث عن دورة وسائل التواصل الاجتماعي للمُساعدين الافتراضين؛ للبدء في تعلم ما يخص مجال مُدير وسائل التواصل الاجتماعي بأساس متين للمُضي قُدمًا فيه ولتقديم العون للشركات والأعمال التجارية. تُعَدّ وسائل التواصل الاجتماعي في تغير مُستمر، لذا لا ترضى بأقل من الصدارة كمُدير بارع لوسائل التواصل الاجتماعي، وكن علامةً فارقةً فيها بمنأى عن الجميع وتعلم أدوات جديدة، وواكب التغيرات التي تطرأ على المِنصات التي تخصصت للعمل فيها. 3. استوعب أدوات العمل على وسائل التواصل الاجتماعي إنَّ فهم واستيعاب الأدوات الخاصة بوسائل التواصل الاجتماعي من أهم الأمور للعمل فيها والتي ستُساعدك على تنفيذ استراتيجية محتواها بفعالية، وأدواتها لا عدّ لها ولا حصر، بما فيها الأدوات الأصلية لمِنصات وسائل التواصل الاجتماعي، وتطبيقات الطرف الثالث. تتضمن بعض تطبيقات الطرف الثالث أدوات للجدولة، والتشغيل الآلي، والتحليل المنطقي، والتصميم الجرافيكي، وتخطيط المحتوى على سبيل المثال لا الحصر. وابدأ تعلم الأدوات الأصلية للمِنصات التي اخترت التخصص فيها وإتقانها تمامًا؛ فكلما اكتسبت خبرة فيها مثل مُدير للتواصل الاجتماعي، ستكتشف بعضًا من أدوات تطبيقات الطرف الثالث الكثيرة والموجودة في تلك المِنصات، وستُعينك هذه الأدوات التي ستحتفظ بها في مجموعة الأدوات الافتراضية، لتكون الأفضل في مجال عملك؛ فعندما يتوافر لديك فهم عميق لبعض الأدوات الأكثر شيوعًا وفعالية ستزيد مصداقيتك كمُدير حقيقي لوسائل التواصل الاجتماعي. لا تُرهق نفسك في تعلم جميع الأدوات فهناك ما لا يحصى منها شبيهة بمِنصات التواصل الاجتماعي وخدماتها؛ فقط ركز على القليل منها واصقل مهارتك في استخدامها. الخطوات التالية في طريق نجاحك كمدير لوسائل التواصل الاجتماعي لا يوجد هناك أفضل توقيت لتُزاول فيه عملك مثل مُدير لوسائل التواصل الاجتماعي؛ فقد تطورت وسائل التواصل الاجتماعي وتعدد نطاق استخدام المُراهقين وطُلاب الجامعات لها، وامتدت لتُصبح من الطُرق الرئيسة لتُسوق الشركات والأعمال التجارية لنفسها. لا يتوفر لدى أرباب الشركات والأعمال التجارية الوقت الكافي، ولا الرغبة أو المعرفة لوضع استراتيجية فعّالة لوسائل التواصل الاجتماعي، كما لا يتوفر لديهم من يقوم بالمهمة من فريق عملهم؛ وقد أصبح من المُعتاد التعاقد مع أطراف خارج الشركة لتقديم الخدمات وهي فُرصة ذهبية إذا أُتيحت لك لتُصبح مُديرًا لوسائل تواصل اجتماعي. تتعدد أوجه وسائل التواصل الاجتماعي وتتنوع وتُتيح لك مزاولة عملك عبر الأمور التي تُحبها وتستمتع بأدائها وتتقنها، سواءً كنت تُجيد التصميم الجرافيكي، أو خدمة العملاء، أو أي مجال من المجالات الأخرى ذات التخصص؛ وتُركز على إدارة وسائل التواصل الاجتماعي وتصنع منها عملًا ناجحًا ومُستدامًا يعود عليك بالدخل الوفير. انظر إلى عملك بجدية من خلال تخصيص الوقت لصقل مهاراتك وبدء ظهور جيد عبر الإنترنت وبناء شبكة تواصل من المهنيين مُتقاربي التفكير، وإذا ظللت ثابتًا ودؤوبًا في مجهوداتك لبناء عملك في مجال إدارة وسائل التواصل الاجتماعي فحتمًا ستجني ثمارها وتحقق نجاحًا هائلًا. ترجمة وبتصرّف للمقال How to Become a Social Media Manager لصاحبته Laura Nicholls. اقرأ أيضًا تأثير شخصيّتك في وسائل التواصل على عملك مجموعة أفكار لجذب العملاء وتوسيع قائمة البريد الإلكتروني. دليل الإعلانات المدفوعة على فيسبوك.1 نقطة
-
السلام عليكم هذه قائمة من المصادر العربية لتعلم لغة ++c كتاب تعلم ++c من البداية للاحتراف دورة تدريبة لتعلم ++c على اليوتيوب دورة تعلم لغة ++c من الصفر حتى الاحتراف قائمة بالمصادر الأجنبية لتعلم لغة ++c https://www.learncpp.com https://www.w3schools.com/cpp/default.asp https://www.codecademy.com/learn/learn-c-plus-plus1 نقطة