در این پست قصد دارم درباره Pair Programming يا برنامه نویسی ۲نفره (جفتی) صحبت کنم. اگر میدونید برنامه نویسی ۲نفره چیه لازم نیست پارگراف بعدی رو بخونید:

یکی از مواردی که در مدل XP (یکی از متدهاي اجایل) به وضوح مشاهده می شود، مفهومی است تحت عنوان Pair Programming. منظور از این اصطلاح این است که دو برنامه نویس در کنار یکدیگر شروع به کار کردن می کنند. یکی کدنویسی می‌کند و دیگری به کدهای همکارش نگاه می‌کند و در صورتی که نظری در مورد بهتر شدن کد داشت، به همکارش اعلام می کند. (سکان آکادمی)

Intro

چرا کد نویسی دو نفره؟

اشتراک گذاری دانش: وقتی که باهم روی یه کد کار میکنید اشتباه احتمالیتون رو پیدا کرده و یاد می‌گیرید که دیگه اون اشتباه رو تکرار نکنید، این قضیه میتونه برعکس باشه و شما به دوستون یادآور بشید که فلان جای کدش اشتباست و درستش چیه. وقتی که دو نفری کد میزنید نسبت به وقتی که تنهایی کار می‌کنید، بهتر میتونید بفهمید که چی دارید مینویسید و یا چیکار دارید می‌کنید (چون دائما هی از هم میپرسید چرا؟ چرا باید اینکارو بکنم؟ مثلا وقتی بحث میکنید سر اینکه چرا بجای حلقه For باید از While استفاده کنید).

یه مقدمه خوب: دو نفری کد زدن برای کسانی که تازه استخدام شدن یا تازه از دانشگاه (مثلا رشته برنامه نویسی) فارغ التحصیل شدن میتونه یه نمونه خوب و تمرینی باشه تا نحوه کد زدن صحیح و تفکر برنامه نویسی رو یاد بگیرن. این یه راه خیلی خوبیه تا بتونید اعضای تیمتون رو بهتر بشناسید (با تواناییهاشون آشنا بشید)، بفهمید که استایل کد زدنشون چطوره و ازتون انتظار داره که چطور باهم کار کنید و کد بزنید. برنامه نویسی دو نفری بهتون کمک میکنه تا افراد تیم رو بهتر بشناسید در نتیجه میدونید اگه يك روز به یه مشکل خاص برخوردید به کدوم یک از اعضای تیم باید مراجعه کنید و مشکلتون رو درمیون بگذارید تا حل بشه.

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

کد های بهتر و اصولی تر: قائدتا موقعی که دو نفری کد میزنید (نسبت به تک نفری) سرعت کمتری دارید اما حتما کدها تمیزتر و اصولی تر بوده، همچنین با باگ یا خطای کمتری روبرو خواهید شد. (البته تحقیق مستندی در این باره صورت نگرفته که بخوام بهتون اثباتش کنم، اما شخصا فکر می‌کنم این حرف صادق باشه. نظر خودتون چیه؟ ? )

این موارد و فوایدی که درباره دونفری کد زدن گفتم شبیه فواید CodeReview نیست؟ (اگه دوس داری بدونی Code Review چیه از ویکی پدیا توضیحاتش رو بخون). اگرچه که دو نفری کد زدن خیلی فواید بیشتری بجای CodeReview داره: درواقع شما در لحظه کدهارو بازخوانی (CodeReview) میکنی.

واو اینکه خیلی عالیه! اما چطوری میتونم شروع کنم؟

در این مقاله سعی كردم راجع به فرهنگ کد زدن دو نفره صحبت کنم، در جامعه ای که برنامه نویسی دو نفره خیلی کمه (البته اگه اصلا وجود داشته باشه!). پیشنهاد و بحث هایی که در این مقاله میشه ممکنه برای کساني که همین الان دارن دو نفری کد میزنن کمی عجیب و غریب باشه. البته من امیدوارم که این مقاله یه دید مثبت به شما بده در نتیجه ترغیب کنه شمارو که رو بیارید به برنامه نویسی دونفره. بعد از این شما می‌تونید برید تحقیق کنید، مقاله های بیشتری بخونید، حتی راجع بهش مقاله بنویسید، تیم خودتون رو تشکیل داده و این فرهنگ رو گسترش بدید.

با کی باید جفت بشم؟

با کسی که میخواد یا تمایل داره با شما جفت بشه! کسی که تمایل داره در کنار شما کد نویسی کنه بهتر از کسی هست که “بهترین همسان” برای دونفره کد زدنه.

اگه برای اولین باره، ابتدا در کنار تعدادی برنامه نویس (کمتر از ۵ تا) بنشینید و دو نفره کد زدن رو تجربه کنید تا بفهمید اصلا ۲نفری کد زدن با روحیات شما سازگاره و میتونید اون رو قبول کنید؟

 خیلی از مردم دوست ندارن شما وقتتون رو سر نگاه کردن به کد های پروژه اونها (در فکر خودشون) هدر بدید! اگه واسه اونها سخته که (یا تمایل ندارن) بیان سراغ کد های شما، این به دور از ادب هست که شما هم سراغ کدهای اونها رفته و بخوایید که دونفره برنامه نویسی کنید.

در اولین دفعات اول شما به سراغ دوستتون رفته، و در بازخوانی یا Review کدها بهش کمک کنید. این امر باعث میشه اون هم رغبت پیدا کنه و بیاد پیش شما و وقتش رو روی پروژه شما بزاره.

خیلی از مردم دوست ندارن دو نفره کد بنویسین (یکی کنارشون بشینه و مثلا کدهاشونو تماشا کنه!)، خودتونو آماده کنید که با تواضع جواب “نه” اونهارو بپذیرید.

چطوری باید جفتمو پیدا کنم؟

با__درخواست مستقیم__ شروع کنید (مثلا: سعید میای کنارم بشینی و باهم روی این پروژه کار کنیم؟). موفق نشدید؟ خوب اشکالی نداره. یه تقویم آماده کنید و زمان و تاریخ هایی که دوست دارین در اون تایم بصورت دو نفری رو پروژه خاص کار کنید رو مشخص کرده و برای اونها بفرستید. (مردم وقتی ببینن شما چقدر مصمم هستید و برای کارهاتون برنامه و زمان بندی مشخص دارید تمایل پیدا میکنن که باهاتون همکاری کنن).

این دعوت نامه تقویمی رو برای همه اعضای تیم بفرستید. سعی کنید یه سری برنامه منظم برای یادگیری، آموزش و درگیر کردن اونها با پروژه های برنامه نویسی جفتی تهیه و تدارک ببینید.

Finally I Found You

چه مدت باید جفتی کار کنم؟

بعضی ها ۹۰ دقیقه رو مناسب میدونن، بعضی ها هم هستن که کل روز رو جفتی کار می‌کنن، این کار باید هرروز تا تموم شدن یک اسپرینت (دوره های ۲ تا ۴ هفته ای برای اتمام یک فاز از پروژه در مدل اسکرام از متد اجایل – اطلاعات بیشتر ) انجام بشه. البته در تحقیقات انجام شده مشخص شده دوره های زمانی کوتاه تر نتیجه بهتری در برنامه نویسی جفتی می‌گیریند (Article: Promiscuous Pairing). البته حتما با دوستتون مشورت کنید و ببینید که اون چقدر میتونه یا تمایل داره که در روز با شما وقت بگذاره و باهم برنامه نویسی کنید!

سعی کنید برنامه تون رو بصورت دوره های ۱.۵ تا ۲ ساعته طراحی کنید.

چند بار میتونم جفتی کار کنم؟

این یه موضوعه بین شما، جفت برنامه نویستون و تیمی که توش کار می‌کنید؛ فقط مطمئن بشید همتون باهم سر این موضوع موافقید.

اگر ممکن بود، سعی کنید با دونفر (مختلف) در طول هفته کار کنید. این به شما کمک می‌کنه تا حس کنید که کار کردن با آدمهای مختلف چطوریه و چطور میتونید خودتون رو با اونها وفق بدید.

خب، حالا باید چیکار کنم؟

دو تا واژه خیلی مهم

کد زن (Driver) : کدهارو می‌نویسه، طرح کلی از برنامه تو ذهنشه، در باره کدها دید جزئی (Micro) داره.

راهنما (Navigator) : توی کد ها به دنبال مشکلات منطقی، باگ احتمالی و یا پیاده سازی بهتر می‌گرده،‌ مانند یه ناظر حرفه ای عمل میکنه، و از قبل به مشکلات بلقوه که ممکنه پیش بیاد فکر می‌کنه؛ در ضمن، به کد ها یه دید کلی (Macro) داره.

