Banka dünyasında kod tasarım çabasını veya tembelliği seçin


23

İki yıl boyunca harika bir Yatırım Bankasında çalıştım.

En iyi şekilde kod yaratma arzusuyla, uyarlanmış iyi tasarım modellerine saygı göstererek, SOLID ilkesini, silgi yasasını ve her türlü çift koddan kaçınmayı ...

Üretimde teslimat => sıfır hata olduğunda, tümü beklendiği gibi oldu.

Ancak, tüm kodlarımın okuduğunu anlama için çok karmaşık olduğunu kesinleştirmek için geliştiricilerin çoğu bana geldi. Örneğin; “Acil durum üretim hatalarını düzeltmenin çok kolay olması için polimorfizmi unutun, biraz yapın ve anlayın” demiştim. Cevap vermeyi tercih etmedim ......

Bu geliştiricileri bilmek hiç merak etmiyor, iyi bir tasarımı anlama çabalarını reddediyor (örneğin, geliştiricilerin% 90'ı bir Strateji Örüntüsü'nün ne olduğunu bilmiyor ve prosedürel kodlar yapıyorlar ve hiçbir zaman oo-tasarım istemiyorlar, çünkü sadelik diyorlardı. ) proje yöneticilerim bana banka dünyası için gerçekten yanlış olduğumu ve idealist olduğumu söyledi.

Bana ne tavsiye edersin? Gerçekten iyi bir kod arzusu tutmam veya beni geliştiren geliştiricilerin çoğunluğuna uyarlamam durumunda, tekrar ediyorum, bana göre tasarım koduyla ilginç değil, geliştirici işimizin tüm güzelliği.

Ya da tam tersine, temel OO ilkelerini ve kendilerini koduma uyarlamak için en iyi uygulamaları öğrenmeleri gerekir mi?


19
Hindilerle çalışırken kartal gibi uçmak zordur ;-)
JonnyBoats

8
Kuruluşunuzu değiştirin veya kuruluşunuzu değiştirin. - Martin Fowler
Don Roby,

9
@ Mik378 İletişim probleminiz olabilir. Kodunuzu bu soruyu yazdığınız kadar dikkatlice belgeliyorsanız (ve daha fazla OO "hamlesi" varsa, daha fazla dokümantasyon gerekir, böylece insanlar bu ITradeSettlementVisitorarayüzün ne yapması gerektiğini bilirler ), meslektaşlarınız şikayet etmeye haklıdır. Bu güzel kod yazmak için bir şey sen bunu yapısına bambaşka ve o erişilebilir ve diğerleri için kullanılabilir kılan bir şekilde bunu belgelemek, gibi.
quant_dev

2
@quant_dev: Bence Mik378 hakkında biraz fazla varsayıyorsunuz. Sorusu bana kötü ifadeli görünmüyor; o sadece anadili değil. OO'daki ayrıntılı ve ince tasarımdan hoşlandığınız kadar hoşlanmıyorum, ancak Mik378'in açıkladığı durum da bir zil çalıyor: Boolean ifadeleri gibi basit şeyleri anlayamayan çok fazla programcı ile çalıştım. "if (exp) o zaman True başkası Yanlış" yazınız ...) Bu tür insanların tasarım kalıpları, polimorfizmden korkmaları ve bu nedenle eski usul kodlarına geri dönmeleri muhtemeldir.
Andres F.

2
İş arkadaşlarınız için kodu basit ve bakımı kolay tutmanın başlığında belirtildiği gibi tembel olduğunu kesinlikle katılmıyorum.

Yanıtlar:


20

Proje yöneticilerim bana banka dünyası için gerçekten yanlış olduğumu ve idealist olduğumu söyledi.

GTFO!

Gitme ve onları üzme zamanı. Niye bir sikime vermelisin? Beceriksiz personeli ile uzun vadede onlara paraya mal olacağını biliyorsun. Bu teknik tartışmaların bir oyunu değil. Bu politika hakkında. Diğer geliştiricileri veya GTFO'yu eğitmelerini sağlayın! Eğer yeterince politik ağırlığın yoksa, GTFO! Daha iyi uygulamalara sahip bir şirket arayın.

Orada kalmak için tek nedeni baş ağrıları için yeterli bir tazminat. Yani ortalamanın veya GTFO'nun üzerinde bir ödeme yapsalar iyi olur! Orada da bir yazılım geliştiricisi olarak yetişebileceğinizden şüpheliyim. Mesleğimizdeki büyüme, çoğunlukla sizden daha iyi ve en iyi uygulamaları teşvik eden insanlarla çalışarak sağlanır. Ve ne kadar iyi olursanız, değer veren şirketlere pazar değeriniz o kadar yüksek olur.

