# زبان های اسکریپتی > JavaScript و Framework های مبتنی بر آن > Node.js >  آیا nodejs می تونهد جایگزین جاوا بشه؟

## بابک.م.

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

آیا شروع پروژه جدید با node به جای جاوا کار صحیحی است؟ آیا در حال حاضر بهتره روی جاوا سرمایه گزاری کنیم یا جاواسکریپت؟

توضیح اینکه هدف استفاده از یک زبان و فریم ورک برای تمام انواع نرم افزار تحت لینوکس هست.

باتشکر

----------


## cups_of_java

> آیا شروع پروژه جدید با node به جای جاوا کار صحیحی است؟


این موضوع بر میگرده به نوع و ذات پروژه و تیم و محیطی که قصد توسعه اش رو دارن... گاهی آره خیلی هم صحیحه گاهی نه نیست.


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

----------


## بابک.م.

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


ممنون از پاسختون

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

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

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

از طرفی جاوا به نظرم از لحاظ کتابخانه و قواعد به تمیزی سی شارپ نیست و بعضی مواردش مسخره است (با عرض پوزش) البته مشکل اصلی ظاهرا توی جاوا تعدد فریم ورک ها برای انجام کارهای مشابه هست که کلی زمان برای تست هرکدومشون نیاز هست.
شاید مهمترین دلیلم برای انتخاب جاوا، چند سکویی بودنش باشه.
اینکه گفته می شه java برای پروژه های Enterprise مناسب هست رو درک نمی کنم، جاوا چی داره که تو دات نت، یا حتی پایتون وجود نداره؟
بعضی ها می گن جاوا به آخر خط رسیده.
در مورد nodejs هم اینکه هر متد ساده ای رو باید async نوشت آزار دهنده است اما هر چی باشه از php بهتره در کل توقعات رو بیش حد از انتظار برآورده می کنه مثلا از اینکه دیدم کامپایلر های زیادی مثلا روبی ، پایتون ، coffeescript و حتی haskell برای جاوااسکریپت وجود داره متعجب شدم. 
در کل من در هر دوتا مبتدی هستم و الان باید برای چند سال آینده تصمیم گیری کنم.

اگر نظرتون رو در این مورد بفرمایید خوشحال می شم.

----------


## cups_of_java

> مدتیه بین جاوا و جاوااسکریپت گیر کردم. الان باید بین جاوا و جاوااسکریپت یکی رو انتخاب کنم.


به نظر من این دو چیزایی نیستن که بینشون لازم باشه یکی رو انتخاب کرد. 





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


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





> اینکه گفته می شه java برای پروژه های Enterprise مناسب هست رو درک نمی کنم، جاوا چی داره که تو دات نت، یا حتی پایتون وجود نداره؟


جاوا از ابتدا برای نوشتن برنامه های شبکه ای - تحت وب و سازمانی ساخته شد. همه چیز تو جاوا دیده شده. مسائلی مثل Connection Pooling و یا دسترسی Remote به Resourceها یا RPC یا StateFull Services، و خیلی دیگه از امکانات و Middlewareی که توی برنامه های بزرگ نیازمندشون هستیم. جامعه بزرگ جاوا خیلی کارهایی که شما تو مسائل واقعی باهاش برخورد میکنی رو حل کردن و متن باز در اختیار شما هست با سورس و مستنداتش. توی دات نت اینطور نیست... هرچند که توی پایتون اینطور هست.





> بعضی ها می گن جاوا به آخر خط رسیده.


من هیچ تعصبی روی جاوا ندارم با اینکه خیلی دوسش دارم. خیلی صریح و صادقانه و عامیانه میگم "بیخود کردن"! بهشون بگو یه گشتی توی نت بزنن و مسیر و سیر اتفاقاتی که تو دنیا داره میفته رو بررسی کنن و بعد حرف بزنن. ;)





> در مورد nodejs هم اینکه هر متد ساده ای رو باید async نوشت آزار دهنده است


این دقیقن یکی از نقاط قوت نود هست. اما شما نباید با مدل خالص نود شروع به نوشتن callbackبیس برنامه بکنی. برای هندل کردن پیچیدگی این موضوع باید از promiseها استفاده کنی که لایبرری های زیادی براش نوشته شده... مثل q

