Monthly Archives: April 2012

Bilgisayar Mühendisliği Dersleri Nasıl Geçilir?

Bilgisayar mühendisliği, üniversitelerin en çok çalışma gerektiren bölümlerinden birisidir. Bunun sebebi, diğer çalıştırma gerektiren bölümler gibi proje ağırlıklı bir eğitimi olmasıdır. Yani dersler teorik ve pratik olarak iki grupta çalışma gerektirir. Hemen hemen her dersin projesi bulunur ve bir dönem içerisinde teslim ediliyor olması, ciddi anlamda zorlayıcıdır.

Ayrıca derslerde verilen ödevler, ilave bir yük olarak öğrencinin kısıtlı zamanına eklenir. Elbette normal bir dersten beklenen konuların çalışılması, derste anlatılan konulardan vize ve finallerde sorumlu olunması da cabası.

Peki bu dersler nasıl geçilir?

En kolay yolu, çalışmaktır. Ama vakitlice ve düzenli çalışmaktır. Yani sınavdan önceki gece yapılan çalışma genelde çok işe yarar ama çoğu zaman yeterli değildir. Ayrıca sağlıklı bir bilgisayar mühendisliği dersinin, yarısına yakın puanı ödev ve projelerden gelir.Dolayısıyla çalışmanın yanında iş üretmek de şarttır.

Aslında derslerden nasıl geçileceğini daha iyi anlamak için derslerden nasıl kalınacağını da anlamak gerekir.

Bilgisayar Mühendisliği derslerinden nasıl kalınır?

Sağlıklı bir bilgisayar mühendisliği dersini alırken, bir haftalık içeriğin kaçırılması ve sonrasında çalışılmaması, o dersten kalmak için yeterli olabilir. Dolayısıyla derslere devam etmemek kalmak için yeterli sebeptir.

Ayrıca dersin ödev ve projesi genelde teorik kısmı pekiştirici niteliktedir, dolayısıyla ödev ve projeleri yapmamak, hem puan olarak kayba sebep olacağı hem de teorik kısımdaki ilgili konuların eksik anlaşılmasına sebep olacağı için yeterince kötü bir durumdur.

Peki bilgisayar mühendisliği derslerine nasıl çalışılır?

Çalışmanın en önemli parçası, programlı ve düzenli olmaktır. Şayet zamanı düzgün yönetemezseniz hiçbirşey yetişmez. Sağlıklı bir haftalık programda, dersin saati kadar ilave vakit ayırılması gerekir. Bu durumu basit bir hesapla haftada 20 kredi ve dolayısıyla 20 saat ders alan kişinin 20 saat de ilave olarak ayırması ve haftalık 40 saatlik çalışması olarak düşünebilirsiniz. Zaten günümüzde herhangi bir yerde çalıştığınızda haftalık mesai şartı 45 saattir. Dolayısıyla kendinizi bir işte çalışıyor gibi görüp bu vakti ayırmanız çok önemlidir. Özellikle dönem başında nispeten daha fazla vaktiniz vardır, Bu vakti, o dönem işlenecek konuları önceden çalışmak ve ilk haftalardaki konuları tekrar etmek için rahatça kullanabilirsiniz. Daha sonraki haftalarda, bu vakit ödev ve projelere ayrılmak zorunda kalacaktır. Ayrıca ders konularının da zorlaşacağını düşünürseniz, ilk haftalardaki vaktin ne kadar kritik olduğu anlaşılır.

Dersten A almanın yolları:

Bilgisayar mühendisliğinin lisans seviyesinde okutulan dersleri genelde yıllardır okutulan ve çok sayıda kitabı piyasada bulunan, dünyanın çeşitli üniversitelerinde de okutulan derslerdir. Şayet hedef A almaksa (ki herkesin hedefi bu olmalı) yapılacak ilk adım, dersin kitabını baştan sona okumak (veya en azından hocanın işleyeceği konuları mutlaka okumaktır). Ders kitapları genelde konuyu bilmeyenlere göre hazırlanır ve dolayısıyla kitap okumayı gözünüzde büyütmemeniz gerekir. İkinci aşama, kitaptaki konu sonu sorularını çözmektir. Şayet sadece kitabı okursanız genel bir fikriniz olur ancak bu bilgilerin uygulamaya geçmesi çok daha önemlidir. Soruların genelde amacı bilgilerin uygulanabilir hale gelmesidir.

