راه های دسترسی به داده در دات نت فریم ورک!

29 11 2009

در اکثر برنامه های کامپیوتری نیاز به ذخیره و بازیابی داده ها وجود دارد. داده هایی که بدون آن ها سیستم نرم افزاری ما معنایی ندارد. برنامه نویسان معمولاً راه های مختلفی برای این کار سراغ دارند. کسانی که با دات نت فریم ورک برنامه نویسی می کنند راه های مختلفی برای دسترسی به داده ها دارند. در این مطلب با تکنولوژی های مایکروسافت برای این کار آشنا خواهیم شد و سه ORM معروف دنیای دات نت را معرفی خواهیم کرد. مایکروسافت انتخاب های زیادی برای دسترسی به داده ها به برنامه نویسان دات نت می دهد که شما باید با بررسی آن ها و با توجه به نیازهای خودتان یکی از آن ها را انتخاب کنید.

ADO.NET

ADO.NET مجموعه ای از کامپوننت هاست که برنامه نویسان می توانند از آن ها برای برقراری ارتباط با دیتابیس های مختلف استفاده کنند. ADO.NET بخشی از کتابخانه کلاس های پایه دات نت فریم ورک است که توسط مایکروسافت توسعه داده می شود. برنامه نویسان به صورت گسترده از این تکنولوژی برای دسترسی و دستکاری داده های ذخیره شده در یک دیتابیس رابطه ای استفاده می کنند. ADO.NET می تواند با اکثر دیتابیس های موجود کار کند، هر چند به صورت پیش فرض در دات نت فریم ورک فقط فراهم کننده های SQL Server، OleDb و Odbc وجود دارد، افراد و شرکت های دیگر فراهم کننده های دیتابیس های دیگر را برای دات نت ایجاد کرده اند.

برای هر Provider کامپوننت هایی وجود دارند که برنامه نویس با استفاده از آن ها به مقصودش می رسد. به طور مثال برای استفاده از SQL Server در روش ADO.NET کامپوننت هایی مانند SQLConnection و SQLCommand وجود دارد که با استفاده از آن ها می توانید یک دستور SQL را روی داده های موجود در یک دیتابیس SQL Server اجرا کنید. با SQLConnection به دیتابیس موجود در SQL Server وصل می شویم و با استفاده از یک SQLCommand می توانیم یک عبارت T-SQL را که می تواند دستور INSERT, UPDATE, DELETE یا SELECT باشد یا حتی یک Stored Procedure یا عبارت DDL باشد را برای مقصود خاصی روی دیتابیس اجرا کنیم. چون ADO.NET در مورد سینتاکس دیتابیس چیزی نمی داند، دستورات را به صورت یک رشته ساده به SQLCommand می دهیم و این شیء نیز به صورت مستقیم به دیتابیس دستور می دهد.

string query = "SELECT * FROM tblCustomers";
SqlConnection con = new SqlConnection(cnnString);
SqlCommand command = new SqlCommand(query, con);
con.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Response.Write(reader.GetInt32(0) +
reader.GetString(1));
}

نکته ای که باید در مورد ADO.NET بدانید این است که برای استفاده از هر سیستم دیتابیس رابطه ای، مجموعه کامپوننت های جدایی وجود دارد. در مثال بالا از آبجکت های مربوط به SQL Server استفاده کردیم. اگر بخواهید مثلاً از یک دیتابیس اوراکل در برنامه خود استفاده کنید، بایستی از کامپوننت های مربوط به اوراکل استفاده کنید. خوشبختانه تمام این کامپوننت ها بر پایه یک Interface ساخته شده اند، این یعنی شما می توانید با استفاده از کلاس DbProviderFactory برنامه ای بسیازید که با چند نوع دیتابیس مختلف کار کند.

Linq to SQL

مایکروسافت با دات نت فریم ورک 3.0 و 3.5 یک ORM به نام Linq to SQL را به عنوان بخشی از پروژه LINQ خود عرضه کرد. این شرکت مدت ها پیش از آن قول داده بود که یک ORM برای دات نت فریم ورک طراحی کند اما تا نسخه 3.0 دات نت فریم ورک خبری از آن پروژه نشد. Linq to SQL به شما اجازه می دهد که کوئری های LINQ را روی دیتابیس های SQL Server اجرا کنید. علاوه بر این از یک Mapping Framework بهره می برد که به برنامه نویسان اجازه Map کردن جدول های یک دیتابیس را به کلاس ها و بالعکس می دهد. این کار در ویژوال استادیو می تواند به صورت ویژوال یا کدنویسی انجام گیرد. به این صورت که برای هر جدول از دیتابیس یک کلاس تعریف می شود که هر ستون از یک جدول به عنوان یک Property درون آن کلاس تعریف می شود.

