حصريُ اليوم

سائدُ المستقبل


رحلة من النقش الى المجهول




في مقال سابق “مروضوا النار واللآلة” تحدثنا بحديث مقتضب عن الذكاء الاصطناعي.

في الواقع الذكاء الاصطناعي ماهو الا نتيجة طبيعية لتطور علوم وهندسة البرمجيات، حيث انها تعتبر من العلوم الحديثة نسبياً لكنها اثبتت وفي وقت قصير ان لا حدود لامكانياتها





البداية

يعود تاريخ الكتابة الى 5400 قبل الميلاد في بلاد السومريون، حيث كانت الحاجة الى توثيق البضائع الصادرة والواردة للمدينة المقدسة ملِحة، وتلبيةً لتلك الحاجة ابتكر رجال الدين القائمون على شؤون المدينة طريقةً للتوثيق وهي وضع علامة”mark” تحت كل بضاعة، ولكل بضاعة رمز”symbol” مرسوم يمثلها كما هو موضح في الشكل:

فكان كل رمز يمثل صفة للباضعة المرصدة، لكن ومع مرور الوقت استحالت الصفة الى اسم، فاصبح الرمز ذو معنى تجريدي.

اي ان رمز القمح كان صفة لدخول كيس قمح للمدينة، ثم صار اسم يكتبه الناس في رسائلهم الخاصة ويعني “القمح” بصورة تجريدية ولا يقصدون به القمح الذي يرصد عند دخول المدينة.

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


لا يسع المقام.. ولا اي مقام !!! لوصف اهمية الحرف والكلمة، ولا الرقم من باب اولى…

فاللهم لا تحملنا ما لا طاقة لنا به.


لكن شدتني مقولة للدكتورة في علوم الحاسب، الامريكية “كورنيليا كونولي”:

“programming is the literacy of the twenty-first century”

( عدم معرفة البرمجة هي الأمية في القرن الحادي و العشرين ).

كلمة الهمتني لكتابة هذا المقال !

وفي كلمتها اعلان بأن الكود ربما يصبح في يوم من الايام كأهمية

القراءة والكتابة للناس كافة.


وكما تطور الحرف… فقد تطور الكود

فالبداية الحقيقية للغات البرمجة كانت في عام 1940 حيث تم تطوير لغة اكثر ملاءمة للبشر !!! لما وجده المبرمجون من صعوبة في التعامل مع “الشفرة الثنائية” (0،1).


تصنيف لغات البرمجة

تصنف لغات البرمجة الى:


  • لغة برمجة منخفضة المستوى(lvl) :

    وهي الاقرب للغة الآلة (machine language)، وتعتبر صعبة في التعلم.

    من امثلتها:

    -Assambly

    -machine code

  • لغة برمجة عالية المستوى(hlv) :

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

    من امثلتها:

    -python

    -java

    -PHP

    -Ruby


ومع مرور الوقت فان الفجوة بين اللغات العليا والعتاد تتسع، فلغة البايثون تستخدم لغة C لترجمة الكود الى مستوى منخفض، ولغة C تستخدم لغة Assambly لترجمة الكود الى الآلة.


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

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

تصنف البراهين على النحو الآتي:


  1. برهان رياضي

  2. برهان عقلي

  3. برهان تجريبي

  4. برهان حسي


ويعد البرهان الحسي هو اضعف البراهين لأنه يعتمد على حواسنا الخمس.

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

وهناك المهندس، الذي يعمل على ماتم اسنتاجه من قوانين ونظريات ليطبقها فيما ينفع الناس، مثل كل شئ يحيط بك الآن على سبيل المثال!

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


رأي خبير

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

هو الأستاذ حمد بن عبدالوهاب الهندي، متخصص في الفيزياء والرياضيات.

وأول نقطة أحب أن يعلق عليها هي لماذا يكره بعض الطلاب البرمجة؟

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

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

بالضبط

هل عندك مثال لتجربة الشخصية؟

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

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

ممتاز، ماهي لغة/ات البرمجة اللي تستخدمها؟ ولماذا؟

Swift: تطبيق لطلبة كلية العلوم

ROOT: المنظمة الأوروبية للأبحاث النووية

Python: القمر صناعي سماب التابع لوكالة الفضاء الأمريكية Matlab: محطة الآيرونيت التابعة لوكالة الفضاء الأمريكية

وكما رأينا انه والبرغم من ان حمد خريج كلية العلوم (ولا اريد ان اتكلم عن لسانه) الا ان البرمجة ساعدته في حياته العملية بشكل ملحوظ.



لماذا البرمجة مهمة للمهندسين والعلماء؟

واقتبس هنا من مقالة “Why Scientists and Engineers Must LearnProgramming”

Three Reasons To Learn

Over the past few years, many scientists and engineers have ranted to me about how furious they are that nobody made them learn programming back in high school or college. They now realize how much more productive they could be at work if they had developed those skills earlier.