Evet, bunun her zamanki cevaplarımdan biri olmadığını biliyorum, ama gerçekte, bu şirkette GTFO’da politik oyun oynayamıyorsanız.

Bana ne tavsiye edersin? Gerçekten iyi bir kod arzusu tutmam veya beni geliştiren geliştiricilerin çoğunluğuna uyarlamam durumunda, tekrar ediyorum, bana göre tasarım koduyla ilginç değil, geliştirici işimizin tüm güzelliği.

Düşük kaliteli çözümler sunmamı isteyen bir şirket için çalışmam. İsmimi yazılıma oymak istiyorum. Bununla gurur duymak istiyorum. OO paradigmasına dayanan dillerde usuli uygulamalar yazmıyorum. Yüksek kaliteli yazılıma inanıyorum ve eğer şirket gelmezse GTFO! Umarım "siktir git paranı" yeterlidir.


4
+1 - Bir zamanlar GTFO'nun ne olduğunu bana gösterdi ... ( urbandictionary.com/define.php?term=gtfo )
Reddog

2
@Falcon Size tamamen katılıyorum ve insanları fikrimi paylaşan bulmak bir zevk; ve özellikle de: “Mesleğimizdeki büyüme çoğunlukla sizden daha iyi ve en iyi uygulamaları teşvik eden insanlarla çalışarak elde edilir.” En şaşırtıcı ve asıl sinir bozucu, ben daha genç geliştiriciyim ve gerçekten eskilerinden öğrenmedim. Cevabınız için teşekkürler :)
Mik378 29:11

+1, tamamen katılıyorum. Bu banka sadece iyi bir çalışma ortamı gibi görünmüyor ve sorunları birleştirilemez gibi görünüyor: kötü programcılar, kötü yönetim. Gerçekten de GTFO!
Andres F.

2
@ Mik378: Mevcut işvereniniz yeteneklerinizi tam olarak kullanamıyor ve sonuçta size değer verdiğiniz parayı ödeyemeyecek. Daha iyi bir organizasyon sizden daha fazla değer elde edebilecek ve size daha fazla ödeyebilecek.
kevin cline

+1, Size daha fazla hediye verebilirseniz, benden 1000 alırsınız. Kendime bir yatırım bankasında çalıştıktan sonra, Mik378'in ne ile uğraştığını tam olarak biliyorum. Toksik davranış, kutup yanıtlayıcı ve egomani için üreme zeminidir. Teknik mükemmelliği teşvik etmek için bir fikir ortamı değil.
Issız Gezegen,

18

Zor durum. Paralel olarak iki yoldan gidebilir, amacınızı durdurabilir ve ödün vermeyeceğini gösterebilirsiniz

  • Bu parayla ilgili. Aslında herhangi bir dev iş olarak, ancak banka ortamını vurguladığınızdan, bu daha iyi çalışması gerekir;). Onlara tarzının para kazandırdığını göster. Tasarımınız nedeniyle gereksinimlerdeki bir değişikliğin gerçekten nasıl kolayca yapılabileceğinin bir örneğini bulun. Yakında kırılmaya yatkın olan başka bir kod parçası bulmaya çalışın (burada çok agresif davranmayacağınızdan emin olmalısınız, ancak hey, kod stillerini karşılaştırmakla ilgili) Bu tür sorunlara dikkat edin çünkü kodunuz daha iyi kalitede olacaktır.

  • Bu parayla ilgili. Ya kodlama tarzınız aslında para gerektiriyorsa? Diğer insanlar, kodunuzu anlamaya çalışırken, doğru tasarımla kaydedilenden daha fazla zaman harcarlarsa iyi olabilir. Teknik olarak doğru olanı yapıyor olabilirsiniz ve yine de takım çabalarına olumlu katkıda bulunmayabilirsiniz. Ayrıca, OOP tasarımını abartmak mümkündür. "İyi tasarım güzeldir" tarafında seninleyim, ama burada onların bakış açıları ve gerçekte bakış açılarından nasıl doğru olabilecekleri konusunda sizi bilgilendirmeye çalışıyorum. Önceki noktaya paralel olarak, üzerine yazdığınız yeri bulmaya çalışın. Bu size manevra yapmak için biraz boşluk verir: Tamam, burada biraz daha pragmatik olabilirim diyebilirsiniz, ama bakın, bu kodun gerçekten daha iyi olduğu yerler de var.


