İş Hayatı

Bir vakıf üniversitesinde 1. sınıf Yazılım Mühendisliği bölümünü okuduğumu daha önceki bir yazımda belirtmiştim.Daha önceleri internette birçok araştırma yapmıştım.Bir yazılımcı kendini nasıl geliştirmeli,neler yapmalı neler yapmamalı gibi sorularla bir hayli alakadar olmuştum.Bu gibi sorularla ilgili ne var ise neredeyse hepsini okudum diyebilirim.Bu araştırmalarım sırasında en çok beğendiğim site olan www.bilgisayarmuhendisleri.com sitesinden de çok yararlandım. Eğer hala bilmeyen varsa en azından girip bir göz atmalarını tavsiye ediyorum.Neyse dağıtmayalım konuyu.Edindiğim bilgiler, okurken yazılım şirketlerinde staj yapmanın ne kadar gerekli olduğunu söyler nitelikteydi.Çünkü okuldaki eğitim, genel itibariyle teorik bir yapıda ve ülkemiz eğitim sisteminin üzücü etkeni ezbercilik ile yürümektedir.Okurken tecrübe edinme fikrim çalışacak bir yer bulduğumdan dolayı daha da somut bir şekilde kafamda oturdu diyebilirim.Şuan da bir ayı geride bıraktığım için bu yazıyı gelişme sürecimi daha sonra gözlemlemem de faydalı olacağını düşündüğüm için yazıyorum.Hem de aklında soru olan birilerine belki cevap olmuş olur.

Hazırlık dönemini ve yaz aylarını algoritma ve C# diliyle uğraşarak geçirmiştim.Yazın iki ayımı sağlam bir şekilde C#'a ayırdım diyebilirim.Volkan Aktaş'ın C# 5.0 kitabını ve bir C# görsel eğitim setini bitirmiştim.Böyle yaparakta şuan ki bir nevi iş imkanını yakalamış oldum.Programlama mantığını kavradığım için diğer dillere geçişin aslında sadece birer syntax farkı olduğunu net bir şekilde anladım.Peki bu bir aylık dönemde neler öğrendim ve ne kattım kendime?

-Hiç bilmediğim bir dil olan Php'yi 5 üzerinden 3 diyebilecek kadar öğrendim.
-İş yaşamında üretilen yazılımların kodlama yapısını,işleyişini ve yapısını öğrenmiş oldum.
-Var olan bir projeye adapte olma sürecini deneyimledim.
-MVC yapısını öğrendim ve önemini ciddi manada kavradım.
-Projede ortaya çıkan hatalar karşısında var olan hatayı bulma, giderme ve test etme çalışmalarında bulundum.Gerektiği yerde koda müdahale edip gerekli kodu yazdım.
-Hatayı bulmak için Debug yönteminin önemini kavradım.
-Assembla ve Svn sistemlerini kullanarak projenin eksikleri,versiyon güncellemesi gibi temel şeylerin evrelerini deneyimledim.Takım çalışmasını da anlamış oldum.
-Hazır web scriptlerini tanıdım.
-İngilizce'nin önemini anlatamayacak kadar öğrendim :).

Görüldüğü üzere sadece 1 ay gibi bir sürede haftada 3 gün çalışarak,çabalayarak bu maddeleri kendime kattım ve katıyorum.Tabi ki bu kadar bilginin en büyük etkeni çalıştığım yerdeki insanların ve patronumun gerçekten çok iyi insanlar olmasıdır.
Sonuç olarak yazın sonuna kadar okuldaki derslerimin hafifliğini de göz önüne alarak çalışmayı düşünüyorum.Söylediklerime dayanarak okurken bir yazılım firmasında çalışılmasını yürekten tavsiye ediyorum.

Bir başka yazıda görüşmek dileğiyle...
Basit Veri Yapıları

Basit Veri Yapıları

Basit veri tiplerinden bahsetmiştik.Şimdi de bilgisayar programlamasında kullanılan basit veri yapılarından bahsedelim.Bunlar;

  • Arrays
  • List
  • Stack/Queues
  • Trees
  • Graphs


Bu yazıda ilk üç yapıya değineceğiz.