نمایی از ابزار طراحی ویژوال Linq to SQL

به مثال زیر توجه کنید :
public class Customer
{
[Column(Name="CustomerID",IsPrimaryKey = true)]
public long ID
{
get { return _ID;}
set { _ID = value;}
}
[Column(Name = "CustomerName")]
public string Name
{
get { return _name; }
set { _name = value; }
}
}

کلاس بالا به جدول tblCustomers که دارای دو ستون CustomerID و CustomerName است Map می شود. قبل از اینکه بخواهید از Linq to SQL استفاده کنید باید این کلاس ها را تعریف کنید. ویژوال استادیو 2008 دارای ابزاری است که به صورت ویژوال به شما امکان Map کردن جدول های یک دیتابیس SQL Server را به کلاس های دات نت می دهد. این ابزار می تواند به صورت اتوماتیک کلاس های مورد نیاز شما را از روی مدل دیتابیس بسازد، و حتی اجازه تغییرات دستی و ایجاد Viewهای مختلف از دیتابیس را به شما می دهد. عملیات Mapping با استفاده از DataContext (که یک رشته اتصال به سرور نیاز دارد) پیاده سازی می شود. سپس شما قادر خواهید بود کوئری های LINQ خود را روی دیتابیس موجود در سرور اجرا کنید، که البته این کوئری ها ابتدا به دستوارت T-SQL متناظر ترجمه و سپس روی دیتابیس مورد نظر اجرا می شوند.

Entity Framework

Entity Framework یک فریم ورک ORM برای دات نت فریم ورک است که نسخه یک آن به همراه دات نت فریم ورک 3.5 سرویس پک 1 عرضه شد اما مورد استقبال توسعه دهندگان قرار نگرفت. نسخه 2 این فریم ورک به صورت بتا به عنوان بخشی از ویژوال استادیو 2010 قابل دسترس است. ADO.NET Entity Framework نام اصلی این فریم ورک است و جزئی از تکنولوژی ADO.NET است.

ابزار طراحی Entity Framework در ویژوال استادیو

ابزار طراحی Entity Framework در ویژوال استادیو

Entity Framework مدل رابطه ای موجود در یک دیتابیس را به مدل مفهمومی تبدیل می کند و آن را به اپلیکیشن ما تحویل می دهد. در مدل رابطه ای عناصر ترکیبی از جداول هستند، به همراه کلید های اصلی و خارجی که جدول ها را به هم مرتبط می سازند. برعکس آن، انواع موجودیت ها مدل مفهومی داده را تعریف می کنند. انواع موجودیت  اجتماعی از چند فیلد است (هر فیلد به یک ستون از دیتابیس Map می شود) و می تواند شامل اطلاعات از چند جدول فیزیکی باشد. انواع موجودیت می توانند به هم مرتبط باشند، مستقل از ارتباطاتی که در مدل فیزیکی دارند. شمای منطقی و نگاشت (mapping) آن به شمای فیزیکی به عنوان یک Entity Data Model یا EDM نمایش داده می شوند که مشخصات EDM در یک فایل XML ذخیره می شود. Entity Framework از EDM برای انجام عملیات نگاشت و دادن قابلیت کار با موجودیت ها به اپلیکیشن استفاده می کند. Entity Framework اطلاعات مورد نیاز هر موجودیت را با Join کردن چندین جدول از مدل فیزیکی (دیتابیس) بدست می آورد. هنگامی که اطلاعات یک موجودیت آپدیت می شود، Entity Framework بررسی می کند که داده ها مربوط به کدام یک از جدول های موجود در دیتابیس هستند، سپس آن ها را با دستور SQL مناسب آپدیت می کند.

هر چند Entity Framework و Linq to SQL بسیار شبیه به هم به نظر می رسند، هر دو ابزارهایی برای طراحی گرافیکی و ویزاردی برای نگاشت یک دیتابیس به مدل شیء گرا دارند و هر دو می توانند از کوئری های LINQ برای مقصود خاصی استفاده کنند، اما با هم تفاوت هایی هم دارند. بیان تفاوت های این دو در این مطلب جایی ندارد.

NHibernate

