مبرمج الألعاب Notch و القدرات الخارقة (سوبر مبرمج)

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

قام Notch في أكثر من مرة بعمل بث حي لشاشته أثناء برمجته لبعض الألعاب، عندما رأيته يبرمج لأول مره تغيرت لدي كثير من القناعات حول “البرمجة بفعالية”. في أحد المرات، كان Notch مشارك في مسابقة لبرمجة لعبة خلال 48 ساعة، وأتذكر أنه واصل البرمجة لمدة يومين لم يتوقف خلالها إلا لسبعة ساعات تقريبا. إن أفضل وصف أجده لهذا الشخص هو: “المبرمج الخارق”.

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

هذا بعض ما لاحظته وأنا أشاهده يبرمج:

  • فترات تركيز طويلة:
    هذا من أبرز ما لاحظته أثناء متابعتي له خلال البث الحي، كان يقوم بالتركيز على البرمجة لفترات طويلة جدا لا يقطعها بمتابعة تويتر أو فيس بوك أو غيره، البعض علق و قال أن لديه شاشة ثانية يتصفح فيها، لكن الحقيقة حتى إن كانت لديه شاشه ثانية فهو يظل يركز على كتابة الأكواد دون إنقطاع أو تشتت.
  • لغة Java:
    كل المشاريع التي أعرفها لهذا المبرمج الخارق قام بتطويرها بلغة Java، هذا الأمر جعلني أعيد التفكير في بعض قناعاتي عن لغات البرمجة، نحن غالباً نبحث عن لغة البرمجة الأنسب، لكن Notch ببساطة اختار لغة البرمجة التي يجد نفسه أكثر احترافية فيها، أيضاً لم يركز على جعل اللعبة تستخدم Flash أو أي منصة أخرى بل ببساطة قام بنشرها كـ Java Applet، بالرغم من كل الإنتقادات التي يمكن أن تسمعها من أن Java Applet بطيئة و غير عملية و غيره.
  • أدوات تطوير بسيطة:
    بعض المبرمجين “القيكس جدا” يركزون عىل الأدوات البرمجية أكثر من البرمجة نفسها! أما Notch فقد كان يستخدم بيئة Eclipse بطريقة أشبه ما تكون بالبدائية، حتّى أن بعض الناس انتقدو عليه عدم استخدامه لكافه الإختصارات في Eclipse، لكن كان يعرف كيف ينجز وهذا هو المهم.
  • طرق إختبار سهلة:
    كان هذا المبرمج الخارق يبرمج دالة معينة ثم يقوم بتشغيل برنامجه و إيقافه عند نقطة ما (طريقة الـ Debugging المعروفة) ثم يستخدم آلية تسمى Hotswap تسمح له بتغير الكود الخاص بالدالة ثم إعادة تشغيلها مرة ثانية دون الحاجة لإعادة عمل كومبايل أو تشغيل لكامل البرنامج، لك أن تتخيل أهمية مثل هذه الآلية عند برمجة شيء معقد مثل الألعاب.

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

تحديث 1: هذا فيديو مسجل لبث حي قام به Notch أثناء برمجته لأحد الألعاب لمدة تجاوز الـ 12 ساعة:
http://www.twitch.tv/notch/b/293132744
المقطع يحتوي على موسيقى!

الأدوات المستخدمة لتحليل بيانات مستخدمي تويتر

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

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

إستخدمت لغة البرمجة Python مع مكتبة Tweepy للتواصل مع خدمة تويتر. بعد جلب بيانات المستخدمين و تحميلها على Redis قمت بالمرور على كل حساب و استخرجت الكلمات الموجودة فيه. كل كلمة تمر على عدة فلاتر لتقليل الإختلافات الإملائية قدر الإمكان (مثلاً حرف التاء المربوطة يتم استبداله بهاء ليتم التعامل مع الكلمتان “طالبة” و “طالبه” على انهما نفس الكلمة), أخيراً كل كلمة تعطى معرف (ID) خاص بها، استخدمت خوازمية SHA-1 لهذا الغرض، هذا المعرف يسهل عملية جمع المكرر بحيث أي كلمتين لهما نفس المعرف تعتبران كلمة واحدة. أخيراً، حسبت النتائج ثم حفظتها في ملف خارجي وعرضتها لكم كما رأيتم في التدوينة السابقة.

