مقایسه و انتخاب ابزارهای توسعه نرم افزار همواره یکی ازبحثهای داغ برنامه نویسان و توسعه دهندگان نرم افزار بوده است. از مقایسهC و پاسکال تا مقایسه VB و ++VC و Delphi و با ورود به عصر اینترنت مقایسهامکانات perl،پیتون،PHP،ASP و ASP.NET، JAVA بحثهای بوده است که در فرومهاو سایتهای تخصصی همواره به آن پرداخته شده است. البته خیلی اوقات این قضیهاز یک بحث فنی تبدیل به بحثی صرفا براساس علاقه و تعصب برنامه نویسانتبدیل شده یا اینکه مقایسه تبلیغاتی برای نمایش ضعف رقیبان و قدرتهای یکابزار خاص بوده است.
به نظرم مهم است که یک برنامه نویس و توسعه دهنده نرم افزار به زبانها وپلاتفرمهای توسعه نرم افزار صرفا به عنوان یک ابزار نگاه کند و براساسنیازهای کمپانی یا تیم نرم افزاری و نیازهای نرم افزار پلاتفرم و ابزارهایلازم را انتخاب کنند. مباحثی مثل علاقه شدید به مایکروسافت یا ضدیت با آنبه نظرم شیوه حرفه ای و درستی برای انتخاب ابزارهای طراحی و توسعه نرمافزار نیست. این روزها در ایران مقایسه و انتخاب دو زبان و تکنولوژی خاصیعنی PHP و ASP.NET بحث داغی هستند و البته با گذشت زمان تقریبا هر گروه(بیشتر براساس سیاست شرکتهایی که در آن کار میکنند) یکی از این تکنولوژیها را به عنوان ابزار اصلی توسعه نرم افزار و سایتها انتخاب کرده است.بارها از من پرسیده شده است که کدامیک از این زبانها انتخاب بهتری است ودلایل آن چیست؟ به عنوان برنامه نویسیکه در سالهای قبل علاوه بر ASP بازبان PHP نیز کار می کردم و در این زمینه مقاله، سمینار معرفی کوچکی وفعالیتهای در انجمن سابق ایران PHP (مانند تابع سورت فارسی) داشته ام وهمچنین در سالهای اخیر نیز عموما از ASP.NET استفاده کردم و براساس تجربهو اطلاعات شخصی مقایسه مختصری درباره این زبانها را ادامه خواهم داشت. پیاچ پی PHP
زبان PHP با هدف نوشتن اسکریپتهای وب نوشته شد. در واقع هدف فرار ازپیچیدگیهای Perl و نوشتن CGI با زبانهایی مثل C و ارائه دستوراتی سادهبرای طراحان صفحات وب بود.پی اچ پی اولیه زبانی با دستورات محدود و سادهبود که بیشتر برای کارهای ساده و برای طراحان وب سایتها و نه برنامهنویسان حرفه ای بود. این زبان کم کم پیشرفت کرد و بخصوص Open Source بودنآن باعث شد تسریع این حرکت شد. در مرحله اول تعداد دستورات و توابع اینزبان گسترش پیدا کرد بطوریکه امروز نیز براحتی کارهای نسبت پیچیده ای (مثلکار با سوکتها یا تصاویر) با توابع این زبان قابل اجراست.همچنین از لحاظمعماری این زبان با پشتیبانی از شی گرایی پیشرفت مهم دیگری داشته است. پیاچ پی به طور کلی یکی از زبانهای معمول برای نوشتن اسکریپتهای اجرایی درمحیط یونیکس ، لینوکس (هرچند که در ویندوز نیز به خوبی اجرا می شود) و کاربا نرم افزار مدیریت بانک اطلاعات MySQL است.
تکنولوژی ASP.NET
دات نت نسل جدیدی از ابزارهای توسعه مایکروسافت است. دات نت فقط یک زباننیست و در واقع یک فریم ورک یا پلاتفرم برای توسعه و اجرای نرم افزاراست.دات نت شباهت زیادی با پلاتفرم جاوا دارد و در واقع در رقابت با اوست.ASP.NET نیز نسل جدیدی از ASP کلاسیک در بستر دات نت است و از این جهتپیشرفت بسیار زیادی نسبت به ASP کلاسیک شاهد هستیم.با ASP.NET و با وجودکتابخانه غنی توابع و کلاسهای دات نت تقریبا هر کاری در وب امکان پذیراست. اگر چه مایکروسافت در معماری دات نت هدف اجرا در پلاتفرمها و سیستمعاملهای مختلف را مد نظر داشته است اما حداقل تاکنون میتوان دات نت را یکابزار توسعه در سیستم عامل ویندوز دانست. البته پروژه هایی برای شبیه سازیو انتقال دات نت به محیط لینوکس نیز وجود دارد که مهمترین آنها پروژه Monoاست که پیشرفت قابل توجهی داشته است.انتظار می رود در آینده نزدیک ASP.NETدر هر سیستم عامل و پلاتفرمی قابل اجرا باشد.
سیستم عامل
اگرچه اصولا انتخاب ابزار توسعه نرم افزار ارجحیت بیشتری بر انتخاب سیستمعامل دارد اما در دنیای واقعی قضیه به این سادگی نیست و گاهی برنامه نویسبراساس سیستم عامل ابزار خود را انتخاب میکند. امروزه تقریبا دو بسترمتفاوت داریم از طرفی سیستم عاملهای سرور ویندوز و از طرف دیگر نسخه هایمختلف لینوکس و یونیکس. ویندوز ابزار رایج و آشنایی برای کاربران و برنامهنویسان است و از طرفی یونیکس سیستم عامل ارزان تر ( و البته حرفه ای) است.در ویندزو عموما ترکیبی از دانت نت،IIS، SQL Server داریم و در یونیکسPHPو Apache و MySql و مشخص است که هزینه نهایی پیاده سازی و اجرای یک وبسایت در ترکیب لینوکسی ارزان تر است.پی اچ پی در ویندوز نیز قابل اجراستوبخصوص در نسخه های جدید PHP این اجرا شکل بهتری نیز گرفته است. در حالحاضر نسخه اولیه از Mono (دات نت در محیط لینوکس) قابل اجرا است اما حداقلبه اندازه PHP رایج نیست. از طرفی نیز ASP.NET ترکیب ایده آلی برای کار باویندوز و IIS است و در واقع هماهنگی و همخوانی این ابزارها در ویندوز(بخصوص اینکه همگی محصول یک شرکت هستند) شاید یکی از بهترین بسترهای توسعهنرم افزار و وب سایت در ویندوز را پدید می آورند.
معماری
همانطور که اشاره شد پی اچ پی برای طراحان سایت و گریز از پیچیدگی هایابزارها و زبانهای آن روزگار ایجاد شده است و بنابراین PHP اولیه یک ابزارساده و نه چندان پیچیده بوده است. البته PHP در این سالها ارتقاء پیداکرده است اما هنوز نقصهای اولیه ای را دارد( مثلا با وجود شی گرایی هنوزدستورات و توابع زیادی از آن ارتباطی با شی خاصی ندارد و یا خاصیتهای حرفهای شی گرا را ندارد.). اما دات نت فراتر از یک زبان است و مجموعه ازکتابخانه های استاندارد و زبانهایی که تقریبا تمام قابلیتهای زبانهای روزدنیا را دارند. سینکس حرفه ای، استاندارد و جذاب #C و یا سینتکس ساده وکارآمد VB.NET و البته #J و ++C و چند زبان دیگر نیز وجود دارند. دات نتکاملا شی گرا است و معماری آن حرفه ای است و از این جهت با JAVA (آنرا رابا جاوا اسکریپ اشتباه نگیرید) قابل مقایسه است. در واقع از لحاظ معماریJAVA و دانت نت پلاتفرمهایی با معماری Enterprise هستند و PHP زبانی سادهبا تمرکز برای نوشت اسکریپهای وب. شرکت ZEND که در حال حاضر Engine اصلیPHP را ارائه میدهند و برخی شرکتهای دیگر تلاشهایی برای ارتقاء و ایجادفریم ورک حرفه ای تری برای PHP دارند اما در کل و از لحاظ مهندسی نرمافزار معماری دات نت برتری محسوسی نسبت به PHP دارد.
در بعد دیگر ابزارهای کار با دات نت و آموزه ها و پتانسیل دات نت نوشتننرم افزارهای با معماری بهتر را امکان پذیر میکند و حتی بصورت پیش فرضمعماری چند لایه در دات نت وجود دارد. همچنین نرم افزارهای مهندسی نرمافزار مانند ابزار CASE Tools ، Rational و... همخوانی با دات نت دارند .
یکی از مهمترین تفاوتهای ASP.NET و PHP در شکل اجرای آنهاست. در PHP در هربار اجرای اسکریپ کدهای PHP تفسیر می شود ولی در دانت نت یکبار کدهاکامپایل می شوند و در دفعات بعد کدهای اجرایی هستند که اجرا می شود. ازاین لحاظ بخصوص در نرم افزارهای تحت وب با حجم کد بالا اجرای کدهایکامپایل شده به مراتب سرعت بیشتری خواهند داشت. البته شرکتهای مختلفی برایPHP ابزارهای accelerator و caching نوشته اند اما به هر حال در دات نتاینکار بصورت ذاتی و بدون نرم افزار خاص دیگری انجام می گیرد.

