Tuesday, December 5, 2006

مقایسه‌ای تطبیقی بین جاوا و دات‌نت

مقدمه

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

در این مستند قصد داریم تا از منظر تولید سیستم‌های مبتنی بر وب، مقایسه‌ای کاربردی بین جاوا و دات‌نت داشته باشیم.

تاریخچه

تاریخجه‌ی فراگیر شدن دات‌کام‌ها و در واقع ارائه‌ی سرویس‌های مجازی مبتنی بر وب به اواخر دهه‌ی 90 و خصوصاً سال‌های 1998 تا 2000 بر می‌گردد [JavaWorld]. در آن زمان علاوه بر فراگیر شدن اینترنت، بلوغ مرورگرهای وب و استانداردسازی قراردادهای ارتباطات مبتنی بر وب همه و همه به توسعه‌ی سرویس‌های مجازی کمک کردند و به بیانی شرکت‌ها یک زمین مجازی برای ارائه‌ی خدمات یافتند. به تبع آن، نیازی روزافزون برای تسهیل توسعه‌ی سیستم‌های مبتنی بر وب احساس می‌شد.

پاسخ شرکت سان (Sun Microsystems) به این نیازها ارائه‌ی بسته‌ی توسعه‌ی نرم‌افزار Java 2 Entrrprise Edition (به طور مخفف J2EE، که از نسخه‌ی 5 به بعد به Java EE معروف است) بود. این بسته در واقع مجموعه‌ای از استانداردهای فناوری‌های مبتنی بر وب بود که با استفاده از جاوا، مجموعه امکانات جدیدی را به توسعه‌دهندگان برنامه‌های وب (و فراتر از آن سیستم‌های توزیع‌شده مانند EJBها) ارائه می‌داد. J2EE در واقع مجموعه‌ای از استانداردها به همراه پیاده‌سازی مرجع آن‌ها (عموماً توسط سان) می‌باشد.

سه سال پس از ارائه‌ی J2EE (که اساساً حول محورهای برنامه‌های حجیم، معماری‌های پیچیده و طراحی منسجم قرار دارد)، مایکروسافت در سال 2002 فناوری دات‌نت را ارائه داد. در این بسته‌ی توسعه‌ی نرم‌افزار، مایکروسافت زبان‌های گوناگونی چون VB.Net، J#.Net، C++.Net و زبان جدید C#.Net را ارائه داد. همچنین برای توسعه‌ی سیستم‌های مبتنی بر وب برنامه‌نویسان می‌توانستند از فناوری ASP.Net استفاده نمایند. کتابخانه‌ی کلاس‌های دات‌نت با در نظر گرفتن امکانات موجود جاوا و به منظور رقابت با آن طراحی شده بودند. با اندک نگاهی به آن می‌توان متوجه شد که بر خلاف جاوا که طراحان آن بهترین تمرین‌ها (Best practices) را ملاک طراحی خود قرار داده بودند و به شدت به اصول طراحی پایبندند، پایبندی اصلی طراحان کتابخانه‌ی کلاس‌های دات‌نت، سهولت کاربر و آسانی نوشتن کد (هم از جهت اختصار و هم از جهت ملموس بودن) است.

در ادامه‌ی به بررسی دو فناوری جاوا و دات‌نت از منظر‌های مختلف می‌پردازیم.

کارایی (Performance)

هر چند مقایسه‌ی کارایی فناوری‌های مبتنی بر دات‌نت و جاوا کاری پیچیده و دشوار است، مقایسه‌ی سرعت محیط‌های اجرایی آن‌دو (1) برای برنامه‌های سرعت‌گیر و محاسباتی حاکی از آن است که تفاوت چندانی وجود ندارد. برخی ادعا می‌کنند که به دلیل قابلیت اجرای برنامه‌های جاوا بر روی بسترهای مختلف نرم‌افزاری (بر خلاف دات‌نت که فقط بر روی بستر ویندوز قابل اجراست (2)) کارایی آن نسبت به دات‌نت کم‌تر است. این ادعا هر چند در عمل برای برنامه‌های گرافیکی محیط ویندوز در مقابل برنامه‌های جاوا مبتنی بر سوینگ (Swing) مشاهده می‌شود، ولی برای برنامه‌های سنگین محاسباتی و یا مواردی چون سرعت عملیات ورودی و خروجی (I/O) به چالش کشیده می‌شود و باید در آن تردید کرد (3).

