ورود

View Full Version : گفتگو: یه مشکل . . . یه پیشنهاد . . .



earse+erse
دوشنبه 28 دی 1388, 12:37 عصر
یه مشکل . . . یه پیشنهاد . . .

بعضی از برنامه نویسان با تجربه از این که می توانند آن چنان کد های برنامه را در هم بپیچانند که غیر از خودشان کسی از آن سر در نیاورد افتخار می کنند؛ در حالی که این کار یک عمل ناپسند و در پروژه های "کد باز" یک خلاف محسوب می شود. برنامه نویسان با این کار عجیب و غریب ، خودشان تست و خطا یابی برنامه را با مشکل مواجه می کنند. کد های باز باید طوری نوشته شود تا موجب پریشانی برنامه نویسان مبتدی نشود.
برنامه نویسان عزیز و عزیزان برنامه نویس کد های خود را به صورت سر راست بنویسید. این مفهوم به عنوان KIS(Keep It Simple) معروف است.
پس از گسترده و پیچیده کردن نا مأنوس کد برنامه خودتان جدا خودداری کنید.



پیچیده نوشتن هنر نیست هنر اینه که کد شما رو همه متوجه بشن


خود بنده!


حالا یه پیشنهاد: مدیران ارشد فروم آیا میشه یه دکمه ای چیزی زیر هر پست باشه که اگه برنامه نویس برنامه KIS را رعایت کرده نشون داده بشه؟
یه چیزی شبیه همون دکمه های (آیا این پاسخ را مفید ارزیابی می کنید ؟)

اگه نمیشه که هیچی (فقط همـــین!)

Felony
دوشنبه 28 دی 1388, 13:15 عصر
خوب این چه کاربردی داره ؟

Rejnev
دوشنبه 28 دی 1388, 13:28 عصر
با پیچیده شدن کار کد هم معمولا پیچیده میشه و دست کسی هم نیست.
تجزیه و تحلیل کد کار سختیه اما چیزی که مهمه اینه که شما از برنامه نویس بخواین کد رو تشریح کنه یعنی ازش بپرسید "حالا این برنامه چیکار میکنه؟". الگوریتم کار مهمه. بعد میرسیم به پیاده سازی.

mehdi.mousavi
دوشنبه 28 دی 1388, 13:55 عصر
بعضی از برنامه نویسان با تجربه از این که می توانند آن چنان کد های برنامه را در هم بپیچانند که غیر از خودشان کسی از آن سر در نیاورد افتخار می کنند؛ در حالی که این کار یک عمل ناپسند و در پروژه های "کد باز" یک خلاف محسوب می شود. برنامه نویسان با این کار عجیب و غریب ، خودشان تست و خطا یابی برنامه را با مشکل مواجه می کنند. کد های باز باید طوری نوشته شود تا موجب پریشانی برنامه نویسان مبتدی نشود.
برنامه نویسان عزیز و عزیزان برنامه نویس کد های خود را به صورت سر راست بنویسید. این مفهوم به عنوان KIS(Keep It Simple) معروف است.

سلام.
چون این مساله بارها قبلا به خود من گوشزد شده بود و من پاسخی نداده بودم، الان رو بهترین فرصت برای پاسخگویی به این مساله دیدم. اولا به این مساله میگن KISS Principal یعنی Keep It Short & Simple. اما این نباید باعث بشه که کدهای شرتی پرتی گسترش پیدا کنن! به حرفی که پروفسور انیشتن زده بود توجه کنید. ایشون گفته بودن: Keep it as simple as possible but no simpler. یعنی تا حد لزوم باید مسائل رو ساده نگاه داشت، اما نه ساده تر!

ابتدا باید پیچیدگی رو از بی نظمی تمیز بدیم. این دو زمین تا آسمون با هم فرق دارن. بعنوان مثال، وقتی کسی میپرسه که "چطوری از فرم 2 به TextBox موجود در فرم 1 دسترسی پیدا کنم"، هر کسی این میاد به ذهنش که متغیر موجود در فرم 1 رو Public تعریف کن، بعد تو فرم 2 ازش استفاده کن. اگر برنامه شما حاوی 2-3 فرم باشه (و نه بیشتر)، من در مورد این روش حرفی نمیزنم. اما عموما برنامه هایی که برای دنیای واقعی نوتشه میشن، بیش از چند 10 فرم دارن. اینجاست که من هرگز چنین روش "ساده ای" رو توصیه نمیکنم و قویا جلوی همچین روشی می ایستم.