نظام Redis مرن جداً و سهل الإستخدام، كانت من حسناته أنه سرّع عملية تحليل البيانات بشكل ملحوظ. أرشحه لكل شخص يحتاج للتعامل مع بيانات كبيرة ليس لها هيكل محدد (ليست جداول و أعمدة مثل أنظمة قواعد البيانات التقليدية) و يحتاج لوصول سريع لهذه البيانات.

الكلمات الأكثر تكراراً في وصف (Bio) عينة من مستخدمي تويتر

قمت بإجراء تحليل سريع لعينة من حسابات أكثر من 110 آلاف مشترك في تويتر، معظم العينة كانت من السعوديين، هدف التحليل هو استخراج الكلمات الأكثر تكراراً في وصف هذه الحسابات (Bio – وهو نص بطول لايزيد عن 160 حرف يتحدث فيه الشخص عن نفسه)، الصورة التالية تظهر الثلاثين كلمة الأكثر تكراراً :

الكلمات الأكثر تكرارا في حسابات تويتر

الكثير من الكلمات الأخرى المهمة و التي قد تساعد على فهم طبيعة شريحة مستخدمي تويتر السعوديين لم تذكر في الرسم البياني أعلاه لضيق المساحة، الكلمات التي ترددت على الأقل عشرة مرات (تقريباً 7 آلاف كلمة) يمكن مشاهدتها في هذا الملف، و يمكن كذلك تنزيل ملف مضغوط يحتوي كل الكلمات (تقريباً 76 الف كلمة) مع عدد مرات تكرارها، الملف محفوظ بترميز UTF-8 و الحقول متباعدة باستخدام Tab.

هذا التحليل بسيط جداً، يمكن تحسينه بجمع الكلمات المتشابهه (مثل “هلال” و “هلالي”) و غيرها للحصول على أرقام أكثر دقة. أخيراً، يمكنك استخدام البيانات كيفما تشاء تحت ترخيص Creative Commons Attribution 3.0 Unported License.

كيف تبني نظام توصية (Recommender System)

Data Mining: Finding Similar Items and Users

عندما تتصفح أحد الكتب في موقع أمازون ستجد الموقع يقدم لك توصيات لكتب أخرى قام بشرائها مستخدمين آخرين للموقع، هذه التوصيات غالباً ماتكون قريبةَ جداً من نوعية الكتب (أو السلع) التي تفضلها أنت لأنها عُرِضت عليك بناءً على تحليل البيانات المتعلقة بالسلع التي تفضلها و تفضيلات المستخدمين الآخرين، هذا النوع من تحليل البيانات يتم عبر أنظمة تسمى أنظمة التوصية Recommender Systems (كذلك يسمى Collaborative Filtering في بعض الأحيان). يقدم كاتب هذه المقالة شرحاً مختصراً عن هذه الأنظمة و يعرض مثالاً حياً (مع كود برمجي بلغة Ruby) لعدد من المقاييس (الرياضية) المستخدمة في بناء أنظمة من هذا النوع.

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

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

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

بدأت بحثي في الإنترنت بعدما أحسست ببوادر الم في ظهري، فوجدت أن موضوع “الكرسي الأنسب للمبرمجين” قد أثير كثيراً عند الغربيين، هناك مثلاً موضوعاً في Coding Horror بعنوان A Developer’s Second Most Important Asset يقول فيه الكاتب أن ثاني أثمن شيء بالنسبة لنا كمبرمجين بعد عقولنا هي ظهورنا! وأنه يجب أن نستثمر بعضاً من المال في “كرسي” ذي جودة عالية، وفي مقال آخر بعنوان Investing in a Quality Programming Chair نُشر في نفس المدونة السابقة، ذكر الكاتب ثلاثة أسباب تجعله يؤمن أن “الكراسي” مهمة في مهنتنا نحن المبرمجين، أترجمها و الخصها هنا بتصرف :

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

