ورود

View Full Version : آموزش: درخواست ادامه گفتگوی فنی توسط مدیران محترم



ostovarit
یک شنبه 25 اردیبهشت 1390, 15:43 عصر
با سلام و خسته نباشید
ابتدا میخواستم از نویسندگان تاپیک" گفتگوی فنی شماره یک - اصول و قواعد کد نویسی" تشکر داشته باشم و درخواستی برای ادامه بحث دارم ...مطالب ارائه شده بسیار مفید بود ... با بسیاری از اصطلاحات اشنا شدم ...
و مشکلات زیادی رو در کدهام شناختم... هنوز بحث رو تموم نکردم و صفحه 4 هستم اما مشتاقم که این چنین تاپیک هایی رو مطالعه کنم خواهش دارم که گفتگوی فنی دوم رو هم اغاز کنید... به نظر من از این طریق (آموزش صحیح از پایه) که پیش گرفتید بزرگترین کمک رو به خوانندگان کردید.

علیرضا مداح
دوشنبه 26 اردیبهشت 1390, 09:40 صبح
سلام،
از اینکه اینکه این گفتگوها برای شما مفید بوده است، به شخصه بسیار خوشحالم،
اگر پیشنهادی در خصوص موضوع گفتگو یا شیوه ی اجرای گفتگو دارید، همینجا ارائه دهید،/

ostovarit
دوشنبه 26 اردیبهشت 1390, 10:03 صبح
سلام،
از اینکه اینکه این گفتگوها برای شما مفید بوده است، به شخصه بسیار خوشحالم،
اگر پیشنهادی در خصوص موضوع گفتگو یا شیوه ی اجرای گفتگو دارید، همینجا ارائه دهید،/

یادگیری برنامه نویسی رو در یک موسسه خصوصی اغاز کردم و بیشتر تجربی یاد گرفتم ... برای یک پروژه کوچیک بعد از نوشتن سناریو و طراحی پایگاه داده و فرم ها شروع به کد زنی میکنم و وقتی مطلبی رو نمیدونم سرچ میکنم و از سورسهای موجود الگو میگیرم... کار راه میافتاد ولی اصولی نیست ... نکاتی که در بحث فنی یک گفتید (مخصوصا Refactoring ) رو تمرین میکنم و سعی میکنم رعایت کنم ... اما از انتخاب کلاسها و متدها و روش ها مطمئن نیستم ... برای حل یک مسئله راه های مختلفی وجود داره و من مطمئن نیستم راه کوتاه رو میرم یا نه ... و ایا روشی که میرم از نظر مثلا سرعت بهینه هست؟ ... مثلا برای استخراج اطلاعات از پایگاه داده از یک SqlDatareader استفاده کنم یا LinQ ... یا مثلا برای ذخیره فلان متغییر با وجود اینکه در پروژه بانک اطلاعاتی موجود هست استفاده از فایل XML منطقیه یا اینکه یک تیبل جدید ایجاد کنم و کدام از نظر سرعت بهینه تره... من بلدم با پایگاه داده و فایل XML به خوبی کار کنم ولی نمیدونم از کدوم استفاده کنم... و موارد دیگه که در کار برخورد میکنم و از هر روشی که بلد ترم میرم جلو! تا الان من فقط به مقصودم رسیدم ولی به کدهام مطمئن نبودم...

r00tkit
دوشنبه 26 اردیبهشت 1390, 10:28 صبح
جا داره همین جا از شما و استاد موسوی تشکر کنم . واقعا بخش گفتگوی فنی بخش جذابی بود

مهم ترین سوالی که دارم اینه : ایا کدی که دارم برای این کار می زنم یه برنامه نویس تو شرکتی مثل گوگل هم برای این کار همین جوری کد می زنه ؟ نمی دونم واقعا کدی که زدم بهترین روش هستش ؟ شاید به جز این روش روش های دیگه ای/بهتری باشه؟ ( سوال اخر بعد کلی سرچ هم بازم منو اذیت می کنه ).

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

mehdi.mousavi
دوشنبه 26 اردیبهشت 1390, 11:40 صبح
با سلام و خسته نباشید ابتدا میخواستم از نویسندگان تاپیک" گفتگوی فنی شماره یک - اصول و قواعد کد نویسی" تشکر داشته باشم

جا داره همین جا از شما و استاد موسوی تشکر کنم . واقعا بخش گفتگوی فنی بخش جذابی بود

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


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


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

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


نوشتن سناریو...
طراحی پایگاه داده...
طراحی فرم ها...

آیا می دونید برای هر کدوم از این بخش ها، چقدر کتاب وجود داره؟ آیا می دونید UI یک نرم افزار استاندارد، باید حاوی چه ویژگی هایی باشه؟ (که عموما اون ویژگی ها نادیده گرفته میشه! بطور مثال، میدونید کی باید از علامت ! در انتهای Label یک Menu Item در Menubar استفاده بشه؟) آیا می دونید طراحی پایگاه داده، کاری فنی هستش و ما عموما اونو به طراحی چند جدول و ارتباط اونها با همدیگه محدود کرده ایم؟ آیا می دونید طراحی یک سناریو، اصول و ضوابطی داره و آیا مطلعید که هر یک از این بخش ها، میتونن مستقیما در بخش های دیگه تاثیر بذارن؟ "الگو گرفتن" از Source های موجود، کاری پسندیده هستش، اما Copy کردن کدهای موجود، بدون دونستن عمیق اونها، بیش از اینکه به برنامه نویس کمک کنه، موجبات سقوط اونو در طول پروژه مهیا میکنه. به چالش کشیدن مطالبی که گمان می کنید به اونها مسلط هستید، بهترین روش یادگیری هستش.



نکاتی که در بحث فنی یک گفتید (مخصوصا Refactoring ) رو تمرین میکنم و سعی میکنم رعایت کنم ... اما از انتخاب کلاسها و متدها و روش ها مطمئن نیستم ... برای حل یک مسئله راه های مختلفی وجود داره و من مطمئن نیستم راه کوتاه رو میرم یا نه ...

حل مساله با طی کوتاه ترین راه، لزوما بهترین روش حل یک مساله نیست. به خصوص در طراحی یک نرم افزار. شما باید دیدی کلی نسبت به یک سیستم نرم افزاری و اجزای اون داشته باشید تا گامهایی که در طول پروژه بر میدارید، شما رو به هدف نهایی برسونه. نرم افزاری رو در نظر بگیرید که حاوی Pane های مختلف هستش به گونه ای که انتخاب یک Node در Pane شماره 2، باید باعث Update شدن Control ای در Pane شماره 1 بشه. اینجا کوتاه ترین راه، برقراری ارتباط مستقیم بین Control مورد نظر در Pane شماره یک و Node مورد نظر در Pane شماره 2 هستش. یعنی کافیه تا Reference به کنترل مورد نظر در اختیار Node موجود در Pane 2 باشه. (که به سادگی پاس کردن یک Reference از طریق Constructor میسر و قابل پیاده سازیه).

اما آیا این روش (یعنی کوتاه ترین راه حل این مساله)، روشی اصولی هستش؟ آیا اگر تعداد این Pane ها زیاد بشه، کد ما به یک spaghetti code تبدیل نخواهد شد؟ وقتیکه در طول پروژه، با Workflow پیچیده تری روبرو بشیم، تکرار این روش کوتاه ما رو در جهت صحیحی رهنمون نمیشه! وقتی اجراری برنامه به هر دلیلی با مشکل مواجه بشه، اونوقت پیدا کردن ایراد کابوسه. اونجاست که با خودمون میگیم: "ای وای. چرا من Reference به فلان کلاس رو به 20 تا Form دادم؟ چرا فلان متود رو Public گذاشتم؟ چرا ..." و اونوقت هر تغییری در یک بخش از برنامه (اگر فرض کنیم که فقط در یک نقطه باشه)، به احتمال بسیار زیاد باعث از کار افتادن بخش های دیگه ای از سیستم میشه و این روند تا نا کجا آباد ادامه پیدا میکنه... بنابراین، حل یک مساله با کوتاه ترین روش، برخی اوقات میتونه بزرگترین صدمات رو در پی داشته باشه.


و ایا روشی که میرم از نظر مثلا سرعت بهینه هست؟ ...
Performance Tuning خودش مقوله جدایی هستش و مستلزم شناخت دقیق کدهای تولید شده Compiler هستش. در کل، مواردی که نام بردید یک شبه حاصل نمیشه و باید عمری رو برای رسیدن به (متاسفانه) تنها بخشی از اونها صرف کنید.


مثلا برای استخراج اطلاعات از پایگاه داده از یک SqlDatareader استفاده کنم یا LinQ ...
برای پاسخ دادن به این سوال، باید بدونید LINQ چطور نوشته شده، و در لایه های زیرین خودش چطور کار میکنه.


یا مثلا برای ذخیره فلان متغییر با وجود اینکه در پروژه بانک اطلاعاتی موجود هست استفاده از فایل XML منطقیه یا اینکه یک تیبل جدید ایجاد کنم و کدام از نظر سرعت بهینه تره...

این ها بسته به نیازهای پروژه تعیین میشه.


من بلدم با پایگاه داده و فایل XML به خوبی کار کنم
مطمئنید؟ یادتون باشه، مسائلی رو که فکر می کنید به اونها تسلط دارید رو به چالش بکشید تا متوجه بشید چقدر در واقعیت به اونها تسلط دارید. در کل، مسائلی که مطرح کردید نیاز به صرف وقت و مطالعه بسیار زیاد در زمینه های گوناگون داره. قضاوت صحیح (اینکه این روشه کارآمد هست یا نه، Performance خوبی داره یا نه و ...) حاصل تجربه هستش و تجربه عموما بواسطه قضاوت های نادرست حاصل میشه.


مهم ترین سوالی که دارم اینه : ایا کدی که دارم برای این کار می زنم یه برنامه نویس تو شرکتی مثل گوگل هم برای این کار همین جوری کد می زنه ؟ نمی دونم واقعا کدی که زدم بهترین روش هستش ؟ شاید به جز این روش روش های دیگه ای/بهتری باشه؟ ( سوال اخر بعد کلی سرچ هم بازم منو اذیت می کنه ).

این سوال بسیار خوبه، اما یادتون باشه لزوما افرادی که در شرکت های بزرگ کار میکنن نیز همواره بهترین پاسخ ها رو ندارن! اگر نوشته های Hanselman رو (بطور مثال) دنبال کنید، می تونید هر از گاهی مطالبی در نوشته هاش ببینید که باورتون نمیشه این حرف S. Hanselman باشه. (که البته با تذکری در Comment ها، اون نوشته تغییر میکنه). شما همیشه می تونید الگوریتم مناسب رو، جایگزین الگوریتم قدیمی کنید فقط مهم اینه که این میل در شما وجود داشته باشه و بطور فعال، بدنبال روش های بهینه تر حل یک مساله باشید.


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

موفق باشید.

ostovarit
دوشنبه 26 اردیبهشت 1390, 13:37 عصر
از راهنمایی و نکاتی که گفتید ممنون ...



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



به چالش کشیدن مطالبی که گمان می کنید به اونها مسلط هستید، بهترین روش یادگیری هستش.
.

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



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