پیاده سازی چنین روشهای ساده ای، "بی نظمی" رو به اون "پیچیدگی" اضافه میکنه. کدی که بینظم شد، error-prone میشه. وقتی مشتری از شما میخواد که فلان آیتم رو به فلان فرم اضافه کنید، شما باید 20 تا فرم دیگه رو تغییر بدید و مجدد تست کنید تا از درست اضافه شدن Feature جدید به فرم مورد نظر مشتری اطمینان حاصل کنید. تازه، اگر بتونید اینکارو انجام بدید.

ولی وقتی یاد بگیرید که یک نرم افزار رو بطور اصولی چطور باید طراحی کرد، وقتی بدونید که Pattern های موجود به چه دلیلی اینقدر گسترش پیدا کرده اند، وقتی سیستم ها رو همواره 2-3 فرمه نبینید و همواره اونها رو بخشی از یک Enterprise System تصور کنید، اونوقت از دادن پاسخهای ساده (که عموما در لحظه اول به ذهن میرسن) اجتناب می کنید.


سوال؟ میخوام یک کار زمان بر کنم که سیستم هنگ میکنه. چیکار کنم کاربر Progress Bar ببینه و برنامه Hang نکنه؟ پاسخ: Application.DoEvents برای همینکاره. برو خوش باش.
سوال؟ من میخوام از یک Thread به Thread UI ام دسترسی پیدا کنم اما فلان خطا رو بهم میده. پاسخ: برو فلان متغیر boolean رو false کن درست میشه.
سوال؟ فلان کد من یه Exception ترو میکنه و ... پاسخ: بزنم Catch(Exception ex) و اونجا کاری که میخواهی انجام بدی رو بده.
سوال؟ .....

اینها همه نمونه هایی از این قبیل سوالات هستن. منم بدم نمیاد سیستم رو ساده نگه دارم، اما برخی اوقات، به سیستم پیچیدگیهایی تحمیل میشه که اگر در وهله اول درست Handle نشه، به اون پیچیدگیها بی نظمی هم افزوده میشه و در نهایت، معجونی خواهیم داشت که به هیچ دردی نخواهد خورد و فقط باعث اضافه شدن دردی به دردهای قبلی میشه!

موفق باشید.

Tasiyan
دوشنبه 28 دی 1388, 13:58 عصر
این کار یک عمل ناپسند
چرا !!!؟؟ ،‌ مگه واسه شما كد نوشته كه بايد پيچيده ننويسه

برنامه نویسان با این کار عجیب و غریب ، خودشان تست و خطا یابی برنامه را با مشکل مواجه می کنند
شما چرا ناراحتيد ! ، خودش نوشته خودشم خطايابي ميكنه
مگه همه كد ها بازند
نه آقا دوست داريد سر راست دوست نداريد سر كج بنويسيد :لبخند:
کد شما رو همه متوجه بشن هنر نيست هنر اينكه كد شما اصولي نوشته بشه
منبع : خودم

Felony
دوشنبه 28 دی 1388, 14:10 عصر
کد شما رو همه متوجه بشن هنر نیست هنر اینکه کد شما اصولی نوشته بشه
اتفاقا هنره ، ربطی هم به متن باز بودن یا نبودن برنامتون نداره .

همین چند هفته پیش یکی از آشنایان بهم پیشنهاد یه کار داد ، گفت یه برنامه برای مدیریت کارخانه 2 سال پیش یکی برام نوشته و الان میخوام تغییراتی روش انجام بدم ، ( سورس رو ازبرنامه نویس خریده بود ) ، به من گفت این تغییرات رو برام اعمال کن ، سورس رو گرفتم وقتی تو دلفی بازش کردم خود دلفی مونده بود این سورس برنامه هست یا آش رشته ، هر چیز یه طرف ، فرم ها بدون نظم ، کدها تو هم رفته ، حلقه های تو در تو و IF ها پشت سر هم که هیچ کدوم رعایت تو رفتگی کد رو نکرده بود :گریه:

:گیج:خلاصه دلفی عزیز رو بستم و رفتم بهش گفتم این سورس رو ببر بزن تو سر اون برنامه نویسش .

پس ربطی به متن باز بودن پروژه نداره ، اومدیم و به دلایلی بعد از شما قرار شد یک نفر یا یک تیم دیگه برنامه رو پشتیبانی و ادامه بده ، اون بدبخت باید چی کار کنه ؟

