أبرز المواضيع

[جديد][headercarousel]
‏إظهار الرسائل ذات التسميات البرمجة. إظهار كافة الرسائل
‏إظهار الرسائل ذات التسميات البرمجة. إظهار كافة الرسائل
السبت، 27 أغسطس 2016

كيف تصبح مبرمجاً بالشكل الصحيح؟!




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

إذاً كيف تصبح مبرمجاً بالشكل الصحيح؟!

للإجابة على هذا السؤال يجب أن تنظر إلى التعلم البرمجي على أنه أربعة مسارات مختلفة كل منها لها دورهه الحيوي، وهذه المسارات هي…

الأساسيات


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

المعلومات


لكي تصبح مبرمجًا حقيقيًا يجب عليك أن تتعلم الأساسيات التي تكلمنا عنها سابقاُ بالإضافة إلى المعلومات المتعلقة بلغة البرمجة أو التقنية المعينة التي تريد أن تتعلمها. فالأساسيات تُفهّمك ما هو الراوتر Router وماذا تفعل به، أما المعلومات سوف تشرح لك عن نوعه وخصائصه وكيف تتعامل معه.
وفي البرمجة الأساسيات سوف تعلمك ما هو الـ Integer وكيف يُخزن وكيفية التعامل معه، أما المعلومات فسوف تعطيك الخبرة بكيفية تعاملك معه في C# ومجال الأعداد المسموح به في هذه اللغة على سبيل المثال، وكل ما تتقدم في التعلم من المعلومات تصبح الأمور أكثر صعوبة مثل الـ Boxing والـ Unboxing والـ Reflection .. إلخ.
والمنطق البرمجي يقول تعلم الأساسيات أولاً قبل أن تستخدم أو تفهم أي معلومة في أي لغة برمجية كانت، وفي كثير من الأحيان قد تجد شخص لديه معلومات كثيرة حول لغة برمجية معينة ولكن بدون أساسيات جيدة حولها، وهذا الخلل قد يجعل الشخص يقدم حلولًا ليست مناسبة، وبعض الأحيان تجعله يجرب في الحلول إلى أن يصادف الحل معه دون معرفة كيف تم حل هذه المشكلة وما هو السبب من ورائها.
مثال صغير: مبرمج لا يعرف الفرق بين تخزين الرقم 4 في متغير Integer و تخزين الحرف 4 في المتغير Character
وبالنسبة لهؤلاء المبرمجين الذين يذهبوا للمعلومات فوراً قبل تعلم الأساسيات قد يستطيعون العمل في عدة مجالات ولكن سيكون لديهم الكثير من الحفر في خبرتهم البرمجية الناجمة عن إهمال أهم ركن في تعلم البرمجة وهو أساسياتها، وللأسف فإن معظم دورات ودروس البرمجة ولا سيما العربية منها هي لتعلم ” المعلومات ” وليس الأساسيات مما يؤدي إلى صعوبة بالغة وخلل في محاولة تعلمها ولا سيما للمبتدئين في مجال البرمجة.
والفرق الذي يميز المعلومات عن الأساسيات أنها منتهية الصلاحية، فالمعلومات عن برنامج معين قد تنتهي بمجرد تحديث البرنامج لإصداره أو تبديل خياراته، وبالتالي فإن المعلومات وجدت لكي تفيدك لفترة بسيطة مرهونة بمدى تطور المنتج الذي بين يديك.

اكتساب المهارات


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

مسار الإبداع والابتكار


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

أفضل 4 طرق للرسم البياني باستخدام مُجتمع PHP




هل تعلم بوجود البيانات في كل مكان من حولك؟
ربما، لكننا نجدها مُملة لوجودها بحالة خام Raw. ما رأيك أن تصبح هذه البيانات موجودة ولكن بصورةٍ غير مملة، وذلك عبر أن نتعلم كيفية إظهارها والتعامل معها بطرقٍ أكثر تفاعلية…مثل التعامل معها باستخدام الرسوم البيانية؟ ألن يكون الأمر أكثر متعة؟ هنا سنسألك السؤال التالي: هل تطرقت يوما الى الرسم البياني باستخدام php كما في الصور أدناه:

