Structural Design Patterns and .NET Framework 2.0
گزیده: (تفاوتهای من و رئیسم)
– وقتي من يك كاري را دير تمام ميكنم، من كند هستم.
– وقتي رئيسم كار را طول دهد، او دقيق و كامل است.
Structural Design Patterns and .NET Framework 2.0
گزیده: (تفاوتهای من و رئیسم)
– وقتي من يك كاري را دير تمام ميكنم، من كند هستم.
– وقتي رئيسم كار را طول دهد، او دقيق و كامل است.
در آخرين روز ترم پاياني دانشگاه، استاد به زحمت جعبه سنگيني را داخل کلاس درس آورد. وقتي که کلاس رسميت پيدا کرد استاد يک ليوان بزرگ شيشهاي از جعبه بيرون آورد و روي ميز گذاشت. سپس…
چند قلوه سنگ از درون جعبه برداشت و آنها را داخل ليوان انداخت. آنگاه از دانشجويان که با تعجب به او نگاه ميکردند، پرسيد: آيا ليوان پر شده است؟ همه گفتند بله پر شده است. استاد مقداري سنگ ريزه را از جعبه برداشت و آنها را روي قلوه سنگ هاي داخل ليوان ريخت. بعد ليوان را کمي تکان داد تا ريگها به درون فضا هاي خالي بين قلوه سنگ ها بلغزند. سپس از دانشجويان پرسيد: آيا ليوان پر شده است؟ همگي پاسخ دادند: بله پر شده است. استاد دوباره دست به جعبه برد و چند مشتي شن را برداشت و داخل ليوان ريخت. ذرات شن به راحتي فضاهاي کوچک بين قلوه سنگ ها و ريگها را پر کردند. استاد يک بار ديگر از دانشجويان پرسيد: آيا ليوان پر شده است؟ دانشجويان همصدا جواب دادند: بله پر شده است. استاد از داخل جعبه يک بطري آب برداشت و آن را درون ليوان خالي کرد. آب تمام فضاهاي کوچک بين ذرات شن را هم پر کرد. اين بار قبل از اين که استاد سوالي بکند دانشجويان با خنده فرياد زدند: بله پر شده.. بعد از آن که خنده ها تمام شد استاد گفت: اين ليوان مانند شيشه عمر شماست و آن قلوه سنگ ها هم چيزهاي مهم زندگي شما مثل سلامتي، خانواده، فرزندان و دوستانتان هستند. چيزهايي که اگر هر چيز ديگري را از دست داديد و فقط اينها برايتان باقي ماندند هنوز هم زندگي شما پر است. استاد نگاهي به دانشجويان انداخت و ادامه داد: ريگ ها هم چيزهاي ديگري هستند که در زندگي مهمند. مثل شغل، ثروت، خانه و ذرات شن هم چيزهاي کوچک و بي اهميت زندگي هستند. اگر شما ابتدا ذرات شن را داخل ليوان بريزيد، ديگر جايي براي سنگها و ريگها باقي نمي ماند. اين وضعيت در مورد زندگي شما هم صدق مي کند. در زندگي حواستان را به چيزهايي معطوف کنيد که واقعا اهميت دارند. همسرتان را براي شام به رستوران ببريد. با فرزندانتان بازي کنيد و به دوستان خود سر بزنيد. براي نظافت خانه يا تعمير خرابي هاي کوچک هميشه وقت هست. ابتدا به قلوه سنگ هاي زندگيتان برسيد. بقيه چيزها حکم ذرات شن را دارند.
برگرفته از کتاب : عشق بدون قيد و شرط( http://denizjoon.blogfa.com/post-112.aspx)
گزیده: پهلوان روي تشك پهلوان نميشود، بلكه روي تشك ديگران از پهلواني او با خبر ميشوند.
دوست خوبم، احسان در نوشتهای به بررسی مزایا و معایب الگوهای طراحی پرداخته است. در اینجا نکاتی را در تکمیل نوشتههایش آوردهام.
خلاصه:
– جایگاه الگوهای طراحی در حل مشکل طبقهبندی و دستهبندی (classification)
– تجربی بودن الگوهای طراحی
– الگوهای طراحی و استفاده مجدد
– الگوهای طراحی به مثابه فرهنگ لغت مشترک
– نقش الگوهای طراحی در آموزش طراحی شیءگرا
– تعمیم الگوهای طراحی در سایر حوزهها
– ایده: حرکت به سمت کشف الگوهای مشابه در سیستمهای نرمافزاری مبتنی بر تئوری آشوب
– کوچک بودن الگوهای طراحی در مقابل پیچدگی و بزرگی روزافزون مسائل موجود
– نیاز به توسعه الگوها جهت پاسخگویی به مسئله
– افزایش تنوع و تعداد الگوهای طراحی
– چارلی چاپلین و یادگیری الگوهای طراحی
توضیح:
طبقهبندی وسیلهای است که ما به کمک آن دانش را مرتب مینماییم. اولین چیزهایی که در دوران دبستان یاد گرفتیم، طبقهبندی موجودات روی زمین بود. جانداران و بیجانها، جانداران به گیاه، حیوان و انسان دستهبندی میشوند و تا آخر.
در طراحی شیءگرایی، شناخت مشترکات بین چیزها به ما کمک میکند تا اشتراکات را در قالب تجریدها(abstraction) و مکانیزمها(mechanism) نشان دهیم و این کار ما را به سمت معماری کوچکتر و سادهتر هدایت میکند. متأسفانه دستهبندی چیزها مثلاً کلاسها، سیستمها و غیره کار سادهای نیست. فاکتورهای زیادی در شناخت و دستهبندی اجزای راه حل وجود دارند. از این رو در تحلیل و طراحی شیءگرایی مانند خیلی از حوزههای مهندسی، مجموعهای از توصیهها، راهنماییها و قواعد سرانگشتی جهت دستهبندی اجزای مسئله (مثلاً کلاسها و اشیا) وجود دارد.شناخت کلاسها، اشیاء و کلاً اجزای راه حل یکی از مشکلترین بخشهای تحلیل و طراحی شیءگرایی است.
شناسایی اجزا، هم شامل کشف و هم شامل ابتکار و نوآوری است. در پروسه کشف، تجریدهای موجود در مسئله شناسایی شده و در پروسه نوآوری، تغییر شکل تجریدها به شکلی که جواب مسئله داده شود، صورت میگیرد. نکته جالب آن که کشف و ابتکار هر دو با مشکل طبقهبندی و دستهبندی مواجه هستند.
یکی از مهمترین نکات مثبت الگوهای طراحی کمک آنها به مشکل کشف کلاسها و المانهای راه حل و کمک به توسعه ابتکاری است که در الگو وجود دارد. به عنوان مثال اگر مسئلهای با الگوی سازگارساز(Adpater) حل میشود، شناخت اجزای راه حل انجام شده و شما باید ابتکار موجود در الگو را برای تطابق با مسئله واقعی خود توسعه دهید.
یکی دیگر از نکات مثبت دیگر در الگوهای طراحی این است که آنها ماحصل تجربهاند و نه مباحث آکادمیک. به عبارت دیگر برای خلق یک الگو، لازم نیست شما در آزمایشگاههای مهندسی نرمافزار به دنبال کشف نمونهای جدیدی از آن باشید، بلکه باید در حین تجربه و انجام کار، حواستان به گذشتهتان باشد یا به آینده؛ و طرح این سئوال که آیا من درگذشته این مسئله را حل کردهام؟ آیا مسئلهای که با آن روبرو هستم دیگر بار ممکن است تکرار شود؟ به عنوان مثال در سیستمهای انبار و اتوماسیون اداری خیلی اوقات نیاز است که شما کاربر را از اتفاقاتی مطلع نمایید بدون آن که کاربر تعامل خاصی با سیستم داشته باشد(Notification یا هشدار). خوب به راحتی میتوان دید که این مسئله، عمومی و تکرارپذیر است. آیا نمیتوان یکبار برای همیشه حالت عمومی آن را حل کرد؟ ناگفته پیداست که شعار الگوها که “کسی قبلاً مسئله شما را حل کرده است” عینیت پیدا خواهد کرد. جمله زیبای الکساندر شنیدنی است: “هر الگو علاوه بر آن که مسئلهای را بیان میکند که بارها و بارها درمحیطمان اتفاق افتاده است، راه حلعمومی به آن را نیز بیان میدارد. در چنین حالتی میتوان این راه حل را میلیونها بار استفاده کرد، بدون آنکه بخواهیم آن را حتی دوبار به یک شکل انجام دهیم.”به همین دلیل است که الگوهای طراحی یکی از روشهای استفاده مجدد کاربردی و مفید در مهندسی نرمافزار هستند.
الگوهای طراحی نقش بسیار مهمی به عنوان زبان مشترک تیم تولید نرمافزار ایفا میکنند. وقتی که در جلسه طراحی یا در ارائه طراحی خود نام یکی از الگوها را میبرید، نیازی به توضیح اضافه نخواهد بود. شاید بد نباشد که بگوییم هرالگوی طراحی برابر است با 1024 کلمه ![]()
یکی دیگر از محاسن الگوهای طراحی، کمک بیشائبه آنها در آموزش طراحی شیءگراست. یادم است که هر بار از احسان میپرسیدم که بیا با هم فکر کنیم که چگونه طراحی شیءگرا را به دانشجویان یاد دهیم، تأکید میکرد که اول یک سری مقدمات گفته شود و بعد الگوهای طراحی ارائه گردد. (در ادامه توضیح بیشتر خواهم داد) به عبارت دیگر برای اینکه تفکر طراحان و حتی برنامهنویسان را به سمت تفکر شیءگرا سوق دهید، یکی از بهترین ابزارها، الگوهای طراحی هستند.
من کاملاً با نظر احسان که وی آن را “بازبهکارگیری مفهوم” یا ” بازبهکارگیری ایده” مینامد، موافقم. انسان ناشناختهها را از روی شناختهها، میشناسد. مسائل جدید را با استفاده از تجربیات قبلی حل میکند. وقتی کاری را تکرار میکنید، میشود رفتار. وقتی رفتار را تکرار میکنید، میشود خصیصه شما. وقتی که خصایص را تکرار کنید، میشوند بخشی از شخصیت شما. استفاده درست از الگوها
ی طراحی، ذهن شما ساختارمند و سازمانیافته مینماید تا آن جا که از آنها برای حل سایر مسایل نیزاستفاده میکنید حتی برای حل مسائل روزمره زندگیتان. گاهی شما نقش سازگارساز(Adpater) را بین دو عضو خانواده یا دو دوست رابازی میکنید. گاهی به جای خرید روزانه روزنامه، از الگوی Observer برای حل مشکلتان استفاده میکنید و مشترک روزنامه میشوید.
ایده: نکته جالب دیگر آنکه دوستانی که با تئوری و سیستمهای آشوب (Chaos Theory) آشنا هستند – به عنوان نمونه فراکتالها نمونهای از سیستمهای آشوبند- به خوبی میدانند که یکی از مهمترین خصوصیات این گونه سیستمها داشتن الگوهای خودمانا است. به عنوان مثال فراکتالها که ظاهری بسیار پیچیده دارند دارای الگوهایی با فرمولهای ساده ریاضیاند. کسی چه میداند، شاید سیستمهایی که ما با آنها درگیر هستیم، دارای الگوهای بسیار سادهای هستند که چنانچه کشف شوند، تأثیری شگرف بر نگاه ما در تحلیل و طراحی خواهند داشت. این موضوع را از آن جهت عرض میکنم که هر جایی که انسان حضور داشته باشد به عنوان مثال سازمانها، موضوع سیستم آشوب است. بخش عظیمی از نرمافزارهای ما در جهت تسریع و تسهیل کار این گونه سازمانها است. جمله من خیلی تخیلی و بعید به نظر میرسد ولی فکر کنم چیزهایی که ما امروز داریم تا همین چند سال پیش برایمان قابل باور نبود.
اما با همه نکات مثبت و مزایای الگوهای طراحی، ایراداتی نیز به آن وارد است. شاید بهتر است بگوییم که الگوهای طراحی به تنهایی کافی نیستند.
یکی از مهمترین ایراداتی که به الگوهای طراحی میتوان گرفت، ریزدانه بودن آنها در مقایسه با مسائل بزرگ و پیچیدهای است که ما با آنها مواجه هستیم. سطح مسئلهای که آنها مورد هدف قرار میدهند خیلی کوچکتر از مسائلی است که ما با آنها روبرو هستیم. هر چند الگوهای دیگری مانند الگوهای معماری وجود دارند که این معضل را تا حدی، تسکین میبخشند.
نکته قابل توجه دیگر این است که الگوهای طراحی به خودی خود جواب مسئله شما نیستند بلکه آن را در یک سطح عمومی حل میکنند. لذا شما نیاز به توسعه و تطابق آن با مسئلهای که با آن روبرو هستید، خواهید داشت.
یکی دیگر از معضلاتی که به شدت استفاده از الگوهای طراحی را به خطر میاندازد، تنوع و ازدیاد آنهاست(منظور الگوهای پایه طراحی گاما نیست، بلکه تمامی الگوهای طراحی موجود در تولید نرمافزار است- اینجا را مشاهده کنید). جهت مقایسه اجازه دهید مثالی ذکر کنیم. در دنیای زبان و نوشتار، شما با انبوهی از کلمات و اصطلاحات روبرو هستید که هر یک به نوبه خود، بسیار مفید هستند. اما آیا ما با همه لغاتی که در فرهنگ لغت وجود دارد، گفتهها و نوشتههایمان را بیان میکنیم. مسلماً نه. علت این امر، نامفید بودن سایر لغات نیست، بلکه تنوع و تعداد زیاد آنهاست و شما در هر مقطع از زمان، با یک سری از آنها، نظراتتان را بیان میکنید. این موضوع در مورد الگوهای طراحی و کلاً در مورد تکنیکها صادق هستند. به علت تعداد زیاد آنها، استفاده از آنها چیزی شبیه به استفاده از کلمات فرهنگ لغت خواهد بود.
الگوهای طراحی هر چند مکانیزم خیلی خوبی برای آموزش و حتی طراحی هستند ولی کافی نیستند. مفاهیم، اصول و معیارهایی در طراحی مهم هستند که بر همه جوانب آن و از جمله الگوهای طراحی غالب هستند. یادگیری و آموزش این گونه موارد، مقدم است بر الگوهای طراحی. به عبارت دیگر با الگوهای طراحی شما با یک سری مسائل از قبل حل شده و کاربرد آن آشنا خواهید شد ولی اگر برای مسئلهای که در الگو مطرح شده، جواب جدیدی ارائه شود، آیا میتوانید این جواب را با جواب قبلی مقایسه کنید.
در آموزش الگوهای طراحی یکی از اولین اتفاقاتی که میافتد، اتفاقی است که برای چارلی چاپلین در فیلم عصر جدید افتاد. چارلی در این فیلم از بس که با آچار، پیچها را سفت کرده بود، از خط مونتاژ که خارج شد، هر جا که چیزی شبیه به پیچ پیدا میکرد، شروع میکرد به سفت کردنش.
یادگیری الگوهای طراحی (مانند خیلی موضوعات دیگر)، یادگیرنده علاقهمند را مانند چارلی میکند. عدم ممارست در استفاده از آنها و تبدیل دانسته به ساختار فکری یکی از مهمترین چالشهای استفاده از الگوهای طراحی است(البته همه موضوعات جدیدی که میآموزیم)
آنچه ذهن مرا درگیر کرده این است که الگوهای طراحی برای حل مسائل تکرار شونده است. اگر میتوانستیم سطح این الگوها را افزایش دهیم یا الگوهایی برای کنترل تغییرات ارائه دهیم، خیلی عالی میشد.
گزیده: آنچه جذاب است سهولت نيست، دشواري هم نيست، بلكه دشواري رسيدن به سهولت است.
یکی از مهمترین مشکلاتی که در سازمانها وجود دارد، نحوه به اشتراکگذاری دانشی است که پرسنل سازمان اکتساب نموده و از آن برای انجام کارها استفاده مینمایند.
این معضل در سازمانهای تولید نرمافزار بسیار شدیدتر به چشم میآید. چرا که پرسنل و دانش آنها بزرگترین سرمایه شرکتهای نرمافزاری به حساب میآیند.
ابزارهایی هم مانند Confluence برای این کار تولید شدهاند. اما این ابزارها از آن جهت که جنبه رسمی پیدا کرده و محتوای آنها به عنوان مستندات رسمی تیم نرمافزاری تلقی میگردند باید ساختارمند باشند و تیم تولید،علاقه زیادی به آن پیدا نمیکند.
دوست خوبم، آقای مهندس مهدی امیری ایده جالبی در این زمینه دارد. ایشان اعتقاد دارد که استفاده از وبلاگ رسمی برای اعضای تیم به خصوص مدیران فنی، بسیار به حل این مشکل کمک خواهد کرد. این وبلاگها تنها محتوای فنی داشته و نویسنده در مورد زندگیاش و علاقهاش صحبت نخواهد کرد و تنها به بیان موضوعات فنی مرتبط با کار خود خواهد پرداخت. نکته مهم آن است که مالکیت وبلاگ با شرکت است و نه شخص.
ایشان در ادامه به وبلاگهای شرکت مایکروسافت به عنوان نمونه اشاره میکند که بعد از رفتن افراد از شرکت، وبلاگ بهروز نشده ولی محتوای آن کماکان در دسترس خواهد بود. هر وبلاگ متعلق به رهبر یکی از پروژههای شرکت است که موضوعات پروژه در وبلاگ به تفصیل شرح داده شده است. البته آقای امیری به جو و فضای فرهنگی به عنوان یک ریسک و تهدید برای پیادهکردن این ایده در شرکتهای ایرانی اشاره دارد.
این که این ایده میتواند برای هر نوع تولید و پروژهای به کار گرفته شود محل بحث و بررسی است ولی در هر صورت این ایده به نظرم بسیار جالب و مشکلگشابرای رفع برخی معضلاتی است که با آن مواجه هستیم.
گزیده: كاميابي خود را به داوري بنشين، از آن طريق كه بداني چه واگذاردهاي تا كاميابي را به دست آوري. دالایی لاما
آقای مهندس احسان شالچیان عزیز به تازگی وبلاگش را راهاندازی کرده است. تسلط و تجربه بالای ایشان در حوزه تولید نرمافزار و مهندسی نرمافزار بر کسانی که با ایشان آشنا هستند،پوشیده نیست.توصیه میکنم که مطالب وبلاگشان را حتماً دنبال نمایید.
آدرس وبلاگ: http://ehsanbraindump.blogspot.com
گزیده: آغوشت را به سوي دگرگوني بگشاي، امّا از ارزشهاي خود دست برندار. دالایی لاما
روز معلم مبارک باد.
گفت استاد مبر درس از ياد ياد باد آنچه به من گفت استاد
ياد باد آنکه مرا ياد آموخت آدمي نان خورد از دولت ياد
هيچ يادم نرود اين معني که مرا مادر من نادان زاد
پدرم نيز چو استادم ديد گشت از تربيت من آزاد
پس مرا منت از استاد بود که به تعليم من استاد استاد
هر چه ميدانست آموخت مرا غير يک اصل که ناگفته نهاد
قدر استاد نکو دانستن حيف استاد مرا ياد نداد
گر بمردست روانش پر نور ور بود زنده خدا يارش باد
شعر را آقای مهندس میثاق باقریان برایم ارسال نمودند.
گزیده: به ياد داشته باش، بهترين رابطه، رابطهاي است كه عشقتان به يكديگر بر نيازتان به يكديگر فزوني يابد. دالایی لاما
ماهنامه The Rational Edge – که به نظر خودم و بسیاری از دوستان پس از خرید شرکت Rational توسط IBM کلاً استراتژی و ماهیت قبلی خود را تغییر داده است- در آخرین شمارهاش،مقاله جالبی با عنوان Comparing the Rational Unified Process (RUP) and Microsoft Solutions Framework (MSF) ارائه کرده است که جالب توجه است. هر چند سطح این مقاله “مقدماتی” است، اما مطالعهاش اطلاعات مفیدی را در اختیار خواننده قرار میدهد.
این دو روش در تولید نرمافزار – MSF و RUP – قابل ترکیب نیز هستند. چرا که هر یک در بخشی از فرآیند بسیار خوب عمل کرده و در بخش دیگری دچار ضعفاست که استفاده ترکیبی از آنها، بسیار کارگشا بوده و نتایج جالبی به همراه دارد. آن چه به خاطر دارم این است که نتایج ترکیب این دو روش را اولین بار با آقای مهندس کوروش معظمی وحید در بهمن ماه 1379 در گروه تخصصی شیءگرایی انجمن انفورماتیک در سمیناری با عنوان “ترکيب فرآيندهای توليد نرم افزار MSF و RUP” ارائه دادیم.
IBM Rational Unified Process
Microsoft Solutions Framework
گزیده:
There’s three ways to do things, the right way, the wrong way and the way that I do it.Robert De Niro : Casino Movie