علوم الحاسب الآلي بين النظري(!!الغير مهم!!) والتطبيقي(!! المهم !!)

بسم الله الرحمن الرحيم
علوم الحاسب الآلي بين النظري(!!الغير مهم!!) والتطبيقي(!! المهم !!)
 
الحمد لله حمدا كثيرا مباركا طيبا فيه, الحمد لله حمدا كما ينبغي لجلاله وعظيم سلطانه , الحمد لله رب العالمين.
 
في عصرنا الحاضر, ومع تسارع الوقت, والتطور المخيف الذي نشاهده في الأوساط المعلوماتية, فإننا نجد أن العلوم تكثر, والكتب واللغات والبرامج تزداد بشكل كبير, بحيث أصبح من الصعوبة بمكان ..أن يصبح الإنسان التقني ..ملما بجميع الجوانب ..وإنما أصبح يضيق شيئا فشيئا وصولا الى مرحلة يمكن أن نسميها بعمق التخصص أو الخبرة....
 
والآن .. كثيرا ما نشاهد أسئلة تدور لماذا أتعلم وأدرس العلوم النظرية في الحاسوب, لماذا أتعلم الرياضيات, لماذ أتعلم هيكلية الحاسوب وما هي الية التفكير الخاصة به, ولتخصيص الموضوع أكثر.. لماذا لا أتعلم لغة البرمجة لوحدها .. ؟؟ ..لماذا أقرأ بكل تلك العلوم والمجالات ؟!
 
وسأجيب عن هذه الأسئلة بإذن الله تعالى, وذلك عن طريق شرح أهمية بعض العلوم التي هي ذات أهمية كبيرة في علوم الحاسب ومهمة جدا في مجال البرمجة ونبدأ ب:
1) الرياضيات: يعد علم الرياضيات من العلوم المهمة جدا في علم الحاسب الآلي, وتزداد أهمية هذا العلم باختلاف المرحلة أو الوظيفة التي ستقوم بها, وموقعها من دورة حياة هذا النظام.. ..وتكمن أهمية الرياضيات في عدة مجالات في التعامل مع الحاسوب وهي:
أ) برامج الحاسوب هي تعبيرات رياضية. (Computer programs are Mathematical expressions )
ب) لغة البرمجة بذاتها هي نظريات رياضية. (A programming language is a Mathematical theory)
ج) والبرمجة هي نشاط رياضي(تفكير رياضي). (Programming is a Mathematical activity.).
هذا الكلام الذي تم ذكره, هو مهم جدا لفهم الحاسوب.. فإذا لاحظت النقاط الثلاث ..فهي تشير الى الحاسوب ..بلا استثناء ..فلقد رأينا أن الرياضيات هي البرامج وهي لغات البرمجة وهي البرمجة بذاتها وطريقة التفكير بها ...فهل أنت مصر على عدم أهمية هذا العلم ؟؟؟
اضافة صغيرة: الرياضيات يعد من أهم العلوم المستخدمة لبرمجة الألعاب ^_^.
حسبما يرى المختصون, فإنه كثير من الطلاب ..أو الدارسين لعلم الحاسوب ..لم يكونوا يعلموا أو يشعروا بأهمية الرياضيات, ودوره الكبير في التخصص الذي يدرسه ..لذلك تجد هذا الكره أو البعد عنه ...
ومن أهم المجالات التي توجد في الحاسب الآلي ويلعب الرياضيات بها دورا رئيسيا:
Formal methods, Modern logics, Parallel processing, Modeling, Complexity, Computability, Encryption and coding, Statistics and probability, Neural networks.
جميع هذه المجالات التي تم ذكرها ..تعتمد على الرياضيات بشكل مخيف ..وللعلم ..ليس بجانب واحد من الرياضيات فقط... وإنما بعدة جوانب .. مثل الجبر الخطي والخوارزميات والمتسلسلات والمتتاليات الحسابية وحل المعادلات بأكثر من متغير ...الخ
 
وبإذن الله تعالى ..سنتطرق في موضوع آخر حول ماهية أو شرح الفكرة من كل مجال من هذه المجالات التي تم ذكرها ...
 
2) هيكلية الحاسوب والبنية التركيبة له:
كثير ما تسائلنا  لماذا أتعلم البنية التركيبة للحاسوب.. لماذا أتعلم كيف يتم معاجلة البيانات أو كيفية انتقالها من ال RAM الى CPU مثلا .. لمذا أهتم ..هل تم حفظ القيمة في الجزء الثاني أو الرابع..أم تم الحساب بوحدة الحساب أو بغيرها !! ...
وسأجيبك بالآتي ..بما أنك مبرمج .. هل يكون تعاملنا مع غير هذه الإجرائات؟
أنت عندما تقوم ببناء برامج ..هل يمكنك تجاهل الية التفكير التي بتبع لها الجهاز؟
هل يمكنك أن تخبرني ..كيف يمكن أن تقاتل قوم أو تعد العدة لمحاربة قوة لا تعرف من هم, ولا هي إمكانياتهم ..أو طبيعة أرضهم !! .. وكذلك الحاسوب .. ^_*
 
