Quantcast
Channel: وادي التقنية - تطوير التطبيقات
Viewing all 24 articles
Browse latest View live

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

$
0
0

أعني هنا بـ"موارد التنقيح": "كل ما يستخدمه المبرمج أثناء عملية التنقيح debugging باستثناء برنامج المُنقِّح debugger نفسه، مثل الملفات النصية أو الصور أو غيرها من الأشياء التي يعمل عليها البرنامج محل الاختبار".


و تفصيل هذا أنه حينما تُضيف خاصيةً جديدةً إلي برنامجك فمن المُستحسن أن تقوم باختبارها علي الفور لتري هل تعمل كما تحب أم لا، و بعد الانتهاء من هذا الاختبار فمن الخطأ أن تلقي بالأدوات التي صنعتَها لإجراء هذا الاختبار، يعني مثلاً لو أنك تختبر مترجماً compiler للغةٍ افتراضيةٍ ثم قمت باختبار خاصيةٍ جديدةٍ في اللغة عن طريق ملف كود مكتوبٍ بها، فمن الخطأ بعد إجراء تلك التجربة أن تلقي هذا الملف و ألا تحتفظ به لما بعد.

سبب هذا أنك فيما بعد سوف تحتاج إلي إجراء اختبار أفضل تسميته باختبار التوافقٍ العكسي backward compatibility test لتري هل التغييرات الجديدة التي صنعتَها في كود البرنامج قد تسببت في مشاكل مع الأكواد القديمة بما يؤدي إلي عدم عمل الخصائص القديمة التي أضفتَها للبرنامج بشكلٍ صحيح.و لو أنك احتفظتَ بملفات الاختبارات التي تُجريها لتستخدمها في كل مرةٍ تريد فيها الاطمئنان علي التوافقية العكسية فسيوفر هذا عليك كثيراً من وجع الرأس.

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


مقدمةٌ عن البرمجة الكائنية object oriented programming OOP

$
0
0

الشرح التالي هو تعديلٌ غير كبير لشرحٍ كنتُ قد كتبتُه لمجموعةٍ من زملائي في كلية الهندسة (في السنة قبل الأخيرة لنا فيها)، أشرح فيه نمط البرمجة المسمي بالبرمجة المَقُودة بالكائنات object oriented programming أو اختصاراً (البرمجة الكائنية). و قد وجدتُه بعد كل تلك الفترة التي نسيتُه فيها بسيطاً و ربما جيداً، فقلتُ أضعُه للناس ليستفيدوا منه. و ربما أقوم في المستقبل بإذن الله تعالي بتكملته و/أو التعديل فيه.


ماهية البرمجة الكائنية:

لكي نفهم ماهية و خصائص نمط البرمجة الكائنية oop paradigm يجب علينا أن نتفهم المثال التالي:

فلنفترض أننا نريد كتابة برنامجٍ يقوم بإنشاء خَمس حساباتٍ لخمسة أشخاصٍ في خمس شركاتٍ مختلفة، و يقوم بحساب مستحقاتهم المالية لدي كل شركةٍ بعد مرور ثلاث سنوات بمعرفة نسبة الربح السنوي المُعتادة من رأس المال. مع ملاحظة أن الكود سيكون بنمط البرمجة العادي (أي بدون استخدام الأصناف classes و الكائنات objects).


بملاحظة البرنامج السابق سوف نري أننا لتمثيل كل حسابٍ من الحسابات المالية استخدمنا متغيرين من نوع double:
الأول لتمثيل النقود التي يحتويها الحساب account
الثاني لتمثيل نسبة الربح profit
و تم تكرار هذا مع كل حسابٍ من الحسابات المالية، بالطبع مع تغيير أسماء المتغيرات للتمييز بينها.
إذاً فالسؤال المنطقي الآن: هل يمكنني كمبرمجٍ أن أختصر كل ذلك الكود ما دام الكثير منه مكرراً بالفعل ؟

و الجواب: نعم، و هذا هو نمط البرمجة الكائنية.
فكل ما نفعله في البرمجة الكائنية أننا نضم الكود الذي يُشكل مع بعضه وحدةً بنائيةً متكاملة (سواء أكانت متغيرات أم دوال) و نضعها في مكانٍ واحدٍ و نُطلق عليها إسماً مُعيناً، ثم نكتفي بعد ذلك بأن نأمر جهاز الحاسب بصنع نسخةٍ من ذلك الكود و نُطلق علي تلك النسخة إسماً خاصاً بها.
و بالتطبيق علي المثال السابق نري أن التقسيم الأَوَّلي لما سنحصل عليه سيكون كالتالي:

يمكن أن نُطلق علي الكود السابق إسم caccount اختصاراً لـcompany account و هو اسمٌ معبرٌ جداً عن وظيفته.

و في البرنامج الأساسي سنكتفي بطلب نسخ الكود caccount خمس مرات من مترجم اللغة بأسماء account1 account2  account3  account4  account5.


فماذا سيفعل الحاسوب بعد حجز أماكن لتلك الكائنات في الذاكرة ؟
سوف يقوم بعمل ما يلي تقريباً:




و بداخل كل وحدةٍ من الوحدات المحجوزة تُوجد المتغيرات الموجودة في الكود المُكرر الذي كتبناه من قبل و وضعناه جانباً.
و حينما نكتب في البرنامج:
account1.account
فإننا نعني المتغير account الذي هو من نوع double و المحجوز للنسخة المُسماة account1.
و هكذا مع:
account2.account
و غيرها.

و لو أردنا أن ننفذ دالة علي النسخة account1 بحيث تعملُ باستخدام متغيراتها الخاصة فإننا نكتب الكود التالي:
account1.methodname();
مثال:
account1.newaccount();

إلي الآن و الأمر مفهوم: يوجد لدينا كود مكرر في البرنامج فقمنا بكتابته مرةً واحدةً و أطلقنا عليه اسماً مُعيناً، ثم صنعنا منه ما نريد من نسخ.
و لكن هل هذا كل شيء ؟

لا.
فماذا لو أنني أردتُ إعطاء قيم ابتدائية للمتغيرات الموجودة داخل النسخ الجديدة في نفس سطر تعريف كل نسخةٍ منها، كيف يمكنني فعل هذا ؟
و ماذا لو أنني أردتُ منع الوصول المباشر للمتغيرات داخل النسخ، مثل الأمر:
account1.account = 1000;
و أردتُ أن تكون هذه المتغيرات متاحةً فقط للدوال الموجودة معها في الكود المُكرر فقط ؟
إلي آخر تلك الأسئلة التي تُوضح إجاباتُها خصائصَ نمط البرمجة الكائني.


سوف نقوم بتوضيح إجابات تلك الأسئلة فيما يلي، و لكن أولاً سوف نقوم بشرح المُصطلح العلمي المقابل لبعض الكلمات التي ذكرناها من قبل أثناء الشرح:




و لنجب الآن عن الأسئلة التي سبق و طرحناها.
أما كيفية إعطاء حقول البيانات قيماً ابتدائية في نفس جملة التعريف فيتم عن طريق ما يُسمي بالمُشَيِّد constructor، و هو دالةٌ لها نفس اسم الصنف class بدون أي نوعٍ من المُخرجات (ليس حتي void).
و ينقسم المُشَيِّد إلي نوعين:
- المُشَيِّد الافتراضي default constructor
- المُشَيِّد ذو المُدخَلات parameterized constructor

و هذا هو المثال السابق بالكامل (مع إضافة مُشَيِّداتٍ من ذوات المُدخَلات):

و يقوم البرنامج بحجز مكانٍ في الذاكرة للكائن الجديد ثم تنفيذ المُشَيِّد الافتراضي لو كتبنا ما يلي:
caccount account1 = new caccount();
و لاحظ عدم وجود قيم بين قوسي المُشَيِّد المُستدعَي.
بينما يقوم البرنامج بحجز مكان الذاكرة ثم تنفيذ المُشَيِّد ذي المُدخلات لو كتبنا ما يلي:
caccount account1 = new caccount(100, 1.0);
و لاحظ وجود قيمٍ بين قوسي المُشَيِّد المُستدعَي. و في هذه الحالة يكون:
account2.account = 100
account2.profit = 0.1

أما منع الوصول المٌباشر لحقول البيانات فيكون ببساطة بإعطائها الخاصية private عند تعريفها، مثل:
private double account;

و لو أننا قمنا بتعريف كل حقول البيانات الموجودة في الصنف و أعطيناها الخاصية private فسنجد أننا وصلنا إلي جعل الصنف أشبه بالكبسولة؛ حيث لا يُمكن الوصول لحقول البيانات إلا من خلال الدوال الموجودة في الصنف، و هو ما يُعرف بالكبسلة encapsulation.

و كذلك ينطبق مفهوم الكبسلة علي كود الدوال الموجودة داخل الصنف، حيث لا يُمكن للمستخدم في البرنامج النهائي أن يُغير من ذلك الكود، بل هو مجرد مستخدمٍ له فقط.

أين تتم كتابة الأكواد:

في هذه المرحلة نكون قد وصلنا إلي تصورٍ جيدٍ لمفهوم البرمجة الكائنية oop و كيفية الاستفادة منها في تصغير حجم البرنامج و حماية حقول البيانات من تدخل المستخدم النهائي، و لكننا حتي الآن لا ندري أين تتم كتابة كود الصنف الفرعي و أين سنكتب الكود الذي سيستخدم هذا الصنف ؟
و هذه نقطةٌ هامةٌ للغاية تختلف فيها لغات البرمجة؛ ففي لغة الـ++C مثلاً سوف نجد أننا سوف نستخدم ملفات الـheader files (أو ملفات التَرْويسَة ) لكي نكتب فيها كود الـصنف و يكون لها الامتداد (h.)، و سيكون علينا أن نكتب الكود بنفس طريقة الـ++C التي تشترط كتابة مُلخص الصنف specification ثم بعد ذلك يأتي كوده التفصيلي (أو ما يُسمي بالبناء implementation).
و كذلك فإنه يمكننا أن نكتب التلخيص في ملف ترويسة و البناء داخل ملف آخر له الامتداد cpp. مع كتابة الجملة التالية في بداية هذا الملف الجديد:
#include "caccount.h";
لجعل المُترجم يفهم أن الملفين مرتبطان ببعضهما البعض.
هذا بالنسبة للـ++C، أما في حالة الـjava فيمكننا كتابة كود الصنف في نفس ملف البرنامج الأصلي، أو في ملفٍ مستقل لكن بحيث:
يشتمل كل ملفٍ مستقلٍ علي صنفٍ واحدٍ فقط يماثله في الاسم، و بإمكاننا كتابة أصنافٍ أخري داخل ذلك الصنف الواحد.
يكون امتداد الملف المستقل(java.)

مفهوم الوراثة inheritance و علاقته بمبدأ إعادة الاستخدام:

بعد الانتهاء من كتابة برنامجٍ ضخم بنمط البرمجة الكائنية سوف نجد أنه قد تم كتابة عددٍ كبيرٍ من الأصناف المُستقلة التي سهلت علينا العمل و أسرعته بمعدلاتٍ فائقة.
لكن السؤال الحيوي هنا: هل يمكنني الاستفادة منها بصورةٍ أكبر ؟

بالطبع نعم؛ حيث يمكنني إعادة استخدام reuse هذه التصنيفات الموجودة عندي في كتابة برامجي الجديدة دون الحاجة إلي إعادة كتابة كودها مرةً أخري أي أنني أصنع مكتبتي الخاصة بي، تماماً كالمكتبات القياسية للغات البرمجة، حيث أن الأصناف التي نستخدمها في برامجنا التي نكتبها بتلك اللغات ليست إلا أكواداً قام بكتابتها متخصصون في شركة البرمجيات و أراحونا من عناء كتابتها منذ البداية.
و علي سبيل المثال لو أنني احتجتُ للصنف caccount أثناء كتابتي لبرنامجٍ جديدٍ بلغة الـ++C فسوف أقوم فقط بضمه للبرنامج بالعبارة:
#include "caccount.h";

و بذلك يمكنني استخدامه بمنتهي الحرية.

لكن ماذا لو أردتُ استعمال هذا الصنف مع إحداث بعض التغييرات فيه (كتابة حقول بياناتٍ إضافية، أو كتابة دوالٍ إضافية، أو حتي تعديل أكواد دوالٍ موجودةٍ من قبل) مع الاحتفاظ بهيكل و مكونات الصنف الأساسي كما هي، فما العمل ؟
الحل هنا يكمنُ في مفهوم الوراثة؛ فحينما أُخبر اللغة أنني أريد كتابة تصنيفٍ جديدٍ فلنفترض أنه new_caccount يرث الصنف caccount فإنه يكون مفهوماً لديها أن الصنف الجديد يحتوي علي كل حقول البيانات و الدوال التي يحتويها الصنف القديم مع وجود إمكانية التعديل كما سبق و شرحنا.
و تختلف اللغات فيما بينها في مدي و كيفية الوراثة: أهي وراثة متعددة multiple inheritance بما يعني أن الصنف الواحد يمكنه وراثة عددٍ غير محدودٍ من التصنيفات الأخري كما في الـ++C و الـeiffel، أم هي وراثة أُحادية أي أن الصنف لا يمكنه وراثة أكثر من صنفٍ واحدٍ فقط كما في لغات الـjava و الـ#C. و ربما نتحدث عن هذا بالتفصيل في شروحاتٍ قادمةٍ بإذن الله تعالي.

إلي هنا نكون قد أنهينا المفاهيم الأساسية في عالم البرمجة الكائنية، و لكن أشياء كثيرة للغاية ما زالت تنتظر و لكنها تتأثر بماهية اللغة التي سنبرمج بها، لذلك ستكون هذه الأشياء في الـ++C مختلفة الشكل و الخصائص عنها في الـjava و عنهما في الـ#C.
و منها:
- الواجهات interfaces
- الهياكل structs
- التعدادات enumerations
- الوسائط delegates
- الاحداث و تعهد الأحداث events and events handling
و غيرهن.

إطلاق Lazarus 1.0

$
0
0

بعد سنوات من التطوير المستمر والعمل الدؤوب على نسخة 0.9، أعلن فريق تطوير مشروع Lazarus عن وصولهم لمعلم مهم في مسيرة التطوير عبر وصولهم لنسخة 1.0 من بيئة التطوير المرئية لنسخة باسكل الحرة. لازورس هي بيئة تطويرية متكاملة لتطوير السريع للتطبيقات مستوحاة من بيئة Delphi IDE متعددة المنصات وتدعم عدة معماريات.


يمكن عن طريق لازورس إنشاء تطبيقات سطح مكتب قائمة بذاتهاذات ملف تنفيذي واحد لا يحتاج أية اعتماديات أو مكتبات خارجية، وتتحلى في مظهرها بالسِمة الأصلية في النظام، أيضا لـ لازورس مكونات مدمجة للتعامل مع مختلف قواعد البيانات، الشبكات، إنشاء رسوم بيانية، المدخلات والمخرجات.

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

لـ لازورس محرر رسومي يسمح بالهيكلة والتصميم السريع للتطبيقات، ومحرر آخر كتابي لبنائها، تمحيصها، وإصدارها.

المصدر: المجلة التقنية، بتصرف

نظرية (المُبرمِج المُحتال) !

$
0
0

