Burak Selim Senyurt(MVP)
Matematik Mühendisi bir .NET Severin Yazıları...

NedirTv?com Yeni Arayüzü ile Yayında

Cuma, 23 Temmuz 2010 20:45 by bsenyurt

blg217_Giris

Merhaba Arkadaşlar,

Yaklaşık 2 hafta önce NedirTv?com’ u yeni arayüzü ile yayına aldık. Laughing Daha kullanışlı ve hızlı arayüzümüzle daha fazla yazılımcıya ulaşmayı umuyoruz.

Yeni arayüzü hazırlayıp kodlayan ve bu iş için büyük emek harcayan Alper Özçetin ile Alp Çoker' e de teşekkürlerimizi iletiyoruz. Ayrıca Daron Yöndem ve Muammer Benzeş' e de yardımlarından dolayı müteşekkiriz.

NedirTv?com ailesi ve değerli takipçilerine hayırlı olması dileğiyle hepinize mutlu seyirler.

Türkiye’ nin Açık Kaynak Topluluğu Birliktegeliştir Yeni Versiyonu İle Yayında

Salı, 15 Haziran 2010 23:14 by bsenyurt

bgKareAçık kaynak kodlu proje geliştirme yaklaşımının giderek yaygınlaştığı günümüz yazılım dünyasında Microsoft platform ve araçları kullanılarak birçok açık kaynak kodlu uygulama geliştirilmekte ve Microsoft'un kendisi de bu konuda çalışmalar yapmaktadır.

Açık kaynak kodlu bir içerik yönetim sistemi olan Umbraco üzerine kurulan Birliktegeliştir, Türkiye'de de Microsoft platformlarında açık kaynaklı projeler geliştirilmesi ve mevcut açık kaynak kodlu projelerin kullanımının yaygınlaştırılmasını amaçlamaktadır.

Zaman içinde yaygınlaşan açık kaynak kod topluluğuna daha iyi içerik sağlamak amacıyla Birliktegeliştir yeni arayüzü ve yeni özellikleriyle yayında.

Sizlerin de kendi projelerinizi ve kendi içeriğinizi rahatlıkla paylaşabileceğiniz Birliktegeliştir'de ayrıca Türkiye'de geliştirilmiş açık kaynak kodlu projelere, bugüne kadar dünyada yapılmış açık kaynak kodlu uygulamaların kullanımı ile ilgili makale, video gibi Türkçe kaynaklara ulaşabilirsiniz.

Bunun yanısıra uygulama geliştiricilerin kodlama sırasında çoğunlukla kullandığı kod bloklarına Kod Parçaları kısmından ulaşabilirsiniz.

Birliktegeliştir topluluğuna www.birliktegelistir.com adresinden ulaşabilirsiniz.

E-Mail: birliktegelistir@birliktegelistir.com
Twitter: www.twitter.com/bgelistir

Workflow Foundation Öğreniyorum Ödülünü Sahibi Belirledi ve Nihayet Kitabına Kavuştu

Perşembe, 10 Haziran 2010 10:15 by bsenyurt

blg198_BookMerhaba Arkadaşlar,

Bir süredir NedirTv?com sponsorluğunda devam ettirdiğimiz "Workflow Foundation 4.0 Öğreniyorum" görsel eğitim serimize devam etmekteyiz. Bu serinin 5+1=6ncı dersinde Argument kavramına değinmiş ve sunumun sonunda bir de ödüllü soru sormuştuk.

Sorunun doğru cevabını verenler arasından yapılan çekilişte Ergün Yücel arkadaşımız ödülü kazanan kişi oldu. Ödülümüz ise Amazon sitesinden 30 dolara kadarlık bir kitap.

Ergün Yücel arkadaşımız bu konuda oldukça başarılı bir tercih yaptı ve tasarım kalıplarını gerçek hayat örnekleri ile son derece sağlam anlatan Head First Design Patterns kitabını seçti.

Kendisine Workflow Foundation Öğreniyorum serisine gösterdiği ilgi için teşekkür ediyorum. Ayrıca kendisini verdiği doğru cevap için de kutluyorum.

Tebrikler Ergün Bey. Çalışmalarınızda başarılar.

Ve işte sonunda kargo Ergün Bey' in eline ulaştı!!! Laughing

Kendisi sağolsun ödülle birlikte bir fotoğrafını da bizimle paylaştı. Aslında kargonun kendisine ulaşması beklediğimden uzun sürdü. Her zamanki gibi standart olarak Amazon.co.uk üzerinden Priority Express ile ürünü istedim. Genelde UPS firması kargoları getirip elden teslim etmekte. Üstelik sabah verdiğim bir siparişin ertesi gün öğle saatlerinde elimde olduğuna da şahit oldum. Lakin bu sefer devreye bir Fransız kargo firması girdi. Cronopost. Firmanın sitesinde gönderi takibini yapmak istediğimde Fransızca bir portal ile karşılaştım. Ekrana tam bir Fransız gibi baktığımdan Sealed hiç bir şey anlamadım. Kargo neredeydi, ne yapmaktaydı, gecikme söz konusu muydu?

Halbuki bu tip uluslararası bir kargo şirketinin ana sayfasında dil desteği olması gerekirdi diye düşünürken Ergün Bey ile olan mailleşmelerimiz sonrası kendisinin ingilizce sayfasını da bulduğunu öğrendim. Hiç olmassa ana sayfaya bir kaç ülke bayrağı koysalar da, insanlar kolayca Multi - Language desteğini alabilse. Fransız milliyetçiliği dedikleri bu mu acaba? Hatta kargo firmaları gönderilerini harita üstünde gösterseler daha güzel olmaz mı? Örneğin kargo uçakta iken harita üzerindeki minik bir uçak ikonu da eş zamanlı hareket etse. Ne manzara olurdu ama değil mi? Wink

Tabi ben Ergün Bey ile mailleşirken boş durmadım ve şirkette yan masamda oturan Fransa doğumlu Abdullah arkadaşımdan yardım istedim. Abdullah,  Sharepoint konusunda şirketimizin en önemli danışmanlarındandır. Üstelik sayısız proje tecrübesi bulunmaktadır. Hatta yandaki resimde biraz yorgun gözükmesinin sebebi de şu anda birden fazla proje ile ilgileniyor olmasıdır. Bu özelliklerinin yanında ana dili gibi Fransızca ve İngilizce' de bilmektedir.

Kendisinden yardım istediğimde önce sayfaya baktı ve sonrasında yazılanları akıcı ve düzgün bir şekilde Fransızca okudu(Fransızca çok güzel bir dil aslında) Sonra şöyle dedi "Aaaa...Bu kargo bizim orada!" Smile Sonunda Abdullah arkadaşımdan kargo ile ilişkili detayları öğrendim. Kargo gideceği uçağı kaçırmıştı ve bir sonraki uçuş için beklemedeydi. İşte tam bir skandal. Daha da garibi, Ergün bey ile haberleştiğimde gönderinin Yurt İçi Kargo ile ulaştırıldığını öğrendim. İlginç bir durum. Nitekim Priority Express seçeneğinde gönderi en başından teslim edilen ana kadar UPS firması tarafından taşınmaktaydı. Ancak sonuç itibariyle kitap Ergün Bey' e ulaştı.

İlerleyen zamanlarda yeni ödüllerimizde olacak. Tabi bunlar birer sürpriz. Bizi izlemeye devam edin.

RTM Yayınlandı

Salı, 13 Nisan 2010 23:29 by bsenyurt

Merhaba Arkadaşlar,

2008 yılının son çeyreğiydi. Out Source olarak çalıştığım bankada .Net 2.0 tabanlı olarak geliştirilen WinForms uygulamasının yabancı sistemler ile olan entegrasyonu üzerinde çalışıyordum. Bir yandan da .Net Framework 4.0 ile ilişkili ilk bilgileri tedarik etmeye çalışıyordum. WCF 4.0 ve WF 4.0 tarafında gelecek olan yeniliklerin ne olacağını çok merak ediyorum. Tabi ki ortada çok fazla kaynak yoktu.

Bir gün iş arkadaşlarımla birlikte yemekteyken telefonum çaldı ve o zaman ki MVP Turkey Lead' imiz Mehmet Emre benden, Microsoft Yazılım Zirvesinde WCF & WF 4.0 anlatıp anlatamayacağımı sordum. Büyük bir onur ve sevinçle kabul ettim. Smile Telefonu kapattığımdaysa biraz panik yaşadığımı itiraf ediyorum. Çünkü çok az kaynak vardır. Çok şükür ki yeniliklerin ilk haberleri veya planlananlar Microsoft PDC 2008' de tanıtılmıştı.

O zaman gerçekleştirdiğim sunumda WCF & WF 4.0 dışında, Dublin, Oslo, Quadrant kod adlı konulara değindiğimi de hatırlıyorum. Elimde Visual Studio' nun yeni sürümü yoktu ancak PDC 2008' de yayınlanan ve Virtual PC üzerinden çalıştırılan bir PreBuild versiyonu bulunmaktaydı. O sürüm üzerinden denemelerimi yapmış ve sunumuma hazırlanmıştım.

Zaman ilerledikçe Beta 1 sürümü ile karşılaştık. WF 4.0, C# 4.0, Visual Studio 2010 IDE' si ile ve diğer pek çok alanda gelen yenilikler çok heyecan vericiydi. Artık indirilip kurulabilir bir sürüm mevcuttu ve bloğumdaki yazılarım ve görsel eğitim materyallerim için bolca sebep bulmayı başarmıştım. Wink

Derken Beta 2 sürümü geldi. Beta 1 ile yaptığım ve henüz blogda yayınlamadığım bazı örneklerin, köklü değişiklikler nedeni ile Beta 2' de çalışmadığını gördüğümde hiç üzülmemiştim. Her zaman ki gibi Microsoft' un haklı sebeplerden dolayı bu değişiklileri yaptığını ve iyi de ettiğini biliyordum.

Ve sonrasında RC(Release Candidate) sürümüne kavuştuk. Parçalar daha da yerine oturmaya başlamıştı.

Nihayet dün itibariyle RTM sürümü ile karşı karşıyayız. Dün akşam saat Türkiye saati ile 20:00' da MSDN abonelerine de açılan Visual Studio 2010' un Ultimate sürümünü indirdim ve ilk bisikletini almış bir çocuk heyecanı ile kurulumu gerçekleştirdim. Çok yakında Release sürüme kavuşacağımızı bildiğimiz Visual Studio 2010 yeni özellikleri ile gerçekten baştan çıkarıcı bir Developer deneyimini vaat ediyor. Özellikle mimari taraf için getirdiği yeni IDE kabiliyetleri ve yetenekleri harika. Bu deneyimi kaçırırsanız yazık edersiniz...

Yazılımcı için İşsizlik

Cuma, 2 Nisan 2010 10:00 by bsenyurt

Merhaba Arkadaşlar,

Üniversiteden yeni mezun veya bitirmekte olan ve kariyerinde bilgisayar yazılım teknolojileri üzerine ilerlemek isteyen pek çok genç arkadaşımız için en büyük kabuslardan birisi de iş bulmaktır. Ne yazık ki global kriz, ülkemizin içinde bulunduğu şartlar ve daha pek çok nedenden ötürü ilk kaygımız "doğru işi bulmak" yerine, "bir iş bulabilmek" olmaktadır. Hatta çoğu zaman herhangibir iş bulmak kadar kötümser bir senaryo da söz konusu olabilir ki ben bu yazımızda bu konuya değinmeyi düşünmüyorum. Şu andan itibaren yazılım alanında ilerlemek istediğimiz konusunda hem fikir olduğumuzu ve buna göre bir iş bulma kaygısını taşıdığımızı düşünerek ilerlememiz daha doğru olacaktır.

Matematik Mühendisliği mezunu bir birey olarak ispatlara hayatımın büyük bir bölümünü adamış olsam da, her zaman için istatistiki verilerin gerçek hayat problemlerinin çözümünde önemli rol aldığını düşünmüşümdür. Amerikalıların spor organizasyonlarını seyredenler (Özellikle benim gibi NBA maçlarını takip edenler) olur olmadık istatistik veriler yayınladıklarını bilirler. Örneğin "Takımının geriden gelerek öne geçtiği bölümlerde, bench' ten gelen oyunculardan boyalı bölgeden yaptığı iki sayılık atışlarda en yüksek başarı yüzdesi gösteren power forward' lerin bir sezonluk veya o an oynanamakta olan maç için anlık  istatistiki verisini almak" gibi...

Aslında Amerikalılar bu tip istatistikleri çıkartmakta çok ta haksız sayılmazlar. Çünkü meseleyi kavrayabilmenin en iyi yollarından birisi sayısal değerlere dayanan istatistiki verileri incelemekle mümkün olacaktır. Bu şekilde yanlış veya doğru giden pek çok faktörü görme ve tedbir alma şansı bulunmaktadır.

İtiraf etmeliyim ki MBA Yüksek Lisans projemi verdiğim dönemden bu yana yıllardır istatistik verileri incelememiştim. Özellikle o zamanki kaynaklara kolayca ulaşma sıkıntısı göz önüne alındığında Google gibi arama motorlarının ve istatistiki rapor sağlayan veri ambarlarının ne kadar önemli olduklarını bir kere daha görmüş oldum. Şu an için sizlere çok detaylı istatistik veri sunmayacağım. Ancak basit bir istatistiğinde durumumuzu görmek açısından önemli bir etken olacağı kanısındayım. Bu amaçla Türkiye İstatistik Kurumundan aldığım son bir kaç yılın işsizlik verilerini incelediğimi ve aşağıdaki grafikte görülen tablonun oluştuğunu söyleyebilirim.

Not : Türkiye İstatistik Kurumunun diğer istatistikleri için http://www.tuik.gov.tr

Buna göre örneğin 2009 yılında Yüksek Öğrenim gören her 100 kişiden 12,1' i (ki biz buna iyimser olarak 12 kişi diyebiliriz) işsizdir. Bu aslında çok yüksek bir oranmış gibi görünmeyebilir ancak bu istatistiki veride mesleki bir ayrımın olmadığı belirtmek isterim. Peki biz bu yazımızda böyle istatistiklerle mi boğuşacağız? Hayır...Ancak durum ortada. İşsizlik problemi var ve bu, genç bir yazılımcı adayı için çağın hastalıkları arasında sayılan Stres' ten daha büyük bir sorun olarak görülebilir. Dolayısıyla bu gün yazımızdaki konumuz şu olacaktır;

"İş arayan ve henüz bulamayan yeni mezun genç bir yazılımcı adayı, vaktini nasıl değerlendirebilir/değerlendirmelidir?"

İşe ilk olarak işsizliğin ne gibi problemlere yol açabileceğinden bahsederek başlamakta yarar vardır. Kendimizi en kötü senaryoya hazırlamanın yararı olabilir. Tabi geleceği umutla bakmamızı, son raddeye kadar mücadele etmemizi engellememelidir. Dilerseniz bir kaç madde ile içinde bulunabileceğimiz durumu irdelemeye çalışalım.

Donanımsal ve Yazılımsal Gereksinimler

Açıkça itiraf etmek gerekirse bilgisayar pahalı bir icattır. Hele ki Apple tarafında iseniz el yakan fiyatlara hazırlıklı olmalısınız. Her ne kadar günümüzde sayısız kredi kartı kampanyası ve taksitli alış imkanı olsa da, yazılımcıların bazı bilgileri öğrenebilmesi için iyi donanımsal özelliklere sahip bir bilgisayarı tercih etmeleri duruma göre gerekbilir. Şirketler bu ihtiyaçları çoğunlukla karşılarlar. Ancak sorun henüz iş bulamamış olmamızdır. Örneğin şu sıralarda .Net Framework platformu ile paralel programlama konusuna eğilen bir yazılımcının çalışacağı bir bilgisayarın en az çift çekirdek işlemcili olması şarttır. Kaldıki, yeni mezun olan veya son sınıfını okuyan bir öğrencinin biriktirdiği para ile iyi donanımsal özelliklere sahip bir bilgisayar alması her zaman mümkün olmayabilir. Ancak bu noktada üniversitelerin öğrencilere sağladığı laboratuvar ortamlarının önemi ortaya çıkmaktadır. Üniversitenin bizlere sunduğu bu ortamları sonuna kadar kullanmak gerekir.

Yaşananlardan : Y.T.Ü. Matematik Mühendisliği bölümünü 1993 yılında kazandım. O yıllarda üniversite laboratuvarları yenilenmek üzereydi. Bilgisayar konulu ilk dersimizde elimizde 3.5" lik HD disketler olduğunu hatırlıyorum. Ms DOS işletim sistemi yüklü bilgisayarlar söz konusuydu. Hevesli bir öğrenci olarak 286'dan 368 tabanlı işlemcilere geçirilen bilgisayarlarda vakit harcamak için fırsat kolluyordum. Ne varki o yıllarda labarotuvarlarda çalışmanın belirli saatleri ve kuralları olurdu. Öyle saatlerce kalmak, istediğiniz zaman girip çıkmak veya yaptığınız çalışmaları USB gibi mucizevi aygıtlar ile eve götürmeniz de mümkün değildi. Her şeyden önce sistemi açmak için diskete yüklü olan işletim sistemini kullanmalıydınız. Nitekim çoğu bilgisayarda Hard Disk yoktu.Ancak artık durumun değiştiğini biliyorum.

Sakın o bilgisayarları küçük görerek "Bunlarda WPF çalışmaz, Visual Studio yok, 3D uygulama geliştiremem, az Ram var, yavaş bunlar vs..." demeyiniz. Commodore bilgisayarlarda 64 Kb alan içerisinde o herkesin başından kalkmadan saatlerce oynadığı oyunların geliştirildiğini hatırlayınız. .Net Framework uygulamarı geliştirmek için mutlaka Visual Studio ya sahip olmanız gerekmediğini biliniz. SharpDevelop gibi 3ncü parti araçların olduğunu, en kötü ihtimalle .Net Framework ve Notepad' in yeterli olacağını düşününüz. Yetmedi mi? Çok mu kötü bir konfigurasyon var? Neden C, C++ kullanarak driver yazmayı öğrenmeye çalışmıyorsunuz?Wink Şöyle bir düşünün. Etrafınızda tanıdığınız kaç kişi var; donanımlar için driver yazacak derecede iyi bilgisi olan veya işletim sistemlerini yamayacak kadar C++ döktüren...Buna göre şu sonuca varabiliriz; Üniversiteki ortamın sizlere sağladığı bilgisayarların konfigurasyonu kendinizi geliştirmeniz ve işe hazırlanmanız açısından sorun değildir. Eldeki imkanları etkin bir şekilde kullanabilme yeteneğini kazanma bu düşük konfigurasyonlu sistemlerden çıkartabileceğiniz en önemli derstir.

Eğitim Materyalleri

İşsiz kalan birisinin veya halen daha iş aramakta olan birisinin yeni bir şeyler öğrenme isteğini çeşitli eğitim materyalleri ile desteklemesi önemlidir. Ne yazık ki ülkemizde yazılan yerli kitapların çoğu kişisel görüşüme göre yetersiz ve vasat. Her şeyden önce büyük puntolar ile yazılıp sayfa sayısı fazla tutulan kitapların aslında boş yere ağaç kesimine neden olduğunu düşünüyorum. Bazı kitaplar ne yazık ki dış kaynaklı kitapların bire bir çevirisi olurken, bazıları MSDN' i Türkçeleştirmekten başka bir içerik sunmuyor. Dolayısıyla her zamanki gibi dış kaynakların çok daha iyi olduklarını ifade etmek istiyorum. Bu noktada yazılım sevdalılarının vazgeçilmeleri arasında yer alan korsan PDF kitapları kesinlikle uygun bulmuyorum. Bunun yerine online olarak okunabilen PDF sunan ve bunun için çok yüksek ücretler talep etmeyen Wrox, APress, O'Reilly, Addison Wesley vb... yayın evlerini tercih etmenizi öneriyorum.

Çok doğal olarak Amazon gibi siteler üzerinden ülkemize kitap getirtmenin yüklü maliyetleri olmakta. Özellikle en hızlı gönderi seçeneğini işaretlerseniz. Embarassed Bu nedenle belki bir kaç arkadaş bir araya gelerek birden fazla kitap sipariş edip, en azından taşıma ücretini eritebilirsiniz kanısındayım. Tabi mali duruma göre en isabetli kaynağın seçilmesi çok ama çok önemli. Öyleki, Amazon sitesine girip belirli bir konu üzerine yazılım kitaplarını aradığınızda onlarca sayfa ile karşılaşılmakta. Bu nedenle seçim yapmak için işaretlenmiş yıldız değerlerine ve kitaplar ile ilişkili yorumlara bakmak, kitap içeriklerini iyi bir şekilde etüt etmek gerekmekte.

Tabi şunu unutmamakta yarar var. Halen daha öğrenciysek, üniversitelerin kütüphanelerini mutlaka değerlendirmeliyiz. Her ne kadar akademik ağırlıklı yayınlar çoğunlukta olsa da en azından nesne yönelimli bir dilin anlatıldığı kaynaklara mutlaka ulaşabilirsiniz. Hatta diğer üniversitelerin kütüphanelerini misafir öğrenci olarak ziyaret dahi edebilirisiniz.

Yaşananlardan : Bizitek firmasına çalışmaya başladığım sırada iş arkadaşlarımdan birisinin elinde Visual C# ile ilişkili Microsoft Press' in bir yayınını gördüğümü hatırlıyorum. Şaşırtıcı ama bu yayın İstanbul Teknik Üniversitesi kütüphanesine aitti. Üstelik orjinal basımdı. Amazon' dan kitap almaya gerek var mıydı? Kaynaklar zaten kütüphanedeydi.

Tabi eğitim materyalleri arasında sayabileceğimiz en önemli malzemelerden birisi de görsel içerikli olanlarıdır. Bildiğiniz üzere bir resim onlarca kelimeden oluşan bir felsefeyi tek seferde ifade edebilir. Çok doğal olarak interaktif içerikli bir yayının zihinde daha kalıcı olması söz konusudur. Bu anlamda Channel9, NedirTv? ve benzeri toplulukların sunduğu kaliteli ve öğretici içeriklerden yararlanılabilir. Özellikle How To ile başlayan Screencast' ler başlangıç için idealdir. Diğer yandan Webcast(Webiner) yayınları da işsizlik dönemlerinde oldukça yararlıdır. Bu tip oturumlarda dünyanın öteki ucundaki uzmanları dinleme ve en önemlisi canlı olarak soru sorma şansınız bulunmaktadır. Microsoft, özellikle yazılım tarafındaki Webcast, Screencast gibi sayısız interaktif materyali ile bizlere çok önemli bir veri evrenini, ücretsiz olarak vermektedir.

Yazılım Firmalarının Öğrenciler için Sundukları

