آداب و رسوم برنامه‌نویسی دونفره

آداب و رسوم برنامه‌نویسی دونفره

Pair Programming (برنامه‌نویسی دونفره) روشی است که در آن ۲ دولوپر به‌صورت هم‌زمان پشت یک کامپیوتر می‌نشینند و سعی می‌کنند تا به‌طور مشترک راه‌حلی برای یک مسئلهٔ مشخص بیابند. این روش در رویکردهای Agile (چابک) و Extreme Programming (یا به‌طور خلاصه XP) بسیار پرکاربرد است. برنامه‌نویسی دونفره اگرچه مزایا و آثار مثبت فراوانی در‌ پی دارد اما در‌عین‌حال روشی بسیار دشوار و چالش‌برانگیز است؛ از همین‌ روی، موفقیت در این روش نیازمند آگاهی و عمل به آداب و رسوم خاص آن است که در این مقاله به چند مورد از مهم‌ترین آداب برنامه‌نویسی دونفره خواهیم پرداخت که رعایت آن‌‌ها دستیابی به مزایای برنامه‌نویسی دونفره را امکان‌پذیر خواهد ساخت.

پیش از مطالعهٔ این آداب و رسوم، توصیه می‌کنیم دیگر مقالاتی که پیرامون برنامه‌نویسی دونفره تاکنون منتشر شده‌اند را نیز مطالعه نمایید که عبارتند از:
- نکاتی در مورد نحوۀ اجرای صحیح Pair Programming یا برنامه‌نویسی دونفره!
- ۵ استراتژی کدنویسی که کمک به تبدیل شدن به دولوپر بهتری می‌کنند
- پاسخ به برخی تصورات نادرست در مورد برنامه‌نویسی دونفره
- آیا می‌دانستید که برنامه‌نویسی دونفره می‌تواند شما را به برنامه‌نویس ماهرتری تبدیل کند؟

حواستان را جمع کنید و فعالانه در تیم حضور داشته باشید
دولوپرهایی که وارد برنامه‌نویسی دونفره می‌شوند درواقع یک تیم هستند و هیچ‌کس دوست ندارد تا علاوه‌بر انجام کارهای خود، مسئولیت وظایف هم‌تیمی‌اش را نیز به دوش بکشد! حضور فعال در تیم یعنی استفاده از هدفون، چک کردن گوشی (هرچند به‌صورت بسیار کوتاه) و … ممنوع!

بنابراین وقتی پشت یک کامپیوتر می‌نشینید و کدنویسی دونفره را آغاز می‌کنید، حل مسئلهٔ پیش‌رو باید تنها موضوعی باشد که ذهن شما را به خود درگیر می‌کند. برای این‌که روی این مسئله متمرکز بمانید، می‌توانید از هم‌تیمی خود -که نقش سکان‌دار را برعهده دارد- درمورد کدهایی که می‌نویسد سؤال نموده و به این نحو خود را درگیر مسئله کنید. درصورتی‌که واقعاً از نقش هدایتگر خسته شده و به هیچ‌وجه نمی‌توانید روی کدهای طرف مقابل متمرکز بمانید، از او خواهش کنید تا موقتاً جای خود را با شما عوض کند.

با صدای بلند فکر کنید
در کدنویسی دونفره، هم سکان‌دار و هم هدایت‌گر باید افکار خود را با طرف مقابل درمیان گذاشته و درمورد کاری که انجام می‌شود توضیح داده و پیشنهاداتی ارائه نمایند. خلاف آداب کدنویسی دونفره است که چندین دقیقه در سکوت و بدون هیچ توضیحی به کد زدن مشغول باشید و همکار شما هم ساکت و بدون هیچ حرفی در کنار شما نشسته باشد.

بنابراین اگر واقعاً چند دقیقه نیاز به تمرکز زیادی دارید و نمی‌توانید هم‌زمان درمورد کدهایی که می‌نویسید توضیح دهید، این موضوع را با همکار خود درمیان گذاشته به او بگویید که پس از کامل شدن این بخش از کد، توضیحاتی در مورد آن ارائه خواهید نمود. اگر همکار شما ساکت است و حرفی نمی‌زند، با سوالاتی مانند «نظر تو چیه؟» و «به‌نظرت درست نوشتم؟» می‌توانید او را وارد بحث کنید.

