17 Nisan 2009 Cuma

Bilgisayar Mühendisliği

Bu sefer başka bir kaynaktan aldığım bir yazıyı buraya kopyalıyorum. Bilgisayar programcısı olmak isteyenler için amatör bir şekilde yazılmış ama içi dolu bir yazı. Web tasarımcısı olmakla bilgisayar programcısı olmak arasındaki farkı anlatıyor. Ayrıca programcılığın hiç bitmeyen basamaklarından bahsediyor. Gerçektende böyle karmaşık bir alan daha görülmemiştir o yüzden herkes bu işe başlamadan  önce çok araştırır. Şunuda söyleyebilirimki sayılı üniversitelerin bilgisayar mühendisliği bölümlerinden mezun olan kişiler dahi kod yazamamaktadır. Devamı ise bir forumdan aldığı kısa ve öz yazıda:

Çok uzun çok. Anlatılacak çok şey var verilecek çok cevap var hangisine vereyi bilemiyorum.

Birazcık (çok değil) programlama ile ilgilendiğim için forumlara girerim her girdiğim de benzer bir başlık bulurum.

İçerik de aşağı yukarı aynı olur hep.

Birileri dilden girer, öbürleri algoritmadan çıkar.

Birileri web dillerini över bir diğer OOP (Nesneye yönelik programlama) der.

Benim gibi C fanatikleri de tutturur c de c diye.

Her neyse ;

Bu sefer bir değişiklik yapayı başka bir yerde yazmadığım şekilde yazayım.

Sonda söyleyeceğimi başta söyleyim :)

Yirmi yıldır uğraşıyorum ben programcı oldum diyemedim. Nasıl olunur sorusuna cevap yok bu nedenle.

Yalnız size şunu söyleyim. Akademik olarak işler nasıl yürür anlatsak işin tersi sadece programlamada yaşanır. Yani bilimsel çalışmayı yaparsınız ardından makale yayınlarsınız sektörde bunu alır ürüne çevirir. Bunun tek istisnası bilgisayar sektörüdür. Siz daha bir şeyin bilimsel açıklamasını getirmeden birileri yeni bir ürün getirir. Kısacası akademi her zaman bilgisayar sektörünün gerisinde kalıp ürettiklerini belkelemek ve kanıtlamakla uğraşmak zorunda kalacaktır. (Tarihe not düştüm.)

Bu nedenle bilimsel makale okumakla, kitap okumakla şunla bunla kursla asla iyi bir programcı olunmaz. Ama ilk adımı atmaya yardımcı olur.

Soruyu soran arkadaşa maksadı bilmiyorum. Para kazanmaksa; Ben o işte yokum bunu anlatamam.

Ama yeni iyi birşeyler yapmaksa; dediğim gibi ben sadece yirmi yılımı verebilmdim ve öğrenecek çok şeyim olduğunu gördüm.

Dillerle uğraşırsan ki gördüğüm asp falan web programcısı olur çıkarsın. Web sayfası tasarlar para kazanırsın.

Yada arkadaşların dediği dillerden birini yada bir kaçını öğrenirsen muhasebe programı yazar durursun.

Dil seçimi ayrı konu buna değinmeyeceğim.

İşin felsefesi karışık herşeyde tek mesaja sığmayacak. Öncelikle elinin biraz havyaya değmesi lazım. Yani devre teorilerini okumakla o devreleri kurmak farklı şeylerdir. Elin biraz kirlenecek biraz havya dumanı yutacaksın.

O devre elamanlarını kurcalarken göreceksin ki bellek modülleriyle PIC lerle ve PLC lerle uğraşmaya başlayacaksın.

Sonra dünya bakış açın değişecek, içinde belleği bulunan PLC ve PIC entegreleri ve burada sayamadığım başka tümleşik devre elemanları bulunan herşeyin bir şekilde programlanabildiğini kavrayacaksın.