Staj dönemleri çok ama çok önemlidir. Tabi eğer öğrenci olarak staj yeri ayarlanabilirse. Nitekim günümüzde iş bulmak ne kadar zor ise, staj yeri ayarlamakta o derece zor. Ancak staj yeri ayarladıysanız kıymetini bilmenizde ve gittiğiniz yerde sizinle ilgilenen kimse yoksa dahi sonuna kadar durmanızda ve hatta kendinize iş çıkartmanızda yarar var. Mutlaka bulunduğunuz ortamda dikkatinizi çeken bir eksiklik olacaktır. Pek çok çalışanın vakit ayıramadığı/ayırmadığı için boşta kalan ama yapılırsa o şirkete katma değer sunan bir şeyler...Belki şirketin kullandığı yazılım için küçük bir ek modül...Yazamasanız dahi fikrinizi sahiplenip, olgunlaştırmanız, sunmanız ve karşınızdakileri kabullenmeleri için ikna edebilmeniz yeterlidir. Yeterliden de ötedir. Tarih boyunca çoğu staj hepimize anlamsız gelmiştir. Oysaki yıllar sonra bu staj hikayeleri CV' lerde gayet hoş duracaktır. Heleki yaptıklarınızı anlatacağınız ilk iş görüşmenizde. Bu nedenle öğrencilik zamanında yapılan stajların göz ardı edilmemesi gerekir. Özellikle bir yazılım firmasında yapılıyorsa part-time çalışmak için yalvarılması bile düşünülebilir. Ancak asla ve asla stajınızı naylon torba haline getirmeyin. Geleceğinizin söz konusu olduğunu unutmayın ve işsizlik oranlarını hatırlayın.

Internet

Internet' in son on yıllık zaman dilimi içerisinde geldiği nokta düşünüldüğünde bilgiye ulaşmanın en kolay ve hızlı yolu olduğu sonucuna varabiliyoruz. Ancak bir yazılımcı için Internet çok tehlikeli bir yerde olabilir. Bunun en büyük nedenlerinden birisi çok fazla bilgi olmasıdır. Hatta zaman zaman bu durum, "Bilgi Çöplüğü" olarakta yorumlanabilir, yorumlanmaktadır. Dolayısıyla ilerlenmek istenen yola ilişkin olarak doğru ve güvenilir adreslere ulaşmakta ve bu noktalardaki kaynakları takip etmekte yarar vardır. İşsiz kalan bir yazılımcı, bilgisayarı olmasa dahi herhangibir Internet Cafe' den dünyanın diğer ucundaki sunucuda duran makaleye ulaşabilir, okuyabilir ve gerekli bilgileri alabilir. Eğer öğrencilik devam ediyorsa elbetteki Internet Cafe' lerde para harcamak yerine(ki bunun pek çok yolu vardır, Chat yapmak, Facebook' ta dolanmak, Twittlemek, Oyun oynamak vs...) üniversitenin laboratuvar ortamını kullanmak düşünülebilir.

Tabi internet üzerinden kendinize Freelance işlerde bulabilirsiniz. WinkBu konu ile ilişkili pek çok site mevcuttur. Söz konusu sitelerde proje sahipleri, taleplerini ve nasıl bir yazılımcı aradıklarını, işin ne kadar sürede yapılması gerektiğini ücreti ile birlikte açık bir şekilde ifade ederler. Önce bir işle başlarsınız. Ancak başarılı oldukça alacağınız proje sayısı artar. Hatta kendinize ait bir fikri geliştirmek için gerekli maddi desteği dahi bulabilir istediğini yazılım geliştirme araçlarını satın alabilir veya yazdırtabilirsiniz.

Yaşananlardan : Çok yakın bir meslektaşım dışarıdan Freelance iş yaparak bir iş yerine bağlı olmadan uzun yıllar çalışabilmeyi ve iyi kazanmayı başarmıştır. Üstelik yüzün üzerinde başarılı projeye de imza atmıştır. Arkadaşım o kadar çok projede görev almıştı ki neredeyse her konuşmamızda ağzından yeni bir fikir çıkar veya benim önerdiğim fikirlerin neden olamayacağını ya da olması için ne gerektiğini, nelere dikkat edileceğini söylerdi.

Proje tecrübesini iş başvurularında gösterebilmek çok önemlidir. İş verenler tecrübeye, proje çeşitlerine, karşılaşılan zorluklara bakarak daha iyi karar verebilir. Ayrıca adayın şansı proje tecrübesine bağlı olaraktan çok daha fazla olur. İşsiz olan birisi evde miskin miskin otururken, "İyi de nasıl bir tecrübe sunacağım ki?" dememeli, az önce bahsettiğim Freelance sitelerden yararlanarak başlangıç için gerekli proje tecrübesini tamamlamaya uğraşmalıdır.

Takip Edilmesi Gereken Blog Listesi(Sizin OPML içeriğiniz)

Günümüzün bilgi sunumu açısından en önemli kaynakları arasında Blog' lar yer almaktadır. Bundan yıllar önce Community' ler ne kadar ön plana çıktıysa, son yıllarda Blog siteleri aynı önem derecesinde ön plana çıkmaktadır. Özellikle Blog' ların RSS, Atom gibi formatlarda Feed içeriği sunmaları nedeniyle, kişisel bilgisayarlarımızdan, PDA cihazlardan ve cep telefonlarından kolayca takip edilmeleri söz konusudur. İş arayan ve işsiz bir halde evde oturan birisinin her gün düzenli olarak yapması gerekenler arasında, günde en az iki kere diş fırçalamak, üç öğün yemek yemek, aşırı tatlı/tuzlu yiyeceklerden uzak durmak, gazete okumak, uyumak ve liste olarak tuttuğu Blog' ları takip etmek yer alır. Tabi blog deyince yazılım sektörünün öncüleri arasında yer alan isimlerin takip edilmesinde yarar vardır. Sadece teknik konuların ele alındığı bloglar ile yetinmemek gerekir. Ürün grupları, pazarlama stratejileri, gelecek vizyonları ile ilişkili olarak yazılarını yayınlayan bireylerin Blog girdilerini de takip etmek önemlidir. Bu aşamada Feedreader gibi araçlardan yararlanarak n sayıda Blog' u tek bir uygulama içerisinden takip edebileceğinizi belirtmek isterim. Başlangıç için size bir OPML(Outline Processor Markup Language) listesi vermemi ister misiniz?

feedreader.opml (17,38 kb)

Tekrardan görüşünceye dek hepinize mutlu günler dilerim.

.Net' e Nereden Başlamalıyım?

Pazartesi, 15 Mart 2010 09:00 by bsenyurt

Merhaba Arkadaşlar,

Üniversiteden yeni mezun olmuş bir yazılımcı çoğu zaman kendisini, olimpiyat oyunlarındaki 10bin metre maraton yarışı eleme turunun başlangıç noktasındaymış gibi hisseder. Aslında pekte haksız sayılmaz. Bir kaç senelik üniversite eğitimi boyunca kazandığı nosyona rağmen, gerçek hayat çok daha acımasızdır. Sayısız rakip yetmezmiş gibi bir de iş bulma kaygısı söz konusudur. Üstelik hangi teknoloji ile ilerleyeceği meçhuldur. Kulaktan dolma bilgiler ile hareket etmek zordur. Bir kulağınızda .Net diye bağıran Bill amcayı, diğer kulağınızda iPhone development diye haykıran Steve' i duymakla kalmaz, Java aromalı kahve çekirdeklerinin kokusunu da burun deliklerinizden taaa en derin beyin hücrelerinize ulaşıncaya kadar çekersiniz. Şanslısınız ki bu yazıyı okuyorsunuz. Çünkü yazıyı okuduğunuz kişi uzun uzun zaman öncesinde .Net platformuna geçiş yapmış birisidir. Aslında Anders Hejslberg' in ayak izlerini takip ettiğimi ifade edebilirim. Bildiğiniz üzere Anders, Delphi takımındayken Microsoft' a geçmiş ve sonrasında .Net platformu doğmuştur. Kendisini C# programlama dilinin Babası olarakta tanımlayanlar vardır. Pekte haksız sayılmazlar. Laughing Peki biz yarı teknik dışı bu yazımızda neyi araştırıyor olacağız?

Uzun zamandır .Net Framework üzerinde geliştirme yapmaktayım. Bu zaman süresi içerisinde bu alanda ilerlemek isteyen pek çok genç arkadaşımızın bana yönelttiği soruların başında "Nereden Başlayacağım?" gelmekte. Bu cevaplanması çok zor olan, yoruma açık ve her profesyonelin farklı şekilde çözebileceği bir soru aslında. Aslında olaya destekli bir yerden başlamakta yarar var. Bana göre ilk hedef "hangi ürün?" olmalı. Sonuç itibariyle .Net çok geniş bir yelpazeyi hedef almakta ve geliştirilebilecek ürün çeşitlerine bakıldığında "Nereden Başlayacağım" sorusunun aslında gerekli bir soru olduğu da ortaya çıkmakta. Herşeyden önce .Net Framework ile neler yapılabileceğini, bir başka deyişle neler geliştirilebileceğini bilmek önemli.

Bir kere en basit haliyle Console uygulamaları geliştirebilirsiniz ki pek çoğunuzun "Iykkk" dediğinizi duyar gibiyim. Oysaki C#, VB.Net gibi programlama dillerinin saf olan özelliklerini, kabiliyetlerini öğrenmek, gerektiğinde test etmek için bulunmaz bir uygulama çeşididir. Nitekim sizi Windows Forms,WPF veya ASP.NET' in ve benzerlerinin görselliğinden uzaklaştırır ve sadece programlama diline odaklanmanızı sağlar. Tabi şu önemli noktayı da unutmamak gerekir; örneğin Sistem Yöneticileri bazı işlerini Console ekranından yapmayı daha çok tercih ederler. Bu ilk işletim sistemlerinden gelen bir alışkanlık olarak düşünülebilir de.

İkinci bir ürün grubu olarak Windows Forms veya .Net Framework 3.0 sonrasında çıkan Windows Presentation Foundation uygulamalarını düşünebiliriz. Bu tip uygulamalar görsel arayüzleri sayesinde kullanıcıların daha fazla ilgisini çekebilecek veya kullanıcı deneyimi(User Experience) olarakta bilinen tecrübelerin daha fazla yaşanabileceği ortamlar sunmaktadır. Genellikle Intranet tabanlı olan veya sadece masa üstünde yerel olarak çalışan pek çok uygulamanın Windows Forms veya WPF tabanlı olması söz konusudur. Ancak bu ürün grupları arasında keskin farklılıklar bulunmaktadır. Özellikle WPF tarafında yazılımcının XAML gibi kavramlarla karşı karşıya kalması söz konusudur. Windows Forms uygulamaları geliştiren yazılımcılar bile, WPF tarafına ilk geçiş yaptıklarında kısa bir süre afallamaktadır. Çünkü farklı bir dünyanın kapıları açılmaktadır.

Bir de, "Ah şu Facebook, google gibi bir fikir bulsam, ya da Amazon gibi bir site geliştirsem de...köşeyi şuradan dönsem..." diyerek hayaller kuranlar için ASP.NET dalı söz konusudur. Web tabanlı uygulamaları geliştirmek aslında sanıldığı kadar kolay değildir. Alt tarafta yatan pek çok temel kavramı bilmek gerekmektedir. HTML(Hyper Text Markup Language) den iyi anlamak, yeri geldiğinde Javascript ile müdahalelerde bulunmak şarttır. Ama daha ileri seviyelerde, bu alanda ilerlemek isteyen yazılımcıları AJAX(Asynchron Javascript And Xml), XML(eXtensible Markup Language), JSON(JavaScript Object Notation), MVC(Model View Controller), SEO(Search Engine Optimization), CSS(Cascading Style Sheet) gibi konular ağırlar. Üstelik Web' in doğası Windows/WPF/Console gibi uygulamalardan çok daha farklıdır. Stateless olmak, performans için Cache' leme yapmak, kullanıcıyı doğrulamak ve yetkilendirmek, profilini yönetmek, Web Part' lar ile sayfayı kişiselleştirilebilir hale getirmek gibi kavramların havada uçuştuğu bir dünyadır.

Tabi Web uygulamaları diyince akla son yıllarda Silverlight gibi RIA(Rich Internet Application) uygulamaları da gelmektedir. Bu tip uygulamalar sayesinde, Web tarafındaki kullanıcı deneyiminin en üst seviyeye çıkartılması ve çok daha zengin içeriklerin sunulması söz konusudur. İlk zamanlarında emekleme aşamasında olan bu ürün, son zamanlarda çıkan versiyonları sayesinde çok daha iyi bir duruma gelmiştir. Tabi Silverlight tarafında da WPF kökleri bulunmaktadır. Bu nedenle XAML(eXtensible Application Markup Language) tarafına hakim olmak önemli olabilir. Diğer yandan yazılımcılar, tasarımcıyı geliştiriciyle ayırt eden konsept nedeniyle belki de sadece kod tarafıyla ilgilenmelidir. Nitekim tasarımı kolaylaştırmak adına Expression ürün ailesinin kullanılması önerilmektedir.

Yaşananlardan : Web dünyasına adım attıktan bir süre sonra kendime bir site yapmananın gelişimim açısından çok önemli olacağını düşünmüştüm. www.bsenyurt.com' un ilk temellerini attığımda tasarım yönünden sınıfta kaldığım çok açık ve belliydi. Bir türlü doğru renkleri seçemiyor, sayfanın HTML giydirilmesi konusunda başarı sağlayamıyordum. Açıkçası içime sinmeyen bir tasarım oluşmaktaydı. Kod tarafında bir sorun yoktu. Ama zaten ilerleyen zamanlarda çalıştığım tüm yazılım şirketlerinde, web uygulamalarının tasarımı ile ilgilinen ayrı arkadaşların olduğunu görmüştüm. Halen daha da böyledir ve böyle olmasında yarar vardır. Kendi sitemi görsel açıdan toparlayamayacağımı anlayınca çocukluk arkadaşımdan yardım istedim. Kendisi Bilkent Üniversitei Grafik Tasarım bölümünü burslu okumuş ve yüksek başarı ile bitirmişti. Bir web sitesinde hangi font' ların kullanılacağını, kurumsal kimliği yansıtacak renklerin neler olması gerektiğini, sayfa tasarımında neyin nerede bulunabileceğini çok iyi bilen yetenekli bir arkadaşımdı. Sadece 3 renk kullanarak sitemin görüntüsünü bir anda değiştirmiş ve benim için bir sanat şahaseri gibi görünen arayüzü bir kaç dakika içerisinde oluşturmuştu. Sonra tabi o tasarımı hayata geçiremedim ama yine de bir tasarımcı ile geliştiricinin keskin çizgiler ile bir birlerinden ayrılan ikililer olduklarını da gördüm.

İşte bu keskin çizgiye rağmen her iki tarafın rahat çalışabilmesi adına yazılım şirketlerinin de yatırımlar yaptığını görmekteyiz. Söz gelimi Microsoft' un Expression ailesi buna verilebilecek en güzel örneklerden birisidir. Visual Studio geliştirme ortamı ile olan entegrasyonu sayesinde birlikte çalışılabilirlik hem ayrık hem de bir arada olmasının önemi ortaya çıkmaktadır.

Görsel tarafta sayılabilen ve aslında bilgisayarı olmayanların dahi kullanabileceği bir ürün grubu da söz konusudur. Mobil uygulamalar. Smartphone, PDA cihazları, kısacası Windows Mobile işletim sistemine sahip ve bir anlamda da üzerlerinde .Net Compact Framework yüklü olan aygıtlar için geliştirmeler yapılabilir. Aslında Mobil dünyası çok farklıdır ve bu tarafta pek çok zorluk vardır. Cihazların bilgisayarlara göre daha sınırlı kapasitede donanıma sahip olması, ekran boyutlarının küçük olması gibi faktörler bunların arasında sayılabilir.

Yaşananlardan: Eğitmen olarak yaşadığım ilk kurumsal tecrübem, Boehringer-ingelheim isimli ilaç firması için olmuştur. Tesadüfe bakın ki bu ilk kurumsal eğitimin konusu zayıf olduğum alanlardan birisi olan Mobil Uygulama geliştirmedir. Eğitimi verdiğim sırada .Net Framework 2.0 henüz Beta aşamasındaydı. Eğitimde en çok üzerinde durulan konular, mobil cihazların donanım kapasitelerinin yetersiz olması, offline konuma sık sık düşmeleri nedeniyle sunucu üzerindeki kaynaklar ile olan senkronizasyonlarının zor teknikler ile gerçekleştirilmek zorunda kalışı vs gibi güçlüklerdi. Aslında teorik bilgimiz ne kadar iyi olursa olsun saha tecrübesini yapmadığımız takdirde yeteneklerimizin gerçek hayattaki sınamalarını asla öğrenemeyebiliriz. Hatta söz konusu alanlarla ilişkili olarak pek çok Case Study okusak bile fiziki saha tecrübesinin yerini tutmayacaktır.

Ürün ailesi içerisinde yer alan önemli parçalardan birisi de Servis uygulamalarıdır. Bu uygulamalar .Net Framework 3.0 çıkana kadar çeşitlilik göstermiştir. XML Web Service' leri, Windows Service' leri, COM+ veya MSMQ hizmetleri vb. .Net Framework 3.0 sonrasında ise WCF(Windows Communication Foundation) ortaya çıkmış ve Microsoft' un servis tabanlı uygulama geliştirme modelinin yeni yüzü haline gelmiştir. İşe yeni başlayan bir yazılımcı için servis geliştirmek çok basit öğrenilebilecek bir süreçtir. Aslında bu bir yanılgıdır. Nitekim servislerin asıl hedef noktası Servis Yönelimli Mimari(Service Oriented Architecture) tarafıdır. Gerçekten de SOA için servis geliştirilecekse, olayların bambaşka bir hal aldığı ve sayısız SOA Tasarım Kalıbının bilinmesi gerektiği gibi korkutucu bir senaryo ile karşılaşılmaktadır. Hatta pek çok büyük çaplı projede servisler sadece entegrasyonu sağlamak amacıyla kullanılan birer piyondur.

Yaşananlardan: Şu anda çalışmakta olduğum firmadan önce uluslar arası bir banka da yine dış kaynaklı yazılımcı olarak görev almaktaydım. Buradaki asli görevim, geliştirilmekte olan WinForms tabanlı uygulamanın, banka içerisindeki yabancı sistemler ile olan konuşmaları sırasındaki entegrasyonunu sağlamaktı. Yeri geldiğinde uzak sunucularda bulunan ve sadece soketler aracılığıyla erişilebine C tabanlı uygulamalar ile konuşulması, yeri geldiğinde COM nesnelerinin Wrap edilmiş halleri üzerinde ele alınan bileşenler(RightFax API gibi Sealed ) ile haberleşilmesi, yeri geldiğinde Windows Service' leri veya XML Web Service' lerinin yazılarak projeye entegre edilmesini gerçekleştirmeye çalıştım. İnanılması güç ama servisleri yazmak ne kadar kolay olduysa da, projenin çalıştığı banka ortamının kısıtları nedeniyle onları dağıtmak(Deployment) ve onlarla etkili bir şekilde konuşmak bir o kadar zor oldu. Dolayısıyla yine aynı noktaya geliyoruz. Saha tecrübesi bambaşka bir heyecan...

Peki ya bir Windows uygulaması veya Web Portalı ya da basit bir WCF Servisi tek başına yeterli midir? Çoğu zaman bu uygulamaların tabir yerinde ise button arkası olacak şekilde geliştirildiklerine şahit oluruz. Oysaki büyük çaplı projelerde yazılım mimarları sürekli olarak uygulamanın katmanlarını düşünür ve en uygun olanını tespit ederek tasarlarlar. Bu katmanlarda yer alan vazgeçilmezlerden birisi de Sınıf Kütüphaneleridir(Class Libraries) ve görsel bir arabirim sunmadıkları için pek çok yeni yazılımcı tarafından Console uygulaması muamelesine tabi tutulurlar(Aslında bir Class Library uygulaması içerisine static Main metodunu dahil ederek ve Visual Studio üzerinde çıktının Console Application olacağını söyleyerek Console uygulamasına çevirebileceğinizi de biliyor muydunuz?) Oysaki Enterprise Libary, .Net Framework' ün kendisi pek çok sınıf kütüphanesini ihtiva eder. Açıkçası bir Framework geliştirilmesi gerektiğinde veya katmanlı mimari tercih edildiğinde her yazılımcı er ya da geç Class Library kavramı ile karşılacaktır.

Bitti mi? Aslında saymadığımız pek çok uygulama çeşidi ve kavram söz konusu. Ado.Net Entity Framework, Workflow Foundation, Parallel Development, Component Development vb...Yine de buraya kadarki düşüncelerimizi göz önüne alarak yapabileceklerimizi gördüğümüzü var sayalım. Bir yazılımcı için bu yine de yeterli olmayacaktır. .Net Framework tarafında yazılımcıların en az bir .Net dilini etkin bir şekilde kullanabilmesi şarttır. Bu çoğunlukla C# veya VB.Net dillerinden birisi olacaktır. Tercih yaparken daha önceden C++,C veya Visual Basic kökenli olmak karar vermeyi kolaylaştıracaktır. Fakat unutulmaması gereken önemli bir nokta da, gerçek hayat projelerinde başımıza ne gelebileceğinin bilinmemesidir. Bir bakmışsınız sıradaki projede Iron Pyhton veya F# kullanacaksınızdır. Ya da tamamen platform değiştirip Java tarafında ilaveler yapacaksınızdır...Hatta kendinizi Java tarafında yazılmış servisler ile konuşacak bir entegarasyonun içerisinde bulabilirsiniz. Kim bilebilir? Son sözü söyleyen yöneticiniz değil midir? Wink Ama her ne olursa olsun .Net tarafında ilerlerdiğimizi varsayarsak, C# veya VB.Net dillerinin her ikisine de hakim olmak bir avantaj olabilir.

Yaşananlardan: Bir kaç yıl önce çalıştığım bir .Net projesinde Türkiye' nin önde gelen bir Holding' i için önemli bir ASP.NET uygulaması geliştirmekteydik. Ben her zamanki gibi dış kaynak elemanı olarak projeye dahil olmuş ekibin bir parçasıydım. Projede, Holding tarafında yer alan ekip arkadaşlarımız da mevcuttu. Gelin görünkü bizim sahip olduğumuz hazır alt yapı C# tabanlı iken, Holding tarafındaki arkadaşlarımız VB.Net kökenli idi. Bir arada çalışılacağına göre biz biraz VB.Net onlar biraz C# yazmak durumundaydı. Aynen de böyle oldu. Ben ASP.NET tarafındaki ekranların arka planlarını VB.Net ile geliştirirken Business Layer tarafı C# tabanlıyıdı. Dolayısıyla bir anlamda dilden bağımsız harkete edebilir formasyonda uçmaktaydık. Nitekim .Net destekli birden fazla dil aynı proje içerisinde kullanılabilirdi.

