Yazılım Geliştirmeye Uygulanan Savaş Sanatı

Yayınlanan: 2022-03-11

Yazılım endüstrisinde çalışıyorsanız, temelde bir sorunu tekrar tekrar iki veya daha fazla alt soruna ( böl ) bölmekten oluşan böl ve yönet tasarım paradigmasını duymuşsunuzdur, bunlar doğrudan çözülecek kadar basit hale gelene kadar ( fethetmek ).

Bilmediğiniz şey, bu paradigmanın eski bir siyasi stratejiden kaynaklandığıdır (adı, Latince deyim böl et impera'dan türetilmiştir), kişinin astları veya tebaaları arasında muhalefeti teşvik ederek kontrolünü sürdürmenin mümkün olduğunu öne sürer.

Bu strateji tarih boyunca sayısız politikacı ve askeri lider tarafından kullanılmıştır, örneğin Julius Caesar (Galya Savaşları sırasında askeri açıdan güçlü Galyalıları yenmek için kullanmıştır) ve Napolyon (Fransız topçu uzmanı düşman birliklerini böler, böylece hiçbir kısım daha güçlü olmaz). ve daha sonra onların iletişimini bozarak düşmanın saldırıları koordine etme ve yürütme çabalarını engeller).

Savaş Sanatı: Gelişime Uygulanan Kadim İlkeler

Ancak, böl ve yönet kuralı, yazılım geliştirmeye uygulanabilecek tek politik strateji değildir. Politika ve savaşın yazılım geliştirmeyle pek ilgisi olmamasına rağmen, tıpkı politikacılar ve generaller gibi geliştiriciler de astlarına liderlik etmeli, ekipler arasındaki çabaları koordine etmeli, sorunları çözmek için en iyi stratejileri bulmalı ve kaynakları yönetmelidir.

Sun Tzu'nun ilkeleri ve öğretileri siyaset, iş, spor ve yazılım geliştirmede pratik uygulamalara sahiptir.

Sun Tzu'nun ilkeleri ve öğretileri siyaset, iş, spor ve yazılım geliştirmede pratik uygulamalara sahiptir.
Cıvıldamak

Savaş Sanatı, MÖ beşinci yüzyılda yazılmış ve teorileri hem Doğu hem de Batı felsefesi üzerinde derin bir etkiye sahip olan eski bir Çin askeri stratejisti olan Sun Tzu'ya atfedilen eski bir askeri incelemedir.

Yaşına rağmen, metin hala Doğu Asya'daki birçok askeri okulda müfredatta yer alıyor ve Batı'daki bazı askeri akademilerde önerilen bir okuma olarak listeleniyor. Metin, her biri savaşın farklı bir yönüne ayrılmış 13 bölüme ayrılmıştır.

Bununla birlikte, savaşa ek olarak, Sun Tzu'nun ilke ve öğretilerinin politika, iş, spor ve ister inanın ister inanmayın yazılım geliştirmede pratik uygulamaları vardır. Aslında, kökenlerini bile bilmeden bu ilkelerin bazılarını günlük rutininizde uyguluyor olabilirsiniz.

Aşağıda ayrıntılı olarak, Savaş Sanatı'nda açıklanan temel taktiklerin ve ipuçlarının kısa bir listesini bulacaksınız. Muhtemelen yazılım endüstrisindeki işinize veya bir dizi başka endüstriye uygulanabilirler.

Herhangi Bir Kampanyada Zaman Çok Önemlidir

Bölüm II, paragraf 2

Gerçek bir savaşa girdiğinizde, zafer çok uzun zaman alıyorsa, erkeklerin silahları donuklaşacak ve ateşleri sönecektir.

Bu ilke, geliştirme döngülerinin uzunluğu ile geliştiricinin morali arasındaki ilişkiyi tanımlayan bir kural olarak yazılım geliştirmeye uygulanabilir.