PHP Components
إذا كنت من المُتابعين لمؤتمرات جوجل ستدرك أن الفائدة من الرسم البياني قد شهدت نمواً وتطوراً كبيراً خلال السنوات الماضية، لذلك اذا كنت من الاشخاص الذين يتعاملون مع البيانات ولم تستخدم الرسم البياني من قبل فالفُرصة الان هنا مُتاحة لك كي تتعلم “أفضل 4 طرق للرسم البياني باستخدام مجتمع PHP”، والتي سوف تحتاجها في وقت قريب لاكمال مشاريعك باحترافية عالية، فابتباعك الخطوات التالية ستجعل من الرسم البياني أكثر سهولة وسلاسة بالنسبة اليك.
ولكن قبل البدء، يجب أن نخبرك أنه يوجد نوعين من الرسم البياني:
1- الرسم البياني من جانب المُلّقم
2- الرسم البياني من جانب العميل
الملقم: غالباً ما يتم توليد الخرائط الخاصة بالرسم البياني على شكل صور، نعم فهي تُوّظف الخوارزميات لتحويل البيانات من رسم بياني الى صورة وبالتالي زيادة الاستهلاك على الخادم Server بصرف النظر عن استخدام قوة المُعالجة للمُلّقم وهذا ما سيأثر بدوره على العميل، ففي أغلب الاحيان، توليد صوره كبيرة الحجم سيؤدي الى بطء في التّحميل وهذا ما سوف يزعج المُستخدم.
لكن كل ما ذُكر اعلاه من قيود خاصه بالرسم البياني وعقبات يمكنك الآن التغلب عليها باستخدام مكونات العميل PHP
وإليك الآن افضل الطرق للرسم البياني :

الرسم البياني باستخدام Google

على الرغم من انها تقوم اعتماداً على لغة JavaScript إلا أن الرسم البياني لـ Google يُقدّم لك عدة خيارات لجعل الخرائط الخاصة بك من توليد PHP فالشيء الجيد حول المخططات البيانية لـ Google  وبصرف النّظر عن كونها خالية، إلا انها تَمدّك بالكثير من أمثله التعليمات البرمجية التي سوف تساعدك على البدء بسرعة.

الرسم البياني لـ Google
شاهد مثال من هنا
لتحميل كود FusionCharts اضغط هنا

الرسم باستخدامpChart

pChart هو تطبيق في شكل صفوف (class) مُوجه بالدرجة أولى لمنصات PHP Framework ولكن هذا لا يمنع استعماله في تطبيقات PHP العادية.
يقوم على تطوير pChart فريق من المطورين المُتبرعين كعادة المشاريع ذات المصادر المفتوحة، والمشروع يبدو جدياً وكبيراً، حيث يُوّفر باستمرار نسخ جديدة للتنزيل، كما يوفر ملحقات (Add-ons)، ومنتدى لإبداء الرأي والنّقاشات والتنبيه على أخطاء البرمجيات.

pChart
لمشاهدة مثال اضغط هنا
لتحميل الكود لرسم بالـ PChart اضغط هنا

الرسم البياني باستخدامChartLogix PHP Graphs


ChartLogix


مشاهده مثال اضغط هنا
لتحميل الكود اضغط هنا
الرسم البياني هو من أفضل التقنيات التي يجب على كل مُطوّر ويب اعتمادها في عمله.
هل اعجبتك المقالة؟ شاركها الآن لزيادة المعرفة 


ما هو مفهوم هــندســة البـرمـجيــات Software Engineering ؟




ستُخدمت هندسة البرمجيات كمفهومٍ نظريّ من حين لآخر في أواخر الخمسينات وبداية الستينات من القرن الماضي. أما الاستخدام الرّسمي الأول لهذا المُصطلح فكان في مؤتمرٍ عُقد من قبل اللجنة العلمية في منظمة حلف شمال الأطلسي 1968 حول البرمجيات، وقد أخذ هذا المصطلح بالانتشار منذ ذلك الحين ولاقى اهتماماً متزايداً في نواحي مُختلفة.
عقد المؤتمر لمعالجة ما يُعرف بـ “أزمة البرمجيات” والتي ظهرت بسبب عدم استخدام منهجية في التفكير (Software Development Process) عند بناء البرمجيات، مما أدى إلى ظهور أخطاءٍ كثيرة خلال عملية بناء وصيانة البرمجيات، وبالتالي أصبحت البرمجيات تحتاج إلى وقتٍ كبير لتطويرها ولصيانتها، وكُلفة مالية عالية أكثر مما هو مُتوّقع، وبعد تحمّل التأخير في الوقت وتجاوز الميزانية كانت البرمجيات ذات كفاءة ضعيفة في إنجاز الوظائف المطلوبة، كما كانت ذات فعالية منخفضة، فضلاً عن عدم تلبية كافة المُتطلبات بالشكل الكامل.

مفهوم هندسة البرمجيات