بأبسط حال ..يجب عليك ان تعرف كيف يفكر الحاسوب, وما هي الخطوات التي يمر بها ليرجع لك المعلومة التي تريدها ..وترسل البيانات التي يطلبها ..
هل سبق وتعاملت مال ال thread ؟ .. وهل سبق وتعاملت مع Parallel processing  ؟
برأيك ..هل يمكنك تتبع ال micro instruction في حال أردت ذلك وأنت لا تعرف ما هي أصلا.. ؟
إن أهمية علوم الحاسب النظرية ..كأهمية تعلم الأرقام للقيام بعملية الجمع .. فلا تستطيع الجمع ..دون معرفة الأرقام ..
لكن في المقابل هذا لا ينفي وجود مبرمجين لا يعرفون بهذه التخصصات ..وليكون المصطلح أدق .. هناك مطور برامج, وهناك مبرمج وهناك المرمزين... نعم ..فلا تتعجب ..
المطور (Developer): عموما ..يمثل هذا الشخص المستوى الأفضل بين المبرمجين, وله قدرة عالية على فهم الخوارزميات وتحليلها, بالإضافة الى معرفته الكبيرة بأكثر من لغة, وإمكانية التحكم بها ... ويتمتعون بمهنية عالية وأداء عال...
المبرمج (Programmer): هذ الشخص يفهم الخوارزميات..ويستطيع كتابتها .. ويستطيع العمل لوحده بشكل جيد ...
المرمزين( Coders): وهم أشخاص يمكنهم القيام بالمهام الموكلة اليهم في غالب الأحيان, لكن  الشيفرة البرمجية الخاصة بهم ليست احترافية ..وللأسف كثير من هؤلاء أهملو الخوارزميات والرياضيات ..واهتموا فقط بطريقة تظهر لهم النتائج ..وتدر عليهم المال !!
 
*) ملاحظة: هذه التعريفات مختصرة قدر الإمكان ..ودون تفصيل لكل جزء ..وإنما أردت التنويه لفكرة المسميات ...وقد تجد أن هناك تصنيفات تقسم المسميات الى 5 أجزاء ..
 
بالنسبة الى أهم المجالات للتعامل مع بنية الحاسوب وهيكليته هي:
Scalable Architectures,Parallel Programming & Software,
Storage & I/O Subsystems,Infrastructure Services Engineering,
Asynchronous Circuits and System.
 
فما رأيك الآن ... ^_^
 
اخواني ..إن العلم النظري ..لا ينفصل عن كونه مكونا أساسيا في العلم العملي.. وكلاهما يعتمد على الآخر.. لكن أن نقيس أخطاء البعض على مجمل العلم ..فهذا خاطئ, إن من أخذ الجانب النظري ..لوحده مخطئ, ومن أخذ الجانب العملي لوحده ..مخطئ..
يجب أن يكون هناك توافق بين الإثنين ..والذي يحدد مقدار التأرجح بينهما ..هو طبيعة عملك - طموحك - هدفك - بيئتك ...
 
في هذه المقالة البسيطة .. لم يقصد التقليل من المبرمجين الذين ليست لديهم هذه العلوم..بل هناك أشخاص أبدعوا بشكل ليس له مثيل .. لكنهم أقلة ... أيضا إذا نظرت الى كثير من المبرمجين العالمين والذين يصنفون على أنهم XP .. ستجد أنهم أولوا اهتمام كبيرا لهذه العلوم ..بالإضافة الى لغة البرمجية ببنيتها وتركيبها ...الخ
 
أخيرا ..أحب أن أنوه أصدقائي .. أنه طالما بقي في عروقك نبض, فيجب أن لا تتخلى عن التعلم .. نعم, تخصصنا جميل ورائع.. والذي يعطيه هذه النكهة...أنه في تطور مستمر ..وأنت بحاجة الى توحيد جهودك, لتواكب هذا التطور وهذا العصر ... لا يأس مع الحياة..ولا حياة مع اليأس... وتأكد أنك جيد .. ولكنك بحاجة للأفضل.. وبالنسبة لي شخصيا ..أرى نفسي ببداية الطريق ليس الا ..لأنني أرى طموحا كبيرا أمامي .. فماذا عنك ؟..هل تحب أن تكون طموحا وتنظر الى الأمام .. أم أنك تريد البقاء في موقعك .؟؟
 
وآخيرا ..الحمد لله رب العالمين
اللهم اغفر لي ولوالدي وللمسلمين أحيائهم وأمواتهم إنك سميع عليم.
 
أخوكم: أنيس حكمت أبو حميد.