تولد و مرگ جاوااسکریپت

جاوااسکریپت با سطح دسترسی پایین در مرورگر اجرا می‌شود. با این حال، سرورها، ابزارهای ساخت (build tools) و خط لوله‌های توسعه را نیز مدیریت می‌کند. این یک برنامه‌ریزی از پیش تعیین شده نبود؛ بلکه مجموعه‌ای از وصله‌ها بر تصمیماتی بود که در سال ۱۹۹۵ گرفته شد.

درک دلیل وقوع این اتفاق، نحوه طراحی پشته‌ی تکنولوژی (stack) شما را در امروز تغییر می‌دهد.

سخنرانی گری برنهاردت (Gary Bernhardt) در سال ۲۰۱۴، درباره نوستالژی نیست؛ بلکه یک تشخیص از اصطکاک‌های معماری است. او به یک قوس کنایه‌آمیز اشاره کرد: جاوااسکریپت یک زبان بازی‌گونه (toy language) بود که تنها به این دلیل زنده ماند که در مرورگر انحصار داشت. همین انحصار باعث شد به پرکاربردترین زبان جهان تبدیل شود.

این تنش ساده است: مرورگر باید کد را به‌صورت ایمن و سریع اجرا کند. این دو هدف با هم در تضاد هستند.

در سال ۲۰۱۴، این پیش‌بینی وجود داشت که WebAssembly جایگزین JavaScript شود. اما این اتفاق به‌طور کامل رخ نداد. WebAssembly پایدار است و برای مواردی مانند Figma یا Google Earth بسیار مفید است، اما نتوانست جایگزین JavaScript به عنوان یک زبان برنامه‌نویسی اپلیکیشن شود.

در عوض، JavaScript دچار جهش (mutation) شد. TypeScript، باندلرها (bundlers) و محیط‌های اجرایی (runtimes) جدیدی مانند Bun برای رفع همان اصطکاک‌هایی پدید آمدند که برنهاردت شناسایی کرده بود.

از این سخنرانی برای فرار از یادگیری JavaScript استفاده نکنید. همچنین از آن برای توجیه مهاجرت به WebAssembly بدون وجود مشکل عملکردی (performance) استفاده نکنید.

از آن به عنوان یک چک‌لیست برای پشته‌ی تکنولوژی خود استفاده کنید:

TypeScript در مدیریت تایپ‌ها در زمان کامپایل (compile time) کمک می‌کند، اما شکاف بین تایپ‌های شما و داده‌هایی که از طریق شبکه دریافت می‌شوند را برطرف نمی‌کند. شما همچنان به اعتبارسنجی در زمان اجرا (runtime validation) نیاز دارید.

مهم‌ترین درس این است: بدانید که آیا تکنولوژی شما به دلیل شایستگی وجود دارد یا به دلیل انحصار.

محیط اجرایی خود را بر اساس پیش‌بینی‌های سال ۲۰۱۴ تغییر ندهید. زمانی آن را تغییر دهید که داده‌های اندازه‌گیری شده، وجود یک گلوگاه (bottleneck) را نشان دهند.

منبع: https://dev.to/jtorchia/the-birth-and-death-of-javascript-2014-what-still-holds-and-what-doesnt-2hae