الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الإتقان في البرمجة

بدأه بن العيد في 19 يناير 2009 · 11 رد · 6,310 مشاهدة · في المقالات العلمية و التقنية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــه

في هذا المقال حاولت الحديث عن بعض النقاط الهامة في البرمجة و التي تزيد من براعة المطور في كتابة البرمجيات.

في إنتظار أي تعليق أو تصويب

post-91400-1232380878_thumb.png

Perfection_In_programming.zip

5
#2

السلام عليكم أخي بن العيد :)

الحقيقة رائع و 10/10 :wink:

أجدك من القلائل الذين يثرون المكتبة الحاسوبية العربية بمقالات رائعة كهذا,

في الفقرة الثالثة من المقال "اجعل البرنامج يعمل بسرعة" :

اقتباس
هذا العامل يبرز و بشكل جلي في البرامج الضخمة و المتعلقة بمعالجة الصور و الشبكات. حل هذا الإشكال يسير إلى حد ما و يتمثل في تقليص المساحات المحجوزة من الذاكرة إلى اقصى حد ممكن و التي لم يتم إفراغها ما إن يتم الفراغ منها. هذا الإشكال تم حله في بيئة الـ DotNet عبر توفير ململم النفايات و لكن معالجة هذه المسألة عند البرمجة بالـ C أو ++C يصعب, حيث يجبر المطور على تتبع مساحات الذاكرة المحجوزة حتى نهاية وظيفة البرنامج و التي يمكن أن تتراكم حتى تشل عمله.

حسب معلوماتي فإن ململم النفايات يتصرف بطريقة غير معرفة للمبرمج indeterminant behavior, و بالتالي فإن التخلص من المساحات المحجوزة من الذاكرة و التي أصبحت "نفايات" يمكن أن يتم على الفور و يمكن أن يؤجل و لا يمكن للمبرمج التدخل في ذلك. بينما في ++C يمكنني كتابة شي مثل التالي للتحكم في الذاكرة المحجوزة و التخلص منها وقت انتهاء الحاجة :

	std::vector<int> *numList = new std::vector<int>;
	numList->resize( 99999 );
	.
	.
	.
	delete numList;

عند استدعاء هادم numList فإن المساحة المحجوزة يتم تحريرها, و ذلك يحصل بالضبط عند السطر التالي :

	delete numList;

لعلك تعلق على الموضوع بإسهاب, لأنك تعرف كلا الطريقتين بتفصيل أفضل مني.

تحياتي ,,

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 19 يناير 2009 في 20:26

1
#3

السلام عليكم

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

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

وأرجو أن تسمح لي بمداخلة صغيرة بالنسبة لسرعة البرنامج كمبرمج Visual Basic :

فمن المعلوم الفرق الهائل في السرعة بين الـVisual Basic و الـC ، ولهذا يكون من الضروري في بعض الأحيان، استعمال دوال API المكتوبة باستخدام C ، وخصوصاً كما ذكرت في معالجة الصور.

فلنأخذ مثالاً عن كودين يقومان بتحويل صورة ملونة إلى صورة بالأبيض والأسود، الأول يستعمل دالتي Point وPSet الموجودتين في Visual Basic ، والثاني يستعمل دوال API والتي هي GetPixel و SetPixel ، يمكنك تجريب الكود لتلاحظ فرقاً هائلاً بالسرعة بينهما:

  1.  
  2. For X = 0 To Picture1.ScaleWidth
  3. For Y=0 To Picture1.ScaleHeight
  4. Color=Picture1.Point(X,Y)
  5. If Color >= 256^3 / 2 Then
  6. Color=vbWhite
  7. Else
  8. Color=vbBlack
  9. End If
  10. Picture1.PSet(X,Y),Color
  11. DoEvents
  12.  

أما الثاني فهو:

  1.  
  2. Picture1.ScaleMode=3
  3. For X = 0 To Picture1.ScaleWidth
  4. For Y=0 To Picture1.ScaleHeight
  5. Color= GetPixel(Picture1.hdc,X,Y)
  6. If Color >= 256^3 / 2 Then
  7. Color=vbWhite
  8. Else
  9. Color=vbBlack
  10. End If
  11. SetPixel Picture1.hdc,X,Y,Color
  12. DoEvents
  13.  

