İçeriğe geç
XDD.baby Yazılım Öğrenme
Sözlük Hata rehberi 0/56

Blok 8 · Ders 54

Portföy, CV ve iş arama

GitHub profilini ve üç güçlü projeni hazırlamak, junior CV'si yazmak, LinkedIn ve iş ilanlarını okumak.

Bu dersin sonunda

  • Bir işverenin junior başvurusunda neye baktığını söyleyip portföy projelerini buna göre seçebilirsin
  • GitHub'da profil README'si yazıp en güçlü altı projeni açıklama ve konularla sabitleyebilirsin
  • Bir projenin README'sini şablona göre yazıp temiz bir kopyada yabancı gözüyle deneyebilirsin
  • Tek sayfalık, projeleri önde, aday takip sistemlerinin okuyabileceği bir junior CV'si hazırlayabilirsin
  • Bir iş ilanında gereklilikleri artılardan ayırıp başvurma kararı verebilir, ilana özel kısa bir ön yazı yazabilirsin
  • Başvurularını bir tabloda ve küçük bir betikle takip edebilir, ilanlardaki sık İngilizce sözcükleri okuyabilirsin
Bu sayfada
  1. İşveren neye bakar?
  2. Kursun yedi projesi portföye nasıl dönüşür?
  3. GitHub profilin: vitrin
  4. Proje README şablonu
  5. Junior CV'si: tek sayfa, projeler önde
  6. LinkedIn profili
  7. İş ilanı okumak: gereklilik mi, artı mı?
  8. Başvuru takibi
  9. Ön yazı
  10. Teknik İngilizce: sık sözcükler
  11. Görevler
  12. Kendini sına
  13. Portföy kontrol listesi

Elli üç derste yedi proje yazdın. Ama bir işveren onları kendiliğinden bulmaz; bulsa da ne olduklarını anlamak için uzun uğraşmaz. Bu ders kod dersi değil, vitrin dersi: GitHub profilini, proje README'lerini, CV'ni ve LinkedIn profilini bir işverenin gözüyle düzenleyeceksin. Sonra iş ilanlarını okumayı, başvurularını takip etmeyi ve kısa bir ön yazı yazmayı öğreneceksin. Dersin sonunda başvuru yapmaya hazır bir dosyan olacak.

İşveren neye bakar?

Deneyimli bir yazılımcı başvurduğunda işveren önceki işlerine bakar. Senin önceki işin yok; bu yüzden işverenin elinde tek bir soru kalır: "Bu kişi gerçekten kod yazabiliyor mu?" Cevabı CV'ndeki cümleler değil, gösterebildiğin şeyler verir.

Junior başvurularında işverenin baktığı şeyler kabaca şunlar:

  • Çalışan bir şey. Tıklayınca açılan bir canlı bağlantı ya da README'deki komutlarla çalışan bir proje. "Bende çalışıyordu" kanıt değildir.
  • Okunabilir kod. Anlamlı adlar, kısa fonksiyonlar, tutarlı biçim. İçinde unutulmuş console.log'lar, yoruma alınmış eski kod blokları, deneme2.js gibi dosyalar olmasın.
  • README. Projeyi anlatabiliyor musun? İş yerinde en sık yapacağın işlerden biri, ne yaptığını başkasına yazıyla anlatmak.
  • Geçmiş. Adım adım, anlamlı mesajlı commit'ler; dallar ve pull request'ler (Ders 52). Tek bir "hepsi" commit'i, projeyi bir yerden kopyalamışsın gibi görünür.
  • Test ve araçlar. npm test ile çalışan testler, her push'ta onları çalıştıran GitHub Actions, Prettier ile biçimlenmiş kod (Ders 53).
  • Sürekli öğrenme. Son aylarda da kod yazıyor musun? README'lerinde "neyi öğrendim, neyi düzelttim" yazıyor mu?
  • İletişim. CV'nde, ön yazında ve README'lerinde yazım hatası, özensiz cümle olmaması. Bunlar yazılı iletişiminin ilk örnekleri.

Başvurunu ilk açan kişi çoğu zaman teknik olmayan bir işe alım uzmanıdır (recruiter); kodunu okuyan ise sonraki aşamadaki geliştiricidir. Bu yüzden vitrin iki katmanlı olmalı: ilk bakışta anlaşılır, derine inince sağlam.

1. CV ve ön yazı İlandaki şartlara uyuyor mu? 2. GitHub profili Düzenli kod yazıyor mu? 3. Proje README'si Ne yaptığını anlatabiliyor mu? 4. Canlı demo Çalışıyor mu, hemen denenebiliyor mu? 5. Kod Okunuyor mu, testi var mı?
Şekil 54.1 Bir başvurunun izlediği yol. Her adımda bakılan aday azalır; her adım bir sonrakine davetiyedir.

Kanıt, iddiadan güçlüdür

CV'lerin çoğu aynı sıfatlarla dolu: çalışkan, takım oyuncusu, öğrenmeye açık. Okuyan kişi bunları doğrulayamaz, o yüzden geçer. Her iddianın yanına bir kanıt koy:

İddiaKanıtı
"JavaScript ve Node.js biliyorum"Takım API'si: 10 uç nokta, README'de gerçek bir istek ve yanıt
"Takım çalışmasına yatkınım"Dallar, açıklamalı pull request'ler, inceleme yorumları
"Öğrenmeye açığım"Son aylarda düzenli commit'ler; README'de "Zorluklar ve öğrendiklerim"
"Kaliteye önem veririm"Her push'ta çalışan testler, Prettier ile biçimlenmiş kod
"Yapay zekâ ile çalıştım"Kaynak göstererek cevap veren asistan; maliyet ve güvenlik notları

Kursun yedi projesi portföye nasıl dönüşür?

Bu kursta her blokta bir proje yazdın. Hepsi aynı ağırlıkta değil: ilk projeler öğrenme yolculuğunu, son projeler ise iş yerinde yapacağın işe ne kadar yakın olduğunu gösterir.

BlokProjeDersNe kanıtlarPortföyde
1Takım savaşı (takim-savasi)Ders 6Değişken, fonksiyon, dizi, döngüÖğrenme yolculuğu; sabitleme
2Metin RPG (metin-rpg)Ders 17Modüller, async, dosyaya kayıt, kullanıcı girdisiİstersen sabitle
3Şampiyon ansiklopedisi (ansiklopedi)Ders 25HTML, CSS, DOM, fetch, erişilebilirlik, canlı siteSabitle
4–5Takım API'si (takim-api)Ders 32, Ders 38REST, Express, PostgreSQL, transaction, yayınSabitle
6Maç notları uygulaması (mac-notlari)Ders 46Next.js, TypeScript, giriş, yetki, VercelSabitle, en başa koy
7Not asistanı (not-asistani) ve uygulamandaki "Notlarına sor" sayfasıDers 51Dil modeli API'si, tam metin ve vektör araması, kaynak gösteren cevap, ölçmeSabitle
–Kendi projen–Bir fikri baştan sona kendin götürebildiğinSabitle

Blok 7'nin projesi iki yerde duruyor: asistanı mac-notlari uygulamana "Notlarına sor" sayfası olarak taşıdın, alıştırma projesi not-asistani ise şimdilik yalnız bilgisayarında. Onu da GitHub'da bir depo açıp gönder: aramayı ölçtüğün soru kümesiyle birlikte, yapay zekâ tarafını en açık gösteren proje o. Ders 46'da uygulamana başka bir ad verdiysen bu dersteki mac-notlari yerine kendininkini düşün.

Tablonun son satırı önemli. Bu kursu bitiren herkesin elinde aynı yedi proje olacak; bir işveren aynı takım API'sini iki başvuruda görürse ikisini de daha az önemser. Öne çıkmanın iki yolu var:

  • Kurs projesini kendinin yap. Görevlerdeki genişletmeleri yap, kendi fikrinle bir özellik ekle, veriyi değiştir. README'de neyin kurstan geldiğini, neyi senin eklediğini açıkça yaz.
  • Kendi projen. Küçük ama gerçek bir sorunu çözen bir uygulama: arkadaş grubunun maç takvimi, ailenin dükkânı için stok listesi, sevdiğin bir oyunun istatistik sayfası. Kursta öğrendiğin yığınla, ama planı ve kararları senin.

GitHub profilin: vitrin

GitHub profilin github.com/kullaniciadin adresindedir. Şu ana kadar orada yalnız depo listen vardı. Bu bölümde iki şey ekleyeceksin: üstte seni anlatan bir yazı ve altında en iyi projelerin.

Profil README'si: adı senin adın olan depo

GitHub'da adı kullanıcı adınla birebir aynı olan bir depo açarsan, o deponun README'si profil sayfanın en üstünde görünür. Kullanıcı adın denizyilmaz ise depo denizyilmaz/denizyilmaz olur.

GitHub'ın belgesine göre profilde görünmesi için dört şart var: depo adı kullanıcı adınla aynı olmalı, depo herkese açık (Public) olmalı, deponun ana klasöründe README.md adında bir dosya olmalı ve dosya boş olmamalı.

  1. GitHub'da sağ üstteki + düğmesine bas ve New repository'yi seç.
  2. Repository name kutusuna kullanıcı adını harfi harfine yaz.
  3. Public'i seç.
  4. Add README seçeneğini aç. Bu depo için README'yi GitHub'ın eklemesi en kolayı; içine fikir veren bir şablon koyar.
  5. Create repository'ye bas. Depo sayfasında Edit README ile dosyayı doğrudan tarayıcıda düzenleyebilirsin.

Tarayıcıda yazmak yerine VS Code'da yazıp önizlemek istersen depoyu bilgisayarına klonla. git init ile yeni bir depo açma; nedenini birazdan bir hata kartında göreceksin. C:\kod klasöründe bir terminal aç:

Terminal — PowerShell
PS C:\kod> git clone https://github.com/denizyilmaz/denizyilmaz.gitCloning into 'denizyilmaz'...# GitHub'dan klonlarken altında birkaç "remote:" ve "Receiving objects" satırı daha görürsün.

Oluşan C:\kod\denizyilmaz klasörünü VS Code'da File → Open Folder... ile aç. GitHub'ın şablonunu sil ve kendi yazını yaz. Kısa tut: profil README'si bir özgeçmiş değil, bir karşılama kartıdır. Bir ekranı geçmesin.

