آموزش پیشرفته ی ویندوز

آموزش پیشرفته ی ویندوز

آموزش پیشرفته ی ویندوز حتی لینوکس
آموزش پیشرفته ی ویندوز

آموزش پیشرفته ی ویندوز

آموزش پیشرفته ی ویندوز حتی لینوکس

به آسانی فایل Setup بسازید !!!!

احتمالا که تاحالا نیاز به ساختن فایل Setup رو احساس کردین و دنبالش رفتید ولی چیز باحال وجالبی رو پیدا نکردین .

برنامه ی InnoSetup یک Installer بسیار روان و خوش دست و آسان برای استفاده و در عین حال قدرتمنده که به شما توانایی اینو میده که برنامه ای رو که دارین یا نوشتین رو با امکانات کامل به صورت Setup یا همون Installer در بیارین!! این نرم افزار قوی نه تنها مورد استفاده ی انواع کاربرهای عادی و حرفه ای قرار گرفته!بلکه خیلی از شرکت های نرم افزار نویسی بزرک هم از این برنامه برای Setup کردن برنامه هاشون استفاده می کنن!!

این برنامه یک آدم معمولی به اسم جردن راسل به زبان Delphi نوشته.

در ضمن Inno Setup  کاملا رایگانه!!(حتما بگیرینش!).

دانلود نسخه ی 4.1.6 رو با حجم 950 کیلوبایت!

25 راز در معروف ترین موتور جستجوی دنیا ، گوگل

منبع : تراشه

1 _ همه‌چیز در نحوه نوشتن‌

با اطلاع از چگونگی نوشتن عبارات جستجو در موتورهای جستجو، می‌توانید اطلاعات موردنیازتان را به راحتی پیدا کنید. به عنوان مثال دستور <کلمه مورد نظر: Inurl> باعث می‌شود تا موتور جستجوی گوگل، همه صفحاتی که در آدرس url آن‌ها، کلمه مورد نظر وجود داشته باشد را برایتان فهرست کند.

2 _ نوار ابزار گوگل

با اضافه کردن نوار ابزار گوگل به مرورگرتان، از این پس می‌توانید کار جستجو را با سرعت و راحتی بیشتری انجام دهید. یکی دیگر از امکانات این نوار ابزار، جلوگیری از نمایش پنجره‌های تبلیغاتی است. برای دریافت برنامه و کسب اطلاعات بیشتر به toolbar.google.com مراجعه کنید.

3 _ چه کسی به سایت شما لینک داده است‌

بسیاری از مدیران سایت‌ها علاقه‌مندند بدانند چه کسانی (از سایت خود) به سایت آن‌ها لینک داده است.

گوگل به این سوال پاسخ می‌دهد. می‌توانید در قسمت جستجو، عبارت <نشانی سایت:link> را وارد کرده و کلید Enter را بزنید. نتیجه این درخواست، فهرست سایت‌هایی است که به سایت شما لینک داده‌اند.

4 _ کاربردهای تجاری

دو موتور جستجو فرعی گوگل که به تازگی راه‌اندازی شده‌اند و هنوز واژه کالاهای تجاری، مورد استفاده قرار می‌گیرند. موتور froogle.google.com فهرست محصولات فروشگاه‌های online را تهیه می‌کند و موتورcalatogs.google.com برای نمایش و درخواست کاتالوگ محصولات به‌کار می‌رود.

5 _ نگاهی به آینده‌

مدیران گوگل همیشه نیم‌نگاهی به آینده دارند. اگر می‌خواهید بدانید چه در سر آن‌ها می‌گذرد و قرار است در آینده چه کارهایی انجام دهند، بهتر است سری به آزمایشگاه آن‌ها بزنید و خود از نزدیک با خدمات و محصولات آتی گوگل آشنا شوید. آدرس آزمایشگاه گوگل labsl.google.com/gvs.html می‌باشد.

6 _ نتایج مطلوب‌تر

در اغلب موارد، زمانی که جستجویی را با گوگل انجام می‌دهید، نتیجه آن هزاران سایت و وبلاگ و نشانی می‌باشد که در واقع بسیاری از آن‌ها کاربرد چندانی ندارند و با موضوع موردنظرتان هماهنگ نیستند. یکی از روش‌های مؤثر در کاهش حجم نتایج جستجو، تعیین بازه‌های تاریخی است. مثلاً زمانی که بازه‌ای را بین سال‌های 2002 تا 2004 تعریف می‌کنید، گوگل با تبعیت از آن، فقط آن دسته از صفحاتی که دربازه مذکور ایجاد یا روزآمد شده‌اند را برایتان فهرست می‌کند (برای تعریف بازه‌های تاریخی به گزینه <جستجوی پیشرفته> مراجعه کنید).

7 _ فقط صفحات جدید

جستجو بدون ذکر تاریخ، نتایج بی‌شماری در پی دارد. انبوه نتایج، نه تنها به یافتن مطلب موردنظرتان کمکی نمی‌کند، بلکه موجب سردرگمی‌تان نیز می‌شود. علاوه براین اگر بعد از یک بررسی طولانی بین نتایج جستجو، به اطلاعات موردنظرتان رسیدید و متوجه قدیمی بودن آن‌ها شدید، چطور؟ اگر به دنبال اطلاعات جدید و روزآمد هستید، در قسمت جستجوی پیشرفته، عبارات <3 ماه>، <6 ماه> و حتی <یک‌سال> را در مقابل گزینه Date وارد کنید تا گوگل بسته به تاریخ ذکر شده، فقط فهرست صفحات جدید را برایتان نمایش دهد. مثلاً اگر عبارت <3 ماه> را انتخاب کنید، گوگل تمامی صفحاتی که در سه ماه گذشته ایجاد یا بروز شده‌اند را جستجو و آن‌هایی که با موضوع موردنظرتان منطبق هستند را نمایش می‌دهد.