يتكون أي نظام حاسوبي من شقين أساسيين: العتاد الصلب Hardware والعتاد الليّن Software، أو البرمجية. بالنسبة للعتاد الصلب، فهو كل ما نشاهده ونلمسه بشكل مباشر، مثل الشاشة، لوحة المفاتيح، الفأرة، اللوحة الأم، وغيرها.
البرمجية (Software) هي شيء غير ملموس إلى حدٍ ما بالمُقارنة مع المُنتجات الأخرى، وهي سلسلة من آلاف أو ملايين الأوامر التي تطلب من الحاسوب إجراء عملياتٍ مُعينة مثل عرض المعلومات، أو إجراء الحسابات، أو تخزين البيانات. هذه البرمجيات هي بمثابة الروح من الجسد في النّظام الحاسوبي وهي في توسعٍ دائم وازدياد في التّعقيد والمُتطلبات والمهام التي تقوم بتنفيذها.
ببساطة، فإن مبدأ عمل أي نظام حاسوبي هو التكامل ما بين العتاد الصلب والبرمجيات. فالعتاد الصلب هو القطع الفيزيائية المادية المسؤولة عن تنفيذ العمليات والوظائف التي نريدها، بينما البرمجيات فهي الأوامر التي تخبر العتاد الصلب كيف يجب أن يتصرف والطريقة التي يجب أن يتصرف بها.
أما هندسة البرمجيات، فهي فرع من فروع الهندسة يقوم على مجموعة من الأسس والقواعد التي تهدف إلى تصميم وتطوير البرامج بوفرةٍ ونوعية عالية تُلبّي احتياجات المُستخدمين. هذا الفرع من الهندسة يتميّز بأنه لا يحتاج إلى رأس مال كبير وبالتالي الخسارة فيه قليلة على عكس بقية الفروع الأخرى من الهندسة، كما لا يكفي لإيجاد البرمجية المُتكاملة والجيدة عمل شخص واحد وإنما يتطلب ذلك فريقاً من المهندسين الجيدين. وقد كان ضرورياً إيجاد علم يختص بهندسة البرمجيات لوضع الأسس والمعايير التي تصون هذه المهنة من المُتطفلين بحيث يُصبح بالإمكان تمييز البرنامج الجيد من غير الجيد.
يمكننا أيضاً الاستعانة ببعض المراجع العالمية من أجل تعريف هندسة البرمجيات، فوفقاً لمعهد الهندسة الكهربائية والإلكترونية IEEE، فإن هندسة البرمجيات هي:
” هي الفرع الهندسي المختص باستخدام الطرق المنهجية والقابلة للقياس، من أجل تطوير وتشغيل وصيانة البرامج. أي أنها علم تطبيق الهندسة في مجال البرامج “.
أما بالنسبة لتعريف هندسة البرمجيات الصادر عام 1967 عن اجتماع لجنة حلف شمال الأطلسي (الناتو NATO)، فقد وضعه عالم الحاسوب الألماني فريديرخ باور Friederich Bauer، وهو ينص على أن :
” هندسة البرمجيات هي عملية بناء واستخدام المبادئ الهندسية المعروفة من أجل الحصول على برنامجٍ اقتصاديّ، والذي يتميز بكونه موثوق ويعمل بكفاءة على الآلات الحقيقية”.

فريدريخ باور (1924-2015) عالم حواسيب ألماني، ساهم بوضع التعريف الأساسي لهندسة البرمجيات خلال مؤتمر حلف شمال الأطلسي في عام 1967. 

مراحل بناء النظام البرمجي

في هندسة البرمجيات، بناء النظام البرمجي ليس مجرد كتابة شفرة (كود Code)، وإنما هي عملية إنتاجية لها عدة مراحل أساسية وضرورية للحصول على المُنتج. الهدف النهائي من أي برنامج هو الحصول على أفضل كفاءة ممكنة بأقل كلفة ممكنة. (هذا المعيار ينطبق على أي عملية تصميم هندسي وفي كافة المجالات). يُطلق على هذه المراحل اسم دورة حياة النّظام البرمجي (Software Life cycle) أو التي تعرف أحياناً بـ “دورة حياة تطوير النظام البرمجي SDLC: Software Development Life Cycle”.
تتألف دورة حياة النظام البرمجي Software Life Cycle من المراحل التالية:
  1. تحليل المتطلبات Requirement Analysis: خلال هذه المرحلة، يقوم الفريق المسؤول عن تطوير البرنامج بتحديد المتطلبات والأهداف التي يريدون الوصول إليها عبر البرنامج. عادةً ما تكون هذه المتطلبات محددة من الزبون، وهنا يجب أن تؤخذ مواضيع الكلفة والجودة بعين الاعتبار.
  2. التصميم Design: في مرحلة التصميم، يضع الفريق الأفكار المتعلقة بكيفية تصميم البرنامج. هنا يتم النقاش حول ما هي أفضل لغة برمجة أو بيئة برمجة قابلة للاستخدام من أجل تنفيذ البرنامج المطلوب بالمتطلبات المحددة.
  3. التنفيذ Implementation: بعد تحديد المتطلبات والأهداف والاتفاق على لغة البرمجة ووضع الخطوط الأساسية للبرنامج وبنيته، يقوم الفريق بتنفيذ “نموذجٍ أوليّ Prototype” للبرنامج.
  4. الاختبار Testing: في مرحلة الاختبار، يقوم الفريق باختبار برنامجهم والتأكد من أنه يقوم بكافة الوظائف المطلوبة منه، وضمن المعايير والمتطلبات الموضوعة.
  5. التطوير Evolution: بعد انتهاء مرحلة الاختبار، والتأكد من أن البرنامج فعال، ويقوم بالوظيفة المطلوبة منه بأفضل كفاءة وأقل كلفة، يعمل الفريق على البحث عن سبل تطوير البرنامج، وإضافة ميزات جديدةٍ له، وجعله أكثر فاعلية وأكثر كفاءة.
