Bootstrap - Üniversite Öncesi Bilgisayar Bilimleri Eğitimi

2
fkoksal

Eğer yazılım ile uğraşan biriyseniz "Programlama öğrenmek için nereden başlamak gerek? Hangi dili öğrenmeliyim?" soruları ile mutlaka karşılaşmışsınızdır. Hatta bazen bu soruyu soran henüz üniversite eğitimi almamış bir lise ya da ortaokul öğrencisi bile olmuş olabilir. Nasıl bir cevap verirdiniz? Sizce üniversite öncesi programlama eğitimi nasıl olmalı?

Bu soruya en iyi cevabı bulabilmek için başta Amerika Birleşik Devletleri olmak üzere bir çok ülkede akademisyenler, özel şirketler ve bazı bağımsız gruplar tarafından önemli araştırmalar yapılıyor. Bunlardan bir tanesi de Bootstrap projesi.

Bootstrap, Emmanuel Schanzer tarafından 6-12 sınıflar için özel olarak geliştirilmiş bir eğitim müfredatıdır. Brown, WPI ve Northeastern üniversiteleri tarafından üniversitelerde programlamaya giriş seviyesi için geliştirilen HtDP (How to Design Programs) müfredatının üniversite öncesi yaş grupları için uygulanmış halidir.

10 haftalık müredat bitiminde ögrenciler basit de olsa kendi oyunlarını yazmış oluyorlar. Oyunu oynayabilmek için tıklayın.

Tasarım Reçetesi

Tipik bir programlama dersi 'çalışıncaya kadar değiştir' (tinker until it works) yaklaşımını öğretir. Çalıştığı zaman öğrenciler 'Çalıştı!' diyerek sevinir ve bir sonraki probleme geçerler. Maalesef bu terim hesaplama alanında söylenmiş en kısa yalandır ve bir çok insanın ömründen nice saatlere mal olmuştur.

HtDP (dolayısı ile Bootstrap) müfredatı bu yönteme alternatif olarak öğrencilere uyguladıkları çözümün her bir adımını daha en başından anlayabilecekleri, sistematik düşünceye dayalı "iyi programlama pratikleri"ne odaklanan bir eğitim müfredatı önerir. Bunun için "tasarım reçetesi" olarak adlandırdıkları, bir programın bütününe ya da yazdığınız her bir fonksiyona uygulayabileceğiniz aşağıdaki adımları sunar (HtDP'nin sunduğu orjinal tasarım reçetesi 6 adımdan oluşurken Bootstrap projesi 3 adımlık daha kısa bir reçete kullanıyor):

Adım 1: Sözleşmeyi Yazın

Fonksiyon tanımlamanın ilk adımı onun Sözleşmesi'nin hazırlanmasıdır. Sözleşme bir fonksiyon hakkında üç esas bilgiyi özetler: Fonksiyon İsmi, Fonksiyonun Girdisi, Fonksiyonun Çıktısı.

Adım 2: Örnekler Verin

Bir önceki adımda yazdığımız bilgileri kullanarak birkaç örnek düşünmek her zaman iyi bir fikirdir. Örnekler, fonksiyonun ne üretemeye çalışacağını gösterirler.

Adım 3: Fonksiyon Tanımlama

Son olarak sözleşmeyi ve yazdığımız örnekleri kullanarak fonksiyonun kendisini tanımlamak oldukça basittir.

Bir Örnek Kullanarak Pekiştirelim

Diyelim ki bizden verilen sayının karesini hesaplayan bir fonksiyon yazmamız istendi.

Öncelikle fonksiyonumuzun adını, alacağı veri ya da verilerin tiplerini ve üreteceği verinin tipini belirleyelim. Fonksiyonumuza 'karesi' ismini verebiliriz. Karesi fonksiyonu bir sayı alacak ve yine bir sayı üretecek. Bunu ';;' işareti ile bir yorum satırı olarak yazalım.

; Sözleşme: karesi : Sayı -> Sayı

İkinci adım olarak örnekler verelim. Bunlar öyle örnekler olsunlar ki karşılaşabileceğimiz tüm farklı durumları mümkün olduğunca kapsasınlar. Önceden bizim için tanımlanmış olan 'EXAMPLE' fonksiyonunu kullanarak örneklerimizi yazabiliriz. Böylece şimdi yazdığımız örnekler sonradan fonsiyonumuzu test etmek için kullanılabilecek.

(EXAMPLE (karesi 0) 0)
(EXAMPLE (karesi -3) 9)
(EXAMPLE (karesi 4) 16)

Son olarak kodumuzu aşağıdaki şekilde tanımlayabiliriz:

(define (karesi x)
   (* x x))

Hepsi bu kadar. Sizinde farkettiğiniz üzere dokümantasyonu ve testleri olan bir fonksiyon yazdık :)

Programlama Dili: Racket

