راهنمای تعامل و پرسش‌وپاسخ در کامیونیتی‌های فنی

نسخه ۱.۰ — راهنمای عملی برای گروه‌ها، انجمن‌ها و فضاهای گفتگو در حوزه فناوری اطلاعات

مقدمه

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

این سند، چکیدهٔ مهم‌ترین استانداردهای جهانی در فرهنگ کامیونیتی‌های نرم‌افزاری است که به ترتیبِ مراحل تعامل (از لحظهٔ برخورد با مشکل تا زمان حل شدن آن و مشارکت در بحث‌ها) تنظیم شده است.


۱. پیش از پرسیدن سؤال

۱-۱. جستجو و تلاش اولیه

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

۱-۲. دیباگ اردک پلاستیکی (Rubber Duck Debugging)

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


۲. آداب ارسال پیام و آغاز گفتگو

۲-۱. «سلام»ِ خالی نفرستید (No Hello)

در ارتباطات متنی، فرستادن یک «سلام» یا «سلام، وقت بخیر» و منتظر ماندن تا طرف مقابل جواب دهد و بعد سؤال خود را بپرسید، باعث وقفه و اتلاف وقت هر دو طرف می‌شود. سلام و احوال‌پرسی را در همان پیام اول و در کنارِ اصلِ مطلب بنویسید. (بیشتر بخوانید)

۲-۲. برای پرسیدن سؤال اجازه نگیرید (Don't Ask to Ask)

پرسیدن جملاتی مانند «کسی اینجا با داکر کار کرده؟» یا «یه سؤال لینوکسی داشتم، کسی هست کمک کنه؟» هیچ اطلاعاتی دربارهٔ مشکل شما نمی‌دهد. افراد باتجربه معمولاً از پاسخ دادن به چنین سؤال‌های مبهمی خودداری می‌کنند، چون نمی‌دانند قرار است با چه سطحی از مسئله روبه‌رو شوند. مستقیماً خودِ سؤال را مطرح کنید. (بیشتر بخوانید)

۲-۳. کل مطلب را در یک پیام واحد بنویسید

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

❌ نادرست:
- سلام دوستان
- کسی اینجا با Nginx کار کرده؟
- من یه مشکلی توی کانفیگ دارم
- وقتی ریلود می‌کنم خطا میده

✅ درست:
سلام وقت بخیر. من در تنظیمات Nginx روی اوبونتو ۲۴.۰۴ قصد دارم ترافیک پورت ۸۰ را به پورت ۳۰۰۰ هدایت کنم، اما هنگام اجرای دستور nginx -t با خطای زیر روبه‌رو می‌شوم:
[متن خطا و بخش مربوط به کانفیگ]
تا الان این موارد را هم بررسی کرده‌ام... ممنون می‌شوم راهنمایی کنید.

۲-۴. از ارسال پیام صوتی (Voice) برای مسائل فنی خودداری کنید

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

۲-۵. پرهیز از پیام خصوصی (DM/PV) و ارسال هم‌زمان در چند گروه (Cross-Posting)


۳. کالبدشکافی یک سؤال فنی استاندارد

۳-۱. هدف اصلی را بگویید، نه فقط راه‌حل حدسی خودتان را (XY Problem)

مسئلهٔ XY زمانی رخ می‌دهد که شما می‌خواهید کار X را انجام دهید، و فکر می‌کنید راه‌حل آن استفاده از روش Y است؛ اما چون در پیاده‌سازی Y به مشکل خورده‌اید، بدون اشاره به هدف اصلی، فقط دربارهٔ Y سؤال می‌پرسید. در بسیاری از مواقع، مسیر Y از پایه برای رسیدن به هدف شما اشتباه است. همیشه در کنار سؤالتان، هدف نهایی (تصویر بزرگ‌تر) را هم توضیح دهید. (بیشتر بخوانید)

۳-۲. محیط اجرا، زمینه و تلاش‌های خود را مشخص کنید

جملاتی مثل «این کد کار نمی‌کند» یا «برنامه کرش می‌کند» بدون جزئیات، غیرقابل‌پاسخ هستند. همیشه موارد زیر را به روشن‌ترین شکل ذکر کنید (بیشتر بخوانید):

۳-۳. ارائهٔ مثال حداقلی، کامل و قابل بازتولید (MRE / SSCCE)

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

۳-۴. از کد و ترمینال عکس نگیرید!

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


۴. پس از دریافت پاسخ و حل مشکل

۴-۱. سؤال را پاک نکنید و راه‌حل نهایی را بنویسید

پاک کردن پیامِ سؤال پس از رسیدن به جواب، یا بستن بحث با جملهٔ «ممنون، خودم حلش کردم!» بدون توضیحِ چگونگی آن، تضییع وقت کامیونیتی است. ماه‌ها یا سال‌ها بعد، فرد دیگری دقیقاً با همین مشکل در گروه جستجو خواهد کرد؛ دیدن سؤالی بدون جواب (پدیده‌ای که در فرهنگ وب با کمیک معروف Wisdom of the Ancients شناخته می‌شود) بسیار ناامیدکننده است. همیشه در پایان، راه‌حل نهایی را در چند خط زیر سؤال خود ثبت کنید تا به دانش جمعی اضافه شود.


۵. فرهنگ تعامل، پاسخ‌گویی و اخلاق حرفه‌ای

۵-۱. نقد کد، نه نقد شخص (Egoless Programming)

هنگام بررسی کد یا معماری سیستم دیگران، نقد خود را معطوف به «منطق فنی و پیاده‌سازی» کنید، نه هوش، تجربه یا شخصیت نویسنده. به جای جملاتی مانند «چقدر این کد رو بد نوشتی»، بگویید «این کوئری در ترافیک بالا باعث مشکل N+1 می‌شود و بهتر است به این شکل بازنویسی شود». به همین ترتیب، اگر کد شما نقد شد، آن را حملهٔ شخصی تلقی نکنید.

۵-۲. چهار قاعدهٔ طلایی تعامل

برای حفظ فضای امن، محترمانه و یادگیرنده در گروه، رعایت چهار قانون اجتماعیِ تعریف‌شده در Recurse Center ضروری است:

۵-۳. پایبندی به منشور اخلاقی (Code of Conduct)

سلامت بلندمدت هر کامیونیتی در گرو احترام متقابل، رواداری و پذیرش افراد با سطوح دانش متفاوت است. آشنایی با چارچوب‌های شناخته‌شدهٔ بین‌المللی مانند پیمان مشارکت‌کنندگان (Contributor Covenant) و منشور اخلاقی برلین به درک بهتر مرزهای رفتار حرفه‌ای در فضاهای متن‌باز و فناوری کمک می‌کند.

درباره این راهنما

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


نگارش و تنظیم: پینک اورکا