Peki neler yapabileceğimizi görmek ve uzmanlaşmak için bir ürün ailesini seçmek, hangi dilleri öğrenmemiz gerektiğini bilmek yeterli midir? Ne yazık ki hayır. Undecided Başlamak için beynimizi paralel çalışabilen parçalara bölmemiz de gerekecektir. Nitekim öğrenilmesi gereken kavramların sayısı çok fazladır ve bunlar zamanlar acımasız bir şekilde beynimizin her noktasına enjekte edilmeye başlanacaktır. Buna göre biraz programlama dillerini çalışırken biraz .Net Framework içeriği araştırılmalı, biraz Tasarım Desenlerini(Design Patterns) incelerken biraz mimari modellere bakılmalı, biraz uzmanlaşmak istediğimiz taraftaki(Windows, Web, Mobile, Service Oriented vb...) güvenilir makaleleri karıştırırken biraz yeni gelen teknolojilere bakmalı vb... şeklinde bir yol izlenilmelidir.

Ancak şu an için kendimizi bu kadar fazla korkutmaya da gerek yoktur. Nereden mi başlamanız gerekiyor? Bence .Net Framework üzerinde geliştirme yapabileceğiniz bir dili iyi bir şekilde öğrenerek. İyi bir şekilde öğrenmekten kastımız, tabiki tüm anahtar kelimeleri(Keywords) bilip "button arkası" kodlama yapmak demek değildir. Dile öylesine iyi bir şekilde hakim olmasınız ki bilerek, görerek, hissederek, hatasız kodlama yapabilmeli, Nesne Yönelimli Programlama(Object Oriented Programming) terimlerini su emen sünger misali yutarak anında uygulayabilmeli veya çözüm için gerekli tasarım kalbını o dil ile birlikte kullanabilmelisiniz.

Sonrası mı?... .Net Framework' ün kabiliyetlerini tanımak olabilir. Öylesine iyi bilinmelilerdir ki, bir sınıf kütüphanesi içerisinde yazdığınız tipler yardımıyla gerçekleştireceğiniz IO, Database, XML gibi işlemleri yeri geldiğinde bir Windows uygulamasına, yeri geldiğinde çok az konfigurasyon değişikliği ile belki bir Web uygulamasına açabilecek kadar. Hatta bunlarda yetmeyecektir ki, geliştirdiğiniz projenin nasıl bir mimari modele oturduğunu görerek .Net Framework materyallerini kullanmayı bilmek, AOP(Aspect Oriented Programming) tadında bir yaklaşım olacaksa eğer, niteliklerin veya konfigurasyon dosyasının ne kadar etkili kullanılabileceğini görmek gerekecetir.

Sonrası mı? Aslında sizi daha da öteye taşıyacak materyaller hemen yanı başınızdadır. Yurt dışından bizzat veya şirketiniz aracılığıyla getirttiğiniz kitaplar, içerisinde yer almakta olduğunuz projeler ve tabiki en önemlisi takım arkadaşlarınız. Yeter mi? Elbette hayır. O yüzden yeni başlayan arkadaşlarım bu koşulları tamamladıklarında lütfen bana mail atsınlar... Wink Tekrardan görüşünceye dek hepinize mutlu günler dilerim.

Yazılımcının Kendi Kendini Eğitmesi

Pazartesi, 1 Mart 2010 08:00 by bsenyurt

Merhaba Arkadaşlar,

İster üniversite öğrencisi olun ister yeni mezun, yazılım sektörünün henüz başındaysanız eğer, kendinizi yandaki şekilde görülen yolun başında bekleyen birisine benzetebilirsiniz. Ne yolun uzunluğu bellidir ne de gidebileceğiniz yönler. Açıkçası buna baştan karar verebilmek çok zordur. Yaşantınızı ektileyen pek çok neden bu belirsizliğe sebebiyet verebilir. Hatta yazılım alanında hangi yöne doğru ilerleyeceğinize karar verdiğinizde aradan bir kaç yıl geçmiş olabilir. Tüm bu yaşam döngüsü içerisinde unutlmaması gereken bir noktada sizin öğrenme süreçlerinizdir. Pek çok yazılım sevdalısı arkadaşımız çabucak panikleyip bir yerlerden eğitim almaya çalışabilir. Bunun gerekli olduğu veya olmadığı durumlar vardır. Açıkçası Mühendislik nosynonunu Üniversite öğrenimi sırasında kazanmış olanlar avantajlıdır. Ancak onlar içerisinde bile eğitim almak için parasını harcamaktan çekinmeyen kişiler olabilir. Bu yazımızda yine teknik olmayan bir konuya değiniyor olacağım. Sizin bir yazılımcı olarak kendi kendinizi nasıl eğitebileceğinizi anlatmaya çalışacağım. Uzun bir süre eğitimcilik yaptığım için yazıda yer alan ip uçlarını faydalı bulacağınızı düşünüyorum. Tavsiyelerime kulak verin. Wink

Yaşananlardan : 90 lı yılların başlarında üniversite öğrencisiydim ve bilgisayar programcılığına olan merakım her geçen gün katlanarak artıyordu. Açıkçası 64 Kb sınırı altında yaşayan ve oyun yazan programcılara fazlasıyla imreniyordum. O yıllarda Türkçe yazılım kitaplarını bulmak zordu. Şimdi çok kitabımız var ancak aradan kaliteli olanları seçmek istediğinizde aslında çok az kitabımız var. Yabancı kitapları Türkiye' ye getirtmekte bir meseleydi. Özellikle fiyatları düşünüldüğünde. Yurt dışı kanalı ile tedarik ettiğim ilk bilgisayar kitabım Delphi 2.0 Unleashed idi. (Eski bir Delphi programıcısı olduğumu ama Anders Hejslberg' in izinden gittiğimi belirtmek isterim) 1400 sayfaya yaklaşan bu kitabı Taksim' de bulunan Elit kitabevinden tedarik etmiştim. O günü çok net hatırlıyorum. Ahşap tabanda yürürken raflarda gördüğüm sayısız kitabın çoğunu satın almak istemiştim. Ama elimde o kadar çok param yoktu. Yine de isabetli bir atış yapmaya çalışmış ve gerçekten ilgilendiğim konuya ait bir tanesini tedarik edebilmiştim. Bu bulunmaz bir nimet gibiydi.

Kitaplar

Yazılımcıların en büyük dertlerinden birisi de çok hızlı gelişen ve sürekli olarak bizi ötelemeye zorlayan teknoloji. Programlama dilleri, Framework' ler, yazılım metodolojileri sürekli olarak değişmekte veya yenilenmekte. Bunun için uzağa gitmemize gerek yok. C#' ın bir kaç sene içerisinde 4ncü versiyonuna nasıl geldiğini gayet iyi biliyoruz. Dolayısıyla bir yazılımcının çok sık kitap okuması ve takip etmesi gerekiyor. Bu anlamda Amazon gibi Amerika veya İngiltere üzerinden kitap getirtebilmemizi sağlayan sitelerin sunduğu ingilizce kaynaklar hem profesyonellikleri hem de anlatımları yönünden son derece kuvvetli ve yeterli. Size tavsiyem bir kaç arkadaş birleşip birden fazla kitap getirterek taşıma ücretini mümkün olduğunca hafifletmeniz Wink

Yaşananlardan : Üniversitedeki eğitimimi Türkçe almıştım. Mezun olduğumda 1 senelik ingilizce hazırlık eklenmişti. Aslında tüm eğitim hayatım boyunca devlet okullarında öğrenci olmuştum. Ne acıdır ki, orta okul yıllarında hoca yetersizliğinden veya anlaşmazlıklardan dolayı ingilizce derslerimizin yarısından çoğu boş geçmişti. Hal böyle olunca insan çok doğal olarak yabancı dil sorununu tek başına halletmek zorunda kalıyor. Az önce bahsettiğim Delphi 2.0 kitabı bir kaç ay içerisinde kara kalem çalışmasına dönmüştü. Çünkü bilmediğim her kelimenin yanına kurşun kalem ile ne anlama geldiğini yazmıştım. Bu sonraki kitapta, ondan sonrakinde ve sonrakinde de devam etti. Ama bir süre sonra altı çizili kelimeler azalmaya başladı. Yani biraz azmetmem gerekmişti. Bu noktada pek çok rakibinizden geride kaldığınızı düşünebilirsiniz. Ama inanın bir noktadan sonra onları yakalayabilir ve hatta kazandığınız çalışma disiplini ile geçebilirsiniz. Çünkü sıkılmadan yapacağınız ve sözlükten bulduğunuz kelimeleri yazarak harcayacağınız zaman içerisinde standart bir disipline sahip olursunuz. Bu disiplinin içeriği basittir. Sıkılmamak, konsantre olmak, hedefe ulaşmak. Ödülü ise basittir; okuduğunuzu anlamak. Laughing

Tabi burada mutlaka dikkat edilmesi gereken bir nokta var. Çok fazla kitap almaktan ziyade isabetli kitapları seçmek daha önemlidir. Yoksa yandaki resimde görüldüğü üzere kitap sayfaları arasında rahatlıkla kaybolabilir ve işi daha da karmaşık bir hale sokabilirsiniz. Bu noktada belkide daha tecrübeli kişilere danışmak uygun bir davranış olarak görülebilir. Ne de olsa artık günümüzde pek çok yetkin kişiye mailler aracılığıyla ulaşabilmekteyiz.

Eğitim

Kitaplar her zaman için faydalı olan kaynaklardandır ama tek başlarına yeterli olmayabilirler. Çoğu zaman konuyu daha uzman birisinden dinlemek isteyebilirsiniz. Dinlediğiniz kişinin bu anlamda tecrübeli olması geçmiş proje deneyimlerini konu anlatımları üzerine serpiştirmesi de çok önemlidir. Hatta konu ile ilişkili olarak lab çalışması yapılabilmesi size çok fazla değer katacaktır.

Yaşananlardan : Uzun süre bir eğitim firmasında yazılım eğitmeni olarak görev aldım. Eğitimler sırasında özellikle kitaplardan anlatılan konularda öğrencilerimin en çok yakındıkları veya sevmedikleri konu lab çalışmalarının olmasıydı. Aslında Microsoft tarafından sunulan kitaplarda yer alan lab çalışmalarının çoğu, konu ile ilişkili olarak baştan sona bir projenin tamamlanmasını, öğrenilenlerin pekiştirilmesini, hangi malzemeler ile neler yapılabileceğinin görülmesini sağlamaktaydı. Üstelik bu sağlanırken gerçek hayat pratikleri de kazanılmaktaydı.Bu nedenle aldığınız eğitimler içerisinde lab çalışmaları var ise bunları görmezlikten gelmeyin.

Açıkçası bu tip eğitmen bulduğunuzda yakasını eğitim süresi boyunca bırakmamanızda ve söylediklerini yapmanızda fayda vardır. Ne yazık ki günümüzde pek çok eğitim firması işlerini su istimal etmektedir. Açıkçası bu işi hafife alanlardan tutunda, tamamen ticari çıkarlara dönüştüren, rekabet etmek isterken eğitimin kalitesini düşüren firmalar söz konusudur. Ancak tüm bu firmalar her zaman için kendilerinin en iyi eğitmenlere sahip olduklarını ve son teknolojileri aktardıklarını ifade ederler. Aslında gerçek sadece şudur; siz eğitim kurumuna değil eğitmenine para vermelisiniz. Gerçekten o eğitim kurumunun almak istediğiniz eğitimle ilişkili olan konuda son derece saygın, size fayda sağlayacak, deneyimli bir eğitmeni varsa bu durumda eğitimden gerekli yararı sağlayabilirsiniz.

Uzmanlaşmak