Ayrıca verilen derslerin çoğu dünyanın çeşitli üniversitelerinde okutulduğu için tavsiyem bu üniversitelerde bulunan sınavları da çözmenizdir. Örneğin google üzerinden “cryptography midterm” gibi bir arama ile cryptography dersinin çok sayıdaki vize sınavına ulaşabilirsiniz. Bu sorular genelde çoğu üniversitede benzerlik arz eder. Üniversitenin eğitim kalitesi azaldıkça diğer üniversitelerden kopyalanmış, kitaptan sorulmuş sorulara dönmeye başlar. Hatta test, boşluk doldurma gibi sorular gelmeye başlar. Üniversitenin kalitesi arttıkça da orjinal, daha önce başka yerlerde sorulmamış ve öğrenciyi düşünmeye sevke eden, yeni birer ufuk açan sorulara dönmeye başlar. Zaten eğitiminizin ilk bir iki senesinde dersleriniz için bu taktiği uygularsanız artık sınavların ve soruların kalitesini yargılamaya başlarsınız.

Hoca / Asistan ilişkileri

Sağlıklı bir ders, sağlıklı bir öğrenci hoca ilişkisinden geçer. Öncelikle dersleri dinlemek için hocalarınızı takip edin. Ayrıca bazı refleksler yılların verdiği tecrübeler sonucunda oluşur. Bir konuya, bir hocanın nasıl yaklaştığı aslında arka planda anlatılmayan pek çok bilgiyi barındırır. Uygulamalarınızda, asistanlardan destek almak için asistanların laboratuar saatlerinde mutlaka bulunun ve sorularınızı, konusu gelince sorun. Öğrenci olarak yapacağınız en önemli faaliyet soru sormaktır.

Sık yapılan bir hata da, konuyu iyice araştırmadan, çalışmadan soru sormaktır. Şayet bir sorunuz varsa (veya bir sorununuz) bunu sormadan önce mutlaka ön bir araştırma yapın ve sorunuz ile ilgili konuları araştırın. Aksi halde hocanızın veya asistanınızın size vereceği cevap hiçbirşey ifade etmeyeceği gibi konuyu bilmeden bırakacağınız intiba da hoş olmayacaktır.

Grup çalışması

Bilgisayar mühendisliği eğitiminin önemli bir parçası da grup çalışmasıdır. Günümüzde mezuniyet sonrası çoğu firmada bir ekibin içinde çalışacağınızı düşünürsek, hiç sevmediğiniz kişilerle çalışabilecek profesyonelliğe ulaşmalısınız. Bunu kazanmanın en kolay yolu ise, lisans eğitiminiz sırasında verilen projeleri yaptığınız takım arkadaşlarınızdır.

Genelde ilk senelerde hem konuların uygun olmaması hem de önce bireysel olarak birşeyelri başarmayı tatmanız açısından ödevler ve projeler bireysel olarak verilir. Elbette bu bireysel projelerdeki başarısızlık, daha sonraki senelerde grupta da işe yaramamanız anlamına gelmektedir. O yüzden öncelike tek başınıza verilen projelerde başarılı olmayı öğrenmeniz daha sonraki senelerde verilen grup projeleri için de çok önemlidir.

Grup projelerinde, işin kritik noktlarını doğru şekilde bölüştüğünüzden emin olun. Dersin kritik konularını bir kişinin yapması ve etrafındaki dersle ilgisi olmayan konvansiyonel konuları diğer kişilerin yapması (örneğin veri yapıları dersinde tek veri yapısı kodu yazmadan kullanıcı arayüzü yazmak gibi) bilgisayar mühendisliği projelerinde sıkça rastlanan bir sorundur.