Bir grup geliştirici aynı projeler üzerinde aylarca net hedefler veya görünürlük olmadan çalışırsa, hüsrana uğrayabilir ve üretkenlikleri düşebilir.

Yazılım geliştirme entelektüel bir çabadır, bu nedenle motivasyon üretkenliğin ana yakıtıdır. Her gün, işinizin gerçek sonuçlar ürettiğini algılamadan çalışmak çok moral bozucu olabilir.

Bazı çevik metodolojilerde belirtildiği gibi, geliştirme yol haritası, ekibin kısa zaman dilimlerinde başarabileceği ve onlara bir ilerleme ve başarı hissi verecek çeşitli hedeflere ve kilometre taşlarına bölünmelidir.

Bölüm II, paragraf 18

Öyleyse savaşta büyük hedefiniz uzun seferler değil zafer olsun.

Bu ifade iki şekilde yorumlanabilir:

İlk olarak, UNIX felsefesinin öncüsü olarak görülebilir: Bir şeyi yapan ve onu iyi yapan programlar yazın . Yazılım geliştirirken, programın ana amacını, sağladığı temel özelliği veya çözdüğü en büyük sorunu daima göz önünde bulundurmalı ve doğru uygulamayı sağlamalısınız.

Bazen ilham alabilir ve eklemek için gerçekten harika bir özellik düşünebilirsiniz, ancak çok sık kullanılmayan özelliklere sahip uygulamaların aşağılayıcı bir adı olduğunu unutmayın: bloatware .

İkinci olarak, ifade, yalın yazılım geliştirme ilkelerinden birinin öncüsü olarak da düşünülebilir: Mümkün olduğunca hızlı teslim edin .

Yazılımı büyük kusurlar olmadan ne kadar erken teslim ederseniz, müşteriden o kadar çabuk geri bildirim alırsınız ve değişiklikleri bir sonraki yinelemeye dahil edebilirsiniz.

Öte yandan, çalışmayan bir yazılım teslim ederseniz, değerli geri bildirimleri kaçıracaksınız çünkü müşteriler onu doğru şekilde test etme şansına sahip olmayacaklar. Bu, bir sonraki yinelemenizin müşteri geri bildirimlerine bağlı olduğu durumlarda geliştirmenin bir sonraki aşamasını daha zor veya imkansız hale getirecektir.

Liderlik Yok, Sonuç Yok

Bölüm III, paragraf 11

Şimdi general, Devletin siperidir; siper her noktada tamamlanırsa, Devlet güçlü olacaktır; siper kusurluysa, Devlet zayıf olacaktır.

Bu alıntı, bir geliştirme ekibinde yöneticinin rolünün önemini açıklar: Bir projenin başarısı, dahil olan tüm kişilerin gücüne bağlıdır ve yönetici, projenin siperidir. Sorumluluk en üstte başlar.

Geliştiriciler sıklıkla tek başlarına çalışsalar da (her biri bir bilgisayarın arkasında oturarak, iş arkadaşlarıyla sınırlı iletişimle), bu onların iyi bir liderliğe ihtiyaçları olmadığı anlamına gelmez. Proje yöneticileri ekibi doğru yolda tutmaktan, etkili iletişim ve anlaşmazlık çözümünü sağlamaktan sorumludur ve liderler açıkçası projenin önceliklerini (diğer görevlerin yanı sıra) tanımlarlar, bu nedenle rolleri hafife alınmamalıdır. Bir şeyler ters giderse onların sorumluluğu da olmamalı. Birimi savaş alanında görevini yerine getiremeyen bir askeri lidere ne olacağını hayal edin?

Bir ekip, geliştirme pozisyonlarında birkaç çürük elma olsa bile harika bir yazılım üretebilir, ancak proje yöneticisi çürük elmaysa , ekipte ne kadar rock yıldızı geliştiricisi olursa olsun, bunun gerçekleşmesi olası değildir.

