C# İle biLGİsayar programlama temelleri (C# Programlama Kitabı) Svetlin Nakov & Co



Yüklə 3,36 Mb.
səhifə1/31
tarix03.11.2017
ölçüsü3,36 Mb.
#28822
  1   2   3   4   5   6   7   8   9   ...   31


C# İLE BİLGİSAYAR PROGRAMLAMA TEMELLERİ

(C# Programlama Kitabı)



Svetlin Nakov & Co.


Dilyan Dimitrov

Hristo Germanov

Iliyan Murdanliev

Mihail Stoynov

Mihail Valkov

Mira Bivas

Nikolay Kostov

Nikolay Nedyalkov

Nikolay Vasilev

Pavel Donchev

Pavlina Hadjieva

Radoslav Ivanov

Radoslav Kirilov

Radoslav Todorov

Stanislav Zlatinov

Stefan Staev

Svetlin Nakov

Teodor Bozhikov

Teodor Stoev

Tsvyatko Konov

Vesselin Georgiev

Veselin Kolev

Yordan Pavlov

Yosif Yosifov



Sofia, 2013

C# İLE BİLGİSAYAR PROGRAMLAMA TEMELLERİ

(C# Programlama Kitabı)

© Svetlin Nakov & Co., 2013

Kitap aşağıdaki lisans koşulları altında serbestçe dağıtılır:


  1. Kitap okuyucuları (kullanıcılar) :




  • Elektronik veya kağıt formatta kitabın değiştirilmemiş kopyasını ücretsiz dağıtabilirler;

  • Kitap ve kaynak kod örneklerinin bir kısmını ya da onların değiştirilmiş hallerini, orijinal kaynağı, açıkça ilgili metin ya da kaynak kodunun orijinal yazar(lar)ını, bu lisans ve web sitesini www.introprogramming.info olarak belirtmeleri şartıyla eğitim ve ticari projeleri de dahil olmak üzere tüm niyet ve amaçlar için kullanabilirler;

  • Bunun kitabın kısımlarını veya değiştirilmiş kopyalarını (diğer dillere çeviri kitap veya diğer programlama dilleri ve platformlara adapte edilmesi dahil) ancak açıkça orijinal kaynak ve metin, kaynak kodu veya diğer malzemelerin yazarları, bu lisans ve proje resmi web sitesi olarak www.introprogramming.info belirtilerek ücretsiz olarak dağıtabilirler.



    1. Kitap okuyucuları (kullanıcılar) :




  • Kitabı veya bölümlerini kaynak kodu haricinde kâr amaçlı dağıtamazlar;

  • Kendi ihtiyaçları için değiştirirken kitaptan bu lisansı kaldıramazlar.


Bu kitapta belirtilen tüm markaların telif hakkı kendi sahiplerinde bulunmaktadır.


Resmi Web Sitesi:
http://www.introprogramming.info
ISBN 978-954-400-773-7

İçindekiler Tablosu


İçindekiler Tablosu 3

0.27.2 Bölüm 1: Programlamaya Giriş 26

1.9.2 Visual Studio Nedir? 65

2.3.8 Character Türü 90

2.4.1 Değişkenlerin Özellikleri 94

6.4.5 N^M Hesaplanması – Örnek 199

6.4.6 Birden Çok Değişkenli For-Döngüsü 200

9.4.1 Daha Yapılandırılmış Program ve Daha Fazla Okunabilir Kod 267

9.4.2 Yinelenen Koddan Kaçının 267

9.4.3 Kodun Yeniden Kullanımı 268



9.5 Metot Nasıl Bildirilir, Uygulanır, ve Çağrılır? 268

9.6 Metot Bildirimi 268

9.6.1 Nerede Metot Bildirimine İzin Verilmektedir? 268

9.6.2 Metot Bildirimi 269

9.6.3 Metot İmzası 270

9.6.4 Metot Adları 271

9.6.5 Metot Adlandırma Kuralları 271

9.6.6 Değiştiriciler 272

9.7 Metot Uygulaması (Yaratılması) 273

9.7.1 Metotun Gövdesi 273

9.7.2 Yerel Değişkenler 274

9.8 Metot Çağrılması 276

9.8.1 Metot Çağrıldığında Program Üzerindeki Denetimi Kim Alır? 276

9.8.2 Metot Nereden Çağrılabilir? 277

9.8.3 Metot Bildirimi ve Metot Çağrılması 278



9.9 Metot Parametreleri 279

9.9.1 Parametreli Metot Bildirimi 279

9.9.3 Değişen Argüman Sayısı 290

9.9.4 İsteğe Bağlı Parametreler ve Adlandırılmış Argümanlar 297

9.9.5 Metot Aşırı Yüklenmesi (Overloading) 298

9.9.6 Farklı Boyutta Üçgenler – Örnek 302



9.10 Bir Metottan Sonuç Döndürme 305

9.10.1 Sonuç Döndüren Bir Metotun Bildirilmesi 306

9.10.2 Dönen Değer Nasıl Kullanılır? 306

9.10.3 Dönen Değer Türü 307

9.10.4 “return” İşleci 307

9.10.5 Neden Döndürülen Değer Türü Metot İmzasının Bir Parçası Değildir? 310

9.10.6 Fahrenheit’tan Santigrat’a Dönüşüm – Örnek 311

9.10.7 İki Ay Arasındaki Fark – Örnek 313

9.10.8 Girdi Verisinin Doğrulanması – Örnek 316

9.10.9 Sıralama – Örnek 319



9.11 Metotları Kullanırken Edinilecek En İyi Alışkanlıklar 323

9.12 Alıştırmalar 324

10.4 Doğrudan ve Dolaylı Özyineleme 327

10.5 Özyinelemenin Sonlandırılması 327

10.6 Özyinelemeli Metot Oluşturulması 328

10.7 Faktoriyelin Özyinelemeli Hesaplanması 328

10.7.1 Özyinelemeli Tanım 328

10.7.2 Özyinelemeli Bağlılık Tespiti 328

10.7.3 Gerçekleştirilen Algoritma 329



10.8 Özyineleme veya Yineleme? 330

10.9 İç içe N Döngünün Simülasyonu 331

10.9.1 İç içe Döngüler – Özyinelemeli Yaklaşım 332

10.9.2 İç içe Döngüler – Yinelemeli Yaklaşım 335

10.9.3 Hangisi Daha İyi: Özyineleme veya Yineleme? 339

10.9.4 Fibonacci Sayıları – Özyinelemenin Yanlış Kullanımı 340

10.9.5 Fibonacci Sayıları – Özyinelemenin Doğru Kullanımı 341

10.9.6 Fibonacci Sayıları – Yinelemeli Çözüm 343

10.9.7 Özyineleme ve Yineleme – Daha Fazlası 344

10.9.8 Labirentte İz Sürmek – Örnek 345

10.9.9 Labirent Yolları – Özyinelemeli Algoritma 346

10.9.10 Labirent Yolları – Uygulama 348

10.9.11 Labirent Yolları – İz Kayıtları 350

10.9.12 Labirent Yolları – Programın Test Edilmesi 352

10.10 Özyineleme Kullanımı – Sonuçlar 356

10.11 Alıştırmalar 357

Bölüm 11. Nesneleri Oluşturma ve Kullanma 360

11.1 Bölümün İçindekileri 360

11.2 Sınıflar ve Nesneler 360

11.2.1 Nesne Yönelimli Programlama Nedir? 360

11.2.2 Nesne Nedir? 361

11.2.3 Sınıf Nedir? 361

11.2.4 Sınıflar, Öznitelikleri ve Davranışları 362

11.2.5 Nesneler, Sınıf Örnekleri 362



11.3 C# Sınıfları 362

11.3.1 C# Sınıfları Nedir? 363

11.3.2 Örnek Sınıf 364

11.3.3 Sistem Sınıfları 366



11.4 Nesneleri Oluşturma ve Kullanma 366

11.4.1 Nesneleri Oluşturma ve Bırakma 367

11.4.2 Bir Nesnenin Alan Değişkenlerine Erişim 369

11.4.3 Nesne Metotlarının Çağrılması 370

11.4.4 Kurucular 371

11.4.5 Statik Veri Alanları, Özellik ve Metotlar 373

11.4.6 C# Sistem Sınıfları – Örnekler 376

11.5 Ad Kaplamı 383

11.5.1 C# Ad Kaplamları 384

11.5.2 Ad Kaplamlarının Tanımlanması 384

11.5.3 İç İçe Ad Kaplamları 385

11.5.4 Sınıfların Tam Adları 385

11.5.5 Ad Kaplamı Eklenmesi 386

11.5.6 Ad Kaplamının Kullanılması – Örnek 387

11.6 Alıştırmalar 389

Bölüm 12. İstisnai Durum 390

İşleme 390

12.1 Bölümün İçindekileri 390

12.2 İstisnai Durum Nedir? 391

12.2.1 İstisnai Durumlar 392

12.2.2 İstisnai Durumların Tespiti ve İşlenmesi 392

12.2.3 Nesne Yönelimli Programlamada İstisnalar 392

12.2.4 .NET İstisnaları 393

12.2.5 İstisna Fırlatan Bir Örnek Kod 393

12.2.6 İstisnalar Nasıl Çalışır? 395

12.2.7 C# İstisnalarını Yakalamak 395

12.2.8 try-catch Programlama Yapısı 396

12.2.9 İstisnaları Yakalamak - Örnek 397

12.2.10 Yığıt İzlencesi 398

12.2.11 Yığıt İzlencesi – Örnek 399

12.2.12 Yığıt İzlencesini Okuma 399

12.2.12 İstisnaların Fırlatılması (throw Yapısıyla) 401



12.3 İstisna Hiyerarşisi 401

12.3.1 Exception Sınıfı 402

12.3.2 İstisna – Kurucular, Metotları ve Özellikleri 402

12.3.3 Uygulamadaki İstisnalar ve Sistem İstisnaları 403



12.4 İstisna Fırlatmak ve Yakalamak 404

12.4.1 İç içe İstisnalar 404

12.4.2 İç içe İstisnalarla Kayıtlı Yığıt İzlencesi Nasıl Okunur? 405

12.4.3 İstisnaların Görselleştirilmesi 407

12.4.4 Hangi İstisnalar İşlenmeli ve Hangileri İşlenmemeli? 408

12.4.5 Main() Metotundan İstisna Fırlatılması – Örnek 408

12.4.6 Farklı Düzeyde İstisnaların Yakalanması – Örnek 409

12.5 try-finally Yapısı 410

12.5.1 try-finally Ne Zaman Kullanılmalıdır? 411

12.5.2 Kaynak Temizleme – Sorunu Tanımlama 412

12.5.3 Kaynak Temizleme – Problemin Çözülmesi 412

12.5.4 Kaynak Temizleme – Daha İyi Bir Çözüm 414

12.5.5 Birden Fazla Kaynak Temizleme 414



12.6 Idisposable ve "using" Deyimi 415

12.6.1 IDisposable 416

12.6.2 “using” Anahtar Sözcüğü 416

12.6.3 İç içe “using” İfadeleri 417

12.6.4 “using” İfadesi Ne Zaman Kullanılır? 417

12.7 İstisnaları Kullanmanın Avantajları 419

12.7.1 İstisna İşleme Kodunun Ayrılması 419

12.7.2 Farklı Hata Türlerini Gruplandırma 421

12.7.3 İstisnaları Yakalamak için En Uygun Yer Seçimi 422




Önsöz
Eğer programlamayı ciddiye almak istiyorsanız, doğru kitabı edindiniz. Gerçekten! Bu kitapla programlamaya ilk adımları yapabilirsiniz. Böylece modern programlama dillerini ve yazılım geliştirme teknolojilerini öğrenmeniz için uzun yolculuğa uçan bir başlangıç ​​alacaksınız. Bu kitap, programlamanın son 15 yıl içinde önemli ölçüde değişmeyen temel ilke ve kavramlarını öğretir.
C# takip etmek istediğiniz dil olmasa bile bu kitabı okumak için tereddüt etmeyin. İlerleyeceğiniz dil hangisi olursa olsun, burada size vereceğimiz bilgi geçerli olacaktır, çünkü bu kitap size programcılar gibi düşünmeyi öğretecek. Biz size pratik algoritmik problemlerin çözümü için nasıl program yazılacağını öğreteceğiz ve algoritmaları ortaya atma (ve uygulama) becerilerini sizde oluşturacağız ve çeşitli veri yapılarını kullanacağız.
Size göründüğü kadar imkansız gelecek ama, bilgisayar programları yazmanın tüm temel prensipleri son 15 yıl içinde çok değişmedi. Programlama dilleri değişiyor, teknolojiler modernize oluyor, entegre geliştirme ortamları daha gelişiyor, ancak programlamanın temel prensipleri aynı kalmıştır. Yeni başlayanlar algoritmik düşünmeyi öğrendikleri zaman, ve sonra bir sorunu çözmek için içgüdüsel olarak bir dizi adımlar içine bölmeyi öğrendikleri zaman, bunun yanı sıra uygun veri yapılarını seçmeyi öğrendikleri zaman ve yüksek-kaliteli programlama kodu yazdıklarında programcı olurlar. Bu becerileri kazandıktan sonra, kolayca yeni bir dil ve çeşitli teknolojileri öğrenebilirsiniz - Web programlama, HTML5 ve JavaScript gibi, mobil geliştirme, veritabanları ve SQL, XML, REST, ASP.NET, Java EE, Python, Ruby ve daha yüzlercesi.

0.1 Kitap Hakkında
Bu kitap, bir programcı gibi düşünmeyi size öğretmek için tasarlanmıştır ve C# dili, Java, C++, PHP veya Python gibi diğer modern programlama dilleri ile yer değiştirebilecek sadece bir araçtır. Bu programlama üzerine bir kitaptır, C# üzerine bir kitap değildir!
0.2 Tercümanlık Hataları İçin Lütfen Özür Dilerim!
Bu kitap gönüllü yazılım mühendislerinden oluşan büyük bir ekip tarafından aslında Bulgarca yazılmış ve İngilizce’ye çevrilmiş nüshası daha sonra Türkçe’ye çevrilmiştir. Çevirmenin anadili İngilizce olmadığı için pek çok hatalar ve özensiz çeviri bulabilirsiniz. Lütfen bizi bağışlayın! Çoğu Bulgar olan 70’i aşkın kişi bu kitabın asıl projesine katıldı. Tüm ekip bu kitabı okumayı seçtiğiniz için sizi tebrik ediyor ve içeriğinin bulabileceğiniz küçük hatalar ve yanlışlıklardan daha önemli olduğuna inanıyor. Tadını çıkarın!

0.3 Bu Kitapta Kimler Hedefleniyor?
Bu kitap yeni başlayanlar için uygundur. Bugüne kadar programlamayı ciddi olarak yapmayan bunu yapmaya başlamak isteyen herkes için tasarlanmıştır. Bu kitap sıfırdan başlar ve programlama temellerini adım adım tanıtır. Bir yazılım mühendisi olmak için kesinlikle gereken herşeyi ve bir yazılım firmasında çalışmayı size öğretmeyecektir, ama o teknolojik bilgi ve becerileri kurabileceğiniz zemini hazırlayacaktır ve onlar aracılığıyla programlamayı mesleğiniz haline getirmeniz mümkün olacaktır.
Eğer hiç bir bilgisayar programı yazmamışsanız, merak etmeyin. Bu kitap programlamayı size en baştan öğretecektir. Öncesinden herhangi bir bilgi ya da yetenek gerekli değildir. Tüm ihtiyacınız, bazı temel bilgisayar okuma yazma ve programlama becerisidir. Kalan kısmı kitaptan elde etmeyi bekleyebilirsiniz.
Eğer zaten basit programlar yazıyorsanız veya resmi bir kurumda (okul, üniversite vb.) programlama okuma tecrübeniz varsa, veya arkadaşlarınızla kodlamışsanız, herşeyi bildiğinizi düşünmeyin! Bu kitabı okuyunca kaçırdığınız çok şeyin farkında olabilirsiniz. Bu kitap yeni başlayanlar içindir, ancak deneyimli profesyonel programcıların bile eksikliğini duyduğu beceri ve kavramları öğretebilir. Yazılım şirketleri kendi kendini eğitmiş nice insanlarla yürütülüyor, yıllardır programlama yapmak için maaş almış olmalarına rağmen, programlama temellerine dair hiçbir kavrayışa sahip olmamalarına rağmen, ve bir karma tablo nedir hiçbir fikirleri olmamalarına rağmen, çokbiçimliliğin nasıl çalıştığına ve bit düzeyinde işlenen operasyonlar ile nasıl çalışacaklarına dair hiçbir fikirleri olmamalarına rağmen. Onlar gibi olmayın! Önce programlama temellerini öğrenin ve ardından teknolojileri. Aksi takdirde programlama becerileriniz riskte kalacaktır, yaşamınız boyunca değilse bile az yada çok yıllar boyunca.

Eğer, diğer yandan, programlama deneyiminiz varsa, bu kitabı ayrıntılarıyla inceleyiniz ve size hitap edip etmediğini araştırmak için ele aldığımız tüm konulara aşina olup olmadığınızı görün. "Veri Yapıları ve Algoritmaların Karmaşıklığı", "Nesne Tabanlı Programlama Prensipleri", "Problem Çözme Metodolojisi" ve "Yüksek Kalite Programlama Kodu" bölümlerine özellikle yakın bir göz atın. Deneyiminiz birkaç yıl olsa bile, veri yapıları ile çalışmanız gerektiğinde yardıma ihtiyaç duyabilirsiniz; bir algoritmanın karmaşıklığını değerlendirmeniz mümkün olmayabilir; derinlemesine (UML ve tasarım şablonları dahil) nesne yönelimli programlama kavramlarına hakim olmayabilir; ve yüksek-kaliteli programlama kodu yazmak için en iyi alıştırmalar ile tanışmış olmayabilirsiniz.
Bu tüm programlama kitaplarında yer almayan çok önemli konulardır, bu nedenle onları atlamayarak yerinde bir davranış sergileyeceksiniz!

0.4 Öncesinden Bilgi Gerekli Değildir!
Bu kitabı okumaya başlamadan önce okuyuculardan herhangi bir programlama bilgisine sahip olmalarını beklemiyoruz. Kitap içeriğini okuyabilmeniz ve kavrayabilmeniz için bilgi teknolojisi veya bilgisayar bilimi okumanız da gerekli değildir. Kitap sıfırdan başlar ve yavaş yavaş sizde programlama ilgisi uyandırır ve diğer kaynaklardan onları bulup çıkarmanız gerekli değildir. Derleyici, hata ayıklayıcı, entegre geliştirme ortamı, değişken, dizi, döngü, konsol, dize, veri yapısı, algoritma, algoritma karmaşıklığı, sınıf veya nesne hakkında herhangi bir şey bilmiyorsanız, telaşa kapılmayın. Bu kitaptan, tüm bu terimleri öğreneceksiniz ve daha birçoğunu ve yavaş yavaş günlük işlerinizde sürekli onları kullanmaya alışacaksınız. Sadece kitabı sürekli okuyun ve egzersizleri mutlaka yerine getirin.
Elbette, sonuçta, bilgisayar bilimi ve bilgi teknolojileri ile ilgili bilgi sahibi olmanız çok faydalıdır. Eğer, üniversitede bilgisayar bilimi alanında veya okulda bilgi teknolojisi eğitimi almışsanız, bu sadece yardımcı rol oynar, ancak zorunluluk değildir. Bilgisayar teknolojisi ile çok az ortak yönü olan turizm, hukuk veya diğer disiplinleri anadal olarak okumuşsanız, hâlâ iyi bir programcı haline gelebilirsiniz, arzunuz var olduğu sürece. Yazılım sektöründe bilgisayar bilimi veya ilgili derecesi olmadan iyi geliştiriciler çok sayıda var olagelmiştir.
Temel bilgisayar okur yazarlığına sahip olmanız bekleniyor, çünkü dosya, sabit disk ve ağ bağdaştırıcısının ne olduğunu açıklamayacağız, ne de fareyi nasıl taşıyacağınızı veya bir klavyede nasıl yazılacağını. Bir bilgisayar ile nasıl çalışacağınızı ve İnternet’i nasıl kullanacağınızı bilmenizi bekliyoruz.
Okuyucuların İngilizce’yi en azından temelde bilmeleri önerilir. Programlama üzerine hazırlanmış web sitelerinde bulunan her gün kullanacağınız ve her zaman okuyabileceğiniz tüm belgeler ve tüm dokümantasyon büyük ihtimalle İngilizce dilinde yazılmış olmalıdır. Bir programcının mesleğinde, İngilizce kesinlikle gereklidir. Ne kadar çabuk öğrenirseniz, o kadar iyidir.






Biraz dahi olsa, İngilizce öğrenmeden programcı olmayı umuyorsanız

yanılıyorsunuz! Bu sadece naif bir beklentidir. Eğer İngilizce

bilmiyorsanız, İngilizce öğreten bir ders alınız ve daha sonra teknik

literatür okumaya başlayın, bilmediğiniz sözcükleri yazarak öğrenmeye

alışınız. Teknik İngilizce’nin kısa sürede öğrenmesi kolay olduğunu

anlayacaksınız.



0.5 Bu Kitabın Kapsamı Nedir?
Bu kitap programlama temellerini kapsamaktadır. Değişkenleri nasıl tanımlayacağınızı ve kullanacağınızı, basit veri yapıları (sayılar gibi) ile nasıl çalışacağınızı, mantıksal ifadeler, koşullu ifadeler ve döngüleri nasıl düzenleyeceğinizi, konsola nasıl yazdıracağınızı, dizileri nasıl kullanacağınızı, sayı sistemleri ile nasıl çalışacağınızı, yöntemleri nasıl tanımlayacağınızı ve kullanacağınızı ve nesneleri nasıl oluşturacağınızı ve kullanacağınızı öğretecek. Temel programlama bilgisi ile birlikte, bu kitap dize işleme, istisnai durum işleme, karmaşık veri yapılarını (ağaçlar ve karma tabloları gibi) kullanmak, metin dosyaları ile çalışmak, isteğe uyarlı sınıf tanımlamak, ve LINQ sorguları ile çalışmak gibi daha karmaşık kavramları anlamanıza yardımcı olacaktır. Nesne yönelimli programlama kavramları - modern yazılım geliştirme için kurulu bir yaklaşım derinlemesine ele alınacaktır. Son olarak, yüksek kalitede programlar yazma alıştırmaları ve gerçek dünya programlama sorunlarını çözmek ile karşı karşıya olacaksınız. Bu kitap programlama problemlerinin çözümü ile genel olarak algoritmik problemlere yönelik tam bir metodoloji sunar, ve bunun bir kaç örnek konu ve programlama sınavları ile nasıl uygulanacağını gösterir. Programlama üzerine başka bir kitapta aramanıza gerek yoktur!

0.6 Bu Kitabın Öğretmedikleri Nelerdir?

İlk söz olarak, ancak önemsiz değil, bu kitap “Yazılım Mühendisliği” ünvanı derecesi adına size herhangi bir ödül vermeyecektir! Bu kitap .NET platformunu size anlatmayacaktır, veritabanları ile nasıl çalışmanız gerektiğini, dinamik web sitelerini nasıl oluşturacağınızı ve mobil uygulamalar geliştirmeyi, window tabanlı grafik kullanıcı arayüzünü (GUI) nasıl oluşturacağınızı ve zengin Internet uygulamalarını (RIA) size öğretmeyecektir. Skype, Firefox, MS Word veya Facebook gibi sosyal ağlar ve Amazon.com gibi satış sitelerine ait olan karmaşık yazılım uygulamaları ve sistemleri geliştirmeyi öğrenmeyeceksiniz. Ve başka hiçbir kitap tek başına bunu başaracak gibi görünmüyor! Bu tür projelerin yürütülmesi için gerekli olan çalışmaların tümü çok uzun yıllar boyu sürer. Bu kitapta yeralan bilgi ve deneyim gelecekteki müstakbel programcılar için sadece harika bir başlangıçtır.
Bu kitaptan, yazılım mühendisliğini öğrenmeyeceksiniz, takım çalışmasını ve bir yazılım şirketinin gerçek projeler üzerinde çalışmak için sizi hazırlamasını anlamak da pek mümkün değildir. Tüm bunları öğrenmek için birkaç kitap daha ve ekstra dersler gerekir, ancak bu kitapta harcayacağınız zaman için pişman olmanıza gerek yok, çünkü programlama temelleri ile başlayan doğru seçimde zaten bulundunuz. Web geliştirme, mobil uygulamalar ve veritabanları ile ilk etapta etkileşmek daha kötü sonuçlara mal olabilirdi. En azından uzman programcı olma şansınız var, bunun için derinlemesine programlama ve teknoloji bilgisine sahip olacaksınız. Programlama temellerini bir kere elde ettikten sonra, veritabanları, ardı sıra web uygulamalarını okumak ve anlamak nispeten size kolay gelecektir. SQL, ASP.NET, AJAX, XAML veya WinRT ile durum böyle değildir.
Meslektaşlarınızın bazıları doğrudan web ya da mobil uygulamalar ve veritabanları ile programlamaya başlamışlardır, bir dizi, bir liste veya karma tablo ne olduğunu bilmek onların harcı olmasa da, bunu zor yoldan yapmak için baştan yola çıkarlar. PHP ve MySQL ile düşük kaliteli web sitelerini yapmayı öğrendikten profesyonel olmak için de bir çok yol denerler. Web teknolojileri ve veritabanlarını sizin için güzel bir öğrenme alanıdır, ancak önce programlama öğrenilmelidir! Çünkü eğer algoritmik düşünmeye zaman ayırırsanız, programlama sorunlarını çözmeyi bildikten sonra bir teknoloji öğrenmek temelleri bilirseniz sizin için kolaylaşır. Bu her şeyden daha önemlidir.






Web uygulamaları ve/veya veritabanları ile programlamaya başlangıç

bir yabancı dili öğrenmek için yeni başlayanların onu dilin kendi

alfabesinden veya bir ders kitabından okumaya başlamak yerine bir

klasik romandan okumaya başlamaları kadar yanlış bir görüş teşkil

etmektedir. Bu imkansız değildir, ancak temel eksikliği varsa, bina inşa

etmek güç olur. Yüksekle muhtemel sonuçları hayati temel bilgi

eksikliği ve meslektaşları/yaşıtlarının önlenemez gülüşlerine maruz

kalmaktır.




0.7 Bilgi Nasıl Sunulmuştur?
Çok sayıda yazar, yardımcı yazar ve editör olarak kitabın her bölümünü benzer ve anlaşılır tarzda yazmak için elimizden geleni yaptık. İçerik iyi yapılandırılmış bir şekilde sunulmuştur; anlaşılabilir ve metin içinde bilgiyi aramanın oldukça kolay olduğu birçok başlık ve alt başlıklar halinde işlenmiştir.
Bu kitap programcılar için programcılar tarafından yazılmıştır. Yazarlar, aktif yazılım geliştiricilerdir ve arkadaşları hem yazılım geliştirme hem de gelecekteki programcıları eğitmek konusunda gerçek deneyim sahibidirler. Kendiniz göreceğiniz gibi, bu nedenle, içerik sunum kalitesi, çok iyi düzeydedir.
Tüm yazarlar olarak programlama üzerine bir kitapta en önemli şeylerden birinin örnek kaynak kod olduğunun belirgin bilincindeyiz. Bu çok önemli nedenle metne pek çok örnek, çizim, açıklama, resim ve şekiller eşlik ediyor.
Her bölüm farklı bir yazar tarafından yazılmışsa, konuşma tarzı farklılıklarını tamamen önlemenin ve her bölümün kalitesini tamamıyla aynı tutmanın herhangi bir yolu yoktur. Bazı yazarlar bölümlerini mükemmel hale getirmek için (aylar süren) pek çok çaba ortaya koyuyorlar. Diğerleri çok çaba sarfedemedikleri için bölümlerini en iyi kategoriye koyamayız. Son olarak, ancak önemsenmeyecek bir değişken de yazarların deneyimidir - kimileri 2-3 yıldır profesyonel programlama deneyimine sahipken – diğerleri 15 yıldır bu işle uğraşmaktadır. Hiç şüphesiz, bu kaliteyi etkiler, ancak sizi temin ederiz ki her bölüm gözden geçirilerek Svetlin Nakov ve ekibinin kalite standartlarını karşılar hale getirilmiştir.

0.8 C# ve .NET Platformu
Bu kitap programlama ile ilgilidir. Programcı olarak düşünmeyi, kod yazmayı, veri yapılarını ve algoritmaları düşünmeyi ve sorun çözmeyi size öğretmek için tasarlanmıştır.
C# ve Microsoft .NET platformunu (C# arkasındaki platform) sadece programlama kodunu yazmak için kullanacağız ve dilin özelliklerini incelemeyeceğiz. Bu elinizdeki kitap Java ve C++ gibi diğer diller için de yazılmış olabilir, ancak farkları bariz değil önemsizdir.
Bununla birlikte, kısa bir C# (telaffuzu "see sharp") tanımını verelim.




C # yazılım uygulamalarının geliştirilmesi için modern bir programlama dilidir.



"C#" ve ".NET Platformu" terimleri eğer sizin için bilinmeyense, ayrıntılarını ve bağlantılarını sonraki bölümde öğreneceksiniz. Şimdi kısaca C#, .NET, .NET Platformu, CLR ve C# ile ilgili diğer teknolojileri açıklayalım.

0.9 C# Programlama Dili
C#, .NET platformu ile birlikte Microsoft tarafından oluşturulan ve geliştirilen, modern nesne yönelimli, genel amaçlı bir programlama dilidir. C# ve .NET platformu üzerinde geliştirilen çok çeşitli yazılım vardır: ofis uygulamaları, web uygulamaları, web siteleri, masaüstü uygulamaları, mobil uygulamalar, oyunlar ve diğerleri.
C#, Java ve C++ benzeri yüksek seviyeli bir dildir ve bir ölçüde Delphi, VB.NET ve C dillerine benzerdir. Tüm C# programları nesne yönelimlidir. Bunlar yöntemleri tanımlanmış bir küme sınıftan oluşur ve yöntemler program mantığını – bilgisayarın yürüttüğü talimatları içerir.  Bir sınıf, yöntem ve C# programları ile ilgili detayları fazlasıyla bir sonraki bölümde bulacaksınız.
Günümüzde C# en popüler programlama dillerinden biridir. Dünya çapında milyonlarca geliştirici tarafından kullanılmaktadır. Microsoft’un .NET platformu için uygulama geliştirmek ve yürütmek için geliştirdiği C# dili Microsoft odaklı şirketler arasında yayılmıştır, şirketler ve bireysel geliştiriciler tarafından da yaygın olarak kullanılır. İyi de olsa kötü de olsa, bu kitabın yazıldığı zaman itibariyle, C# dili ve .NET platformu tamamen Microsoft tarafından yönetilmektedir ve sürdürülmektedir ve üçüncü kişilere açık değildir. Bu nedenle, IBM, Oracle ve SAP gibi tüm diğer büyük yazılım şirketleri Java platformunda kendi çözümlerini temellendirmiş ve kendi yazılım ürünlerini geliştirmek için birincil dil olarak Java kullanmışlardır.
C# ve .NET Platformunun aksine, Java dili ve platformu yazılım şirketleri, kuruluşlar ve bireysel geliştiricilerinin bütün bir toplum içinde yer aldıkları açık kaynak projeleridir. Java dünyasındaki standartlar, teknik özellikler ve tüm yeni özellikler, tek bir şirket (C# ve .NET Platformu’nda olduğu gibi) yerine, tüm Java toplulukları üzerinden oluşturulan çalışma grupları tarafından geliştirilmiştir.  
C# dili üzerinde yürütüldüğü Yürütüm Süresi Ortak Dili (Common Language Runtime: CLR) adında özel bir çevre ile birlikte dağıtılır. .NET Platformu temel işlevsellik sağlayarak, derleyici, hata düzeltici ve diğer geliştirme araçlarından oluşan standart kütüphaneleri içerir. CLR .NET Platformu’nun bir parçasıdır. Neyse ki platform üzerindeki CLR programları taşınabilirdir, ve bir kere yazıldığında işletim sistemleri üzerinde küçük değişikliklerle veya hiçbir değişiklik yapmadan çeşitli donanım platformları üzerinde çalışabilir. C# programları en yaygın olarak MS Windows üzerinde çalışır, ancak .NET Platformu ve CLR aynı zamanda cep telefonlarını ve Windows Mobile, Windows Phone ve Windows 8 tabanlı diğer taşınabilir cihazları da destekler. C# programları hala serbest .NET Platformu uygulaması olan Mono ile Linux, FreeBSD, iOS, Android, MacOS X ve diğer işletim sistemleri üzerinde çalıştırılabilir, ancak, bu resmen Microsoft tarafından desteklenmiyor.

0.10 Microsoft .NET Platformu
C# dili bağımsız bir ürün halinde dağıtılmamıştır – Microsoft .NET Platformu’nun ("Microsoft nokta Net Platformu" olarak telaffuz edilir) bir parçasıdır. .NET Platformu genellikle C# ile veya .NET uyumlu bir başka dilde (VB.NET, Yönetilen C++, J# veya F# gibi) yazılmış programların geliştirilmesi ve yürütülmesi için bir ortam oluşturur.
Şu bileşenleri vardır:

      • .NET programlama dilleri (C#, VB.NET ve diğerleri);

      • C# programlarını kontrollü bir şekilde çalıştıran kodun (CLR) yürütülmesi için yönetilen bir ortam;

      • C# programlarını CLR’in anlayabileceği bir ara koda (MSIL adında) dönüştüren csc derleyicisi gibi bir dizi geliştirme aracı;

      • Veritabanlarına erişime izin veren ADO.NET gibi standart bir kitaplık seti (MS SQL Sunucu veya MySQL gibi) ve standart iletişim platformları yoluyla uygulamaları bağlayan WCF ve HTTP, REST, JSON, SOAP ve TCP gibi soketleri içeren protokoller.


.NET Platformu her modern Windows dağıtımının bir parçasıdır ve farklı versiyonları mevcuttur. Son sürümü Microsoft'un web sitesinden indirilebilir ve yüklenebilir. Bu kitabın yayın tarihi itibariyle, .NET Platformu’nun son sürümü 4.5’tir. Windows Vista paketi – .NET Platformu 2.0, Windows 7 – .NET 3.5 ve Windows 8 – .NET 4.5 içermektedir.

0.11 Neden C#?
Kitabımız için C# seçmemizin birçok nedeni vardır. Bu tüm dünyada milyonlarca programcı tarafından yaygın olarak kullanılan modern bir programlama dilidir. Aynı zamanda, C# (C ve C++ aksine) öğrenmek için çok basit ve kolaydır. Yeni başlayanlar için uygun ve birçok büyük şirket tarafından endüstride hâlâ yaygın olarak kullanılan bir dil ile başlamak doğaldır, bu özelliği onu günümüzde en popüler programlama dillerinden biri haline getirmiştir.

0.12 C# veya Java?
Bu yoğun olarak tartışılabilmesine rağmen, Java’nın C# için en ciddi rakip olduğu kabul edilmektedir. Java ile C# arasında bir karşılaştırma yapmayacağız, çünkü C# tartışmasız daha iyidir, daha güçlüdür, zengindir ve mühendisliği daha iyidir. Ancak, bu kitabın amaçları için, biz her modern programlama dilinin programlama ve algoritmaları öğrenmek için yeterli olacağını vurgulamak zorundayız. C# seçtik çünkü öğrenmesi daha kolaydır ve son derece kullanışlı, ücretsiz bir entegre geliştirme ortamı ile dağıtılmıştır (örneğin, Visual C# Ekspres Baskısı). Java tercih edenler için bu kitabın Java sürümü www.introprogramming.info adresinde mevcuttur.
0.13 Neden PHP Değil?
Programlama dillerinin popülaritesi ile ilgili olarak, C# ve Java’nın yanı sıra, bir başka yaygın olarak kullanılan dil de PHP’dir. Küçük web siteleri ve web uygulamaları geliştirmek için uygundur, ancak büyük ve karmaşık yazılım sistemlerinin uygulanmasında ciddi zorluklar doğurmaktadır. Yazılım sektöründe PHP küçük projeler için ilk olarak ve en önemli şekilde kullanılır, çünkü geliştiricilerin kötü, düzensiz ve bakımı kolay olmayan kod yazmasına yol açabilir, daha önemli projeler için sakıncalı olabilir. Bu konu da tartışmalıdır, ancak genel olarak kabul edilmektedir ki, inşa edildiği eskimiş kavram ve kökenler nedeniyle ve çeşitli evrimsel nedenlerle, PHP düşük kaliteli programlama eğilimi içinde olan bir dildir, kötü kod yazma ve bakımı kolay olmayan yazılım oluşturmaya neden olabilir. PHP kavramsal olarak yordamsal bir dildir ve modern nesne yönelimli programlama paradigmalarını desteklemesine rağmen PHP programcılarının çoğu yordamsal kod yazar. PHP’nin yazılım mühendisliği mesleğindeki adı "kod maymunu" dili olarak bilinir, çünkü PHP programcıları korkutucu oranda en düşük kaliteli kod yazar. Düşük kaliteli, kötü yapılandırılmış ve kötü organize edilmiş programlama kodu yazmak eğilimi nedeniyle, PHP dili ve platformunun bütün kavramları yanlış kabul edilir ve ciddi şirketler (Microsoft, Google, SAP, Oracle ve onların ortakları gibi) bundan kaçınırlar. Bu sebeple ciddi bir yazılım mühendisi olmak istiyorsanız, C # veya Java ile başlayın ve (mümkün olduğunca) PHP’den kaçının.
Elbette, PHP’nin programlama dünyasında kullanımları vardır, (örneğin, WordPress ile blog oluşturma, Joomla veya Drupal ile küçük bir web sitesi, veya PhpBB ile bir tartışma panosu) ancak tüm PHP platformu, .NET ve Java gibi büyük sistemler için iyi organize edilmemiş ve tasarlanmamıştır. Web tabanlı olmayan uygulamalar ve büyük endüstriyel projelere gelince, PHP mevcut seçenekler arasında uzun bir atış değildir. PHP’yi doğru kullanmak ve onunla yüksek kaliteli profesyonel projeler geliştirmek için çok tecrübe gereklidir. PHP geliştiricileri genellikle öğreticiler, makale ve düşük kaliteli kitaplardan öğreniyor ve kötü uygulama ve alışkanlıkları seçip bulurken onları daha sonra ortadan kaldırmak kolay olmaz. Bu nedenle, ilk geliştirme dili olarak PHP öğrenmeyin. C# veya Java ile başlayın.
Yazarların kolektif büyük deneyimlerine dayanarak C# ile programlamaya başlamanızı ve C, C++ ve PHP gibi dilleri bunları kullanmaya başlamak zorunda kalacağınız ana kadar görmezden gelmenizi tavsiye ediyoruz.

0.14 Neden C veya C++ Değil?
Tartışma götürse de, C ve C++ dilleri oldukça ilkel, eski ve çürüyen olarak kabul edilir. Onların hâlâ kendi kullanımları vardır ve düşük seviyeli programlama için uygundur (örneğin özel donanım aygıtları için programlama) ama onları izlemenizi tavsiye etmiyoruz.
Eğer bir işletim sistemi yazmak istiyorsanız, veya bir gömülü cihazı programlamak istiyorsanız, alternatiflerin eksikliği nedeniyle ve donanımı çok dikkatli kontrol etmek gerektiği için saf C programlayabilirsiniz. C dili manevi olarak eskidir ve hiçbir şekilde onunla programlamaya başlamak için bir tavsiyeye rastlamazsınız. Saf C kodlayan programcının verimliliği C# ve Java gibi modern genel amaçlı programlama dilleri altındaki verimlilik ile karşılaştırıldığında birçok kez çok daha düşüktür. C’nin bir değişiği Apple/iPhone geliştiricileri arasında kullanılır, ama iyi bir dil değil olduğundan değil, hiçbir iyi alternatif olmadığı içindir. Çoğu Apple odaklı programcı Objective-C sevmiyor ama bir başka şey yazmak konusunda başka hiçbir seçimleri olmadığı için bu işi gerçekleştiriyorlar.
Donanım ile çok yakın çalışmayı gerektiren uygulamalar ile programlamak zorunda kalındığında veya (3D oyunlar gibi) özel performans gereksinimleri olduğunda C++ kabul edilebilir. Her bağlamda (Web uygulamaları geliştirme veya iş yazılımları gibi) C++ olağanüstü yetersizdir. Eğer şimdi programlamaya başlıyorsanız bunu sürdürmenizi tavsiye etmiyoruz. Hala bazı okullarda ve üniversitelerde çalışmalar yapılmasının nedeni kalıtsaldır, çünkü bu kurumlar çok muhafazakardır. Örneğin, Uluslararası Bilişim Olimpiyatı (IOI) programlama yarışmalarında izinli kullanımlı tek dilin C++ olmasını teşvik etmeye devam ediyor, C++ nadiren endüstride kullanılır olmasına rağmen. İnanmıyorsanız, bazı iş arama siteleri aracılığıyla bakabilirsiniz ve C++ ile verilen iş ilanları yüzdesini sayın.
C++ dilinin popülerliğini kaybetti çünkü başlıca nedeni hızla geliştirilen kaliteli yazılımın uygulanabilirliğinin yetersiz kalmasıdır. C++ dilinde yüksek kaliteli yazılım yazmak için, inanılmaz akıllı ve deneyimli programcı olmak zorunda kalırsınız, aynı tez C# ve Java için kesinlikle gerekli değildir. C++ öğrenme daha fazla zaman alır ve çok az programcı gerçekten iyi biliyor. C++ programcısının verimliliği C# programcısına kıyasla birçok kere daha düşüktür ve bu yüzdendir ki C++ zemin kaybediyor. Bu nedenlerden dolayı, C++ dili yavaş yavaş kayboluyor ve bu nedenle bunu öğrenmek için tavsiyede bulunmuyoruz.
0.15 C# Avantajları
C# nesne yönelimli bir programlama dilidir. Ciddi yazılım sistemleri için kullanılan modern programlama dillerinin hepsi (Java ve C++ gibi) nesne yönelimlidir. Nesne yönelimli programlamanın avantajları kitap boyunca birçok alıntılar halinde dile getirilmiştir, buna rağmen şu an için, size gerçek dünyadan nesneleri ile çalışma izni veren dil olarak nesne yönelimli dilleri düşünebilirsiniz (örneğin öğrenci, okul, ders kitabı, kitap ve diğerleri için). Nesneler (örneğin isim, renk, vb) özelliklere sahiptir ve (örneğin, hareket, konuşma, vb) eylemleri gerçekleştirebilir. C# ve .NET Platformu ile programlamaya başlayarak, perspektifi çok yüksek bir yola sapmış oluruz. Programcılar için iş teklif eden bir web sitesi açarsanız, C# ve .NET uzmanları için çok büyük ve Java programcıları için yakın bir talep olduğunu kendiniz göreceksiniz. Aynı zamanda, PHP, C++ ve diğer teknoloji talebini C# ve Java mühendisleri talebi ile kıyasladığımızda daha düşük bir rakam ortaya çıkmaktadır.
İyi programcı için, kullandıkları dilin önemi bir anlam taşımamaktadır, çünkü programlamayı bilirler. İhtiyaç duydukları dil ve teknoloji ne olursa olsun onlar hızlı uzmanlaşacaklardır. Amacımız C# öğretmek değil, programlama öğretmektir! Programlama temellerinde uzmanlaştıktan, algoritmik düşünmeyi öğrendikten, diğer programlama dilleri ile tanıştıktan sonra, onların C# ile ne kadar ortak noktaları olduğunu göreceksiniz ve öğrenme modeliniz kolaylaşacak. Bu kitap programlamanın değişmeyen temellerini öğretiyor.

0.16 Örnekler Visual Studio 2012 için C# 5 Dilinde Verilmiştir
Bu kitapta verilen örneklerin hepsi bu kitabın yayınlanması itibariyle C# dili ve .NET Platformu 4.5 sürümü ile ilgilidir. Visual Studio tümleşik geliştirme ortamını kullanmaya dair tüm örnekler ürünün 2012 sürümü ile ilgilidir. Bu kitabın yazılması sırasında en son bu sürümler vardı.
Microsoft Visual Studio 2012 tümleşik geliştirme ortamının (IDE) başlangıç düzeyindeki C# programcıları için uygun olarak düşünülmüş Windows Masaüstü için Microsoft Visual Studio Express 2012 adı verilen bir de ücretsiz sürümü vardır. Ücretsiz ve ücretli (ticari bir yazılım ürünü olan) Visual Studio sürümleri arasındaki fark bu kitapta kullanmamızı gerektirmeyen bazı işlevlerin kullanılabilirliğinde yatmaktadır.

C# 5 ve Visual Studio 2012 kullanmalarına rağmen bu kitaptaki örneklerin çoğu .NET Platformu 2.0 / 3.5 / 4.0 ve C # 2.0 / 3.5 / 4.0 altında sorunsuz çalışacaktır ve Visual Studio 2005/2008/2010 altında derlenebilir.
Programlamayı öğrenirken hangi C# ve Visual Studio sürümünü kullanacağınız hiçbir büyük önem taşımamaktadır. Önemli olan programlama ve algoritmik düşünme ilkelerini öğrenmektir! C# dili, .NET Platformu ve Visual Studio tümleşik geliştirme ortamı sadece araçlardır ve herhangi bir zamanda bunlarla başkalarını takas edebilirsiniz. Bu kitabı okursanız ve VS2012 şu anda en son sürüm değilse emin olun ki neredeyse bu kitabın tüm içeriği geriye dönük uyumluluk nedeniyle yine aynı olacaktır.

0.17 Bu Kitabı Nasıl Okumalısınız?
Bu kitabı okuma sırasında birçok uygulama beraberinde geliyor. Programlamayı öğrenmek kolay değildir! Yüzmeyi bir kitaptan nasıl okuyarak öğrenmek mümkün değilse gerçekleştirim olmadan çalışıyor olmak da mümkün değildir. Bocalarsanız ama başka çaresi olmaz! Her bölümden sonra sorunlar üzerinde çalışarak bu kitaptan daha fazla şey öğreneceksiniz.
Burada okuduğunuz her şeyi bir bilgisayarda kendiniz için denemelisiniz. Aksi takdirde öğrenemezsiniz. Örneğin, basit bir program yazmak için Visual Studio ile ilgili ilk okuduğunuzda, Microsoft Visual Studio (veya Visual C# Ekspres) yükleyin ve programınızı yazmak için deneyin, bunu yapmanız gerekiyor. Aksi takdirde öğrenmeniz sorunlu olabilir! Teoride, her şey kolay gibi görünüyor, ancak programlama uygulama anlamına gelir. Bunu hatırlayın çünkü bu kitapta o sorunları çözmek için çalışacağız. Bu sorunlar özenle seçilmiştir – ne sizi vazgeçirecek kadar çok zor, ne de çok kolaydır, böylece bir meydan okuma olarak onları çözmeyi algılamaya motive olacaksınız. Eğer zorluklarla karşılaşırsanız, Telerik Yazılım Akademisi "C # Programlama Temelleri" eğitim kursunun tartışma grubu yardımına bakın: http://forums.academy.telerik.com (Forum Bulgar geliştiriciler için tasarlandı, ancak o insanlar "yaşam"larında İngilizce konuşuyorlar ve endişelenmeyin, bu kitapla ilgili sorularınıza cevap vereceklerdir. Binlerce öğrenci her yıl bu kitaptan egzersizleri çözmek istiyorlar böylece her problem için kitaptan birçok çözüm bulabilirsiniz. Bu web sitesinde kitaptaki her alıştırma için resmi çözümler + testler de yayınlayacak.




Alıştırma yapmadan bu kitabı okursanız bir anda anlam taşımaz! Program yazma hakkında metni okuduğunuzdan çok daha fazla zaman harcamak gerekir. Bir taşıt aracını sürmeyi öğrenmek gibidir: hiç kimse kitap okuyarak sürüş öğrenemez. Sürüş öğrenmek için farklı durumlar, yollar, arabalar, vb. için birçok kez sürücülüğü denemeniz gerekir. Programlama öğrenmek için, programlamak gerekiyor!



Herkes okulda matematik okudu ve matematik problemlerini çözmeyi öğrenmek için nasıl bir pratik gerektiğini herkes bilir. Ne kadar olursa olsun öğretmenlerinizi izler ve dinleseniz de, oturup sorunları çözmeden onları öğrenemezsiniz. Aynısı programlama için geçerlidir. Çok alıştırmaya ihtiyacımız var. Sorunları çözmeniz, deney yapmak için, çaba göstermek için ve sorunlarla mücadele etmek için, hata yapmak ve onları düzeltmek için, denemek ve başarısız olmak için, yeniden denemek ve nihayet işlerin yolunda gittiği zaman o anları deneyimlemek için çok yazmanız gerekiyor. Çok alıştırmaya ihtiyacımız var. İlerleme kaydetmenin tek yolu budur!
Bir geliştirici olmak için insanlar der ki en az 50.000 – 100.000 satır kod yazmaları gerekir. Doğru sayı değişebilir. Bazı insanlar hızlı öğrenir yada sadece problem çözme deneyimleri vardır. Diğerleri için daha fazla pratik gerekebilir, ancak her durumda programlamayı uygulamak çok önemlidir! Sorunları çözmek için ve bir geliştirici olmak için kod yazmak gerekir. Başka yolu yoktur!

0.18 Alıştırmaları Asla İhmal Etmeyin!
Her bölümün sonunda hatırı sayılır derecede çok alıştırma bulunmaktadır. Onları ihmal etmeyin! Alıştırmalar olmadan, bir şey öğrenemezsiniz. Bir bölümü okuduktan sonra bilgisayar önünde oturmanız ve kitapta gördüğünüz örneklerle oynamanız gerekir. Sonra belirlediğiniz sorunları çözme konusunda kendinizi ayarlamalısınız. Hepsini çözemezseniz en azından denemelisiniz. Eğer gerekli zamanınız yoksa, en azından her bölüm için ilk birkaç sorunun çözümüne çalışmanız gerekir. Her bölümden sonra sorunların çözümü olmadan devam etmeyin, bu sadece anlamsız olur! Sorunlar okuduğunuzu şeyleri uygulayacağınız mümkün olan en küçük geçerli durumdır. Uygulamada programcı olduğunuzda, daha büyük ve daha karmaşık ölçekte her gün benzer sorunları çözeceksiniz.




Maliyeti ne olursa olsun kitabın her bölümünden sonra gelen alıştırma problemlerini çözmeniz için çaba sarf etmeniz gerekir! Aksi takdirde hiçbir şey öğrenememe ve sadece zaman harcıma riski ile karşı karşıya kalırsınız.



0.19 Bu Kitaptan Öğrenmek İçin Ne Kadar Zamana İhtiyacınız Var?
Programlama temellerinde uzmanlaşmak çok önemli bir görevdir ve çok zaman alır. Bu konuda inanılmaz derecede iyi olsanız bile, bir veya iki hafta içinde iyi seviyede programlama öğrenmenin kalıcı olacağını düşünmek yanlış olur. Herhangi bir insani beceriyi öğrenmek için, okumak, görmek yada nasıl yapılacağının gösterilmesi gerekir ve sonra bunu kendiniz yapıp deneyerek birçok pratik geliştirebilirsiniz. Aynı olgu programlama için de geçerlidir – ya okumanız, ya görmeniz yada nasıl yapılacağını dinlemeniz gerekir, taa ki yapana kadar. Sonra başarılı olur veya olmazsınız, nihayet öğrendiğinizin farkına varana kadar tekrar denersiniz. Öğrenme adım adım yapılır, rasgele değil belirli bir ardışıklık temeline dayanır, çaba ve tutarlılık isteyen bir seridir, bu nedenle paylaşılabilir.
Eğer bu kitaptaki konu içeriğini okumak, anlamak, öğrenmek ve iyice ve derinlemesine kazanmak istiyorsanız, gün boyu süren bir etkinlik için en az 2 ay yatırım gerekiyor, yada her gün biraz alıştırma yaparsanız en azından 4-5 ay yatırım gerekiyor. Derinlemesine programlama temellerini kavramanın mümkün olacağı minimum zaman miktarı bu kadardır.
Bu miktardaki derslerin gerekliliği Telerik Yazılım Akademisi tarafından verilen serbest eğitim ile gerçekte doğrulanmıştır (http://academy.telerik.com). Bu kitaptaki derslere dayalı eğitimlere katılan öğrencilerin yüzlercesi genellikle tam zamanlı çalışma ile 3-4 ay içinde bu kitabın konularının hepsini öğrenir. Her yıl binlerce öğrenci bu kitabın alıştırma problemlerini çözüyor ve kitabın içeriğini kapsayan programlama sınavlarını başarıyla geçiyor. İstatistikler gösteriyor ki, öncesinde programlamaya maruz kalmayan herhangi bir kimse Telerik Akademisi'nde verilen derslere karşılık gelen ve bu kitap ellerindeyken 3-4 ay eşdeğerinde bir aktiviteyi kapsayan tam gün süre ile zaman geçirmiyorsa, bahsi geçen sınav veya sınavlarda başarısız karne alıyor.
Kitaptaki ana konu 1100 sayfada sunulmuştur, günlük bir sayfa olmak üzere okursanız sadece dikkatle okumanız ve örnek programları test etmeniz bir ay alacaktır. Elbette, alıştırmalar için yeterli zaman (birkaç ay daha fazla) harcamak zorundasınız; onlar olmadan programlamayı öğrenmenizin işlerlik kazanması zorlaşır ve değeri azalır.

0.20 Karmaşık veya Kolay?
Kitaptaki alıştırmalar zorluk dereceleri değişen yaklaşık 350 problemden oluşur. Bunlardan bazılarının çözümü için birkaç dakika, diğerleri için birkaç saat (yardım olmadan tüm bunları çözebilirseniz) gerekebilir. İhtiyacınız olan zaman tam günlü bir veya iki aylık bir çalışma veya günde daha az çalışıyorsanız birkaç ay daha ek çalışma olarak özetlenebilir.
Her bölümün alıştırmaları zorluk düzeyi artarak sıralanmıştır. İlk birkaç alıştırma bölümdeki örneklere benzer şekilde nispeten kolaydır. Son birkaç alıştırma genellikle karmaşıktır. Bunları çözmek için dış kaynakları (Wikipedia bilgileri gibi) kullanmanız gerekebilir. Bilinçli olarak, her bölümdeki son birkaç alıştırma bölümde verilen bilgileri aşar ve çözümü bunun dışında sizin becerinize dayanır. Favori arama motorunda arama gerçekleştirmek için sizi motive etmek istiyoruz. İnternette aramayı öğrenmeniz gerekir! Bu herhangi bir programcı için temel bir beceridir. Öğrenmeyi öğrenmeniz gerekir. Programlama her gün öğrenmek ile ilgilidir. Teknoloji sürekli değiştiği için her şeyi bilemezsiniz. Bir programcı olmak her gün yeni API'ler, platformlar, teknolojiler ve araçlar öğrenmekle eşdeğerdir. Sadece kendinizi hazırlayın, kaçınılması mümkün değildir. Alıştırmaları çözerken sizi İnternet’te aramaya yöneltecek pek çok problem bulabilirsiniz. Kimi alıştırmalarda bir sonraki bölümde işlenen konuları okumanız gerekebilir, bu nedenle kişisel yetenek gerekiyor. Tanınmış algoritmalar, veya başka bir şey sizin çözüm bulmanıza yarayabilir, ancak İnternet’te arama gerçekleştirmek her durumda vazgeçilmez temel bir beceridir.
Kitapta kapsanan alıştırmaları çözmeniz gerçekten birkaç aydan az almaz. Eğer kendinize ayıracağınız bu kadar zamana sahip değilseniz, üzülmeyin gerçekten programlamayı sürdürmek istediğiniz önemlidir. Bu büyük çabaları içeren gerçekten çok ciddi bir girişimdir. Eğer sürekli ve programlamayı iyi bir seviyede öğrenmek istiyorsanız, zaman çizelgesi hazırlayın ve kitap yada buna dayalı video derslerini izleyin.


0.21 Neden Veri Yapıları ve Algoritmaların Önemi Belirtilmiştir?
Bu kitap, programlama temel bilgilerine ek olarak, uygun algoritmik düşünme ve programlamanın temel veri yapılarını kullanmayı size öğretir. Veri yapıları ve algoritmalar, bir programcının en önemli temel becerileridir! Onları iyi kavrarsanız, yazılım teknolojisinde, geliştirme aracı, platform veya API konularında yeterli olmak yolunda bir probleminiz olmaz. En ciddi yazılım şirketlerinin çalışanlarını işe alırken dikkat ettikleri en önemli kriter budur. Bunun kanıtı, Google ve Microsoft gibi büyük şirketlerde yapılan ve sadece temel veri yapıları ve algoritmalar ile algoritmik düşünmeye dayanan iş görüşmeleridir.
Aşağıdaki bilgiler 2007-2008 Microsoft ve Google'da yazılım mühendisliği iş görüşmelerinden başarıyla geçmiş bulunan ve bu kitabın önde gelen yazarı Svetlin Nakov’dan geliyor. Nakov kendi deneyimlerini paylaşıyor.

0.22 Google'da İş Görüşmeleri
Zürih Google'da yazılım mühendisliği iş görüşmelerine ait soruların %100 ‘ü veri yapıları, algoritmalar ve algoritmik düşünmeye dayalı konuları içerir. Böyle bir görüşmeye girdiğinizde, beyaz bir tahta üzerinde bağlantılı liste uygulaması yapmanız istenebilir. (bkz. "Doğrusal Veri Yapıları") veya çeşitli renklerle dolu olan GIF görüntüsü bir taramalı çokgeni doldurmak için bir algoritma yazmanız da beklenebilir. (bkz."Ağaçlar ve Grafikler" in enine-arama bölümü) Google algoritmik düşünebilen ve temel veri yapıları ve bilgisayar algoritmaları kavrayışına sahip insanlarla ilgileniyor gibi görünür. Adaylar daha sonra kendi çalışmaları doğrultusunda kullanmak istedikleri herhangi bir teknolojiyi hızla öğrenebilir. Söylemeye gerek duymalıyız ki, bu kitap Google'da bir iş görüşmesinden geçmek için size gerekli bilgi ve becerilerin hepsini verecek kadar çok beceri vaat etmiyor. Kitaptaki bilgiler kesinlikle gerekli bir minimumdur, ancak tamamen yeterli değildir. Bu sadece ilk adımları teşkil eder.
0.23 Microsoft'ta İş Röportajları
Dublin Microsoft’da yazılım mühendisliği iş görüşmelerinde bir çok soru, veri yapıları, algoritmalar ve algoritmik düşünmeye odaklanmıştır. Örneğin, bir dize sözcüğü tersten yazmanız (bkz. "Dizeler ve Metin İşleme" Bölümü) yada yönsüz grafikte topolojik arama gerçekleştirmeniz (bkz. "Ağaçlar ve Grafikler" Bölümü) istenebilir. Google'ın aksine, Microsoft yazılım mimarileri, çoklu, güvenli kod yazma, büyük miktarda veri ile çalışma ve yazılım testi ile ilgili bir çok mühendislik sorusu sorar. Bu kitap Microsoft'a başvurmak için gerekli yeterlilikten uzaktır, ancak içerdiği bilgiler kesinlikle soruların çoğunluğu için size faydalı olacaktır.

0.24 LINQ Teknolojisi Hakkında
Kitapta sorgular çalıştırılmasına izin veren popüler .NET LINQ teknolojisi (Language Integrated Query) hakkında bir bölüm vardır. Bu sorgular arasında dizi, liste yada diğer nesneler için (örneğin arama, sıralama, toplam alma ve diğer grupsal işlemler, vb.) bulunmaktadır. Bu veri yapıları ve algoritmaların karmaşıklığı bölüm sonrasında önceden açıklamış olduğumuz tercih nedeniyle sona doğru yerleştirilmiştir. Bir listeyi sıralamak veya kriterlere göre arama yapmak isteyen bir programcının bu algoritmalar esnasında hangi mekanizmaların işlediğini bilmelidir, örneğin kaç adet atomik eylem bu işlem sonucunu hesaplar, vb. LINQ kullanılması halinde belirli bir sorgunun çalıştığını ve ne kadar zaman aldığını bilemeyiz. LINQ çok güçlü ve yaygın olarak kullanılan bir teknolojidir, ancak daha sonraki aşamalarda uzmanlaşmak temel algoritmalar ve veri yapıları gibi programlamanın ana konularında belirgin bir temel kazandıktan sonra (kitabın sonunda) mümkün olacaktır. Aksi takdirde nasıl çalıştığının farkındalığını bilincinize indirmeden verimsiz kod yazmayı öğrenme riskiyle karşılaşabilirsiniz ve arka planda kaç işlem gerçekleştiğini ancak tahmin edersiniz.

0.25 Gerçekten Bir Programcı Olmak İster Misiniz?
Bir programcı olmak istiyorsanız, gerçek programcıların ciddi, ağırbaşlı, düşünme ve sorgulama yetenekleri olduğunu kavramalısınız. Onlar için hızlı bir şekilde tüm modern veya eski platformlar, teknolojiler, kütüphaneler, programlama araçları, programlama dilleri ve geliştirme araçları önemlidir, ve hayatlarının bir parçası olarak programlamayı hissederler.
İyi programcılar kendi mühendislik becerilerini ilerleyen zaman bağlamında ortaya koyar, yeni teknolojiler, yeni programlama dilleri ve paradigmaları öğrenmeye çalışır, işte yeni yollar takip eder, her gün yeni platformlar ve yeni geliştirme araçları hayal eder. Mantıksal düşünme yeteneğine sahip olup; sorunlar üzerinde akıl yürütüp bunları çözmek için algoritmalar dile getirmekle kalmayıp; çözüm olarak ardı sıra gelen bir aşama dizisi belirtirler; teknolojik araçlar kullanarak çevre dünya modellenir; kendi fikirlerini ifade etmek için kod yazmak yada program bileşenleriyle oynamak yerinde bir davranıştır; kendi algoritmalarını ve programlarını sorunları görmek için haklarında gelebilecek istisnai durumları öngörerek test ederler; ve bunları hallederler, daha deneyimli insanların tavsiyesini dinler; ve kullanıcı ihtiyaçlarına uygun olarak onların uygulamaları için kullanıcı arayüzünü uyarlayabilirler, kendi algoritmalarını robot endüstrisinde kullanabilirler, ve tıp alemi gibi diğer alanlarda çalıştırabilir ve etkileşim haline geçebilirler.
İyi programcılar sürekli kitap okur, programlama üzerine makaleler veya bloglar okur ve yeni teknolojilerle ilgilenir; sürekli bilgi ve görgü kazanırlar, ve sürekli çalışma biçimlerini yenileştirirler, buna yazılım kalitesi diyorlar. Bazıları ciddi bir sorun ile yüzleştiklerinde yemek yada uyumak ihtiyaçları bile baskılanıyor, saplantı hissedebiliyorlar, yada sadece bazı ilginç ders veya sunumdan ilham alarak vakit geçirebiliyorlar, bu da depresif risk taşıyor. O zaman programlamak sizin için video oyunlarına takılmak olabilir, daha bilinçli öğrenilmesi ve sınırların daraltılması bir çözüm olarak görünse de geçici heveslere kapılmak çok kolaydır. Kendinizi programlamaya çok eğilimli görebilirsiniz, ancak bulunduğunuz ortam sizin bu gelişiminizi kösteklemiş olabilir.
İyi programcıların bir veya daha fazla bilgisayarı vardır, Internet bağlantısı ve teknolojilere sürekli ulaşılabilecek mekanlarda vakit geçirirler. Düzenli olarak web sitelerini ve yeni teknolojiler ile ilgili blogları ziyaret ederler, kendi meslektaşları ile günlük iletişim kurarlar, şu anda gerekli olmayan teknoloji derslerini, seminer ve diğer etkinlikleri ziyaret ederler. Deneme yada yazılımın bir parçasını yapmak için yeni araçlar ve yeni yollar araştırırlar yada işin bir parçası olarak. Yeni kütüphaneleri incelerler, yeni diller öğrenirler, yeni platformlar denerler ve yeni geliştirme araçlarını bilgilerini pekiştirmek için kullanırlar. Bu yardımlaşma ile beceriler unutulmaz ve sunum için gerekli olan farkındalık, yetkinlik ve profesyonellik işlerlik kazanır.
Gerçek programcılar kendi mesleklerini asla tam aklımla biliyorum demez. Onların öğrenmek zorunda oldukları inancı vardır. Programcılıkta merak daha etkindir, analog saatin GPS sistemi ile nasıl aynı fonksiyonu hatta daha fazlasıyla entegre olduğunu hepimiz biliriz. Okuyucunun bilgisayar bilimlerini idrak etmesi için örnekler çoğaltılabilir : İnternet teknolojisi, programlama dilleri, işletim sistemleri, derleyiciler, bilgisayar grafikleri, oyun, donanım, yapay zeka ve her şey aynı programcılığın ürünüdür.

Var olmaları için teknoloji gerekir; böylece endüstri doğar.
Programcı tam özveri gerektiren bir meslektir. Programcı demek yetenekli ve standart dışı durumlarla başa çıkmak mümkün, yetkili, bilgili, düşünme, bilerek akıl yürütme demektir. Meslek halini alması yıllar alabilir. Eğer hala her gün yeni bir şeyler öğrenmek ve teknolojiler ile rekabet etmek istiyorsanız, programcılığa başlamanız uygundur. Ancak emekli olmayı beklemeyin, zira rekabet o kadar çetindir ki sizi ezip geçebilir, başka bir mesleği öğrenmek isteyebilirsiniz. Azim ve sebatınız iş yapma gücünüzle doğru orantılı olmalıdır. Parasal kaygılarla işe başlamak pek çok başarılı genç adayın kafasındaki ana fikirdir. Ancak bu gerçekleştiğinde teknoloji ilerleyeceği için siz geri kalırsınız. Bu da meslek etiketleri yerine yıllar boyu gerçekliği kanıtlanmış doğrularla yola çıkmayı ve sonuçlarından yararlanmayı beraberinde getirir. Hiç şüpheniz olmasın, bu zevk sizi yeterince tatmin edecektir.

0.26 Bir Programcı Olmak İçin Motive Olun yada Bir Başka İş Bulun!
İyi programcı olmak veya programlamanın sırlarını bilmekten vazgeçmemişseniz, ve yazılım geliştirme, bilgisayar bilimi ve yazılım teknolojileri uzmanı olarak önümüzdeki aylar ve yıllar boyunca sabit gayretli olarak bağlılıkla çalışmaya söz verdiyseniz, bu konuda derin bir anlayış geliştirdiyseniz, birçok kitap veya başka öğretiler size öz motivasyon ve belirgin hedefler verecektir. Programcı olduğunuzu veya olmayı başardığınızı düşünün, varsayın ki programlamayla her gün meşgul oluyorsunuz, programcılık sizin mesleğinizdir. Dünyadaki tüm yazılımları yazabiliyorsunuz (eğer yeterli zamanınız varsa); deneyimli programcıların çözebildiği her türlü sorunu çözebiliyorsunuz. Sürekli ve durmadan amacınızı düşünüyorsunuz. Hatta bazen yüksek sesle, kendinize sesleniyorsunuz: "Ben iyi bir programcı olmak istiyorum ve bunun için çok çalışmak zorundayım, çok okumak ve çok şey öğrenmek zorundayım, her gün, sürekli ve özenle bir çok problem çözmek zorundayım.” Çevrenizdeki her yere programlama kitapları koyuyorsunuz. "Ben iyi bir programcı olacağım” diye asılı bir mottoyu her akşam uyumadan önce ve her sabah uyandığınızda görebileceğiniz şekilde yatağınıza iliştiriyorsunuz. Her gün (istisnasız!) programlıyorsunuz, yeni teknolojileri öğreniyorsunuz, eğleniyorsunuz, sorunları çözüyorsunuz, oyun yazıyorsunuz, bir web sitesi hazırlıyorsunuz, derleyici, veritabanı ve diğer yüzlerce program yapmak için orijinal fikirler geliştiriyorsunuz. İyi programcı olmak için her gün programlıyorsunuz ve her gün programlamayı ve mükemmel bir programcı olacağınız gelecek zamanı düşünüyorsunuz. Bunu derinden inandığınız için yapabildiniz! Herkes inandığı ve vazgeçmediği ölçüde bunu gerçekleştirebilir. Bu kitabın ilk adım olduğunu ve her şeyin size bağlı olduğunu unutmayarak motivasyonunuzu artırın.




Gerçekten programlama öğrenmek için iyi bir başlangıç bir yıl boyunca her gün programlamaktır. Eğer (istisnasız) her gün programlarsanız ve uzun bir süre için bunu yaparsanız (örneğin bir yada iki yıl) bir programcı olmamak için hiçbir yol yoktur. Yıllardır programlamayı uygulayan herkes bir gün çok iyi olacaktır. Diğer yeteneklerin geliştirilmesi de bu yolu takip eder. Öğrenmek istiyorsanız, sadece uzun bir süre boyunca her gün alıştırma yapmalısınız.



0.27 Kitabın İçindekilerine Bir Bakış
Kitabın sonraki bölümlerinde karşımıza çıkacak içeriğin bölüm bölüm özetini veren öğrenilecekler birkaç cümle ile bundan sonraki bölümlerde anlatılacak.

0.27.1 Bölüm 0: Önsöz
Önsöz (güncel bölüm) kitabın içeriğini, okuyucunun öğreneceklerini, beklentilerinin neler olması gerektiğini, kitabı nasıl okuması gerektiği, neden C# dilini kullandığımızı, neden veri yapıları ve algoritmalara, vb. odaklandığımızı okuyuculara tanıtır. Önsöz aynı zamanda kitabın tarihini de anlatır, bölümlerin içeriğini, Bulgarca’dan İngilizce’ye yazarlar, editörler ve çevirmenleri takım olarak tanıtır. Tüm dünyada Microsoft, Google, SAP, VMware, Telerik ve diğer önde gelen yazılım şirketlerinden ünlü yazılım mühendisleri tarafından yazılmış tam gözden geçirmeleri içeriyor.
Önsöz yazarı Svetlin Nakov’dur (Veselin Kolev ve Mihail Stoynov’un çok az katkısı ile) İngilizce’ye Ivan Nenchovski tarafından çevrilmiş ve Mihail Stoynov, Veselina Raykova, Yoan Krumov ve Hristo Radkov tarafından düzenlenmiştir.


Yüklə 3,36 Mb.

Dostları ilə paylaş:
  1   2   3   4   5   6   7   8   9   ...   31




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin