Bir Yazılım Mimarı'nın (SA) StackOverflow ve Programmers SE'deki rolü hakkında iyi cevapları olan birçok soru vardır . Bunlardan biraz daha odaklanmış bir soru sormaya çalışıyorum. Bir SA'nın tanımı geniştir, bu nedenle bu soru için bir SA'yı aşağıdaki gibi tanımlayalım:
Bir Yazılım Mimarı bir projenin genel tasarımına rehberlik eder, kodlama çabalarına katılır, kod incelemeleri yürütür ve kullanılacak teknolojileri seçer.
Başka bir deyişle, SA'nın sorguç türlerinde idari dinlenme ve yelekden bahsetmiyorum. Eğer herhangi bir SA pozisyonunu takip edecek olsaydım, kodlamadan uzak olmak istemiyorum. Müşteriler ve İş Analistleri vb. İle arayüz kurmak için biraz zaman feda edebilirim, ancak hala teknik olarak ilgiliyim ve sadece toplantılarda neler olduğunun farkında değilim.
Bu hususlar göz önünde bulundurulduğunda, bir SA masaya ne getirmelidir? “Yasayı koyma” (tabiri caizse) ve “kendi yollarına” uymak için belirli araçların kullanımını zorunlu kılma anlayışıyla mı gelmelidirler? Yoksa başlangıç yönünü ve stratejisini belirtmeli mi, daha sonra geminin yönünü düzeltmek için gerekli şekilde geri koyulmalı mı?
Kuruluşa bağlı olarak bu işe yaramayabilir. Her şeyi uygulamak için TFS'ye güvenen bir SA, planlarını sadece StarTeam kullanan bir işverende uygulamakta zorlanabilir. Benzer şekilde, SA'nın projenin aşamasına bağlı olarak esnek olması gerekir. Yeni bir proje ise daha fazla seçeneğe sahip olurken, mevcut projeler için daha az seçeneğe sahip olabilirler.
Sorularıma verilen yanıtların da bu konulara ışık tutabileceği umuduyla bazı geçmişleri paylaşmanın bir yolu olarak deneyimlediğim bazı SA hikayeleri:
Takımın her bir kod satırını tam olarak inceleyen bir SA ile çalıştım. SA bunu sadece projemiz için değil, organizasyondaki diğer projeler için de yapardı (bunun için harcanan zamanı hayal edin). İlk başta belirli standartları uygulamak yararlı oldu, ancak daha sonra sakatlandı. FxCop, SA'nın sorunları nasıl bulacağıdır. Beni yanlış anlamayın, genç geliştiricilere öğretmek ve onları seçtikleri yaklaşımın sonuçlarını düşünmeye zorlamak için iyi bir yoldu, ancak üst düzey geliştiriciler için biraz acımasız olarak görülüyordu.
Belirli bir SA, belirli bir kütüphanenin kullanımına karşıydı ve yavaş olduğunu iddia ediyordu. Bu, bizi farklı şeyler başarmak için tonlarca kod yazmaya zorlarken, diğer kütüphane bize çok zaman kazandıracaktı. Hızlı bir şekilde projenin son ayına kadar müşteriler performanstan şikayet ediyorlardı. Tek çözüm, geliştiricilerin erken uyarılarına rağmen orijinal olarak yok sayılan yaklaşımı kullanmak için belirli işlevleri değiştirmekti. Bu noktada çok fazla kod atıldı ve tekrar kullanılamaz, fazla mesai ve strese yol açtı. Ne yazık ki proje için kullanılan tahminler, projemin kullanılmasının yasak olduğu eski yaklaşıma dayanıyordu, bu nedenle tahmin için uygun bir gösterge değildi. Başbakan'ın "bunu daha önce yaptık" dediğini duyarım.
Tüm projeler için DTO, DO, BO, Hizmet katmanı vb. Kullanımını zorunlu kılacak SA. Yeni geliştiriciler bu mimariyi ve SA'yı zorunlu olarak uygulayan kullanım yönergelerini öğrenmek zorunda kaldı. Kullanım yönergelerinde istisnalar, yönergelere uymanın kesinlikle zor olduğu durumlarda yapılmıştır. SA yaklaşımlarına dayandırıldı. DTO'lar ve tüm CRUD operasyonları için sınıflar CodeSmith aracılığıyla oluşturuldu ve veritabanı şemaları da benzer bir mum topuydu. Ancak, bu kurulumu her yerde kullanan SA, LINQ to SQL veya Entity Framework gibi yeni teknolojilere açık değildi.
Bu yazıyı havalandırma için bir platform olarak kullanmıyorum. Yukarıda bahsedilen SA hikayeleriyle ilgili deneyimlerimin olumlu ve olumsuz yönleri vardı. Sorularım kaynıyor:
- Bir SA masaya ne getirmelidir?
- Karar alma süreçlerinde nasıl bir denge kurabilirler?
- Bir SA işine (daha önce tanımlandığı gibi) belirli temel kuralları uygulaması gerektiği zihniyetiyle yaklaşmalı mıdır?
- Dikkate alınacak başka bir şey var mı?
Teşekkürler! Eminim bu iş görevleri, üst düzey geliştiriciler veya teknik potansiyel müşteriler için kolayca genişletilebilir, bu nedenle bu kapasitede de cevap vermekten çekinmeyin.