دنیای برنامه نویسی در حال تغییر است
دیروز یکی از دوستانم به من گفت که دارد برنامه ریزی می کند تا یکی از برنامه های خود را که با پی‌اچ‌پی درست کرده است و به خوبی هم کار می کند را با نود.جی.اس بازنویسی کند. من بلافاصله با شندین این خبر به او گفتم که: «این کار را انجام ندهد، این یک ایده وحشتناک است».
او نیز در مقابل این را گفت: «پس تو هم یکی از کسانی هستی که از نود متنفری». من گفتم: «نه من متنفر نیستم.بنظر Node.jsبخوبی کار می کند و همچنین از جاوا اسکریپت نیز متنفر نیستم».


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


Node به خوبی شایستگی خود را در طول این چند سال نشان داده است و جای پای خود را در بازار محکم کرده است. بنابراین وقتی تصمیم گرفتید یک برنامه Real-Time مثل بازی آنلاین را بدون هیچ منطق پیچیده ای درست کنید، سعی کنید از Node استفاده کنید. اگر می خواهید یک برنامه ساده CRUD درست کنید لازم نیست از Node.js استفاده کنید. اگر این کار را با Rails یا Django انجام دهید، می توانید بسیار سریعتر توسعه دهید و لازم هم نیست با بسیاری از مفاهیم پیچیده نود.جی.اس روبرو شوید.  چیزی که مشخص است این است که، این نوع از برنامه ها به درخواست‌های  زیادی از سوی کاربران لازم ندارند. و برای یک درخواست تکی، بیشتر اوقات زمان در انتقال شبکه و query زدن در دیتابیس صرف می شود. بنابراین بجای اینکه بخاطر افزایش سرعت در حد چند میلی ثانیه یا شاید یک درصد کل برنامه را از نو بازنویسی کنید، بهتر است که SSD و پهنای باند بهتر استفاده کنید.


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


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


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


دنیای برنامه نویسی در حال تغییر است


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


بنابراین مهندسان نرم افزار چه کاری را باید انجام دهند تا این اتفاق رخ دهد؟ ما نیاز به ارتباط Real-Time بین کلاینت ها و سرور ها داریم – به این معنی که نیاز به سرعت زیاد و ارتباط پایدار و مقاوم داریم. هر کسی که تجربه کافی با توسعه وب داشته باشد می داند که HTTP در ابتدا با این مورد در ذهن ساخته نشد. تعداد زیادی از کلاینت ها بطور مداوم و همزمان به سرور درخواست می دهند که باعث کند شدن زیاد سرعت و ناکارآمد شدن آن می شود. برای اینکه بتوانیم این ارتباط را در مقیاس بزرگ ایجاد کنیم، سرور ها نیاز دارند تا اطلاعات را طوری به کلاینت انتقال دهند که از مدل کند request / response در HTTP استفاده نشده باشد.


نود.جی.اس یک Event-Driven وجاوا اسکریپتسمت سرور است. نود.جی.اس جاوا اسکریپت را با استفاده از موتور V8 که توسط Google توسه داده شده است اجرا می کند، V8 همان موتوری که Chrome برای نمایش صفحات خود در مرورگر وب خود استفاده می کند! قدرت و جادوی V8 به Node این اجازه را می دهد یک محیط توسعه سمت سروری که کدهای جاوا اسکریپت را مثل رعد و برق اجرا می کند را ارائه دهد. Node منبع باز و کراس پلتفرم، است و در تمام سیستم عامل ها مثل Mac OSX، Windows و Linux قابل اجرا است.


اما جاوا اسکریپت؟ سمت سرور؟ چرا؟ اگرچه JavaScript به طور سنتی نقش مهمی را در انجام وظایف در مرورگر های وب ایفا می کند، اما در واقع یک زبان برنامه نویسی کاملا کاربردی است، قادر به انجام هر چیزی که در زبانی های سنتی مثل C++، Ruby یا Java رخ می دهد است. علاوه بر این، جاوا اسکریپت یک مدل بسیار ایده آل برای برنامه نویسی asynchronous است. همچنین جاوا اسکریپت را امروزه به یک زبان همه فن حریف تبدیل شده است، ما می دانیم که میلیون ها توسعه دهنده وب از آن استفاده می کنند. این باعث کاهش یادگیری Node.js می شود، چرا که بیشتر دولوپرها نمی خواهند زبان جدیدی برای ساخت برنامه های Node.js شروع کنند، تنها کافیست که جاوا اسکریپت را به خوبی درک کرده باشید تا ببینید که توسعه نرم افزار برای Node.js چقدر لذت بخش است.


هنگامی که برنامه Node نیاز به انجام یک عملیات blocking دارد  (عملیات I/O محاسبات سنگینی را انجام می دهند) یک وظیفه asynchronous همراه با یک تابع callback به event-loop ارسال می کند و پس از آن بقیه برنامه را اجرا می کند. event-loop آهنگ این عملیات asynchronous را نگاه می دارد و آنگاه callback داده شده را پس از اتمام اجرا می کند و نتیجه را به برنامه برگشت می دهد. این به شما اجازه می دهد تا تعداد زیادی از عملیات را مثل اتصالات کاربران یا محاسبات را مدیریت کنید. البته، واگذاری این مسئولیت به Event-Loop زندگی را برای توسعه دهندگان Node.js آسان کرده است که می توانند بر روی بخش های اصلی برنامه خود متمرکز شوند.


این قابلیت به سادگی برنامه نویسی asynchronous با Node.js را به یک ابزار قدرتمند برای برنامه نویسان کرده است. با استفاده از Node می توانید برنامه هایی پیچیده درست کنید که بتواند به میلیون ها نفر از کاربران متصل به هم را در مقیاس بزرگی سازماندهی و پردازش کند. علاوه بر این ویژگی ها، Node.js شامل یک کامنیوتی بزرگ و رو به رشد است که شامل بسیاری ماژول است که قابلیت های Node را افزایش داده است. یکی از این ماژول های معروف Socket.io است که وظیفه آن مدیریت کاربران و سرورها با هم است که قادر می سازد سرور بطور Real-Time به روزرسانی را به کاربر نمایش دهد. این فن آوری اجازه می دهد تا این نوع از برنامه‌ها را به سادگی در کمترین زمان ممکن با کد کمتر ایجاد کنید.


به هر حال تمام این مقالاتی که در رابطه با Node.js آماده می شود تنها بخشی از کار است، و تصمیم گیرنده اصلی شما هستید که آیا می خواهید با Node.js یا دیگر تکنولوژی های جدید کار کنید یا نه! مطمئن هستم شما هم مثل من وسوسه کار با Node.js می شود پس زمان را هدر ندهید و از همین حالا شروع به یادگیری آن کنید که Node و شما آینده درخشانی خواهید داشت. امیدوارم که جواب بسیاری از سوالات خود را به دست آورده باشید، توجه داشته باشید که تنها شما هستید که باید با جستجو در وب سایت ها با این تکنولوژی باحال آشنا شوید.