# فناوری جاوا > برنامه‌نویسی جاوا > Java SE : نگارش استاندارد جاوا >  مزایا و معایب جاوا

## teymoorei

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

1- مزایا و معایب جاوا چیست ؟

2-انتظارات من از برنامه نویسی :

   1-زبانی که قابل حمل باشه ( مستقل از پلتفرم ) یا به عبارتی مثل داتنت نخواد DotNetFrameWork رو همراه خودش ببریم یا (Portable) باشه .
   2-امنیت بالایی داشته باشه .
   3-قابل فهم و یادگیری آسونی داشته باشه .
   4-برای برنامه نویسی تحت ویندوز و پایگاه داده امکانات خوبی داشته باشه (مثل vb.net) که خیلی هم راحته .
   5-هر جایی بتونم برنامه نویسی کنم .
حالا دوستان هرکی میتونه به سوالات من جواب بده ، چون من خیلی وقته قصد دارم از برنامه نویسی با vb.net کناره بگیرم .
باتشکر

----------


## eshpilen

جاوا هم نیاز به نصب VM داره.
۱) اصولا یکی از روشهای اصلی پیاده سازی مستقل از پلتفرم بودن استفاده از VM (ماشین مجازی) هست.
۲) یک روش دیگرش استفاده از مفسرهاست.
۳) یک روش دیگر استفاده از کامپایلر و کامپایل شدن مخصوص هر سیستم عامل هست همراه با کتابخانه هایی که مخصوص همون سیستم عامل طراحی و کامپایل شدن اما در تمام پلتفرم ها یک API یک شکل رو شبیه سازی میکنن (تاحد امکان).

حتی فریمورک های مستقل از پلتفرم مثل Qt هم (که در دستهء سومه) که با سی++ هست و ماشین مجازی نداره بالاخره چنتا فایل dll حجیم دارن اکثرا که این خودش بعضی جاها نامطلوب هست. مثلا موقعی که میخوای برای دانلود بذاری. ضمنا متاسفانه فکر نمیکنم Qt درحد جاوا یا دات نت کامل و راحت باشه و فریمورک های در دستهء ۳ رو دیگه سراغ ندارم که بحد کافی هم سطح بالا و کامل باشن. و شاید این بخاطر این باشه که احتمالا طراحی و گسترش و نگهداری فریمورک های مستقل از پلتفرم به روش دستهء ۳ دشوارتر و پرهزینه تر هست.

هرچی فریمورک کاملتر و پیشرفته تر باشه پیچیدگی و حجم اجزاء مورد نیاز و تعامل اونها با سیستم عامل هم طبیعتا بیشتر میشه و احتمالا از نوعی نصبی خواهد بود. درمورد بعضیا مثل جاوا و دات نت نیاز به نصب این اجزاء هست و درمورد بعضیا لزوما نیازی به نصب چیزی نیست. مثلا Qt نیاز به نصب نداره و فقط کافیه dll ها رو همراه برنامه بذارید. درمورد پایتون هم تا جاییکه میدونم میشه با روشها و ابزارهایی برنامه هاش رو تبدیل کرد که بصورت exe در بیان و مستقل و بدون نیاز به نصب چیز دیگری اجرا بشن. درواقع این برنامه ها یک مفسر پایتون رو بصورت درونی در داخل خودشون دارن؛ اما انتظار نداشته باشید این کار در تمام موارد سرراست و تضمین شده باشه. معمولا امکانات و حالت استاندارد و رسمی یک فریمورک هست که سرراست و تضمین شده هست.
ضمنا دوباره باید بگم متاسفانه پایتون هم درحدی نیست که بخواد رقیب کاملی برای امثال جاوا و دات نت باشه.
این حرفا بدین معنا نیست که این زبانها و فریمورک ها خوب نیستن و بدردی نمیخورن. فقط دارم میگم از نظر مقوله و گستردگی کاربرد درحد چیزهایی مثل جاوا و دات نت نیستن. وگرنه اینا هم زبانها و فریمورک های بسیار جالب و مفیدی هستن که در خیلی جاها گزینه های بقدر کافی یا حتی عالی و حتی بهتر از جاوا و دات نت محسوب میشن. این بستگی به نوع و مکان کاربرد و شرایط ما داره.

برنامه های معمولی و بومی هم، حتی نوشته شده با زبانهایی مثل سی++، بالاخره دارن از کلی سرویسها و کتابخانه های سیستم عامل استفاده میکنن. میشه گفت تقریبا هیچ برنامه ای مستقل نیست و اگر دقیق و کامل بررسی و تحلیل کنید میبینید که همهء برنامه ها به شکل اساسی و گسترده ای به کتابخانه ها و سرویسهای خارجی وابسته هستن. حالا یکسری از این سرویسها و کتابخانه ها همراه خود سیستم عامل هستن و باهاش نصب میشن و بنابراین نیاز به نصب جداگانه ندارن و یکسری اینطور نیستن. تفاوت عمده فقط همینه. یک تفاوت دیگه هم روش اجرا هست. مثلا یکی با مفسر اجرا میشه و یکی با ماشین مجازی (البته مفسر هم از جهتی یک ماشین مجازی هست) و یک کامپایل نسبی و مخصوص خودش و یکی هم با استفاده از dll ها که قطعه هایی از کد از پیش کامپایل شده هستن.
درواقع این بیشتر یک توهم و تصوری بی معنا هست که بعضیا میگن کد اجرایی Native و فکر میکنن این یعنی یه مزیت بزرگ هست به خودی خودش.
تنها تفاوتهایی که در واقعیت مهم هست چیزهایی مثل سطح برنامه نویسی (که با سرعت و راحتی برنامه نویسی رابطهء مستقیم داره)، سرعت اجرا و میزان مصرف منابع، امکان پنهان کردن الگوریتم و قفل کردن برنامه، و اینطور چیزا هست. نیاز به نصب اجزای خارجی هم که همونطور که گفتیم لزوما بستگی به Native بودن یا نبودن کد اجرایی برنامهء ما نداره و مثلا دات نت در آینده روی ویندوز کم و بیش مثل برنامه های Native خواهد بود و برعکس Qt که کد اجرای Native تولید میکنه نیاز به کپی کردن dll های مخصوص خودش داره.

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

فریمورک دات نت حجم خیلی زیادی داره و نصبش دشوار و زمانبر هست اما نکتهء مثبت قابل توجهی که درموردش وجود داره اینه که در ویندوزهای جدیدتر (عمدتا ویندوز ۷ و بعدی ها) جزیی از سیستم عامل هست و نیازی به نصب نداره. یعنی عملا میشه مثل کتابخانه های بومی سی++. مثل Win32 API. البته ممکنه در عمل گاهی نیاز به آپگرید و کارهای خاصی باشه ولی بهرحال بنظرم وضعیت خیلی بهتر خواهد شد از وضع فعلی که نصبش واقعا دشوار هست و گاهی حتی عملا صرف نمیکنه یا غیرممکنه (مثلا بعلت کم بودن فضای هارد).

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

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

----------


## teymoorei

دوستان خواهشا دقیق به سوالاتم جواب بدید و سریع

----------


## L u k e

قبلا زیاد بحث شده جستجو کنی چیزای خوب پیدا می کنی

----------


## teymoorei

> قبلا زیاد بحث شده جستجو کنی چیزای خوب پیدا می کنی


 دوست عزیز اگه به همه ی سوالاتم رسیده بودم اینن تاپیک رو نمیزدم .

----------


## mazdadoost

*خیلی واضح و کامل*  امکان نداره!

----------


## teymoorei

آخه چرا یکی نمی تونه به سوالایی که من واضح پرسیدم جواب بده ، تازه سوالایی که به درد هر کسی میخوره .

----------


## teymoorei

کجایید برنامه نویس ها ...

----------


## javaphantom

> کجایید برنامه نویس ها ...


شاید از جوابه من خوشت نیاد و ناراحتت بکنه ولی فکر کنم بهترین جواب برای شما باشه. کسی که در سطح vb کار کرده بهتره که قبل از اینکه بخواد با زبان جاوا و کلا دنیای جاوا آشنا بشه و وارد اون بشه ۲ راه کار از نظر من نداره یکی که از همه راحتر و بهتر و مفیدتر هست اینکه کلا وارد دنیای جاوا نشه و دومین راه حل اینکه ۴ تا ۵ سال مطالعه کنه و کلا بفمه که دنیای نرم افزار زبان نیست بلکه خیلی وسیعتر از این هست که آدم بخواد دنیای نرم افزارش در حد آموختن چند زبان باشه بعد وقتی به این درک رسید و فهمید دنیای نرم افزار چیه و دنیای امروز داره به سمت چی میره اون موقع خودش می فهمه که باید سراغ چه زبان و ابزارهایی باید رفت. در اون موقع هست که شما جواب تمام سوالاتو خودت به خودت خواهی داد.

----------


## teymoorei

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

----------


## omidbizdotcom

> لطفا خیلی واضح کمک کنید


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