المُبرمِجون المُخضرمون يعلمون أن للكسل فوائداً عديدةً في المجال البرمجي، لدرجة أنه نُسِبَ لـ(بِل قيتس bill gates) أنه قال أنه حينما يُريد أن يُوكِل مهمةً ما إلي أحدٍ فإنه يُوكِلُها إلي شخصٍ كسولٍ لأنه سيختار أسهل الطرق لفعلها !
و قديماً شاهدتُ محاضرةً عن فوائد الكسل عند المُبرمِجين، حيث أنه يدفعهم لكتابةِ كودٍ سهل غير مُجهِدٍ لهم و عملِ واجهة برمجة API سهلة و آمنة، و غيرها من الأمور الأخري.
و كذا فقد وَصفَ لينوس تورفالدز linus torvalds نفسَه بأنه يُحِب أن يستريح و يشرب مشروبه المُفضل بينما ينهمك الآخرون في العمل (بعد أن يقوم باجتذابهم للعمل معه بمهارةٍ حقيقية و أساليب تستحق التدريس).

حسنٌ: اليوم أريد أن أجعلكم تُلقون بهذه النظرية وراء ظهوركم و تنتبهوا لنظريةٍ أهم و أجمل منها و أكثر تفسيراً لما يجب أن يفعله المُبرمِجون كلهم بدون استثناء،
أيها السادة إنها نظرية (المُبرمِج المُحتال)



تقوم هذه النظرية علي الأسس و التشابهات التالية بين المُبرمِجين و الأفَّاقِين:

  • المُحتال يتحايل علي الناس لجعلهم يُنفذون ما يُريد منهم (في الأغلب لسلبهم أموالهم) بحيلٍ متنوعة، و بينما يَظنون أنهم يفعلون أموراً غير مترابطة و لا يُمكن لذلك الأفَّاق أن يؤذيهم بها أو يسطو علي جهودهم فإن كل النتائج تترابط في النهاية لتُعطِي المُحتال ناتجاً نهائياً يرغب هو فيه بقوة.
    و المُبرمِج كذلك يتحايل علي المُعالِج و نظام التشغيل (و ربما المُستخدِم) لجعلهم يُنفذون ما يُريد، بينما هم لا يرون إلا خطواتٍ غير مترابطةٍ أو متناسقة.
  • المُحتال ليس من النوعية المُزعِجة جداً بحيث يظل يتكلم و يتكلم حتي ينفلق دماغ من يجلس بجانبه، بل هو شخصٌ لبقٌ و قليل الكلام و لا يَنطق إلا بما فيه المصلحة و بالقدر الذي يحتاج إليه فقط.
    و المُبرمِج أيضاً يهمه أن يكتب أكواداً في غاية الإختصار بحيث لا يكون هناك أكوادٌ لا داعي لها و يُمكِن الإستغناء عنها. و بينما يُسمِّي الأفَّاق هذا "لباقة"يُطلِق المُبرمِج عليه صفتي "مقروئية readability"و "مكتوبية writability"، و لكن لا تنخدعوا باختلاف الألفاظ؛ فهذا لا يعني بالضرورة اختلاف المعاني.
  • المُحتال لا يملأ عينه إلا التراب (بدرجةٍ أكبر من بقية البشر)؛ فهو طَمَّاعٌ أبداً و دائماً، و كلما حاز شيئاً ما زَهِدَه و رغب في غيره مما هو أحلي و/أو أغلي، و المُبرمِج طَمَّاعٌ أكثر من الطمع نفسه؛ فكلما طَوَّر برنامجه نظر إلي مُستوَيً جديدٍ يرغب في إيصال ذلك البرنامج إليه.
  • المُحتال لا يَصلح لتحمل المسئولية لأنه يعتبر الدنيا كلها غنيمةً ينبغي نهبها، و المُبرمِج لا يصلح لتولي المسئولية لأنه يري الدنيا كلها شاشة حاسوب و كوب قهوة (أو شاي) ينبغي التفرغ لهما تماماً.



هل رأيتم ؟

لا تحتفل مبكراً

$
0
0

قاعدةٌ جديدةٌ من قواعد التنقيح debugging التي استفدتُها من خلال الواقع العملي هي ما يمكن تسميته بقاعدة (لا تحتفل مبكراً) أو (كن مُرتاباً)، بمعني أنه يجب ألا تفرح بإصلاح أي علةٍ bug من العلل قبل أن تتأكد من أنك قد حللتها بالفعل؛ فربما تظن أنك قد حللت تلك العلةً بشكلٍ نهائيٍ بينما لم تَحُل إلا حالةً واحدةً من الحالات التي تظهر فيها،

و هذا سيؤدي بك إما إلي الفرح بالإصلاح المزعوم و بالتالي تغفل عن الحالات التي لم تكتشفها لاطمئنانك المُتعجَّل، و من ثم قد تتحول حياة مستخدمي تطبيقك إلي جحيمٍ مستعر، كما أنه من الممكن أن يكون لإصلاحك للعلة الأولي آثارٌ جانبيةٌ أخطر منها و يجب تداركها بأسرع ما يمكن.
أو سيؤدي بك إلي الاكتئاب البالغ إذا ما اكتشفتَ بعد المهرجان الذي أقمتَه (خصوصاً لو كانت هي العلة التي تفصلك عن الإصدارة المستقرة) أن الأمور لا تزال تحتاج إلي عملٍ ربما يتضح أنه أكبر مما حللته بمراحل،
و هذا الاكتئاب قد يجعلك تُوقِف العمل فترةً غير هينةٍ لعدم قدرتك النفسية علي تحمل ضياع فرحة الانتهاء، أو علي الأقل سيجعلك تعمل و الضيق يملأ صدرك، و هو ما سيؤدي إلي قلة القدرة علي الابتكار بشكلٍ فادحٍ سيؤثر بطبيعة الحال علي عملك كله.

لذا فقبل أن تدخل في تلك الدوائر الجهمنية من الإحباط و الضيق و ضياع الوقت و التشتت الذهني: تأكد قبل إقرارك لزعم أنك قد حللتَ علةً ما مِن أنك قد غطيت كافة الاحتمالات التي قد تظهر فيها تلك العلة. و هكذا يمكنك أن تستمر في مسيرة عملك بذات الفكر اليقظ و النفسية المستقرة.

الإطلاق الرسمي لمشروع (البرمجة بإبداع)

$
0
0

بفضل الله تعالي أولاً و آخراً يسعدني أن أُعلن الإطلاق الرسمي لمشروع (البرمجة بإبداع) و الإصدارة الأولي من لغة البرمجة العربية الاحترافية إبداع بعد عامين كاملين من العمل بصمتٍ قدر الإمكان، و كان عامٌ كاملٌ منهما مُفرَّغاً تماماً للعمل علي المشروع بكل قوة،
و في المقال التالي تقديمٌ لفكرة المشروع باستفاضة:



***

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

و بالنظر إلي المجالات العلمية المختلفة سنري أن أكثر العلوم قابليةً للزرع فى الأرض الإسلامية هي العلوم البرمجية؛ لما تتمتع به من مُتطلَّباتٍ ماليةٍ أقل من التي تتطلبها باقي العلوم الأخرى، و خاصةً بعد نهوض حركة المصادر البرمجية الحرة التي وفَّرت لكل من هم على شاكلتنا ما يلزمهم من أدوات النهضة البرمجية بدون أي مقابلٍ مادي.
فتُوجَد أنظمة تشغيلٍ operating systems و مُترجِماتٌ compilers و مُفسِّراتٌ interpreters و مُنقِّحاتٌ debuggers و غيرهن من الأدوات المُندرِجة تحت تصنيف البرمجيات الحرة  free software، و يُمكِننا أن نستخدم كل ذلك  للوصول إلى الهدف الذي نرغبه من تحقيق النهضة العلمية بحيث لا تُكلِّفنا إلا أقل القليل مادياً حتى لا يُزعجنا أمر التمويل. و كذا لتوافر العنصر البشرى من المُبرمِجين و الخبراء في مختلف المجالات البرمجية (و إن غلب عليها المجالات ذات الطابع التجاري).

و ما دام الأمر هكذا فإنني أجد أن الوقت مُناسبٌ للدعوة إلى مشروعٍ أُريد من الجميع المشاركة فيه معى لتحقيق ما نتمناه لأمتنا و ديننا علمياً، فالمشروع الجديد الذي أطلقت عليه اسم (البرمجة بإبداع) هو النموذج الذي وضعتُه لكل ما تحدثت عنه في أمر النهضة البرمجية الإسلامية.
و خلاصة المشروع و الغاية منه هما: تزويد الأمة الإسلامية بكل الأساسيات التي تخص علوم الحاسب البرمجية باللغة العربية و على كل المُستوَيات، بدءاً من ترجمة أهم المنشورات التي تخص أساسيات مجال البرمجيات، وُصولاً إلى إنتاج لغات البرمجة العربية الحرة المُختلفة التي تُنافِس اللغات الأجنبية في قوتها و نُضجها، و ليس انتهاءا بصُنع نظم التشغيل العربية الحرة.

غايات المشروع:
و تفصيل غايات المشروع فيما يلي:

   * ترجمة و تأليف المُؤلَّفات الخاصة بالعلوم البرمجية الأساسية إلى اللغة العربية، و أقصد بالعلوم الأساسية: تلك العلوم المُتعلقة بـ: تصميم لغات البرمجة، و إنتاج المُترجِمات و المُفسِّرات و المُنقِّحات و كافة الأدوات البرمجية الخاصة بها، وُصولاً إلى إنتاج بيئات البرمجة المتكاملة integrated development environments، بل و وصولاً إلى ترجمة كل ما يتعلق بتصميم و إنتاج نظم التشغيل المختلفة.
    و لا أعني هنا الترجمة من اللغة الإنجليزية فقط، بل يجب الاهتمام بترجمة كل المُؤلَّفات الهامة التي تختص بالمجالات المذكورة بالأعلى (أو أي مجالٍ نهتم به فيما بعد) و إن لم تكن باللغة الإنجليزية، فلو كانت هناك رسالة دكتوراه أو ماجستير متميزة و كانت افتراضاً باللغة الألمانية فيجب أن يتم ترجمتُها، إلا أنه نظراً لأنه من المُعتاد أن يقوم المُتخصصون في المجال التقني باستخدام اللغة الإنجليزية فلا أظن أن مثل هذه الحالة سوف تحدث كثيراً.
    كما أن الوصول إلي مرحلة تتبع الأبحاث المُتميزة علمياً بلغاتٍ غير الإنجليزية سوف يأتي في مراحل غايةٍ في التقدم في المشروع، و حينما تترسخ أقدامه و يكون له مصادر تمويله الخاصة و كوادره العلمية المُتفَرِّغة.


  *  إنتاج مُنتَجاتٍٍ عربيةٍ تخص الأدوات الرئيسة في المجال البرمجي، بدءاً من لغات البرمجة العربية بمُختلَف أنواعها و انتهاءا بنظم التشغيل العربية بمُختلَف أنواعها. و أول المنتجات التي وصلت إلي مرحلةٍ متقدمةٍ هي لغة البرمجة العربية الاحترافية (إبداع)، و التي صُمِّمت لتكون لغةً احترافيةً تتمتع بأكبر كمٍ ممكنٍ من القدرات مع الحفاظ علي أصغر حجمٍ ممكنٍ و أبسط شكلٍ لقواعدها. و قد سُمِّي المشروع باسمه ذلك لأنه يعتمد اعتماداً تاماً علي لغة إبداع، و يعتبرها الأساس المتين الذي ستُبنَي عليه بقية منتَجاته.
    و الحديث عن إبداع و مميزاتها يطول جداً، لذا فالأفضل زيارة الصفحة الرسمية للمشروع (التي توَجد في آخر هذا المقال) لمعرفة المزيد عنها و تجربتها بشكلٍ عملي.


الدوافع:
و الأسباب وراء ذلك هى:

  *  عامل تقويةٍ للغة العربية:
    و ذلك باستخدامها في مجال العلوم البرمجية بتوسعٍ بالغ. و الغاية من ذلك جعل العربية جزءاً لا يَتجزأ من العلم البرمجي؛ لأن الاعتماد على الترجمة بدون نقل العلم نفسه إلى اللغة و الإسهام فيه باستخدامها ليس بالأمر الذي يحفظ اللغة من الانهيار، بل يؤخر حدوث ذلك فقط.
    أما حينما تُنتِج العلم بلغتك و تُطور فيه مُستخدماً إياها فإنك تكون حينئذ قد رسَّخت أقدام لغتك في المجال البرمجي بأقوى السبل؛ لأنك حينما تُنتِج علماًَ بلغتك و تُوثِّقه بها لن يكون على الراغب في تعلمه من بنى جلدتك استخدام لغةٍ أخرى في مُطالعته و/ أو نقده و/أو تطويره، و بالتالي ستكون كل الألفاظ التي تُستخدم من ثوب اللغة  نفسها لا رقعاً من لغةٍ أُخرى تُلصَق بلغتك لصقاً.


  *  تنشئة أجيالٍ مُسلمةٍ و/أو عربيةٍ قادرةٍ على البرمجة منذ الصغر:
    لوجود لغة برمجةٍ بلغة دينها و/أو لسانها، و الفارق كبيرٌ للغاية بين أن يتم تدريس البرمجة للأطفال بلغتهم مع البرمجة بلغة برمجةٍ أجنبيةٍ (إنكليزي بطبيعة الحال) و بين أن يكون التعليم و اللغة البرمجية نفسها عربيين مئة بالمئة.
    و عن تجربةٍ حقيقيةٍ أقول أن العلم إذا أصبح بِلُغتنا كان بإمكاننا الإبحار فيه بمنتهى البساطة و الوضوح، و سيكون تركيزنا على التحصيل الحقيقي للعلم و لن نُضيِّع الجهد و الوقت الغاليين في تحصيل أدواتٍ (مثل اللغة الأجنبية) ليست مرغوبةً في حد ذاتها، بل إن الهدف منها فقط أن تُمكِّننا من تحصيل العلم نفسه.
    و هكذا يُمكِننا التركيز على تعليم الأطفال فكرة البرمجة لا تحفيظهم الكلمات المحجوزة الخاصة بِلُغة البرمجة، و سنرى أن الأطفال سيتسابقون (فيما بعد) فيما بينهم بالألغاز البرمجية و حلولها، على العكس من الحالة الثانية التي سيتسابقون فيها بحفظ التلخيصات و أمثلة البرامج و القواعد لسكبها على ورقة الامتحان ثم نسيانها تماماً بعد ذلك !

  *  إعطاء الفرصة لربط المسلمين غير العرب باللغة العربية بشكلٍ أكبر:
    من خلال تحويل العلوم البرمجية إلي اللغة العربية فتُصبِح اللغة العربية بالنسبة لهم لغة دينٍ و تخصصٍ علميٍ في ذات الوقت، و هو المدخل المُتميز لربطهم بالدين بِصِلةٍ و وثيقة؛ و هذا الهدف يُعَد مِن أول الأهداف التي يجب أن يَسعى لها كل راغبٍ في النهضة بالأمة من جديد؛ فليس المسلمون كلهم من العرب، بل إن أغلبهم من غير العرب، و على أكتافهم كما على أكتاف المسلمين العرب تقع مسؤولية النهضة بالأمة من جديد، و ما دامت اللغة العربية تُشكِّل أمراً ضرورياً لا يتجزأ من الحياة الإسلامية فيجب أن يُبذَل أقصى الجهد في سبيل تقويتها عند غير العرب و جعلها لهم كما كانت بالنسبة لمُسلِمي الزمان الأول من العجم كالإمام محمد بن إسماعيل البخاري (صاحِب: صحيح البخاري) رحمة الله عليه قضيةً غير  قابلةٍ للنقاش أو الجدال حولها من الأصل ناهيك عن التخلي عنها.

  *  عاملٌ نفسىٌ هامٌ للغاية:
    يجعل من الحديث عن النهضة الشاملة و استرجاع مكانتنا الحضارية في كل الميادين الحياتية أمراً قوى الحجة إلى أقصى الحدود؛ فمادام الأمر قد نجح في علمٍ من العلوم (و خاصةً إذا كان علماً في غاية التطور مثل علوم الحوسبة) فهو قابلٌ للنجاح في كل العلوم، فقد أُثبِت أنه لا لغة للعلم و أن المهم هو الإنتاج العلمي لا اللغة التي يتم بها ذلك الإنتاج، على العكس مما يقوله دجالو هذا العصر من أن العلم: غربي الهوية، إنجليزي اللغة، و أن تغيير ذلك من المُحال.
    و بدلاً من المجال البرمجي فقط سنجد أن الإنتاج العلمي بالعربية قد توغل في باقي الميادين العلمية بدون استثناء، و رُوَيْداً رُوَيْداً سيأتي الزمن الذي يَستنكر طالب العلم فيه أن يَطلب العلم بِلُغةٍ غير اللغة العربية.


  *  البرهنة على سَفْسَطة القائلين بأن الالتزام بتعاليم الدين ضد العلم و الحضارة:
    حيث أن الأجيال المُحتَلة عقلياً تستغل الجهل المنتشر بين أهل الأمة، و الدجلَ و الشعوذةَ اللذين انتشرا في كل مكانٍ لتسيء للدعوة إلى الالتزام بتعاليم الدين الحنيف أبشع الإساءة. لذا فإن مثل تلك الدعوة للنهضة تُعَدُّ بمثابة الرد العملي على تلك الدعاوى البغيضة، فإذا ما أَمَرْنا بعدها بمعروفٍ أو نَهينا عن مُنكَرٍ و اتُّهِمنا بالتخلف: كان بإمكاننا ترك البرهان النظري و البرهنة بالواقع على العكس، و أن أنفع الناس للأمة هم المُلتزِمون فيها بتعاليم ربهم جل و علا، و أن أشد الناس إكثاراً في الحديث بدون جدوى و تثبيطاً لهِمَم أهل الحَلِّ و العَقْدِ هم مَن ناصبوا أهل الدين العداء و وقفوا في وجوههم.


