Bu ayki yazımda, bir öğrenci olarak bir yazılım projesi geliştirirken benim ya da arkadaşlarımın karşılarına çıkan birtakım problemlerden bahsedeceğim. Son yıllarda bilgisayar Türkiye’de çok yoğun bir şekilde kullanılmaya başlandı. İnternet üzerinde MSN gibi mesajlaşma sistemlerine ya da Facebook gibi sitelere milyonlarca kayıtlı kullanıcı var. Ama çoğu insan bu programların nasıl çalıştığını hiç düşünmemiştir bile, onlar yani kullanıcılar için önemli olan kullanım kolaylığı ve görselliktir.
Yazılıma artık herkesin ihtiyacı var. Mikroçipler kol saatlerinde, el fenerlerinde hatta sifonlarda, musluklarda bile bulunabilmekte. Gelecekte üretim sistemleri, kontrol sistemleri, askeri sistemler gibi yüzlerce sistem bilgisayarlar yani yazılımlar tarafından kontrol edilecek, insanların yerini bilgisayarlar alacak. Bilgisayar yazılımlarının insana tercih edilmesinin sebebi maliyetinin daha düşük olması ve hata yapma olasılığının çok düşük olmasıdır. Peki bizim nerede yazılıma ihtiyacımız var? Kişisel bilgisayarlarımızda en karmaşık yazılımlar olan işletim sistemleri çalışmaktadır. Bu işletim sistemlerinin üzerine bizler programlar geliştirebiliriz. Bu programlara Office uygulamaları, oyunlar ya da internet programları örnek gösterilebilir. Yazılım hayatı çok kolaylaştırabilir. Bir şirketin veya bir esnafın alacak-verecek hesabı tutması veya yaptığı işlerle ilgili bilgileri kâğıt kalem ile tutması çok zordur. Küçük bir yazılım ile bütün verilerini güvenli bir şekilde hata payı olmadan depolayabilir, istediği zaman okuyabilir ya da istatistiksel raporlar alabilir. Bu çok küçük bir örnekti. Günümüzde çok gelişmiş kurumsal yazılımlar mevcut ve bunları kullanan ve yöneten insanlara bile şirketler avuç dolusu para ödüyorlar. Sonuçta herkesin yazılıma ihtiyacı var, insanların yazılıma ihtiyaç duyduklarını fark ettikleri anda yazılım mühendisleri ve programcılar devreye giriyor.
Mezun olmadan tecrübe kazanmak isteyen bir öğrenci küçük çapta yazılım projeleri ile kendini geliştirmeye başlayabilir. Bu yazılımlar genelde tanıdık bir esnaf ya da şirketler için üretilir, bazen de okuldaki ilanlar yoluyla proje alınabilir. Bu projeler genelde küçük ya da orta çapta olduğu için her şey müşteri ile sizin aranızda gelişecektir.
Öğrenci için yazılım müşterilerini ikiye ayırabiliriz; yazılımdan anlayanlar ve anlamayanlar olarak. Her iki tip müşteriyle de iş yapmanın farklı sıkıntıları vardır. Örneğin; yazılım hakkında hiçbir şey bilmeyen bir müşteriniz var. Bu müşteri sizden en süper yapay zekâ algoritmaları ile bile zor çözülecek isteklerde bulunabilir ya da proje tamamlandıktan sonra sizden ona göre basit olan ama sizin tüm projenizi değiştirmenize sebep olacak isteklerde bulunabilir. Yazılımdan anlamayan müşteriyi “şu olmaz”, “bu yapılmaz” gibi bahanelerle idare edersiniz. Bir süre sonra proje biter ama işiniz bitmez. Öğrenci olduğunuz için bilgisayar almak için bile sizi çağırabilir ya da bilgisayarla ilgili teknik destek isteyebilir sizden, bu öğrenciliğiniz boyu devam edebilir. Diğer bir durumda müşterinizin size out source iş vermesi ya da en azından biraz yazılımdan anlaması. Yazılımdan anlayan bir müşteri ile çalışmanın zorluğu yoktur aslında, kaliteli bir yazılım üretmek için ideal ortam sağlanabilir. İşten kaçmak isteyenler için bu müşteri biraz baş ağrıtabilir ama bizim amacımız kaliteli projeler üretmek olduğu için böyle düşünmemeliyiz.
Öğrenciyken yapılan ilk projelerde, genelde ön anlaşma yapılmadığı için ücreti alamayabiliriz ya da projeyi bitmek bilmeyen istekler yüzünden sürekli geliştirmek, projeye ekleme yapmak zorunda kalırız. Bu durumlar bizi profesyonel olmaya zorlar. Ön anlaşmalar ve proje teslim edildikten sonra yapılacak bakım için anlaşmalar yapmak çok önemlidir. Bir projeyi zamanında teslim etmek için projeyi ilk aşamada tanımlamanız gerekir. Eğer tanımlamazsanız sonradan gelen istekler yüzünden süreyi aşar bir de üstüne suçlu duruma düşersiniz. Bu yüzden projeye başlarken projeyi eksiksiz olarak tanımlamanız en önemli unsurlardan birisidir. Müşteri projeye ön anlaşmada olmayan bir şeyler eklerse, bu anlaşılan ücrete dâhil değildir. Tabii bu konuda çok katı davranırsanız müşterinin sadakatini kaybedersiniz. Dengeyi iyi tutturmanız gerekir. Müşteri memnuniyeti kadar müşteri sadakati de çok önemlidir. Projenizi düzgün yaparsanız müşteri memnun kalır, eğer ufak tefek fazladan isteklerini de yaparsanız müşterinin sadakatini kazanırsınız yani gelecek projelerde de müşteri size gelir.
Bir yazılım şirketine yazılım üretmenin de farklı zorlukları vardır. Şirkete out source iş yapıyor olun. İlk zamanlar CMMI standartlarına uygun olacak diye karar verilen proje, hiçbir doküman üretilmeden ilerleyebilir, kodu yazanların yani bizim inisiyatifimize bağlı bir şekilde başarılı olabilir veya batabilir. Yazılım projelerinin sadece
%5’inin başarılı olduğunu düşünürsek tehlikeyi biraz olsun algılayabiliriz. Genelde yazılım projeleri insan faktörü nedeniyle başarısız olur, öyle ki, proje büyüdükçe onun başarısızlığı için uğraşan insan sayısı da artacaktır. En basitinden yazılımı kullanacak olan kişi yeniliğe açık olmayabilir veya kullanmak istemez. Programın ekranında gördüğü renklerden ya da butonun yerinden memnun olmayan müşteri sizin projenizi başarısız bulacaktır. Siz mükemmel algoritmalar kullanarak sorunsuz çalışan bir sistem geliştirmiş olabilirsiniz ama kullanıcı kullanamaz veya beğenmez ise projeniz başarısızlığa mahkumdur. Siz de bu durumda istediğiniz kadar arka plandan, algoritmalardan bahsedin kullanıcı onları düşünmez, ilgilenmez. Onun için önemli olan gördükleridir, bu yüzden projenin kullanıcı dostu olması en önemli unsurdur. Bu tip can sıkıcı durumlarla karşılaşmamak için yazılımcılar ile tasarımcılar birlikte çalışmalıdır. Çok güzel görünen ve çok kullanışlı ama hatalı çalışan bir program mükemmel çalışan ama güzel görünmeyen ve kullanışsız bir programa göre daha başarılı görülecektir kullanıcılar tarafından. Bu yüzden bir projeye başlarken ekibinize bir tasarımcı da dahil ederseniz daha başarılı olursunuz. Bu tasarımcı az da olsa yazılımdan anlarsa işiniz çok kolaylaşacaktır yoksa sizi yavaşlatabilir.
Öğrenci için yazılım geliştirmenin bir diğer zorluğu okuldur. Okulda dersler sürekli sizi zorlar, vize ve final sınavlarında projeler ile ilgilenemezsiniz. Bu dönemler dışında da ders projeleri veya ödevleri çok fazla vaktinizi alır. Dersler dışında arkadaşlar ile gezmeye eğlenmeye de hakkınız vardır. Bu gibi sebepler projenizi yavaşlatabilir ya da başarısızlığa uğratabilir. Zaman yönetimini iyi yapmalısınız.
Yazılımın geliştirme süreci zorlu olabilir. Uykusuz geceler, hata veren derleyiciler ya da sorun çıkaran veritabanları. Bunlar bizleri yıldırmamalı ve yeni şeyler üretmeye devam etmeliyiz. Bir yandan da kendimizi geliştirmeliyiz. Yazılım sektörünün akıl almaz bir hız ile gelişmesi de sizi kendinizi geliştirmeye zorlayacaktır. Yeni çıkan teknolojileri yakından takip etmeniz gerekir. Her yeni şey bir zorluktur. “Bir yazılımın karmaşıklığı ile bir ülke yönetilebilir”. Bu sözü bana Yusuf Altunel hocam söylemişti. Yazılım geliştirmek sabır ve emek isteyen bir iştir. Yazılım geliştirirken belirli standartlara uyulmalıdır ve yazılımlar kurallara göre yönetilmelidir. Bu kurallar ve standartlarla ilgili ve bir yazılım projesinin adım adım nasıl geliştirildiği ile ilgili bir yazım olacak gelecek sayılarda. Vakit ayırdığınız için teşekkür ederim.