Bölüm VI, paragraf 28

Size bir zafer kazandıran taktikleri tekrarlamayın, yöntemlerinizin sonsuz çeşitlilikteki koşullar tarafından düzenlenmesine izin verin.

Bazen, bir projeye başlarken, daha önce başarılı projelerde kullandığımız teknolojilerin aynısını (aynı programlama dili, aynı kütüphaneler, aynı sunucu, vb.) kullanmak cazip gelebilir. Ancak yeni projelerin gereksinimleri öncekilerle birebir aynı değilse bu yanlış bir yaklaşım olabilir.

Programlamada, çoğu alanda olduğu gibi, her derde deva (tüm hastalıkları tedavi edebilen sözde bir çare) mevcut değildir. Tüm sorunları çözmek için kullanabileceğiniz tek bir teknoloji kombinasyonu yoktur; her teknolojinin artıları ve eksileri vardır.

Elbette yeni bir programlama dili öğrenmek veya bilinmeyen bir API kullanmak başlangıçta pahalı olabilir ancak uzun vadede yazılımın kalitesi daha iyi olacak ve daha iyi bir geliştirici olacaksınız.

Bölüm XIII, paragraf 27

Bu nedenle ordunun en yüksek zekasını casusluk amacıyla kullanacak olanlar yalnızca aydın hükümdar ve bilge generaldir ve bu sayede büyük sonuçlar elde ederler. Casuslar savaşta en önemli unsurdur, çünkü bir ordunun hareket kabiliyeti onlara bağlıdır.

Bu ifade, bakım aşamasında izleme araçlarının ve günlük kitaplıklarının kullanılmasının önemi olarak yorumlanabilir.

Bazen müşteriler böyle düşünmese de, kararlı ve tam olarak test edilmiş bir sürüm aldığınızda geliştirme sona ermez. Yazılım, hataları düzelterek, yeni özellikler ekleyerek veya verimliliği artırarak her zaman gelişir.

Ve hangi değişikliklerin yapılacağını bilmek için, üretim ortamlarında yazılımı izleyen, en çok hangi özelliklerin kullanıldığını, en yaygın hataları ve en uzun operasyonları kontrol eden casuslara sahip olmaktan daha iyi bir bilgi kaynağı yoktur.

Hata raporları, günlük girişleri ve kullanım verileri, kontrollü test ortamlarında aynı koşulları yeniden oluşturmak her zaman mümkün olmadığından, hataları tespit etmek, darboğazları ve diğer sorunları belirlemek için esastır.

Takım Çalışması ve Motivasyon

Bölüm X, paragraf 24

Şöhret peşinde koşmadan yürüyen, Kınamadan kaçan, Tek gayesi halkını korumak ve efendisine kulluk etmek olan, Adam Âlem'in bir mücevheridir.

Temel olarak, bu "ekipte ben yokum" un eski Çince versiyonudur. Kişisel kazanç peşinde koşmaktan ziyade başkalarıyla birlikte çalışmak daha önemlidir.

Yazılım geliştirme, geliştiricilerin bir ekip olarak etkin bir şekilde çalışmasını gerektiren karmaşık bir faaliyettir. İyi bir geliştirici, en fazla hatayı düzelten, en fazla özelliği uygulayan veya ödevleri planlanandan önce bitiren kişi değildir; iyi bir geliştirici, ekibin hedeflerine ulaşmasına yardımcı olan kişidir.

Yaptığınız her şey için kredi talep etmek, hatalarınızı kabul etmemek veya onlar için başkalarını suçlamamak ya da kendinize kod ninjası demek, bazı deneyimsiz yöneticileri kandırabilir ve hatta size zam bile getirebilir, ancak ekibinizin verimsiz bir üyesi olacaksınız.

Bölüm VII, paragraf 21

Harekete geçmeden önce iyice düşünün ve planlayın.