#Arrays(Diziler)
Dizilere eleman eklerken indis numarasını net belirtmek zorundayız.
Örn: diziadi[5]=5; gibi.
Bu sayede belirttiğimiz indis numarasındaki değeri atamış oluruz.

Artıları +
Dizi elemanlarına hızlı erişim izni vardır.
Matematiksel matrisler gibi işlemlerde dizi haritası kesin sonuçlar döndürür.
Eksileri -
Diziler tanımlanırken uzunluğu net belirtilmelidir.Daha sonradan değiştirilemez.Birçok verinin miktarıda bilinmeyebilir bu yüzden de olumsuz bir tarafıdır.


#List
List'e eleman eklediğimizde eklediğimiz elemanlar dizilerin aksine en sona yerleştirilir.

Artıları +
Dizinin aksine List'in uzunluğu değiştirilebilir.
Eksileri -
Dizilere oranla erişim ve eleman ekleme yavaştır.
Bazı dillerde geçerli olmamakla birlikte yukarıdaki örnekte verdiğimiz gibi dizi haritası gibi kesin sonuçlar döndürmez.


#Stack/Queues




                    Stack                                           Queues


Evet resimde görüldüğü üzere stack ve queues'te eleman ekleme ve alma işlemleri bu şekilde gerçekleşmekte.Peki bunlar ne gibi yerlerde kullanılır.Örnekleyelim hemen

#Stack

Stack için konuşmak gerekirse varsayalım ki web tarayıcınız açık ve www.google.com'dasınız.
Sizin internet geçmişinizde şu şekildeymiş gibi düşünelim.

Şuanda açık olan : www.google.com
0: www.facebook.com
1: www.twitter.com
2: www.milliyet.com.tr

Başka bir siteye girdiğiniz zaman www.google.com push edilerek var olan verilerin en üstüne yerleşecektir.

0: www.google.com
1: www.facebook.com
2: www.twitter.com
3: www.milliyet.com.tr

Eğer ki tarayıcınızdan geri butonuna tıklarsanız.Bu seferde en üstteki veriyi alarak pop etmiş olacaktır.
Hafızada ki görünüm tekrar bu hale dönecektir.

0: www.facebook.com
1: www.twitter.com
2: www.milliyet.com.tr


#Queues

Elimizde var olan bu şekilde bir liste olsun diyelim.

0: Cem Yılmaz
1: Yılmaz Erdoğan
2: Ata Demirer

Enqueue ederek bir isim eklediğimizde yeni durum bu şekilde olacaktır.

0: Cem Yılmaz
1: Yılmaz Erdoğan
2: Ata Demirer
3: Atalay Demirci

Fakat dequeue edersek en üstteki değer alınacak ve son durum aşağıdaki gibi olacaktır.

0: Yılmaz Erdoğan
1: Ata Demirer
2: Atalay Demirci





Signed-Unsigned Nedir?

Signed-Unsigned Nedir?




Bilgisayar dilinde aslında her sayı ikilik tabanda işlem görür.Biz günlük hayatta onluk tabanı kullanırız.Yani
decimal sistem.
Örnek vermek gerekirse
İkilik tabandaki bir değeri onluk tabana çevirmek için;

1101 ikilik tabanda bir sayı olsun.
 -> b3 = 1, b2 = 1, b1 = 0, b0 = 1  şeklinde her sayıyı b ile nitelendirelim.

Daha sonra her bir b değerini 2'nin üsleriyle çarpalım ve sırayla toplayalım.



Sonuç olarak 1101 sayısı 13 sayısına eşit olacaktır.Buradan çıkaracağımız sonuç ise biz bilgisayarda işlem yaparken
onluk sistemde yazarız fakat bilgisayar bu işlemleri ikilik tabanda yürütür.Yani 1 ve 0.Var yada yok işte tüm mesele bu :)

Peki biz çevirme işlemini yaptık.Negatif sayıları nasıl anlıyor bilgisayar?
İkilik tabandaki sayıların sol baştaki rakamının 0 veya 1 olmasıyla alakalı bir durumdur.
Eğer baştaki sayi 1 ise signed integer yani işaretli sayısal değer.0 ise unsigned değer yani işaretsiz değerdir.Nasıl yani?



0111 signed integer     +7
1111 unsigned integer   -7