Tasiyan
دوشنبه 28 دی 1388, 15:42 عصر
خواب عزيز دل برادر منم كه گفتم اصولي بنويسه ،‌ كيه كه از يه كد تميز و در ست حسابي بدش بياد ولي موضوع اينكه كد بچگانه ننويسه من خودم با اين كه از كد هاي پيچيده سر در نمي يارم از هنر نوشتن اينجور كد نويسي لذت مي برم
بعضي ها مجبورن كد هاشون رو طوري بنويسن كه كسي سوء استفاده نكنه
خلاصه اينكه اصولاً من با خريد و فروش سورس مشكل دارم مگر در حالتي كه نويسنده خودش كدها رو براتون سفارشي كنه

Mahmood_M
دوشنبه 28 دی 1388, 19:54 عصر
تمیز نوشتن کد نه تنها باعث خوانا شدن سورس میشه بلکه به راحت تر شدن حل مسئله هم کمک می کنه ...
برای پیاده کردن یک الگوریتم طولانی ( و یا پیچیده ) وقتی شروع به کد نویسی می کنید در صورتی که قواعد نظم کد نویسی ( مثل تو رفتگیها ) رو رعایت نکنید ، در اواسط یا شاید هم اواخر مراحل کار ، حتما چندین سئوال براتون پیش میاد و مجبورید چند دور برنامه رو مرور کنید ...
یادمه دوران دبیرستان یکی از دبیرهای ریاضیمون روی تمیز نوشتن ریاضی خیلی حساس بود ، همیشه می گفت برای اینکه بهتر و سریعتر و راحت تر سئوال رو حل کنید ، اون رو تمیز بنویسید و مراحل مختلف حل رو از هم جدا کنید ، این موضوع حتی به یادگیری هم کمک می کنه ...
برخی موارد نگاه کردن به کد هم می تونه در پیدا کردن ادامه ی راه حل موثر باشه ، وقتی کدهای نوشته شده بی نظم و تو در تو باشه ، با دیدن اونها ذهن به سختی می تونه اونها رو مرور کنه و در مورد مراحل بعدی تصمیم بگیره ...
موارد بالا به خود برنامه نویس کمک می کنه ولی همونطور که دوستان هم اشاره کردن ، رعایت این نکات برای کسی که قراره بعد ها روی سورس نوشته شده کار کنه هم می تونه مفید باشه ...
هیچ کدی به خاطر پیچیده بودن ارزش پیدا نکرده و نمی کنه اما کدها همیشه به خاطر ساده بودن تحسین می شن ، بشر همواره دنبال راحت ترین راه و سریعترین راهه ، مثلا هر بین دو راه حل برای یک مسئله ریاضی که هر دو به جواب می رسن ، مطمئنا راه حل آسانتر و ساده تر یا سریعتر قابل قبول خواهد بود ...
مثلا چند وقت پیش توی سایت Delphi.About.com آقای Zarko Gajic مسابقه ای گذاشته بودید بین اعضای اون سایت ، توی توضیحاتش این جمله جالب بود :
Both the speed of execution and code simplicity will be tested

خلاصه این که کد ارزشمند کدی هست که در عین سادگی سریع هم باشه ، هر کدوم از این دو مورد رو نداشته باشه ارزشش پایین میاد ...

موضوع مهم اینه که پیچیده بودن یک کد یک چیز نسبی هست ، ممکنه یک کد برای من خیلی پیچیده باشه ولی برای کس دیگه ای که تجربه و اطلاعات بیشتری داره اصلا پیچیده نباشه ...
مثلا اگه به کسی که تازه شروع به برنامه نویسی کرده کدی در مورد اشاره گرها بهش نشون بدی شاید به نظرش خیلی پیچیده بیاد و آرزو کنه که بتونه زمانی این جور کد ها رو بنویسه ولی وقتی به اون درجه رسید ، مبحث اشاره گر ها یا ... هم براش یک مبحث ساده میشه و کدهای مربوط به اون مبحث هم اصلا براش پیچیده نخواهد بود ... ، درواقع اینکه یک کد پیچیده باشه یا نه به میزان اطلاعات ما در مورد اون کد بستگی داره ...