Bu ifade, çevik metodolojiler tarafından önerilenler gibi ekip geliştirme toplantılarının önemini gösterir.

Bir ekip üzerinde çalışırken, büyük değişiklikleri uygulamadan önce tartışmak önemlidir. Ekip lideri olmanız veya konuyla ilgili en fazla deneyime sahip kişi olmanız önemli değil, her zaman ekibin geri kalanıyla konuşmalı veya en azından bilgilendirmelisiniz.

Diğer geliştiricilerin size yazılımın bilmediğiniz kısımları hakkında fikir verebileceğini unutmayın. Bu, söz konusu değişikliklerin etkilerinin tamamen farkında olabilecekleri için, değişiklikleri beklenenden daha hızlı uygulamaya başlayabilecekleri anlamına gelir.

Bölüm X, paragraf 25

Askerlerinizi çocuklarınız olarak görün, sizi en derin vadilere kadar takip edecekler; onları sevgili oğullarınız olarak görün ve onlar ölüme kadar yanınızda olacaklardır.

Bu alıntı, bazen yöneticiler ve ekip liderleri tarafından unutulan bir yönetim ilkesi olan motivasyonun önemini gösterir. Motive geliştiriciler daha iyi kod yazacak, daha hızlı çalışacak, daha az hata yapacak ve fazladan saatler ayırmaya daha istekli olacak.

Motivasyon, yöneticiler tarafından astlarına samimi ilgi göstererek, onları dinleyerek, iş-yaşam dengesini önemseyerek, olumlu çalışma ortamları oluşturarak ve kariyer yollarına özen göstererek oluşturulmalıdır.

Ayrıca, motivasyonu ücretle karıştırmamalısınız. Son araştırmalar, paranın çoğu işçiyi motive etmediğini, paranın çalışanları cezbetme ve elde tutmada çoğunlukla iyi olduğunu, ancak onları işlerinden memnun etmediğini gösteriyor. Bu nedenle zamlar ve terfiler motivasyon aracı olarak görülmemelidir.

Kutunun Dışında Düşünmek

Bölüm V, paragraf 7, 8 ve 9

Beşten fazla müzik notası yoktur, ancak bu beşin kombinasyonları şimdiye kadar duyulamayacak kadar çok melodiye yol açar.

Beşten fazla ana renk yoktur, ancak kombinasyon halinde şimdiye kadar görülenden daha fazla renk tonu üretirler.

Beşten fazla kardinal tat yoktur, ancak bunların kombinasyonları, tadına bakılabilecek olandan daha fazla tat verir.

Programlamanın iyi yanlarından biri, olasılıkların sonsuz olmasıdır; temel olarak istediğiniz yerde geliştirebilirsiniz (en azından NP-tam bir sorun olmadığı sürece).

Mobil uygulamalar, web siteleri, oyunlar, masaüstü uygulamaları… programlama biliyorsanız hepsi elinizin altında.

Bölüm III, paragraf 1

Pratik savaş sanatında en iyisi düşmanın ülkesini bütün ve bozulmamış olarak almaktır; parçalamak ve yok etmek o kadar iyi değil. O halde, bir orduyu yok etmektense bütün bir orduyu ele geçirmek, bir alayı, bir müfrezeyi veya bir bölüğü ele geçirmek, onları yok etmekten daha iyidir.

Büyük bir kod tabanına sahip bir proje üzerinde çalışırken, kötü uygulamalarla veya kullanımdan kaldırılmış kitaplıklar kullanılarak uygulanmış modülleri veya kod bölümlerini bulmak yaygındır. Bu kodu silmek (veya yok etmek) cazip gelse de, birkaç nedenden dolayı en iyi fikir olmayabilir:

  • Eski kod mutlaka kötü değildir, bazen diğer metodolojiler ve teknolojiler düşünüldüğünde yazılan iyi koddur. Ancak eski olması çalışmadığı anlamına gelmez.

  • Kodun diğer daha kritik kısımlarını düzeltmeye odaklanmak yerine hala çalışan kodu düzeltmek için zaman kaybedebilirsiniz.

  • Ne yaptığınızdan gerçekten emin değilseniz, çalışan bir kod bölümünü değiştirmek, yeni hatalar veya hatalar oluşturma riskiniz olduğu anlamına gelir.

