JavaScript hangi noktada?
JavaScript 30 yıldan eski bir dil ama modernleşmesi son 10 yılda hızlandı. ES2015 (let/const/arrow function/class/module) bir dönüm noktasıydı; sonrasında her yıl yeni özellikler eklendi. 2026'da ES2025 önerileri yerleşik (Iterator helpers, Promise.withResolvers, top-level using). AIOR'da hem frontend hem backend tarafında JavaScript ağırlıklı çalışan ekiplerle proje yürütüyoruz; dilin modern halini bilmek üretkenliği belirgin etkiliyor.TypeScript varsayılan oldu
2026'da yeni başlayan bir orta-büyük JavaScript projesini TypeScript'siz başlatmak tercih edilen bir yol değil. AIOR'da müşteri projelerinin %95'inde TypeScript kullanıyoruz. Strict mode + `noUncheckedIndexedAccess` + `noImplicitOverride` + `exactOptionalPropertyTypes` kombinasyonu derleme hatalarını runtime hatalarından önce yakalıyor.TypeScript'in 5.x serisi tip sistemi performansını ve developer experience'ı önemli ölçüde iyileştirdi. AIOR projelerinde tsconfig standardımız net: `strict: true`, `target: ES2022`, `module: ESNext`, `moduleResolution: bundler` veya `Node16`.
Modern dil özellikleri — pratikte kullanım
- Optional chaining (`obj?.prop?.method?.()`) — kontrol kodunu sade tutar.
- Nullish coalescing (`a ?? b`) — `0` ve `''` gibi falsy değerleri korur.
- Logical assignment (`a ??= b`, `a ||= b`) — varsayılan değer atamasını sadeleştirir.
- Top-level await — modüllerde direct await; bootstrap kodu basitleşir.
- Private class fields (`#field`) — gerçek encapsulation.
- Iterator helpers (`map`, `filter`, `take`, `drop` on iterators) — lazy evaluation.
- Promise.withResolvers — promise + manual resolve/reject pattern.
- Pattern matching (Stage 2-3) — switch/case'in modern hâli.
Runtime seçimi — Node, Bun, Deno
JavaScript runtime'ı seçimi 2026'da daha karmaşık:- Node.js — production-grade default. Ekosistem en geniş, monitoring tooling en olgun, enterprise support en yaygın.
- Bun — DX hızlı: dosya çalıştırma, paket yönetimi, test runner, bundler tek pakette. Production benimseme artıyor ama hâlâ niş.
- Deno — TypeScript-native, güvenlik modeli (--allow-X) öğretici. Edge functions ve scripting için iyi tercih.
AIOR'da production tarafında Node.js varsayılan, geliştirme ve test tarafında Bun deneyimi olumlu — özellikle test runner'ı belirgin daha hızlı.
Modül sistemi — ESM artık varsayılan
CommonJS (require/module.exports) 2026'da hâlâ var ama yeni projelerde ESM (import/export) varsayılan. AIOR'da yeni Node.js projeleri "type": "module" ile başlıyor. Ancak ekosistemin tamamı henüz ESM-only değil; popüler kütüphanelerin bir bölümü hâlâ dual package (CJS + ESM). Bu geçiş döneminde import yollarında `.js` uzantısı zorunlu (ESM için), bu da TypeScript ile bazı tooling karmaşıklığı yaratıyor.Test ekosistemi
Vitest 2024'ten itibaren Jest'in pratik alternatifi haline geldi. AIOR'da yeni JavaScript projelerinde Vitest tercih ediyoruz: native ESM desteği, daha hızlı startup, Jest-uyumlu API. Node.js'in yerleşik test runner'ı (Node 22+) hafif projelerde yeterli — ek bağımlılık gerektirmez. E2E testlerde Playwright AIOR standardı; Cypress kullandığımız müşteri projeleri Playwright'a göç ediyor.Asenkron kalıplar
Promise'ler ve async/await artık dilin doğal akışı. AIOR projelerinde async kalıplarda standartlarımız:- `Promise.all` paralel işlemler için.
- `Promise.allSettled` hata olsa bile diğer işlemleri tamamlamak gerektiğinde.
- `AbortController` long-running işlemler için cancellation.
- Top-level `await` bootstrap kodunda kullanılabilir (modülde).
- Error boundaries — async hata zincirinin global handler ile yakalanması zorunlu.
Bundler'lar — esbuild, swc, Vite
Webpack 2026'da hâlâ kullanılıyor ama yeni projelerde esbuild ve swc tabanlı çözümler (Vite, Turbopack, Rspack) varsayılan. Build süreleri 5-10 kat hızlı. AIOR'da yeni frontend projeleri Vite ile başlıyor; backend (Node.js) projelerinde build genelde tsc veya esbuild ile direkt.Sonuç
JavaScript 2026'da artık 1995'in scripting dili değil. TypeScript ile birleştiğinde, modern dil özellikleri, olgun ekosistem ve geniş tooling seçenekleri ile profesyonel yazılım geliştirmenin tam donanımlı bir dili. AIOR olarak frontend ve backend boyunca tek dil kullanma esnekliğini, yeniden eğitim maliyetini düşürme avantajıyla değerlendiriyoruz. Sizin tarafınızda JavaScript projelerinde son 12 ayda hangi runtime/bundler değişimi yaptınız ve ne öğrendiniz?Where JavaScript sits today
JavaScript is more than 30 years old but its modernisation accelerated in the last decade. ES2015 (let/const/arrow functions/class/module) was a turning point; new features have been added each year since. By 2026, ES2025 proposals are settled in (Iterator helpers, Promise.withResolvers, top-level using). AIOR runs projects with teams that work heavily in JavaScript on both frontend and backend; knowing the modern language meaningfully affects productivity.TypeScript became the default
In 2026, starting a new mid-to-large JavaScript project without TypeScript isn't the preferred path. 95% of AIOR customer projects use TypeScript. Strict mode + `noUncheckedIndexedAccess` + `noImplicitOverride` + `exactOptionalPropertyTypes` together catch compile errors before they become runtime errors.The TypeScript 5.x series substantially improved type system performance and developer experience. Our standard tsconfig at AIOR is clear: `strict: true`, `target: ES2022`, `module: ESNext`, `moduleResolution: bundler` or `Node16`.
Modern language features — how they're used
- Optional chaining (`obj?.prop?.method?.()`) — keeps guard code clean.
- Nullish coalescing (`a ?? b`) — preserves falsy values like `0` and `''`.
- Logical assignment (`a ??= b`, `a ||= b`) — simplifies default assignment.
- Top-level await — direct await in modules; bootstrap code is simpler.
- Private class fields (`#field`) — real encapsulation.
- Iterator helpers (`map`, `filter`, `take`, `drop` on iterators) — lazy evaluation.
- Promise.withResolvers — promise + manual resolve/reject pattern.
- Pattern matching (Stage 2-3) — modern switch/case.
Runtime choice — Node, Bun, Deno
Runtime choice in 2026 is more nuanced:- Node.js — production-grade default. Widest ecosystem, most mature monitoring, broadest enterprise support.
- Bun — fast DX: file run, package manager, test runner, bundler in one package. Production adoption growing but still niche.
- Deno — TypeScript native, the security model (--allow-X) is pedagogically clean. Good for edge functions and scripting.
At AIOR, Node.js is the production default; Bun's experience is positive in development and test — its test runner is notably faster.
Module system — ESM is now default
CommonJS (require/module.exports) still exists in 2026 but ESM (import/export) is the default for new projects. New Node.js projects at AIOR start with `"type": "module"`. The ecosystem isn't fully ESM-only yet; some popular libraries still ship dual-package (CJS + ESM). During this transition, `.js` extensions are mandatory in import paths (for ESM), creating some tooling complexity with TypeScript.Test ecosystem
Since 2024, Vitest is the practical alternative to Jest. AIOR prefers Vitest on new JavaScript projects: native ESM support, faster startup, Jest-compatible API. Node.js's built-in test runner (Node 22+) suffices for lightweight projects — no extra dependency needed. For E2E, Playwright is the AIOR standard; customer projects using Cypress are migrating to Playwright.Async patterns
Promises and async/await are now the natural flow of the language. Standards we use at AIOR for async patterns:- `Promise.all` for parallel operations.
- `Promise.allSettled` when other operations must complete even if some fail.
- `AbortController` for cancellation of long-running operations.
- Top-level `await` in bootstrap code (within modules).
- Error boundaries — async error chains must be caught by a global handler.