PDA

View Full Version : گفتگو: تجربه ساخت پروژه های بزرگ با دلفی



BORHAN TEC
چهارشنبه 29 شهریور 1391, 18:39 عصر
سلام:قلب:
امیدوارم که حال دوستان خوب باشد.
مدتی است که قصد شروع کردن یک پروژه بزرگ را دارم. طبق برآوردها و پیش بینی های خودم احتمال می دهم که تعداد خطوط این پروژه بزرگ تا چند سال دیگر از مرز میلیون هم گذر کند. حقیقت امر این است که تا به حال تعداد خطوط بزرگترین پروژه ای که انجام داده ام و در حال انجام آن هستم(دانگل اسمارت یا IR-Key) از مرز 400,000 خط کد تجاوز نکرده است. در این زمینه می خواهم از تجربه دوستانی که پروژه های بزرگتری را انجام داده اند استفاده کنم به طوری که در ادامه کار مجبور نشوم مدام ضعفهای کدنویسی را برطرف کنم و می خواهم که پروژه در همان ابتدای کار در مسیر درستی قرار بگیرد. آیا دوستان می توانند تجربه خودشان را در این زمینه با من به اشتراک بگذارند؟
در ضمن توجه داشته باشید که این پروژه در زمینه ساخت محیطی است که با کمک ویزارد و ابزارهای گوناگون باید بتواند برنامه های مبتنی بر سیستم های اطلاعاتی را بدون کوچکترین کد نویسی ایجاد کند.
با تشکر

کامروا
پنج شنبه 30 شهریور 1391, 23:03 عصر
سلام آقای عشایری

منم خیلی دوست دارم اساتید محترم در این باره توضیح بدهند.

