رتبه موضوع:
  • 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
جاوا زبانی نسبتا سخت!
#1
پیرو درگیری های جدی تر اخیرم با جاوا، به این نتیجه رسیدم که جاوا زبانی سخت گیر و verbose می باشد. البته نسبتا!

یه نمونه از درگیری چند ساعته من با جاوا سر یک مسئلهء ساده: http://forum.ncis.ir/Thread-%D8%B9%D9%84...%8C-%D8%9F

حالا مقایسه کنید با PHP که دیگه از اونور پشت بام افتاده، از زیادی هوشمندبازی و شیرین کاری در زبان برنامه نویسی به ابتذال و خل و چل بازی و گند زدن به زبان منجر شده Big Grin

فکر کنم پایتون بین اینا زبان میانه رو و خوبی باشه واقعا.
همینطور هم سی شارپ بنظرم.

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

آی این گیر میده میگه exception هندل نکردی و اینا آدم کفرش درمیاد میگه آخه بتوچه دوست ندارم هندل کنم خب! حتما باید یه بلاک try - catch الکی بذاری دلش خوش باشه!

البته از جهتی هم شاید این سخت گیری ها زیادم بد نباشه ها. بستگی به نظر و/یا تجربهء شخصی هم داره.
پاسخ
تشکر شده توسط:
#2
البته یادم افتاد پایتون هم یه ویژگی داره که من خوشم نمیاد. اونم اینه که Indentation درش اجباریه!
بنظر من زبان نباید برنامه نویس رو به استایل خاصی از برنامه نویسی مجبور کنه.
من خودم اصل کار هستم چرا یه عده دیگه باید واسه من مصلحت اندیشی کنن بگن مثلا حتما باید exception ها رو هندل کنی یا کدت باید حتما Indent شده باشه! برنامهء خودمه هدف و شرایط خودمه من خودم هستم که تشخیص میدم ارزشش رو داره یا نه که این وقت و انرژی اضافه روش صرف بشه.

از اونور مثلا ببینید PHP هم اینقدر دیگه اومد هوشمندبازی دربیاره و برنامه نویسی رو خیلی خیلی ساده کنه که دیگه گند خورده از بعضی جهات؛ مثلا من خودم دیگه از عملگر == به ندرت توی برنامه هام استفاده میکنم (بجاش از === استفاده میکنم)، چون رفتارش خیلی به سختی قابل پیشبینی هست و میتونه براحتی موجب تولید باگهای دردسرساز پنهان و حفره های امنیتی در برنامه بشه.
پاسخ
تشکر شده توسط:
#3
چیزی که باعث شده از جاوا توی پروژه های Realtime و Enterprise استفاده بشه همین سختگیریهاشه که باعث شده هرکی هر مدلی دلش خواست نتونه کدنویسی کنه. اینکه گفتین شما اصل کار هستین هم بنظرم اشتباهه. برنامه شما اصل کاره نه خود شما. برنامه شما هم حیاتش بستگی به کیفیت کار داره و اینکه یک زبان داره سختگیری میکنه که کد غیر اصولی ننویسید، چیز بدی نیست. بهرحال هدف جاوا و PHP و هر زبان دیگه مشخصه و رویه کارکردشون و سختگیریهاشون هم در مسیر رسیدن به اون هدف تنظیم شده.
پاسخ
تشکر شده توسط: tabesh
#4
من با شما خیلی موافق نیستم!

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

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

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

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