سرعت توسعه نرم افزار
اگر قرار باشد فقط چند خط برای نوشتن در صفحه یا گرفتن پارامتری از کاربرداشته باشیم مطمئنا نوشتن با PHP ساده تر و سریعتر خواهد بود. اما هدف داتنت تسریع در نوشتن سایتهای بزرگ با فرمها و اطلاعات متعدد است. در ASP.NETاز طراحی صفحاتی که web form نامیده می شوند تا حتی دسترسی به بانکاطلاعات و ماهیتهای مختلف اطلاعات، نمایش اطلاعات (مانند جداول) ابزارهایبصری وجود دارند که این در نهایت کار را بسیار ساده تر میکند همچنین برخیمسائل را به راحتی میتوان به فریم ورک دانت نت سپرد (مانند Caching،اعتبار سنجی اطلاعات ورودی authentication و...) همچنین استفاده ازکتابخانه غنی دانت نت باعث می شود که نیاز چندانی به استفاده از کتابخانهتوابع خارجی نباشد که این در توسعه نرم افزار بصورت تیمی و پشتیبانی یکمزیت به شمار می رود. البته در PHP نیز ابزارهای برای تسریع طراحی و نوشتناسکریپتها وجود دارند اما هر کدام برای شرکتهای مختلفی است و شکل کارمتفاوت است.
سرعت اجرای نرم افزار
همانطور که اشاره شده صفحات و کدهای ASP.NET کامپایل می شوند و قابل حدساست سرعت اجرای آنها نسبت به اجرای اسکریپت PHP بیشتر است و البته اینکاملا درست است. اما در واقع شرایط به همین سادگی نیست. در اسکریپتهای PHPمفسر سریعا کدهایی که بایستی تفسیر شوند را اجرا کرده و خروجی را مرورگرکاربر می فرستند. اما در ASP.NET به غیر از کدهای نوشته شده توسط برنامهنویس چندین ماژول در لایه های دیگری نیز اجرا می شوند. (مثلا تنظیمات رامیخوانند. خروحی کنترلهای وب فرمها را تولید (Generate) میکنند،اعتبارسنجیها را انجام میدهند) و اینها در سرعت اجرا موثر خواهند بود(البتهامکاناتی برا حذف و بهبود سرعت وجود دارد) بنابراین با توجه به تجربه شخصیدر اسکریپتهای ساده (در حد چند ده خط) و تعداد دفعات اجرای معمول سرعتاجرای PHP و ASP.NET آنقدرها اهمیت خاص ندارد. توجه کنید که به هر حال نرمافزارهای بر تسریع اجرای PHP نیز وجود دارند. اما در اجرای نرم افزارهایبزرگتر مانند web application هایی که از دهها یا صدها کلاس و لایه هایمختلف تشکیل شده اند مطمئنا برتری با نرم افزارهای کامپایل شده خواهد بود.البته میدانید که در نسخه های کامپایل شده نیازی به قرار دادن سورس کدهادر وب سایت یا ارائه آن به مشتری نیست که این قضیه برای بسیاری شرکتها(بخصوص برای حمایت از حقوق نرم افزار و همچنین امنیت) یک مزیت به حساب میاید.
یادگیری
پی اچ پی با هدف اولیه سادگی برای استفاده و یادگیری نوشته شده است وتاکنون نیز هدف را منظور کرده است بنابراین میتوان به سادگی گفت کهیادگیری و استفاده از PHP ساده تر از ASP.NET (حتی با وجود زبانی باسینتکس ساده VB.NET) است.استفاده از ASP.NET نیازمند آشنایی با مفهوماولیه شی گرایی و همجنین پیچیدگیهای خاص دانت (مثل رویدادهای اجرای صفحاتبه جای اجرای خطی) است. در واقع یادگیری و استفاده از ASP کلاسیک ساده تراز ASP.NET و قابل قیاس با یادگیری PHP است. عموما طراحان وب سایت به دلیلسادگی استفاده و یادگیری PHP آنرا فرا میگیرند و برنامه نویسان حرفه ای ومهندسان نرم افزار هم علاقه بیشتر به دات نت و JAVA دارند.
همچنین یک نکته قابل توجه در PHP وجود هزاران خط کد و اسکریپت آماده بهزبان PHP است که تقریبا در هر زمینه ای وجود دارند (از کارهای ساده بابانک اطلاعاتی تا کار با تصاویر،سوکتها، وب سرویسها، XML و ...) این قضیهباعث شده بسیاری از برنامه نویسان PHP به جای نوشتن کدها بسیاری اوقاتاسکرپیتهای آماده موجود در اینترنت را سر هم کنند و به هدف خود برسند و یاشیوه کار را فرا بگیرند. البته کم کم در مورد دانت نیز این قضیه در حالاتفاق است و سایتهایی که کدهای نمونه یا نرم افزارهای آماده با سورس ارائهمیکنند در حال افزایش هستند.
بازار کار
دو معیار برای سنجش بازار کار وجود دارد یکی سایتهای خارجی و دیگری بازارایران، اگر نگاهی به ساده به سایتهای کاریابی خارجی مانند (مونستر یاYahoo Job) داشته باشید خواهید دید که هم برای برنامه نویسان PHP و همبرای ASP.NET موقعیتهای شغلی وجود دارد اما نکته قابل توجه حقوق بالاتر وهمچنین شرکتهای معتبری هستند که برای استخدام برنامه نویسان ASP.NET آگهیداده اند.
در ایران نیز عموما شرکتهای معتبر نرم افزاری ( که به شکل سنتی در پلاتفرموابسته به ویندوز) فعالیت می کنند علاقه مند به استخدام برنامه نویسانASP.NET هستند. و شرکتهایی که روی ترجمه،ارائه ابزارهای پشتیبان یاتغییرات روی نرم افزارهای Open Source معروف خارجی کار میکنند و یانیازمند به پیاده سازی سایتهایی در لینوکس هستند علاقمند به استخدامبرنامه نویسان PHP هستند. اگرچه این یک نظر شخصی است اما براساس تجربهشخصی حقوق برنامه نویسان ASP.NET در ایران نیز در مقایسه بیشتر است.
شاید سوال پیش آید که چرا با وجود برخی برتریهای ASP.NET همچنان تعدادزیادی برنامه نویس PHP و نرم افزارهای تحت وب با این زبان نوشته می شود.یکی از مهمترین دلایل آن همانطور که قبلا اشاره شد ارزانی کار با ترکیبPHP و لینوکس است که به آن اختصارا LAMP گفته می شود. اجرا و طراحی یک وبدر بستر ویندوز با در نظرگرفتن هزینه لایسنس ویندوز سرور، SQL Server ومحیط توسعه Visual Studio در قیاس با ارزانی و حتی رایگان بودن سیستم عامللینوکس و MYSql و محیطهای توسعه PHP دلیل مهمی برای انتخاب ترکیب PHP ولینوکس بخصوص برای برنامه نویسان مستقل در خارج از کشور است. اما قاعدتادر مورد پروژه ای بزرگ و شرکتهای بزرگ نرم افزاری این هزینه ها آنقدر قابلتوجه نیست و بنابراین این شرکتها استفاده از پلاتفرمهای حرفه ای تر مانندJAVA و دات نت را انتخاب می کنند.
دیگر موارد
یکی از خصوصیات PHP کدباز یا Open Source بودن آن است که توسط طرفدارانPHP به عنوان یک مزیب به شمار می رود. این قضیه این امیدواری را ایجادمیکند که PHP با عدم پشتیبانی در آینده مواجه نخواهد بود و به روند رو بهتوسعه خود ادامه خواهد داد اما از طرفی با نگاه واقعگرایانه خواهیم دید کهمفسر اصلی و برخی از مهمترین ابزارهای PHP توسط یک شرکت خاص (Zend )عرضهمی شود و در عین حال مایکروسافت توانسته پیشرفت قابل توجهی در مقایسه درابزارها و بسترهای توسعه نرم افزار خود ایجاد کند.همچنین نکته ای که برایفارسی زبانان قابل توجه است پشتیبانی ذاتی دات نت از یونی کد و رشته هایفارسی است. در PHP اگرچه ارسال یا دریافت اطلاعات فارسی امکان پذیر استاما در واقع خود PHP درک درستی از آن ندارد و این قضیه در زمان کار پیچیدهبا رشته ها مشخص تر است.

کدامیک را انتخاب کنیم؟
انتخاب یک ابزار یا بستر توسعه نرم افزار (یا وب سایت) همانطور که گفته شدبایستی براساس نیاز نرم افزار یا وب سایت باشد. بطور مثال اگر لازم استسایت در سرور لینوکس اجرا شود و یا در آینده سایت از یک محیط (مثل ویندوزبه یونیکس) منتقل شود با توجه به شرایط روز شاید بهتر باشد PHP انتخابشود. اگر قرار است پروژه ای بزرگ با استفاده ازمتدها و ابزارهای مهندسینرم افزار پیاده سازی شود باشد و هزینه اجرا ارجحیت نخست نیست شایدASP.NET گزینه بهتری باشد. در عین حال فکر میکنم دانشجویان و مهندسان نرمافزار ایرانی با توجه به بازار خوبی که در خارج از کشور و همچنین ایرانوجود دارد و اینکه یادگیری دانت فقط پیاده سازی صفحات وب نیست و امروز یکیاز رایجترین ابزارهای توسعه نرم افزارهای تحت ویندوز است یادگیری دات نترا به عنوان یک گزینه مهم بایستی مد نظر داشته باشند.