المراحل السابقة هي لأحد أشهر نماذج بناء النظام البرمجي، وهو نموذج “الشلال Waterfall Model”، والذي يعتبر من النماذج الكلاسيكية في بناء النظام البرمجي. تم تطوير هذا النموذج وغيره من النماذج الكلاسيكية، حيث ظهر مفهوم المنظومات أو العمليات المرنة Fragile Process، والتي تتخلى عن النموذج الثابت للمنظومة الكلاسيكية في سبيل الحصول على المزيد من المرونة والأريحية في كيفية وآلية تنفيذ المشروع والنظام البرمجي.
للمزيد من المصادر: هنا و هنا و هنا و هنا و هنا

البرمجة الاحتمالية قادرة على كتابة برنامج من خمسين سطر بدلاً من الألوف!





مُعظم التّطورات الحديثة في مجال الذكاء الصنعي هي نتيجة لتطور مجال تعلم الآلة Machine Learning، وذلك كتطبيقات الجوال التي تُحوّل الكلام إلى نص (أو تطبيقات التعرف على الكلام Speech Recognition)، حيث تقوم الحواسيب بالبحث ضمن مجموعةٍ ضخمة من البيانات، من أجل الحصول على أنماطٍ مميزة ومفهومة.
ولجعل تطبيقات تعلم الآلة أسهل للبناء، بدأ عُلماء الحاسوب بتطوير ما يُسمى لغات البرمجة الاحتمالية Probabilistic Programming، والتي تُتيح للباحثين مُقارنة ومزج تقنيات التّعلم الآلي والتي عملت بشكلٍ جيد في سياقاتٍ وأوضاع أخرى.
وقد تم في عام 2013 إطلاق برنامج لتمويل بحوث البرمجة الاحتمالية لمدة أربع سنوات، وذلك من قبل وكالة أبحاث الدفاع المتقدمة DARPA في الولايات المتحدة الأمريكية. وسيُثبت باحثو معهد ماساتشوستس للتقنية MIT في مؤتمر الإبصار الحاسوبي Computer Vision والتّعرف على الأنماط Pattern Recognition، الُمقام في شهر يونيو/حزيران، أن لغة البرمجة الاحتمالية في بعض معايير ومهام مجال الإبصار الحاسوبي – حيث يتراوح البرنامج المكتوب أقل من 50 سطر طويل- ما هي إلا لغة تنافسية مع الأنظمة التقليدية ذوات الآلاف من الأسطر من التّعليمات البرمجية.
يقول تيجاس كولكارني، طالب دراسات عليا في معهد ماساتشوستس للتقنية بمجال الدماغ والعلوم الفكرية المعنوية، والمؤلف الأول في البحث الجديد :” هذه هي المرة الأولى التي نقوم بإدخال البرمجة الاحتمالية في مجال رؤيتنا. كما أن الأمل الوحيد هو كتابة نماذج مرنة للغاية برمز احتمالي قصير، في كلا النموذجين التوالدي Generative والتمايزي Discriminative، دون القيام بأي شيء آخر، فمُخططات الاستدلال للأغراض العامة ستقوم بحل المشاكل.”
لكن يمكن أن تبدو تلك النماذج غامضة بشكل غريب وذلك وفقاً لمعايير البرامج الحاسوبية التقليدية، فعلى سبيل المثال – أحد المهام التي درسها الباحثون- هو بناء نموذج وجه إنسان ثلاثي أبعاد 3D من صور ثنائية الأبعاد 2D، فيصف البرنامج الملامح الرئيسية للوجه وذلك بكائنين قد وزّعوا بالتناظر (عينان) مع كائنين آخرين أكثر تمركزاً تحتهما (الأنف و الفم)، وبالطبع هذا يتطلب القليل من العمل لترجمة هذا الوصف في بناء جملة خاصة بلغة البرمجة الاحتمالية، لكن في تلك النقطة، النّموذج يكون قد اكتمل، فبتغذية وتزويد البرنامج أمثلة كافية من صور 2D و نظائرها من نماذج 3D، سيقوم بمعرفة البقية بنفسه!
ويضيف كولكارني أنه عندما يتعلق الأمر بالبرامج الاحتمالية، يكون التفكير حدسي جداً أثناء إعداد النموذج، فلا يتوجه تفكيرك بشكل رياضي، بل إنه أسلوب مختلف من النماذج.
وكان انضمام كولكارني إلى البحث بنصيحة من أستاذه جوش تينينباوم، أستاذ الدماغ والعلوم المعرفية الفكرية، وقد قام كلاً من Vikash Mansinghka، وهو عالم أبحاث في معهد ماساتشوستس للتكنولوجيا في قسم الدماغ والعلوم المعرفية، و Pushmeet Kohli من شركة مايكروسوفت للبحوث في كامبريدج، بإنشاء لغة البرمجة الاحتمالية وأطلقوا عليها اسم الصورة Picture، والتي هي امتداد للغة برمجة أخرى تدعى “جوليا Julia” تم وضعها في معهد ماساتشوستس للتقنية.

ما هو قديم هو جديد!

ذكر كولكارني أن هذا العمل الجديد قد أحيا الفكرة المعروفة باسم الرسوميات العكسية والتي يعود تاريخها إلى نشأة بحوث الذكاء الصنعي، وقد شهد رُواد الذكاء الصنعي على أن برامج الرسوميات ستكون قادرة على تجميع صور واقعية، وذلك على الرّغم من أن أجهزة الحواسيب الخاصة بهم بطيئة جداً مُقارنةً بمقاييس السرعة اليوم، وقد تم ذلك عن طريق حساب الناحية التي ينعكس فيها الضوء من الأجسام الافتراضية، و هذا أساس عمل الـ Pixar في صناعة الأفلام.
لاري روبرتس طالب دراسات عليا في معهد ماساتشوستس للتقنية وأحد الباحثين الذين جادلوا بأن استنتاج الأشكال ثلاثية الأبعاد من المعلومات المرئية كانت في المقابل ببساطة نفس المشكلة، لكن بالإمكان من حيث المبدأ عند تغطية الصورة المرئية ببقعة لون محدد أن يتم إنتاجها من ضوء أي لون قادم من أي اتجاه والمنعكس على سطح اللون المناسب بالاتجاه المناسب، فحساب قيمة لون بكسل في صورة من صور فيلم “Toy Story” ما هي إلا حسابات ضخمة، لكنها حتمية، فالمُتغيرات جميعها معروفة، ومن جهةٍ أخرى استنتاج الشكل هو شيءٌ احتمالي، فهذا يعني فرز الكثير من الاحتمالات المتناظرة والاختيار يقع على الأمثل، وهذا النوع من الاستدلال والاستنتاج هو بالضبط ما صممت لأجله لغات البرمجة الاحتمالية للقيام به.
وقد اعتبر كولكارني وزُملاؤه أربع مشاكل مُختلفة في مجال الإبصار الحاسوبي، وكل من هذه المشاكل شملت شأن استدلال على جسم ذو شكلٍ ثلاثي أبعاد 3D من معلومات ثنائية الأبعاد 2D، ففي بعض المهام، تمكنت البرامج البسيطة من التّفوق بالفعل على الأنظمة السابقة، ونسبة خطأ البرنامج الذي قدّر حالة ووضع الإنسان كانت بين 50 و 80 في المئة على سبيل المثال وهذا يعد أقل من سابقاتها!

معرفة كيفية التعلم

بذلك لاحظنا أنه في لغة البرمجة الاحتمالية قد تم رفع الأحمال الثقيلة أو دعونا نقول قد تجاوزنا الصعوبة من قبل خوارزمية الاستدلال، والتي تقوم بإعادة ضبط الاحتمالات باستمرار، وذلك على أساس أجزاء من البيانات التي تم اختبارها سابقا، وفي هذا الصدد حصل كولكارني وزملاؤه على فائدة عقود من بحوث تعلم الآلة، وقد بُنيت في الصورة مجموعة متعددة من خوارزميات الاستدلال المختلفة والتي تحقق نجاحاً جيداً، و إذا سمح الوقت بذلك، فإنه بالإمكان محاولة تجريب كل هذه الخوارزميات على أي مشكلة لمعرفة ما هي الخوارزمية التي ستعمل بشكلٍ أفضل.
وعلاوةً على ذلك، يقول كولكارني أنه قد تم تصميم “الصورة Picture” بحيث يمكن لخوارزميات الاستدلال الخاصة بها الاستفادة بنفسها من تعلم الآلة، وتعديل نفسها، وبذلك تقوم بالتأكيد على استراتيجيات تبدو أنها تقود لنتائج جيدة، وأضاف أن استخدام التّعلم لتحسين الاستدلال سيكون مهمةً نوعية ودقيقة، لكن البرمجة الاحتمالية قد تُخفف من إعادة كتابة البرنامج في ضوء مشاكل مختلفة، فيمكن للبرنامج أن يكون عام وشامل وذلك إذا كان التّعلم الآلي قوي بما فيه الكفاية لفهم استراتيجياتٍ مُختلفة لمهامٍ متفاوتة.
وقد قال جيان شيونغ شياو، وهو أستاذ مساعد في علوم الحاسب في جامعة برينستون، ولم يكن قد شارك في العمل، أن “الصورة Picture” تُقدّم إطاراً عام يهدف إلى حل ما يقارب جميع المهام في مجال الإبصار الحاسوبي، وهو يتجاوز مهام التصنيف Classification، المهمة الأكثر رواجاً في مجال الإبصار الحاسوبي. كما يحاول الإجابة على أحد الأسئلة الأساسية في الإبصار الحاسوبي والذي ينص على ما هو التّمثيل الصحيح من المشاهد البصرية؟ إنها بداية من معاودة نظر حديثة لمنطق الرسوميات العكسية.