نمی توان در مورد ORMها در دات نت صحبت کرد اما نام NHiernate را ذکر نکرد. NH یک فریم ورک ORM اوپن سورس برای دات نت فریم ورک است که از روی پروژه موفق Hibernate جاوا وارد دنیای دات نت شد. توضیحات بیشتر در مورد NHibernate توضیحات اضافی است، زیرا این فریم ورک هم وظیفه ORMهای دیگر را انجام می دهد. اکثر برنامه نویسانی که از NH برای نگاشت استفاده می کنند، ابتدا کلاس های خود را تعریف می کنند و سپس با استفاده از یک فایل XML آن ها را به جدول های دیتابیس Map می کنند. Linq to SQL و Entity Framework برخلاف NHibernate از روش Model-first یا مبتنی در دیتابیس استفاده می کنند، به این معنی که هر دو ORM تصور می کنند شما دیتابیسی در اختیار دارید که می خواهید آن به تعدادی آبجکت Map کنید.

در مورد Nhibernate بیش از این صحبت نمی کنم، آقای وحید نصیری در اینجا به صورت کامل در مورد این ORM محبوب نوشته است.

farasun.wordpress.com

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





اینترنت اکسپلورر 9 به دنبال رقیبان است

26 11 2009

چهارشنبه هفته پیش در کنفرانس PDC، مایکروسافت در مورد نسخه جدید مرورگر خود Internet Explorer 9 جزئیاتی را شرح داد. البته این توضیحات بیشتر مربوط به توسعه دهندگان بود تا کاربران نهایی، اما با نتیجه گیری از آن می توان آینده خوبی را برای این مرورگر تصور نمود.

اعضای تیم IE شروع به کار روی نسخه جدید این مرورگر کرده اند، در حالی که نسخه 8 این مرورگر با قابلیت های جدیدی که ارائه میکرد نتوانست جای خود را میان کاربران اینترنت پیدا کند. این موضوع دلایل زیادی دارد. یکی از مهمترین دلایل عدم استفاده کاربران اینترنت از این مرورگر، سرعت پایین تر آن نسبت به سایر مرورگر هاست. این که مرورگرهای کروم و فایرفاکس از IE سریع تر هستند را خود مایکروسافت هم قبول دارد. از دید طراحان وب مهمترین مشکل IE پشتیبانی نکردن از برخی استانداردهای وب است. وقتی که مرورگرهای فایرفاکس، کروم و اپرا از HTML 5 و CSS 3 پشتیبانی می کنند اما IE 8 این کار را نمی کند، باعث آزردگی خاطر طراحان وب می شود. مشکل بعدی IE کارایی پایین در اجرای کدهای جاوا اسکریپت است. تمام سایت های وب 2.0 از جمله Gmail و Facebook از مقداری زیادی کدهای جاوا اسکریپت استفاده می کنند، که باعث می شود کاربران پاسخ های سریعتری از سرور دریافت کنند. IE با کارایی کم در این زمینه از رقبای خود بسیار عقب است.

شرکت مایکروسافت و اعضای تیم IE خیلی بهتر از من و شما به این مشکلات واقف هستند. به همین خاطر برنامه ریزی هایی برای IE 9 دارند تا هم کاربران نهایی و هم طراحان و توسعه دهندگان وب را راضی کنند.

سرعت

مهمترین هدف مایکروسافت برای ارائه نسخه 9 مرورگرش، تسریع در بارگذاری صفحات وب است. این شامل تسریع در رندر کردن صفحات وب با استفاده از قابلیت های سخت افزاری مثل کارت گرافیک و بهبود کارایی کدهای جاوا اسکریپت می شود. هرچند بهبود کارایی کدهای جاوا اسکریپت معیار دقیقی برای تسریع بارگذاری صفحات وب نیست اما به دلیل استفاده وب اپلیکیشن ها از جاوا اسکریپت و فراگیر شدن آن در وب سایت های مبتنی بر وب 2.0 آیتم بسیار مهمی هم برای کاربران نهایی و هم برای توسعه دهندگان وب است. IE 7 و IE 8 در زمینه کارایی جاوا اسکریپت خیلی عقب تر از رقیبان خود هستند. تیم IE در وبلاگ خود گرافی را منتشر کرده که کارایی جاوا اسکریپت در مرورگرهای مختلف را نمایش می دهد. در این گراف که در زیر مشاهده می کنید، IE 9 با فاصله کمی عقب تر از رقیبان خود کارایی جاوا اسکریپت را افزایش داده است.

