Eclipse چیست ؟

زبان برنامه نویسی جاوا زبانی است که تحت انحصار هیچ شرکت و هیچ فرد خاصی نیست و به صورت سورس باز و همگانی در حال توسعه و پیشرفته.
و میشه گفت شاید دلیل ناشناسی اون اینه که یک مرکز اصلی و قوی برای تبلیغات و مانور مثل مایکروسافت نداره. البته نمیشه گفت که جاوا فاقد چنین مرکزیه ولی میشه  این طوری گفت که جاوا فاقد یک مرکز و یک صاحب واحد میباشد تا توسعه اش بدن.
اما در هر زبان برنامه نویسی یک IDE یکی از همین سیسات هاست که در بالا اشاره شد . مایکروسافت برای محصولاتش ویژوال استادیو رو عرضه کرده ولی جاوا در حال حاضر چندین IDE  قوی برای توسعه از طرف شرکت های مختلف و معتبر و با کیفیت ها و قیمت های گوناگون داره از جمله NetBeans(Sun) , JDevelopers(Oracle) , Eclipse(IBM) , ……. از جمله محیط هایی که به صورت مجانی و قوی عرضه شده همین Eclipse هست که تحت لیسانس GPL و سورس باز میباشد.
این محیط توسعه روند جدید رو در پیش گرفته. وقتی این محیط رو بصورت معمولی و عادی دانلود کنید امکانات بسیاری در اختیارتان قرار نمیدهد و حتی  روند برنامه نویسی ویژوال (مثل طراحی فرم و …) را ندارد و حتی برنامه نویسی تحت وب و خیلی از گزینه ها رو پشتیبانی نمیکند.
اما در عوض این سیستم طی روند جدیدی به افراد اجازه میدهد تا اجزا وافزودنی های خاض خودش (Plug-In) را نوشته و از آن استفاده کنند. اما خبر بهتر آنکه گروه توسعه دهنگان این ای دی ی پلاگین های مورد نیاز رو هم جدا نوشتند و برای دانود بصورت مجانی گذاشتند. مثلا برای طراحی و توسعه محیط تحت وب در اکلیپس یک پلاگین پر طرفدار بنام WebTools وجود دارد که تمامی نیازهای برنامه نویسی تحت وب از دیتا بیس تا طراحی css ها رو پشتیبانی میکنه. همچنین پلاگین های زیادی برای ابزار مدلینگ و یا طراحی گرافیکی و …. طراحی شده.
از طرف دیگه شرکت های مختلف هم برای اکلیپس پلاگین نوشتند و میفروشند .
اما خبری که میخواستم بدم این بود که ورژن جدید این محیط با قابلیت های جدید و چشمگیر نسبت به ورژن های قبل ارائه شده و برای دانلود بر روی سرور های مختلف قراره گرفته .(نمونه هایی از قابلیت های جدید و اسکرین شات های این سیستم را در اینجا ببینید)

اما شاید برای افراد جالب باشه که این محیط فقط و فقط برای زبان برنامه نویسی جاوا نیست و پلاگین هایی برای زبان های برنامه نویسی C/C++ , php , COBOL , Fortran را نیز دارد .

آدرس سایت رسمی : http://www.eclipse.org/
آدرس پلاگین های مختلف برای دریافت : http://www.eclipse.org/downloads/index_topic.php
آدرس دریافت ورژن جدید : http://download.eclipse.org/eclipse/downloads/
آدرس مقالات برای این سیستم : http://www.eclipse.org/articles

منبع:http://forum.iranled.com

دسته هادسته‌بندی نشده برچسب ها:

تخمین هزینه های یک پروژه نرم افزاری

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

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

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

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

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

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

اندازه پروژه

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

پیچیدگی پروژه

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

زمان انجام پروژه

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

منابع انسانی

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

منبع:http://farasun.wordpress.com

دسته هادسته‌بندی نشده برچسب ها:

ASP.NET MVC; ساخت صفحات وب بدون فرم های وب!

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

ASP.NET MVC فریم ورک قدرتمندی برای ایجاد اپلیکیشن های تحت وب است که از الگوی MVC استفاده می کند و توسط مایکروسافت به صورت اوپن سورس توسعه داده می شود. MVC یک الگوی طراحی و مخفف کلمات Model-View-Controller است. فریم ورک ASP.NET MVC الگوی طراحی MVC را در پلت فرم وب اپلیکیشن مایکروسافت یعنی ASP.NET پیاده سازی می کند. این فریم ورک اولین بار در دسامبر ۲۰۰۷ و با یک نسخه CTP توسط مایکروسافت معرفی شد. در مارس ۲۰۰۹ نسخه ۱ پایدار آن عرضه شد و یک ماه بعد یعنی در آپریل ۲۰۰۹ شرکت مایکروسافت سورس کد فریم ورک ASP.NET MVC را تحت مجوز MS-PL منتشر نمود.

MVC چیست!؟

mvc

مفهوم کلیدی این فریم ورک همان سه حرف آخر آن یعنی MVC است. پس کمی در مورد آن توضیح می دهم. همانطور که گفتم، MVC یک الگوی طراحی است که همانطور که از نامش پیداست، یک پروژه نرم افزاری را به سه قسمت منطقی Model, View و Controller تقسیم می کند. شاید شما در حال حاضر با معماری ۳ لایه نرم افزاری آشنا باشید. اگر اینطور است، شما مشکلی در درک الگوی طراحی MVC نخواهید داشت. MVC مفهوم جدیدی نیست، خیلی وقت است که در جاوا، رابی، PHP و بسیاری پلت فرم های دیگر از این الگو برای طراحی نرم افزار استفاده می شده است. اما خب برای توسعه دهندگان ASP.NET تازه است. سه قسمت اصلی الگوی MVC :

  • Model : مدل قسمتی از یک اپلیکیشن است که وظایف سنگین دسترسی به داده ها، پیاده سازی منطق و موجودیت ها را بر عهده دارد. به طور معمول یک مدل وظیفه Map کردن جداول اطلاعاتی یک دیتابیس را به کلاس های شیء گرا و برعکس را بر عهده می گیرد. احتمالاً شما همین الان هم در پروژه های خود، مدل را پیاده سازی می کنید و به آن لایه دسترسی به داده می گویید! Model باید طوری پیاده سازی شود که به هیچ وجه به رابط کاربری وابستگی نداشته باشد.
  • View : احتمالاً کاربرد View را حدس زده اید! رابط کاربری همان View است. در واقع بخشی که یک کاربر نهایی با آن تعامل خواهد داشت و اطلاعات را نمایش می دهد، View نام دارد. همانطور که رابط کاربری برای Model هیچ اهمیتی ندارد، اینکه چطور داده ها اعتبارسنجی یا ذخیره می شوند یا منطق اپلیکیشن شما چطور پیاده سازی شده است، برای View مهم نیست.
  • Controller : فضای خالی میان Model و View را Controller پر می کند. از آنجا که Model و View هیچ ارتباطی با هم ندارند و برای یکدیگر هیچ اهمیتی قائل نیستند، Controller داده ها را از Model به View برای نمایش به کاربر انتقال می دهد. کنترلرها تصمیم می گیرند که اطلاعاتی که شما وارد کرده اید را به کجا برسانند و همینطور چه چیزی را باید در خروجی مشاهده کنید. در واقع کنترل کننده و هماهنگ کننده میان Model و View است.

فقط به این نکته توجه داشته باشید که در یک اپلیکیشن MVC کامپوننت View فقط جهت نمایش خروجی به کاربر مورد استفاده قرار می گیرد و این Controller است که ورودی ها را از کاربر می گیرد و به آن ها پاسخ می دهد.

چرا از ASP.NET MVC استفاده کنیم؟

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

یکی از مزایای مهم استفاده از متدولوژِی ASP.NET MVC این است که شما را مجبور می کند تا یک جداسازی شفاف میان اجزای برنامه خود ایجاد کنید. این کار باعث می شود که توسعه پروژه در دراز مدت و آزمایش آن به آسانی انجام گیرد. الگوی MVC به شما کمک می کند تا بتوانید از Test Driven Development یا TDD در پروژه خود استفاده کنید. شما را قادر می سازد تا از تست واحد یا Unit Test استفاده کنید. به طور مثال شما می توانید عملکرد یک Controller را بدون اینکه روی ASP.NET اجرا شود، بررسی کنید که این کار عملیات تست واحد را سرعت می بخشد. برای انجام تست، می توانید از هر فریم ورک تست واحدی مثل NUnit استفاده کنید.

URLهای ایجاد شده در یک پروژه مبتنی بر فریم ورک ASP.NET MVC بسیار بسیار واضح هستند و البته برای موتورهای جستجوگر دوستانه (SEO Friendly) هستند. این کار را کامپوننت URL Mapping فریم ورک ASP.NET MVC برای شما انجام می دهد. URLهایی که نیازی به داشتن پسوند aspx یا هر پسوند دیگری ندارند و به آسانی از قوانین SEO و الگوهای نام گذاری REST پشتیبانی می کنند.

نکته ای که شما را خوشحال خواهد کرد این است که فریم ورک ASP.NET MVC از بسیاری از امکاناتی که در حال حاضر در ASP.NET هستند مثل MasterPage, Data Binding, Form/Windows Authorization, Membership/Roles, Data Caching, Session/Profile state management, Health Monitoring پشتیبانی کامل می کند.

نکته ای هم که ممکن است شما را اذیت کند این است که در فریم ورک ASP.NET MVC از برنامه نویسی مبتنی بر رویداد خبری نیست و همچنین نمی توانید از Post Back برای تعامل دوباره با سرور استفاده کنید. ASP.NET MVC برخلاف وب فرم ها که به صورت خودکار و با استفاده از ViewState حالت یک صفحه وب را به صورت مصنوعی حفظ می کنند، از مدل طبیعی بی حالت (=Stateless) وب پیروی می کند. البته این موضوع آنقدرها هم بد نیست چون باعث حذف ViewState می شود و حذف ViewState هم به معنی صفحات سبک تر و در نتیجه لود شدن سریعتر صفحات وب است.

برای شروع ASP.NET MVC به چه چیزهایی احتیاج دارید!؟

منابع این مطلب :

دسته هادسته‌بندی نشده برچسب ها:

یک ران تایم برای اجرا کردن همه!

با CLR که آشنا هستید!؟ یکی از اجزای اصلی پلت فرم دات نت مایکروسافت است. CLR یک پیاده سازی از CLI استاندارد است و محیطی برای اجرای کدهای برنامه های دات نت ایجاد می کند. کامپایلر های سی شارپ و ویژوال بیسیک دات نت کد ماشین تولید نمی کنند، بلکه کدی تولید می کنند به صورت byte code که ماشین به تنهایی قادر به تفسیر و اجرای آن نیست. کامپایلر ابتدا کد CIL یا همان MSIL را تولید می کند. سپس هنگام اجرای برنامه مورد نظر CLR وارد عمل شده و با کامپایلر just in time یا JIT کد CIL برنامه مورد نظر را به کدی که برای سیستم عامل قابل درک باشد، تبدیل می کند.

clr

وظیفه CLR تنها تبدیل بایت کد CIL به کد ماشین نیست، CLR وظایف مدیریت حافظه، پردازش استثناها (Exception Handling)، مدیرت نخ ها (Thread Management)، Garbage Collection و تامین امنیت را به بهترین نحو انجام می دهد.

CLR پیاده سازی CLI استاندارد برای سیستم عامل ویندوز است. پیاده سازی های دیگر CLI مثل Mono و Portable.NET برای سیستم عامل های غیر ویندوز بوجود آمده اند، زیرا CLR فقط روی ویندوز اجرا می شود.

ایده نوشتن این مطلب و عنوان آن، طرح تی شرت زیر است. بقیه تی شرت های تیم CLR را ببینید!

clr_shirt

طرح این تی شرت، شما را به یاد ارباب حلقه ها نمی اندازد!؟ :)

تعریف برخی از اصطلاحات بکار رفته در این مطلب :

  • CLI : مشخصات بازی (=open specification) است که توسط مایکروسافت توسعه داده می شود که کد اجرایی و محیط ران تایمی که هسته دات نت فرم ورک و نرم افزارهای آزاد Mono و Portable.NET را شکل می دهند، توضیح می دهد. این مشخصات محیطی را تعریف می کند که به زبان های برنامه نویسی سطح بالا امکان استفاده در پلت فرم های مختلف را بدون باز نویسی برای یک معماری خاص، می دهد. CLI مخفف Common Language Infrastructure است.
  • CIL : زبان سطح پائینی در CLI است که زبان های تحت دات نت پس از کامپایل شدن به آن ترجمه می شوند. CIL معادل دات نت زبان اسمبلی برای یک CPU است. پس از تبدیل سورس کد یکی از زبان های دات نت به کدهای CIL، این کدها به بایت کد تبدیل می شوند و یک اسمبلی دات نت ایجاد می شود. CIL قبلاً با اسم MSIL نیز شناخته می شد. CIL به صورت “sil” (سیل) تلفظ می شود و مخفف Common Intermediate Language است.
  • JIT Compiler : به عنوان “ترجمه پویا” نیز شناخته می شود و تکنیکی است برای بهبود کارایی یک برنامه کامپیوتری. JIT کد تولید شده قبل از اجرای برنامه را به کدی که به صورت Native اجرا می شود، تبدیل می کند. برای مثال بایت کد را به کد ماشین تبدیل می کند. بسیاری از محیط های ران تایم مدرن مانند دات نت مایکروسافت و بسیاری از پیاده سازی های جاوا از JIT برای اجرای کد با سرعت بالا استفاده می کنند.
  • Garbage Collection : یک شکل از مدیریت حافظه خودکار است که برای باز پس گیری حافظه اشیائی که دیگر مورد استفاده قرار نمی گیرند، کاربرد دارد.
  • Mono : مونو پروژه اوپن سورس و آزادی است که توسط ناول برای پیاده سازی دات نت فریم ورک روی پلت فرم های غیر ویندوزی بوجود آمده است. مونو می تواند روی انواع توزیع های لینوکس (ماننده اوبونتو و زوزه)، مک، سولاریس، سیستم عامل های سازگار با یونیکس و BSD اجرا شود. این پروژه شامل ابزارهای سازگار با دات نت مثل یک IDE، کامپایلر سی شارپ و یک پیاده سازی CLR است. (بخوانید : آیا برنامه دات نت شما روی لینوکس اجرا می شود!؟)
  • Portable.NET : قسمتی از پروژه DotGNU است و محیط ران تایم آزاد و اوپن سورسی برای برنامه های مبتنی بر CLI استاندارد است. این پروژه از کلاس های پایه دات نت، XML و Windows Forms پشتیبانی می کند.

منبع : ویکی پدیا

دسته هادسته‌بندی نشده برچسب ها:

سخت بودن زبان برنامه نویسی، دلیل برتری نیست!

دو سه سال پیش مطلبی برای کسانی که می خواهند برنامه نویسی را شروع کنند نوشتم و زبان پاسکال را برای شروع پیشنهاد کردم. یکی از دوستانم برای شروع یادگیری برنامه نویسی با من مشورت کرد و گفت میخوام سخت ترین زبان برنامه نویسی را یاد بگیرم تا برنامه نویس تاپی بشم! قضیه از این قرار بود که قبل از من با داماد محترم خودشون مشورت کرده بود و ایشون گفته بود سخت ترین زبان های برنامه نویسی که سی/سی++ و جاوا هستند را یاد بگیرد! از من سئوال کرد که من دلفی و PHP را توصیه کردم. دوستم قبول نکرد و گفت شنیدم دلفی مسخره است و PHP بسیار ضعیفه!!
نمیدانم این چه حرف نامربوطی است که بین بعضی ها رایج شده، اینکه PHP ضعیف است و جاوا قویترین و بهترین است! از کسانی مثل دوست من که هیچ دانشی در مورد برنامه نویسی ندارند انتظاری نیست، اما این حرف ها را من از همکاران برنامه نویس و مدیران شرکت های نرم افزاری هم شنیده ام! این ها حتی یک سرچ کوچیک هم در مورد PHP انجام نداند تا با پروژه های قدرتمندی که با این زبان انجام شده اند، آشنا شوند. پروژه وردپرس فقط یکی از ۱۰۰ها پروژه موفقی است که با PHP انجام شده است. بحث را نمی خواهم اینطور ادامه دهم، PHP فقط یک مثال است.

spl2

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

البته کسی که سی++ بلد باشد و بعد از آن مثلاً PHP را شروع کند خیلی سریعتر و بهتر از کسی که قبلاٌ مثلاً با ویژوال بیسیک آشنا بوده،PHP را یاد می گیرد. همانطور که گفتم پلت فرم از زبان خیلی مهم تر است. من می توانم به شما قول دهم که شما می توانید در عرض ۳ ماه سی++ را به طور کامل یاد بگیرید، اما نمی توانید در فقط ۳ ماه یک برنامه نویس وب حرفه ای شوید. یادگیری سینتاکس یک زبان برنامه نویسی هر چقدر هم که مشکل باشد، در ۳ یا ۴ ماه میسر می شود اما یادگیری یک پلت فرم برنامه نویسی مانند دات نت و حرفه ای شدن در آن به این سادگی ها نیست!

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

منبع:http://farasun.wordpress.com

دسته هادسته‌بندی نشده برچسب ها:

به اشتراک گذاری قطعات کد در شبکه های اجتماعی

استفاده از خدمات شبکه‌های اجتماعی، روزبه‌روز محبوبیت بیشتری بین کاربران اینترنت پیدا می‌کند. شبکه های اجتماعی مثل فیس بوک و توییتر در حال تبدیل شدن به جزئی از زندگی ما کاربران اینترنت شده است. این حرف اشتباه نسیت اگر بگوییم بعد از جستجو و ایمیل، شبکه های اجتماعی از پر استفاده ترین خدمات اینترنتی هستند! اگر احساس می کنید هنوز شبکه های اجتماعی هیچ تاثیری روی زندگی شما نگذاشته اند، باید بدانید که در آینده این شبکه های اجتماعی بیش از حالا اهمیت پیدا خواهند کرد. فیس بوک یکی از بزرگترین و محبوب ترین شبکه های اجتماعی بیش از ۲۰۰ میلیون کاربر در سرار دنیا دارد.

خب در این مطلب نمی خواهیم در مورد بدیهیات شبکه های اجتماعی بحث کنیم. به اشتراک گذاری اطلاعات یکی از ارکان اصلی شبکه های اجتماعی و البته وب ۲٫۰ است. در شبکه های اجتماعی معروف مثل فیس بوک و توییتر تقریباً می توان همه محتوایی را به اشتراک گذاشت، از متن ساده گرفته تا عکس و ویدئو. ما برنامه نویسان یک مشکل کوچک با این شبکه های اجتماعی داریم، مخصوصاً با توییتر، اینکه چطور قطعه کدهایمان را به اشتراک بگذاریم! به طور مثال چطور چندخط کد را بوسیله توییتر با دوستانم به اشتراک بگذارم!؟ اگر بخواهم همین قطعه کد را به دوستی که در حال چت کردن در یک مسنجر هستیم نشان دهم چه کنم!؟

code-paste

راه حل این موضوع وب سایت CodePaste.Net است که به شما اجازه می دهد بدون نیاز به ثبت نام، به راحتی کد خود را به زبان های xC#, VB.NET, JavaScript, HTML, ASP.NET, JavaScript, XML, CSS, Sql, T-SQL, و FoxPro بنویسید و لینک آن را برای دوستانتان در شبکه های اجتماعی یا مسنجرها بفرستید. وقتی دوستانتان لینک مورد نظر را باز می کنند، قطعه کد شما را به صورت تمیز و با قابلیت شماره گذازی و Syntax Highlighting و توضیحات تکمیلی شما مشاهده خواهند کرد. به نظرتان این عالی نیست!

به طور مثال من میخواستم نحوه استفاده از PropertyGrid در سی شارپ را به یکی از دوستانم که در حال چت کردن بودیم یاد بدهم. اگر کدها را همینطور در مسنجر تایپ میکردم، هم ظاهر خوبی نداشت و هم دوستم سر در گم میشد. خیلی راحت کدم را در CodePaste.net نوشتم و به آن لینک دادم!

API این سرویس، اجازه دسترسی به قطعات کد را در سه فرمت XML, JSON و RSS به شما می دهد. به طور مثال با اضافه کردن x?format=xml به انتهای URL یک قطعه کد، می توانید اطلاعاتش را با فرمت XML دریافت کنید.

این پروژه بوسیله فریم ورک ASP.NET MVC نوشته شده و کد آن برای بررسی در اینجا قابل دسترسی است.

هرچند ایده این پروژه جدید نیست، و قبل از آن سایت Pastie با پشتیبانی از زبان های PHP, Perl. Python, Ruby و چندتای دیگر همین کار را برای برنامه نویسان و طراحان وب انجام میداد، اما CodePaste.net به طور مخصوص برای برنامه نویسان دات نت طراحی شده و زبان های دات نتی را که Pastie پشتیبانی نمی کند، پشتیبانی می کند. قابلیت برچسب گذاری و قرار دادن توضیحات که در CodePaste.net وجود دارد، در Pastie وجود ندارد.

بعضی مواقع هم می توانید با استفاده از CodePaste.net با دوستانتان شوخی کنید! 

منبع:http://farasun.wordpress.com

دسته هادسته‌بندی نشده برچسب ها:

آیا برنامه دات نت شما روی لینوکس اجرا می شود!؟

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

mono-logoچندسال پیش زمزمه های پروژه ای به گوش رسید که مژده اجرای نرم افزارهای مبتنی بر دات نت را بر روی سیستم عامل های دیگر میداد. پروژه مونو یک فریم ورک دات نت cross-platform و اوپن سورس است که به شما اجازه می دهد که برنامه های مبتنی بر دات نت خود را که تا به حال فقط روی ویندوز اجرا می شده را روی سیستم عامل های مبتنی بر لینوکس و حتی سیستم عامل شرکت اپل اجرا کنید. آخرین نسخه پایدار مونو از C# 3.0، VB 8، ASP.NET 2.0, ADO.NET و Windows Forms 2.0 پشتیبانی می کند. در واقع اگر برنامه خودتان را با دات نت فریم ورک نسخه ۲٫۰ نوشته باشید و از APIهای ویندوز نیز استفاده نکرده باشید، به راحتی می توانید آن را روی لینوکس یا مک اجرا کنید. برای دریافت آخرین نسخه مونو برای پلت فرم های مختلف به این صفحه از سایت رسمی مونو مراجعه کنید.