Based on these conversations, I've come up with three reasons why scientists and engineers must learn programming:

  1. You can work 10 times faster by writing computer programs to automate tedious tasks (such as data cleaning and integration) that you would otherwise need to do by hand. If you know how to program, computer-related tasks that used to take you a week to finish will now take only a few hours. I can't think of any other skill that leads to an instant 10x productivity boost for scientists and engineers.

  2. Programming allows you to discover more creative solutions than your colleagues who don't know how to program. It lets you go beyond simply using the tools and data sets that everyone else around you uses, to transcend the limitations that your peers are stuck with. For example, you'll be able to write programs to automatically acquire data from new sources, to clean, reformat, and integrate that data with your existing data, and to implement far more sophisticated analyses than your colleagues who can only use pre-existing tools. By doing so, you're more likely to make a creative innovation that your colleagues wouldn't even think of exploring due to lack of programming skill.

  3. Finally, knowing how to program allows you to communicate effectively with programmers that your lab hires to do the heavy-duty coding. I don't expect you to become as adept as the professionals, but the more you know about programming, the more you'll be able to relate to them and to command their respect. If you can motivate programmers in your lab to spend more of their time helping you solve technical problems (e.g., by writing parallel programs that run on a compute cluster), you can work 100 times faster than if you had to attack those problems alone.



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

لكن في الواقع كيفين لا يقضي سوى 5% من وقته في العمل المداني، و95% من وقته على مقابل الحاسب، يكتب اكواد لينقل ويعالج ويحلل البيانات المرصودة

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


دراسة

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



كانت الفقرة الأولى، كطالب في المجال الهندسي أرى ان البرمجة:


  • 42.1% مهمة ولدي خلفية عنها
  • 30.3% مهمة و "ليس" لدي خلفية عنها
  • 11.3% غير مهمة ولدي خلفية عنها
  • 16.3% غير مهمة و "ليس" لدي خلفية عنها
42.1% مهمة ولدي خلفية عنها30.3% مهمة و "ليس" لدي خلفية عنها11.3% غير مهمة ولدي خلفية عنها16.3% غير مهمة و "ليس" لدي خلفية عنها

من كان جوابه ب”ليس لدي خلفية عن البرمجة” لا يحصل على اسئلة اخرى، لانه لايملك الخلفية ولا يستطيع ان يعطي رأي في الموضوع اي ان 46.6% لم يكملوا الاستبانه.


ال 53.4% الذين لهم خلفية برمجية، كانت في اللغات التالية:

  • programming languages

تعتلي لغة C++ التصويت باعتبارها اللغة التي تدرس بكلية الهندسة في جامعة الملك سعود


الذين قالوا انها مهمة ولديهم خلفية عنها جاوبوا على، ما مدى اهميتها اذا ؟

  • 57.9% مهمة ويجب تدريسها والاعتماد عليها في حل المشكلات
  • 38.1% كمالية ويجب اخذ فكرة بيسطة عنها
  • 4.0% مهمة لكنها حصرية لطلاب تخصصات الحاسب ولايجب تدريسها
57.9% مهمة ويجب تدريسها والاعتماد عليها في حل المشكلات38.1% كمالية ويجب اخذ فكرة بيسطة عنها4.0% مهمة لكنها حصرية لطلاب تخصصات الحاسب ولايجب تدريسها

وهذه بعض آرائهم:

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


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


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


الذين قالوا انها غير مهمة ولديهم خلفية عنها، طلبنا توضيحاً… لماذا؟

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

ك طالب في قسم المدني أرى أن البرمجه ليس لها صله مباشره في مجالي بتاتا + قمت بسؤال مهندس مدني يعمل في المجال منذ ٨ سنوات قال لي ( لم استخدم البرمجه ولا مره من تخرجت ومدري ليه اصلا ندرس برمجه وماتلاب)


يوجد برامج هندسية اولى ان تدرس اجبارية من لغة البرمجة سي++ مثلا انسيس وغيرها


ليس كل مهندس يجب أن يكون مبرمج وليس كل مبرمج يجب أن يكون مهندس هي مثل الفائدة فقط



نتيجة

نجد ان 72.4% يرون ان البرمجة مهمة، وهذه نسبة ممتازة وتنم عن فهم واطلاع على متطلابات ووسائل النجاح اولا وسوق العمل ثانياً.

ونجد ان هناك سوء فهم بماذا يقصد بالبرمجة، Matlab على سبيل المثال يعتبر لغة برمجية والاردوينو المبنية على لغة C++ ، وغيرها من اللغات البرمجية المختصة.

وهناك لغات متعددة الاستخدامات مثل JAVA و python و Ruby فتعلمها نور على نور، فبها توسع المدارك وتعطيك مزيد من الخيارات لحل المشاكل.


ختام

تعلم البرمجة لم يعد حصرياً للمختصين بها، فدائرة التخصصات والمهن التي تعتمد على البرمجة جزئيا او كليا في اتساع مستمر، وان يخصص المرء جزء من وقته في تعلمها امر رائع جدا ويضيف لنفسه ميزة تنافسية مهمة علميا ومهنيا، وربما يختلط ببيئة المبرمجين والذين هم بالمناسبة “رهيبين :)

البرمجة اليوم اصبحت ضرورة في البيئة العملية والاكاديمية، ولن تلبث ان تصبح كما قالت “كورنيليا كونولي” امية القرن الحادي والعشرين، فسيتعلم العامة ولو شكل من اشكال البرمجة الضرورية للتعامل مع تكنولوجيا المستقبل، فحصري اليوم هو سائد المستقبل.