Gelişmiş cevabınız için teşekkürler. Tavsiyene dikkat ettim :)
Mik378

Buna basit FizzBuzz problemini ekleyeceğim. Java'ya yazıp TDD biçiminde tekrar yapın, aniden okunamıyor hale gelir ;-).
Martijn Verburg

@Martijn Verburg - TDD'nin okunamayan bir kod oluşturduğunu düşünüyor musunuz?
Don Roby

@Don Roby - bazen evet, özellikle de OO dilinde FizzBuzz gibi bir şeyle uğraşırken
Martijn Verburg

+1 @ Nicolas78 "Ayrıca, OOP tasarımını abartmak da mümkün" - örneğin ilkel veri türleri oluşturmak Örneğin int gibi nesneler.
therobyouknow

16

Ancak, tüm kodlarımın okuduğunu anlama için çok karmaşık olduğunu kesinleştirmek için geliştiricilerin çoğu bana geldi

Haklı olabileceği hiç aklına geldi mi?

Zarif olarak nitelendirdiği kod yazma konusunda çok çaba sarf eden birisiyle çalıştım. Diğer insanların çalışmalarını zarif olmadıklarını söyleyerek çok zaman harcadı. Kodu korumak gerekli olduğunda, kodu değiştirmeyi seçtiğim kod değildir. O kadar kesin ve titiz ki, değiştirmenin derinden tehlikeyle doludur.

Burada bahsettiğiniz ilginç kelime "karmaşık". Karmaşık olarak tanımlanabilen kod nadiren de özellikle iyi olarak tanımlanabilir.


1
+1000 Katılıyorum. Kod insanlar içindir. Uyarı, elbette, diğer kodlayıcıların çoğu kodlayıcıların yazdıklarını okuyabilmesi gerektiğidir . Temel bilgileri anlamayan herkes iyileştirmek için yapılmalıdır.
Iain Holder

3
+1 @temptar, "Haklı olabilecekleri hiç oldu mu?" ve "Karmaşık olarak tanımlanabilen kod nadiren de özellikle iyi olarak tanımlanabilir."
therobyouknow

2
-1: Haklı olduklarını sanmıyorum, sadece biraz kıdemli ve sorunun daha yakından okunmasını açıklığa kavuştuğunu düşünüyorum. OP’nin anahtar ifadesi “her türlü yinelenen koddan kaçınmaktır” ... Kodu YARARLAMAYA ÇALIŞIYOR, ancak bunu yapmak için meslektaşlarının görünmediği bir karmaşıklık gerekiyor. Ayrıca meslektaşlarına "sadece bir if ... eklemek" önerilerini de aktardı. Bu aynı zamanda OP'nin doğru yolda olduğunu ve meslektaşlarının büyük bir WTF inşa ettiğini söylüyor.
kevin cline

Endişeli olan şey “Çok Karmaşık” olan OOP iyi bir şey olabilir ama aynı zamanda çok hızlı bir şekilde karmaşıklaşabilir. Orijinal Posterin OOP serin yardımcısını içmiş olabileceğinden ve kodlamanın her zaman en iyi yol olmadığını ve bunun gerekmediği yerlerde fazladan bir karmaşıklık getirdiğini anlayamadığından şüpheleniyorum.
Zachary K

Sizin iş arkadaşınız gibi görünen sesler gelecekteki bakım için testlerini yapmıyor. Bunu proje yöneticisine getirmek isteyebilirsiniz.

10

Viktorya dönemi mobilya üreticileri (en azından bugün çalışmalarını hala görmekte olduğumuz kişiler) gerçek ustalardı, yaptıkları işler, güzel, iyi hazırlanmış ve bir ömür boyu sürecek şekilde tasarlanmış ve inşa edilmiş. Ancak son 150 yılda dünya değişti. Bir yemek odası masası satın alırken daha ucuz alternatifler ticari olarak daha pragmatik olduğunda, pek çok kişi bu işçiliği ödemeye hazır değildir.

Birçok programcı eski ustalar olmak ister, ne yazık ki, ticaret bunun her zaman gerçekleşemeyeceğini söyler. Bir seçeneğin var, uyum sağla veya bırak. Esnaf isteyen şirketler var, ancak çoğunlukla çalışan, ucuz ve şimdi ürünleri isteyenlerin sayıca çok fazla olduğu görülüyor.

Ticari yazılım geliştirmenin çoğu için uygun olmadığına dair ipucu "Üretimde teslimat yapılırken> sıfır hata" dır. Nasa bile uzay mekikleriyle bunu başaramadı.