***

لمعرفة كل ما يخص المشروع يمكنكم زيارة الموقع الرسمي له:

http://ebda3lang.blogspot.com/

 

لتحميل الكتاب الرسمي للمشروع (رسالة البرمجة بإبداع) بنسخته الـpdf المجانية، أو شراء نسخةٍ ورقيةٍ منه من صفحته علي موقع lulu.com (حينما يتم الانتهاء من رفعها)، ستجدون كل ما يخص الكتاب من معلومات و روابط علي الصفحة التالية:
http://ebda3lang.blogspot.com/p/blog-page.html

و لتحميل الإصدارة الأولي من (أُبْدِع) و هو المُفسِّر القياسي للغة إبداع، و/أو تحميل الكتيب الخاص بتعليم كيفية التعامل معه يمكنكم زيارة الرابط التالي:
http://ebda3lang.blogspot.com/p/blog-page_5.html

لمعرفة كيفية المساعدة في المشروع يمكنكم زيارة الرابط التالي و معرفة طرق المساعدة المُتاحَة حالياً:
http://ebda3lang.blogspot.com/p/blog-page_2244.html

الجدير بالذكر أنني شاركتُ بمشروع لغة البرمجة العربية إبداع في برنامج المسابقات العلمي (نجوم العلوم stars of science) في موسمه الرابع، و قد كنتُ من المتأهلين النهائيين الستة عشر، و لتفاصيلٍ أكبر حول مشاركتي في البرنامج يمكنكم قراءة مقالاتي عنها علي هذا الرابط:
http://afkar-abo-eyas.blogspot.com/search/label/نجوم العلوم الموسم الرابع
و مشاهدتي في فيديوهات البرنامج علي هذا الرابط:
http://afkar-abo-eyas.blogspot.com/search/label/فيديوهاتي

كبدايةٍ بسيطةٍ في مساعدتي في هذا المشروع: يمكنكم نشر هذا المقال علي أوسع نطاقٍ ممكن

من قواعد التنقيح: ملفٌ كاملٌ لكل مشروع

$
0
0

قاعدةٌ اخري من قواعد التنقيح debugging العملية، و لكنها هذا اليوم بسيطةٌ جداً و قد يجد الواحد منكم نفسه يراعيها بالفعل أو لا يحتاج إليها من الأصل.
الحكاية وما فيها أنه حينما تعمل علي مشروعٍ برمجيٍ ضخمٍ (مثلاً مُفسِّرٍ للغة برمجةٍ متقدمة) فيجب عليك أن تقوم بكتابة العلل التي تقابلها أثناء اختباراتك للبرنامج باستمرار و بأسلوبٍ واضحٍ مستفيض؛ حتي يمكنك الرجوع لها بسهولةٍِ فيما بعد لترتيب أولويات عملك في المراحل القادمة، و لتغطية جوانب النقص و حل المشاكل التي تظهر في عمل البرنامج.
هذا أمرٌ طبعيٌ، أليس كذلك ؟


كل الناس تدرك أهمية أن تكتب العلل التي تظهر في البرنامج لتسهيل حلها فيما بعد، لكن الذي قد يغفل عنه كثيرٌ من الناس و قد يسبب لهم في بعض الأحيان ارتباكاً غير مرغوبٍ فيه هو استخدام وسيلةٍ قوية و واضحةٍ لمعرفة العلل التي تم حلها من تلك التي لم تُحَل بعد، و التفرقة بينهما و بين العلل التي تم حلها بشكلٍ جزئيٍ علي أن يتم حلها بشكلٍ كاملٍ فيما بعد. و التدوين الشامل لكل هذا بحيث يسهل مراجعته و ترتيبه و تحديد الأولويات و الخطط المستقبلية من خلاله ببساطة.

حل هذا بالنسبة لي (و لخبرتي الصغيرة و وقتي الضيق) كان عمل ملفٍ خاصٍ أكتب فيه كل ما يتعلق بالمشروع (مثلاً: مُفسِّر أُبْدِع) من عللٍ و تطوراتٍ و أرقام إصداراتٍ و الربط بينها و بين الخصائص التي ستكون متوفرةً لكل إصدارة،
و اعتدتُ أن يكون الجانب الأيمن من ذلك الملف خاصاً بكل العلل و الخطط المستقبلية و الأمور التي أريد تذكرها بدون ترتيبٍ جيد، بحيث أكتب ما يخطر في ذهني مباشرةً قبل أن أنساه، لكني أقوم علي الناحية اليسري في كل فترةٍ بكتابة العلل التي سأقوم بحلها في كل فترةٍ من الفترات من بين تلك التي تملأ الجانب الأيمن،
و هكذا لم أكن أعتمد علي مجرد وُريقةٍ صغيرةٍ أُلصِقها علي الحائط بجانبي لتذكرني بما يجب عَلَيَّ عمله في الفترة التالية كما يفعل كثيرٌ من الناس، إنما كان لدي دفترٌ كاملٌ فيه قصة حياة كل إصدارةٍ من الإصدارات للمُفسِّر، و كذا فهو يحتوي علي معظم الخوارزمات الأساسية التي ابتكرتُها لأُبْدِع (إن لم يكن يحتوي عليها كلها) !

المشكلة هي أنه يجب التنبه عند استخدام أسلوبٍ مماثلٍ أنه قد ينسي الواحد منا تحديث معلومات العلل في مكانٍ من الأماكن حينما يُحدِّثها في الأماكن الأخري، و بالتالي يجد أحدنا أن هناك علةً ينبغي عليه إصلاحها و قبل البدء في العمل علي ذلك الإصلاح يكتشف عند التدقيق أنه قد حَلَّها بالفعل من قبل، و لكنه نسي أن يضع العلامة التي تدل علي هذا في مكانٍ من أماكن شرح العلة !
من الواضح أنها ليست مشكلةً ضخمةً جداً، و لكنها قد تكون خطيرةً إذا ما تكررت بحيث يُصبح المُبرمِج غير قادرٍ علي تحديد أي العلل تم حلها و أيها حُلَّت جزئياً و أيها لم تُحَل بعد، و حينما تتضارب بيانات العلل بين أرجاء الملف الخاص بالمشروع، و المصيبة الأكبر لو كان ذلك الملف قد تضخم في الحجم لأن الأمور تصير كابوسية.

لذا فبكل بساطةٍ: عَوِّدوا أنفسكم علي عمل ملفٍ كاملٍ لكل مشروعٍ "ضخمٍ"تعملون عليه حتي لا تضيع عليكم أيٌ من تفاصيله، و حتي يكون بإمكانكم العودة إليه بسهولةٍ لو حدث أن انقطعتم عنه لفترةٍ من الفترات، و لكن انتبهوا إلي جزئية تناثر بيانات العِلَل و الأماكن التي ينبغي تحديثها عند التعامل معها (سواءٌ بحلها أم بتأجيلها أم بخلافه).

ملفٌ كاملٌ لكل مشروع

قاعدةٌ اخري من قواعد التنقيح debugging العملية، و لكنها هذا اليوم بسيطةٌ جداً و قد يجد الواحد منكم نفسه يراعيها بالفعل أو لا يحتاج إليها من الأصل.
الحكاية وما فيها أنه حينما تعمل علي مشروعٍ برمجيٍ ضخمٍ (مثلاً مُفسِّرٍ للغة برمجةٍ متقدمة) فيجب عليك أن تقوم بكتابة العلل التي تقابلها أثناء اختباراتك للبرنامج باستمرار و بأسلوبٍ واضحٍ مستفيض؛ حتي يمكنك الرجوع لها بسهولةٍِ فيما بعد لترتيب أولويات عملك في المراحل القادمة، و لتغطية جوانب النقص و حل المشاكل التي تظهر في عمل البرنامج.
هذا أمرٌ طبعيٌ، أليس كذلك ؟



كل الناس تدرك أهمية أن تكتب العلل التي تظهر في البرنامج لتسهيل حلها فيما بعد، لكن الذي قد يغفل عنه كثيرٌ من الناس و قد يسبب لهم في بعض الأحيان ارتباكاً غير مرغوبٍ فيه هو استخدام وسيلةٍ قوية و واضحةٍ لمعرفة العلل التي تم حلها من تلك التي لم تُحَل بعد، و التفرقة بينهما و بين العلل التي تم حلها بشكلٍ جزئيٍ علي أن يتم حلها بشكلٍ كاملٍ فيما بعد. و التدوين الشامل لكل هذا بحيث يسهل مراجعته و ترتيبه و تحديد الأولويات و الخطط المستقبلية من خلاله ببساطة.
حل هذا بالنسبة لي (و لخبرتي الصغيرة و وقتي الضيق) كان عمل ملفٍ خاصٍ أكتب فيه كل ما يتعلق بالمشروع (مثلاً: مُفسِّر أُبْدِع) من عللٍ و تطوراتٍ و أرقام إصداراتٍ و الربط بينها و بين الخصائص التي ستكون متوفرةً لكل إصدارة، 
و اعتدتُ أن يكون الجانب الأيمن من ذلك الملف خاصاً بكل العلل و الخطط المستقبلية و الأمور التي أريد تذكرها بدون ترتيبٍ جيد، بحيث أكتب ما يخطر في ذهني مباشرةً قبل أن أنساه، لكني أقوم علي الناحية اليسري في كل فترةٍ بكتابة العلل التي سأقوم بحلها في كل فترةٍ من الفترات من بين تلك التي تملأ الجانب الأيمن، 
و هكذا لم أكن أعتمد علي مجرد وُريقةٍ صغيرةٍ أُلصِقها علي الحائط بجانبي لتذكرني بما يجب عَلَيَّ عمله في الفترة التالية كما يفعل كثيرٌ من الناس، إنما كان لدي دفترٌ كاملٌ فيه قصة حياة كل إصدارةٍ من الإصدارات للمُفسِّر، و كذا فهو يحتوي علي معظم الخوارزمات الأساسية التي ابتكرتُها لأُبْدِع (إن لم يكن يحتوي عليها كلها) !
المشكلة هي أنه يجب التنبه عند استخدام أسلوبٍ مماثلٍ أنه قد ينسي الواحد منا تحديث معلومات العلل في مكانٍ من الأماكن حينما يُحدِّثها في الأماكن الأخري، و بالتالي يجد أحدنا أن هناك علةً ينبغي عليه إصلاحها و قبل البدء في العمل علي ذلك الإصلاح يكتشف عند التدقيق أنه قد حَلَّها بالفعل من قبل، و لكنه نسي أن يضع العلامة التي تدل علي هذا في مكانٍ من أماكن شرح العلة !
من الواضح أنها ليست مشكلةً ضخمةً جداً، و لكنها قد تكون خطيرةً إذا ما تكررت بحيث يُصبح المُبرمِج غير قادرٍ علي تحديد أي العلل تم حلها و أيها حُلَّت جزئياً و أيها لم تُحَل بعد، و حينما تتضارب بيانات العلل بين أرجاء الملف الخاص بالمشروع، و المصيبة الأكبر لو كان ذلك الملف قد تضخم في الحجم لأن الأمور تصير كابوسية.
لذا فبكل بساطةٍ: عَوِّدوا أنفسكم علي عمل ملفٍ كاملٍ لكل مشروعٍ "ضخمٍ"تعملون عليه حتي لا تضيع عليكم أيٌ من تفاصيله، و حتي يكون بإمكانكم العودة إليه بسهولةٍ لو حدث أن انقطعتم عنه لفترةٍ من الفترات، و لكن انتبهوا إلي جزئية تناثر بيانات العِلَل و الأماكن التي ينبغي تحديثها عند التعامل معها (سواءٌ بحلها أم بتأجيلها أم بخلافه).

مرحلة الدراسة الجامعية..

$
0
0

تحذير: هذه المقالة من الممكن أن تغير مسارك المهني والأكاديمي من الأسوء إلى الأفضل أو العكس. إذا كنت على عجل أو أمامك العديد من الأعمال لتنجزها فلا تقرأ هذه المقالة الآن لأنها طويلة وتحتاج إلى تفرغ ذهني مسبقا لاستيعاب المعلومات التي ستغير مستقبلك. ننصحك بحفظها والعودة إليها لاحقا لتقرأها مع فنجان من القهوة.

 

ملاحظة: (بدأت بكتابة أجزاء من هذه المقالة كردود لعدة أسئلة وردت إلي من بعض الطلبة الجامعيين..)

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

القرصنة..

بادئ ذي بدء ، علينا أجابة السؤال التالي: ما هي الأمور التي يجب عليك القيام به أثناء دراستك الجامعية لتصبح هاكرا جيدا؟ هناك أمران أساسيان عليك القيام بهما: أولا أن تصبح مبرمجا محترفا ، وثانيا أن تتعرف على العديد من المشاكل الممكن مصادفتها أثناء البرمجة. في الحقيقة الأمران في الأصل ليسا إلا أمرا واحدا ، لأن كل واحد في النهاية سيقودك للآخر..

أيضا ولكي تكون مبرمجا جيدا عليك أن تعمل بجهدعلى مشاكل صعبة.والسبيل إلى ذلك هو الاشتراك ضمن فريق في مشروع برمجي يتطلب الكثير من العمل الجاد والمضني..

طبعا من النادر أن تكون مثل هذه المشاريع أحد مشاريعك الدراسية. فعلى سبيل المثال ، تعلم زميلي روبرت الكثير من خلال اشتراكه في كتابة برنامج في الشبكات أثناء دراسته الجامعية. وأحد المشاريع التي عمل عليها هو ربط جامعة هارفرد ب Arpanet (المشروع الأساس الذي استبدل لاحقا بشبكة الانترنت) ، لقد كانت أحد الوصلات الأولية حينها ولكن وبحلول عام ١٩٨٤ توقفت عن العمل. لم يقتصر الأمر على أنها [1] لم تكن أحد مشاريعه الجامعية ولكن بسبب قضائه جل وقته على المشروع أهمل دراسته الجامعية مما أدى إلي فصله عن دراسته الجامعية لعام كامل. (2) في نهاية المطاف أستطاع تسوية الأمر وهو الآن أستاذ في معهد ماساتشوستس للتكنولوجيا MIT. ولكنك وبلا أدنى شك ستكون أكثر سعادة إن لم تصل الأمور بك إلى هذا الحد ، ومن المؤكد بأنه عاش فترات من الضيق والضغط النفسي..

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

يعتبر أساتذة الجامعة من الناس الأذكياء نسبيا. لذا يعتبر التطوع والعمل كمساعد باحث (research assistant) من أفضل الطرق للارتباط بعمل ممتع ومفيد. يهتم الأساتذة بشكل خاص بالطلبة الذين تكون لديهم قدرة خاصة على حل المشاكل المتكررة والمتعلقة بإدارة النظم ، لذا تعتبر هذه الفرصة من الفرص السهلة لكل باحث عن المغامرة في هذا المجال. لذا عليك أن تظهر لهم بأنك ستحقق زيادة في ناتج العمل الكلي لأنه من النتائج الحتمية لوجودك وإلا أصبح وجودك لا طائل منه ، لذا عليك أن تظهر هذه النتيجة لهم..

لا تنحبط في حالة تم رفضك في المرة الأولى ، ولا تأخذ مسألة عدم قبولك بصورة شخصية أبدا وإنما أكمل مشوار حياتك وفكر في المرحلة المقبلة.. (الأمر ينطبق في حالات الخطوبة أيضا!!).

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

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

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

عند العمل على مشاريعك الخاصة بك هناك العديد من الأمور التي لا تحتاج أن تقلق حيالها كالقلق من حداثة الفكرة (كما يفعل الباحثون الأكاديميون) ، أو القلق من مدى الربحية التي سيحققها البرنامج (كما تفعل المؤسسات التجارية). كل ما يهمك من مشاريعك الخاصة هو مدى صلابة هذا المشروع من الناحية التقنية وخلوه من أي تعارض مع فكرة البرنامج الأساسية. التطبيقات "الجادة"مثل قواعد البيانات غالبا ما تكون معقدة ومملة من الناحية التقنية (إن كنت تعاني من الأرق بأي حال من الأحوال ، حاول قراءة الكتب الاختصاصية في مجال الشبكات ومالها وما عليها) ، بينما غالبا ما تكون التطبيقات "الطائشة"كالألعاب مثلا بالغة التطور والتعقيد.. أنا على يقين بأن هناك العديد من الشركات المتخصصة في مجال إنتاج الألعاب في السوق تعمل على منتجات ذات محتوي فكري راقي أكثر من تسعة أعشار البحوث المكدسة على أرفف أقسام علوم الحاسب الألي بالجامعات..

لو رجع بي الزمن إلى الوراء قليلا وكنت في الكلية لكنت على الأرجح أعمل في الرسوميات: تصميم لعبة استراتيجية على سبيل المثال ، أو تصميم أداة للرسوم المتحركة الثلاثية الأبعاد. في الوقت الذي كنت فيه طالبا لم تكن هناك إمكانيات كافية لجعل الرسومات والتصميم الجرافيكي مثيرة للاهتمام ، ولكن من الصعب تصور أي شي الآن أكثر متعة للعمل عليه أكثر من هذا المجال..

الرياضيات

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

في الواقع فإن مقدار ما تحتاج معرفته من العمليات الحسابية في البرمجة هو أقل بكثير مما يرغب معظم التخصصات الجامعية الاعتراف به. لا أظن بأنك ستحتاج إلى أكثر من القوانين التي تدرس في المدارس الثانوية بالإضافة إلى بعض المفاهيم الحسابية المتعلقة بالحاسب الألي والعمليات البرمجية. (عليك معرفة ماهية خوارزمية ٢^ن إن كنت ترغب في تجنب كتابتها.) كل ذلك ينتفي بطبيعة الحال أن كنت تخطط لكتابة تطبيقات وبرامج حسابية ، فعلى سبيل المثال برمجة الروبوتات كلها عمليات حسابية بحتة..

ولكن في حين أنك لا تحتاج فعليا إلى هذه القوانين بالنسبة إلى أغلب أنواع البرمجة ، ولكن معرفة ألف حيلة وحيلة أمر لا بأس به تساعدك في التمييز بين الصيغ الرياضية. بغض النظر عن كل ما سبق فيعتبر الإلمام بالقوانين الحسابية أمرا يستحق الدراسة إلى حد كبير حيث يعتبر مصدرا قيما للاستعارات لأي عمل من الأعمال ترغب في القيام بها. [3]. وبكل صراحة كنت أتمنى لو أني تعمقت في دراسة القوانين الرياضية أثناء دراستي الجامعية بصورة أكبر لهذا السبب.

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

واحدة من أهم الأشياء التي يمكن القيام بها أثناء دراستك الجامعية هو دراستك عن ماهية الرياضيات وما يعنيه حقا هذا التخصص. قد لا يكون هذا من السهولة التي تتصورها لان الكثير من النابغين في هذا المجال يعتبرون من أسوء المعلمين. وبينما هناك العديد من الكتب المشهورة في علوم الرياضيات ، قلة منها ما يحقق الفائدة المرجوة ، ومن أفضل ما يمكن أن يخطر على بالي الان كتاب W. W. Sawyer's و بلا شك كتاب Euclid. [4].

كل شي..

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

ولكن ما الذي نعنيه عندما نقول "كل شي"؟؟ بالنسبة لي ، كل شي يعني كل ما يصادفه ويتعلمه الإنسان أثناء عمله بكل جدية وإخلاص على حل مشاكل صعبة.. جميع هذه الأعمال تميل إلى أن تكون ذات صلة بطريقة أو بأخرى ، حيث في الكثير من الأحيان يمكن تطبيق أفكار وتقنيات أحد التخصصات في تخصص أخر بكل سهولة ويسر، حتى في بعض التخصصات التي تبدو من الوهلة الأولى أنها بعيدة كل البعد.. فعلى سبيل المثال فأنا أقوم بكتابة هذه المقالات بنفس الطريقة التي أتبعها عند كتابتي لبرامجي. كل ما في الأمر أنني أكتب نسخة سريعة دون توقف في التعديل أو المراجعة ، بعدها أقضي الأسابيع تلو الأسابيع في إعادة كتابتها بالصورة الملائمة والتنقيح عليها بالحذف والإضافة وكل ما يتطلبه مني أخراجها بالصورة الملائمة.

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

العلوم الإنسانية لم تكن أكثر حظا هي كذلك بسبب تأثرها الملحوظ بالموجات الفكرية الرائجة في ذلك الوقت. فعلى سبيل المثال لو ألتقى فيزيائي بزميل سابق له من ١٠٠ سنة ، فمن الممكن أن ينقل إليه الكثير من الاكتشافات والقوانين الجديدة. ولكن تخيل لو أجتمع أحد علماء النفس بزميل سابق من ١٠٠ سنة؟ كل ما سيفعلونه هو إقحام أنفسهم في نقاشات أيديولوجية لا تسمن ولا تغني من جوع. نعم وبطبيعة الحال هناك فائدة بلا أدنى شك من دراسة أحد مواد علم النفس. الفكرة التي أريد أن أركز عليها هنا هو بأنك ستستفيد بكل تأكيد وستتعلم الكثير من خلال أخذ مواد من تخصص أخر غير مواد تخصصك والخيارات المطروحة أمامك لا تعد ولا تحصى..

التخصصات الجديرة بالاهتمام من وجهة نظري هي الرياضيات والعلوم والهندسة والتاريخ (بالأخص التاريخ الاقتصادي والاجتماعي وتاريخ العلوم..) والهندسة المعمارية والفنون القديمة. من المجدي بكل تأكيد أخذ مادة "مقدمة في تاريخ الفنون."دراسة الأدب الحديث كذلك من الجوانب المهمة ولكن الوسيلة الوحيدة لمعرفة ذلك هو القراءة والاطلاع وإن كنت من عشاق المكتبات فلن تكون بحاجة لمثل هذه المادة. أما علوم الفن والموسيقى فلا أستطيع أن أفتي فيها لأنني لا أملك الخلفية الكافية في هذا المجال..

يمكنك تجاهل دراسة العلوم الاجتماعية والفلسفة والتخصصات الأخري المشابهة والتي أنشئت مؤخرا استجابة للضغوط السياسية. العديد من هذه التخصصات تناقش الكثير من المشاكل الهامة بكل تأكيد ولكن المشكلة تكمن في طريقة طرح ومناقشة هذه المشاكل. كل ما أستطيع قوله بأنها أمر لا طائل منه. فعلى سبيل المثال ، تناقش الفلسفة ، من بين الأمور الأخرى ، عن واجباتنا تجاه الأخرين ولكن لو نظرت إليها بصورة جدية يمكنك أن تتعلم الكثير عن هذا من أمرأة حكيمة أو قراءة لكتب E. B. White أكثر من أي أستاذ أكاديمي.

وأنا أتكلم هنا من تجربة. حيث ربما ينبغي علي أن أشعر بالإساءة عندما يستهزئ الناس بكلينتون لقوله "كل ذلك يعتمد على تفسيرنا لمعنى كلمة "is"". حيث أخذت ما يقارب من ٥ مواد أثناء دراستي الجامعية شغلها الشاغل تفسير هذه الكلمة.

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

في حالة طبقت نفس هذا الأسلوب ستحصل على نفس الإجابة التي ذكرتها قبل قليل تقريبا..

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

تعتبر علوم الفن ودورات الكتابة الابداعية من الأمور التي تحتوي على العديد من القيم. عادة لا تحصل على الكثير من التدريس في هذه المواد ولكنك عليك القيام بالعمل (أو عدم القيام بشيء) بنفسك في أي أمر تختاره ، وتقضي ما تبقى من وقت في تقديم انتقادات وملاحظات على ابداعات بعضكم البعض تحت أشراف استاذ المادة. ولكن تعتبر الكتابة والفن على حد سواء من التخصصات التي تعتبر صعبة وهناك (قلة) من الناس يعملون فيها بكل أخلاص تجعلها تستحق الجهد المبذول عليها وخاصة أن توفقت في العثور على معلم جيد..

الوظيفة

بالطبع على طلاب الجامعة التفكير في أمور أخرى أكثر من مجرد الدراسة ومن المشاكل العملية التي على طلاب الجامعات التفكير بها بصورة جدية: الوظيفة وتكملة الدراسات الجامعية العليا.

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

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

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

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

فالبرامج التي ستضطر إلى كتابتها في قاعات الدراسة تختلف عن تلك التي ستكتبها في العالم الحقيقي في ثلاث نقاط رئيسية:

١. في العادة تكون برامج صغيرة نسبيا

٢. عليك البدء في كتابتها من الصفر.

٣. تكون المشكلة المزعم حلها في الغالب اصطناعية ومحددة مسبقا.

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

لا يتحتم عليك بكل تأكيد التخرج من الجامعة (أو حتى دخول الكلية) لتعلم هذه المهارات. وإن كنت تريد معرفة كيفية التعامل مع البرامج البرمجية الموجودة بالسوق على سبيل المثال عليك المساهمة في المشاريع المفتوحة المصدر. وسيحوز هذا العمل على إعجاب مديرك بصورة مماثلة لإعجابه بالدرجات الجيدة.

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

أي نوع من المشاكل التي ينبغي عليك حلها؟

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

التعليم ما بعد الجامعي

ماذا عن إكمال تعليمك ما بعد الجامعي؟ هل من الأفضل لك أن تلتحق ببرنامج مماثل؟؟ وكيف تختار الخيار المناسب أو الكلية المناسبة لك؟؟

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

لذا إذا كنت مهتما وبشكل رئيسي في البرمجة والتحقت ببرنامج الماجستير ، ستجد الكثير من الطلبة الآخرين مثلك ملتحقين بمجال غير ملائم لهم. وإذا كان نصف من حولك مرتبطين بمجال غير ملائم ، فهل أنت حقا مثلهم؟؟

هناك مشكلة أساسية في قسم "علوم الحاسب الآلي"وتظهر جلية في مواقف مماثلة. حيث لا يوجد من هو متأكد مما يفترض أن يعنيه مصطلح "البحث العلمي"أن يكون. وهناك الكثير من البحوث عبارة عن أكواد برمجية ولكن عليك صياغتها عنوة على شكل بحث علمي أكاديمي لتضيف شيئا ما إلى حصة البحوث العلمية المنشورة بالمجلات المحكمة.

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

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

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

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

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

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

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

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

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

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

الملاحظات:

١. على ما يبدو أن أحدا لم يلق له بالا في ذلك الوقت مما يدل على عدم أهمية Arpanet (والذي أصبح بما يعرف بالانترنت حاليا).

٢. ولهذا السبب عندما أصبحت مالك لمؤسستي الخاصة ، لم يكن يهمني مستويات موظفيي الاكاديمة (GPAs). في الحقيقة ، إننا نسعى إلى استقطاب الكثيرين ممن فشلوا في دراستهم الأكاديمية. في مرة من المرات وضعنا لافتات حول جامعة هارفرد تحمل الشعار التالي: "هل تم طردك مؤخرا من أروقة الجامعة لعدم مقدرتك في الحصول على الدرجات المطلوبة لانشغالك بانجاز مشروعك الخاص؟؟ اذن التحق بالعمل لدينا!!". من خلال هذا الاعلان تمكنا من العثور على طالب كان ولا يزال من المبرمجين المتميزين.

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

٣. يقول أريك ريموند بأن أفضل الاستعارات المستخدمة بين المترجمين هي في النظريات ، التوافقيات ونظريات الرسم البياني.

كما يذكرك بلاكويل من دراسة بعض المواد من تخصص الرياضيات أمرا كافيا بدل التخصص في الرياضيات. "يعتبر الحساب للمهندسين أمرا بشعا وفي الحقيقة كل من الرياضيات والقانون والكتابة والتصميم الجرافيكي أمرا غير محبذا".

٤. من الكتب التي أنصح بقراءتها بشدة: ماهية الرياضيات؟ لكاتبيه كورنت وروبنز وكتاب الهندسة والخيال لكاتبيه هيلبرت وكوهن فوزين. ومن له شغف في التصميم الجرافيكي يمكنه الاطلاع على كتاب بيرن أكليد.

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

٦. واحد من زملائي الاساتذة ذكر لي بأن ١٥-٢٠٪ من طلاب الدكتوراة المتقدمين للدراسة يملكون فرصة كبيرة في القبول. وما يعنيه بذلك بأن هؤلاء الطلاب قاموا بتقديم ملفات قريبة من الكمال في كل شيء تقريبا إلا أن لا أحد في لجنة القبول يعرف الأساتذة الذين كتبوا رسائل التزكية لهولاء الطلبة.

لذا في حالة رغبتك في بالالتحاق ببرنامج دكتوراة في العلوم ، عليك البحث عن مكان ما به أساتذة يقومون ببحث عملي حقيقي. وإلا فسوف تكون مسألة قبولك مسألة رهان محفوف المخاطر برأي أعضاء لجنة القبول بغض النظر عن مستواك الحقيقي.

وهو ما يؤدي ضمنا إلى نتيجة مدهشة ولكن لا مفر منها على ما يبدو: بعض كليات الفنون الحرة محكوما عليها بالفناء. فمعظم الطلبة الأذكياء في المدارس الثانوية يخططون للالتحاق بالتخصصات العلمية حتى ولو أنهم يفكرون حاليا في أمر مغاير. لماذا تلتحق بكلية تحد من خياراتك؟؟

شكر..

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

 


كاتب هذه المقالة هو بول جراهام وهو مبرمج و مستثمر و كاتب عرف بعمله بلغة ليسب ومشاركته في تأسيس تطبيق فياويب (Viaweb) وأيضا مشاركته في تأسيس مبادرة واي-كومباينيتور وهي مبادرة لدعم الراغبين في إطلاق مشاريعهم الخاصة، وهو أيضا مؤلف كتب أون ليسب (1993), كومن ليسب (1995) و هاكرز أند بانترز (2004). وصلة المقالة باللغة الانجليزية هنا، ترجمة زاهر النوتكي.


البدء بمشروع مفتوح المصدر، نيكولاس سي. زاكاس

$
0
0

مع زخم عام ٢٠١١، قمت برفقة نيكول سوليفان باستحداث أداة  CSS Lintوالتي كانت عبارة عن أول أداة لـCSS تعنى بجودة الكود البرمجي. لقد قضينا الأسبوعين السابقين في البرمجة مثل المجانين في محاولة منا من كتابة تطبيق يكون بالدرجة الأولى مفيدا للمستخدم النهائي وفي نفس الوقت يكون سهل التعديل والتغيير(مفتوح المصدر). الجميل في الأمر بأنه لم يكن لأي منا أي تجربة في إطلاق مشروع مفتوح المصدر (open-source) مثل هذا من قبل ، مما ساعدنا في تعلم الكثير من خلال هذه التجربة.


مصدر الصورة: opensourceway.

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

ما هي أهدافك؟

من الأمور الشائعة في هذه الأيام ، أن أي شخص يكتب جزء من كود برمجي ، ينتهي به المطاف إلى رفعه على سيوفر GitHub تحت أحد الرخص المفتوحة المصدر ويتشدق فيما بعد: "لقد قدمت كودا مفتوح المصدر". في الواقع ، إنشاء مشروعا مفتوح المصدر لا يقتصر فقط على اصدار برنامجك تحت رخصة تتيح للأخرين أستخدام برنامجك بكل حرية وإنما الأمر أكبر من ذلك بكثير. لذلك وقبل أن تعلن للعالم أنك قد قدمت لهم برنامجا مفتوحا المصدر ولم يتم تجربته بعد من قبل أي شخص آخر غيرك في أوقات فراغك. هنا عليك التوقف قليلا وسؤال نفسك عن حقيقة أهدافك من مثل هكذا مشروع..

بداية ، يجب أن يكون الهدف الأول دائما: تقديم شيء مفيد. أما بالنسبة لأداة CSS Lint، فكان هدفنا الأساس هو توفير أداة أضافية لCSS code quality والتي من الممكن أن تندرج بكل سهولة في سير عمل مطوري البرنامج ، سواء أكان سير العمل يعمل بشكل تلقائي أما لا. ويمكنك التأكد من أهمية ما تقدمه من خلال عدة أمور كالنظر إلى مبرمجين آخرين يعملون على مشاريع مماثلة وكذلك التعرف على عدد المستخدمين النهائيين الذين تستهدفهم لاستخدام أداتك.

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

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

لذا هذه المقالة على وشك البدء بمشروع مفتوح المصدر تتضمن الأهداف التالية:

  1. تقديم شيئا مفيدا للعالم.

  2. الاستمرار في تطوير البرنامج في المستقبل القريب.

  3. قبول اسهامات المبرمجين الآخرين.

  4. اختيار رخصة البرنامج..

قبل التفكير في مشاركة الكود البرمجي مع الآخرين ، عليك اختيار رخصة مناسبة للتطبيق ، حيث يمكن لهذا القرار أن يساعدك كثيرا أو يضرك في جذب اهتمام المبرمجين للمساهمة في البرنامج. كافة التراخيص تسمح لك بالابقاء على حق المؤلف في ما أنتجه من أكواد برمجية. في حين يعتبر مفهوم تراخيص البرامج من الأمور المعقدة جدا ، إلا أن هناك عدد من التراخيص والأمور الأساسية التي عليك الالمام بها. (ملاحظة: إن كنت بصدد أختيار رخصة برنامج نيابة عن شركة ما ، فعليك التحدث إلى مستشار الشركة القانوني قبل اتخاذ أي قرار بهذا الصدد).

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

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

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

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

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


مصدر الصورة: opensourceway.

هناك أمرا واحدا علينا أن نأخذه بعين الإعتبار وهو أن رخص الابداع العامة (Creative Commons) لم تصمم ليتم استخدامها في ترخيص التطبيقات. حيث تهدف كل هذه الرخص لأي عمل يندرج ضمن قائمة "العمل الإبداعي"بما في ذلك الصوت والفيديو والصور والنصوص. حيث توصي منظمة العمل الإبداعي نفسها من عدم استخدام هذه التراخيص لترخيص البرامج أو الأكواد البرمجية وبدلا من ذلك يستحسن استخدام التراخيص التي صيغت خصيصا للتطبيقات البرمجية ، كما هو الحال في الخيارات الأربعة التي نوقشت أعلاه.

لذا السؤال الأن أي من الرخص السابقة ستختار؟؟ في الحقيقة ، كل ذلك يعتمد وإلى حد كبير على الهيئة التي من خلالها تنوي استخدام تطبيقك. ولأن كل من رخصة LGPL و MIT و BSD3 متطابقة مع رخصة GPL ، فلن يكون هذا الأمر مصدر قلق بالنسبة لك. ولكن في حالة رغبتك في استخدام نسخة معدلة من التطبيق كتطبيق مفتوح المصدر فقط فإن رخصة GPL هي المناسبة بلا أدنى شك. أما إن كان تطبيقك مصمم ليعمل كمنصة مستقلة يمكن ادراجه ضمن تطبيقات أخرى دون أي تعديلات ، فربما عليك اختيار LGPL. أما فيما عدا ذلك ، فإن كل من MIT و BSD3 هي الخيارات الأكثر شيوعا. المبرمجين الأفراد يفضلون استخدام MIT ، بينما تميل المؤسسات إلى استخدام رخصة BSD3 لضمان عدم استخدام اسم الشركة أو المؤسسة من دون إذن مسبق بأي حال من الأحوال.

ولمساعدتك في اتخاذ القرار المناسب لك ، انظر إلى تراخيص بعض البرامج المفتوحة المصدرالمعروفة:

  • jQuery : رخصة MIT

  • YUI : رخصة BSD3

  • Dojo Toolkit: ثنائي الترخيص بموجب رخصة BSD3 والرخصة الأكاديمية الحرة.

  • Backbone : رخصة MIT

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

وللإطلاع على المزيد عن التراخيص والقضايا القانونية المرتبطة بها والطريقة التي تعمل من خلالها هذه الرخص باختلاف أنواعها ، عليك الاطلاع على كتاب ديفيد بوشل في كتابه: "Understanding Copyright and Licenses".

تنسيق الكود البرمجي

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

أما بالنسبة إلى تطبيق CSS Lint فقد قررنا الاعتماد على بنية دليل عالية المستوى من src للشفرة المصدرية و lib للمصادر الخارجية و tests لكل الأكواد التجريبية. تم تقسيم مجلد src إلى عدة مجلدات فرعية التي تضم الملفات المماثلة حيث ضمنت جميع قواعد التطبيق تحت المجلد الفرعي rules ومنسقات الاخراج تحت مجلد formatters وهكذا دواليك. مجلد tests كذاك فقد تم تقسيمه في شكل مماثل للمجلدات الفرعية في مجلد src مما يشير إلى العلاقة بين الأكواد التجريبية والشفرة المصدرية. مع مرور الوقت ، نضيف المجلدات الفرعية حسب الحاجة مع التأكد من اتباع نفس الأسلوب بالهيكل الأساسي المتبع منذ البداية.

التوثيق

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

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

وثائق المستخدم النهائي

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

دليل المطور

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

  • طريقة الحصول على الشفرة المصدرية

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

  • طريقة تنضيد وترتيب الشفرة المصدرية

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

  • طريقة اعداد نظام البناء

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

  • طريقة تشغيل نظام البناء

هنا عليك شرح الخطوات الرئيسة لتشغيل البنية التطويرية وتشغيل وحدات الاختبار.

  • طريقة المساهمة في التطبيق

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

قضيت الكثير من الوقت في صقل تطبيق "دليل المطورين لتطبيق CSS Lint"بناء على المحادثات المطولة التي أجريتها مع المساهمين والأسئلة التي طرحت علي من الكثيرين.وكما هو الحال مع جميع الوثائق ، يجب أن يكون دليل المطور وثيقة حية تنمو بصورة متزامنة مع نمو المشروع.

استخدام قائمة بريدية

كل مشاريع المصادر المفتوحة الجيدة توفر مكانا مناسبا لطرح الأسئلة وأسهل طريقة لتحقيق ذلك هي من خلال انشاء قائمة بريدية. وعندما أطلقنا برنامج CSS Lint لأول مرة استقبلنا أنا ونيكول الكثير من الأسئلة والمشكلة أن هذه الأسئلة كانت تأتي عبر قنوات مختلفة فهناك من يسألنا عبر تويتر وهناك من يراسلنا عبر البريد الألكتروني وهكذا.. وهذا بالضبط أحد المواقف التي لا تريد أن تورط نفسك بها.

يمكنك انشاء قائمة بريدية من خلال مجموعات ياهو أو مجموعات جوجل وهي سهلة ومجانية. وتأكد من وجود هذه القائمة قبل اطلاقك لمشروعك البرمجي مع تشجيع المستخدمين على استخدام هذه القائمة البريدية لطرح الأسئلة والاستفسارات. كذلك تأكد من أظهار القائمة البريدية في مكان بارز على موقعك (إذا كنت تملك واحدا) أو في ملفات التوثيق.

مراقبة القائمة البريدية المستمرة من الأمور المهمة في إدارة القائمة البريدية فليس هناك ما هو أكثر أحباطا للمستخدمين النهائيين والمبرمجين المساهمين من أن يتم تجاهلهم وتجاهل استفساراتهم. فإذا قمت باعداد قائمة بريدية فتأكد من صرف بعض الوقت في متابعتها والرد على أسئلة المستخدمين. فهذه من أفضل الطرق لانشاء مجتمع من المساهمين يساهمون في تطوير تطبيقك. يحتاج الحصول على مساهمات محترمة في القائمة البريدية على بعض الوقت ولكنه يستحق كل هذا الجهد المبذول بلا أدنى شك. عليك هنا تقديم المشورة المناسبة لمن أراد المساهمة في مشروعك ، واقترح للمستخدمين في كتابة tickets عند الحاجة (لا تدع القائمة البريدية تتحول إلى أداة تتبع العلل البرمجية) واستخدم كل ما يطرح في القائمة البريدية من معلومات في تحديث البرنامج وتحسين مستندات التوثيق.


مصدر الصورة: opensourceway.

استخدام أرقام الاصدارات

من الأخطاء الشائعة في البرامج المفتوحة المصدر هو تجاهل استخدام أرقام أصدار لكل نسخة من البرنامج وهي من الأمور المهمة للغاية لضمان استقرار طويل الأمد لتطبيقك وصيانة دورية للمشروع. لم يستخدم تطبيق CSS Lint هذه الخاصية في الأصداره الأولى ولكن سرعان ما تداركنا الخطأ بسرعة. فعند استلامنا لتقارير الأخطاء البرمجية لم يكن عندي أي فكرة إن كان المستخدمين يستخدمون الاصدارة الأخيرة لعدم وجود طريقة لمعرفة النسخة التي يستخدموها. وهناك الكثير من العلل التي تصلني تقارير بشأنها سبق وأن أصلحتها ولكن لم تكن خطأ المستخدم النهائي لعدم معرفته بذلك.

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

اذا لم يسبق وأن تم استخدام التطبيق من قبل فمن الأفضل البدء برقم الاصدار 0.1.0 وبعدها ترتفع تدريجيا مع كل اصدارة جديدة. مع برنامج CSS Lint قمنا بزيادة الرقم الثاني في ترقيم الاصدارات ، فعلى سبيل المثال كانت النسخة الثانية من التطبيق تحمل الرقم0.2.0 والنسخة التي تلتها رقم 0.3.0 وهكذا دواليك. أما اذا أردنا اصدار نسخة بين النسخ الأساسية بسبب اصلاح بعض العلل على سبيل المثال فإننا نقوم بزيادة الرقم الثالث. لذا أذا كانت النسخة الثانية المخطط لها ستحمل رقم 0.2.0 فإن النسخة التي ستسبقها والتي لم تكن ضمن خطة البرنامج ستحمل رقم 0.2.2.

لا تفهموني بالخطأ: فلا توجد قواعد محددة في تحديد أرقام اصدارات برامجك ولكن هناك بعض المصادر التي تستحق الاطلاع عليها: قم باختيار طريقة واحدة واثبت عليها مع كل اصدارة جديدة من برنامجك Apache APR Versioningو Semantic Versioning .

 

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

وسم الاصدارات في الشفرة المصدرية

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

لذا قم بالحاق هذه العلامة برقم الاصدارة من خلال ادراج رقم تلك الاصدارة في حقل الوسم tag مباشرة. علامات تطبيق CSS Lint هي على شكل “v0.9.9.” مما سيسهل لكل من يبحث عن دلالة هذه العلامة وبما فيهم أنت لأنك ستكون قادرا على الحفاظ على التغييرات التي قمت بإجراءها مع كل اصدارة جديدة للتطبيق.

سجل متابعة التغييرات

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

مدى توافر الاعلانات

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

ادارة المساهمات والمساعدات

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

ومن الأمور الأولية التي عليك أن تضعها بالحسبان هي مسألة حاجتك على اتفاقية ترخيص مساهم (CLA). حيث تستخدم هذه التراخيص بكثرة في مشاريع المفتوحة المصدر لحماية الحقوق القانوينة للمشروع. فعلى كل شخص يساهم في المشروع عليه أن يمليء استمارة CLA ويمثل ذلك اعترافا منه بأن أي شفرة مصدرية استخدمها هي عمل غير مقتبس من مكان آخر وأن حقوق ذلك العمل قد انتقل بصورة تلقائية للمشروع. تمنح هذه الاتفاقيات أيضا الحق لصاحب المشروع في استخدام هذه المساهمة كجزء من البرنامج وتصريح من المساهم بعدم وجود أي شفرة مصدرية لشخص آخر يمكن أن يطالبه فيما بعد بحق التأليف أو براءة الاختراع أو أي حق آخر تطال تلك المساهمة. كل من برنامج jQuery وYUI و Dojo يتطلب التوقيع على مثل هذه الاستمارة للمساهمة في المشروع. لذا في حالة التفكير في تطبيق هذا الأمر عليك الحصول على المشورة القانونية بشأن ذلك والترخيص المناسب لك.

من الأمور الأخرى في هذا المجال هو انشاء تسلسل هرمي للعاملين في المشروع وفي العادة تكون المسميات الأساسية للمساهمين في مشاريع المصار المفتوحة على ثلاثة أنواع:

  • المساهم

كل من يشارك بشفرة مصدرية للمستودع الاساسي للتطبيق يعتبر مساهم في المشروع. ولا يملك المساهم الصلاحية للوصول إلى مستودعات التطبيق بصورة مباشرة ولكنه قام بتزويد المشروع باضافات أو تصحيحات وقد تم قبولها واضافتها للشفرة الأساسية.

  • المتعهد

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

  • المراجع

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

لذا في حالة عزمك في تطبيق تسلسل هرمي مماثل عليك صياغة وثيقة تصف دور كل نوع من أنواع المساهمين وكيف يمكن لكل شخص أن يترقى إلى مستوى أعلى ضمن التسلسل الهرمي. أنشأ YUI نموذج رسمي " Contributor Model "بالاضافة إلى توثيق ممتاز للأدوار والمسؤؤليات المناطة لكل نوع.

في هذه المرحلة من المشروع فإن تطبيق CSS Lint لا يتطلب وثيقة ترخيص مساهم CLAولا يملك نموذج رسمي قيد التطبيق ومع ذلك على الجميع أن ينظر للمشروع باعتباره مشروعا مفتوح المصدر عاما للجميع والمساهمة في نموه.

الدليل

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

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

"أردت فقط أن أقول بأنني أرى أن CSS Lint يمثل أحد المشاريع النموذجي للمشاريع المفتوحة المصدر لوثائقه التفصيلية وسهولة تطويره وشفرته المصدرية النظيفة والردود السريعة على القائمة البريدية وطلبات السحب. بالاضافة إلى امكانية تخصيصه بكل سهولة ليتناسب مع أي بيئة. وكانت سهولة تطوير CSS Lintكسهولة قرآءة بعض صفحات الويكي وفي الحقيقة فإن دعوتك الصريحة إلى المساهمة في المشروع قللت من الحاجز بين المشروع والمساهمين إلى أدنى مستوى. كما أتمنى من بقية المشاريع المفتوحة المصدر أن تحذو حذو هذا المشروع وتجعل من مسألة المساهمة في المشاريع المفتوحة أمرا سهلا للغاية."

أصبح الحصول على مثل هذه الأيميلات أمرا شائعا لبرنامج CSS Lint ويمكن أن يصبح أمرا مماثلا لمشروعك أنت إذا قضيت بعض الوقت في اعداد بيئة مناسبة لبرنامجك. جميعنا نريد أن تنجح مشاريعنا ونريد كذلك من المبرمجين الآخرين المساهمة في المشروع. لذا وكما قال جونثان في رسالته: اجعل حاجز المشاركة عند أدنى مستوى وسيجد المبرمجين طريقة أو أخرى للمساهمة في مساعدتك.

التعريف بالكاتب:

نيكولاس سي. زاكاس.

نيكولاس سي زاكاس تقني على شبكة الانترنت ، استشاري ، مؤلف ومحاضر. عمل لدى شركة ياهو لما يقارب من خمس سنوات حيث كان أحد المبرمجين المميزين لموقع ياهو ومكتبة YUI. بالاضافة إلى ذلك كان مؤلف لعدة كتب منها: Maintainable JavaScript (O’Reilly, 2012), Professional JavaScript for Web Developers (Wrox, 2012), High Performance JavaScript (O’Reilly, 2010), و Professional Ajax (Wrox, 2007). . يعتبر نيكولاس مدافعا قويا عن العديد من الممارسات البرمجية المحكمة بما فيها التحسين التدريجي و أمكانية الوصول وفعالية الأداء وقابلية الصيانة وجدوى الحلول حتى وإن تعاضمت المشكلة.

ترجمة: زاهر النوتكي.

المقال الأصلي: Starting An Open-Source Project

المصدر البرمجي لفوتوشوب 1

$
0
0

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

 


الكود مكتوب بلغة باسكال، وموجه لأجهزة "ماكنتوش"، وهو موجود الآن فيما يعرف بمتحف تاريخ الحاسوب.
يمكنكم الوصول إليه عبر هذا الرابط: http://www.computerhistory.org/adobe-ps-source/license/

وهنا بعض الصور:

 

 

رابط الخبر على صفحات موقع متحف تاريخ الحاسوب:

http://www.computerhistory.org/adobe-ps-source/

صدور أول نسخة مفتوحة المصدر من LiveCode

$
0
0

بعد ستة أسابيع من نجاح حملتها في موقع kickstarter، أطلقت شركة RunRevنسخة مفتوحة المصدر من بيئتها التطويرية LiveCode. إذا لم تكن تعرف ما هي LiveCode فهي بيئة تطويرية مبنية على فكرة برنامج أطلقته أبل في عام 1987 ويدعى HyperCardولقي رواجا وشهرة كبيرة بين المستخدمين، ولكن شركة أبل أوقفته في النهاية. بيئة LiveCode تسمح بتطوير تطبيقات لحواسيب العادية لمختلف الأنظمة ويندوز وماك و يونكس و أنظمة التشغيل المحمولة من مثل أندرويد و iOS، وتستخدم اللغة الإنجليزية كلغة تطويرية مستوحية هذه الفكرة من HyperCard.


نجحت شركة RunRev في حملتها لجمع تبرعات لتوفير نسخة مفتوحة المصدر من بيئة LiveCode حيث وصلت التبرعات بـ 500 ألف جنيه إسترليني متجاوزة ما وضعته الشركة وهو 350 الف جنية استرليني. النسخة المفتوحة المصدر مرخصة تحت ترخيص GPLv3 وبالتالي كل البرامج التي تطور بها يجب أن تكون تحت نفس الرخصة. طبعا توجد نسخة تجارية لمن يريد تغيير الرخصة.
لتنزيل نسختك من هذه البيئةزر هذه الصفحة.

إطلاق النسخة الثانية من كتاب تعلم البرمجة بلغة php

$
0
0

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



‫الفصل الأول : بدايتك مع لغة ‪php
‫الفصل الثاني : الثوابت ودوال الشرط والدوران
‫الفصل الثالث : المصفوفات والدوال
‫الفصل الرابع : ارسال المتغيرات باستخدام GET , POST
‫الفصل الخامس : السلسل النصية و التعابير النظامية
‫الفصل السادس : استخدام ‪  JSON‬لتخزين وجلب البيانات
‫الفصل السابع : الجلسات ‪ sessions‬ والكعكات ‪cookies
‫الفصل الثامن : التعامل مع الوقت والتاريخ
‫الفصل التاسع : التعامل مع الملفات و المجلدات
‫الفصل العاشر : التعامل مع قواعد البيانات
‫الفصل الحادي عشر : رفع الملفات الى الخادم
‫الفصل الثاني عشر : التعامل مع الصور
‫الفصل الثالث عشر : معايير كتابة الكواد وتحسين اداء برامج ‪php
‫الفصل الرابع عشر : البرمجة غرضية التوجه
‫‪‬الفصل الخامس عشر : النمط المفرد Singleton Pattern
‫الفصل السادس عشر : حماية تطبيقات ‪php
الملحق الأول: إعداد بيئة العملية
الملحق الثاني: دليل سريع في وسوم HTML
الملحق الثالث: دليل سريع في خاصيات CSS

لتنزيل الكتاب من اضغط على هذه الوصلة.

عشرة أسباب تجعل من بايثون أداة رائعة للأبحاث وأسباب أخرى تُقلل من روعتها

$
0
0

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

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

للتوضيح، أنا لا أروّج لاستخدام بايثون لوحدها كبيئة مثالية في البرمجة العلمية ، أنا أروج للغة بايثون مع ثلة من المكتبات المستقلة الناضجة مفتوحة المصدر ، و بالتحديد Numpy/Scipy للعمليات العددية ، و Cython  للتحسينات في أدنى مستوى ، و IPython  للعمل التفاعلي ، و MatPlotLib للرسومات ، لاحقاً سأشرح ما سبق سرده بالإضافة إلى مكتبات أخرى بتفصيل أكثر، حيث أنني ذكرتهم الآن حتى أتحدث عنهم لاحقا ضمن هذه المقالة.

بوجود هذه المكتبات، صارت الخصائص الموجودة في ماتلاب التي تسمح لمستخدمها  بكتابة نص برمجي بسرعة بمجال تعليم الآلة و الذكاء الاصطناعي- مجالي البحثيّ الأساسي- جزء صغير من ما هو موجود في بايثون. بعد قضاء يوم في تعلم بايثون، مازال بإمكاني استخدام كل حيل المصفوفات التي تعلمتها في الماتلاب في بيئة بايثون بل و تحديد تراكيب بيانات أقوى و تصميم أنماط حسب الحاجة.

تصميم اللغة الكلي

كنت أؤمن بأن اللغة المثالية للبحوث هي اللغة التي تتيح الترجمة المباشرة من خربشات المفكرة إلى نص برمجي، بشكل عام هذا إيمان منطقي، لأن كثرة العقبات بين صناعة الأفكار و تطبيقها تبطئ عملية البحث، بكلمات أخرى: كلما قلّ الوقت اللازم في التفكير بخصوص البرمجة كلما كان أفضل، أما الآن أنا أؤمن بأن هذا الإيمان كان خاطئاً

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

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

المشكلة مع توجه البحث عن "المطابق الأمثل"هو أنك تخسر بذلك الشمولية بسرعة. وحين يكون مجال تصميم اللغة ضيق جدا ستضطر لتصل بتطبيق واحد فقط إلى المثالية على حساب أن يكون لديك أكثر من تطبيق جيد. لهذا توفر الجامعات برامج دراسية تُعنى بتصميم لغات البرمجة (عملية تحديد إيجابيات و سلبيات عدة تصاميم مختلفة بشكل صائب هو أمر فائق الصعوبة). الاستخدام الواسع لبايثون في كل شيء ابتداءا من إدارة الأنظمة و تصميم المواقع إلى طحن الأعداد عدديا يُظهر أنها لغة ناجحة جدا بكل تأكيد. في الحقيقة كنت شاهدا عن كثب كيف أن تطوير المهارات في لغة R يؤدي إلى تطوير مهارات التفاعل مع البيانات، و تطوير المهارات في ماتلاب يؤدي إلى تطوير مهارات كتابة سكربتات سريعة (رديئة) ،  وتطوير المهارات في بايثون يؤدي إلى تطوير مهارة البرمجة بشكل الحقيقي.

عملياً، في مجال عملي، الجانب السلبي هو أن بعض عمليات المصفوفات التي تمثل باستخدام بنى نحوية في ماتلاب تصبح نداءات لوظائف (على سبيل المثال x = solve(A, y) عوضا عن x = A \ y ). وفي مقابل هذا الإسهاب- والذي لا أجده مشكل- يجد الواحد هذه الوظائف مرنة جدا و أنها لغة واقعية ابتداءا من الأنظمة الأوتوماتيكية حتى البحث العلمي. لا يحتاج المبرمج لتبديل إلى لغة أخرى إذا ما اضطر لكتابة نص برمجي غير علمي كما أن هذه اللغة تقدم منفذا سهلا لمكتبات أخرى( مثل قواعد البيانات) للبحث العلمي.

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

قابلية القراءة

لتكرار نقطة متواترة ، بناء لغة بايثون مصمم بشكل واع ، على عكس الكثير من لغات البرمجة( مثل بيرل)، قابلية القراءة هي محط اهتمام رئيسي أُخذ بعين الاعتبار في تصميم بايثون، في الحقيقة أن الطرافة تكمن بأن تحويل نص شبه برمجي بنص برمجي في بايثون ما هو إلا تصحيح الإزاحة.

هذه القدرة لها العديد من الفوائد الإيجابية، يقول مصمم بايثون الأساسيGuido van Rossum :

هذا التركيز على القدرة القرائية لم يحدث بمحض الصدفة، كلغة برمجة شيئية، بايثون تهدف إلى تشجيع إنشاء نص برمجي يمكن إعادة استخدامه، حتى لو كتبنا توثيق كامل في كل وقت ،فإن النص البرمجي سيعاد استخدامه بصعوبة إذا لم يُقرأ بسهولة. العديد من خصائص بايثون ، بالإضافة إلى استخدام الإزاحة الخاصة بها، تجعل النص البرمجي الخاص بها يُقرأ بفاعلية أكبر. [1]

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

كمثالين على هذا الأمر ، اقرأ النص البرمجي التالي:

def classify(values, boundary=0):
"Classifies values as being below (False) or above (True) a boundary."
return [(True if v > boundary else False) for v in values]

# Call the above function
classify(my_values, boundary=0.5)

دعوني أشرح لكم النقاط الثلاثة التي تعرض لها هذا النص البرمجي أولا: أنها وظيفة مكتملة بنفسها احتاجت إلى ثلاثة أسطر فقط لتعريفها مع التوثيق المرافق لها، ثانيا: القيمة الافتراضية للحد معرّفة بطريقة سهلة القراءة بجنون ( نعم، هذا الأمر يظهر في حال استخدام “Sphinx” لإنشاء توثيق آلي)، ثالثا: البناء النحوي لمعالجة القائمة list مصمم ليكون قابل للقراءة، حتى لو لم تكن معتاد على قراءة نصوص بايثون البرمجية ، فإنه من السهل تحليل هذا النص- ستنشئ وتعيد قائمة جديدة عائدة بقيمة True إذا كانت قيمة v هي أعلى من الحد boundary و بقيمة False لبقية الأحوال. أخيرا ، حين مناداة الوظائف ، تسمح بايثون بالمعطيات المسماة named arguments- هذا يشجع الوضوح كما يقلل ثغرات المتابعة bookkeeping الغبية، تحديدا إذا كانت هذه الوظائف تتطلب أكثر من معطى.

اسمحوا لي بمقارنة هذه الخصائص بما هو موجود في ماتلاب، حيث أنه في ماتلاب يتم حفظ الوظائف المتغيرة العامة في ملفات منفصلة، غير مشجعة على استخدام الوظائف القصيرة –وعمليا- تشجع عمليات القص و اللصق في البرمجة، والتي هي لعنة التنقيح الأكواد. كذلك المعطيات الافتراضية تسبب الكثير من الألم ؛ حيث أنها تحتاج إلى برمجة مشروطة لتحديد المعطيات غير المحددة. أخيرا، تحديد المعطيات بالاسم حين المناداة ليس بخيار مطروح- مع أن هناك بناء مشهور ولكنه افتراضي يغير بين الأسماء و القيم في قائمة المعطيات يسمح بذلك إلى حد ما.

 

الموازنة بين البرمجة المستوى العالي و المستوى المنخفض

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

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