ضمنن توی ES6 و نسخه 11 نود امکان استفاده از generatorها هم هست که اونا هم کمک می کن به شما...


اگر پروژت سورسش مال خودته و نگهداریش با خودت و سرورت رو هم خودت میخوای هوا کنی و تیم پروزه تقریبن کم تغییره خب استفاده از nodejs عاقلانه و مهیج و لذت بخشه.
اما اگه پروژه رو قرار تیمی تحویل بگیره و یا تیم پروژه شکنندست یا سازمان بزرگی هست که میخواد نگهداریش کنه یا سرورت رو نمی خوای خودت نگهداری کنی خب جاوا انتخاب بهتریه...

جمع کردن یه تیم نود جی اس در حال حاضر در ایران کار ساده ای نیست. البته با کمی زمان و هزینه می تونی با مشاوره و آموزش این کارو بکنی.

----------


## بابک.م.

تشکر در مورد promise ، مطلب تازه ای از شما یاد گرفتم.

اما اصولا چرا باید در مواقع ای مثل نمایش و دریافت اطلاعات از کاربر ،فراخوانی  async داشته باشیم که بعد بخوایم ترتیب براش تعیین کنیم؟
مثلا می خوایم یه messagebox نمایش بدیم یا از کنسول یه مقداری رو دریافت کنیم.

درمورد ورودی/خروجی هایی مثل شبکه یا storage ها ایده non- blocking مفید به نظر می رسه.

----------


## cups_of_java

> اما اصولا چرا باید در مواقع ای مثل نمایش و دریافت اطلاعات از کاربر ،فراخوانی async داشته باشیم که بعد بخوایم ترتیب براش تعیین کنیم؟


وقتی برنامه هایی مثل فیس بوک... جی میل... وایبر... و خیلی سایت های پر کاربرد امروزی رو نگاه کنی می بینی که توی واسط های کاربریشون تعاملی که با کاربر دارن اصلن به این سادگی که شما میگید نیستن. قسمت های مختلفی از واسط به طور مستقل و جدا از هم به روز میشن. اکثر اطلاعات ای جکس بیس می یاد تو صفحه، و باز اکثر این اطلاعات بدون درخواست پی در پی کاربر و بلکه به شکل آسنکرون و از طریق سرور وارد صفحه میشن اتوماتیک...
خلاصه امروز برنامه های کامپیوتری به سمتی رفنت که ذاتن این خصوصیات رو دارن... 
نکته دوم اینکه شما مدل Callbackبیس رو نباید فقط توی واسط کاربری ببینی چون نود که واسط کاربری نیست... نود یک محیط Event Driven و به صورت Non-Blocking هست که بهترین گزینه برای نوشتن منطق های برنامه های امروزی هست... واقعیت اینه که دنیای خود ما هم async‌ هستش. تو وقتی اینجا یه پست میزاری همه کارات رو ول نمیکنی منتظر جواب بشینی که!‌ میری به روزمرگیت میرسی یا اینجا رو هر یه ساعت چک میکنی یا اینکه برات ایمیل میاد خلاصه بر مرگردی سر سایت!!! این یعنی همه چیز تو دنیای واقعی ما هم async هست. اما خب باید دنیال مکانیزم هایی برای هندل کردن این پیچیدگی ها رو استفاده کرد.




> درمورد ورودی/خروجی هایی مثل شبکه یا storage ها ایده non- blocking مفید به نظر می رسه


آزمایش هایی هست که نشون میده سرور های وب Nonblocking چقدر از سرور های وب سریع امروز سریع تر می تونن باشن. ایده کلی پردازش های موازی ابری امروز بر همین اساس هست که بیشتر از پردازشگر های non blocking استفاده کنن.
البته این درجایی که شما معماری های سرویس گرا و ارکستری از سرور ها و دیتابیس ها و سرویس ها میخوای بسازی به دردت میخوره... طبیعتن توی پروژه ای که همش پردازش local داره و قرار نیست خیلی به جایی وصل شه... (مثل کانورت کردن یک استریم مدیای بزرگ)‌ نود نه اینکه کمک نمی کنه بلکه اسیب هم بهت میزنه.

----------


## بابک.م.

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

ممنون از راهنمایتون

