‏إظهار الرسائل ذات التسميات projects. إظهار كافة الرسائل
‏إظهار الرسائل ذات التسميات projects. إظهار كافة الرسائل

السبت، 4 أغسطس 2012

المستقبل..

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

قد تجد هذا المقال يبدو كلاماً تقليدياً حتى تقترب من نهايته، ثم تجد - أو أرجو أن تجد - في الجزء الأخير مكافأتك على قراءته للنهاية :)

ما اهتماماتك أيها القاريء؟ هل تهتم بالسياسة والديموقراطية وتحصين المجتمع ضد الحكم الاستبدادي؟
أم أنك مهتم بالبرمجة والتكنولوجيا؟
أم بالاقتصاد والشركات؟
أم بالدولة القوية المتقدمة؟
هل تحلم بال"مستقبل"؟ السيارات الطائرة وغزو الفضاء؟
أم بالعدالة الاجتماعية؟

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

كيف ذلك؟ وما علاقة شيء مثل البرمجة بشيء مثل العدالة الاجتماعية أو الديموقراطية؟ وهل يساهم الفيسبوك وتويتر في الثورات مثلاً؟ ما هذا الكلام الفارغ؟

المفاهيم مثل "الحرية" لا توجد في مكان فلسفي خفي، إنها تتحقق في البيئة الاجتماعية التي نعيشها جميعاً، وتتشكل بأفكار الناس ووسائلهم لتحقيق تلك الأفكار: التوزيع الموجود للثروات، وسائل الاتصال وتبادل المعلومات، وسائل تنظيم التفكير والتعبير عنه. لا تعجب أن تكون أحد عوامل النهضة الأوروبية هو انتشار الطباعة، لا تعجب من ازدياد النشاط السياسي بعد ظهور المدونات (وبعدها ظهور الـsocial networking)، ولا تعجب من ارتباط ظهور الديموقراطية في اوروبا بازدهار الطبقة الوسطى.

هل تأخذ الأفكار فرصتها؟ أم تموت لأن صاحب الفكرة مريض ولا يجد تكلفة العلاج [العدالة الاجتماعية] أو لأنه لا يجد وسيلة يخبر بها المجتمع بفكرته [التمكين الإعلامي] أو لأن النظام الأمني العتيد يخاف من التغير المجتمعي ويريد أن يحتفظ بالناس تحت قدمه [الاستبداد ونظم الحكم] أو لأنه حتى ليس متمكناً من سبل التفاوض والإقناع وتنظيم أفكاره؟

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

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

الا أتمنى أن يكون كل شخص أمامه فرصة مثل هذه؟ بيئة يعبر فيها أن أفكاره ويلتقي بأصحاب الأفكار المشابهة، فرصة لتلقي علماً وفكراً، وفرصة مادية ليركز في اهدافه؟

نأتي أخيراً للمشاريع...

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

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

ما الشيء المشترك بين هؤلاء؟ (1) فكرة جيدة. (2) وسائل مبتكرة للتعبير عن الأفكار ونشرها وتنفيذها.

أما مشاريعي فهدفها بسيط جداً: أن يكون المجتمع كله هكذا.

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

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

أما شركة Makesense فهي ليست مخطط لصنع شركة عادية، بل نوع جديد من الشركات: تحترم البحث العلمي، وتدار بطريقة ديموقراطية تحترم فيها الآراء (لتكون الديموقراطية قيمة اجتماعية وليس فقط نظاماً سياسياً)، وتكون مثل دولة صغيرة: إن الدولة هي وكيل لشعوبها وليست سيداً لهم، فلماذا لا تكون الشركة هي وسيلة لمجموعة من المتخصصين لكي يعملوا معاً ويحققوا اهدافهم، بدلاً من النظرة الحالية "سوف يتم إعطاؤك مالاً لتحقق أهداف صاحب الشركة"؟

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

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

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

ثقافة إنتاج المعلومات وليس فقط استهلاكها. ثقافة التصميم والاختراع.

مثل هذه الانشغالات هي وظيفة تلك المدونة وتلك المشاريع، ومن أجل هذه الأهداف تجدني كتبت مقالات سياسية أو أيدت مرشحاً معيناً، ومن أجل هذه الأهداف انتقد مسابقات الـACM وأقترح بدائلاً لها، لأن أوراق والشركات والأدوات لن أقدر على صنعها وحدي بكل تأكيد بل تحتاج مجتمعاً يصنعها. هذا ليس مشروع سنة أو سنتين.

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

