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