Proje veya ödevleriniz gruba verilmediyse, grup çalışması yapmanız genelde kopya anlamına gelmektedir. Bu durumdan kaçınmak için arkadaşlarınıza küsmeniz gerekmez. Bir çözüm olarak konuları tartışabilir, kaynak paylaşımında bulunabilir ve karşılıklı birbirinize konu anlatabilirsiniz. Ancak bu eylemlerde koda veya uygulamaya doğrudan müdahale etmek genelde aynı teslimi doğuracağı için sakıncalıdır. Örneğin birbirinize kodlarınızı vermeniz genelde kopya olarak yeterli olacaktır.

Sınav Taktikleri

Bilgisayar mühendisliği sınavlarının en fazla soru grubunu yorum soruları oluşturur. Şayet konuyu anladıysanız ve bu konuyu gerçek problemlere uygulayacak yetenekteyseniz (ki beklenen de budur) bu konu üzerinde yorum yapmanız istenir. Bu yorum, bir örnek problem üzerinden olabileceği gibi, aynı konu üzerindeki farklı kavramların veya yöntemlerin karşılaştırılması veya bi konunun avantaj ve dezavantajlarının anlaşılması şeklinde olabilir.

ikinci grup sorular ise genelde kodlama ile ilgilidir. Kodlama bilgilsayar mühendisliği derslerinin tamamında bulunacağı için bir programlama dilini çok iyi öğrenmeniz gerekir. Ayrıca o ders ile ilgili kodları sınavdan önce uygulamış olmanız şarttır. Örneğin o derste anlatılan bütün algoritmaları, çalışma sürelerinizde kodlayıp çalıştırın. Bu durumda algoritmayı tanıyacaksınız. Ayrıca kodu elinizde olduktan sonra değişiklikler yapıp algoritmayı deneyebilecek ve yorumlayacak seviyeye geleceksiniz. Aslında bilgisayar mühendisliği eğitiminin önemli bir kısmını kodlar oluşturu. Çoğu kod eğitim hayatınızın sonrasında belki işe yaramayacaktır ancak konuyu öğrenmeniz için çok önemlidir. Seneler önce network dersi alırken, bir endüstri mühendisliği öğrencisi arkadaşımla konuştuklarımız aklıma geliyor. Network dersinde önce bir protokol yazmamız istenmişti. Bunu yazdıktan sonra deneme amaçlı web sunucu, email sunucu gibi kodları yazıyor ve bazı modüllerini internetten bulup değiştiriyordum. Arkadaşım “ne gerek var ki zaten yazılmış” gibi bir tepki vermişti. Elbette yazılmış çok iyi çalışan sunucular vardı, ve bunu ben de biliyordum ama bilgisayar mühendisliğinin farkı biraz da burada, sizin bir yapıyı anlamanız açısından onun koduna hakim olmanız gerekir. Örneğin yazdığım web sunucusu hiçbir zaman kullanlmadı ama ben bir web sunucusunun nasıl çalıştığını öğrenmiştim ve bunu hiçbir zaman unutmadım.

Son Söz

Bu disiplini seçerek aslında bir yaşam biçimini seçmiş oldunuz. Genelde düzensiz uyuyan, çok fiziksel faaliyette bulunmadığı için kilolu ve çalıştığınız ortama göre çoğu zaman stresli bir iş hayatına adaysınız. Yol yakınken dönebilirsiniz, ancak bu işi gerçekte istiyorsanız ve gerçekten seviyorsanız, gerçekten çok başarılı olacaksınız demektir. Çünkü zeka seviyeniz, okuduğunuz okulun kalitesi veya maddi imkanlarınızın hepsi çok kötü olsa bile, gerçekten severek ilgilendiğiniz bir alanda eğitim gördüğünüzde, bütün engellere rağmen başarılı olacağınızı garanti edebilirim. En azından kişisel olarak bu durumu defalarca çok sayıdaki kişide gördüm.

Sizlere nacizane tavsiyem yaptığınız işe tam anlamıyla kendinizi vermenizdir. Bu iş derslerinizse ilginiz derslerinizde olsun. Şayet ilgi göstermezseniz, derslerden bir fayda sağlayamazsınız.