Signed hem pozitif hemde negatif değerler barındıran tiptir.
Unsigned ise sadece 0 ile alabildiği maksimum pozitif değer barındıran tiptir.

Net sayılarla ifade etmek gerekirse

§8 bit signed = -128 ile 127
§16 bit signed = -32,768 ile 32,767
§32 bit signed = -2,147,483,648 ile 2,147,483,647

§64 bit signed = -9,223,372,036,854,775,808 ile 9,223,372,036,854,775,807

arasında değerler barındırılır.


Bunlar neden önemli diye sorduğunuzu duyar gibiyim.O yüzden şu adresten 500 milyon dolarlık zarara sebep olan uzay roketi başarısızlığının bu masum görünen sayılardan kaynaklandığını öğrenebilirsiniz.

Basit Veri Tipleri

Basit Veri Tipleri

Bilgisayarlar ile iletişimi sağlarken kullanmamız gereken önemli bir yol vardır.Bizler gerçek hayatta nesneleri tanımlayabiliriz.Fakat bilgisayarlar soyut bir şekilde çalışırlar.Bu nedenle bilgisayarlar ile işlemler yapabilmek için fiziksel dünyamızdaki nesneleri bilgisayar verisine çevirmeliyiz.

Şekilden de anlaşılabilir olduğu üzere öncelikle fiziksel dünyadaki bir nesneyi soyutsal bir model olarak almamız gerek.Ardından bunu bilgisayarda bir veri olarak ele almalıyız.Yani kısaca;

  • Fiziksel bir nesnemizi model olarak alırız.Örnek; Araba
  • Bu modelimiz bir veriyi temsil edecektir.Örnek;Kod içinde bir araba nesnesi.
  • Bilgisayarda bu veriyi işleme tabi tutabilecektir.Örnek ; Arabayı sür,durdur vs.

Teori istemiyorum diyorsanız burdan devam edin.

İşin teorik basitliğini geçip benim sevdiğim kısma gelelim. :)
Modellerimizi veri olarak temsil etmek için programlama dillerinde kullanılan temel basit veri tipleri bulunmaktadır.
Bunlar;

  • İntegers(Tam Sayı)
  • Float(Ondalıklı Sayı)
  • Boolean(True veya False)
  • Characters(Karakterler)
  • Strings(Metinler)

Şöyle bir açıklamak gerekirse;
Programlama dilleri genel itibariyle değişkenler üzerinden işlemleri gerçekleştirir.Nedir bu değişken ifadesi?
En basitinden gidelim.Diyelim ki iki sayı için toplama işlemi yapacağız.İhtiyacımız olan şey 2 adet sayı ve elde etmemiz gereken bir de sonuç var. Yani bilgisayarda işlemlerimizi değişkenlerle temsil ederek gerçekleştiririz.Öyleyse integer tipte üç değişken tanımlayalım.

İnteger

int sayi1 , sayi2 , sonuc ;
    sonuc sayi1 sayi2 ;

Burada sonuc değişkenimiz 5 değerine eşit olacaktır.

Float
Eğer float tipinde yani ondalıklı sayılarla işlem yapmamız gerekirse şu da basit bir örnek olabilir.

float sayi1 2.2 , sayi2 3.3 , sonuc ;
    sonuc sayi1 sayi2 ;

Burada da sonuc değişkenimiz 5.5 değerine eşit olur.

NOT: Örnekler C dilinde yapılmıştır.

Sonuç

Sonuç olarak bu tip değişkenler her programlama dilinde farklılık gösterebilirler.Örneğin;
C dilinde char,int ve float tiplerinde değişkenler tanımlayabiliriz.
C# dilinde char,integers,float,strings,boolean tiplerinde değişkenler tanımlayabiliriz.

Bunlar genel mantık bilgileridir.






Bilgisayar Tarihi

Bilgisayar Tarihi

Bilgisayar Tarihi

Yazılım Mühendisliği 1. sınıfın ilk döneminde aldığım derslerden biri Computer Science yani Bilgisayar Bilimleri.Bu dersin amacı kanımca yazılım mühendisliğini kazanmış taze beyinlere bilgisayar tarihi ve genel konularında bilgi vermek mahiyetindedir.Gel gelelim içeriğide ilk haftalar bir o kadar sıkıcıydı.Fakat yine de genel kültür açısından bilinmesi gereken konulardır.En azından duymuştum diyebilelim :)
Konularımıza girelim.