خب فکر میکنم جواب تیتر سئوالی این مطلب مشخص شده باشد. در وب سایت مونو، برنامه سودمند کوچکی معرفی شده که با اسکن کردن اسمبلی های پروژه تحت دات نت شما، گزارشی تولید می کند که مشخص کننده قسمت هایی از کدهای پروژه شماست که با فریم ورک مونو سازگاری ندارند. با استفاده از این گزارش به راحتی می توانید قسمت های ناسازگار را اصلاح کنید و خروجی پروژه را برای اجرا روی مونو آماده کنید. نام این برنامه سودمند Mono Migration Analyzer یا MoMA است و از اینجا قابل دریافت است.

moma

برای توسعه برنامه های مبتنی بر مونو یک محیط توسعه مجتمع به نام MonoDevelop هم تولید شده که هرچند در حد ویژوال استادیو نیست اما نصافاً محیط خوبی برای توسعه برنامه های مبتنی بر مونوست. MonoDevelop بر اساس IDE موفق و اوپن سورس SharpDevelop توسعه یافته است.

منبع:http://farasun.wordpress.com

دسته هادسته‌بندی نشده برچسب ها:

بررسی دات نت ۴٫۰ – کتابخانه های کلاس پایه

در این نسخه از دات نت شاهد بهبودهایی در سیستم های ورودی/خروجی، هندل کردن استثناها، Reflection و تغییراتی در انواع مجموعه ای (Collectionها) خواهیم بود. در این مطلب با برخی از مهمترین تغییرات کتابخانه های کلاس پایه یا Base Class Libraries در دات نت فریم ورک ۴٫۰ بتا ۱ آشنا خواهیم شد.

BigInteger

ساختار جدید System.Numerics.BigInteger یک نوع داده ای صحیح با دقت دلخواه است که تمام عملیات های استاندارد یک نوع داده Integer را پشتیبانی می کند. این نوع داده می تواند در تمام زبان های مبتنی بر دات نت مورد استفاده قرار گیرد. زبان های جدیدی مثل F#x و IronPython به صورت توکار از این نوع داده پشتیبانی می کنند.

Tuples

یک تاپل (Tuple) یک ساختار داده ای Generic ساده است که مجموعه ای از آیتم های ناهمگن منظم را نگهداری می کند. تاپل ها به صورت Native یا محلی در زبان هایی مثل F#x و IronPython پشتیبانی می شوند، در این نسخه هر زبان برنامه نویسی مبتنی بر دانت نتی مانند C#x و Visual Basic قادر به استفاده از تاپل ها هستند. دات نت فریم ورک ۴٫۰ بتا هشت کلاس جدید جنریک Tuple اضافه کرده است، همچنین این کلاس Tuple شامل متدهای استاتیکی برای ایجاد تاپل هاست.

Exceptions Handling

کتابخانه پایه دات نت فریم ورک ۴٫۰ شامل فضای نام جدیدی به نام System.Runtime.ExceptionServices است که قادر به هندل کردن استثناهایی که corrupted state گفته می شوند، خواهد بود.

I/O

بهبودهایی در سیستم I/O دات نت فریم ورک بوجود آمده است. به طور مثال متدهای شمارشی در کلاس های Directory و DirectoryInfo به جای آرایه، یک مجموعه IEnumerable(T)x بر می گردانند. این کار باعث بهبود این متدها می شود، زیرا دیگر لازم نیست که این متدها ابتدا حافظه ای (معمولاً بزرگ) به آرایه ها اختصاص بدهند، یا منتظر پر شدن تمام خانه های آن آرایه شوند، شما می توانید قبل از اینکه این مجموعه به طور کامل پر شود، از آیتم هایی که تا به حال در مجموعه قرار گرفته اند استفاده کنید.

