Ana içeriğe atla

Grup Projeleri 101


Bu yazımda, grup projesi hakkında konuşacağım. GTÜ’de edindiğim bir tecrübe, yaptığım proje ve beraber çalıştığım grup bazında anlatmaya çalışacağım. Anlattıklarım projeye göre değişecek elbette, içinde bulunduğum 3 grup projesinde edindiğim tecrübelerimi aktarıyorum. İş ile alakalı konuları ele alacak kadar tecrübem bulunmuyor an itibari ile. Bahsedeceğim grup ahlakına aykırı davranışları bizzat uygulamış biri olarak, birilerini suçlamaktan çok yaptıklarımın yanlışını, başkalarını yapmamaları gereken davranışlardan haberdar etmek amacıyla yazıyorum. Haydi başlayalım:

Grup projeleri, hiç tecrübe etmemiş birine göre çok fantastik gelebilir. Daha önceden tecrübe etmişleri farketmek çok zor olmaz, yedikleri veya attıkları kazık ile daha önceki projeyi vermiş veya verememiş olmanın bir rahatlığı vardır. İki türlü de, tecrübeli bir insan grupta küçük bir avantaj sayılabilir diye düşünüyorum.


Proje ilk verildiğinde, özellikle yazılımcıysanız kullanılacak teknolojileri hemen hemen fark edebiliyorsunuz. Tabii önce hangi teknolojinin daha uygun olduğunu belirlemek lazım olsa da, learning curve ele alınarak da bilinen teknolojiler üzerinde hareket etmek bazen daha avantajlı olabiliyor. Yapılması gereken şey projenin modüllere ayırılması. Çok fazla parçaya ayırarak kişi sayısının 2-3 katı kadar modüle ayırmanızı tavsiye etmiyorum, örnek olarak:

  • Donanım
  • Mekanik
  • Network
  • Arayüz

Bizim kendi projemize yaptığımız ayırım bu şekildeydi. Ama arayüz yanına simülasyon, motorlar vb. diyerek fazladan bölmenizin nasıl bir avantajı var? Elbette projeye göre değişir. Yine de, örneğimizde olduğu gibi arayüzü de kendi içinde parçalayabilecekken ilk baştan 4-8 arası modüle ayırmak mantıklı gözüküyor. Ayırılan parçalara, o konudaki tecrübe ve merak (teknolojiye adapte olmaya yarayan bir moral kaynağıdır.) düzeyine göre atamalar yapılmalı. Sonra ise ayırılan gruplar kendi içinde iletişime geçerek problemi daha küçük parçalara ayırıp aşamalandırmalılar. Malzeme ihtiyacı ve kullanılacak teknolojiyi analiz etmeliler. Sonra tekrar genel bir toplantı ile seçimlerinin birbiriyle uygunluğu tartışılmalı. Buradaki en önemli konu, “işi olanlar” konusu. Özellikle grup projelerini tecrübe etmemiş kişiler, toplantının maksimum 15 dakika sürdüğünü zannediyor. Gerçek şu ki, minimum 15 dakika yapılması gereken toplantı gerekirse saatler sürebilir. Grup denilen birbirlerinden sorumlu bu birimin, kendileri dışında birbirlerini de gözetmesi gerek. Toplantı zamanı, yeri gibi bilgileri herkesin katkısıyla olabildiğince  ortak ayarlamak gerek. Tabii ki herkesin işi olduğundan ayarlamak mümkün değil. Okul projelerinde, sağda solda sohbet muhabbet ettiğini veya evine kaçtığını fark ettiğiniz kişi size her zaman meşguldür. Okul projelerinde doğal karşılanacak bir şeydir, sakin olun.
Eğer bahsettiğim analiz kısmını yaptıysanız, yolun en önemli adımını attınız. Biz grup olarak, projelere çok geç başlamıştık. Yetiştiğimiz için şanslıydık diye düşünüyorum. Analiz kısmını erkenden yapmak çok önemli. Analiz kısmını gerçekleştirdikten sonra arkadaş çevresiyle haberdar olan diğer gruplar sizin adımlarınızı tekrar edecekler, garanti veriyorum.
Analizden sonra teknolojilerin kurulması ve malzemelerin siparişi geliyor. Malzemeleri sipariş ederken bozulabileceğini düşünerek bütçenizi artırmanızı ve yedek sipariş etmenizi tavsiye ediyorum. Hiç bir şeyi geciktirmemenizi ve yazılım kurulumunuzu yaparken bunu dökümante etmenizi tavsiye ederim. Proje raporunuzda, teknolojinin kurulum bilgisi yer almalı. Bunu demonun veya finalin olduğu zamana sıkıştırmanızı tavsiye etmem, çünkü sürekli arıza veren donanım ve bug dolu kodunuzla uğraşırken vaktiniz olmayacak.