Charles Babbage
Charles amcamız ingiliz bir matematikçi.Kendisi programlanabilir bilgisayar fikrini ortaya atan kişidir.İki adet
makine geliştirmiştir.İlki Difference Engine(Fark Motoru) , ikincisi ise Analytical Engine(Çözümsel Makine)'dir.

Difference Engine
Charles Babbage tarafından yapılmıştır.Birkaç sayısal ifadeyi matematiksel işlemlerden geçirip sonucunu çıktı halinde gösterebilen bir makinedir.Ne yazık ki, Babbage bu makineyi tamamıyla bitirememiştir.Fakat 1991 yılında London Science Museum bu makineyi tamamlamıştır.Buradan videosunuda izleyebilirsiniz.


Analytical Engine
Bu makinemiz ise yine Charles amcamız tarafından yapılmıştır.Fakat Analytcal Engine'inin bir farkı vardır.İlk genel mekanik bilgisayar konseptine sahiptir.Aritmetik Mantık Ünite'sini,basit akış kontrolünü,delikli kartları ve birleşik hafızayı içermektedir.Ne yazık ki yine Charles Amcamız hayattayken bu makine tamamlanamamıştır.Fakat onun oğlu Henry bu makineyi tamamlamıştır.İlk bilgisayar konsepti olması açısından özel bir yeri vardır.Programlanabilir bir makinedir.



Ada Lovelace

Lovelace dünyanın ilk bilgisayar programcısı olarak bilinmektedir.Babbage'in Analytical Engine'i üzerinde çalışmıştır.Makineler tarafından işlenmiş ilk algoritmayı yazmıştır.Günümüzde de yad edilsin diye sanırım Ada adında da bir programlama dili de mevcuttur.



ENIAC
J.Presper Eckert ve John Mauchly tarafından Pensilvanya Üniversitesi'nde 1943-1946 tarihleri arasında yapılmıştır.50 ton ağırlığında ve 200 kilowatt elektrik harcıyordu.Eniac'ın yapılış amacı Alman kuvvetlerine karşı savaşta üstünlük sağlamak içindi.Hafızasında programları tutamazdı.


EDVAC
Edvac ikilik taban sistemini kullanan ilk elektronik bilgisayardır.
Programlanabilir hafızaya sahiptir.

Von Neumann Architecture
Elektronik bilgisayarların nasıl program hafızası ve bilgi işleme sürecine sahip olacağını açıklayan ilk kişidir.İlk yayını Edvac için yayınlanmıştır.Bu mimari Aritmetik Mantık Ünitesini,Kontrol Ünitesini,Hafızayı ve Girdi/Çıktıyı içermektedir.Bu mimari hala bütün bilgisayarlarda ve elektronik cihazlarda kullanılmaktadır.



UNIVAC
Bu bilgisayarı geliştirenler ise yine J.Presper Eckert ve John Mauchly'dir.Univac bir elektronik bilgisayardır.Delikli kart kullanan binlerce vakum tüpü içermektedir.Veri girişi çıkışı ve veri depolaması bulunmaktadır.





Neden Kod Hayali ismini seçtim?

Neden Kod Hayali ismini seçtim?

Neden Kod Hayali ismini seçtim?

20 yaşında bir vakıf üniversitesinin Yazılım Mühendisliği bölümünde 1. sınıfta okuyan bir gencim.Yıllardır hayalim olan Yazılım Mühendisliğine adım adım ilerliyorum.Bu yolda da öğrendiklerimi bir blogta paylaşarak hem öğrendiklerimi pekiştirmek ve gerektiğinde not mahiyetinde geri dönüp okumak hem de belki bir kişiye bile faydası dokunur diye paylaşmayı umut ediyorum. Kod yazmak benim için müthiş bir zevk kaynağı aslında.Sıfırdan birşeyler üretmek,hatalarla karşılaşmak ve onlara çözümler üretmek heyecan verici geliyor. Bir hayali yaşadığımı hissettiğim için de en uygun ismin bu olacağını düşündüm. :)