Pair Programming (برنامهنویسی دونفره) روشی است که در آن دو دولوپر به صورت همزمان پشت یک کامپیوتر مینشینند و سعی میکنند تا به طور مشترک راهحلی برای یک مسئلهٔ مشخص بیابند. این روش کدنویسی در رویکردهای Agile و Extreme Programming (یا به طور خلاصه XP) بسیار پرکاربرد است اما نیاز به توضیح نیست که گرچه برنامهنویسی دونفره مزایا و آثار مثبت فراوانی در پی دارد، ولی در عین حال روشی بسیار دشوار و چالشبرانگیز است و از همین روی موفقیت در این روش توسعهٔ نرمافزار نیازمند آگاهی از آداب و رسوم خاص آن است که در این مقاله به چند مورد از مهمترین آداب برنامهنویسی دونفره خواهیم پرداخت که رعایت آنها دستیابی به مزایای برنامهنویسی دونفره را امکانپذیر خواهد ساخت.
پیش از مطالعهٔ ادامهٔ این مقاله، توصیه میکنیم دیگر مقالاتی که پیرامون برنامهنویسی دونفره تاکنون منتشر شدهاند را نیز مطالعه نمایید که عبارتند از:
- نکاتی در مورد نحوۀ اجرای صحیح Pair Programming یا برنامهنویسی دونفره!
- چگونه از مشکلاتی که در آینده ممکن است برای نرمافزار یا دولوپر به وجود بیایند جلوگیری کنیم؟
- پاسخ به برخی تصورات نادرست در مورد برنامهنویسی دونفره
- آیا میدانستید که برنامهنویسی دونفره میتواند شما را به برنامهنویس ماهرتری تبدیل کند؟
حواستان را جمع کنید و فعالانه در تیم حضور داشته باشید
دولوپرهایی که وارد برنامهنویسی دونفره میشوند، در واقع یک تیم هستند و هیچکس دوست ندارد تا علاوه بر انجام کارهای خود، مسئولیت وظایف همتیمیاش را نیز به دوش بکشد! حضور فعال در تیم یعنی استفاده از چیزهایی همچون هدفون، چک کردن گوشی (هرچند به صورت بسیار کوتاه) و غیره ممنوع و از همین روی وقتی پشت یک کامپیوتر مینشینید و کدنویسی دونفره را آغاز میکنید، حل مسئلهٔ پیشرو باید تنها موضوعی باشد که ذهن شما را به خود درگیر میکند.
برای اینکه روی این مسئله متمرکز بمانید، میتوانید از همتیمی خود در مورد کدهایی که مینویسد سؤال نموده و به این نحو خود را درگیر مسئله کنید و نیاز به توضیح نیست که چنانچه واقعاً از نقش هدایتگر خسته شده و به هیچوجه نمیتوانید روی کدهای طرف مقابل متمرکز بمانید، از او خواهش کنید تا موقتاً جای خود را با شما عوض کند.
با صدای بلند فکر کنید
در کدنویسی دونفره هم سکاندار و هم هدایتگر باید افکار خود را با طرف مقابل در میان گذاشته و در مورد کاری که انجام میشود توضیح داده و پیشنهاداتی ارائه نمایند و این بر خلاف آداب کدنویسی دونفره است که چندین دقیقه در سکوت و بدون هیچ توضیحی به کد زدن مشغول باشید و همکار شما هم ساکت و بدون هیچ حرفی در کنار شما نشسته باشد.
بنابراین اگر واقعاً چند دقیقه نیاز به تمرکز زیادی دارید و نمیتوانید همزمان در مورد کدهایی که مینویسید توضیح دهید، این موضوع را با همکار خود در میان گذاشته به او بگویید که پس از کامل شدن این بخش از کد، توضیحاتی در مورد آن ارائه خواهید نمود و اگر همکار شما ساکت است و حرفی نمیزند، با سوالاتی مانند «نظر تو چیه؟» و «به نظرت درست نوشتم؟» میتوانید وی را وارد بحث کنید.
همدل باشید و قضاوت نکنید
از اینکه چیزی را نمیدانید شرمسار نباشید و آن را مخفی نکنید. در حقیقت، اگر چیزی را نمیدانید شجاع بوده و بگویید نمیدانم زیرا در تیمهای دونفرهٔ موفق با گفتن نمیدانم نه اتفاقی میافتد و دنیا به آخر میرسد بلکه فقط ارتباط طرفین نزدیکتر شده و دو طرف درک بیشتری نسبت به یکدیگر پیدا میکنند و این در افزایش سطح موفقیت تیم بسیار مؤثر است. متقابلاً نسبت به همتیمی خود با همدلی رفتار کنید و این حس امنیت را برای وی ایجاد کنید تا آزادانه بتواند بگوید نمیدانم. بنابراین هرگز از اینکه همتیمی شما چیزی را نمیداند اظهار تعجب نکنید و با گفتن عباراتی مانند «تو واقعاً نمیدانی فانکشن ایکس چه کاری انجام میدهد؟» باعث خجالتزدگی و شرمساری او نشوید.
مراقب خصوصیات اخلاقی خود باشید
خیلی خوب است که به موفقیتها و کارهای درست خود افتخار کنیم اما باید مراقب باشیم تا دچار و غرور و خودبزرگبینی نشویم. اگر همیشه در حال افتخار کردن به خود و موفقیتهایمان باشیم، دیگران هم طبعاً بیشتر به کاستیها و عیوب ما خواهند پرداخت که این موضوع هم در زندگی روزمره و هم در ارتباطات ما با دیگران به عنوان یک دولوپر تأثیر نامطلوبی خواهد داشت و علاوه بر این سبب خواهد شد که خودِ ما نتوانیم چیزی از سایر دولوپرها و همکاران خود بیاموزیم و این در کدنویسی دونفره بسیار مشکلساز خواهد شد (در همین راستا، توصیه میکنیم به مقالهٔ خودگیکپنداری، خودخَفَنپنداری و خودآسپنداری: سندرمی که برخی دولوپرها به آن دچار میشوند! مراجعه نمایید.)
فروتن باشید و به ایدههای طرف مقابل اهمیت بدهید
حتی اگر دولوپر بسیار باهوش و ماهری باشید اما این اجازه را نخواهید داشت تا ایده و دیدگاه طرف مقابل را بیاهمیت تلقی نمایید. در برنامهنویسی دونفره، فروتنی یک ویژگی بسیار کلیدی است اما منظور از فروتنی این نیست که وانمود کنید چیز زیادی نمیدانید یا ایدهای به ذهنتان نمیرسد، بلکه منظور این است که علیرغم داشتن ایدههای عالی برای حل یک مسئله، به تنهایی تصمیم نگیرید و وارد عمل نشوید. به عبارتی، قبل از اینکه بخواهید ایدهٔ خود را عملی کنید، نظر همکار خود را نیز در مورد نحوهٔ حل آن موضوع جویا شده و در مورد راهحلهای پیشنهادی او نیز بحث و تبادلنظر نمایید و در نهایت بهترین و کاراترین پیشنهاد را انتخاب نموده و همان را اجرا کنید.
توافقات صورت گرفته و استانداردهای تیم را به یکدیگر یادآوری کنید
اگر در تیمتان از قبل بر روی اصطلاحاً Test-Driven Development (توسعهٔ آزمونمحور) توافق نمودهاید و حال میبینید که همکار شما قصد دارد تا بدون پیروی از این استاندارد کدنویسی میکند، باید این موضوع را به شکلی محترمانه به وی گوشزد کنید که با این کار میتوانید پایبندی خود و همکارتان را نسبت به قوانینی که از قبل در نظر گرفته شدهاند، افزایش دهید.
دائماً به سکاندار نگویید که چه کار باید بکند
خوب است که گاهی اوقات نکاتی را به همتیمی خود تذکر داده و یا به او کمک کنید اما نباید نقش سکاندار را از وی بگیرید و دائماً در حال دستور دادن به وی باشید. بنابراین صبر داشته باشید، به همکار خود فرصت فکر کردن داده و اجازه دهید تا خودش نقش سکاندار را به بهترین شکل ممکن ایفا نموده و در مورد کدهایی که مینویسد تصمیم بگیرد و در نهایت هم اگر واقعاً قادر به تصمیمگیری نبود و کار متوقف شد، میتوانید به وی کمک کنید.
به احساسات شخصی خود مسلط باشید و آنها را در کار وارد نکنید
به خاطر داشته باشید قبل از اینکه دولوپر باشید یک انسان هستید و طبعاً نمیتوانید خود را از زندگی روزمره جدا نموده و فاقد هرگونه احساساتی باشید. شاید گاهی حق داشته باشید که عصبانی، بیحوصله و یا حتی بداخلاق باشید اما حق ندارید که احساسات شخصی را به تیم خود انتقال دهید. عصبانی و بیحوصله بودن به شما مجوز نمیدهد تا با همتیمی خود بدرفتاری کنید. البته گاهی ممکن است با وجود تلاش فراوان باز هم موفق به کنترل احساسات خود نشده و رفتار نادرستی با همکار خود داشته باشید که در اینگونه موارد بلافاصله از همکار خود عذرخواهی نمایید. مثلاً میتوانید بگویید «وای ببخشید. قصد ناراحت کردن تو رو نداشتم فقط از اینکه پیدا کردن این باگ اینقدر ما رو به زحمت انداخت، اعصابم به هم ریخت!»
در نظر داشته باشید که همکار شما نیز یک انسان است، با احساسات و حالوهوای خاص خود و نیاز به توضیح نیست که او هم گاهی اوقات ممکن است قادر به کنترل احساسات خود نباشد به طوری که ممکن است فریاد بزند و یا حرف ناشایستی به زبان آورد که در چنین شرایطی تحمل داشته باشید و با همتیمی خود درگیر نشوید بلکه در عین حال اجازه ندهید که بداخلاقی و رفتارهای نادرست به رویهٔ همیشگی همکارتان تبدیل شود و در صورت لزوم این موضوع را به طرز محترمانهای به وی گوشزد کنید.
وقت بگذارید و همتیمی خود را بشناسید
اولین بار که با کسی وارد یک تیم دونفره میشوید ممکن است هیچ شناختی از هم نداشته باشید؛ حتی شاید رفتارهای طرف مقابل را درک نکنید، منظور او را نفهمید و یا حتی ممکن است درک لهجهٔ او برایتان دشوار باشد (البته متقابلاً برای همکار شما نیز همین شرایط وجود دارد.) از همین روی، باید اجازه دهید تا مدت زمانی سپری شود و همزمان هر دو طرف برای شناخت و درک یکدیگر تلاش نمایید.
خواستههای خود را مطرح کنید و در عین حال برای سازش آماده باشید
نیازها و ضروریات کار را مطرح کنید و در مورد آنها با همتیمی خود به توافق برسید. مثلاً اگر اندازهٔ فونت برای شما مناسب نیست و به زحمت سورسکد را میبینید، ایرادی ندارد که نیاز خود را مطرح کنید و متقابلاً خواستهها و نیازهای طرف مقابل خود را نیز بپذیرید (مثلاً اگر شما IDE خاصی را ترجیح میدهید، ضرورتی وجود ندارد تا حتماً ترجیح شما اِعمال شود.)
حتی ممکن است ویرایشگر مورد نظر شما مورد توافق تیم باشد، اما در مورد رنگ پسزمینه اختلافنظر داشته باشید. به طور مثال، شما علیرغم اینکه میتوانید زمینهٔ روشن را تحمل کنید، اما ممکن است متن روشن بر روی زمینهٔ تیره را ترجیح دهید در حالی که همکارتان متن تیره بر روی زمینهٔ روشن را ترجیح میدهد که در اینگونه موارد باید بر روی یکی از حالتها توافق صورت گیرد و یا بر روی حالت سومی توافق کنید (در همین راستا، توصیه میکنیم به مقالهٔ کدنویسی با بکگراند Dark یا Light؟ نیز مراجعه نمایید.)
کار با دولوپرهای کمتجربه را نیز امتحان کنید
اگر تجربهٔ خوبی در کدنویسی دارید، بهتر است کار با دولوپرهای تازهکار را نیز تجربه کنید و فکر نکنید که یک دولوپر مجرب نمیتواند چیزی از یک تازهکار بیاموزد! گاهی نیاز دارید تا کسی کنار شما باشد که کمی تفکر پیچیدهٔ شما را متوقف کند و ایدههای تازهتری را به ذهن شما وارد نماید. به خاطر داشته باشید که یکی از بهترین راههای یادگیری، آموزش است.
زمانهایی برای استراحت در نظر بگیرید
واقعیت این است که کدنویسی دونفره کار دشواری است چرا که باید با هم هماهنگ باشید، صبر و تحمل زیادی داشته باشید، در مورد هر کاری که میکنید توضیح دهید، با هم تبادل نظر نمایید و گاهی باید با ابزارها و شرایطی کار کنید که شاید برای شما ایدهآل نباشند؛ همهٔ اینها انرژی زیادی از شما میگیرند و از همین روی در نظر گرفتن زمانهای مشخصی برای استراحت، یک نیاز ضروری است (به طور مثال، میتوانید تایم استراحت را با دیگر همکاران خود بگذرانید و یا میتوانید گوشی خود را چک کنید و یا اگر میخواهید با کسی تماس بگیرید و یا هر کار دیگری که دوست دارید را انجام دهید.) نکتهٔ مهم در چنین موقعیتهایی این است که هر دو نفر باید به طور همزمان استراحت خود را شروع نموده و هر دو نفر در زمان مشخص و مورد توافقی مجدداً آمادهٔ کار باشند و هرگز نباید یکی از طرفین استراحت کند و دیگری به کار خود ادامه دهد و یا یکی از طرفین دیرتر و یا زودتر از زمان تعیین شده، ادامهٔ کار را آغاز کند.
نقشها را جابهجا کنید
دستیابی به بسیاری از اهداف کدنویسی دونفره نیازمند تعویض مکرر نقشها است به این معنا که اعضای تیم در طی یک پروژه باید بارها و بارها جای خود را عوض کنند و هر دو نفر نقش هدایتگر و سکاندار را تجربه نمایند و نیاز به توضیح نیست که جابهجایی نقشها سبب میشود تا طرفین چیزهای بیشتری از یکدیگر بیاموزند. بعضی از تیمها نقش خود را پس از نیمی از روز کاری عوض میکنند، برخی دیگر هم هر دو یا سه روز یکبار این کار را انجام میدهند و این در حالی است که زمان تعویض نقشها بستگی به توافق طرفین داشته و میتوان این زمان را کوتاهتر یا طولانیتر نمود. در مورد اینکه فاصلهٔ زمانی تغییر نقشها چهقدر باشد، میتوانید روند خاصی را در پیش بگیرید و پس از دو یا سه هفته در مورد ادامهٔ روند جاری و یا تغییر آن تصمیمگیری نمایید.
توجه داشته باشید که قرار است در فضای خصوصی شخص دیگری قرار بگیرید
شاید نیازی به گفتن نباشد اما رعایت مسائل بهداشتی یکی از ضروریات کدنویسی دونفره است زیرا قرار است دو نفر چندین ساعت درست در کنار یکدیگر بنشینند و در عین حال بر روی کدنویسی و مسائل مرتبط با آن تمرکز کنند که از همین روی رعایت بهداشت شخصی اهمیت زیادی پیدا میکند.
قبل از هر جلسهٔ کدنویسی دونفره سعی کنید دوش بگیرید، از ضد عرق و یا عطر استفاده کنید، مسواک بزنید و از خوردن غذاهای پُرادویه و یا سبزیجاتی مانند سیر و پیاز خام خودداری نمایید و اگر همتیمی شما قرص نعناع و یا آدامس به شما تعارف کرد، بپذیرید زیرا احتمالاً همکارتان احساس کرده که به آن نیاز دارید!
در نظر داشته باشید که برخی افراد ممکن است به عطرهایی با بوی تند حساسیت داشته باشند به طوری که اگر حس میکنید همتیمی شما به بوی عطرتان حساسیت دارد و یا اگر خودِ شما به بوی عطر همتیمیتان حساسیت دارید و یا اگر در سایر موارد بهداشتی با هم مشکلی دارید، حتماً به صورت خصوصی با هم گفتگویی داشته باشید و مسائل را به نحوی محترمانه با هم در میان بگذارید (به واژهٔ محترمانه خوب دقت نمایید.)
به خاطر موفقیتهای خود شادی کنید
تولید نرمافزار کار سختی است و دونفره نوشتن نرمافزار آن را سختتر هم میکند و از همین روی از هر فرصتی برای روحیه دادن به خود کمک بگیرید. وقتی بخش مشخصی از کار را تکمیل میکنید، وقتی باگی را بر طرف میکنید و هر موفقیت کوچک دیگری را برای شادی کردن غنیمت بدانید. به عنوان یک قانون کلی، بیتفاوت از کنار این لحظات عبور نکنید چرا که حتی یک شادی کوچک در حد گفتن جملهای مثبت نیز میتواند روحیهٔ شما را بهتر کند و نیروی تازهای به شما بدهد (مثلاً پس از تکمیل یک فیچر خاص از نرمافزار با گفتن جملهای مانند «دَم خودمون گرم، بالاخره تمومش کردیم!» میتوانید خود و همتیمیتان را تشویق کنید.)
مورد آخر هم اینکه شجاع باشید
شجاع بودن به معنای نترسیدن نیست بلکه بدین معنا است که علیرغم ترس، دست به عمل بزنید. کدنویسی دونفره مستلزم انجام کارهای چالشی زیادی است به طوری که باید در حضور شخصی دیگر کدی را بنویسید و اجرا کنید که مطمئن نیستید درست کار میکند یا خیر! همچنین مجبور هستید تا رُک و مستقیم در مورد مشکلات و تفاوتها صحبت کنید، در مورد همهٔ کارها و تصمیمات خود باید توضیح دهید، گاهی میدانید نظر شما از نظر طرف مقابل بهتر است اما باید صبر کنید و به او هم فرصت بدهید، باید به احساسات شخصی خود غلبه کنید و بسیاری از بایدهای دیگر که از همین روی باید شجاع باشید و ادامه دهید چرا که این خصیصه باعث پیشرفت شما هم در کدنویسی دونفره و هم در زندگی شخصی و اجتماعی خواهد شد.
در این مقاله مواردی از آداب و رسوم کدنویسی دونفره را مطرح نمودیم؛ حال نوبت به دیدگاههای شما میرسد. به نظر شما رعایت این موارد تا چه حد اهمیت دارند مضاف بر اینکه چه موارد دیگری در کدنویسی دونفره هستند که میتوانند مهم باشند؟ نظرات، دیدگاهها و تجربیات خود را با سایر کاربران سکان آکادمی به اشتراک بگذارید.