8 _ مستثنی کردن کلمات

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

9 _ Wildcardها

زمانی که به‌طور کامل از کلمات موضوع مورد جستجو آگاهی ندارید، بهتر است از کاراکتر کمکی ستاره <*> استفاده کنید. کاراکتر <*> معنی <هرچیز> می‌دهد. مثلاً عبارت می‌تواند نتایجی نظیر ، و یا نتایجی از این دست را حاصل شود.

10 _ عناوین صفحات‌

معمولاً همه صفحات وب، عنوان دارند. گاهی‌اوقات استفاده از این عناوین، به شما در پیدا کردن مطالب مورد نیازتان کمک شایانی می‌کند. مثلاً عبارت <کلمه مورد نظر: intitle>، گوگل را بر آن می‌دارد تا فقط عناوین صفحات را برای یافتن کلمه ذکر شده، جستجو کند.

11 _ شرکت در گروه‌های خبری‌

اینترنت فراتر از ایمیل و صفحات وب است. به عنوان مثال گروه‌های خبری (News group) یکی دیگر از خدماتی است که از طریق اینترنت ارایه می‌شود. گروه‌های خبری گوگل، گروه‌های معروف و معتبری هستند که شرکت در آن‌ها، به نوبه خود، کار لذت‌بخشی است. آدرس گروه‌های خبری گوگل از این قرار است: groups.google.com

12 _ جستجوی خودکار

جستجو در اینترنت، قصه سوزن و انبار کاه است. گاهی‌اوقات ممکن است علیرغم صرف وقت زیاد، باز هم به نتیجه دلخواه نرسید. بنابراین هر ابزاری که در این پروسه، از اتلاف وقت جلوگیری کند، بسیار باارزش است. یکی از این ابزارها، <پیغام‌دهنده> گوگل نام دارد. این ابزار با دریافت آدرس ایمیل و عبارت مورد جستجو، به طور خودکار و روزانه، جستجویی را براساس عبارت دریافتی ترتیب داده و هر زمان که اطلاعات جدیدی را یافت نماید، آدرس آن را برایتان ایمیل می‌کند. آدرس پیغام‌دهنده گوگل به این ترتیب است: www.googlealert.com

13 _ جستجوگر اخبار

این ابزار نیز همانند پیغام‌دهنده گوگل، مشخصات اخبار موردنظر را به همراه آدرس ایمیل دریافت کرده و روزانه (بنا به درخواست کاربر، قابل تنظیم است). براساس عبارت دریافتی، جستجویی را در سایت‌های خبری ترتیب می‌دهد و در صورت یافتن اطلاعات مناسب، آن را برایتان ایمیل می‌کند. آدرس این ابزار www.google.com/newsalerts است.

14 - ماشین‌حساب گوگل

گوگل برای حل معادلات ریاضی هم، ابزاری دارد که بسیار سریع و با دقت عمل می‌کند. این ابزار علاوه بر حل معادلات ریاضی، قابلیت تبدیل انواع واحدها به یکدیگر را نیز دارد. برای آشنایی بیشتر با این ابزار کارآمد به آدرس زیر مراجعه کنید: www.google.com/help/features.htm#calculator

15 _ معنی کلمات

اگر معنی یا بهتر بگوییم، تعریف کلمه‌ای را نمی‌دانید، در کادر جستجو <کلمه موردنظر: define> را نوشته و کلیدEnter را بزنید.

در جواب این جستجو، علاوه بر تعریف کلمه، لینکی نیز نمایش داده می‌شود که با کلیک روی آن، به جزییات بیشتری می‌رسید.

16 _ ترجمه کنید

در حال حاضر، ماشین ترجمه‌ گوگل می‌تواند انگلیسی را به 5 زبان زنده دنیا ترجمه کند (امکان ترجمه بالعکس نیز وجود دارد). برای استفاده از این مترجم ماشینی به آدرس www.google.com/lauguage-tools بروید.

17 _ تصویریاب

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

18 _ پرسش و پاسخ

تحقیق و جمع‌آوری مطالب از اینترنت، کار وقت‌گیری است. اگر برای انجام این‌کار وقت کافی در اختیار ندارید. سری به آدرس answers.google.com/answers بزنید و با مطرح کردن سوالاتتان و بررسی جواب‌ها، سریع‌تر به هدف‌تان برسید.

19 _ نمایش پنجره تنظیمات‌

گوگل به شما این امکان را می‌دهد تا نحوه نمایش نتایج را مطابق میل‌تان تنظیم کنید. به عنوان مثال با مراجعه به آدرس www.google.com/preferences می‌توانید تعداد نمایش نتایج در هر صفحه را تعیین نمایید. علاوه براین در قسمت تنظیمات امکانات دیگری نظیر Safe Searching نیز وجود دارد. با فعال کردن این گزینه، گوگل از نمایش سایت‌هایی که به هر دلیلی غیرمجاز هستند، پرهیز می‌کند.

20 _ آمار استفاده از گوگل

در سایت www.google.com/press/zeitgeist.html آمار جهانی استفاده از گوگل موجود است. در این سایت جزییاتی از چگونگی استفاده ملل مختلف از گوگل و الگوهای جستجوی آن‌ها وجود دارد.

21 _جستجو در دسته‌بندی‌ها

علاوه بر جستجوی کلی وب، گوگل امکان جستجو در دسته‌بندی‌ها (Categories) را نیز می‌دهد. به عنوان مثال برای یافتن اطلاعاتی درباره هنر، تجارت، ورزش و ... می‌توانید ضمن مراجعه به نشانی www.google.com/dirhp، جستجویی را در دسته‌بندی‌های گوگل ترتیب بدهید و سریع‌تر به هدف‌تان برسید.

22 _ برای بلاگرها