در مورد اجرای برنامه‌ها، هر دو محیط از روش تفسیر (interpret) (و نه کد ماشین) استفاده می‌کنند. در این روش پس از کامپایل کد منبع (source code)، یک کد دودویی میانی تولید می‌شود که برای مفسرهای جاوا/دات‌نت قابل فهم است. به طور معمول روش تفسیر در زمان اجرا از تولید و اجرای کد ماشین کندتر است ولی هر دو فناوری موجود برای بدست آوردن مزایای تفسیر از تولید کد ماشین صرف‌نظر کرده‌اند.

در بعد محسوس‌تر، باید سرعت تولید صفحات پویای ASP.Net را به عنوان مثال با JSP مقایسه کرد. این کار هرچند در نظر اول منطقی به نظر می‌رسد ولی با آسانی ممکن نیست. صرف‌نظر از اینکه دیگران چه ادعاهایی در مورد سرعت برنامه‌های تحت وب جاوا در مقابل دات‌نت دارند توجه به نکات زیر ضروری است:
برنامه‌های ASP.Net بالاجبار از تنها سرور قابل اطمینان برنامه‌های دات‌نت آی‌آی‌اس (Microsoft’s Internet Information System) استفاده می‌کنند. این وب سرور یکی از قدرتمندترین وب‌سرورهای محیط ویندوز است که منحصراً در همان محیط اجرا می‌شود. در مقابل برای توسعه‌ی یک برنامه‌ی تحت وب J2EE طیف وسیعی از سرورهای برنامه‌ی کاربردی از تجاری گرفته تا بازمتن (open source) و از سنگین‌وزن (heavy weight) گرفته تا سرورهای جاسازی شده (embedded) در اختیار برنامه‌ساز وب است. در این میان می‌توان از حداقل 10 سرور زنده و محبوب نام برد که بر روی تمامی محیط‌هایی که جاوا در آن اجرا می‌شود نصب می‌شوند (4).

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

در مجموع می‌توان گفت به جز مواردی نظیر برنامه‌های گرافیکی تحت ویندوز، برنامه‌های دات‌نت مزیتی از لحاظ سرعت اجرا بر جاوا ندارند و حتی در مواردی کندتر اجرا می‌شوند.

زمان توسعه

