If you're seeing this message, it means we're having trouble loading external resources on our website.

Bağlandığınız bilgisayar bir web filtresi kullanıyorsa, *.kastatic.org ve *.kasandbox.org adreslerinin engellerini kaldırmayı unutmayın.

Ana içerik

Bir programlama projesini planlama

Programcı olmak bir programlama dilinin söz dizimi ve kavramlarını öğrenmekten ibaret değildir: bu bilgiyi kullanarak program yapmakla ilgilidir. Bu derste, görevlerde ve projelerde birkaç program yaptınız, ama şimdi yeni programlar için fikirler - gerçekten heyecan duyduğunuz fikirler- oluşturma ve bunları gerçek programlara dönüştürmeye denemeye çalışma zamanı.
Başladığınızda programınız için gereken her şeyi bilmeyebilirsiniz ve bunda bir sorun yok -- programınızı gerçekleştirmek istediğiniz için, bu yeni şeyleri öğrenmek için motivasyonunuz olur. Programcılar sürekli yeni projeler için yeni şeyler öğrenmektedir, ve bunu bu kadar sevmemizin bir nedeni de budur.
Programlama projesini planlama sürecinin üzerinden adım adım geçelim:

1. Ne yapmak istiyorsunuz?

Programlamaya ilk başladığımda, sürekli yapmak istediğim yeni programları düşünüyordum ve bunları bir listeye yazıyordum. Yaratma gücünün bağımlısı oldum ve beynimin yapmak istediği o kadar çok şey vardı ki. Siz de böyleyseniz, yapmak istediğiniz şey hakkında bir fikriniz ve belki kendi listeniz var.
Bir fikriniz yoksa, beyin fırtınası için bazı sorular şunlardır:
  • En sevdiğiniz oyun hangisidir - atari oyunu mu, kutu oyunu mu, spor oyunu mu? Bunun sadeleştirilmiş, dijital bir versiyonunu yapabilir misiniz? Bunu biraz değiştirebilir misiniz, örneğin farklı bir tema veya ana karakter verebilir misiniz?
  • En sevdiğiniz diğer akademik alanlar nelerdir? Sanatı seviyorsanız, bir sanat-yapma programı yapabilir misiniz? Tarih seviyorsanız, etkileşimli zaman çizelgesine ne dersiniz? Fen seviyorsanız, bilimsel bir simülasyona ne dersiniz? 
  • En sevdiğiniz film veya TV programı nedir? Bundan bir sahnenin veya karakterin dijital versiyonunu yapabilir misiniz? Belki bunu temel alan bir oyun yapabilirsiniz?
  • Sevdiğiniz gerçek hayattan bir aygıt ne olabilir? Bunun bir simülasyonunu yapabilir misiniz?
Bir fikir seçtikten sonra, bunun bir tanımını yazmalısınız. Örneğin, en sevdiğim eski atari oyunu olan "Breakout"'un bir klonunu yapmaya karar verseydim, şöyle yazabilirdim:
Breakout: Ekranın altında bir raketi kontrol ettiğiniz ve onunla tuğlalar kırmak için bir topa yukarı doğru ve açılı olarak vurduğunuz bir oyun. Amaç tüm tuğlaları kırmak ve topun yere fazla değmemesidir.
Bu tanımı sonra açarsınız, ama şimdilik, bu planlama sürecine devam etmeniz için yeterince iyi bir fikir verir.

2. Hangi teknolojiyi kullanacaksınız?

Bu adımda alışkın olduğunuz veya kolay öğrenebildiğiniz teknolojileri (diller/kitaplıklar/ortamlar) ve bu iş için en uygun olanlarını düşünmeniz gerekir. Çoğunuz için, bu liste bir öge uzunluğunda olabilir, "1. JS+ProcessingJS" ve bu kararınızı kolaylaştırır.
JS+ProcessingJS ortamımız animasyonlar, oyunlar, görselleştirmeler, ve simülasyonlar yapmak için süper işe yarar. İnsanların burada yaptıkları çeşitli programları görmek için, topluluk programlarına bakın.
Ortamımız çok oyunculu oyunlar, mobil uygulamalar, veri girme uygulamaları gibi şeyler için işe yaramaz. Başka diller/ortamlar (JS+HTML, Python, SCRATCH, Swift, vb.) biliyorsanız ve ProcessingJS ile o kadar mantıklı olmayan bir şey oluşturmak istiyorsanız, programınız için bu teknolojilerin hangisinin en uygun olduğunu düşünün. Bunları yapmak istiyor ama başka teknolojiler bilmiyorsanız, yeni bir program fikri bulmanız gerekebilir. Yeni bir proje için yeni bir teknoloji öğrenebilirsiniz, ancak programlamaya yeni başlıyorsanız, önce ilk dilde çok iyi olmanız yerinde olur.
Breakout gibi bir oyun yapmaya karar verseydim, JS+ProcessingJS seçerdim, çünkü bu teknolojiyi ve böyle 2 boyutlu oyunlar için harika olduğunu zaten biliyorum.