اما موضوعی که این تاپیک به خطرش ایجاد شد پیشنهاد یکی از دوستان در مورد نحوه ی کد نویسی اعضای سایت بود ، ولی همونطور که اشاره شد ، چون این موضوع نسبیه و به شخصی که کد رو می خونه بستگس داره ، نمی شه عملیش کرد ، مثلا فرض کنید شما یک کدی می نویسید که برای شما و امثال شما خوانا هست و مشکلی نداره ولی من چون ازش سر در نمیارم به کد شما امتیاز منفی میدم ! در حالی که کد شما مشکلی نداره ...
اما با این که دوستان سعی کنن کدهای تمیز و خوانا بنویسن کاملا موافقم ...

موفق باشید ...

earse+erse
سه شنبه 29 دی 1388, 12:58 عصر
خوب از همه عزیزان عذر می خوام چون یادم رفته بود این تاپیک رو تو لیست اشتراکاتم بزارم

بهتره یکم این پیشنهاد رو تغییر بدم یه دکمه باشه مثل تشکر هر کی تشخیص داد که این کد با توجه به KIS نوشته شده این دکمه رو بزنه . . . هر کس که تعداد این پست های KIS شده اش بالا ی پنجاه (یا هر عدد دیگه ای) بود امتیازی چیزی بهش تعلق بگیره.


خوب این چه کاربردی داره ؟


باعث بالا رفتن سطح کد نویسی برنامه نویسان فروم می شه واسه تازه کار ها و مبتدی ها خوبه و . . .



با پیچیده شدن کار کد هم معمولا پیچیده میشه و دست کسی هم نیست.

یکی از دوست ها هم گفته بود که:


ابتدا باید پیچیدگی رو از بی نظمی تمیز بدیم


دقیقا درسته منظور من از پیچیده کردن کد، بزرگ شدن اون نیست منظور من عدم استاندارد نویسی و بی نظمیه

کُمپلت با mehdi.mousavi موافقم. (دمت گرم رفیق)

اما از آقای Tasiyan


این کار یک عمل ناپسند
چرا !!!؟؟ ،‌ مگه واسه شما کد نوشته که باید پیچیده ننویسه


برنامه نویسان با این کار عجیب و غریب ، خودشان تست و خطا یابی برنامه را با مشکل مواجه می کنند
شما چرا ناراحتید ! ، خودش نوشته خودشم خطایابی میکنه


شما درک درستی از وظیفه و هدف این فروم ندارید . . . (متاسفانه:اشتباه:)

اگه یکی که زیاد هم حرفه ای نباشه کد رو بی نظم بنویسه و محلت تحویل برنامه اش هم رو به پایان باشه و توی خطایابی گیر کنه شما جوابش رو می دی؟



کد شما رو همه متوجه بشن هنر نیست هنر اینکه کد شما اصولی نوشته بشه
منبع : خودم

جناب آقای منبع! هر دو مورد که گفتین هنره درضمن هنر نزد ایرانیان است و بس

این دیگه از من نبود




بعضی ها مجبورن کد هاشون رو طوری بنویسن که کسی سوء استفاده نکنه

راه های دیگه ای هم برای امنیت نرم افزار وجود داره!

earse+erse
سه شنبه 29 دی 1388, 13:08 عصر
اولا به این مساله میگن KISS Principal یعنی Keep It Short & Simple.

نیاز به ذکر منبع
منبع من در مورد KIS دکتر هاروی دیتل است واسه شما چی؟



موضوع مهم اینه که پیچیده بودن یک کد یک چیز نسبی هست ، ممکنه یک کد برای من خیلی پیچیده باشه ولی برای کس دیگه ای که تجربه و اطلاعات بیشتری داره اصلا پیچیده نباشه ...
مثلا اگه به کسی که تازه شروع به برنامه نویسی کرده کدی در مورد اشاره گرها بهش نشون بدی شاید به نظرش خیلی پیچیده بیاد و آرزو کنه که بتونه زمانی این جور کد ها رو بنویسه ولی وقتی به اون درجه رسید ، مبحث اشاره گر ها یا ... هم براش یک مبحث ساده میشه و کدهای مربوط به اون مبحث هم اصلا براش پیچیده نخواهد بود ... ، درواقع اینکه یک کد پیچیده باشه یا نه به میزان اطلاعات ما در مورد اون کد بستگی داره ...

گفته بودم که منظور من از پیچیدگی ، اتاندارد ننوشتن و بی نظمی در کد که اصلا نسبی نیست.