اساساً این یک حقیقت است که سرعت توسعه‌ی برنامه‌های دات‌نت بیشتر از برنامه‌های J2EE است، هرچند باید به این نکته توجه داشت که برای هر شرکت تولید نرم‌افزار، مهم تخصص‌های موجود در آن شرکت است. در صورتی که تخصص‌های برابر دات‌نت و جاوا وجود داشته باشد، سرعت تولید برنامه‌های تحت وب دات‌نت - مشروط بر شرایط زیر - به صورت محسوسی بیشتر از برنامه‌های J2EE است:
محیط و فناوری‌های مورد استفاده توسط مایکروسافت پشتیبانی شوند. این بدان معنی است که بهترین حالت برای تولید نرم‌افزار در محیط دات‌نت، استفاده از VS.Net در کنار VSS (مدیریت کنترل نسخه‌های متن برنامه)، MS SQL Server‌ به عنوان دِیتابیس سِرور و IIS به عنوان وب سرور می‌باشد. تغییر هر یک از موارد فوق به یک محصول غیر مایکروسافتی (مثلاً استفاده از اراکل به جای SQL Server) مساوی با تأخیر در تولید نرم‌افزار در محیط دات‌نت است.
به دلیل قدمت بیشتر جاوا (از حدود سال 1996) در برابر دات‌نت (از 2002) کتابخانه‌های گوناگونی برای تقریباً هر کاری برای جاوا نوشته شده است. در حالی که دات‌نت تلاش می‌کند در این مورد از جاوا عقب نماند، ولی این حقیقت کماکان وجود دارد که عموماً کتابخانه‌های قابل قبول دات‌نت توسط شرکت مایکروسافت ارائه می‌شوند. کافی است مقایسه‌ای بین برنامه‌های موجود بر سایت SourceForge.net داشته باشیم. در حال حاضر (شهریور 85) در برابر 6.480 برنامه‌ی مختلف به زبان‌های VB.Net و C#.Net، بیش از 22.000 برنامه جاوا (شامل کتابخانه‌ها، برنامه‌های کاربردی، بازی‌ها، ابزارهای اینترنت و ...) وجود دارد. این واقعیت وجود دارد که در برابر 3 یا 4 کتابخانه‌ی مختلف بازمتن جاوا برای یک کار خاص (مثلاً فشرده‌سازی، ایمیل، پروتکل‌های مختلف شبکه و ...) یک و یا دو پیاده‌سازی مورد استفاده در دات‌نت (و آن‌هم متعلق به مایکروسافت) وجود دارد. در واقع در برابر بازار آزاد و خنثای تولید نرم‌افزارهای Java/J2EE (که با ارائه‌ی استاندارد و لیسانس کردن نرم‌افزارها، به شرکت‌های مختلف اجازه می‌دهد تا پیاده‌سازی خود را برای هر استاندارد J2EE ارائه دهند)، انحصار بازار و تجارت اصلی دات‌نت در اختیار مایکروسافت است.

انجمن (community)

جاوا و دات‌نت توسط طیف وسیعی از کاربران مورد استفاده قرار می‌گیرند. در حالی که شرکت‌های بزرگی چون مایکروسافت و SAP از طرفداران اصلی دات‌نت هستند، در طرف دیگر میدان سان، اراکل (Oracle)، آی‌بی‌ام (IBM) و رِدهَت (RedHat) حضور دارند. اراکل در دیتابیس خود یکپارچگی قابل قبولی با جاوا ارائه می‌کند و در عین حال هر سه شرکت اراکل، آی‌بی‌ام و سان (و همچنین BEA) بسته‌ی JDK خود را تحت لیسانس سان (یعنی به صورت کاملاً Sun compaliant) ارائه می‌دهند. در این مورد کاربران با گزینه‌های مختلفی از بسته‌ی توسعه‌ی نرم‌افزار جاوا مواجهند.

تقریباً تمامی دیتابیس‌های کنونی قابل استفاده در هر دو محیط دات‌نت (با استفاده از ODBC و یا native client) و جاوا (JDBC) هستند.

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

قابلیت گسترش

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

سهولت استفاده برنامه‌نویس

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

آسانی یادگیری

به نظر نمی‌رسد در این مورد تفاوت خاصی بین دو فناوری وجود داشته باشد، هرچند پشتیبانی دات‌نت از چندین زبان به برنامه‌نویسان این امکان را می‌دهد که ملموس‌ترین زبان را برای خود انتخاب کنند.

انحصار (سیستم‌عامل، ابزارها و ...)

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

از مزایای دیگر جاوا قابلیت اجرای آن بر روی اکثر سیستم‌عامل‌های موجود است. در واقع این به عنوان مهم‌ترین برتری جاوا بر دات‌نت شناخته می‌شود، هر چند برخی آن‌را سرگردان کننده می‌دانند. جاوا از موبایل‌های ساده تا دستگاه‌های اکترونیکی نظیر ماکروفر و یخچال و PDA حضور دارد (نسخه‌ی سبک جاوا). در مقابل دات‌نت هم بر روی PDAهای Pocket PC وجود دارد (نسخه‌ی سبک دات‌نت).