فضای نام System.IO.MemoryMappedFiles اجازه استفاده از عمل Memory Mapping که در ویندوز موجود است را به برنامه نویس می دهد. شما با استفاده از این قابلیت می توانید فایل های با حجم بسیار بالا را در حافظه باز یا ویرایش کنید. فضای نام System.IO.UnmanagedMemoryAccessor نیز اجازه دسترسی تصادفی به حافظه مدیریت نشده (Unmanaged Memory) را به شما می دهد. بهبودهایی نیز در کلاس های فضای نام System.IO.Compression.DeflateStream و System.IO.Compression.GZipStream بوجود آمده تا فشرده سازی داده ها بهتر از قبل باشند.

Reflection

دات نت فریم ورک ۴٫۰ بتا ۱ قابلیت هایی را برای مانیتور کردن کارایی دامنه اپلیکیشن های شما فراهم می کند. با استفاده از دات نت فریم ورک ۴٫۰ مدیریت بهتری بر سیکل زندگی پراسس های اپلیکیشن خود خواهید داشت.

x64-bit View and Other Registry Improvements

بهبودهای کلاس های رجیستری ویندوز در دات نت ۴٫۰ شامل:

  • توانایی مشخص نمودن نمای ۳۲-بیتی یا ۶۴-بیتی از رجیستری ویندوز با استفاده از Microsoft.Win32.RegistryView زمانی که کلیدهای پایه را باز می کنید
  • Microsoft.Win32.RegistryOptions که به شما اجازه می دهد یک کلید فرار (volatile) در رجیستری ویندوز بسیازید که با ریستارت کردن ویندوز از بین خواهد رفت

Threading

  • Unified Model for Cancellation : دات نت فریم ورک ۴٫۰ بتا مدل واحدی برای کنسل کردن عملیات های غیر همزمان یا asynchronous فراهم می کند. کلاس جدید System.Threading.CancellationTokenSource برای ایجاد یک CancellationToken مورد استفاده قرار می گیرد که ممکن است به هر تعداد عملیات روی چندین  thread پاس شود. با صدا زدن متد Cancel()x در شیء token source، مشخصه IsCancellationRequested برابر true می شود و تمام عملیاتی که در این token ثبت شده اند در حالت wait قرار می گیرند.
  • Thread-Safe Collection Classes : فضای نام جدید System.Collections.Concurrent مجموعه ای از کلاس های thread-safe را معرفی می کند. استفاده از این کلاس ها در سناریوهای multi thread باعث بهبود بخشیدن کارایی انواع مجموعه ای مثل ArrayList و List(T)x می شود.

منبع:http://farasun.wordpress.com

دسته هادسته‌بندی نشده برچسب ها:

بررسی دات نت ۴٫۰ – تغییرات CLR

CLR در نسحه جدید پلت فرم برنامه نویسی مایکروسافت یعنی دات نت فریم ورک ۴٫۰ دستخوش تغییرات و به روز رسانی های زیادی شده است که در این مطلب با مهمترین آن ها آشنا می شویم :

محاسبات موازی (Parallel Computing)

دات نت فریم ورک ۴٫۰ بتا مدل جدیدی از برنامه نویسی برای نوشتن برنامه های چند خطی (Multi threaded) و غیرهمزمان (asynchronous) ارائه می کند که به صورت موثری کار توسعه دهندگان برنامه های کاربردی و کتابخانه های کد را ساده می کند. کلاس های جدید Parallel و Task در فضای نام System.Threading از این مدل برنامه نویسی پشتیبانی می کنند. PLINQ یا Parallel LINQ هم پیاده سازی موازی از LINQ to Objects در این نسخه از دات نت فریم ورک است.

کارایی بالاتر

به اضافه قابلیت بالا، برنامه ها در دات نت فریم ورک ۴٫۰ بتا، با سرعت بالاتری اجرا می شوند و کارایی بالاتری در برنامه های چند خطی مشاهده خواهید کرد.

Lazy Initialiation

با استفاده از این قابلیت، حافظه برای یک شیء تا هنگامی که شیء به حافظه ای احتیاج ندارد، اختصاص نمی یابد. Lazy Initialiation می تواند کارایی برنامه شما را با کنترل روی حافظه های اختصاص داده شده به اشیاء بالا ببرد. شما می توانید این قابلیت را برای هر نوع داده ای با استفاده از System.Lazy(T) فعال کنید.

Dynamic Language Runtime

محیط زمان اجرای جدیدی است که سرویس هایی برای زبان های برنامه نویسی پویا به CLR اضافه می کند. DLR توسعه زبان های پویا برای اجرا روی دات نت فریم ورک و اضافه نمودن قابلیت های پویا به انواع زبان های استاتیک را آسان تر می کند. برای این منظور فضای نام System.Dynamic به دات نت فریم ورک ۴٫۰ اضافه شده است. به علاوه کلاس هایی هم برای پشتیبانی از زیر بنای دات نت فریم ورک در فضای نام System.Runtime.CompilerServices ایجاد شده است.

