navidkhm
navidkhm
خواندن ۱۳ دقیقه·۸ ماه پیش

تاریخ عجیب JS - بخش اول (ترجمه یوتیوب fireship)

احتمالا ویدیوهای fireship رو تو یوتیوب دیده باشید من از مدل کاراش و مختصر و مفید بودن ویدیوهاش لذت میبرم و متاسفانه نمیشد بهشون زیرنویس فارسی اضافه کرد و گفتم حداقل فقط متن رو ترجمه کنم و اینجا قرار بدم که جامعه‌ی فارسی‌زبان ازش استفاده کنه:

"روز کریسمس ۱۹۹۰ دنیا اولین مرورگر وب که توسط Sir Tim Breners-lee توسعه داده شده رو روی سیستم کامپوتری NeXT می‌بینه و اگه این کافی نیست این شخص کسیه که در همون زمان‌ها اولین وب سرور رو هم توسعه میده فقط یه مشکل کوچیک وجود داشت اونم اینکه هیچکس تا اون زمان نمیدونست اینترنت چیه!

مجری برنامه تلویزیونی: آلیسون اینجاست، میتونی توضیح بدی اینترنت چیه؟

آلیسون:‌ یه شبکه بزرگ کامپوتریه که ساخته شده از شروعش در در، این یه بیلبورد کامپیوتریه ولی خطی این این یسری دانشگاهن که همه چیشون به خوبی به هم متصله و بقیه هم میتونن بهش دسترسی داشته باشن.

امروز قراره که به گذشته بریم و تکامل JavaScript رو نگاه کنیم و اینکه چطور از یه زبون اسکریپتی ساده که معروفه به اینکه تو ده روز نوشته شده رسیده به تکنولوژی‌ای که تقریبا روی هر انسانی روی زمین اثر گذاشته. [توضیحات سابسکرایب چنل]

داستان ما از دسامبر ۱۹۹۱ شروع میشه وقتی که Al Gore اینترنت رو اختراع کرد.

صدای Al Gore: در طول خدمتم در کنگره ایالات متحده آمریکا من اقدام به ایجاد اینترنت کردم.

کاری که در واقع اون کرد این بود که لایحه Gore رو معرفی کرد که تامین‌کننده اعتبار برای اولین مرورگر اصلی یعنی "Mosaic"(موزاییک) بود.

موزاییک توسط Marc Andreessen و Eric bina در دانشگاه ایلینویز توسعه داده شده و برای سیستمای UNIX در ژانویه ۱۹۹۳ منتشر شده بود و تو پایان همون سال هم پورت‌های مکینتاش و ویندوزش وجود داشت و موزاییک واقعا اولین مرورگر وب بود که اینترنت رو به یه جریان اصلی تبدیل کرد ولی هنوز JavaScriptای در کار نیست و فقط DOM یا Document Objet Model که همینم به استاندارد شدن حتی نزدیک هم نشده بود.

در سال ۹۳ Andreessen بعد از فارغ‌التحصیلی به کالیفرنیا نقل مکان کرد تا Netscape رو تاسیس کنه(co-found) و در عرض چندسال ناوبر(Navigator) Netscape تونست کنترل 80% مارکت مرورگرها رو به دست بگیره.

تو همین موقعا بود که Andreessen متوجه شد که مرورگرها نیاز دارن تا بیشتر داینامیک بشن و دیزاینرهای وب به یه جور زبون چسبی نیاز دارن تا وبسایتاشونو بیشتر تعاملی کنه پس طبیعتا اولین چیزی که بهش رو میارن زبان خیلی ترند "جاوا" از Sun Microsystems بود ولی اونا خیلی زود به این نتیجه میرسن که اون ایده خیلی بد بوده و پلن B این بوده که این آقا به اسم Brendan Eich رو استخدام کنن که کارش این بود که زبان برنامه نویسی Scheme رو به مرورگر اضافه کنه اما سینتکسش رو همچنان شبیه Java نگه‌ داره و اون باید این کارو تا دیروزش انجام میداد. [ویدیو میم‌طور در این مورد]

