جاوا اسکریپت باشیم!

سال ۱۹۹۵ بود که برندان آیک (Brendan Eich)، کسی که بعداً شرکت موزیلا (Mozilla) رو تاسیس کرد، در طی ۱۰ روز یک زبان اسکریپت نویسی برای مرورگر Netscape نوشت تا بشه با اون صفحات وب رو در سمت کلاینت پویا‌تر کرد و اصلا دنبال این هم نبود که یک زبان برنامه نویسی جدی و حرفه‌ای رو توسعه بده بلکه فقط دنبال کمی پویایی بیشتر و البته رقابت در ماجرایی معروف به جنگ مرورگرها بود. آیک اسم این زبان رو موکا (mocha) گذاشت که اسم نوعی سرو قهوه هست و فکرشم نمی‌کرد که روزی موکا به این غول پرنفوذ تبدیل بشه.

خالق JavaScript برندان آیک
خالق JavaScript برندان آیک

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

بعد از اختراع وب توسط تیم برنرز لی (Timothy John Berners-Lee) در سال ۱۹۹۱ مرورگرها فقط صفحات استاتیکی بودن که از بارگذاری یکسری فایل استاتیک html ایجاد می‌شدن. دو سال بعد، در سال 1993 که گروه NCSA تکنولوژی CGI رو خلق کرد تا صفحات وب بتونن محتوهایی پویا و یکسری اعمال مثل اعتبارسنجی رو انجام بدن. این پویایی صرفا در سمت Back-End اتفاق افتاد و همچنان در سمت کلاینت همه چیز استاتیک بود تا این که برندان آیک (Brendan Eich) در سال ۱۹۹۵ اولین زبان برنامه نویسی سمت کلاینت رو به نام موکا اختراع کرد.

برندان آیک یکی از برنامه‌نویسانی بود که در شرکت Netscape استخدام شده بود؛ شرکتی که مرورگر Netscape Navigator، محبوب‌ترین مرورگر اون دوران رو توسعه میداد. مهندسان شرکت Netscape دنبال این ایده بودن تا بشه سمت کلاینت رو هم با یک زبان برنامه نویسی پویا کنن. اونا در ابتدا تلاش کردن تا زبان Java که اون زمان خیلی هم محبوب شده بود رو در مرورگر خودشون بکار بگیرن ولی Java بیش از حد سنگین و پیچیده بود و چنین چیزی با توجه به محدودیت‌های نرم‌افزاری و سخت‌افزاری سیستم‌های اون زمان تقریبا نشدنی بود.

در همین زمان به برندان آیک تسکی داده شد که طی اون مأموریت داشت تا ظرف ۱۰ روز زبانی جدید برای مرورگر Netscape بسازد با این شرایط:

  • شبیه به Java به نظر برسد (Syntax اون مشابه Java به نظر برسه)
  • آسان و سبک باشد تا کاربران معمولی هم راحت یاد بگیرند و استفاده کنن
  • در مرورگر اجرا شود و محدودیت‌های نرم افزاری و سخت‌افزاری برای اون در نظر گرفته بشه
  • قابلیت تعامل با DOM و HTML را هم داشته باشه

برندان با این که فرصت کمی داشت ولی موفق شد طی این ۱۰ روز زبانی ابتدایی که این مشخصات رو داشته باشه خلق کنه و اسمش رو بذاره موکا (Mocha)! برای این که چرا این اسم رو گذاشتن داستان‌های متفاوتی گفته شده. یک گروه میگن اسم قهوه محبوب آیک بوده، یکی گروه دیگه میگن مارک اندریسن (Marc Andreessen)، یکی از بنیان‌گذاران Netscape، پیشنهاد داده و گروه دیگری هم اون رو مربوط به یک دورهمی در یک کافه نسبت میدن به هر حال خیلی این نام ماندگار نشد و چند ماه بعد، در تابستان همان سال ۱۹۹۵ به LiveScript تغییر داده شد.

برای نام گذاری LiveScript هم چنین دلایلی آورده شده: واژه‌ی "Live" نشان‌دهنده‌ی دینامیک بودن زبان هست یعنی بر خلاف HTML که ایستا هست، LiveScript می‌تونه در زمان اجرا به صفحه واکنش نشان بده. علاوه بر اون نام "LiveScript" جنبه بازاریابی و تبلیغاتی هم می‌تونست داشته باشه که ویژگی پویا و زنده بودن تعاملات در مرورگر Netscape نشون بده. این نام به صورت رسمی در نسخه‌ی Netscape Navigator 2.0 Beta 3 که در سپتامبر 1995 منتشر شد برای این زبان استفاده شد.

اما این اسم هم چند ماه بیشتر دووام نیاورد! در زمستان ۱۹۹۵ (December 1995)، وقتی که Netscape آماده انتشار نسخه نهایی مرورگر Netscape Navigator 2.0 بود، در یک اقدام غیرمنتظره و جنجالی، نام زبان از LiveScript به JavaScript تغییر داده شد که کاملا هدفی بازاریابانه و تبلیغاتی داشت.

داستان دقیق‌تر از این قرار بود که شرکت Sun Microsystems که سازنده‌ی زبان Java بود، در اون زمان با Netscape همکاری تجاری داشت و چون Java در سال ۱۹۹۵ خیلی پر سروصدا و محبوب بود، و رسانه‌ها اون رو آینده‌ی برنامه‌نویسی می‌دونستن و روایاپردازی‌های بانمکی نقل محافل بود و همین باعث شد تا Netscape هم بیاد از این آب گل آلود ماهی خودش رو بگیره و به نوعی تلاش کنه تا یک پیوند ذهن بین این داستان‌های هیجان انگیز و زبان تازه توسعه داده شده خودش ایجاد کنه.

زبان لایو اسکریپت که حالا اسم جاوااسکریپت رو پیدا کرده بود، هیچ ربط و ارتباطی به Java نداشت و الان هم نداره و صرفا برخی Syntaxهای اون مشابه Java طراحی شده و اتفاقی کاملا تبلیغاتی بود پس این حرف که JavaScript کوچک شده Java هست کاملا غلط هست.

"It was a marketing gimmick. We knew that Java was the hot thing at the time, and this was a way to ride that wave."
— Brendan Eich

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

در این سال که جاوااسکریپت متولد و هی تغییر نام داده شد، مایکروسافت اولین مرورگر IE خودش رو عرضه کرده بود و داشت تلاش می‌کرد تا اون رو توسعه بده و یک رقیب جدی برای مرورگر Netscape Navigator بشه.

مایکروسافت در ابتدای سال ۱۹۹۵ ورژن یک مرورگر Internet Explorer خودش رو بر پایه مرورگر Spyglass Mosaic توسعه داد که نسخه‌ای بسیار ساده بود و فقط روی Windows 95 اجرا می‌شد. این مرورگر فقط قابلیتهای پایه مرور وب (HTML 2.0) را داشت و هیچ پشتیبانی از JavaScript، CSS نمی‌کرد یا حتی بوک مارک های درست حسابی هم نداشت اما در پایان همان سال (۱۹۹۵) نسخه ۲ این مرورگر رو توسعه داد که در این نسخه پشتیبانی اولیه از JavaScript و SSL اضافه شد. سال بعد (۱۹۹۶) با توسعه نسخه ۳ و افزودن پشتیبانی از CSS رسما وارد رقابت جدی با Netscape شد و جنگ مرورگرها آغاز شد!

البته IE از جاوااسکریپت در ابتدا استفاده نکرد! مایکروسافت با مشاهده موفقیت جاوااسکریپت و با نوعی کپی برداری از اون، نسخه‌ی خودش را با نام JScript برای مرورگر Internet Explorer ساخت.

از وقتی IE امد و جنگ مرورگرها شروع شد و این دو شرکت برای رقابت با هم مدام ساختارهای جدید و انحصاری توسعه دادن تا با کمک اون‌ها بتونن جذابیت و کارایی بیشتری پیدا کنن ناسازگاری و تفاوت در نوشتن و اجرای کدها روز به روز بیشتر و بیشتر شد تا جایی که به یک افتضاح ختم شد!

چون این دو با هم رقیب بودن و برای شکست و حذف همدیگر تلاش می‌کردن هیچ وقت برای توسعه استانداردها با هم مشارکتی جدی نداشتن و به استانداردهای W3C که با هدف یکسان کردن استانداردها ایجاد شده بود بی‌توجه‌ی میکردن. جزئیات بیشتر این درگیری ها و چطوری شکست خوردن Netscape از IE و بعد پیدایش FireFox و Google کروم رو می‌تونید در مطلب "صفر تا صد تاریخچه اینترنت و وب: درس‌هایی از اعماق وب" بخونید.

اختلاف ویژگی و اجرای JavaScript شرکت Netscape و JScript شرکت مایکروسافت بسیار شدید شده بود برای همین در اواخر 1996، شرکت Netscape مشخصات زبان JavaScript را به ECMA International که در اون زمان با نام European Computer Manufacturers Association فعالیت می‌کرد ارائه داد تا فرایند استانداردسازی رو شروع بشه و جلوی این آشفتگی گرفته بشه.

چند ماه بعد، در ژوئن 1997 اولین نسخه رسمی با نام ECMAScript 1 (ES1) منتشر شد. بعدها در ۱۹۹۸ نسخه ECMAScript 2 و در ۱۹۹۹ هم نسخه ECMAScript 3 منتشر شد که شامل استانداردهایی برای regex و try/catch بود.

طی این مدت، روز به روز مرورگر IE سهم بازار بیشتری می‌گرفت و مرورگر نت اسکیپ افول می‌کرد تا جایی که در سال ۱۹۹۹ که ES3 منتشر شده بود اینترنت اکسپلورر تقریبا همه بازار رو گرفته بود و به نوعی یک انحصار مطلق ایجاد کرده بود.

برای مایکروسافت با این انحصار و سهم بازار منطقی نبود تا بیاد حرف‌ها و دستورات یک سازمان دیگه که هیچ قدرت خاصی در بازار نداره و تعیین کننده نیست رو بپذیره برای همین در تمام این دوران نسبت به ECMAScript بسیار بی‌توجه بود و اینطور می‌گفت که نیاز به ECMAScript نیست چون کل بازار دست IE هست و مهندسان مایکروسافت بهتر میدونن چی رو چطوری طراحی کنن!

مایکروسافت در تمام جلسات ECMAScript سعی می‌کرد تا روند رو منحرف و کند کنه و همین موضوع باعث شد نسخه‌ی چهارم استاندارد (ES4) که قرار بود در اوایل دهه ۲۰۰۰ منتشر شود، به خاطر مخالفت مایکروسافت هرگز نهایی نشه و تبدیل به نسخه گم شده ECMAScript بشه!

این قلدری‌ها دلسرد و کندی عجیبی در وب ایجاد کرده بود که حتی دامن W3C رو هم گرفته بود و مثل سابق روی توسعه استانداردهاش کار نمی‌کرد و حتی بعد از سال ۲۰۰۰ تا سال‌ها مایکروسافتی که مدام نسخه جدید و با ویژگی‌ها و تغییرات جدید منتشر می‌کرد هیچ نسخه جدیدی منتشر نکرد!

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

در ES4 گروهی مثل موزیلا که خواهان پیشروی بلندپروازانه بودند دنبال پیاده سازی ویژگی‌های مثل کلاس‌ها و تایپ‌های استاتیک، ماژول‌ها و ... بودن ولی مایکروسافت و برخی دیگر معتقد بودند این تغییرات بیش از نیاز کاربران هست و چون مایکروسافت دست بالاتر رو داشت هیچ وقت ES4 امکان اجرا پیدا نکرد.

اما این گروه تسلیم نشدن و ایده‌های خودشون رو در مرورگر فایرفاکس دنبال می‌کردن. حتی با W3C که کند شده بود هم به مشکل خوردن و گروهی تحت عنوان WHATWG برای توسعه HTML ایجاد کردن. همین روحیه در نهایت باعث شد تا فایرفاکس محبوبیت پیدا کنه. البته بعد از این که مایکروسافت متوجه پیشرفت فایرفاکس شد بعد از سال‌ها خواب بودن شروع کرد به توسعه و انتشار نسخه‌های جدید مرورگر IE ولی همون روندی که قبلا خودش برای حذف نت اسکیپ پیش گرفته بود برای خودش اتفاق افتاد و در نهایت پس از نسخه 11 توسعه این مرورگر رو متوقف کرد و عملا بازاری که قبلا پادشاه‌ش بود رو از دست داد.

تا گروه موزیلا فایرفاکس کار خودشون رو سال ۲۰۰۲ شروع کردن و دو سال بعد اولین نسخه FirFox رو منتشر کرد و تا دو سال بعد (۲۰۰۶) هم نتونست آنچنان در مقابل IE قدم علم کنه ولی پس از ۲۰۰۶ هر سال کاربران بیشتری به دلیل کندی و باگ‌های زیاد اینترنت اکسپلورر به فایرفاکس مهاجرت می‌کردن و از قدرت مایکروسافت به مرور کم می‌شد.

همین تضعیف جایگاه کم کم باعث شد تا مایکروسافت از سر اجبار و نه تعقل کوتاه بیاد تا این که در نهایت، در سال 2008 یک توافق صلح‌آمیز (Harmony proposal) بین دو گروهی که خواهان پیشروی آهسته (ES3.1) بودند (مثل مایکروسافت) و گروهی که خواهان پیشروی بلندپروازانه بودند (ES4) (مثل موزیلا) شکل گرفت که طی این توافق تاریخ در سال ۲۰۰۹ نسخه‌ی سبک‌تر ES5 منتشر شد و همزمان هم برای توسعه نسخه‌ی آینده (ES6/ES2015) چارچوبی پایه‌گذاری شد.

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

این توافق مهم توسط گروه TC39 یا همان Technical Committee 39 گروهی در ECMA است که وظیفه‌ی نگهداری، توسعه و تصویب استاندارد ECMAScript را بر عهده داره انجام شد. از جمله اعضای این گروه میشه به برندان آیک (Brendan Eich) خالق اولین نسخه جاوااسکریپت،آلن ویرفز بروک (Allen Wirfs-Brock) استانداردنویس برجسته ECMA، داگلاس کراکفورد (Douglas Crockford) خالق JSON و JSLint اشاره کرد.

بعد از توافق ۲۰۰۹ و افول ارام جایگاه اینترنت اکسپلورر مایکروسافت و رشد مرورگرهایی مثل فایرفاکس و گوگل کروم، نهایتا در سال ۲۰۱۵ یک نسخه استاندارد جدید با کلی قابلیت‌های شگفت انگیز و انقلابی برای جاوااسکریپت با نام ECMAScript 6 منتشر که بعدها به‌طور رسمی به ECMAScript 2015 (ES2015) تغییر نام داد که منجر به فراگیری و رشد انفجاری جاوااسکریپت شد و دنیای وب مخصوصا در سمت کلاینت وارد تغییراتی جدی شد که تا همین امروز هم تب و تابش باقی هست.

البته ناگفته نماند که خلق NodeJs بر پایه موتور V8 گوگل کروم و معرفی فریم ورک‌های SPA مثل AngularJs و ReactJS هم بسیار در این موضوع تاثیر گذار بودن.

جاوااسکریپت در طی این ۱۰ سال بین ۱۹۹۵ تا سال ۲۰۱۵ خیلی جدی گرفته نمی‌شد. حتی قبل از توافق ۲۰۰۹ بیشتر برای مسخره کردن و اجرا عملیات‌های نچندان مهم و ظاهری مثل تغییر شکل موس و انیمیشن ریزش برف کریسمس استفاده می‌شد.

تا قبل از پیدایش ES6 و بلوغ NodeJS شاخه توسعه رابط کاربری در توسعه وب بیشتر یک موضوع پیش پا افتاده بود و شرکتی هم یک فرد رو مستقلاً به عنوان Front-End Developer استخدام نمی‌کرد تا این که اتفاقات بالا افتاد و این فیلد شغلی بخش زیادی از وظیفه‌هایی که تا دیروز لایه Back-End و توسعه دهنده‌های اونها مسئولش بودن رو به عهده گرفت کار تا جایی پیش رفته که در برخی پروژه‌های لایه فرانت اند بسیار سنگین‌تر و تخصصی‌تر از لایه Back-End شده و تیم‌های زیادی داریم که توسعه دهنده Front-End در اون‌ها مساوی یا حتی بیشتر از Back-End developer اون حقوق دریافت می‌کنه.