رحلتي في مجال البرمجة بدأت قبل تسع سنوات، عندما كنت في الرابعة عشرة من عمري، وشملت كلا من Visual Basic وC وC++ وJava وPerl وPHP وJavaScript وPython، وأنا لا أتحدث هنا عن مرور الكرام، بل قمت بالعديد من المشاريع في كل منها ولا زالت قدراتي بكل هذه اللغات جيدة، وأستطيع استخدام أي منها إذا اقتضت الحاجة ذلك، لكن إذا كان الخيار متاحا لي في كل مرة، لاخترت Python لكل مشروع أعمل عليه.
والسبب؟ سهولة قراءة شفرات البرامج المكتوبة بها!
سهولة قراءة الشفرات؟
قد يبدو الأمر خروجا عن المألوف في البداية، أن تكون سهولة قراءة شفرات البرنامج هي أهم ميزة في لغة البرمجة المستخدمة لكتابته، فغالبية النقاشات حول لغات البرمجة كانت تتمحور عادة حول سرعة التنفيذ أو كثرة المكتبات البرمجية المتوفرة لها، أما المقارنة بين اللغات بناءا على شكل أوامرها أو بساطة جملها البرمجية فطالما بدا لي أمرا سطحيا، وكنت أعتقد بأنك بمجرد أن تتعلم كيفية كتابة الجمل بصورة صحيحة والتعود على اللغة فإن ذلك لم يحدث فرقا كبيرا.
لكن الحقيقة هي أن استخدامي للغة Python جعلني أغير وجهة نظري هذه.
السبب في ذلك يبدو بسيطا وبديهيا بالنسبة لي الآن، وهو أن الغالبية العظمى من الوقت الذي أقضيه في إنشاء برنامج ما يكون في قراءة شفرات هذا البرنامج وإعادة قرائتها مرة تلو الأخرى، والغالبية العظمى من التعديلات التي أحتاج للقيام بها على برنامج ما تعتمد على فهمي للشفرة الحالية للبرنامج التي أعتزم تعديلها، ولذلك فإنه كلما كان الوقت والجهد اللذان أحتاج اليها لقراءة شفرات البرنامج وفهمها أقصر، كانت عملية البرمجة أسرع، وكلما كان فهمي للشفرة الحالية أدق، أصبحت عملية تطوير البرنامج باستمرار أسهل.
هذه المزايا في Python مهمة في عصر البرمجة الحالي.
في السابق، كانت الشركات تصرف الكثير من الوقت والجهد في هندسة المنتج ككتلة واحدة ضخمة وتحديد الكيفية التي سيتم فيها تطبيق كل جزء منه وكيفية تفاعل هذه الأجزاء مع بعضها البعض، قبل أن يكون هنالك حتى سطر برمجي واحد من البرنامج، أي أنّ البرنامج يكون في غالبية عمره مجرد حبر على ورق، وتكون المصيبة عندما تأتي أخيرا للتطبيق لتكتشف بأن فكرة البرنامج الأصلية كانت فاشلة.
مشاريع البرمجة هذه الأيام تسير باتجاه أساليب انتاج برامج عاملة بأسرع وقت ممكن وبالحد الأدنى المطلوب من المزايا، وبعد ذلك تتم اضافة المزايا واحدة تلو الأخرى بناءا على الحاجات الفعلية والمباشرة لمستخدمي البرنامج، لا بناءا على تخمينات وضعت قبل سنوات من الاطلاق الفعلي للبرنامج، وهذا الأسلوب في البرمجة يتطلب أن تكون عملية تعديل البرامج الحالية سريعة جدا، لذا فإنك بحاجة لأن تنظر إلى شفرة البرنامج التي كتبتها قبل بضعة أشهر فتستطيع أن تحدد بسرعة وبدقة ما الذي تقوم به هذه الشفرة، لتتمكن بالتالي من تحديد التغييرات التي يجب القيام بها لإضافة الميزة التي تريدها إلى البرنامج.
إضافة إلى ذلك، فهنالك بالطبع الحاجة لفهم البرامج التي كتبها الآخرون، خاصة مع توفر شبكة الانترنت وكمية هائلة من الشفرات التي يمكن استخدامها كقوالب تعدل عليها لتحصل على المنتج الذي تريده، هذه الشفرات إذا لم تكن سهلة القراءة والفهم فإنها لن تفيد في شيء، وقد يستغرق فهمك لها وقتا أطول بكثير من كتابة البرنامج بنفسك دون الاعتماد على شيء جاهز وموجود على الشبكة.
اللغات الأخرى مثل C تحاول حل مشكلة صعوبة قراءة شفراتها بوضع التعليقات على الشفرات، وقد تبدو هذه الفكرة جيدة نظريا، لكن ما يحدث عمليا هو أن هذه اللغات صعبة القراءة لدرجة أن كل سطر منها يحتاج إلى سطر من التعليقات لشرح معناه، وعندما تقوم بذلك، أي تقوم بوضع تعليق فوق كل سطر من أسطر البرمجة، فإن ما ينتج عن ذلك هو أن تكون لديك نسختان من برنامج، واحدة مكتوبة بلغة البرنامج المعقدة التي لا يفهمها حتى كاتبها والأخرى مكتوبة بلغة بشرية، وكل تعديل تقوم به على واحدة من هاتين النسختين يجب أن تقوم به فورا على الأخرى، وإلا فإن التعليقات ستتحول من نعمة إلى نقمة.
إن اجراء اي تعديل على برنامج مثل هذا سيكون بمثابة كابوس، لدرجة أن من الأمور العادية جدا بالنسبة لمبرمجي C أن يحذفوا كل الشفرات التي كتبوها لمشروع ما سابقا ويعيدوا برمجة كل شيء من الصفر، لأن ذلك يكون في الكثير من الأحيان أسهل بكثير من محاولة تعديل الشفرة الحالية.
إذا كانت لديك سنوات من الخبرة في مجال البرمجة بهذه اللغات، فإنك قد تظن بأن البدء من الصفر في البرمجة أمر اعتيادي وليست مشكلة كبيرة، بل ربما تكون لديك قناعة بأنه أمر صحي ومفيد وضروري لشفرة برنامجك، لكنه في الحقيقة مضيعة للوقت، كما أن الشفرة البرمجية الغير مجربة معرضة بصورة أكبر للأخطاء البرمجية، على العكس من الشفرة التي تكون موجودة لديك منذ فترة وتكون التجربة وكثرة الاستخدام قد صقلتها وخلصتها من كل الأخطاء البرمجية والمنطقية.
لكن هل يعقل أن يكمن الحل لكل المشاكل السابقة في لغة البرمجة؟ الإجابة التي أقدمها لك من واقع خبرتي هي: نعم! لغة البرمجة هي الحل، وسهولة القراءة هي السبب.
ما الذي يجعل Python سهلة القراءة؟
هنالك مجموعة من المزايا المهمة في لغة Python التي تجعلها سهلة القراءة، ومن المفيد لك أن تعرف هذه الأمور حتى تستطيع الاستمرار في تطبيقها على البرامج التي تكتبها أنت في Python.
سهولة القراءة جزء من الثقافة التي حول Python. وأقصد بالثقافة التي حول Python كل شيء من مطوري اللغة الأصليين إلى كتاب التعليمات والمتطوعين للإجابة عن أسئلة المبتدئين إلى المبرمجين الذين يستخدمون اللغة، كلهم مهتمون بأن تكون Python سهلة القراءة، لذا فإن أي تعديل على اللغة يدرس ويناقش لدرجة كبيرة من قبل كل من هو مهتم قبل أن تتم الموافقة على اضافته إلى اللغة، بعد التأكد من أنه لن يؤدي إلى برامج غير مفهومة الشفرة، وهذا الأمر مهم جدا، لأنه لا فائدة من إنشاء لغة جميلة وتقبيحها بعد ذلك بالتدريج بإضافة المزايا لها بصورة عشوائية ومن كل مكان، كما حدث مع لغات مثل Perl وPHP.
بساطة ونقاوة بنية اللغة. إذا كنت تبرمج باللغات التي تشبه C فأنت تعلم بالتأكيد بأن الجمل البرمجية تنتهي بالفاصلة المنقوطة (;) وأن المقاطع البرمجية تكون محصورة بين الأقواس المجعدة { و }، أما في Python، فالجمل البرمجية تنتهي بنهاية السطر، أي كل جملة توضع في سطر، أما المقاطع البرمجية فلا تحاط بأقواس أو شيء مميز، وانما هي عبارة عن مجموعة من الأسطر (الجمل البرمجية) التي تتساوى في حاشيتها عن بداية السطر، وحتى تفهم ما أعنيه، قارن بين المقطعين التاليين من الشفرة، الأول بلغة C والثاني بلغة Python:
/* C code */ if ((age >= 6) && (age < = 18)) { printf(“You should go to school.\n”); }
Python code
if (age >= 6) and (age < = 18): print “You should go to school.”
لاحظ الفرق في مقدار الرموز الغريبة التي تحتاجها في C ولا تحتاجها في Python، هذا الأمر يجعل برامج Python أسهل بكثير في القراءة، خاصة وأنها تشجع المبرمج على كتابة الشفرة بصورة واضحة وجميلة، على العكس من لغة C التي لا تهتم لذلك، فيمكن مثلا كتابة السطر السابق من C كالتالي:
if((age>=6)&&(age< =18)){printf(“You should go to school.\n”);}
بينما يعد القيام بشيء مشابه في Python صعبا جدا، بل ربما يكون مستحيلا، وهذا الأمر يفيد كثيرا في تسهيل قراءة البرامج.
“يجب أن تكون هنالك طريقة واحدة واضحة، ويفضل أن تكون واحدة فقط، للقيام بأمر ما”. هذه العبارة مهمة وتذكر كثيرا في ثقافة Python، والمقصود بها هو أنك إذا واجهت مشكلة ما وأردت حلها بلغة Python فيجب أن تكون هنالك طريقة واضحة وضوح الشمس لحل هذه المشكلة، وأن تكون الطريق معبدة أمامك لحل هذه المشكلة بهذه الطريقة فقط، وما ينتج عن ذلك هو أنه لو كان هنالك أكثر من مبرمج يريدون حل المشكلة نفسها، فإنهم سيكتبون شفرات شبه متطابقة، أي أن المبرمجين كلهم سيفكرون بالطريقة نفسها، وبالتالي سيكون من السهل عليهم أن يفهموا شفرات بعضهم البعض.
هذه الميزة تذكر عادة في مقارنة Python باللغات الأخرى التي توفر عشرات الحلول للمشكلة نفسها، مثل Perl التي تفتخر بذلك، وعندما تكون اللغة ضخمة وتحتوي على الكثير من الأوامر والطرق المختلفة للقيام بالشيء نفسه، فإن كل مبرمج من مبرمجي اللغة سيتعلم جزءا من أوامر وقدرات اللغة ليحقق به ما يريده, وعندما تأتي بعد ذلك لأكثر من مبرمج وتطلب منهم أن يكتبوا نفس البرنامج بهذه اللغة فإن البرامج ستبدو مختلفة إلى درجة أنها قد تبدو أحيانا كما أو أنها كتبت بلغات مختلفة، وهذا يعني بأنك في كل مرة تريد أن تقرأ بها شفرة لمبرمج آخر ستحتاج لعمل تعديلات كبيرة على طريقة كتابتك للبرامج، وعندما تعمل على مشروع كبير فإنك قد تتأثر به لدرجة كبيرة، بحيث أنك عندما تعود إلى البرامج التي كتبتها أنت قبل فترة من الزمن، ستجدها غريبة عليك وغير مألوفة!
الأمور السحرية ممنوعة. لعل أفضل مثال على اللغات التي تستخدم الأمور السحرية مرة أخرى هي Perl، ولعل أفضل مثال في Perl على الأمور السحرية هي المتغيرة $_، فهذه المتغيرة تعتبر سحرية لأنها المتغيرة الافتراضية للكثير من العمليات، فهي المتغيرة التي تذهب إليها معلومات الملف إذا قمت بجلبها دون أن تحدد المتغيرة التي تريد أن تضع هذه المعلومات فيها، وهي المتغيرة التي تستخدم بصورة افتراضية عند تطبيق عمليات التعابير القياسية (Regular Expressions) دون تحديد متغيرة معينة، وهي المتغيرة الافتراضية عند طباعة المعلومات دون تحديد متغيرة ما، وهذا الأمر يجعل بالامكان كتابة برنامج يقوم مثلا بفتح ملف ما واستخلاص معلومات منه ثم طباعة هذه المعلومات دون استخدام أية متغيرات، أو بالأصح، باستخدام متغيرة سحرية دون الحاجة لتحديدها في البرنامج.
بشكل عام، الذي أعنيه عندما أقول بأن الأمور السحرية ممنوعة، هو أن Python تفضل الافصاح عن المقصود عند كتابة الشفرة (explicit) على الأمور التي تكون مفهومة ضمنيا أو من السياق (implicit)، وهذا الأمر يجعل فهم المقصود من الشفرة بقرائتها أسرع بكثير.
عدم وراثة الأمور الخاطئة من اللغات الأخرى. الكثير من مصممي لغات البرمجة الحديثة نقلوا إلى لغاتهم الكثير من الأمور من اللغات القديمة كطريقة لتسويق اللغة للمبرمجين على أنها مشابهة للقديمة، وحتى تبدو عملية الانتقال إلى اللغة الجديدة سهلة نسبيا، وتنتج بسبب ذلك لغة غير متناسقة ترث الكثير من الأمور التي كان من الممكن حلها وتصحيحها بعد مرورها بالتجربة في اللغة القديمة، ولعل من أفضل أمثلة ذلك هو دوال PHP التي ورثتها بنفس الاسم ونفس المعطيات من مكتبات C المختلفة، أما Python فهي لا تهتم بالتوافق مع اللغات الأخرى، فإذا كانت هنالك أفكار جيدة في الخارج فإن Python تتبناها بعد أن تصبح متوافقة مع بقية أجزاء Python، أما إذا كانت سيئة فمجرد تعود الآخرين على استخدامها لا يعد مبررا كافيا لدى Python لادخالها على اللغة.
من أمثلة ذلك حلقات for وwhile وdo..while في C التي تقوم بالأمر نفسه تقريبا مع اختلافات بسيطة في كيفية ترتيب الشروط وغيرها، أما في Python فستجد بأن هذه الأنواع الثلاثة من الحلقات اختزلت في الحلقة while (هنالك طريقة واضحة واحدة للقيام بأمر ما)، وهنالك أيضا نوع آخر من الحلقات في Python يختلف اختلافا كليا عن أنواع الحلقات الثلاثة في C، واسم هذه الحلقة في Python هو for، لكن لا يوجد أي تشابه بينها وبين حلقة for التي في C.
عدم وراثة الأمور الخاطئة من الاصدارات السابقة. فلغة Python جريئة في التخلي عن أي ميزة يتضح بأنها تؤدي إلى مشاكل أو عندما يتم ايجاد طريقة أفضل لتحقيق الشيء نفسه، ففي نفس الوقت الذي تسير به اللغة بإضافة المزايا ببطئ فإنها تعمل أيضا على ازالة المزايا القديمة ببطئ، ويمكن القول بحق بأن Python لغة تتطور وتتكيف على العكس من اللغات الأخرى التي تتراكم فيها المزايا واحدة فوق الأخرى حتى تخرج عن السيطرة.
وهذا الأمر يعني يضمن استمرارية الميزة التي ذكرتها سابقا، وهي أن هنالك طريقة واحدة واضحة للقيام بأمر ما، لأن مطوري Python حتى إذا توصلوا إلى طريقة أفضل للقيام بأمر ما، فإنهم لن يكتفوا بإضافة الطريقة الأفضل، بل سيعملون أيضا على إزالة الطرق السابقة حتى تصبح الطريقة الجديدة هي الطريقة الوحيدة للقيام بذلك الأمر.
لا توجد معاملة خاصة لتطبيقات معينة. واحدة من الأمور الاعتيادية التي تقوم بها الكثير من لغات البرمجة مثلا هي البحث في النصوص عن أنماط ما باستخدام التعبيرات القياسية (Regular Expressions)، وللقيام بذلك، توجد عادة دالة في اللغة تأخذ التعبير القياسي والنص الذي تريد البحث فيه عن المقاطع المطابقة لهذا التعبير وتعيد لك هذه المقاطع، لكن مبرمجي Perl أحسوا بأن هذا الأمر مهم جدا، فلم يكفيهم أن يتم ذلك عبر دوال عادية، حالها حال القيام بأي أمر آخر، بل قاموا بعمل تعابير برمجية خاصة بالقيام بهذه العملية.
المشكلة هنا هي أن Perl أخذت تطبيقا خاصا بمجال محدد وهو مجال معالجة النصوص وأدخلته في صلب اللغة، والسؤال الذي يطرح نفسه في هذا المجال هو لماذا يتم ادخال هذه الميزة المتعلة بمعالجة النصوص ولا يتم ادخال مزايا أخرى في صلب اللغة، مثل مزايا عمل الواجهات الرسومية وغيرها؟
هذه الأمور من الممكن أن تكون جزءا من صلب اللغة في اللغات المتخصصة، مثل لغة PHP، المصممة لعمل برامج ويب، أما اللغات التي تسعى لأن تكون لغات برمجة عامة فإنها تستطيع توفير كل هذه بطرق أخرى موحدة مثل الدوال والمكتبات البرمجية، الأمر الذي يجعل قراءة هذه الأمور أسهل بكثير لأنها تخضع للقوانين العامة للغة.
خلاصة القول
خلاصة القول هي أن Python تتميز بمجموعة من الصفات تجعلها شفراتها من أسهل الشفرات فهما ووضوحا، وهو أمر يجعلها ممتازة للمشاريع التي يعمل عليها أكثر من شخص وتتطلب تحديثا مستمرا، وهذه هي متطلبات المشاريع الكبيرة في هذا العصر.
ماذا عن Ruby؟
في بداية هذا المقال، أشرت إلى عدد من اللغات وقلت بأنني أعرفها جيدا، لكن هنالك لغة مثيرة للاهتمام لم أشر إليها، وهي لغة Ruby، التي اشتهرت مؤخرا كلغة لإنشاء مواقع الويب التفاعلية باستخدام هيكلية اسمها Ruby on Rails.
الكثير يقارنون بين Ruby وPython، فاللغتان متشابهتان كثيرا من الخارج، ولو أنهما تختلفان أيضا في الكثير من المفاهيم الجوهرية، أهم ما هو مشترك بين Ruby وPython برأيي هو ثقافة التركيز على تسهيل القراءة وفهم الشفرة ووضعهما على رأس سلم الأولويات.
خبرتي العملية في استخدام Ruby لم تتعدى الشهرين في مقابل Python التي أستخدمها منذ أكثر من ثلاثة سنوات، لكن انطباعي عنها إلى الآن ممتاز، وحدسي يقول لي بأنها ستشارك Python كلغة مفضلة ثانية بالنسبة لي.
15/09/2005 @ 1:02 pm
abduh قال:
عندما قرأت برنامج Hello World بلغة بايثون لأول مرة ، طننت أن البرنامج ناقص ويحتاج إلى عدد من الأسطر الأخرى أو أن كاتبه اكتفى بسطر أمر الطباعة فقط… لم أكن أعرف أنها بهذه البساطة والسهولة في الفهم إلا بعد أن قرأت عنها قليلاً في عدد من المواقع التعليمية.
لو أردنا أن نقارن بينها وبين لغة جافا مثلاً أو لغة بيرل (اللغة القبيحة كما يصفها أن أحد أساتذتي) لوجدنا فرقاً شاسعاً واضحاًَ للعيان في جانب السهولة
تدوينة مفيدة يا أحمد ومدونة رائعة…
تحياتي
15/09/2005 @ 1:34 pm
OMLX قال:
ممتاز أخي احمد ،، مقالة رائعة جدا … بالتوفيق
15/09/2005 @ 2:59 pm
أحمد الهاشمي قال:
الأخ العزيز abduh ..
بالفعل تعلم لغة Python أمر سهل جدا لأنها تبدأ ببساطة من كتابة الأوامر مباشرة ولا تجبرك على استخدام الأمور المتقدمة إلا عندما تحتاج إليها وتكون هنالك فائدة منها، وربما أفضل دليل على ذلك هو النمط التفاعلي في Python، حيث يمكنك أن تبدأ بالبرمجة قبل أن تكتب برنامجا!
يسرني أن الموضوع والمدونة أعجباك، وإن شاء الله أظل عند حسن ظنك.
الأخ العزيز OMLX ..
يسرني أنها أعجبتك وإن شاء الله أظل عند حسن ظنك، موفقين جميعا إن شاء الله.
16/09/2005 @ 2:25 pm
T6Q قال:
السﻻم عليكم..
شكراً لك اخي الهاشمي على هذا المقال..
انا كنت مصمم.. واﻵن مبتدئ في البرمجة.. أظن انني سابدأ بتعلم لغة الباثيون هذه أولاً لكن بعد أن أقرأ عنها أكثر وأفهم موضوعها
سؤال:
هل هي مثل الجافا.. يعني اذا كتبت البرنامج تراه يعمل على نظام الويندوز ونظام اللينكس ايضاً ام هناك اختﻻف أو انها محددة لنظام واحد دون غيره
وبما ان لك خبرة عن السي.. عندي سؤال:
هل هناك اختﻻف بين لغة C التي يعملون عليها في الويندوز ولغة C التي يعملون عليها في اللينكس أم هي لغة واحدة وتعمل في كل مكان ونفس اﻷوامر وكل شيء؟
وشكراً لك
أعجبتني مدونتك.. أظن اني سأجعلها الثانية مع مدونة سردال وأزورهما كل حين
16/09/2005 @ 2:53 pm
عبد المنعم قال:
السلام عليكم ورحمة الله
أخي الفاضل الهاشمي
جزاك الله خيرا على المقالة الأكثر من ممتازة
الصراحة استفدت كثيرا..
عندي بعض الأسئلة و سمحت:
وشكرا مسبقا.
16/09/2005 @ 4:06 pm
أحمد الهاشمي قال:
الأخ العزيز T6Q ..
وعليكم السلام ورحمة الله وبركاته ..
الله يوفقك أخي العزيز في تعلم اللغة، وتوقعي هو أنها ستكون رحلة ممتعة
بالنسبة لسؤالك حول كون اللغة مثل Java تعمل على أكثر من منصة، فالإجابة هي نعم، أداة CSSMirror التي تجدها على هذا الموقع قمت بإنشائها بالكامل على جهازي الخاص الذي يعمل ببيئة Windows، ثم قمت برفعها مباشرة إلى مزود Linux الذي يعمل عليه هذا الموقع فعملت الأداة دون أية مشاكل، بعد أن تأكدت من أن كل المكتبات التي أحتاجها مركبة على نسخة Python التي على المزود.
لكن هنالك اختلاف مهم بين Python وJava في تحقيق هذا التوافق، فلغة Python تحاول أن تزيل الاختلافات البسيطة بين الأنظمة المختلفة، وتسهل عليك التعامل مع الاختلافات الكبيرة، أما Java فعندما ووجهت بالاختلافات الكبيرة كانت ردة فعلها بإيجاد حلول جديدة كليا، مثال على ذلك الواجهات الرسومية، فبيئة Windows تستخدم مكتبة من الأوامر البرمجية تسمى WFC أما بيئة Linux فالمكتبات التي تستخدم عادة تسمى Qt/KDE وGTK، وكل واحدة من هذه المكتبات الثلاثة تعمل بصورة مختلفة تماما عن الأخرى.
الحل الذي قدمته Java لهذه المشكلة هي ايجاد مكتبة برمجية رابعة تختلف عن كل هذه المكتبات، اسمها Swig، وهي بالفعل تعمل بالصورة نفسها على الأنظمة المختلفة، لكنها أدت إلى ردة فعل عكسية، فبدلا من أن يتقلبها مستخدموا كافة الأنظمة .. رفضوها، فالبرامج المكتوبة باستخدام Swig تبدو مختلفة كثيرا عن بقية برامج النظام، وكأنها قادمة من المريّخ!
بشكل عام تستطيع أن تقول بأن Java تحاول الغاء الاختلافات بينما Python تحاول أن تسهل عليك التعامل معها.
بالنسبة لسؤالك بخصوص لغة C، فالإجابة هي أن اللغة هي نفسها على نظام Windows وLinux وكل الأنظمة الأخرى، لكن الاختلافات بين الأنظمة تكون في أمرين.
الأمر الأول هو المكتبات المتوفرة للغة، فالأوامر والمكتبات التي يوفرها نظام Windows تختلف عن تلك التي توفرها بيئة Linux، ولو أن هنالك الكثير من المكتبات التي تحاول أن تقلل من هذه الاختلافات، لكنها تظل موجودة ويجب عليك أن تتعامل معها.
أما الأمر الثاني فهو البرامج نفسها بعد تصنيفها، أي تحويلها من ملفات C إلى ملفات EXE في Windows أو غيرها من أنواع الملفات في البيئات الثانية، فهذه الملفات تختلف كثيرا من بيئة إلى أخرى، بل تختلف أيضا حسب المعالج الذي ستعمل عليه هذه البرامج.
لذا فإنه يجب أن تكون هنالك نسخ مختلف من البرنامج المكتوب بلغة C للبيئات المختلفة، لكن ذلك لا يعني بالضرورة بأن شفرات هذه البرامج مختلفة عن بعضها البعض.
16/09/2005 @ 4:53 pm
أحمد الهاشمي قال:
الأخ العزيز عبدالمنعم ..
وعليكم السلام ورحمة الله وبركاته ..
يسرني أنك استفدت من هذه المقالة، ووفقك الله في سعيك لتعلم اللغة.
بالنسبة لأسئلتك، فهذه هي الإجابات عنها:
هل تتعامل Python مع قواعد البيانات وكيف يتم الاتصال بهذه القواعد؟
نعم، تستطيع Python أن تتعامل مع الكثير من أنظمة قواعد البيانات باستخدام مكتبات تقوم بتنزيلها من الشبكة، مثال على ذلك هذه المكتبة التي تتيح لك الاتصال بقواعد بيانات MySQL.
بالنسبة لكيفية الاتصال، فالطرق تختلف باختلاف نوع قواعد البيانات، لكن هنالك أيضا مواصفات موحدة في Python للوصول إلى قواعد البيانات اسمها DB-API، والاصدارة الحالية من هذه المواصفات هي الاصدارة الثانية DB-API 2.
إذا كانت لديك أسئلة محددة أكثر عن طرق الاتصال بقواعد البيانات فسيسرني أن أساعدك بالإجابة عنها.
كيف يتم انشاء مواقع ويب لهذه اللغة؟
في الحقيقة هذا الجانب من جوانب Python معقد نوع ما، والسبب هو أن هنالك الكثير من الطرق لتحقيق ذلك، لكن من وجهة نظري أسهل هذه الطرق المتوفرة حاليا هي هيكلية اسمها CherryPy، وهذا مثال على برامجها:
وهنالك الآن هيكلية جديدة تبدو واعدة اسمها Subway هدفها هو تقليد هيكلية Ruby on Rails عن طريق ربط هيكلية CherryPy مع مجموعة من المكتبات البرمجية الأخرى لتوفير بيئة لإنشاء مواقع الويب بسهولة وسرعة فائقتين، لكنها لا تزال في بداياتها.
إضافة إلى ذلك، فهنالك هيكلية Zope الضخمة التي عادة ما تقارن مع هيكليات Java من العيار الثقيل.
أما بالنسبة لأمثلة على مواقع مكتوبة بلغة Python فيمكنك أن تجد قوائما بها في المواقع المختلفة للهيكليات، وهذا مثال على المواقع التي تعمل على CherryPy.
ومن أشهر برامج الويب التي تستخدم Python برنامج trac، وهو عبارة عن برنامج wiki محسن مع نظام لمتابعة المشاكل البرمجية الهدف منه مساعدتك على إدارة مشروعك البرمجي، وهو النظام المستخدم في إدارة مشاريع شهيرة مثل WordPress (tracker) و Ruby on Rails (tracker).
إضافة إلى ذلك فإن من المشهور عن Google أنها تبحث دائما عن مبرمجي Python، لكنني لا أعرف بالضبط أين تستخدم Python في Google.
ماذا أحتاج لأبرمج بلغة Python؟
أول شيء تحتاج إليه هو مترجم Python، ويمكنك تنزيله من موقع Python الرسمي.
إضافة إلى ذلك، يمكنك تحرير برامج Python باستخدام أي محرر نصوص عادي، بالنسبة لي، محرري المفضل هو برنامج صغيرة اسمه Notepad2
أما بالنسبة لمواصفات السيرفر، فهي تعتمد على الأسلوب الذي تريد استخدامه لتطوير البرامج، يفترض بأن أغلب شركات الاستضافة في بيئة Linux أن تسمح لك بعمل برامج Python باستخدام تقنية CGI، وهو ما قمت به شخصيا في أداة CSSMirror، أما إذا كنت تريد لبرامجك أن تعمل بصورة أسرع وأفضل من CGI فأشهر الحلول هو mod_python التي تتيح لك دمج Python في مزودات Apache، لكن هذه الميزة ليست متوفرة من كل شركات الاستضافة.
مصادر عربية تتحدث عن اللغة
المصدر العربي الوحيد الذي أعرفه عن اللغة هو مستند “تعلم بايثون بكل سهولة” للأخ فهد السعيدي.
17/09/2005 @ 12:19 am
عبد المنعم قال:
لا أجد العبارات المناسبة لتقديم الشكر والامتنان لكم أستاذي الكريم
جزاك الله الجنة
معلومات قيمة جدا جدا
17/09/2005 @ 12:38 am
أحمد الهاشمي قال:
الأخ العزيز عبدالمنعم ..
حياك الله أخي العزيز، ودعوتك هذه لي هي قيمة هذه المعلومات
19/09/2005 @ 2:09 pm
شبايك قال:
السلام عليكم يا طيب
مع كل هذا الحب الكبير لهذه اللغة، لماذا لا تثري الموسوعة العربية ويكيبديا بمعلوماتك
http://ar.wikipedia.org/wiki/%D8%A8%D9%8A%D8%AB%D9%88%D9%86
مشكور
26/10/2005 @ 7:02 am
فاطمة قال:
السلام عليكم ورحمة الله وبركاته
ماذا تنصحني في مشواري مع البرمجة مع العلم بان هذه السنة هي اولى
سنواتي ، وانا اعاني كثيرا من لغة البرمجة التي ندرسها الc++ ( لغة السي
بلاس بلاس ) ،
لقد قرات المثال الذي وضعته عن الفرق بين لغة البيتون والسي ، وفعلا
هناك اختلاف كبير ، اتمنى ان اتقن لغة السي بلاس بلاس ، ومن ثم ابدا
مشواري مع اللغات الاخرى وبكل حرية في الاجازة الصيفية .
26/10/2005 @ 2:24 pm
أحمد الهاشمي قال:
الأخ العزيز شبايك ..
وعليكم السلام ورحمة الله وبركاته ..
أعتذر في البداية عن التأخر في الرد، وإن كنت أذكر بأنني رددت على تعليقك، لكنني لا أراه الآن، ولا أعرف لماذا.
على العموم، قمت بالقاء نظرة على الصفحة بعد تعليقك مباشرة وقبل قليل مرة أخرى، ولا أعلم بصراحة ما الذي يمكنني أن أضيفه إليها، لأنني لست خبيرا بتاريخ اللغات وما شابه ذلك، لكنني سأحاول أن أفكر بأمور وأضيفها إلى الصفحة إن شاء الله.
الأخت الفاضلة فاطمة ..
وعليكم السلام ورحمة الله وبركاته ..
في البداية، وبما أن البرمجة ستكون مهنتك، أعتقد بأن من المهم بالنسبة لك أن تنظري لتوفر الفرص الوظيفية لمبرمجي اللغة التي تريدين تعملها، انطباعي عن الفرص الوظيفية في الوطن العربي هو أنها تكون لمبرمجي Oracle وMicrosoft وJava، لكن ذلك لا يعني بأنه ليست هنالك وظائف لمبرمجي اللغات الأخرى.
إذا كان لديك الخيار في ذلك، سواء باقناع المكان الذي تعملين فيه بأن هذه اللغات أفضل أو كنت تعتزمين العمل الحر، حيث يكون القرار راجعا لك في هذه الأمور، فأنصحك بشدة بالقاء نظرة جادة على لغة Python، ولو أن هنالك جانب آخر وهو أن زبائنك قد يصرون على أن تستخدمي لغات وتقنيات أخرى.
لكن على الرغم من كل ذلك، فأنا لا زلت أنصحك بتعلم لغة Python، وقرار مثل هذا قد يبدو صعبا في بداية المشوار، لكن بعد أن تتقني البرمجة بلغة C++ وغيرها من اللغات، سيكون تعلم لغات برمجة جديدة أمرا سهلا، وأحيانا سيكون كل ما تحتاجين إليه لتعلم لغة جديدة هو أسبوع واحد من الصفاء الذهني والتفرغ.
كما أن تعلم أكثر من لغة تساعدك على الانفتاح على آفاق وأفكار جديدة في البرمجة، لأن اللغات المختلفة تستخدم أحيانا مفاهيم وأساليب مختلفة لتحقيق الأمور نفسها، وتعلمك لهذه الأمور سيرفع من قدراتك البرمجية وبصورة ملحوظة، حتى لو كنت ستستخدمين لغة واحدة فقط في عملك.
26/10/2005 @ 9:03 pm
ماجد قال:
السلام عليكم ورحمة الله وبركاتة
اخي الكريم لقد استفدت من هذه المقاله الكثير والكثير
وننتظر منك المزيد الله يعطيك الف عافيه يالغالي
26/10/2005 @ 9:31 pm
أحمد الهاشمي قال:
الأخ العزيز ماجد ..
أشكرك، وقد سرني أنها أعجبتك.
12/12/2005 @ 4:07 pm
المحترف قال:
الباحث العظيم
بروفيسور احمد الهاشمى
قد تظن من اسمى انى محترف ولكن انا مبتدا فى تلك الحظة التى اكتب فيها
لكنى ارغب فى الاحتراف
انا بجد استفدت منك كتير جدا فى هذا المقال
وكنت ارغب من فترة طويلة فى تعلم لغات البرمجة لاننى اعشق الكمبيوتر
ولكن لم تساعدنى الظروف
اريد الاستفسار عن بعض الاشياء
1-بماذا تنصحنى ان ابدا فى تعلم اى من لغات البرمجة
2- هل تعتقد ان فاتنى الوقت فى التعلم حيث ان عمرى 19 عام
لكم جزيل الشكر
12/12/2005 @ 4:45 pm
أحمد الهاشمي قال:
الأخ العزيز المحترف ..
أشكرك على كلماتك الطيبة، لكن الحقيقة هي أنني لست باحثا ولا بروفسورا، لكن برمجة الكمبيوتر تستهويني بشدة، وقد سرني أن المقالة أعجبتك، وإن شاء الله أظل عند حسن ظنك.
الاحتراف ليس صعبا أبدا، الصعوبة كلها تكون في البداية للدخول في عالم جديد، لكن بمجرد الدخول فيه فإن تعلم الأمور الجديدة سيصبح أسهل بكثير، خاصة إذا كنت تتقن الانجليزية، فهنالك أكوام وأكوام من الكتب والمقالات والمعلومات على الانترنت عن الكمبيوتر وتقنياته.
إذا كانت البرمجة هواية بالنسبة لك، فأنصحك بالبدء بتعلم لغة Python، أما إذا كنت تعتزم العمل في مجال ما فإن لغة البرمجة الأفضل ستعتمد على هذا المجال.
أما بالنسبة للعمر، فلا أعتقد أبدا بأن الكثير قد فاتك في التعلم، فكما قلت في البداية، بمجرد أن تمتلك الأساسيات فإن التعلم أصبح سهلا جدا اليوم، كما أنك ستعتاد على تعلم الأمور الجديدة كل يوم، هذه هو حال التكنولوجيا.
عندما ذكرت في البداية أنني أبرمج منذ 9 سنوات، فأنا لم أكن أعني بذلك أنني وصلت إلى الاحتراف بسبب برمجتي لمدة 9 سنوات، وانما كنت أعني بأنني مررت على الكثير من الأمور، لأبين نقطة واحدة مهمة وهي أن Python أمر رائع حتى بالنسبة لشخص مرت عليه الكثير من الأمور.
لكن أي شخص يبدأ بتعلم التكنولوجيا ويستمر بجدية من اليوم ولمدة سنة سيتمكن من الوصول إلى مرحلة الاحتراف، وفي المقابل إذا كان هنالك شخص محترف في التكنولوجيا منذ عشرين سنة، وتوقف لمدة سنة عن متابعة ما هو جديد فإن هنالك احتمالا كبيرا أنه سيخرج من دائرة المحترفين، والسنوات العشرين تلك كلها لن تشفع له هذا التأخر.
13/12/2005 @ 10:20 am
تصميم مواقع قال:
السلام عليكم
كنت أحتاج فعليا إلى مقالة كهذه لمعرفة المزيد عن هذه اللغة ، معلوماتي عنها محدودة لذا لن أستطيع مناقشة التفاصيل الخاصة باللغة بحد ذاتها ، ولكن إسمح لي أن أناقش بعض المفاهيم العامة ، خاصة في قولك :
“يجب أن تكون هنالك طريقة واحدة واضحة، ويفضل أن تكون واحدة فقط، للقيام بأمر ما”
حسب دراستي في مواد الـ Compilers و هيكلة لغات البرمجة في الجامعة ، فإن هذا الأمر أكاديميا يعتبر خطأ قاتل و فظيع في تصميم لغات البرمجة ، لذا نجد أن أقوى لغات البرمجة على الإطلاق مثل السي و الجافا و السي شارب تقدم عدد غير محدود من الطرق لحل المشكلة بشكل لا يخل بقابلية القراءة و التتبع ، غالبا ما تجد ثقافة المبرمجين بلغة واحدة تنصب في كتابة الشيفرة بأسلوب معين يسهل القراءة على الأخرين ، وهذا الأمر يتضح جدا عندما تحاول قراءة أكواد للسي بلس بلس تجد انك أمام حالة من الصدمة لعدم المقدرة على قراءة سطر واحد .. اما المبرمجين المتعاملين بكثافة مع هذه اللغة لا يجدون صعوبة في ذلك أبداً ، بل بالعكس ، يعتبرون الطريقة التي يكتب فيها مبرمجي الجافا و السي شارب شيفراتهم طريقة غير قابلة للقراءة بتاتا
اذا مسألة قابلية القراءة مسألة نسبية و قياسية تعتمد على مدى تمرسك للغة التي تقرأ شيفرتها و مدى معرفتك بطرق كتابة الشيفرة لدى مجتمع مبرمجي هذه اللغة
تحياتي و تقديري
13/12/2005 @ 9:12 pm
أحمد الهاشمي قال:
الأخ العزيز ..
وعليكم السلام ورحمة الله وبركاته ..
أشكرك على الإضافة، وأنا لم أدرس الكمبيوتر دراسة أكاديمية، لذا فإنني لا أعرف ما هي أسباب كون ذلك خطئا قاتلا وفضيعا في تصميم لغات البرمجة.
لكنني أعتقد بأن المثال الذي ذكرته ممتاز لتوضيح النقطة التي أردت الوصول إليها، وهي أن هنالك لغات مختلفة تستخدم بنية شبه متطابقة، لكن كل واحد من مجتمعات المبرمجين بهذه اللغات تستخدم أسلوبا مختلفا تماما في كتابة شفراتها، بحيث يصبح من الخطأ كتابة شفرات C++ بأسلوب C#.
فالسؤال الذي يطرح نفسه الآن هو: هل سماح اللغة للمبرمج أن يكتب الشفرات بأسلوب خاطئ ميزة أم مشكلة في اللغة؟
قد يخيل في البداية من فكرة أن هنالك طريقة واحدة فقط للقيام بأمر ما بأنها عائق أمام المبرمج لأنه عندما تكون هنالك طريقة واحدة فقط فإن اكتشافها يصبح أمر صعبا، لكن الحقيقة عكس ذلك تماما، فهذا الأمر يجعل اللغة ككل تصبح أصغر بكثير، بحيث يصبح من السهل جدا معرفة كل شيء عن اللغة.
كما أن ذلك يعني أيضا أن الخبير الذي يعرف كل الطرق الممكنة لن يحتاج لأن يفكر كثيرا في الطريقة، بمجرد أن يقرر أن يقوم بشيء ما فإنه سينفذ هذه الطريقة الوحيدة دون تفكير.
كما أن ذلك يعني أيضا بأن المشاريع الضخمة التي يعمل عليها عدد كبير من المبرمجين لن تحتاج لاصدار دليل تعليمات كل همها هو أن تحدد ما إذا كان القوس المجعد يجب أن يظهر في بعد الشرط مباشرة في جملة if أو في سطر مستقل، أو ما إذا كان يجب مسافة قبل الفاصلة المنقوطة، والكثير من الأمور غيرها.
أنا أعتقد في الواقع بأن فائدة هذا الأمر بالنسبة للمتمرسين أكبر منها للمبتدئين.
هنالك اعتقاد عام ساد السنوات الكثيرة الماضية بأن اللغات السهلة والبسيطة جيدة فقط للمشاريع الصغيرة والابتدائية، أما المشاريع الكبيرة فتحتاج للغات بمزايا أكثر مثل C وJava، لكن الكثير من الخبراء بدؤوا يكتشفون الآن بأن العكس تماما هو الصحيح، فاللغات التي تمتلك نقاط قوة معينة مكانها أمور محدودة تحتاج لمثل هذه القوة، مثل C التي يجب أن تستخدم في أماكن استراتيجية من البرنامج تؤدي إلى تحسين أداءه.
أما الغالبية العظمى من شفرات البرنامج فالأفضل أن تكون بلغة بسيطة تساعد على التقليل من عدد أسطر البرنامج وتعقيده، وبالتالي تسهل عملية إدارة شفرة البرنامج.
20/12/2005 @ 1:46 pm
أمل قال:
السلام عليكم
ارجو منك النصيحه انا الان اتعلم الاسيمبلي و اريد ان اعرف هل يجب على المبروج معرفه operating system لاني لست ماهره بهذا ولا اعرفه كيف يمكن ان يشتغل اللينكر و غيره
ارجو النصيحه كيف يمكنني ان اتعلمه لاني حاولت ولم استطع
^_^
20/12/2005 @ 7:45 pm
أحمد الهاشمي قال:
الأخت الفاضلة أمل ..
وعليكم السلام ورحمة الله وبركاته ..
بالنسبة لسؤالك، فالحقيقة هي أن دراستي للكمبيوتر ليست أكاديمية، لكن بشكل عام، ليس على المبرمج أن يعرف operating system أو تفاصيل إنشاء أنظمة التشغيل ليتعلم اللغة، لكنني أعتقد بأن دراسة الأمرين معا تساعد كثيرا، لأن هنالك الكثير من المفاهيم المشتركة بين الموضوعين.
بالإضافة إلى ذلك، فإن بعض التفاصيل في لغة أسمبلي تختلف على حسب معمارية المعالج ونوعه ونظام التشغيل أيضا، لكن في هذا الجانب عليك معرفة الأجزاء والتقنيات في أسمبلي المتعلقة بنظام التشغيل الذي تريدين استخدامه، وهذه التقنيات قد تكون مرتبطة ارتباطا وثيقا بالكيفية التي تعمل بها أجزاء نظام التشغيل الداخلية، لكن ذلك لا يعني بأن عليك معرفة هذه الأجزاء الداخلية.
أما بالنسبة للينكر، فيمكنك تعلم استخدامه دون الحاجة لدراسة تفاصيل أنظمة التشغيل.
25/12/2005 @ 9:20 pm
libre قال:
شكرا أخ احمد
اني اكتشف بايثون لأول مرة و سوف أجربه
هل لك بعض النصائح لي لكي أصبح مبرجا ناجحا و ماهرا
26/12/2005 @ 12:17 am
أحمد الهاشمي قال:
الأخ العزيز libre ..
خالص الشكر لك أخي العزيز، ونصيحتي لك هي أن تستمر في التعلم بالطرق التي تناسبك، والخطوات التي أفضل اتباعها شخصيا عند تعلم تقنية جديدة كالتالي:
1) متابعة آخر الأخبار لمعرفة التقنيات الجديدة وقراءة أمور مبدئية عنها.
2) الحصول على أفضل وأشهر كتاب حول هذه التقنية وقراءته كاملا قراءة سريعة (إذا كانت التقنيات جديدة فسيكون هنالك في الغالب كتاب واحد يشرحها فقط، لكن الجيد في هذا الكتاب أنه عادة ما يكون ممتازا).
3) قراءة كل ما يمكنك أن تقع عليه يداك حول هذه التقنية على الانترنت والاشتراك في كافة قنوات المعلومات المتوفرة عنها (في السابق كانت الطريقة الوحيدة هي أن تتذكر زيارة مواقع المقالات كل يوم، لكن RSS سهلت العملية كثيرا اليوم).
4) تعليم الآخرين عن هذه التقنية سواءا عن طريقة كتابة الدروس أو اعطاء المحاضرات أو الشرح الشفوي لأصدقاء مهتمين بالتقنية، وإذا لم تجد أيا من هذه الطرق فالطريقة السهلة والسريعة هي أن تشرحها لنفسك بصوت عال (تأكد من عدم وجود شخص في الجوار قد يشك في أهليتك عندما يسمعك تكلم نفسك).
5) ادخل في المنتديات والقوائم البريدية وقنوات المحادثة النصية (irc) المتعلقة التي تجتذب المبتدئين في هذه التقنية وحاول أن تساعدهم على حل مشاكلهم بها وتقارن الحلول التي تقدمها بالحلول التي يقدمها المتخصصون الآخرون.
6) وأخيرا (وهذه الخطوة صعبة نوعا ما وقد لا تنطبق على كافة التقنيات وهي ليست مهمة كثيرا)، حاول الدخول في عمق التقنية ودراسة التقنيات التي كانت موجودة في السابق والتي بنيت عليها هذه التقنية الجديدة ومعرفة تفاصيل كيفية عمل هذه التقنية الجديدة (مثلا: إذا كنت تريد تعلم Python فيمكنك تنزيل شفرة مترجم Python المكتوب بلغة C ومحاولة فهم الكيفية التي تعمل بها اللغة).
في أغلب التقنيات التي أتعلمها، أصل على الأقل إلى المرحلة الثالثة، وأحيانا إلى المرحلة الرابعة، أفضل لغة برمجة أتقنها على الاطلاق هي لغة PHP، وقد وصلت بها إلى المرحلة الأخيرة.
لكن تذكر بأن الدافع الوحيد للقيام بذلك هو الاهتمام الشخصي بالموضوع، فالمسألة ليس لها علاقة بالاحتراف، أنا أعتقد بأن أهم شيء في تعلم الكمبيوتر هو استخدام هذا العلم لانتاج أمور مفيدة، ويكفيك للقيام بذلك المرور بالخطوات الثلاثة الأولى فقط، أما الخطوات التي بعدها فستزيد من معرفتك بالتقنية، لكنها لن تساعدك على ايجاد منتجات أفضل جودة.
إذا أردت التعمق بأمر ما، فعليك بالتعمق في الأسباب التي تجعل البرامج الناجحة ناجحة، والبرامج الفاشلة فاشلة، وهذه الأسباب تتعطى نطاق التقنيات المستخدمة لانتاجها لتصل إلى مزايا هذه البرامج وكيفية عملها وكيفية تفاعل الناس معها والكيفية المستخدمة لتسويقها وبيعها أو تحقيق الأرباح من ورائها.
14/01/2006 @ 3:15 pm
طالبة جامعية قال:
السلام عليكم
لك جزيل الشكر أستاذنا الفاضل على هذه المقالة المفيدة
هل لك أن تنصحني بمواقع او تيتوريل لتعليم لغة البايثون حيث أنني على أعتاب التخرج من الجامعة وأعتزم على عمل مشروع التخرج بلغة البايثون.
ولك كل احترامي وتقديري
14/01/2006 @ 3:59 pm
أحمد الهاشمي قال:
الأخت الفاضلة طالبة جامعية ..
وعليكم السلام ورحمة الله وبركاته ..
خالص الشكر لك، وإن شاء الله أظل عند حسن ظنك.
بالنسبة للمواقع والـ tutorials فيمكنك الحصول على الكثير منها بالبحث عن python tutorial في Google ومن بين أفضل المصادر المتوفرة هذا الكتاب المجاني:
http://www.diveintopython.org
أما بالعربية فهنالك مستند “تعلم بايثون بكل سهولة” للأخ فهد السعيدي تجدينه هنا:
http://omlx.blogspot.com/2005/09/blog-post_13.html
مع تمنياتي لك بالتوفيق في مشروعك.
18/01/2006 @ 4:00 am
طاهر قال:
بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته الأخ الهاشمي
ما نسبة إحتمال تعلمي لهذه اللغة و إيجادتها كهواية بداية من الصفر لأني
و ببساطة لا ألمم المعرفة بأية لغة برمجة و ليس عندي على الأقل أي فكرة عن لغات البرمجة ككل…….كما أني لا أدرك ماهية لغات البرمجة و لا إستعمالاتها.
و شكرا
19/01/2006 @ 1:24 am
أحمد الهاشمي قال:
الأخ العزيز طاهر ..
وعليكم السلام ورحمة الله وبركاته ..
لغة Python في الواقع مأخوذة من لغة تدعى ABC طوّرت أساسا كلغة تعليمية لتعليم البرمجة للذين لم يبرمجوا من قبل في حياتهم، لذا فهي الممتازة كلغة أولى، فهي تتيح لك البدء في البرمجة مباشرة بعد تعلم أبسط المفاهيم وتعلم الأمور المتقدمة بعد ذلك بالتدريج لاستخدامها عند الحاجة فقط.
إذا كانت لديك رغبة صادقة لتعلم البرمجة، فستتمكن من تعلمها بلا شك، البرمجة دائما أصعب في البداية لأن هنالك الكثير من المفاهيم التي يجب تعلمها، لكنها هواية ممتعة بحق.
هنالك الكثير من المجالات الفرعية التي يمكنك الدخول بها بعد تعلم البرمجة وبالتالي فإنك لن تجد نفسك وقد استنفدت كل ما يمكنك القيام به بخصوص هذه الهواية، والأمر الرائع بها أيضا هو أنها غير مكلفة، فمهما تطورت الأمور، فإنك في أغلب الأحيان لن تحتاج سوى للوقت لتعلم الأمور الجديدة وجهاز الكمبيوتر التي تمتلكه، فلا حاجة لشراء معدات أو أجهزة أو غيرها.
وكما قلت في البداية فإن لغة Python ممتازة لذلك.
إذا واجهتك أية مشاكل في تعلمك لهذه الهواية الجديدة والرائعة فلا تتردد بسؤالي هنا أو عبر البريد الإلكتروني.
13/02/2006 @ 10:48 am
البـــاهر قال:
الف شكر ويعطيك الف عافية
14/02/2006 @ 5:41 pm
عربية قال:
السلام عليكم
لك جزيل الشكر على هذه المقالة المفيدة
أود الاستفسار عن لغة البايثون والديتابيس هل تتعامل مع mysql او ماذا
وكيف اقرا صفحة ويب بلغة البايثون هل لها صلة ب ال html او php
عذرا علي أثقلت عليك ولكنني محتاجة جدا لهذه الأجوبة
ولك كل احترامي وتقديري مع جزيل الشكر
14/02/2006 @ 6:43 pm
أواب قال:
السلام عليكم
لك جزيل الشكر على هذه المقالة المفيدة
أود الاستفسار عن كيفية ربط لغة البايثون والديتابيسmysql
ولك كل احترامي وتقديري مع جزيل الشكر
14/02/2006 @ 8:18 pm
أحمد الهاشمي قال:
الأخ العزيز الباهر .. خالص الشكر لك وإن شاء الله أظل عند حسن ظنك
الأخت الفاضلة عربية/أواب ..
وعليكم السلام ورحمة الله وبركاته ..
نعم، يمكن لبرامج Python أن تتصل بقواعد البيانات وتتفاعل معها، ويمكنك الحصول على وحدة Python التي تتيح ذلك:
http://sourceforge.net/project/showfiles.php?group_id=22307&package_id=15775
وهذه الوحدة، والتي تدعى MySQLdb متوافقة مع مواصفات DB-API 2.0، وهي مواصفات موحدة لاتصال Python بأنظمة قواعد البيانات المتخلفة، ويمكنك الحصول على المزيد من المعلومات حولها هنا:
http://www.python.org/peps/pep-0249.html
أما بالنسبة لسؤالك عن كيفية قراءة صفحات ويب بلغة Python فلم أفهم المقصود منه، فهل لك أن توضحين ذلك أكثر؟
15/02/2006 @ 6:56 pm
السيد قال:
السلام عليكم
لك جزيل الشكر على هذه المقالة المفيدة
كيف اربط ال apache مع python وهل احتاج الى Apache API
ولك كل احترامي وتقديري مع جزيل الشكر
15/02/2006 @ 7:47 pm
أحمد الهاشمي قال:
الأخ العزيز السيد ..
خالص الشكر لك أخي العزيز، وإن شاء الله أظل عند حسن ظنك.
بخصوص الربط بين Apache وPython، فذلك يتم بسهولة شديدة باستخدام وحدة Apache المسماة mod_python، ويمكنك الحصول عليها وعلى كافة تفاصيل كيفية استخدامها عبر الموقع الرسمي:
http://www.modpython.org/
16/02/2006 @ 11:03 am
عربية قال:
شكر جزيل لك أستاذنا الفاضل على تعاونك الكبير معنا جعله الله في ميزان حسناتك إن شاء الله
جزاك الله خيرا,, وعذرا إن أثقلت عليك بمزيد من الأشئلة إن أحتجت وأتمنى أن يتسع صدرك الرحب لنا
أتمنى لك التوفيق وبارك الله فيك
16/02/2006 @ 11:13 am
أحمد الهاشمي قال:
الأخت الفاضلة عربية ..
أنا في الخدمة، وإن شاء الله أظل عند حسن ظنكم.
16/02/2006 @ 5:25 pm
عربية قال:
أستاذنا الفاضل
بالنسبة لسؤالي عن قراءة صفحة ويب،، مثلا البرنامج الذي أعمل عليه أريد قراءة نتائج من عدة جداول موجودة على صفحة ويب،، فهل اتعامل معها كصفحة ويب html (هل للبايثون كودات للقراءة ب html) أو كقراءة من فايل،، أتمنى المزيد من التفصيل
وجزاك الله خيرا
16/02/2006 @ 8:47 pm
أحمد الهاشمي قال:
الأخت الفاضلة عربية ..
فهمت قصدك الآن.
نعم، بشكل عام يمكنك فتح أي ملف والقراءة منها، سواءا كان ملف html أو غيره، وذلك باستخدام الدالة open.
أما إذا لم تكن الصفحة مخزنة كملف على الجهاز وأردت فتحه من صفحة على الويب مباشرة، فيمكنك القيام بذلك باستخدام الدالة urlopen الموجودة ضمن مكتبة urllib.
بعد فتح الملف، تبقى خطوة استخراج المعلومات المطلوبة من بين بقية المحتويات ووسوم HTML وغيرها، ويمكن القيام بذلك بالاستعانة بالمكتبات المتخصصة في هذه الأمور مثل مكتبة HTMLParser وغيرها من المكتبات التي تجدينها تحت القسم 13 من دليل المكتبات.
وهنالك طريقة أخرى أيضا، وهي استخدام الطرق العامة للبحث في الملفات، والطريقة التي أفضلها شخصيا لمهمة مثل هذه هي التعبيرات القياسية regular expressions، على فرض أن الملفات التي تريدين استخدام المعلومات منها تمتملك نمطا ثابتا في شفرتها البرمجية، والمكتبة التي تحتوي على دوال التعبيرات القياسية في Python اسمها re.
يمكنك الحصول على المزيد من المعلومات حول كل واحدة من هذه الحلول عبر دليل مكتبات Python، وتجدين النسخة الأخيرة منه هنا:
http://docs.python.org/lib/lib.html
20/02/2006 @ 6:40 pm
جامعي قال:
السلام عليكم
لك جزيل الشكر على هذه المدونة المفيدة جدا
كتبت التعليق وكل مرة ما ادري ليش ما ينرسل بالطريقه الصح
ذكرت انه نستطيع قراءة كود html ب regular expression
ولكن انا لا اريد ان اقارن مباشرة اريد ان اقارن بين كود html في صفحة ويب وبين الدتا بيس mysql ب re.search واذا كان ما يصير ممكن ادلني على طريقة تصير
ولك جزيل الشكر
20/02/2006 @ 9:49 pm
أحمد الهاشمي قال:
جامعي ..
وعليكم السلام ورحمة الله وبركاته ..
لا أعرف ما هو سبب عدم ظهور تعليقاتك السابقة كاملة، يبدو بأنه بسبب حرف ما كتبته في التعليق، جرب وضع الشفرة البرمجية التي حاولت كتابتها بين علامتي اقتباس من علامات الاقتباس الصغيرة المائلة التي تكون على نفس الزر الذي يكون لحرف الذال بالعربية.
على أي حال، بالنسبة لسؤالك، فهو بحاجة لتوضيح أكثر، الـ regular expressions ليست للمقارنة بين نصين، بل هي للبحث عن مقطع ما في النص، فإذا كانت هنالك مثلا صفحة تحتوي على السعر الحالي لأحد أسهم البورصة، وكنت تريد عمل برنامج يقوم بجلب هذه المعلومة من الانترنت، فقمت بقراءة الشفرة البرمجية ووجدت بأنك محظوظ جدا بأن سعر السهم في تلك الصفحة هو الرقم الوحيد المحاط بوسوم الخط العريض (
<b>)، فيمكنك الآن كتابة regular expression يقوم بالبحث في الصفحة عن أي رقم موجود في هذه الوسوم، وسيكون شيئا قريبا من هذا التعبير القياسي:22/02/2006 @ 4:39 pm
السيد قال:
السلام عليكم
أشكرك جزيل الشكر على الردود الطيبة
أود الاستفسار بخصوص الموديول
>>> import MTSQLdb
Traceback (most recent call last):
File “”, line 1, in -toplevel-
import MTSQLdb
ImportError: No module named MTSQLdb
مع العلم أنا منزل MySQL-python-1.2.0, python24
ليش يطلع لي هالخطأ
وشكرا ومسامحة على كثرة الأسئلة
22/02/2006 @ 4:51 pm
أحمد الهاشمي قال:
الأخ العزيز السيد ..
وعليكم السلام ورحمة الله وبركاته ..
أنا في الخدمة أخي العزيز، وإن شاء الله أظل عند حسن ظنك.
الاسم الصحيح هو MySQLdb (مع ملاحظة حالة الأحرف الكبيرة والصغيرة)، فالاسم الذي كتبته به أخطاء.
22/02/2006 @ 6:28 pm
السيد قال:
السلام عليكم
أشكرك جزيل الشكر على الردود الطيبة
لا كان في خطأ في الكتابةلأن جربت اكثر من مرة وما صار أتمنى توضيح السبب
مع العلم أنا منزل MySQL-python-1.2.0, python24
ليش يطلع لي هالخطأ
>>> import MySQLdb
Traceback (most recent call last):
File “”, line 1, in -toplevel-
import MySQLdb
ImportError: No module named MySQLdb
وشكرا جزيلا
23/02/2006 @ 12:03 am
أحمد الهاشمي قال:
الأخ العزيز السيد ..
وعليكم السلام ورحمة الله وبركاته ..
هل لك أن تذكر لي الاسم الكامل لملف MySQL الذي قمت بتنزيله وتشغيله على جهازك؟
وهل لك أن تتأكد ما إذا كان هذا الدليل موجودا على جهازك:
C:\Python24\Lib\site-packages\MySQLdb
23/02/2006 @ 12:06 am
أحمد الهاشمي قال:
لاحظ بأن هنالك ثلاثة ملفات في الوصلة التي ذكرتها سابقا لتنزيل وحدة MySQLdb، الملف الذي تحتاجه هو MySQL-python.exe-1.2.0.win32-py2.4.zip، أما الملفان الآخران فأحدهما مخصص للاصدارة 2.3 من Python والآخر ملف الشفرة الذي يستخدم عادة لتركيب الوحدة في بيئة Linux.
23/02/2006 @ 10:14 am
أواب قال:
السلام عليكم
اشكرك جزيل الشكر ولكن عندي بعض الاستفسارات حول Mysql
ذكرت بأنه يجب أن اشغل ال Mysql ونزلت الفايلات الي قلته وجبكت في السي كل شيء اوكي وما يطلع لي الايرور الحين
بس استفساري شلون اشغله اروح الى الفولدر في وين اشغله ال Mysql وفي ارى التا بيس عقب
وشكرااااااااااااااااااااااا جزيلا
ومسامحة
23/02/2006 @ 11:35 am
أواب قال:
السلام عليكم
اشكرك جزيل الشكر ولكن عندي بعض الاستفسارات حول Mysql
ذكرت بأنه يجب أن اشغل ال Mysql ونزلت الفايلات الي قلته وجيكت في السي كل شيء اوكي وما يطلع لي الايرور الحين
بس استفساري شلون اشغله اروح الى الفولدر في وين اشغله ال Mysql وفي وين اشوف الديتا بيس عقب في اي فولدر لو في وين
وشكرااااااااااااااااااااااا جزيلا
ومسامحة
23/02/2006 @ 12:30 pm
أحمد الهاشمي قال:
الأخ العزيز أواب ..
كنت أقصد تشغيل ملف التركيب الذي تجده في هذا الأرشيف (MySQL-python.exe-1.2.0.win32-py2.4.zip)، ولكن بما أن الخطأ لا يظهر لك الآن، فذلك يعني بأن الوحدة مركبة الآن، ولا حاجة لتشغيل أي شيء.
23/02/2006 @ 5:29 pm
اواب قال:
السلام عليكم
شكرا جزيلا على الرد ولكن لم تجيبني بخصوص في وين اشوف الدتا بيس وشلون اعرف ان صار ليها create هل في كود معين اكتبه علشان اعرف ان صار create
وهذا هو الكود
import MySQLdb
Con = MySQLdb.connect(db=”courses”)
Cursor = Con.cursor( )
cursor.execute(”CREATE TABLE supporting (coursename TEXT, coursecode TEXT, credit INT)”)
connection
Results = Cursor.fetchall( )
Con.close( )
ايضا سؤال اخر بخصوص استخراج البيانات من وسوم ال اتش تي ام ال
قرأت بخصوص ال HTMLParser
لكن ما فهمت لأن يوجد الكثير من الفنكشنات ولم اعرف كيفية التعامل معها ممكن اذا سمحت وتفضلت تكتب كود في مو تعطيني سايت لأن مو قادر استوعب
24/02/2006 @ 10:41 am
أحمد الهاشمي قال:
الأخ العزيز أواب ..
وعليكم السلام ورحمة الله وبركاته ..
بالنسبة لمعرفة ما إذا كانت عملية CREATE قد تمت أم لا، فيكون عن طريق نظام التعامل مع الأخطاء والأوامر المتعلقة بها مثل try وexcept، اقرأ عن الموضوع في دليل استخدام Python أو في الكتب تحت عنوان Exception Handling.
بالنسبة لوحدة HTMLParser، فهنالك مقالة تتحدث عن نفس الأمر الذي تحاول القيام به، وهو استخراج المعلومات من ملف HTML، وهي تشرح الكثير من الطرق من بينها التعبيرات القياسية Regular Expressions وغيرها وتتحدث أيضا عن استخدام HTMLParser لهذا الغرض:
http://www.rexx.com/~dkuhlman/quixote_htmlscraping.html
28/02/2006 @ 6:29 pm
أواب قال:
شكرا جزيلا لتعاونك معي أستاذي العزيز
28/02/2006 @ 10:08 pm
أحمد الهاشمي قال:
أنا في في الخدمة، وإن شاء الله أظل عند حسن ظنك.
4/03/2006 @ 9:31 pm
أواب قال:
السلام عليكم
أستاذ أحمد عندي سؤال بخصوص regular expression
إذا عندي فايل مخزن في notepad وبغيت أقرأ معلومات منه شلون
يعني بكتب لك شنو في الفايل واذا ممكن تكتب لي طريقة الكود علشان اقدر اواصل بكتب جزء بسيط
هذا الي في notepad
Year/Semester:2001 / 1Number :20011186
Name :Awab naji ALI Alkmalee
السؤال شلون استخرج الرقم Number قيمته يعني الي هي 20011186 والاسم
يعني ابغي ب regular expression استخراج هالمعلومتين
اتمنى ان تفيدنا بالكود مالهم علشان اقدر اسوي الباقي
ومشكووووووووووووور
والله يعطيك الف عافية
4/03/2006 @ 10:35 pm
أحمد الهاشمي قال:
الأخ العزيز أواب ..
وعليكم السلام ورحمة الله وبركاته ..
ممكن توضح المقطع اللي حطيته كمثال، لأن بعض الأرقام والأحرف تداخلت ومو قادر أفهم الشكل الصحيح للملف، وإذا ترسل لي المقطع على نموذج (اتصل بي) في أعلى الصفحة.
بشكل عام، لفتح ملف استخدم الدالة open، وستعيد لك عنصر يحتوي على مجموعة من الدوال للتعامل مع محتويات الملف، من بينها الدالة read التي تعيد لك كافة المحتويات دفعة واحدة لتتمكن من وضعها في متغيرة، وبعد ذلك البحث عن المقاطع التي تريدها في هذه المتغيرة باستخدام دوال مكتبة re.
سأعطيك مثالا عمليا بعد أن ترسل لي المقطع منسقا بصورة صحيحة.
5/03/2006 @ 12:14 am
أحمد الهاشمي قال:
الأخ العزيز أواب ..
هذه الشفرة توضح الأمور التي ستحتاجها:
إذا كان فيها شيء مبهم، فسيسعدني أن أشرحه لك أكثر، هذه الشفرة تفترض بأن السطرين اللذين كتبتهما كمثال موجودين في ملف اسمه test.txt في نفس الدليل الذي يوجد به هذا البرنامج.
5/03/2006 @ 2:32 pm
أواب قال:
السلام عليكم
مشكور جدا على الرد
بس الكود يطلع لي هالخطأ
Traceback (most recent call last):
File “C:\Documents and Settings\123\Desktop\graduation-0506-22\uu.py”, line 5, in -toplevel-
number = m.group(1)
AttributeError: ‘NoneType’ object has no attribute ‘group’
ممكن تعطيني التعديل ومشكوووووووور
5/03/2006 @ 5:21 pm
أحمد الهاشمي قال:
الأخ العزيز أواب ..
وعليكم السلام ورحمة الله وبركاته ..
حياك الله أخي العزيز، بالنسبة للخطأ الذي يظهر، فهو يعني بأن الملف لا يحتوي على المعلومات منسقة بصورة صحيحة، تأكد من أن محتويات الملف مطابقة للمقطع الذي أرسلته لي عبر البريد الإلكتروني، وهو كالتالي:
5/03/2006 @ 6:58 pm
أواب قال:
السلام عليكم
مشكور استاذ احمد اشتغل عندي
بس ممكن تشرح لي هالمعنى في الكود الي كتبته
ابغي أذا ممكن تشرح لي هالمقطع:
5/03/2006 @ 7:13 pm
أحمد الهاشمي قال:
بالنسبة للمقطع الذي ذكرته، فالتعبير
\wالذي في البداية يقوم بمطابقة أي حرف، وعلامة الزائد (+) التي بعدها تعني مكررة لمرة أو أكثر، أي أن هذا الجزء الذي في البداية (\w+) يعني مجموعة من الأحرف، أما المقطع الذي بعد ذلك بين القوسين فهو يعني مجموعة من المسافات بعدها مجموعة من الأحرف، أما علامة النجمة التي بعد القوس فهي تعني بأن ما سبق مكرر صفر أو أكثر مرة (أي أنه اختياري)، فيكون ما يعنيه ذلك بالمجمل هو أن هذا الجزء من المقطع سيقوم بالبحث عن مسافة أو أكثر يتبعها حرف أو أكثر مكررة لعدة مرات، والهدف منها هو مطابقة بقية أجزاء الاسم مثل اسم الأب واسم الجد وهكذا.إذا كان الموضوع لا يزال غير مفهوم بالنسبة لك، فعليك بالبحث في الانترنت عن المزيد من المعلومات حول التعبيرات القياسية، وسأعطيك موضوعين تبدأ بهما:
http://www.arabbuilder.com/learn/lessons/regex/index.php
http://docs.python.org/lib/re-syntax.html
6/03/2006 @ 10:01 am
أواب قال:
مشكور استاذ أحمد
شرحك وافي وصارت الصورة واضحة
شكرا جزيلا
6/03/2006 @ 4:17 pm
أحمد الهاشمي قال:
الأخ العزيز أواب ..
أنا في في الخدمة، وإن شاء الله أظل عند حسن ظنك.
6/03/2006 @ 4:20 pm
أواب قال:
السلام عليكم استاذ احمد
عندي سؤال بخصوص new line \n شلون اعبر عنها بال regular expression
أنا قرأت عن \s ان هي تعبر عن الفراغات والاسطر الجديدة وتوضح لي بعد من الكود الي كتبته لي لكن انا استخدمته بس ما كانت تروح لي سطر جديد فمكن تخبرني شلون اروح لسطر جديد يعني ابغي اقرأ من سطر وبعدين من السطر الي وراه وهكذا
وشكرا على تعاونك الدائم معي
6/03/2006 @ 6:05 pm
أحمد الهاشمي قال:
الأخ العزيز أواب ..
السطر الجديد (new line) تعبر عنه بالفعل باستخدام \n، لكن لاحظ نقطة مهمة وهي وضع حرف r قبل النص الذي بين علامات الاقتباس، كما فعلت في الشفرة التي في الأعلى، والهدف من ذلك هو منع مترجم Python من تفسير \n على أنها رمز السطر الجديد، فتصل إلى معالج التعبيرات القياسية كما هي كشرطة خلفية وحرف n.
8/03/2006 @ 9:57 pm
أواب قال:
السلام عليكم استاذ أحمد
عندي سؤال بخصوص ال regular expression أنا استفدت من الكود الي عطيتين اياه في المثال الي طاف وطبقته عليه وصار لي بس الحين المشكلة صايرة أني أبغي انتقل بين الأسطر وطبقت \n بس بعد ما صار وهذا الفايل الي ابغي اقرأ منه :
Course قيمته :يعني الكورس في سطر وقيمته في السطر الي عقب وهكذا اسطر واجد في الفايل
ARAB131
ENGL059
MATH121
Course Name قيمته:يعني اسم الكورس في سطر وبعدين الباقي في الاسطر الي عقب ونفس الشي متكرر في الفايل :
CLASSICAL ARABIC LITERATURE
PREP ENGLISH FOR SCIENCE
CALCULUS & ANALYTIC GEOMETRY
credit قيمتها 0,3 في الاسطر الي عقب
grade: B+,B,C في الاسطر الي عقب
status : –
Repeated: 0,0,0
إذا ممكن تساعدني في طريقة الكود مالهم لأن حاول وما صار لي وهذي محاولاتي :
لأن هم صايرين في سطر وقيمتهم في الاسطر الي عقب واستخدمت \n بس ما صار
m = re.search(r’Course\n\t(\w+)*’, str3)
course = m.group(1)
print course
m = re.search(r’Course Name\n(\w+(\s+\w+))’, str3)
coursename= m.group(1)
print coursename
m = re.search(r’Credit\n(\d+)‘, str3)
credit= m.group(1)
print credit
m = re.search(r’Grade\n\s(\w+)*’, str3)
grade = m.group(1)
print grade
m = re.search(r’Status\n\t(\w+)*’, str3)
stat= m.group(1)
print stat
m = re.search(r’Repeated\n(\d+)‘, str3)
Rep = m.group(1)
print Rep
9/03/2006 @ 9:09 am
أحمد الهاشمي قال:
الأخ العزيز أواب ..
وعليكم السلام ورحمة الله وبركاته ..
ممكن توضح لي أكثر اللي تبي تحققه في هذي الشفرة بعد استخراج المعلومات؟ يعني اللي تبي تسويه هو انك تضع هذي المعلومات في قاعدة بيانات مثلا؟
لأن من الشفرة اللي شفتها، ما أعتقد انك تحتاج regular expressions بهذي الطريقة، بل الأفضل انك تسويه هو أنك تمر على الأسطر واحد تلو الآخر، وتسوي regular expressions تستخلص لك كل المعلومات عن كل سطر مرة واحدة، بدلا من استخلاص المعلومات عامودا تلو الآخر.
9/03/2006 @ 12:05 pm
أواب قال:
أستاذي العزيز
لقد ارسلت لك ايميل يوجد فيه الفايلات وقد اوضحت فيه الهدف من القراءة وأرجو أن يتسع صدرك لي..أتمنى أن تكون الصورة واضحة الآن
وجزاك الله خيرا
11/03/2006 @ 7:23 pm
عربية قال:
السلام عليكم ورحمة الله وبركاته
لدي سؤال بخصوص الarray
هذا هو البرنامج الذي كتبته
import re
import array
line1= []
arr= []
lines=[’apple2′,’banana3′,’orange5′]
for i in range(len(lines)):
if re.search(’apple|banana|orange’,lines[i]):
line1= lines[i]
m=re.split( ‘\D+’,line1)
k=re.split( ‘\d+’,line1)
print m
print k
fruit=k[0]+m[0]
print fruit
for i in range(len(fruit)):
print fruit[i]
وهذا output
['’, ‘2′]
[’apple’, ‘’]
apple
['’, ‘3′]
[’banana’, ‘’]
banana
['’, ‘5′]
[’orange’, ‘’]
orange
o
r
a
n
g
e
ينطبع ليي حرف حرف لكن اني ابغي الليست تنطبع كلها
شلون يعني fruit مو ليست؟؟ وما يتخزن فيها الفواكه كلها؟؟
وشكرا جزيلا
13/03/2006 @ 6:28 pm
عربية قال:
أستاذتا الفاضل
شكرا جزيلا لقد عرفت الخلل في برنامجي
مع تمنياتي لكم بالتوفيق
14/03/2006 @ 5:56 am
أحمد الهاشمي قال:
الأخوة أواب، العربية ..
أعتذر عن التأخر في الرد بسبب الانشغال.
الأخ العزيز أواب ..
هل وجدت الحل لمشكلتك أم أنها لا زالت موجودة؟
14/03/2006 @ 10:14 am
أواب قال:
السلام عليكم استاذ أحمد
لا المشكلة انحلت والحمد لله
مشكوووووووووور استاذي ما تقصر والله يعطيك ألف عافية
14/03/2006 @ 2:27 pm
أحمد الهاشمي قال:
وعليكم السلام ورحمة الله وبركاته ..
الحمد لله، أنا في الخدمة ولا شكر على واجب.
15/03/2006 @ 1:24 am
الفهد السعيد قال:
بسم الله الرحمن الرحيم
الاخ المحترم احمد الهاشمي
أسال الله ان ينور بصيرتك وان يزيدك من العلم الشي الكثير
اريد استفسر عن الفروق بين لغة السي والسي شاربولغة الفجوال بيسك
ولك مني جزيل الشكر ولامتنان
17/03/2006 @ 6:13 am
عــلاء قال:
السلام عليكم ورحمة الله وبركاته
أستاذً الفاضل لا أستطيع أن اجد كلامات شكر توفيك حقك على هذه
المعلومات المفيدة وهذه المساعدات التي تقدمها لكل من يرجوا مساعدتك.
ولا يسعني من القول إلا أن اقول وفوقك الله وزادك من علمه أكثر واكثر…
ــــــــــــــــــــــــــــــــــ
في البداية أواد ان أذكر انني قرأت مقال عن أفضل لغة للمبتدأ وعرفت انها بايثون
وعندما قررت أن اتعلم بايثون كتبت في محرك البحث فكان مقالك الوحيد الذي
ظهر . وعندما قرأته تفائلت جداً جداً …..
وكان هذا المقال الممتع هو اول ما قراته عن بايثون او كل الغات بصفة عامة.
وذهبت الي المصدر العربي الذي تفضلت وذكرته وقمت بقرائته ولكنني وجت
صعوبه في استيعابه بصفتي مبتدأ في هذا المجال.
فهل لي من مساعدتك ونصائحك شيئ يفيداً خصوصا واني
مصمم على تعلم هذه اللغة.
اتمنا من الله ألا اكون قد أثقلت عليك
وجزاك الله كل خير ووفقك لما يحبه ويرضاه.
17/03/2006 @ 1:54 pm
أحمد الهاشمي قال:
الأخ العزيز علاء ..
وعليكم السلام ورحمة الله وبركاته ..
خالص الشكر لك أخي العزيز، وإن شاء الله أظل عند حسن ظنك.
بالنسبة للصعوبة التي تواجهها في تعلم اللغة، فهي أمر طبيعي تماما، حتى مع لغة سهلة مثل Python، حيث أن تعلم أية لغة برمجة والسبب في ذلك هو الحاجة لتعلم الكثير من المفاهيم الجديدة المتعلقة بالبرمجة مثل المتغيرات والجمل الشرطية والحلقات وغيرها، وقد واجهت أنا أيضا المشكلة نفسها عندما تعلمت البرمجة لأول مرة.
الحل الوحيد لهذه المشكلة هو الاصرار والمثابرة وإعادة القراءة عدة مرات، إذا كنت تحس بأنك غير قادر على فهم أسلوب الكاتب الذي كتب هذا المستند، فقد تريد أن تجرب قراءة كتب أو مقالات أخرى، هنالك العديد من المقالات بالانجليزية عن لغات البرمجة سواءا بلغة بايثون أو غيرها.
بعض الأشخاص يتعلمون بصورة أفضل عن طريق الدورات التدريبية، فقد يكون ذلك مفيدا أيضا، أو ربما عن طريق البحث عن شخص قريب منك يعرف اللغة ومستعد للجلوس معك واعطائك دروس خاصة بها إذا كانت لديك القدرة على تحمل تكاليف ذلك.
الأمر الآخر الذي عليك أن تقوم به هو الممارسة والتجربة، فلا يكفي أن تقرأ الكتاب، عليك أن تقرأ وتطبق وتجرب بنفسك وتقوم أيضا بتنزيل البرامج من الانترنت وقراءة شفراتها لتفهم العلاقة بين الأمثلة البسيطة التي تقرأها في الكتب والمقالات والبرامج الحقيقية.
أتمنى لو كان لدي حل سحري لهذه المشكلة، لكن الحقيقة هي الحل الوحيد هو الاصرار والتكرار والممارسة.
17/03/2006 @ 11:11 pm
أحمد الهاشمي قال:
الأخ العزيز الفهد السعيد ..
خالص الشكر لك أخي العزيز، وإن شاء الله أظل عند حسن ظنك.
بالنسبة للفرق بين لغات سي وسي شارب وفيجوال بيسيك، فهنالك العديد من الفروقات في الواقع وفي عدة جوانب، لذا فإن السؤال الذي أريد أن أطرحه عليك في المقابل هو ما هي طبيعة البرامج التي تريد كتابتها؟
بشكل عام، لغة سي أصعب من ناحية التعلم، وأصعب من ناحية كتابة البرامج وأصعب من ناحية صيانة البرامج وأصعب من ناحية كتابة برامج آمنة وخالية من الأخطاء، لكن في المقابل البرامج التي تنتج منها تكون سريعة، كما أنها الخيار الوحيد في بعض الأحيان مثل البرامج التي تحتاج للتخاطب مع مكونات الجهاز مباشرة، ويمكن استخدامها في كل المجالات بما في ذلك كتابة برامج الويب، لكنها ليست الخيار المفضل، ولا أحد يستخدمها في مثل هذه المجالات عمليا، خاصة خلال السنوات الخمس الماضية.
لغة سي شارب قريبة من لغة سي من ناحية شكل الشفرة، لكنها تختلف عنها تماما في بقية من الأمور، ويفترض بأنها أفضل بكثير لكتابة البرامج الضخمة وتلك التي تحتاج لصيانة وتحديث مستمرين، لكن مشكلتها هي أنها مسيطر عليها بشكل كبير من قبل شركة مايكروسوف، وبشكل عام، فإن الخيار الوحيد الذي أمامك لتشغيل هذه البرامج هو في بيئة Windows، هنالك حلول أخرى بديلة تستخدم اللغة نفسها، لكن اللغة في النهاية طورت من قبل مايكروسوف وهي التي تتحكم بمستقبلها، وغالبية مبرمجي اللغة لا يعرفون سوى حلول مايكروسوفت، وهي لغة ممتازة لتطوير برامج سطح المكتب لبيئة Windows، وكذلك لتطوير برامج الويب باستخدام تقنية ASP.NET.
لغة فيجوال بيسيك قريبة جدا من سي شارب في كثير من الأمور، وهي أيضا من تطوير مايكروسوف، ولعل الفرق الوحيد بينها وبين سي شارب هو أن شكل شفرتها مختلف تماما، وأعتقد بأن السبب الوحيد لاستخدام فيجوال بيسيك هذه الأيام هو أن تكون لديك معرفة سابقة في اللغة، فقد كانت تملأ فراغا مهما بين البرمجة باستخدام سي++ التي كانت معقدة جدا، وبين استخدام الحلول الجاهزة الأقل مرونة مثل Access، لكن الأمور تغيرت خلال الفترة الأخيرة مع ظهور بيئة .NET ولغة البرمجة سي شارب، وأصبح الفرق بين فيجوال بيسيك وسي شارب مجرد أمر شكلي، وبما أن الجميع يستخدم سي شارب هذه الأيام، فلعل من الأفضل السير مع الجماعة والتركيز عليها.
18/03/2006 @ 1:49 am
عــلاء قال:
السلام عليكم ورحمة الله وبركاته
أشكرك استاذي الفاضل على مساعدتك ونصاحك .
با الفعل وكما قولت الحل الوحيد هو الاصرار والتكرار والممارسة فقد
حاولت وحاولت وفي كل مرة اراي بانني أصبحت ادرك الدروس شيء فشئ.
فجزاك الله كل الخير استاذنا الفاضل على ما تقدمه لنا من مساعدت.
اشكرك … اشكرك…. على هذا المقال الذي افادني كثيراً
18/03/2006 @ 2:05 pm
أحمد الهاشمي قال:
الأخ العزيز علاء ..
وعليكم السلام ورحمة الله وبركاته ..
حياك الله أخي العزيز، وإن شاء الله أظل عند حسن ظنك، وموفق إن شاء الله.
20/03/2006 @ 1:43 pm
عربية قال:
السلام عليكم
أود السؤال عن كيفيه الكتابة في فايل بشكل منسق أقصد هل هناك دوال معينة لتعين الكتابة في احداثيات معينة
ولك جزيل الشكر
20/03/2006 @ 4:20 pm
عربية قال:
لك جزيل الشكر قد عرفت الاجابة
21/03/2006 @ 8:09 pm
أحمد الهاشمي قال:
الأخت الفاضلة عربية ..
يسرني أنك عرفت الإجابة.
24/03/2006 @ 2:26 am
الفهد السعيد قال:
اشكر ك اخوي احمد واسال الله ان يجازيك خير الجزاء عما قلت
انا اريد الفروق بين لغة السي والسي شارب والفجوال بيسك من ناحية الخواص وكذالك كتابه if والكلاس لكل لغةوكذلك الفروق من جميع النواحي لاني عايز اكثر من عشرة فروق لكل لغة
اسال الله بمنه الكريم الا يحرمك الاجروان يسدد خطاك الى الابد
24/03/2006 @ 7:04 am
أحمد الهاشمي قال:
الأخ العزيز الفهد السعيد ..
لا شكر على واجب أخي العزيز، في هذه الحالة، سأقوم باعطائك بعض الوصلات وسأترك لك مهمة استخلاص الفروقات التي تريدها بالطريقة التي تريدها.
مقالة تشرح الفرق بين سي شارب وفيجوال بيسيك من مايكروسوف (قم بتنزيل ملف exe وشغله لتحصل على ملف Word يحتوي على المستند):
http://support.microsoft.com/?kbid=308470
بالنسبة للغة سي، فلم أجد شيئا جاهزا يقارن بينها وبين سي شارب أو فيجوال بيسيك، ولعل السبب هو الاختلافات الكبيرة بين هذه اللغات، لذا فإن عليك بذل المزيد من الجهد بقراءة ما يمكنك ايجاده على الانترنت عن لغة C ومقارنة ذلك بما تعرفه عن اللغات الأخرى.
إذا واجهت مشكلة في أمر محدد فسيكون من دواعي سروري أن أساعدك.
30/03/2006 @ 10:08 pm
عربية قال:
السلام عليكم
لدي سؤال بخصوص ترتيب الطباعة في الفايل مثلا اريد طباعة مجموعة كلمات كالتلي:
orange orange
banana yallow
بحيث يكون أول حرف من كل سطر في مثل الموقع
وشكرا جزيلا
30/03/2006 @ 10:11 pm
عربية قال:
لا أعرف لماذا لم تطبع المسافات التي بين الكلمات حيث أنه توجد مسافات بين orange و orange و banana و yellow وليس من الظروري تساوي طول الكلمات مثل
sawsan ali
mona batool
1/04/2006 @ 2:21 am
المهاجر قال:
الخ المحترم احمد الهاشمي
انت الرجل المناسب في الوقت المناسب
ارجو منك مساعدتي في كتابة اكواد بلغتي السي والسي شارب وتوضح الفرق بينهما
واتمنى لك التوفيق
1/04/2006 @ 2:29 am
المهاجر قال:
عفوا لغة السي++ والسي شارب
2/04/2006 @ 6:32 pm
أحمد الهاشمي قال:
عربية ..
وعليكم السلام ورحمة الله وبركاته ..
للقيام بذلك، عليك أن تقرر أولا عرض كل عامود من البيانات، وذلك يعتمد على الطول الذي تتوقعه للكلمات التي في العامود، ولنفرض أنك تريد أن يكون حجم العامود 20 حرفا مثلا، فإن ما تريد القيام به هو طباعة الكلمة التي في العامود الأول، وبعد ذلك وضع مسافات لاكمال عرض العامود إلى عشرين خانة، فإذا كان طول الكلمة الأولى 6 أحرف، فإن عليك إضافة 14 مسافة، وإذا كان 10 أحرف فعليك أن تضيف 10 مسافات، وهكذا.
هنالك طريقة سهلة للقيام بذلك وهي باستخدام نصوص التنسيق formating strings، وهو مفهوم قديم موجود منذ أيام C، وربما قبلها، وعليك أن تبحث في دليل التعليمات لمزيد من المعلومات عنها، لكنني سأعطيك شفرة على السريع، وسأستخدم بها المثال الذي ذكرته سابقا، والذي يكون فيه طول كل عامود 20 حرفا:
لاحظ بأن السحر كله يحدث في السطر الثاني، وما قمت به هو إنشاء نص التنسيق
%-20s%-20sوما يعنيه نص التنسيق هذا هو أن لديك سلسلتان نصيتان تريد عرضهما بجانب بعضها البعض وتريد أن تكمل طول كل منهما إلى 20 حرفا وأن يكون اكمال الطول بوضع مسافات على يمين السلسلة النصية، وبعد ذلك قمنا بتمرير السلسلتان النصيتان وهما الكلمتان مثل sawsan وali.2/04/2006 @ 6:37 pm
أحمد الهاشمي قال:
الأخ العزيز المهاجر ..
بالنسبة للفرق بين اللغتين، فهنالك مقالة هنا:
http://www.programmersheaven.com/2/ArtCSharp8
إذا كانت لديك مشكلة معينة في كتابة الأكواد فأخبرني بها وسأحاول مساعدتك قدر الامكان، لأنني لم أفهم طبيعة المساعدة التي تريدها بالضبط.
3/04/2006 @ 9:58 am
عربية قال:
لك جزيل الشكر أستاذنا الفاضل
4/04/2006 @ 6:20 am
أحمد الهاشمي قال:
حياك الله، أنا في الخدمة.
15/04/2006 @ 5:58 pm
أواب قال:
السلام عليكم
حبيت اسأل شلون اسوي interface الى لغة البايثون واذا ابغي يصير لي البرنامج Graphical شلون
وشكرا
15/04/2006 @ 11:44 pm
أحمد الهاشمي قال:
الأخ العزيز أواب ..
هنالك أكثر من طريقة للقيام بذلك، المكتبة التي أنصحك باستخدامها اسمها wxPython وتجدها على هذا العنوان:
http://www.wxpython.org/
وتجد في الموقع نفسه الكثير من المعلومات حول إنشاء برامج Python بواجهة رسومية.
16/04/2006 @ 11:12 am
أواب قال:
شكرا جزيلا
17/04/2006 @ 10:45 am
عربية قال:
السلام عليكم أستاذنا الكريم
أود الاستفسار عن كيفية تعريف تو دايمنشن اري لانواع مختلفة ارقام وحروف
مثلا لدي هذه المجموعة واريد تخزينها في اري
2apple,300,T
3orange,500,F
حاولت تعريفها كالاتي
arr=[][]
arr[0][0]=2apple
arr[0][1]=300
arr[0][2]=T
arr[1][0]=3orange
arr[1][1]=500
arr[1][2]=F
المشكلة في التعريف arr=[][]
حاولت تغير الى arr=(2,3)
أي ان 2 عدد الاسطر
و 3 عدد الاعمدة
ولكن يحصل خطأ أيضا
ولك جزيل الشكر
17/04/2006 @ 12:00 pm
أحمد الهاشمي قال:
الأخت الفاضلة عربية ..
في Python، لا توجد طريقة لتحديد حجم مصفوفة ما مسبقا، لأن بالامكان زيادة وانقاص حجمها عن طريق إضافة العناصر وإزالتها، فبالتالي لا يوجد معنى لتحديد حجم ثابت مسبقا.
ما يجب عليك القيام به هو وضع البيانات مباشرة في المصفوفة، والبيانات في المصفوفة يمكن أن تكون بأنواع مختلفة، فيمكنك أن تضعي في المصفوفة أرقاما أو أحرفا أو حتى مصفوفات أخرى، وهذه هي الطريقة التي تستخدم لعمل شيء شبيه، بأن تضعي مصفوفة داخل مصفوفة، هكذا مثلا:
20/04/2006 @ 11:27 am
أواب قال:
السلام عليكم
حبيت اسأل عن القراءة من الفايل ني مسوية هالطريقة:
filename = raw_input(’Enter a filename’)
fin = ope