بنظر من جاوا ایراد داره، PHP ایراد داره، حتی پایتون هم ایراد داره!
اما در کل همشون بجای خودشون ابزارهای بقدر کافی خوبی هستن.
موفقیت و دستاوردهای جنبش هایی مثل نرم افزار آزاد و بازمتن به خوبی نشون دادن که دادن آزادی و سپردن تصمیم به عموم، فرد فرد افراد، در عمل بازدهی و پیشرفت بهتری رو به ارمغان میاره. بنظر من زبان برنامه نویسی هم همینطوره که نباید دست و پای دیگران رو با هر هدف و تشخیص و دیدگاهی که دارن ببنده بگه نه باید فقط از تصمیمات و تشخیص و دیدگاه طراحان زبان پیروی کنید! این کار لزومی نداره به زور اجبار بشه. مثلا یکی نمیخواد exception ها رو هندل کنه، باید بتونه حداقل با کانفیگی چیزی (یا احتمالا یک اعلان در ابتدای سورس/پروژه خودش) این کار رو در جاوا براحتی انجام بده.
پاسخ
تشکر شده توسط:
#5
(20-09-1394، 02:21 ب.ظ)ADMIN نوشته: چیزی که باعث شده از جاوا توی پروژه های Realtime و Enterprise استفاده بشه همین سختگیریهاشه که باعث شده هرکی هر مدلی دلش خواست نتونه کدنویسی کنه.
اتفاقا بنظر من این نباید اجباری باشه. هرکس هر مدلی دلش خواست باید بتونه کدنویسی کنه. یعنی زبان، نباید وقتی ضرورت فنی نداره از نظر اساس و ساختار و امکانات خودش، این رو عمدا اجبار مطلق بکنه. اگر میخواد امکان کنترل و نظارت و تاکید بر کیفیت رو بده میتونه امکاناتی بذاره که برنامه نویس، تیم، مدیر پروژه، هرکسی که مسئول هست و میخواد، با تنظیمی کانفیگی چیزی بیاد و اون ویژگی و چک و محدودیت خاص رو فعال کنه، میتونه حتی بصورت پیشفرض روشن باشه، ولی باید امکان خاموش کردنش هم باشه.

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

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

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

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

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

نقل قول:بهرحال هدف جاوا و PHP و هر زبان دیگه مشخصه و رویه کارکردشون و سختگیریهاشون هم در مسیر رسیدن به اون هدف تنظیم شده.
ما هیچ چیز مطلقی نداریم.
همه چیز خطاپذیره.
انسانها هم همه خطاپذیر و محدود هستن.
هیچکس خدا نیست که بتونه از بالا و پایین و درون، همه چیز رو ببینه!
ضمنا PHP که طراحانش ناشی گری های واضحی داشتن واقعا. دلیل نمیشه چون در کل زبان موفق و خوبی بوده بگیم اشتباه و چیز بد درش نیست. شما برو از آدمهای متخصص و مطلع نظر بگیر ببین چه ایرادی از بعضی چیزهاش میگیرن. بنده قبلا در این مورد بحث کردم سر چند موردی که بوده و عمدتا مثلا بحث به اصطلاح type juggling و این حرفا بوده.
حالا اینکه زبان ساده ای هست و base خوبی هم بدست آورده و آدمهای کم سواد و برنامه نویسان متوسط زیادی درش فعالیت میکنن، یعنی فقط آمار، دلیل نمیشه که فکر کنیم اوه حالا دیگه چه خبره، طراحانش خیلی باسواد هستن، اشتباه بزرگی هم نکردن، و اینکه تا ابد وضع همینطور میمونه.
پاسخ
تشکر شده توسط:
#6
دقت کنید که اصلا هدف من از این تاپیک و حرفها این نبود که بخوام جاوا رو رد کنم.
بنظر من در کل زبان جالب و قدرتمندیه.
ولی با این وجود بنظر من میتونست بهتر هم باشه، و یکسری اجبارها و محدودیت هایی که توش گذاشتن لزومی نداشت و شاید میتونستن انعطاف و راحتی بیشتری برای محدودهء وسیع تری از برنامه نویسان و سطح و اهداف برنامه نویسی هم توش بذارن.

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

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

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

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

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

