صنعت توسعهٔ نرمافزار هم همچون دیگر صنایع از یکسری قواعد و اصول برخوردار است که معمولاً در میان برنامهنویسان، توسعهدهندگان و مدیران آیتی در مکالمات روزمره ممکن است ردوبدل شوند که در این مقاله قصد داریم برخی از معروفترین آنها را معرفی کنیم.
Murphy's Law
به طور قطع میتوان گفت که یکی از معروفترین این اصول قانون مورفی است و نیاز به توضیح نیست که این قانون به غیر از کدنویسی، در دیگر حوزهها نیز کاربرد دارد (در همین راستا میتوانید به مقالهٔ قانون مورفی چیست و در برنامهنویسی چگونه نمود عینی پیدا میکند؟ در سکانپلاس مراجعه نمایید.) به طور کلی، این قانون حاکی از آن است که:
اگر احتمال بروز خطا در کاری وجود داشته باشد، آن خطا حتماً رخ خواهد داد.
از جمله استراتژیهای که میتوانند جلوی رخداد قانونی مورفی در حین کدنویسی را بگیرند میتوان به Defensive Programming اشاره کرد.
Brook's Law
تعداد قابلتوجهی از توسعهدهندگان، خواسته یا ناخواسته، به نوعی با این قانون دستوپنجه نرم کردهاند به طوری که داریم:
چنانچه پروژهای از دِدلاین عقب باشد، اضافه کردن به تعداد دولوپرها تأخیر عرضهٔ پروژهٔ را دوچندان میسازد.
در عوض، با بهکارگیری متودولوژیهای توسعهٔ نرمافزار همچون اجایل، آشنایی با ترفندهای دیباگینگ و ... میتوان اثربخشی کار را دوچندان ساخت.
Hofstadter's Law
این قانون بر اساس نام Douglas Hofstadter پایهگذاری شده و حاکی از آن است که:
همواره ارزیابیها درست از آب درنمیآیند و بیش از آن چیزی که ابتدا به ساکن در نظر گرفته بودید نیاز به زمان خواهید داشت.
به عبارتی، همواره اگر دقیقترین ارزیابیها را هم برای تکمیل یک پروژهٔ نرمافزاری در نظر گرفتهاید، مطمئن باشید که چیزهایی اتفاق خواهند افتاد که از دست شما خارج خواهند بود از همین روی تایم بیشتری برای تکمیل آن تَسک در نظر بگیرید.
Conway’s Law
این قانون کمی عجیب به نظر میرسد تا جایی که حاکی از آن است که:
شرکتهای نرمافزاری اپلیکیشنهایی توسعه میدهند که نمود عینی فرهنگ و ساختار سازمانیشان است.
آنچه در مقالهٔ انتخاب یک زبان برنامهنویسی، فرهنگ سازمانی کسبوکار شما را دستخوش تغییر میسازد! گفته شده شاید به نوعی با این قانون مرتبط باشد.
Postel's Law
Jon Postel جزو کسانی است که در شکلگیری اینترنت به صورتی که امروزه میبینیم نقش بسزایی داشته است و این قانون نیز به نوعی مرتبط با وی است به طوری که میگوید:
نسبت به چیزی که ارسال میکنید محافظهکار و سختگیر باشید اما نسبت به آنچه قرار است دریافت کنید وسواس زیادی به خرج ندهید.
این دانشمند علوم کامپیوتر زمانی که روی اجرای TCP کار میکرد به چنین ایدهای رسیده بود (Transmission Control Protocol یا به اختصار TCP به مجموعهای از پروتکلهایی گفته میشود که پایه و اساس اینترنت هستند.)
Pareto Principle
این اصل که به قانون 80/20 نیز مشهور میباشد حاکی از آن است که:
۸۰٪ باگها ناشی از فقط و فقط ٪۲۰ از فانکشنهای معیوب هستند.
اگر بخواهیم در حوزهٔ نرمافزار به شکل دیگری به اصلِ پارِتو نگاه کنیم، میتوان گفت که چیزی در حدود ٪۸۰ از کارها در یک تیم نرمافزاری توسط صرفاً ٪۲۰ از اعضای تیم انجام میگردد!
The Peter Principle
این قانون یأسآور نیز گاهی در فضای آیتی نمود عینی پیدا میکند به طوری که میگوید:
در یک فضای کاری سلسلهمراتبی، افراد با توجه به موفقیتهای خود در سوابق شغلی قبلیشان ارتقاء مییابند و همین میشود که در برخی سازمانها شاهد مدیرانی هستیم که لیاقت جایگاه فعلی خود را ندارند.
این اصل توسط Laurence J. Peter ابداع شده است که یک دانشمند کانادایی است که در حوزهٔ Hierarchical Organization (سازمان سلسلهمراتبی) صاحبنظر است.
Kerchkhoff's Principle
این اصل به نوعی سنگِ زیربنای Public Key در اصول رمزنگاری است و به طور کلی این قانون حاکی از آن است که:
در مرزنگاری (کریپتوگرافی) حتی اگر کلیهٔ خصوصیات سیستم به جز کلید قابلروئیت باشند، آن سیستم کماکان باید امن باشد.
در همین راستا، میتوانید به مقالهٔ مقایسهٔ سازوکار پروتکل امن HTTPS با داستان عاشقانهٔ آتوسا، بابک و کبوترهای نامهرسان مراجعه نمایید.
Linus's Law
این قانون که بر اساس نام خالق لینوکس، لینوس توروالدز، نامگذاری شده است میگوید:
هرچه سورسکد در دسترس دولوپرهای بیشتری باشد، باگهای آن زودتر یافت خواهند شد.
لازم به یادآوری است که این قانون بر پایهٔ مقالهای از Eric S. Raymond، یکی از توسعهدهندگان کِرنِل لینوکس، تحت عنوان The Cathedral and the Bazaar ابداع شده است.
Moore's Law
این قانون که توسط Gordon Moore، همبنیانگذار اینتل، ابداع شد حاکی از آن است که:
توان پردازشی سیستمهای کامپیوتری هر ۲۴ ماه ۲ برابر میشود.
در همین راستا، توصیه میکنیم به مقالهٔ تلاش Intel برای زنده نگاه داشتن قانون Moore مراجعه نمایید.
Wirth's law
این قانون با پرفورمنس (عملکرد) سیستمهای کامپیوتری عجین است به طوری که میگوید:
گرچه سختافزارها روز به روز سریعتر میشوند، اما کاهش پرفورمنس نرمافزارها به مراتب سریعتر است.
این قانون بر اساس نام Niklaus Wirth، یک دانشمند سوئیسی علوم کامپیوتر، نامگذاری شده است.
Ninety-ninety Rule
این قانون که به نوعی همانند قانون 80/20 میباشد حاکی از آن است که:
در فاز توسعهٔ نرمافزار، ٪۹۰ از سورسکد فقط در ٪۱۰ از تایم توسعهدهندگان نوشته میشود و آن ٪۱۰ از بخشهای ناتمام پروژه چیزی درحدود ٪۹۰ از تایم تیم مهندسی را میگیرد.
این قانون به Tom Cargill منسوب است که در آزمایشگاههای بِل کار میکرد.
Knuth's Optimization Principle
این قانون به Donald Knuth، دانشمند علوم کامپیوتری، برمیگردد که میگوید:
بهینهسازی زودهنگام نرمافزار ریشهٔ همهٔ مشکلات است.
برای مقابله با این اصل توصیه میشود که ابتدا باید پروژه را تکمیل کرد، سپس مشکلات احتمالی را رفع نمود و در نهایت به بهینهسازی پرداخت که در همین راستا میتوانید به مقالات آشنایی با ده Anti Pattern رایج در کدنویسی و ابتدا سریع کد بزنید سپس به منظور بهبود پرفورمنس، شروع به ریفکتورینگ کنید! مراجعه نمایید.
Norvig's Law
این قانون بر پایهٔ اسم Peter Norvig، دانشمند علوم کامپیوتری، نامگذاری شده و حاکی از آن است که:
مهم نیست که اندازهٔ مارکت چهقدر باشد، رشد هر فناوریای که در میان ٪۵۰ از افراد جامعه رخنه کند در آینده هرگز ۲ برابر نخواهد شد.
این گزاره به نوعی با مَثَل «نیمهٔ پُر/خالی لیوان» مرتبط است. به منظور درک بهتر این اصل میتوان گفت که چنانچه ٪۵۰ از لیوانی پر از آب باشد، شما نمیتوانید بیش از ۲ برابر همان مقدار را در لیوان خود بگنجانید و در غیر این صورت سرریز خواهد شد. به طور مثال، اگر ٪۵۰ از ساکنین کرهٔ زمین اکانت فیسبوک داشته باشد، میزان رشد کاربران این شبکهٔ اجتماعی در آینده هرگز ۲ برابر نخواهد شد چرا که عملاً غیرممکن است و شاید یک از دلایلی که این کمپانی به خرید دیگر شرکتها همچون اینستاگرام یا واتساپ میپردازد همین باشد.