فإن رأيتني انتقد ما تراه في الحاضر، فهذا لأني أتمنى مستقبلاً غيره.

الثلاثاء، 3 أبريل 2012

تجربة: لغة برمجة غير مألوفة سهلة التعلم

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

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

حسناً..اولا سيكون امر التخصيص في صورة ->، بدلا من علامة =، لتحديد اتجاه ذهاب البيانات. أيضاً سيتم تبديل الاتجاهات

س -> ص معناها "ضع س في ص".

ايضاً لن يكون هناك امر اقرأ ولا اطبع، لكن سيكون هناك كائنات Objects تعبر عن الشاشة، لوحة المفاتيح،...الخ

"مرحبا" -> الشاشة
المفاتيح -> س
الماوس ->(س1، ص1)
الماوس ->(س2، ص2)
ارسم.خط (س1،ص1)-(س2،ص2)

هل لاحظت (س1،ص1)؟ هذا لأن اللغة ستدعم تجميعات من القيم tuples. بالمناسبة هكذا تكون عملية التبديل مثلاً سهلة جداً:
(أ، ب) -> (ب، أ)

"خلي أ تبقى ب، وب تبقى أ"

لو أردت ان تكون اللغة object oriented جداً فيمكنني اصلا ان ارسل قيماً كما اريد للشاشة وما شابه..

خ = خط(100، 100، 200، 200)
د = دائرة(100، 100، 75)
خ -> الشاشة
د -> الشاشة

هذه الطريقة تجعل امور معينة سهلة جداً..ماذا لو اردت برنامج يرسم خطوطا باستمرار؟

كرر:
خط(الماوس، الماوس) -> الشاشة
تابع

حسناً....كفانا لعباً بالمعامل ->، ماذا نفعل أيضا؟؟

تعال نصنع طريقة بسيطة لعمل الدوال:

مجموع(أ، ب) = أ + ب.

وطريقة لتعريف الاجراءات:

حرك(أ، بداية، نهاية) =
ارسم(أ، بداية)
انتظر(30)
ارسم(أ، نهاية).

تبدو اللغة نوعاً ما مثل لغة prolog..أليس كذلك؟

مادمنا قد بدأنا في هذا المشوار، تعال نكمل بأن نضيف طريقة مبسطة لتعريف البيانات.

نوع شخص(اسم، سن، عنوان).

شخص(اسم: "حمدي"، سن: 12، عنوان: "الجيزة") -> ح
اسم ح -> الشاشة

ماذا عن الOOP؟ سوف نعرف كل الmethods كأنها رسائل للانواع المختلفة بكلمة في اللغة اسمها معنى

معنى شخص(أ، ب، ج) -> الشاشة =
("هذا شخص اسمه "، أ، "وسنه "، ب) -> الشاشة.

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

هل هذه اللغة ابسط فعلاً أم هي فقط ازالت بعض الصعوبات ووضعت مكانها صعوبات جديدة؟ ماذا عن سطر مثل خط(الماوس، الماوس) -> الشاشة هل هة مفهوم؟ وهل هذه طريقة جيدة للبرمجة اصلاً؟

يحتاج الامر لتجربة. ما رأيك أن تنفذ انت هذه اللغة وتجرب على اطفال؟

نسيت شيئاً...ماذا اسميها؟ من الصعب عليّ أن أفكر في مشروع بدون اسم جيد له..ماذا عن "سهم"؟ بديهي اكثر مما ينبغي؟ سأبقيها هكذا حتى العثور على اسم افضل. أو سمّه انت لو ستنفذه :)

الأربعاء، 21 مارس 2012

تطبيق التفكير الحوسبي عملياً: فكرة عامة

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

نعم هذه فكرة ينبغي أن تكون اوضح! هناك جانبين: المدى الطويل والمدى الأقرب. أما بالنسبة للمدى الطويل فالتفكير الحوسبي يتوقع له أن يكون شكل العلم القادم الذي سيسير به العالم، وسيكون من واجبنا اللحاق به وإلا استسعت الفجوة العلمية بيننا وبين باقي الدول.

