Bir üniversitede, lisede
veya dersanede matematik veya fizik dersleri veriyorsanız, muhtemelen öğrenciler sizi anlamakta zorluk
çekiyorlardır. Bunu gördüğünüzde zaman zaman kabahati kendinizde arayacaksınız.
Zaman zaman dedik, çünkü matematik ve fizik derslerini, öğrenciliğinizde size
nasıl anlatıldıysa öyle anlatıyorsunuzdur. Öğrenciler beni anlasın diye çaba
harcarken kendinizi not hazırlıyor olabilirsiniz. Tabi, kısa bir süre sonra
öğrencilerin işine yarayacak, anlatılanların kolay anlaşılmasına yardım edecek
metinleri kaleme almanın hiç te kolay olmadığını göreceksiniz.
30 Ekim 2017 Pazartesi
20 Eylül 2017 Çarşamba
Process’leri Tarif Edip Thread'leri Anlatmak
Birçok kaynakta konu thread’lere getirilmeden önce Windows ile işletilen bilgisayarda aynı anda birden fazla programın çalıştırıldığından söz ediliyor. Hal bu ki konu Windows ve çalıştırılan uygulamalar olduğunda, thread yerine process’lere atıfta bulunmak gerekir. Sıra C# uygalaması yazarak thread’lerden söz etmeye geldiğinde ortada bir tek uygulamanın olduğunu gören okurun kafası karışmaktadır.
31 Ağustos 2017 Perşembe
Event Kavramını Anlatırken Aldığım Birkaç Not
En başta Windows’un “mesajlar” ile işlem yapan bir
işletim sistemi olduğunu ve kullanıcının yaptığı işlemlere göre ilgili
uygulamaya mesajlar gönderdiğini hatırlamak gerekir. C# uygulaması dahilinde
gerçekleşen olayları, Windows’la ilgili olaylar ile karıştırmamak gerekir.
Kullanıcının klavye ve fare ile yaptığı işlemleri temsil eden mesajları Windows
uygulamaya gönderir. C# uygulaması bu mesajları alıp delegate’ler aracılığı ile
ilgili metotları işletir.
Olayların zor anlaşılmasının en önemli nedeni bizce
şudur:
* C# ve .NET
programcılığı konusunda yolun başında olan birisine forma yerleştirilen “button1”
nesnesinin Click olayının nasıl kullanıldığı, Click olayını temsil eden metodun
nasıl hazırlandığı anlatılır.
* Okurumuz veya programcı adayımız bunları
okuduktan sonra kafasında olaylar ilk gördüğü şekliyle netleşir. Programcı
adayı için artık olay demek Properties
penceresinde Button veya başka bir sınıfın olaylarını listeleyip olayın adı
üzerinde çift tıklayıp Visual Studio’nun metot hazırlaması ve bu metodun içine bir
şeyler yazmasıdır.
*Programcı adayımız veya okurumuz Delegate kavramı
hakkında henüz yeteri bilgiye sahip olmadan .NET Framework ile hazır olarak
gelen bir delegate olan EventHandler’ı
kullanmayı bir güzel öğrenir.
* Başka bir deyişle C# kitabı okuyanlar, C# ve .NET
programcılığını öğrenmek üzere kursa gidenler event anahtar kelimesini hiç kullanmadan deneysel de olsa
programlar yazarlar. Bu şartlarda programcı adayının
için event kavramı diye sorunu henüz yoktur.
* Derken programcının önüne “event” anahtar
kelimesini çıkarırız. Tabi event anahtar kelimesiyle ilgili olarak söylenenler
eski öğrendikleriyle hiç alakalı değildir.
* Bu şartlarda event kavramı C# dilinin en zor
anlaşılan konularından birisi olur çıkar.
26 Ağustos 2017 Cumartesi
Operatörleri Aşırı Yüklemeyle İlgili Notlarım
Konu ister operator overload işlemi olsun ister
indeksleyici hazırlamak olsun, önce kavramsal bilgi vermeye çalışıyoruz. Örneğin
indeksleyicilerden söz etmeden önce dizi değişkenlerin elemanlarına nasıl
erişildiğinden kısaca söz ettik. Bu sayede indeksleyicilerin ne işe yaradığını
bilmeyenlere konunun ezbere anlatılıp okunmasının önüne geçmiş oluyoruz.
Konu hakkında biraz ön bilgi verildikten sonra anlatıma
örnek verilerek yani kod üzerinde devam ediyoruz. Herhangi bir konuyu
anlatırken verdiğimiz örneklerin hem kısa ve kolay hazırlanabilir olmasını hem
de kolay anlaşılmasını gözetiyoruz. Örnek gerekirse, yerli yabancı bir çok
kaynakta operator overload işlemi anlatılırken kompleks sayılarından yararlanma
yoluna gidiliyor. Biz böyle örnek vermeyi tercih etmeyiz, ya okur kompleks
sayıları bilmiyorsa deriz.
20 Ağustos 2017 Pazar
C# 3.0 ve Sonrası İle Gelen Enumerable Sınıfı
Elinizdeki LINQ kaynaklarında burada yapısının bir kısmı ekran görüntüsü olarak verilen Enumerable sınıfı üzerinde ayrıntılı bir şekilde durulmaysa, bilin ki okuduklarınızdan kafanızın karışması ihtimali yüksektir.
19 Ağustos 2017 Cumartesi
Statik Dizi Değişkenler!
Tesadüfen
elime geçen ve bir öğretim üyesi tarafından hazırlanan PDF’de Array sınıfı
tipindeki nesnelerden statik dizi diye söz edildiğini görünce bu kısa
metni yazmak gerekti.
Hoca
arkadaşın demek istediği, klasik şekilde tanımlanan dizi değişkenlerin eleman
sayısının sonradan değiştirilemediğidir. Tabi bunu derken, nesneye yönelik
programlama dillerinin anlamı yıllardır “sabit” olan statik kavramını
kullanıyor.
Madem
konu açıldı biraz konuşalım: İster C#, ister Visual Basic isterse de Java dili
kullanılsın, ArrayList gibi nesne hazırlandığında, nesne dahilinde eleman
sayısı önceden belli olan yani “statik” bir dizi değişken hazırlanır. Bu
ArrayList nesnesine kullanıcı tarafından fazla sayıda eleman eklenip başta
belirtilen sayı aşıldığında geri planda yeni bir dizi değişken tanımlanır ve
artık kapasitesi yeterli gelmeyen eski dizi değişkenin mevcut elemanları yeni
dizi değişkene aktarılır. Bu işlem geri planda otomatik olarak yapıldığı için
fazla meraklı olmayan programcılar ArrayList için dinamik dizi diyebilirler.
Yukarıda
adlarını andığımız programlama dillerinde ArrayList sınıfı olmasaydı programcılar
için gerektiğinde kapasitesi iki katına çıkarılan yeni bir dizi değişkeni
tanımlayıp eski dizi değişkenin elemanlarını yenisine kopyalaması zor değildir.
Tabi hazırda ArrayList veya List sınıfları dururken hiçbir programcı kendini
yorup boş yere kendi koleksiyon sınıfını hazırlamaz.
WindowsFormsApplicationBase Sınıfı
C# projelerinde başlangıç formu olarak kullanılmak istenen
sınıfın örneği Application sınıfının Run() metoduna parametre
olarak verilmektedir. Bu işlem yani projenin başlangıç formunu hazırlama işlemi
Main() metodunun bulunduğu Program.cs dosyasında
yapılmaktadır.
static void Main()
{
Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
Microsoft.VisualBasic.ApplicationServices’deki WindowsFormsApplicationBase
sınıfından yararlanarak C# uygulamasının başlangıç ve açılış formuyla ilgili
bazı işlemleri kolayca yapmak mümkündür. Daha çok Visual Basic programcılarının
kullandığı bu sınıftan C# uygulaması dahilinde yararlanmak istiyorsanız Add
Reference diyalog kutusundan yararlanıp Microsoft.VisualBasic adlı
referansı Solution Explorer penceresinde listelemelisiniz.
Devamında kod satırlarının kısa olmasını sağlamak için using
deyimiyle Microsoft.VisualBasic.ApplicationServices’deki sınıflardan yararlanmak
istediğinizi belirtmeniz önerilir. Bu sınıf hakkında adım adım bilgi verebilmek
için Program.cs dosyasında aşağıdaki gibi WindowsFormsApplicationBase
sınıfının mirasçısı bir sınıf hazırladık.
“App_sinifi” adını verdiğimiz bu sınıf bu hali ile herhangi
bir işleve sahip değildir. Daha önce herhangi bir C# kitabında bu sınıf
hakkında bilgi verilmediği için değişken adı çalmaktan suçlanma ihtimali düşük
olduğu için bu sınıfa argo bir isim vermeye gerek duymadık.
namespace WindowsFormsApplication1
{static class Program
{
static void Main()
{
Application.Run(new Form1());
}
}
public class App_sinifi : WindowsFormsApplicationBase
{
}
}
WindowsFormsApplicationBase sınıfının mirasçısı bu sınıfın
nasıl kullanıldığına örnek olması için ilk olarak OnCreateMainForm()
metodunu override ettik. Bu metodun içinde, projedeki ilk formun yani “Form1” sınıfının
örneğini alıp WindowsFormsApplicationBase tipindeki nesnenin MainForm
özelliğine aktardık.
public class App_sinifi: WindowsFormsApplicationBase
{protected override void OnCreateMainForm()
{
Form1 F1 = new Form1();
this.MainForm = F1;
}
}
Bu şartlarda Main() metodu içinde bu sınıfın
WindowsFormsApplicationBase mirasçısı sınıfının örneği alınıp bu sınıfın Run()
metoduna parametre olarak verilirse “F1” nesnesi uygulamanın başlangıç formu
olur. Aşağıda verilen haliyle Program.cs dosyası ile, Visual Studio tarafından
hazırlanan hali işlev bakımından birbirinden farklı değildir.
using Microsoft.VisualBasic.ApplicationServices;
using System.Windows.Forms;namespace WindowsFormsApplication1
{
static class Program
{
static void Main(string[] parametre)
{
App_sinifi baslangic;
baslangic = new App_sinifi();
baslangic.Run(parametre);
}
}
public class App_sinifi: WindowsFormsApplicationBase
{protected override voidOnCreateMainForm()
{
Form1 F1 = new Form1();
this.MainForm = F1;
}
}
}
Hangi formun uygulamanın başlangıç formu olmasını
istiyorsanız bu formun adını WindowsFormsApplicationBase sınıfının mirasçısı
sınıfın MainForm özelliğine aktarmalısınız. Her ne kadar
WindowsFormsApplicationBase sınıfının mirasçısı bu sınıfı Program.cs dosyası
içinde hazırlamış olsak bile başka bir kod dosyasında kodlayabilirdik.
Başlangıç formu olarak Visual Studio’nun projeye dahil ettiği ilk formu
kullanmak istediğimiz için böyle bir düzenleme yaptık. Bu sınıfın override
edilecek başka metotları ve kendisi için metot hazırlanabilinecek birkaç olayı
olsa bile şimdilik bu kadarıyla yetindik.
Şimdi WindowsFormsApplicationBase sınıfının mirasçısı
sınıftan yararlanıp mevcut bir formu Splash form olarak ekrana
getireceğiz. Bu amaçla üzerinde çalıştığım projeye 2. bir form dahil ettik ve
bu forma “splash_form” adını verdik. Ardından “Program.cs” dosyasındaki
WindowsFormsApplicationBase sınıfının mirasçısı sınıfta OnCreateSplashScreen
metodunu aşağıdaki gibi ezdik(override).
using Microsoft.VisualBasic.ApplicationServices;
namespace WindowsFormsApplication1 {
static class Program
{
static void Main(string[] parametre)
{
App_sinifi baslangic;
baslangic = new App_sinifi();
baslangic.Run(parametre);
}
}
public class App_sinifi: WindowsFormsApplicationBase
{protected override voidOnCreateMainForm()
{
Form1 F1 = new Form1();
this.MainForm = F1;
}
protected override void OnCreateSplashScreen()
{splash_form f_splash = new splash_form();
this.SplashScreen = f_splash;
}
}
}
Bu hazırlıktan sonra proje çalıştırılırsa öncelikle adı WindowsFormsApplicationBase sınıfının
mirasçısı sınıfın SplashScreen özelliğine aktarılan form ekrana
getirilir. Bu form ekranda kısa bir süre durduktan sonra adı MainForm
özelliğine aktarılan form ekrana gelir.
Şimdi ise WindowsFormsApplicationBase sınıfı kaynaklı OnRun()
metodunu override edeceğiz. Bu amaçla yukarıda verilen sınıfı aşağıdaki gibi
düzenledik. Bu şartlarda bu sınıfın örneği alınıp Run() metodu
işletildiğinde önce OnRun, ardından OnCreateMainForm metodu işletilir.
public class App_sinifi: WindowsFormsApplicationBase
{protected override void OnCreateMainForm()
{
Form1 F1 = new Form1();
this.MainForm = F1;
}
protected override void OnCreateSplashScreen()
{
splash_form f_splash = new splash_form();
this.SplashScreen = f_splash;
}
protected override void OnRun()
{
base.OnRun();
}
}
Bu şartlarda OnRun metodunun varlığı ile yokluğu birdir.
Çünkü bu metodun orijinali zaten böyledir. Şimdi konu üzerinde düşünmenizi
sağlamak için bu metoda bir satır ekleyeceğiz.
public class App_sinifi: WindowsFormsApplicationBase
{protected override void OnCreateMainForm()
{
Form1 F1 = new Form1();
this.MainForm = F1;
}
protected
override void OnCreateSplashScreen()
{splash_form f_splash = new splash_form();
this.SplashScreen = f_splash;
}
protected
override void OnRun()
{base.OnRun();
MessageBox.Show("Uygulama çalışmaya başladı");
}
}
OnRun() metodunu bu şekilde değiştirip proje
çalıştırılırsa doğal olarak base.OnRun() satırı sayesinde uygulama
başlatılır. Tabii sıranın MessageBox sınıfının kullanıldığı satıra gelmesi için
uygulamanın çalışmasının sona ermesi gerekir. Tahmin edeceğiniz gibi bu
metottaki “base.OnRun()” satırı silinirse uygulama çalışmaz.
WindowsFormsApplicationBase sınıfı kaynaklı OnRun() metodu
uygulama çalışmaya başladıktan sonra işletilmektedir. Bu sınıfın ayrıca OnStartUp
adında bir metodu var. Kendi hazırladığım sınıfta bu metodu aşağıdaki gibi
Override ettik.
public class App_sinifi: WindowsFormsApplicationBase
{
protected override void OnCreateMainForm(){
{
Form1 F1 = new Form1();
this.MainForm = F1;
}
protected override void OnCreateSplashScreen()
{splash_form f_splash = new splash_form();
this.SplashScreen = f_splash;
}
protected override void OnRun()
{
MessageBox.Show("Uygulama çalışmaya başladı");
base.OnRun();
}
protected override bool OnStartup(StartupEventArgs eventArgs)
{
MessageBox.Show("Uygulama çalışmaya başlayacak");
return base.OnStartup(eventArgs);
}
}
Bu şartlarda uygulama çalıştırılırsa önce OnStartup,
ardından OnRun() metodu işletilir. OnRun() metodundan sonra sıra OnCreateMainForm() metoduna gelir.
OnCreateMainForm metodundan sonra sıra başlangıç formunun Load olayını temsil
eden metoda gelmektedir.
Bir blogda 3 yıl önce rastladığım bir yorum (*)
Evet Serkan hocam. Ben de memik hocamın delphi 7.0 kitabını 1 haftada bitirmiştim. 2. hafta ise uygulamalı olarak kitabı bitirmiştim. 1 ay sürmemişti ki, işime yarayacak kadar pascal dili öğrenmiştim. Hem de daha önce pascal hakkında bir fikir sahibi değildim ve pascal sentax’ları C diline yakın olduğu için C ye geçmem çok kolay olmuştu. Şimdi ise C# öğrenmeye çalışıyorum. Memik hocamın C# başlangıç pdf ini 1 kere okumak bana yetti. Gerçekten memik hoca, ennn düşük zekalılara bile herhangi bir yazılım dilini çok rahat öğretebilir, örnek: ben :)
not: Memik hoca C# ile web uygulamalarına ağırlık veren bir kitap yazsa tam süper olacak.
* Yoruma birkaç noktalama işareti ekleme dışında müdahale edilmedi.
17 Ağustos 2017 Perşembe
Richard Feynman
Dünyaca
ünlü fizikçi Richard Feynman konu öğrenme olunca ilginç
fikirlere sahiptir. Feynman’dan söz etmeden önce yıllar önce yaşadığım bir olayı
anlatayım.
Yaklaşık
15 yıl önce hem edebiyat bilgisi hem de edebi metinler üretme becerisi gayet iyi
olan bir arkadaşla ilk tanıştığımız günlerde, öğrenme-yazma süreciyle ilgili
karşılıklı fikir alışverişlerimiz olmuştu.
Aradan 15
yıl geçtikten sonra bir gün bu arkadaşım, Feynman’ın öğrenme konusundaki
görüşlerini özetleyen bir makaleye rastlar ve okur. Aklına hemen 15 yıl önceki
konuşmalarımız gelir. Bana gönderdiği mesaj şu anlamı içeriyordu: “Memik, bu
bilim adamı seninle aynı fikirdeymiş”.
Arkadaşın
linkini gönderdiği makaleyi okuyunca hayretler içinde kaldım ve aynı gün Feynman’ın
yayınlanmış bütün kitaplarını sipariş ettim. O güne kadar, Richard Feynman benim için sadece adını duyduğum bir fizikçiydi.
Özetle Feynman
diyor ki, öğrenmede başarılı olmak için başkalarına anlatıyormuş gibi notlar
hazırlayın.
Şimdi
gelelim bu kısa notu neden yazdığıma. Bu notu bir blogda rastladığım şu cümle
bana yazdırdı: “Interfaceler yapı olarak classlara
benzerler kendilerine ait özellikler ve metotları vardır.”
Genç arkadaşlara önerim şudur: Feynman’ın
önerisine uyun ama öğrenmek için hazırladığınız notları yayınlarsanız
başkalarını yanlış yönlendirebilirsiniz.
16 Ağustos 2017 Çarşamba
Bilinçli mi bilinçsiz mi yoksa bilinçaltı mı?
Bu kısa yazı C#, Visaul
Basic ve Java kodu yazanlar için yazıldı.
Saydığım bu dillerde
yazılan kodlarda sıklıkla bir tip başka tipe dönüştürülür. Bazen bu tip
dönüştürme derleyiciye bırakılır. Örneğin byte bir değişkenin içeriği int
tipindeki değişkene aktarmak gibi. Bu dönüştürmede bilgi kaybı riski
olmadığından programcının bir şey yapmasına gerek yoktur. Derleyici geri planda
bu dönüştürmeyi yapıyor.
Ancak bazen dönüştürme işlemi derleyiciye bırakılmaz. Hatta derleyici, bu dönüştürmeyi bana bırakma sen yap der.
Özetle dönüştürme geri
planda derleyici tarafından yapılıyorsa buna kapalı (implicit) dönüştürme,
dönüştürmeyi derleyici değil programcı yapıyorsa (casting operatörü ile) buna
açık (explicit) dönüştürme demek gerekir.
Birçok kaynakta nedense bu
dönüştürmelerden “bilinçsiz” ve “bilinçli” diye söz ediliyor. Belki ben de bu adlandırmalardan etkilenip dönüştürmelerden bilinçli-bilinçsiz diye söz etmişimdir.
Çocuklara Kod Yazdırmak
Dün Chip Dergisinin
sitesinde Türkiye’nin en eski bilişim dergicilerinden Cenk Tarhan, Microsoft’un
Açık Akademi’nin Yaz Okulu adlı eğitimleri dolayısıyla Microsoft’un Türkiye
merkezine gitmiş ve Microsoft çalışanı Behice Funda ile söyleşi yapmıştı.
Söyleşide, Behice hanım,
bazı ülkelerde çocuklara 5 yaşından itibaren kod yazdırılmaya başlatıldığını
söylüyordu. Bu görüşü duymaz, facebook hesabımda “5 yaşındaki çocuğa kod
yazdırmak olsa olsa çocuğu geri zekalı yapmayı çalışmaktır. Bırakın çocuk oyun
oynasın, masal okusun, çizgi film izlesin ve bilgisayardan tabletten uzak
dursun.” demiştim.
Her 3-4 yılda bir mevcut
teknolojilerin bazıları yok oluyorsa, bazıları ise köklü değişimler geçiriyorsa
çocuklara ve gençlere kazandırılması gereken beceri, çabuk öğrenmedir, analiz
becerisine sahip olmaktır, soyut düşünebilmektir ve hayal kurma alışkanlığını kazanmaktır.
* Soyut düşünme becerisi matematik ile kazanılır,
* Hayal kurma becerisi masal ve roman okumayla geliştirilir,
* Analiz becerisi ise öğrendiklerini, gördüklerini yaşadıklarını anlatmakla, yazmakla kazanılır.
Üzerinde çokça düşünülmesi, kafa yorulması gereken bir konudur bu. Bunlar ilk aklıma gelenlerdir.
15 Ağustos 2017 Salı
Kalıtım Interface’le mi sağlanır
C#, Visual Basic ve Java gibi nesneye yönelik programlama ilkelerine
bağlı dillerde çoklu kalıtım desteği yoktur. Bu eksikliğin etkileri değişik
şekillerde giderilmeye çalışılmaktadır. Örneğin Java’da inner class
hazırlanarak.. Eğer herhangi bir yerde interface’lerle çoklu kalıtım
yapıldığını duyar veya okursanız bir yanlış anlaşılma olduğunu düşünmekte bizce fayda
vardır.
“Arayüz ile C# içerisinde bir nesneye birden fazla
nesneden kalıtım yapabilme imkanı sunuluyor. Bunun adı ise çoklu kalıtımdır.
Arayüz sadece bu maksatla kullanılmamakla birlikte tek bir arayüz
ile kalıtım yapılabilir. “
14 Ağustos 2017 Pazartesi
D&R'da Java 8 Kitabım
İlgilendiğim bir kitabı satın almak üzere D&R'ı ziyaret edince yakın bir zamanda yayınlanan Java 8 kitabımın oldukça indirimli olarak satıldığını gördüm.
Java 8 kitabını edinebileceğiniz sitelerden birisi.
Kitap İncelemeleri
Programcılık üzerine ilk yazılarımı bundan tam 25 yıl önce
yazmış ve zamanın çok satan 2 dergisinde aylarca dizi halinde yayınlamıştım.
Programcılık üzerine yazmaya başlayınca ister istemez programcılık kitaplarıyla ilgili söylemek istediklerim oluyordu. O günlerde internet olmadığı için kitaplarla ilgili notlarımı derleyip dergilerde yayınlamaya başlamıştım. Yani Türkiye’de programcılık kitapları üzerinde ilk incelemeleri ve kitap eleştirileri tarafımdan yapılmıştı.
Sonra kendim programcılık kitapları yazmaya başlayınca etik olmayacağı düşüncesi ile başka yazarların kitaplarını incelemeyi bırakmıştım.
Bundan 12 yıl kadar önce yerli bir yazarla sorun yaşayınca programcılık kitaplarına tümden kayıtsız davranmaya, kitaplığıma sokmamaya başladım. Tabi buna, yayıncılar tarafından hediye edilen birkaç kitabı dahil etmiyorum.
Bundan birkaç gün önce bir programcılık kitabının “İçindekiler” tablosunun PDF haline rastlayınca meraktan biraz inceledim. Bana bu kısa metni yazdıran “İçindekiler” tablosunda çok sayıda yazım hatasını görünce...
Programcılık üzerine yazanların en eskisi olmama rağmen mevcut kitapları okumuyorum, üzerine yazmıyorum.
13 Ağustos 2017 Pazar
İş Başvurusu Soruları
İş başvurusu yapan programcılara mülakatta sıklıkla abstract sınıflar ile interface’lerin farklarının sorulduğu biliniyor. Bizce C#’ın this’i, Visual Basic’in Me’si ve Java’nın this’i de sorulmalıdır.
Elinizin altında Visual Studio veya C#/Java derleyicisi yokken birisi size "bize this'i anlatın" deseydi neler söylerdiniz?
8 Ağustos 2017 Salı
Programcılık Kavramları
Programcılık üzerine yazarken yeni bir kavramla
karşılaştığımda biraz araştırıp söz konusu kavrama Türkçede ne ad verildiğine
bakarım. Birden fazla Türkçe karşılığın olduğu durumlarda yaygın olanı
kullanırım. Aynı davranışı Object Oriented Programming için de göstermiştim.
Zamanında Object Oriented Programming karşılığı olarak “Nesneye Yönelik
Programcılık” yaygın kullanıldığını fark edince bunda karar kılmıştım.
Birkaç blog sitesi dolaşsanız veya kitapların içindekiler
sayfalarına baksanız, herkesin kafasına göre OOP’ye farklı bir Türkçe karşılık
verdiğini görürsünüz. İşte bir kaçı:
Nesneye Yönelik Programcılık
Nesneye Dayalı ProgramcılıkNesne Yönelimli Programlama
Nesne Tabanlı Programlama
Bu neden mi böyle?
Bakıyorsun henüz yolun başında olan öğrenci bir arkadaş blogunda
programcılık üzerine yazarken İngilizce haliyle karşılaştığı kavrama Türkçe
karşılık bulmaya soyunup çeviri yaparak bu kavrama kendince bir karşılık
öneriyor. Belki de İngilizce kelimeye Türkçe karşılık aramak yerinde daha önce başkaları
ne kullanmış bir baksalar bu kadar karmaşa olmayacak.5 Ağustos 2017 Cumartesi
İndeksleyicileri Anlatırken Konuyu Uzatmak
C# üzerine
çalışırken sıra indeksleyicilere gelince, konuyu gereğinden fazla uzattığımız
sanısına kapıldık. Bu nedenle hemen yazmaya ara verip bu “uzatma sanısına” kafa
yorduk. Sonunda hazırladığımız metne aşağıda verilen 2 paragrafı eklemeyi uygun
gördük.
“Bazı okurlar
konuyu uzattığımızı düşüneceklerdir. Daha önce C# uygulaması geliştirip bir
şekilde bu kitabı inceleme imkanı bulanlar indeksleyicilerin anlatıldığı bu
bölüme şöyle bir baktıklarında, konuyu gereksiz yere uzattığımızı düşünmeleri
ihtimal dahilindedir. Bu nedenle yukarıdaki sayfaları kaleme aldıktan sonra acaba
konuyu gereksiz yere fazla mı uzattık diye kendimizi sorguladık.
En kestirme değerlendirmenin mevcut kaynakları incelemek olduğuna karar verdik. Bu düşünce ile yıllardır el bile sürmediğimiz birkaç C# kitabında indeksleyicilerin anlatıldığı bölümlerin başlangıç açıklamalarına baktık. Bununla da yetinmedik, google ile arama yapıp blog sitelerinde birkaç indexer konulu makale bulup inceledik. En son olarak youtube’da birkaç video’yu izleyince indexer’ları anlatırken konuyu uzatma kaygımızın yersiz olduğuna karar verdik. Çünkü insanların indexer’ları anlatırken çok zorlandıklarını gördük. Tecrübeli kişiler indexer’ları anlatırken bu kadar zorlandıklarına göre henüz yolun başında olanların anlamaları da bir o kadar zor olmalıdır.“
Java 8 Kitabı İçin Örnek Bölüm
Java 8 kitabında
konuların nasıl ele alındığını, anlatım dilinin nasıl olduğunu merak edenler
için standart bir bölüm olan “Paket Hazırlamak ve Kullanmak” adlı 4. bölümünü
PDF olarak düzenleyip turbobit.net’e yükledik. İsteyenler indirebilir.
http://www.seckin.com.tr/f/seckin/kitap_dosya/9789750242816.pdf
1 Ağustos 2017 Salı
2017 model “Programcılar İçin Yazarlık Notları”
Bundan yaklaşık 10
yıl kadar tecrübeli bilişim yazarı sıfatıyla “Programcılar İçin Yazarlık Dersleri”
başlığı altında neredeyse küçük bir kitabı dolduracak 4 uzun makale yazmıştım.
Bu makaleleri o günlerde bloğumda yayınlamıştım. Kısa bir süre sonra değişik
nedenlerden dolayı bloğumla ilgilenmeyip kapanmasına seyirci kalınca yazdığım
çok sayıda makale ulaşılmaz duruma düştü. Ötesi, blog için yazdıklarımı ben de
unutmuştum.
“Programcılar İçin
Yazarlık Dersleri” adlı makaleleri yazmak çok zamanımı almıştı. Bu nedenle
yıllar sonra tekrar yazmaya başlayınca eski yazılarımdan ilk hatırladığım oldu.
Eski diskleri karıştırınca bu 4 uzun yazının karşımda durduğunu fark ettim.
“Ders” sözcüğü
çoktandır bana sevimsiz geldiği bu yazıların adını “Programcılar İçin Yazarlık
Notları” olarak değiştirdim. Tekrar yayınlamadan okuyup elden geçireceğim. Olur ya, 10 yıl önce, şimdi katılmadığım
görüşler ileri sürmüş olabilirdim.
"Konu ister programcılık ister edebiyat ister bilim ister siyaset olsun bazı yazarların yazdığı köşe yazısını, makaleyi, romanı veya incelemeyi kolay okursunuz. Yazıyı okuyup bitirdiğinizde harpten çıkmış gibi kendinizi yorgun hissetmezsiniz. Bazı yazarların yazdıklarını ise kendinizi zorlamanıza rağmen yazının sonunu getiremez ve yarıda kesersiniz. Kolay okunan, okuru yormayan yazılar yazmanın tek ve net bir formülü olmasa bile bizce en önemli nokta kurulan cümlelerin şeklidir."
Java 8 Kitabımızın İçindekiler Tablosu
Java 8 kitabımızda hangi konuların işlendiğini ve bu konulara kitapta ne kadar yer verildiğini merak edenler için "içindekiler" tablosunun az ayrıntı içeren halini buraya aktardık. Yakın bir zamanda, bu kitapta Java'nın nasıl anlatıldığı konusunda fikir edinmek isteyenler için bir bölüm PDF olarak yayınlanacak.
1. Bölüm
3.Bölüm
JAVA İLE ÇALIŞMAYA BAŞLAMAK---------------------------------- 1
2.Bölüm
NETBEANS İLE JAVA UYGULAMASI GELİŞTİRMEK-------------- 41
ECLIPSE İLE JAVA UYGULAMASI GELİŞTİRMEK----------------- 65
4. Bölüm
PAKET HAZIRLAMAK ve KULLANMAK----------------------------- 83
5. Bölüm
OPERATÖRLER------------------------------------------------------ 97
6. Bölüm
BLOK KONTROL DEYİMLERİ------------------------------------- 107
7. Bölüm
DEĞİŞKEN TANIMLAMAK ve KULLANMAK--------------------- 115
8. Bölüm
DİZİ DEĞİŞKENLER----------------------------------------------- 139
9. Bölüm
STRING İŞLEMLERİ ve MATH SINIFI--------------------------- 151
10. Bölüm
TARİH ve ZAMAN İŞLEMLERİ----------------------------------- 165
11. Bölüm
CLASS’lar ve NESNEYE YÖNELİK PROGRAMCILIK------------ 175
12. Bölüm
METOT HAZIRLAMAK ve KULLANMAK-------------------------- 209
13. Bölüm
INTERFACE’ler - ARAYÜZLER------------------------------------- 223
14. Bölüm
INNER CLASS’lar---------------------------------------------------235
15. Bölüm
GENERIC SINIFLAR---------------------------------------------- 251
16. Bölüm
ENUM HAZIRLAMAK ve SCANNER SINIFI---------------------- 261
17. Bölüm
HATA YAKALAMAK ve
EXCEPTION SINIFLARI--------------- 273
18. Bölüm
KOLEKSİYONLAR - ARRAYLIST, STACK, QUEUE SINIFLARI - 287
19. Bölüm
DOSYA ve KLASÖR İŞLEMLERİ----------------------------------- 317
20. Bölüm
STREAM SINIFLARI İLE DOSYA İŞLEMLERİ-------------------- 327
21. Bölüm
CLIPBOARD SINIFI İLE PANO İŞLEMLERİ---------------------- 343
22. Bölüm
GRAFİK ve ÇİZİM İŞLEMLERİ------------------------------------ 351
23. Bölüm
LAYOUT SINIFLARI - YERLEŞİM DÜZENLEYİCİLERİ--------- 359
24. Bölüm
JFRAME ve JDESKTOPPANE SINIFI ----------------------------- 371
25. Bölüm
JBUTTON ve JTEXTFIELD SINIFLARININ BAZI OLAYLARI-- 399
26. Bölüm
DİYALOG KUTULARI --------------------------------------------- 421
27. Bölüm
SIK KULLANILAN KONTROLLER -------------------------------- 433
28. Bölüm
JTEXTFIELD, JTEXTAREA ve JFORMATTEDTEXTFIELD------- 453
29. Bölüm
JCOMBOBOX ve JLİST KONTROLÜ ----------------------------- 479
30. Bölüm
PANELLER, JLAYEREDPANE ve JSPLITPANE SINIFI-------- 505
31. Bölüm
MENÜ ve ARAÇ ÇUBUĞU HAZIRLAMAK ---------------------- 521
32. Bölüm
JTABLE KONTROLÜ---------------------------------------------- 547
33 Bölüm
SERİLEŞTİRME İŞLEMLERİ ------------------------------------ 555
34. Bölüm
DERBY VERİTABANLARI --------------------------------------- 565
35. Bölüm
MYSQL VERİTABANLARI ÜZERİNDE İŞLEM YAPMAK------- 579
36. Bölüm
SQL SERVER VERİTABANLARINI KULLANMAK--------------- 615
C# 3.0 ve Visual Basic 9 Kitaplarımız
Visual Studio 2008'in dolayısıyla .NET Framework .3.5 release olduğu aylarda önce C# 3.0, sonra Visual Basic 9.0 kitabını yazmıştım. Her ikisi de o günlerde yaklaşık 1000'er sayfaya sahiptiler. Henüz yeni bir teknoloji olan LINQ ve LINQ için dile eklenen yeni özellikler yeteri ayrıntıda incelenmemişti.
Bunun birinci
nedeni, LINQ teknolojisinin tutup tutmayacağının henüz belli olmaması, ikinci
nedeni ise kitabın sayfa sayısını daha fazla arttıramayışımızdı. Yeni de
2008-2009 yıllarında bu kitaplarla ilgili görüşüm değişmedi: O günün şartlarında
Türkçe yazılmış en iyi C# ve Visual Basic kitapları bunlardı.
20 Temmuz 2017 Perşembe
Java Kitabı Önsözü
Önsöz
Java konulu çok
sayıda kitap yayınlanıp piyasaya verilmişken, Youtube’da Java hakkında bilgi
verme kaygısıyla çekilen binlerce video varken, blog sitelerinde onbinlerle
ifade edilecek sayıda Java konulu makale yayınlanmış iken bu kitabı neden mi
yazıp yayınladık?Nedeni son derece basit; kolay okunan, ilk okumada anlaşılan Java kaynağı ihtiyacının olduğunu düşünmemizdir. Bu nedenle bu kitabı yazarken, önceliğimiz kolay okunmak ve hemen anlaşılmak oldu. Konular, bu kaygı gözetilerek sıralandı. Henüz anlatılmayan kavramlardan söz edilmemeye, işlevleri ve özellikleri hakkında bilgi verilmemiş sınıfları kullanmamaya dikkat ettik. Bu kitapta, öğrenilmesi zaman alan Java programlama diliyle ilgili olarak yazılan her cümlenin ilk okumada anlaşılmasını amaçladık.
Bu kitabı
okumaya, dolayısıyla Java öğrenmeye başlamadan önce hem NetBeans hem de Eclipse'i
indirip kullandığınız bilgisayara kurmanız önerilir. Çünkü kitapta Java'nın
temel özellikleri anlatılırken bazen Eclipse bazen de NetBeans kullanıldı. Bu kitabı
bitirip Java konusunda bilgi sahibi olduğunuzda istediğiniz IDE’yi tercih edip
uygulamalarınızı onunla geliştirmeye devam edebilirsiniz. Bu kitabı okumaya
başlamadan önce IDE’nizi seçtiyseniz kitapta diğer IDE’yle ilgili olarak
söylenenlere kayıtsız kalabilirsiniz. Örneğin NetBeans kullanıyorsanız, Eclipse
kullananlara yönelik olarak MySQL veritabanları üzerinde işlem yaparken gerek
duyulacak sürücüyü mysql.com’dan indirip kurma işleminin anlatıldığı sayfayı
okumadan atlayabilirsiniz.
Son yıllarda
yayınlanan kitapların yanında ilgili konuların anlatıldığı videolar veriliyor.
İnsanlar bu video filmleri izleyerek programcılıkla ilgili konuları daha kolay
anlayacağını düşünüyor. Bize göre, bu kitabı okuyup Java öğrenmeye çalışmak,
Java’yla ilgili olarak çekilen videoları izlemekten daha verimlidir, daha
anlaşılırdır.
Bu kitabı yazarken öncelikli hedeflerimizden birisi şuydu: Java programlama diliyle ilgili olarak bu kitapta bulunan herhangi bir konuyu okuyanların başka kaynaklara bakma ihtiyacını azaltmaktır. Başka bir deyişle bu kitabı okuyan birisinin okuduğunu anlamadığı için başka kaynaklara başvurmak zorunda kalmasın istedik.
Bu kitabı
yazarken kullandığımız bilgisayarda Windows kuruluydu. Bu nedenle kitap dahilinde
kurulan bazı cümlelerde ortamın Windows olduğu vurgulandı. Konu Java kodu
yazmak olduğunda kullanılan işletim sisteminin Windows, Mac veya Linux
olmasının koda olan etkisi yok gibidir.
Clipper 5.2 : İlk Kitabım
Clipper, programcılığa ilk merak sardığım yıllarda firmalar tarafından yaygın olarak kullanılan programlama dillerinden birisiydi. DOS ortamında çalışıyordu. Bir süre sonra Windows 3.1’in çıkmasıyla birlikte programcılar Windows ortamı için program yazabilecekleri programlama dili arayışına girmişlerdi.
O yıllarda herkes
Clipper’ın Windows versiyonunu beklerken o günlerin büyük yazılım firması CA
tarafından Clipper satın alınmıştı. Bir süre sonra Clipper’ın Windows versiyonunu
Visual Object olarak çıkardılar ama tutmadı. Derken Borland firması Delphi’yi
çıkardı. Delphi kısa sürede yaygın olarak kullanılmaya başlandı.
Programcılar kısa
sayılacak bir süre içinde Clipper ile uygulama geliştirmeyi bıraktılar. Clipper
gözden düşene kadar aradan geçen süre içinde Clipper kitabım 3 baskı yapmıştı ve muhtemelen Türkçe yazılan son Clipper kitabıydı. Çok
beğenilmişti. İnsanlar şaşırıyordu; çünkü önlerinde yabancı bir kitaptan takla
atılarak hazırlanmamış bir kitap vardı. Hem de yabancı kitaplardan daha kolay okunan, daha fazla pratik bilgi içeren..
Burada Clipper kitabımdan
yıllar sonra neden mi söz ettim? Çünkü Clipper 5.2 adını verdiğim kitap ilk
kitabımdı. Uzun sayılabilinecek bir aradan sonra tekrar programcılık üzerine
yazmaya başlayınca ilk kitabımı hatırladım.
Kaydol:
Kayıtlar (Atom)