ومن الأشياء التي جعلتني أفكر في هذا الأمر بشكل أكثر جديه هو لقائي بـ Joel Sploskey الكاتب المعروف لمدونة Joel on Software و مؤسس شركة Fog Creek Software، كان الرجل يؤكد على أن المكتب و “الكرسي” هم من أهم الأشياء التي يجب أن يهتم بها أي شخص يرغب في توظيف مبرمجين.

خلاصة الأمر و حتى لا أطيل عليكم، وجدت أن الكثيرين يجمعون على أن أفضل كرسي للمبرمجين هو الكرسي المسمى Aeron Chair من شركة Herman Miller، سعره يقارب الـ 900$ دولار أمريكي، استطعت أن أحصل عليه بحوالي 650$ عن طريق أحد الموزعين المحليين (عناوين الموزعين المحليين موجودة في صفحة Global Dealer Locator )

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

هل توافق في ان الكرسي له أهمية بالنسبة للمبرمج ؟

ماهو نوع الكرسي الذي تستخدمه حالياً ؟ وهل تفكر في شراء كرسي جديد ؟

شاركني رأيك برد في مدونتي أو بموضوع في مدونتك ..

معاً، خطوة بخطوة.. يوميات مشروع جديد

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

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

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

لن أتبع أي نهج أو طريقة علمية في بناء الموقع، وليس بالضرورة أني ساستخدم أي نموذج من نماذج بناء البرمجيات Software Development Life Cycle، وقد يخالفني البعض في ذلك، لكني فقط أريد أن أبرمج بحرية.

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

خمسة (5) أدوات أستخدمها عندما أبرمج