Yazılımcının kendisini eğitmesi sırasında yaşadığı önemli güçlüklerden biriside uzmanlaşmadır. Yazılım çok geniş bir dünyadır hatta bir evrendir. Bu sebepten yazılımcıların galakside kendilerini kaybetmeleri son derece doğaldır. Dolayısıyla yazılım içerisinde de belirli konularda uzmanlaşmak gerekebilir. Bu artık bir mecburiyet halini almıştır. Söz gelimi .Net Framework cephesinde servis tabanlı çözümlerde, Web veya Windows tabanlı uygulamalarda ya da Mobil cihazlar üzerinde uzmanlaşılabilir. Aslında buradaki uzmanlaşma fikri bir aşçının uzmanlığına benzetilebilir. Sadece Fransız veya Çin mutfağında ortalığı kasıp kavuran bir aşçı kendi istekleri doğrultusunda seçtikleri alanlarda uzmanlaşmıştır denilebilir. Ancak burada kaçınılmaz bir gerçek vardır. Birden fazla mutfakta uzmanlaşmış olan bir açşı diğerlerine göre çok daha fazla kazanacaktır. Wink Aynı prensip yazılımcılar için de geçerlidir.

Yaşananlardan : Çok yakın zamanda başlayan ama bir süre sonra iptal edilmek zorunda kalınan bir projede, .Net tabanlı bir iş akışı geliştirme sisteminin yazılması istenmekteydi. Projenin en ilginç noktası sistemi kullanacak firma yöneticilerinin onay mekanizmasına Blackberry cihazları ile dahil olmak istemeleriydi. Bu noktada Blackberry cihaz üzerinde otomatik bildirimde bulunacak ve onaylama, red etme, geri gönderme gibi fonksiyonellikleri sunacak bir yazılımın olması gerekmekteydi. Dolayısıyla bizim Blackberry cihazlarında geliştirme konusunda bir şeyler öğrenmemiz bekleniyordu. Zaman azdı ve projede analiz ile çözüm tasarım süreçleri bitmek üzereydi. Güvendiğim tek şey geçmiş yazılım tecrübem, programlama disiplinlerine olan hakimiyetim, çözüm tasarımı yeteneğim, analizi iyi kavramış olmam ve öğrenme isteğimdi. Sizlerde zaman içerisinde bu gibi durumlara düşebilirsiniz. Burada kendi kendinizi eğitme ve yetiştirme teknikleriniz ön plana çıkıp öğrenme sürecinizi belirleyecektir. 

Güvenilir Bilgi

Yazılımcının kendi kendisini geliştirmesinde internet tabanlı kaynaklarında yeri büyüktür. Bu alanda sayısız Community ve Blog mevcuttur. Ancak burada güvenilir olan bilgiye ulaşmak gerekmektedir. Bu sebepten dolayı yazılımcılar olarak sizlerin çok daha seçici davranması gerekmektedir. Ne yazık ki en büyük yanlış, yayınlanan teknik içeriklerin denetlenmemesidir. Eğer düzenli olarak yerli siteleri takip ediyorsanız teknik içerikli makale veya günlük girdilerine yabancı sitelerdekine oranla çok daha az sayıda yorum yapıldığını ve geri bildirimde bulunulduğunu görebilirsiniz.  Oysaki pek çok güvenilir yabancı kaynaklı sitede, yayınlanan içerikten daha uzun yorumlar olduğunu ve geri dönüşler bulunduğunu fark edebilirsiniz. Bu da yazının kaliteli olması halinde sizin için çok daha doyurucu bir içerik oluşması anlamına gelmektedir. Nitekim o konu üzerinde farklı kişilerin görüşlerini de almış olursunuz.

Peki güvenilir sitelere nasıl ulaşabilirsiniz? Dikkat edebileceğiniz ilk nokta yazarın künyesi olacaktır. Microsoft içerisinden gelen, RD, MVP gibi ünvanlara sahip olan yabancı yazarların çoğu sizlere tatmin edici içerikler sunacaktır. Özellikle güvenilirliğinden emin olduğunuz kişilerin varsa bloklarını veya feed' lerini yardımıcı bir program aracılığıyla düzenli olarak takip edebilirsiniz. Örneğin benim kullanmakta olduğum FeedReader programını bu anlamda değerlendirebilirsiniz.

Gördüğünüz üzere değerli meslektaşlarım yazılımcıların her daim kendilerini öğrenci olarak görmelerinde yarar vardır. Gerçekten yazılımı bir yaşam biçimi olarak düşündüğünüzde aslında uzun yıllar boyunca sürecek bir Go oyununa dahil olduğunuzu da görebilirsiniz. Go oyununda öğrenci olarak 30 kyu' dan başlayıp ilerlersiniz. Ancak DAN mertebesi alana kadar öğrencisinizdir ve bu seviyeye ulaşmak hayatınızın bir kaç yılına mal olabilir. Dan aldıktan sonra ise ulaşabileceğiniz en yüksek nokta 9ncu Dan' dır. Tabi oyunun sizin yazılım hayatınıza benzerliği açısından önemli olan katkısı şudur; hep kendinizden daha iyi birisi ile oynayarak ve dolayısıyla kendinizi zorlayarak kademe atlayabilirsiniz. Dan'lara geçtikçe siz artık öğretmen olmaya başlarsınız. Bu da aslında çevrenizdeki yazılımcılara yardım edip onların size danışması anlamında düşünülebilir.

Yazının bu son noktasında halen daha nereden başlayacağınızı bilemeyebilir ve kafanızda çelişkiler yaşayabilirsiniz. Öyleyse şunu deneyin. Yazılım alanında gelmek istediğiniz noktaya odaklanın. Odaklandığınız nokta şu andan 3 yıl sonrası olabilir. Görebildiğiniz kadar ilerisi.(Görebildiğiniz kadar çünkü başta da belirttiğimiz üzere teknolojinin hızı neredeyse ışık hızına yakın) Şimdi geriye doğru gelin. Nelere ihtiyacınız olduğunu not etmeye başlayın. Not ettikleriniz bahsettiğiniz hedefe ulaşmanız için gerekenlerdir. Şimdi bu notlarda yazılanları öğrenmek için neler yapmanız gerektiğini düşünün. Gerekli kitaplar, ilgili siteler, blog adresleri, kişiler, kurumlar...Şu anda en azından nelere ihtiyacınız olduğunu tespit ettiniz. Şimdi aradan uygun olanı seçip sıralı olarak devam edebilir ya da bir kaçına birden başlayarak paralel yürüyebilirsiniz. Kolay gelsin. Zorlu bir maratona başladınız...Laughing

1652 Sayfalık İçerik - Tüm Blog Girdilerim

Çarşamba, 24 Şubat 2010 20:30 by bsenyurt

Merhaba Arkadaşlar,

Sabırsızlanan arkadaşlarım yazının en altındaki download linklerine sıçrayabilirler.

Bir yazılımcı sıkıldığında ne yapar? İşte bu günün sorusu...Büyük ihtimalle işlerinden bunalmış veya bazı şeyleri kafaya taktığından içinden çıkılması güç bir psikoloji altına girmiş bir yazılımcının yapacağı şeyler aslında yine teknoloji merkezli olacaktır. Peki ya siz olsanız ne yaparsınız?

  • Belki internet evreninde kafanızı dağıtacak sitelerde gezinirsiniz. Güncel haberler, spor, magazine bültenleri, sosyal ağlar veya chat.
  • Arkadaşlarınız ile oyun oynarsınız ve büyük ihtimalle bu masa üstünde oynayacağınız Satranç ya da Go olmaz. Olsalar bile bilgisayar başında oynanabilenleri olur. Hatta bunun için sosyal ağınıza bir uygulama bile ekleyebilirsiniz. Kuvvetli ihtimalleden birisi PSP gibi oyun konsollarını değerlendireceğinizidir. Tabi şirketinizin içerisinde Turkcell' de olduğu gibi Playstation odası varsa harika.
  • Kitap okuyabilirsiniz ki bu sıkıntınızı daha da arttırabilir çünkü elinizin altındaki kitapların belki de tamamı yazılım ile ilgilidir.
  • Sinemaya gidebilirsiniz ama büyük ihtimalle teknolojinin sınırlarını zorlayan bir filmi seçersiniz. Örneğin Avatar...
  • Bunların haricinde belki MP3 çalarınız ile yürüyeşe çıkabilirsiniz.
  • Ya da kız arkadaşınız veya eşinizle felekten bir gün/gece çalabilirsiniz.

Peki aranızda sıkılınca kod yazanınız var mı? Laughing

Bu gün öylesine çok sıkıldım ki...İçimden pek bir şey yapmak gelmedi. Standart yazılımcı buhranı diyerek ekranıma bakarken bari kod yazayım dedim. Yazacağım kod benim için eğlenceli olsun, sonuçları ise herkes için faydalı olsun istedim. İlk olarak BlogeEngine tabanlı sitemin yönetim paneline girdim ve tüm içeriği dışarıya aktaradım. Artık elimde bloğumda o ana kadar yayınlanmış/yayınlanmamış tüm girdilerin ve bilgilerinin bulunduğu bir XML dosyası vardı. Hımmm... Wink Öyleyse şöyle bir çalışma içerisine girebilirdim; Tüm XML içeriğini alıp anlamlı bir şekilde tek bir HTML içerisinde birleştirmek. Öyle ahım şahım arayüzü olan bir programa da ihtiyacım yoktu. Basit bir Console uygulaması bile işimi görürdü. Çala klavye yazmaya başladım. Tabi yazarken bol bol debug işlemini uygulamam ve içerikte neyin nerede olduğunu anlamam gerekti. Sonunda aşağıdaki kod ortaya çıktı.

using System;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml.Linq;

namespace BlogMLReader
{
    class Program
    {
        static void Main(string[] args)
        {  
             // Önce indirdiğim BlogMl.xml dosyasını bir yükliyeyim
            XElement root = XElement.Load( "..\\..\\BlogML.xml");
            // Sonra içerisinden istediklerimi alayım.
            // Nedir bu istediklerim? Yazının başlığı, url adresi, yayın tarihi/oluşturulma tarihi, içeriği(en önemlisi de bu zaten), tag değerleri           
            var allPosts = from post in root.Elements().Last().Elements()
                           where post.LastAttribute.Value == "True" // Hatta içeriği çekerkende yazdığım ama henüz yayınlamadığım yazıları da alması
                           select new // En güzeli anonymous tip kullanmak. Çünkü her şeyi ele almak istemiyorum. Sadece istediklerimi bir tip içerisinde tutmak niyetindeyim.
                           {
                               Title=post.Elements().First().Value,
                               Url=post.Attribute("post-url").Value,
                               DateCreated = post.Attribute("date-created").Value,
                               Content=post.Elements().ElementAt(1).Value,
                               Tags=from tag in post.Elements().Last().Elements() select tag // Birden fazla tag olduğu için...
                           };

            // İçeriği string olarak ele alacaksam performanslı bir tip lazım. StringBuilder mesela
            StringBuilder builder = new StringBuilder();
           
            builder.Append(String.Format("<b>Döküman Oluşturulma Zamanı {0}</b></br>", DateTime.Now.ToLongDateString()));
            // Birde sayaç belirleyim. En azından ekrana kaç tanesinin yapıldığını yazdırabilirim
            int counter = 1;
            // LINQ sorgusu sonucu elde edilen tüm satırlarda dolaşayım
            foreach (var post in allPosts)
            {
                Console.Write("{0} ",counter.ToString());
                counter++;

                // Şurada bir boşluk bırakayım
                builder.AppendLine("</br>");
                // Yazının başlığını link şeklinde basmalıyım. Basit HTML tag' leri işimi görür
                builder.AppendLine(String.Format("<b><h2><a href=\"http://www.buraksenyurt.com{0}\">{1}</a></h2></b>",post.Url,post.Title));
                // Bir boşluk daha bırakayım
                builder.AppendLine("</br>");
                builder.AppendLine(String.Format("Yayın Tarihi : {0}<br/>", post.DateCreated));
                string newContent=String.Empty;
                // Post' taki image' lara ait resimlerin çekilmesi sırasında image.axd isimli bir adrese yönlendirilme söz konusu. Bu nedenle başlarına duruma göre blog adresini ekleyeyim.
                // Aslında bu image' ları request oluşturup yerel makineye indirip ekleyebilirim ama bunu yapmaya üşeniyorum.
                if(!post.Content.Contains("src=\"image"))
                    newContent = (post.Content.Replace("src=\"/", "src=\"http://www.buraksenyurt.com/"));
                else
                    newContent = (post.Content.Replace("src=\"image", "src=\"http://www.buraksenyurt.com/image"));

                builder.AppendLine(newContent);
                // Sanırım bir boşluk burada iyi gider
                builder.AppendLine("</br>");
               
                #region Write Tags
                // Tag' lerini de yazdırayım da konunun hangi alanlara hitap ettiği anlaşılsın
                builder.Append("<b>Tags : </b>");
                foreach (var tag in post.Tags)
                {
                    builder.Append(String.Format("{0}|",tag.FirstAttribute.Value));
                }
                // Bir boşluk daha iyi gider mi? Gider.
                builder.AppendLine("</br>");

                #endregion
            }
            // Nihayet! Şimdi tüm string' i html uzantılı bir dosyaya yazayım ki tarayıcılarda açabileyim. Hele ki internet bağlantısı da var ise tüm resimler görünür.
            File.WriteAllText("BurakSenyurt_AllPublishedPost.html", builder.ToString(),Encoding.Unicode);
        }
    }
}