3. Hangi özellikleri içerecek?

Burada gerçek planlamaya giriyoruz, ve (bana göre) eğlence başlıyor. Bu adımdaki hedefiniz gerçekten ne yaptığınızı bulmaktır- neye benzediğini, içereceği özellikleri, içermeyeceği özellikleri bulmak.
İlk olarak "modeller" yapabilirsiniz - bunlar yaptığınız şeye benzeyen, ama renk, tam boyut gibi detayları olmayan çizimlerdir. Modelleri kağıda veya çevrimiçi programlarla yapabilirsiniz:
Modellerin neye benzediği hakkında bir fikir vermek için, Breakout klonumun modellerine aşağıda yer verdim. Sahnelerin her birini ayrı ayrı çizdim ve bir sahneden diğerine nasıl geçildiğini göstermek için aralarına oklar çizdim. Bu oklar, program durumları arasında yol almak için ihtiyacım olan mantığı anlamama yardımcı olur.
Breakout klonunun kabataslak modelleri
Şimdi bu modelleri kullanarak bir özellik listesi oluşturabilirsiniz, burada programınızdaki tüm özellikleri düşünür, bunların bir listesini oluşturursunuz.
Breakout klonum için, sahnelere ayrılmış özellik listem böyle olur:
Oyun sahnesi
  • Kullanıcı kontrollü raket
  • Çok renkli tuğlalar
  • Açılı top hareketi
  • Çarpışma tespiti
  • Yaşam göstergesi
  • Skor göstergesi
  • Ses efektleri
Ana Sahne
  • Oyna butonu
  • Yardım butonu
Yardım Sahnesi
  • Metin
  • Geri butonu
Kazanma Sahnesi
  • Başlık
  • Havai fişek animasyonu
Kaybetme Sahnesi
  • Metin
  • Yeniden Başlatma butonu

4. Ama hangi özellikleri mutlaka içermelidir?

Programlarımızı kafamızda tasarlamamız için sonsuz zamanımız olsaydı, listemizde tüm özellikleri içerirlerdi. Ancak böyle bir durum söz konusu değil; dolayısıyla bu adımda hangi özelliklerin en önemli olduğuna ve hangi özelliklerin zamanınız varsa yapılacağına karar vermeniz gerekir. Bu, aynı zamanda, özellikleri (en önemliden en az önemliye) hangi sırada uygulayacağınıza karar vermenize yardımcı olur.
Her bir özelliğin önemini bulmak için, kendinize şu soruları sorun:
  • Bunu bir arkadaşımla paylaşsaydım, hangi özelliklerin çalıştığından emin olmak isterdim?
  • Hangi özellikleri oluşturmak bana en çok heyecan veriyor?
  • Hangi özellikler programım için en eşsizdir?
  • Hangi özellikleri uygularsam, en fazla öğrenirim?
  • Şimdiki beceri düzeyimin çok ötesinde görünen özellik var mı?
Sonra, son adımdaki özellik listesinin üzerinden geçin ve ya listeyi sıralayın veya her bir özelliğe bir kademe ekleyin.
Breakout klon özellik listem için, özelliklerin yanına "P1", "P2" ve "P3" yazdım; en öncelikli (P1), orta öncelikli (P2), ve en düşük öncelikli (P3) olanları belirtmek için. Eşsiz oyun mekaniklerini sahneler gibi genel oyun özelliklerine göre önceliklendirmeye karar verdim, çünkü projeyle ilgili en heyecan verici olan şey bence bu:
(P1) Oyun sahnesi
  • (P1) Kullanıcı kontrollü raket
  • (P1) Çok renkli tuğlalar
  • (P1) Açılı top hareketi
  • (P1) Çarpışma tespiti
  • (P2) Yaşam göstergesi
  • (P2) Skor göstergesi
  • (P3) Ses efektleri
(P2) Ana Sahne
  • (P2) Oyna butonu
  • (P3) Yardım butonu
(P3) Yardım Sahnesi
  • (P3) Metin
  • (P3) Geri butonu
(P2) Kazanma Sahnesi
  • (P2) Başlık
  • (P3) Havai fişek animasyonu
(P2) Kaybetme Sahnesi
  • (P2) Metin
  • (P3) Yeniden Başlatma butonu
Oyun yapanlara genel bir ipucu olarak, şu özelliklerin önceliğini azaltmanızı öneririm: menüler, çoklu düzeyler, 3 boyutlu grafikler. Oyununuzda eşsiz ve eğlenceli olan şeye odaklanın, sonra bu ekstraları ekleyin.
Önceliklendirilmiş listenizi proje versiyonlarına dönüştürüp, her bir versiyonda neleri uygulamanız gerektiğini görebilirsiniz ve belirli bir versiyondan sonra durup yaptığınızla mutlu olabilirsiniz.
Breakout klonum için versiyonlar şöyle olur:
V1
  • Kullanıcı kontrollü raket
  • Çok renkli tuğlalar
  • Açılı top hareketi
  • Çarpışma tespiti