لكل منا عادات و أدوات خاصة يستخدمها عندما يبرمج، اخترت لكم خمسة من الأدوات التي استخدمها شخصياً، ولم أقم بترتيبها وفقاً لأي شيء هي مجرد مجموعة من الأدوات التي أستخدمها و أعتقد أنها قد تفيدكم

  1. محرر نصوص Text Editor : حالياً أستخدم Notepad++ كمحرر نصوص رئيسي على نظام التشغيل ويندوز و vim على لينكس، قرأت كثيراً عن محرر النصوص Textmate وأجد حماسة كبيرة في كل من يكتب عنه، لكن للأسف لا يعمل إلا على نظام التشغيل Mac.
  2. باحث داخل الملفات النصية Text Search : أحتاج دائماً أن أبحث داخل الملفات النصية عن تعريف متغير، أو توصيف دالة، أو أي شيء آخر لذلك أعتبر أداة البحث داخل الملفات النصية أداة أساسية. غالباً ما أستخدم الأمرgrep في لينكس لإجراء عمليات البحث، أما على ويندوز فأستخدم محرك البحث الموجود مع برنامج Notepad++ و أحياناً أستخدم البرنامج المجاني : winGREP .
  3. إدارة الإصدارات Version Control System : تستخدم هذه الأنظمة أساساً في إدارة المشاريع التي يعمل عليها أكثر من مبرمج لحفظ كافة التعديلات حتى يمكن الرجوع إلى إصدارات سابقة عند الحاجة (إضافةً إلى استخدامات أخرى كثيرة تحتاج لموضوع منفصل لشرحها )، لكن شخصياً أقوم باستخدام هذا النظام لحفظ كافة مشاريعي في مكان واحد (المخزن) ثم عندما أحتاج لأحد هذه المشاريع أقوم بجلبه من المخزن و أعمل عليه ثم أعيده مره أخرى، بهذه الطريقة أتأكد أن مشاريعي كلها في مكان واحد أستطيع الوصول إليها بسهولة، وكافة التعديلات التي أجريها تحفظ مع إمكانية الرجوع للنسخ القديمة من ملفاتي، وفوق هذا و ذاك أستطيع أن أصل لمشاريعي من أي مكان طالما أن المخزن يمكن الوصول إليه من خلال الإنترنت. أستخدم على جهازي الشخصي نظام Subversion و لدي موقع على الإنترنت مجهز بسيرفر من نفس النوع كذلك.
  4. مؤقِت Stopwatch : الساعة المؤقتة التي تقوم بحساب الوقت عند الضغط عليها و تتوقف عند الضغط عليها مره ثانية، أعتبرها أداة أساسية تساعدني على التركيز و الإنجاز إلى حد كبير، حقيقةً أريد أن أبالغ و أقول أنها الأداة الأفضل التي استخدمتها و ساعدتني لزيادة فعاليتي بشكل ملحوظ، كل ما عليك فعله هو تحديد إطار زمني (20 دقيقة مثلاً) شغل المؤقت و ابدأ العمل، بشرط أن تلتزم خلال العشرين دقيقة بإنجاز وظيفة واحدة فقط، هذه الطريقة لن تساعدك على التركيز فقط بل ستتمكن مع الوقت من تطوير مهارة تقييم الزمن اللازم لإنجاز بعض الوظائف، مما سيساعدك على تقييم سعر برامجك بشكل أفضل. حالياً أستخدم ساعة الكترونية صغيرة اشتريتها بمبلغ 30 ريال (8$) أحملها معي عندما أريد إنجاز أعمال غير متعلقة بالكمبيوتر (كالقراءة مثلاً)، أما عندما أقوم بالبرمجة أو أعمال أخرى لها علاقة بالكمبيوتر فأستخدم برنامج Instant Boss وهو برنامج جميل و بسيط جداً يعتمد على فكرة تقسيم جلسة العمل إلى أجزاء، مثلاً إذا كنت تريد أن تعمل لمدة ساعة تقوم بإعداد خمسة جلسات مدة كل جلسة 10 دقائق تتخللها دقيقتين راحة، و عند تشغيل البرنامج سيبدأ بحساب الجلسات و إعلامك عندما يحين وقت الراحة، للمزيد عن البرنامج يمكنك قراءة موضوع How to Beat Procrastination with an Instant Boss (كيف تتغلب على المماطلة باستخدام برنامج Instance Boss)، يمكنك أيضاً استخدام خدمة Online Stopwatch إذا لم تكن ترغب في تنزيل أي برنامج على جهازك.
  5. اختصارات المجلدات Folder Shortcuts : على سطح مكتبي أقوم بإنشاء مجلد أسميه Projects، بداخله أنشئ ثلاث اختصارات لثلاثة مشاريع أعمل عليها، قد يكون المجلد الأساسي للمشروع موجود بداخل htdocs الخاص بالأباتشي أو قد يكون مجلد مؤقت أنشأته في أي مكان آخر المهم أني أستطيع الوصول لمجلد مشروعي مباشرة من على سطح المكتب، اخترت الإبقاء على ثلاثة مشاريع فقط لأني أعتقد أنها العدد الأنسب من المشاريع التي يمكن لي أن أعمل عليها في نفس الوقت.

وعدتكم بخمسة أدوات عشوائية، لكن عندما وصلت إلى هنا تذكرت أدوات و تقنيات أخرى تستحق أن يكتب عنها، مثل Meta-Programming وهي برامج تقوم بإنشاء برامج أخرى أو أجزاء منها، تذكرت كذلك “قلم الرصاص” الأداة التي قد تساعدك على حل الكثير من المشاكل ببضعة شخبطات على الورق، و طريقة Unit Testing الذي تساعدك على أن تتأكد أن الكود يعمل كما يجب و تتأكد أن أي تعديل أجريته لم يؤثر على أجزاء آخرى من البرنامج…. الخ من الأدوات الكثيرة و الممتعة، سأتوقف الآن و أكتب إليكم لاحقاً (إن شاء الله).

“لكن الله يراها !” – الإتقان

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

نعم صدق “فيدياس” و أجاد التعبير .. “إن الله يراها !” …

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

أتخيل أن هذا المبرمج لم يعتقد أبداً أن شخصاً آخر قد يراجع الكود الخاص به من بعده وأنه قام بهذا العمل على هذا النحو لأنه أمن العقوبة … لو أنه أستشعر “لكن الله يراها” لأتقن شفرة البرنامج تماماً كما أتقن في الواجهة و لفعل مثل “فيدياس” عندما أتقن نحث التمثال من الخلف تماماً مثلما أتقنه من الأمام.