Kodu çok fazla açıklama gereği duymuyorum ama basit anlamda XML içeriğini LINQ to XML nimetlerinden yararlanarak ele aldığını ve StringBuilder tipini kullanarak bir HTML dosyası ürettiğini ifade edebilirim. İşte uygulamanın çalışması sonucu ilgili klasör altında oluşan HTML dosyası.

Gördüğünüz gibi HTML dosyası başarılı bir şekilde oluşturuldu. 11 Mb civarında. Wovvv!!! Sealed Tabi kodun bu şekilde bir sonuç ürettiğini gördükten ve HTML içeriğinin tamamının yüklenmesinin tarayıcılara göre çok yavaş olmasından ötürü aklıma başka bir fikir daha geldi. Dedim ki, bu HTML içeriğini ben Word formatında kayıt edersem çok daha yararlı bir ürün ortaya çıkabilir. Böylece herkesin indirip istediği gibi kullanabileceği(kötü niyetli olarak değil tabiki de) bir döküman oluşabilirdi.

Artık bunun için de kod yazayım mı yazmıyayım mı diye düşünürken Firefox ile açtığım HTML içeriği üzerinde Select All yaptım. Aman Allahım. Yapmaz olaydım. Undecided Firefox kitlendi. E haklı tabi. 11 Mb' lık Web sayfası içeriği ona fazla geldi. Peki dedim birde Google Chrome' u deniyeyim. Harika...Başarılı bir şekilde Select All ve Copy işlemi yapıldı. Ama Word içerisine Paste edilebilen hiç bir şey yoktu ortada. Uzun süre bekledim ama zaten sabırsız birisi olduğumdan onu da kapattım. En başta söylemem gerekeni en sonda söyledim...Dedim ki; iki Microsoft ürünü birbirleriyle sorunsuz anlaşır. Internet Explorer 8 ile HTML dosyasını açtım. Dosya açıldı ama resimlerin yüklenmesi Firefox'a hatta Chrome'a göre çok daha yavaştı. Eyvah dedim...Ancak en azından sol alt köşede 1600 küsür resimden kaçıncısını yüklediğini söylüyordu. Buna göre tahmini olarak ne kadar bekleyeceğimi biliyordum. Resimler yüklendikten sonra Select All yaptım. Belki bir kaç on saniye bekledikten sonra tüm içerik seçili haldeydi. Hemen Word 2007 tarafına geçtim ve Paste işlemini uyguladım. Volaaaaa!!! İşlem başarılıydı.Laughing Tabi HTML içeriğini oluştururken Title' lara Heading takısını uygulamanın avantajlarını da hemen gördüm. Nitekim aşağıdaki resimden de görüldüğü üzere Document Map otomatik olarak oluşturulmuştu.

Tabi Word dökümanının boyutu 30 Mb' ı geçmişti. Undecided Neyseki hosting firması DiscountAsp.Net' in sitem için ayırdığı 1 gb' a varan alanı bu boyut için müsaitti. Tabi çok doğal olarak ilk yazılarda yer alan Flash nesneleri bu Word dosyası içerisinde oynamıyor. Ama Title' ların aynı zamanda makale linki olduğunu hatırlatmak isterim. Dolayısıyla internet bağlantınız mevcut ise doğrudan buraksenyurt.com adresine de gidebilirsiniz.

Not : 4 Gb Ram'e sahip çift çekirde intel işlemcili makinemde, Windows 7 işletim sisteminin yönetimi altındaki Word 2007 programı, söz konusu dökümanı yaklaşık olarak 40 saniye civarlarında açabilmekte.

Umarım işinize yarar. Tekrardan görüşünceye dek hepinize mutlu günler dilerim.

AllPosts.rar (30 Mb)

Yazılımcı Psikolojisi

Cuma, 5 Şubat 2010 14:10 by bsenyurt

Merhaba Arkadaşlar,

Beni tanıyanlar bloğumdan teknik konular dışında pek paylaşımda bulunmadığımı çok iyi bilirler. Ancak kalıpları biraz olsun esnetmekten kime zarar gelir ki? Belki hepimiz için faydası bile olabilir. Bu yazımda bahsedeceğim konuya başlamadan önce tüm psikologlardan affımı istemek zorundayım. Nitekim bir yazılımcının olağan psikolojisi üzerine gözlemlerimi aktarırken bilimsel hiç bir kurama uyamayacağımdan veya sonuçlara varamayacağımdan oldukça eminim. Aslında bu gibi konularda işi uzmanlarına bırakmak gerekiyor. Ben de aslında onbir seneyi bulan profesyonel iş ve yazılım hayatımdaki gözlemlerimi aktarmaya çalışacağım. İnanıyorum ki yazıyı okuyan her meslektaşım kendisine bir pay çıkartacak ve en azından bir kaç dakika da olsa düşünecektir. Aslında anlatılanların gerçek hayat hikayeleri ile birleştirilmesi sonrasında dramatik bir durum mu oluşmaktadır yoksa traji komik bir dünya mı söz konusudur siz karar vereceksiniz.

Öncelikle yandaki resmin size ne çağırıştırdığını düşünerek başlayalım. Bu resimde birden fazla kişinin olduğunu ama her birinin kendi cam fanusu içerisinde ayakta kaldığını görüyoruz. Ortada silik bir kişilik var ama onun konumuzla ilgisi bulunmamakta. Aslında çalışma ortamlarımızdaki oturma düzenlerimize, masamızın üstündeki malzemelere baktığımızda kendimize ait bir dünya kurduğumuzu hatta kimilerinin deyimiyle bir yaşam alanı oluşturduğumuzu kolayca fark edebiliriz.

Bu yaşam alanının belkide en önemli parçalarından birisi ses kalitesi yüksek olan kulaklıklardır. Şimdi oturduğunuz sandalyeden ayağa kalkın ve çevrenizde kulaklık ile müzik dinleyip bilgisayar ekranına bakan arkadaşlarınızı tespit etmeye çalışın. Sonra da şunu düşünün. Doğa da, seyahatlerde, deniz kenarında, parkta, bahçede, yürüyüşte, sağlık için yapılan koşuda, çevreye bakarken size çok iyi gelen, içinizi rahatlatan veya hissetmek istediğiniz duygularınızı daha çok ortaya çıkaran müzikler nasıl oluyor da 15.4 inch' lik bir dikdörgene bakarken size bir şeyler hissettirebiliyor. Gerçekte müziği mi dinliyorsunuz yoksa yaptığınız işe mi odaklanıyorsunuz.

Yaşananlardan : Çok eskiden çalıştığım bir yazılım şirketinde dış kaynak elemanı olarak bir projede görevlendirilmiştim. Yazılımı geliştirdiğimiz şirkette bize ayrılan yer İstanbul' un en güzel boğaz manzarasına sahip kesimlerinden birisiydi. Çalışma ortamının kurulduğu binanın etrafında kocaman ve yemyeşil bir arazi yer alıyordu. Bu nedenle son derece sessiz ve işinize en yüksek seviyede konsantre olabileceğiniz bir ortam söz konusuydu. Ancak her yazılımcı gibi orada bile, kulaklıkla müzik dinlemeyi başarırdık. Arkadaşlarımızdan birisi ise dışarıdan çalışmasına etki eden en ufak sesten rahatsız olurdu. Çoğu zaman kulaklıklarımdan dışarı çıkan ses nedeniyle ya MSN üzerinden, ya da mail araclığıyla beni uyarırdı. Ama hiç bir zaman arkadaşım yerinden kalkarak yanıma gelip bu uyarıyı yapmamıştı. İki masa arasında 3 metreyi bulmayan mesafeyi kat etmek yerine, online ortamdan haber uçururdu. İronik diyebilir miyiz?

Çalışma ortamlarımızın oluşturulmasında şirketlerin büyük payı var bildiğiniz üzere. Günümüz yazılım projeleri ve ihtiyaçları düşünüldüğünde en popüler oturma düzenlerinden birisi yonca şeklinde olanlar. Ancak bazı şirketlerde sizi oturduğunuz masanın içerisine neredeyse hapsedecek şekilde düzenlerde söz konusu. Örneğin sadece sağınızı ve solunuzu görebildiğiniz ama ön masanızda oturan şahsı göremediğiniz bir oturma düzeni de mevcut. (Daha kötüleri de yok mu? Var tabiki de) Tabi siz de ara sıra sağınızdaki veya solunuzdaki arkadaşınızla sohbet etmek, konuşmak ihtiyacı hissedebilirsiniz. Bu aslında son derece doğal bir insan tepkisidir. Ancak ne zamaki iletişiminiz sadece sabah "Günaydın" ve akşam "İyi Akşamlar" şeklinde olan üç basit ve çoğunlukla size söylemesi dahi zor gelen kelimelere düşer, o zaman bir şeylerin ters gittiğini kabul etmeli ve tedbirlerini almalısınız demektir. Çünkü gittikçe ofis masanızın belirlediği sınırlar içerisinde yaşayan ve o dünyaya inanan birisi olmaya başlamışsınızdır. Aslında o dünya değildir. Size göre koca bir evrendir. 

Buna itiraz edebilirsiniz ve hayır ben böyle bir insan değilim diyebilirsiniz. O zaman size bu durumu doğrulatacak bir deney önerebilirim. Portatif Web kameranızı alın ve masanın uygun bir yerine monte ederek sizin ofisteki bir günlük yaşantınızı çekmesini sağlayın. Sonrasında izleyin. Çok şaşırabilirsiniz. Özellikle çok vahim vakalarda, kaydı hızlı olarak ileri sardığınızda uzun aralıklarda aynı şekilde durduğunuzu fark edebilirsiniz. Özellikle gözlerinizi bir noktaya uzun süre sabitleyebildiğinizi, göz doktorlarının sık sık vurguladığı ve göz kuruluğuna sebebiyet verdiği için göz yaşı damlası kullanmanıza neden olan duruma sık sık düştüğünüzü net bir şekilde izleyebilirsiniz. Eğer bu noktaya geldiyseniz bir de şunu deneyin. Bilgisayarınızı kapatın ve siyah ekranına sadece 15 dakika boyunca bakmaya çalışın. Sıkıldınız mı? Allah allah...Neden acaba? Wink