Pairing Vocab

راهنما کارش مثل کسیه که کدهارو بازبینی میکنه، درواقع یه Code Reviewer، اون دائما به یه راه حل یا روش بهتر توی نوشتن کدها فکر میکنه.

انواع برنامه نویسی دو نفره:

اصطلاح‌هایی که در زیر میاد کاملا اختراع و ایده خودمه و اصلا ربطی به واژه های رسمی (برنامه نویسی دو نفره) نداره، فقط واسه اینه که یه دید بهتر بهتون بده.

کلاسیک:

Classic

یه ماوس و کیبورد اضافی روی میز باشه که بتونید در لحظه نقش‌هاتون رو باهم عوض کنید، مثلا راهنما بشه کدزن و کدزن بشه راهنما. معمولا در هر ۱۵ دقیقه تا یکساعت حداقل یکبار این اتفاق میفته و مجبور میشید نقش‌هارو رو بهم پاس بدید؛ البته این مورد برای کسایی که تازه کارن حتی به دفعات بیشتر هم میرسه!

  • فواید: کمکتون میکنه تا باهم هماهنگ شده، باهم کار کنید و پیش برید

  • معایب: ممکنه روی میز فضای کافی برای گذاشتن یه کیبورد و ماوس اضافی نباشه

تیمی که من باهاشون کار می‌کنم اخیرا یه میز بزرگ واسه برنامه نویسی دو نفره تعیین کردن که دو تا کیبور، ماوس و مانیتور داره – هرموقع که اراده کنن در کثری از ثانیه نقش‌هاشون عوض میشه.

کند:

کارشون مثل همون بالاییه، فقط دیگه ماوس و کیبور اضافی در کار نیست!

The Lazy

  • فواید: دیگه نمیتونین پوینتر ماوس همدیگه رو بدزدین و هی با کدا ور برین وسط کد زدن بقلی ؟ ، بدون هیچ دردسر و ابزار اضافه ای شروع به برنامه نویسی اشتراکی (دو نفره) میکنید (هر لحظه که اراده کردین ).

  • معایب: مجبورین دستتون رو درااااز کنید و اون نقطه از کد که مشکل داره رو نشون دوستتون بدین ( دهنت سرویس میشه ).

تازه کارانه:

همزمان “راهنما” هم باشید.

The Noob

  • فواید: دیگه پر از استرس و نگرانی نخواهید بود،‌ فرصت بیشتری برای سوال پرسیدن دارید

  • معایب: این روش هیچوقت رضایت بخش نیست، و شما خیلی سخت می‌تونید روی کد زدن تمرکز کنید

من عاشق تازه کارام. این فرصت رو پیش میاره تا بتونید از راهنما سوال بپرسید، یاد بگیرین که تیم چطوری فکر و کار میکنه، و اینکه بفهمید جفتتون “راهنما” توی چه بخشی خیلی خوبه. این واسه تازه کارهایی مثل من وااااقعا یه فرصت عالیه.

پریشانانه:

The Distracted

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

  • فواید: میتونید خیلی راحت دنبال یه چیزی بگردین و پیداش کنید

  • معایب: خیلی راحت تمرکزتون از بین میره

مثل “تازه کارانه” شروع کنید به کار کردن، اما وقتی که احتیاج داشتید دنبال یه چیزی بگردین برید استراتژیتون رو به “پریشانانه” تغییر بدین. یه جورایی این مثل همون حالت کلاسیکه.

آیا مورد یا چیز دیگه ای هست که باید بدونم؟

بهداشت فردیتون رو رعایت کنید!

Hygiene

حتما دوش بگیرید، ادکلن خوشبو بزنید، مسواک کنید، خوشبو کننده دهان بخورید و حتما شب قبلش از خوردن پیاز و سیر خودداری کنید.

باهم رفیق و شریک باشید

Welcoming Pairing

من اینکارو شروع کردم و عاشقش شدم/ازش متنفرم!

بعله! بجای تشکر از من این روش رو تست کنید. خیلی خوشحال می‌شم اگه بدونم شما چه تجربه ای از برنامه نویسی دو نفره داشتید.

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

Translated from: developer.atlassian.com