Her hafta veya iki haftada bir olmak üzere toplantılarınız olacak( olmalı da ). Bizim toplantılarımız bir asistan eşliğinde olur ve ilerleyişimize tanıklık ederdi. Bunun olmasına gerek yok, siz yine de kendi ilerleyişinizi takip edin. Toplantılarınızın tarihleri derslerinizin olmadığı ortak bir zaman olabilir, skype görüşmesi vb. şekilde de halledebilirsiniz. Unutulmaması gereken nokta, birileri her zaman kaytaracak. Toplantıları maksimum kişi katılacak şekilde ayarlamak da uygun olabilir, ama tavsiyem en çok iş yapan arkadaşların ve her modülden bir kişinin bulunduğu zamanı seçin. Toplantılarda konuşulan şeyleri biri ayrıntılı, toplantıdakilerin tamamı da özet olarak yazarsa güzel olur. Ayrıntılı not da paylaşılabilir, size kalmış.
Malzemeleriniz geldi, yazılımlar kurulu. Toplantılarda nasıl bir donanım ve arayüz tasarlayacağınızı çizdiniz, implement etmek kaldı. Eğer tasarımını iyiyse, araştırma yapmışsanız ve kullanımını biliyorsanız problem çok fazla yok denebilir. Projenin yakın teslim tarihine kadar, projeyi boş bırakmayacak şekilde modüller üzerine çalışmalısınız. Bizde modül demosu vardı, her modulü ayrı ayrı sunuyorduk. Final demosu, modüllerin başarılı birleşimleriyle ortaya çıkmış projenin kendisi oluyordu. Arada da 1-2 haftalık süreç var tabii. Modüllerinizi bağımsız olarak test case’ler ile kontrol edebilir, olası inputlar verebilirsiniz.
Modüllerin birleşimi sırasında, en önemli faktör network. Donanım ile yazılımın, var ise bilgisayarın  haberleşmesi çok kritik bir nokta. İlk test edilmesi gereken kısım burası. Eğer network sorunsuzsa ( “There is no bug-free code.” ) asıl problemler modüldedir. Bu iyi bir şey(kısmen). Bu yüzden haberleşmenin önce yazılması önem arz etmekte. Tavsiyem, protokolünüzü hafif ve her şeyi önceden düşünerek yapmanız. Hafif olması, küçük mesajlar içermesi, saniyede çok fazla mesaj gönderileceği durumda(projeye bağlı ayarlanacaktır, size kalmış. Ama saniyede ne kadar çok mesaj handle edersen, sistemin güçlüyse o kadar kesin sonuç alacağını düşünüyorum. Yine de saniyede gönderilecek ve alınacak mesajı iyi seçmen önemlidir.) buffer’ı şişirmesi daha zor olacaktır. Bu sebeplerle kaynaklanan gecikme ve çıkan yanlış sonuçlar sizi delirtebilir, uyarayım.
Malzemelerin yedeklerinin işe yarayacağını da bazıları bozulunca farkedebilirsiniz. Bazı grupların malzemelerinin daha üçüncü haftadan bozulduğunu hatırlıyorum. Bunun dışında, son güne bırakmazsanız bir şekilde yapıyorsunuz.
Karşılaşacağınız en büyük iki problem, siz ve diğerleridir. O kadar ders arasından projeye ayıracak vaktiniz çok olmayacak ( gibi gelecek size, bu sadece bir yanılsamadır. Haberiniz olsun. ) ve ister istemez “diğerleri bayağı ilerliyor bana çok ihtiyaçları yok” mentalitesi oluşacak. Bunu kırmanız ve grup olarak en başında başlamanız önemli. Diğer arkadaşlarınız da aynı şeyi muhtemelen düşünecek ve son hafta başlayacaksınız her şeye. Yapmayın. Grup projesinn mantığı bu değildir, son haftaya bırakılması da uygun değildir. Tabii hiç bir şey demekle olmuyor. Ben de projeler sırasında yatıp son vakitlerde devreye girdim. Beni bu yüzden suçlayan arkadaşlarım oldu( neyse ki kendi modülümü 4 saatte yazıp teslim ederek cevap verdim ), ne kadar kendileri de farklı olmasa da. Kabul edilmesi gereken şey, projede yatanlar ve yapanlar vardır. Elbette grup içinde parlayacak ve taşıyacak arkadaşlar ve grubun başarısını tehlikeye atıp aylak aylak yatacak insanlar var. İnanın, bazı arkadaşlar final sunumu dışında gelmiyor. Bizzat şahit oldum. Bu insanlarla aynı notu alacak, uğraşlar sonucu geçecek veya kalacak olmak, işte kazık yemek budur. O aylak arkadaş da, kazık atan oluyor.  Sonraki sene bir başka grubun yanında (yazının başında belirttiğim gibi) “rahat” takılan arkadaşlar da onlar oluyor. Ya aylak, ya da başarılı olan kişi. Bizim okulumuzda, modül demosuna kadar iş yapmayanları oy birliğiyle atmak gibi bir seçenek var. Bizde olmadı, insan garip bir varlıktır ki bunu yapamıyor. Hele ki bazı aylak arkadaşlar toplantıda bulunup insanlara yemek söyleyip vb. şekilde gözlerini boyayarak gruptaki yerini garantiye alabiliyor ( iyilik yaptığı için mazlumun gönlüne girmek gibi düşünebilirsiniz ) , tecrübe etmek bile üzücü geliyor bana. Ve daha nice şeyler var buna benzer. Umuyorum sizde böyle bir şey olursa o kişiyi atar ve dersini almasını sağlarsınız.
Bu konuda aldığım notlar bu kadardı. Unuttuğum bazı şeyler dışında proje çalışmaları okul bazında budur. Tavsiyem, grup olarak iletişim kurup her şeyi baştan belli etmeniz, erken başlamanız, paylaşımcı olmanız (kodu verin demiyorum, gruplarla iş birliği yapmak günah değil diyorum) , kendi görevinizi yapmanız ve yaptıklarınızı dökümante etmeniz. Aylaklığa da göz yummazsanız proje döneminiz o kadar kötü geçmeyecektir diye düşünüyorum.


