نکته : تمامی این نوشته و نوشته های این وبلاگ بر اساس تجربیات و نظرات شخصی من است.مثل همیشه پر از اشکال و ایراد.
اصلا سیستم یعنی چه ؟
در قسمت های دوم و سوم از رادیو کد در این مورد به طور کل توضیح داده ام و لازم نمی دانم که بار دیگری به آن بپردازم.
حال چرا نرم افزار به عنوان یک سیستم دینامیک ؟
به زبان ساده در سیستم های دینامیکی دید چرخه ای وجود دارد. یعنی به همه پدیده ها در این علم دینامیک از منظر چرخه نگاه می شود.
حال این چرخه در نرم افزار یعنی چه ؟
بگذارید با یک سوال شروع کنم : آیا وقتی اطلاعاتی را به سیستم اضافه یا کم می کنیم ، باعث نمی شود که سیستم تغییر حالت پیدا کند ؟
شرح با یک مثال خیلی خیلی ساده :
به طور مثال در سیستم دانشگاهی ، اگر دانشجو در یک ترم مشروط شود ، باعث نمی شود که سیستم تغییر حالت دهد ؟
بله باعث می شود که تعداد واحد های انتخابی یک دانشجو در ترم بعد تقلیل یابد ، و در سابقه دانشجو درج شود که یک ترم مشروط شده و شرط مشروطی پشت سر هم را فعال کند.
حال در مرحله بعد ممکن است که دانشجو دو ترم پشت سر هم مشروط شود و این حالت باعث می شود که یک گزارش برای مدیر آموزش صادر شود که بررسی شود چرا دانشجو دو بار پشت سر هم مشروط شده .
پس از این گزارش سیستم به حالت تعلیق درآمده و پس از طی مراحل اعتبار سنجی ، مراحل انجام کار مشخص می شود.
نکته : این مثال ها برای سیستم درست و حسابی نوشته شده.
همیشه این نکته را به یاد داشته باشید که در دینامیک سیستم ها باید بخشی را برای ارتباط و انجام کار توسط انسان ، در نظر گرفته شود.
خب بگذریم.
این یک مثال ساده بود از یک دینامیک سیستم نرم افزاری.
اما خود سیستم مقیاس و اندازه دارد. یعنی برای بعضی از سیستم ها لازم نیست که این همه جزئیات را در نظر بگیریم و تحلیل و طراحی را به طور دقیق و استاندارد انجام دهیم.
اگر کار سیستم در حدی است که با یک ثبت نام سر و ته اش بند می آید ، لازم نیست به این چیزها اصلا فکر کنیم.
اما اگر سیستم دقیق یا بزرگ مقیاس است لازم است که انتخاب کنیم به کدامیک از مراحل SDLC نیاز داریم ، و باید کدامیک کنار گذاشته شود.
البته همه اینها بستگی به چند ( ممکن است در بعضی مواقع بیشتر یا کمتر شود ) چیز دارد که مهمترین آنها را در زیر آورده ام.
1) بودجه پروژه یا همان مقدار پولی که مشتری قرار است خرج نرم افزار کند.
2) سفارشی سازی توسط مشتری.
3) نوع سیستم از منظر محتوا و بستر
4) موعد یا زمان تحویل پروژه
5) تعداد مهندسان متخصص آشنا به سیستم و نرم افزار
خب همه این موارد بعد از مرحله امکان سنجی و نیاز سنجی نرم افزار در نظر گرفته می شود. یعنی ابتدا بررسی می کنیم که آیا طراحی و ساخت این سیستم در قد قواره شرکت و کارمندان من است ؟
آیا شرکت من می تواند به همراه کارمندانش از پس این پروژه بر بیایند ؟
بعد از جواب دادن به این دو پرسش ، گرینه های بالا در نظر گرفته می شود. یعنی قبول کرده ایم که می توانیم.
حال پس از اوکی شدن همه مراحل و گل و بلبل بودن شرایط و امکانات، با یک دینامیک سیستم روبه رو می شویم. دینامیک سیستم که باید بدانیم از کجا شروع کنیم به بررسی.
دینامیک سیستم که باید آن را بشناسیم. دینامیک سیستم که باید جزء به جزء آن را بدانیم و تحلیل کنیم که کدامیک به درد ما می خورد و باید در آن مورد به شناخت برسیم. فرق خیلی زیادی در بین دانستن و شناخت وجود دارد. هم از معنای لغوی و هم از معنای سیستمی.
حال به این مرحله می رسیم که باید سیستم را بشناسیم. اما دریغ که در ایران این کار به صورت تمام و کمال و درست و حسابی انجام نمی گیرد.
یعنی به ندرت رخ می دهد که با یک چارچوب کلی مانند چارچوب زکمن ، به بررسی و تحلیل سیستم بپردازیم.. همه چیز را کُد در نظر می گیریم و این یک اشتباه مهلک است.
با خودتان یک لحظه فکر کنید که کُدها از چه چیزی به وجود می آیند ؟ یا بهتر بگویم برای چه یک کد باید نوشته شود ؟
در چه قالبی این کد باید نوشته شود؟
منظورم زبان برنامه نویسی و متعلقات تکنولوژیک اش نیست. منظورم بستر است . همان سیستم.
اینجاست که مشخص میشود کدها برای این نوشته می شوند که کاری را انجام دهند.
حال این کار برای چه انجام می گیرد؟
در چه زمینه ای (بستری) انجام می گیرد؟
بعد در این مرحله است که باید ازخود بپرسیم که بعد از انجام این کار توسط سیستم ، تاثیراش بر روی خود سیستم چیست؟
یعنی بررسی کنیم که بعد از انجام این کار در خود سیستم سازمان ، تاثیر آن بر کدام قسمت واضح تر است و بر کدامین قسمت ها تاثیری ندارد و بر کدام قسمت های دیگر ممکن است تاثیر بگذارد و از همه مهمتر اینکه :
تاثیر این تغییر در آینده برسیستم چیست؟
اینجاست که پای دینامیک سیستم ها به میان می آید.
یعنی در دینامیک سیستم ها باید عنصر زمان آینده و تاثیر تغییرات را بر کل سیستم در نظر گرفت.
ادامه دارد...