همدل باشید و قضاوت نکنید
از این‌که چیزی را نمی‌دانید شرمسار نباشید و آن‌را مخفی نکنید. اگر چیزی را نمی‌دانید، شجاع باشید و بگویید نمی‌دانم. در تیم‌های دونفرهٔ‌ موفق، با گفتن نمی‌دانم نه اتفاقی می‌افتد و دنیا به آخر می‌رسد بلکه فقط ارتباط طرفین نزدیک‌تر شده و ۲ طرف درک بیشتری نسبت به یکدیگر پیدا می‌کنند و این در افزایش سطح موفقیت تیم بسیار مؤثر است.

متقابلاً نسبت به هم‌تیمی خود هم‌دلانه رفتار کنید و این حس امنیت را برای او ایجاد کنید تا آزادانه بتواند بگوید نمی‌دانم. قضاوت، جر و بحث و سرزنش هیچ کمکی نمی‌کنند و فقط می‌توانند اوضاع را پیچیده‌تر کنند. بنابراین هرگز از این‌که هم‌تیمی شما چیزی را نمی‌داند اظهار تعجب نکنید و با گفتن عباراتی مانند «تو واقعاً نمی‌دانی فانکشن X چه کاری انجام می‌دهد؟» باعث خجالت‌زدگی و شرمساری او نشوید.

مراقب خصوصیات اخلاقی خود باشید
خیلی خوب است که به موفقیت‌ها و کارهای درست خود افتخار کنیم اما باید مراقب باشیم تا دچار و غرور و خودبزرگ‌بینی نشویم! اگر همیشه درحال افتخار کردن به خود و موفقیت‌هایمان باشیم، دیگران هم طبعاً بیشتر به کاستی‌ها و عیوب ما خواهند پرداخت.

این موضوع هم در زندگی روزمره و هم در ارتباط ما با دیگران به‌عنوان یک دولوپر تأثیر نامطلوبی خواهد داشت و علاوه‌بر این سبب خواهد شد که خودِ ما -به‌عنوان یک دولوپرِ مغرور- نتوانیم چیزی از سایر دولوپرها و همکاران خود بیاموزیم و این در کدنویسی دونفره بسیار مشکل‌ساز خواهد شد.

فروتن باشید و به ایده‌های طرف مقابل اهمیت بدهید
شما به‌عنوان یک دولوپر ممکن است بسیار باهوش و ماهر باشید اما این مجوزی نمی‌شود که ایده و دیدگاه دیگران را بی‌اهمیت بدانید. در برنامه‌نویسی دونفره، فروتنی یک ویژگی بسیار پسندیده است؛ منظور از فروتنی این نیست که وانمود کنید چیز زیادی نمی‌دانید یا ایده‌ای به ذهنتان نمی‌رسد، بلکه منظور این است که علیرغم داشتن ایده‌های عالی برای حل یک مسئله، به‌تنهایی تصمیم نگیرید و وارد عمل نشوید.

قبل از این‌که بخواهید ایدهٔ خود را عملی کنید، نظر همکار خود را نیز درمورد نحوهٔ حل آن موضوع جویا شده و درمورد راه‌حل‌های پیشنهادی او نیز بحث و تبادل‌نظر نمایید. پس از بررسی پیشنهادات طرفین، بهترین و کاراترین پیشنهاد را انتخاب نموده و همان را اجرا کنید.

توافقات صورت گرفته و استانداردهای تیم را به یکدیگر یادآوری کنید
اگر در تیم خود از قبل برروی Test-driven Development (توسعهٔ آزمون‌محور) توافق نموده‌اید و حالا همکار شما دارد بدون تست‌ کردن بخشی از کد آن‌را دیپلیوی می‌کند، باید این موضوع را به شکلی محترمانه به وی گوشزد کنید. مثلاً می‌توانید بگویید «می‌خوای قبل از دیپلوی تستش کنیم؟» یا بگویید «تا الان که همهٔ کدها درست کار کرده، بیا این یکی رو هم تست کنیم ببینیم چه‌طور می‌شه؟» با گفتن این دست جملات، می‌توانید پایبندی خود و همکارتان را نسبت به قوانین تیم افزایش دهید.