کارایی اجرای جاوا اسکریپت در مرورگرهای مختلف

همانطور که مشاهده می کنید هنوز هم IE 9 نتوانسته در این زمینه رقیبان خودش را شکست بدهد. البته باید تا ارائه نسخه نهایی این مرورگر صبر کرد و بعد نظر داد. هر چند موزیلا و گوگل در این مدت بیکار نخواهند نشست و حتماً کارایی مرورگر خودشان را افزایش خواهند داد.

پشتیبانی از استانداردهای وب

در سال های اخیر مرورگر اینترنت اکسپلورر به جز دردسر و مشکل برای طراحان و توسعه دهندگان وب، چیز دیگری به ارمغان نیاورده است. مایکروسافت در این نسخه قول داده است که از HTML 5 و CSS 3 به طور کامل پشتیبانی کند. این در حالی است که مرورگرهای کروم و فایرفاکس در آخرین نسخه خود از HTML 5 و CSS 3 به طور کامل پشتیبانی می کنند. این خبر بسیار خوبی برای طراحان وب است که بالاخره مایکروسافت قصد اضافه کردن پشتیبانی کامل از استانداردهای وب را دارد. البته زیاد هم به این قضیه خوش بین نباشید! در حال حاضر IE 9 از اکثر قابلیت های CSS 3 پشتیبانی می کند اما در زمینه HTML 5 پیشرفت کندی دارد. بحث های زیادی برای پشتیبانی از HTML 5 در مرورگر IE 9 وجود دارد، زیرا مایکروسافت هنوز در این زمینه مصمم نیست. به هر حال این قضیه ممکن است باعث شکست IE در مقابل رقیبانی مثل گوگل کروم که از استانداردهای HTML 5 پیروی می کند، شود.

استفاده کمتر از CPU

در اینترنت اکسپلورر 9 وظیفه رندر کردن گرافیک ها و متن های موجود در یک صفحه وب به جای اینکه بر دوش CPU باشد بر دوش کارت گرافیک خواهد بود. این یعنی استفاده کمتر از CPU وقتی که کاربر در حال مشاهده صفحاتی با گرافیگ های غنی و متن های با کیفیت است. IE برای این کار از DirectX استفاده می کند. این یعنی رندر کردن سریعتر صفحات وب، مخصوصاً در کامپیوترهای با کارت گرافیک قوی.

farasun.wordpress.com

به هر حال چه از IE خوشمان بیاید و چه خوشمان نیاید، این مرورگر سهم عمده بازار مرورگرهای وب را در اختیار دارد. چون روی هر PC جدیدی نصب است و کاربران تازه وارد، اینترنت را با این مرورگر می شناسند. اکثر کارشناسان و کاربران حرفه ای وب اعتقاد دارند که Internet Explorer مرورگر مناسب و استانداردی نیست. مایکروسافت با عرضه نسخه بعدی مرورگرش وارد عرصه تازه ای از رقابت با مرورگرهای پرقدرت فایرفاکس و کروم می شود. این رقابت در آخر به نفع کاربران تموم خواهد شد، زیرا هر کدام از طرفین سعی می کنند مروگری بهتر، سریع تر، امن تر و سازگار با استانداردهای روز وب را عرضه کنند. باید منتظر ماند و دید که آیا IE 9 می تواند شکست های قبلی مایکروسافت را جبران کند!؟ نظر شما چیست؟





از موقعیت خود به عنوان یک برنامه نویس راضی هستید!؟

18 11 2009

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

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

ترتیب مطالب بر اساس تاریخ فرستادن جواب های دوستان است.

وحید نصیری نویسنده وبلاگ x.NET Tips

از پويايي و خلاقيت موجود در دنياي IT لذت مي‌برم و به همين دليل در اين رشته مشغول به فعاليت شده‌ام. پاسخ دادن به تعدادي از سؤالات شما جنبه سياسي پيدا مي‌كنند. تا قبل از دولت فعلي وضع بهتر بود و پروژه بيشتر بود. الان وضع خيلي نسبت به قبل تفاوت كرده و پروژه كمتر شده (خيلي كمتر). به همين دليل روي اين صنف هم مسلما اين مسايل بدون تاثير نبوده.از موقعيت خودم به عنوان برنامه نويس راضي هستم. از نظر مالي تا حدودي راضي هستم و عرض كردم كه دولت فعلي كار ما را تحت تاثير شديد قرار داده است.