اما این تاپیک هم خیلی عالیه:
اصول و قواعد کدنویسی (http://barnamenevis.org/showthread.php?224704-%DA%AF%D9%81%D8%AA%DA%AF%D9%88%DB%8C-%D9%81%D9%86%DB%8C-%D8%B4%D9%85%D8%A7%D8%B1%D9%87-%DB%8C%DA%A9-%D8%A7%D8%B5%D9%88%D9%84-%D9%88-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%DA%A9%D8%AF-%D9%86%D9%88%DB%8C%D8%B3%DB%8C&highlight=beautiful+code)

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

BORHAN TEC
پنج شنبه 30 شهریور 1391, 23:04 عصر
تشکر میکنم از تمامی دوستانی که بدون کوچکترین منتی تمام تجارب خودشان را در اختیار بنده قرار دادند و ما را سر افراز کردند.:متعجب:
آقا من که نگفتم برایم کتاب بنویسید منظور من استفاده از هر تکنیکی برای ساخت برنامه های بزرگ است که پیچیدگی را کاهش و سرعت توسعه را افزایش می دهد(هر چند کوتاه و حتی در حد دو جمله!).

دانشجوی تویسرکانی
جمعه 31 شهریور 1391, 01:30 صبح
مشتاق شدم تا نظرات خودم (با اندکی نقد) را بیان کنم.
__________________________________________________ ________________________________________



مدتی است که قصد شروع کردن یک پروژه بزرگ را دارم. طبق برآوردها و پیش بینی های خودم احتمال می دهم که تعداد خطوط این پروژه بزرگ تا چند سال دیگر از مرز میلیون هم گذر کند

فصل اول : مقداری شوخی
بگذارید یک مقدار با ریاضیات بازی کنیم.
فکر می کنید اتمام این پروژه چه قدر طول می کشد؟
1- اگر هر روز بر روی پروژه کار کنید و روزانه 100 خط کدنویسی کنید.
27 سال طول می کشد پروژه را به پایان برسانید = (365 * 100) / 1,000,000
2-اگر روزانه 1000 خط کد نویسی کنید.
2.7 سال طول می کشد پروژه را به پایان برسانید = (365 * 1000) / 1,000,000
البته همچین اتفاقی رخ نمی دهد.*



حقیقت امر این است که تا به حال تعداد خطوط بزرگترین پروژه ای که انجام داده ام و در حال انجام آن هستم(دانگل اسمارت یا IR-Key) از مرز 400,000 خط کد تجاوز نکرده است.

فصل دوم :مقداری تمجید
اولین باری هست که این نرم افزار را مشاهده کردم ، پروژه قابل نقدیست.
البته بنده فکر می کنم 400,000 خط کد درست نیست.صحبت های بنده همراه با استدلال است.
و اما استدلال بنده :
بنده فکر می کنم زمانی که شما استارت نوشتن این برنامه را زدید اطلاعات کمتری از برنامه نویسی داشتید ، و در اواخر کار به نقطه ای رسیدید که دیگر جای برگشت نبود*.
در ضمن ادامه صحبت های شما در زمینه ضعف های کد نویسی و مسیر درست مهر تاییدی بر نقد برنامه توسط بنده است.
در هر صورت نمای کلی برنامه ای که بنده مشاهده کردم تحسین برانگیز بود.



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


فصل سوم : حدس
نوشتن چنین پروژه ای بسیار جالب خواهد بود.
حذف کدنویسی به همراه برقراری رابط کاربری مناسب با برنامه نویس ، طراح و یا کاربر عادی همواره از دقدقه ها و اهداف شرکت های برنامه نویسی بوده و هست.
بگذارید مثال هایی مطرح کنم :
Dos را با ویندوز مقایسه کنیم.
محیط سرد و بی روح Dos دیگر مجالی را برای گسترش باقی نگذاشت.اما به صورت کامل هم حذف نشد.
بعد از روبه رو شدن شرکت های برنامه نویسی با بحث توسعه رابط های کاربری یک نقطه ی تاریک شکل گرفت. امکان حذف کد نویسی نبود. برای درک بیشتر این مطلب یک لحظه سیستم عامل های ویندوز و لینوکس را بدون محیط کنسول تصور کنید.
بگذارید تا تجارب یک شرکت (کوچک) را در این زمینه بررسی کنیم.

93163 Web Page Maker
هدف شرکت (کوچک) سازنده : ساخت محصولی برای رقابت با وب ساز های پر قدرت.
در ابتدا قرار بر این بود تا محصول را بدون حتی یک خط کد نویسی روانه بازار کنند.
در اواخر شروع به توضیع محصول به این نتیجه رسیدند که کاربران بیشتری را تحت شعاع قرار دهند. قرار گرفتن کدهای کاربران بین چند خط فایل TXT با پسوند Html کار بسیار ساده ای بود.
البته بنده نمی دانم چه قدر با این محصول آشنایی دارید ، تقریباً محیطی برای تازه کارها است.
در نتیجه تصمیم بر این شد تا هم کاربران عادی و هم برنامه نویسان معمولی را تحت شعاع خود قرار دهند.(هرگز نتوانستند قدرت کد نویسی (دسترسی کاربر به کدنویسی) را از پروژه خود بگیرند.)
شاید برای شما جالب باشه که پروژه Web Page Maker را با Delphi نوشته اند.



در این زمینه می خواهم از تجربه دوستانی که پروژه های بزرگتری را انجام داده اند استفاده کنم به طوری که در ادامه کار مجبور نشوم مدام ضعفهای کدنویسی را برطرف کنم و می خواهم که پروژه در همان ابتدای کار در مسیر درستی قرار بگیرد. آیا دوستان می توانند تجربه خودشان را در این زمینه با من به اشتراک بگذارند؟

فصل چهارم : اندکی راهنمایی
در هر صورت سعی کنید برای سطوح مختلف کاربران برنامه را بنویسید.دیر یا زود متوجه می شوید بدون کد نویسی پروژه ناقص است.
1- سعی کنید به نحوه ای پروژه خود را بنویسید که تا حد امکان نیازی به تغییر خطوط یا دوباره نویسی نباشد.
2- ابتدا محیط برنامه را طراحی کنید ، به نحوی که تمامی ابزارها و کنترل ها را قرار داده باشید.
3- کوچکترین خطوط خود حتی 3 الی 4 خط را به تابع تغییر دهید ، حتی اگر فقط در همان رویداد استفاده شوند.
4- خودتان را جای کاربر قرار دهید.
5- هرگز از آخر به اول کد نویسی نکنید ، مسیرهای کاربر برای دسترسی به برنامه را به ترتیب اجرا کنید.
6- یک حالت پیش فرض برای کنترل هایی نظیر TextBox , JButton در نظر بگیرید و سپس اقدام به کپی برداری از آنها کنید.
7- همواره یک دفترچه یادداشت همراه داشته باشید ، زمانی که به کامپیوتر خودتان دسترسی ندارید اندیشه خود را بر روی کاغظ پیاده سازی کنید.
8- در برنامه خود برای استعلام وضعیت قبلی یک کنترل (مثلاً محتویات یک ListBox که کاربر تغییر می دهد و با بسته شدن و باز شدن برنامه همچنان پا برجاست) هرگز از دیتا بیس اصلی برنامه استفاده نکنید. شما می توانید یا از یک فایل txt با پسوند دلخواه استفاده کنید یا دیتا بیس دیگری ایجاد کنید.
__________________________________________________ ________________________________________
پانویس(*)
*پروژه هایی که با خطوط بالا نوشته می شوند فراتر از حد تصور شماست. هیچ گاه یک پروژه 4 میلیون خطی ابر شرکت های برنامه نویسی را با پروژه های خود مقایسه نکنید. مطمعن باشید همان پروژه 4 میلیون خطی را شما ( با کنار گذاشتن وقت و دانش ) با 20 میلیون خط هم نمی توانید کامل کنید. و یا بالعکس مطمعن باشید پروژه های 12 هزار خطی شما را با 3 هزار خط می توان پایه گذاری کرد. تا حد امکان کدهای خود را در داخل کلاس ها و توابع قرار دهید.

Felony
جمعه 31 شهریور 1391, 06:02 صبح
شاهین جان ؛ گر صبر کنی ... من دیروز صبح تاپیک رو دیدم و خواستم مطالبی بنویسم ولی تو شرکت بودم و وقت نداشتم .

- قبل از هر کاری 2 جفت! کتاب Design Pattern بخون تا یک ذهنیت کلی از اصول برنامه نویسی پروژه های درست و حسابی داشته باشی .

- یادت باشه نوشتن پروژه های بزرگ بدون نظم و ترتیب یعنی مرگ ؛ قبل از نوشتن هر کدی تو ذهنت یا کاغذ جوانب مختلف رو بررسی کن ( واقعا آیا مناسب ترین راه رو انتخاب کردی ؟ببین بعدا میتونی توسعه بدیش ؟ ) و سعی کن مطمئن بشی که 2 روز دیگه نمیخوای این کد رو از پایه بنویسی و تغییرات اساسی توش بدی ( البته بعضی مواقع نمیشه از این مورد دوری کرد ) .

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

- قبل از نوشتن کد هر قسمت یک Document کلی برای اون قسمت بنویس ، خیلی مواقع پیش میاد که میگی بزار فلان جا رو هم بنویسم بعد میام این قسمت رو براش Document مینویسم ، بعدش هم پس از گذشتن 1 هفته میبینی با چند هزار خط رو به رو هستی که فقط Document های جزئی دارند نه کلی و اونوقته که میگید بیخیال همین جزئی ها کافیه و با این کار پروژه رو به خاک سپردید !

- تو پروژه های بزرگ نباید ریسک کرد ، حتما از ابزارهایی تست شده و پایدار استفاده کنید ، هیچ وقت در یک پروژه بزرگ شما Tester یک محصول تازه واردی که آزمایش خودش رو پس نداده نباشید ، بعضی وقت ها چشم باز میکنی و میبینی کلی از پروژه بر پایه فلان ابزار جلو رفته و حالا فهمیدید که ابزاری که پروژتون رو بهش وابسته کردید مشکل خاصی داره و پیدا کردن جایگزین و تغییرات خیلی خسته کننده و ملال آور میتونه باشه .

- یک الگوی خاص برای خودت طراحی کن و بر اساس اون کد بزن ، در هر شرایطی ازش تخطی نکن ، مثلا تصمیم بگیر شرط if رو حتما داخل پرانتز بزاری حالا میخواد یک شرط باشه میخواد هزار تا شرط :

if ( Condition ) then
// Some code
if ( Condition_1 ) AND ( Condition_2) AND ... then
// Some code

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

- خیلی به قاعده شروع از اول به آخر هم بسنده نکن ( نه اینکه کلا بی خیالش بشی ) ولی حواست به قسمت هایی که کوچکترین ارتباطی با هم دارن باشه ، یهو چشم باز میکنی میبینی یک قسمت بزرگ از پروژه رو نوشتی و حالا که رفتی سر قسمت بعد به دلیلی با یک مشکل مواجه شدی که باید قسمت قبلی رو تغییرات اساسی بدی در صورتی که میتونستی خیلی راحت ازش جلوگیری کنی .

- پشتیبان گیری روزانه یا حتی ساعتی رو در دستور کارت قرار بده ، تو پروژه های بزرگ بعضی وقت ها ناخواسته قسمتی از کدها با هم conflict میده یا مشکلات غیر عادی به وجود میاد که دیباگ کردن کد در این مواقع گاهی دیوانه کننده میشه ، در این موارد بهترین راه کار بررسی سورس ساعتی قبل هست یا نهایتا بیخیال شدن چند ساعت کار قبلی و سوئیچ به نسخه قبل !

این هم تجربه یک پروژه نزدیک 1,700,000 خط کدی ؛ اگر مورد دیگه ای به ذهنم رسید اضافه میکنم .


2-اگر روزانه 1000 خط کد نویسی کنید.
1000 خط کد مقدار چندان زیادی نیست ، چه بسا روزهایی تو شرکت شده که به شخصه خیلی بیشتر از این مقدار کد زدم .


مطمعن باشید همان پروژه 4 میلیون خطی را شما ( با کنار گذاشتن وقت و دانش ) با 20 میلیون خط هم نمی توانید کامل کنید. و یا بالعکس مطمعن باشید پروژه های 12 هزار خطی شما را با 3 هزار خط می توان پایه گذاری کرد. تا حد امکان کدهای خود را در داخل کلاس ها و توابع قرار دهید.
استدلال کاملا غلطی بود ...

موفق باشید .

BORHAN TEC
جمعه 31 شهریور 1391, 14:00 عصر
سلام
...
در مورد دوست خوبم آقا مجتبی:
آیا در این پروژه بزرگ شما از Dependency Injection و قابلیت هایی از این دست هم استفاده کرده اید؟ اگر جوابتان مثبت است لطفاً بگویید که استفاده از این قابلیت چقدر در ایجاد کدهای تمیز و چقدر در سرعت توسعه موثر بوده است؟؟؟
و یک سوال دیگر: تیم شما برای ساخت این پروژه از چند نفر تشکیل شده است و ساخت این پروژه از چند سال پیش شروع شده است؟ :متفکر:

Felony
جمعه 31 شهریور 1391, 18:47 عصر
بنده می خواستم تجربیات خودم را در این زمینه در اختیار شما قرار بدهم. اما متعصفانه لاوی سنگینی در تالار دلفی تشکل شده.
سعی کنید همیشه با استدلال صحبت کنید.
البته جای این صحبت ها نیست.
با برسی هایی که بنده در این تالار روی پست های شما انجام دادم به نتایج ناامید کننده ای رسیدم.
به قول آقای فردوسی پور اجازه میدید اسم این حرف هاتون رو بزارم سفسطه ؟!


لبته پاسخ به سوال دوستانی که دلفی را برتر از #C می دانند برای بنده مضحک است.(یا دوستانی که سوالاتی را دال بر برتری کدام یک را مطرح می کنند.)
:لبخندساده:


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

بارها تو پست های قبلیم به دوستانی مثل شما نکاتی رو گوشرد کردم ، دلیلی برای دوباره نویسی و حدر دادن وقتم نمیبینم .


حال شما قضاوت کنید :
برای نوشتن یک برنامه ساده مدیریتی چند خط کد می نویسید؟
خیلی برنامه های بیشمار نوشته نشده ای را می توان نام برد:
از مدیریت دیوانه خانه تا مدیریت مغازه تعمیر لوازم خانگی.
پروژه های ساده ای هستند.
نکته جالبی که به چشم می خورد این است که این پروژه ها را می توان با 1000 خط نوشت.
بیایید زمان ثبت نام این دو عزیز را تاکنون حساب کنیم.
اگر روزانه 1 پروژه را تکمیل کنند. 10000 پروژه تاکنون نوشته بودند.(البته خیلی پروژه های دیگر هم می توان زیر 1000 خط نوشت مانند بازی شوت یک ضرب و برنامه مدیریت پرینتر)
البته پروژه هایی که عرض شد مقداری مضحک بودند پروژه های خیلی بهتری هم می توان نوشت.
نمیدونم چند سالتون هست ولی با توجه به پروفایلتون فکر کنم سن سال کمی هم نداشته باشید ، برای این سن و سال که نوشتید این حرف خیلی نسنجیده و خام هست ، یک بار خودت دوباره بخونشون :لبخندساده:

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


@ شاهین جان ؛


آیا در این پروژه بزرگ شما از Dependency Injection و قابلیت هایی از این دست هم استفاده کرده اید؟ اگر جوابتان مثبت است لطفاً بگویید که استفاده از این قابلیت چقدر در ایجاد کدهای تمیز و چقدر در سرعت توسعه موثر بوده است؟؟؟
بله ، به خصوص در مورد ماژول هایی که نیاز به update از طریق اینترنت رو دارن خیلی تو پروژه کمکمون کرد .


و یک سوال دیگر: تیم شما برای ساخت این پروژه از چند نفر تشکیل شده است و ساخت این پروژه از چند سال پیش شروع شده است؟
پروژه ها ( سیستم مدیریت بیمارستان ( HIS ) و آزمایشگاه ) هستند ، اولی حدود 10 سال پیش و دومی حدود 18 سال پیش کلید خورده بودند ، سیستم مدیریت آزمایشگاه که تحت داس بوده و 5 سال پیش به نسخه ویندوز ارتقا پیدا کرده بود و طبیعتا از نو نوشته شده بود ، پس به عبارتی یک برنامه با طول عمر 10 سال و دیگری 5 سال که از لحاظ فنی از نظر من واقعا پیر و از کار افتاده شده بودن ، سیستم مدیریت آزمایشگاه از سال پیش که من وارد شرکت شدم با پیشنهاد من شروع به بازنویسی شد ( 3 نفره ، یکه عملا 2 نفر بودیم و یکی هم اون وسط عملا داشت کار یاد میگرفت و دست و پای ما 2 تا رو بسته بود وگرنه الان حیلی جلوتر بودیم ) ، الان هم 1 ماهی میشه که کار اصلی و تست تموم شده و در حال ارتقاء مرکز در سرتاسر ایران به برنامه جدید هستیم .

الان دارم از سر درد میمیرم ، اولین فرصت مطالب باقی مانده رو مینویسم .

موفق باشید .

BORHAN TEC
شنبه 01 مهر 1391, 08:50 صبح
تاپیک زیر خیلی برای من سودمند بود. به دوستانی که مشکل مرا دارند پیشنهاد می کنم که حتماً سری به این تاپیک بزنند:
http://barnamenevis.org/showthread.php?176184-%D8%AA%D8%AC%D8%B1%D8%A8%DB%8C%D8%A7%D8%AA-%D9%88-%D8%A7%D8%B4%D8%AA%D8%A8%D8%A7%D9%87%D8%A7%D8%AA-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%87%D8%A7%DB%8C-%D8%A8%D8%B2%D8%B1%DA%AF-%D8%B1%D9%88-%D8%A8%D8%A7-%D9%87%D9%85-%D8%A8%D9%87-%D8%A7%D8%B4%D8%AA%D8%B1%D8%A7%DA%A9-%D8%A8%DA%AF%D8%B0%D8%A7%D8%B1%DB%8C%D9%85