چرخ را دوباره اختراع نكنيم
نويسنده:پارسا ستودهنيا
تمامي پيشرفتهاي امروز بشر، اختراعات و محصولات جديد براي راحتي انسان و رسيدن هر چه سريعتر او به هدف خود است. همواره شروع حركتهاي بزرگ از حركتهاي كوچك آغاز ميشود و هر كس بخشي از راه را پيموده و نتيجه كار خود را در اختيار ديگري قرار ميدهد تا هزينهاي را كه شخص ديگر براي پيمودن ادامه راه صرف ميكند وي را به هدف نهايي نزديك كند. اگر قرار باشد هر كس هر راهي را كه شخص ديگر طي كرده است، از ابتدا شروع كرده و آن را بپيمايد هيچ گاه پيشرفتي حاصل نخواهد شد. گرچه مخترعين رايانههاي اوليه، كار بسيار بزرگي انجام دادهاند، اما كار بزرگتر را كساني انجام دادهاند كه آن را توسعه داده و به رايانههاي امروزي تبديل كردهاند.
در زمينه طراحي و توليد نرمافزار و توسعه دنياي آن نيز از ابتدا تاكنون شاهد تحولات بسياري بودهايم و هر كس در اين مسير سهمي داشته است. خوب است ما هم پس از ورود به اين دنيا و مرتفع كردن نيازهاي خود، سهمي در پيشروي آن داشته باشيم.
سختافزار در اوايل عمرش ميزان عدم موفقيت نسبتا بالايي دارد كه اغلب به طرح يا نقايص توليدي مربوط ميشود. نقايص اصلاح شده و ميزان شكست براي مدتي به سطح ثابتي ميرسد كه البته بسيار كم است. با گذشت زمان سختافزار شروع به فرسوده شدن كرده و ميزان شكست كار دوباره افزايش مييابد، اما نرمافزار در معرض آن عوامل محيطي كه سختافزار را خراب ميكنند نيست. بنابراين ميزان موفقيت آن نسبت به سختافزار به حالت ايدهآل نزديكتر خواهد بود. مشكلات شناسايي نشده در اوايل كار برنامه باعث عدم موفقيت در كار ميشود. اين مشكلات معمولا بدون به وجود آوردن مشكلات ديگر برطرف ميشود. چيزي كه در نهايت به دست ميآيد يك نرمافزار كماشكال است كه تا حد امكان مشكلات آن برطرف شده و به حد مطلوبي رسيده است و ميتواند تا هر زمان دلخواه مورد استفاده قرار گيرد. واضح است كه يك نرمافزار هيچ گاه فرسوده نشده و كيفيت اوليه خود را از دست نميدهد، اما چيزي كه باعث ميشود ميزان استفاده از آن كاهش يابد يا به طور كلي كنار رود به وجود آمدن نيازهاي جديد و بالا رفتن انتظارات كاربر از نرمافزاري است كه از آن براي برآورده شدن هدفي استفاده ميكنند.
اما نرمافزار اين خصوصيت را دارد كه ميتواند تكميل شود و يا اگر در مدت زماني به نقايص يا كاستيهاي آن پي برده شد ميتواند آن را اصلاح كرده و مجددا به سطح مطلوب رساند. اين موضوع بحثي است كه از آن تحت عنوان نگهداري نرمافزار ياد ميشود و يكي از مباحث مهم و اساسي توليد نرمافزار است.
اما چيزي كه واضح است آن است كه نرمافزار مجموعهاي از روشها و دستورات است كه هرگز خاصيت خود را از دست نداده و كهنه نميشوند. اين حسن بزرگي است كه يك نرمافزار دارد و بايد به بهترين نحو از آن استفاده كرد.
ممكن است هيچ قطعهاي از يك اتومبيل قديمي براي ساخت يك اتومبيل جديد مورد استفاده قرار نگيرد. هر چند بسياري از بخشهاي آنها مشترك بوده و حتي انتظاري كه از آنها ميرود نيز تغييري نكرده است. اما در طراحي نسل جديد يك نرمافزار ميتوان بدون كوچكترين مشكلي از روشها و الگوريتمهاي پيش استفاده كرده و آنها را مستقيما در توليد محصول جديد به كار گرفت.
البته ممكن است برخي روشها، از نظر سرعت و كارايي مطلوب نبوده و با روشهاي جديد و رويكردهاي نويني دست به ابتكار عمل در نسخه جديد نرمافزار بزنيم. اما مطمئن خواهيم بود كه اولا اگر هر جاي نرمافزار بدون تغيير باقي مانده است نيازي به طراحي مجرد و بازنويسي ندارد، ثانيا تا زماني كه روش جديد پاسخگوي نياز است ميتوان از آن استفاده كرده و حتي از آن براي نسلهاي ديگر نرمافزار نيز بهره گرفت.
اما زماني كه برخي اجزاي نرمافزاري، استفاده متداول و زيادي دارند، چرا بايد هر بار توسط اشخاص مجددا بازنويسي شود. به همين دليل گروهي زماني را صرف طراحي، پيادهسازي و تست اجزاي متداول ميكنند و از آن پس هر كس بخواهد از آنها به همان شكل استفاده كند، بدون صرف كمترين زمان، اين كار برايش ميسر خواهد بود و شخص زمان در دست را صرف انجام امور ديگر درجهت پيشبرد پروژه خود ميكند. البته اگر آن قطعات آماده نياز شخص را مرتفع نساخته و كمبودهايي داشت، ميتواند با صرف زمان كمي، قطعه مورد نظر خود را مطابق خواست خود تغيير دهد. برنامهسازي آينده در حال حركت به سمتي است كه افراد بتوانند هر چه كمتر كدنويسي كنند و برنامههاي خود را تا حد امكان با چيدن اجزاي آماده مثل تكههاي يك پازل طراحي و پياده سازي كنند و زمان، بيشتر صرف ايجاد طرحهاي جديد و ايدههاي نو شود.
در زمينه طراحي و توليد نرمافزار و توسعه دنياي آن نيز از ابتدا تاكنون شاهد تحولات بسياري بودهايم و هر كس در اين مسير سهمي داشته است. خوب است ما هم پس از ورود به اين دنيا و مرتفع كردن نيازهاي خود، سهمي در پيشروي آن داشته باشيم.
سختافزار و نرمافزار
سختافزار در اوايل عمرش ميزان عدم موفقيت نسبتا بالايي دارد كه اغلب به طرح يا نقايص توليدي مربوط ميشود. نقايص اصلاح شده و ميزان شكست براي مدتي به سطح ثابتي ميرسد كه البته بسيار كم است. با گذشت زمان سختافزار شروع به فرسوده شدن كرده و ميزان شكست كار دوباره افزايش مييابد، اما نرمافزار در معرض آن عوامل محيطي كه سختافزار را خراب ميكنند نيست. بنابراين ميزان موفقيت آن نسبت به سختافزار به حالت ايدهآل نزديكتر خواهد بود. مشكلات شناسايي نشده در اوايل كار برنامه باعث عدم موفقيت در كار ميشود. اين مشكلات معمولا بدون به وجود آوردن مشكلات ديگر برطرف ميشود. چيزي كه در نهايت به دست ميآيد يك نرمافزار كماشكال است كه تا حد امكان مشكلات آن برطرف شده و به حد مطلوبي رسيده است و ميتواند تا هر زمان دلخواه مورد استفاده قرار گيرد. واضح است كه يك نرمافزار هيچ گاه فرسوده نشده و كيفيت اوليه خود را از دست نميدهد، اما چيزي كه باعث ميشود ميزان استفاده از آن كاهش يابد يا به طور كلي كنار رود به وجود آمدن نيازهاي جديد و بالا رفتن انتظارات كاربر از نرمافزاري است كه از آن براي برآورده شدن هدفي استفاده ميكنند.
اما نرمافزار اين خصوصيت را دارد كه ميتواند تكميل شود و يا اگر در مدت زماني به نقايص يا كاستيهاي آن پي برده شد ميتواند آن را اصلاح كرده و مجددا به سطح مطلوب رساند. اين موضوع بحثي است كه از آن تحت عنوان نگهداري نرمافزار ياد ميشود و يكي از مباحث مهم و اساسي توليد نرمافزار است.
استفاده از روشهاي قبل
اما چيزي كه واضح است آن است كه نرمافزار مجموعهاي از روشها و دستورات است كه هرگز خاصيت خود را از دست نداده و كهنه نميشوند. اين حسن بزرگي است كه يك نرمافزار دارد و بايد به بهترين نحو از آن استفاده كرد.
ممكن است هيچ قطعهاي از يك اتومبيل قديمي براي ساخت يك اتومبيل جديد مورد استفاده قرار نگيرد. هر چند بسياري از بخشهاي آنها مشترك بوده و حتي انتظاري كه از آنها ميرود نيز تغييري نكرده است. اما در طراحي نسل جديد يك نرمافزار ميتوان بدون كوچكترين مشكلي از روشها و الگوريتمهاي پيش استفاده كرده و آنها را مستقيما در توليد محصول جديد به كار گرفت.
البته ممكن است برخي روشها، از نظر سرعت و كارايي مطلوب نبوده و با روشهاي جديد و رويكردهاي نويني دست به ابتكار عمل در نسخه جديد نرمافزار بزنيم. اما مطمئن خواهيم بود كه اولا اگر هر جاي نرمافزار بدون تغيير باقي مانده است نيازي به طراحي مجرد و بازنويسي ندارد، ثانيا تا زماني كه روش جديد پاسخگوي نياز است ميتوان از آن استفاده كرده و حتي از آن براي نسلهاي ديگر نرمافزار نيز بهره گرفت.
نرمافزار متن باز
استفاده از قطعات آماده
اما زماني كه برخي اجزاي نرمافزاري، استفاده متداول و زيادي دارند، چرا بايد هر بار توسط اشخاص مجددا بازنويسي شود. به همين دليل گروهي زماني را صرف طراحي، پيادهسازي و تست اجزاي متداول ميكنند و از آن پس هر كس بخواهد از آنها به همان شكل استفاده كند، بدون صرف كمترين زمان، اين كار برايش ميسر خواهد بود و شخص زمان در دست را صرف انجام امور ديگر درجهت پيشبرد پروژه خود ميكند. البته اگر آن قطعات آماده نياز شخص را مرتفع نساخته و كمبودهايي داشت، ميتواند با صرف زمان كمي، قطعه مورد نظر خود را مطابق خواست خود تغيير دهد. برنامهسازي آينده در حال حركت به سمتي است كه افراد بتوانند هر چه كمتر كدنويسي كنند و برنامههاي خود را تا حد امكان با چيدن اجزاي آماده مثل تكههاي يك پازل طراحي و پياده سازي كنند و زمان، بيشتر صرف ايجاد طرحهاي جديد و ايدههاي نو شود.
استفاده مجدد از كد