استرس عمده كاري من تحويل دادن درخواست‌هاي جديد در اسرع وقت است (زمانيكه درخواست مي‌دهند يعني تا يكي دو ساعت ديگر بايد كار آماده باشد!) و همچنين اعمال تغييرات جديد به سيستمي مفصل كه شامل بازنويسي قسمت‌هاي عمده آن مي‌شود. در اين حالت واقعا جمع كردن يك سيستم بزرگ هنرمندي خاصي را لازم خواهد داشت (و پر استرس). بعلاوه اين مساله سبب شده كه ساعت كاري خاصي براي من وجود نداشته باشد و تعطيل و غير تعطيل و ساعت 11 شب و امسال آن هم جزئي از زندگي كاري من شده است.

تفاوت مهم اين شغل با شغل‌هاي ديگر پويايي آن است. تا چند سال قبل مثلا asp كلاسيك وجود داشت، اما الان ASP.Net مطرح شده و جاي آن‌را گرفته. تا مدتي بعد هم ASP.Net MVC آن‌را حل و جذب خواهد كرد و web forms asp.net حالت از مد افتاده asp كلاسيك را پيدا مي‌كند. تمام اين‌ها مستلزم سعي و كوشش و مطالعه بسيار زياد است و گرنه خيلي زود بازنشسته خواهيد شد.

مشكل مهمي هم كه اين پويايي براي ما در داخل ايران به همراه داشته، نبود منابع آموزشي به روز است. الان چندتا كتاب فارسي در مورد ASP.net MVC‌ داريم؟ در مورد WPF چطور؟ در مورد تازه‌هاي SQL Server 2008 چي؟ در مورد entity framework كتابي در بازار كتاب‌هاي فارسي هست؟ و …. تمام اين‌ها سبب مي‌شود كه به روز كردن دانش اين صنف در ايران به شدت با كندي مواجه باشد.

و در پايان بايد عرض كنم كه بودن در اين رشته سن و سال خاصي را طلب نمي‌كند و تفاوت كار يك برنامه نويس با بالاي 10 سال سابقه رو خيلي خوب مي‌شود از مقايسه كدهاي او با كدهاي خام يك تازه كار درك كرد. همين فرد با سابقه پس از مدتي به اندازه كافي ابزار براي سرعت بخشيدن به كارش اختراع كرده كه بتواند با جواني با حوصله‌تر به سادگي و حتي در زمان كمتري رقابت كند و كار بهتري را نيز ارائه بدهد.

سالار خلیل زاده نویسنده وبلاگ نوشته های یک برنامه نویس

براي بررسي راضي بودن از شغل برنامه نويسي تو ايران بايد يه مورد مهم رو در نظر بگيريم. اول موضوع مربوط به موقعيت برنامه نويس تو شهرش هست. اگر فرض ما شهرستان باشه در اين صورت قضيه با زماني که فرد تو تهران باشه خيلي فرق مي کنه.
چون خودم من هم تو شهرستان هستم سعي مي کنم با اين فرض ها و سرانجام وضعيت خودم جواب بدم.

از اينکه برنامه نويس هستيد راضي هستين يا نه؟
البته که راضي هستم. برنامه نويسي رو هم کنار نخواهم گذاشت اما شايد در آينده به عنوان کار اوقات فراغت انجامش بدم.
يکي از علت هايي که اکثر برنامه نويس ها دارن که باعث شده اين حرفه رو ادامه بدن لذتي هست که پس از توليد چيزي که خودتون درست کردين و مانند يه موجود جون داره. دليل بعدي عمق زياد مبحث برنامه نويسي هست که هرچه عموق تر بري باز هم چيزي هست که بخواي دنبالش بري.

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

از نظر مالي راضي هستيد؟
پاسخ به اين سوال به يک جواب يک سوال ساده بستگي دارد! آيا به رشوه اعتقادي داريد؟ اگر پاسخ مثبت هست پس در اين صورت هم شما و هم شرکت شما نبايد مشکلات زيادي داشته باشيد و کارهايتان به غير از مرحله توليد که به برنامه نويسي بستگي دارد به خوبي پيش خواهد رفت.
اگر پاسخ به رشوه منفي هست چند حالت در پيش رو داريد. يا اينکه در شرکتي هستيد که به شما حقوق ماهانه پرداخت مي کند. در اين صورت مسلما حقوق دريافت مناسب نخواهد بود. مگر شرايط خاص.
و يا اينکه به عنوان برنامه نويس آزاد مشغول به فعاليت پروژه اي و نيمه وقت هستيد که در اين صورت هم به غير از مرحله کد نويسي با مشکلات عديده اي روبرو خواهيد بود.
در مورد خود من، چون مسئله مالي زياد براي من مهم نبوده سعي کردم با چند جاي مختلف کار کنم و زياد بر روي مسئله مالي تمرکز نداشته باشم. ولي همين هم بلاي جان خودم شده و باعث به وجود آمدن بدهي هاي کلان به من شده!
خوب نتيجه با شما!