لقد كانت الفجوة بين الغرب والعالم الاسلامي في اقصاها ايام الحملة الفرنسية مثلاً، حتى بدأنا نسدها شيئاً فشيئاً عبر قرنين..لكن التفكير الحوسبي يعد بقفزة تعادل النهضة الأوروبية السابقة، ولو حققوها ولم نلحق بها لبدأنا القصة من جديد وعدنا كما كنا :(

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

من الامثلة على التعليم والبحث العلمي:

  • تحديث علم النحو العربي بربطه بعلوم computational linguistics، وكذلك تحديث تدريسه في المدارس. مثل ذلك الهندسة، الفيزياء..الخ
  • انواع جديدة من الابحاث الطبية تعتمد على التكامل بين علوم الحاسب والطب، مثلا استخدام الشبكات العصبية في فهم كيفية تعلم الاطفال الرضع للكلام، المشي،...الخ او العكس: استخدام العلوم الطبية في تعليم الاجهزة ما يشبه هذه المهارات.
  • تحديث دراسة وتطوير القوانين عن طريق الاستفادة من العلوم المكتسبة من الذكاء الاصطناعي من rule based systems...الخ. لا اتحدث فقط عن استخدام نظم برمجية في المجال القانوني يصنعها مبرمجون -- اتحدث عن استخدام طلبة وخريجي الكليات القانونية انفسهم لهذه الطرق لتسهيل الدراسة والممارسة مثلما استخدم الجبر قديما في شرح وتطبيق المواريث مثلاً.

من الامثلة على الاقتصاد:
  • تحديث الصناعة، لأن المصنوعات الحديثة دائما لها نصف برمجي، والسيارة Toyota Prius مثلا بها شغل software اخذ نسبة كبيرة من المجهود المبذول فيها تضاهي الجانب الهندسي.
  • ظهور انواع جديدة من الشركات، مثل شركات اجهزة طبية تعتمد على جهاز الموبايل + sensors، أو شركات لعب اطفال تستخدم الrobotics، وهكذاً. القصد انه حين يعرف المجتمع كله علوم الحاسب تكون هذه الشركات كثيرة ومعتادة وليس "فلتات" كما نرى الآن.

من الامثلة في الحياة العامة:
  • رفع الكفاءة في ادارة الشركات، أو حتى في الحياة اليومية، بسبب معرفة الكثيرين لتقنية Algorithm analysis وتطبيقها.
  • ارتفاع قدرة الناس على تنظيم افكارهم حين يعلمون trees, lists, graphs...الخ، إن فكرة الmind map بقدر ما فيها من فائدة ما هي إلا محاولة تقريب الgraphs لعموم الناس.

هذه فكرة مختصرة راعيت فيها التنوع اكثر من التفصيل. في الجزء الثاني نركز بالتفصيل في جانب واحد: التعليم.

السبت، 29 أكتوبر 2011

Kalimat-related open source project ideas


Do you like open source and want to create your own project? Do you like Kalimat? Do you want to contribute something to the future of programming in the Arab world?

Here are some new projects that I would love to see for the Kalimat programming language, and which can be done independently of the main Kalimat package of you want to 'own' your project:

Kalimat for .Net

If you write a .Net implementation for SmallVM (the virtual machine of Kalimat & Kick) then the rest would be easy: Just recreate the compiler that translates from Kalimat to SmallVM, or even use the original compiler.

Why Kalimat for .net? It would make Kalimat both usable as an educational language and a professional one; opening the door for libraries that wrap ASP.net, ADO.net, ...etc into an Arabised API and make it available for Arab programmers; kids and adults alike.

Automatic code documentation

The CoffeeScript language has a tool called Docco, that takes commented source code and generates documentation that puts the code and the explanation side by side like this

I really want a tool that works the same way; it would make it so much easier for educators to write Kalimat tutorials with heavy source code and notes, which is why the language was created in the first place!

Kalimat environment on the web

This would make trying the language much easier without needing to download anything and make Linux users happier (since currently Kalimat for Linux has an Ubuntu-only ready made package and other Linux users have to compile from source).

Again, the secret is in SmallVM: If you write it using JavaScript and implement the run-time library (Graphics, Sprites, ...etc) with HTML5 then the IDE itself would probably not be too hard.

More platforms

In addition to .Net, Kalimat could be ported to other platforms. If done right we could have some sort of a "Kalimat everywhere" ecosystem:
  • SmallVM could be translated to, or interpreted by, ActionScript bytecode (ABC) to enable running Kalimat programs as Flash applications (suggested by Issam Elbaytam in the comments)
  • Could similarly be translated to Java, to use the Java platform or to create Android programs
  • Or perhaps translated to Objective-C, to create iOS applications ;)