راستی جالب اینه شما میگی جاوا برای انترپرایزه، ولی آیا برنامه نویسی موبایل واقعا انترپرایزه؟ منکه فکر نمیکنه!
حتی جاوا هم هدفش این بوده که بتونه به تمام حیطه ها نفوذ کنه.
حالا چرا گوگل جاوا رو برای اندروید انتخاب کرد؟ آیا صرفا بخاطر اینکه از نظر خود زبان برنامه نویسی برای برنامه نویسی موبایل خیلی خوبه بهترینه؟ منکه فکر نمیکنم! من فکر میکنم این صرفا بهترین گزینهء در دسترس از همهء جهات و پارامترهای قابل توجه در دسترس گوگل بوده که بنظرشون صرف میکنه. پارامتر فقط این نیست که خود زبان چی باشه، بلکه یکسری مسائل جانبی هم اهمیت زیادی دارن. مثلا گوگل بجاش میتونست از چی استفاده کنه و چرا این کار رو نکرد؟ هرکدام رو که ذکر کنید میشه براش دلایلی پیدا کرد و دید که فقط بحث سینتاکس و امکانات زبان به تنهایی نیست. بحث اینه که چه گزینه های در دسترسی داری و در کل چی بهتره به صرفه تره، نه اینکه واقعا از همه جهت ایدئال و بهترین باشه.
پاسخ
تشکر شده توسط:
#7
یکی از دلایل انتخاب جاوا برای اندروید این بود که هسته اندروید لینوکسه و جاوا هم مولتی پلتفرمه و ازطرفی کلی کتابخانه توی جاوا هست که خیلیهاش 3rd party هستن و بدون مشکل میشه توی اندروید هم ازشون استفاده کرد. بهرحال به موضوع بحث ربطی نداره این چیزا و مهم اینه که همین ساختار پیچیده توی دیوایسهایی مثل اسمارت فون که خیلی ناپایدارتر از PC هست، لازم و ضروریه تا حداقل مطمئن باشیم توی برنامه خطاهای رایجی مثل Exception مدیریت نشده و... وجود نداشته باشه.
پاسخ
تشکر شده توسط: Eshpilen
#8
(20-09-1394، 08:36 ب.ظ)ADMIN نوشته: یکی از دلایل انتخاب جاوا برای اندروید این بود که هسته اندروید لینوکسه و جاوا هم مولتی پلتفرمه و ازطرفی کلی کتابخانه توی جاوا هست که خیلیهاش 3rd party هستن و بدون مشکل میشه توی اندروید هم ازشون استفاده کرد. بهرحال به موضوع بحث ربطی نداره این چیزا
بهه شما که خودت چیزی رو که بنده گفتم تایید کردی قشنگ هم بیان کردی دیگه.
حرف منم همین بود که یه زبان اگر استفاده میشه ترجیح داده میشه توسط افرادی، شرکتهایی، و غیره فقط به دلیل این نیست که طراحی خود زبان بی نقص بوده الان روی دستش چیزی نیست از این لحاظ! بلکه بخاطر همین کتابخانه ها و مالتی پلتفرم بودن و برنامه نویسان و ابزارها و لایسنس ها و غیره هم هست.