صحيح أن شفرات برامجنا لا يراها غيرنا عادة، “لكن الله يراها” وقد وردنا عن حبيبنا و قدوتنا محمد صلى الله عليه و سلم : “إن الله يحب إذا عمل أحدكم عملاً أن يتقنه” ، فليكن شعارنا من الآن “لكن الله يراها” …

الوصفة الأكاديمية للحاسب الآلي

مجموعة نقاط غير مرتبة عن دراسة الحاسب الآلي في الجامعة.

من كل بستان زهرة
مرحلة البكالوريوس لتخصص علوم الحاسب الآلي Computer Science لا تركز على موضوع محدد بل يدرس الطالب فيها كل شيء و أي شيء عن الحاسب، فتجد مادة عن الـ Hardware و أخرى عن أنظمة التشغيل و ثالثة عن لغات البرمجة و يدرس هندسة البرمجيات Software Engineering و تحليل و تصميم الأنظمة System Analysis And Design و الذكاء الصناعي، هكذا من كل بستان زهرة.

المخرجات
بحسب الخطة الدراسية المقترحة من ثلاث منظمات ( ACM و AIS و IEEE-CS ) فإن المتخرجين من قسم علوم الحاسب الآلي يعملون ضمن ثلاث مجالات عمل رئيسية :

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

كيف تصبح أكاديمياً بدون الدخول للجامعة ؟
إذا أردت أن تحصل على نظرة سريعة على أغلب المواضيع التي تدرس ضمن قسم علوم الحاسب الآلي، فأنصحك بكتاب Foundation Of Computer Science، فهو يستخدم لغة بسيطة في الشرح و يستعرض في 300 صفحة تقريباً أكثر المواضيع المتعلقة بالتخصص و متوفر في مكتبة جرير في السعودية، يمكنك أيضاً الإطلاع على صفحة Computer Science في Wikipedia و تجد فيها قائمة بالمواضيع و المجالات المرتبطة بالتخصص.

مواد استمتعت بدراستها

  • Operaing Systems أنظمة التشغيل.
  • Computer Graphics الرسم بالحاسب الآلي: لم أكن أتصور أن عملية رسم مربع أو دائرة أو اي شكل هندسي آخر معقدة إلى هذا الحد!!، تعرفت في هذه المادة على الكثير من الخوارزميات المستخدمة في الرسم.
  • Design and Analysis of Algorithms تصميم و تحليل الخوارزميات: لب علوم الحاسب الآلي كما يحلوا لي تسميتها، وماذا يكون طالب علوم الحاسب الآلي إلا مجموعة خوارزميات 😀 .
  • System Analysis and Design تحليل و تصميم الأنظمة: التحليل و التصميم هما المرحلتان اللتان تسبقان عادة مرحلة التنفيذ، و في هذه المادة تعرفنا على الخطوات العملية و العلمية لهاتين المرحلتين.
  • Artificial Intelligence الذكاء الصناعي : بدون أدنى شك هي أجمل مادة درستها فهو التخصص الذي أحب القراءة فيه حتى من قبل أن أدخل الجامعة.
  • Cryptography علم التشفير.
  • Expert Systems الأنظمة الخبيرة.

هذا ما يحضرني الآن ، أراكم لاحقاً بإذن الله …

بين العادي و المتميز

” إن أفضل مطوّري البرامج أكثر إنتاجاً من مطوري البرامج العاديين ليس بعشر مرات أو مئة أو ألف مرة بل أكثر إنتاجاً بعشرة آلاف مرة”

ناثان مايهرفولد – مايكروسوفت (نقلاً من كتاب The 8th Habit)

إذاً حسب الكلام السابق فإن المبرمج العادي أقل انتاجاً من المبرمج المتميز بعشرة آلاف مره !!! لكن السؤال ماهي المعايير التي يمكن على ضوئها أن نقول أن فلان من الناس مبرمج عادي أو متميز ؟ .. هل توجد مثل هذه المعايير ؟ لست أعلم ..