توی این پست میخوام بعنوان یک دانشاموختهی مهندسی عمران که بیشتر فعالیتش در زمینهی نرم افزار بوده، در مورد اینکه پروسهی ساخت یک ساختمان و یک نرمافزار از چه لحاظی شبیه به هم هستن بگم. شاید مهندسای نرم افزار با خوندن این پست بتونن پروسهی ساخت یک ساختمان رو خیلی ملموس تر درک کنن یا مهندسای عمران بتونن پروسهی ساخت یک نرم افزار رو بهتر درک کنند.
توی نگاه اول، نرم افزار و ساختمان دو تا چیز غیر قابل مقایسه هستن. مثل مقایسهی سیب و پرتقال. یک ساختمان ممکنه چندین هزار تُن وزن داشته باشه، ولی یک نرمافزار اصولا چیزی نیست که بشه براش وزن متصور شد. ولی خوب از لحاظی هم مشابه هستن. یکی از تشابههاشون اینه که ما انسانها برای ساخت هردوشون هزینه میکنیم. و هردوشون تقریبا عصای دستمون هستن یا بهتر بگم یکی از الزامات زندگی و تمدنمون هستن.
معمولا برای ساخت یک برنامهی نسبیتا بزرگ و یا یک ساختمان چند طبقه یک گروه لازمه.
برای ساخت یک نرمافزار کدنویس، تحلیلگر برنامه و یا کد نویس ارشد، طراح دیتابیس، طراح رابط کاربری و یا حتی طراح تجربهی کاربری ایفای نقش میکنند. از طرف دیگه در ساخت یک ساختمان، تکنسینها، مهندس طراح سازه، مهندسی طراح معماری و مهندس طراح تاسیسات، کچ کار و بنا شیشه بر ایفای نقش میکنند.
توی یک برنامهی کاربردی (مثل یک برنامهی حسابداری) ما دادهها رو داریم که در جاها و پنجرههای مختلف برنامه ممکنه توسط کاربر وارد بشن و این دادهها باید به نحو مناسب توی دیتابیس ذخیره بشن. از طرف دیگه ما توی ساخت سازه نیروها رو داریم که توسط اسکلت بندی ساختمان به سمت تکیه گاهها هدایت میشن و در نهایت به زمین منتقل میشن. از این نظر شاید بشه دیتابیس یک برنامهی کاربردی مثل برنامهی حسابداری رو مشابه فونداسیون یا تکیهگاه زیر فونداسیون یک ساختمان در نظر گرفت. اگر نشه فونداسیون رو معادل دیتابیس در نظر گرفت، ولی حتما میشه معادل لایهیدسترسیداده (Data Access Layer) توی برنامه نویسی لایهای در نظر گرفتش.
به لحاظر منطقی، فونداسیون باید آخرین اجزای ساختمان باشه که طراحی میشه چون برای طراحی فونداسیون باید بارهای وارد بهش مشخص باشه یعنی ساختمان باید طراحی شده باشه ولی از طرفی اولین قسمتهایی هست که اجرا میشه چون زیر تمام طبقات هست و خوب طبیعتا نمیشه طبقات رو روی هوا ساخت و باید روی یک چیزی باشن وگرنه میوفتن زمین! پس اول نمیشه طبقهی دوم رو ساخت و بعد طبقه اول رو... شاید به نظرتون خنده دار بیاد :)
دیتابیس برنامه هم دقیقا همینطور هست چون باید بعد از مشخص شدن داده ها و ساختارشون طراحی بشه. و اون هم احتمالا جزو اولین قسمتهایی هست که ساخته میشه.
از طرف دیگه ما تکنسینهای بتن ریزی و ارماتور بندی و قالب بندی رو داریم که به نظرم نقش معادلشون در نرم افزار، برنامه نویس هست.
توی ساختمان ما شخصیتی بنام طراح معماری داریم که معماری ساختمان رو طراحی میکنه. مثلا جایگذاری اتاقهای خواب و حال و پذیرایی و یا ظاهرا کلی ساختمان و فضای موجود رو بین کاربریهای مختلف به نحو احسن تقسیم میکنه.
توی نرم افزار ما طراح رابط کاربری یا طراحی تجربهی کاربری رو داریم که اون هم معماری بیرونی برنامه رو طراحی میکنه. یعنی اون قسمتهایی که برای کاربر قابل مشاهده هست.
توی ساختمان مهندس سازه داریم که بر اساس بارها و نیروها اسکلت سازه رو طراحی میکنه.
این ور ساختمان فلزی و بتنی داریم، اون ور زبان برنامه نویسی شی گرا یا پیمانهای.
توی نرم افزار طراح شیگرا رو داریم که اونم کار مشابهای انجام میده و اسکلت کلی برنامه رو میسازه. توی یک کتاب خوندم به این اسکلت میگفت اصطلاحا Business Logic یا منطق تجاری سازمان یا برنامه. پس منطق تجاری یک برنامه با طرح سازهی یک ساختمان مشابه هستن.
هرچی فکر کردم معادل تاسیسات ساختمان رو توی نرم افزار پیدا نکردم. شاید طراح کامپوننت ها و قسمتهایی مثل خروجی PDF ریپورت ها و ... باشه.
توی ساخت ساختمان نهادی مثل شهرداری وجود داره که سعی میکنه به همه قسمتهای نظارت داشته باشه و نهاد حاکمیتیای باشه ولی متاسفانه در صنعت نرم افزار هنوز در کشورمون تاجایی که میدونم نهاد نظارتی ای وجود نداره . حتی تشکل نظام مهندسی نرمافزار هم تشکیل نشده به اون صورت ولی توی سختمان ما تشکلی بنام نظام مهندسی ساختمان داریم.
و در آخر هم پادشاه همهی این نقشها، یعنی یوزر یا کاربر هست. یوزر میشینه توی خونه و از برنامه استفاده میکنه و از همهی دستاندرکارانی که ساختمان و برنامه رو ساختن، همزمان تشکر میکنه.