مهندسی نرم‌افزار
برنامه‌نویسی دلی! – بخش یک

پیش‌گفتار یک: نگاه ریاضی‌گونه و نگاه مهندسی‌گونه به برنامه‌نویسی به گذشته که نگاه می‌کنم می‌بینم که آموزش‌ برنامه‌نویسی همراه بوده با نوعی نگاه که بی‌شباهت به حل مساله‌های ریاضی یا فیزیک نیست. نوعی نگاه حذف جزییات در ابتدا و اضافه کردن جزییات در ادامه. برای نمونه در نگاه ریاضی‌گونه به برنامه‌نویسی شما ابتدا باید ساختار […]

مهندسی نرم‌افزار
قوانین نرم‌افزار: قانون هایروم (Hyrum’s Law)

طی چند سال گذشته و به دلیل همکاری‌ام برای انتقال (migration) زیرساخت‌های سطح‌ پایین یکی از پیچیده‌ترین سیستم‌های نرم‌افزاری روی کره‌ی خاکی به نکات مهمی درباره‌ی تفاوت بین رابط (interface) و پیاده‌سازی آن (implementation) برخورد کرده‌ام. معمولن ما رابط (interface) را تجریدی (abstraction) برای ارتباط با سیستم می‌دانیم و پیاده‌سازی (implementation) را هم روشی می‌‌دانیم […]

مهندسی نرم‌افزار
چگونه برنامه‌نویس خوبی شوم

پرسش: چه چیزی از یک برنامه‌نویس، یک برنامه‌نویس «خوب» می‌سازه؟ کنت بک: پاسخ این پرسش راحته. «خودت باش» (Be Yourself). تنها یه بازی [چالش] در کل دنیا وجود داره و اون هم اینه:‌«تمام تلاشت رو بکن» (Do Your Best). ورزش‌‌، کار، روابط انسانی فقط سایه‌هایی از همین «یه بازی»اند. برنامه‌نویسی هم همین طور. سوال اینه […]

مهندسی نرم‌افزار
برنامه نویس کاردرست

اگه از من بپرسید برنامه‌نویس کاردرست کیست خواهم گفت «برنامه‌نویس خوبی که عادت‌های ممتازی دارد». این جمله برگرفته از سخن کنت بک (Kent Beck) درباره‌ی خودش است: «من برنامه‌نویس ممتازی نیستم. من برنامه‌نویس خوبی هستم که عادت‌های ممتازی دارم» “I’m not a great programmer; I’m just a good programmer with great habits.” برای من این […]

مهندسی نرم‌افزار
بهشت راه نرفته!

در تصمیم‌گیری‌ها به ویژه در تصمیم‌گیری‌های فنی، گاهی پیش می‌آید که شما بین دو راهی یا چندراهی تصمیم‌گیری گیر می‌کنید. از آنجا که نمی‌توانید همه‌ی آن راه‌ها را انتخاب کنید، به ناچار یکی را به عنوان تصمیم نهایی انتخاب می‌کنید. این انتخاب چندین ویژگی دارد. اول آن که انتخاب‌ها ما بر اساس اطلاعاتی است که […]

مهندسی نرم‌افزار
پوسته‌ی بیشتر – تخم‌مرغ کمتر

جان بنتلی (Jon Bentley) که ستونی با نام Programming Pearls در نشریه Communications of the ACM داشت در سال ۱۹۸۶ به برنامه‌نویسی ادیبانه (literate programming) علاقه‌مند شد و از دونالد کنوث (Donald Knuth) خواست تا به عنوان نویسنده‌ی مهمان برنامه‌‌ای با این شیوه بنویسد و از داگ مکل‌روی (Doug McIlroy) هم خواست نقدی بر برنامه‌نویسی […]

مهندسی نرم‌افزار
مفاهیم نیازمندی‌های نرم‌افزار

پیش‌گفتار-خاطره: یادم می‌آید دعوت شده بودم به جلسه‌ی دوستانه‌ای در یکی از شرکت‌ها که هدف آن بهبود تحلیل در آن شرکت بود. یکی از دوستان به من گفت که ما طی بررسی‌هایی که انجام دادیم به این نتیجه رسیده‌ایم که باید این سه کار رو در شرکت انجام بدیم. بعد هم سه راهکارشون رو برای […]