يمكنك ملاحظة فرق هائل في السرعة بين الكودين إذا جربت على صورة ما، والكثير يهملون هذه الناحية للأسف.

جزاك الله خيراً أستاذنا على هذا المقال، واعذرني على مداخلتي

هذه الجملة خاطئة  :wacko: 


#4

الا تعتقد أنه من غير المنصف مقارنة سرعة لغة عامة المهام مثل ++C مع لغة محددة المهمة مثل فيجوال بيسك و من خلال اختبار واحد فقط؟

نعم ستكون بطيئة جداً في معالجة الصور لأنها لم تصمم أصلاً لهذه المهمة. لكن لو قمت بإنتاج تطبيق أعمال (و هو الهدف الرئيسي من فيجوال بيسك) فستجد أن السرعة متقاربة جداً و تتفوق الفيجوال بيسك في قصر فترة التطوير.

المهارة تكمن أيضاً في استخدام الأداة المناسبة في المكان المناسب.

#5
اقتباس
الا تعتقد أنه من غير المنصف مقارنة سرعة لغة عامة المهام مثل ++C مع لغة محددة المهمة مثل فيجوال بيسك و من خلال اختبار واحد فقط؟

نعم ستكون بطيئة جداً في معالجة الصور لأنها لم تصمم أصلاً لهذه المهمة. لكن لو قمت بإنتاج تطبيق أعمال (و هو الهدف الرئيسي من فيجوال بيسك) فستجد أن السرعة متقاربة جداً و تتفوق الفيجوال بيسك في قصر فترة التطوير.

المهارة تكمن أيضاً في استخدام الأداة المناسبة في المكان المناسب.

ربما، لكنه ليس اختباراً واحداً، وإنما العديد من الاختبارات، لكن هذا كان أوضحها.

بالنسبة لمعالجة الصور، فلعل الهدف الأساسي في فيجوال بيسك ليس معالجة الصور، ولكن هذا لا يعني أنها لا تستطيع القيام بذلك، بالنسبة لإدارة الأعمال، فعلاً تتفوق فيجوال بيسك على c++ ، من حيث السهولة والمرونة، وفعلاً هذا يستدعي اختيار الأداة المناسبة لكل عمل تريد القيام به، فأنا لا أتخيل نفسي أصنع برنامجاً لإدارة مكتب هندسي مثلاً بالـC++ .

لكن بشكل عام، لو قمت بالوظيفة ذاتها في كلتا اللغتين، ستجد أن c++ ستقوم به بسرعة أكبر من Visual Basic (وقد يكون الفرق جزءاً من الثانية)، لكنه موجود.

ففيجوال بيسك ثقيلة نوعاً ما في الحركة.

على كل حال، لا نريد تحويل هذا الموضوع إلى نقاش حول لغات البرمجة.

جزاك الله خيراً أخي :)

هذه الجملة خاطئة  :wacko: 


#6

السلام عليكــم ورحمـة الله وبركاتــه

يسرني كثيرا رؤية هذا التجاوب الإيجابي مع المقال و هو أمر مشجع للمزيد ...

اقتباس
حسب معلوماتي فإن ململم النفايات يتصرف بطريقة غير معرفة للمبرمج indeterminant behavior, و بالتالي فإن التخلص من المساحات المحجوزة من الذاكرة و التي أصبحت "نفايات" يمكن أن يتم على الفور و يمكن أن يؤجل و لا يمكن للمبرمج التدخل في ذلك. بينما في ++C يمكنني كتابة شي مثل التالي للتحكم في الذاكرة المحجوزة و التخلص منها وقت انتهاء الحاجة :

ما أعنيه هو عملية الإفراغ أثناء عمل البرنامج و ليس بعد الإنتهاء.

وقد ذكرت حالتين:

الأولى تتعلق بحسن إختيار مكان تعليمات الإفراغ كي لا يحدث ذلك مشاكل مثل إستخدام قيمة مؤشر و قد تم إفراغه مسبقا, أو محاولة إفراغ مؤشر فارغ.