Tüm bu sürecin en güzel kısmı, sonrası.  Geçerseniz, her şey güzel bir anıya dönüşebiliyor. Okul dönemindeki projeleri dürüstçe anlattığıma inanıyorum. Düşüncelerinizi belirtebilirsiniz. Proje alıyorsanız, Allah kolaylık versin.
Güzel günler...

Yorumlar

Bu blogdaki popüler yayınlar

-12345. Gün

Merhaba arkadaşlar, bloguma hoş geldiniz... Ben Ali Yasin Eser, Gebze Teknik Üniversitesi Bilgisayar Mühendisliği 3. sınıftayım. Öğrenci evinde yaşıyorum,  hobi olarak gitar çalıyor, rubik küpleri çözüyor ve daha sayamayacağım hobileri geliştirmeye çalışıyorum.  Alanımı arıyor, mobilde karar kıldığımı düşünüyorum. Kendimi geliştirmek ve merak duygumu  taze tutmak yegane amacım. Şimdilik benden bu kadar diyelim. Bilgi paylaştıkça çoğalır derler. 21 yaşına gelmiş, üniversitenin ilk 3 yılında ilerlemiş ve kendini geliştirmeye çalışan biri olarak, bir bilgi birikimine sahip olduğumu düşünüyorum. Amacım, bilginin sadakası olan paylaşmayı, blogumda size çeşitli şekilde aktarım yaparak uygulamak. Sadece yazılım ve bilgisayar mühendisliği üzerine yazmayı düşünmüyorum. Eksik gördüğüm kaynaklar olursa elbet tutorial yapabilir veya bazı konular üzerine düşüncelerimi ifade edebilirim fakat müzikten ve sosyal hayattan, ilham aldığım konuşmalardan, spordan sağlıktan, en az  yazılımdan bahsettiği

Qt Quick Client ile Non-Qt Server Haberleşmesi

Merhaba arkadaşlar, Gebze Teknik Üniversitesi 2016-2017 döneminde, Proje-II dersi kapsamında yaptığımız projede(çalışmayı github hesabımda bulabilirsiniz) ihtiyacımız olan haberleşmeyi çalışma arkadaşımla hazırladım. Basit bir versiyonunu, aynı örneği bulamadığımdan benden sonraki arkadaşlara kolaylık olsun diyerek hazırladım. Qt Quick örnekleri az bulunur nitelikte, özellikle Qt dökümanlarında baktığım zaman Qt Widget ile hazırlanmış uygulamalar görmekteyim. Butonların ilişkisi vb. durumlar Qt Quick'te farklı işlemekte. Gerek bu açıdan, gerek haberleşme açısından kodu inceleyebilirsiniz. QtSocket olsun, o soket olsun bu soket olsun farketmez, iletişimde temellerin çok değiştiğini görmedim. Soket uygulamalarında server tarafında iseniz:     1. İlgili datalarınız varsa(adres ve sokete dair struct'lar, classlar vb.)  initialize edersiniz.     2. Yeni bir soket açarsınız.     3. Soketi bind edersiniz(bağlarsınız).     4. Sokete gelen bağlantılar için soketi dinlersiniz.