لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 08/04/23 في كل الموقع
-
أنا أسف إني هكتب بالعاميه أنا طالب ثانوي عام و جايب درجة هندسه ودرجة حاسبات وأنا محتار شويه في ادخل إيه (مع العلم انا بحب السوفت وير آكتر من الهارد وير) فأنا عايز معلومات عن الفرق بين الكليتين من حيث المميزات والعيوب2 نقاط
-
السلام عليكم ياشباب عاوز اتعلم بسرعه تطوير الوجهات الاماميه ويكون طريق واضح علشان انا محتاج شغل ضروري او لو في اي حاجه اشتغل فيها اون لاين حتي لو بي مبلغ بسيط علشان حرفيا زي ما اكون تايه ومش عارف اعمل ايه ده غير ان الشركات كلها محتاجه سنين خبره كتير فا ياريت الي عندو طريقه اجيب بيها فلوس اون لاين يوجهني؟ لخيد ما اخلص من الدوره دي ...2 نقاط
-
let car={ make:'kia', model:'rio', year: 1999 } let car1={ make:'kia', model:'rio', year: 1999 } let compareCar=function(car,car1){ if ( car.key=== car1.key && car[key]===car1[key]) return true; else return false; } let result=compareCar(car,car1); console.log(result); سؤال من بعد اذنكون: ليش لما بستخدم && بيعطيني خطأ انو (key is not defined) وبس استخدم || ما بيطلع هاد الخطأ . وليش الكود ما عم يشتغل ، برأيي انا انو الفكرة ظابطة 😅، شكرا سلفا.1 نقطة
-
السلام عليكم انا اتعلمت في التفاضل والتكامل الاتي: الواحد الاولي (الاشتقاق وتطبيقاته) التاني (تفاضل وتكامل الدوال الاسيه واللوغاريتميه) الثالثه (سلوك الداله ورسم المنحنيات ) الرابعه (التكامل المحدد وتطبيقاتة) هل كد تمام في التفاضل والتكامل والا فيه حاجه تاني اتعلمه ؟1 نقطة
-
السلام عليكم نصيحة عند تعلم الرياضيات الخاصة بتعلم الآلة هل أكتب الدورس في دفتر أم لا ؟1 نقطة
-
السلام عليكم هل فيه فعلان اضافة علي جوجل كروم من خلاها احصل علي خصومات علي كورسات من الانترنت ؟1 نقطة
-
كورس التحليل الرياضي يحتوي على شرح هذين المفهومين، فهما جزء من التحليل الرياضي.1 نقطة
-
هذا يعتمد على طريقة دراستك، في حال كنت من الأشخاص الذين يقومون بأخذ ملاحظات بشكل دائم فإنه من الافضل كتابة بعض الملاحظات على دفتر. و لكن هذا ليس ضروري، شخصياً لا أقوم بأخذ ملاحظات أبداً، بل أقوم بحل تمارين على ما تعلمته و ذلك حتى أصبح جيداً فيه، و تلقائياً يصبح الأمر مثل المعلومات الأساسية. لذلك من الأفضل أن تقوم بحل بعض التمارين على ما تقوم بتعلمه، أيضاً من الجيد أن تقوم بالتفكير في كل شيء تقوم بتعلمه في تعلم الآلة و محاولة ربطه بما تعلمته من رياضيات.1 نقطة
-
الرياضيات مثل الكود بحاجة إلى الفهم والاستيعاب ثم التطبيق العملي والتطبيق لا يقل أهمية عن الفهم، ,وفي الرياضيات من المفيد كتابة النقاط الهامة مثل القواعد والملاحظات وخلافه التي تساعدك في الحل والأمر أشبه بالملخصات في أيام الدراسة. الأمر الذي يعود عليك بالنفع في حالة أردت تذكر أمر ما أو المراجعة وفهم الأمر بشكل أعمق حيث أنك ستكتب القواعد والملاحظات وشرح بسيط لها من خلال فهمك. وبالإضافة إلى ما سبق بإمكانك الإعتماد على أدوات التعلم التفاعلي عبر الإنترنت أو تطبيقات الهاتف المحمول التي تتيح لك التفاعل مع الرياضيات وتجربة التغييرات في الوقت الفعلي. أما في الكود فلا حاجة إلى كتابة كل شيء فلديك الإنترنت تستطيع البحث عما تريد، لكن عليك الفهم والاستيعاب والحفظ في البداية وفي حال نسيت تستطيع البحث وأنصحك بقراءة التالي:1 نقطة
-
1 نقطة
-
السلام عليكم هل الكورس بيشرح فيه الرياضيات المستخدم في المجال ؟ هل كورس تحليل البيانات من شركه غوغل مفيد ؟ هل الكورس مجانيه ؟ هل الكورس بلغه العربيه او حتي مترجم عربي ؟ وكيف احصل علي الكورس ؟1 نقطة
-
تمام , حضر شكرااا جدا لحضرتك شكرااا كورس ده بيشرح الاساسيات تعلم الاله بس والا كمان تعلم العميق والشبكات العصبيه1 نقطة
-
نعم هذا هو، و هو مجاني، قد يكون الحصول على الشهادة مدفوع و لكن يمكنك تعلم المحتوى بشكل مجاني.1 نقطة
-
تمام , شكرااا حدا والله لحضرتك عشان انا كانت تايها انا شاء الله هبتد من النهارد بس الكورس ده stanford مجانيه وهو كمان مترجم عربي هو ده الكورس صح https://www.coursera.org/learn/machine-learning1 نقطة
-
أنت تحاول قفز خطوات وعدم السير خطوة خطوة في الطريق الصحيح، أولاً عليك بتعلم الرياضيات الأساسية المطلوبة لمجال الذكاء الاصطناعي وهم الجبر الخطي والتفاضل والتكامل ولإحتمالات والتحليل الرياضي. وبإمكانك البحث على اليوتيوب عن تلك الأساسيات وتعلمها وستجد محتوى بالعربية والإنجليزية. أما بخصوص كورس ذكاء اصطناعي من جوجل فهو (Google AI Education)، وتستطيع البحث على اليوتيوب عن دورات للذكاء الاصطناعي باللغة العربية لتسهيل الأمر عليك في حال كنت تواجه صعوبة في الإنجليزية لكن الدورات الإنجليزية أفضل بالطبع ومنها شهادة الذكاء الإصطناعي من جامعة ستانفورد (Machine Learning AI Certification).1 نقطة
-
تمام , حضر بس انا مبتدا يعني انا اتعلمت الخورزميات وهياكل البيانات وكمان اتعلمت لغة البرمجه python وعملت مشاريع كثير اتعلم الكورس ده stanford علي طوال والا الاول اتعلم رياضيات تعلم الاله واناكمان اتعلمت التفاضل والتكامل1 نقطة
-
السلام عليكم البيانات التي تتحفط في قاعد بيانات SQL بتكون موجود فين هل علي الحاسوب الشخصي ام فين؟1 نقطة
-
نعم، صحيح إذا كنت مهتماً بمجال تعلم الآلة وترغب في تطوير نماذج وبرمجيات في هذا المجال، فإن استخدام خدمات سحابية قد يكون خياراً جيداً بالنسبة لك. باستخدام خدمات سحابية مثل Google Colab أو Microsoft Azure Notebooks أو Amazon SageMaker، يمكنك العمل على مشاريعك وتطوير نماذج التعلم الآلي دون الحاجة إلى تثبيت كل شيء على جهازك الشخصي. هذه الخدمات توفر بيئة متكاملة تحتوي على الأدوات والمكتبات الضرورية لتطوير النماذج بسهولة.كما يمكنك حفظ البيانات الخاصة بك ونماذجك على السحابة، مما يسهل مشاركة مشاريعك مع الآخرين والوصول إليها من أي مكان بمجرد تسجيل الدخول إلى حسابك على الخدمة السحابية.1 نقطة
-
في حال كنت تقصد الكورس Google Data Analytics Professional Certificate. فإن الكورس لا يحوي في عناوينه على أي شرح رياضيات، بالطبع سيتم شرح الخوارزميات المستعملة و لكن يتم الشرح بشكل مبسط حتى يمكنك فهمه حتى لو لم تكن جيد في الرياضيات. تحديد مدى الفائدة من كورس ما تتعلق باهتماماتك، فقد يكون الكورس مفيد لشخص و غير مفيد لآخر. في حال كنت تريد العمل مع البيانات و تحليلها و استنتاج الأمور منها فبالطبع الكورس مفيد لك، أما في حال كنت تريد العمل في الذكاء الصنعي و تريد فقط معرفة كيفية التعامل مع البيانات فالكورس غير مفيد، أيضاً في حال كنت تريد أن تعمل في مجال علم البيانات فهذا الكورس قد يكون له بعض الفائدة و لكن ليس كثيراً. الكورس مجاني لفترة تجريبية و لكن بعدها يجب عليك الدفع ( إن أردت إكمال الكورس) تكلفته حوالي $49 في الشهر الواحد، و لذلك التكلفة الكلية تعتمد على سرعتك في الكورس. نعم تتوفر ترجمة عربية لهذا الكورس.1 نقطة
-
في حال كنت تشغل سيرفر قاعدة البيانات على جهازك، فهي تخزن على جهازك. أما في حال كنت تقوم برفع الموقع على استضافة فسيكون هناك خيارين، إما أن تكون الاستضافة تدعم تشغيل قاعدة بيانات بشكل مباشر، و هذا هو حال أغلب الاستضافات، أو أنك ستضطر إلى استعمال إضافة خاصة تقوم بتشغيل سيرفر قاعدة البيانات و يقوم الموقع بجلب البيانات منها. بالطبع وجود قاعدة البيانات في نفس مكان السيرفر يجعل جلب البيانات أسرع بكثير، و لكن هناك بعض الحالات التي يكون فيها ذلك مكلفاً، مثلاً في حال كنت تريد تخزين بعض المعلومات التي لن تحتاج إلى جلبها كثيراً فسيكون لديك خيارات تخزين أقل تكلفة لأنها أبطئ. لذلك هذا يعتمد على حالتك، يمكنك إضافة بعض التفاصيل ليكون الجواب أكثر دقة.1 نقطة
-
وعليكم السلام عادةً، تُخزن قواعد البيانات SQL (Structured Query Language) على خوادم مخصصة بدلاً من الحواسيب الشخصية. هذه الخوادم قد تكون جزءًا من البنية التحتية للشبكة الخاصة بالشركة أو المؤسسة، أو يمكن استخدام خدمات استضافة قواعد البيانات من مزودي خدمات سحابية مثل Amazon Web Services (AWS) أو Microsoft Azure. كما في حالة الشبكات الصغيرة أو الاستخدام الشخصي، يمكن تثبيت قاعدة البيانات على الحاسوب الشخصي، وهذا ممكن باستخدام برامج قواعد البيانات المثل MySQL أو PostgreSQL أو SQLite. ومع ذلك، تحتاج إلى أن تكون مسؤولًا عن الصيانة والنسخ الاحتياطي للبيانات إذا اخترت هذا الخيار. عند استخدام خوادم قواعد البيانات السحابية، تتولى الخدمة مزودة الصيانة والنسخ الاحتياطي والتوفير العام للبنية التحتية، مما يخفف من عبء الصيانة عنك. الخيار بين استضافة قاعدة البيانات على الحاسوب الشخصي أو استخدام خدمات سحابية يعتمد على حجم البيانات، احتياجات الأمان، ومدى التحكم والصيانة التي ترغب في القيام بها.1 نقطة
-
أنت تتحدث عن مجالين مختلفين تمامًا، فتخصص الهندسة يتضمن هندسة مدنية، معمارية، ميكانيكية وكهربية وهندسة برمجيات وغيرهم. أما حاسبات ومعلومات فهى كلية خاصة بالبرمجة والذكاء الاصطناعي. لذلك عليك بتحديد ما تريد وهو أمر صعب بالطبع، ونصيحتي إليك قم بدراسة مجال البرمجة لمدة أسبوع على الأقل لتفقده وكتابة الكود بيديك والدراسة لمدة 6 ساعات يوميًا على الأقل لتستطيع التحديد بناءًا على معرفة صحيحة. وتستطيع البدء مثلاً بتعلم أساسيات لغة بايثون أو C++ والأفضل دراسة C++ لأنك ستتعرض لها في الكلية وهي الأساس الصحيح لتعلم البرمجة لكنها أصعب، فإذا وجدت الأمر صعب بالنسبة لك أو أنك لا تفضل مجال البرمجة. فهنا تتجه لكلية الهندسة، ولمعلوماتك قسم البرمجيات بها سيؤهلك لتصبح Embedded Software Engineer لتعمل في شركة مثل Valeo.1 نقطة
-
سأقدم لك معلومات حول الفرق بين تخصصي هندسة وعلوم الحاسبات من حيث المميزات والعيوب: هندسة مميزات تطبيق عملي تخصص الهندسة يركز على تطبيق المبادئ العلمية والرياضية لحل المشاكل العملية وتصميم وإنشاء الأشياء. إذا كنت مهتمًا بتطبيق العلم في الحياة العملية، فإن هندسة ستكون خيارًا جيدًا. تنوع التخصصات تخصص الهندسة يشمل مجموعة متنوعة من التخصصات مثل الهندسة الميكانيكية، الكهربائية، المدنية، الكيميائية، والإلكترونية. يمكنك اختيار التخصص الذي يتناسب مع اهتماماتك. فرص العمل حملة شهادات في الهندسة غالبًا ما يكونون مطلوبين في سوق العمل، خاصة في الصناعات التكنولوجية والإنشائية. عيوب الرياضيات والعلوم قد يكون لديك تحديات في فهم وتطبيق المفاهيم الرياضية والعلمية المعقدة التي تتعلق بالهندسة. الجوانب النظرية بالرغم من التطبيق العملي، إلا أن هندسة تشمل أيضًا جوانب نظرية ودراسة عميقة للمفاهيم التقنية. علوم الحاسبات مميزات برمجة وتطوير البرمجيات إذا كنت تحب البرمجة وتطوير البرمجيات، فإن علوم الحاسبات تتيح لك فرصًا واسعة للعمل في مجالات مثل تطوير تطبيقات الجوال، تصميم مواقع الويب، وتطوير البرمجيات. ابتكار وإبداع مجال علوم الحاسبات يمنحك الفرصة للتفكير الإبداعي وابتكار حلول جديدة للمشاكل التقنية. سوق العمل النشط صناعة تكنولوجيا المعلومات تنمو بسرعة، وهذا يعني وجود فرص وظيفية كبيرة في مجال علوم الحاسبات. عيوب الوقت أمام الشاشة قد تقضي ساعات طويلة أمام الكمبيوتر مما قد يؤثر على النشاط البدني والاجتماعي. تحديث مستمر مجال تكنولوجيا المعلومات يتطلب التعلم المستمر لمواكبة التطورات والتغييرات السريعة في التقنيات. استناداً إلى ما تفضله وتهتم به، يمكنك اتخاذ قرار بناءً على ميزات وعيوب كل من الهندسة وعلوم الحاسبات. يمكنك أيضاً التحدث مع أشخاص يعملون في هذين المجالين والبحث عن معلومات إضافية لاتخاذ قرار الصحيح.1 نقطة
-
عندي مشكله mongoDB عملت model ل product و cart وعند اضافه منتج في السله بيضيف id المنتج في Cart المشكله : عند اضافه عنصر للسله وبعدها الادمن يحذف العنصر يحذف من Model Product ولاكن لا يحذف في Model Cart او اي Model اخر مربوط به وهذا يسبب خطأ عند عمل .popular هل يوجد طريقه عند حذف المنتج يحذف معه اي Model اخر مربوط به1 نقطة
-
الطريقة الأولى لحل المشكلة هي باستخدام مفهوم الـ "حذف المتوالي" (Cascading Delete) في MongoDB، وعند حذف عنصر من Model Product، يمكنك تعيين خاصية تؤدي إلى حذف جميع العناصر المرتبطة به في Model Cart تلقائيًا. والأمر يعتمد على كيفية تطبيقك للعلاقة بين Model Product و Model Cart في تطبيقك، فإذا كنت تستخدم مرجعًا يشير إلى عنصر في Model Product في Model Cart (مثل استخدام ObjectId)، فتستطيع الاستفادة من خاصية "onDelete" في واجهة العلاقة للقيام بذلك. وإليك مثال على كيفية تحقيق حذف المتوالي بين Model Product و Model Cart باستخدام مكتبة Mongoose في Node.js، ولنفترض أن لديك مودل Product ومودل Cart مثل التالي: // Product Model const mongoose = require('mongoose'); const productSchema = new mongoose.Schema({ name: String, // ... other product properties }); const Product = mongoose.model('Product', productSchema); module.exports = Product; مودل Cart: // Cart Model const mongoose = require('mongoose'); const cartSchema = new mongoose.Schema({ products: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Product' }], // ... other cart properties }); const Cart = mongoose.model('Cart', cartSchema); module.exports = Cart; بإمكانك إضافة خاصية "onDelete" في علاقة Model Cart مع Model Product لتحقيق حذف المتوالي: const cartSchema = new mongoose.Schema({ products: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Product', onDelete: 'CASCADE' }], // ... other cart properties }); وبذلك عندما يتم حذف عنصر من Model Product، سيقوم MongoDB تلقائيًا بحذف جميع العناصر المرتبطة به في Model Cart بفضل الخاصية "onDelete" التي تم تعيينها في واجهة العلاقة. والخاصية "onDelete" ليست جزءًا من MongoDB نفسها، بل هي خاصية تقدمها مكتبة Mongoose لتسهيل التعامل مع قواعد البيانات. لذلك، ويجب التأكد من استخدام Mongoose أو أي مكتبة أخرى تقدم تلك الخاصية حتى تتمكن من الاستفادة من الحذف المتوالي. الطريقة الثانية هي باستخدام طريقة deleteMany() مع استعلام يحدد كل العناصر التي تريد حذفها، وكمثال: const productsCollection = db.collection('products'); const cartsCollection = db.collection('carts'); // Find all products that are in the cart const productsInCart = cartsCollection.find({ productId: { $in: productsCollection.distinct('id') } }); // Delete all products that are in the cart productsInCart.deleteMany(); سيعمل الكود السابق على حذف جميع المنتجات التي توجد في عربة التسوق، بالإضافة إلى إمكانية استخدام طريقة deleteOne() لحذف عنصر واحد فقط. أي إن كنت تريد حذف المنتج الذي له معرف 1234567890, فالطريقة كالتالي: const productsCollection = db.collection('products'); // Delete the product with id 1234567890 productsCollection.deleteOne({ id: 1234567890 }); والقرار بين استخدام "حذف المتوالي" باستخدام خاصية "onDelete" في واجهة العلاقة أو استخدام deleteMany() و deleteOne() يعتمد على حاجتك الفعلية وتصميم قاعدة البيانات والتطبيق الخاص بك، وسأوضح لك الفرق بالمقارنة بينهم: استخدام حذف المتوالي (onDelete): المزايا: يقوم بالحفاظ على سلامة علاقات البيانات بطريقة أكثر تلقائية، وعند حذف عنصر من Model Product، ستتم إزالة العناصر المرتبطة به من Model Cart تلقائيًا دون الحاجة إلى كتابة الكود يدويًا. أكثر ملاءمة وسهولة للتطبيقات التي تعتمد بشكل كبير على العلاقات وتحتاج إلى تنظيم بياناتها بشكل جيد. العيوب: يتطلب استخدام مكتبة معينة (مثل Mongoose) التي تدعم هذه الخاصية، وإذا قررت استخدام مكتبة أخرى قد لا تكون تلك الخاصية متاحة. استخدام deleteMany() و deleteOne(): المزايا: تحكم أكبر بالعملية وأوضح للمطورين، وتستطيع كتابة الكود بشكل دقيق لحذف العناصر المطلوبة بناءًا على متطلبات تطبيقك. قابل للتطبيق دون الحاجة إلى مكتبة خاصة بـ "حذف المتوالي". العيوب: أكثر تعقيداً في بعض الحالات، خاصة إذا كان لديك عدة نماذج مرتبطة بعلاقات معقدة. وببساطة إن كانت علاقاتك معقدة وتعتمد على عمليات حذف متعددة في عدة نماذج، فمن الأفضل استخدام deleteMany() و deleteOne() لتحكم أكبر في العملية، أما إذا كانت العلاقات بسيطة وترغب في تبسيط عملية الحذف، فالحذف المتوالي باستخدام "onDelete" هو الخيار الأمثل.1 نقطة
-
إذا كان لديك أي استفسار أو ترغب بتوضيح أي معلومة ما عليك سوى السؤال تحت الفيديو وسيجيبك المدربون خلال أقل من نصف ساعة في جميع الأوقات؛ وإذا حدثت معك مشكلة برمجية لم تستطع حلها بنفسك فيمكنك أن ترفق مشروعك لنفحصه لك وندلك على المشكلة وطريقة الحل، ونخبرك كيف أصلحناها لتكتسب مهارة حل المشكلات البرمجية. وبعد منحك الشهادة سنمنحك باقة كتابة السيرة الذاتية في موقع بعيد بقيمة 99$ مجانًا. سيجري لك فريق أخصائيي التوظيف مقابلة صوتية يتعرف فيها على مهاراتك، ويكتب لك أفضل سيرة ذاتية مخصصة لك؛ ثم سيتابع معك لضبط حسابك على مستقل وبعيد ويقدم لك نصائح مخصصة للحصول على عملك الأول. وبخصوص دورة بايثون بشكل خاص، فستجد أنها تغطي المهارات المطلوبة في وصف الوظيفة على مواقع التوظيف، وقد تم توضيح ذلك هنا:1 نقطة
-
شكرا . انا كنت مفكر باستخدامي (car.key) بكون عم استهدف اسم الخواص للكائن properties. وباستخدامي (car[key]) بكون عم استهدف قيمة الخواص value.1 نقطة
-
إن المعاملان && , || لديهما خاصية تدعى بالدارة القصيرة short circuit و التي تعني أنه يتم التنفيذ بشكل تسلسلي للشروط، و في حال كنا متأكدين من قيمة الشرط في لحظة ما لا يتم متابعة التنفيذ. في حالة && فإنها تقف في حال وجدت أي شرط خاطئ، لأن عملية and ستكون نتيجتها false في حال كان أي شرط false. أما في حالة || فإنها تقف في حال وجدت أي شرط صحيح، لأن عملية or ستكون نتيجتها true في حال كان أي شرط true. لذلك في حالة استعمالك لل and كان الشرط الأول صحيح فأكمل و نفذ الشرط الثاني. أما في حالة استعمالك لل or فقد وجد الشرط الأول صحيح فلم يكمل، لذلك لم يظهر الخطأ.1 نقطة
-
في دالة compareCar، يجب أن تقوم بالمقارنة بين جميع خصائص الكائنين car و car1، لذلك يحتاج الدالة إلى إجراء حلقة للتحقق من جميع الخصائص. عند التحقق من الخصائص، يجب استخدام [] بدلاً من . للوصول إلى قيمة الخاصية، لأن اسم الخاصية غير معروف مسبقًا. عند التحقق من قيمة الخاصية، يجب استخدام === للمقارنة بين القيم وليس == لأن === يقارن أيضًا نوع القيمة. وإليك الحل الصحيح: let car = { make: 'kia', model: 'rio', year: 1999 }; let car1 = { make: 'kia', model: 'rio', year: 1999 }; let compareCar = function(car, car1) { // الحصول على مفاتيح الكائنين let keys1 = Object.keys(car); let keys2 = Object.keys(car1); // التحقق مما إذا كان عدد المفاتيح متساويًا if (keys1.length !== keys2.length) { return false; } // مقارنة مفاتيح وقيم الكائنين for (let key of keys1) { if (car[key] !== car1[key]) { return false; } } return true; }; let result = compareCar(car, car1); console.log(result); // النتيجة: true وبخصوص سؤالك عند استخدام && في الشرط، فإنه يقوم بتقييم الشرط بالكامل قبل أن يقرر إذا ما كان يجب تنفيذ الجزء الذي يليه أم لا. وفي حالة الشرط car.key === car1.key && car[key] === car1[key]، الجزء الأول car.key === car1.key يقارن بين الخاصية key في الكائن car والكائن car1. لكن في تلك الحالة، لا يوجد خاصية اسمها key موجودة في كلا الكائنين، لذلك يتم رفع خطأ key is not defined، ولا يتم الوصول للجزء الثاني من الشرط. بالنسبة لاستخدام ||، عند استخدامه في الشرط car.key === car1.key || car[key] === car1[key]، فإنه يقوم بتقييم الشرط وإذا كان أي جزء من الشرط صحيحًا (بمعنى أن الخاصية key موجودة في أحد الكائنين)، فإنه يعتبر الشرط صحيحًا دون الحاجة للتحقق من الجزء الثاني من الشرط. ولذلك لا يظهر خطأ key is not defined عند استخدام ||. لحل المشكلة والقيام بالمقارنة بطريقة صحيحة، تستطيع استخدام الأسلوب الذي قمت بتصحيحه في الكود السابق باستخدام حلقة for لمقارنة جميع الخصائص.1 نقطة
-
يمكنك دائماً سؤالنا عن أي شيء، هنا في قسم الأسئلة العامة أو في تعليقات دروس الدورة في حال كان السؤال متعلقاً بدرس ما. فيما يخص العمل الحر، في البداية قد يكون صعب، حيث أنه أقل استقرار في البداية من العمل في شركة، و ستأخذ وقت حتى يصبح لك اسم و تقييم على مواقع العمل الحر، مثلاً في مستقل، من الطبيعي أن يفضل صاحب العمل إعطاء المشروع لشخص ذو تقييم عال على الموقع و معرض أعمال جيد على أن يعطيه لشخص ليس له أي تقييم، فالثقة في الشخص الأول ستكون أكبر كونه قام بأعمال مسبقة و حصل على تقييمات جيدة. طبعاً ستخبرني كيف ستحصل على تقييم إن لم تحصل على عمل أصلاً؟ هناك بعض الطرق التي يمكنك اتباعها للقيام بذلك، بعض منها: حاول القيام بمشاريع شخصية جيدة لإرفاقها في معرض أعمالك، حاول أن تكون قابلة للفتح مباشرة، أي مثلاً في حال كان المشروع موقع يجب أن يكون مرفوع على استضافة حتى يمكن لمن يفتح المعرض أن يرى و يختبر الموقع مباشرة، فلا أحد سيضيع وقته في تنزيل الموقع من غيت هاب و تشغيله يدوياً. حاول القيام بمشاريع ليست مشهورة جداً، فمن يفتح معرض أعمالك قد يعتقد أنك نسخت الكود من مشروع آخر لا أكثر، أما في حال قمت بمشروع غير موجود على النت بكثرة فستثبت مهاراتك بشكل أكبر، أو حتى لو كان المشروع موجود بكثرة حاول إضافة خاصيات لمشروعك غير موجودة بكثرة، أي شيء يميز مشروعك عن غيره. قم بتقليل التكاليف، أي حاول دائماً أن تقدم مبكراً حتى يتسنى لك أن تضع سعر منخفض (لأنه بعد تقديم عدد معين يصبح من غير الممكن وضع سعر أقل من المتوسط)، حتى لو كان هذا السعر غير جيد بالنسبة لك وقليل، لكن في البداية اعتبر أنك تتعلم، كما أنك تربح زيادة تقييمات، و بالتالي تخفيض السعر لن يكون بلا فائدة. احرص على أن تكون متفهماً لمتطلبات صاحب المشروع، و أن توفر الدعم له بشكل دائم، هذه نصيحة عامة و ليست فقط في البداية، فهي تساهم في بناء سمعتك و زيادة فرص الحصول على مشاريع.1 نقطة
-
ما هو الخطأ الذي يظهر لك، لو أمكن نسخ الخطأ ولصقه هنا مع صورة للتوضيح1 نقطة
-
لكي تربح من تطبيقات أندرويد، هناك خياران. الأول، يمكنك تعلم تطوير تطبيقات أندرويد حتى تستطيع تطوير ورفع التطبيقات بنفسك على متجر جوجل بلاي. الخيار الثاني هو تعيين مطور تطبيقات أندرويد ليفعل ذلك بالنيابة عنك. إذا أردت تعلم تطوير تطبيقات أندرويد، فهذه المقالة مفيدة لهذا الموضوع. وهذه بعض المناقشات التي تتحدث عن كيفية كسب المال من تطبيقات أندرويد. تجربتي في الربح من مجال التطبيقات قد-يغير حياتك كما فعل بي1 نقطة
-
أولاً عليك بمعرفة خطوات رفع تطبيق على متجر Google Play وهي: إنشاء حساب مطور في Google Play. رفع تطبيقك إلى Google Play Console. أدخل معلومات التطبيق الخاصة بك، مثل العنوان والوصف والصور. اختر طريقة التسعير الخاصة بك. قم بنشر تطبيقك. وبالطبع يوجد رسوم إنشاء حساب مطور وهي 25 دولار مرة واحدة فقط، وبعد ذلك، لن تضطر إلى دفع أي رسوم أخرى لمواصلة نشر التطبيقات على Google Play. وتستطيع إنشاء حساب مطور في Google Play من خلال زيارة موقع Google Play Developer Console. وطرق الربح الشائعة من التطبيقات على Google Play هي: عرض الإعلانات في تطبيقك. عندما ينقر المستخدم على إعلان، فستتلقى مبلغًا من المال. السماح للمستخدمين بشراء عناصر داخل التطبيق، مثل مستويات أو أزياء أو وظائف إضافية. السماح للمستخدمين بالاشتراك في تطبيقك مقابل رسوم شهرية أو سنوية. وقد الحديث عن ذلك بشكل مفصل هنا:1 نقطة
-
خطوات تنزيل التطبيق على متجر Google Play:- تطوير التطبيق أول خطوة هي تطوير التطبيق الخاص بك. يجب أن يكون التطبيق مفيدًا ومثيرًا للاهتمام للمستخدمين. إنشاء حساب مطور يجب أن تكون مطورًا مسجلًا في برنامج مطوري تطبيقات Google (Google Play Developer Console). قم بإنشاء حساب مطور ودفع رسوم الاشتراك اللازمة (إذا كانت مطبقة). إعداد التطبيق على المتجر قم بتحميل التطبيق وملئ جميع المعلومات المطلوبة، مثل وصف التطبيق والصور التوضيحية والرموز. اختبار التطبيق قبل تقديم التطبيق للمتجر، تأكد من اختباره بدقة للتحقق من أنه يعمل بشكل صحيح وأنه لا يحتوي على أخطاء كبيرة. تحديد الأسعار والدول المستهدفة قم بتحديد سياسات التسعير والمناطق التي ترغب في توفير التطبيق لها. تقديم التطبيق بعد التحقق من أن التطبيق جاهز للنشر، قدمه على متجر Google Play. سيتم مراجعة التطبيق للتأكد من مطابقته لمتطلبات النشر. الموافقة والنشر بعد مراجعة التطبيق، إذا كان يتوافق مع شروط النشر، سيتم الموافقة عليه ونشره على متجر Google Play. كيفية الربح من التطبيق على متجر Google Play:- المبيعات المباشرة يمكنك تحديد سعر للتطبيق نفسه وبيعه مقابل مبلغ محدد. الإعلانات الداخلية يمكنك جني أرباح من خلال إدراج إعلانات داخل التطبيق. الاشتراكات يمكنك تقديم نماذج اشتراك داخل التطبيق الذي يمنح المستخدمين ميزات إضافية مقابل دفع مبلغ شهري أو سنوي. المشتريات داخل التطبيق (In-App Purchases) يمكنك تقديم بعض المحتوى أو المزايا الإضافية داخل التطبيق وتمكين المستخدمين من شرائها. العروض الترويجية والخصومات يمكنك استخدام عروض ترويجية مؤقتة أو خصومات لجذب المزيد من المستخدمين وتحفيزهم على شراء التطبيق أو المزيد من المحتوى داخله.1 نقطة
-
يتوجه العالم بخطى حثيثة نحو حقبة ما بعد الثورة الرقمية، فقد غيرت هذه الثورة طريقة رؤيتنا للواقع والمستقبل ودفعتنا إلى حدود جديدة في شتى المجالات العلمية والاقتصادية والاجتماعية. لهذا تسعى الفعاليات البشرية بكافة أشكالها إلى التماشي مع هذه الثورة والاستفادة مما تتيحه من تقنيات لتطوير قدراتها الذاتية ومكاسبها في نفس الوقت. لقد أضحت عملية التحول الرقمي والتطوير المستمر لوسائل العمل والاتصال ميزة هذه الحقبة وأساسها، وغدت صناعة البرمجيات وتطوير الأنظمة المعلوماتية المحرك الأساسي لهذه المرحلة جنبًا إلى جنب مع تطور البنية التحتية لتقديم الخدمات الرقمية بالشكل الأكفأ والأسرع. ولهذا السبب أخذت هذه الصناعة بالنضوج اعتمادًا على مفاهيم ومسارات واستراتيجيات مدروسة وواضحة في التخطيط لها وتحليل متطلباتها ثم تصميمها وتنفيذها ضمن حلقة متكاملة من المراحل المتلاحقة لتلبي الغرض من بنائها وإنشائها. ونظرًا لاعتماد الأعمال بكل أشكالها على صناعة البرمجيات وتطوير الأنظمة الرقمية فلن يكون أمام هذه الصناعة هامش للخطأ مهما صَغُر لأن التكلفة على الصعيدين المادي والزمني ستكون باهظة جدًا. تحدثنا في مقال "مدخل إلى تطوير البرمجيات" عن المجال وعملية تطوير البرمجيات عمومًا، وأما الهدف من هذا المقال هو الوقوف على دورة الحياة التي يجب أن تسلكها عملية تطوير البرمجيات حتى يكون المنتج النهائي فعالًا ومحققًا للغاية التي صُمم لأجلها بأدنى هامش للخطأ انطلاقًا من الفكرة وحتى التنفيذ والصيانة. كما سيبحث في أهم الاستراتيجيات المتبعة في إدارة دورة حياة تطوير البرمجيات Software Development Life Cycle واختصارًا SDLC. كما يساعدك هذا المقال في تنمية معارفك ومهاراتك في تحليل الأنظمة إن كنت تفكر فيها كمهنة مستقبلية. من أين تأتي الأفكار؟ فما يخلق البرمجيات هو الحاجة لها، وتظهر الحاجة إلى بناء نظام معلوماتي جديد لإدارة نشاط معين عندما يبدأ هذا النشاط أو العمل بالمعاناة جراء أسباب متنوعة منها: انخفاض الحصة السوقية لمنتجاته. ضعف في الخدمات التي يقدمها لعملائه. ظهور منافسين جدد يستغلون تقنيات أحدث في إدارة أعمالهم. مشاكل في المنظومة القائمة وانخفاض كفاءتها. وقد تكون الحاجة إلى المنظومة الجديدة رؤية مستقبلية لواقع العمل والرغبة في تحسين واقعه: الرغبة في الوصول إلى عملاء جدد أو أسواق جديدة. مواكبة أكثر التقنيات انتشارًا وأحدثها كالحوسبة السحابية ومنصات البيانات الضخمة أو الانتقال إلى تطبيقات الهواتف الذكية. تقديم ابتكارات واختراقات ثورية تبقي الشركات التقنية في حيز المنافسة والهيمنة على الصناعة. لا يمكن لأي كان أن يتخذ قرار تطوير برمجيات المنظومة المعلوماتية القائمة as-is system أو استبدالها بمنظومة جديدة to-be system في الجهة التي تحتاج إلى ذلك، بل يأتي هذا القرار عادة عن أشخاص تقنيين أو غير تقنيين على تماس مباشر مع المنظومة ومع أصحاب القرار. يُدعى هؤلاء بالمعنيين أو أصحاب المصلحة stakeholders في بناء أو تطوير المنظومة وقد يكون هؤلاء: مالكو أنظمة مشرفون على تشغيل أنظمة مبرمجون مصممو ومحللو أنظمة مستشارون أو مزودون للخدمات المعلوماتية يمتلك هؤلاء الخبرة والدراية التي تؤهلهم لمعرفة الإيجابيات والسلبيات في المنظومات القائمة واستشعار الفرص الجديدة التي قد يأتي بها التغيير. دورة إدارة تطوير المنتجات احترف إدارة تطوير المنتجات الرقمية بدءًا من التخطيط وتحليل السوق وحتى إطلاق منتج مميز وناجح اشترك الآن هل نبدأ بكتابة الشيفرة مباشرة؟! عندما نتحدث عن تطوير منظومة برمجية لا نتحدث عن تطبيق بسيط لعرض منتجات أو لإجراء اتصال مع قاعدة بيانات بسيطة، بل منظومة متكاملة تضم عددًا كبيرًا من الحزم البرمجية التي تنفذ مهام مختلفة وتتكامل مع بعضها لتلبي المتطلبات المتوقعة من هذه المنظومة. وفي هذا السياق، لا يمكن بأي شكل من الأشكال أن تعتبر عملية بناء المنظومات البرمجية عملية بديهية سهلة التنفيذ. يتطلب بناء المنظومات المركبة عملًا هائلًا وتخطيطًا دقيقًا للمتطلبات التي ينبغي لهذه المنظومة تنفيذها في المراحل المبكرة قبل اتخاذ القرار النهائي بالمضي في العمل. فهناك قاعدة ذهبية لا بد من إدراكها تنص على أنّ التكلفة ستزداد بشكل أسي مع كل تغيير في متطلبات منظومة برمجية أثناء التنفيذ. والأسوأ من ذلك كله تسليم منظومة غير مكتملة إلى العميل. لم تأتي هذه القاعدة من فراغ، بل من الإخفاقات التي عانتها الكثير من الشركات العالمية، وإليك بعض الأمثلة من الواقع: الشركة العام المنظومة البرمجية الخسارة بالدولار فورد موتورز الأمريكية 2004 شراء منظومة جرى التخلي عنها بعد نشرها مباشرة 400 m$ هيوليت باكارد الأمريكية 2004 منظومة برمجية لتخطيط الموارد كثُرت فيها الأخطاء m160$ HRM Inland البريطانية 2004 أخطاء برمجية في المنظومة قادت إلى تحميل ضرائب إضافية 3.45 m$ Sainsburys البريطانية 2004 منظومة لإدارة سلسلة المزودين فشلت بعد النشر مباشرة 527 m$ وزارة الصحة البريطانية 2006 منظومة متكاملة لإدارة الصحة الوطنية وتسجيل المرضى لم تنجح بعد 4 سنوات من التأخير ولم ينجز أكثر من 80% منها. 20 b$ وزارة العدل البريطانية 2007 التخلي عن منظومة لتسجيل ومراقبة المدانين 245 m$ وكالة الحدود البريطانية 2009 تأخير في تسليم منظومة إدارة الحدود الإلكترونية حتى 2015 1.7 b$ BBC البريطانية 2014 فشل مشروع رقمنة أرشيف الإذاعة نظرًا للتخبط وضعف التخطيط. 153 m$ فالبدء إذًا في كتابة الشيفرة بمجرد أن تستشف فكرة المشروع سيقودك إلى الفشل لا محالة. لهذا لا بدّ من أن يمر مشروعك ضمن سلسلة من المراحل التي ينضج فيها وتتخذ القرارات التحليلية والتصميمة الصحيحة. دورة حياة البرمجيات تمر البرمجيات والأنظمة المعلوماتية عمومًا أثناء تطويرها بأربعة مراحل رئيسة وفي كل مرحلة مجموعة من الخطوات. ينتج عن كل مرحلة مجموعة من المخرجات deliveries تُبنى عليها مراحل لاحقة. هذه المراحل الأربعة هي: التخطيط planning التحليل analysis التصميم design التنفيذ implementation سنتحدث باختصار عن كل مرحلة وسنتكلم بإسهاب عن كل مرحلة في مقالات لاحقة. مرحلة التخطيط لبناء منظومة برمجية لا بد في هذه المرحلة من الإجابة على الأسئلة التالية: لم علينا بناء هذه المنظومة أو هذا البرنامج؟ ما الذي ستقدمه هذه المنظومة إلى الفعالية التي طلبتها أو للجهة التي تنتجها؟ هل يمكننا بناء هذه المنظومة؟ كم يستغرق بناؤها؟ وكما أشرنا سابقًا أن لكل مرحلة مجموعة من الخطوات التي تمر بها حتى تكتمل، وعادة ما تضم مرحلة التخطيط خطوتين أساسيتين هما: تهيئة المشروع Project initiation: يٌقصد بتهيئة المشروع هو التخطيط المبدئي له، وتضم هذه الخطوة مجموعة خطوات فرعية هي: تحديد أهمية المشروع وضرورة بنائه بالنسبة للعميل أو صاحب المصلحة المعني مباشرة بتطويره. دراسة جدوى المشروع Project feasibility بالتشاور المباشر بين محلل الأنظمة والعميل وتكون الدراسة على ثلاثة أصعدة تقنية تحدد إمكانية بناء المنظومة، واقتصادية تحدد ما إن كان ضروريًا بناء المنظومة الجديدة أو تحسين القديمة، وتنظيمية تحدد ما إن كان سيلقى المنتج الجديد ترحيبًا من مستخدميه وهل يتماشى مع أسلوب العمل في الجهة التي طلبت بناءه. دراسة المخاطر، وتختلف طريقة دراسة المخاطر من شركة إلى أخرى إلا أنها تسعى عمومًا إلى تحديد مصدر الخطر واحتمالية وقوعه وأثره المتوقع على المنظومة وطريقة تفادي الخطر أو التخفيف من أثره. إدارة المشروع Project management: وهي عملية التحكم بتطوير المشروع خلال مدة محددة بأقل تكلفة للحصول على المنظومة المطلوبة صحيحة وفعالة. يراقب مديرو المشروع عادة العمل ككل ويتحكمون بكل المهمات ويحددون الأدوار الوظيفية وينسقون بينها وتضم هذه الخطوة الخطوات الفرعية التالية: تحديد عدد الموظفين سواء محللي نظم أو مصممين أو مبرمجين. البحث عن المهارات اللازمة لإنجاز كل مهمة من مهام المنظومة. تحفيز فريق العمل لتحقيق الأهداف. الحد بين النزاعات والخلافات وتقريب وجهات النظر في فريق العمل. اقتراح التقنيات اللازمة لإنجاز العمل. وضع خطة عمل تعتمد على الاستراتيجية المتبعة في إدارة دورة حياة المنظومة. أما مخرجات هذه المرحلة فتأتي في مستندين الأول يضم خطة العمل والثاني مستند دراسة الجدوى والمخاطر ويعرض على الشخص المسؤول أو على لجنة القبول acceptance committee فإما أن يُقبل أو يُرفض أو يؤجل وفقًا للفائدة المضافة موازنة بالمخاطر. مرحلة تحليل المنظومة لا بد أن تتمكن هذه المرحلة من الإجابة عن الأسئلة التالية: ماذا نتوقع من المنظومة؟ ما هو المطلوب منها؟ من سيستخدم المنظومة الجديدة أو المطوّرة؟ أين ومتى ستُستخدم المنظومة الجديدة؟ تضم هذه المرحلة خطوتين رئيسيتين: تحديد متطلبات المنظومة بناء نماذج تحليلية للمنظومة تحديد متطلبات المنظومة define requirements وهي أكثر خطوات هذه المرحلة (إن لم يكن دورة التطوير بأكملها) أهمية وحساسية. إذ يمكن أن نناقش في هذه المرحلة ماهو المطلوب من المنظومة البرمجية وفقًا لرؤية المعنيين بتطويرها على مختلف المستويات والمرجعيات. فالنقاش في هذه المرحلة ووضع التصورات والنماذج سيكون متاحًا إلى أقصى الحدود دون أي آثار سلبية موازنة بالتغييرات التي يُضطر فريق العمل إلى إجرائها في مرحلة التنفيذ، إذ سيرفع ذلك من نسبة فشل المشروع إلى أكثر من 50%. وتتميز هذه المرحلة بأنها تدريجية أي يجري تطوير نماذج عن متطلبات المنظومة تدريجيًا وليس دفعة واحدة كما تتميز بأنها تكرارية أي يكون تحسين النماذج بالتكرار. ما هو المتطلب؟ المتطلب هو تصريح عما يُراد من المنظومة فعله أو تصريح عن الخصائص التي تتمتع بها المنظومة التي نريد بناءها. هنالك نوعان من المتطلبات: متطلبات وظيفية functional ومتطلبات غير وظيفية nonfunctional. أما المتطلبات الوظيفية functional، فتضم التصريحات التي تحدد ما على المنظومة فعله أو تحدد إمكانياتها. وكمثال على المتطلب الوظيفي هو أن تسمح المنظومة للمستخدم مثلًا بتسجيل دخوله إليها فهذا المتطلب يتعلق مباشرة بطريقة عمل المنظومة وبالتالي هو متطلب وظيفي. وأما المتطلبات غير الوظيفية nonfunctional، فتضم تصريحات عن ميزات هذه المنظومة التي لا تتعلق بطريقة عملها. وكمثال عليها أن تعمل المنظومة مثلًا على الحواسب وأن تعمل أيضًا على الهواتف الذكية. كما تجد أحيانًا متطلبات إضافية مثل: متطلبات عمل: وهو تصريح عما يحتاجه العميل. متطلبات مستخدمين: وتضم تصريحات عن طريق استخدام المنظومة. متطلبات منظومة: وتضم تصريحات عن أسلوب وطريقة بناء المنظومة. ينتج عن مرحلة تحديد المتطلبات مستند يُدعى "تصريح تحديد المتطلبات requirements definition statement"ويضم المتطلبات الوظيفية وغير الوظيفية على شكل قائمة مفصّلة قد تُعطى فيها الأولوية لمتطلبات على أخرى إضافة إلى بعض المعلومات الضرورية للخطوات القادمة، كما يحدد هذا المستند ما يُدعى بنطاق عمل أو إطار عمل المنظومة system domain الذي ينبغي العمل في حدوده دون رفع أو تخفيض المتطلبات. بناء نماذج تحليلية للمنظومة يحاول فريق العمل خلال هذه المرحلة بناء نماذج models عن المتطلبات الوظيفية. وتوصِّف هذه المتطلبات مداخل ومخارج كل متطلب وطريقة تنفيذه. وغالبًا ما تُستخدم نماذج حالات الاستخدام use-case model التي توصّف كل وظيفة من وظائف المنظومة ومن سيشارك في إنجاز هذه الوظيفة سواء وظائف أخرى أو مستخدم خارجي، كما تُستخدم نماذج النشاط Activity models لتوصيف تسلسل تنفيذ العمليات التي تحقق وظيفة محددة وطريقة التفاعل المتبادل بين الوظائف المختلفة في المنظومة. فلو كان لدينا مثلًا منظومة برمجية لإدارة صراف آلي ATM ستكون إحدى حالات الاستخدام هو "سحب نقود" وسترتبط حالة الاستخدام هذه بحالة استخدام أخرى "التحقق من هوية المستخدم" ولا بد من وجود مشارك خارجي وهو "مستخدم الصراف". إن ما يمثّل هذه الترابطات هو مخطط حالات الاستخدام أما بالنسبة لمخطط النشاط فسيوُصف على الشكل التالي مثلًا: الصراف: يعرض رسالة ترحيب. المستخدم: يدخل البطاقة. الصراف: يحلل البطاقة ويعرض للمستخدم قائمة الخيارات. المستخدم: يضغط زر "سحب النقود". الصراف: يعرض قائمة بالمبالغ التي يمكن سحبها. المستخدم: يختار المبلغ المطلوب. الصراف: يعدّ النقود ويخرجها. تمثل هذه النماذج على شكل ملف يُدعى توصيف حالات الاستخدام use-case description أو عن طريق مخططات UML -لغة النمذجة الموحدة unified mark language- تُعرف بمخططات حالات الاستخدام ومخططات النشاط. تُبنى بعد تكوين النماذج الوظيفية أيضًا النماذج البنوية التي تستفيد من نماذج حالات الاستخدام وملفات توصيفها في توصيف المتطلبات على شكل أصناف لها خصائص (سمات attributes) وطرق methods وذلك إن كانت استراتيجية التحليل هي استراتيجية كائنية التوجّه object oriented strategy وهي الاستراتيجية الأكثر شيوعًا. تمثّل هذه الأصناف ضمن مخططات تُدعى مخططات الأصناف ويُستفاد منها لاحقًا في عملية برمجة المتطلب الوظيفي. وأخيرًا تُبنى النماذج السلوكية behavioral models وهي نماذج تعبّر عما يجري داخليًا خلف الستار حتى تؤدي المنظومة الوظائف المطلوبة منها ظاهريًا أي كما يراها المستخدم الخارجي. تتشكل هذه النماذج انطلاقًا من النماذج البنيوية والوظيفية لأنها تعبير عن التفاعل بين النماذج البنيوية (الكائنات التي تشكل المنظومة). وتُمثّل النماذج السلوكية باستخدام مخططات UML منها مخطط التتابع sequence diagram التي تمثل تتابع الرسائل بين الكائنات، ومخططات الاتصال communication diagram التي تمثل الطرق التي تسلكها تلك الرسائل ومخططات التوقيت timing diagrams. ينتج عن هذه المرحلة ورقة تُدعى "اقتراح المنظومة system proposal" وتضم تفاصيل عن وظائف المنظومة الجديدة وطريقة إنجازها مُدعّمًا بالنماذج والمخططات التي بنيت في هذه المرحلة وتُرفع إلى لجنة القبول لاتخاذ القرار بالمضي أو إعادة تحليل المتطلبات. مرحلة تصميم المنظومة البرمجية وتجيب هذه المرحلة عن سؤال مهم وهو كيف سنبني المنظومة؟ إذ تُقرر في هذه المرحلة نوعية العتاد الصلب التي ستُستخدم والبرمجيات اللازمة والبنية التحتية لشبكات الاتصالات وواجهات المستخدم وقواعد البيانات ونماذج إرسال البيانات والتقارير. تضم هذه المرحلة الخطوات التالية: وضع استراتيجية التصميم: وفيها يجيب فريق العمل بالتعاون مع الجهة المعنية عن الأسئلة التالية: هل ستُطوّر المنظومة محليًا في الجهة التي تحتاج المنظومة اعتمادًا على كوادرها الخاصة؟ هل ستطور المشروع شركة مختصة أخرى؟ هل ستشتري الشركة حزم برمجية جاهزة تحقق متطلبات مرحلة التحليل؟ تطوير المعمارية الأساسية للمنظومة: بما في ذلك العتاد الصلب والبرمجي وواجهة المستخدم والبنية التحتية لشبكة الاتصال وهل سيتم البناء على البنية التحتية السابقة أم تحتاج المنظومة الجديدة إلى بنية تحتية جديدة كليًا. تطوير مواصفات لقواعد البيانات والملفات: أي تحديد طبيعة البيانات التي تُخزن وحجمها وأين وكيف ستُخزن. تصميم البرمجيات التي ستُبنى: أي ما هي البرامج التي ينبغي للمبرمجين العمل عليها وما وظيفة كل برنامج وما هي علاقته بغيره. ينتج عن هذه المرحلة مجموعة المخرجات التالية: مستندات تصميم المعمارية. مستندات تصميم واجهة المستخدم. مستندات مواصفات قواعد وملفات البيانات. مستند تصميم البرامج. تستخدم هذه المستندات لاحقًا في توجيه مرحلة إنجاز المنظومة. مرحلة إنجاز المنظومة وهي المرحلة الأخيرة من دورة تطوير البرمجيات، وتحظى هذه المرحلة بكامل الانتباه لأنها تعد المرحلة الأطول والأكثر تكلفة. تضم هذه المرحلة الخطوات التالية: بناء المنظومة اختبار المنظومة توثيق المنظومة تركيب المنظومة إدارة التغيير التدريب على استخدام المنظومة الصيانة ودعم المنظومة التقييم الراجع للمشروع بناء المنظومة ويقصد فيها برمجة كل وظيفة من وظائف المنظومة والربط بين هذه البرمجيات وتعتمد بشكل كامل على مخرجات مرحلتي التحليل والتصميم. تُعد هذه المرحلة بأنها الأقل خطرًا على فشل المنظومة ولا يأتي فشل المنظومة نتيجة لضعف البرمجة بل لضعف مخرجات عمليتي التحليل والتصميم. تجري في هذه المرحلة أيضًا عملية توثيق الإجرائيات بدقة للاستفادة منها في خطوات الاختبار والصيانة. اختبار المنظومة تهدف هذه الخطوة إلى كشف أكبر قدر ممكن من العيوب التي قد تتسبب في إخفاق البرنامج، وعادة ماتكون الخطوة الأطول والأكثر تركيزًا في هذه المرحلة لأنه من الصعب إنشاء منظومة خالية تمامًا من العيوب، كما أن عملية البحث والاستقصاء عن جميع العيوب أمر مرهق زمنيًا وماديًا. لتلك الأسباب يجري اختبار المنظومة على مبدأ ما الذي تقدمه فعليًا موازنةً مع ما يتوجب عليها فعله. يختبر فريق متخصص المنظومة بواحدة أو بجميع الطرق التالية: اختبارات الوحدات unit tests: ويجري على دالة أو صنف أو جزء محدد من وحدة برمجية للتأكد من أن الدخل الصحيح يعطي الخرج المطلوب. اختبارات التكامل integration tests: يختبر التفاعل المتبادل بين مجموعة محددة من الأصناف لإنجاز وظيفة محددة. اختبارت المنظومة system tests: يختبر تفاعل جميع الأصناف مع بعضها لإعطاء وظيفة متكاملة للمنظومة دون أخطاء، وهو مشابه لاختبار التكامل لكن على صعيد أوسع. اختبارات القبول acceptance tests: وينفذها المستخدمون النهائيون للمنظومة تحت إشراف عضو أو أكثر من فريق العمل وذلك لتقييم قبول المستخدم لهذه المنظومة الجديدة. توثيق المنظومة وهي عملية ممتدة عبر جميع المراحل لكنها تُنظم في هذه الخطوة وتضم توثيق عن المنظومة بما يساعد المبرمجين والمحللين في بناء وصيانة المنظومة وتوثيق المستخدم الذي يساعده على استثمار المنظومة. وقد يكون التوثيق مرجعيًا لمساعدة المستخدم على إنجاز مهمة محددة أو إجرائيًا لوصف إنجاز خطوة ما أو مواد تعليمية. تركيب المنظومة وتتضمن هذه الخطوة تثبيت العتاد الصلب والبرمجيات اللازمة وفقًا لمعايير المعيارية المقترحة. إدارة التغيير لا يجري الانتقال إلى استخدام المنظومة الجديدة مباشرة بل على مراحل لمساعدة المستخدمين النهائيين على التأقلم معها بأقل توتر ممكن. ولأن لكل تغيير مقاومة لا بد أن يتشارك محللو المنظومة وأصحاب القرار ومديرو المشروع في إدارة مرحلة التحوّل وتوجيه المستخدمين وتحفيزهم على تبني المنظومة الجديدة. التدريب على استخدام المنظومة لا بد في هذه المرحلة من تقديم المهارات اللازمة لاستثمار النظام دون الافتراض المسبق بأن المنظومة سهلة التعلّم. كما ينبغي التركيز في هذه المرحلة على مساعدة المتدرب على تنفيذ المهام الموكلة إليه فقط دون الغوص في تفاصيل وميزات المنظومة الجديدة، فهنا تأتي أهمية وجود توثيق شامل. الصيانة ودعم المنظومة وهي عملية تحسين المنتج البرمجي كي يلبي دائمًا متطلبات العمل، وقد تكون خطوة الصيانة ذات تكلفة عالية. يُكلف بعملية الصيانة عادة محللو الأنظمة والمبرمجون المبتدئون. ويأتي دعم المنظومة عبر خيارات عدة منها: التدريب عند الطلب أو الحاجة. الدعم المباشر عبر الإنترنت: من خلال التوثيق والأسئلة أكثر شيوعًا وحتى المحادثة المباشرة. مكاتب الدعم: وذلك لاستشارة الخبراء مباشرة حول مشاكل محددة بناء على مواعيد مسبقة. التقييم الراجع للمشروع أي تقييم نجاح المشروع أو فشله والطرق الكفيلة بتحسينه وتطويره وأخذ العبر منه. وتنفذ هذه الخطوة عادة وفق مسارين: مراجعة منظومة: والهدف هو موازنة التكلفة والفائدة الحقيقية موازنة مع التكلفة والفوائد المقدرة في مرحلتي التخطيط والتحليل. مراجعة فريق العمل: إذ يقيِّم كل فرد من أفراد فريق العمل أخطاءه ونجاحاته في إنجاز المهام الموكلة إليه. يمكن بعد ذلك لمدير المشروع أن يجمع التقييمات ويضيف إليها بعض التوضيحات والشروحات ليخرج بملف يُدعى "دروس تعلمناها lesson learned" والتي تلعب دورًا مهمًا في تدريب وتعليم الأعضاء الجدد وفي تفادي أية أخطاء مماثلة في مشاريع مستقبلية. خاتمة تعرفنا في هذا المقال على الأساسيات المتبعة في التخطيط لتطوير البرمجيات أو المنظومات المعلوماتية عمومًا ورأينا أهمية التخطيط التدقيق والتحليل لمتطلبات البرمجيات للوصول إلى منتج قادر على الصمود والمنافسة. كما تعرفنا على المراحل الأساسية الأربعة لعملية تطوير المنتجات البرمجية وهي مراحل التخطيط والتحليل والتصميم والتنفيذ، وتعرفنا على مجموعة الأعمال التي ينبغي القيام بها في كل مرحلة والمخرجات التي تنتج عن كل منها وصولًا إلى المنتج النهائي وصيانته ودعمه. اقرأ أيضًا كيف تتجنب كارثة الاستعانة بفريق خارجي في تطوير البرمجيات دليل المبتدئين لمنهجية أجايل Agile الأخطاء السبع القاتلة لأيّ مشروع برمجيات1 نقطة
-
1 نقطة
-
تكلفة ال25 دولار هي تكلفة إنشاء حساب مطور على google play و لا تعتبر كضمان لتحقيق الأرباح، و هي وضعت بالأساس لضمان جدية صاحب التطبيق، و هناك نسبة لا بأس بها من التطبيقات التي لا تعتبر تطبيقات ربحية مثل التطبيقات الخاصة بعرض الخدمات لشركات معينة و التطبيقات المخصصة للأطفال أو التطبيقات التعلمية، فشركات البرمجة و المطورين يدفعون الـ 25 دولار لكي يتمكنوا من رفع التطبيق الخاص بهم على هذا السوق و ليس بهدف الربح، و طرق الربح من التطبيقات موضوع آخر و له طرق و أساليب أخرى و يعتمد بشكل أساسي على نوع الخدمة التي يقدمها التطبيق و عدد المستخدمين .1 نقطة