----------


## terminator68

node.js یک باگ داره مثل Injectionه.
حالا حالا هم هستش باگش...
چون هنوز پالیک نشده...

----------


## cups_of_java

> node.js یک باگ داره مثل Injectionه.
> حالا حالا هم هستش باگش...
> چون هنوز پالیک نشده...


منظورتون رو توضیح بدید و لینک مرجع مناسبی براش بیارید لطفن

----------


## vahid-p

میشه بخش 3 اینم یه نگاهی بندازید : http://www.takipiblog.com/2014/03/18...-how-you-code/

----------


## cups_of_java

اون پشتیبانی JVM از زبان جاوا اسکریپت هستش.  نود جی اس پشتیبانی نمیشه. شما فقط می تونی جاوا اسکریپت (مطابق با استاندارد EcmaScript) بنویسی توی JVM مخلوط با کد جاوا

----------


## محمد فدوی

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

----------


## cups_of_java

> به نظر من جاوا ارجحیت داره. چون توسعه یافته تره. نود اول راهه و حالا حالاها جای گسترش داره تا به اون نقطه ای برسه که باید برسه. :)


همینطوری سلیقه ای نمیشه نظر داد محمد عزیز... وقتی میگی ارجحیت داره باید بگی کجا ارجحیت داره!
بله یه جاهایی جاوا رو باید انتخاب کنید یه جاهایی نود رو...
هر کدوم تو یه زمینه خیلی کمکتون میکنن...
اما جدی میگم... به عنوان کسی که از سال 82 با جاوا نرم افزارهای سازمانی ساخته و عاشق حاوا هست بهتون میگم... نود جی اس خیلی جاها (توی توسعه تحت موبایل، ecommerce, تیم های توسعه خلاق و قوی، توسعه نامترکز، سرعت توسعه و ماژول های آماده برای وب، سرویس های وب و RESTو ...) به جرات سریع تر و خوش دست تره. اما خب می طلبه برنامه نویس با خرد و با سواد باشه.
اما یه برنامه نویس کاملن آماتور می تونه با جاوا کار کنه در حالیکه ممکنه توی جاوا اسکریپت (یا نود) به مشکل بخوره...
ضمنن الان دیگه نود خیلی جوون نیست....

----------


## محمد فدوی

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

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

بعد من یه چیزیو نفهمیدم! یعنی واقعا حوزه ای وجود داره که نود توی اون فعال باشه ولی جاوا نتونه کاری بکنه؟ میشه یکم توضیح بدین؟

----------


## cups_of_java

> نود چندان IDEهای قوی ای نداره


IntelliJ Webstorm





> منابع انگلیسیش هم در مقابل جاوا خیلی کمه!


با اینکه جاوا 20 سال پیش بوجود اومده و هر کس و ناکسی ازش دیگه مقاله نوشته... اما اینو قبول ندارم... نود که چند سال بیشتر سنش نیست توی github و نت پر از مطلب و ماژول و سند هستش. جامعه پشت نود توی github به صورت 24*7 منتظر پاسخگویی به سوالات شما هستن. :)





> یعنی واقعا حوزه ای وجود داره که نود توی اون فعال باشه ولی جاوا نتونه کاری بکنه؟ میشه یکم توضیح بدین؟


این تفکر مقایسه ای و حماسی که یکیشون یه کاری بکنه که دیگری نتونه مال افسانه هاست! نه آدمای هوش مند! همشون همه کار می تونن بکنن. اصلن معیار مقایسه تکنولوژی ها و زبان ها این چیزا نیست. شما یه برنامه چت پیشرفته رو با نود در عرض یک هفته بالا میاری کامل اما با جاوا به بیشتر از یک ماه زمان احتیاج داری.... اونم بعد از کلی دردسر که بفهمی با کدوم کانتینر و کدوم Libها و کدوم پیاده سازی از JSR طرفی و کدوم درست کار میکنه. 
بعد که بالا آوردی... نود جی اس به راحتی با جند ساعت زمان گذاشتن cluster میشه در حالی که توی جاوا این خودش یه داستان پر دردسر دیگه می تونه باشه!!!
شما با جاوا بیشتر از 40 50 هزار کانکشن موازی (یک ترد به ازای هر کاربر) رو روی سرور نمی تونی جواب بدی اما با نود جی اس این عدد به چند صد هزار می تونه برسه!
یا مثلن در حال حاضر شما می تونی در عرض چند روز با نود جی اس یه سایت کامل WebRTC بالا بیاری که بدون نیاز به هیچ پلاگینی با وب کم و میکروفون و ... کلی خدمات در اختیار کاربر قرار بدی...
مثل ظبط صدا... مثل سافت فون SIP روی مرورگر... و ....
همچنین شما می تونی با نود جی اس به سادگی یه بک اند REST همراه NoSQL ها بسازی... این کارها توی جاوا ده ها و صد ها خط کد عجیب و غریب می خواد!!!  و آخرشم اذیت میشی تا بالا بیاد!