از نظر روحي و جسمي؟
از نظر روحي بسيار شکسته شده ام و قصد خروج از ايران رو دارم. و براي همين مورد برنامه ريزي طولاني مدت کردم که پس از رفع مشکل سربازي اقدام کنم. عارضه جسمي حاصل هم کمر درد هست که علتش رو کوتاهي خودم مي دونم و بايد به يه باشگاهي برم حتما.

از نظر استرس هايي که يک برنامه نويس بايد تحمل کنه، توضيح بدين شما چه استرس هاي دارين و آيا برنامه اي براي کنار آمدن با اين استرس ها دارين يا خير؟
کلا: برنامه نويس به غير از رفع باگ نبايد هيچ گونه استرس ديگه اي داشته باشه. البته اگه اين مورد استرس بناميم. چون شخصا از رفع باگ لذت مي برم و باعث ميشه از اشتباها درس هاي زيادي رو بگيرم.
ايران و موقعيت خودم: اگر استخدامي هستيد که استرس نبود پول و جيب خالي و فکر خروج از شرکت هميشه با شما خواهد بود.
اگر آزاد کار مي کنيد، استرس و سر درد سروکله زدن با مشتري هاي دم دمي مزاج و چونه زدن بر سر قيمت و زمان پروژه دمار از روزگارتان مي برد!
اگر هم پروژه اي کار مي کنيد تعهد هاي کمر شکن قلب شما رو هدف قرار داده!

فرق شما با آدم هاي ديگه (شغل هاي ديگه) چيه و چه مشکلاتي داريد. بگين که تا چه موقع ميتونيد برنامه نويس بمونيد، آيا قصد تغيير شغل در آينده را داريد يا نه مي خواهيد در آينده هم در فيلد برنامه نويسي کار کنيد؟
در مورد فرق ترجيح مي دم که جواب ندم چون فرق خيلي زياده.
در عموميت فکر مي کنم يک نفر مي تونه براي هميشه برنامه نويس بمونه و از اون لذت بببره. اما اين مورد من زيادي خواه رو راضي نمکنه و هميشه به بيشتر از اينها فکر کردم. مثلا هدايت يک تيم نرم افزاري و هدايت شرکت و غيره. البته اين رو هم بگم که هدايت چند تيم نرم افزاري رو هم بر عهده داشتم ولي به دلايلي نشد که همکاري در رو اونجا ادامه بدم. در کل در آينده کار من شايد خود برنامه نويسي نباشد ولي در زمنيه برنامه نويسي خواهد بود.

افشار محبی نویسنده وبلاگ AfsharM

مقدمتاً بگویم که ترجیح می‌دهم به جای عبارت «برنامه‌نویس» از عبارت «توسعه دهنده» یا «توسعه دهنده نرم‌افزار» استفاده کنم.

جواب خلاصه من به این سوال، «بله» است. چون نزدیک به ۲۰ سال است که برنامه نویسی عشق و علاقه شماره یک من بوده و بعید است که به این زودی‌ها بتوانم از آن چشم پوشی کنم خصوصاً حالا که چندین سال است که برنامه‌نویسی تنها منبع درآمدم نیز بوده است.

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

با شناختی که همه ما از مشاغل موجود در ایران داریم، می‌دانیم که تقریباً در هیچ شغلی سلامت جسمی و روحی افراد رعایت نمی‌شود پس نباید از این لحاظ خیلی به شغل برنامه‌نویسی (توسعه نرم افزار) خرده گرفت.

