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