Ayrıca bu eğitimi almanızın önemli bir sebebi de, eğitiminizi ilerideki hayatınızda kullanmanız. Şayet ilerideki hayatınızda bilgisayar mühendisliğine yer yoksa zaten boşuna okumamanızı tavsiye ederim. Ancak niyetiniz bu alanda çalışmaksa öğrendiğiniz her konu birgün bir yerlerde karşınıza çıkacaktır (şayet karşınıza çıkmıyorsa o konuyu öğrenmemişsiniz demektir).

 

 

 

 

 

Bilgisayar Mühendisliği Eğitimine Ne Oluyor?

Bilgisayar mühendisliği eğitiminde son 15 yılda çok hızlı değişim oldu. Yaklaşık 15 yıl kadar önce hayatımıza girmeye başlayan internetin etkisi ile her geçen gün içerik kaybeden ve sığlaşan bir eğitim sistemimiz oluyor. Bu problemin yansımalarından birisi de sınavlarda görülüyor.

Genel olarak bilgisayar mühendisliği dersleri, iki kısımdan oluşur, birincisi bilmeyi ikincisi ise bildiğini nasıl kullanacağını bilmeyi gerektirir. İlk kısım, nazari eğitimle, teorik derslerde edinilir. Ancak bir bilgisayar mühendisi bu bilgiyi uygulayabilecek seviyede olmalıdır. Genelde bizim için uygulamak da kodlamak anlamına gelmelidir.

Örneğin derleyici tasarımı dersini alan bir öğrencinin, bir derleyiciyi kodlayabilmesini beklemek gayet yerindedir. Şayet çeşitli imkansızlıklar yüzünden kodlayamıyorsa bile en azından kodlama işlemleri sırasında karşılaşacağı bütün problemleri bir şekilde çözebilecek seviyede olmalıdır. Benzer şekilde, veri tabanı dersi alan bir öğrenci, bir veri tabanını oturup sıfırdan kodlayabilmeli, işletim sistemleri dersini alan öğrenci bir işletim sistemini yazabilmelidir. Ağ programlama (network) dersi alan bir öğrencinin yeni bir protokol yazabilmesi veya aktif cihazların, sunucuların (örneğin web sunucusu, email sunucusu, proxy sunucusu gibi) kodlarını yazabilmesi gayet beklendik bir durumdur.

Her nedense öğrencilerde, sadece kullanmayı bilmenin yeteceği gibi bir kanaat hızla yayılmakta. Örneğin işletim sistemleri dersi alan bir öğrenci sadece linux kurup, üzerinde bir iki kod yazmayı, işletim sistemini bilmek, ve test şeklinde yapılan bir sınavı geçmeyi de başarı kabul ediyor. Oysaki bu durumun, araba kullanmayı öğrenmeye çalışan bir makine mühendisinden farkı yok. Yani bir makine mühendisi, yetenek olarak arabanın imalatı, tasarımı gibi konularla ilgilenmelidir. Arabayı kullanmak makine mühendisinin değil sürücünün işidir. Benzer şekilde bir evde oturan kişinin inşaatın nasıl yapıldığını bilmesine gerek yoktur, ancak bir inşaatın bütün matematiksel hesaplarından sorumlu bir inşaat mühendisi vardır.

İşte bilgisayar mühendisleri de bilişim dünyasındaki bütün bu yazılımların (ve donanımların) inşa edilmesi, tasarlanması, kodlanması gibi detayları bilmekle sorumludur. Bir bilgisayar mühendisinin, yazılmış bir veri tabanı üzerinde SQL kodu çalıştırarak veri tabanı bildiğini iddia etmesi, bir sürücünün makine mühendisi olduğunu iddia etmesi veya ampül değiştirmeyi bilen birisinin elektrik mühendisi olduğunu iddia etmesi kadar gülünçtür.