السبت، 7 مايو 2011

Two personal stories related to Lisp

Story #1

Autumn of 2007. I was giving a series of Lisp sessions for some second year students.

The students were surprisingly good, and it got me thinking: the problem facing almost any software company is how to have good developers. They (i.e the good companies) usually solve it in two parts:
  1. Set up an attractive environment for developers
  2. Set up good interviews to differentiate good developers from bad
Now for this question: What if, instead of searching for good developers, we began making them?

What if someone formed a company with two sides: a production side and an academic side. The employees in this company would have double duties: To produce and sell great software, and to transfer their knowledge and experience to a newer generation of smart students.

And they would be sincere in it: They would not give sessions that are actually hidden advertisement for their products. They would not force students to join the company or to take training therein; no: their primary academic goal would be to foster an environment of learning and raise as many great programmers as possible. Even if not all of those programmers join us, the end result would be a better market and an academic scene where science and skills are everyone's goal. In the end, we'd still benefit one way or another.

Since 2007 this has been the company I'm trying to form.

Story #2

I created a Lisp-like language in 2008, called Ayka. (You thought Kalimat was the only language I made?).



It was intended to be a part of a larger project called "Mira", but that project has stopped. The language was written in C# and Ayka programs could use the .net libraries. It had its own simple IDE and wrappers for the Winforms GUI library:



It also had those features:
  • Support for "defmacro" style Lisp macros
  • Support for full continuations via trampolines
  • The ability to create dynamic web pages
I was an amateur language implementer at the time (actually, I still am), so the project wasn't really mature: The language was slow, the libraries were buggy, things were falling apart, so I stopped working on Ayka and moved on to other projects. I learned a lot from it though, and it influenced my work on Kalimat --mainly by telling me what mistakes to avoid.

Still, from time to time, I wonder if the project could be revived. I also wonder if those sessions should be given again...

الأحد، 31 أكتوبر 2010

Two new open source projects: QPeg and LogoArabic

I've been coding for a while!

During and after the previous Eid, I created two new projects:

LogoArabic

The first is LogoArabic: An interpreter for an Arabized version of the well-known LOGO programming language, as a part of my project for teaching children programming. I was reading an old childhood book called "تعلم مع صخر لوغو", and wished there was a way to run the book's examples for new-generation kids. Now there's a way! (almost...my syntax is similar but not identical to the Sakhr Logo syntax. But the differences are small).

The code is available now on Google code: http://code.google.com/p/logoarabic/

QPeg

The second project is QPeg: a parser generator for PEG grammars...I'll explain:

You give it a grammar (a way to describe language syntax) and it will produce C++ or Java code, this produced code in turn will try to parse (or recognize) its input according to the grammar.

To learn more about PEG grammars you can visit here.

Again, the source for this project is on Google code: http://code.google.com/p/qpeg/

Want to participate?

Both projects are still in their starting phases, so there might be a chance for external contributors to join early before the projects get more complex!

Both are written in C++ and use the QT library (and are worked on with QT Creator instead of Visual C++). If people are interested I could post documentation and design documents on the project's web site. Perhaps I could also meet interested participants or have a "dissect-a-project" session (remember "dissect-a-project" from my post about the new ACM?).

If you don't want to participate, I hope you still enjoy the projects :)

الاثنين، 23 يونيو 2008

حول مشاريع التخرج - الجزء الثاني - أفكار المشاريع

( الجزء الأول هنا )

نصائح للعثور على أفكار لمشاريع التخرج:

- وسّع مداركك.
- لا تخشَ إعادة استكشاف الأفكار السابقة.
- فكر في احتياجاتك أنت.
-اعرض الأفكار على الآخرين.
- قَيِّم مشروعك عملياً.

وسّع مداركك
كلما تنوعت معرفتك و زاد إلمامك بأمور البرمجة, كلما وجدت وفرة في أفكار المشاريع. من تتخيل سيأتي بأفكار أفضل: الذي لا يعرف سوى ال #C و ال SQL أم الذي قرأ عن ال Ajax أو ال Virtual Machines أو ال Distributed Computing؟

