دوستان زیادی به من لطف دارند و به انحای مختلف لطف و عنایتشان شامل حال من میشود. کامنتهای زیر پستها، ایمیل، تلگرام، تلفن و حضوری. یکی از مورادی که من در بین این ابراز محبتها میبینم و برایم بسیار ارزشمند است این است که دوستان سؤالهای خودشان را از من میپرسند و من هم تا جایی که بتوانم سعی میکنم در رفع مشکل کمک کنم. اما نکتهای که میبینم این است که در بعضی موارد دوستان اصول اولیه طرح سؤال یا گزارش خطا در برنامه را رعایت نمیکنند. بدون رعایت این اصول احتمال این که مطلوبشان حاصل شود بسیار کم است.
در این مطلب میخواهم تجربیات خودم از طرح سؤال و همچنین گزارش خطا در برنامه را با شما به اشتراک بگذارم.
طرح سؤال
فرض کنید خودروی شما خراب شده است یا عملکرد مناسبی ندارد. چه کار میکنید؟ به دوستتان زنگ میزنید؟ یا به تعمیرکار خودرو؟ به او چه میگویید؟ میگویید ماشینم خراب شده، چه کارش کنم؟ آیا انتظار دارید به صرف گفتن این جمله بلافاصله آن دوست یا مکانیک به شما بگوید مشکل چیست و راهحل آن چیست؟
سؤال پرسیدن در حوزه برنامهنویسی از این هم سختتر است. ماشینها همه شبیه هم هستند و علائم خرابی یا درست کار نکردن آنها شبیه هم هستند. اما هیچ دو برنامهای در زمین شبیه هم نیستند. بنابراین همانطور که انتظار ندارید دوست یا مکانیک شما صرفاً با شنیدن این جمله که ماشینم خراب شده، به شما راهحل بدهد، در پرسیدن سؤالهای مربوط به مشکلات برنامهنویسی هم باید اصولی را رعایت کنید.
چه چیزی را بپرسیم
اولین نکتهای که میخواهم اشاره کنم این است که آیا هر چیزی را باید بپرسیم؟ نکته مهم به نظر من این است که هر چیزی را نباید پرسید. بعضی موضوعات یا بسیار ساده و پیش پا افتاده هستند و یا موضوعات سلیقهای هستند و هر پاسخی به آنها درست است. مسائل ساده و پیش پا افتاده را با یک جستجوی ساده در اینترنت میتوان فهمید. مثلاً فرض کنید میخواهید شکل حلقه for در جاوا را بدانید. کافی است یک جستجوی ساده در اینترنت انجام دهید و دهها و صدها سایت را که پاسخ سؤال شما را دادهاند ببینید و در کمتر از چند دقیقه به پاسخ خود برسید. در ضمن با پرسیدن چنین سؤالاتی معمولاً پاسخی که میگیرید این است: RTM. این عبارت مخفف Read The Manual و به معنای «راهنما را بخوان» است. بعضی پرسشها هم پاسخ دقیقی ندارند: مثلاً اگر بپرسید «پراید بهتر است یا تیبا»، پاسخهایی که میگیرید همه سلیقهای هستند و اطلاعات زیادی به شما نمیدهند. البته اگر سؤال خاصی بپرسید که پاسخ مشخصی دارد احتمالاً جواب خواهید گرفت. مثلاً اگر بپرسید «پراید ارزانتر است یا تیبا؟» چون هر دوی این خودروها قیمت مشخصی دارند میتوانید جواب مورد نیاز خود را بگیرید.
کجا سؤال را بپرسیم
حالا اگر سؤالی داریم که شرایط بالا را دارد، نکته بعدی این است که کجا سؤال را بپرسیم؟ بهترین جا برای پرسیدن سؤال جایی است که احتمالاً آدمهایی که میتوانند آن را جواب بدهند بیشتر باشند. از عابری که در حال گذر در خیابان است فقط باید ساعت پرسید و آدرس. اگر درباره گرمایش زمین سؤال دارید باید بروید جایی که دانشمندان در آنجا جمع میشوند، مثلاً همایشهای مرتبط یا دانشگاهها و یا سایتهای تخصصی که درباره این موضوع مطلب مینویسد. برنامهنویسی هم همین است. سؤال خود را باید در جایی مطرح کنید که احتمالاً برنامهنویسهای زیادی آنجا جمع میشوند. سایتها، فرومها و تالارهای گفتگو، لیستهای ایمیلی و مانند آن. اگر میتوانید سؤال خود را به انگلیسی بپرسید و پاسخهای انگلیسی را بفهمید، پیشنهاد من سایتی مانند StackOverflow است. چندین هزار نفر برنامهنویس حرفهای برای پرسیدن سؤالهای خود یا پاسخ دادن به سؤالهای دیگران در این سایت فعالیت میکنند. استفاده از این سایت بسیار ساده است. یک حساب کاربری میسازید و سؤال خود را میپرسید و به آن برچسبهای موضوعی میزنید و منتظر میمانید تا حرفهایها به پرسش شما پاسخ دهند. سایتهای فارسی زبانی هم هستند که تالار گفتگو دارند و میتوانید سؤال خود را آنجا بپرسید. البته من خودم تا حالا از این سایتها استفاده نکردم و ترجیحم همان سایت «استک اور فلو» است ولی عملکرد خوب این سایتهای فارسی زبان را نادیده نمیگیرم. یکی از مهمترین محاسن استفاده از چنین سایتهایی این است که پرسش و پاسخ شما در آنجا باقی میماند و ممکن است در آینده راهنمای دیگران باشد.
اگر سؤال خیلی خاصی دارید که ممکن است فقط یک نفر پاسخ آن را بداند، بهترین کار ایمیل فرستادن برای آن فرد است. به صرف این که شماره موبایل آن فرد را دارید، دلیل نمیشود مدام مزاحم آن فرد شده و سؤال خود را بپرسید یا حتا بدتر این که به این فرد پیامک بزنید و انتظار داشته باشید در پیامک پاسخ خود را بگیرید. تلگرام هم همین حکم را دارد. ممکن است زمانی که فرد پیغام شما را دریافت میکند زمان مناسبی برای وی نباشد و به سادگی پیام شما را نادیده بگیرد. اگر میبینید پیغامی در تلگرام میفرستید و جوابی نمیگیرید، به این دلیل است.
چه اطلاعاتی همراه با سؤال بدهیم
وقتی که سؤال میپرسید، هر چقدر که دقیقتر و با جزئیات بیشتر پرسش خود را مطرح کنید، احتمال این که پاسخ مناسبی بگیرید، بیشتر و بیشتر میشود. اگر برگردید به همان پرسش خرابی خودرو، اگر فقط بگویید ماشین کار نمیکند، احتمالاً هیچکس نمیتواند بفهمد که مشکل ماشین چیست. اما اگر با جزئیات دقیق مشکل خودرو را بیان کنید، احتمالاً مکانیک متبحر میتواند مشکل خودرو را حدس زده و با آزمایش درستی حدس خود را بیازماید. اگر میخواهید درباره یک مشکل برنامهنویسی سؤالی بپرسید، باید مشکل را با دقت و جزئیات طرح کنید، کدی که مشکل دارد را در پرسش بیاورید، رفتاری که انتظار دارید برنامه داشته باشد را بنویسید و رفتار واقعی برنامه را هم بنویسید و توضیح بدهید که تفاوت این دو چیست. مراحل بازتولید خطا را بنویسید تا اگر فرد متخصص خواست خودش موضوع را بررسی کند بداند که دقیقاً چه مراحلی را باید طی کند تا مشکل را به چشم خودش ببیند. اگر تصویر خروجی برنامه به درک مشکل کمک میکند، حتماً آن تصاویر را هم به همراه سؤال خود بفرستید. خلاصه این که هر چیزی که مرتبط با سؤال است یا ممکن است به گرفتن پاسخ مناسب کمک کند، حتماً همراه سؤال باشد.
چه انتظاری از طرف مقابل داشته باشیم
آیا صرف این که ما سؤالی داریم و فردی هست که میتواند پاسخی برای این سؤال داشته باشد، برای ما حقی ایجاد میکند؟ آیا آن فرد موظف است حتماً به سؤال ما پاسخ بدهد؟ قطعاً نه. پس در پرسیدن سؤال رعایت حال افراد را هم بکنیم. اصرار بیش از حد، ادبیات طلبکارانه و زانتخاب زمان نامناسب، قطعاً ما را از هدف خودمان که گرفتن پاسخ است دور میکند.
گزارش خطا
اگر از برنامهای استفاده میکنید و متوجه خطایی در برنامه میشوید، گزارش آن خطا عملی پسندیده است و باعث میشود که به مرور زمان برنامهای که از آن استفاده میکنید، بهتر و بهتر شود. بنابراین اگر در برنامهای متوجه خطا شدید، ابتدا در خود برنامه بگردید و ببینید آیا فرمی برای گزارش خطا دارد یا نه؟ اگر داشت اطلاعات کامل درباره خطایی که کشف کردهاید به همراه اطلاعات تماس خودتان بدهید تا در تولید کنندگان برنامه در صورت نیاز بتوانند با شما ارتباط برقرار کرده و اطلاعات مورد نیاز خودشان را از شما بپرسند. اگر در برنامه جایی برای گزارش خطا نبود ولی راه تماس در برنامه بود (که معمولاً هست) موضوع را از طریق همان راه ارتباطی با آنها در میان بگذارید. اگر این هم نبود به سایت برنامه مراجعه کنید و در قسمت تماس با ما موضع را مطرح کنید.
بعضی از برنامهها کدباز (Open Source) هستند و معمولاً در گیتهاب یا یکی از سایتهای مشابه کد خود را در اختیار همگان قرار دادهاند. در سایت گیتهاب و سایر سایتهای مشابه، برای هر پروژه بخشی وجود دارد به نام Issues یا مشکلات. شما میتوانید خطای کشف شده خودتان را در یک Issue جدید به اطلاع توسعهدهندگان برنامه و سایر علاقمندان و دنبال کنندگان برنامه قرار دهید. فقط دقت کنید همان طور که برای سؤال هم گفتیم، گزارش خطا و Issue باید شامل همه جزئیات باشد. مثلاً اگر بخواهید در پایگاه کد اندروید یک خطا را گزارش کنید، بهتر است این موارد را حتماً بنویسید: شرح کامل خطا، وضعیت مورد انتظار، وضعیتی که در واقع رخ میدهد و با وضعیت مطلوب یا مورد انتظار متفاوت است، نسخه برنامه، نسخه کتابخانههای مورد استفاده، نسخه اندروید استودیو، سیستم عامل، کدی که رفتار مورد انتظار را ندارد و منشأ خطا است. فایل لاگ سیستم، تصویر خروجی برنامه، مراحل تولید دوباره همان خطا و …
خیلی جالب بود تو یکی از کامنتا یه دوستی براتون فرستاده بوداین ارور مال چیه بعد متن پیامشم این بود:
you must upgrade your android studio to version3
?
خیلی پست جالبی بود. بعضی ها این موارد رو اصلا رعایت نمیکنند، حالا یا از سر عدم آگاهی یا … ممنون از نکات خوبی که در این پست یادآوری کردید.