اما امان از استرس‌های یک برنامه نویس. اگر استرس‌های امنیت شغلی را فعلاً مستثنی بدانیم برنامه نویسی جز شغل‌های پر استرس محسوب می‌شود زیرا هر لحظه ممکن است برنامه‌ای که نوشته‌اید و حتی مدتی هم کار کرده، یک دفعه از کار افتاده و موبایل‌تان شروع به زنگ خوردن کند. خیلی وقت‌ها هم واقعاً نمی‌دانید راه حل فلان مسئله چیست و جناب رییس هم پشت سر شما در حال لحظه شماری برای رفع مشکل است. در برنامه نویسی تقریبا بیشتر از هر شغل دیگری باید به روز باشید، بسیاری از کارفرمایان شناخت خیلی خیلی ناقصی از کار برنامه نویسی دارند و در نتیجه توقعات عجیب و غریبی خصوصا در مورد زمان‌بندی و هزینه‌بندی پروژه‌ها دارند.

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

فرق برنامه‌نویس‌ها با آدم‌های دیگر چیست؟ هیچی! فقط چون کار ما برنامه‌نویس‌ها کار جدیدی است کمی ترسیده‌ایم و الا هیچ فرق آنچنانی نداریم. بنده به شخصه فکر می‌کنم اقلاً تا ۵ سال آینده بتوانم برنامه‌نویس باقی بمانم مگر آن که شرایط سیاسی-اقتصادی مملکت خیلی به هم بریزد. در مورد سال‌های بعد از این ۵ سال امیدوارم (و تلاش می‌کنم) آنقدر در یک حیطه خاص برنامه‌نویسی تسلط پیدا کنم که اگر مجبور شدم راه فرنگستان را در پیش گیرم بتوانم گلیمم را از آب بکشم و اگر در ایران ماندم و تعداد شرکت‌های نرم‌افزاری از این هم کمتر شد بتوانم جایی برای خودم دست و پا کنم.

به عنوان نتیجه همان طور که در ابتدا ذکر کردم از زندگی حرفه‌ای خودم به عنوان یک برنامه‌نویس (توسعه دهنده نرم‌افزار) با همه فراز و نشیب‌هایش راضی هستم و امیدوارم بتوانم کارم را با موفقیت ادامه دهم.

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

نتیجه گیری از این مطلب با شما. یک خواهش از دوستانی که این وبلاگ را از طریق گوگل ریدر یا فیدخوان های دیگر دنبال می کنند دارم، لطفاً اگر برنامه نویس هستید جواب این سئوال را در قسمت نظرات این مطلب ارسال کنید. استثناً در مورد این مطلب نظر بدهید! جواب هر کدام از شما می تواند بر ارزش این مطلب بیفزاید. جمع بندی و نتیجه گیری را بهتر است شما خوانندگان انجام بدهید و در قسمت نظرات بیان کنید.

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

به روز رسانی

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

  1. کامنت هایی که شامل توهین به یکی از نویسنده های مطلب و یا هر شخص سوم دیگری باشد بدون اخطار قبلی حذف می شوند.
  2. موضوع این مطلب کاملاً روشن است، البته اگر مطلب را کامل بخوانید، پس کامنت های بی ربط به موضوع بدون اخطار قبلی حذف می شوند.
  3. لطفاً اگر با شخصی مشکل دارید، سعی نکنید در اینجا با او تصویه حساب کنید!
  4. قبل از کامنت گذاشتن، ابتدا مطلب را به صورت کامل بخوانید!

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

از این پس نظرات ابتدا بررسی می شوند و سپس نشان داده خواهند شد.

* قسمتی از مطلب آقای سالار خلیل زاده که باعث بوجود آمدن بحث های غیر مربتط توسط بعضی از افراد شده بود با درخواست خود ایشون حذف شد.





ساخت روبات به روش مایکروسافت!

14 11 2009

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

Microsoft Robotics Developer Studio یا به اختصار MRDS مجموعه کاملی از ابزارهای نرم افزاری تحت ویندوز برای کنترل و شبیه سازی انواع محتلف روبات است. از این مجوعه نرم افزاری می توان در ساخت روبات های آکادمیک و حتی تجاری کمک گرفت. MRDS در ساخت نرم افزارهای مبتنی بر سرویس برای انواع مختلف سخت افزار کاربرد دارد.