Ayrıntıya ve dolayısıyla ilk maliyete dikkat ettiğiniz tek yerin kabul edilebilir olması muhtemel olan 1. seviye kritik sistemlerdir - örn. Aviyonik / Havacılık, Otomotiv, Askeri ve Medikal.


1
+1 @mattnz, "Seçim, uyum ya da ayrılma seçeneğiniz var."
therobyouknow

2
Katılmıyorum - bu bir banka . Hatalarında oldukça pahalı olabileceği için yazılımlarında hiçbir hata bulunmadığından emin olma eğilimindedirler. Ayrıca çözümler yıllarca veya on yıllar boyunca sürebilir.

2

Sorun, yanlış yerde çalışman. Akademik olarak eğimli bir programcısın gibi geliyor. İçinde bulunduğunuz ortamda iyi iş yapmayacaksınız ve büyük bir bahanenin sizden ve "çok karmaşık" kodunuzdan kurtulmak için icat etmesi muhtemeldir. Önemsiz görevler verilebilir ve / veya düşük performans incelemeleri verilebilir ve bunlar kendi isteğinize bırakılana veya sizi kovmak için yeterli bir arka kaplama kağıt izine sahip olana kadar verilebilir.

Çalışmanız için akademik eğilimlerinize değer verecek bir yer bulmanızı tavsiye ederim. Dışarıdalar. Ayrıca, pragmatik ve akademik arasındaki çitin bazılarını da bulacaksınız. Bunun gibi bir iş en iyi seçeneğiniz olabilir çünkü bu, bazılarının kaosunu kendi yaklaşımınızı dizginlemenize yardımcı olurken bazı kaosu davet etmenize izin verir.


"Önemsiz görevler verilebilir" in kurnazca gözlemi için +1 @jfrankcarr (bir yapıcı işten çıkarma formu)
therobyouknow

2

İşvereninizi değiştirmek gibi sert önlemler almadan önce, sizin gibi programcı olmayanlara kodlama yönteminizin şirket için neden daha iyi olduğunu açıklama yeteneğinizi geliştirmeye ve zamandan ve paradan tasarruf etmeyi denerim. Ayrıca, yalnızca tasarım desenleri uğruna tasarım desenleri uygulamadığınızdan emin olun - KISS ve YAGNI kurallarını da uyguladığınızdan emin misiniz? (Tamam, strateji deseni ve polimorfizm roket bilimi değildir, meslektaşlarınıza neden bu yaklaşımı seçtiğinizi uyarlamaları ve açıklamaları için biraz zaman verin .)


