چرا مهندسی نوین عبارت است از کامپیوتر و در موارد استثنا علوم دیگر؟
متاسفانه کشور ما به علت عدم رشد فرهنگ علوم جدید، هنوز دید درستی از مهندسی نوین ندارد. برای مثال در کشور ما هنوز شناخت درستی از یک نرمافزار وجود ندارد و این عدم شناخت درست باعث عدم شناخت از علم مهندسی پشت صحنه آن میشود. در کشور ما درآمد یک مهندس عمران(البته من عنوان مهندس را برای رشته عمران و امثالهم قبول ندارم که بعدا دلیل اون رو اشاره میکنم) بنا به کاری که انجام میدهد بسیار بیشتر از یک مهندس کامپیوتر هم رده هستش. این امر به خاطر اون هستش که هنوز مردم ما درک درستی از تفاوت یک نرمافزار با یک ساختمان و جرم فیزیکی ندارند.
در یک ساختمان و امثال اون شما تعدادی فرمول دارین که مثلا میزان بار قبل تحمل یک سازه رو بهتون میده. در مواردی مانند ساختمان های تا 20 طبقه این فرمول ها به صورت خاص موجود هستند و نیازمند عدد گذاری هستند. در موارد خاص باید روشهای یکم کار سخت تر میشه. اما در نهایت همون عدد گذاری و حفظ کردن فرمول هستش. در موارد خیلی استثنا مثل برج العرب دبی یکم قظیه فرق میکنه و میشه شبیه نرم افار (البته با قابلیت اندازه گیری که نرم افزار اون رو هم نداره).
مهندسی نرم افزار عبارت هستش از علم یک مهندس در پیش بینی یک روند و هنر اون در کنار هم قرار دادن موارد غیر قابل اعتماد و غیر قابل محاسبه در بدست آوردن یک محصول قابل اطمینان. حالا منظور از غیر قابل اطمینان یعنی چی؟ در مواردی که شما با یک عنصر فیزیکی طرف هستید، میزان فاکتورهای اون قابل اندازه گیری و همچنین میزان تغییر اون قابل محاسبه هستش. مثلا یک میله فلزی میزان مقاومت و همچنین میزان انبساط و انقباظ مشخص داره که در آزمایشگاه قابل محاسبه هستش. اما در مورد نرم افزار، شما چندین مدل پردازنده، چندین مدل حافظه نهان، اصلی و جانبی و بستر ارتباطی متفاوت دارید که هر کدام مشخصه های فیزیکی متفاوت دارند. این یک طرف قضیه که فرض کنیم مربوط به سخت افزار هستند(البته این فرض صحیح نیست).
شما یک بستر به نام سیستم عامل بر روی بستر سخت افزاری با انواع مختلف دارین که این تفاوت در نهایت باعث تغییر در مشخصه های لایه بالاتر میشود. برای مثال 1 ثانیه در یک سیستم، با 1 ثانیه در سیستم دیگر یا حتی همان سیستم در زمان های مختلف یکسان نیست (رجوع شود به بحث زمانسنج با رزولوشن بالا). پس شما زمان تضمین شده هم ندارید.
یک مقاله معتبر در علم کامپیوتر وجود دارد که مبحث اون خیلی ساده هستش، "تضمین اجرای یک فرآیند قبل از فرآیند دیگر". مفهوم خیلی ساده هستش و راه حل اون مقاله تعریف یک مفهوم با عنوان "happens before" هستش. این هم مشکل دوم، شما تعداد بسیار زیاد فرایند دارید که میخواهید یکی قبل دیگری انجام شود، اما تضمین روشی که باعث کاهش سرعت هم نشود یک مساله مهم است.
در جهان واقعی وقتی در جایی جرمی واقع میشود، وزن مشخص دارن و میزان باری را تحمیل میکند. در نرم افزار اگر جرم را میزان بار کاری در نظر بگیریم، دوباره به مشکل میخوریم. بار کاری بستگی دارد به علم مهندس مربوطه و بالاتر از آن به ورودی کاربر و محیط. یعنی شما جرم ثابت ندارید که محاسبه هزینه انجام دهید.
در یک فضای خالی به اندازه مشخص حجم قرا خواهد گرفت. هر فضا برای خودش محدوده دارد که بیش از محدوده در آن نمیتوان جرمی قرار داد. در نرم افزار اگر از محدوده خارج شویم، دیواری برای محدود کردن آن نداریم، باز است تا بینهایت. میزان حافظه اصلی یک مفهوم مجازی است، اگر داده ای وجود ندارد، روشی برای آگاهی از آن وجود ندارد.
مهمترین مشکل، هزینه یک نرم افزار چگونه محاسبه شود. چیزی که نمیتوانیم تمامی جزئیات آن را ببینیم چگونه هزینه تعیین کنیم؟ طول زمان کاری بستگی به علم مهندس دارد. حجم نرم افزار بستگی دارد به مثلا فایل های مدیای درون آن. میزان خط کد بستگی دارد به تعداد صفحات یک نرم افزار و بستگی به علم اون نداره (مثلا یک مهندس خوب میتونه تو تعداد خطوط کم یک کار مشخص رو انجام بده).
همه این موارد رو کنار هم قرار بدین تا ببینین که یک نرم افزار که کار میکنه، یک اثر علمی و مهندسی هستش و قابل مقایسه با یک ساختمان یا پل یا موارد شبیه اون نیست.