Yaşananlardan : Bulunduğum yazılım şirketinde pek çok arkadaşımız ne yazık ki bu şekilde yaşıyor. Günün normal olarak 8 saatlik mesai dilimi içerisinde zorunlu olmadıkça kimseyle konuşmayan, çoğunlukla kendi zevkine uygun müziği dinleyen, üzerine yıkılan onlarca iş içerisinde sadece nefes alıp vermekten sorumlu olduğunu sanan ve sanki bir mahkumiyeti acı çekmeden yaşamayan çalışan insanlar görüyorum. Hatta yazımı düzenlediğim şu sırada bile halen görmekteyim.

Basit bir matematik hesabı yaptığımızda durumun vahimliği bir kere daha ortaya çıkıyor. Çevrenizdekiler ile günde sadece 30 kelime konuştuğunuzu düşünün. Haftada 5 gün çalıştığınızı...Ayda 20 gün...Senede 240 gün...240X30=7200 kelime. Bu sadece senelik olan çok kaba ve kötü bir tahmin. Peki ya ayda kaç satır kod yazıyorsunuz ve tahminen kaç kelime kod yazıyorsunuz. Bu şu anlama gelebilir. Çevrenizdekiler ile konuşmaktan çok kelime harcayarak kodlama yapıyorsunuz. Bu çok doğal olarak işiniz bir parçası. Ama artık sizin sadece bilgisayarınız ile konuşmayı tercih ettiğinizin de bir göstergesi. Peki bu disiplini ne kadar devam ettirebilirsiniz. Aslında sizce bu bir disiplin olabilir mi?

Yaşananlardan: Eski şirketimdeki patronum yazılımın bir yaşam tarzı olduğunu belirtmişti. Ancak bu yaşam tarzını devam ettirirken insan olmanın doğasında var olan bazı aktivitelerden de uzaklaşmamak gerektiğini sürekli ifade ederdi. Hatta bir keresinde başarılı yöneticilerin iş yaşantıları dışında spor, müzik gibi alanlarda amatör olarak bile olsa ilgilendiklerini söylemişti. İlgi derken fiili olarak katılmaktan bahsediyordu. Örneğin toplanıp basketbol oynamak, masa tenisi müsabakalarına katılmak, gitar çalmak, flüt üflemek, saksafon çalmak vb...Şu anda çalıştığım şirkette bu profile uyan bir çok arkadaşım var. Tabiri yerinde ise tüm iş streslerini spor veya müzik ile uğraşarak atabiliyorlar. Üstelik bu arkadaşlarımın bazıları(tamamı değil) gerçekten göz göze sosyalleşmeye inanan, sizinle konuşmaktan zevk alabilen ve sürekli masasında oturmayı sevmeyen kimseler. Tabi patronum bu tavsiyede bulunduğunda sene 1999 du ve ortalarda sosyal ağlar(Facebook, Twitter vb... gibi) diye bir gelişim bulunmamaktaydı.

Sosyal ağlar demişken onlara da dokundurmadan geçmemek lazım. Üniversite yıllarındayken ICQ, MIRC gibi programlar çok popüler idi. Hatta bir arkadaşımla BBS' ler üzerinden mesajlaştığımızı bile hatırlıyorum. Acaba kimse bu günlere gelebileceğimizi düşünüyor muydu? Artık Facebook, Twitter gibi sosyal ağlar söz konusu. Bir fayda olarak uzun zamandır görüşemediğiniz, belirli sebeplerden iletişiminizi kaybettiğiniz arkadaşlarınızı bulmak açısından oldukça etkili. Ya da ülkeler arası kendi mesleki gelişiminizle ilişkili olarak bir ağın parçası olmak istediğinizde son derece faydalı. Ancak şu durumu kim açıklayabilir; iki yan masanızdaki arkadaşınızın doğum gününü Facebook üzerinden kutlamak. Undecided Bunu ben dahil pek çoğumuz yapıyor. Şimdi yakın zamanda etrafınızda doğum günü olan ve Facebook listenizde yer alan bir arkadaşınızı düşünün. Eğer onunla küs değilseniz doğum gününde şunu yapın; oturduğunuz yerden kalkın, arkadaşınızın yanına yüzünüzde kocaman bir tebessüm ile gidin, elinizi uzatın tokalaşın ve yanaklarından öperek nice senelere demeyi bir deneyin. Bunu yapabilir misiniz? Yapın ve sonrasında nasıl hissettiğinizi düşünün. Yoksa sandalyenizde oturmayı mı tercih edersiniz.

Doğruyu söylemek gerekirse yazılımcıların dünyası 14.1 inch, bilemediniz 15.4 inch, en kötü ihtimalle 17 inch lik bir dünyadan ibaret olabiliyor. Konuşurken zar zor söyleyebileceğimiz, çekindiğimiz, korktuğumuz cümleleri dijital ortamda rahatlıkla ifade edebiliyoruz. Açıkçası klavyenin başındayken çok güçlüyüz. Ekranımızda istediğimiz gibi bir evren kurabilir galaksinin istediğimiz noktasına sıçrayabiliriz. Tabi yazının bu noktasında oluşan kişilik profiline yazılımcılar dışında pek çok insan uyabilir. Eminim ki çevrenizde gününü bilgisayar başında ve ağırlıklı olarak sosyal ağlar üzerinde geçiren pek çok genç vardır(Sizinde bunun için günde 8 saate yakın mesai harcayan kuzeniniz var mı?). Onları biraz gözlemleyin ve bazı çıkarımlar elde etmeye çalışın.

Yazılımcı psikolojisi ile ilişkili analizlerimi aktarmaya başlarken önce bulunduğumuz masadan başladık ve sosyal ağlara kadar uzandık. Yazılımcının kod tarafında döktürebilirken konuşma güçlüğü çektiğini, gözlerinde sürekli bir problem olduğunu fark ettik. Tabi bilgisayarı başında sakin sakin iş yapan bir yazılımcının çoğu zaman çileden çıkabileceğini ve olur olmadık şeylere kafayı takıp son derece sinir birisi olabileceğini de unutmamak gerekir. Aslında bir psikolog olsam bu durumdaki çoğu yazılımcıya "Agresif Kişilik Bölünmesi" teşhisi koymak isterim ki böyle bir teşhis olmadığından eminim. Yandaki resimde sinir bir yazılımcıyı motiflemeye çalıştım ama bulabildiğim tek resim bu oldu Undecided

Yaşananlardan : Siz hiç programdaki kodlaması sonrasında çalışma zamanında istisna(Exception) alan yazılımcı bir arkadaşınızın masasındaki bazı eşyaları sağa sola fırlattığını gördünüz mü? Daha önceden çalıştığım şirketlerden birisinde yine dış kaynak elemanı olarak bir projeye atanmıştım. O gün farkettiğim tek gerçek, çalışma arkadaşımın ekrana son derece yakın ve sinirli bir şekilde bakmasıydı. Sonunda olan oldu ve kodun çalışması sırasında bir istisna mesajı aldı. "Hay ben senin gibi kodun bippppp!!!" diyerek devam cümlesi bittiğinde göz göze geldik ve bende son derece yanlış bir şekilde "Ne o hocam kod mu patladı?" dedim...Özellikle genç yazılımcı arkadaşları bu konuda uyarmak isterim. Sakın kodunda exception alıp az önce bahsettiğim çılgın psikoloji içerisine giren bir arkadaşınıza bu şekilde yaklaşmayın. Hatta mümkünse kafanızı önünüze eğin ve kendi işinize bakın. Sonuçta olan oldu ve arkadaşım masasında duran 600 sayfalık C# kitabını alıp masama doğru fırlattı. Barmenlerin yaptığı gibi. Sonrasında da şunu söyledi "Al sen yaz o zaman..."

Aslında bu hikaye neredeyse bir yazılımcının hayatının pamuk ipliğine bağlı olabileceğini ifade etmektedir. Yazılımcının bir türlü dizginleyemediği kodunda meydana gelen istisnanın bedeli aslında kendi hayatında kontrol edemediği bir dizi olayın başlamasına neden olur. Çevrenize bakın ve böyle arkadaşlarınız var ise dikkatlice gözlemleyin. Yüzlerinden, üzerlerindeki negatif enerjiyi çok rahat bir şekilde görebilirsiniz. Oysaki yazılımcılar kod tarafında her zaman kral değil midir? En azından kendimizi hep bu şekilde görmez miyiz? Oysaki hayatımızı normal olarak devam ettirmemiz için gerekli şartları bile sağlamaktan, kontrol etmekten çoğu zaman aciz olabiliriz.

Bu noktada yazıyı artık sonlandırma ve bir sonuca bağlamak istiyorum ancak bu çok zor. Belkide sonuçları çıkartması gereken kişi siz değerli okurlarımdır. Yine de değişmez bazı gerçekler olduğunu kabul etmeliyiz. Yazılımcının bulunduğu ortamın koşulları, kendi iç dünyasında ortaya çıkartamadığı duyguları ve başka pek çok faktörün gün içerisinde kendi davranışları üzerinde pek çok etkisi olduğu yadsınamaz bir gerçek. Şimdi birde ekibindeki yazılımcıları yönetmeye çalışan ve bu noktada onların psikolojisinin çok önemli olduğunun bilincine varan teknik liderleri, proje yöneticilerini, müdürleri düşünün. İnanın işleri bizimkinden çok ama çok daha zor. Bence hepimizin eğitim hayatında insan psikolojisi üzerine gerçek hayat pratiklerinin aktarıldığı dersler olmalı.

Yaşananlardan : Üniversiteden mezun olduğumda o dönem popüler olan MBA yüksek lisnans programına katılmıştım. İK dersine giren hocamız çok değerli birisiydi. Pek fazla kitap kullanmazdı. Zaten ağzından çıkan cümleler düzgün, akademik ve tecrübe dolu olurdu. Açıkçası o cümleleri not ettiğinizde her dönem için elinizde bir kitap zaten yazılırdı. Bir gün dersimizde şunları söyledi ve bu sözler aklımda hiç çıkmadı; "Arkadaşlar...Konuşun...Konuşmaktan, insanlarla iletişim kurmaktan çekinmeyin. Fikirlerinizi düşüncelerinizi elinizden geldiğince düzgün ifadeler ile agresifleşmeden karşınızdakine aktarın. Dinlemesini bilin. Ve tabi en önemlisi; Güler yüzlü olmaktan, mevzularınızı tebessümle aktarıp dinlemekten çekinmeyin. Bunu öğrenin..." Aşağı yukarı bu şekilde bir konuşmaydı. Ana fikri/fikirleri görebildiniz mi? Belki biz yazılımcıları, işletme gibi alanlarda ilerleyen kişilerden ayırabilecek noktalar yer almakta. Güler yüzlü olmak, konuşlanlık, sevecenlik, sabırlılık, agresif olmamak vs...

Bir daha bu şekilde teknik dışı bir yazı yazar mıyım bilemiyorum ama bu tespitlerin sizi bir kaç dakikalığına düşündüreceğine inanıyorum. Hepimiz insanız ve bulunduğumuz Dünya' nın yaşayan birer parçasıyız. Hayatımız uzun görünse dahi çok kısa ve aslında her birimiz evrende bir toz parçasının milyarda birinden daha küçük olan parçaların yaşam süresinden bile kısa yaşıyoruz.

Bu yazıyı başarılı bir şekilde okudunuz. Şimdi sağınızdaki veya solunuzdaki, önünüzdeki veya arkanizdaki bir arkadaşınıza bakın ve tebessüm ederek gülümseyin, bir şeyler söyleyin. En azından halini hatırını sorun yahu!Laughing