دائماً به سکان‌دار نگویید که چه کار باید بکند
خوب است که گاهی مواردی را به هم‌تیمی خود تذکر داده و یا به او کمک کنید اما نباید نقش سکان‌دار را از او بگیرید و دائماً درحال دستور دادن به وی باشید. بنابراین صبر داشته باشید، به همکار خود فرصت فکر کردن بدهید و اجازه دهید تا خودش نقش سکان‌دار را ایفا نموده و درمورد کدهایی که می‌نویسد تصمیم بگیرد. درنهایت، اگر واقعاً قادر به تصمیم‌گیری نبود و کار متوقف شد، می‌توانید به وی کمک کنید.

به احساسات شخصی خود مسلط باشید و آن‌را در کدنویسی دونفره وارد نکنید
به‌خاطر داشته باشید شما قبل از این‌که دولوپر باشید یک انسان هستید و طبعاً نمی‌توانید خود را از زندگی روزمره جدا نموده و فاقد هرگونه احساسی باشید. شاید گاهی حق داشته باشید که عصبانی، بی‌حوصله و یا حتی بداخلاق باشید اما حق ندارید که احساسات شخصی را به تیم خود انتقال دهید.

عصبانی و بی‌حوصله بودن به شما مجوز نمی‌دهد تا با هم‌تیمی خود بدرفتاری کنید. البته گاهی ممکن است با وجود تلاش فراوان بازهم موفق به کنترل احساسات خود نشده و رفتار نادرستی با همکار خود داشته باشید که در این‌گونه موارد بلافاصله از همکار خود عذرخواهی نمایید. مثلاً می‌توانید بگویید «وای ببخشید. قصد ناراحت کردن تو رو نداشتم فقط از این‌که پیدا کردن این باگ این قدر ما رو به زحمت انداخت اعصابم به‌هم ریخت!»

درنظر داشته باشید که همکار شما نیز یک انسان است، با احساسات و حال‌و‌هوای خاص خود؛ او هم گاهی ممکن است قادر به کنترل احساسات خود نباشد، ممکن است فریاد بزند و یا حرف ناشایستی به زبان آورد. تحمل داشته باشید و با هم‌تیمی خود درگیر نشوید. در‌عین‌حال اجازه ندهید که بداخلاقی و رفتارهای نادرست به رویهٔ همیشگی همکارتان تبدیل شود و درصورت لزوم این موضوع را به‌طرز محترمانه‌ای به وی تذکر دهید.

وقت بگذارید و هم‌تیمی خود را بشناسید
اولین بار که با کسی وارد یک تیم‌ دونفره می‌شوید ممکن است هیچ شناختی از هم نداشته باشید. ممکن است رفتارهای طرف مقابل را درک نکنید، منظور او را نفهمید و یا حتی ممکن است درک لهجه و کلمات او برای شما دشوار باشد (البته متقابلاً برای همکار شما نیز همین شرایط وجود دارد). بنابراین باید اجازه دهید تا مدت زمانی سپری شود و هم‌زمان برای شناخت و درک یکدیگر تلاش نمایید.

خواسته‌های خود را مطرح کنید و درعین‌حال برای سازش آماده باشید
نیازها و ضروریات کار را مطرح کنید و درمورد آن‌ها با هم‌تیمی خود به توافق برسید. مثلاً اگر اندازهٔ فونت برای شما مناسب نیست و به زحمت سورس‌کد را می‌بینید، ایرادی ندارد که نیاز خود را مطرح کنید و متقابلاً خواسته‌ها و نیازهای طرف مقابل خود را نیز بپذیرید. اما باید میان نیازها و ترجیحات خود تفاوت قائل شوید.