نقل قول:و مهم اینه که همین ساختار پیچیده توی دیوایسهایی مثل اسمارت فون که خیلی ناپایدارتر از PC هست، لازم و ضروریه تا حداقل مطمئن باشیم توی برنامه خطاهای رایجی مثل Exception مدیریت نشده و... وجود نداشته باشه.
شوخی میکنیا!
مثلا الان من که نمیخواستم Exception هندل کنم، جاوا اومد گفت حتما باید هندل کنی، منم یه بلاک try-catch الکی گذاشتم دلش خوش باشه! خیلی راحت و سریع!
الان مثلا این تونست جلوی نظر و عملکرد برنامه نویس رو بگیره؟ تونست بقول شما اطمینان بده توی برنامه این خطاهای رایج نیستش؟
معلومه که نه.
پس دلیل این اصرار و اجبار چیه؟
اصولا زبان برنامه نویسی رو نباید در مقابل انسان گذاشت! چون انسان هوشمندتره و کسی هم نمیتونه به کاری مجبورش کنه. انسان هرکاری خودش بخواد انجام میده، که البته باید هم همینطور باشه!
پاسخ
تشکر شده توسط:
#9
من یه مدت با جاوا کار میکردم. ولی از بس سخت بود از ادامه ی کار باهاش منصرف شدم. عیب دگه اش این بود که سرعت اجراش پایین بود. و اینم منو خیلی اذیت میکرد.
مدتی هست با golang آشنا شدم . میشه گفت یه جورایی مثل سی پلاس پلاس هست. و سرعت اجراش خوبه. و با انواع واسطه های گرافیکی کار میکنه. من خودم با qml کار میکنم. هم تحت وب داره هم تحت دسکتاپ. آموزش هاش توی نت در حال گسترش هست. خود گوگل ارائه داده . من فکر میکنم آینده ی خوبی خواهد داشت.
و دگه اینکه میتونید مثل c++ که با وقتی با qt کار میکنن. یک خروجی release شده ازش بگیرید و فایل های dll رو کنارش بذارید تا دگه نیازی به برنامه ای نصب شده روی سیستم برای اجرای فایل هاش نیازی نداشته باشه.
پلت فرم هم هست و توی انواع سیستم عامل هایی چون لینوکس ، مکانتیش ، ویندوز، اندروید فایل هاش اجرا میشن.
یک کتاب برای معرفیش:
https://www.dropbox.com/s/nq1ba5e628xi74...o-v1.1.zip
پاسخ
تشکر شده توسط:
#10
اتفاقاً جاوا سرعت اجرای قابل قبولی داره. بهرصورت هر زبان مزایا و معایب خاص خودش رو داره و بهتره با توجه به اهداف اون زبان تحلیلش کنید نه در قیاس با زبانهای دیگه. مقایسه کردن زبانهای مختلف کار کاملاً اشتباهیه بنظرم. برای مثال هکین زبانی که گفتین، قدرتش و گتابخانه های جانبیش یک دهم جاوا هم نیست ولی باز هم باعث نمیشه بگیم بدرد نمیخوره چون کلاً کاربردش با جاوا فرق میکنه. Loose Type بودن PHP در جای خودش همونقدر سودمنده که Strict Type بودن جاوا در جایگاه خودش.
پاسخ
تشکر شده توسط: Eshpilen
#11
(20-09-1394، 09:19 ب.ظ)Eshpilen نوشته: شوخی میکنیا!
مثلا الان من که نمیخواستم Exception هندل کنم، جاوا اومد گفت حتما باید هندل کنی، منم یه بلاک try-catch الکی گذاشتم دلش خوش باشه! خیلی راحت و سریع!
الان مثلا این تونست جلوی نظر و عملکرد برنامه نویس رو بگیره؟ تونست بقول شما اطمینان بده توی برنامه این خطاهای رایج نیستش؟
معلومه که نه.
پس دلیل این اصرار و اجبار چیه؟
اصولا زبان برنامه نویسی رو نباید در مقابل انسان گذاشت! چون انسان هوشمندتره و کسی هم نمیتونه به کاری مجبورش کنه. انسان هرکاری خودش بخواد انجام میده، که البته باید هم همینطور باشه!