Yani artık dünya senin için, PC den ibaret değil her türlü programlanabilir elektronik aletin nasıl programlanabildiğini çözümlemek için bir gözlem sahası haline gelecek. Zaten devreleri tanıdıkça ne demek istediğimi anlayacaksın.

Sonra arkadaşların ucundan kıyısından bahsettikleri, diller devreye girecek. O kadar karmaşık kodlar ve tekrarlar yazmaya başlayacaksın ki bunları daha basit dillerle çözümlemeye başlayacaksın bu dillere üst düzey diller deniyor. Bu diller sadece işleri kolaylaştırıyor fakat bazan bunlardan vaz geçip başa döneceksin çünkü üst düzey diller kısıtlanmış dillerdir. Bu durumda tekrar eline data sheetleri manualleri alacaksın...

Üst düzey diller konusu diller konusunun bir kısmı.

Dilleri yüzlerce şekilde sınıflayabilirsin.

Yapısal diller

Nesneye Yönelik Diller

Yorumlanan Diller

Derlenen Diller

Web dilleri, scripler,

vs vs kategorileme yöntemine göre değişir.

Dil konusuna takılma, bir iki dili öğrenince hepsindeki mantığı anlayabilecek hale gelirsin.

Dil konusunda bir abi nasihati: Dil öğrenmek başka şeydir edebiyatı başka şeydir. Her dil bilen kitap yazamaz...

Bu aşmada arkadaşlar algoritmadan bahsetmişler bu işin edebiyatı algoritmadır. Bir işi yapmanın yol haritası ve basamaklarıdır da diyebiliriz. Yöntemlerin ne kadar özgün ve sade ise o kadar saygıdeğer çözümler üretirsin. Algoritma kitaplarını inceler öğrenirsin. Bulanık mantık yapay zeka gibi popüler konularda kulağına çalınacak...

Algoritma konusunda abi nasihatım: Sadelik zerafettir.

Bitti mi maalesef: bu başlangıçtı, ilerleyen yıllarda öğrendim ki iyi edebiyat için iyi matematik lazım. Olasılık teorileri, ikili sayı sistemleri, diferansiyel denklemler, matrisler, sonlu eleman yöntemleri, nümerik analiz, laplace açılımları ve sayamadığım bir çok konuda bilgi edinmen gerekecek. Çünkü; Programlama matematiktir...

Sonra bir yol ayrımına geleceksin;

PC programlama yada otomasyon ve gömülü sistemler.

Tahminim PC seçeksin; bu nedenle otomasyon ve gömülü sistemlerden bahsetmeyeceğim.

PC üzerinde de yol ayrımları çok. Windows çu mu olacaksın Linux çu mu yada her ikisi de mi?

Windows çu isen bir kötü haberim daha var; API (Aplicatin Programming Interface) denilen yüzbinlerce api fonksiyonu ile boğuşmaya başlyacaksın. Sanırım ömründen u apiler bir kaç yıl götürür.

Sonuç mu muhasebe programı yazmak isteyeceksin ve göreceksin ki muhsebe de bilmen gerekecek, mühendislik programları için mühendislik, oyun programları için grafik vs vs. Ve yine anlayacaksın ki bu oyun tek kişilik bir oyun değil ekip işi uzmanlar ve takım çalışması gerektirecek...

Web konusu ise TCP/IP ve diğer protokolleri öğrenmek, OSI nin ne demek olduğunu öğrenmek, ağ topolojilerini öğrenmek gibi bir takım ek külfetler sonunda sizi ya C# yada ASP gibi Microsoft ürünlerine köle yapacak yada ucuz web sitesi pazarlamacısı haline getirir.

Virüs yazma hayalleri ve hackercıklık oynamak ise bambaşka bir konu burada anlatmam :)

Neyse çok uzatmayım. Yazsam yine kitap olacak bir konu.

Sonuç bir ata sözü: Bilgisayarın bildiği tek bir dil var 10011011...

Saygılarımla.