README.md — denizyilmaz — Visual Studio Code
README.md
# Merhaba, ben Deniz Junior full-stack geliştiriciyim. TypeScript, React, Next.js,Node.js ve PostgreSQL ile web uygulamaları yazıyorum; sonprojelerimde dil modellerini uygulamaya bağladım. - **Şu an:** maç notları uygulamama test yazıyorum- **Öğreniyorum:** Docker ve teknik İngilizce- **Aradığım:** İstanbul'da ya da uzaktan junior pozisyon ## Öne çıkan projeler - [Maç Notları](https://github.com/denizyilmaz/mac-notlari):  Discord ile girişli maç notları ve notlara soru soran  asistan (Next.js, PostgreSQL, RAG)- [Not Asistanı](https://github.com/denizyilmaz/not-asistani):  kaynak göstererek cevaplayan asistan ve arama ölçümü- [Takım API'si](https://github.com/denizyilmaz/takim-api):  takım ve şampiyon REST API'si (Express, PostgreSQL) ## İletişim deniz@example.com · linkedin.com/in/deniz-yilmaz-ornek
PROBLEMSOUTPUTDEBUG CONSOLETERMINAL
PS C:\kod\denizyilmaz> git add README.mdPS C:\kod\denizyilmaz> git commit -m "Profil README'sini yaz"[main 9a84ded] Profil README'sini yaz 1 file changed, 23 insertions(+), 4 deletions(-)PS C:\kod\denizyilmaz> git pushTo https://github.com/denizyilmaz/denizyilmaz.git   0b3fbde..9a84ded  main -> main
⎇ mainLn 1, Col 1Spaces: 4UTF-8Markdown

Satırları elle bölebilirsin: GitHub, paragrafın içindeki tek satır sonunu boşluk sayar. Listedeki bir maddenin devamı iki boşluk girintiyle yazılır. Klonlanmış depoda -u origin main gerekmez; bağ hazır gelir.

Örnekteki depo adları ve iletişim bilgileri temsilî; sen kendi depolarının gerçek adreslerini yaz ve her bağlantıya bir kez tıkla. Push çıktısında To satırından önce birkaç sayım satırı da göreceksin (Ders 7). Kimlikler ve satır sayıları sende farklı olur; deletions, GitHub'ın şablonundan sildiğin satırlardır.

İyi bir profil README'sinde şunlar olur: tek cümleyle kim olduğun ve hangi yığınla çalıştığın, şu an ne yaptığın, en iyi iki üç projenin bağlantısı ve iletişim yolu. Olmaması gerekenler: ekranı dolduran rozet duvarı, "hakkımda 47 ilginç bilgi" listesi, çalışmayan istatistik kartları ve yazım hataları. İşveren burada uzun kalmaz; o kısa sürede projelerine tıklamasını istiyorsun.

Sık hataProfil README'si profilde görünmüyor

Ne zaman çıkar? Depoyu açtın, README'yi yazdın ama github.com/kullaniciadin sayfasında hiçbir şey değişmedi. Hata mesajı yok; GitHub şartlardan biri tutmayınca sessizce göstermez. En sık sebepler:

  • Depo adı kullanıcı adınla aynı değil (profil, deniz-yilmaz, about-me). Kullanıcı adın denizyilmaz ise depo da denizyilmaz olmalı.
  • Depo gizli (Private).
  • README.md ana klasörde değil, bir alt klasörde; ya da adı readme.txt gibi başka bir şey.
  • Değişikliği commit'leyip push etmedin; GitHub'daki dosya hâlâ eski.

Nasıl düzelir? Depo sayfasına gir, sağ üstte deponun tam adını oku ve kullanıcı adınla karşılaştır. Ad yanlışsa Settings sayfasının en üstündeki Repository name alanından değiştir. Gizliyse aynı sayfanın en altındaki Danger Zone bölümünden görünürlüğünü herkese açık (Public) yap. Sonra profilini gizli pencerede (Ctrl+Shift+N) aç: giriş yapmamış biri ne görüyorsa işveren de onu görür.

Sık hatafatal: refusing to merge unrelated histories