فقط ۱۰ روز بعدش اولین نسخه از JavaScript به دنیا اومد ولی هنوز بهش جاوااسکریپت نمیگفتن بلکه "موکا" بود. سینتکسی(دستخطی) یه زبون کروشه‌ای({}) شبیه جاوا یا سی بود ولی تو بطنش خیلی از فیچرهایی که تو جاوااسکریپت مدرن میشناسیم و دوست داریم رو داشت مثل:‌ توابع کلاس اول (First-class functions)، تایپ‌های داینامیک و ارث‌بری پروتوتایپی (prototypal inheritance) که در واقع از زبان برنامه نویسی Self الهام گرفته شده بود که خود این زبون هم، توسط Sun Microsystems توسعه داده شده بود.

حالا نوشتن یه زبون برنامه‌نویسی بی‌نقص تو ۱۰ روز اساسا نشدنی بود و Brendan Eich هم اینو خوب میدونست پس کاری که نکرد این بود که بیاد یه زبون خیلی اختصاصی شده برای مرورگرای دهه ۹۰ بنویسه و در عوض اون یه زبان منعطف چندپارادایمی نوشت که همچنان دولوپرا میتونستن الگوهای زبانی خودشونو بهش اعمال کنن اما هنوزم احتمال خیلی خوبی وجود داشت که این زبون شکست بخوره و هیچ راهی نبود که اون پیش‌بینی کنه دولوپرا در طول 20 سال آینده این زبونو تا کجا پیش میبرن و به چه اندازه قراره ازش استفاده کنن.

قانون Atwood: هر اپلیکیشنی که میتونه به زبان JavaScript نوشته بشه در نهایت به زبان JavaScript نوشته میشه.

اما بیاید خودمونو جلو نندازیم، این زبون هنوز اسمش JavaScript هم نیست. سپتامبر ۹۵ موکا اسمش شد liveScript و به اولین نسخه بتای ناوبر نت‌اسکیپ ۲ انتقال پیدا کرد ولی چندماه بعدش تو دسامبر تصمیم گرفتن که اسمش رو به JavaScript تغییر بدن چون که شبیه به نسخه‌ی خفنِ جمع‌وجور Java که اون زمان خفن‌ترین زبون برنامه‌نویسی روز دنیا بود به نظر بیاد.

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

پس تا اینجای کار تو سال ۱۹۹۶ ما دو تا زبون تقریبا یکسانِ JavaScript و JScript داریم و هر چقدر سرعت رشد اینترنت بیشتر میشد احساس نیاز به استاندارد کردن JavaScript هم بیشتر میشد پس نت‌اسکیپ به انجمن اروپایی سازندگان کامپوتر (ECMA*) رو آورد که از سال ۱۹۶۱ به عنوان یه عضو بی‌طرف برای تعیین استانداردهای صنعت IT خدمت‌رسانی میکرد و تو ژوئن ۱۹۹۷ ما اولین نسخه از ECMA262 یا اسمی که الان باهاش شناخته میشه ECMAScript رو داشتیم که به ارائه‌دهنده‌های مرورگر و اپ‌های سمت سرور مشخصات یا مجموعه‌ای از دستورالعمل‌ها برای پیاده‌سازی زبان جاوااسکریپت رو ارائه ‌می‌کرد.

خود داکیومنت تقریبا صدصفحه بود و خیلی شبیه جاوااسکریپت امروزی به نظر میومد با این تفاوت که خیلی چیزارو نداشت مثل هندل‌کردن Exceptions با try و catch یا عبارات باقاعده (Regular Expressions) و تساوی سخت‌گیرانه (strict equality operator, "===").

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

بیاید سریع بریم به دسامبر ۱۹۹۹ که یکی از جالب‌انگیزناک ترین سال‌های تاریخ tech بوده.

صدای شخصی در مصاحبه: به طور کلی من این رو به عنوان یه حباب توصیف نمی‌کنم بلکه فقط یه پدیده با سهام اینترنتی در مقابل سایر سهام‌هایی که دوباره اعاده شده‌اند وجود دارد. (اشاره به حباب .com) [جمله‌ی کوتاه دیگه‌ای هم از یه نفر دیگه گفته میشه که ارزش ترجمه‌ای نداشت ]

و در همون زمان هم همه داشتن برای پایان دنیا آماده میشدن.

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

فردی در مصاحبه تلویزیونی: مشکل کامیپوتر در سال ۲۰۰۰ بدون شک پیچیده‌ترین مشکلیه که تا حالا بشر باهاش روبرو بوده. [مشکل Y2K که به مشکل تفسیر تاریخ اشاره میکنه]