V2
  • Yaşam göstergesi
  • Skor göstergesi
  • Oyna butonlu başlangıç sahnesi
  • Başlıklı kazanma sahnesi
V3
  • Ses efektleri
  • Yardım butonu
  • Havai fişekler
  • Yeniden Başlat butonlu kaybetme sahnesi

5. Bunu nasıl uygulayacaksınız?

Artık programınızda ilk oluşturacağınız özelliklerle ilgili bir fikriniz olabilir - ama şimdi başlarsanız, içinde yazılı kod olmayan tamamen boş bir programa bakıyor olacaksınız ki, bu korkutucu olabilir. Önce hangi değişkenleri yazmalısınız? Hangi fonksiyonlar?
Bunu bulmanın bir yolu, programınızın "yüksek düzey mimarisini" düşünmektir - bunu "nesneler", "mantık", "kullanıcı etkileşimi", "kullanıcı verileri" ve "sahneler" gibi kategorilere ayırmak; sonra bunları, nesne yönelimli nesne türleri, fonksiyonlar veya değişkenler gibi nasıl uygulayacağımızı düşünmektir.
Örneğin, burada benim Breakout klonumun mimarisini görebilirsiniz:
Nesneler
  • Brick (.isHit())
  • Paddle (.move())
  • Ball (.move())
Sahneler
  • Başla
  • Oyun
  • Son
Mantık
  • Top-tuğla çarpışması (function, sınırlayan kutuyu kullanın)
  • Raket-top açılama (function, açıyı ters çevirme)
Kullanıcı etkileşimi
  • Klavye-raket hareketi (keyPressed)
  • Sahne değişimleri için butonlar (mouseClicked)
Kullanıcı verisi
  • Top ölümleri (array)
  • Top vuruşları (array)
Yüksek-düzey mimariyi düşündükten sonra, önce neyi kodlamaya başlayacağınız daha açık olmalıdır.
Programınızın tamamını önce sahte kodda yazmaya karar verebilirsiniz, bundan dersin ilerleyen kısımlarında bahsedeceğiz. Temel olarak, bu, programın tamamını bir yorum içinde düz İngilizce metinde yazma ve sonra yavaş yavaş gerçek koda çevirme anlamına gelir.

6. Zaman çizelgeniz nedir?

Bu programı yapmak için ne kadar zamanınız var? Kaç hafta, ve her gün kaç saat? Her hafta hangi özellikleri yazacaksınız? Bu adımdaki hedefiniz, projeniz için bir zaman çizelgesi oluşturmak olmalıdır - bir son tarih varsa, bu özellikle önemlidir; ama programı yazmak için gereken süreyi anlamaya başlamanız açısından da faydalıdır.
Burada benim Breakout klonum için, her hafta 2-4 saat çalışma varsayan zaman çizelgemi görebilirsiniz:
  • 1. Hafta: Tasarım ve sahte kodlama
  • 2. Hafta: Kaba görseller
  • 3. Hafta: Top hareketi/çarpışma mekaniği
  • 4. Hafta: Puanlama mekaniği
  • 5. Hafta: Sahneler (Başlama/Kazanma/Kaybetme)
  • 6. Hafta: Cila, Testler (SC), Demo için hazırlık
Programlama projeleri için zaman çizelgeleri oluşturmak zordur. Kolay görünen bazı şeyler beklediğinizden çok daha uzun sürer (ayıklamak için saatler harcadığınız garip bir hata gibi), bazı zor görünen şeyler de beklediğinizden daha az zaman alır. Genel bir kural olarak, düşündüğünüzden fazla süreceğini varsayın ve devam ettikçe ayarlama yapın.

Hazır mısınız!?

Umarız, bu, size bir programlama projesini planlama süreci hakkında bir fikir verir ve bir projeye şimdi başlamanıza neden olur. Yapmak istediğiniz şeye göre, oyun ve simülasyon oluşturmada daha fazla fikir almak için, önce İleri Düzey JS: Oyunlar & Görselleştirmeler veya İleri Düzey JS: Doğal Simülasyonlar gibi başka dersleri de bitirmeye karar verebilirsiniz.
Önemli olan, bir noktada kendi programlarınızı yazmaya başlamaktır; çünkü bu şekilde en çok öğrenirsiniz ve programlamanın keyfine varırsınız, çünkü hayallerinizi gerçeğe dönüştürüyorsunuzdur.

Tartışmaya katılmak ister misiniz?

Henüz gönderi yok.
İngilizce biliyor musunuz? Khan Academy'nin İngilizce sitesinde neler olduğunu görmek için buraya tıklayın.