----------


## محمد فدوی

شما باز داری باعث میشی برم Webstorm رو دانلود کنما!  :لبخند گشاده!:

----------


## mr.dp+

*cups_of_java*
دمت گرم . حرفاتون مفید بود.

----------


## irGeek

از همه دوستانی که در این بحث شرکت کردند  متشکرم
راستش با این جمله که "همچنین شما می تونی با نود جی اس به سادگی یه بک اند REST همراه NoSQL ها  بسازی... این کارها توی جاوا ده ها و صد ها خط کد عجیب و غریب می خواد!!!  و  آخرشم اذیت میشی تا بالا بیاد!" زیاد موافق نیستم شما می توانید از Vertx  استفاده کنی هم با جاوا و هم با جاوا اسکریپت و... میشه  برنامه نوشت  خودشم خیلی سریع و راحت.

----------


## cups_of_java

به اطلاع دوستانی که علاقه دارن بیشتر در مورد ند جی اس و موضوع این تاپیک بحث داشته باشیم می رسونم که ارائه این هفته انجمن انفورماتیک ایران در همین زمینه ند جی اس هست که برای اولین بار تو ایران داره این موضوع در یک جلسه معتبر و رسمی بررسی میشه. زمان 4شنبه ساعت 17:30 خواهد بود و مکان متعاقبن اعلام خواهد شد تا دوستانی که علاقه مند هستن بتونن حاضر بشن. حضور برای عموم رایگان خواهد بود.

----------


## cups_of_java

> زیاد موافق نیستم


دلیل موافق نبودنتون رو هم بگید لطفن.




> شما می توانید از Vertx استفاده کنی هم با جاوا و هم با جاوا اسکریپت و... میشه برنامه نوشت خودشم خیلی سریع و راحت


این اصلن ربطی موضوع به تاپیک نداشت اما در مورد vert.x یک تکنولوژی چند زبانه روی JVM هست که هدفش براورده کردن دنیای nodejsی توی جاوا بوده. شما برید کد های جاواش رو بخونید می بینید که اصلن با اون کد های جاوای مستقل خود زبان جاوا که من عرض کردم کلی فرق داره... ایده بسیار جالبی بوده اما طرفداراش اونقدر زیاد نیستن در مقایسه با خود جاوا و خود nodejs

----------


## cups_of_java

> شما باز داری باعث میشی برم Webstorm رو دانلود کنما!


دوس داشتی اینو ببین

----------


## بابک.م.

> به اطلاع دوستانی که علاقه دارن بیشتر در مورد ند جی اس و موضوع این تاپیک بحث داشته باشیم می رسونم که ارائه این هفته انجمن انفورماتیک ایران در همین زمینه ند جی اس هست که برای اولین بار تو ایران داره این موضوع در یک جلسه معتبر و رسمی بررسی میشه. زمان 4شنبه ساعت 17:30 خواهد بود و مکان متعاقبن اعلام خواهد شد تا دوستانی که علاقه مند هستن بتونن حاضر بشن. حضور برای عموم رایگان خواهد بود.


لطفا صدا یا تصویر جلسه رو ضبط کنید تا کسانی که امکان حضور در جلسه رو ندارن هم بتونن استفاده کنن

باتشکر

----------


## cups_of_java

> لطفا صدا یا تصویر جلسه رو ضبط کنید تا کسانی که امکان حضور در جلسه رو ندارن هم بتونن استفاده کنن
> 
> باتشکر


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

----------