المصدر: Phys.org

“روبي عربي”: منصة تعليمية متميزة باللغة العربية، لتعليم لغة “روبي” البرمجية




لطالما واجه محبي التقنية والبرمجة العرب مشاكل عديدة في البحث عن المعلومات باللغة العربية، فالمحتوى التقني العربي على الإنترنت لا يزال ضعيف جداً وغير مدعوم، فضلاً عن انتشار العديد من المواقع التي تنشر المقالات والأخبار بدون الاهتمام بأدنى متطلبات الدقة والأمانة العلمية، مثل ذكر المصادر وتوثيق المعلومات. ولذلك، فإن المواقع والمدونات الأجنبية كانت الخيار الأول لكل من يود تعلم أي تقنية جديدة أو لغة برمجية.
ولكن الحال لن يبقى كما هو بكل تأكيد، وأفكار الطموحين والرياديين لا تعرف أي حد، وفيما يتعلق بلغات البرمجة، وبلغة روبي تحديداً، فإن فكرةً جديدة قد انطلقت بهذا المجال، وهو موقع “روبي عربي”، ليكون أول منصة تعليمية باللغة العربية، تهدف لتعليم مبادئ لغة روبي البرمجية، وتطبيقاتها، وتكوين منصة تبادل أفكار وخبرات، يستطيع عبرها المبرمجون والمطورون بلغة روبي الاستفادة من بعضهم البعض ومن خبراتهم.
موقع “روبي عربي” موقع بسيط وسلس جداً من حيث الشكل، وغني من حيث المضمون! فقد قام القائمون عليه بتخصيص عدة أقسام:
1- القسم الأول هو فهرس الدروس، والذي يتضمن كافة الدروس التي تم إعدادها لتعلم مبادئ وتطبيقات البرمجة بلغة روبي (للدخول اضغط هنا )
2- القسم الثاني هو القسم التفاعلي، والذي يتضمن منصة تفاعلية يمكن عبرها كتابة وتجريب لغة روبي بشكلٍ مباشر على الموقع! (للدخول اضغط هنا )
3- القسم الثالث يتناول الموقع وفكرته وأهدافه. (للدخول اضغط هنا )
ما هو مطلوب منكم الآن؟ المطلوب منكم أصدقائنا الأعزاء هو أمر بسيط: المساهمة بنشر الفائدة وتبادل الخبرات، عبر مشاركة الموقع عبر صفحات التواصل الاجتماعي، أو مراسلة أصدقائكم المهتمين بلغات البرمجة وتطوير قدراتهم، خصوصاً ممن يهتم بتعلم لغة برمجية جديدة وغير مستخدمة جداً بالنسبة للمبرمجين العرب كلغة روبي.
أيضاً، وإن كنتم ممن تعلم لغة روبي ومبادئها، ووجدتم محتوى الموقع مفيد، فإننا نأمل أن تساهموا بإثراء الموقع، سواء كان عبر المشاركة فيه، أو عبر توجيه الملاحظات والنصح للقائمين عليه، أو ربما الانضمام لفريق العمل.
أخيراً، ينبغي التوجه لأولئك ممن لا يرون سوى الجوانب السلبية، ولا يجيدون سوى النقد، وتحطيم المعنويات: إن كان لديكم ملاحظة، أو نقد، أو توجيه، أو مأخذ ما على آلية عمل الموقع والقائمين عليه، فأفضل ما يمكنك القيام به هو مراسلتهم وإخبارهم بما وجدته من ملاحظات. لا تأخذ موقفاً سلبياً وتبدأ بالحديث عن ضعف المبادرات العربية أو عدم القدرة على مجاراة المبرمجين والمطورين الأجانب. النجاح الذي حققه المبرمجون الأجانب، سواء في أوروبا أو أمريكا أو دول آسيا، فإنه قد تم نتيجة لتبادل المعلومات والخبرات على أوسع نطاقٍ ممكن، ونتيجة للسعي المتبادل بين الجميع لتحقيق شيءٍ مميز ومفيد، ولو أن كل شخص قام بالنقد والندب، لما تمكن أحد قط من التقدم ولو خطوة واحدة.
أخيراً، فإننا ندعو بالتوفيق والتميز للأصدقاء في موقع “روبي عربي” في مسعاهم الرائع، ونأمل أن تصبح منصتهم من أهم المنصات التقنية البرمجية على المستوى العربي والعالمي.