HtDP'ye göre programlamaya giriş için günümüzün moda dillerinden birini seçmek mantıklı değildir. Çünkü yazılım dünyasında moda çok hızlı değişir. Tipik bir "X dilinde hızlı programlama öğrenin" kitabı ya da dersi sizi bir sonraki moda dile taşıyacak olan programlama prensiplerini aktarmada başarılı olamaz.

Bir diğer husus da piyasadaki dillerin giriş seviyesindeki bir öğrenciye yardımcı olma konusunda başarısız olmasıdır. Bu seviyedeki bir öğrenci daha dili öğrenmeden bir çok hata yapar, ancak programlama dilleri ürettiği hata mesajlarında kullanıcının dili bildiğini kabul eder. Racket dili öğrencinin seviyesine göre farklı öğrenme dilleri sunar. 'Yeni Başlayan Öğrenci Dili'nde Racket dilinin sadece bazı özellikleri açıktır ve üretilen hata mesajları öğrenci seviyesine uygun olarak yeniden düzenlenmiştir.

Programlama IDE'si: Dr. Racket

Dr. Racket jumbo jet kokpitini andıran diğer IDE'lerin aksine çok basit bir arayüze sahiptir. Yazdığınız kodları anında deneyebileceğiniz 'etkileşim penceresi' ve bu kodları kaydedip saklayabileceğiniz 'tanımlama penceresi'ni bir arada bulundurur. Böylece 'şöyle yazsam nasıl olur' tarzı deneyler yapmak isteyen öğrenciler hemen oracıkta denemelerini yapıp kodlarını hızlıca düzenleyebilirler. Dr. Racker, tasarım reçetesini uygulamak isteyen öğrenciler için de interactive bir ortam sağlar.

Dr. Racket internet sayfasından ücretsiz olarak indirip kullanılabiliyor. Alternatif olarak wescheme.org adresinden online olarak da kullanabilirsiniz.

Sonuç

Yazarlarının bu kitap hakkında şöyle bir yorumu var: "Bu kitap kimseyi süper bir programcı yapmaz, ancak bir şeye inandığımız için 15 yılımızı bu kitaba harcadık: 'Herkes program tasarlayabilir.'

Müfredatın altında yatan felsefeyi daha iyi anlamak için kitabın önsözünü okumanızı tavsiye ederim.

"Evet, ama, her güzel şey gibi bu da ingilizce!" dediğinizi duyar gibiyim. Değerli akademisyenlerimizden Mehmet Gençer ve çalışma arkadaşları bu sorunu çoktan çözmüş. Müfredatın türkçe çevirisine yakinokul.org adresinden ulaşabilir, vakit buldukça github üzerinden açık kaynak olarak geliştirilen bu projeye destek verebilirsiniz.

Görüşler

0
cadr

Aa ben bu yakinokul u bilmiyordum hiç, repo linki nedir?

0
auselen

Konuyla ilgilenen herkesin okumasi gereken kitap Mindstorms.

0
FZ

Yillar önce okumustum (StarLogo ile birilerine programlama ogretmeye calistigim zamanlar). Ikinci kez okunmaya deger kitaplardan.

0
butch

Kodris diye bir girişim varmış.

Kodris; ilköğretim ve ortaöğretim seviyesindeki öğrencilere kodlama öğretmek amacıyla oluşturulmuş online bir platformdur.

Görüş belirtmek için giriş yapın...

İlgili Yazılar

1960'lardan kalma bir IBM Mainframe ve Java Birbirine Karışınca

tongucyumruk

Konu yazılım olunca insanların ağızlarından düşürmedikleri bir kelimedir: Legacy. Birkaç farklı şekilde Türkçe'ye çevrilebilecek olsa da genellikle bu sektörde Eski anlamına gelir. Peki eski her zaman kötü, yavaş, zor mu demektir? David Cassel bu yazısında Docker, JSON, Bootstrap, REST ve benzeri bütün "güncel" teknolojileri kullanan bir sistemin kalbinde yatan ve sorgulara 6-10...

Crash Course: Bilgisayar Bilimleri!

tongucyumruk

Green Biraderler'in "eğitim şart" temalı projesi Crash Course'tan herkesin haberi vardır diye tahmin ediyorum. Haberiniz yoksa, şimdi oldu, gidin ve bu müthiş bilgi kaynağının tadını çıkarın.

Evet, daha önceden bilmeyenler John Green'in efsanevi anlatım tarzıyla süslediği Dünya Tarihi videolarına dalmışken biz konumuza devam edelim. Crash Course projesi yeni dersini...

Kodlamanın da saati mi olurmuş?!? Olurmuş...

eph

Her çocuğa bilgisayar bilimlerini sevdirecek, düşünmelerini ve hatta kendi oyunlarını tasarlamalarını sağlayacak bir platformdan bahsetmek istiyorum... code.org.. Yeni değil, bilen bilir.. 2. sınıf ve üzerindeki her yaş grubuna hitap eden farklı zorluk seviyelerinde ve farklı temalarda görevleri yerine getirme "oyun"u.. Oyun kelimesini özellikle kullandım çünkü çocuklar (öğrencilerim)...