- ۷ نظر
- ۱۵ دی ۹۳ ، ۱۷:۰۸
ترجمه متن مصاحبه ها با بزرگان مهندسی نرم افزار دنیا در سایت
دوره کارگاهی آموزش برنامه نویسی
کارگاه مهندسی نرم افزار با رویکرد تحلیل و طراحی
جلسه ی اول کلاس رو با تردید زیادی اومده بود؛ نمیدونست میتونه از پسش بر بیاد یا نه؟
انگیزشو از حضور در کلاس اینطور تعریف کرد که: دیدم دوستانم ثبت نام کردند گفتم من هم میرم ببینم چی میشه؟
در پایان دوره بود که زودتر از همه تمرین هارو حل می کرد و الگوریتم های دیگه ای که به ذهنش رسیده بود را چک می کرد؛
خودش میگفت: " از اینکه این همه مدت بدون آشنایی درست و انگیزه ی کافی, با برنامه نویسی قهر بودم پشیمونه و الان دیگه دلم نمیخواد این رشته را عوض کنم"
این ها تجربه ی یکی از دانشجویان دوره کارشناسی که دوره ی آموزشی برنامه نویسی را گذرانده بود و بعد از دوره هم چند نفر از دوستانش را تشویق به شرکت کرد.
دوره آموزشی ویژه مفاهیم برنامه نویسی
1. مهارت تعریف مسئله
2. مهارت تحلیل مسئله
3. طراحی راه حل
4. پیاده سازی راه حل به زبان برنامه نویسی
5. تسط بر مفاهیم پایه ای زبان های برنامه نویسی
در مورد این دوره بیشتر بدانید در ادامه مطلب ....
گاهی اوقات در گزارشات فیلدی قرار داد که مقدار آن از نوع Boolean می باشد. شاید بد نباشد که به ازای مقادیر True یک علامت "تیک" و به ازای مقادیر False یک علامت "ضربدر" نمایش دهیم. اما چگونه؟
مقادیری از این نوع که توسط به طور مثال سیکوئل سرور برگردانده می شوند به صورت کلمات "True" یا "False" می باشند.
برای این کار چند راه حل وجود دارد.
اول
لازم هست که یک Formula Field روی فرم قرار دهیم. روی فیلد کلیک راست می کنیم و Edit Formula را انتخاب می کنیم و عبارت ذیل را در بخش فرمول می نویسیم. فرض می کنیم اسم فیلد Table.MyField هست.
اگر در بین فونت های دیگر جستجو کنیم؛ شکل های جالبی برای فیلدهای گزارش می توانیم پیدا کنیم
اگر شما هم از این ترفند استفاده می کنید؛ به اشتراک بگذارید.
زمانی که یک CrystalReportViewer را روی فرم قرار میدهید، یک قسمت سفید رنگ، در سمت چپ خود نمایی میکند که در زمان اجرای برنامه،
بسته به اینکه از گروپ فیلد استفاده کرده باشید یا نه و همچنین مواردی دیگر، ممکن است حاوی یک ساختار درختی باشد.
برای اینکه، این قسمت به صورت پیش فرض نمایش داده نشود باید در پنجره Property Window مقدار ToolPanelView را برابر با False قرار دهید.
همچنین می توان عرض آن را تغییر داد.
نکته مهمی در این پست نیست، فقط اینکه من خودم در نت گشتم، منتهی همگی پاسخ ها به مخفی کردن دکمه مربوط به نمایش این ToolPanel اشاره داشتند.
حس کردم جای یک مطلب فارسی خالیست. به همین سادگی!!!!
همه ی ما تقریبا حوصله ی خواندن کتاب های حجیم و تخصصی را نداریم؛ و یک کتاب خلاصه و کاربردی و کوچک را بهتر ترجیح می دهیم؛ البته این چیزی از ارزش کتاب های جامع و مرجع کم نمی کند؛ اما به هر حال آن چه که لازم داریم خیلی اوقات در کتاب های کاربردی و سبک نیز یافت می شود و چه بسا برای شروع بهترین گزینه همین کتاب ها باشند.
اگر علاقمند به یادگیری
Node.js
jQuery
BootStrap
SQL Server Analysis Service
WPF
C++
Assembly
Objective-C
و ... هستید؛ پیشنهاد می کنم سری کتاب های Succinctly را دریافت کنید.
طی هفته ی اخیر, مجبور بودم برای رضایت مشتری تن به ایجاد تغییر و اضافه کردن یک امکان جدید به نرم افزاری که با کدهای آن اصلا آشنایی نداشتم؛ بدهم. و اعتراف می کنم که قطعا این کار یکی از کابوس های هر برنامه نویس می تواند باشد. امروز زمانی که مراحل آخر کار را طی می کردم؛ به چند مشکل برخورد کردم ؛ که تصمیم گرفتم تجربه ی آن را برای شما هم بنویسم.
چند نکته که برای کد نویسی حتما باید رعایت بشود؛ در غیر اینصورت چند ماه بعد که به سراغ کدها بروید؛ به خون نویسنده ی آن تشنه می شوید.
1. نام گذاری صحیح متغیر ها, توابع و پارامتر ها
امروز در حال بررسی کد و در حقیقت مهندسی معکوس بودم که در عین ناباوری؛ متوجه شدم که تابعی با نام GetCustomerContracts مقداری از جنس boolean بر می گرداند. کار این تابع پر کردن یک combobox بود حاوی لیست قرارداد های یک مشتری, و در صورتی که این مشتری قرار دادی نداشت, مقدار false برگشت داده می شود.
به نظر من نامگذاری مثل HasCustomerContrast یا اسامی سوالی دیگری نیز؛ چندان مناسب این تابع نیستند؛ به این دلیل که در حقیقت این تابع باید تنها یک کار انجام دهد؛ تا از اسم آن مشخص شود که کاری که تابع انجام می دهد چیست؟
2. مدیریت صحیح خطا Error Handling
در این کدها چیزی که به وفور دیده میشد؛
بلوک
try
{
// some code;
}
catch
{
//some code;
}
بود که بزرگترین اشکال آن؛ عدم نمایش پیام خطای صحیح و همچنین عدم استفاده از پراپرتی Message شی Exception بود.
شدیدا توصیه می کنم که حتما به این شکل استفاده بشود
try
{
// some code;
}
catch( Exception ex)
{
//some code;
// for example
MessaBox.Show(ex.Message);
}
به جای نمایش پیام خطا می توانید آن را در محلی مناسب ثبت نمایید تا کاربر نهایی و یا حتی خود توسعه دهندگان بتوانند به دلایل خطا حین اجرای برنامه پی ببرند.
3. نکته ی سوم در زمینه T-SQL است؛ امروز در حین دیباگ برنامه به مشکلی برخورد کردم؛ که تنها با نمایش پیام خطای شی Exception متوجه آن شدم.
مشکل این بود که نام دیتابیس در دستور select نوشته شده بود.
در نظر بگیرید
select id, name, registerdate from MyDataBase.dbo.Users
به طور کلی مشکلی نباید وجود داشته باشد. اما زمانی که این sp به یک محیط دیگر منتقل می شود و یا اینکه همان دیتابیس دچار تغییر نام می شود؛ این کوئری کار نخواهد کرد.
بنابراین همیشه این نکته را در نظر داشته باشید که نام دیتابیس ( که بعید نیست دچار تغییر شود؛ به دلایل مختلف) را در کوئری ها به کار نبرید.
بنابر این کوئری فوق به شکل ذیل صحیح و مطمئن تر خواهد
select id, name, registerdate from MyDataBase.dbo.Users
قوانین نام گذاری؛ رعایت اصول طراحی که در حالت کلی برای تسهیل امور هستند و همگی بر اساس دنیای واقعی الهام گرفته شده و مطرح شده اند؛ و همچنین در نظر گرفتن مواردی که ممکن است دچار تغییر شوند و باید از وابستگی به آن ها اجتناب کرد, می تواند به دوستی بیشتر بین شما و کد نویس قبلی کمک کند!
چند روز پیش وقتی که یک گزارش را برای نمایش کاربران یک سیستم طراحی کردم و خواستم با Crystal Report پیاده سازی کنم،
هنگام معرفی گزارش مربوطه به Crystal Report Viewer با پیغام زیر مواجه شدم.
Unable to find the report in the manifest resources. Please build the project, and try again
که تا به حال با آن مواجه نشده بودم.
پس از کمی جستو به این جواب رسیدم.
در فایل myReport.cs در قسمت FullResourceName Property نام کامل منبع اشتباه بود که باید به شکل ذیل تصحیح بشود.
Namespace+ClassName+.rpt
پس از اینکه، مدت زیادی کتابخانه ای برای تبدیل تاریخ شمسی به میلادی و یا بالعکس را جستجو کردم، و نمونه های مختلف را دیدم و به کار بردم،
حالا نوبت به این رسیده بود که تاریخ شمسی که کاربر وارد کرده است را نیز از نظر صحت، بررسی کنم.
حاصل کار، شد یک متد همراه با باگ، که توسط همکار محترم، خانم محمد باقری[]، تکمیل گردید، برای تشکر از ایشان، حاصل دسترنج ایشان را اینجا، ارائه کردم!!!