مدونة سلوان الهلالي

تطوير ألعاب - برمجة - علم نفس

التشتت في حياة المطوّرين: الحل!

من اصعب المسائل التي يجب ان يتعامل معها كل مطوّر هي الالتزام بالمشاريع لغاية اكتمالها، تتضاعف الصعوبة كثيراً عندما تكون المشاريع شخصية، لقد وقعت شخصياً في هذا الفخ لعدة سنوات! عشرات المشاريع التي لم ترى ضوء النهار تجدها متناثرة في كل مكان. لكي نكتشف كيف ولماذا يحصل ذلك، سوف احاول تلخيص ما يحصل بشكل سريع:   انت جالس في مكانك امام الكومبيوتر من المفترض انك تعمل ولكنك لا تقوم بأي شيء محدد، فجأة تأتيك هذه الفكرة الرائعة! سواء قرأتها في مكان ما من الشبكة او وردتك بطريقة التخاطر، المهم انها تبدو لوهلة كأفضل فكرة في العالم. تبدأ شيئاً فشيء ببناء الفكرة الوردية في عقلك، يا إلهي كيف ستبدو رائعة! قد تكون افضل فكرة خطرت لك، يتصاعد هنا مستوى الحماس وفي لحظة تشعر بأن هذه الفكرة هي الجواب! (حتى وإن لم يكن هنالك سؤال فغلي). تشغل بيئة التطوير وتبدأ بالتخطيط والتعمق بشكل سطحي في ما تحتاجه للبدء. تكتب اول اسطر الكود، ياله من شعور رائع! لا زلت تسير على وقود الحماسه التي اكتسبتها. تحاول ان تجعل كل شيء بأكمل وجه ممكن، حتى وإن كنت تدرك من دون اي شك إن الكمال مستحيل على البشر، لكنك تتأمل خيراً. بعد فترة ما، تكون قد قمت بتصميم النافذة الرئيسية او المقدمة للعبة، ووضعت اسمك في المقدمة مع موسيقى خلابة، تبدأ مرحلة العمل الحقيقي التي لم تحسب لها حساباً بالدخول، ويرمي الكمال الذي تحاول المحافظة عليه نفسه خارج الشباك، فجأة تحس وكأن هنالك عوائق ضد رؤيتك الرائعة، وبالنتيجة تبدأ الفكرة شيئاً فشيء بفقدان بريقها، المسألة الآن مسألة وقت ليس إلا. بمجرد وصولك للسؤال: “ماذا يجب ان افعل الآن؟” او “What’s next” وعدم توفر اي دليل في تصاميمك الاولية حول المرحلة الجديدة التي وصلتها، حتى وإن كان هنالك 100 مهمة يمكنك ان تختار اي منها! حقيقة انك لم تحدد اي من هذه الـ 100 مهمة بأي طريقة مقدماً تضعك في حيرة عجيبة، وكأنك في حلقة مفرغة. اين ذهب الحماس الآن؟ والاحساس بالسعادة؟ تبحث عنه… ليس موجوداً في اي مكان… اصبح المشروع مملاً إذاً! ولكني مع ذلك سأحاول ان اكمله بطريقة ما… يتعلق برقبتك الاحساس بالذنب وكأنما تدين للمشروع بتفسير حول ما يحصل. في اليوم التالي، لديك مهام افضل، وهنالك اشياء ممتعة اكثر… لنؤجل العمل على المشروع ليوم آخر. كرر من النقطة 1  (المشروع الرائع الجديد في الطريق!)   فعلاً هذا ما كان يحصل معي بالضبط، وانا متأكد ان نفس الكلام يحصل مع كل مطوّر في مرحلة ما من صياعته العملية… اقصد حياته. السؤال المهم الآن، لماذا تتكرر نفس الخطوات تماماً؟ مرة ومرتان وثلاث مرات، حتى تصبح طريقة حياة. لنكتشف ذلك سوف اقدم لكم مبدئاً من علم النفس يمكن ان يساعدنا في التحليل واكتشاف الحل، تحديداً من البرمجة اللغوية العصبية (Neuro-Linguistic Programming)، والتي طورت لها حباً وولعاً كبير ينافس ولعي بالبرمجة… المبدأ يدعى اللولب الحلزوني (spiral)، هنالك نوعان من هذا اللولب، اللولب الصاعد (upward spiral)، واللولب النازل (downward spiral).   في اللولب النازل، تبدأ بمكافئة نفسك على شيء لم تعمله بعد، ثم تحاول عمل ذلك الشيء، وعندما تجد ان من الصعب جداً عمله بالمستوى الذي تصورته في البداية، يبقى لديك خياران، ان تبقى مصراً على عمل ذلك الشيء بأي طريقة وبذل الجهد اللازم، او ان تتجاهل الموضوع ولا تختار اي خيار. عندما تتجاهل الموضوع يتملكك احساس بالراحة السلبية، ابعدت نفسك عن التعب المرتبط بإكمال المشروع، وهذه الراحة تصبح بعد فترة مكافأتك على عدم اكمال المشروع! كل مرة يتكرر فيها ذلك، تكون قد هبطت اكثر داخل اللولب النازل، حتى يصبح هذا السلوك في النهاية جزءاً منك من الصعب الافلات منه، وتستمر بالهبوط اكثر فأكثر، وتضيق الحلقة اكثر فأكثر، انت ببساطة تكافئ نفسك على شيء لم تعمله، ولا تعاقب نفسك ابداً. والأسوأ من ذلك ان اللولب النازل سوف ينتقل ليصيب اوجه اخرى من حياتك، جميعها ستساهم في تضييق اللولب… هل انت الآن في لولب نازل في حياتك؟ سواء عملياً او اجتماعياً او في اي من عناصر الحياة المختلفة؟ إذاً …. توقف الآن!   هل توقفت؟ حسناً، حان الوقت للتغيير، حان الوقت للتوجه بالاتجاه الصحيح. يجب ان تعكس اللولب ليكون لولباً صاعداً.   في اللولب الصاعد، تبدأ اولاً بأهم خطوة، وهي تحديد اهدافك بالضبط. لا تدع اي شيء للصدفة.. بعد ذلك يجب ان تقوم بتحدد كيف ستكافئ نفسك عندما تحقق تلك الاهداف، واجعلها مكافئة رائعة وقيّمة فعلاً بالنسبة لك. وكذلك كيف ستعاقب نفسك إن فشلت بسبب التكاسل المباشر عن بذل الجهد، وعندما اقول ان تعاقب نفسك، لا اقصد الأذى ابداً، ولكن ان تؤنب نفسك بطريقة بنّائة مثلاً، او ان تحرم نفسك من شيء تستمتع به، وسوف اعطي امثلة بعد قليل… المهم ان تصل لفكرة ان تكافئ نفسك على الشيء الصحيح الذي يساعدك في تحقيق اهدافك، وتعاقب نفسك إن كانت السبب في عدم تحقيقها. في البداية، قد تتلكأ العملية وتواجه بعض المصاعب، ولكن بالجهد الكافي ستبدأ بالانتقال للّولب الصاعد، وسوف تلاحظ الحلقة وهي تتوسع وتتوسع أكثر، وتبدأ بالاحساس بأنك ترتفع أكثر فأكثر، حتى يصبح هذا السلوك جزءاً منك، ونعم سوف ينتقل ليصيب كل اوجه حياتك بالايجابية والعمل الجاد!   والآن، لتطبيقه في حالتنا الخاصة، تطوير المشاريع البرمجية، هل تتذكر استراتيجية اللولب النازل فوق؟ ما سنفعله تقريباً هو عكس الخطوات…   في البداية يجب ان تكون لديك فكرة مشروع معينة، برنامج او لعبة او ما شابه، حتى وإن كانت فكرة عامة. إجلس مع نفسك او مع فريقك وحدّد حدود المشروع بالضبط، مثلاً إن كان المشروع لبرنامج حدد بالضبط ماذا يجب على البرنامج ان يعمله وماذا يقع خارج نطاقه. وكميزة إضافية عندما تضع حدوداً واضحة للمشروع تتزايد قدرتك على الابداع! قسّم المشروع لعدة مراحل في كل مرحلة ستعمل على هدف محدد ولا شيء غيره. يجب ان يكون لديك الآن خطة جيدة للعمل، ونظرة شاملة لمدى المشروع وحجمه. حدّد ماذا ستكافئ نفسك عندما تنهي كل مرحلة من م��احل المشروع بنجاح، على سبيل المثال يمكنك ان تعزم نفسك على عشاء في مطعم يعجبك، ان تذهب لحفلة موسيقية او لمدينة الملاهي، ان تزور مجموعة اصدقاء من الممتع ان تقضي وقتك معهم، يمكنك هنا ان تربط بين اهداف حياتك الاخرى واهدافك العملية من المشروع! و من المفيد ان تقول لنفسك شيئاً يشبه الكلمات الآتية: إن نجح المشروع، اكون قد استثمرت وقتي بأكمل وجه! إن نجح المشروع، اكون قد اضفت مشروعاً ناجحاً لتاريخي البرمجي! إن نجح المشروع، اكون قد اضفت خبرة جيدة جداً ستفيدني في مشاريعي المستقبلية. إن نجح المشروع، سوف اشعر بالسعادة والفخر إن نجح المشروع، سوف استمتع بكل تلك المكافئات الرائعة التي وعدت بها نفسي حدّد بماذا ستعاقب نفسك إن فشلت في تحقيق الاهداف، لكل شخص خياراته الخاصة هنا، إن كنت تحب ان تلعب لعبة معينة، إمنع نفسك منها لفترة محددة. أو إن كنت تتابع مسلسلاً ما بشغف، عاقب نفسك بعدم مشاهدة عدة حلقات منه، يمكنك حتى ان تجبر نفسك على سماع الموسيقى التي تكرهها بدل الموسيقى التي تعجبك لعدة ايام (قد يكون هذا اقسى عقاب هههههههه)، ولكن من المهم جداً ان لا يؤثر العقاب على حياتك العملية او الاجتماعية ابداً بل يمكنك حتى ان تأتي بعقاب يساعدك في تحقيق اهدافك في وجه اخر من اوجه الحياة.  ويمكنك ببساطة ان تقول لنفسك الكلمات الآتية: إن فشل المشروع، اكون قد ضيعت وقتي الثمين بدل ان استثمره. إن فشل المشروع، اكون قد اضفت مشروعاً فاشل لتاريخي البرمجي. إن فشل المشروع، اكون قد ضيعت على نفسي فرحة إكمال المشروع والفخر بإنجازي. إن فشل المشروع، أكون قد ضيعت على نفسي فرصة الاستمتاع بالمكافئات الرائعة التي اخطط لها. هل انت مستعد لهذه الرحلة الرائعة؟ هل انت مستعد للمكافئات الجميلة التي ستحصل عليها؟ إذاً حان وقت البدء بالمشروع الآن! بالتوفيق…    سوف ازودك بالاضافة لذلك بطريقة طورتها بشكل تدريجي، اصبحت شيئاً لا يمكنني التخلي عنه اثناء العمل، اسميتها قائمة المهام (TaskList)، عسى ان تكون ذات فائدة لك.   قائمة المهام ما هي؟ إنها طريقة لعمل قوائم ToDo تحافظ على الاستمرارية في العمل خاصة وإن لم تكن متفرغاً 100% (كأن تكون تدرس في جامعة في نفس الوقت)، وهي بسيطة جداً وفعّالة جداً جداً. عندما تبدأ بالعمل اول مرة، حضّر كراسة مخصصة للمشروع بجانبك، ابدأ اولاً بكتابة المرحلة التي تهدف الوصول لها الآن ووصف بسيط لاهدافها وحدودها. اكتب اول قائمة كعنوان: “TaskList 1” ومن المفيد وضع التاريخ بجانبها. والآن ضع قائمة من 10 عناصر، مرقمة من 1 الى 10، كل عنصر يأخذ سطراً واحداً. ما هو اول شيء عليك عمله؟ قم بتجزءته الى مهام قصيرة ولا تأخذ وقتاً للإنجاز ثم اكتب تلك المهام بتسلسل تقريبي موزعة على النقاط من 1 الى 10،  إن احتجت اكثر، قم بأنشاء قائمة جديدة “TaskList 2” واكمل سرد المهام. ثم قائمة ثالثة وهكذا… عندما تنهي مهمة ما، يجب ان تمسك القلم وتشطبها، كل مهمة تشطبها نعني انك تقترب اكثر من تحقيق هدفك وكل ما يرتبط به من مكافئات رائعة، سوف تتعلم حب هذا الاحساس! من المهم جداً أن تقوم بكتابة 10 مهام جديدة على الاقل نهاية كل فترة عمل، لكي تساعدك في البدء بسرعة في المرة القادمة. شروط المهمة: يجب ان تكون كل مهمة تضعها بسيطة قدر الإمكان، ولا تستغرق وقتاً طويلاً للإنجاز، وحاول جعلها تتضمن شيئاً واحداً كل مرة بدل عدة اشياء. لماذا؟   لنفرض انك عملت اليوم على مشروعك، ثم دخلت فترة امتحانات لمدة اسبوع لم تستطع خلالها ان تكمل عملك، عندما تعود في نهاية الاسبوع ستكون في حالة غريبة من الضياع، لن تدرك اين وصلت الآن وماذا يجب ان تفعل.. باستخدام قوائم المهام يمكنك أن تعرف أين وصل المشروع بالضبط وآخر مجموعة مهام قمت بإنجازها. ثم اختر مهمة صغيرة، اصغر وابسط مهمة يمكنك ايجادها من القائمة، وابدأ بها، ثم مهمة اصعب قليلاً، وهكذا… سوف يساعدك ذلك على الدخول للعمل من جديد بفعالية حتى وإن تركت المشروع لفترة طويلة. إن كانت لعبتك مجانية وسوف تنشرها بشكل عام، ابدأ بالنشر بمجرد وصولها لحالة مقبولة، اتبع القاعدة المشهورة: “Release Early, Release Often”.   مثال لأول قائمة مهام لمشروعي الحالي: Remake of Super Mario Bros. 3 on SNES. Title: Super Lario Bros. 3 (appropriately Lario and Muigy :D) Limitations: - Only first level of the game will be made Goals: - To add tiling support to my prototyping game engine pyEnkido - Developing pyEnkido further as I go Solutions: - Python, PyGame, pyEnkido, and optionally Psyco for performance. - IDE: pyScripter   TaskList 1 (24/11/2010) ----------------------------------------------------------------- [1] Specify goals and limitations. [2] Prepare tools. [3] Setup initial project, with company intro. [4] Commit to new repo in googlecode (http://code.google.com/p/lario) [5] Plan for game intro. [6] Prepare first scene textures. [7] Transition from intro (FadeIn to game) [8] Shortcut to quit the game immediately anytime. [9] Ground showing with black background. [10] Curtain lifting works. والنتيجة في نفس اليوم:   الختام اتمنى ان تكون قد استمتعت بهذه الرحلة الصغيرة داخل عقل المطوّرين، لا تتردد في طرح اي تعليق او تساؤل هنا ولنفتح باب النقاش بخصوص الموضوع. لا تنسى ان ترسل لي نسخة من لعبتك مجاناً طبعاً بمجرد ان تنهيها