اذهب إلى مواقع أبحاث الشركات التي تهتم بالعلم مثل Microsoft أو Sun أو Google أو IBM أو Intel. لا تذهب فقط بنيّة البحث عن فكرة مشروع فالتعجُّل قد يحرمك من رؤية الأفكار الجميلة حقا. بل اذهب بنيّة الأطّلاع و كأنك تأخذ جولة سياحية في علوم الكمبيوتر. أنظر إلى المشاريع. زُر بعض الصفحات الشخصية للباحثين هناك. أنظر الى ما نشروا. تابع ال blogs. أبحث ببعض الكلمات المهمة في مواقع نشر ال Papers مثل Citeseer أو Google Scholar. أو اذهب لمراكز البحث في الجامعات الشهيرة

ربما تجد فكرة مفتوحة تأخذها جاهزةً و ربما لا, ليس هذا المهم و لكن المهم أن يتسع مجال تفكيرك و تجد تطبيقات كثيرة لل Software و ال Hardware كانت غائبة عنك, و هكذا يمكنك الهروب من المشاريع النمطية التي يكاد يقوم بها الجميع.
حتى لو شعرت أنه لم يبق متسع من الوقت للمعرفة فأقرأ. ربما ينفعك ولو يوم واحد من القراءة لتعرف مجالاً جديدا غنياً بالأفكار.

لا تخشَ إعادة استكشاف الأفكار السابقة

كثيرا ما تكون النتائج أهم من الفكرة نفسها. كان العالَم مليء بمحركات البحث من قبل Google ولم يمنعهم هذا من الأبتكار في نفس المجال. لم يكن ال iPhone أول هاتف محمول ذكي و لم تكن ال #C صادرة قبل ال Java، ومع ذلك كل من هؤلاء قدم تطويرات كبيرة على ما سبق وصار إنجازا في حد ذاته.

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

فكر في احتياجاتك أنت

ما احتياجاتك كمبرمج؟ كمستخدم للإنترنت؟ كمستخدم عربي؟ كطالب؟ في حياتك؟

أمثلة للاحتياجات:
  • كيف تنظم أفكارك
  • كيف تدير نسخ مختلفة من ال code عبر اعضاء الفريق الواحد
  • كيف تبحث عن المعلومات
لأننا مبرمجون, فإننا ننسى أن الSoftware يمكنه أن يخدمنا كمبرمجين وليس يخدم فقط ال users الذين نكتب البرامج لهم! فكر في مشروع لاحتياجاتك أنت.

اعرض الأفكار على الآخرين

اجتمع مع افراد الفريق في جلسات brainstorming وناقشوا كل الأفكار المتاحة (حتى لو بدت في حينها سخيفة أو غير عملية). اعرضوا الأفكار على أصدقائكم و على المعيدين. اطلبوا الأقتراحات لتحسينها. لو انتقد أحدٌ الأفكار اسألوا كيف يمكنه أن يتلافى العيوب التي ذكرها. جرب أن تخلط أفكارا ببعضها (مثلا برنامج Resolver خَلَط لغة ال IronPython بفكرة الجداول الألكترونية مثل ال Excel).

قَيِّم مشروعك عملياً

لا تكتف بفكرة مجرّدة فتقول "سأقوم بمشروع عن كذا" فحسب. ارسم رسما تخطيطياً للمشروع على ورق. تخيل أنه تم تنفيذ مشروعك و مثل انك تستخدمه بعد تنفيذه. ارسم screenshots. افعل مثلما فعل Jeff Hawkins مصمم جهاز ال Palm حين كان يمسك بلوح خشبي صغير كأنه كمبيوتر محمول ليجرب الطرق المخلفة للتعامل مع الأجهز-- كان حينا يكتب عليه بقلم و حينا يتحدث إليه صوتيا و هكذ، ليعلم أي من تلك الوسائل تبدو تلقائية و مريحة للمستخدم).

إذا كان مشروعك Compiler أو أداة برمجة فجرّب أن تكتب على الورق نماذج للcode باللغة الجديدة التي تصممها. إذا كان ال GUI جزءا أساسيا في المشروع فلعله يفيدك أن تكتب Prototype يرسم GUI كروكية ليراها باقي أفراد الفريق أو المشرفين.

لا تكتف بتقييم فكرة المشروع "سَمَاعيّا" بأن تتكلم عنه فقط! بل قيِّمها عملياً بأن تصنع رسومات وبرامج تجريبية تكون آثارا حقيقية لتفكيرك.

الجمعة، 25 أبريل 2008

حول مشاريع التخرج, الجزء الأول