بحث اصلاً در مقابل هم قرار گرفتن نیست. بحث در کنار هم بودنه. این ابزار داره به شما یادآوری میکنه و سخت میگیره که حواست باشه ممکنه فلان Exception رخ بده و تنها کاری که از دستش بر میاد همینه که بگه باید try/catch بگذارین. حالا شما خواستین موضوع رو از سرتون باز کنید و درست این خطا رو هندل نکنید مشکل شماست ولی اون زبان وظیفه خودش رو انجام داده. دیگه بعداً کسی نمیتونه ادعا کنه این ابزار چرا بهم یادآوری نکرد که ممکنه چنین خطایی رخ بده. همین موضوع اگه تو PHP بود گیر میدادین که چرا این چیزا رو کنترل نمیکنه و اینقدر ساده و سطحی نگاه کرده به قضیه و باعث بروز باگهای مختلف میشه و از این حرفها.
پاسخ
تشکر شده توسط:
#12
(20-09-1394، 09:33 ب.ظ)ADMIN نوشته: بحث اصلاً در مقابل هم قرار گرفتن نیست. بحث در کنار هم بودنه. این ابزار داره به شما یادآوری میکنه و سخت میگیره که حواست باشه ممکنه فلان Exception رخ بده و تنها کاری که از دستش بر میاد همینه که بگه باید try/catch بگذارین.
خب میتونست این کار رو با دادن هشدار هم انجام بده یا آپشن قابل تنظیم بذاره براش. ولی جاوا کلا نمیذاره میگه حتما باید یه try-catch بذاری.
البته شاید از یه جهت خوب باشه، اینکه بعدا کد رو نگاه کنی خواستی تکمیلش کنی راحت تشخیص میدی کجاها امکان Exception هست که کد هندلینگش رو اضافه کنی. ولی با این حال بازم بنظر من اختیار بیشتری دست برنامه نویس باشه بهتره.


نقل قول:همین موضوع اگه تو PHP بود گیر میدادین که چرا این چیزا رو کنترل نمیکنه و اینقدر ساده و سطحی نگاه کرده به قضیه و باعث بروز باگهای مختلف میشه و از این حرفها.
نه والا ما کی به اینجور چیزا گیر دادیم!
پاسخ
تشکر شده توسط:
#13
(20-09-1394، 09:26 ب.ظ)ADMIN نوشته: اتفاقاً جاوا سرعت اجرای قابل قبولی داره. بهرصورت هر زبان مزایا و معایب خاص خودش رو داره و بهتره با توجه به اهداف اون زبان تحلیلش کنید نه در قیاس با زبانهای دیگه. مقایسه کردن زبانهای مختلف کار کاملاً اشتباهیه بنظرم. برای مثال هکین زبانی که گفتین، قدرتش و گتابخانه های جانبیش یک دهم جاوا هم نیست ولی باز هم باعث نمیشه بگیم بدرد نمیخوره چون کلاً کاربردش با جاوا فرق میکنه. Loose Type بودن PHP در جای خودش همونقدر سودمنده که Strict Type بودن جاوا در جایگاه خودش.

حتما سرعت سیستم شما خیلی بالاست که کندی اجرای برنامه ها را در جاوا احساس نمیکنید. من زبان های زیادی کار کردم. هیچ کدومشون اندازه ی جاوا سرعتش پایین نبوده.
اینکه من امدم مقایسه کردم مقایسه ی من به این دلیل نبود که بگم کلاً جاوا بدرد نمیخوره.
به نظرم وقتی golang این همه مزایا داره. از جمله سرعت و سادگی در کدنویسی و ویژگی هایی که گفتم دیگه نیازی نیست خودمون رو توی دردسر بندازیم و به مغز خودمون فشار بیاریم و کندی سرعت رو هم تحمل کنیم بریم سراغ جاوا.
جاوا هم روز اول اینقدر کتابخانه نداشت. بالاخره golang هم به اونجا میرسه.
هدف از ساخت کامپیوتر این بوده که سرعت کار، بره بالا. وگرنه ما مثلاً با همون چرتکه کار میکردیم و راضی بودیم. کدنویسی باید راحت باشه. و ما باید کارهامون رو سریع تر و راحت تر انجام بدیم.
اینطوری که شنیدم: یکی از دلایلی که golang بوجود امد این بود که برخی برنامه نویسان شرکت گوگل مبتدی تز بودن و نمیتونستن از کدهای حرفه ای ها سر در بیارن.
پاسخ
تشکر شده توسط: Eshpilen
#14
(21-09-1394، 10:06 ق.ظ)راوندی نوشته: جاوا هم روز اول اینقدر کتابخانه نداشت. بالاخره golang هم به اونجا میرسه.
به حرف آسونه، ولی در عمل مشکلات و عدم اطمینان زیاد هست.
ببینید مثلا الان میگن رابی از پایتون هم بهتره، ولی چون پایتون اول بوده سابقهء بیشتری داشته در نتیجه بیشتر جا افتاده. هرچند رابی هم تاجاییکه دیدم خیلی ها رو جذب کرده به خودش من توی وبلاگ های خارجی و جاهای دیگه زیاد دیدم طرفها توی این زبان برنامه مینویسن. اما بهرحال چیزی که هست پایتون به این زودی ها کنار نمیره.


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

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

بنظرم زبانهایی مثل پایتون و PHP و سی شارپ هم در درجهء بعدی تاحدی اینطور هستن، ولی به نسبت کمتر، چون اولا معمولا اونقدر همه منظوره از سطح کم و بیش پایین تا بالا نیستن و بعضیا مثل PHP اختصاصی کار هم هستن، دوما در روزگاری بوجود آمدن که شرایطش مثل شرایط زمان پیدایش اون زمانهای قدیمی تر نیست و سرعت تحول در فناوری های کامپیوتر و برنامه نویسی و بوجود آمدن زبانهای جدید بیشتره و فاصلهء بین این تحولات و ایجاد زبانهای جدید قابل توجه کمتره و زبانهای قبلی فرصت کمتری برای گسترش و جا افتادن داشتن. اینه که میبینی معمولا زبانهای جدیدی که میان یک حیطه های محدودی رو نسبت به اونچه که از نظر تئوریک ممکنه، مورد حمله و تسخیر قابل توجهی قرار میدن. یعنی حیطه هایی که توش مزیت خصوصیات اون زبان بیشتر برجسته و موثره، یا به علل دیگری مثل خاص بودن اون فیلد و افرادی که توش کار میکنن هست که اون زبان توش خوب جایگیر میشه.
پاسخ
تشکر شده توسط: ADMIN , YN97 , baghbani
#15
میشه گفت زبانهای قدیمی همه منظوره، ایدئال نیستن، میتونستن بهتر باشن، ولی بهرحال بقدری که بشه ازشون استفاده کرد و صرف بکنه، در خیلی کاربردها هنوزم کفایت میکنن.

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

مثلا با پایتون که نمیشه برنامه نویسی سیستمی کرد. پایتون یه زبان اسکریپتی هست و از اول هم هدفش برنامه نویسی سیستمی نبوده. یعنی از اول خواسته یه حیطه های خاص و سطح بالاتری رو اشغال کنه که درش نیاز به زبانهای سطح بالاتری حس میشده.

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

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


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

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

اینم که میگید سرعت جاوا کمه، من فکر میکنم دلایل خاصی داره و اینطور نیست که نشه سرعتش رو به میزان قابل توجهی زیادتر کرد. باید دید دلیلش چیه. چون بارها مطالبی رو خوندم که در محیطها و کانفیگ های خاصی و با ابزارهای و روشهای خاصی، و حتی گاهی سخت افزارهای مخصوص، سرعت اجرای جاوا رو خیلی بیشتر کردن حتی خیلی نزدیک زبانهایی مثل C رسوندن. یعنی میخوام بگم از نظر تئوریک میشه سرعت بالا هم با جاوا بدست آورد. ولی خب روی یه PC ویندوزی معمولی من و شما با کانفیگ و شرایط معمولی شاید به دلایلی اینطور نیست. ولی بنظر من طبیعی هست که بالا بردن سرعت زبانهای سطح بالاتر مثل Go و پایتون و رابی به این حد ممکن نیست یا کار خیلی سخت تری هست، چون این زبانها سطح بالاتر هستن و از ابتدا هم برای برنامه نویسی سطح پایین و پرفورمنس بهشون توجه زیادی نشده؛ ساختارشون برای این اهداف طراحی نشده.
پاسخ
تشکر شده توسط: ADMIN , YN97 , baghbani




کاربران در حال بازدید این موضوع: 3 مهمان