عشان اكون مبرمج ايه اللي المفروض ادرسه بالظبط ؟
1ـ Introduction To Computer Science And Programming : هتديك فكرة مبداية عن مفاهيم كتير هتحتاجها في مجالك خصوصا لو انت شخص جديد في المجال دا بحيث انك ما تدخلش على دراسة امور تحس انها معقدة فيما بعد .
2ـ Data Structure : الخطوة دي مهمة جدا لكن محتاج يكون عندك علم مسبق ببعض المفاهيم زي الـ Arrays و الـ LinkedLists و Stack و Queue وغيرهم فلازم تكون عديت على الخطوة السابقة لانها هتوضح ليك المفاهيم دي عشان تبقى انت فاهمها قبل ما الـ Data Structure تشرحلك طريقة عملها.
3ـ Algorithms : هتفهم هنا ازاي تحل المشاكل اللي بتقابلك في شكل خطوات وازاي تصمم طريقة حل لكل مشكلة بطريقة منظمة وواضحة.
4ـ Software Engineering : هتعلمك ازاي تستخدم معارفك وخبراتك في انك تخرج بتطبيق ذات كفاءة عالية .
5ـ Computer Architecture : هنا ممكن يختلف البعض بين ان المبرمج مفروض يدرس معمارية الحاسب او لا بس يفضل لو تاخد فكرة عنها تبقى فاهم الجهاز اللي بتتعامل معاه دا بيشتغل ازاي .
زي ما هو واضح ان في كلام كتير اهم من انك تشغل نفسك هو انا اتعلم Java ولا C# احسن ؟ باختصار انت المفروض تتعلم امور اهم من لغات البرمجة بعد كدا هتلاقي انك عارف تطبق اللي اتعلمته دا بأي لغة برمجة على سبيل المثال لو انت فاهم يعني ايه Multidimensional Arrays مش هتفرق معاك انك تكتبها في Java كدا
int[][] Array = new int[5][6];
او في C# كدا :
int[,] Array = new int[5,6];
لأن انت عارف مفهوم الصفوفة متعددة الابعاد ومهما اختلفت طريقة كتابة الكود ففي النهاية كله بيطبق نفس المفهوم .
الاهم انك تكون فاهم طريقة تمثيل الـ Array دي في الـ Memory وامتى تستخدمها وامتى تلجأ لـ Struct تاني .. على سبيل المثال لو انا بعمل تطبيق والمفروض يكون عندي اوبشن زي Undo و Redo لاخر 10 خطوات مثلا ..
لو انت شخص فاهم ودرست Data Structure هتعمل Implement لمفهوم الـ Stack باستخدام Array وتخزن فيها الـ operation اللي بتعملها وهتبقى عارف ان الـ stack هو المناسب هنا لانك فاهم ان الـ Stack بيتبع نظام Last In First Out بالتالي انا مجرد ما اعمل Undo هيتم التراجع عن اخر عملية تم اضافتها للـ stack .
لكن لو انت شخص مش فاهم Data Structure مش هتكون فاهم يعني ايه Array ولا فاهم يعني ايه Stack هتبقى حافظ اكواد بس وهتستخدمها بنفس الطريقة اللي انت اتعلمتها ومش هتكون عارف امتى استخدم Array وليه وامتى استخدم مثلا LinkedList وليه وازاي كل Struct من دول بيتعامل مع الـ ram
فالكلام دا اللي بيفرق شخص فاهم هو بيكتب ايه وليه بالظبط وشخص تاني حافظ شوية اكواد وبيكتبهم وخلاص .
بعد الكلام دا كله لو حاولنا نجاوب على السؤال بتاع ايه افضل لغة برمجة هنلاقي ان السؤال فقد قيمته ومعتش هتكون مهتم تعرف مين افضل لغة برمجة لان الافضلية هنا اصبحت للمبرمج نفسه مش للغة البرمجة ولغة البرمجة اصبحت مجرد اداة بتستخدمها عشان تطبق الكلام اللي انت اتعلمته وهتلاقي نفسك قادر انك تستخدم اي لغة برمجة بسهولة كل اللي هتحتاجه انك ترجع للـ Guide الخاص باللغة تشوف الـ Syntax الخاص باللغة وترجع للـ Reference عشان تعرف الـ Classes و الـ Methods الموجودين في اللغة وبكدا اصبحت قادر انك تكتب تطبيق باللغة اللي انت عاوزها .
وبكدا السؤال الاصح هو مين هو المبرمج الافضل ؟ بالتأكيد
هو المبرمج اللي فاهم مش مجرد شخص حافظ شوية اكواد.
نتمني دعمكم بلايك وشير للصفحة للاستمرار
السؤال الأسطوري : ايه افضل لغة برمجة ؟ موضوع طويل بس مهم جدا جدا
من يوم ما دخلت المجال دا وانا بشوف السؤال دا بيتسأل وضيعت كتير من وقتي زمان ابحث عن اجابة للسؤال دا وكنت دايما اقابل معارك بين انصار الـ Java وانصار الـ C# وبين الـ Php و ASP .
خلينا نتفق ان البرمجة مش لغة .. البرمجة عبارة عن Concepts بيتم عمل Implementation للـ Concepts دي باستخادم Tools اللي هي لغات البرمجة ..
يعني البرمجة دي عبارة عن مجموعة من المفاهيم ولغة البرمجة عبارة ان اداة بتطبق المفاهيم دي .. فلو انت شخص ملم بالمفاهيم دي هتقدر تطبقها من خلال اي لغة برمجة اخرى حتى لو انت ما اتعلمتهاش .. يعني انا كتبت اول تطبيق ليا بلغة C# من غير ما ادرس السي شارب اساسا .
معنى انك تكون مبرمج مش انك تروح تتعلم لغة برمجة وتفتكر انك كدا بقيت مؤهل للعمل كمبرمج .. الحقيقة ان وفقا لتقرير قرأته من فترة فالمبرمجين العرب معظمهم غير مؤهل للعمل من الاساس .
الفكرة ان ما ينفعش انك تتعلم الكتابة بدون ما تدرس قواعدة اللغة .. معظم الناس بتعرف حروف وكلمات اللغة الانجليزية مع ذلك لو طلبت منه كتابة Paragraph مش هيعرف ولو حاول هيكتبه كله اخطاء ودا لانه ما درسش قواعد اللغة .
نفس الكلام ينطبق على البرمجة .. الشخص اللي بيروح يدرس الـ Language Structure و الـ Basic Syntax للغة برمجة ما دا شخص درس ادوات لكنه لم يدرس كيفية استخدامها بالتالي سيجد نفسه غير قادر على استخدام هذه الادوات لصناعة تطبيق كامل بشكل صحيح ..
ولو حتى انتج تطبيق سيكون التطبيق يحتوي على اخطاء كثيرة ويستهلك الذاكرة بشكل كبير وبطئ في استخلاص النتائج اضافة الى انه سيتغرق الكثير من الوقت والجهد اثناء عمله في برمجة التطبيق وسيواجه صعوبة في انهاء التطبيق وبعد الانتهاء منه سيكون غير قادر على تطويره وصيانته .
طيب ايه الاسباب اللي بتأدي للكلام السابق دا ؟
السبب الرئيسي هو الاعتقاد السائد بأن تعلم البرمجة يبدأ وينتهي بكتابة اكواد التطبيق لكن في الواقع كتابة الكود عبارة عن خطوة من ضمن عدة خطوات تعتبر الأهم في صناعة التطبيق .
الخطوات دي بتندرج تحت مفهوم هندسة البرمجيات وبتكون كالتالي :
1- تحديد الـ Requirements : في الخطوة دي انت بتبدأ تحدد الطلبات والمواصفات اللي العميل محتاجها في التطبيق دا وهل هي تتناسب مع المفاهيم البرمجية ام لا .
2- الـ Analyzing : تاني مرحلة بعد تحديد المتطلبات هي التحليل وبتقوم فيها بتحليل متطلبات العميل وتحويلها الى افكار قابلة للتنفيذ وافتراض بعض السيناريوهات اللي هتتم داخل التطبيق .
3- الـ Design : الخطوة دي مبنية على الخطوة السابقة الخاصة بالتحليل بحيث انك بتقوم بتصميم التطبيق الخاص بك والمقصود هنا ليس التصميم الخاص بالواجهات لكن تصميم خطوات عمل البرنامج للوصول الى النتيجة المطلوبة بشكل واضح وفي الخطوة دي بيتم مراعاة عاملين
- الـ Time Factor : وهو الوقت المستغرق للوصول للنتيجة ويعتمد على عدد الخطوات المطلوبة للوصول للنتيجة .
- الـ Space Factor : وهو المساحة اللي هيستغلها التطبيق من الذاكرة وكل ما كانت اقل كل ما كان افضل لان اكيد التطبيق اللي هيستغل مساحة كبيرة من الذاكرة اكثر من اللازم بيكون تطبيق سئ .
بناء على عامل الوقت ومساحة الذاكرة بيتم تحديد التصميم الافضل للتطبيق في حالة وجود اكثر من تصميم لان ممكن انا اقدر اوصل للنتيجة المطلوب بأكثر من طريقة لكن الطريقة التي تحقق الوصول للنتيحة في اقل وقت وبأقل مساحة ذاكرة مستهلكة هي الافضل .
4- الـ Implementation : وهي خطوة بناء البرنامج من خلال تحويل التصميم اللي تم الوصول اليه في الخطوة السابقة الى كود .
5- الـ Testing : مرحلة الاختبار وفيها بتختبر التطبيق بتاعك وهل هو بيحقق الـ Requirements اللي انت حددتها في الخطوة رقم 1 ولا لأ .
6- الـ Development & Maintenance : وهي القدرة على اصلاح اخطاء التطبيق في اي وقت او اضافة مميزات جديدة .. هيساعدك في الخطوة دي طبعا الـ Design اللي هيوضحلك خط سير التطبيق بتاعك بحيث تقدر تحدد الخطأ ممكن يكون فين بالظبط وكمان حاجة اسمها Documentation
الـ Documentation عبارة عن كتابة وصف مختصر للكود بتاعك عن طريق استخدام الـ Comments ودي هتلاقيها دايما موجودة في الكلاسات الجاهزة او البرامج الـ Open Source عبارة عن كتابة لوظيفة الكلاس والـ Methods
وطريقة عمله واي ملاحظات مهمة الخ.
كتبه | علاء عز
1ـ Introduction To Computer Science And Programming : هتديك فكرة مبداية عن مفاهيم كتير هتحتاجها في مجالك خصوصا لو انت شخص جديد في المجال دا بحيث انك ما تدخلش على دراسة امور تحس انها معقدة فيما بعد .
2ـ Data Structure : الخطوة دي مهمة جدا لكن محتاج يكون عندك علم مسبق ببعض المفاهيم زي الـ Arrays و الـ LinkedLists و Stack و Queue وغيرهم فلازم تكون عديت على الخطوة السابقة لانها هتوضح ليك المفاهيم دي عشان تبقى انت فاهمها قبل ما الـ Data Structure تشرحلك طريقة عملها.
3ـ Algorithms : هتفهم هنا ازاي تحل المشاكل اللي بتقابلك في شكل خطوات وازاي تصمم طريقة حل لكل مشكلة بطريقة منظمة وواضحة.
4ـ Software Engineering : هتعلمك ازاي تستخدم معارفك وخبراتك في انك تخرج بتطبيق ذات كفاءة عالية .
5ـ Computer Architecture : هنا ممكن يختلف البعض بين ان المبرمج مفروض يدرس معمارية الحاسب او لا بس يفضل لو تاخد فكرة عنها تبقى فاهم الجهاز اللي بتتعامل معاه دا بيشتغل ازاي .
زي ما هو واضح ان في كلام كتير اهم من انك تشغل نفسك هو انا اتعلم Java ولا C# احسن ؟ باختصار انت المفروض تتعلم امور اهم من لغات البرمجة بعد كدا هتلاقي انك عارف تطبق اللي اتعلمته دا بأي لغة برمجة على سبيل المثال لو انت فاهم يعني ايه Multidimensional Arrays مش هتفرق معاك انك تكتبها في Java كدا
int[][] Array = new int[5][6];
او في C# كدا :
int[,] Array = new int[5,6];
لأن انت عارف مفهوم الصفوفة متعددة الابعاد ومهما اختلفت طريقة كتابة الكود ففي النهاية كله بيطبق نفس المفهوم .
الاهم انك تكون فاهم طريقة تمثيل الـ Array دي في الـ Memory وامتى تستخدمها وامتى تلجأ لـ Struct تاني .. على سبيل المثال لو انا بعمل تطبيق والمفروض يكون عندي اوبشن زي Undo و Redo لاخر 10 خطوات مثلا ..
لو انت شخص فاهم ودرست Data Structure هتعمل Implement لمفهوم الـ Stack باستخدام Array وتخزن فيها الـ operation اللي بتعملها وهتبقى عارف ان الـ stack هو المناسب هنا لانك فاهم ان الـ Stack بيتبع نظام Last In First Out بالتالي انا مجرد ما اعمل Undo هيتم التراجع عن اخر عملية تم اضافتها للـ stack .
لكن لو انت شخص مش فاهم Data Structure مش هتكون فاهم يعني ايه Array ولا فاهم يعني ايه Stack هتبقى حافظ اكواد بس وهتستخدمها بنفس الطريقة اللي انت اتعلمتها ومش هتكون عارف امتى استخدم Array وليه وامتى استخدم مثلا LinkedList وليه وازاي كل Struct من دول بيتعامل مع الـ ram
فالكلام دا اللي بيفرق شخص فاهم هو بيكتب ايه وليه بالظبط وشخص تاني حافظ شوية اكواد وبيكتبهم وخلاص .
بعد الكلام دا كله لو حاولنا نجاوب على السؤال بتاع ايه افضل لغة برمجة هنلاقي ان السؤال فقد قيمته ومعتش هتكون مهتم تعرف مين افضل لغة برمجة لان الافضلية هنا اصبحت للمبرمج نفسه مش للغة البرمجة ولغة البرمجة اصبحت مجرد اداة بتستخدمها عشان تطبق الكلام اللي انت اتعلمته وهتلاقي نفسك قادر انك تستخدم اي لغة برمجة بسهولة كل اللي هتحتاجه انك ترجع للـ Guide الخاص باللغة تشوف الـ Syntax الخاص باللغة وترجع للـ Reference عشان تعرف الـ Classes و الـ Methods الموجودين في اللغة وبكدا اصبحت قادر انك تكتب تطبيق باللغة اللي انت عاوزها .
وبكدا السؤال الاصح هو مين هو المبرمج الافضل ؟ بالتأكيد
هو المبرمج اللي فاهم مش مجرد شخص حافظ شوية اكواد.
نتمني دعمكم بلايك وشير للصفحة للاستمرار
السؤال الأسطوري : ايه افضل لغة برمجة ؟ موضوع طويل بس مهم جدا جدا
من يوم ما دخلت المجال دا وانا بشوف السؤال دا بيتسأل وضيعت كتير من وقتي زمان ابحث عن اجابة للسؤال دا وكنت دايما اقابل معارك بين انصار الـ Java وانصار الـ C# وبين الـ Php و ASP .
خلينا نتفق ان البرمجة مش لغة .. البرمجة عبارة عن Concepts بيتم عمل Implementation للـ Concepts دي باستخادم Tools اللي هي لغات البرمجة ..
يعني البرمجة دي عبارة عن مجموعة من المفاهيم ولغة البرمجة عبارة ان اداة بتطبق المفاهيم دي .. فلو انت شخص ملم بالمفاهيم دي هتقدر تطبقها من خلال اي لغة برمجة اخرى حتى لو انت ما اتعلمتهاش .. يعني انا كتبت اول تطبيق ليا بلغة C# من غير ما ادرس السي شارب اساسا .
معنى انك تكون مبرمج مش انك تروح تتعلم لغة برمجة وتفتكر انك كدا بقيت مؤهل للعمل كمبرمج .. الحقيقة ان وفقا لتقرير قرأته من فترة فالمبرمجين العرب معظمهم غير مؤهل للعمل من الاساس .
الفكرة ان ما ينفعش انك تتعلم الكتابة بدون ما تدرس قواعدة اللغة .. معظم الناس بتعرف حروف وكلمات اللغة الانجليزية مع ذلك لو طلبت منه كتابة Paragraph مش هيعرف ولو حاول هيكتبه كله اخطاء ودا لانه ما درسش قواعد اللغة .
نفس الكلام ينطبق على البرمجة .. الشخص اللي بيروح يدرس الـ Language Structure و الـ Basic Syntax للغة برمجة ما دا شخص درس ادوات لكنه لم يدرس كيفية استخدامها بالتالي سيجد نفسه غير قادر على استخدام هذه الادوات لصناعة تطبيق كامل بشكل صحيح ..
ولو حتى انتج تطبيق سيكون التطبيق يحتوي على اخطاء كثيرة ويستهلك الذاكرة بشكل كبير وبطئ في استخلاص النتائج اضافة الى انه سيتغرق الكثير من الوقت والجهد اثناء عمله في برمجة التطبيق وسيواجه صعوبة في انهاء التطبيق وبعد الانتهاء منه سيكون غير قادر على تطويره وصيانته .
طيب ايه الاسباب اللي بتأدي للكلام السابق دا ؟
السبب الرئيسي هو الاعتقاد السائد بأن تعلم البرمجة يبدأ وينتهي بكتابة اكواد التطبيق لكن في الواقع كتابة الكود عبارة عن خطوة من ضمن عدة خطوات تعتبر الأهم في صناعة التطبيق .
الخطوات دي بتندرج تحت مفهوم هندسة البرمجيات وبتكون كالتالي :
1- تحديد الـ Requirements : في الخطوة دي انت بتبدأ تحدد الطلبات والمواصفات اللي العميل محتاجها في التطبيق دا وهل هي تتناسب مع المفاهيم البرمجية ام لا .
2- الـ Analyzing : تاني مرحلة بعد تحديد المتطلبات هي التحليل وبتقوم فيها بتحليل متطلبات العميل وتحويلها الى افكار قابلة للتنفيذ وافتراض بعض السيناريوهات اللي هتتم داخل التطبيق .
3- الـ Design : الخطوة دي مبنية على الخطوة السابقة الخاصة بالتحليل بحيث انك بتقوم بتصميم التطبيق الخاص بك والمقصود هنا ليس التصميم الخاص بالواجهات لكن تصميم خطوات عمل البرنامج للوصول الى النتيجة المطلوبة بشكل واضح وفي الخطوة دي بيتم مراعاة عاملين
- الـ Time Factor : وهو الوقت المستغرق للوصول للنتيجة ويعتمد على عدد الخطوات المطلوبة للوصول للنتيجة .
- الـ Space Factor : وهو المساحة اللي هيستغلها التطبيق من الذاكرة وكل ما كانت اقل كل ما كان افضل لان اكيد التطبيق اللي هيستغل مساحة كبيرة من الذاكرة اكثر من اللازم بيكون تطبيق سئ .
بناء على عامل الوقت ومساحة الذاكرة بيتم تحديد التصميم الافضل للتطبيق في حالة وجود اكثر من تصميم لان ممكن انا اقدر اوصل للنتيجة المطلوب بأكثر من طريقة لكن الطريقة التي تحقق الوصول للنتيحة في اقل وقت وبأقل مساحة ذاكرة مستهلكة هي الافضل .
4- الـ Implementation : وهي خطوة بناء البرنامج من خلال تحويل التصميم اللي تم الوصول اليه في الخطوة السابقة الى كود .
5- الـ Testing : مرحلة الاختبار وفيها بتختبر التطبيق بتاعك وهل هو بيحقق الـ Requirements اللي انت حددتها في الخطوة رقم 1 ولا لأ .
6- الـ Development & Maintenance : وهي القدرة على اصلاح اخطاء التطبيق في اي وقت او اضافة مميزات جديدة .. هيساعدك في الخطوة دي طبعا الـ Design اللي هيوضحلك خط سير التطبيق بتاعك بحيث تقدر تحدد الخطأ ممكن يكون فين بالظبط وكمان حاجة اسمها Documentation
الـ Documentation عبارة عن كتابة وصف مختصر للكود بتاعك عن طريق استخدام الـ Comments ودي هتلاقيها دايما موجودة في الكلاسات الجاهزة او البرامج الـ Open Source عبارة عن كتابة لوظيفة الكلاس والـ Methods
وطريقة عمله واي ملاحظات مهمة الخ.
كتبه | علاء عز