(تحديث: الجزء الثاني هنا)
الآن و قد قارب العام الدراسي عن الأنتهاء, بدأ بعض طلاب الفرقة الثالثة بالتفكير في مشاريع التخرج
سوف أتحدث إن شاء الله في عدة مقالات عن بعض النقاط في هذا الموضوع:

- ما هدف المشاريع
- كيف تنتقي المشروع
- كيف تنفذه بعد انتقائه
لاحظ ان معظم ما سأكتب هنا ليس مرجوعا إلى مصادر علمية أو جامعية و لكنه مجرد آرائي الخاصة.

ما فائدة المشروع؟

التطبيق العملي للعلم: معظم مشاريع السنين الدراسية السابقة كانت تركز على التمرين على استخدام اﻷدوات البرمجية, أى أن هدفها كان تعليميا قبل أن يكون تطبيقيا. أما مشروع التخرج فهو فرصة لتطبيق ما تعرف لكتابة برنامج حقيقي و ليس مجرد إثبات فهمك لتكنولوجيا معينة. ربما يكون مشروعك برنامجا تطبيقيا جديدا و سيكون عليك أن تفكر في ال Users و احتياجاتهم. أو ربما يكون ذو اتجاه بحثي مثل الكثير من المشاريع التي تمت قبل ذلك في الكلية كمشاريع ال Robotics أو ال Compilers أو ال Image Processing , و وقتها ستتعلم كيف تقرأ في المراجع و كيف تسير على أساس علمي.
في كل الحالات ستتعلم كيف تدير Software Development Lifecycle كاملة من Analysis و Design و Implementation.

العمل بأكثر من تكنولوجيا او أداة علمية: على عكس المشاريع في السنين السابقة التي كانت تركز على شيء واحد كقواعد البيانات أو الخوارزميات فإن مشروع التخرج سيحتاج إلى استخدام متكامل للعديد من المهارات و المباديء العلمية التي اكتسبتها و إلى تفكير في كيفية استخدام التكنولوجيا أو الأداة المناسبة في المكان المناسب.

التدريب على إدارة العمل: سيكون على الفريق أن يتعامل مع ما هو أكبر من كتابة برنامج. هناك تحديات و خبرات ستحتاج أن تكتسبها. كيف ستقنع الكلية بجدوى مشروعك؟ كيف سينظم أعضاء الفريق العمل؟ كيف سينظمون الوقت؟ كيف سيحلون المشاكل و يتعاملون مع الخلافات التي قد تظهر بينهم؟
مشروع التخرج يقدم فرصة للتمرين على التعامل مع "العالم الحقيقي" قبل دخول سوق العمل.

ما ليس بصفات المشروع

مشروعك ليس Assignment: على المشروع أن يقدم تحديا و أن يعلمك خبرات جديدة. إن وجدت المشروع أسهل مما يجب أو لا يحتاج أن تجيب على أسألة محيرة في ال Design أو أنك لن تحتاج لجمع معلومات من أجل تنفيذة, فراجع نفسك فربما لا يكون ما تفعل على مستوى مشروع تخرج.

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

كيف تجمع بين هذا وذاك؟
1- اختر فكرة جيدة بها تحدي لتنفذها
2- ركز في هذه الفكرة و لا تركز في غيرها.

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

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

و إذا كان مشروعك لغة برمجة تسهل عمل برامج للWeb, فركز على جزء الWeb و لا تحاول أن تضيف اليها ما لا علاقة له بالهدف, فإن كانت كتابة Interpreter اسهل لك فاجعلها Interpreted و ليس Compiled, و لا تسع لأن تضيف library كبيرة مثلا بل سيكون عليك أن تركز على الهدف الأساسي و هو "كيف تجعل حياة مبرمح ال Web أسهل" و ليس "كيف تصنع لغة البرمجة المثلى".

لا تركز فقط على المشاريع ذات التطبيق التجاري
هناك من يتمنى أن يقوم بمشروع مبني على مبادىء علمية لكنه يخشى أن يكون مثل هذا المشروع غير جذاب للشركات في سوق العمل. نصيحتي ألا تقلق كثيرا من هذه النقطة لأنه:
1- هناك شركات عديدة في مصر يهمها الخبرة العلمية. أنا مثلا في أول Interview لى وجدت الممتحن مهتما بأن مشروعي كان له علاقة بالImage Processing
2- كم شركة في رأيك سترفض خريجا قام مثلا بمشروع في ال Natural Language Processing لأن مشروعة لم يكن عن ال Database؟