اما موضوعی که این تاپیک به خطرش ایجاد شد پیشنهاد یکی از دوستان در مورد نحوه ی کد نویسی اعضای سایت بود ، ولی همونطور که اشاره شد ، چون این موضوع نسبیه و به شخصی که کد رو می خونه بستگس داره ، نمی شه عملیش کرد ، مثلا فرض کنید شما یک کدی می نویسید که برای شما و امثال شما خوانا هست و مشکلی نداره ولی من چون ازش سر در نمیارم به کد شما امتیاز منفی میدم ! در حالی که کد شما مشکلی نداره ...


امتیاز منفی نداشته باشه فقط مثبت باشه مثل تشکر درضمن این دیگه نسبی نیست که اون مشکل پیش بیاد



اما با این که دوستان سعی کنن کدهای تمیز و خوانا بنویسن کاملا موافقم ...

همینه من هم می خواستم این رو بگم.

mehdi.mousavi
سه شنبه 29 دی 1388, 14:52 عصر
نیاز به ذکر منبع. منبع من در مورد KIS دکتر هاروی دیتل است واسه شما چی؟

اصل این واژه، Keep it simple, stupid یا Keep it stupid simple هستش، اما برای اینکه باز پروژه درست نشه، من ورژن اندکی تغییر یافته اشو نوشتم. والا در اصل همون اولی هستش. یکی از Propose ها هم، میگه S تکراری اون آخر رو بندازید و Keep it simple بخونیدش. اما خوب، افراد کمی اینکارو میکنن و ظاهرا هاروی هم جزء اون دسته از آدمهاست. اما قبل از هاروی، افراد بسیار زیادی از این مفهوم در کار روزانه خودشون سود میبردن. لئوناردو داوینچی، آلبرت آینستاین و خیلی های دیگه... در هر حال، می تونید به این سایتها رجوع کنید:


سایت اول (http://people.apache.org/%7Efhanik/kiss.html)
سایت دوم (http://en.wikipedia.org/wiki/KISS_principle)
سایت سوم (http://www.answers.com/topic/kiss-principle)
سایت چهارم و ...
(http://dictionary.reference.com/browse/KISS+Principle)


موفق باشید.

پاورقی: من دیگه علاقه ای به شرکت در این بحث ندارم. هر طور که صلاخ میدونید کد بنویسید.

earse+erse
جمعه 02 بهمن 1388, 14:45 عصر
من الان دارم مستقیما با مسئولین سایت صحبت می کنم یا حداقل اونایی که خودشون رو مسئول می دونند کس دیگه به خودش نگیره

یا ایاالمسئول السایت اگه یکم دقت به خرج بدین می بینین اسم این قسمت سایت گفتگو با مسئولین است.

ما یه پیشنهاد دادیم . . .قبول خیلی چرند بود، اما ارزش اینو نداشت با یه پاسخ فوری بگین چون از قیافه شما خوشم نمیاد این پیشنهاد رد است اینطوری ما رو Stand by ول نکنین گناه داریم . . .

vcldeveloper
جمعه 02 بهمن 1388, 19:50 عصر
قرار نیست به هر پیشنهادی که اینجا مطرح میشه، مدیران سایت جوابیه رسمی بدند.

جواب ساده پیشنهاد شما، فارغ از خوب یا بد بودن آن، یک عبارت هست: "در حال حاضر امکان پذیر نیست."

شما انتظار دارید سایت یا مدیران آن میزان سادگی هر کدی که در سایت نوشته میشه را چگونه چک کنند، و چطور آن را اصلاح کنند؟ مثلا بیایم هر سورسی که نوشته شده را با برخی از الگوریتم های رایج، تعداد انشعاب های موجود در آن، تعداد بلوک های کد استفاده شده، طول توابع استفاده شده، و غیره را بررسی کنیم، و اگر نتیجه نهایی با معیار مورد نظر مطابقت نداشت، کد کاربر را حذف کنیم؟!

گیرم یک کاربری راه دیگه ایی به ذهنش نمیرسیده، یا اصلا در شرایط اون سوال، بهتر از اون نمیشد کد را ساده تر کرد؛ اون وقت باید چیکار کنیم؟

کاربر باید خودش بداند که کدهایی که در این سایت یا سایت های مشابه می بیند، فقط برای راهنمایی هستند، نه کد نهایی که کاملا از هر نظری بهینه باشند، و کاربر بتواند آنها را Copy\Paste کند، و در سورس خودش استفاده کند.