تست یازدهم جوئل: آیا داوطلبان جدید، در موقع مصاحبه کد هم مینویسند؟
در سایر نوشتههایی که مربوط به شرح تست جوئل بود، معمولاً عباراتی از متن اصلی تست به زبان آقای اسپالسکی میآوردم و بعد دربارهاش صحبتهای تکمیلی ارائه میکردم.
اما در مورد تست یازدهم به نظرم همه چیز کاملاً روشن است: هر زمان که فرد جدیدی را استخدام میکنید حتماً و حتماً تست کدنویسی بگیرید. در مورد مساله استخدام برنامهنویس در تیمهای نرمافزاری قبلاً یک مطلب نسبتاً مفصل نوشته بودم: چطور متقاضیان عضویت در یک تیم نرمافزاری را ارزیابی کنیم؟
در این نوشته میخواهم به بایدها و نبایدها در حوزه همین تست کدنویسی بپردازم.
آدمها، در شرایط آزمون واکنشهای مختلفی نشان میدهند. هدف آزمون کدنویسی را فراموش نکنید: سنجش میزان کیفیت و دقت کار متقاضی در این آزمونها چیزی که اهمیت دارد خروجی کار است نه اینکه متقاضی با مک بوک کد مینویسد!
نکاتی درباره برگزاری تست کدنویسی
اولین نکتهای که باید به آن توجه کنید این است که تست کدنویسی، قرار نیست سوال تعریفی باشد. پرسیدن اینکه HashTable چیست یا delegate به چه دردی میخورد، خوب است اما نه برای یک متقاضی کدنویسی.
وقتی میگوییم تست کدنویسی یعنی تستی که در آن عمل کدنویسی انجام شود و شما خروجی کد فرد را ببینید و ارزیابی کنید. پاسخ درست یا غلط طرف مقابل به سوال تستی و تشریحی تئوری، هیچ چیزی را راجع به مهارت یا استایل کدنویسیاش به شما نشان نمیدهد.
نکته دوم این است که سوالی را مطرح کنید که خودتان جوابش را بدانید و دربارهاش مطالعه کرده باشید. افرادی را میشناسم که اگر یک الگوی جدید برنامهنویسی را دیروز یاد گرفته باشند، امروز آن را در یک تست برنامهنویسی مطرح میکنند!
ممکن است این نکته بدیهی به نظر برسد، اما نکته مهمی است و نباید از آن غفلت کرد. اگر شما به عنوان یک برنامهنویس میخواهید برنامهنویسی قویتر از خودتان را استخدام کنید و سوالی که برای تست به متقاضی میدهید بالاتر از سطح شماست، بهتر است کار استخدام را به فرد دیگری واگذار کنید. چون در نهایت صلاحیت ارزیابی پاسخ متقاضی را به دلیل دانش کمتر نخواهید داشت!
نکته بسیار مهم بعدی این است که اگر مثلاً از 10 نفر تست برنامهنویسی میگیرید به همه یک سوال مشخص و یکسان بدهید. اینطوری میشود از روی نتیجه کدنویسی افراد، تصمیم گرفت که کدامیک مساله را به شکل بهتری حل کرده، ولی اگر به هر نفر یک سوال مجزا بدهید، عملاً 10 خروجی متفاوت دارید که اصلاً قابل مقایسه با هم نیستند و بنابراین انتخاب بین آنها اگر غیرممکن نباشد، بسیار مشکل خواهد بود.
مساله بعدی در خصوص سطح سوال است. سوال مطرح شده نباید آن چنان روتین باشد که هر کس که یک sample های یک کتاب برنامهنویسی را دیده باشد بتواند از پسش بربیاید و همچنین نباید آن چنان خاص باشد که فقط با دانستن نکات انحرافی (یا فوتهای کوزهگری!) بتوان آن را حل کرد. دقت کنید که ساده یا دشوار بودن بیش از حد، باعث نامعتبر شدن نتایج میشود و اینطور نیست که اگر یک سوال مشکل مطرح کنید، موفق به جذب برنامهنویسهای بهتری بشوید.
اگر امتحان شما به صورت کتاب باز است یعنی متقاضی دسترسی به اینترنت دارد، حتماً بر مواردی که جستجو میکند نظارت داشته باشید. اینطوری میتوانید مطمئن شوید که به جای developer یک googler استخدام نکردهاید.
نکته پایانی اینکه حتماً برای بررسی نتیجه و کد خروجی داوطلب، وقت بگذارید (که بهتر است در حضور وی هم نباشد) و انتظار نداشته باشید که در 5 دقیقه و با پرسیدن 2 سوال، کد وی را مورد ارزیابی قرار بدهید. شاید لازم باشد برای بررسی کدها از نظر سایر افراد هم کمک بگیرید.