سخت‌افزار مورد نیاز

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

نرم‌افزار مورد نیاز

برای برنامه‌سازی جاوا باید Java SDK را در اختیار داشت و برای دات‌نت نیز .Net Framework که هر دو به صورت رایگان قابل دریافتند.

اپن‌سورس

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

یک برنامه‌نویس محیط جاوا به سادگی می‌تواند با استفاده از هر فناوری حوزه‌ی J2EE یک نرم‌افزار - فقط با استفاده از ابزارهای بازمتن - تولید کند.

به علاوه روند توسعه‌ی خود Java SDK به سایت java.net (که حاوی پروژه‌های باز متن جاوا است) منتقل شده و کاربران از نسخه‌ی Java SE 5 به بعد به سادگی به کد منبع SDK جاوا دسترسی دارند. این موضوع متأسفانه هنوز در مورد دات‌نت اتفاق نیفتاده ولی با توجه به رویکرد جدید مایکروسافت نسبت به حمایت از پروژه‌های بازمتن بعید نیست در سال‌های آتی شاهد آن باشیم.

به تازگی سان اعلام کرده که می‌خواهد بسته‌ی نرم‌افزاری توسعه‌ی جاوا را تحت لیسانس آزاد گنو (GNU General Public License) ارائه کند.

در کنار این جریان مایکروسافت هم با حمایت از چند سایت (که پروژه‌های بازمتن را توسعه می‌دهند) قصد دارد تا نقشی در عرصه‌ی بازمتن ایفا کند. سایت‌های GotDotNet و CodePlex از این دسته‌اند.

محیط برنامه سازی (IDE: Integrated Development Environment)

یکی از موارد مهم در تولید نرم‌افزار ابزار اصلی برنامه‌نویسان یعنی محیط برنامه‌سازی با IDE می‌باشد. در حالی که دات‌نت تنها یک IDE قدرتمند دارد که غیر رایگان است، جاوا در حدود ده IDE مختلف از محیط‌های بازمتنی مانند Eclipse و NetBeans گرفته تا محیط‌های تجاری چون IntelliJ IDEA، JBuilder، Workshop، JDeveloper و WebSphere را در اختیار دارد.

یگانه محیط برنامه‌سازی دات‌نت Visual Studio.Net می‌باشد که تقریباً تمامی امکاناتی که یک IDE بالغ باید داشته باشد را در خود گرد آورده. در مقابل ابزارهای بازمتنی چون Eclipse با قابلیت نصب pluginهای گوناگون، IDEهای دیگر را به چالش می‌کشد. هرچند محیط‌های بازمتنی چون SharpDevelop هم برای توسعه‌ی برنامه‌های دات‌نت در اختیار است، لیکن این محیط‌ها تفاوت چشمگیری با VS.Net دارند.

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

نتیجه‌گیری

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


(1) .Net CLR (Common Language Runtime) versus JVM (Java Virtual Machine)
(2) پروژه‌ی مونو (Mono) یک پیاده‌سازی غیر رسمی محیط‌کار دات‌نت بر روی سیستم عامل لینوکس است، که هر چند امکان اجرای بسیاری از برنامه‌های دات‌نت را بر روی لینوکس فراهم می‌کند، لکن به دلیل ماهیت غیر رسمی‌اش، هیچ‌گاه به عنوان یک محیط‌کار کامل و منطبق با پیاده‌سازی مایکروسافت شناخته نمی‌شود.
(4) Tomcat, JBoss, Weblogic, OC4J, WebSphere, Jetty, JonAS, Caucho, ...

1 comment:

ali said...

اگر چه مدت زيادی از انتشار مطلب گذشته بود اما مفيد بود
با تشكر