In-Process-Side-By-Side Execution

این قابلیت جدید در دات نت فریم ورک به شما اجازه می دهد که چند نسخه مختلفه CLR را در حافظه بار کنید تا کامپوننت های قدیمی که از نسخه های قبلی CLR استفاده می کنند در کنار کامپوننت های جدید به کار خود ادامه بدهند. به زبان ساده می توانید برنامه ای بنویسید که هم از دات نت فریم ورک نسخه ۲ استفاده کند و هم از نسخه ۴ آن.

امنیت

دو تغییر بزرگ در زیر سیستم امنیتی دات نت فریم ورک ۴٫۰ بوجود آمده، سیاست امنیتی Machine-wide از بین رفته است، هر چند سیستم اجازه نامه ها هنوز در جای خود قرار دارد، و شفافیت امنیتی گسترش یافته و به عنوان مکانیزم پیش فرض مورد استفاده قرار می گیرد. از بین رفتن سیاست Machine-wide به این معنی است که دات نت فریم ورک مسئولیت تامین امنیت یک کامپیوتر را بر عهده ندارد و فقط از کدهای امن نوشته شده حفاظت می کند. شفافایت امنیتی یا Security Transparency که برای اولین بار در دات نت فریم ورک ۲٫۰ معرفی شد، مکانیزمی است که کدهای نوشته شده برای یک اپلیکیشن تحت دات نت فریم ورک را از کدهای زیربنایی آن تفکیک می کند.

قراردادهای کد

قراردادهای کد به شما اجازه می دهند اطلاعاتی را مشخص کنید که امضای متد ها و نوع ها به تنهایی آن ها را نمایش نمی دهند. فضای نام System.Diagnostics.Constracts کلاس هایی را برای برآورده کردن این هدف فراهم می کند. این قراردادها باعث بهبود کیفیت آزمایش نرم افزار و تولید مستندات می شوند.

Garbage Collection

در دات نت فرم ورک ۴٫۰ وظیفه پاکسازی حافظه مانند نسخه های قبل بر عهده GC است، با این تفاوت که GC در این نسخه کارایی بالاتر و قابلیت های بهتری دارد. دات نت فرم ورک ۴٫۰ عملیت پاکسازی حافظه از اشیای تاریخ گذشته را در پس زمینه انجام می دهد تا حجم حافظه مصرفی توسط برنامه های تحت دات نت فریم ورک ۴٫۰ به کمترین حد ممکن برسد.

عیب یابی

حالا در دات نت ۴٫۰ می توانید از رویدادهای EWT یا Event Tracing for Windows در جهت عیب یابی برنامه هایتان استفاده کنید تا کارایی را افزایش دهید. EWT مسئولیت جمع آوری گزارش در طول زندگی یک پروسه در ویندوز را بر عهده دارد. با استفاده از EWT می توانید گزارشاتی در مورد رویدادهای CLR مطالعه کنید و نرم افزارهایتان را عیب یابی کنید.

منبع:http://farasun.wordpress.com

دسته هادسته‌بندی نشده برچسب ها:

چگونه یک پروژه نرم افزاری را با موفقیت انجام دهیم!؟

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

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

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

حتماً قرارداد ببندید

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

پروژه را تحلیل کنید

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

فاز طراحی را جدی بگیرید

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

پیاده سازی

اگر فازهای قبلی را به درستی انجام داده باشید، در پیاده سازی با مشکل حادی برخورد نخواهید کرد. مستندات دو فاز قبلی مشخصات پیاده سازی را تعیین می کنند. اگر پروژه شما نیاز به یک پایگاه داده برای ذخیره اطلاعات دارد (که در اکثر پروژه ها همینطور است)،ابتدا داده هایی که قرار است ذخیره کنید را بر اساس مستندات فازهای قبلی شناسایی کنید. اگر می توانید نمودار روابط بین موجودیت ها یا ERD و Data Model را برای درک بهتر بانک اطلاعاتی سیستم رسم کنید. برای بانک اطلاعاتی خود یک RDBMS مناسب انتخاب کنید. وقتی به طور مثال SQLite یا Access نیاز شما را برطرف می کنند، بیخودی خود را درگیر پیچیدگی های SQL Server یا Oracle نکنید.

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

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

در آخر

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

منبع: http://farasun.wordpress.com

دسته هادسته‌بندی نشده برچسب ها: