Uzaktan çalışmak ilk bakışta yazılımcının doğal yaşam alanı gibi görünür: Sessiz bir oda, güçlü bir bilgisayar ve toplantılar arasında uzanan kesintisiz kodlama saatleri… Ancak ofis sohbetleri, omuz üzerinden yapılan kısa yardımlar ve birlikte içilen kahveler kaybolduğunda yalnızca çalışma ortamı değil, zihnin problem çözme biçimi de değişir. Terminal aynı terminaldir; fakat ona bakan kişi artık farklı bir bilişsel haritada ilerler.
Devamı...
Bir programı yalnızca sırayla çalışan komutlar bütünü olmaktan çıkaran şey, karar verebilmesi ve belirli işlemleri tekrarlayabilmesidir. Operatörler verileri işlerken akış kontrol yapıları programın hangi yoldan ilerleyeceğini belirler. Kısacası operatörler mutfaktaki araçlar, koşullar ve döngüler ise şefin tarif planıdır.
Devamı...
Bir kullanıcıyı, otomobili veya kahve makinesini yazılım dünyasına taşımak istediğimizde yalnızca birkaç bağımsız değişken kullanmak kısa sürede karmaşaya yol açar. Nesneler, bir varlığa ait bilgileri anlamlı bir bütün hâlinde toplar. JSON ise bu anahtar-değer düzenini sistemler arasında aktarılabilen standart bir metne dönüştürür.
Devamı...
JavaScript’te değişken tanımlamak kolay görünür: Bir anahtar kelime seçer, isim verir ve değeri atarsınız. Ancak var, let ve const arasındaki seçim yalnızca sözdizimsel bir tercih değildir. Bu kelimeler; değişkenin nerede erişilebilir olduğunu, ne zaman oluşturulduğunu ve yeniden atanıp atanamayacağını belirler. Yanlış seçim, özellikle iç içe bloklarda oldukça şaşırtıcı hatalar doğurabilir.
Devamı...
Bugün bir LLM’ye “bana bir REST API yaz” dediğimizde birkaç saniye içinde kodla karşılaşmak büyüleyici görünüyor. Ancak makinenin talimat üretmesi, insanın niyetini biçimsel işlemlere dönüştürmesi ve hatta kendi davranışını kurması fikri yeni değil. Otomatik programlama rüyası; mekanik ördeklerden derleyicilere, mantık makinelerinden modern kod asistanlarına uzanan binlerce yıllık bir merakın son perdesi.
Devamı...
Bir fonksiyon çalışmasını tamamladığında yerel değişkenlerinin ortadan kaybolmasını bekleriz. Ancak kapanışlar, iç içe geçmiş fonksiyonlara şaşırtıcı bir yetenek kazandırır: İç fonksiyon, onu oluşturan dış fonksiyon çoktan sona ermiş olsa bile dış kapsamdaki değişkenlere erişebilir. Bu davranış sihir değil; sözcüksel kapsam, fonksiyon değerleri ve çalışma zamanı ortamlarının birlikte çalışmasının sonucudur.
Devamı...
JavaScript’te this, ilk bakışta “fonksiyonun sahibi” gibi görünür; ancak gerçekte değeri fonksiyonun nerede tanımlandığından çok nasıl çağrıldığına bağlıdır. Aynı fonksiyon bir çağrıda kullanıcı nesnesini, başka bir çağrıda global nesneyi, hatta undefined değerini gösterebilir. Bu yüzden this, değişmez bir adres etiketi değil, çalışma zamanında çözülen dinamik bir bağlam referansıdır.
Devamı...
JavaScript kodu satır satır çalışan basit bir tarif gibi görünür; ancak motor, ilk satırı yürütmeden önce mutfağı çoktan düzenlemiştir. Değişken ve fonksiyon bildirimleri için bellek ayırır, kapsamları oluşturur ve erişim kurallarını belirler. Hoisting adı verilen davranış, bildirimlerin gerçekten kaynak kodun başına taşınması değil, çalışma bağlamının hazırlanma aşamasında belleğe kaydedilmesidir. Bu ayrım bilinmediğinde kod, küçük bir sihir gösterisinden hızla hata avına dönüşebilir.
Devamı...
JavaScript’te "5" + 2 işleminin "52", "5" - 2 işleminin ise 3 üretmesi ilk bakışta motorun zar attığını düşündürebilir. Oysa bu davranışların arkasında belirli dönüşüm kuralları bulunur. İlkel ve referans tiplerinin bellekte nasıl temsil edildiğini, değerlerin nasıl kopyalandığını ve otomatik tip dönüşümünün hangi adımlarla gerçekleştiğini anlamak; şaşırtıcı hataları önlemenin en etkili yollarından biridir.
Devamı...
JavaScript’e C veya C++ dünyasından gelenlerin ilk şaşkınlığı genellikle şudur: Bir değişken nasıl olur da önce sayı, birkaç satır sonra metin olabilir? Bunun nedeni JavaScript’in dinamik tipli bir dil olmasıdır. Tür bilgisi değişken adına değil, çalışma zamanındaki değere bağlıdır. Bu esneklik hızlı geliştirme sağlarken bazı sürprizleri de beraberinde getirir.
Devamı...