Belki ilk kez bir yazılım geliştirmek üzere bir teklif almışsınızdır, ancak ne yapmanız gerektiğini ve nasıl başlayacağınızı bilmiyorsanız bu yazım tamamen sizler için.
Bu yazımda olabildiğince az teknik detay paylaşarak yazılım projesi geliştirmeye yeni başlayacak arkadaşlara tavsiyelerde bulunmak istiyorum. Bu tavsiyelerin büyük çoğunluğu benim zamanında yaptığım hatalardan aldığım dersleri kapsamakla birlikte iş hayatındaki insanların yazdıkları ve belirttikleri durumları da içinde barındırmaktadır.
Yazılım geliştirmek zorlu süreçlerdir ve bu süreçleri yönetebilmek bazen hiç göründüğü kadar kolay olmamaktadır. Özellikle ilk defa proje geliştirmek üzere hevesle masanın başına oturan kişilerin belli bir süre sonra çok sayıda hata ile boğuştuğu ve en sonunda pes ederek bu işten vazgeçtiğini çokca gözlemledim. Lafı hiç uzatmadan listeye kendi hayali senaryom ile göz atalım.
Bir yazılım geliştirmek üzere teklif almış birisiniz. Bu yazılım için belli bir ücret ve zaman kriterlerinde anlaştınız. Çalışmaya başlamak üzere masanıza geçtiniz.
Unutulmamalıdır ki yazılım geliştirmek aslında bir süreç yönetimidir. Geliştirmekten test etmeye, canlıya almaktan destek vermeye kadar uzanan ve sürekli kendini tekrar eden bir süreçler zinciridir. Bu süreçlerin nasıl yönetileceği elbette tartışmaya açık bir konudur. Dünya'nın dev firmaları bile tek bir süreç yönetimi üzerine odaklanmaz ve herkes aynı yöntemi uygulayamaz. Ancak siz bu projeyi tek başınıza geliştireceğiniz için elbette ilk olarak kendi metodolojinizi belirlemeniz ve profesyonel metodolojilerden örnekleri inceleyerek kendi yönetimizle işi yönetebilirsiniz.
Örnek Yöntem: Yapacağınız işi parçalara bölerek bu süreci yönetebilirsiniz. Nasıl mı? Aşağıdaki görmüş olduğunuz diagramı takip ederek.
Bir işi parçalara bölmek iş geliştirme süreçlerinde en çok kullanılan yöntemlerdendir. Bu yöntem o kadar etkilidir ki algoritmalarda da kullanılmıştır. (Örn: Merge Sort Algorithm - Birleştirmeli Sıralama Algoritması) Geliştirilecek olan yazılım ne olursa olsun, hangi platformda ve hangi dille yayınlanacaksa yayınlansın yapılacak işi parçalara bölerek yapmanızı tavsiye ederim.
Bu yazılım verilerle mi çalışacak, ne yapacak, bir uç nokta ile haberleşecek mi? Bu ve bunun gibi sorular için aslında cevap istenilen iş ile alakalıdır. Eğer ki müşteri sizden bir blog sitesi istiyorsa ona kolayca yazı girebileceği bir portal yapmanız, yazdığı yazıları bir veritabanında ya da dosyada saklamanız, kullanıcıya görüntülenmesi için bir arayüz oluşturmanız ve bu arayüzde verileri göstebilmeniz gerekli.
Bir Blog Sitesi geliştireceğiz. Bu senaryoya göre planlamanın alt maddelerine göz atalım;
Sadece bu maddede bile kafamızdaki plan oluşmaya başladı ve yapılacaklar listesi belirlendi. Ancak tek başına bu maddeler pek iş görmemektedir. O yüzden bir sonraki maddeye göz atalım;
Gereksinim analizi en az ilk maddede olduğu kadar önemli ve aslında projenin inşasında kullanılacak gerekli bütün bileşen, materiyal vb. şeylerin belirlendiği kısımdır. Unutulmamalı ki yazılım geliştirmek bir iştir ve kullandığımız dil bizim işi yaparken kullandığımız alettir.
Bu aşamada artık kafamızdaki yol haritası büyük çoğunlukla belirlenmiş. Şimdi geliştirme ortamını oluşturma zamanı.
Gereksinimi Elde Et: Adından da anlaşılacağı üzere artık gereksinimlerimizi kurmamız gerekli. Örneğin veritabanı olarak 'MySQL' kullanmayı seçtik ve bunun için geliştirme yapacağımız bilgisayara MySQL'i kurmamız gerekmektedir.
Uygun Geliştirme Ortamını Hazırla: Kullanacağımız IDE'den tutun proje içerisinde yer alacak kütüphaneleri bile hazırlamamız ve geliştirme anında yaşanabilecek ortam sorunlarını minimize etmek için en uygun aşama bu aşamadır.
Bu aşama tamamen teknik bir kısımdır. Kullanılan dilin uygun kod yazım standartlarından, tasarım desenleri olmak üzere çok geniş yelpazede konunun yer aldığı ve bir blog yazısında anlatılamayacak kadar önemli bir kısımdır.
Ancak burada gelişme aşamasında yaşanan bazı durumlara değinecek olursak liste şu şekilde;
Mükemmelliyetçi Olmayın: Kodları yazarken kesinlikle mükemmeliyetçi olmayın. Bu sizi yıpratır ve uzun bir süre zarfında yaptığınız işten sizi soğutmaya kadar götürür. Ancak elbette ki 'Spagetti Code' yazmayın. Yazdığınız kodların çalıştığından emin olduktan sonra elinizden geldiğince düzenlemeye ve tasarım desenlerine sadık kalmaya çalışın.
Sürüm Kontrol Sistemi Kullanın: Kod satırları ve dosya sayısı sürekli artacak. Bu zaman zarfında değişikliklerinizi gözden geçirmek ve yedeklemek sürekli zorlaşacak. Bu yüzden Özellikle 'Git' olmak üzere diğer sürüm kontrol sistemlerini kullanmayı ihtmal etmeyin.
Örnek Projeleri İnceleyin: Açık kaynak kodlu projelerin sayısı her geçen gün kat ve kat artmakta. Yapmış olduğunuz çalışma boyunca örnekler toplamayı ve onları gözlemlemeyi ihmal etmeyin.
Google'ı Etkili Kullanın: Yazılım geliştirirken hatalar ya da çıkmazlarla karşılaşacaksınız. Sorunlarınızı mutlaka internette aratmayı ve cevabı ilk etapta sormak yerine araştırmanızı tavsiye ederim.
Planınıza Sadık Kalın: En baştaki yaptığınız plan ne kadar iyiyse geliştirme aşamasında ilerlemeler bir o kadar kolaylaşacaktır. Planınıza sadık kalmayı ve onun üzerinden geliştirmeyi sürdürmeyi olabildiğince devam ettirin.
Hata Yapmaktan Korkmayın: Hatasız yazılım geliştirmenin neredeyse mümkün olmadığını unutmayın. Karşılaştığınız hataların miktarı sizi yorsada mutlaka karşılaşılan hatanın bir çözümü bulunur. İnternetten hataların nedenini araştırmayı ihmal etmeyin.
Geliştirdiğiniz Ortamı Verimli Kullanın: Proje geliştirirken bir IDE kullanıyorsanız mutlaka onun neler yapabildiğini ve onun bu süreçte size ne gibi yardımları olabileceğini araştırın.
Yorum Satırları Hayat Kurtarır: Yazılım geliştirirken karşılaşılan en büyük sorunlardan biriside ilerleyen süreçte daha önceden yazılan kodların ne için yazıldığını tam olarak hatırlayamamaktır. Kulağa her ne kadar saçma gelsede geliştiriciler belirli bir zaman sonra yazdıkları kodların ne işe yaradığını unutabiliyor. Bu çok olağan bir durum olup en iyi çözüm elbetteki yorum satırları ile o kodların ne iş yaptığını yazmaktır.
Geliştirdiğimiz yazılımın isterlere uygun bir şekilde çalıştığını ya da çalışmadığını tespit etmek için bu aşama gereklidir. Müşteriye proje teslim edilmeden önce isterlerin tamamını test edilerek doğrulanmalıdır.
Karşılaştığınız Hataları Giderim: Geliştirme aşamasında da belirttiğim gibi hatalar karşınıza çıkacaktır. Bunları tespit edin ve hataları giderin. Unutmayın, yazılımı siz geliştirdiniz ve nerelerde hata ile karşılaşabileceğinizi öngörebilirsiniz.
İşlevleri Değerlendirin: Bütün parçalar geliştirilip bir araya getirildiğinde bu parçaların birbiri ile uyumunu değerlendirin ve gerekli durumlarda müdahele etmekten kaçınmayın.
Çalıştığından Emin Olun: Bazı kısımlar öyledir ki beş farklı durumda düzgün çalışırken altıncı durumda sorun çıkartabilir. Bu yüzden karşılaşabileceğiniz bütün senaryoları derleyerek geliştirdiğiniz parçaların çalıştığından emin olmadan testleri sonlandırmayın.
Sabırlı Olun: Belki çok basit bir hata ile defalarca karşılaşabilirsiniz. Ya da sürekli aynı şeyi denemenize rağmen bir türlü doğru çıktıyı elde edemeyebilirsiniz. Bu noktada sabırlı olmak en önemli unsurdur. Tekrar tekrar aynı testi yapmaktan korkmayın.
Başkalarından Yardım Alın: Başka bir bakış açısı belki en başında öngöremediğiniz bir sorunu tespit edebilmenizi ve gerekli düzenlemeleri yapmanızı sağlayabilir. Her ne kadar senaryolarınız belirgin olsa bile koca bir olasılıklar havuzunda olduğunuzu ve başka durumlar ile karşılaşabileceğinizi unutmayın.
Farklı Test Yöntemlerini Keşfetin: Test yapmak koca bir meslek grubunun işidir. Yazılım testleri üzerine yazılmış yüzlerce makale, geliştirilmiş tonlarca metodoloji bulunmaktadır. Geliştirdiğiniz yazılımı test ederken bu metodolojileri araştırmayı ve farklı yöntemler kullanarak test sürecini tamamlamaktan kaçınmayınız.
Yazılım geliştirme süreci en başta bahsettiğim gibi zor bir süreçtir. Ancak aşamaların hepsini başarıyla tamamladıysanız bunun verdiği özgüven ile kendinizle gurur duyabilir ve projeyi teslim etmek için hazırlanabilirsiniz :).
Artık projede ikinci aşamaya geçmiş bulunmaktasınız. Bundan sonraki süreç aslında içerisinde ilk süreci kapsamaktadır. Yani yazılım geliştirme süreci neredeyse sonu gelmeyen bir süreçtir. Bir projenin sonlanması elbette arz-talep ile ilişkilidir. Eğer projenin yeni isterleri oluşuyor ise proje artık bu sonsuz döngüye girmeye hazırdır.
Bu süreç aslında daha çok benim mesleğim olan 'DevOps Mühendisliği' ile ilişkilendirilir. Ancak unutulmamalı ki bir yazılım projesinin her adımında biz DevOps Mühendislerinin müdahele ve desteğine ihtiyaç duyulur.
Bu sürecin detaylarını başka bir yazıda paylaşacağım ancak son olarak müşteriye projeyi teslim etmek ve yazılımı canlıya alma üzerine konuşmalıyız.
Artık yazılım isterleri karşılıyordur ve müşteri ya da ziyaretçilerine kullanıma açılabilir. Senaryomuzda bir blog sitesi geliştirdik ve bu site elbette bir hosting üzerinde yayınlanmalı ve bir domain ile kullanıcılara sunulmalı.
Lütfen bu kısma geçtiğinizde öncelikli olarak geliştirdiğiniz dilde projeyi yayınlamanın nasıl mümkün olduğunu araştırınız.
Örn: "Deployment Node.JS Application", "How to Deploy ASP.NET Core Application" diye internette aratarak geliştirdiğiniz dildeki adımları takip ediniz.
Hosting
Paylaşımlı Hostingler ağırlıklı olarak .NET ve PHP bazlı diller ile geliştirilmiş projeleri destekler. Eğer başka bir dil ile geliştirdiyseniz paylaşımlı hosting bulma ihtimaliniz oldukça azalmaktadır.
Domain
Domain (Alan Adı) satın almayı tıpkı hostingde anlattığım gibi internetten aratarak bir çok domain sağlayıcı firmayı görüntüleyebilir ve kendi tercihinize uygun bir firmadan satın alabilirsiniz.
Eğer ki yazının tamamını okuduysanız aslında bir yazılım geliştirme süreci metodoloji olan 'Agile - Çevik Metodoloji' sinin bir uygulamasını öğrendiğiniz. Özellikle kalın yazdığım teknik başlıkları internetten araştırmanızı tavsiye ederim. Çünkü anlattığım her şeyi bir kenara bırakırsak size asıl tavsiye etmek istediğim şey Araştırma dır. Merak ettiğiniz ve karşınıza çıkan her konuyu usanmadan araştırıp onun hakkında bilgi edinirseniz bu sizi başarıya götürecek en önemli adımlardan birisi olur.
Kendini yazılım geliştirme konusunda geliştirmek isteyenler için son tavsiyem linkteki projeyi incelemeleri ve hangi alanda çalışmak istediklerini bu yol haritasını inceleyerek karar vermeleridir.
Link -> Kamranahmedse/Developer-Roadmap
En kısa sürede Destek Süreci ve DevOps Mühendisliği ile alakalı yazımı yazacağım.
Yeni yazılarda görüşmek üzere...
Yazılımla Kalın :)
Manşet Görseli UnDraw'dan alınmıştır -> https://undraw.co/illustrations