دیروز مطلبی در سایت .NET Tips دیدم تحت عنوان “PHP سریع‌تر از ASP.NET! واقعیت یا افسانه“ نویسنده مطلب اشاراتی به بعضی دلایل فنی از جمله تفاوت PHP و ASP.NET از نظر نوع زبان (مفسری یا کامپایلی بودن) و تعدادی benchmark داشته و در نهایت نتیجه گرفته است که سریع‌تر بودن PHP درست نیست.

در این نوشته به یک موضوع اساسی در حوزه فناوری اطلاعات می‌پردازم: طرفداری. این طرفداری می‌تواند مثلاً در حوزه سیستم عامل باشد (دعوای طرفداران لینوکس و ویندوز) یا موبایل و سیستم عامل موبایل (دعوای طرفداران اندروید و iOS) یا تکنولوژی‌های وب (دعوای طرفداران PHP‌ و ASP.NET) و …

شما یادتون نمیاد! یکی از معروف‌ترین wallpaper های زمان ما که به دعوای لینوکسی‌ها و ویندوزی‌ها اشاره داشت

مقایسه درست و مقایسه غلط

یک واقعیت این است که در بسیاری از حوزه‌های فناوری نمی‌توان یک مقایسه کامل و بی‌نقص انجام داد. مثلاً همین مساله سرعت PHP‌ و ASP.NET را در نظر بگیرید. هر دو این فناوری‌ها برای تولید صفحات پویا استفاده می‌شوند، بنابراین مقایسه سرعت برای تولید یک کد html ساده (در حد echo کردن یا معادل دات نتی آن Response.Write) چیزی را معلوم نمی‌کند و مهم نیست!

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

و همه این‌ها به کنار، من به عنوان یک برنامه‌نویس ASP.NET می‌توانم برنامه‌ام را به شکلی بنویسم که با بدترین performance و کندترین شکل ممکن اجرا شود! یعنی الگوهای استفاده شده در تولید نرم‌افزار و مهارت برنامه‌نویس و روش اجرا هم واقعاً در مقایسه تاثیرگذار است: فرض کنید به دو برنامه‌نویس که یکی PHP‌ کار است و دیگری ASP.NET کار بگویید برنامه‌ای بسازد که در یک آرایه مشخص (که برای هر دو برنامه یکسان است) به دنبال یک عنصر خاص بگردد. یکی بهینه‌ترین (و خفن‌ترین) الگوریتم جستجو را پیاده‌‌سازی کند و دیگری جستجوی خطی را پیاده کند. معلوم است که نتیجه چه خواهد بود.

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

بنابراین در دعواهای طرفداری همیشه این موضوع را در نظر بگیرید که آیا مقایسه انجام شده کاملاً قابل اطمینان است یا خیر؟

فناوری، یک ابزار در دست شماست. نه بیشتر نه کمتر

اگر در رشته کامپیوتر درس خوانده باشید، لابد دعواهای دانشجویی بر سر انتخاب سیستم عامل و زبان برنامه‌نویسی را از ترم‌های اول دانشگاه به یاد دارید!

تجربه ده ساله من می‌گوید آن‌ها که حرفه‌ای هستند سر این مسائل با هم بحث و جدل نمی‌کنند! البته ممکن است شما نوشته‌ای از جف آتوود در مذمت PHP به من نشان بدهید، اما این را به یاد داشته باشید همان جف آتوود وقتی می‌خواهد پروژه discourse را بسازد از ruby استفاده می‌کند. چرا؟ خیلی ساده است طرفدار بودن با متعصب بودن فرق دارد.

به عبارت بهتر همه این فناوری‌ها فقط ابزار هستند و نباید آن‌ها را از اندازه ابزار بزرگتر دید.

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

به همه این فناوری‌ها به شکل ابزار نگاه کنید. اگر این ابزارها به شما در راه رسیدن به هدفتان کمک می‌کنند از آن‌ها استفاده کنید و گرنه خیلی راحت بروید سراغ یک ابزار دیگر.

من رفقایی داشتم که با تعصب خاصی معتقد بودند دلفی خیلی قوی‌تر از vb است. شاید درست می‌گفتند ولی آخرش بورلند (به آن شکلی که می‌شناختیم) تمام شد! و آن طرفداران متعصب ماندند و ابزاری که دیگر مثل قبل نبود و در برابر دات نت زانو زده بود.

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

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