يمكننا كتابة برمجيات خالية من الأخطاء…إذاً، لماذا لا نقوم بذلك؟




أشار عالم الحاسوب الهولندي الكبير Edsger W Dijkstra أن الاختبار يبين وجود الأخطاء وليس غيابها. في الحقيقة، إن الطريقة الحاسمة الوحيدة لإثبات صحة البرمجيات وخلوها من الأخطاء هي من خلال الرياضيات.
لقد كان من المتعارف عليه أنه من الصعب الوصول إلى برمجيات صحيحة. منذ أن نظم Friedrich L Bauer المؤتمر الأول عن هندسة البرمجيات في عام 1968، اخترع علماء الحاسوب منهجيات لبناء وتوجيه تطوير البرمجيات. تستخدم إحدى هذه المنهجيات، والتي تدعى أحياناً هندسة البرمجيات القوية أو في الغالب المنهجيات الأكثر رسمية، الرياضيات للتأكد من أن البرمجيات خالية من الخطأ.
بما أن الاقتصاد أصبح أكثر حوسبة وتشابكاً مع الانترنت من أي وقت مضى، فإن الخلل والأخطاء في البرمجيات يؤدي بازدياد إلى تكلفة اقتصادية من خسائر واحتيال.
لكن على الرغم من الأدلة التي تؤكد كلمات Dijkstra وتأكيده المستمر على حاجتنا للبرمجيات الصحيحة والمضمونة التي يمكن أن تحققها المنهجيات الرسمية يبدو أن الحكومة البريطانية لم تصلها الرسالة بعد.
هندسة البرمجيات الرسمية:
لطالما كانت بريطانيا متخصصة في المنهجيات الرسمية. تم منح اثنين من علماء الحاسوب
توني هاور ( أوكسفورد 1977 – ، مركز أبحاث مايكروسوفت) والراحل روبن ميلنر (إدنبرة 1973-1995 ، كامبريدج 1995-2001) جوائز تورينج – التي تمثل جائزة نوبل للحوسبة – على أعمالهم في المنهجيات الرسمية.
يعد عالم الحاسوب كليف بي. جونز أحد مخترعي منهجية فيينا للتطوير. وبينما كان يعمل لدى IBM في فيينا، ومختبر جامعة أوكسفورد للحوسبة و IBM بريطانيا، بقيادة توني هاور، فازا معا بجائزة الملكة للإنجاز التقني لعملهم على جعل برمجيات (IBM’s CICS ) (أنظمة التحكم بمعلومات الزبون الخاصة بـ IBM) رسمية. وقامــا من ناحية أخرى خلال سير العمل بتطوير”ترميز Z” الذي أصبح أحد المنهجيات الرسمية الأساسية.
تستلزم عملية المنهجيات الرسمية وصف ما يفترض على البرنامج فعله باستخدام الرموز الرياضية والمنطقية، ومن ثم استخدام البراهين المنطقية والرياضية للتأكيد على أن البرنامج يقوم بما يجب عليه بالفعل. على سبيل المثال، الصيغة المنطقية التالية لـ هاور التي تصف عمل البرنامج تظهر
كيف تقوم المنهجيات الرسمية باختزال الكتابة البرمجية إلى شيء مختصر بحيث لا يمكن اختزاله أكثر.
صيغة منطق Hoare:


إذا بدأ برنامج S في حالة يحقق فيها الشرط P فإنه يأخذنا إلى حالة يحقق فيها الشرط Q، وكان هناك برنامج T يأخذنا من Q إلى R ، عندها يُنفَّذ S ثم يأخذنا T من P إلى R .
دُرِّست المنهجيات الرسمية في أغلب الجامعات البريطانية منذ منتصف الثمانينات، وشهدت استخداماً كبيراً من قبل المصانع في أنظمة السلامة الحرجة. كما وصلت التحسينات الأخيرة إلى النقطة حيث يمكن لقدرة المنهجيات الرسمية على فحص وتأكيد صحة الكود أن تطبق عند القياس مع أدوات آلية ضخمة.
فهمت الحكومة الرسالة:
على كل حال، هل هناك أي دافع لمشاهدة هذه المنهجيات تستخدم بشكل أوسع؟
عندما أخذت لجنة الشؤون الداخلية الأدلة في تحقيقها في حال الجريمة الإلكترونية في نيسان 2013، قام البروفيسور جيم نورتون، الرئيس السابق لجمعية الحاسوب البريطانية، بإخبار اللجنة التالي:
“نحن بحاجة برمجيات أفضل، ونعلم كيف بإمكاننا كتابة برمجيات أفضل بكثير مما نفعل الآن في تطبيقاتنا الحالية. إننا لا نستخدم المنهجيات الرياضية الرسمية المتاحة، والموجودة لدينا منذ 40 عاماً، لإنتاج برمجيات أفضل.”
بناءاً على أدلة نورتون، طرحت اللجنة في توصيات رقم 32 ” أن تصبح برمجيات البنية التحتية الرئيسية آمنة بصورة مبرهنة، من خلال استخدام المنهجيات الرياضية للكتابة البرمجية.”
بعد شهرين في أيار، أخذت لجنة العلوم والتكنولوجيا الأدلة إلى برنامج رقمي افتراضياً للخدمات العامة المسلمة عبر الانترنت. كان الدكتور مارتن توماس ، مؤسس براكسيس، أحد أكثر الشركات البارزة استخداماً للمنهجيات الرسمية من أجل تطوير أنظمة السلامة الحرجة، أحد الخبراء المدعوين. وقد سُئِل عن كيفية تحقيق المراحل المطلوبة من الأمان، فـأجاب:
إن الكميات الضخمة من التجريب لن تعطيك درجة عالية من الوثوقية بأن الأشياء صحيحة أو تملك الخواص التي تتوقعها. لابد من القيام بذلك من خلال التحليل. هذا يعني أن البرمجيات يجب أن تكتب بطريقة يمكن تحليلها، وهذا تغير كبير عن الطريقة التي يعمل بها المصنع الآن.
أرسلت اللجنة رسالة صريحة إلى سكرتير الحكومة فرانسيس ماود لتسأله فيما إذا كانت الحكومة ” واثقة أن البرمجيات المطورة تطابق أعلى المعايير الهندسية”.
البرمجيات الموثوقة هي الإجابة:
ذكرت الحكومة في ردها على تقرير الجريمة الإلكترونية في تشرين الأول 2013:
إن الحكومة تدعم توصية لجنة الشؤون الداخلية رقم 32. لهذه الغاية قامت الحكومة باستثمار مبادرة البرمجيات الموثوقة، مبادرة مشتركة عامة/خاصة لوضع توجيهات ومعلومات عن تطوير البرمجيات الموثوقة والآمنة.
يبدو هذا الأمر مشجعاً. لم يتم نشر رد ماود إلى لجنة التكنولوجيا والعلوم الذي ذكره ذلك الشهر حتى تشرين الأول 2014، إلا أنه ذكر الشيء ذاته.
لذا قد يعتقد أحدهم أنه تم وضع الـ TSI خصيصاً لمعالجة توصية اللجنة، لكن فيما بعد تبين أن الأمر ليس كذلك.
تم تأسيس الـ TSI عام 2011، تجاوباً مع مخاوف الحكومة من الأمان عبر الانترنت. وقد انتهت مرحلة “بدء العمل” عليها، والتي تم رسمها من الخبرة الأكاديمية للبرمجيات الموثوقة في آب 2014، بالتحضير للدليل المعنون لأطر برمجيات الأمان الموثوقة، المتاحة كمعيار PAS 754:2014 لمعهد المعايير البريطانية.
إنها مجموعة قيمة جداً من تطبيقات هندسة البرمجيات المبنية على المخاطر (وبالمناسبة، التطبيقات الموصوفة في دليل خدمة رقمي افتراضياً ليست ذكية وليست مكررة ولا تتمحور حول المستخدم). لكن حتى الآن لم تعطى المنهجيات الرسمية أي دور في هذا. وقد قدم مدير TSI إيان براينت المنهجيات الرسمية في الخطاب الرئيسي لمؤتمر BSC لمعايير جودة البرمجيات عام 2012 بتنويه عابر على أنها ” الطرق التقنية لإدارة المخاطر”.
وبالتالي، فقد نُصحت الحكومة البريطانية مرتين باستخدام الرياضيات والمنهجيات الرسمية لضمان صحة البرمجيات، لكن إعلانها لمرتين أن TSI هي أداتها للقيام بذلك يدل على أنه لم يحصل أي شيء. لذلك فمرات اختبار الصحة البرامج ستسمر حتى تصل رسالة Dijkstra
ترجمة وإعداد: Ghalia Turki
المصدر: phys.org
عربي باي