http://www.mozilla.org/about/forums/etiquette.html
http://www.videojug.com/film/how-to-behave-on-an-internet-forum
http://www.wisegeek.com/what-is-forum-etiquette.htm
http://www.google.com/#sclient=psy&hl=en&site=&source=hp&q=forum+etiquet  te&aq=0s&aqi=g-s1g-sx3g-msx1&aql=&oq=forum+ettiqu&pbx=1&bav=on.2,or.r_gc.r  _pw.&fp=711da0863f755a&biw=1280&bih=798

به دنیای جاوا خوش آمدی

----------


## teymoorei

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

----------


## javaphantom

> سلام دوستان
> من خیلی توی اینترنت گشتم اما جایی نبود که مزایا و معایب جاوا رو خیلی واضح و کامل توضیح داده باشه ، و به سوالتم جواب بده ، این شد که تصمیم گرفتم یه تاپیک بزنم و سوالاتم رو بپرسم .
> 
> 1- مزایا و معایب جاوا چیست ؟
> 
> 2-انتظارات من از برنامه نویسی :
> 
>    1-زبانی که قابل حمل باشه ( مستقل از پلتفرم ) یا به عبارتی مثل داتنت نخواد DotNetFrameWork رو همراه خودش ببریم یا (Portable) باشه .
>    2-امنیت بالایی داشته باشه .
> ...





> 1- مزایا و معایب جاوا چیست ؟


تا شما مزیت و عیب رو  چی بدونید؟ چون شما با vb کار کردید من فقط در یک کلمه به شما جواب می دم خیلی خیلی کاملتراز vb هست اگرم عیبی داشته باشه شما حالا حالا به عیبش نمی رسی اما شاید به این عببش زود برسی که جاوا  برای آدمهایی که اهل مطالعه نیستند و از لحاظ علمی پایه ضیعفی هم دارند باعث می شه که زود پروژهاشون fail بشه.




> زبانی که قابل حمل باشه


 جاوا یک زبان کاملا portable‌هست.




> امنیت بالایی داشته باشه


امنیت هزاران معنی داره  اما فقط این رو بگم که آره چون نهایتا به byte code تبدیل می شه و در jvm اجرا میشه امنیت داره.



> 3-قابل فهم و یادگیری آسونی داشته باشه .


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




> -برای برنامه نویسی تحت ویندوز و پایگاه داده امکانات خوبی داشته باشه (مثل vb.net) که خیلی هم راحته .


اگر vb خوبه خوب با همون کار کنه. پالون خر عوض نکن. مهم اینکه خر خره دیگه. اگر با vb به هدفت می رسی چرا زبان دیگه یا ابزار دیگه.؟




> 5-هر جایی بتونم برنامه نویسی کنم .


اگر منظورت platform هست هرجا که گفتی  آره جاوا جواب می ده.




> حالا دوستان هرکی میتونه به سوالات من جواب بده ، چون من خیلی وقته قصد دارم از برنامه نویسی با vb.net کناره بگیرم .
> باتشکر


بازم می گم از vb کناره نگیر.

----------


## L u k e

معمولا سیر تکامل برنامه نوسیا اینجوریه
... بعد vb بعد C#‎ بعد جاوا بعد ...
شما یه پله رو جا انداختی ممکنه مشکلات زیادی واست پیش بیاد ولی زودتر به آخر راه می رسی

----------


## teymoorei

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

----------


## jReihane

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


دقیقا باید کلی چیز جدید یاد بگیرید! البته فریم ورک هایی هستند که به شما اجازه می دن که مثل برنامه های دسکتاپ کد بزنین و خودشون کدها رو تبدیل می کنن به چیزی که تحت وب قابل اجرا باشه. ولی خب همون فریم ورک ها رو هم اگر بخواین استفاده کنین باید یاد بگیرین دیگه! به طور کلی JEE یه چیزه JSE یه چیز دیگه با تمام اشتراکاتی که ممکنه داشته باشن

----------


## Ghost_

سلام دوست عزیز
من تازه جاوا رو شروع کردم.
البته قبلش C#‎ کار کردم  تا حدودی, من 6 ساله که دارم درس دانشگاهی کامپیوتر رو میخونم.
باید خیلی مفاهیم شی گرایی بلد باشی تا بتونی با java کنار بیای.
پیشنهاد من اینکه OOP رو خوب یاد بگیر بعد برو سمتش

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

دومین دلیل و مهمترین دلیلش اینکه جاوا رو یکبار بنویس همه جا اجرا کن (Write Once Run Anywhere)همین.

برای معایب نمیشه برای زبان های برنامه نویسی خصوصا زبان های غدری مثل جاوا و .net معایب پیدا کرد همشون تقریبا خوبه چون دایم وقت در حال update شدن هستن 
بستگی داره تو با کدومش راحت تر کنار میای.

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

----------

