27 Temmuz 2019 Cumartesi

JavaScript Öğreniyorum Kitabı Çıktı




2019 yılı ortası itibarıyla JavaScript konulu çok sayıda kitap yayınlanıp satışa sunulmuşken, YouTube’da JavaScript hakkında bilgi verme kaygısıyla çekilen binlerce video varken, blog sitelerinde on binlerle ifade edilecek sayıda JavaScript konulu makale yayınlanmış iken bu kitabı neden mi yazıp yayınladık? Kolay okunan, ilk okumada anlaşılan nesneye yönelik programcılık ağırlıklı JavaScript kaynağı ihtiyacının olduğunu düşünmemizdir.

https://www.seckin.com.tr/kitap/282517744

19 Şubat 2019 Salı

Bedava Yazılım Baldan Tatlıdır


Zamanında bir üniversitede verilmiş bir konferansın youtube yüklenmiş kaydını izliyorum.
Konuşmacının perdeye yansıttığı slaytlardan kullandığı bilgisayarın Apple marka olduğunu anlıyorum.
Konuşmacı bir ara sözü açık kaynak kodlu yazılıma getiriyor.
Özetle açık kaynak kodlu yazılımlar iyidir, diğerleri kötüdür demek istiyor.
Direk şunu dese hak vereceğim: Bedava yazılım baldan tatlıdır.
Garip olan taraf ise, konuşmacının kullandığı bilgisayardaki işletim sistemine yüklüce miktar bir ödeme yapmış olmasıdır.

17 Şubat 2019 Pazar

Video Hazırlamak




Bana soruyorlar, neden video çekmiyorsun?
Cevabım kısa: Video izleyerek programcılık öğrenmek en son başvurulması gereken yoldur.
Burada görselini verdiğim kitap bağlamında konuşmak gerekirse;
“Interface” adlı bölümü bu kitaptan okuyan birisi, günlerce C# programlama dilinde Interface'lerle ilgili bulabildiği bütün videoları izlesin; kitaptan öğrendiklerinin üzerine koyabilecekleri çok sınırlı kalacaktır. 

Ek: "Bu kısa notu yazıp burada yayınladıktan sonra youtube'da karşıma bir video serisi çıktı: Konusunda uzman olan arkadaşın birisi bir firmanın elemanlarına web uygulamalarını nasıl geliştireceğinden söz ediyor.

Seslerdden katıların en az 10 kişi olduğunu anlıyoruz.
Seslerden anladığımız başka bir önemli ayrıntı var: Eğitime katılanlar anlatılanları hem kolay izleyemiyorlar hem de sindirmekte zorlanıyorlar. 

Yani bu eğitime katılanlardan birisi olsaydım hoca ile kesin papaz olurduk."

30 Ekim 2017 Pazartesi

Kolay Okunan Notlar Hazırlamak



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.

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ırla­mak gerekir. C# uygu­laması dahilinde gerçekleşen olayları, Windows’la ilgili olaylar ile karıştır­mamak 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ık
Nesne 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.“