وبلاگ داشته باشیم یا نه؟ ایده داشتن یک وبلاگ شخصی، بسیار جالب است و این‌که با در اختیار داشتن یک وبلاگ شخصی حرف دلمان را به گوش جهانیان برسانیم، فکر بسیارخوبی است. برای ساخت یک وبلاگ شخصی، به آدرس www.blogger.com/start مراجعه نمایید. این سایت متعلق به گوگل است.

23 _ جستجوی داخل فایل‌ها

با کمک گوگل می‌توان داخل فایل‌های مشخصی را برای یافتن کلمه‌ای دلخواه جستجو کرد. مثلاً گوگل را برآن می‌دارد تا تمامی فایل‌های doc (مربوط به برنامه Microsoft word) را به منظور یافتن واژه‌ی Iran جستجو کرده و آن‌هایی که دارای چنین کلمه‌ای هستند را فهرست کند.

24 _ کلمات عمومی

برخی کلمات عمومی نظیر the ،to ،at و غیره، زمانی که در عبارت مورد جستجو ذکر می‌شوند، توسط گوگل نادیده انگاشته می‌شوند و تاثیری در نتیجه ندارند. حال اگر می‌خواهید چنین کلماتی در نتیجه جستجو موثر باشند کافی است یک علامت <+> در مقابل آن‌ها بگذارید.

25 _ موتورهای جستجوی تخصصی

با این ترفند می‌توانید ضمن معرفی منابع موردنظرتان به گوگل، از آن بخواهید که نتایج جستجو را فقط از همان منابع بیاورید. مثلاً برای جستجو در سایت مایکروسافت به روش زیر عمل می‌شود :  www.google.com/microsoft

آموزش استفاده از اینترنت به صورت Offline

کامپیوتر نسل جوان

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

ما در اینترنت با دو اصطلاح Online و Offline روبه رو هستیم، هنگامی که شما به اینترنت متصل هستید اصطلاحاً به شما می گویند Online و هنگامی که به اینترنت متصل نمی باشید به شما می گویند Offline هستید. ولی چگونه می توان در حالت Offline بدون اینکه به اینترنت متصل بود از آن استفاده کرد؟ برای رسیدن به جواب این سؤال با ما همراه شوید.

نکته: یکی از پیش پا افتاده ترین کارهایی که شما می توانید در حالت Offline انجام دهید تایپ و ویرایش نامه هایی است که می خواهید Email نمایید.

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

برای این کار ابتدا سایت مورد نظرتان را فعال نموده و از منوی Favorite گزینه Add to Favorites را برای باز شدن کادر محاوره ای Add Favorite انتخاب کنید.

گزینه Make Available Offline را در پنجره باز شده انتخاب کرده و کلید OK را انتخاب نمایید.

بعد از چند لحظه عمل download صفحه وب مورد نظر برای استفاده در حالت Offline به پایان می رسد. حالا شما می توانید اینترنت را قطع کرده و به بررسی صفحه وب بدون هیچ استرسی بپردازید. برای این منظور در حالت Offline مرورگر خود را باز کرده و در کادر محاوره ای Conect گزینه WorkOffline و یا کلید Cancel را انتخاب نمایید.

چگونه صفحات download شده را به صورت مداوم به روز نماییم؟

بعد از اینکه صفحات مورد نظرتان را download کرده و به صورت Offline بررسی نمودید، به سادگی می توانید این صفحات را به روز نمایید، به این عمل Synchronize گفته می شود.

برای به روز سازی در حالت Online گزینه Synchronize را از منوی Tools انتخاب کنید تا کادر محاوره ای Items to Synchronize بازگردد. در پنجره فوق کلید Synchronize را کلیک کنید تا کلیه صفحه های download شده به روز گردند. شما می توانید اسامی این سایتها را در لیست پنجره فوق مشاهده نمایید.

چگونگی اعمال تنظیمات دقیق بر نحوه به روز رسانی صفحات وب یکی از تنظیماتی که شما می توانید در اعمال فرایند به روز سازی صفحات وب download شده انجام دهید تنظیم یک زمان بندی خاص برای به روز سازی است. این زمان بندی می تواند به صورت کلی برای همه صفحات download شده باشد و یا بر روی یک صفحه خاص اعمال گردد.

برای این منظور در کادر محاوره ای Iteme to Synchronize بر روی کلید Setup کلیک کنید و یک برنامه زمان بندی روزانه، هفتگی و یا ماهانه را به صورت کلی برای تمام صفحات download شده تنظیم نمایید.

ولی اگر می خواهید برای یک سایت برنامه زمانبندی خاصی، برای به روزسازی تنظیم نمایید، سایت مربوطه را در پنجره Item to Synchtronize انتخاب کرده و بر روی کلید Propeties کلیک کنید تا کادر محاوره ای My Current Home Page Properties در روی صفحه نمایش ظاهر گردد.

در کادر محاوره ای فوق بر روی download کلیک کرده تا تنظیمات مربوط به آن در روی صفحه نمایش ظاهر شود. در قسمت download Pages شما می توانید تعداد صفحات لینک شده به صفحه download شده را مشخص کنید.

نکته: اعداد وارد شده در قسمت Download Pages تأثیر زیادی در تعداد صفحات لینک دارد. در صورتی که مثلاً عدد ۲ را در کادر مربوطه وارد کنید کلیه صفحات لینک شده به صفحه download شده نیز انتقال می یابند و در صورتی که عدد ۳ را وارد کنید کلیه صفحات متصل به صفحات لینک شده به صفحه اصلی نیز download می شود.

ارسال و دریافت Emailها به صورت Offline

یکی از بهترین استفاده هایی که شما می توانید از قابلیت Offline نمایید ارسال و دریافت Email است. برای این کار دو روش را به شما معرفی می نماییم.