Kabul ediyorum, sorun şu ki öğrenmek istemiyorlar, zihniyetlerini değiştirmek istemiyorlar (Java'da bir dahi değilim ama insanların çoğunluğunun mükemmel bir şey olduğunu düşündüğü bir şeyi anlamadığımda) bilmek, onu öğrenmek için çaba sarf edeceğim (kitap, internet makaleleri, yığın akışı vb ...) Özetlemek gerekirse, kalıplarla baş ağrısı istemiyorlar (kalıp diyorum ama programın "Mükemmel" ilkesini söyleyebilirim daha fazlası genellikle) bu onlara daha fazla para getirmez ... Bunu söylemek zor ama çok doğru. Eğer sadece uygulama iyi çalışıyor olsaydı => Kesinlikle bu konuyu
yazmam

@ Mik378: “Diğerlerinin yanlış yaptıkları” hakkında çok konuşuyorsunuz. Yaptığın her şeyin doğru olduğuna emin misin ?
Doktor Brown,

@DocBrown polimorfizmi, basit ifadenin tek bir yöntemde tuttuğu dosyalar arasında mantığı parçalamanın belirgin bir dezavantajına sahiptir. Belki iş birimleri çok küçüktür?

2

Benim şirketimde, Temiz Kod Geliştiricisine dayanan bir dizi atölye çalışması yaptık . Amaç, geliştiricilerin yazılım tasarım ilkelerini (bahsettiğiniz gibi), programlama tekniklerini vb. Öğrenebileceği ve projelerini yansıtabildiği, telaşlı ve son teslim tarihleri ​​ve kötü tavizleriyle normal günlük iş dışında bir forum oluşturmaktı. kendi işleri.

Gerçek projelerden gerçek hayattan örnekler de tartışıldı. Katılımcılardan gelen geri bildirimler AFAIK tarafından çok olumluydu. Gerçek bir faydayı ölçmek zor olsa da.

Bu atölyelere katılım kısmen şirket sponsorluğunda, kısmen katılımcıların kendi boş zamanlarındaydı. Öğrenmeyi umursamayan ve sadece işlerini yapmak ve eve gitmek isteyen meslektaşlarına ulaşamayacaksınız, ancak kendi işleriyle ilgilenen herkes için bu ilginç olabilir.


Bu fikri çok sevdim.
temptar

2

Her şeyden önce yolunun gerçekten daha iyi olduğunu kontrol ederdim. Nesneye Yönelik Kod çok güzel olabilir, ancak aynı zamanda gizli yan etkilerin kabusu olabilir ve her eylem birkaç farklı sınıf gerektirebilir.

Daha iyisi InfoQ'ya gidin ve Rich Hickey'in "Simple Made Easy" konulu konuşmasını izleyin


1

Orada sürekli mücadele etmeden çalışmaya devam etmek istiyorsanız, biraz vermek zorunda kalacaksınız. Prosedürel olan dev bir grup hemen polimorfizmi kabul etmeyecek. Onlar OO şeklinde tasarlayamasalar da, kodunuzdan öğrenebilirler. Bazı kodların bakımının daha kolay olduğunu takdir edebilirler.

Bir not olarak, tercihlerinize uymanın önemli olduğunu düşünüyorsanız, geliştirme süreci ve kodlama metodolojisinin kullanıldığını görmek için görüşme sürecinde sorular sormanız gerekir.


0

Acil durumlar olur. Sen mükemmel değiliz ve elleri edecek bir noktada kodunuzu yağma. Asla zaman ayırmazsanız, ki doktorunuzun onaylayacağı gibi sağlığınız için iyi değil. Ve kötü kod yayma olasılığını arttırır.

Kodunuz daha yüksek kalitede olabilir (kanıtlanmamış gerçek) ancak politikaları vardır . (cehennem gerçeği gibi)

Politikaları izlemen konusunda uyarıldın ve onları takip etmemekten sorumlusun. Acil bir durumda. Bir bankacılık uygulamasında. Demek istediğim, hedefiniz zayıf ve hapishanede bitiyorsa, aynı sonucu elde etmek için daha eğlenceli ve daha anlamlı yollar bulabilirim.

Sen, ancak, olacağını hücre arkadaşları memnun hakkında başıboş duymak meraksızlığı senin eski arkadaşları.

(O zaman yine, şirketinizin muhtemelen OO tasarımına karşı iç politikaları yoktur, ancak kodunuzu düzeltmeye çalışacak sakarlara verilen COBOL eğitimli mühendis, en kötü durumda senaryoyu biraz ince yapacaktır ve IMHO % 40'ı kritik bir vuruş yapma şansına sahip olacaksınız)


1
Şahsen, çok iyi bir geliştiricinin, kirli kodu hızlıca iyi yaptığını düşünüyorum. Acil durum için sizlerle aynı fikirdeyim ... ancak bir proje 4 ay boyunca planlandığı zaman ve geliştiricilerin ne yapacakları, uygulamada zaten bir şeyin var olup olmadığı hakkında küresel bir görüşü bile yok Onlara yardım et, kabul edemedim. Bir geliştirici: “Bu kodun korkunç olduğunu biliyorum, ancak kodunu kıracağım çünkü asla kırmayacağım”, saçma. Mühendis mi değil mi? Bir mühendis, risk almak ve bazı gerçekler için iyi birim testleri yapmak zorundadır
Mik378

1
Burada bankalarla konuşmayacağımız yerde ben de aynı fikirdeyim. Her zaman diğer programcılardan farklı bir grup olduklarını hissediyorum. Ayrıca genellikle daha yaşlılar. (Benim çevremde, en azından, her yerde olduğu gibi, çıkarım) Onların matematiği basit ama onların doğruluğu değil.
ZJR

@ZJR Burada OP ile ilgili kehanetlerinizin OO kullanması için hapis cezasına çarptırılmasıyla buraya taşınıyorsunuz. Çoğu bankacılık kodu bu incelemeye tabi değildir.
quant_dev

0

Programlamanın, bazıları tarafından, kendi iyiliği için bir amaç için bir araç olarak değerlendirildiğini hatırlamaya çalışın. Kullandığınız tüm ürünleri ve hizmetleri düşünün: Alttaki kodun zarif bir şekilde yapılmış olup olmadığını düşünerek çok zaman harcıyor musunuz? Yoksa sadece çalıştıkları için onları takdir ediyor musun? Tutkulu olduğunuz bir endüstri veya sebep bulun, daha sonra bununla bir organizasyon bulun, sonra onlara programlama içeren çözümler sunun, sadece bunu değil. Sorunlar zekice farklı şekillerde çözülebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.