مثلاً اگر شما IDE خاصی را ترجیح می‌دهید، ضرورتی وجود ندارد تا حتماً ترجیح شما اعمال شود. حتی ممکن است ویرایشگر موردنظر شما مورد توافق تیم باشد اما درمورد رنگ پس‌زمینه اختلاف‌نظر داشته باشید (مثلاً شما علیرغم این‌که می‌توانید زمینهٔ روشن را تحمل کنید، اما ممکن است متن روشن بر روی زمینهٔ تیره را ترجیح دهید در‌حالی‌که هم‌تیمی شما متن تیره بر روی زمینهٔ روشن را ترجیح می‌دهد.) در این گونه موارد باید برروی یکی از حالت‌ها توافق صورت گیرد و یا برروی حالت سومی توافق کنید (در همین راستا، توصیه می‌کنیم به مقالهٔ کدنویسی با بک گراند Dark یا Light: مسأله این است! نیز مراجعه نمایید).

کار با دولوپرهای کم‌تجربه را نیز امتحان کنید
اگر تجربهٔ‌ خوبی در کدنویسی دارید، بهتر است کار با دولوپرهای تازه‌کار را نیز تجربه کنید و فکر نکنید که یک دولوپر مجرب نمی‌تواند چیزی از یک تازه‌کار بیاموزد! گاهی نیاز دارید تا کسی کنار شما باشد که کمی تفکر پیچیدهٔ شما را متوقف کند و ایده‌های تازه‌تری را به ذهن شما وارد نماید. به‌خاطر داشته باشید که یکی از بهترین راه‌های یادگرفتن، یاد دادن است.

زمان‌هایی برای استراحت در نظر بگیرید
واقعیت این است که کدنویسی دونفره کار دشواری است چراکه باید باهم هماهنگ باشید، صبر و تحمل زیادی داشته باشید، درمورد هر کاری که می‌کنید توضیح دهید، باهم تبادل‌نظر نمایید و گاهی باید با ابزارها و شرایطی کار کنید که شاید برای شما ایده‌آل نباشند.

همهٔ این‌ها انرژی زیادی از شما می‌گیرند بنابراین درنظر گرفتن زمان‌های مشخصی برای استراحت یک نیاز ضروری است؛ به‌طورمثال، می‌توانید زمان استراحت خود را با دیگر همکاران خود بگذرانید، می‌توانید گوشی خود را چک کنید و یا اگر می‌خواهید با کسی تماس بگیرید و یا هر کار دیگری که دوست دارید را انجام دهید.

نکتهٔ مهم در این زمینه این است که هر ۲ نفر باید به‌طور هم‌زمان استراحت خود را شروع نموده و هر ۲ نفر در زمان مشخص و مورد توافق مجدداً آمادهٔ کار باشند؛ نباید یکی از طرفین استراحت کند و دیگری به کار خود ادامه دهد و یا یکی از طرفین دیرتر و یا زودتر از زمان تعیین شده، ادامهٔ کار را آغاز کند.

نقش‌ها را جابه‌جا کنید
دستیابی به بسیاری از اهداف کدنویسی دونفره نیازمند تعویض مکرر نقش‌ها است به این معنا که اعضای تیم در طی یک پروژه باید بارها‌و‌بارها جای خود را عوض کنند و هر ۲ نقش هدایتگر و سکان‌دار را تجربه نمایند. جابه‌جایی نقش‌ها سبب می‌شود تا اعضاء چیزهای بیشتری از یکدیگر بیاموزند.

بعضی از تیم‌ها نقش خود را  پس از نصف روز کاری عوض می‌کنند، برخی دیگر هم هر ۲ یا ۳ روز یک‌بار این کار را انجام می‌دهند. زمان تعویض نقش‌ها بستگی به توافق طرفین داشته و می‌توان این زمان را کوتاه‌تر یا طولانی‌تر نمود. درمورد این‌که فاصلهٔ زمانی تغییر نقش‌ها چقدر باشد می‌توانید روند خاصی را در پیش بگیرید و پس از ۲ یا ۳ هفته در مورد ادامهٔ روند جاری و یا تغییر آن تصمیم‌گیری نمایید.