اولین راه پیشنهادی باز کردن برنامه Outlook Express در حالت Offline و انتخاب گزینه Options برای باز شدن کادر محاوره ای Options است. در کادر محاوره ای ظاهر شده بر روی عنوان Send کلیک کنید و گزینه Send Messages Immediately را فعال سازید. حالا با خیال راحت متن نامه خود را در برنامه ۰utlook Express به صورت Offline تایپ کرده و بر روی کلید Send کلیک کنید.

کلیه Emailهای نوشته شما در یک مرحله (در زمان اتصال به اینترنت) به آدرسهای مورد نظر شما ارسال می گردد.

دومین راه پیشنهادی فکر می کنیم بهتر باشد در این روش نیز شما با کادر محاوره ای Options شروع به کار می نمایید با این تفاوت که به جای انتخاب عنوان Send بر روی عنوان Connection کلیک کرده و گزینه Hang Up After Sending and Receiving را فعال سازید.

این روش بزرگترین مزیتش این است که هنگام دریافت Email به اینترنت متصل می شوید و بعد از دریافت، ارتباط اینترنتی قطع می گردد و کلیه Emailها در یک مرحله اتصال ارسال می گردند."

کار با برنامه ها بدون سی دی اصلی

احتمالا تا به حال شده است که از دوستانتان سی دی بازی یا برنامه ای را قرض بگیرید، ولی فقط یک روز در اختیار شما باشد و دفعات بعد که نیاز به اجرای بازی یا برنامه داشتید آن نرم افزار به شما اخطار بدهد که برای اجرا نیازمند سی دی است؟

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

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

این نرم افزار کاربرد دیگری نیز دارد که عبارت است از باز کردن Image (کپی که توسط نرم افزارهای رایت سی دی از یک سی دی روی هارد دیسک ساخته می شود) بیش از 35 نرم افزار رایت سی دی، که با این روش شما می توانید قبل از اینکه سی دی را رایت کنید مطمئن شوید کپی تهیه شده سالم است. از دیگر قابلیت های مهم این نرم افزار، اجرا روی تمامی نسخه های ویندوز 95، 98، ME، 2000، NT و XP است.

پشتیبانی از قفل سی دی ها از دیگر کاربرد های این نرم افزار است. به این شکل که اگر شما سی دی را با قفل ساخته اید، می توانید آن را در این نرم افزار فراخوانی کنید. این نرم افزار قفل آن را نیز پشتیبانی می کند و تمامی تغییرات اعمال شده را به شما نشان می دهد و می توانید از قفل گذاری خود مطمئن شوید.

شما می توانید این نرم افزار را از وب سایت سازنده آن یعنی http://www.daemon-tools.cc دریافت کنید.

۱۲ راه برای کدنویسی بهتر

توسط جوئل اسپولسکی

آیا تا بحال نام SEMA (Software Engineering Measurement and Analysis) را شنیده اید؟ SEMA ، سیستم نسبتاً مبهمی است برای اندازه گیری شایستگی یک تیم نرم‌افزاری. نه! صبر کنید، به سایت آن نروید، زیرا فقط شش سال طول می‌کشد تا مطالب آن را بفهمید. به همین علت من تست کاملاً نامرتب و نامعتبر (!) خودم را برای ارزیابی کیفیت یک تیم نرم‌افزاری درست کردم. بهترین قسمت ماجرا اینجاست که فقط سه دقیقه از وقتتان را می‌گیرد. با وقتی که صرفه جویی می‌کنید، می‌توانید به سراغ حرفه پزشکی بروید!

1 _ آیا از سیستم کنترل سورس بهره می‌برید؟

2 _ آیا می‌توانید در یک مرحله، برنامه‌تان را build کنید؟

3 _ آیا دارای build روزانه هستید؟

4 _ آیا بانک اطلاعاتی از اشکالات ((bugs دارید؟

5 _ آیا قبل از نوشتن کد جدید، به رفع اشکالات کنونی می‌پردازید؟

6 _ آیا برنامه زمان‌بندیتان به روز است؟

7 _ آیا دارای لیست مشخصات هستید؟

8 _ آیا برنامه‌نویسان شما محیط آرامی برای کار کردن دارند؟

9 _ آیا بهترین ابزارهایی را که وجود دارد می‌خرید؟

10 _ آیا بخش تست شما جداست؟

11 _ آیا داوطلبان جدید در موقع مصاحبه، کد هم می‌نویسند؟

12 _ آیا از آزمایش « قابلیت استفاده راهرویی » سود می‌جویید؟

ویژگی شسته و رفته تست جوئل در این است که به راحتی می‌توان به هر سؤال جواب بله یا نه داد. شما مجبور نیستید که تعداد خطهای کد در روز یا تعداد متوسط اشکال در هر قسمت را بشمارید. نقطه ضعف تست جوئل در این است که نباید از آن برای اطمینان از صحت نرم‌افزار نیروگاه اتمی خود استفاده کنید ! امتیاز 12 عالی، 11 قابل قبول و 10 یا پایینتر نشان دهنده مشکلات جدی است. واقعیت در این است که بیشتر موسسات نرم‌افزاری با امتیاز 2 یا 3 در حال فعالیت هستند و به کمک جدی نیاز دارند، چرا که شرکتهایی مانند Microsoft تمام مدت با امتیاز 12 اداره می شوند.

البته، اینها تنها موارد مشخص کننده موفقیت یا شکست نیستند: مثلاً ، اگر شما تیم ماهری دارید که بر روی محصولی که هیچ کس آن را نمی خواهد کار می‌کند، خوب، مردم باز هم آن محصول را نخواهند خواست. از طرفی، تیم غیر عادی را می‌توان تصور کرد که بدون انجام هیچ کدام از این کارها، نرم‌افزار فوق‌العاده ای تولید کند و دنیا را تغییر دهد. اما اگر همه شرایط برابر باشند، با رعایت این ۱۲ نکته، تیم منضبطی خواهید داشت که همیشه موفق به تحویل پروژه‌هایش می‌شود.

1 _ آیا از سیستم کنترل سورس بهره می‌برید؟

من هم از پکیجهای تجاری کنترل سورس استفاده کردم، و هم از CVSکه مجانی است ؛ و بگذارید به شما بگویم که CVS مناسب است. اما اگر سورس کنترل ندارید، فشار زیادی را برای اینکه برنامه‌نویسانتان بتوانند با هم کار کنند متحمل می‌شوید: برنامه‌نویسها راهی برای اینکه بدانند بقیه چه کرده اند، ندارند. و اشتباهات، به راحتی قابل بازگشت نیستند. و در آخر اینکه چون کد برنامه بر روی دستگاه تمام برنامه‌نویسان check out می‌شود، تا بحال نشنیده‌ام که پروژه‌های دارای سورس کنترل ، کد زیادی را به اشتباه از دست دهند.

2 _ آیا می‌توانید در یک مرحله، برنامه‌تان را build کنید؟

منظورم این است: برای ایجاد نسخه قابل تحویل به مشتری از آخرین سورس، چند مرحله وجود دارد؟ در تیمهای خوب، یک اسکریپت وجود دارد که با اجرای آن، یک check outکامل صورت می‌گیرد، تمام کد کامپایل می‌شود، EXE ها ساخته می‌شوند (در تمامی نسخه‌ها، زبانها و #ifdef ها) ، پکیج قابل نصب تولید می‌شود و بالاخره در فرم رسانه نهایی (CD یا وب‌سایت یا ...) ایجاد می‌شود.

اگر این رویه بیشتر از یک مرحله داشته باشد، مستعد اشتباه است. و هر چقدر به زمان تحویل نزدیکتر می‌شوید، احتیاج به چرخه سریعتری برای تصحیح «آخرین» bug، و ساختن EXE نهایی دارید. اگر کامپایل کردن کد، اجرای سازنده installerو بقیه کارها بیست مرحله به طول انجامد، دست به اشتباهات احمقانه خواهید زد . فقط به همین علت، آخرین شرکتی که در آن کار می‌کردم، از WISE به InstallShield تغییر کرد: لازم بود که رویه ایجاد installer از روی یک script به صورت خودکار نیمه شبها توسط NT Scheduler اجرا شود و WISE چنین قابلیتی نداشت. (دوستان خوب ما در WISE به من اطمینان داده اند که آخرین نسخه شان توانایی build های شبانه را دارد.)

3 _ آیا دارای build روزانه هستید؟

وقتی که از کنترل سورس استفاده می‌کنید، گاهی پیش می‌آید که یک برنامه‌نویس چیزی را check in می‌کند که باعث شکستن build می‌شود. به عنوان مثال، یک برنامه‌نویس یک فایل سورس جدید اضافه کرده است و همه چیز روی دستگاه خودش درست کامپایل می‌شود، ولی یادشان می‌رود که فایل را به مخزن کد (repository) اضافه کند. دستگاه خودش را هم قفل کرده و بی توجه و خوشحال به خانه می‌رود. حالا کسان دیگری نیز نمی تواند کار کنند. آنها هم به خانه می‌روند، البته غمگین.

شکستن بیلد آنقدر بد (و رایج) است که درست کردن بیلد روزانه کمک می‌کند که چنین موضوعی ناشناخته نماند. در تیمهای بزرگ، یک راه این که مطمئن شوید که چنین مشکلاتی در اولین فرصت برطرف شوند، این است که بیلد روزانه را هر روز، هنگام ناهار انجام دهید. همه تمامی check in هایی را که می‌توانند قبل از رفتن به ناهار انجام می‌دهند. بیلد، زمانی که همه برگشتند تمام شده است. اگر که همه چیز درست است، که فبحال! آخرین نسخه سورس توسط همه check out شده و کار ادامه پیدا می‌کند. اما اگر که عمل بیلد با موفقیت روبرو نشده باشد، افراد با نسخه سالم قبلی به کار خود ادامه می‌دهند . در تیم Excel، با قانونی داشتیم: ‌هر کسی که build را می‌شکست، به عنوان تنبیه، مسؤولیت نگهداری از بیلدها را عهده دار می‌شد. این انگیزه خوبی بود هم برای جلوگیری از شکستن بیلد، و هم راه خوبی بود برای این که همه (به صورت چرخشی)‌ یاد بگیرند که رویه چطور است.

4 _ آیا بانک اطلاعاتی از اشکالات ((bugs دارید؟

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

§مراحل کامل برای باز تولید اشکال

§رفتاری که انتظار آن می‌رود

§رفتار (ایراد داری) که واقعاً رخ می‌دهد

§فردی که رفع اشکال به او واگذار شده است

§آیا اشکال رفع شده است یا خیر

اگر پیچیدگی نرم‌افزار پی‌گیری باگها مانع از آن می‌شود که چنین کاری را انجام دهید، یک جدول پنج ستونه (با فیلدهای ضروری فوق) بسازید و شروعبه انجام این کار کنید.

5 _ آیا قبل از نوشتن کد جدید، به رفع اشکالات کنونی می‌پردازید؟

اولین نسخه Word تحت ویندوز، پروژه « نوحه مرگ » محسوب می‌شد که نوشتن آن به درازا ‌کشید، فرجه‌ها دایماً به سر می‌رسیدند؛ افراد تیم، ساعتهای مسخره آمیزی کار می‌کردند، و پروژه باز ... و باز ... و باز به تاخیر می‌افتاد. استرس باور نکردنی بود. وقتی بعد از چندین سال، بالاخره محصول لعنتی‌اش بیرون آمد، مایکروسافت کل تیم Word را برای استراحت به جنوب مکزیک فرستاد ؛ و خودش به کنکاش روحانی جدی دست زد . مایکروسافت متوجه شد که مدیران پروژه آنقدر بر حفظ « زمان بندی » (schedule) اصرار داشتند که برنامه‌نویسان مجبور به کد نویسی با عجله شده بودند، ‌و بسیار بد کد می نوشتند - به این علت که فاز bug fix جز زمان‌بندی رسمی نبود. تلاشی برای پایین نگهداشتن تعداد خطاها وجود نداشت. حتی برعکس، روایت شده که یکی از برنامه‌نویسان که مسؤول نوشتن کد محاسبه ارتفاع خطوط متن بود، فقط نوشت: return 12; و بعد هم منتظر نشست تا در گزارش باگها بیاید که تابع‌اش ، همیشه درست کار نمی‌کند. زمان‌بندی پروژه صرفاً تبدیل شده بود به لیستی از باگهایی که باید تولید می‌شد! بعدها، از این اتفاق با عنوان « متدولوژی عیوب نامحدود » (infinite defects methodology) یاد شد.

برای حل این معضل، مایکروسافت « متودولوژی کمترین عیوب‌» (zero defects methodology) را به صورت فراگیری اتخاذ کرد. بسیاری از برنامه‌نویسان داخل شرکت خندیدند – چون به نظر می‌رسید مدیریت به این نتیجه رسیده بود که با یک حکم سازمانی تعداد باگها را کم کند. اما در واقع، معنی « کمترین عیوب‌»‌ در این است که در هر لحظه، بالاترین اولویت در رفع باگهاست، نه نوشتن کد جدید. اما چرا؟

به صورت کلی، هر چه برای تصحیح یک اشکال بیشتر معطل کنید، هزینه تصحیح آن (از لحاظ وقت و پول) بیشتر خواهد بود.

به عنوان مثال، وقتی که اشتباه تایپی انجام می‌دهید و کامپایلر آن را catch می‌کند، تصحیح آن کار اساساً ساده‌ایست. به همین ترتیب، بار اولی که کدتان را اجرا می‌کنید و در آن اشکالی می‌بینید، می‌توانید بلافاصله آن را تصحیح کنید، چون همه کد در ذهنتان وجود دارد.

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

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

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

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

نکته خوب دیگری هم که صفر نگهداشتن تعداد باگها در هر زمان دارد، عکس‌العمل سریعتر در برابر رقباست. بعضی برنامه‌نویسان این قضیه را به « آماده تحویل بودن‌» محصول در تمام لحظات، تعبیر می‌کنند. اگر رقیب شما امکان مشتری‌کُشی[2] عرضه کرد، شما هم می‌توانید آن امکان را فوراً به برنامه‌تان اضافه کنید و آن را تحویل دهید، بدون این که مجبور به تصحیح تعداد زیادی ایراد انباشته شده باشید.

6 _ آیا برنامه زمان‌بندیتان به روز است؟

می‌رسیم به بحث شیرین زمان‌بندی. اگر کدتان برای شرکتتان اهمیتی داشته باشد، پس حتماً به دلایل زیادی برای شرکتتان زمان اتمامش هم مهم هست. برنامه‌نویسان به صورت خیلی مفتضحی در زمینه زمان‌بندی، ترشرو هستند :‌ سر قسمت بیزنس فریاد می‌کشند « کار وقتی تمام می‌شود که تمام شده باشد ! ‌»

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

فایده حیاتی دیگر داشتن برنامه‌ زمان‌بندی در این است که مجبورتان می‌کند تصمیم بگیرید چه امکاناتی[3] را می‌خواهید در برنامه بگنجانید و این که امکانات با اولیت پایینتر را حذف کنید، و گرفتار بیماری featuritis نشوید. (featuritis / scope creep / creeping featurism، و یا گرایش به ویژگیهای نو، بیماری طراحان است ؛ طراحان مبتلا به این بیماری دوست دارند که به سیستم پیچیده‌ای بدون برنامه‌ریزی کافی امکانات و ویژگیهای نو اضافه کنند؛ و در واقع آن را - به صورت غیر اصولی - فقط پیچیده‌تر کنند!)

نگهداشتن schedule‌ (برنامه زمان‌بندی)، الزاماً سخت نیست. مقاله دیگرم، Painless Software Schedules - که راه ساده‌ای برای این کار یاد می‌دهد - را بخوانید.

7 _ آیا دارای لیست مشخصات هستید؟

نوشتن لیست مشخصات (specifications) درست مثل استفاده از نخ دندان است:‌ همه قبول دارند که کار خوبی است ولی هیچ کس حوصله‌اش را ندارد. دقیقاً مطمئن نیستم که چرا ؛ احتمالاً به این علت است که برنامه‌نویسان از نوشتن مستندات متنفرند. در نتیجه، تیمهایی که همه اعضایش برنامه‌نویس هستند وقتی سراغ مسأله‌ای می‌روند، ترجیح می‌دهند که راه‌حلشان به زبان کد باشد تا به صورت سند. ترجیح می‌دهند که از اول شیرجه بزنند و کد بنویسند تا این که ابتدا یک لیست مشخصات درست کنند. در مرحله طراحی، اگر به معضلی بر بخورید، به سادگی با تغییر چند خط می‌توانید آن را حل کنید. اما زمانی که کد نوشته شده است، هزینه درست کردن معضلات بسیار گزاف است :‌ هم از لحاظ عاطفی (چون مردم از دور انداختن کد خود متنفرند)، و هم از لحاظ زمانی، و به همین علت نوعی مقاومت در مقابل درست کردن معضل بوجود می‌آید. نرم‌افزاری که از روی لیست مشخصات (specifications) تولید نشود معمولاً نتیجه‌اش طراحی بد و زمان‌بندی خارج از کنترل است. به نظر می‌رسد که مشکل Netscape نیز همین بوده - چهار نسخه اول آن قدر شلم شوربا شد که مدیریت به طرز احمقانه‌ای تصمیم گرفت همه کد آن را دور بیاندازد و از صفر شروع کند. سر Mozilla هم دوباره همین اشتباه را مرتکب شدند، که محصول آن هیولایی خارج از کنترل است که چند سال طول کشیده تا فقط به مرحله آلفا برسد.

تئوری مورد علاقه من این است که اگر برنامه‌نویسان را به یک دوره متمرکز نویسندگی بفرستید، یاد خواهند گرفت که نویسندگان با ذوقی شوند. راه حل دیگر، استخدام مدیر برنامه (program manager) زبردستی است که خود نوشته‌ها را تهیه کند. در هر دو حالت، ‌باید قانون « هیچ کدی بدون مشخصات پذیرفته نیست » را به اجرا بگذارید.

8 _ آیا برنامه‌نویسان شما محیط آرامی برای کار کردن دارند؟

این موضوع - که با دادن فضای مناسب، ایجاد آرامش و محیط دنج (privacy) به کارمندان IT (یا اصطلاحاً knowledge workers) – بهره‌وری افزایش می‌یابد ،‌ به صورت گسترده‌ای مستند شده است. کتاب کلاسیک مدیریت نرم‌افزار، PeopleWare ، این موارد را بر می‌شمرد.

مشکل اینجاست: همه ما می‌دانیم که نیروی کار فنی با قرار گرفتن در جریانی که از آن به « در بحر موضوع رفتن » تعبیر می‌شود - بهتر کار می‌کنند ؛ این زمانی است که تمرکزشان کاملاً بر روی کارشان است و حواسشان کاملاً از محیط اطرافشان پرت شده است. احساس زمان را از دست می‌دهند و از طریق تمرکز مطلق، چیزهای عالی‌ای خلق می‌کنند. نویسندگان، برنامه‌نویسان، دانشمندان، و حتی بازیکنان بسکتبال در مورد حالت « در بحر موضوع فرو رفتن »‌ می‌توانند برای شما توضیح دهند . وارد شدن به این حالت کار ساده‌ای نیست. اگر اندازه‌گیری کنید، می‌بینید که حدوداً ۱۵ دقیقه طول می‌کشد تا به حداکثر کارایی خود برسید. بعضی مواقع، زمانهایی که خسته هستید و یا به اندازه کافی برای آن روزتان خلاقیت به خرج داده‌اید، دیگر نمی‌توانید در بحر موضوع بروید و بقیه روز را به کارهای بیهوده، خواندن وب و Tetris بازی کردن می‌گذرانید.

مشکل دیگر در اینجاست که از دست دادن تمرکز کار ساده ‌ایست :‌سر و صدا، تماسهای تلفنی، ناهار را بیرون خوردن، آن پنج دقیقه‌ای که برای نوشیدن قهوه تا کافی‌شاپ صرف رانندگی می‌کنید، و علی‌الخصوص مزاحمتها و سؤالهای همکاران، همگی تمرکز را از بین می‌برند. اگر همکار شما ازتان سؤالی بپرسد که یک دقیقه کارتان را متوقف کند، ولی آنقدر حواستان را پرت کند که نیم ساعتی طول بکشد تا به حالت سابق برگردید، بهره‌وری کلی تیمتان در خطر جدی قرار دارد. اگر در محیط شلوغی کار می‌کنید – از همان نوعی که dotcom های کافئین‌زده سخت عاشق آن هستند و در آنها بخش فروش زیر گوش برنامه‌نویسان مشغول داد و بیداد هستند - بهره‌وری شما سقوط بدی خواهد کرد.

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

ریاضیات این مسأله زیاد سخت نیست: فرض کنید (که شواهد هم این فرض را تأیید می‌کنند) که اگر برای یک دقیقه هم یک برنامه‌نویس را متوقف کنید، پانزده دقیقه از بهره‌وریش کم می‌کنید. برای مثال، Jeff‌ و Mutt (که هر دو برنامه‌نویس هستند) را در دو پارتیشن کنار هم قرار می‌دهیم (در یک فضای کاملاً Dilbert ای). مات، نام تابع کپی رشته در یونیکد را به خاطر نمی‌آورد. می‌تواند جواب آن را جستجو کند - که ۳۰ ثانیه طول می‌کشد، و یا این که از جف بپرسد - که ۱۵ ثانیه طول خواهد کشید. خوب، چون جف در کنارش نشسته است ترجیح می‌دهد که از او بپرسد. حواس جف پرت می‌شود و ۱۵ دقیقه را از دست می‌دهد (برای این که مات ۱۵ ثانیه صرفه‌جویی کرده باشد.)

حالا اجازه دهید که جف و مات را در دو اتاق (با در و دیوار)‌ جدا بگذاریم. اکنون وقتی که مات اسم تابع را به خاطر نمی‌آورد، می‌تواند جواب آن را جستجو کند (که همان ۳۰ ثانیه طول می‌کشد)‌ و یا این که از جف بپرسد که ۴۵ ثانیه طول می‌کشد و شامل از جای خود بلند شدن هم می‌شود (که با توجه به وضعیت جسمی معمول برنامه‌نویسان و مسایل دیگر ‌، کار ساده‌ای نیست!). بنابر این ترجیح می‌دهد که جوابش را جستجو کند. ۳۰ ثانیه وقتش تلف می‌شود اما ۱۵ دقیقه به نفع جف است! وای!

9 _ آیا بهترین ابزارهایی را که وجود دارد می‌خرید؟

نوشتن کد در یک زبان کامپایل شده از کارهایی است که هنوز بر روی کامپیوترهای خروس‌نشان، نمی‌توان با سرعت انجام داد. اگر فرآیند کامپایل، بیشتر از چند ثانیه طول می‌کشد، خرید جدیدترین و بهترین کامپیوتر در وقتتان صرفه‌جویی خواهد کرد. اگر کامپایل کردن حتی ۱۵ ثانیه طول بکشد، برنامه‌نویسها حوصله‌شان سر می‌رود و می‌روند به سراغ خواندن سایت The Onion ، که آن هم تمام هوش و حواسشان را به خود خواهد برد و ساعتها بهره‌وری از بین می‌رود.debug کردن کد GUI با یک مانیتور اگر غیر ممکن نباشد، بسیار سخت و دردناک است. اگر در حال نوشتن کد GUI هستید، داشتن دو مانیتور همه چیز را بسیار ساده خواهد کرد.

بیشتر برنامه‌نویسان باید یک زمانی فایلهای bitmap‌ را (برای iconها و toolbarها) دستکاری کنند و اکثراً ویرایشگر مناسب برای این کار ندارند. استفاده از MS Paint برای این کار بیشتر شبیه یک شوخی است، که البته غالب برنامه‌نویسها از همین روش استفاده می‌کنند.

در محل کار قبلی‌ام، admin شبکه دایماً برای من spamمی‌فرستاد و غر می‌زد که من بیشتر از ۲۲۰ مگابایت فضای مجازم، روی سرور جا اشغال کرده‌ام. من روزی جواب دادم که با توجه به قیمت هارد دیسک، هزینه فضای مورد استفاده کمتر از هزینه دستمال کاغذی من است و صرف کردن حتی ده دقیقه از وقتم برای کوچک کردن دایرکتوری‌ام یک هدر دادن اشرافی بهره‌وری است.

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

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

10 _ آیا بخش تست شما جداست؟

اگر در تیم شما افرادی که وقتشان اختصاصاً برای تست کردن باشد – حداقل یک نفر برای هر دو یا سه برنامه‌نویس – وجود نداشته باشد، شما یا محصولات باگ‌دار تحویل خواهید داد؛ و یا این که با پرداخت ۱۰۰ دلار در ساعت به جای ۳۰ دلار در ساعت، پولتان را هدر می‌دهید. خساست در زمینه افراد جهت بخش تست، آن قدر صرفه‌جویی احمقانه‌ایست که من واقعاً تعجب می‌کنم چرا اکثر مردم نمی‌فهمند.

11 _ آیا داوطلبان جدید در موقع مصاحبه، کد هم می‌نویسند؟

آیا شما حاضرید یک شعبده‌بازی را بدون این که چند حقه برایتان اجرا کند، استخدام کنید؟ معلوم است که نه. آیا برای عروسیتان، آشپزی که غذایش را نچشیده باشید، استخدام می‌کنید؟ بعید می‌دانم. (مگر این که خاله بزرگتان باشد و بترسید که تا آخر عمر از شما به دل بگیرد و برنجد.)با این وجود، هر روز، برنامه‌نویسهایی بخاطر داشتن resume جالب یا به این خاطر که مصاحبه‌گر از گپ زدن با او لذت برده، استخدام می‌شوند. یا باید به سوالات ساده‌ای مانند ‌« فرق CreateDialog() و DialogBox() چیه؟ » که با خواندن مستندات قابل پاسخ‌گویی است، جواب دهند. واقعاً نباید برایتان اهمیتی داشته باشد که داوطلب، هزاران نکته پیش پا افتاده را حفظ کرده‌است یا نه، بلکه باید توانایی او در تولید کد برایتان مهم باشد. از همه چیز بدتر، سؤالات « معما گونه » است :‌ آن دسته از سؤالاتی که پاسخ دادن به آنها غیر ممکن است ولی وقتی جواب را می‌دانید بدیهی به نظر می‌رسند.لطفاً از این کارها نکنید! و هر کاری که می‌کنید، حتماً از مصاحبه شونده بخواهید که برایتان کد بنویسد.

12 _ آیا از آزمایش « قابلیت استفاده راهرویی » سود می‌جویید؟

در تست hallway usability، شما خِر اولین فردی را که از راهرو رد می‌شود، می‌گیرید؛ و مجبورشان می‌کنید که بنشینند پای برنامه‌ای که همین الان نوشته‌اید. اگر با پنج نفر این کار را تکرار کنید، ۹۵٪ مشکلات کار با برنامه‌تان (usability problems) را کشف خواهید کرد.

طراحی « واسط کاربر » خوب آنقدرها هم که فکر می‌کنید سخت نیست، حتی برای این که مشتریها عاشق برنامه‌تان بشوند و آن را بخرند، واجب هم هست. کتاب مجانی و online من در مورد طراحی واسط کاربر که الفبای آن را برای برنامه‌نویسان شرح می‌دهد ‌بخوانید . اما مهمترین نکته در مورد واسطهای کاربر (user interfaces) این است که اگر برنامه‌تان را به پنج یا شش نفر نشان دهید، به سرعت بزرگترین مشکلات کاربران را خواهید دانست. Jakob Nielsen مقاله‌ای دارد که در آن توضیح می‌دهد چرا این چنین است. خلاصه این که حتی اگر در زمینه UI‌ واقعاً ضعیف باشید، با آزمایشهای قابلیت استفاده راهرویی که شرح آن رفت و خرجی هم ندارد، UI تان واقعاً بهبود پیدا می‌کند.

چهار استفاده برای تست جوئل

1 _ موسسه نرم‌افزاری خود را بسنجید و امتیازتان را به من اطلاع دهید تا بتوانم حرفهای خاله‌زنکی پشت سرتان بزنم!

2 _ اگر مدیر یک تیم نرم‌افزاری هستید، با استفاده از این تست چک کنید که آیا تیمتان با تمام توانش کار می‌کند یا نه؟ اگر امتیازتان ۱۲ است، بهتر است که برنامه‌نویسانتان را به حال خودشان رها کنید و انرژیتان را روی عدم مداخله بخش مالی و فروش شرکت در کار برنامه‌نویسها متمرکز کنید.

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

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