اذهب إلى المحتوى

لوحة المتصدرين

  1. سمير عبود

    سمير عبود

    الأعضاء


    • نقاط

      3

    • المساهمات

      3552


  2. عزام عبد الحافظ

    • نقاط

      2

    • المساهمات

      667


  3. أحمد حبنكة

    أحمد حبنكة

    الأعضاء


    • نقاط

      2

    • المساهمات

      338


  4. Omar Haddad2

    Omar Haddad2

    الأعضاء


    • نقاط

      2

    • المساهمات

      292


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 12/19/20 في كل الموقع

  1. في تطبيقات يمكن القيام بذلك ب أحد الطريقتين ويتم ذلك حسب الحاجة : أولا/ أن تكون صفحات التحكم أو لوحة التحكم جزء من التطبيق : أي عندما يقوم المستخدم بتسجيل الدخول تقوم بالتحقق إذا كان المستخدم عادي وليس له صلاحيات تقوم بتوجيه المستخدم إلى الصفحات التطبيق الخاصة بالمستخدمين العادين وعندما يكون المستخدم له صلاحيات إدارية تقوم بتوجيهه إلى لوحة التحكم الخاصه به ثانيا/ أن تكون صفحات التحكم خارج التطبيق : وهذا يعني أن تقوم بإنشاء لوحة التحكم تعمل من خلال الويب ويتم ربطها بالتطبيق من خلال API وهذه اللوحة في العادة يقوم ببرمجتها بها مبرمج الويب
    2 نقاط
  2. مرحباً خالد، انا لا انصحك بدخول مجال العمل الحر حاليا و إنما بالتركيز أكثر على إكتساب أكبر قدر من الخبرة و إنجاز أكبر عدد من المشاريع لبناء معرض أعمالك و ذلك لجذب العملاء لتشغيلك، بإمكانك البدأ في الإهتمام بحسابك الشخصي على منصة مستقل و ذلك بوضع المهارات التي تمتلكها و وضع المشاريع التي قد أنهيتها مع رابط للتصفح المباشر إن أمكن بالإضافة إلى وضع نبذة تعريفية عنك و ذلك لجذب العملاء و طمأنتهم بإكتسابك للخبرات. بإمكانك متابعة المشاريع التي تتقاطع مع المهارات التي اكتسبتها مثل تصميم صفحات الهبوط و ذلك بعد إنهائك للدورة فهي مطلوبة بكثرة و محاولة إنجازها بينك و بين نفسك و في هذا المرحلة سيتطور مستواك بالإعتماد على نفسك و إنجاز مشاريع حقيقية إن وجدت انك قادر على إنجاز مشاريع بهذا الشكل يمكنك حينها التقديم و في هذه المرحلة هناك بعض المقالات على الأكاديمية و على مدونة مستقل أنصحك بالإطلاع عليها لأنها ستعرفك على مجال العمل الحر و كيفية إقناع عملائك و ما إلى ذلك ككتابة عرض يجذب نظرة العميل، الإهتمام بمعرض الأعمال ... إضافة إلى أنه إذا قمت بمتابعة دورة الphp و إطار لارافيل و فهمت و تعلمت إنجاز المشاريع بنفسك ستكون قد كسبت مهارة مطلوبة بكثرة لأن العديد من المشاريع تطلب إطار لارافيل ليس فقط على مستوى العمل الحر و إنما العديد من الشركات أيضاً لذلك إن أصبحت محترف في إنجاز مشاريع بإطار عمل لارافيل ستكون قد قطعت شوطاً كبيرا في حصولك على مشاريع على منصات العمل الحر. بالتوفيق.
    2 نقاط
  3. "أريد تعلم البرمجة لكنني لا أعرف من أين أبدأ!" هذه هي أكثر عبارة تتردد على سمعي من حديثي العهد بالبرمجة، إذ يأتيني هذا السؤال مرارًا وتكرارًا؛ وفي كل مرة أحاول أن أجيب عنه في سياقه، أجد أنني أضيف معلومات جديدة على إجاباتي السابقة، لذا قررت كتابة هذا المقال بعنوان "تعلم البرمجة" لعله يفيد الراغبين في تعلم تطوير التطبيقات في بدء رحلتهم مع تعلم البرمجة من الصفر. جدول المحتويات حرصًا على تنظيم المقالة ولتسهيل الوصول إلى القسم الذي تريده بسهولة، سنذكر هنا جدول المحتويات باختصار: ما هي البرمجة؟ لماذا تتعلم البرمجة؟ ما عليك معرفته لتصبح مبرمجًا الأدوات اللازمة للبدء في تعلم البرمجة لماذا هناك العديد من لغات البرمجة؟ مفاهيم البرمجة مصادر تعلم البرمجة تطوير واجهات المستخدم تطوير الواجهات الخلفية تعلم تطوير تطبيقات الجوال تطوير الألعاب تطوير الأنظمة المدمجة تطوير تطبيقات سطح المكتب كيفية اختيار لغة البرمجة التي تناسبك نصائح لتعلم البرمجة ما هي البرمجة؟ البرمجة هي عملية تقسيم مهمة معينة يراد تنفيذها عبر الحاسوب إلى أجزاء صغيرة ومترابطة وقابلة للتنفيذ بأوامر بسيطة. بعد ذلك، تجري كتابة هذه الأوامر والتعليمات بإحدى لغات البرمجة، والتي هي وسيلة للتخاطب مع الحاسوب. إليك المثال العملي التالي الذي يشرح ماهية البرمجة: إن كنت تتوقع زيارة صديق لك اليوم، واتصل بك ليقول لك: "أنا واقف بجانب الحديقة ولا أعرف كيف أصل إلى منزلك". أنت عادةً تمر كل يوم من جانب الحديقة وتعرف الطريق بينها وبين منزلك شبرًا بشبر. برأيك هل ينفع إن قلت له: "منزلي معروف وقريب من الحديقة وأنا كل يوم أمر من جانبها"؟ لا، بالتأكيد. تحتاج إلى أن تقسِّم المشكلة إلى أجزاء تمثل خطوات بسيطة يستطيع صديقك فهمها وتنفيذها. مثلًا، أخبره أن ينفذ الأوامر التالية: "سر إلى الأمام عشرة أمتار" ثم "اتجه إلى اليمين" ثم "سر إلى نهاية الشارع" ثم "اتجه إلى اليسار". أخبره بعد ذلك: "عُدَّ الأبنية الموجودة على اليسار حتى تصل إلى البناء الرابع" ثم "اصعد إلى الطابق الثاني" ثم "اطرق على الباب الذي سيظهر أمامك". مبارك! بهذه الطريقة، تستطيع أن تدل صديقك على منزلك بدقة. البرمجة هي الشيء نفسه تمامًا. فهل ترى التعابير المكتوبة بين علامتي الاقتباس؟ إنها التعابير التي تكتب بإحدى لغات البرمجة والتي تخاطب الحاسوب بدلًا من صديقك السابق. لغات البرمجة هي مجموعة من المفردات والقواعد اللغوية التي تشكل لغةً وسيطةً للتخاطب مع الحاسوب وأمره بتنفيذ تعليمات وأشياء محدَّدة. فلا الحاسوب يفهم لغة البشر ولا البشر يفهمون لغة الحاسوب، لذا كان هنالك حاجة ملحة لوجود لغة وسيطة يفهمها كلاهما؛ نتيجةً لذلك، انبثق مفهوم لغة البرمجة. بعبارة أخرى، لو أردنا أن نقول للحاسوب "افعل كذا"، فسنحتاج إلى لغةٍ مشتركةٍ بيننا وبينه ليفهم ما نبتغيه، وهنا يأتي دور لغات البرمجة، إذ يمكنك أن تعدّ لغات البرمجة على أنها وسيط بين المبرمج والحاسوب. يهتم المبرمج بالتفكير في تسلسل الخطوات التي على الحاسوب القيام بها لإتمام العمل المطلوب منه (مثل حساب العمر اعتمادًا على تاريخ الولادة)، ثم كتابة هذه الخطوات بترتيب منطقي بإحدى لغات البرمجة. ربما لاحظتَ في الجملة السابقة أن جزءًا من مهمة المبرمج هو التفكير المنطقي، وهذا يجعلنا ننتقل إلى السؤال الشائع "هل أستطيع تعلم البرمجة وأصبح مبرمجًا؟" أو "هل أنا مؤهل لأصبح مبرمجًا؟". لماذا تتعلم البرمجة؟ يبدو أن تعلم البرمجة من الصفر ليس بالصعوبة التي توقعتها، لكنك تريد حافزًا يجعلك تتعلم البرمجة. تسمع كثيرًا أن البرمجة هي مجال المستقبل، وأن وظائف المبرمجين ستكتسح مجال التوظيف في السنوات القادمة؟ أستطيع أن أؤكد لك ذلك، كما أنَّ وظائف البرمجة هي من أعلى الوظائف دخلًا. فلو كنت تريد بدء مشوارك الاحترافي وتريد عملًا مستقرًا وذا دخلٍ ممتاز، فإن تعلم البرمجة والعمل بها هو أفضل خيارٍ أمامك. وظائف البرمجة مريحة عمومًا، فالعمل كله مكتبي أمام حاسوب في بيئة مريحة ومناسبة، وأغلبية الشركات تتبع نظام العمل 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 نقطة
  4. Android هو نظام تشغيل مفتوح المصدر مبني على نواة لينكس مع إضافة بعض التعديلات عليها ليعمل النظام على الهواتف المحمولة والحواسيب اللوحية، وغيرهما من الأجهزة الذكية المختلفة، ويتم تطوير إصدارات النظام بواسطة شركة جوجل. الطبقات الرئيسية المكونة لنظام أندرويد الصورة التالية توضح الهيكل الداخلي للأندرويد والطبقات الرئيسية المكونة لنظام التشغيل. ينقسم نظام التشغيل إلى خمس طبقات وظيفتها كالآتي: طبقة التطبيقات Application Layer (الطبقة العلوية) وهي الطبقة التي نتعامل معها دائمًا كمستخدمين لنظام التشغيل، فهي تحتوي على تطبيقات النظام والتطبيقات التي نقوم بتحميلها من المتجر -وهي الطبقة التي سيعمل فيها تطبيقك في آخر هذا الدرس-، أمثلة على ذلك تطبيق الاتصال وتطبيق البريد الإلكتروني وتطبيق المتصفح. الطبقة الخاصة ببيئة عمل التطبيقات Application Framework Layer تحتوي تلك الطبقة على مكتبات بُنيت بلغة الجافا خصّيصًا لنظام تشغيل أندرويد وتوفر هذه المكتبات طرق الوصول إلى الموارد الخاصة بالهاتف مما يجعل تطوير التطبيقات أسهل -وهي الطبقة التي سنتعامل معها كمطوري تطبيقات للأندرويد- وأمثلة على ذلك: View System: وهي مكتبة تحتوي على العناصر اللازمة لإنشاء واجهة المستخدم مثل TextViews و Buttons و Checkboxes و غيرها من العناصر الخاصة بواجهة المستخدم. Notification Manager: تحتوي هذه المكتبة على العناصر اللازمة لإنشاء و إرسال الإشعارات للمستخدم الخاصة بتطبيقك. Telephony Manager: وهي المكتبة المسؤولة عن استقبال و إرسال المكالمات الهاتفية من داخل تطبيقك. Location Manager: وهي المكتبة المسؤولة عن تحديد المواقع باستخدام GPS Sensors المتواجدة بالهاتف. أسفل هذه الطبقة سنجد طبقة خاصة تنقسم إلى جزئين: طبقة المكتبات المطورة بلغة C و ++C (المعروفة باسم Libraries Layer) وتحتوي هذه الطبقة على مكتبات مكتوبة بلغة C لقدرة لغة C على القيام بالمهام القوية بشكل كفء دون إهدار لموارد النظام. أمثلة على ذلك: SQLite: تستخدم للتعامل مع قواعد البيانات. OpenGL|ES: تستخدم للتعامل مع الرسوميات ثنائية و ثلاثية الأبعاد و تستخدم بشكل أكبر مع ثلاثية الأبعاد. FreeType: تستخدم للتعامل مع أنواع الخطوط المختلفة. Media FrameWork: تستخدم للتعامل مع الصيغ المختلفة لملفات الفيديو. Android Runtime و تحتوى هذه الطبقة على مجموعة من المكتبات والتي تجعل المطور قادر على برمجة التطبيقات باستخدام لغة الجافا. كما تحتوى على الآلة الافتراضية (Virtual Machine) المسؤولة عن تشغيل التطبيقات والتي تم تطويرها لكي تعمل على الهواتف المحمولة وتتميز باستهلاكها القليل للموارد من الذاكرة العشوائية والمعالج وبطارية الهاتف وتسمى بـ Dalvik Virtual machine. ويعمل كل تطبيق داخل نسخة خاصة به من الآلة الافتراضية مما يميزها بالأمان فالتطبيق لا يستطيع أن يرى باقي التطبيقات ولا يستطيع الوصول إلى بيانات من داخل الهاتف دون علم المستخدم ومنحه الصلاحيات اللازمة لذلك - تلك الصلاحيات التي يتم منحها للتطبيق عند تحميله من المتجر- لذلك ينصح بالتدقيق فيما يحتاجه التطبيق من صلاحيات وألا تقوم بتحميل تطبيقات ذات صلاحيات زائدة عن حاجة التطبيق لكي يعمل ، وصُممت الآلة الافتراضية بطريقة تجعل أكثر من نسخة من الآلة الافتراضية تعمل معًا بسلاسة وذلك لكي يصبح المستخدم قادراً على تشغيل واستخدام أكثر من تطبيق معًا دون الشعور باختلاف في الأداء. طبقة النواة (Kernel) وهي الطبقة المسؤولة عن التعامل مع العتاد المختلف للهواتف فتحتوي على التعريفات الأساسية الخاصة بهذا العتاد كما توفر طريقة أبسط للطبقة العلوية للوصول لمميزات العتاد وهي نفس نواة لينكس. تعتبر كل طبقة هي حلقة الوصل بينها وبين ما فوقها أو تحتها من طبقات، وكلما أتجهنا للأسفل كلما استُخدمت لغات وطرق أقرب في تعاملها مع العتاد كلغة C أو الأسمبلي مثلاً وكلما صعدنا للأعلى كلما استُخدمت لغات وطرق أسهل للمستخدم وتقدم خدمات غنية له كالجافا مثلاً. إصدارات أندرويد قبل البدء بتطوير التطبيقات ينبغي علينا معرفة ما هي إصدارات أندرويد، سأقوم سريعًا بذكر كافة إصدارات أندرويد المختلفة ورقم الإصدار ورقم الـ API الخاص بها. Cupcake 1.5 API 3 Dount 1.6 API 4 Eclair 2.0 API 5 Froyo 2.2 API 8 Gingerbread 2.3.3 API 10 Honeycomb 3.0 API 11 Ice Cream sandwich 4.0 API 14 Jellybean 4.1 API 16 Kitkat 4.4 API 19 Lollipop 5.0 API 22 Marshmallow 6.0 API 23 بعد أن تعرفنا على إصدارات أندرويد تبقى علينا معرفة عدد مستخدمي كل إصدار منهم لأنه ليس بالضرورة أن يكون أحدث إصدار هو الأفضل لتطوير التطبيقات من أجله، فعدد المستخدمين لهذا الإصدار أحد العوامل المحددة لذلك. تقوم جوجل شهرياً بنشر إحصائيات عن عدد مستخدمي كل إصدار من إصدارات أندرويد ويمكنك معرفتها عن طريق الرسم البياني التالي. لكل إصدار من إصدارات أندرويد مزايا خاصة أُضيفت له لم تكن متوافرة في الإصدارات الأقدم، ولكي تستطيع بناء هذه المزايا في تطبيقك ينبغي اختيار الإصدار الأدنى المناسب لمزايا تطبيقك لأنك تستطيع دعم المزايا الخاصة بالإصدار الأدنى فقط، لذا كلما قمنا بدعم إصدارات أقدم كلما فقدنا المزايا الحديثة وفي المقابل نحصل على عدد مستخدمين أكثر وإذا قمنا بدعم أحدث الإصدارات سوف نحصل على مزايا أكثر وعدد مستخدمين أقل. لذا سنختار الحد الأدنى الذي سنحتاجه من المزايا دون خسارة عدد المستخدمين، وإصدار Jellybean يتيح لك مزايا جيدة واستهداف عدد مستخدمين أكبر لأن تطبيقك سيعمل على كل من Jellybean و kitkat و lollipop و marshmallow وما سيأتي بعد ذلك من إصدارات أحدث وهو كما يتضح في الرسم البياني السابق أكثر من 90% من مستخدمي أندرويد، ولكنه لن يعمل على أي هاتف يعمل بإصدار أقدم من Jellybean. المتطلبات للبدء ببرمجة تطبيقات أندرويد كل ما تحتاجه هو حاسوب يعمل بأي نظام من أنظمة التشغيل الرئيسية -ويندوز أو لينكس أو ماك- لتبدأ معنا هذه الدروس. لا يوجد حاجة لمعرفة سابقة بلغة برمجة فسنتعلم معاً ما نحتاج إليه. هذه الدروس موجهة بشكل أساسي للمبتدئين. البرامج التي سنعمل عليها خلال الدروس القادمة: JDK Android Studio قم بتحميل هذه البرامج وبتثبيتها على جهازك. ملاحظة: ينبغي تثبيت JDK أولاً قبل البدء في تثبيت Android Studio حيث أنه يحتاج إليه عند التثبيت. إنشاء مشروع جديد الآن بعد الانتهاء من تثبيت البرامج اللازمة لتطوير تطبيقات أندرويد دعنا نُنشئ مشروعنا الأول وهو مشروع "أهلاً بالعالم Hello World". قم بفتح برنامج Android Studio واختر Start a new android studio project من القائمة. قم باختيار اسم التطبيق الخاص بك ثم اكتب نطاق موقعك – إن وجد – أو قم بكتابة الاسم كما هو موجود في الصورة وسيتم شرح فائدة هذا الاسم لاحقاً. اختر تطوير التطبيق من أجل Phone and Tablet ثم اختر إصدار Jellybean كإصدار أدنى كما ذكرنا سابقًا. اختر Blank Activity ثم أضغط Next. سنبقي هذه الخانات على حالتها الافتراضية حيث يمكننا تغييرها فيما بعد وأضغط Finish. تم إنشاء أول مشروع لك بنجاح. ملفات ومجلدات المشروع دعنا الآن نستعرض بيئة التطوير وما توفره لنا كمطورين من مزايا. على اليسار هناك ثلاثة ملفات / مُجلّدات رئيسية تكونت تلقائياً بداخل app وهي: manifests java res مجلد manifest والذي يحتوي على ملف AndroidManifest.xml ويعتبر هذا الملف مهم جداً لنظام أندرويد لما يقدمه من معلومات أساسية للنظام قبل أن يقوم بتشغيله، أبرز هذه المعلومات: يحتوي على اسم الحزمة Package Name: وهو اسم مميز للتطبيق لتمييزه عن باقي التطبيقات المتواجدة على الهاتف ، فمثلاً إن كان اسم تطبيقك Gallery و هناك تطبيق آخر على الهاتف يسمى Gallery كيف يستطيع النظام التفرقة بين صلاحيات كل منهما و معلوماتهما الخاصة؟ يقوم النظام بتمييزهما عن طريق Package Name لذا فهو يعتبر اسمًا مُميّزًا لتطبيقك لا ينبغي أن يتشابه مع Package Name لأي تطبيق آخر ، من أجل ذلك وضعت قواعد لتسمية الـ Package أهمها هو أن تجعل تطبيقك على هيئة اسم نطاق لموقعك - إن وجد – فمثلا نجد شركة Google عند تسمية حزم تطبيقاتها تستخدم com.google.appName فيكون لها اسم حزمة Package Name فريد لا يتكرر. ملحوظة: يتم تحديد Package Name عند إنشاء التطبيق في الخانة الخاصة بالـ Company Domain. يقوم بتعريف المكونات الأساسية التي يتكون منها التطبيق الخاص بك: سوف نتعرف على هذه المكونات في الدرس التالي، ويتكون التطبيق من أحد هذه المكونات أو أكثر على حسب حاجة التطبيق. يحتوي الإصدار الأدنى الذي يعمل التطبيق معه وهو ما قمنا بتحديده مسبقا عند إنشاء للمشروع. يحتوي على الصلاحيات التي سيعطيها النظام للتطبيق –إن وجدت-. يحتوي على الصلاحيات التي يجب على التطبيقات الأخرى أن تطلبها إن أرادت أن تتبادل معلومات مع تطبيقك. لذا يعتبر هذا الملف من الملفات الأساسية التي يعتمد عليها النظام في تحديد كيفية التعامل مع التطبيق وإذا لم يتم تحديد كل شيء بشكل صحيح فذلك يعرض تطبيقك إلى ألا يعمل. مجلد java يختص هذا المُجلّد بالشيفرة التى سنكتبها للتطبيق و هي الشيفرة الذى يحدد وظيفة التطبيق و استجابة الواجهة و تنفيذها للأوامر. مجلد res و يهتم هذا المُجلّد بكل الموارد التي يتعامل معها التطبيق من صور و عناصر مكونة لواجهة المستخدم و عناصر مكونة للقوائم ويتكون من مجموعة من المجلّدات المرتبة كالآتي: drawable ويخص هذا المُجلد كافة الصور التي سيتم استخدامها في التطبيق. layout ويخص هذا المجلد بالتصميم الخاص بواجهة المستخدم و ما تحتويه من عناصر مختلفة. menu ويخص هذا المجلد بالقوائم و ما تحتويه من عناصر. mipmap ويخص هذا المجلد بالأيقونة الخاصة بالتطبيق فقط. values ويحتوى هذا المجلد على ملفات أخرى لكل منها وظيفة مختلفة و لكنها تشترك في فكرة عامة واحدة وهي جعل التطبيق أكثر مرونة لدعم دقة الشاشات المختلفة و الأحجام المختلفة ودعم اللغات المختلفة كما سنرى لاحقا في الدروس القادمة. المحاكي Simulator كما تتميز بيئة تطوير Android Studio بأنها بيئة تطوير متكاملة وتحتوي على ما يحتاجه المطور من أدوات لصنع تطبيق أندرويد فكما رأينا فهي تحتوي على مستعرض للمشروع وملفاته وتحتوي على المترجم الخاص والذي يحول الشيفرة إلى صيغته التنفيذية والتي تعمل على الهواتف وأيضاً تحتوي على محاكي للهواتف والحواسيب اللوحية ونستطيع تجربته عن طريق الضغط على (AVD (Android Virtual Device من داخل Android Studio في شريط القوائم وسنجد أنه تلقائياُ لديه هاتف جاهز للعمل. كما يمكنك أن تقوم بصنع محاكي آخر عن طريق الضغط على Create Virtual Device. الآن قم بتشغيل المحاكي و انتظر حتى يعمل كالتالي. قد يأخذ المحاكي بعض الوقت خاصة عند تشغيله أول مرة لذا ينصح دائما أن تقوم بتشغيل المحاكي قبل أن تقوم بتجربة التطبيق بفترة كافية. لتجربة التطبيق الذي قمنا بإنشائه على المحاكي من داخل android studio اضغط على الأيقونة Run ثم انتظر حتى تظهر أمامك شاشة يظهر فيها اسم المحاكي. ثم اختر المحاكي وأضغط ok. ستجد التطبيق يعمل الآن على المحاكي. ملحوظة: عند إنشاء أي مشروع داخل بيئة عمل Android Studio يقوم تلقائياً بإنشاء مشروع يعرض فقط كلمة !Hello World أمام المستخدم وهو الذي شاهدناه في الصورة السابقة حيث أننا لم نقوم بتغيير أي شيء في المشروع الأصلي. بهذا نكون قد وصلنا إلى نهاية أول دروسنا من هذه السلسة وإلى لقاء قريب بإذن الله، في انتظار تجربتكم وما مررتم به من مشاكل إن وجدت.
    1 نقطة
  5. استرجع يومك من الاجتماعات، والبريد الإلكتروني والعمل الكثير وحافظ على الوقت لتنفيذ ما هو مهم لك. قال كال نيوبورت، مؤلف Deep Work: إذا كان هناك شيء واحد يمكن قوله عن مكان العمل الحديث، فهو: إذا لم تتحكم بجدولك الزمني، فإنه سيتحكم بك. كيف توازن بين المساوئ الضرورية للاجتماعات، البريد الإلكتروني، التحدث مع الفريق و "العمل الكثير" مع وقت التركيز على الأشياء التي تهمك بالفعل؟ بما أن البدء باستخدام العالم الرقمي ليس خيارًا لمعظمنا، فنحن بحاجة إلى استراتيجيات ملموسة تساعدنا على التركيز في عالم مصمم لتشتيتنا. هنا يأتي دور تحديد الوقت. يعد تحديد الوقت (والمهام المجمعة المرتبطة به والمهام اليومية) طريقة بسيطة وفعالة لاستعادة السيطرة على يوم العمل. تفيد طريقة الإنتاجية هذه بشكل خاص الأشخاص الذين: يعملون على العديد من المشاريع / المسؤوليات المختلفة (يستخدم Elon Musk هذه الطريقة لإدارة شركتين رئيسيتين في نفس الوقت) يقضون الكثير من الوقت في "الوضع التفاعلي"، الرد على رسائل البريد الإلكتروني والرسائل يبحثون عن يومهم المقتطع من خلال الاجتماعات يواجهون الانقطاعات المستمرة طوال اليوم يكافحون من أجل إيجاد الوقت والمساحة العقلية للتفكير بالصورة العامة سيعطيك هذا الدليل نظرة عامة على تحديد الوقت، وتجميع المهام والمهام اليومية؛ كيف يمكن لمجموعة من هذه الاستراتيجيات مساعدتك في استعادة الجدول الزمني الخاص بك؛ وأفضل طريقة لاستخدام التقويم ومدير المهام لبدء تحديد الوقت بنفسك. يعد تحديد الوقت أداة قوية لتعزيز إنتاجية الفريق أيضًا. ما هو تحديد الوقت؟ تحديد الوقت هو طريقة لإدارة الوقت تتطلب تقسيم يومك إلى مجموعات زمنية. كل مجموعة مخصصة لإنجاز مهمة معينة، أو مجموعة من المهام، وتلك المهام المحددة فقط. بدلاً من الاحتفاظ بقائمة مهام مفتوحة للأشياء التي ستنجزها حسب استطاعتك، ستبدأ كل يوم بجدول زمني محدد يحدد لك ما ستعمل عليه ومتى. مفتاح هذه الطريقة هو إعطاء الأولوية لقائمة المهام مقدمًا - يعد إجراء مراجعة أسبوعية مخصصة أمرًا إلزاميًا. حدد ما عليك تنفيذه في الأسبوع القادم وضع مجموعات الوقت الخاصة بكل يوم بشكل تقريبي. راجع أي مهام لم تنجزها في نهاية كل يوم عمل - وكذلك أي مهام جديدة قد ظهرت - وعدّل المجموعات الزمنية لبقية الأسبوع وفقًا لذلك. ومع تحديد الوقت مسبقًا، لن تضطر إلى اتخاذ خيارات بشأن ما يجب التركيز عليه باستمرار. كل ما عليك فعله هو اتباع جدولك الزمني المحدد. إذا خرجت عن مسار المهمة أو تشتت انتباهك، ألقِ نظرة على جدولك وعد إلى أي مهمة حددتها ببساطة. متغيرات تحديد الوقت هناك شيئين مرتبطين بتحديد الوقت: تجميع المهام والمهام اليومية. تجميع المهام هو تجميع مهام متشابهة معًا (عادة ما تكون أصغر) وتجدولها على جداول زمنية محددة لإكمالها في وقتٍ واحد. ستحد من حجم تبديل السياق خلال اليوم، من خلال معالجة المهام المتماثلة في مجموعة، مما يوفر الوقت الثمين والطاقة العقلية. مثلًا، يعد جدولة مجموعتين مدتهما 20 دقيقة لمعالجة البريد الإلكتروني خلال اليوم أكثر كفاءةً من التحقق من البريد الوارد باستمرار طوال اليوم. يرتبط تحديد الوقت بشكل جيد مع تجميع المهام، لأنه يوفر عليك جدولة كل مهمة فردية في تقويمك. ما عليك سوى تحديد مربعات الوقت كل يوم أو أسبوع عندما تريد إكمال مجموعة معينة من النشاطات، مثل البريد الإلكتروني، والفواتير، والتدريبات، والاجتماعات، والكتابة، والترميز، والعمل العميق، والمهمات، وإعداد الوجبات. تعد المهام اليومية إصدارًا أكثر شدةً من تجميع المهام للأشخاص الذين لديهم الكثير من المسؤوليات والتي تتنافس على اهتمامهم. مثلًا، يجب على صاحب المشاريع غالبًا الاهتمام بالتسويق، والمبيعات، وتطوير المنتجات، ودعم العملاء والموارد البشرية في نفس الوقت. وبدلاً من تخصيص فترات زمنية لكل المسؤوليات كل يوم، تخصص المهام اليومية يومًا كاملًا من كل أسبوع لكل مسؤولية. يستخدم مايك فاردي، مؤسس Productivityist، المهام اليومية لتحديد مجال تركيزه الرئيسي كل يوم. وهكذا يصف أسبوعه: يُنشئ تخصيص كل يوم لموضوع واحد نمط عمل موثوق به ويحد من الحمل المعرفي لتبديل السياق. يشرح فاردي كيف أن المواضيع توفر الوضوح العقلي الذي يسمح له بالتركيز على عائلته: لماذا يعد تحديد الوقت فعالًا للغاية؟ تبدو هذه التقنية بسيطة، ولكن لها تأثيرات عميقة على قدرتك في إنجاز الأمور: تعزز "العمل العميق" المركز يؤيّد كال نيوبورت، مؤلف كتاب العمل العميق: قواعد النجاح المركّز في عالم مشتت، تحديد الوقت بشدة. وهو يخصص 20 دقيقة كل مساء لجدولة يوم العمل التالي: عندما تجدول جزءًا كبيرًا من الوقت للعمل على مشروع أو مشكلة أو مهمة واحدة، فأنت تحضر كل مواردك العقلية للعمل على شيء واحد بدلًا من توزيع اهتمامك على عدة مهام. كلما عملت على "مهمة واحدة"، كلما بنيت العضلات الذهنية المطلوبة للعمل العميق وأصبح من السهل الاستمرار في التركيز. يستخدم نيوبورت مفكرة ورقية عادية لجدولة مربعاته الزمنية كل يوم تساعدك في فصل "العمل السطحي" بكفاءة أكبر العمل السطحي هو العمل الكثير والمستعجل، ولكنه ليس مهمًا لتحقيق أهدافك طويلة المدى - فكّر بالعمل الورقي أو الرد على (معظم) رسائل البريد الإلكتروني. عندما تحدد وقت العمل السطحي، فأنت تضع حدودًا واضحة للوقت الذي ستخصصه له. بالإضافة إلى ذلك، يؤدي تجميع المهام المتشابهة معًا إلى تقليل تكلفة تبديل السياق. من خلال تجميع جميع المهام السطحية معًا في مربع زمني مخصص، ستتمكن من العمل عليها بكفاءة أكبر وحماية بقية يوم عملك من أجل عمل ذو تأثير أعلى. يجعلك على علم بكيفية قضاء وقتك معظم الناس سيئون في إدارة الوقت. نحن فظيعون في تقدير الوقت الذي تستغرقه المهام، ولدينا ميل للالتزام المبالغ به تجاه ذواتنا المستقبلية. يجبرك تحديد الوقت على مواجهة أولوياتك والتزاماتك الحالية والتدرب على كيفية قضاء وقتك المحدود. تضطر إلى إيجاد مساحة مادية في تقويمك، مقابل كل التزام جديد تتخذه في حياتك. ونتيجةً لذلك، تصبح تكلفة قول "نعم" أكثر واقعية، ويصبح من الأسهل بكثير قول "لا". تقاوم الكمالية تعد المخططات الزمنية المشوشة، أسوأ عدوٍ للكمال. هناك شيء يمكن تعديله وتحسينه دائمًا. قد يكون من الصعب معرفة متى ينتهي مشروع مفتوح، خصوصًا إذا كنت تهدف إلى الكمال. في مرحلةٍ ما، تحتاج أن تكون قادرًا على قول "جيد بما فيه الكفاية" والمتابعة. يمكن أن يساعد تحديد الوقت من خلال فرض حدود زمنية على مشاريعك. إذا كنت تطيل المهام في كثير من الأحيان من خلال محاولة الحصول على كل شيء بشكل صحيح، قم بوضع جدول زمني صارم لإنهاء المهمة والتزم بها. تحارب المماطلة وتساعدك على متابعة أهدافك يستعرض الباحثان الدكتورة تود روجرز والدكتورة كاثرين إل ميلكمان في مقالة "ما وراء النوايا الحسنة: يحسّن حث الناس على وضع الخطط من متابعة المهام المهمة"، العديد من الدراسات التي تدعم فكرة أن "الخطط الملموسة تساعد الناس على متابعة نواياهم." من اتباع نظام التمرين إلى جدولة لقاح الأنفلونزا، كان الناس يتصرفون بناءً على نواياهم بشكل أكبر عندما كتبوا مكانًا، وتاريخًا ووقتًا محددًا للنشاط. ومع ذلك، يعتمد معظم الناس على نوايا غامضة بدلاً من الخطط الملموسة: الخلاصة: عندما تجدول مهامك وأهدافك، فمن المرجح أن تتبعها. يجبرك تحديد الوقت على وضع خطط ملموسة تضمن أنك تعمل لتحقيق أهدافك كل يوم. وكما هو القول الشهير لويليام فولكنر: "أنا أكتب فقط عندما يأتي الإلهام. ولحسن الحظ، فإنه يأتي الساعة التاسعة صباحًا ". ولكن هل سيناسب تحديد الوقت عملي؟ أحد أكبر الانتقادات لتحديد الوقت هو أنه لا يناسب الوظائف التفاعلية، حيث من المستحيل توقع ما سيحدث في أي لحظة معينة. هل يعد تحديد الوقت استراتيجية واقعية لمتخصص دعم العملاء الذي تتمثل وظيفته في الرد على التذاكر حقًا؟ أو مدير حساب يجب أن يكون متاحًا للرد على طلبات العملاء؟ سنقول نعم - التأكيد على قدر ضئيل من التحكم في جدولك حتى، يمكن أن يكون مفيدًا بغض النظر عن وظيفتك. قالها كال نيوبورت بهذه الطريقة: عندما يتم إدارة يوم عملك من قبل قوى خارجية، من السهل أن تفقد أهدافك الخاصة. يمكن أن يساعدك تحديد الوقت في الحصول على إحساسٍ أكبر بالسيطرة على أكثر الجداول التي لا يمكن التنبؤ بها. بعض الأخطاء الشائعة لتحديد الوقت وكيفية تجنبها في حين أن تحديد الوقت واضح جدًا من الناحية النظرية، فقد يكون من الصعب الالتزام به عند الممارسة. هنا بعض النصائح لمساعدتك في تطبيق الطريقة بنجاح (ولا تصبح عبدًا لتقويمك في هذه العملية): سوء تقدير الوقت ستتحسن في تقدير الوقت الذي تستغرقه المهام بمرور الوقت. ولكن حتى تشحذ غرائزك، أخطئ في تحديد الكثير من الوقت للمهام بدلاً من القليل جدًا. ضع في جدولك وقتًا إضافيًا لإكمال المهام والانتقال بينها. يمكنك أيضًا إنشاء "مجموعات مشروطة" للوقت يمكن استخدامها إذا تأخرت. حسِّن إحساسك بالوقت الذي تقضيه فعليًا في المهام مع متتبعات الوقت مثل RescueTime أوToggle. أن تكون صارمًا جدًا ستظهر الأمور وتدمر خططك. ولكن تذكر أن خطتك هي مجرد دليل للمساعدة في تركيز انتباهك على ما هو مهم، وليس عقدًا ملزمًا. حتى الخبير كال نيوبورت يعدّل خططه على مدار اليوم من خلال شطب مربعات الوقت الأصلية وملؤها بشيء جديد كما تتطلب الظروف: يتعامل نيوبورت مع التغييرات في جدوله من خلال رؤيته لها كلعبة: انظر إلى مربعات الوقت على أنها طريقة مرنة لتحدي نفسك، وليست أدوات صارمة لمعاقبة نفسك عندما تقصر. الإفراط في جدولة وقت فراغك على الرغم من أنه قيل أن إيلون ماسك وبيل جيتس يجدولان أيامهما بزيادات تصل إلى 5 دقائق، إلا أن الإفراط في جدولة وقت فراغك قد يكون له نتيجة عكسية. وقد أظهرت الدراسات أن جدولة الأنشطة الترفيهية لها "تأثير مثبط فريد" على التمتع العام بالنشاط. بدلاً من ذلك، يمكنك تحديد الوقت لقطع الاتصال والاسترخاء بدون خطة محددة لكيفية قضاء ذلك الوقت. سيمنحك المرونة لاتخاذ قرار أكثر عفوية بشأن ما تريد فعله - الاتصال بالأصدقاء لشرب القهوة؟ التحقق من لعبة Xbox الجديدة؟ القراءة؟ مهما كان قرارك، تذكر فقط أن تبقي بعض وقت فراغك حرًا على الأقل. تحديد الوقت ودمج المهام قد يكون تحديد الوقت الصارم - تخصيص مجموعة زمنية لكل مهمة فردية - أمرًا شاقًا ويصعب الحفاظ عليه بمرور الوقت. يوصى بدمج تحديد الوقت ومجموعات المهام للحصول على نظام أكثر انسيابية. بدلًا من مجموعة زمنية واحدة لكل مهمة فردية، ستحدد مجموعة زمنية لكل فئة من المهام التي تقوم بتجميعها معًا. إليك كيف يبدو ذلك عمليًا: أولًا، حدد فئات العمل العامة التي يجب أن تنعكس في جدولك اليومي أو الأسبوعي. مثلًا، قد يكون للكاتب المستقل قائمة الفئات التالية: البريد الإلكتروني إدارة العمل المبيعات الاجتماعات الأبحاث الكتابة التطوير المهني اليوجا تحضير وجبة الإدارة الشخصية القراءة وقت الفراغ الآن، اجلس مع تطبيق التقويم أو مخطط الورق المفضل لديك، وأنشئ مجموعات زمنية للأسبوع القادم تعكس الأوقات التي ستعمل فيها على كل فئة. تأكد من إعطاء جميع أولوياتك والتزاماتك مساحة كافية. إذا وجدت أنك تواجه صعوبة لإيجاد مساحة، فقد تحتاج إلى البدء في خفض التزاماتك. ستبدو النتيجة النهائية شيئًا مثل هذا: إذا وجدت صعوبة في الالتزام بجدولك الرقمي، فإننا نوصي بتخطيط يومك على الورق. يجبرك الجدول الزمني الورقي على البدء بنشاط كل يوم ويجعل من السهل تدوين الأشياء والتكيف كما يسير اليوم. بالإضافة إلى ذلك، من الأسهل إبقاء جدولك الورقي مفتوحًا على مكتبك كتذكير مرئي لما كنت تخطط للتركيز عليه. إذا كنت تعمل في شركة لديها تقاويم مشتركة، فقد تجد أنه من المفيد تحديد وقت لـ العمل العميق بشكلٍ عام، للحفاظ على جزء كافٍ من الاجتماع طوال اليوم. يستخدم خوي فينه، مصمم رئيسي في Adobe ، هذه الاستراتيجية في مكتبه: لديك الآن مجموعات زمنية لكل فئة، ولكن لا تزال بحاجة إلى معرفة أي مهمة محددة - أو مجموعة من المهام - للعمل عليها عندما يحين الوقت. هنا يأتي دور مدير مهام مثل Todoist. في تطبيق Todoist، أنشئ تصنيفًا لكل فئة مجمعة توصلت إليها في الخطوة الأولى، ثم راجع جميع المهام الحالية وحدد التصنيف المناسب لكل فئة. الآن عندما تصل إلى مجموعة زمنية، كل ما عليك فعله هو سحب قائمة التصنيفات المقابلة والاختيار من المهام ذات الصلة. سيتم ترتيب المهام ذات التواريخ في الجزء العلوي تلقائيًا، حتى تعرف متى يحين أقرب موعد لتسليم شيء ما ويحتاج إلى انتباهك أولًا. نصيحة: يمكنك أيضًا إنشاء مرشح جديد باستخدام استعلام مثل "@مدير شخصي والأيام ال 7 القادمة" لمشاهدة المهام التي يجب تسليمها في الأسبوع القادم فقط مع هذا التصنيف المحدد. للتأكد من عدم نسيان أي شيء، يجب أن يكون لكل مهمة تصنيف. ومع ذلك، ستجد على الأرجح أنه لا يجب تتبع كل صنف في Todoist. مثلًا، قد ترغب في تتبع اجتماعاتك أو تدريباتك في التقويم بدلاً من مدير المهام. وكما قلنا من قبل، لا تريد الإفراط في جدولة وقت فراغك. جرب الإعداد الخاص بك لمعرفة ما هو منطقي لظروفك الخاصة. المهام اليومية إذا جربت تحديد الوقت وما زلت تشعر بالتشتت وعدم التركيز، فقد ترغب في تجربة المهام اليومية. نحن نوصي بدورة Skillshare المجانية هذه والتي يقدمها Mike Vardy. حيث يرشدك خلال إعداد نظام المهام اليومية، بما في ذلك أمثلة تفصيلية باستخدام كل من الورق و Todoist. جدولة المجموعات الزمنية للمهام الفردية بالطبع، إذا كنت ترغب في الاحتفاظ بجدول أكثر دقة، يمكنك إنشاء مجموعات زمنية منفصلة لكل مهمة دائمًا. أسهل طريقة للقيام بذلك مع Todoist هي من خلال التكامل ثنائي الاتجاه مع تقويم Google. عند إعداد الدمج: أنشئ تقويمًا جديدًا لمهام Todoist الخاصة بك فقط، حتى تتمكن من تبديلها وإيقافها داخل التقويم الخاص بك حسب الحاجة. اختر مزامنة حساب Todoist الخاص بك بالكامل بدلًا من مشروع واحد. اختر مزامنة المهام مع تاريخ تسليم فقط بالإضافة إلى المهام التي لها تاريخ ووقت تسليم. ستظهر أي مهمة Todoist لها تاريخ ووقت، تلقائيًا كحدث في تقويم Todoist الجديد. ستظهر أي مهمة لها تاريخ ولكن بدون وقت، كحدث لمدة يومٍ كامل. خلال المراجعة الأسبوعية، حدد لكل مهمة تريد إنجازها و / أو وقت البدء بكتابة شيء مثل "الإثنين ظهرًا" أو "كل جمعة الساعة 9 صباحًا" في حقل المهمة. سيتعرف Todoist تلقائيًا على التاريخ ويبرزه ويضبطه عند حفظ المهمة. الآن، عندما تفتح طريقة العرض الأسبوعية في التقويم، سترى كل مهمة من المهام المجدولة كأحداث منفصلة (تعرف أيضًا باسم مربعات الوقت). يمكنك توسيع، وتقصير، وتعديل ونقل مربعات الوقت الخاصة بك داخل التقويم. ستتم تلقائيًا مزامنة أي تغييرات تجريها في تقويم Google مع Todoist (والعكس صحيح). قد تبدو جدولة الأيام والأسابيع مقدمًا مضيعة للوقت الثمين الذي قد تستخدمه لإنجاز الأمور فعليًا. ولكن عندما لا تتحكم في تقويمك، فمن السهل السماح للتشتت بالسيطرة. من خلال التحضير المسبق لعملية اتخاذ القرار بشأن ما ستعمل عليه لليوم أو الأسبوع، ستوفر الوقت والطاقة العقلية عندما يتعلق الأمر بالبدء في العمل. جرب تحديد الوقت ومجموعات المهام لمدة أسبوع، وشاهد كيف تشعر باستعادة السيطرة على وقتك واهتمامك. ترجمة وبتصرف للمقال Workflow Guide] Reclaim Your Schedule with Time Blocking] لكاتبه Laura Scroggs
    1 نقطة
  6. بعد أن أنشأنا أول مشروع في Android Studio وقمنا بتجربة التطبيق على المحاكي سنتعلم الآن أساسيات التعامل مع واجهة المستخدم وكيفية إنشاء العناصر المختلفة بداخلها. طرق إنشاء واجهة المستخدم لتطبيق أندرويد في نظام تشغيل أندرويد هناك طريقتان لإنشاء واجهة المستخدم الخاصة بالتطبيق: التعريف في الملف الخاص بها layout باستخدام لغة XML: وتتميز هذه الطريقة بأنها تقوم بفصل عناصر الواجهة عن الشيفرات البرمجية بلغة الجافا والتي تحدد وظيفة التطبيق الأصلية مما يُسهل عملية تطوير التطبيقات واكتشاف الأخطاء وتصحيحها وتجعل التطبيق أكثر مرونة لدعم أحجام الشاشات المختلفة واللغات المختلفة. تعريف عناصر واجهة المستخدم باستخدام الشيفرات البرمجية بلغة الجافا حيث تتكون الواجهة وقت تشغيل التطبيق وعمله لدى المستخدم. كما يمكنك استخدام هاتين الطريقتين معًا عن طريق تعريف العناصر في ملف layout وباستخدام الشيفرة البرمجية تقوم بتغيير خصائصها بناءً على تفاعل المستخدم مع هذه العناصر، وتلك هي الطريقة التي سنقوم باستخدامها. عناصر واجهة المستخدم تنقسم عناصر واجهة المستخدم إلى نوعين View و ViewGroup: View هو عنصر يقوم برسم شيء ما على الشاشة حيث يستطيع المستخدم التفاعل مع هذا الشيء. ViewGroup هو حاوية غير مرئية تستطيع أن تحمل بداخلها العناصر المكوَنة للواجهة. ويتميز كل نوع من ViewGroup بطريقة فريدة ومختلفة لعرض العناصر الأخرى بداخله وتُسمى العناصر المتواجدة داخل ViewGroup بالأبناء. يمكن أن يحتوي عنصر ViewGroup على عناصر من النوع ViewGroup أيضًا أو من النوع View وذلك للوصول إلى التصميم المنشود لواجهة المستخدم كما توضح الصورة التالية: يوفر أندرويد للمطورين مجموعة من Views و ViewGroup الجاهزة والتي تقوم بالوظائف الشائعة في التطبيقات. أمثلة على ViewGroup Linear Layout: ويتم ترتيب العناصر بداخله في اتجاه واحد إما بشكل أفقي أو رأسي. Relative Layout: ويتم ترتيب العناصر بداخله نسبة إلى عنصر أخر ويتم استخدامه عند صنع واجهة أكثر تعقيدا يصعُب معها استخدام Linear Layout. أمثلة على View Button TextView ImageView أساسيات تصميم الواجهات باستخدام XML توفر لغة XML طريقة سهلة وسريعة لصنع واجهة المستخدم وتتشابه مع طريقة صناعة صفحات الويب باستخدام HTML. كما ذكرنا سابقًا تتواجد الملفات الخاصة بالواجهة في مجلد res/layout بامتداد XML. يجب أن تحتوي ملفات XML على عنصر يسمى root ويعتبر هذا العنصر الحاوية الرئيسية لباقي العناصر ويكون هذا العنصر إما ViewGroup أوView، كما يجب أن يحتوي على XML namespace وهو من المعايير القياسية الخاصة بـ XML. تعريف الـ namespace بسيط وثابت لكل الـ root elements ويكون على النحو التالي xmlns:android="http://schemas.android.com/apk/res/android" وبعد تعريف الـ root element يمكنك بعدها إضافة عناصر أخرى لاستكمال واجهة المستخدم. وفي أغلب التطبيقات يكون الـ root من النوع ViewGroup لقدرته على إضافة أبناء له، على عكس View والذي لا يمكن أن يحتوي على أبناء. يتكون كل عنصر من عناصر XML من وسم الفتح <ElementName>، ووسم الغلق <ElementName/>. وبين وسم الفتح والغلق يتم وضع العناصر الأخرى والتي تعتبر أبناء ViewGroup، وبما أنه لا يوجد للعنصر View لأبناء فيمكن الاستغناء فيه عن وسم الغلق واستخدام وسم الغلق الذاتي </ElementName>. لتوضيح الأمر أكثر سنقوم بصنع واجهة مستخدم مشابهة لتطبيق أهلًا بالعالم Hello World. قم بفتح الملف content_main.xml المتواجد بداخل المجلد res/layout، ثم قم بمسح كافة الشيفرة المكتوبة. بعد عنصر root الخاص بالواجهة أضف عنصر ViewGroup من نوع LinearLayout كالتالي: <LinearLayout> قم بتحديد XML namespace الخاص بالعنصر LinearLayout: <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android > لكل عنصر من عناصر واجهة المستخدم سواء كان View أو ViewGroup العديد من الخصائص والتي يمكن التحكم بها وتخصيصها عن طريق XML أو عن طريق شيفرة الجافا وقد تكون هذه الخصائص خاصة بهذا العنصر فقط أو خصائص مشتركة لدى أكثر من عنصر. ومن الخصائص الهامة تحديد العرض والارتفاع الخاصين بالعنصر، ولتحديد العرض للعنصر نستخدم الخاصية layout_width: android:layout_width="Value" ونستبدل Value بقيمة العرض، وهناك عدة طرق لتحديد قيمة العرض، فيمكن تحديدها عن طريق قيم معرَفة مسبقًا للنظام مثل "match_parent" وتعني أن يكون عرض العنصر نفس عرض العنصر الأب، وإذا كان العنصر الأب هو root فالأب هنا المقصود به شاشة الهاتف. وباستخدام نفس الطريقة يتم تحديد الارتفاع الخاص بالعنصر عن طريق خاصية layout_height: android:layout_height ="Value" ليصبح الشكل النهائي للعنصر: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> </LinearLayout> لاحظ أنه يتم تحديد كافة الخصائص الخاصة بالعنصر داخل وسم الفتح ويتم أيضًا وضع XML namespace معهم. سنقوم بإضافة عنصر أخر للواجهة من نوع View وهو TextView والذي يستطيع أن يحمل بداخله نصًا ويمكن للمستخدم قراءته ولا يمكنه تغييره: <TextView /> سنقوم بتحديد الخصائص الخاصة بهذا العنصر وكما ذكرنا أن خاصتيَ العرض والارتفاع من الخصائص الهامة التي ينبغي تحديدها لكافة العناصر. <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" /> كان من الممكن استخدام قيمة "match_parent" ولكننا قمنا باستخدام "wrap_content" والتي تعني أن يكون العرض أو الارتفاع يشغل القدر المطلوب للنص فقط، أما إذا استخدمنا "match_parent" فسيشغل العنصر كل المساحة الخاصة بالأب والذي هو LinearLayout والذي يشغل مساحة الشاشة كلها كما حددنا ذلك سابقًا. لتحديد النص المطلوب كتابته داخل العنصر، نقوم بإضافة السطر التالي: android:text="Hello World!" هذا هو الشكل الكلي لملف XML: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> </LinearLayout> الآن قم بتشغيل التطبيق على المحاكي وستجده يعمل بالشكل المطلوب. ملاحظات العنصر TextView متواجد بين وسميَ الفتح والغلق الخاصين بـ LinearLayout ويُعتبر TextView ابنًا لـ LinearLayout. يستخدم العنصر TextView وسم الغلق الذاتي. يتم تحديد الخصائص للعنصر داخل وسم الفتح الخاص به فقط. التطبيق الثاني سنقوم بتطوير المثال السابق واستخدام عناصر أخرى في التطبيق لصنع واجهة مثل الصورة التالية: الاختلاف هنا في إضافة عنصر جديد للواجهة وهو Button. لإضافة هذا العنصر يتم استخدام العنصر </ Button> وإضافته داخل LinearLayout. نقوم بتحديد الطول، الارتفاع والنص الخاص بالزر كالتالي: <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click me"/> سيظهر الزر بجانب النص السابق: ولتغيير موضع الزر يجب تغيير اتجاه العناصر داخل عنصر LinearLayout، ولتغيير الاتجاه للرأسي بدلًا من الأفقي نستخدم الخاصية orientation: android:orientation="vertical" حيث أن الاتجاه يكون أفقيًا بشكل افتراضي. ليصبح ملف XML على النحو التالي: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click me"/> </LinearLayout> ملاحظات أي عنصر من النوع View يستخدم وسم الغلق الذاتي لأنه لا يستطيع أن يحتوي على أبناء أو عناصر أخرى بداخله. إذا قمت بكتابة العنصر Button أولًا بداخل LinearLayout ثم العنصر TextView سيتم تغيير الترتيب في الواجهة أيضًا. التطبيق الثالث يحتوي هذا التطبيق على نص "Android Image" وصورة للأندرويد وزر يتم ترتيبها بشكل رأسي. لصنع واجهة المستخدم سنختار LinearLayout كعنصر root وتغيير الاتجاه الخاص به للرأسي. نقوم بعدها بإضافة عنصر TextView وكتابة النص الخاص به، ولكن يمكن ملاحظة أن حجم الخط الخاص بالنص أكبر من الأمثلة السابقة لذا يجب تغيير حجم الخط عن طريق الخاصية textSize: android:textSize="40sp" ويتم تحديد الخط بوحدة "sp" وهي وحدة خاصة في نظام أندرويد لتحديد حجم الخط دون الاعتماد على كثافة البكسل المكوَنة للشاشة ليظهر النص دائمًا بنفس الحجم باختلاف أحجام شاشات الهواتف. لتغيير موضع النص ليكون في منتصف الواجهة نقوم باستخدام خاصية الجاذبية layout_gravity: android:layout_gravity="center" نقوم بإضافة العنصر ImageView لعرض الصور وتحديد الطول والارتفاع كالسابق، ولتحديد الصورة المعروضة بداخله نقوم بوضع الصورة في الملف res/drawable وعرضها داخل العنصر باستخدام الخاصية src: android:src="@drawable/andimg" تستخدم @ للإشارة إلى عنصر داخل الملف وبعدها يتم كتابة اسم الملف وهو drawable ثم تحديد اسم الصورة المتواجدة بداخله. نضيف بعدها العنصر Button ونقوم بتحديد النص الخاص به مع ملاحظة أن العرض الخاص به يستغل كافة مساحة الشاشة وليس على قدر المحتوى فقط. ليصبح ملف XML على النحو التالي: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Android Image" android:textSize="40sp" android:layout_gravity="center" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/andimg"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Say Hi"/> </LinearLayout> التطبيق الرابع نريد في هذا التطبيق صُنع واجهة مركبة كما في الصورة التالية: سيكون الـ root مثل الأمثلة السابقة من النوع LinearLayout ولكن هل اتجاه العناصر بداخله أفقي أم رأسي؟ ستجد العناصر متواجدة في الاتجاهين. لصنع هذه الواجهة سنستخدم أكثر من ViewGroup من النوع LinearLayout ونغير اتجاهاتها لصنع الشكل المطلوب كما في الصورة التالية: سيكون العنصر root من النوع LinearLayout والاتجاه بداخله رأسي، ويحتوي على LinearLayout آخر الاتجاه بداخله أفقي ونضع بداخله العنصرين المتجاورين كما في الصورة السابقة. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> </LinearLayout> </LinearLayout> نضع العنصرين ImageView و EditText داخل العنصر LinearLayout الثاني. نقوم بتحديد العرض والارتفاع واختيار الصورة من ملف drawable للعنصر ImageView مثل ما فعلنا في التطبيق السابق، وبالنسبة للعنصر الآخر EditText والذي يٌستخدم لإدخال نص من المستخدم، نقوم بتحديد عرضه وارتفاعه، بالإضافة إلى عرض نص يعبر عن المحتوى الذي يجب على المستخدم إدخاله باستخدام الخاصية hint: android:hint="Write your name here" نُضيف العنصر الأخير من النوع Button داخل LinearLayout الأول ولوضعه جهة اليمين نستخدم الخاصية layout_gravity: android:layout_gravity="right" ليُصبح ملف XML على الشكل التالي: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher"/> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Write your name here"/> </LinearLayout> <Button android:layout_width="wrap_content" android:layout_height="70dp" android:text="Done" android:layout_gravity="right"/> </LinearLayout> ملاحظات تم تحديد الارتفاع الخاص بـ LinearLayout الثاني بـ "wrap_content" حتى يشغل الارتفاع الخاص بالعناصر فقط ولا يشغل مساحة الشاشة كلها. تم استخدام طريقة مختلفة لتحديد الارتفاع الخاص بـالعنصر Button، وتستخدم هذه الطريقة في حالة لم نرد استخدام القيم المعرَفة داخل النظام مثل "match_parent" أو "wrap_content" واستخدام قيم مختلفة. وتُستخدم الوحدة "dp" كوحدة لتحديد الأبعاد دون الاعتماد على كثافة البكسل المكوَنة للشاشة ليظهر العنصر بنفس الأبعاد دائمًا باختلاف أحجام شاشات الهواتف. التطبيق الخامس هناك طريقة أخرى لإنشاء واجهة المستخدم كما في التطبيق السابق، حيث نقوم باختيار root من النوع RelativeLayout للوصول لنفس الشكل أيضًا كما في الصورة السابقة. في RelativeLayout يتم وضع العناصر نسبة إلى عناصر أخرى متواجدة لذلك ينبغي تحديد لكل عنصر ID مميز له لأن عند وضع عنصرين من نفس النوع (Button مثلا) سيكون اسم كل منهما Button ولا نستطيع عندها التفريق بين الزر الأول أو الثاني وللتفرقة بينهم يتم استخدام خاصية id: android:id="@+id/btn1" ويتم كتابة ID الخاص بالعنصر بعد كلمة /id+@ ويكون هذا ID مميز لهذا العنصر فقط ولا يتشابه معه عنصر آخر. وهناك استخدام آخر لـ ID عند التحكم في العناصر باستخدام شيفرة الجافا. وبهذا يصبح ملف XML على الشكل التالي: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" android:id="@+id/img" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Write your name here" android:id="@+id/edttxt" android:layout_toRightOf="@+id/img" /> <Button android:layout_width="wrap_content" android:layout_height="70dp" android:text="Done" android:id="@+id/btn1" android:layout_below="@+id/edttxt" android:layout_alignParentRight="true"/> </RelativeLayout> عند تشغيل التطبيق على المحاكي سيقوم برسم نفس الشكل السابق. ملاحظات تم تحديد ID خاص لكل العناصر. هناك بعض الخصائص التي تحدد موضع كل عنصر بالنسبة لعنصر آخر. مثل الخاصية layout_toRightOf المستخدمة للعنصر EditText وذلك لوضعه بجانب العنصر ImageView جهة اليمين: android:layout_toRightOf="@+id/img" والخاصيتين layout_below و layout_alignParentRight المستخدمتين مع العنصر Button وذلك لوضعه أسفل العنصر EditText و بمحاذاة الشاشة من جهة اليمين: android:layout_below="@+id/edttxt" android:layout_alignParentRight="true" بهذا نكون قد وصلنا إلى نهاية ثاني دروسنا من سلسلة أندرويد للمبتدئين، في انتظار تجربتكم وآرائكم.
    1 نقطة
  7. السلام عليكم تستطيع ذلك عن طريق dropzonejs <link rel="stylesheet" href="./path/to/dropzone/basic.css"/> <script src="./path/to/dropzone.js"></script> او <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.7.2/basic.css"/> <script src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.7.2/min/dropzone.min.js"></script> ثم تعطي فورم رفع الصور class="dropzone" <form action="/Server upload action " class="dropzone" id="my-awesome-dropzone"> <div class="fallback"> <input name="file" type="file" multiple /> </div> </form> تأكد ان name في input هي الخانة المطلوب تمريرها prams
    1 نقطة
  8. يتوقف ذلك على التقنيات التي تستخدمها في بناء الموقع ولكن الفكرة العامة هي استخدام مكتبات من أجل ذلك، مثلاً إن كنت تستعمل jquery فلدينا مكتبة dropzone.js ورابطها في هذا الموقع: https://www.dropzonejs.com/ مثال على المكتبة السابقة: <form action="/file-upload" class="dropzone"> <div class="fallback"> <input name="file" type="file" multiple /> </div> </form> ستقوم المكتبة بشكل أوتوماتيكي بوضع مكان ﻹسقاط الملفات على form السابق وinput موجود فقط للمتصفحات التي لا تدعم اﻹسقاط. إذا كنت تستعمل ReactJS هناك مكتبة react-dropzone وهكذا. إن كنت تريد معرفة كيف تعمل هذه المكتبات فهي تستعمل ما يسمى HTML Drag and Drop API وهي ميزة للـHTML لن أتطرق لشرحها هنا يمكنك القراءة عنها في موقع w3schools هنا: https://www.w3schools.com/html/html5_draganddrop.asp
    1 نقطة
  9. مرحباً بكم إخواني، لديّ sidebar من إطار العمل bootstrap شغال وليست فيه أي مشكلة لكنه مفتوح بشكل تلقائي، كيف لي أن أجلعه مغلق بشكل تلقائي وعند الضغط عليه يفتح بشكل عادي ؟ من أجل معاينة الكود الخاص بالـ sidebar اضغط هـنا . تحياتي لكم .
    1 نقطة
  10. نعم هذا ما انصحك به، لكن في نفس الوقت قم بالإطلاع على المشاريع المعروضة، و محاولة عملها بغية التطبيق على ما تعلمته إن أردت ذلك و الإهتمام بحسابك على المنصة.
    1 نقطة
  11. يعنى حضرتك تنصحنى انى ادور على شغل فى مجال البرمجة بعد ماخلص الدورة
    1 نقطة
  12. السلام عليكم ورحمة الله وبركاته تحيه طيبه للجميع. استفسار اذا قمت بعمل تطبيق وقمت بعمل صفحات للادارة بمعنى الحذف والتعديل وغيرها من مهام التي تخص الادارين هل يجب ان اقوم بعمل تطبيق منفصل عن التطبيق الاساسي تطبيق خاص بالادارين ؟ او يمكن جعل كل شي في تطبيق واحد مع عمل خصائص مشاهدة وعدم مشاهدة للادارين والمستخدمون؟ وايهم افضل وياليت مع ذكر السبب لو امكن
    1 نقطة
  13. <div id="wrapper"> المشكلة تكمن في هذا السطر: <div id="wrapper" class="toggled"> الصف toggled عندما يكون موجوداً يكون sidebar ظاهراً وعندما لا يكون يختفي sidebar ، هذا تم تحقيقه بالـCSS ومن خلال الجافاسكريبت نضيف هذا الصف أو نزيله عند الضغط على زر navigation. عند تحميل الصفحة المستعرض سيجد الصف toggled مطبقاً على wrapper div والذي يعني إظهار sidebar، كل ما عليك فعله ﻹخفائه عند تحميل الصفحة حيث لا يظهر إلا بالضغط على زر navigation هو تغيير السطر أعلاه إلى: <div id="wrapper"> بالمناسبة وجدت أخطاءً في كودك ليس لها علاقة بمشكلتك ولكن للنصيحة فقط: 1- أنت تضم مكتبتي jquery وbootstrap.min.js مرتين مرة من CDN ومرة من مجلد js ، إكتف بإحداهما ولا تنس وضع jquery قبل bootstrap.min.js ﻷن الـbootstrap يستخدم jquery. 2- كود الـcss دمج به الـbootstrap وكودك الخاص، لا داعي لدمج كود الـbootstrap بكود CSS أبداً. 3- آخر نسخة للـbootstrap هي 4.5.3 والنسخة التي تستعملها قديمة 4- يمكنك ضم نسخة rtl من bootstrap دون اللجوء لدمجه داخل كودك تماماً كما تضم أي ملف CSS من CDN أو مجلد وللعلم تجد نسخة bootstrap-rtl هنا https://github.com/MahdiMajidzadeh/bootstrap-v4-rtl ، عندما يصير bootstrap 5 مستقراً لن تحتاج إلى bootstrap-rtl ﻷن فريق bootstrap الفريد سيدعم RTL. 5- أين عنصر head ؟!!! وأين body ؟!!!
    1 نقطة
  14. مرحبًا @عبد الواحد الحدادي, في بناء sidebar تُفتح و تُقغل يقوم المبرمج بتجهيز كِلا الحالتين و واحدة منهم تكون الخيار التلقائي , لقد ذهبت انا للرابط الذي ارسلتها ثم فتحت Inspector على sidebar لمعرفة كيف تعمل , وجدت انه عند فتح و قفل sidebar هذه : عنصر div مع wrapper" id" لديه صنف (class) يتغير و هو toggled عندما تكون sidebar مفتوخة يحمل عنصر div هذا الصنف toggled و عندما تُغلق sidebar تقوم جافا سكريبت بحذف الصنف toggled : <div id="wrapper" class="toggled"> <!-- Sidebar --> <div id="sidebar-wrapper"> <ul class="sidebar-nav"> <li class="sidebar-brand"> <a href="#"> Start Bootstrap </a> </li> <li> <a href="#">Dashboard</a> </li> <li> <a href="#">Shortcuts</a> </li> <li> <a href="#">Overview</a> </li> <li> <a href="#">Events</a> </li> <li> <a href="#">About</a> </li> <li> <a href="#">Services</a> </li> <li> <a href="#">Contact</a> </li> </ul> </div> <!-- /#sidebar-wrapper --> <!-- Page Content --> <div id="page-content-wrapper"> <div class="container-fluid"> <h1>Simple Sidebar</h1> <p>This template has a responsive menu toggling system. The menu will appear collapsed on smaller screens, and will appear non-collapsed on larger screens. When toggled using the button below, the menu will appear/disappear. On small screens, the page content will be pushed off canvas.</p> <p>Make sure to keep all page content within the <code>#page-content-wrapper</code>.</p> </div> </div> <!-- /#page-content-wrapper --> </div> لجعل هذا sidebar يبدأ مغلقً عليك بإزالت الصنف toggled من العنصر div من wrapper" id"
    1 نقطة
  15. مرحبًا عبد الواحد. سأشرح لك الفكرة، و سأترك لك تجربة الأكواد و إن لم تنجح أخبرني و سأقوم بمساعدتك. حتى تجعل ال sidebar مخفي بصورة افتراضية، نقوم بإعطائه margin بقيمة سالبة، إذا كان ال sidebar في جهة اليمين و عرضه 17rem مثلًا نقوم بإعطائه margin:right بقيمة 17rem- و عند الضغط على الزر نقوم بتعديل قيمة هذا ال margin إلى صفر. هل يبدو لك هذا الأمر مألوفًا؟ هل تذكر كيف قمنا ببناء هذه الخاصية لل sidebar في موقع يوتيوبي سابقًا؟ يمكنك الآن العودة إلى هذا الدرس و مراجعته و ستفهم هذا الدرس الآن بصورة أفضل و ستثبت المعلومة لديك. إذا واجهتكأي مشاكل أخبرني و سأقوم بمساعدتك. أتمنى لك التوفيق.
    1 نقطة
  16. السلام عليكم حاولت ان ابد بتعلم لغة سي شارب وعند كتابة اول برنامج ظهر لدي خطاء ممكن المساعدة على تجاوز هذا الخطاء وارشادي بالطريقة الصحيحه وشكرا . main.cs
    1 نقطة
  17. وعليكم السلام ورحمة الله وبركاته , @Marwan800, عند بناء تطبيق فيه مستخدمين و ادارين ليس هنالك داعي لعمل تطبيق خاص للاداريين هذا سوف يطلب مجهود كبير في التطوير و الحرص على ان كِلا التطبيقان لديهم تزامن في قاعدة اليبانات و غيرها من المشقة المحتملة . يمكنك جعل كل شيء في تطبيق واحد و جعل صفحات خاصة للادارين لا يمكن الوصول اليها الا بكلمة سر خاصة و هذه هي الطريقة المستخدمة عمومًا في مثل هذا النوع من التطبيقات و ووردبريس المنصة المعروغة تعمل بنفس الطريقة , يكون صفحة للاداريين داخل رابط خاص .
    1 نقطة
  18. السلام عليكم ورحمة الله ما هي أحسن طريقة لبمجة تطبيق ندرويد لموقع قائم على ووردبريس لدون ويب فيو , ويستحسن أن تكون الطريقة على لغة كوتلن
    1 نقطة
  19. اكتبي دالة تقوم بجمع الأرقام الموجودة داخل مصفوف ة مثال: List = [1,2,3,4, ]5 The result is 15 اكتبي دالة تقوم بضرب عناصر مصفوف ة ب2 و تخزينها في مصفوفة جديدة مثال: List = [1,2,3,4, ]5
    1 نقطة
  20. يمكنك تحميل نسخة جديدة من PHP على السيرفر عن طريق التالي: أولاً: قم بتحميل مستودع جديد Repository على نظام التشغيل Ubuntu بالأمر التالي: sudo apt-add-repository ppa:ondrej/php ثانياً: قم بتحديث الفهرسة: sudo apt update ثالثاً: قم بتحميل نسخة PHP التي تريدها ولتكن 7.4: sudo apt install -y php7.4 php7.4-cli php7.4-common php7.4-fpm رابعاً: في حال أردت تحميل بعض الإضافات المهمة لعمل ووردبريس أو لارافيل قم بتحميل التالي: sudo apt install -y php7.4-mysql php7.4-dom php7.4-simplexml php7.4-ssh2 php7.4-xml php7.4-xmlreader php7.4-curl php7.4-exif php7.4-ftp php7.4-gd php7.4-iconv php7.4-imagick php7.4-json php7.4-mbstring php7.4-posix php7.4-sockets php7.4-tokenizer خامساً: قم بتعديل إعدادات Nginx لربط النسخة الجديدة من PHP كالتالي: location ~ .php$ { .... fastcgi_pass unix:/run/php/php7.0-fpm.sock; حذف هذا السطر fastcgi_pass unix:/run/php/php7.4-fpm.sock; وإضافة السطر التالي } وأخيراً: قم بإعادة تشغيل النظام: sudo systemctl reload nginx
    1 نقطة
  21. هل من الممكن إرفاق مجلد مشروع ؟ أو تفضل أن اشرح لك علي مشروع جديد ؟ من البداية
    1 نقطة
  22. وعليكم السلام ورحمة الله تعالى، مرحبًا @Sofian Almgamsy في البداية عليك تحديد التصميم الذي ترغب به للموقع الذي سوف تقوم به، وهل سوف يكون هنالك تفاعل داخل الموقع من قبل المشتريين ككتابة تعليقات وإضافة ردود وتقييم للأداء والمنتجات وغيرها من الأمور التي يقوم بها المستخدمين. إن كنت ترغب بتفاعل مثل هذا داخل الموقع فأنت بحاجة إلى تطوير Front-end وBack-end أي تطوير الواجهات الأمامية والواجهات الخلفية. لهذا أنت بحاجة إلى مبرمج محترف بتطوير هذه الواجهات. أما من ناحية القوالب الجاهزة فأنا أنصحك بها أكثر وذلك بسبب سهولة التعامل بها من قبل المبرمج ومن قبل الشخص المستخدم. حيث أنك إذا رغبة في تصميم القالب من الصفر سوف يكلفك هذا الأمر أكثر وربما يظهر فيه الكثير من العيوب والثغرات أثناء الاستخدام. يمكنك الاتفاق مع أحد المبرمجين من خلال موقع مستقل، والتي توفر لك منصة للتعامل مع الكثير من المبرمجين وتضمن لك إتمام العمل على أكمل وجه. كل ما عليك هو عرض العمل هناك وسوف تأتيك الكثير من الردود على مشروعك.
    1 نقطة
  23. مرحبا، نعم يجب تضمين جميع الـ Activities في Android Manifest نضع لكل واحدة Activity منفصلة و جميعهم نضعهم في Application بالشكل العام: <manifest ... > <application ... > <activity android:name=".ExampleActivity" /> ... </application ... > ... </manifest > مع بعض التفاصيل كالتالي: <application // activity 1 <activity android:name=".mainActivity"> android:label="@string/app_name1" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> // activity 2 <activity android:name=".loginActivity"> android:label="@string/app_name2" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> AndroidManifest.xml يحتوي على معلومات عن الحزمة الخاصة بك ، بما في ذلك مكونات التطبيق مثل الأنشطة والخدمات وأجهزة استقبال البث وموفري المحتوى و مفتاح الخرائط وما إلى ذلك. وأهم شيئ هو الصلاحيات مثل الوصول للإنترنت و مساحة التخزين .. الخطأ الذي يظهر عند استخدام Activity بدون تعريفها هو runtime error بالتوفيق
    1 نقطة
  24. يبدو أن الموقع ما هو إلّا موقع سيرة ذاتية لشخص يعمل في مجال ال degital marketing"مُسوقة رقمية" و تقوم بالترويج لخدماتها من خلال هذا الموقع، حيث أنها تساعدك في وضع خطة للتسويق الرقمي لمشروعك و التسويق لل brand الخاصة بك. يمكنك التواصل مع صاحبة الموقع عن طريق قسم contact us في الموقع لتعرفي تفاصيل أكثر منها. أيضًا الموقع يحتوي على روابط لصفحاتها و حساباتها على مواقع التواصل الاجتماعي يمكنك تفقدها لتتأكدي من مهاراتها و من أنه ليس موقع وهمي.
    1 نقطة
  25. النوع الأول من مخاطر التداول عبر الانترنت: المتسللين (الهاكرز): أول ما يحتاج إليه الهاكرز هو سرقة اسم المستخدم وكلمة المرور الخاصة بحساب المتداول، وللأسف على الرغم من تأمين حسابك بافضل الطرق فإن معظم الهاكرز خطواتهم تسبق خطواتك بخطوة على الأقل، وطرق الهاكر تتطور كل يوم يأتون بجديد، وإذا تم سرقة حسابك فإنك بذلك للأسف عرضة للوصول إلى حسابك كما بإمكانهم شراء وبيع ما يشاءون. وغالبًا ما يقوم ببيع الأسهم الموجودة على الحساب ولكنها محددوه، حيث يقوم المتسلل بشراء أسهم بأموالك ويدفع سعر السهم للحصة، حتى يرتفع السعر يبيع حصته بربح كبير ثم يقوم بتحويل المال إلى حساب شركة في بلد مختلفة أو استخدام سلسلة من شركات وهمية لنقلها إلى حسابهم. النوع الثاني من مخاطر التداول عبر الانترنت: التلاعب بالأسهم: يسمح الانترنت بتوفير أرض خصبة للتلاعب بالأسهم، فبالإمكان الآن رفع السهم أو خفضه لأن الأخبار تلعب دورًا هامًا في الأسهم، وهي تجارة رغم أنها رخيصة إلا أنها خفيفة للغاية، حيث يقوم الوسيط هو بدء مؤشر على السهم المراد ثم الدخول في معظم المنتديات للمناقشة فيقوم نفس الشخص بنشر رسائل لا تعد ولا تحصى تحت أسماء مستعارة مختلفة للحديث على هذا السهم. وللأسف هذه الطريقة لا يمكن كشفها لأنه لا توجد طريقة للتعرف على ذلك وبالتالي يمكنه النشر الإيجابي للسهم مقابل سهم معين حسب ما يهدف إليه. النوع الثالث من مخاطر التداول عبر الانترنت: مخاطر الاستثمار في الأوراق المالية : بغض النظر عن الطريقة المستخدمة تؤثر حركة الانترنت العالية على مدى قدرة المستثمرين عبر وسيلة الانترنت في الوصول إلى حسابهم أو حتى نقل الطلبات الخاصة بهم. ويستوجب على مستثمر الانترنت أن يشكك في نصائح الأسهم وكذا النصائح التي تقدم في غرف الدردشة وعلى لوحات الإعلانات، ويمكنهم الاستعانة بشركات وساطة على الواقع تساعدك في اتخاذ الإجراء المناسب، ويجب أن تتجنب الإغراء بالتجاوز بتداول متكرر أو مندفع دون الالتفات إلى الأهداف الاستثمارية أو تحمل المخاطر. مما يؤثر على أداءك الاستثماري وكذا رفع تكاليف التداول ومن ثم تعقيد الوضع الضريبي.
    1 نقطة
×
×
  • أضف...