هنگام گشت و گذار در سايتها و وبلاگهاي برنامهنويسان متوجه شدم كه يكي از مباحث روز در مهندسي نرمافزار، ميزان كارايي متدولوژيهاي نرمافزاري است. خيلي از برنامهنويسان و حتي مديران شركتهاي نرمافزاري پيشرو مايلند بدانند بهترين و پربازدهترين روش توليد نرمافزار چيست و بايد از كدام متدولوژي براي اين منظور استفاده كرد.
واژگاني مانند UML ،RUP ،Agile ،eXtreme Programming ،Ruby Model ،Test Driven Development و يك دوجين اصطلاحهاي دهن پركن ديگر هم لابهلاي اين بحثها ورد زبان برنامهنويسان است. به راستي بهترين راه توليد نرمافزار در دنيا، صرفنظر از نوع زبان برنامهنويسي و پلتفرم، چيست؟
چنين به نظر ميرسد كه بعد از بالا و پايين كردن اين همه روش و متدولوژي مختلف توليد نرمافزار، هنوز هم پاسخ دقيقي براي اين پرسش وجود ندارد و دنياي برنامهنويسي همچنان در تكاپو براي رسيدن به جوابي جامع و كامل است. از سوي ديگر نظرسنجيهاي به عمل آمده از شركتهاي توليدي و برنامهنويسان مستقل حاكي از آن است كه با وجود نقش انكار ناپذير متدولوژيهاي مدرن توليد نرمافزار در تسهيل روند برنامه نويسي، هنوز هيچكس از به كارگيري اين روشها كاملاً راضي نيست و گويا نتايج به دست آمده با پيش فرضها همخواني ندارند.
بسياري از مديران پروژههاي نرمافزاري بزرگ انتظار داشتند كه با به كارگيري اين روشها به نتايج خيرهكنندهاي برسند، اما پيشرفتها اگرچه قابل ملاحظهاند، در مقايسه با انرژي و وقتي كه براي استفاده از اين روشها صرف شده، خيلي هم راضيكننده نيستند. چرا چنين است؟
متدولوژي توليد چيست؟
اما از لابهلاي اين بحث و جدلهاي مهندسي و نرمافزاري به تدريج نتايج جالبي بيرون آمده كه شايسته توجه و تأمل است. يك نكته مهم در اين زمينه، بازخواني مفهوم «متدولوژي توليد نرمافزار» است. بهتر است دوباره از خودمان بپرسيم: اصلاً «متدولوژي توليد» چيست و فلسفه وجود اينهمه مدل براي توليد نرمافزار كدام است؟ مدلها و متدولوژيهاي توليد در همه رشتههاي مهندسي وجود دارند.
به زبان سادهتر متدولوژي توليد عبارت است از، روشي نظام يافته براي توليد يك محصول مهندسي. به عنوان مثال ميتوان از متدولوژي توليد داروهاي گياهي و شيميايي سخن گفت. همچنين متدولوژيهاي شناخته شدهاي براي توليد خودرو وجود دارد.
صنايع غذايي نيز از متدولوژيهاي خاصي بهره ميبرند. چنانكه ميتوانيم از متدولوژي توليد شير پاستوريزه، متدولوژي توليد شكلات، توليد كنسرو ماهي و... نام ببريم. يك نكته مهم و مشترك در تمام اين متدولوژيها اين است كه آنها براي توليد محصولاتي به كار گرفته شدهاند كه پيشتر يكبار ابداع شدهاند. بهعنوان مثال، ميتوان از متدولوژي توليد شكلات بارها و بارها براي اين منظور بهره گرفت، اما تعجبي ندارد كه بدانيم نخستينبار كه شكلات ابداع شد، هيچ متدولوژي خاصي براي اينكار وجود نداشته است.
آيا روشي براي توليد نرمافزار وجود دارد؟
بنابراين خيلي مهم است كه بدانيم متدولوژيهاي مهندسي درحقيقت ميتوانند براي توليد دوباره محصولي كه قبلاً يك بار ابداع شده است به كارگرفته شوند، اما نميتوانند محصولي جديد توليد كنند. از متدولوژي توليد خودروي پژو ميتوان براي راهاندازي خط توليد اين محصول استفاده كرد، مدلهاي متنوعي از آن را طراحي كرد و هزاران خودروي پژو ساخت، اما نميتوان با استفاده از آن خودروي جديدي ابداع كرد.
متدولوژيها توليدكننده نيستند و نبايد چنين انتظاري از آنها داشت، بلكه اين انسانها هستند كه محصول جديدي ابداع ميكنند و هر ابداع جديدي به ناگزير محصول تلاشهاي خاص و ويژه گروه يا فرد خاصي است. مشكلي كه در صنعت نرمافزار وجود دارد اين است كه ما عمدتاً با «توليد نرمافزار» و نه «بازتوليد» آن روبهرو هستيم و به لحاظ فلسفي هيچ متدولوژي خاصي براي توليد يك برنامه كامپيوتري وجود ندارد و به محض اينكه نرمافزاري ابداع و توليد شد، يعني خط توليد آن همين الان تكميل شده و ديگر به متدولوژي معيني براي باز توليد آن نيازي نيست، زيرا ميتوان به راحتي نرمافزار توليد شده را در نسخههاي بيشماري كپي و تكثير كرد!
البته از روشهايي كه در ابتداي يادداشت نام بردم ميتوان براي ارتقاي نرمافزار و توليد نسخههاي آتي آن استفاده كرد، اما اهميت استفاده از اين روشها براي «طراحي ورژنهاي جديد» در مقايسه با «توليد نرمافزار» چندان هم زياد نيست. بنابراين برخلاف ساير رشتههاي مهندسي كه متدولوژيهاي توليد بسيار اهميت دارند، در مهندسي نرمافزار، متدولوژيهاي توليد اين كارايي را ندارند.
«برنامهنويس خوب»، بهترين متد
به تازگي تحولات جالبي در رشته نرمافزار ديده ميشود. به اين صورت كه اندك اندك شركتهاي توليدي متوجه شدهاند هيچ روشي به اندازه برنامهنويسان باهوش و خلاق اهميت ندارد. واقعيت هم همين است. آيا براي ساخت موتور جستوجوي گوگل از متدولوژي نرمافزاري خاصي استفاده شده بود؟ خير. آيا بيل گيتس نخستينبار براي توليد سيستم عامل ويندوز از متدولوژي خاصي استفاده كرده بود؟ بازهم جواب منفي است.
پس اين متدولوژيهاي مدرن توليد نرمافزار چه كار مفيدي انجام ميدهند؟ آنها در بهترين حالت ميتوانند يك سري ايدههاي مشترك را كه ميان نرمافزارهاي مختلف ديده ميشوند، بازتوليد كنند. به عنوان مثال، اگر نرم افزار شما به خواندن و نوشتن در پايگاهداده متكي است، اين متدولوژيها، كدنويسي اين قسمت را براي شما آسان ميكنند، نه بيشتر.
آنها هرگز نميتوانند نرمافزاري براي شما توليد كنند. اشتباهي كه برخي از مديران پروژههاي نرمافزاري مرتكب ميشوند اين است كه بيش از حد روي متدولوژيها و خط توليد خود تكيه ميكنند، درحالي كه آخرين يافتههاي دنياي برنامهنويسي نشان ميدهد كه باارزشترين سرمايه شركتها برنامهنويسان خلاق هستند.
بنابراين يك پاسخ واقعبينانه به پرسش اول اين يادداشت اين است: بهترين روش توليد نرمافزار اين است كه به طور مداوم مطالعه كنيم، فكر و نبوغ و هوش خود را به كار بياندازيم، تجربههاي ديگران را هم درنظر بگيريم، سخت كار كنيم و كدهايمان را بارها و بارها اشكالزدايي (Debug) كنيم تا يك محصول خوب توليد كنيم! جديدترين روش همين است!
عصر شبکه
Bookmarks