Günümüzde ise ne yazık ki bilgisayar mühendisliği eğitimi, gerek yetersiz eğitim kadrosu gerekse isteksiz öğrencilerin artması ile ciddi yara almaktadır. Artan kontenjanlar, yeterli kadrosu bulunmadan açılan bölümler, ve hepsinden önemlisi, üniveristeye sadece diploma almak için uğrayan ve hiçbirşey öğrenmeden mezun olmaya can atan öğrenciler kaliteyi hızla düşürmektedir.

Bizzat şahit olduğum bir durum, İstanbuldaki bir üniversite, akademik kadrosunda, tek bir bilgisayar mühendisi bulundurmadan, farklı disiplinlerdeki kişiler ile bilgisayar mühendisliği bölümü açmış, öğrenci almış ve mezun etmiştir. Bu duruma YÖK nasıl izin verir ve bu derslerin içeriği nasıl denetlenir, öğrenciler mezun olduktan sonra ne biliyordur sorularını ise sormak bile istemiyorum.

Elbette her disiplinde farklı disiplinlerden insanlara ihtiyaç var, örneğin bilgisayar mühendisliği bölümünde, matematik, istatistik, elektronik mühendisi, makine mühendisi gibi kişiler pek ala çalışabilir ve çalışmalıdır da. Bu kişilerin disiplinlerinden taşıdıkları bilgilere de ihtiyaç vardır. Ancak koskoca bir disiplini sadece bu şekilde dışarıdan gelen kişiler üzerine inşa etmek ve tek bir bilgisayar mühendisi bulundurmamak, akıl alır iş değil.Örneğin dersi verecek hocası olmadığı için, müfredatında veri yapıları (data structures) gibi temel bir ders bile bulunmayan üniversiteler bulunuyor. Kısaca her bilgisayar mühendisi bilir ki veri yapıları almayan birisi aslında bilgisayar mühendisliği eğitimi almamıştır.

Ne yazık ki yukarıda yaşananların yanında hafif kalmasına karşılık üzücü bir durumda pek çok üniversitenin bilgisayar mühendisliği bölümünün yöneticilerinin farklı alanlardan geliyor olmasıdır. Evet, bilgisayar mühendisliği nispeten yeni bir bölüm olduğu için ilk dönem hocaları, doğal olarak farklı alanlardan geçmişlerdir. Ancak günümüzde yeterli sayıda bilgisayar mühendisliği kökeninden gelen, lsiansını ve doktorasını bu koda yapmış kişiler bulunurken, farklı disiplinden insanların yönetici seviyesinde (anabilim dalı başkanı, bölüm başkanı gibi) bulunması, bu programların özünden uzaklaşmasına ve istenilen içerikte mezun yetiştirememesine sebep olmaktadır.

Ne yazık ki, yukarıdaki şartların tamamı sağlandığı durumlarda bile bilgisayar mühendisliği eğitiminin  hala çok ciddi problemleri vardır. En büyük problemlerden birisi, bu konudaki akademisyen sayısının azlığıdır. Örneğin şu anda istanbulda doktora programı bulunan 4-5 devlet ve bir o kadar da vakıf üniversitesi bulunuyor. Bu üniversitelerin yıllık doktora mezun etme kapasitesi senelere göre değişmekle birlikte 20 ile 30 civarındadır. Bu sayının son yıllarda buralara çıktığı, sadece 10 yıl önce devletteki doktora programı olan üniversite sayısının sadece 3, vakıfta ise hiç olmadığını göz önüne alacak olursak, ortalama 10 yılda istanbul piyasasına kazandırılan bilgisayar mühendisi doktor sayısının 100-150 kişi civarında olduğunu hesaplayabiliriz.

Hemen her üniversitede bilgisayar mühendisliği bölümü olduğunu düşünürsek, bu sayı, istanbulda bulunan toplam 44 üniversiteye dağılıyor. Yine çok kaba bir hesapla bölüm başına 3-4 öğretim üyesi ancak düşüyor demektir. Bu durumun eşit dağılmadığı da malum. Yani bazı üniversitelerde 30-40 kişi olduğu düşünülürse, yeni açılan ve öğrenci kontenjanları bile dolmayan üniversitelerde bu bölümlerin açılmasına nasıl izin verildiği sorusu ortaya çıkıyor.