MRDS بیشتر از یک نرم افزار برای بازی با روبات هاست. تقریباً دو سال پیش واحد تحقیقات مایکروسافت راه حلی برای ساخت روبات ها و کنترل آن ها در محیط ویندوز ارائه نمود، که هم اکنون به یکی از بسترهای موفق و مناسب برای توسعه انواع روبات ها تبدیل شده است. یکی از مهمترین نکات مربوط به نرم افزارهای روباتیک این است که کدی که نوشته اید در محیط شبیه سازی و محیط واقعی به یک صورت عمل کند، یعنی بدون دستکاری کد روبات شما همانطور که در محیط شبیه سازی شده کار می کرده است در محیط واقعی نیز کار کند، که MRDS به خوبی این نکته را پیاده سازی کرده است. شما روبات خود را با استفاده از ابزارهای بصری (Visual) مدل می کنید و کدهای آن را می نویسید، سپس در محیط 3بعدی رفتار روبات را شبیه سازی می کنید، آن را تست و عیب یابی می کنید و در نهایت در محیط واقعی پیاده سازی اش می کنید.

شبیه سازی در MRDS

مهمترین ویژگی های MRDS به شرح زیر است :

زبان برنامه نویسی ویژوال یا Visual Programming Language یک محیط توسعه گرافیکی است که با دیاگرام های مختلف رفتار ربات را تعیین می کند. کاربر می تواند به صورت گرافیکی با ربات خود تعامل داشته باشد. یک سرویس یا یک فعالیت به صورت یک بلاک که دارای ورودی و خروجی است نشان داده می شود. کاربر فقط باید این بلاک ها را از کاتالوگ انتخاب و آن را به دیاگرام خود اضافه نماید. اتصال میان این بلاک ها بوسیله ماوس کشیده می شوند و جزئیاتی مانند نحوه عملیات و مقادیر ارسالی مشخص می شوند. VPL می تواند از روی سرویس های موجود در دیاگرام که توسط کاربر ایجاد شده اند، کد مربوطه را تولید کند. با VPL حتی افرادی که تا به حال یک خط برنامه ننوشته اند نیز می توانند ربات بسازند!

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

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

دستیابی آسان و سریع به سنسورها و فعال کننده های ربات

پشتیبانی از زبان های برنامه نویسی سی شارپ، ویژوال بیسیک و IronPython به برنامه نویسان دات نت اجازه می دهد که با استفاده از تجربه ها و مهارت های قبلی خود برای ربات ها برنامه های پیشرفته بنویسند.

اجزای MRDS

  • Concurrency and Coordination Runtime یا CCR یک کتابخانه دات نت فریم ورک است که از پردازش غیر همزمان (آسنکرون) پشتیبانی می کند. استفاده از پردازش آسنکرون برای ساخت یک روبات بسیار مهم است، زیرا سنسورها ممکن است به صورت همزمان داده ها را ارسال و دریافت کنند.
  • Decentralized Software Services یا DSS یک ران تایم مبتنی بر سرویس بسیار سبک است که از مدل REST برای ارتباط استفاده می کند.
  • Visual Programming Language یا VPL (که در بالا در مورد آن مفصل توضیح داده شد) یک زبان گرافیکی است که رفتار یک روبات را به صورت دیاگرام مدل می کند.
  • Visual Simulation Environment یا VSE که محیطی برای شبیه سازی روبات ساخته شده توسط MRDS است. شما می توانید در این محیط مجازی رفتارهای روبات خود را در شرایط مختلف مشاهده کنید.

چگونه شروع کنیم

robotMRDS در سه نسخه Express، Standard و آکادمیک عرضه می شود. نسخه Express همانطور که از نامش پیداست رایگان است اما بعضی از قابلیت های نسخه استاندارد را ندارد و برای کاربردهای حرفه ای مناسب نیست. نسخه استاندارد پولی است و برای کاربدهای حرفه ای است. نسخه آکادمیک تمام ویژگی های نسخه استاندارد را داراست و برای دانشجویان رایگان است. پیش نیاز نصب MRDS یک کارت گرافیکی مناسب با پشتیبانی از Pixel Shader و Vertex Shader است. همچنین DirectX 9.0 باید روی ویندوز شما نصب باشد. به این صفحه از وب سایت مایکروسافت بروید و نسخه ای از MRDS را دانلود کنید. آن را نصب کنید. اگر ویژوال استادیو روی سیستم شما نصب باشد، تمپلیت های MRDS به صورت خودکار روی آن نیز نصب می شوند.

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

farasun.wordpress.com

راه حل غیر مایکروسافتی : اگر از مایکروسافت به هر دلیلی خوشتان نمیاد یا از این محصولش به خاطر کپی رایت و این حرفا نمی توانید استفاده کنید، من نرم افزار Simbad که یک نرم افزار اوپن سورس و رایگان  مبتنی بر جاواست را پیشنهاد میکنم.

Vote on iDevCenter