التجريد Abstraction مثل هذا ضروري جدا للبرمجة العلمية، والتركيز على العمليات ذات المستوى العالي و المنفذة على أنواع بيانات ذات مستوى عالي يؤدي بشكل عام إلى اكتساب سرعة برمجة كبيرة و دقيقة. يسمح نظام بايثون لتوسيع الأنواع بسهولة للمكتبات لتُصمم أنواع جديدة بشكل متكامل، مصفوفة ” Numpy” تعتبر مثال رائع على هذا الأمر.

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

سايثون Cythonتعمل أولا بترجمة نص بايثون البرمجي إلى ما يعادله في لغة سي حيث يُنفذ نص بايثون المعدل هذا عبر واجهة برمجة التطبيقات لبايثون سي، و من ثم يستخدم مترجم لغة سي لإنشاء مكتبة مشتركة يمكن تحميلها كوحدة بايثون. بشكل عام، هذه الوحدة تطابق بخصائصها لوحدة بايثون الأصلية و تتفوق عليها بالسرعة هامشيا. من إيجابيات استخدام سايثون على كل حال، أنها تسمح بكتابة المتغيرات بشكل ثابت، مثال ( cdef int i ) تُعرّف i كعدد صحيح، هذه الخاصية تزيد من السرعة بشكل فائق لأن المتغيرات المكتوبة تُعامل الآن في بايثون باستخدام متغيرات من مستويات أدنى عوضا عن متغيرات بايثون نفسها. مع هذه الفروق سيكون نص بايثون البرمجي الخاص بك بسرعة نص سي البرمجي من دون الحاجة إلى معرفة كبيرة بلغة الأخيرة.
عملياً، قليل من تعريفات الأنواع ستعطيك سرعة عظيمة، كمثال، اعتبر أن لديك هذا النص البرمجي:

def foo(A):
for i in range(A.shape[0]):
for j in range(A.shape[1]):
A[i,j] += i*j

حيث A هي مصفوفة NumPy من بعدين. هذا النص البرمجي يستخدم حلقات مفسرة ولهذا تعمل ببطء شديد، على أية حال، فلنضف معلومات النوع ولنستخدم سايثون:

def cyfoo(ndarray[double, ndim=2] A):
cdef size_t i, j

for i in range(A.shape[0]):
for j in range(A.shape[1]):
A[i,j] += i*j

تترجم سايثون عمليات بايثون الضرورية إلى نداءات لواجهة سي عبر بايثون Python C-API و لكن الحلقات و الفهرسة تتحول إلى نص سي منخفض المستوى، لكل مصفوفة بحجم ١٠٠٠×١٠٠٠ على جهازي ذو 2.4 قيقا هرتز ، بايثون تستهلك 1.67 ثانية بينما نسخة سايثون تستهلك فقط 3.67 ملي-ثانية ( النسخة المتجهة من النص البرمجي السابق باستخدام الضرب الخارجي تستهلك 15.1 ملي-ثانية)

كقاعدة عامة يستهلك برنامجك ٨٠٪ من وقته لتنفيذ ٢٠٪ من نصه البرمجي ، فلهذا كاستراتيجية جيدة لنص برمجي فعال هي كتابة كل شيء، ثم تحليل النص البرمجي ، ومن ثم تحسين الأجزاء التي تحتاج إلى تحسين.

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

إمكانية التبادل في اللغة

كعرض جانبي لعمومية اللغة هو أن بايثون لاصق ممتاز للغات البرمجة المختلفة ، حيث يستطيع الواحد مناداة وظائف ماتلاب من بايثون( عبر محرك ماتلاب) باستخدام MLabWrap؛ مما يسهل عملية الانتقال من ماتلاب إلى بايثون، هل تحتاج إلى استخدام حزمة الانحدار الخطي من لغة R ؟ RPyسيضعها على أطراف أصابعك ، هل تملك نص فروترنFORTRAN سريع لخوارزمية عددية معينة؟ F2pyسيقوم بتغليف ذاك النص بدون جهد ، هل تملك مكتبات سي وسي++ عامة وتريد مناداتها؟ سيقوم بذلك بدون أي جهد.

تريد استخدام مكتبات سي او سي++؟ Ctypes، أو Cython، أوSWIهي ثلاثة طرق سهلة لتخاطب معها ( سايثون هي تفضيلي الشخصي). الآن لو أن كل هذا يمشي بالاتجاهين...

نظام التوثيق

ببراعة تدمج بايثون توثيق الوحدة، والصنف ، والوظيفة مباشرة في اللغة نفسها. في الحقيقة هناك مستويين من التعليقات - التعليقات مستوى البرمجة (تبدأ ب #) التي يتجاهلها المترجم، والتعليقات الوثائقية التي تحديد من قبل doc stringبعد الدالة أو الوظيفة. نصوص الوثائق هذه تضيف الوسوم إلى الوظائف التي يمكن الوصول إليها من قبل أي شخص باستخدام منصة بايثون التفاعلية أو عن طريق مولدات الوثائق التلقائي.

جمال نظام بايثون يصبح واضحا عند استخدام سفنكس Sphinx - نظام توليد الوثائق التي بنيت أصلا لتوثيق لغة بايثون-. للسماح بمرونة كافية للعرض ، تتيح توجيهات reStructuredTextلغة ترميزية سهلة و مقروءة ، والتي أصبحت تستخدم على نطاق واسع في وثائق التعليمات البرمجية.

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

هناك خاصية تساعدك في البرمجة العلمية هي قابلية استخدام عمليات لا-تكس و القيام بتنفيذ رسم هندسي نقطي داخل وثائق النص البرمجي، كمثال مكنك الكتابة كالتالي:

.. math:: \Gamma(z) = \int_0^\infty x^{z-1}e^{-x}\,dx

سيظهر في صفحة الويب هكذا



تضمين النقاط أمر سهل، النص التالي:

.. plot::

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,2, 1000)

plt.figure()
plt.plot(x, np.sqrt(x), label = r"Skiing: $\sqrt{x}$")
plt.plot(x, x**2, label = r"Snowboarding: $x^2$")
plt.title("Learning Curves for Snowboarding and Skiing")
plt.xlabel("Time") ; plt.ylabel("Skill")
plt.legend(loc='upper left')
plt.show()

يعطي

(Source code, png, hires.png, pdf)



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

نظام الوحدات الهرمية

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

كمثال import hashlib تربط hashlib.md5 بوظيفة التحقق من md5 التابعة لhashlib ، بالتناوب from hashlib import md5 تربط md5 بهذه الوظيفة ، هذا يساعد برمجة المساحات الاسمية لتتبع نظاميا هرميا.

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

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

ثانيا، المبرمجين يجب عليهم أن يعطوا لوظائفهم أسماءا طويلة( أي أنهم يقوموا بوظيفة الهيكل الهرمي بأنفسهم) أو المخاطرة بمساحات أسماء تتعارض مما يصعب الأمر و يصعب حله. بينما يسمح هذا للشخص بإنشاء برنامج بسرعة إلا أنه نظام سيء من وجهة نظر برمجية.

 

هيكلة البيانات

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

تملك بايثون قوائم، وجداول ،و مجموعات ، وقواميس، ونصوص، وصفوف الخيوط الآمنة و العديد من الأنواع المبنية داخلها. تحمل القوائم عناصر بيانات عشوائية التي يمكن أن تُصنف و تشرّح و تجمّع و تستخدم ككومات، والمجموعات تحمل عناصر فريدة و غير مرتبة، والقواميسDictionariesتوصّل بين المفاتيح الفريدة لأي شيء و أيضا تكون قواعد اللغة الأساسية.

الأكوام متوفرة كعمليات على أول القائمة( تشابه أكوام السي++) . أضف نمبيNumPy و ستحصل على هيكل لمصفوفة متعددة الأبعاد والتي تدعم التحسين و عملية في النشر و عمليات المصفوفات. أضف ساي-باي SciPy و ستحصل على مصفوفات متناثرة، وإشجار كي دي، وعناصر الصور ، وسلسلة الوقت و المزيد.

المكتبات المتوفرة

تحتوي بايثون على مكتبة رائعة محزّمة بداخلها، فلسفتها تعتمد على إضافة البطاريات batteries-included، وتوزيعة بايثون الأساسية تأتي بقواعد بيانات مدمجة و بأنواع بيانات ثابتة و مختلفة و روتينات الواجهات لأنظمة التشغيل و وواجهات الويب و البريد الإلكتروني و أدوات الشبكات، و أدوات ضغط البيانات و التشفير و دعم الاكس ام ال و التعبيرات الاعتيادية و اختبار الوحدات و ثنائية النواة والعديد من المميزات، باختصار، إذا أردت أن أرتاح من برمجة عمليات المصفوفات وأقوم بجعل عملية في النظام تؤدى بشكل آلي ؛ فإني لا أحتاج إلي تغيير اللغة.

بالإضافة إلى وجود مكتبات واسعة تدعم الوظائف المطلوبة للبرمجة العلمية، ما سيأتي قائمة أستخدمها غالبا و أجدها مختبرة بشكل جيد و لها فاعلية :

NumPy/SciPy

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

IPython:

من أفضل الأشياء في بايثون هو اي-بايثون، وهي صدفة محسنة و تفاعلية تقوم بعملية التدقيق و تصنيف النص البرمجي و الرسم الهندسي. تدعم ميزة الإكمال عند ضغط زر tab للعناصر، وميزة التدقيق المدمج، وميزة إيجاد الوحدة و الكثير من الوظائف، بالإضافة إلى أنها بشكل أساسي تقوم بكل ما يمكنك توقعه من واجهة برمجية عبر سطر الأوامر.

Cython:

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

SQLAlchemy:

تجعل SQLAlchemyالاستفادة من قوة قواعد البيانات أمراً بالغ السهولة و بديهي ، وهي بالأساس التفاف حول قاعدة بيانات SQL و تبني أنت الاستعلامات باستخدام معاملات بديهية، ثم تبني هي نص اس كيو ال و تنفذه على قاعدة البيانات و تعيد لك مؤشرا للنتيجة، , ومع قاعدة بيانات sqliteاس كيوليت- المدمج أساسا في مكتبة بايثون- سيتمكن الباحث من الاستفادة من قوة قواعد البيانات لأجل أغراض علمية بسهولة شديدة. وأيضا إذا أخبرت اس كيوليت بأن تبني قاعدة بياناتها في الذاكرة ، ستحصل على هيكل بيانات أقوى. و استلهما من كاركتير xkcd ، فإن SQLAlchemy تجعل من قواعد البيانات أمراً ممتعا مرة أخرى.

PyTables:

إنها طريقة رائعة للتعامل مع كمية كبيرة من البيانات بطريقة ذات فاعلية و مرتبة و معتمدة ، حيث أنها تحسن من المصادر ، وتحول بشكل آلي البيانات من القرص و الذاكرة حسب ما يتطلبه الأمر، كما أنها تدعم أيضا الضغط الفوري و تعمل بسلاسة مع قوائم نمبيNumPy.

PyQt:

لكتابة واجهة رسومية للمستخدم عبر السي ++،فإنه لمن الصعب التغلب على كيو-تي Qt (شخصيا أنصح بها) ، PyQtتجلب سهولة الكيو-تي إلى بايثون، وأنا بالفعل أقصد هذه السهولة، لقد بنيت باستخدام مصمم كيو-تي واجهة رسومية لتطبيق علمي معقدة نوعا ما فقط عبر أسطر قليلة من النص البرمجي المخصص، كل الأمر تطلب مني أياماً معدودة فقط ، هذا النص البرمجي يعمل على أكثر من نظام تشغيلي ، مثل لينكس و ماك او-اس و ويندوز . إذا احتجت إلى تطوير واجهة أمامية لإطار بياناتك ولا تأبه لأمر الرخصة ( GPL ل PyQt و LGPL لمكتبة كيو-تي.) ، فمن خلال تجربتي فهذه أسهل طريقة لفعل ذلك.

TreeDict:

بدون تخطيط واضح، غالبا ما تكون المشاريع البحثية الكبيرة معرضة للقانون الثاني للديناميكا الحرارية: بمرور الوقت، ترتيب العوامل و البيانات و النتائج تصبح عشوائية بشكل متزايد. تري-دكت TreeDictهو هيكل بيانات لبايثون قمت بتصميمه لمحاربة هذه المشكلة، إنه يخزن المجموعات الهرمية للعوامل و المتغيرات و البيانات و يدعم النسخ و الربط و التجزئة و عمليات أخرى تنفذ على الهياكل الشجرية. هذا التنظيم الهرمي يدعم التنظيم الذي يتابع الانقسامات المفاهيمية التي تحدث في البرنامج ، كمثال: ملف واحد يمكن أن يُعرف كل المتغيرات بينما يعكس بناء باقي النص البرمجي.

Sage:

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

توزيعة بايثونEnthought :

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

إطار الاختبار

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

الجانب السيئ

لا توجد مقالة مقنعة بالكامل بدون عرض صريح للجوانب السيئة، وبالفعل هنالك العديد منها للذكر، في الحقيقة العديد من نقاشاتي تتضمن عرض لجانب سيء ، مع خيارات عديدة في متناول اليد، من أين يبدأ الشخص؟ أن تتخذ قرارا فاصلا في كل نقطة يؤدي أحيانا إلى شلل في الإنتاجية، في معظم التطبيقات، أليس استخدام لغة جامدة ولكنها صامدة كماتلاب يعتبر خيارا أفضل؟

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

الجانب السيئ الأخر في استخدام بايثون في البرمجة العلمية العامة هو المشهد الحالي للعرف و المصادر المتوفرة ، لأن ماتلاب اشتهر باستخدامه في مجالات عديدة و أصبح عرفا نشر النصوص البرمجية عبر ماتلاب( إلا في بعض مجالات الرياضيات التي يشتهر فيها استخدام بايثون بسبب وجود سيج أو في مجال الإحصائيات حيث تعتبر لغة R هي المعتمدة) بينما ام-لاب-راب MlabWrapيجعل الأمر يعمل بعدالة إلا أنه ما زال يعني أن مبرمج بايثون ما زال يحتاج إلى التعامل مع اللغتين و الحصول على رخصة ماتلاب، أي شخص يفكر في التبديل يجب أن يكون ملما بهذا الأمر المزعج ، على كل حال، يبدو أن هناك حراك قوي مع البحث العلمي بالتوجه إلى بايثون و بنسبة كبيرة للأسباب التي ذكرتها هنا.

 

حل برمجي متكامل

باختصار و تأكيدا لنظرتي كيف أن بايثون هي الحل البرمجي المتكامل، أتعرض لذكر ثلاث نقاط إضافية و كل نقطة ستفتح عليك بابا من التفكير. أولا أنها مفتوحة المصدر و مجانية بالكامل، حتى للاستخدام التجاري، والحال نفسه للكثير من المكتبات العلمية الجوهرية. ثانيا، أنها تعمل بسلاسة في بيئات ويندوز، ماك، لينكس و غيرهم، كما تعمل مكتبها الأساسية أيضا بنفس الشكل و أيضا مكتبات الطرف الثالث اللاتي سبق و تحدثت عنهن . ثالثا، أنها تعمل مع البرمجة السريعة للشفرات أو مع التطوير للمشاريع الكبيرة بشكل متساو. باستعراض سريع لبعض قصص نجاح بايثون المذكورة في موقع بايثون يعرض لنا الاختلاف بين بيئات العمل التي وفرت فيها بايثون لمبرمجيها حلول برمجية متكاملة و واسعة و مدعومة للبحث و البرمجة العلمية. على أية حال، أفضل ما أختم به كلامي هو ما قاله راندال مونري، مؤلف xkcd“( البرمجة أصبحت ممتعة مرة أخرى).

التذييل

[1]

http://www.python.org/doc/essays/foreword/

 

مصدر المقالة: http://www.stat.washington.edu/~hoytak/blog/whypython.html

تأليف: هويت كويبك طالب دكتوراه في قسم الإحصاء بجامعة واشنطن للمزيد تابع Hoyt Koepke

ترجمة: سُلاف سليمان

مراجعة: زايد السعيدي

إطلاق موقع Arabic Git لجمع وتوفير مصادر لتعلم Git باللغة العربية

$
0
0

Arabic git، مبادرة عربية جديدة تصُبُّ في المجهودات القائمة لإثراء المحتوى العربي التقني، هو موقع يُعنى بجمع وتوفير مصادر عربية لتعلم نظام إدارة النُّسخ Git، يهتم أولا بتوفير مقالات ودروس موجهة للمبتدئين بالنظام وكيفية مُباشرة العمل بهوإدخاله في سير عملهم، ثم على ترجمة أهم المصادر الأجنبية في هذا المجال، دون إغفال المتقدمين.

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

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

 

واقتداءًا بوادي التقنية وباقي المبادرات العربية الجادة، فإن محتوى جميع المواقع المذكورة أصبحت تحت رخصة المشاع الإبداعي CC BY-NC-SA.

الموقع تحت إدارة وليد زيوش (01walid).

للمزيد حول الموقع راجع موضوع الافتتاحية.



إطلاق WxWidgets 3.0

$
0
0

بعد سبع سنوات منذ إطلاق النسخة 2.8 أطلقمطوري مكتبة WxWidgetsالإصدارة المستقرة 3.0. هذه الإصدارة حوت على أكثر من 19224 تغيير وإضافة  320000 سطر برمجي. أهم التغييرات في هذه الإصدارة هي تحسين دعم اليونيكود بشكل عام واستخدام المكتبات الماك الأصلية Cocoa-based  في نسخة wxOSX كذلك الانتقال إلى الإصدارة GTK3 في منصة اللينكس، تحسين ومراجعة مستنداتتطوير واستخدام المكتبة.


نبذة سريعةعن مكتبة  wxwidgets
wxWidgets هي أداة لكتابة تطبيقات سطح المكتب أو المحمول بواجهات رسومية للمستخدم GUI. وهي إطار عمل يقدم الكثير من التجهيزات و الخدمات و يزود تطبيقك بالمظهر الأصلي للنظام. مكتبة wxWidgets تحتوي على مجموعة كبيرة من الصفوف و الدوال للمبرمج للاستخدامها و تخصيصها ، فالتطبيقات بشكل نموذجي تعرض نوافذ تحتوي على متحكمات قياسية، ومن المحتمل أن ترسم صور ورسوميات خاصة، و تستجيب إلى المدخلات من الفأرة و لوحة المفاتيح، أو المصادر الأخرى. و أيضا يمكنها التواصل مع العمليات الأخرى أو توصل برامج أخرى. بكلمات أخرى، wxWidgets تسهل للمبرمج نسبيا كتابة تطبيق يقدم كل الأشياء التي تقدمها التطبيقات الحديثة الأخرى.
يطلق على wxWidgets أداة تطوير GUI ، ولكن في الحقيقة هي أكثر من ذلك، وتملك مميزات مفيدة في شتى مجالات تطوير التطبيقات. وبسبب أن كل برنامج wxWidgets يحتاج إلى قابلية للنقل بين المنصات المختلفة وليس فقط الجزء الرسومي GUI ، فإن مكتبة wxWidgets تقدم صفوف للتعامل مع الملفات و الدفق و تعدد المسالك ، و إعدادات التطبيق و تواصل العمليات الداخلية، والمساعدة المباشرة ، و وصول لقواعد البيانات، و الكثير

لرؤية كل التغييرات في هذه الإصدارة من هناولتنزيلها من هنا


رسميا: جوجل تعلن عن تحديث باندا 4.0

$
0
0

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

جوجل باندا (بالإنكليزية: Google Panda) هو تعديل على خوارزمية ترتيب نتائج البحث في جوجل وأصدرت أول مرة في فبراير 2011. وتهدف إلى تخفيض ترتيب المواقع ذات المحتوى الضعيف (مثل مواقع الألعاب ) أو مواقع سارقة المحتوى، وإعادة المواقع ذات المحتوى العالي الجودة إلى أعلى نتائج البحث.

بدأ مفعول هذا التحديث ابتداء من 20-5—2014 ، ولم يتم بعد نشر من المواقع العربية المتأثرة ، الا أن صاحب أي موقع يستطيع أن يلاحظ تغيير في عدد الزيارات القادمة من جوجل خلال يومين الثلاثاء والأربعاء الماضيين . فعلى سبيل المثال هذه صورة من احصائيات موقع موضوعخلال تلك الفترةوالتي تظهر نمو عدد الزيارات بسبب التحديث :




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

كيفية تحويل فيم"Vim"إلى IDE (بيئة تطوير متكاملة) كاملة

$
0
0

إذا كان كودك صغيراً فأنت تعرف كم تكون بيئة التطوير المتكاملة (IDE) مفيدةً. عندما يقوم الـ IDE بالتحقق من "السينتاكس"بناء الجملة أو يقوم بترجمة الكود في الخلفية أو استيراد المكتبات التي تحتاجها، فإنَّ جافا وسي وبايثون جميعها تصبح أكثر سهولةً. ومن ناحيةٍ أخرى إذا كنت تستخدم نظام لينكس فأنت تعرف كم يكون استخدام فيم vim  مفيداً للأمور المتعلقة بتحرير النص، ولذلك من الطبيعي أنك ترغب بالحصول على كل الميّزات لبيئة التطوير المتكاملة IDE من فيم.

حقيقةً هناك عدد قليل من الطريق للقيام بذلك. يمكن لأحدهم أن يفكر بـ c.vimالذي يحاول القيام بتحويل فيم إلى IDEموجه للسي، أو الـ Eclimالذي يقوم بدمج فيم مع برنامج Eclips. على كل حال أنا أقترح عليك اتباع منهجٍ عام أكثر وذلك باستخدام الإضافات فقط. أنت لا تريد أن تملأ المحرر الخاص بك بعدد كبير من اللوحات والميزات، وبدلاً من ذك نهج الإضافات يتيح لك اختيار ما الذي تريد وضعه في فيم. وكنتيجة جيدةٍ لذلك، فالنتائج لن تكون بلغةٍ معينةٍ مما يتيح لك استخدام أي لغة برمجة تريد. وفيما يلي قائمتي بأفضل 10 إضافات والتي تقدم مزايا الـIDE لفيم.

معلومة إضافية: Pathogen 

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

 

1. SuperTap 

 

أول شيء سوف نقوم باستخدامه في الـ IDE هو ميزة الإكمال التلقائي. ولذلك أنا أحب الإضافة SuperTapوالتي تكون مفيدةً بشكل كبير. وتعطي قوةً كبيرةً إلى أزرار الجدولة.

 2. Syntastic 

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

3.  Auto Pairs  

هناك شيءٌ آخر يدفع معظم المبرمجين إلى الجنون: هل قمت بكتابة الأقواس الأخيرة أم لا ؟؟!!. الجميع يكره القيام بعدّ الأقواس التي قام بوضعها حتى الآن بإصبعه. وللتعامل مع ذلك أنا استخدم Auto Pairsوالذي يقوم بإدراج وتنسيق الأقواس بشكل تلقائي.

4. NERD Commenter

إذا كنت تبحث عن اختصار سريع من أجل التعليقات على الكود، يمكنك القيام بتشغيل المعلّق NERD Commenterبغض النظر عن لغة البرمجة التي تستخدمها. وحتى لو لم تكن مبرمجاً فأنا أوصي بهذه الإضافة لكفاءتها العالية أثناء التعليق على السكربتات أو على أي شيء في نظامك.

5. Snipmate

أيّ مبرمجٍ يعرف أن المرمّز الجيد يقوم بكتابة العديد من الأكواد ولكنه يعيد استخدام الكود الممتاز منها. ولذلك فإنَّ snipmateيقوم بسهولة بإدراج بعض أجزاء التعليمات من الكود في ملفك ويقلل كثيراً من كتاباتك. تأتي هذه الإضافة بشكل افتراضي مع الكثير من أجزاء التعليمات للغات برمجة مختلفة ولكن يمكنك بسهولة القيام بإضافة الكود الخاص بك إلى القائمة.

6. NERSTree

من أجل إدارة مشروع كبير تعتبر هذه الإضافة دائماً فكرةً جيدة من أجل تقسيم الشفرة في ملفات مختلفة. ومن أجل إبقاء جميع هذه الملفات في الاعتبار يعتبر NERDTreeمتصفح ملفات لطيفاً لاستخدامه مباشرةً من فيم.

7. MiniBufferExploere

من أجل إكمال متصفح الملفات، لا يوجد شيءٌ أفضل من مدير عزل جيد من أجل المحافظة على أكثر من ملف مفتوح في وقتٍ واحد. MiniBufferExplorerيقوم بهذا العمل بشكل جيد وبكفاءة. حتى أنّه يقوم بوضع ألوانٍ مختلفةٍ واختصاراتٍ سهلة للتخزينات المؤقتة من أجل التبديل بينها.

8. Tag List

عندما يكون لديك أكثر من ملف مفتوح في أيّ وقت من الأوقات، فمن الممكن أن تنسى ما الذي كنت قد وضعته في الملف. ولمنع ذلك، Tag Listهي إضافة عارض كود ستقوم بعرض المتغيرات المختلفة والتوابع بشكل مضغوط ولطيف.

9. undotree

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

10. gdbmgr

وفي النهاية ،أخيراً وليس آخراً أيُّ شخص يحتاج إلى مصحح جيد في بعض النقاط فإنَّ gdb ومن بعده gdbmgrيعتبر مناسباً لهم، كما أنّه يدمج بين المصححات الشائعة في فيم.

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

ونأمل في الأخير أن ينال هذا الدرس المترجمإعجابكم

صدور كتاب احترف سكراتش في 10 أيام

$
0
0

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



ما هي لغة برمجة سكراتش؟
طورت السكراتش في مختبرات شركة MIT العالمية والمتخصصة في مجالات البرمجة والحاسوب. وذلك لأهداف تربوية تعليمية تمكن الطلاب من التعلم والتعبير عن قدراتهم من خلال تقنيات حديثة. حتى الآن طور الطلاب، مستخدمو السكراتش حول العالم، أكثر من مليون برنامج، يقومون بنشرها في موقع السكراتش الرسمي: scratch.mit.edu


في برنامج السكراتش يمكن تطوير قصص ٍتفاعلية، ورسومٍ متحركة، وألعابٍ موسيقية وفنية، وغيرها من الإبداعات المحوسبة. تمكن السكراتش المستخدم من إدخال صور، أصوات وفيديو، كما وتمكن من إجراء تغييرات عليها والتحكم فيها. تعتمد السكراتش على الكائنات المدخلة للبرنامج، حيث أن الكائنات يمكنها أن تكون نصوصاً، صوراً أو رسومات. من الممكن برمجة هذه الكائنات من خلال إدخال مقاطع برمجية - ما يسمى بـ "لبنات" - على هذه الكائنات وتحديد معطيات لهذه الأوامر البرمجية، والتي تؤدي بدورها إلى إمكانية تغيير الهيئة، الحركة أو الصوت الخارج من هذه الكائنات. تبرمج التحكمات في هذه الكائنات من خلال أوامر تتعلق بالضغط على لوحة مفاتيح (مثل الضغط على الأسهم)، الفأرة (مثل النقر مزدوج على زر الفأرة) أو بعد مرور فترة زمنية محددة (مثل 5 ثوان). هذا المزيج الشيق ينتج برنامج حاسوب متناسقاً يحفز المستخدم نحو التميز والإبداع في تطوير الأفكار إلى حيز التنفيذ.

يمكنكم تحميل الكتاب من موقع القرية الهندسية هناأو هذا الرابط البديل.

صدور بايثون 3.5

$
0
0

أطلق مطوروا لغة بايثون الإصدارة 3.5من لغة بايثون الشهيرة ، هذه الإصدارة تحوي على العديد من المميزات الجديدة والتي من شأنها زيادة إنتاجيتها ،  وأهم المميزات المضافة في هذه الإصدارة:


1- تلميحات النوع
مع هذه الميزة يمكنك وضع تلميح لنوعية المعاملات وما ترجعه أي دالة،  هذا نموذج لهذه الميزة:


def greeting(name: str) -> str:
    return 'Hello ' + name


ففي هذا المثال، هذه الدالة تستقبل معامل name من نوع str  وترجع نوع str . الهدف الرئيسي من هذه الميزة هو مساعدة مطوري بيئات التطوير  IDE لإنتاج بيئات تطوير قوية تساعد المطورين المبتدئين.
هذه الميزة اختيارية وستبقى لغة بايثون لغة دينامكية ،  ولن تصبح هذه الميزة ملزمة.

2- إضافة معامل جديد " @ "لضرب المصفوفات
هذه الميزة ستسهل التعامل مع المصفوفات ثنائية البعدين،  وبالتالي ستسهل عمل مبرمجي بايثون الرياضيين.


3- إضافة async و await
تهدف هذه الميزة إلى رفع كفاءة بايثون في التوجه العالمي لاعتماد البرمجة غير المتزامنة  asynchronous والمتزامنة concurrent  والمعروفة ب coroutines


4- تحسين ميزة الضغط zip  لتطبيقات بايثون
تملك بايثون ميزة تشغيل الملفات في هيئة مضغوطة ZIP منذ الإصدارة 2.6 ولكن هذه الميزة غير مشهورة لأنها لم تحصل على التسويق الجيد بالإضافة إلى عدم اعتماد ملحقات pyz  و pyzw .
هذه الميزة جاءت لإصلاح هذه المشكلة  وأضافت بعض الأدوات التي تسهل عمل حزم مضغوطة مستقلة من برامج بايثون.

هذه نبذة بسيطة عن المميزات الجديدة في هذه الإصدارة للاطلاع على كامل المميزات راجع هذه الصفحة.

صدور php 7

$
0
0

تتويجا لعمل دام سنتين من التطوير المستمر ، أعلن مطوروا لغة بي اتش بي عن إطلاق الإصدار 7، يأتي هذا الإصدار بتطويرات وتحسينات كبيرة في سرعة الأداء واستهلاك الذاكرة. وهذه أهم المميزات:


- تحسين السرعة بشكل ملحوظ حيث أن هذه الإصدارة أسرع بمرتين من الإصدارة PHP 5.6
- تحسين كبير في استهلاك الذاكرة.
- دعم أنظمة64 بت بشكل متجانس
وعند  قياسأداء تطبيقات بي اتش بي الشهيرة فإن :
- Drupal 8 – 77% زيادة في الأداء
 - WordPress 4 – 129% زيادة في الأداء
 - Laraval 5 test app – 111% زيادة في الأداء
 - Magento – 74% زيادة في الأداء
 (كل المقارنات بين PHP 5.6.10 و PHP 7.0.0)
لمراجعة كل التغييرات الجديدة تابع هذه الصفحة.

Viewing all 24 articles
Browse latest View live