Ayrıca hemen hemen açılan her üniversitede bilgisayar mühendisliği programının bulunması, her isteyenin bu eğitimi alacağı gibi bir ortam oluşturuyor. Neredeyse hiçbir yeteneği olmayan, hiçbir elemeye tabi tutulmayan kişiler çok rahat bir şekilde bilgisayar mühendisliği programlarına yerleşip eğitim alabiliyorlar. Ayrıca hem vakıf hem devlet üniversitelerinin bir kısmında ne yazık ki olan, öğrenciyi memnun etme, öğrenci ile problem yaşamama kaygısından dolayı, neredeyse hiç zorlanmadan mezun olabiliyorlar. Bu durum bilgisayar mühendisliği ile neredeyse hiç alakası olmayan bilgisayar mühendislerinin türemesine sebep oldu. Genelde mezuniyet sonrası farklı işlerle uğraşan (pazarlama, reklam, satış, insan kaynakları, yöneticilik vs. ) bu kişilerin neden ve nasıl bilgisayar mühendisliği programına yerleştirildiği ise tam bir soru işareti.

Peki kalitesiz bilgisayar mühendislerinin ne zararı var diye sorabilirsiniz. Bu sorunun aslında çok üzücü cevapları bulunuyor. Başta ülke ekonomisi zarar görüyor. Sayısız yazılım projesi daha geliştirilme aşamasında veya uygulanmaya başladığından kısa bir süre sonra başarısızlıklar yüzünden çöpe gidiyor. Proje ile birlikte harcanan çok yüksek ücretlerde yitirilmiş oluyor. Her ülke yazılım konusunda milli stratejiler geliştirirken, ülkemizde ne yazık ki hiç bir eğitim stratejisi bulunmaması sonucunda, yerli yazılım sektörü hem imaj kaybetmekte hem de ülke içindeki yazılım ihtiyacını karşılayamadığı için çoğu firma yazılım ithalatına yönelmekte, bu da ikinci bir kayıp olarak ortaya çıkıyor.

Ayrıca yazılım sadece bir kere yazılıp biten bir ürün değil aynı zamanda yaşayan bir varlıktır. Bu yüzden yazılımın ayakta tutulması gelişmelere uygun olarak güncellenmesi, bakımı ve işletilmesi gibi çok sayıdaki basit işler için yabancı firmalara ücretler ödenmesi, Zaten donanım konusunda oldukça kötü olan ülkemizde yeni bir problem olarak ortaya çıkıyor.

Kısacası bir zamanların en gözde bölümü Türkiyedeki bir kısım üniversitelerin ve merkezi otoritelerin yanlış uygulamaları yüzünden artık alarm sinyalleri vermeye başladı.

Çözüm için yapılabilecek şeyleri de bir gün vakit bulursam ayrı bir yazıda yazmayı düşünüyorum.

Site Kayıt ve Barındırma

Bu sitenin hazırlanması sadece 8 dakika aldı, bu süre içerisinde iki kere kredi kartı bilgilerimi yanlış girmem de dahil. Bundan 15 yıl önce bir siteyi kayıt ettirmek (register) ve barındırma ayarları (hosting) yaklaşık 2 gün alıyordu.

Diyelim ki isim sunucusunu (name server) yanlış yazdınız, bir iki gün daha bekliyordunuz ki kayıt eden kuruluşta bu bilgiler güncellensin. Artık web sitesi yayınlamak da açmak da çok kolaylaştı çook.

Ve Başlangıç

Bu sitenin amacı, bilgisayar bilimleri, bilgisayar mühendisliği, bilişim sektörü gibi bil* regular expression’ına uyan konulardaki yaşadıklarımı aktarmaktır. Serbest bir şekilde blog yapısında içerik yayınlacaktır. Ansiklopedik olarak yayınladığım içerikler için www.bilgisayarkavramlari.com sitesini ziyaret edebilirsiniz.