واجهت مثل هذه المشاكل عندما كنت أبرمج في نظام التشغيل اليونيكس Fedora

و ربما الإختلاف بين المترجمات قد يتجاوز عن بعض الحالات كإفراغ مؤشر سبق إفراغه.

الثانية تتمثل في صحة عملية الإفراغ كما ذكرة في مثالstruct و char*

من الأفضل إفراغ المؤشرات حال الفروغ منها و عدم تركها لنهاية البرنامج.

ماذا لو أن البرنامج لا يتوقف !!!

كبرنامج يعمل في حلقة غير متناهية و يستقبل بإستمرار بيانات, يعالجها ثم يرجها للمستخدم !!! ستتراكم المساحات المحجوزة و قد تؤثر القيمة المحجوزة مسبقا في الحلقة التي تليها.

يمكن مراجعة هذا المقال للإطلاع على حالات مماثلة ذكرها هيثم HGBفي مقاله المؤشرات مالها وماعليها, نظرة تحليلية مفصلة...

/index.ph...mp;#entry737894

اقتباس
فمن المعلوم الفرق الهائل في السرعة بين الـVisual Basic و الـC ، ولهذا يكون من الضروري في بعض الأحيان، استعمال دوال API المكتوبة باستخدام C ، وخصوصاً كما ذكرت في معالجة الصور.

طريقة جيدة و لكن لن تكون الفائدة 100% إنما قرابة 90% حسب عدد المكتبات التي ستخدمها, لأن إستخدام مكتبات الربط الديناميكي مكلف من ناحية إستهلاك موارد الحاسوب (الذاكرة) و سرعة التنفيذ. ففي كل مرة ينبغي تحميل المكتبة البحث عن الدالة المطلوبة و تنفيذ تعليماتها. هذا بالإضافة إلى أن عدم تواجد المكتبة لسسب من الأسباب يشل كليا عمل البرنامج.

اقتباس
واعذرني على مداخلتي

المقال للنقاش و محتواه قابل للتعديل, فربما نسيت شيئا أو ورد خطأ...

اقتباس
المهارة تكمن أيضاً في استخدام الأداة المناسبة في المكان المناسب.

:S لقد نسيت ذكر حسن إختيار لغة البرمجة المناسبة للتطبيق. شكرا للتذكير

#7

مقال رائع ....

الملاحظات و التعليقات في الكود المصدري بمثابة اشارات المرور في شوراع الكود .

#8

شكراً لك.

توجد جوانب أخرى للاتقان لم يذكرها المقال مثل سهولة الاستخدام من قبل المستخدم النهائي (End User) والذي أعتبره من أهم العوامل لنجاح البرنامج.

محمد حمود

ماجستير تقنية المعلومات

بكالوريوس هندسة مدنية

محترف إدارة مشاريع (PMP)

مهندس جودة البرمجيات (CSQE)

مبرمج معتمد من مايكروسوفت (MCP)

متخصص في نظم المعلومات الجغرافية GIS

mohamed.hammod(at)gmail.com

www.ShapeViewer.com

#9

أحب أن أقول أن المقال جيد بشكل عام

لكن يعيبه تخصيص بعض الأدوات والشيفرات مما يجعل بعض أجزاء المقال مستعصية على من لا يعرف هذه الأدوات

مع أنه يفترض به أن يستوعب الجميع

على العموم أنا أعجبت به أتمننى لك التوفيق

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#10

انني سأنتقل الي البرمجة باللغات القديمة مثل لغة السي لكي احترف البرمجة فقد عملت علي بيئه الدوت نت واتقنتها فعلا الاتقان في البرمجة لابد ان نبدأ من الاول .........

رب اتني من الملك والحكمة والعلم فاطر السماوات والارض انت وليي في الدنيا والاخرة توفني مسلما والحقني بالصالحين

#11

عندي نفس تعليق "خالد" تقريبا....

بشكل عام... مقال جيد :D

#12

السلام عليكم ورحمة الله وبركاته

في الحقيقة نقاط مهمة جدا

وملاحظات دقيقة وقيمة يجب مراعتها في تطوير البرمجيات

بارك الله فيك

وقل ربي زدني علماً

مواضيع مشابهة