ماذا نحتاج من الرياضيات لعلوم الحاسب ؟


عفوا اذا كنت ازجعتك بالاجابة مرتين على اسئلتك المتعلقة بعلوم الحاسوب, لكن هذا النوع من الاسئلة يتكرر كثيرا.

اذا اردت ان تعرف ماهي خلاصة تعليقي اطلع على هذان الرابطين:

وهذا المقال في ويكيبيديا:

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

ربما تشرحها كلمة واحد من اشهر العلماء في علوم الحاسوب حول الخلط بين هذه المفاهيم:

"computer science is no more about computers than astronomy is about telescopes."

او من ويكيبيديا (

)

باختصار يمكن تعريف الـ Computer scientist كالتالي (من ويكيبيديا):

A computer scientist specializes in the theory of computation and the design of computational systems

علوم الكمبيوتر تعتبر جزء من الـ Applied mathemtics, تهتهم بتطوير خوارزميات لحل بعض المشاكل العملية باحسن طريقة. تحتاج الرياضيات من اجل ان تصمم وتثبت ان الخوارزمية التي صممتها تقوم بالعمل المراد باقل جهد. اصلا ظهور مجال علوم الحاسوب كان من اجل مشاكل الـ Computatbility في الرياضيات.

اذا اردت ان تخوض في مجالات مثل Machine learning , Computer security , Image processing , Operating system و Communication systems او غيرها فالرياضيات تعتبر شيء ظروري. اما اذا كنت تستعمل ما طوره الاخرون فقط, فلا تحتاج الى التعمق في الرياضيات, لكن يجب ان تفهم الفروق بين الخوارزميات الموجودة ومتي تستعمل كلا منها.

مثلا هنا مقرر جامعة اوكسفرد, وهناك ايضا فيديوا.

اما فيما يتعلق بالـبرمجة كالـ OOP و تصميم المواقع وتعلم بعض لغات البرمجة, فلا تحتاج الى الرياضيات من اجل ذلك (الا اذا كنت ان تتعمق في خبايها), لكن هي تتعلق كثير بـالـ هندسة. مثلا في الـ OOP تتعلم الـ Design patterns وفي البرمجة اذا كنت تهتهم بجودة البرمجمة, فسوف تاخد بعين الاعتبار كيفية استعمال برنامجك للذاكرة والقرص, متى تعرف هذا المتغير؟ هل في البداية ام عندما تحتاجه؟ ماهو تاثيره على استعمالي للـ Cash ... وغيره من الاسئلة التي تتعلق بالهندسة اكثر من الرياضيات.

وفي برمجمة المواقع سوف تفكر كيفية جعل موقعك يظهر بسرعة واستعاملك للذاكرة والـ bandwidth,... الخ.

بالنسبة لتطبيقات المكتب, على حسب نوع البرنامج.

مثلا اذا كان برنامج يقوم الاتصال بقاعدة بيانات ويقوم بحفظ واستخراج بيانات, لا تحتاج الى الرياضيات , لكن تحتاج ان تتعلم Design pattern (ليس ظروريا, لكن اذا اردت ان تكتب بطريقة محترفة من الاحسن تعلمها).

اما اذا كان برنامجك يقوم ببعض العمليات الحسابية, فربما.

اما من اجل الهندسة العكسية, الجبر البولي ظروري, لانك سوف تتعامل مع ما يسمى بالغة الآلة (او الـ Assembly) لانك سوف تقوم بقراءة البرامج التي تريد هندستها عكسيا بهذه الللغة. لكن في الحقيقة الجبر البولي بسيط جدا.

كما ربما تحتاج ان تتعلم الـ Combinatorics وبعض اساسيات الجبر مثل الجبر الخطي والـ discrete mathematics لانها تستعمل كثيرا في خوارزميات التشفير.


برمجة

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

24.6 ألف متابع