Bu, “Bozuk değilse düzeltmeyin” ifadesinin iyi bir strateji olduğu anlamına gelmez, ancak her projenin öncelikleri, hedefleri ve zaman kısıtlamaları olduğu anlamına gelir. Bu nedenle, geliştirilebilecek bir kod bulursanız, onu ne zaman optimize edeceğinizi bulmak için ekibin geri kalanıyla veya proje yöneticisiyle tartışın.

Bölüm VIII, paragraf 3

Takip edilmemesi gereken yollar, saldırılmaması gereken ordular, kuşatılmaması gereken şehirler, itiraz edilmemesi gereken mevziler, uyulmaması gereken hükümdarın emirleri vardır.

Bunu doğrudan söylemese bile, bu ilkeyi anti-kalıplardan kaçınmak için bir uyarı olarak yorumlayabiliriz.

Bir anti-kalıp kullanmak kısa vadeli bir sorunu çözebilse de, uzun vadede bunun ters etki yapacağını unutmamalısınız. Bu nedenle, ne kadar zaman kazanırsanız kazanın, ne kadar hata düzeltirseniz yapın veya sizin için ne kadar uygun olursa olsun, onlardan kaçının.

Yine de, daha fazla zamanınız olduğunda kendinize uygun bir düzeltmeyi uygulayacağınıza söz vererek, acil bir görevi çözmek için bir anti-kalıp kullanmak için cazip olabileceğiniz zamanlar olabilir, ancak Murphy'nin yasalarından birini unutmayın: Tüm hızlı düzeltmeler kalıcı değişiklikler haline gelir.

Çözüm

Yazılım geliştirmek, savaşta askerlere komuta etmekten veya bir ülkeyi yönetmekten farklı olsa da, ekip çalışması, iyi liderlik, verimlilik ve uzun vadeli çözümler gerektiren sorunları çözmeleri gerekir.

Ancak, Savaş Sanatı, yazılım geliştirmeye uygulanabilecek ilkeleri içeren tek kitap değildir. Niccolo Machiavelli'nin Prensi buna bir örnektir.

Aslında, burada Machiavelli'den hala geçerli olan alıntıların bir listesi var. Yazılım geliştirme dünyasında hangi ilkelerin karşılık geldiğini tahmin etmeye çalışın.

  1. Aslan kendini tuzaklardan, tilki de kurtlardan koruyamaz. Bu nedenle tuzakları tanımak için tilki, kurtları korkutmak için aslan olmak gerekir.
  2. Aldatmayla kazanılabilecek bir şeyi asla zorla kazanmaya çalışmayın.
  3. Hiçbir zaman büyük bir şey tehlike olmadan elde edilmedi.
  4. Sürekli başarıyı arzulayan kişi, davranışlarını zamana göre değiştirmelidir.
  5. Erkekler genel olarak gerçeklikten çok görünüşe göre hüküm verirler. Bütün erkeklerin gözleri vardır, ancak çok azının nüfuz etme yeteneği vardır.
  6. İtaat edilmek isteyen kişi, nasıl emir vereceğini bilmelidir.
  7. Bilgelik, belanın doğasını nasıl ayırt edeceğini bilmekten ve daha az kötü olanı seçmekten ibarettir.
  8. Savaştan kaçış yoktur; sadece düşmanınızın yararına ertelenebilir.
  9. Doğa birkaç cesur adam yaratır; sanayi ve eğitim çok yapar.
İlgili: DevOps Cehennem Nedir?