آلوين تافلر را از زمانی که دانشجو بودم، به ياد دارم. زمانی که استادم عزیزم، آقای مهندس ابطحی به کرات از ایشان نقل قول میکرد. کتاب معروف موج سوم اثر ارزنده این نویسنده و اندیشمند بزرگ است.
حين گشتزنی در اينترنت به جديدترين گفت وگو با آلوين تافلر:نگاه تازه به آيندهبرخورد کردمو آن را مطالعه کردم. مطالعه آن رابه شما نیزتوصيه میکنم.
جديدترين گفت وگو با آلوين تافلر:نگاه تازه به آينده
دعوت به همکاری در شرکت مدار گسترش فناوری
شرکت مدار گسترش فنآوری که منعضو کوچکی از آن هستم، برای تيمهای توسعه سيستمهای مبتنی برJ2EE و NET. خود از عزيزان باتجربه و بادانش دعوت به همکاری مینمايد. متن آگهی دعوت به همکاری شرکت به شرح زير است:
دوست عزيز سلام
ما در جستجوی همکارانی با استعدادهای متنوع، خلاق، دارای مهارتهای چندگانه و برخوردار از يک يا چند مورد از شرايط زير هستيم.
- داراي توانايی در تحليل، طراحی، پيادهسازی و آزمون سيستمهای نرمافزاری (J2EE يا NET.)
- دارای تجربه در توليد سيستمهای مبتنی بر تکنولوژیهای .NET يا J2EE در يکی از سمتهای تحليلگر، طراح، برنامهساز و آزمونگر
- دارای روحيه تحقيق و پشتکار در حصول به نتيجه مطلوب
- علاقمند به فراگيری مباحث جديد در حوزه مهندسی نرمافزار
شما بايد به عنوان یک عضو، واقعاً در خدمت تيم باشيد. مهارتهای عالی در زمينه روابط فردی و هم چنين انگيزه برای کار در يک محيط مشارکتی داشته باشيد.ما دوست داريم با شما طولانی مدت و به عنوان يک همتيمی تمام وقت همکاری نماييم.
شرايط و مشخصات خود را به آدرس info@itorbit.net بفرستيد و يا به سايت ما www.itorbit.net مراجعه نماييد.
شماره تلفن را ضميمه کنيد. ما به همه تقاضاها پاسخ خواهيم داد.
به اميد ديدارتان در شرکت مدارگسترش فناوری
يکی از بهترين لحظات کاری
کارهايی که در طول روز انجام میدهم، به خصوص بخش فنی آن، قشنگ و دوست داشتنی است.
اما يکی از بهترين لحظاتم در طول روز، زمانی است که با آقای مهندس رهنمافر، متدولوژی بذرافشانی(ITO Seeding) را برای ديگران از دوستان گرفته تا شرکای تجاری و نيز مشتريان ارائه میدهيم.
اين متدولوژی، هر چند ايدههای بکری در زمينه توليد نرمافزار دارد اما متدولوژی توليد نرمافزار نيست، بلکه روشی است جهت حل مشکلات ورود نرمافزار و تکنولوژی اطلاعات به سازمان.
اين متدولوژی که ماحصل کار همکاران عزيزم در شرکت مدار گسترش فنآوری (IT Orbit) است، برگرفته از تجارب بومی و نيز تفکرات علمی و تحت تأثير نگاه نوينی به رابطه نرمافزار و سازمان است.
يکی از مشکلاتی که ما در کشور داريم، ورود تکنولوژیهايی است که در اثر تبليغات وارد کشور میشوند و بدون آن که دانش استفاده از آنها و نيز فرهنگ لازم جهت بهرهگيری از آنها، وارد گردد تنها خود محصول وارد کشور میشود. در نتيجه رقابت ما تنها بر سر اين است که ما
فلان تکنولوژی را بيشتر میدانيم يا تجربه استفاده از آن را داريم. هر از گاهی يکی از اينان، مد روز میشود و ما که تمامی نظراتمان مبتنی بر “شنيدهها و برداشتهای شخصی” است، آنها را علم میکنيم و روز ديگر آن را که در اثر کاربری نادرست، از مد افتاده، دور میاندازيم.
اما متدولوژی و روش بذرافشانی (ITO Seeding) به هيچ عنوان اين گونه نيست. يعنی اين گونه نيست که روشی موجود با رنگ و لعاب به نامی ديگر ارائه شده باشد. از اين رو لذت ارائه آن برای من و همکارانم دو صد چندان میشود و به خصوص وقتی که همه مخاطبين ما را تشويق به ادامه راهی که در پيش گرفتهايم، مینمايند و با نظرات تکميلی خود به بهبود آن کمک مینمايند.
خيلی دوست دارم زمانی برسد که شرکت بتواند ايده آن را انتشار دهد تا دانشگاهها و مراکز تحقيقاتی و نيز تيمها و شرکتهای نرمافزاری نيز از آن بهرهمند شده و آن را بهبود داده و به تکامل برسانند و در پروژههای بهبود سازمانی از ان استفاده نمايند. تنها مانع سر راه انتشار آن، نداشتن فرصت کافی جهت تهيه منابع قابل ارائه است و نه چيز ديگر.
به اميد آن روز.
معماری نرمافزار – بخش دوم
هر چقدر منتظر ماندم تا عزيزان راجع به مبجث معماری نظری بدهند تا به بهانه آن، مباحث را از سر بگيرم، نظری نيامد که نيامد. انگار دوستان علاقهای به اين بحث ندارند يا شايد …. ![]()
به هر حال سعی میکنم اين نوشتهها را تا تکميل شدن ادامه دهم. برگرديم به بحث اصلی.
برای اين که معماری نرمافزار را بتوان مورد استفاده قرار دهيم و با آن اخت بگيريم، نیاز داریم تا تکليف چند موضوع را روشن کنيم:
1- تعريف معماری نرمافزار چيست؟
2- چرا به معماری نرمافزار نياز داريم؟
3- معماری نرمافزار تحت تأثير چه چيزهايی است؟
4- معماری نرمافزار روی چه چيزهايی تأثيرگذار است؟
5- چگونه به يک معماری نرمافزار خوب (مطلوب) دست پيدا کنيم؟
5- معماری نرمافزار را چگونه نمایش دهيم؟
6- کدام فرآيند توليد نرمافزار، مفهوم معماری نرمافزار را در خود به وضوح بيان کرده و ما را مجبور به انجام آن میکند؟
بخش اول: تعريف معماری نرمافزار
واقعيت اين است که تعاريف متفاوتی در کتابها و منابع مختلف از معماری نرمافزار ارائه شده است. اين مفهوم در انستيتو مهندسی نرمافزار دانشگاه کارنگیملون به بلوغ رسيد و پس از آن توسط ديگران بسط داده شد.
وقتی صحبت از معماری نرمافزار میشود، اولين چيزی که میشنويد، مبحث لايهبندی(Layering) است. تا چند سال پيش، کلمه معماری معادل سيستمهای دو لايه و سه لايه بود و امروز سيستمهای سه لايه و گاه پنج لايه و گاه چهار به علاوه يک لايه و گاه برای همخوانی با ضرب المثل معروف، به هفت لايه نيز منجر میشود.(آفتابه، لگن هفت دست. …)
اما آيا واقعاً معماری جز لايهبندی، چيز ديگری نيست؟
در جواب اين سوال، دوستان موارد ديگری را نيز مطرح میکنند و آن مسائلی مثل مانايی(Persistance)، تراکنشها (Transaction) و از اين قبيل است.
خوب سوال ديگری که مطرح میشود آن است که اگر مسائل مطرح شده بالا شامل مانايی، تراکنش و از اين دست را برای يک سيستم حل کنيم، آيا برای سيستم ديگر، بحث معماری نخواهم داشت؟ آيا میتوانم ادعا کنم که معماری نرمافزار را يک بار برای هميشه حل کردهام؟
لطفاً جوابهايتان را برايم ارسال کنيد. (آزموده را آزمودن خطاست
)
برگرديم به بحث خودمان، تعريف معماری نرمافزار چيست؟ در اينجا از مراجع موجود استفاده کرده و تعاريفی ارائه میدهيم.
“معماری نرمافزار برنامه يا سيستم کامپيوتری، در برگيرنده ساختار سيستم است که شامل مولفهها، خصوصيات قابل رويت مولفهها و روابط بين آنها میباشد”[سايت SEI(انستيتو مهندسی نرمافزار)].
همچنين “معماری نرمافزار شامل:
– تصميمگيریهايی در مورد سازمان سيستم نرمافزار
– انتخاب عناصر ساختاری و واسطهای آنها به نحوی که سيستم از ترکيب رفتار اين عناصر شکل گرفته باشد.
– سازماندهی عناصر ساختاری و رفتاری در قالب زيرسيستمها
– سبکهای معماری مورد استفاده
علاوه بر ساختار و رفتار سيستم، معماری نرمافزار شامل سبک و سنگين کردن و پوشش دادن مواردی از قبيل سهولت کاربری، کارکردی، کارايی، انعطاف، استفاده مجدد، سهولت درک و فهم، محدوديتهای اقتصادی و تکنولوژيکی نيز میگردد.” [RUP]
در اين مورد بيشتر توضيح خواهم داد.
قانون پارتو و معماری نرمافزار (Software Architecture and Pareto’s Principle) – بخش اول
بالاخره نسخه شماره صفر نشريه امروز با يک روز تأخير انتشار يافت. در دو هفته اخیر، روزهای پرمشغلهای را پشت سر گذاشتم و نتوانستم نه در وبلاگم مطلب جديدی بنويسم و نه نشريه شیءگرايی مدار را سر وقت منتشر کنيم.
از همه دوستان و خوانندگان عزيز بابت تأخيرهای مذکور عذرخواهی میکنم.
ايدهام اين است که درباره اصول فرآيندهای نرمافزار که در مطالب قبلی آنها را فهرست کردم، در ادامه توضيحاتی ارائه دهم. برای اين کار ابتدا به سراغ معماری میرويم. برای شروع بحث قانون پارتو، اين قانون زيبا و دوستداشتنی را نقل خواهم کرد.
“اين قانون بيان مينمايد كه ۸۰ درصد از نتايجی كه شما بدست میآورد نتيجه ۲۰ درصد از فعاليتهای شماست. بهعبارت ديگر بهواسطه عدم تعيين اهداف و برنامه ريزی دقيق، زمانها را از دست داده و دچار كمبود وقت و زمان كه بزرگترين سرمايه هر فردی است خواهيم شد. [http://mohammadtaha.persianblog.com]”
“در سال 1906 اقتصاددان ايتاليايي ويلفردو پارتو[1] يك فرمول رياضي براي توصيف توزيع نابرابر ثروت در كشور خود ابداع كرد. او مشاهده كرده بود كه بيست درصد از مردم بيش از هشتاد درصد ثروت را در اختيار دارند. در سالهاي پاياني دهه 1940، دكتر ژوزف جوران[2] به اشتباه قانون 20/80 را به پارتو نسبت داد و آنرا اصل پارتو خواند (كه نه يك اصل بلكه يك حقيقت اجتماعي در آن سالهاي ايتاليا بود). … بعد از اينكه پارتو مشاهدات خود را انجام داده و فرمول خويش را ابداع نمود، بسياري از محققين پديده هاي مشابهي را در زمينه تخصصي خويش مورد بررسي قرار دادند. پيشتاز مديريت كيفيت دكتر ژوزف جوران كه در سالهاي دهه 1930 و 1940 در آمريكا زندگي ميكرد، يك اصل جهانشمول را شناسايي كرد كه آنرا “اندكهاي حياتي و بسيارهاي كم اهميت[3]” ناميد و بصورت مكتوب در آورد. فقدان دقت كافي در كار اوليه اي كه انجام داده بود باعث شد، آنرا بسط نظرات اقتصادي پارتو در زمينه اي وسيعتر بدانند. نام اصل، پارتو باقيماند، شايد به اين علت كه از نامگذاري دكتر جوران براي گوش خوشايندتر بود.
در نتيجه، مشاهدات دكتر جوران از “اندكهاي حياتي و بسيارهاي كم اهميت”، يعني اين اصل كه بيست درصد چيزي اغلب مسئول 80 درصد نتايج است، تحت عنوان اصل پارتو يا قاعده 20/80 باقي ماند.
قاعده 20/80 بدين معنا است كه در هرچيزي، ميزان اندكي (20 درصد) داراي اهميت حياتي و بسياري (80 درصد) كم اهميت و يا داراي اهميت ناچيز است. در مورد پارتو اين قاعده بدين معناست كه 20 درصد مردم 80 درصد ثروت را در اختيار دارند. در كار اوليه جوران چنين بيان شده است كه 20 درصد نواقص باعث 80 درصد مشكلات ميشوند. مديران پروژهها ميدانند كه 20 درصد كار (اولين ده درصد و آخرين ده درصد) 80 درصد زمان و منابع را صرف ميكند. ميتوانيم قاعده 20/80 را در مورد تقريباً هرچيزي بكار ببريم، از علم مديريت گرفته تا جهان فيزيك.
بعنوان مثال، شايد توجه كرده باشيد كه 20 درصد از لوازم شما بيش از 80 درصد فضاي انبار خانه را اشغال ميكنند و نيز 80 درصد لوازم را 20 درصد از فروشندگان عرضه كردهاند. همچنين 80 درصد فروش ناشي از فعاليت 20 درصد كاركنان بخش فروش است. بيست درصد كاركنان شما مسئول 80 درصد مشكلات هستند اما بيست درصد ديگر، هشتاد درصد توليد را فراهم ميكنند. اين قاعده در هر دو مورد صادق است.
اصل پارتو و يا بعبارتي قاعده 20/80 ميتواند بعنوان يك يادآوري روزانه در خدمت ما باشد و بهما يادآور شود كه 80 درصد زمان و انرژي خود را بر 20 درصد آنچه واقعاً مهم است، متمركز كنيم. تنها هوشمندانه كار نكنيد، بلكه هوشمندانه بر روي چيزهاي درست و مهم كار كنيد. [http://www.tdins.org/featured/2/pareto.htm]”
اما در نرمافزار:
80% کارمهندسی صرف 20% درصد نيازمندیها میشود.
80% هزينه صرف 20% مؤلفههای سيستم میشود.
عامل 80% خطاهای سيستم نرمافزاری، 20% مؤلفهها هستند.
عامل 80% دوبارهکاریها و دورريختنیها تنها 20% تغييرات هستند.
80% درصد منابع سيستم (شامل حافظه، بانک، زمان و ..)صرف 20% مؤلفهها میشود.
80% درصد پيشرفت پروژه توسط 20% تيم انجام میشود.
اگر اين 20 درصدها را کنار هم بگذاريد(نيازمندیها، مؤلفهها، آدمها و …)، موضوعات مهم سيستم و پروژه نرمافزاری مشخص میگردد. اين موضوعات، موضوعات مرتبط با معماری هستند.
آیا شما مثالی برای موارد بالا دارید؟ برایم ارسال نمایید. منتظرم
زمان انتشار نشریه الکترونیکی شیءگرايی مدار
ديروز با آقای مهندس هادی تا دير وقت جلسه داشتيم و موضوع جلسه ما چيزی نبود جز نشريه شیءگرايی مدار.
خلاصهای از مباحث مطرح شده در جلسه را در اين جا آوردهام.
ايده آقای مهندس هادی اين بود که مانند MSDN Magazine، نشريه دارای ستونهای ثابتی باشد که هر ماه، مطالبی در آن آورده میشود، در کنار آن، هر شماره را به يک موضوع ويژه اختصاص دهيم و مطالبی در راستای موضوع، افزون بر ستونهای ثابت ارائه دهیم.
بخشهای ثابت پيشنهادی نشريه به قرار زير هستند:
- مفاهيم شیءگرا (Object Orientation Concepts)
- طراحی و معماری (Software Design and Architecture)
- متدولوژی (Software Process or Methodology)
- NET.
- J2EE
- معرفی کتاب
- مصاحبهها
(اگر شما هم ايدهای داريد، من را مطلع نماييد)
هم چنين موضوعات ويژه پيشنهادی نشريه نيز به شرح ذيل میباشند:
- کاربردهای الگوهای طراحی (Using Design Pattern)
- Code Generation
- Agile Methodology
- بومیسازی RUP
- Requirements
- …
نسخه اول نشريه با موضوع ويژه کاربردهای الگوهای طراحی انتشار پيدا خواهد کرد.
(شما هم میتوانيد ليست را کامل يا الويتبندی نماييد)
در مورد زمان انتشار نشريه نيز مشورت کرديم و توافقات زير حاصل گرديد.
قرار شد تا تاريخ 10 آبان، شماره صفر نشريه انتشار يابد که در آن سخن سردبير و نيز توضيحات مسئول هر بخش درباره محتوای آن، ارائه گردد.
مطالب شماره نخست نشريه تا تاريخ 20 آبان گردآوری خواهد گردد و در اول آذر، اولين شماره نشريه انتشار پيدا خواهد کرد.
اگر شما عزيزان برای قبول مسئوليت بخشهای مذکور داوطلب هستید یا علاقهمند به ارسال مقالههای مفید برای نشریه میباشید، اعلام بفرمایید تا هماهنگیهای لازم انجام شود.
مبانی فرآيندهای مدرن توليد نرمافزار
روزهای پنجشنبه و جمعه از بهترين روزهای هفته است. چرا که شرکت تعطيل است و شما میتوانيد کارهای عقب افتاده يا کارهای مورد علاقهتان را که در قالب کارهای شرکت نمیگنجد، انجام دهيد. البته جمعهها، روز خانواده است، ولی من بعضی اوقات، از کوپن خانواده نيز خرج میکنم. ناگفته خود پيداست که کلمه “بعضی” در “بعضی اوقات” وابسته به موضوع و از بین صفر تا صد قابل تغيير میباشد و اين تعریف به تأييد تمامی دوستان متأهل نیز رسیده است. ![]()
از شوخی که بگذريم، خانم مطهريان تقبل زحمت نمودهاند و نکات درس تحليل و طراحی شیءگرا را مدون کردهاند. از همين فرصت استفاده میکنم و از خانم حميده مطهريان صميمانه تشکر و قدردانی مینمایم.
داشتم متن آماده شده را به يک قالب استاندارد منتقل میکردم تا در اسرع وقت! به ويرايش و ويراستاری آن بپردازم. با خود گفتم که اگر بعضی از مطالب را در اين جا بازگو نمايم، هم برای خوانندگان مفيد خواهد بود و هم امکان دريافت نظرات و نقدهای خوانندگان وبلاگ برايمان مقدور خواهد شد.
موضوع اولی که میخواهم مطرح کنم در مورد فرآيندهای مدرت توليد نرمافزار است. اين فرآيندها، دارای پنج اصل پايه به شرح ذيل میباشند:
- معماری مقدم بر همه چيز — المان طراحی مرکزی
- استفاده از روشهای تکراری و افزايشی — المان مديريت ریسک
- تأکيد بر توسعه مبتنی بر مولفه — المان تکنولوژی
- فراهمسازی محيطی برای مديريت تغييرات — المان کنترل
- افزايش آزادی عمل در اعمال تغييرات با استفاده از ابزارهای دوطرفه(round trip) — المان اتوماسيون
البته بايد يادآور شوم که مبانی فرآيندهای مدرن شامل ده مورد میباشد که پنج مورد آنها در قالب اصول و پنج مورد ديگر در قالب فروع دستهبندی شدهاند. ما در اينجا تنها به اصول فرآيندهای توليد نرمافزار اشاره کردهایم.
نکته حائز اهميت و شالوده اين مطلب اين است که شما با هر روشی که کار میکنيد، فارغ از هر اسم و نشانه، بايد سعی کنيد اين اصول را در روش توليد خود به کار گيريد، که اگر چنين مهمی به وقوع بپيوندد، مسلماً شما مبتنی بر يک فرآيند نوين مبادرت به توليد و توسعه نرمافزار نمودهايد.