Ne zaman çıkar? Depoyu GitHub'da README ile açtıktan sonra kendi bilgisayarında ayrı bir depo başlattıysan (git init, commit, git remote add). İki depo aynı adı taşısa da ortak bir commit'leri yoktur. Önce push reddedilir (Ders 7'deki rejected hatası); önce çekmeye kalkınca da Git birleştirmeyi reddeder:

Terminal — PowerShell
PS C:\kod\denizyilmaz> git push -u origin mainTo https://github.com/denizyilmaz/denizyilmaz.git ! [rejected]        main -> main (fetch first)error: failed to push some refs to 'https://github.com/denizyilmaz/denizyilmaz.git'hint: Updates were rejected because the remote contains work that you do nothint: have locally. This is usually caused by another repository pushing tohint: the same ref. If you want to integrate the remote changes, usehint: 'git pull' before pushing again.hint: See the 'Note about fast-forwards' in 'git push --help' for details.PS C:\kod\denizyilmaz> git pull origin mainFrom https://github.com/denizyilmaz/denizyilmaz * branch            main       -> FETCH_HEAD * [new branch]      main       -> origin/mainfatal: refusing to merge unrelated histories

unrelated histories "birbiriyle ilgisiz geçmişler" demek. Bu hatayı Ders 52'de de görmüştün; burada sebebi, profil deposunun GitHub'da README ile açılmış olması. Git'in pull ayarı değiştirilmişse son satırın yerine uzun bir hint: listesi ve fatal: Need to specify how to reconcile divergent branches. görebilirsin; komutu git pull --no-rebase origin main diye yazarsan yine bu satıra gelirsin.

Nasıl düzelir? En temizi baştan klonlamak. VS Code'da klasörü kapat (File → Close Folder; klasör açıkken Windows onu kullanımda sayıp adını değiştirmeye izin vermeyebilir), bir PowerShell penceresinde cd C:\kod yaz ve kendi klasörünün adını değiştir: Rename-Item denizyilmaz denizyilmaz-eski. Sonra git clone ile GitHub'daki depoyu indir, yazdığın README'nin içeriğini oraya taşı, commit'le ve gönder. git pull origin main --no-rebase --allow-unrelated-histories da çalışır ama iki geçmiş de README eklediği için CONFLICT (add/add): Merge conflict in README.md alırsın ve çakışmayı Ders 52'deki gibi elle çözmen gerekir.

Sabitlenmiş depolar

Profil README'sinin altında depoların durur. GitHub varsayılan olarak "popüler" saydıklarını gösterir; bu sıralama senin seçimin değildir. En iyi projelerini sen seçip sabitleyebilirsin.

  1. Sağ üstteki profil resmine bas ve Your profile'a gir.
  2. Depo bölümünün üstündeki Customize your pins bağlantısına bas.
  3. Açılan listeden en fazla altı depo seç. Sağ üst köşelerindeki tutamaçtan sürükleyerek sıralarını değiştirebilirsin.
  4. Save pins ile kaydet.

Sabitlenen her depo kendi kartıyla görünür: adı, kısa açıklaması ve ana dili. Açıklama boşsa kart çıplak kalır. Her depo için deponun ana sayfasında, sağdaki About başlığının yanındaki dişli simgesine bas ve üç alanı doldur:

  • Description: tek cümle, ne yaptığı. "Ders 32 projesi" değil, "Takım ve şampiyon yöneten REST API (Express, PostgreSQL)".
  • Website: canlı bağlantı varsa. Ders 25'te ansiklopedi için yapmıştın.
  • Topics: aramada bulunmanı sağlayan etiketler: nodejs, express, postgresql, rest-api. GitHub'ın kuralına göre yalnız küçük harf, rakam ve tire kullanılır, her etiket en çok 50 karakter olur ve bir depoya en çok 20 etiket eklenir. Bu yüzden Next.js değil nextjs yazarsın.
DY Deniz Yılmaz denizyilmaz Junior full-stack geliştirici İstanbul denizyilmaz / README.md Merhaba, ben Deniz Sabitlenmiş (en çok 6) mac-notlari TypeScript not-asistani TypeScript takim-api JavaScript ansiklopedi JavaScript kendi-projen TypeScript metin-rpg JavaScript
Şekil 54.2 Profil sayfasının iskeleti: solda kim olduğun, sağ üstte profil README'si, altında sabitlediğin en fazla altı depo. Taslak bir çizim; GitHub'ın gerçek görünümü farklıdır ve zamanla değişir.

Altı yer var; tabloya göre bir öneri: maç notları, not asistanı, takım API'si, ansiklopedi, kendi projen ve metin RPG. İlk sıraya iş ilanlarına en çok benzeyen projeyi koy. Sabitlemediğin depolar silinmez, profilde listenin içinde kalır. Yarım kalmış ya da utandığın denemeleri silmek yerine gizli (Private) yapabilirsin.

Proje README şablonu

Ders 7'de README'yi bir mağaza sayfasına benzetmiştik. Blok projelerinde her seferinde biraz daha zengin README yazdın: Ders 17'de özellikler ve ekran çıktısı, Ders 25'te canlı bağlantı ve ekran görüntüsü, Ders 32'de bir API belgesi. Portföye girecek her proje için bunları tek bir şablonda topla. Şablonun amacı, projeni hiç görmemiş birinin beş dakikada şu üç soruya cevap bulması: Ne yapıyor? Nasıl çalıştırırım? Bunu yazan kişi ne öğrenmiş?

README.md
# Proje Adı Tek cümle: bu proje kimin hangi işini kolaylaştırıyor? **Canlı:** https://proje-adresi · **Kod:** bu depo ![Ana ekran: listede arama kutusu ve kartlar](img/ekran.png) ## Özellikler - Kullanıcının yapabildiği bir şey, fiille başlayarak- Bir başkası- En çok uğraştırdığın özellik ## Teknolojiler Kullandıklarını ve birini neden seçtiğini tek cümleyle yaz. ## Bilgisayarında çalıştır 1. `git clone https://github.com/KULLANICI/proje.git` ve `cd proje`2. `npm install`3. `.env.example` dosyasını `.env` adıyla kopyala ve değerleri doldur4. `npm run dev`, sonra http://localhost:3000 ## Testler ```npm test``` ## Zorluklar ve öğrendiklerim - Karşılaştığın gerçek bir sorun ve nasıl çözdüğün- Şimdi olsa neyi farklı yapardın ## Sırada ne var? - [ ] Planladığın bir özellik- Bilinen sınırlar (ör. ücretsiz barındırıcıda ilk istek yavaş) --- Bu projeyi [Yazılım Öğrenme](https://xdd.baby/ders) kursunun bir blok projesi olarak başlattım; şu özellikleri kendim ekledim: ...

Her bölümün bir görevi var:

  • İlk ekran. README'yi açan kişilerin çoğu yalnız ilk ekranı okur. Tek cümlelik açıklama, canlı bağlantı ve görüntü bu yüzden en üstte. Arayüzü olmayan bir API'de görüntü yerine Ders 32'deki gibi gerçek bir istek ve yanıt koy.
  • Özellikler kullanıcının gözünden yazılır: "Express route'ları yazdım" değil, "takımları ada göre arayabilirsin".
  • Teknolojiler bir liste değil, bir karar: "Veri ilişkili olduğu için JSON dosyasından PostgreSQL'e geçtim" cümlesi, logolarla dolu bir satırdan çok daha fazlasını anlatır.
  • Bilgisayarında çalıştır kopyala-yapıştırla çalışmalı. Tek bir adım eksikse projeyi deneyen kişi orada bırakır. Birazdan bunu deneyeceksin.
  • Testler varsa nasıl çalıştığını yaz; yoksa "Sırada ne var"a ekle.
  • Zorluklar ve öğrendiklerim README'nin en değerli kısmı. Mülakatta projen hakkında en çok buradan soru gelir (Ders 55).
  • Sırada ne var sınırlarını bildiğini gösterir. - [ ] GitHub'da boş bir onay kutusu olarak görünür; işi bitirince dosyada - [x] yaparsın ve kutu işaretli görünür.
  • Son satır kaynağı dürüstçe söyler.

Yabancı gözüyle prova

Ders 32'de yayından önce depoyu temiz bir klasöre klonlayıp denemiştin. Aynı provayı şimdi bir işverenin gözüyle yap: README'yi aç, yalnız orada yazanları sırayla uygula, aklından tek adım ekleme.

Takım API'sinin Ders 38'deki README'sinde kurulumun ikinci adımı şu: ".env dosyası oluştur (aşağıdaki ayarlar)". Sen bu cümleyi anlıyorsun, çünkü dosyayı kendin yazdın. Projeyi ilk kez gören biri ise nasıl oluşturacağını ve DATABASE_URL'i nereden bulacağını bilmez; çoğu zaman bu adımı atlar ve bir sonrakine geçer:

Terminal — PowerShell
PS C:\kod> git clone https://github.com/denizyilmaz/takim-api.git provaCloning into 'prova'...PS C:\kod> cd provaPS C:\kod\prova> npm install added 79 packages, and audited 80 packages in 2s 28 packages are looking for funding  run `npm fund` for details found 0 vulnerabilitiesPS C:\kod\prova> npm run kur > takim-api@1.0.0 kur> node --env-file=.env kur.js node: .env: not found

Hatayı sen tanıyorsun: .env dosyası Git'e girmediği için klonda yok (Ders 29). Ama projeyi deneyen işe alım uzmanı bunu bilmez; onun gözünde proje "çalışmıyor". Düzeltme kodda değil README'de ve bir şablon dosyasında. Kurstaki takım API'sinde Ders 29'daki .env.example şablonu yok; asıl proje klasöründe (C:\kod\takim-api, provada değil) değerleri boş bir şablon oluştur:

.env.example
PORT=3000DATABASE_URL=SALT_OKUNUR=

README'deki ikinci adımı da tarif gibi yaz: "Copy-Item .env.example .env ile şablonu kopyala. Neon'da ücretsiz bir proje aç, bağlantı dizesini DATABASE_URL='in arkasına yapıştır." Commit'le, gönder ve provayı baştan yap. Yeni klonda adım şöyle görünür:

Terminal — PowerShell
PS C:\kod\prova> Copy-Item .env.example .envPS C:\kod\prova> Get-Content .envPORT=3000DATABASE_URL=SALT_OKUNUR=

Prova bitince C:\kod\prova klasörünü sil. Bu provayı sabitlediğin her proje için bir kez yap; bir arkadaşına yaptırabilirsen daha da iyi.

Sık hataREADME'deki resim GitHub'da kırık görünüyor

Ne zaman çıkar? VS Code önizlemesinde ekran görüntüsü görünüyor, GitHub'da ise yerinde yalnız alt metin ya da kırık resim simgesi var. Hata mesajı yok. En sık sebep büyük-küçük harf: Windows Ekran.PNG ile ekran.png'yi aynı dosya sayar, GitHub saymaz. Git'in dosyayı hangi adla sakladığına bak:

Terminal — PowerShell
PS C:\kod\ansiklopedi> git ls-files imgimg/Ekran.PNG

git ls-files img, Git'in img klasöründe takip ettiği dosyaları, depoya girdikleri adla listeler.

README'de img/ekran.png yazıyor ama depoda img/Ekran.PNG var. Başka sebepler: resmi hiç commit'lemedin (git status'ta görünür) ya da yolun başına / ya da C:\... gibi kendi bilgisayarındaki tam yolu yazdın.

Nasıl düzelir? Dosyanın adını Git'e değiştirt. Adı Dosya Gezgini'nde ekran.png yaparsan Git bunu görmez: Windows'taki Git, varsayılan olarak yalnız harf büyüklüğü değişen adları değişiklik saymaz. git status "nothing to commit" der, git ls-files img hâlâ img/Ekran.PNG yazar. git mv ise değişikliği Git'e kendisi bildirir:

Terminal — PowerShell
PS C:\kod\ansiklopedi> git mv img/Ekran.PNG img/ekran.pngPS C:\kod\ansiklopedi> git commit -m "Ekran görüntüsünün adını küçük harfe çevir"[main 885aa8b] Ekran görüntüsünün adını küçük harfe çevir 1 file changed, 0 insertions(+), 0 deletions(-) rename img/{Ekran.PNG => ekran.png} (100%)

Sonra git push. Kural Ders 25'tekiyle aynı: dosya adlarını hep küçük harfle yaz.

Sık hataGeçmişte kalan .env dosyası

Ne zaman çıkar? Portföyünü herkese açmadan önce depolarını tararken. .env'yi bir ara yanlışlıkla commit'leyip sonra silmiş olabilirsin. Dosya bugün depoda yok ama geçmişte duruyor ve herkese açık bir depoda herkes onu okuyabilir:

Terminal — PowerShell
PS C:\kod\mac-kocu> git ls-files .envPS C:\kod\mac-kocu> git log --oneline -- .env87becd1 .env dosyasını depodan çıkarce3c4e9 Araç tanımlarını eklePS C:\kod\mac-kocu> git show ce3c4e9:.envANTHROPIC_API_KEY=sk-ant-ornek

git ls-files .env hiçbir şey yazmadı: Git bugün .env'yi izlemiyor. Ama git log --oneline -- .env bu dosyaya dokunan bütün commit'leri listeler; çıktı boşsa sorun yok. git show kimlik:dosya o commit'teki hâlini gösterir. Örnekteki depo Ders 49'daki maç koçuna benziyor, anahtar ise sahte; seninki gerçek olur.

Nasıl düzelir? Önce anahtarı hemen yenile (Ders 29'daki kural): sızan anahtar geçmişten silinse bile birileri çoktan kopyalamış olabilir. Sonra depoyu temizle. Geçmiş senin için önemli değilse en kolay yol şu: eski depoyu gizli yap ya da sil, dosyaları gizli .git klasörü olmadan yeni bir klasöre kopyala, .gitignore'da .env olduğundan emin ol, git init ile temiz bir geçmiş başlat ve yeni bir depoya gönder. Bir işveren için açıkta bırakılmış bir anahtar, projenin kendisinden daha akılda kalıcıdır.

Junior CV'si: tek sayfa, projeler önde

CV'n (özgeçmiş) başvurunun kapısıdır. Junior bir CV'de en sık yapılan yanlış, deneyimli birinin CV'sini taklit etmek: en üstte uzun bir iş geçmişi, en altta "Projeler" diye küçük bir satır. Senin iş geçmişin yazılım değilse en güçlü malzemen projelerin; onları yukarı al.

Tek sayfa. Junior bir CV'nin ikinci sayfaya taşması için bir sebep yok; okuyan kişi her satırı okumayacak, sen de en iyi satırları seçmek zorunda kalacaksın. İkinci sayfaya taşan tek bir satır bile iki sayfa demektir: önce o satırı kısalt, kenar boşluklarıyla oynama.

Sıralama: iletişim, iki üç satırlık özet, projeler, teknik beceriler, eğitim, deneyim, diller. Yazılım dışında bir işte çalıştıysan onu da yaz: müşteriyle konuşmak, sorumluluk almak, vardiya düzeni de bir şey anlatır; ama kısa tut.

Aday takip sistemleri için sade düzen

Birçok şirket başvuruları bir yazılımda toplar. Bu yazılım CV'ndeki yazıyı çıkarır, alanlara ayırır; işe alım uzmanı da adaylar arasında "React", "PostgreSQL" gibi sözcüklerle arama yapar.

Hangi şirketin hangi sistemi kullandığını ve onun CV'ni nasıl okuduğunu bilemezsin. Bu yüzden en güvenli yol, bir programın da bir insanın da kolay okuyacağı sade bir düzen:

  • Tek sütun. İki sütunlu düzende yazı çıkarılırken sıra karışabilir.
  • Yazı yazı olsun. Beceri çubukları, yıldızlar, ikonlar ve resmin içine gömülmüş yazılar okunmaz. "JavaScript ★★★★☆" yerine "JavaScript" yaz; ne kadar bildiğini projeler göstersin.
  • Standart bölüm başlıkları. "Neler yaptım?" değil "Projeler"; bir program da tanısın.
  • İlandaki sözcükler. İlanda "PostgreSQL" yazıyorsa ve sen PostgreSQL kullandıysan, CV'nde de aynı yazımla geçsin. Kullanmadığın bir teknolojiyi ise asla yazma; mülakatta ilk o sorulur.
  • Metni seçilebilen bir PDF. Taranmış ya da resim olarak kaydedilmiş PDF'te yazı yoktur.
Tek sütun İki sütun, çubuk, tablo DENİZ YILMAZ ÖZET PROJELER BECERİLER EĞİTİM DENİZ Okunan sıra: ad → özet → projeler → beceriler → eğitim Çubuk ve ikon yazı değil, okunmaz; tablo ve sütunlar sırayı bozabilir.
Şekil 54.3 Solda tek sütunlu sade düzen: yazı yukarıdan aşağı, doğru sırayla okunur. Sağda iki sütun, beceri çubukları ve tablo: süs yazı değildir, sıra da karışabilir.

Fotoğraf Türkiye'de sık konur ama şart değil; yurt dışına gönderilen İngilizce CV'lerde çoğu zaman konmaz. Konacaksa sade, yüzünün net göründüğü bir fotoğraf olsun. Kimlik numarası, tam ev adresi gibi bilgileri yazma; şehir yeterli. Dosyanın adı da bir şey söyler: cv-son-son2.pdf değil, Deniz-Yilmaz-CV.pdf.

Bölüm başlıkları: Türkçe ve İngilizce

İngilizce bir ilana İngilizce CV gönderirsin. Yapı aynı kalır, başlıklar değişir:

Türkçeİngilizceİçinde ne var
İletişimContactŞehir, e-posta, telefon, GitHub, LinkedIn
ÖzetSummaryİki üç cümle: ne yapıyorsun, hangi yığınla, ne arıyorsun
ProjelerProjectsÜç proje, her birinde bağlantı ve 2–3 madde
Teknik becerilerTechnical SkillsGruplanmış liste: diller, ön yüz, arka yüz, araçlar
EğitimEducationOkul ve bu kurs gibi eğitimler
DeneyimExperienceVarsa işler, staj, gönüllü çalışma
SertifikalarCertificationsVarsa; yoksa bölümü hiç açma
DillerLanguagesTürkçe (ana dil), İngilizce (düzeyin)

Örnek CV

Aşağıdaki sayfa bir örnektir: kişi hayalî, iletişim bilgileri yer tutucu, köşeli parantezli satırlar senin dolduracağın yerler. HTML ve CSS ile yazdık ve tarayıcının yazdırma motoruyla A4 boyutunda PDF'e çevirdik; tek sayfaya sığdı. HTML ile yazmak istersen C:\kod\cv klasöründe cv.html adında bir dosya aç, bu iskeleti kendi bilgilerinle yaz ve dosyaya çift tıklayarak tarayıcıda aç; betik olmadığı için Live Server gerekmez. Sonra Ctrl+P ile açılan pencerede hedef olarak PDF olarak kaydet'i (Save as PDF) seç. Aynı pencerede Diğer ayarlar (More settings) altındaki Üst bilgiler ve alt bilgiler (Headers and footers) kutusunu kapat; açık kalırsa sayfanın köşelerine tarih ve file:///C:/kod/... gibi dosya yolun basılır. Aynı düzeni Word ya da Google Dokümanlar'da da kurabilirsin; önemli olan sonuç.

file:///C:/kod/cv/cv.html

Bu sayfayı PDF'e çevirip bir programla içindeki yazıyı çıkardığımızda yazı, sayfadaki sırayla geldi: ad, unvan, iletişim, özet, projeler. Sen de kendi PDF'ini denetle: PDF'i aç, Ctrl+A ile her şeyi seç, kopyala ve Not Defteri'ne (Notepad) yapıştır. Yazı geliyorsa ve sırası mantıklıysa iyi; hiç yazı gelmiyorsa ya da satırlar birbirine karışıyorsa düzeni sadeleştir.

Proje maddesi nasıl yazılır?

CV'nin en çok okunan satırları proje maddeleridir. Her madde ne yaptın + nasıl + sonucu sorularına cevap versin ve bir fiille başlasın. Sayı varsa gerçek sayıyı yaz; uydurma ya da yuvarlanmış "%300 hızlandırdım" gibi ölçülmemiş iddialar mülakatta geri döner.

Metin✗ Yanlış
Takım API'si- Node.js kullandım- Veritabanı bağladım- Çok şey öğrendim
Metin✓ Doğru
Takım API'siExpress, PostgreSQL · canlı · kod- 10 uç noktalı REST API yazdım- Takım kurmayı tek transaction'a  topladım- Veritabanı hatalarını 400 ve  409 kodlarına çevirdim

Soldaki maddeler herkes için doğru olabilir; sağdakiler yalnız bu projeyi yazan biri için doğrudur. Fark bu.

Sık hataPDF'ten yazı kopyalanamıyor

Ne zaman çıkar? CV'ni bir tasarım uygulamasında ya da telefonda bir fotoğraf olarak hazırlayıp PDF'e çevirdiysen. PDF'i açınca güzel görünür ama Ctrl+A hiçbir şey seçmez ya da Not Defteri'ne boş yapıştırır. Bu PDF'in içinde yazı değil, yazının resmi vardır; ne aday takip sistemi ne de ekran okuyucu onu okuyabilir. Bağlantılar da tıklanmaz.

Nasıl düzelir? CV'ni bir yazı belgesinde (Word, Google Dokümanlar, HTML) yaz ve oradan PDF olarak kaydet ya da dışa aktar seçeneğiyle PDF'e çevir. Sonra kopyala-yapıştır denemesini ve bağlantılara tıklamayı tekrarla.

LinkedIn profili

LinkedIn hem işe alım uzmanlarının aday aradığı hem de ilanların yayımlandığı bir site. Profilin bir bakıma herkese açık CV'ndir; ama CV'nin aksine orada kalır ve sen başvurmasan da bulunabilirsin.

  1. Fotoğraf: yüzünün net göründüğü sade bir fotoğraf. Oyun avatarı değil.
  2. Başlık (Headline): adının altındaki satır. "İş arıyorum" yerine ne olduğunu ve yığınını yaz: Junior Full-Stack Developer | TypeScript · React · Next.js · Node.js · PostgreSQL.
  3. Hakkında (About): üç kısa paragraf. Kimsin ve ne yapıyorsun; hangi projeleri yaptın (en iyi ikisi bir cümleyle); ne tür bir iş arıyorsun ve sana nasıl ulaşılır.
  4. Öne çıkanlar (Featured) ve Projeler (Projects): profilinde Add profile section düğmesine bas; Recommended altında ikisi de var. Öne çıkanlara canlı projelerinin ve GitHub profilinin bağlantılarını ekle; Projeler bölümüne CV'ndeki üç projeyi kısa açıklamalarıyla yaz.
  5. Yetenekler (Skills): CV'ndeki teknik becerilerle aynı liste. Kullanmadığın bir şeyi ekleme.
  6. Özel adres: profilinin sağındaki Public profile & URL bölümünde Edit your custom URL ile adresini linkedin.com/in/deniz-yilmaz gibi sade bir hâle getir. LinkedIn'in yardım sayfasına göre adres 3–100 karakter olur; boşluk, simge, özel karakter ve "LinkedIn" sözcüğünü içeremez; altı ay içinde en çok beş kez değiştirilebilir. Bu adresi CV'ne yaz.
  7. İş aradığını söyle: profilindeki Open to düğmesinden Finding a new job'ı seç, istediğin pozisyonları ve şehirleri gir. Görünürlük seçenekleri: All LinkedIn Members herkese gösterir ve fotoğrafına #OpenToWork çerçevesi ekler; Recruiters only yalnız işe alım uzmanlarının kullandığı LinkedIn Recruiter aracında görünür, çerçeve eklemez; Visible only to you kimseye göstermez, yalnız sana önerilen ilanları ayarlar. Henüz bir işte çalışmıyorsan ilk seçenek seni daha görünür yapar.

İngilizce ilanlara da başvuracaksan profilini ikinci bir dilde de yazabilirsin. LinkedIn'in yardım sayfasına göre ikinci dil profili masaüstünden açılır ve LinkedIn senin yerine çeviri yapmaz: başlığı, "Hakkında"yı ve proje açıklamalarını kendin yazarsın. Profili bir kez kurup bırakma. Bir projeye yeni bir özellik eklediğinde, bir hatayı nasıl bulduğunu anlatan birkaç paragraf paylaş. Bu, "sürekli öğrenme"nin herkese açık kanıtıdır ve ağındaki insanlar seni hatırlar.

İş ilanı okumak: gereklilik mi, artı mı?

Junior ilanlarının çoğu ilk okumada korkutucudur: sekiz teknoloji, "deneyim", bir sürü sıfat. Ama bir ilanın her satırı aynı ağırlıkta değil. İlanları iki kümeye ayırarak oku:

  • Gereklilik (requirements): "Aranan nitelikler", "Requirements", "Must have". İşi yapmak için gerçekten gereken şeyler.
  • Artı (nice to have): "Tercih sebebi", "Nice to have", "Bonus", "Preferred", "is a plus". Olursa güzel olur ama şart değil.

Aşağıdaki ilanlar bu ders için yazılmış örnek ilanlardır; şirketler ve ilanlar hayalîdir.

Örnek ilan A (hayalî)
Junior Full-Stack Geliştirici · Şirket A · İstanbul · hibrit Aranan nitelikler- JavaScript ve TypeScript ile çalışmış olmak- React ile arayüz geliştirme deneyimi- Node.js ile REST API yazmış olmak- SQL ile temel sorgular (tercihen PostgreSQL)- Git ile ekip içinde çalışma (dal, pull request)- İngilizce teknik belgeleri okuyabilmek Tercih sebebi- Next.js deneyimi- Test yazma alışkanlığı- Docker bilgisi- Bilgisayar mühendisliği ya da ilgili bir bölümden mezun olmak

Bir ilanı okumanın yolu, her satırın yanına "bunu hangi projemle kanıtlarım?" sorusunun cevabını yazmak:

Örnek ilan A (hayalî) Junior Full-Stack Geliştirici ARANAN NİTELİKLER (gereklilik) ✓JavaScript ve TypeScript ✓React ile arayüz geliştirme ✓Node.js ile REST API ✓SQL (tercihen PostgreSQL) ✓Git ile ekip çalışması (PR) ~İngilizce teknik belge okumak TERCİH SEBEBİ (artı) ✓Next.js ✓Test yazma alışkanlığı ✗Docker ✗Bilgisayar müh. mezunu projeyle kanıtlı kısmen yok Gereklilik: 5 tam, 1 kısmen Artı: 4'te 2 Karar: başvur Artılar şart değil. Kısmen olanı ön yazıda dürüstçe söyle.
Şekil 54.4 Örnek ilan A, satır satır işaretlendi: yeşil projeyle kanıtlı, sarı kısmen, kırmızı yok. Kırmızılar yalnız artılarda; karar başvurmak.

Kural basit: gerekliliklerin çoğunu projelerinle kanıtlayabiliyorsan başvur. Artıların hiçbiri şart değildir; "tercih sebebi" diye yazılmış bir bölüm mezuniyeti seni elemez. Gerekliliklerin yarısından azını karşılıyorsan önce eksiği kapatmayı ya da sana daha uygun bir ilana bakmayı düşün.

Türkiye'deki yazılım ilanlarının bir kısmı da İngilizce yazılır; yurt dışındaki şirketlerinkiler zaten öyle. Aynı yöntem orada da işler; yalnız birkaç kalıbı tanıman gerekir:

Örnek ilan B (hayalî)
Junior Frontend Developer · Company B · Remote (Türkiye) Requirements- 0–2 years of experience with React- Solid understanding of HTML, CSS and JavaScript- Familiarity with REST APIs- Good command of written English Nice to have- Experience with Tailwind CSS- Basic knowledge of web accessibility- A portfolio of personal projects Responsibilities- Build and maintain UI components- Collaborate with designers and backend developers- Take part in code reviews
İlandaki ifadeNe demekSenin için
0–2 years of experience0 ile 2 yıl arası deneyim0 da dahil: yeni başlayanı kabul ediyor
Solid understanding ofsağlam bir kavrayışgereklilik; projelerinle kanıtla
Familiarity withtanışıklık, kullanmış olmakuzmanlık istemiyor; fetch ile API kullandın
Good command of written Englishyazılı İngilizcesi iyiyazışmalar ve belgeler İngilizce olacak
Nice to haveolsa iyi olurartılar: Tailwind (Ders 45), erişilebilirlik, portföy
Responsibilitiessorumluluklaryapacağın işler; şart listesi değil
Take part in code reviewskod incelemelerine katılmakDers 52'deki pull request incelemesi

İlanın ilk satırlarına da bak: Remote uzaktan, hybrid haftanın bazı günleri ofiste, on-site her gün ofiste demek. Şehir ve çalışma biçimi sana uymuyorsa geri kalanı okumana gerek yok.

Dikkat edilecek işaretler

Her ilan iyi niyetli değildir ve her iyi niyetli ilan sana uygun değildir. Şunları gördüğünde dur:

  • Senden para isteniyor. Başvuru, "eğitim", "sertifika" ya da ekipman için ödeme isteyen bir işveren, işveren değildir. Başvurma.
  • Kişisel bilgiler çok erken isteniyor. Görüşmeden önce kimlik fotokopisi, banka bilgisi ya da şifre istenmez.
  • "Deneme" adı altında ücretsiz iş. Kısa bir ev ödevi olağandır (Ders 55); şirketin gerçek bir müşteri işini haftalarca ücretsiz yaptırmak değildir.
  • Junior başlığı, senior beklentisi. "Junior" yazıp 5 yıl deneyim, on teknoloji ve ekip yönetimi isteyen ilan ya ne istediğini bilmiyordur ya da düşük ücretle deneyimli birini arıyordur. Başvurmak serbest, beklentini buna göre ayarla.

Maaş için burada rakam vermiyoruz: şehir, şirket, çalışma biçimi ve yıla göre çok değişir ve rakamlar hızla eskir. Bir rakama bakacaksan kaynağının ve tarihinin belli olduğu güncel bir maaş araştırmasına bak.

Başvuru takibi

İş aramak bir sayı oyunudur: birçok yere başvurursun, bazılarından dönüş gelir, birkaçında görüşmeye çağrılırsın. On beşinci başvuruda hangi şirkete ne zaman yazdığını, kiminle konuştuğunu ve neyi beklediğini aklında tutamazsın.

Bir tablo programında (Excel, Google E-Tablolar) şu sütunlarla bir sayfa aç:

SütunNe yazılırÖrnek
TarihBaşvuru günü2026-10-05
ŞirketŞirketin adıŞirket C
Pozisyonİlandaki unvanStajyer Yazılımcı
Bağlantıİlanın adresi (ilanlar kalkar; metnini de bir yere kopyala)…
KanalNereden başvurdunLinkedIn, şirketin sitesi, tanıdık önerisi
Durumgönderildi, ön görüşme, teknik görüşme, teklif, retgönderildi
Sonraki adımNe yapacaksın, ne zaman12 Ekim'de dönüş yazısı
NotlarKiminle konuştun, ne sordular, hangi CV'yi gönderdinİnsan kaynaklarından biri aradı

Tarihleri 2026-10-05 biçiminde yaz; tablo programı da, birazdan yazacağın betik de bu biçimi doğru sıralar.

Küçük bir takip betiği

Yazılımcı olmanın bir avantajı: tabloya bakıp "kime dönüş yazmam gerekiyor?" diye düşünmek yerine bunu bir programa sorabilirsin. C:\kod\ogren klasöründe takip.js adında bir dosya aç. Veriyi şimdilik dosyanın içinde bir dizi olarak tut:

takip.js
const bugun = new Date("2026-10-12")const birGun = 24 * 60 * 60 * 1000 const basvurular = [    { sirket: "Şirket A", pozisyon: "Junior Full-Stack Geliştirici", tarih: "2026-09-28", durum: "gönderildi" },    { sirket: "Şirket B", pozisyon: "Junior Frontend Geliştirici", tarih: "2026-10-02", durum: "ön görüşme" },    { sirket: "Şirket C", pozisyon: "Stajyer Yazılımcı", tarih: "2026-10-05", durum: "gönderildi" },    { sirket: "Şirket D", pozisyon: "Junior Backend Geliştirici", tarih: "2026-10-09", durum: "gönderildi" },    { sirket: "Şirket E", pozisyon: "Yazılım Geliştirici", tarih: "2026-09-20", durum: "ret" }] function gecenGun(tarih) {    return Math.floor((bugun - new Date(tarih)) / birGun)} const donulecekler = basvurular.filter((b) => b.durum === "gönderildi" && gecenGun(b.tarih) >= 7) console.log(`Toplam başvuru: ${basvurular.length}`)console.log("Dönüş yapılacaklar:")for (const b of donulecekler) {    console.log(`- ${b.sirket} (${b.pozisyon}): ${gecenGun(b.tarih)} gün oldu`)}
Çıktı
Toplam başvuru: 5Dönüş yapılacaklar:- Şirket A (Junior Full-Stack Geliştirici): 14 gün oldu- Şirket C (Stajyer Yazılımcı): 7 gün oldu

Yeni olan tek şey tarih hesabı. Ders 17'de new Date() ile şu anki zamanı almıştın; parantezin içine "2026-09-28" gibi bir metin yazınca new Date o tarihi tutan bir tarih objesi üretir. İki tarih objesini birbirinden çıkarınca aradaki fark milisaniye olarak gelir; Ders 28'de Date.now() farkıyla süre ölçerken gördüğün gibi. Bir günün milisaniyesine (birGun) bölüp Math.floor ile aşağı yuvarlayınca geçen gün sayısı çıkar.

bugun'ü sabit bir tarih yaptık ki çıktı her gün aynı olsun ve sınırı deneyebilelim. Şirket C'nin üzerinden tam 7 gün geçmiş ve listede: koşul >= 7. > 7 yazsaydın 7. günü kaçırırdın. Şirket D 3 gündür bekliyor, listede değil; Şirket B'nin durumu "gönderildi" değil, o da listede yok. Gerçek kullanımda ilk satırı const bugun = new Date() yap: parantez boşsa şu anı verir.

Yedi gün bir kanun değil, kendine koyduğun bir kural. Bir süre ses çıkmayınca kısa ve kibar bir dönüş yazısı göndermek olağandır: "Geçen hafta Junior Full-Stack Geliştirici ilanınıza başvurdum; süreçle ilgili bir gelişme var mı diye sormak istedim." Bir kez yaz, cevap gelmezse ısrar etme ve tabloya not düş.

Sık hataTürkçe tarih biçimi: Invalid Date

Ne zaman çıkar? Tarihi alışkın olduğun gibi 28.09.2026 diye yazınca. JavaScript bu biçimi tanımaz; hata da vermez. Daha kötüsü, bazen yanlış tanır:

tarih.js
const bugun = new Date("2026-10-12")const birGun = 24 * 60 * 60 * 1000const tarihler = ["2026-09-28", "28.09.2026", "05.10.2026"] for (const tarih of tarihler) {    const okunan = new Date(tarih)    const gun = Math.floor((bugun - okunan) / birGun)    console.log(tarih, "->", okunan.toLocaleDateString("tr-TR"), "->", gun, "gün")}
Çıktı
2026-09-28 -> 28.09.2026 -> 14 gün28.09.2026 -> Invalid Date -> NaN gün05.10.2026 -> 10.05.2026 -> 155 gün

28.09.2026 geçersiz bir tarih (Invalid Date) oldu ve gün farkı NaN çıktı (Ders 9). NaN >= 7 yanlış olduğu için o başvuru takip listesinden sessizce düşer. 05.10.2026 ise ay önde sanılıp 10 Mayıs olarak okundu: 5 Ekim'deki başvuru 155 günlük görünür.

Nasıl düzelir? Tarihleri her yerde yıl-ay-gün biçiminde yaz: 2026-10-05. Dışarıdan gelen bir tarihi denetlemek için tarih objesinin getTime() metodunu kullan: tarihin milisaniye değerini verir, geçersiz tarihte ise NaN. Yani Number.isNaN(okunan.getTime()) geçersiz tarihte true olur.

Ön yazı

Bazı başvuru formları bir ön yazı ister, bazılarında "eklemek istediğin bir not" kutusu vardır, e-postayla başvururken ise e-postanın kendisi ön yazıdır. Uzun olması gerekmez; işi, CV'ni neden okumaları gerektiğini bu ilana özel olarak söylemektir.

Üç paragraf yeter, toplamda 120–200 sözcük:

  1. Neden bu ilan? İlanı nerede gördüğün ve ilandaki hangi şeyin sana uyduğu. İlanın kendi sözcüklerini kullan.
  2. Kanıt. İlandaki iki gerekliliği iki projenle eşleştir; bağlantılarıyla.
  3. Dürüst bir eksik ve kapanış. Kısmen karşıladığın bir şeyi saklamadan söyle, ne yaptığını ekle; sonra görüşmeye hazır olduğunu yaz.

Örnek ilan A için bir örnek:

Ön yazı örneği (hayalî kişi ve şirket)
Konu: Junior Full-Stack Geliştirici başvurusu – Deniz Yılmaz Merhaba, Şirket A'nın Junior Full-Stack Geliştirici ilanını LinkedIn'de gördüm. İlanda React, Node.js ve PostgreSQL ile uçtan uca çalışacak birini aradığınızı yazmışsınız; son projelerimi tam olarak bu yığınla yazıp yayına aldım. En yakın örnek Maç Notları: Next.js ve TypeScript ile yazdığım, Discord ile girişli, herkesin yalnız kendi verisini gördüğü bir uygulama (canlı: ..., kod: github.com/denizyilmaz/mac-notlari). Takım API'sinde Express ve PostgreSQL ile 10 uç noktalı bir REST API yazdım; sayfalama ve transaction gerektiren işlemleri orada öğrendim. Kodumu dallar ve pull request'lerle yönetiyor, her push'ta testleri GitHub Actions ile çalıştırıyorum. İngilizce teknik belgeleri okuyorum ama konuşma pratiğim az; bunun için her gün İngilizce belge okuyup README'lerimi İngilizce yazıyorum. Uygun olduğunuz bir zamanda projelerimi anlatmaktan memnuniyet duyarım. Deniz Yılmazgithub.com/denizyilmaz · deniz@example.com

Ön yazıda maaş konusunu açma; sorulursa görüşmede konuşulur. "Çok çalışkanım, öğrenmeye çok hevesliyim" gibi herkesin yazabileceği cümleleri de at: yerine bunu gösteren bir şey yaz.

Sık hataÖn yazıda başka şirketin adı kalmış

Ne zaman çıkar? Bir önceki başvurunun ön yazısını kopyalayıp yeni ilana uyarlarken. Şirket B'ye giden mektupta "Şirket A'nın ilanını gördüm" yazar ya da ilanda hiç geçmeyen bir teknolojiden bahsedersin. Okuyan kişi bunu ilk satırda fark eder ve başvurunun geri kalanını özensiz sayar.

Nasıl düzelir? Kopyaladığın şablonda değişecek yerleri [ŞİRKET], [POZİSYON], [İLANDAKİ ŞART] gibi büyük harfli yer tutucularla bırak. Göndermeden önce metinde Ctrl+F ile [ ara: tek bir yer tutucu kalmamalı. Sonra şirket adını bir kez daha ilanla karşılaştır ve metni sesli oku.

Teknik İngilizce: sık sözcükler

İlanlar, belgeler, hata mesajları ve iş yerindeki araçlar İngilizce sözcüklerle dolu. Aşağıdakiler ilanlarda ve işin ilk haftalarında en sık göreceklerin. Okunuşları Türkçe harflerle yazıldı; tam karşılık değil, kulağına yakın bir tarif.

SözcükOkunuşuAnlamıNerede
requirementrikuayırmıntgereklilik, aranan şartilan
nice to havenays tu hevolsa iyi olur (artı)ilan
responsibilitiesrispansıbılıtizsorumluluklarilan
experienceikspiriyınsdeneyimilan, CV
familiarityfımiliyerititanışıklık, kullanmış olmakilan
proficiencyprıfişınsiyetkinlikilan, CV
hands-onhendz onuygulamalı, elle yapılmışilan
entry-levelentri levılgiriş seviyesiilan
internshipintörnşipstajilan
degreedıgriüniversite diplomasıilan
full-time / part-timeful taym / part taymtam / yarı zamanlıilan
remote / hybrid / on-siterimout / haybrid / on saytuzaktan / karma / ofisteilan
salaryselerimaaşilan, görüşme
benefitsbenıfitsyan haklarilan
stackstekkullanılan teknolojilerin bütünüilan, iş
frameworkfreymvörkçatı (Next.js, Express gibi)ilan, iş
maintainmeynteynbakımını yapmak, sürdürmekilan
featurefiiçırözellikiş
bug / fixbag / fikshata / düzeltmeiş
issueişukayda geçmiş iş ya da sorunGitHub, iş
code reviewkoud rivyukod incelemesiiş
mergemörcbirleştirmekGit, iş
deadlinededlaynson teslim tarihiiş
stand-upstend apkısa günlük ekip toplantısıiş
onboardingonbordingişe alışma süreciiş
cover letterkavır letırön yazıbaşvuru
résumé / CVrezume / si viözgeçmişbaşvuru

Sözcük listesi ezberlemekten daha etkili olanı, bu sözcükleri her gün görmek: hata mesajlarını çevirmeden önce bir kez İngilizce oku, belgeyi önce İngilizcesinden aç, bir projenin README'sini İngilizce yaz. İlanlarda tekrar eden birkaç kalıp da var: we are looking for (arıyoruz), you will (yapacakların), is a plus (artıdır), must have (şart).

Görevler

Bu dersin görevleri kod değil, gerçek başvuru dosyanın parçaları. Her birinin sonunda elinde kullanılabilir bir şey olacak. Son görev yine kod: takip betiğini geliştireceksin.

Görev 1

Profil README'ni yayınla

Kendi profil README'ni yaz ve yayınla. Şunları içersin: tek cümlelik tanıtım (ne yapıyorsun, hangi yığınla), "şu an" ve "aradığım" satırları, en az iki projenin bağlantısı, bir iletişim yolu. Bir ekranı geçmesin.

Denetim: profil sayfanı gizli pencerede aç. README en üstte görünüyor mu, bütün bağlantılar çalışıyor mu?

İpucu 1

Depo adı kullanıcı adınla birebir aynı ve depo herkese açık olmalı. Kullanıcı adını sağ üstteki profil menüsünden ya da adres çubuğundan kopyala; elle yazma.

İpucu 2

En kolay yol: depoyu Add README açık olarak oluştur ve Edit README ile tarayıcıda düzenle. VS Code'da yazacaksan git init değil git clone kullan.

Çözümü göster

Herkesin profil README'si farklıdır; bu derste VS Code penceresinde gördüğün örnek bir ölçü. Kendi README'ni şu listeyle denetle:

  • Depo kullaniciadin/kullaniciadin, herkese açık, README.md ana klasörde.
  • İlk satır bir başlık; altındaki cümlede hangi işi aradığın ve yığının var.
  • Her bağlantıya gizli pencerede tıkladın: hepsi açılıyor, hiçbiri gizli bir depoya gitmiyor (gizli bir depoya giden bağlantı ziyaretçiye 404 gösterir).
  • Yazım hatası yok; Türkçe ve İngilizce karışık değil.

Sınır denemesi: depoyu Settings sayfasından geçici olarak gizli yap ve profilini yenile; README kaybolur. Yeniden herkese açık yap; geri gelir. Böylece görünürlük şartını kendin görmüş olursun.

Görev 2

Altı depoyu sabitle ve vitrinlerini doldur

Profilinde altı depo sabitle. Her biri için About bölümünde tek cümlelik bir açıklama, varsa canlı bağlantı (Website) ve 3–6 konu etiketi (Topics) yaz. Sıralamayı iş ilanlarına en yakın projeden başlat.

İpucu 1

Sabitleme: profil sayfası → Customize your pins. Açıklama ve etiketler: deponun ana sayfasında About'un yanındaki dişli simgesi.

İpucu 2

Etiketlerde yalnız küçük harf, rakam ve tire kullanılabilir: nextjs, typescript, postgresql, rest-api. Açıklamaya ders numarası değil, projenin ne yaptığını yaz.

Çözümü göster

Bir örnek (depo adları ve açıklamalar temsilî):

SıraDepoAçıklamaKonular
1mac-notlariDiscord ile girişli, herkesin yalnız kendi maç notlarını gördüğü ve notlarına soru sorabildiği tam yığın uygulamanextjs, typescript, postgresql, rag
2not-asistaniNotlardan kaynak göstererek cevaplayan asistan; aramanın isabetini bir soru kümesiyle ölçerrag, pgvector, llm, typescript
3takim-apiTakım ve şampiyon yöneten REST API (Express, PostgreSQL)nodejs, express, postgresql, rest-api
4ansiklopediŞampiyonları arayan, role göre süzen ve favorileyen web uygulamasıjavascript, html, css, github-pages
5kendi projenKendi fikrin; ne çözdüğünü bir cümleyle yazyığınına göre
6metin-rpgTerminalde oynanan, ilerlemeyi dosyaya kaydeden rol yapma oyununodejs, javascript, cli-game

Sınır denemeleri: yedinci bir depoyu seçmeye çalış; GitHub altıdan fazlasına izin vermez, birini bırakman gerekir. Kurala uymayan bir etiket yazmayı da dene (Next.js: büyük harf ve nokta var) ve GitHub'ın ne yaptığına bak; sonra etiketi kurala uygun nextjs biçiminde kaydet.

Görev 3

Bir README'yi şablona göre yeniden yaz ve prova et

Şampiyon ansiklopedisinin (Ders 25) README'sini bu dersteki şablona göre yeniden yaz. Sonra yabancı gözüyle prova et: depoyu C:\kod\prova-ansiklopedi klasörüne klonla ve yalnız README'de yazanları yaparak projeyi çalıştır. Bir adımda takılırsan kodu değil, README'yi düzelt; provayı baştan yap.

İpucu 1

Ansiklopedinin elinde zaten canlı bağlantı, ekran görüntüsü, özellikler ve "Neler öğrendim?" var. Eksikler: tek cümlelik "ne işe yarar", teknoloji seçiminin nedeni, zorluklar, sırada ne var ve kaynağın dürüst bir anlatımı.

İpucu 2

Statik bir site olduğu için npm install adımı yok; çalıştırma adımı npx serve ya da Live Server. Provada README'deki her komutu kopyalamadan, elle yaz: yazım hatası yapacağın yer, başkasının da takılacağı yerdir.

Çözümü göster
README.md
# Şampiyon Ansiklopedisi League of Legends şampiyonlarını tek sayfada arayıp role göre süzmeni ve favorilerini saklamanı sağlayan bir web uygulaması. **Canlı:** https://KULLANICI.github.io/ansiklopedi/ ![Liste görünümü: arama kutusu, rol filtresi ve şampiyon kartları](img/ekran.png) ## Özellikler - Ada ya da unvana göre ara (Türkçe I ve ı harfleri doğru eşleşir)- Role göre süz, yalnız favorileri göster- Bir şampiyonun ayrıntısını kendi adresinde aç: `?id=Ahri`- Telefonda ve yalnız klavyeyle kullan ## Teknolojiler HTML, CSS (grid, flexbox) ve tarayıcıda ES modülleri; kütüphane yok. Veri Riot Games'in herkese açık Data Dragon servisinden gelir. Kütüphane kullanmadım, çünkü bu projede DOM'u kendim yönetmeyi öğrenmek istedim. ## Bilgisayarında çalıştır 1. `git clone https://github.com/KULLANICI/ansiklopedi.git` ve `cd ansiklopedi`2. `npx serve` (ya da VS Code'da Live Server)3. Terminalin yazdığı adresi tarayıcıda aç `index.html`'e çift tıklayarak açma: ES modülleri `file://` adresinde çalışmaz. ## Zorluklar ve öğrendiklerim - Aramada `irelia` yazınca Irelia bulunmuyordu; İngilizce kurala geçince de `İmparator` bozuldu. İki tarafı da `toLocaleLowerCase("tr")` ile küçültüp `ı`'yı `i`'ye çevirerek çözdüm.- Favoriler sayfa yenilenince kayboluyordu; `localStorage`'a JSON olarak yazıp açılışta okudum.- Bilgisayarımda çalışan bir dosya yolu GitHub Pages'te 404 verdi: büyük-küçük harf farkı. O günden beri dosya adlarını küçük harfle yazıyorum. ## Sırada ne var? - [ ] Şampiyonları zorluk derecesine göre sıralamak- [ ] Arama ve filtre fonksiyonları için birim testleri- Veriler her açılışta Data Dragon'dan gelir; internet bağlantısı yoksa liste açılmaz. --- Bu projeyi [Yazılım Öğrenme](https://xdd.baby/ders) kursunun 3. blok projesi olarak yazdım; zorluk sıralaması ve testler benim eklemelerim olacak. Şampiyon Ansiklopedisi was created under Riot Games' "Legal Jibber Jabber" policy using assets owned by Riot Games. Riot Games does not endorse or sponsor this project.

"Zorluklar" bölümündeki maddeler örnek; sen kendi yaşadığın sorunları yaz. Uydurma bir zorluk mülakatta ilk soruda dağılır.

Prova denetimi:

  • git clone sonrası npx serve çalıştı ve sayfa açıldı: kartlar geliyor, ekran görüntüsü README'de görünüyor.
  • Canlı bağlantıyı gizli pencerede açtın; giriş yapmamış biri de görebiliyor.
  • Sınır denemesi: index.html'e çift tıklayarak açmayı dene; README'nin uyardığı gibi kartlar gelmemeli. README bu uyarıyı içermeseydi ziyaretçi projeyi bozuk sanardı.
Görev 4

Tek sayfalık CV'ni ve LinkedIn profilini hazırla

Bu dersteki örnek CV'nin düzeniyle kendi CV'ni yaz: iletişim, özet, üç proje (her birinde 2–3 madde), teknik beceriler, eğitim, varsa deneyim, diller. PDF olarak kaydet. Sonra İngilizce ilanlar için aynı CV'nin İngilizcesini hazırla. En son LinkedIn'de başlığı, Hakkında'yı, Öne çıkanlar'ı ve özel adresini CV'ndeki bilgilerle doldur; özel adresi CV'nin iletişim satırına yaz.

Denetimler: PDF tam olarak bir sayfa; Ctrl+A ile kopyalayıp Not Defteri'ne yapıştırınca yazı doğru sırayla geliyor; PDF'teki her bağlantıya tıklayınca doğru sayfa açılıyor; dosya adı Ad-Soyad-CV.pdf. LinkedIn profilini gizli pencerede aç: başlığın ve CV'ndeki projeler görünüyor, CV'deki LinkedIn adresi bu sayfaya gidiyor.

İpucu 1

Proje maddelerini "ne yaptın + nasıl + sonucu" kalıbıyla, bir fiille başlayarak yaz. Kullanmadığın hiçbir teknolojiyi beceriler listesine koyma.

İpucu 2

İkinci sayfaya bir satır taştıysa yazıyı küçültme; en zayıf maddeyi sil. İngilizce sürümde bölüm başlıkları için bu dersteki tabloyu kullan.

Çözümü göster

Türkçe CV'nin ölçüsü, dersteki örnek sayfa. Aynı hayalî kişinin İngilizce CV'si şöyle olabilir:

Deniz-Yilmaz-CV-EN (örnek, hayalî kişi)
DENIZ YILMAZJunior Full-Stack DeveloperIstanbul, Türkiye · deniz@example.com · github.com/denizyilmaz · linkedin.com/in/deniz-yilmaz-ornek SUMMARYJunior full-stack developer building end-to-end web apps with TypeScript, React,Next.js, Node.js and PostgreSQL. Built seven projects and deployed three; thelatest connects a language model to my own data and answers with sources (RAG).Comfortable with branches, pull requests and automated tests. PROJECTSMatch Notes · Next.js, TypeScript, PostgreSQL · live · code- Built Discord sign-in; each user sees only their own notes, enforced on the server- Implemented create, edit and delete with Server Actions; validated input with zod- Added an "Ask your notes" page that answers with sources; deployed on Vercel Notes Assistant · Node.js, TypeScript, PostgreSQL (pgvector) · code- Built an assistant that finds relevant note chunks with full-text and vector  search, then answers with numbered sources (RAG)- Wrote a script that measures search accuracy on a set of known questions Team API · Express, PostgreSQL, Render · live · code- Built a REST API with 10 endpoints: parameterized queries, pagination, search- Mapped database errors to meaningful HTTP codes (400, 409) TECHNICAL SKILLSLanguages: JavaScript, TypeScript, SQLFrontend: React, Next.js, HTML, CSS, Tailwind CSSBackend: Node.js, Express, PostgreSQLTools: Git, GitHub Actions, Vercel, RenderAI: LLM APIs, tool use, RAG EDUCATIONYazılım Öğrenme course (xdd.baby/ders) · 56 lessons, 7 projects · 2026[School] · [Department] · [Graduation year] LANGUAGESTurkish (native) · English (intermediate; reads technical documentation daily)

Kurum ve kurs adları gibi özel adları çevirme. Maddelerde Türkçedeki "yaptım" yerine İngilizcede özne yazmadan geçmiş zamanla başlamak yaygındır: Built, Implemented, Added. Bir CV'nin içinde hep aynı kalıbı kullan. Dil düzeyini abartma; görüşmede İngilizce bir soru gelebilir.

LinkedIn için aynı kişinin başlığı ve Hakkında'sının ilk paragrafı şöyle olabilir:

LinkedIn (örnek, hayalî kişi)
Junior Full-Stack Developer | TypeScript · React · Next.js · Node.js · PostgreSQL TypeScript, React, Next.js ve PostgreSQL ile uçtan uca web uygulamalarıyazıyorum. En sevdiğim projem Maç Notları: Discord ile girişli, herkesin yalnızkendi notlarını gördüğü ve notlarına soru sorabildiği bir uygulama.

Sınır denemesi: CV'ne bir madde daha ekle ve PDF'e çevir. Sayfa ikiye çıkıyorsa o madde girmez; en zayıf maddeyle yer değiştir. LinkedIn özel adresinde de sınır var: kurala göre boşluk ve simge olmamalı, en az 3 karakter olmalı. deniz yilmaz ya da dy değil, deniz-yilmaz gibi harf ve tireyle yaz; adres alınmışsa sonuna bir rakam ekle.

Görev 5

İlanı oku, karar ver, ön yazıyı yaz

Aşağıdaki örnek ilanı oku. Her satırı gereklilik ya da artı diye ayır, yanına hangi projenle kanıtlayabileceğini ve durumunu (var, kısmen, yok) yaz. Sonra başvurup başvurmayacağına karar ver ve başvuracaksan 120–200 sözcüklük bir ön yazı yaz.

Örnek ilan C (hayalî)
Junior Backend Geliştirici · Şirket C · Ankara · ofiste Aranan nitelikler- Node.js ile en az 1 yıl profesyonel deneyim- PostgreSQL ya da başka bir ilişkisel veritabanı- REST API tasarımı ve HTTP durum kodları- Git ve kod incelemesi süreçleri- Linux komut satırına aşinalık Tercih sebebi- TypeScript- Docker- Bir bulut sağlayıcısında (AWS, Azure ya da GCP) deneyim- Birim testi yazmış olmak
İpucu 1

"Aranan nitelikler" gereklilik, "Tercih sebebi" artı. En zor satır ilk satır: "profesyonel" deneyimin yok ama Node.js ile yazdığın projeler var.

İpucu 2

Ön yazının üç paragrafı: neden bu ilan, iki gerekliliği iki projeyle eşleştiren kanıt, dürüst bir eksik ve kapanış. Yıl şartını görmezden gelme; projelerinle nasıl karşıladığını söyle.

Çözümü göster
SatırTürKanıtDurum
Node.js ile 1 yıl profesyonel deneyimgereklilikProfesyonel yok; takım API'si, metin RPG ve not asistanı Node.js ilekısmen
PostgreSQLgereklilikTakım API'si (Ders 38)var
REST API ve durum kodlarıgereklilikTakım API'sinin README'sindeki uç nokta ve hata tablolarıvar
Git ve kod incelemesigereklilikDallar ve pull request'ler (Ders 52)var
Linux komut satırıgereklilikPowerShell kullandın; Linux'ta değilkısmen
TypeScriptartıMaç notları, not asistanıvar
Dockerartı–yok
Bulut sağlayıcıartıRender, Vercel, Neon kullandın; adı geçen üçünü değilkısmen
Birim testiartınode:test (Ders 53)var

Karar: başvur. Beş gerekliliğin üçü tam, ikisi kısmen. Yıl şartı ilanın en sert satırı: 0 yıl, 1 yıldan azdır ve bunu gizlemek yerine ön yazıda projelerle karşılarsın. Başvuru seni hiçbir şeyden etmez; en kötü ihtimalle cevap gelmez. Ama Linux eksiğini başvurudan önce birkaç günde biraz kapatabilirsin: dosyalar arasında gezinmek, dosya okumak ve aramak için temel komutları (ls, cd, cat, grep) öğren.

Sınır durumu: ilk satır "en az 3 yıl profesyonel deneyim" olsaydı ve listeye "yeni geliştiricilere mentorluk" eklenseydi, altı gerekliliğin yalnız üçünü tam karşılardın: tam yarısı, kuralın sınırı. Böyle bir durumda eksiklerin türüne bak. Linux birkaç haftada kapanır; üç yıl deneyim ve mentorluk kapanmaz. Bu ilan aslında junior ilanı değil; zamanını sıradaki ilana ayır.

Ön yazı (örnek)
Konu: Junior Backend Geliştirici başvurusu – Deniz Yılmaz Merhaba, Şirket C'nin Junior Backend Geliştirici ilanını gördüm. İlanda Node.js ve PostgreSQL ile REST API geliştirecek birini aradığınızı yazmışsınız; portföyümün merkezinde tam olarak bu tür bir proje var. Takım API'si, Express ve PostgreSQL ile yazdığım 10 uç noktalı bir REST API: parametreli sorgular, sayfalama, transaction ve veritabanı hatalarını 400 ve 409 gibi durum kodlarına çeviren bir hata katmanı içeriyor (kod: github.com/denizyilmaz/takim-api). Son projelerimi TypeScript ile yazıyor, `node:test` ile birim testleri ekliyor ve değişikliklerimi pull request'lerle yönetiyorum. Henüz profesyonel bir işte çalışmadım; Node.js deneyimim yaklaşık bir yıllık düzenli proje çalışmasından geliyor. Linux komut satırını şu an öğreniyorum. Projelerimi kod üzerinden anlatabileceğim bir görüşme için uygun olduğunuz zamanı beklerim. Deniz Yılmazgithub.com/denizyilmaz · deniz@example.com

Ön yazıdaki süre ("yaklaşık bir yıl") senin gerçek sürene göre değişir; abartma.

Görev 6

Takip betiğine özet ekle

takip.js'e ozet(liste) adında bir fonksiyon ekle. Fonksiyon bir metin döndürsün; içinde her durumdan kaç başvuru olduğu ve 14 gün ya da daha uzun süredir "gönderildi" durumunda bekleyen şirketlerin adları olsun (bunlardan artık cevap beklemiyorsun). Hiç böyle şirket yoksa yok yazsın; liste boşsa yalnız Henüz başvuru yok. döndürsün. Dersteki beş başvuruyla ve boş bir diziyle çağırınca çıktı şu olmalı:

Metin
gönderildi: 3ön görüşme: 1ret: 1Yanıt gelmedi sayılanlar: Şirket AHenüz başvuru yok.
İpucu 1

Durum sayısı için reduce ve başlangıç değeri olarak boş bir obje (Ders 11). Objedeki her anahtar bir durum, değeri o durumdaki başvuru sayısı. Objeyi satırlara çevirmek için Object.entries (Ders 12).

İpucu 2

Bir anahtar objede henüz yoksa değeri undefined olur; sayac[b.durum] ?? 0 ile sıfırdan başlat. Bekleyenleri bulmak için filter ile seç, map ile yalnız şirket adını al.

İpucu 3

Satırları bir dizide topla ve en sonda satirlar.join("\n") ile tek metne çevir. Boş liste denetimini fonksiyonun en başına koy ve erken dön (Ders 6).

Çözümü göster
takip.js
const bugun = new Date("2026-10-12")const birGun = 24 * 60 * 60 * 1000 const basvurular = [    { sirket: "Şirket A", pozisyon: "Junior Full-Stack Geliştirici", tarih: "2026-09-28", durum: "gönderildi" },    { sirket: "Şirket B", pozisyon: "Junior Frontend Geliştirici", tarih: "2026-10-02", durum: "ön görüşme" },    { sirket: "Şirket C", pozisyon: "Stajyer Yazılımcı", tarih: "2026-10-05", durum: "gönderildi" },    { sirket: "Şirket D", pozisyon: "Junior Backend Geliştirici", tarih: "2026-10-09", durum: "gönderildi" },    { sirket: "Şirket E", pozisyon: "Yazılım Geliştirici", tarih: "2026-09-20", durum: "ret" }] function gecenGun(tarih) {    return Math.floor((bugun - new Date(tarih)) / birGun)} function ozet(liste) {    if (liste.length === 0) {        return "Henüz başvuru yok."    }    const sayilar = liste.reduce((sayac, b) => {        sayac[b.durum] = (sayac[b.durum] ?? 0) + 1        return sayac    }, {})    const satirlar = Object.entries(sayilar).map(([durum, sayi]) => `${durum}: ${sayi}`)    const sessizler = liste        .filter((b) => b.durum === "gönderildi" && gecenGun(b.tarih) >= 14)        .map((b) => b.sirket)    const sessizMetin = sessizler.length > 0 ? sessizler.join(", ") : "yok"    satirlar.push(`Yanıt gelmedi sayılanlar: ${sessizMetin}`)    return satirlar.join("\n")} console.log(ozet(basvurular))console.log(ozet([]))
Çıktı
gönderildi: 3ön görüşme: 1ret: 1Yanıt gelmedi sayılanlar: Şirket AHenüz başvuru yok.

Sınır denemeleri:

  • Şirket A'ya tam 14 gün olmuş ve listede: koşul >= 14. İlk satırı new Date("2026-10-11") yapıp çalıştırırsan Şirket A'nın günü 13'e düşer ve son satır Yanıt gelmedi sayılanlar: yok olur; durum sayıları değişmez.
  • ozet([]) erken dönüşe girdi ve reduce hiç çalışmadı. Başlangıç değerini ({}) unutsaydın, reduce ilk başvuru objesini sayaç olarak kullanırdı: çıktının başına sirket: Şirket A, tarih: 2026-09-28 gibi satırlar karışır ve "gönderildi" 3 yerine 2 çıkar, çünkü ilk başvuru hiç sayılmaz. Denersen bunu kendin görürsün.
  • Durumların sırası, başvuruların dizideki ilk görünme sırasıdır: "gönderildi" ilk başvuruda geçtiği için en üstte.

Kendini sına

Soru 1

Deniz profil README'sini profil adında herkese açık bir depoya koydu. Dosya ana klasörde ve dolu ama profilinde görünmüyor. Neden?

Cevabı göster

Depo adı kullanıcı adıyla aynı değil. Profilde görünmesi için depo denizyilmaz/denizyilmaz olmalı. Öteki üç şart (herkese açık, README.md ana klasörde, boş değil) zaten sağlanmış. Depoyu Settings sayfasından denizyilmaz olarak yeniden adlandırması yeter.

Soru 2

Bu İngilizce ilan parçasında hangi satırlar gereklilik, hangileri artı?

Metin
Must have: experience with GitRequirements: React, TypeScriptBonus points: GraphQLPreferred: a degree in Computer ScienceFamiliarity with Docker is a plus
Cevabı göster

Gereklilik: Must have (Git) ve Requirements (React, TypeScript). Artı: Bonus points (GraphQL), Preferred (bilgisayar bilimi diploması) ve is a plus (Docker). Üç artının hiçbiri olmadan da başvurabilirsin; ayrıca familiarity yalnız tanışıklık ister.

Soru 3

CV'nin beceriler bölümünde "JavaScript ★★★★☆, React ★★★☆☆" yazıyor. Bunun iki sorunu ne?

Cevabı göster

Birincisi, yıldızlar yazı değildir: aday takip sistemi ve ekran okuyucu onları okuyamaz ya da anlamsız işaretlere çevirir. İkincisi, ölçüsü yoktur ve seni savunamayacağın bir iddiaya bağlar: "dört yıldız" neye göre? Mülakatta "React'te neden üç yıldız?" sorusuna iyi bir cevap yoktur. Becerileri düz yazı olarak listele, düzeyini proje maddeleri göstersin.

Soru 4

takip.js'in ilk satırı const bugun = new Date("2026-10-11") olsaydı program ne yazardı?

JavaScript
const donulecekler = basvurular.filter((b) => b.durum === "gönderildi" && gecenGun(b.tarih) >= 7)
Cevabı göster
Metin
Toplam başvuru: 5Dönüş yapılacaklar:- Şirket A (Junior Full-Stack Geliştirici): 13 gün oldu

Bir gün geri gidince Şirket A'nın günü 13'e, Şirket C'ninki 6'ya düşer. 6, 7'den küçük olduğu için Şirket C listeden çıkar. Toplam başvuru sayısı tarihten etkilenmez.

Soru 5

Bir işveren, Node.js projelerinden birini README'deki adımlarla kurmaya çalışıyor. README'de yalnız "npm install, sonra npm run dev" yazıyor; dev betiği node --watch --env-file=.env sunucu.js. .env.example dosyası depoda var ama README'de geçmiyor. İşveren ne görür, sen neyi değiştirmelisin?

Cevabı göster

npm run dev, .env dosyası olmadığı için node: .env: not found yazıp durur; işverenin gözünde proje çalışmıyor. Kod doğru, README eksik: kurulum adımlarına ".env.example'ı .env adıyla kopyala (Copy-Item .env.example .env) ve değerleri doldur" adımını ekle; DATABASE_URL gibi bir değerin nereden alınacağını da yaz. Sonra provayı temiz bir klonda tekrarla.

Soru 6

Ön yazının ortasında şu cümle var: "Çok çalışkan, öğrenmeye açık ve takım çalışmasına yatkın biriyim." Neden zayıf, yerine ne yazardın?

Cevabı göster

Herkes yazabilir ve okuyan doğrulayamaz; bu yüzden göz ucuyla geçilir. Yerine sıfatı gösteren bir kanıt yaz: "Takım API'sinde sayfalamayı eklerken bir hatayı testle yakaladım; bütün değişikliklerimi pull request açıp inceleyerek birleştiriyorum." Böyle bir cümle hem öğrenmeyi hem de ekip alışkanlığını, bağlantıyla kontrol edilebilecek şekilde anlatır.

Soru 7

Junior bir ilanda "0–2 years of experience" ve "Familiarity with Docker is a plus" yazıyor. Profesyonel deneyimin yok ve Docker'ı hiç kullanmadın. Başvurmalı mısın?

Cevabı göster

Evet, gerekliliklerin geri kalanını karşılıyorsan başvur. "0–2 years" sıfırı da kapsıyor, yani yeni başlayanı açıkça kabul ediyor. Docker satırı is a plus: artı, şart değil. Docker'ı bilmediğini CV'ne yazmazsın; ön yazıda dürüstçe "henüz kullanmadım" diyebilirsin.

Soru 8

Deniz'in LinkedIn başlığı "İş arıyorum, her fırsata açığım". İş aradığını göstermek için başlık doğru yer mi? Yerine ne yazmalı, iş aradığını nereden söylemeli?

Cevabı göster

Başlık, işe alım uzmanının aramada ve listede ilk gördüğü satır; "iş arıyorum" ne yaptığını ve hangi yığınla çalıştığını söylemez, "React" ya da "Node.js" diye arayan biri onu bulamaz. Başlığa ne olduğunu ve yığınını yazmalı: Junior Full-Stack Developer | TypeScript · React · Next.js · Node.js · PostgreSQL. İş aradığını Open to → Finding a new job ayarı söyler; All LinkedIn Members seçerse herkes görür ve fotoğrafına #OpenToWork çerçevesi eklenir, Recruiters only seçerse yalnız işe alım uzmanları görür.

Portföy kontrol listesi

Bu derste Git'e kaydedecek bir ders dosyan yok; asıl kayıtlar profil deposunda ve proje depolarında. Onun yerine, ilk başvurunu göndermeden önce bu listeyi baştan sona geç.

Bir sonraki ders kursun son dersi: mülakata hazırlanacaksın. Mülakatın aşamalarını, sık sorulan JavaScript, React ve SQL sorularını, canlı kodlamada sesli düşünmeyi ve bu derste vitrine koyduğun projeleri bir hikâye gibi anlatmayı çalışacaksın.

İşaret yalnızca bu tarayıcıda saklanır, kimseye gönderilmez.