ولی خوشبختانه درست قبل از مشکل Y2K و سقوط ارزش سهام ما نسخه ECMA3 رو دریافت کردیم که شامل بهبود هندل‌کردن ارورها و همینطور تساوی سخت‌گیرانه (===) بود که باعث میشد مقایسه تساوی یکم کمتر عجیب غریب به نظر برسه.

بنابراین جاوااسکریپت به رشد و تکامل خودش به خوبی ادامه میده ولی اوضاع قراره ناجور بشه و ما تا ۱۰ سال بعد یه نسخه دیگه از ECMAScript رو نخواهیم دید.

تنها سه ماه بعدش تو مارس 2000، حباب فناوری شروع به ترکیدن کرد، Nasdaq بیش از یک تریلیون دلار از ارزش خودش رو تنها تو اون ماه از دست داد و شرکت‌های مطرح شروع به سقوط کردن اما اینترنت اومده بود که بمونه و تو این نقطه ما یه استاندارد قوی برای جاوااسکریپت داریم ولی Netscape کمپانی‌‌ای که حمایت میکرد، یکسال قبل توسط AOL خریده شد.

[تبلیغ شرکت AOL]

و سهم مارکت مرورگرا داشت توسط اینترنت اکسپلورر بلیعده میشد و مایکروسافت واقعا به پیروی از قوانین بازی اهمیتی نمیداد. در اوایل دهه ۲۰۰۰ IE حداقل 80 درصد از سهم بازار مرورگرها رو کنترل می‌کرد و مایکروسافت کلا کار خودش رو میکرد و اکستنشن‌های خودش رو برای جاوا اسکریپت پیاده سازی می‌کرد و خب این باعث تیکه تیکه شدن جاوااسکریپت شد که ما هنوزم امروزه برای ساپورت کردن از این نسخه‌های legacy باید باهاش دست و پنجه نرم کنیم ولی همین موضوع به بعضی فیچرهای خیلی انقلابی مثل AJAX هم ختم شد که به جاوااسکریپت اجازه میداد به صورت غیرهمزمان(Asynchronous) پیاده‌سازی بشه که ماده‌اولیه‌ ساخت برنامه‌های تک صفحه‌ای(Single Page Application) بود [این ویدیو سال ۲۰۱۹ منتشر شد و ۱۵ ژوئن ۲۰۲۲ IE از ساپورت مایکروسافت خارج شد]

حالا تو اوایل دهه ۲۰۰۰ کار روی نسخه ECMA4 شروع شده و به سمتی می‌رفت که بیشتر شبیه تایپ‌اسکریپت امروزی با ویژگی‌هایی مثل optional type annotations، کلاس‌ها، اینترفیس‌ها و مجموعه ای از ویژگی‌های دیگه باشه که طراحی شده بودن تا بشه تو مقیاس سازمانی از جاوااسکریپت استفاده کرد ولی یکی از اعضای کمیته از یاهو Douglas Crockford بود که سال ۲۰۰۳ JSON رو خلق کرده بود و خیلی نگران این بود که پیشنهاداتی که برای ES میدادن داشت خیلی بزرگ و خارج از کنترل میشد.

مایکروسافت هم با کراکفورد موافقت کرد و در نهایت از داشتن کوچکترین نقشی تو پیشنهادات ES4 خودداری کرد. این باعث شد که ۲ تا پروپوزال متفاوت به صورت همزمان پیش گرفته بشه.

  • ES3.1
  • ES4

نسخه ۳.۱ خیلی ساده‌تر بود و هیچ تغییر اساسی‌ای تو زبان نداشت.

این حماسه تا سال 2008 ادامه داشت تا اینکه سرانجام ES4 برای همیشه کنار گذاشته شد اما در واقع راه خودشو به مارکت به عنوان یه زبان اسکریپتی به اسم ActionScript که توسط Adobe دولوپ شده و توسط Flash هم ساپورت میشد پیدا کرد و همه هم میدونیم چی به سر Flash اومد.[میم ویدیویی در مورد مرگ فلش]

اوایل تا اواسط دهه ۲۰۰۰ دوران تاریک جاوااسکریپت بود ولی اون داشت آماده‌ی ورود به رنسانس میشد، دولوپرا اواسط دهه ۲۰۰۰ خیلی از ساخت وب‌اپلیکیشن‌هایی که روی همه مرورگرا اجرا شن ناامید بودن ولی ما تو سال ۲۰۰۶ با انتشار jQuery شاهد یه جهش بزرگِ رو به جلو بودیم و این کتابخونه سزاوار اعتبار بسیار بیشتری نسبت به اون چیزی که بهش داده شده‌س.JQuery یکی از اولین کتابخونه‌های JSئه که مستندات بسیار خوبی داره و به دولوپرا این امکان رو میداد که برنامه‌های پیچیده‌تر و تعاملی‌تری بسازن که با اطمینان بیشتری روی همه مرورگرها کار کنه. پس JQuery واقعا یه پدیده بود ولی ما یه اتفاق مهم دیگه هم تو سال ۲۰۰۸ دیدیم، گوگل کروم و موتور V8 هر دو ۲ سپتامبر ۲۰۰۸ منتشر شدن و V8 به طور کامل نحوه کامپایل و تفسیر جاوااسکریپت رو تغییر داد و اون رو به گزینه‌ای مناسب برای برنامه‌های کاربردی با کارایی بالا هم در سمت مرورگر و هم در سمت سرور تبدیل کرد.

کمتر از یه‌سال بعد، در می ۲۰۰۹ Ryan Dahl، نودجی‌اس Node.js رو معرفی کرد، یه ران‌تایمِ(runtime) سمت سرور برای جاوااسکریپت که روی V8 ساخته شده بود و همچنین شامل یه event loop میشد که تا اون زمان یه مفهوم جدید بود و به شما اجازه میداد که کدهای رویدادمحورِ (event driven) غیرمسدود کننده (non blocking) بنویسید و به دلیل این ویژگی‌ها node.js به عنوان یه راه‌حل عالی برای ساخت وب‌اپ‌هایی که scale میشن شناخته شد و همینطور این امکان رو برای دولوپرها فراهم کرد که تمام وب‌اپی که میسازن روی یه تکنولوژی‌ سوار باشه که به عنوان "پارادایم جاوااسکریپت همه‌جا" شناخته میشه.

تو همون زمان هم متخصصای جاوااسکریپت بالاخره خودشونو برای نسخه بعدی جمع و جور کردن؛ طرف‌ها در اسلو، نروژ متحد شدند و تصمیم گرفتن که ES3.1 را به عنوان نقطه شروعی برای ES5 در نظر بگیرن که در نهایت تو دسامبر 2009 منتشر شد،ینی دقیقاً 10 سال بعد از آخرین مشخصه رسمی. از نقطه نگاه فنی ES5 یسری فیچرای خیلی مهمی داشت مثل: JSON Support، Object Methods، strictmode ،‌accessors و خیلی چیزای دیگه.

حالا بریم تا سال ۲۰۱۰، اینجا ما داریم فریمورکای جاوااسکریپتی رو میبینیم که اختصاصا برای برنامه‌های تک‌صفحه‌ای (SPA) طراحی شدن؛ دو تا از معروف‌تریناشون backbone و angular.js بودن که هر دوشون اکتبر ۲۰۱۰ بیرون اومدن و هر دوشون سعی میکردن یه مشکل مشابهو حل کنن ولی اینکارو از راه‌های متفاوت انجام دادن. Backbone سبک بود و آپدیت DOM رو به شیوه برنامه‌نویسی دستوری (Imperative programming) هندل میکرد در حالی‌که انگولار یکم جامع‌تر بود و از شیوه برنامه‌نویسی اعلانی (Declarative programming)
استفاده می‌کرد و سازنده بک‌بون Jeremy Ashkenas اسطوره‌ی این دوره‌س و کسیه که Underscore.js و CoffeeScript رو ساخته و صحبت از CoffeeScript بخش مهمی از تاریخ جاوااسکریپته بخاطر اینکه اولین زبانی بود که باعث شد Transpiling تبدیل به یه جریان بشه و خود این مسئله هم در نهایت به ایده اصلی برندون برمیگرده وقتی که تو سال ۱۹۹۵ داشت یه زبان برنامه‌نویسی میساخت که قابل انعطاف باشه؛ Transpilerها تو نسخه بعدی جاوااسکریپت ES6 یا ES2015 خیلی مهم شدن و تعداد زیادی هم فیچرهای جدید تو این نسخه به‌کار گرفته شدن چیزایی مثل:

  • Promise
  • let and const
  • arrow functions
  • spread syntax
  • destrucuring

این ویژگی‌های جدید یه پیشرفت عظیم برای توسعه دهنده‌ها بودن ولی برای توسعه‌دهنده‌ها واقعا سخت بود که بخوان از اینا استفاده کنن چون روی خیلی از مرورگرای قدیمی ساپورت نمیشدن و این دلیلیه که ما امروزه کاربرد پررنگ چیزایی مثل Babel و Typescript رو می‌بینیم بخاطر اینکه میتونن به هر نسخه‌ای از جاوااسکریپت برسن، از نسخه‌های امروزی تا ES3.هم‌زمان که دولوپرا هنوزم میتونن کداشونو با مدرن‌ترین فیچرها بنویسن [کدهای امروزی مارو به نسخه‌های قابل فهم برای مرورگرای قدیمی که فقط تا ES4 مثلا میتونستن متوجه شن تبدیل میکنن که روی اونها هم اجرا بشه]

و یه اتفاق مهم دیگه هم در سال ۲۰۱۵ خیزش React.js بود که یسری از مفاهیم Angular با declarative UI (رابط کاربریِ اعلانی) رو گرفت اما با unidirectional dataflow (جریان داده یکطرفه)، immutability (عدم تغییرپذیری) و استفاده از VirtualDOM بهبودشون داد و واقعاً React فریم‌ورکیه که الگوهای امروزیِ declarative UI رو تثبیت کرده. اما در این بین فریمورکای دیگه‌ای مثل Angular, Vue, Svelte هم هستن که برای جلب توجه دولوپرا رقابت میکنن.

همچنین تو همون دوره زمانی ما ابزارایی برای مدیریت پیچیدگی‌های این اپ‌های سنگین جاوااسکریپتی دیدیم، چیزایی مثل Rollup و Webpack برای باندل dependencies (وابستگی‌ها) و چیزایی شبیه typeScript و flow برای اضافه کردن type systems به جاوااسکریپت و بعدش شما یه چیزایی مثل immutableJs و rxJS داری که کمک میکنن که functional pattern (الگوهای تابعی)رو تو کدت استفاده کنی و اینا واقعا فقط نوک کوه یخِ پیچیدگی‌های اکوسیستم امروزی جاوااسکریپته و این ما رو به امروز میرسونه تابستون ۲۰۱۹،‌ TC39 یا کمیته‌ای که مسئول تغییرات ECMAScriptئه تو این نقطه یه برنامه زمانی منظم برای آپدیت جاوااسکریپت داره پس ما باید تقریبا به زودی ES2019 رو ببینیم که قراره با خودش فیچرای جدیدِ باحالی به زبون اضافه کنه.

ولی یه توسعه‌ی خیلی جالب دیگه هم Web Assemblyئه که به خودیِ خود فقط یه فرمت باینریه که زبون سطح پایینی مثل C++ میتونه کامپایلش کنه تا بتونه اپ‌هایی با پرفورمنس بالا به وب ارائه بده؛ وب‌اسمبلی یه جایگزین برای جاوااسکریپت نیست ولی میتونه یه راه کاملا جدید برای ساخت وب‌اپ‌ها رو بهمون نشون بده و قطعا روی آینده جاوااسکریپت تاثیر بذاره ولی اگه یه چیز رو تو طول سالها یاد گرفته باشم اینه که همیشه روی جاوااسکریپت شرط ببندم، جاواسکریپت یه زبونیه که مداوما تکامل پیدا کرده، حتی از همون زمان نمونه‌ی اولیه‌ش و برخلاف بقیه زبونای برنامه‌نویسی جامعه‌ی بزرگ و متنوعی داره. من میخوام تمومش کنم، ممنون از تماشاتون و تو ویدیوی بعدی باهاتون حرف میزنم."

امیدوارم براتون مفید بوده باشه و اگه نکته‌ای یا پیشنهادی در مورد این مدل ترجمه‌ها یا کارا به ذهنتون میرسه خوشحال میشم بگید.

* European Computer Manufacturers Association

منبع:
لینک ویدیو

برنامه نویسیجاوااسکریپتتاریخ اینترنتjavascriptfireship
شاید از این پست‌ها خوشتان بیاید