توجه داشته باشید که قرار است شما در فضای خصوصی شخص دیگری قرار بگیرید
شاید نیازی به گفتن نباشد اما رعایت بهداشت شخصی یکی از ضروریات کدنویسی دونفره است زیرا قرار است ۲ نفر چندین ساعت، درست در کنار یکدیگر بنشینند و درعین‌حال بر روی کدنویسی و مسائل مرتبط با آن تمرکز کنند.

از این‌رو، رعایت بهداشت شخصی اهمیت زیادی پیدا می‌کند؛ قبل از هر جلسهٔ کدنویسی دونفره، در صورت نیاز دوش بگیرید، از ضد عرق، خوشبو کننده و یا عطر استفاده کنید، مسواک بزنید و از خوردن غذاهای پر ادویه و یا سبزیجاتی مانند سیر و پیاز خام خودداری نمایید! اگر هم‌تیمی شما قرص نعناع و یا آدامس به شما تعارف کرد، بپذیرید (چون احتمالاً همکار شما احساس کرده که به آن نیاز دارید).

درنظر داشته باشید که برخی افراد ممکن است به عطرهایی با بوی تند و شدید حساسیت داشته باشند؛ اگر حس می‌کنید هم‌تیمی شما به بوی عطر شما حساسیت دارد و یا اگر خودِ شما به بوی عطر هم‌تیمی‌تان حساسیت دارید و یا اگر در سایر موارد بهداشتی باهم مشکلی دارید، حتماً به‌صورت خصوصی باهم گفتگویی داشته باشید و مسائل را به نحو محترمانه‌ای باهم درمیان بگذارید.

به‌خاطر موفقیت‌های خود شادی کنید
تولید نرم‌افزار کار سختی است و دونفره نوشتن، آن‌را سخت‌تر هم می‌کند! بنابراین از هر فرصتی برای روحیه دادن به خود کمک بگیرید. وقتی بخش مشخصی از کار را تکمیل می‌کنید، وقتی باگی را برطرف می‌کنید و هر موفقیت کوچک دیگری را برای شادی کردن غنیمت بدانید.

به‌عنوان یک قانون کلی،‌ بی‌تفاوت از کنار این لحظات عبور نکنید چراکه حتی یک شادی کوچک در حد گفتن یک جمله نیز می‌تواند روحیهٔ شما را بهتر کند و نیروی تازه‌ای به شما بدهد. مثلاً پس از تکمیل یک فیچر خاص از نرم‌افزار با گفتن جمله‌ای مانند «دَم خودمون گرم، بالاخره تمومش کردیم!» می‌توانید خود و هم‌تیمی‌تان را تشویق کنید.

مورد آخر هم این‌که شجاع باشید
شجاع بودن به‌معنای نترسیدن نیست بلکه بدین معنا است که علی‌رغم ترس، دست به‌عمل بزنید. کدنویسی دونفره مستلزم انجام کارهای چالشی زیادی است؛ باید در حضور شخصی دیگر کدی را بنویسید و اجرا کنید که مطمئن نیستید درست کار می‌کند یا نه؟ مجبورید رُک و مستقیم درمورد مشکلات و تفاوت‌ها صحبت کنید، در مورد همهٔ کارها و تصمیمات خود باید توضیح دهید، گاهی می‌دانید نظر شما از نظر طرف مقابل بهتر است اما باید صبر کنید و به او هم فرصت بدهید، باید به احساسات شخصی خود غلبه کنید و بسیاری از بایدهای دیگر. بنابراین باید شجاع باشید و ادامه دهید. شجاعت باعث پیشرفت شما هم در کدنویسی دونفره و هم در زندگی شخصی و اجتماعی خواهد شد.

در این مقاله مواردی از آداب و رسوم کدنویسی دونفره را مطرح نمودیم. حال نوبت به دیدگاه‌های شما می‌رسد. به‌نظر شما رعایت این موارد تا چه حد اهمیت دارد؟ علاوه‌بر این، چه موارد دیگری در کدنویسی دونفره می‌تواند مهم باشد؟ نظرات و تجربیات خود را با ما و سایر کاربران سکان آکادمی به اشتراک بگذارید.

منبع