Ekibim “modern” olmakla nereden başlamalı? [kapalı]


106

Ben nispeten yeni bir geliştiriciyim, üniversiteden yeni. Kolejdeyken ve sonraki iş arama sırasında, eğitimimin eksik olduğu bir çok "modern" yazılım geliştirme metodolojisi olduğunu fark ettim: birim testi, kayıt, veritabanı normalizasyonu, çevik gelişim (genel çevik kavramlar vs.), kodlama stili Kılavuzlar, yeniden düzenleme, kod incelemeleri, standartlaştırılmış dokümantasyon metodu (veya hatta gereksinimleri), vb.

Genel olarak, bunun bir sorun olduğunu görmedim. İlk işimden bütün bu fikirleri benimsemesini ve bana işinde öğretmelerini beklerdim. Sonra ilk işimi (tam yığın web geliştirme) büyük bir şirkette yaptım ve bunların hiçbirini yapmadığımızı fark ettim . Aslında takımda en az tecrübeli olan ben, öncülüğünü yapan kişi benim takımımı "modern" programlama teknikleriyle hızlandırmaya çalışır - bunu yapmadığım için profesyonel intihar etmekten korkuyorum.

İlk önce logging yazılımıyla (log4J) başlamıştım, ama sonra hızlı bir şekilde kendi stil rehberimi yazmaya, sonra onu Google stil rehberini bırakmaya devam ettim - ve sonra Java web geliştirmemizin elle yazılmış ön denetleyicileri kullandığını fark ettim. Bahar'ı benimsememiz - ama sonra farkettim ki, aynı zamanda birim testlerimiz de yoktu, ama ben zaten Baharı öğreniyordum ... ve görebildiğiniz gibi, özellikle normal gelişim çalışmasıyla eşleştirildiğinde, çok hızlı bir şekilde zorlu hale geldi. Dahası, bu metodolojilerde, bir başkasına, çok fazla zaman ayırmadan, bir başkasına ders vermeden, bir başkasına öğretecek kadar "uzman" olmam zor.

Günümüzün yazılım geliştirme dünyasında "beklenen" olarak gördüğüm tüm bu tekniklerden, hem kendime hem de takıma çok fazla zarar vermeden onları bir takıma nasıl entegre edebilirim?

Takımımı daha çevik hale getirmek için nasıl etkileyebilirim? ilişkilidir, ama ben değil burada asker gibi Çevik geliştirici ve ben Çevik daha metodolojileri çok daha geniş bir sette bakıyorum.


92
"modern"? Listenizdeki bu "çevik" kelimeyi soyun ve yalnızca> 20 yaşından büyük şeyleri görebiliyorum.
Doc Brown

10
Belki de yaygın olarak benimsenmesi anlamında "modern", fikirlerin genleri değil moderndir. Ben de bu konuda uzman değilim , bu sadece benim izlenimim.
WannabeCoder

41
Sizi temin ederim ki, birim test, kayıt, veritabanı normalleştirme, kodlama stili rehberleri, kod incelemeleri (= incelemeler) 30 yıldan daha eski. "Yeniden düzenleme" terimi en az 15 yaşında (Fowler 2000 yılında kitabını yazdı). Resmi bir dokümantasyona veya yazılı gerekliliklere sahip olmamak "modern bir teknik" değildir, IMHO bile bir "teknik" değildir.
Doc Brown

69
@DocBrown itiraf etti, yorumunuzu yapmadan önce tüm bunları oluşturması için Marty'yi zamanında geri gönderdiniz.
boş,

17
Kolejinin bu şeyleri öğretmediği için daha çok endişeliyim - 15 yaşından beri okuldan çıktım ve bu şeylerin çoğu oldukça erken kapatıldı. (Elbette buzzwords eksi).
Allen Gould

Yanıtlar:


165

Bana at arabasını attan koyuyormuşsun gibi geliyor.

Ekibinizin karşılaştığı en büyük sorun nedir ve hangi teknolojiler onu düzeltmeye yardımcı olacaktır?

Örneğin, çok fazla hata, özellikle de regresyon tipi hatalar varsa, birim testi bir başlangıç ​​noktası olabilir. Ekibiniz zaman eksikse, belki bir çerçeve yardımcı olabilir (orta ila uzun vadeli). İnsanlar birbirlerinin kodlarını okumakta zorlanıyorsa, stillendirme yararlı olabilir.

Unutmayın ki çalıştığınız işin amacı, para kazanmak, kod yapmak değil.


35
Hemen hemen. Kısmen pragmatik bir noktadan başlamak için bir yere, kısmen de itibarlı bir noktadan başlamak zorundasınız, eğer takım için bir problemi çözebilirseniz, diğer önerileri dinlemek için daha istekli olabilirler. Ayrıca, bu şirketin mevcut yöntemleriyle gelmeden önce para kazandığını da unutmayın, bu nedenle yerine koyduğunuz şey şirketin para kazanma yeteneğini arttırmak zorundadır.
Jaydee

6
Bunu kabul etmekle birlikte, bu mesleğin risklerini ele almak için
izlemekten memnuniyet duyarım

4
@WannabeCoder - Yeterli olmadan önce kullanmaya başlamalısınız. Hala üretime kod koyabilirsiniz. Bazen kodlama tıp doktoru olmak gibidir. Hepimiz hala pratik yapıyoruz.
JeffO

5
Mükemmel cevap. Bunları sadece sorunları çözmek için, üretmek için değil problemleri uygulamak için uygulamalısınız.
Kik

5
@WannabeCoder Bu metodolojilerin hiçbirinin bir boşlukta yaratılmadığını fark etmek önemlidir. Geniş çapta yayılıyorlar çünkü sorunları çözmeye yardımcı oluyorlar . Onları uygulamaya çalışırsanız ve ekibinizin karşılaştığı sorunları çözmeye yardımcı olmazlarsa, hiçbir şey yapmadınız ve muhtemelen uygulamaları tamamen yanlış anladınız ve kötüye kullandınız. Bir geliştirici olarak odak noktanız , yaptığınız her eylemde problem çözme konusunda olmalıdır . Bu uygulamaları yerine getirmenin biraz daha fazla olduğu durumu iyileştirecek küçük kazançlar arayın. Bu, onları genişletmek için bir durum oluşturmanıza yardımcı olur.
jpmc26

77

Java? Modern?! İlk engelde başarısız oldun. Eğer gerçekten modern olmak ve "profesyonel intihar" dan kaçınmak istiyorsan, Rust kodu yazmalısın. Tabii ki, gelecek hafta, her şey değişecek ve devam etmek için daha da yeni bir şeyler öğrenmek zorunda kalacaksınız!

Veya, hiçbir buzzword teknolojisinin veya metodolojisinin ya da çerçevesinin ya da herhangi bir başka bir bilginin işe yaramayacak kalitede ürünler oluşturmak istediğinizi değiştirmeyeceğini kabul edebilirsiniz. Doğru çıktıyı başarıyla üretiyorsanız çevik kullanmamanız önemli değil. Tabii ki değilsen, bir şeyleri değiştirmek isteyebilirsin, ama şansın sorunları çözecek özel bir uygulama olmaması. Herhangi bir şekilde farklı şekillerde çözülebilecek insan sorunları olarak kalacaktır .

Profesyonel intihara gelince, ne yaptığınızı ve esnek olduğunuzu biliyorsanız o zaman bahsettiğiniz hiçbir şeye ihtiyacınız yoktur. İnsanlar eski işi yapmanın yeni yollarını bulmaya devam edecek ve her zaman yetişeceksiniz. Veya şu anki şirketinizin kullandığı teknikleri ne olursa olsun kullanabilirsiniz. Şirketinizi değiştirdiğinizde, kullandıkları teknikleri öğrenir ve kullanırsınız.

Çok sayıda çocuk, kullanabilecekleri tüm yeni araçlara takılır ve bu araçların bir aceminin elinde değersiz olduğunu unutur. Öncelikle uygulamayı öğrenin, deneyimli bir geliştiriciyseniz, geliştirme uygulamalarını "harika yeni şeyler" ile "düzeltmeye" başlayabilirsiniz, ancak o zaman umarım bunların şu anda düşündüğünüz kadar önemli olmadığını fark etmişsinizdir ve sadece gerçekten ihtiyaç duyulduğunda kullanılır.


4
Çok güzel cevap (+1), özellikle son paragraf. Çok modern bir kitap (bugün onu çok alakalı bulduğumda modern) Son zamanlarda okuduğum SICP.
Giorgio

1
Bu terimlerin ve popüler dillerin ne kadar çabuk değiştiğinden bahsetmek için + 1 İyi bir kod ortaya koymak iyi bir yöntemdir, herhangi bir metodolojiye aittir. Neyin işe yarayıp yaramadığını yapın!
WeRelic

2
Bunların doğru kullanılması gerektiği konusunda haklı olsanız da, "şu anda düşündüğünüz kadar önemli değiller" fikrine katılmıyorum. Tamam, elbette, bu bazı uygulamalar için doğru olabilir (biraz birim testinden şüpheliyim), ancak diğerleri çok değerlidir. Çok fazla CI ve otomasyon yapmaya başlayabildim ve kaynak kontrolünü iyi kullanmaya başlamıştım ve şimdi bunların bulunmadığı bir proje üzerinde çalışıyorum, çözmek istediğiniz tüm sorunları gördüm: hatalar, tutarsızlıklar , kimse hangi kodun nerede çalıştığını bilmiyor. Bu uygulamalar büyük bir fark yaratıyor.
jpmc26

6
Kimse "sorunları çözme" demez, sorun çözülecek sorunları ararken çözüm önerileri getirildiğinde ortaya çıkar. Kargo kültürcülerinin sandıkları kadar önemli değiller, araçların gerçekte sadece araç oldukları araçların önemli olduğunu düşünüyor. Önemli olan ve doğru yerlerde hangi aletlerin çalıştığını uygulayan uygulayıcıdır. Benim açımdan hiçbir zaman bir alet seçmemektir, çünkü alet kutusundadır.
gbjbaanb

2
Aletli aptallar hala aptaldır.
Pete Becker

40

Birçok şirket bu şekilde sıkışmış; geliştirici çalışma arkadaşlarınızın bazılarının kendi kendine öğretildiğini ve resmi bir geçmişi olmayan geliştiriciler haline geldiğini görünce şaşırabilirsiniz. Bu geliştiriciler işlerinde genellikle daha iyidir, çünkü yeni beceriler öğrenmeye ve sadece işi yapmak yerine başarılı olmaya yönlendirilirler. Ne yazık ki bu aynı zamanda, programlamada mükemmel olmalarına rağmen, bu uygulamaların yararlarının farkında olmayabilecekleri anlamına da gelebilir. Gerçek şu ki bunlar en yaygın uygulama değil , en iyi uygulamalardır. En iyi onlar sadece daha kolay başarı sağlamak için araçlardır, bunları kullanmak, ancak başarılı olmak için tüm gereksinimleri değildir.

Kesinlikle haklısın, her şeyi bir seferde uygulamaya çalışmak çok zor olacak. Büyük olasılıkla kendinizi (ve belki de ekibinizi) yapmaya çalışarak yakacaksınız, bu da gelecekteki motivasyonları azaltacak ve yeni metodolojiler / teknolojiler benimsemeyi zorlayacak. Böyle bir durumda yapılacak en iyi şey bir tane seçmektir.Bir şey (günlüğe kaydetme muhtemelen iyi bir başlangıçtır, çünkü muhtemelen günlüğe kaydetmeden hata bulma konusunda zorlu bir yolunuz vardır ve böcek olacağından emin olabilirsiniz) ve bunun hakkında takımla konuşun. Bunu tek elle uygulamak zorunda değilsiniz; Artıları ve eksileri takımla (ve böyle bir şeye kesinlikle sahip olması gereken mutlaka patronunla) tartışmak ve uygulamak için bir plan hazırlayarak çok daha iyi yapacaksınız. Olabildiğince acısız olması gerekecek (unutmayın, insanlara şimdiden yaptıklarına ek olarak ekstra kod yazmaları gerektiğini söylüyorsunuz ).

Ve bir daha söyleyeyim, patronunun aldığından emin ol . Bu çok önemlidir; muhtemelen yeni şeyler uygularken düzeltmelerin / sürümlerin hızının yavaşladığını göreceksiniz. Mesele şu ki, çizgiden tasarruf etmek için peşin ödeme yapıyorsunuz; Bunu anlamalı ve senin tarafında olmalısın. Onları gemiye sokmazsanız, en iyi ihtimalle kaybedilen bir savaşla savaşıyorsunuzdur ve en kötüsü sizi aktif olarak takımı sabote ediyor olarak görebilirler (bana nasıl bildiğimi sorun).

Bu maddeleri masaya getirdikten sonra, bunları ekiple tartışın, nasıl uygulanacaklarını planlayın ve bunları takip edin, ikinci, üçüncü, sekizinci vb. Daha kolay olacaktır. Sadece bu değil, önerilerinizin uygulanması ve değer katma olarak kabul edilmesi için ekibin ve patronunuzun size saygı duyma potansiyeli var. Harika! Sadece esnek kaldığınızdan emin olun: burada ataletlere karşı bastırırsınız ve değişiklik kolay değildir. yavaş yavaş küçük yapmak için hazırlıklı olundeğişiklikleri yapın ve kazandığınız ilerlemeyi ve değeri takip edebileceğinizden emin olun. Günlüğe kaydetme işlemini yeni bir işlemde uygularsanız ve üç hafta içinde bir hata bulmak için saatlerce tasarruf etmenize yardımcı oluyorsa, bununla ilgili çok şey yapın! Herkesin önceden doğru olanı yaparak şirketin XXX $ 'ı biriktirdiğini bildiğinden emin olun. Öte yandan, engelleme veya sıkı bir son tarihiniz varsa, sorunu zorlamaya çalışmayın. Yeni değişimin o an için kaymasına izin verin ve geri dönün. Ekibi yapmak istemedikleri bir şeyi yapmaya zorlayarak asla kazanamayacaksınız ve bırakmayı önerecekleri ilk şeyin yeni 'ekstra' iş olduğundan emin olabilirsiniz (günlük kaydı veya takip etme gibi) sadece 'çalışmasını sağlamak' yerine bir stil kılavuzu).


6
Bundan çok kastettiğinden şüpheliyim, ama üniversite compsci eğitimi almadan benim gibi devlerin kafasını karıştırdım. Benim deneyimim (maalesef) üniversite eğitiminin geliştirici kalitesiyle çok az ilişkisi olduğu yönünde. Ve şimdiye kadar kariyerimde en iyi uygulamaları savunan ve uygulayanlardan biri oldum. Tavsiyen olsa harika.
djeikyb

5
Aslında bunu başka bir şekilde kastediyordum: OP, örgün eğitim olmadan dışarıda kaç tane iyi kişi olduğunu şaşırtacaktı. Son 20/30 yılda, derece yerine çocuklar yerine öğrenmeye istekli insanlar tarafından doldurulan birçok teknoloji pozisyonu açıldı. Ve bulgularım sizinkileri yansıtıyor: deneyim her zaman eğitimden iyidir. Bu nedenle OP'nin yavaş ilerlemesi gerekiyor ... bir ekibi yeni uygulamaları benimsemeye çok hızlı bir şekilde adapte etmesi, onlara kızdıracak ve bu tutumları yumuşatmak için deneyime sahip olmayacak. Ayrıca bazı ekiplerin bu araçları asla kullanmayacaklarını fark etmek önemlidir ; İşte o zaman yeni bir iş buluyorsun.
DrewJordan

1
“Birçok şirket bu şekilde sıkışmış durumda; bazı“ geliştirici ”meslektaşlarınızın bazılarının kendi kendine öğretildiğini ve herhangi bir resmi arka planı olmayan geliştiriciler olduklarını görünce şaşırabilirsiniz.” Bunlar genellikle alan uzmanlıkları nedeniyle en değerli geliştiricilerdir.
pmf

Tamam, tamamen katılıyorum. İlk paragrafı yeniden değerlendirdi, böylece daha az küçümseyici geliyor. OP'nin işgücünün iyi bir bölümünün aslında resmi bir geçmişi olmadığını bildiğinden emin olmak istedim. Benim açımdan kötü kelime seçimi.
DrewJordan

18

Umarım bu meseleleri iş arkadaşlarınıza gönderdiğiniz gibi bize bildirmemişsinizdir. Bu profesyonel intihar olur.

İlk mesele şu ki, belki biraz modası geçmiş olan, ancak işi "bitmiş" yapan bir grup programcı ile bile deneyiminiz olmayan teknolojiler ve yöntemler öğretmeye çalışıyorsunuz. Bu geri ateşlemenin olanakları sonsuzdur ve muhtemelen iş arkadaşlarınıza büyük bir mutluluk getirecektir. Kendinizi ve departmanınızı geliştirmek istemeniz ilginç ve takdire şayan, ancak "öncülük" gibi terimler kullanmaktan kaçının. Saygılarımızla, bu kelimeyi kullanmayın.

Yukarıdakilere ek olarak, bazı işler yaptığınızı kontrol edin . Uzun zamandır yalnız, kendi kendine öğrenen bir programcı olarak çalışıyorum ve gelecek vaat eden çerçeveleri, teknolojileri ve benzerlerini araştırmak için asıl işi bir kenara bırakmanın ne kadar kolay olduğunu biliyorum. Performansınızın beklenen parametreler dahilinde olduğundan emin olun (hayır, kimse size sordukları raporun yapılmaması durumunda Spring'i araştırmak için 20 saat harcamanızı umursamaz).

Yukarıdakilerin hepsinden , öğretmen olmaktan kaçının (eğer aslında yeterince deneyime sahip olduğunuz bir alan / teknoloji ile ilgili değilse). Daha nötr bir sunum, otomatik test etmenin avantajlarını işaret ediyor ve yönetimin bu uygulamaların artılarını ve eksilerini araştırmak istediklerini seçmelerine izin veriyordu.

Şimdi, bu "en iyi uygulamaları" sunmak için, bunları ekibinize açıklamanın iki yolu vardır:

  • Çünkü onların en iyi uygulamalar olduklarını söylüyorum ve bu yeterli.
  • Çünkü onlar faydalıdır ve problemi çözmeye yardımcı olur.

İlk argümanı kullanarak, eğer patron veya ekibin çok üst düzey bir üyesi değilseniz, size herhangi bir ilgi göstermeleri pek olası değildir. Ve "Knuth’tan bir kitap okudum" veya "SE’nin adamları" bunun hiçbir izlenime yol açmayacağını söylüyorlar ("bu adamlar burada çalışmıyor, bu yüzden bu BT dükkanı için neyin iyi olduğunu bilmiyorlar" "). Metodları, rutinleri, prosedürleri ve "az ya da çok" işe yarayan şeyleri var, neden değişme çabası ve riskleri alsınlar?

İkinci yaklaşımın işe yaraması için bir sorunun var olduğunun farkına varılması gerekir . Yani:

  • otomatik test için gece gündüz zorlamayın. Bir güncelleme bazı özellikleri kırar ve ekibin bu sorunu çözmek için fazla mesai yapması ve ardından otomatik bir test sistemi kurmasını önermesi beklenir.
  • kod incelemeleri için sorma. Joe'nun izinsiz kalmasına izin verene kadar bekleyin ve bu modülde sadece Joe'nun bildiği bir değişikliğe ihtiyaç var ve patronunuzun Joe'nun kodunu anlamaya çalışırken ne kadar zaman kaybolduğunu işaret edin.

Tabii ki, değişim yavaş ve ilerici olacaktır (daha büyük bir şirkette). Beş yıl içinde kod incelemesi ve otomatik sınamayı tanıtırsanız, kendinizi iyi iş çıkardığınız için tebrik etmelisiniz. Tam bir yeniden yazma harici nedenlere bağlı olmadığı sürece Fakat, onlar (diyelim Bahar çekirdek IS geçecektir herhangi fantezi unutmak Sen doğmadan önce bile, Joel şimdiye olabileceğinden daha bu şekilde daha iyi izah 1 ); O zaman, en çok, kritik olmayan sistemler yazmak için desteklenen platformlar listesinde Spring'i bulabilirdiniz.

Kurumsal BT dünyasına hoş geldin evlat! :-p

1 : Tamam, belki biraz abartıyorum, ama fazla değil.


1
Çoğunlukla katılmıyorum. Bir takımda biraz değişiklik yapmanın tek yolu, birisinin araştırmayı yapmaya ve gerisini yoluna sokmaya istekli olması. Tabii ki üretken kalmalısınız, ama eğer herkes kafasını alçak tutuyorsa, "biraz modası geçmiş, ama işi halledersiniz". Ve tamamen can sıkıntısından yanmış.
winkbrace 21:15

@ winkbrace İyileştirmeyi denememeniz gerektiğini iddia etmiyorum (aslında tam tersini belirtiyorum). Ancak bu değişiklikleri yönetim desteği olmadan ve bazı kıdemlerin otoriteleri olmadan zorlamak zor olabilir ve bir miktar direnç gösterebilir; OP’nin kendisi konusunda tam bir uzman olmadığına ve fiili uygulama konusunda sıkıntılara yol açabileceğini de ekleyin. OP, değişiklikleri doğru bir şekilde tanıtmak için bir araştırma / prototip ekibine gönüllü olabilirse iyi olurdu; ancak, bunları tanıtmak ve sabırlı olmak için doğru yaklaşımı seçmekte dikkatli olması gerektiğini yasakladı.
SJuan76

@winkbrace can sıkıntısı biti için, kişiliğinize ve bir işte aradığınız şeye bağlıdır. Herhangi bir yere gitmek yerine sizi tatmin edecek bir iş pozisyonuna inmeye çalışmak ve organizasyonu zevkinize göre değiştirmeye çalışmak mantıklıdır. Ve genellikle büyük şirketler (Ar-Ge departmanları hariç), birkaç ayda bir yeni bir teknolojiyi test etmeyi seven insanların yeri değil.
SJuan76

"Gerçekten iş yaptığından emin ol" demek biraz karışık. Elbette işi yapmalısınız ama aynı zamanda uzun vadeli düşünmelisiniz ve her gün gelişmelisiniz. Yöneticimizin "hızlı" kodlamayı denediğimizde bile ünite testlerinin yardımcı olacağı gerçeğine kavuşması 5 ayımı aldı . Fakat bunun gerçekleşmesi için burada birkaç dakika ara verdim ve orada birkaç günde bir.
Rudolf Olah

@mouse Sadece araştırma yaparken, bazen kendime isabet eden bir riski işaret ediyordum. Açıkladığınız durumda kesinlikle bu riski görmüyorum, ancak OP'nin araştırmasını tanımladığı biçim ("önce başladım ... sonra çabucak yerleştim ...") beni bu konuyu ekledi. OP'nin atanmış işini doğru şekilde yapmadığını iddia etmediğime dikkat edin (bu sadece bilmediğim bir şey ve bu onun patronu), onu çok uzaklaşmayacağından emin olmak için uyardım. .
SJuan76

12

Michael Feathers'ın Eski Kodla Etkili Çalışması kitabına başlamalısınız . Kitabın girişinden itibaren, "Bu karışık, opak, kıvrımlı bir sistem almak ve yavaş yavaş, yavaş yavaş, parça parça parça, adım adım, basit, iyi yapılandırılmış, iyi tasarlanmış bir sisteme dönüştürmek." Çoğunlukla otomatik testlerle başlar, böylece güvenli bir şekilde yeniden inceltebilirsiniz (bir şeyi kırarsanız anlarsınız) ve otomatik testin altına zor kod getirmenin bir çok stratejisini içerir. Bu hala geliştirilme aşamasında olan her proje için yararlıdır. Temel bir düzeniniz olduğunda, projenizin diğer modern teknolojilerden gerçekten faydalanabileceğini görebilirsiniz - ancak hepsine ihtiyacınız olduğunu varsaymayın.

Mevcut projenizin gerçekten ihtiyaç duymasından ziyade profesyonel nedenlerden dolayı yeni bir çerçeve (veya başka bir şey) öğrenmek istiyorsanız, o zaman bunu kişisel bir projede kullanmalısınız (kendi zamanınıza göre).


Eski Kod ile Etkili Çalışma konusundaki başlıklara katılıyorum, ancak çok küçük değil. Roman gibi okumayı beklemek yerine bölümlere bir referans olarak bakın.
Lukas,

10

Kaynak kontrolü.

Bundan söz etmediniz, umarım zaten yerindedir, ancak olmasa bile oradan başlayın.

Kaynak kontrolü, patolojik olarak başka bir şeye ihtiyaç duyan nadir durumlar dışında, en büyük paranın karşılığını alır.

Başlangıçta kimse satın almazsa, yalnız başlayabilirsin.


1
En büyük patlamaya karşılık, doğru yerlerdeki birkaç ASSERT'e benziyor.
Peter Mortensen

@PeterMortensen Doğru, ancak doğru yerlerin ne olduğunu biliyorsanız.
Emilio M Bumachar

Beni yendin. OP ekibini hangi yöne götürürse götürsün, Git ile oraya gitmek hiç olmadığı kadar kolay ve üretken olacaktır.
dotancohen

6

Doğrudan bir cevap

Diğer cevaplar, daha iyi uygulamalar benimseme konusunda iyi 'meta-puanlar' verir, ancak sadece doğrudan ilgili rehberlik sağlamak için , ekibinizin (veya herhangi bir ekibin) benimsemesini önerdiğim en iyi uygulamaların kaba bir sıralaması :

  1. Kaynak kontrolü
  2. Sorun takibi (proje ve görev yönetimi)
  3. Otomatik yapılar 1
  4. Otomatik dağıtımlar

1 Çok ilgili bir uygulama, geliştirmekte veya sürdürmekte olduğunuz her bir uygulama veya yazılım projesinin yapım ve geliştirme ortamını kurmak veya en azından belgelendirmektir . Çok daha az faydalıdır çünkü (umarım) bunu nadiren veya nadiren yapıyorsunuzdur.

Diğer her Şey

Diğer iyi uygulamalardan - “birim testi, kayıt, veritabanı normalizasyonu, ... yeniden düzenleme, ... dokümantasyon” - diyorsunuz, fakat bunların hepsi aşamalı ve aşamalı olarak kabul edilebilecek ve uygulanacak uygulamalardır . Bunların hiçbiri tek seferde kabul edilmesi gerekmektedir ve muhtemelen onları daha iyi benimsenmesi edeceğiz hiç dikkatli ve ihtiyatlı onları benimseyerek.

Yukarıda listelediğim dört uygulama da yeni uygulamaların benimsenmesini ve denenmesini mümkün olduğunca kolaylaştırır. Örneğin, otomatik testlerinize ünite testi eklenebilir ve otomatik dağıtımlarınızın bir parçası olarak belgeler yayınlanabilir.

Bahsettiğiniz diğer uygulamalardan bazıları - "çevik geliştirme, ... kodlama tarzı kılavuzları, ... kod incelemeleri, ... standartlaştırılmış dokümantasyon yöntemleri" ve çerçeveler (örneğin Bahar) - gerçekten isteğe bağlı veya şüpheli değere sahip. Ve bu, keşfedeceğiniz veya karşılaşacağınız birçok (en olası) uygulama için de geçerlidir.

Çevik geliştirme, kullanılan diğer herhangi bir metodolojiden açıkça üstün değildir . Ve birçok insan (kendim dahil) onunla korkunç deneyimler yaşadı. Fakat birçok insan da gerçekten hoşuna gidiyor (veya onu seviyor). Dene!

Kodlama stili kılavuzları, özellikle büyük projeler için veya büyük ekipler için faydalı olabilir, ancak bu yönergeleri uygulamak için çok fazla iş gerekir ve bu, kimin yaptığı zamanın en iyi kullanımı olmayabilir.

Kod incelemeleri de çok yararlı olabilir - iş arkadaşlarınızdan kodunuzu incelemelerini istediniz mi? İyi uygulamaları benimsemek için resmi bir sürece ihtiyacınız olmadığını unutmayın!

Belgeler harika - hiç var mı? Eğer öyleyse, sizin için iyi! (Daha fazla) “standartlaştırılmış” belgelere sahip olarak önlenebilecek çok fazla ek işle mi karşı karşıyasınız? Eğer öyleyse, o zaman muhtemelen yapmaya değer bir şey. Ancak, yazılımınız küçük bir grup insan tarafından kullanılıyorsa, herhangi bir belgeye ihtiyacınız olmayabilir . (Ya da belgeleri doğrudan yazılımınıza dahil edebilirsiniz. Bu her zaman benim tercihim.)

Altyapıları ... (çok keskin) bir iki ucu keskin kılıçtır. Yazılımınızın özünde olmayan bir özellik için güzel bir şekilde kaplanmış ve bakımlı bir çözüm harika bir çözüm. "El yazısıyla yazılmış ön kontrol cihazlarının" tam olarak ne olduğundan emin değilim, ancak Spring'i kaldıran kodlara niçin yetersiz olduklarına dair net bir açıklama yok . Tüm bu kontrol cihazlarındaki ortak mantığı kendi kurum içi çerçevenize yerleştirmeyi düşündünüz mü? Spring'i kabul etmek ve mevcut tüm kodunuzu yeniden yazmak çok büyük bir yeniden düzenleme (veya daha büyük olasılıkla yeniden yazma) projesi olabilir ve kodunuzda yapabileceğiniz en iyi değişiklik olmayabilir . Tabii yazdığınız olmamalıdır tüm kullandığınız yazılımın - çerçeveler (ve kitaplıklar) harika!Ancak, belki de iyi (veya iyi) web uygulamaları yazmak için Spring (veya alternatif) kullanmanız gerekmez.


Otomatik regresyon testini otomatik inşası ve devreye alması ile oraya koyardım. Ayrıca artımlı olarak üzerinde çalışabileceğiniz bir şey olması avantajına da sahiptir.
sdenham

Ünite testi önce yerel olarak manuel olarak çalıştırılmaya başlamalı (veya her check-in / check-inde) başlamalı ve ardından takımın geri kalanını otomatik regresyon testine dahil etmelidir. Gerçekten bir sebepten dolayı sürekli test yapmaktan korkan geliştiriciler var.
Rudolf Olah

5

Bir parçası olduğunuz ekibin etrafına bakın. Teste dayalı geliştirme veya veritabanı normalleştirmenin yazdığınız yazılımın kalitesini artıracağına veya insanları daha üretken hale getireceğine dair herhangi bir kanıt görebiliyor musunuz?

Geliştirme süpervizörlerinden biri hakkında veya geliştirme başkanıyla konuşmayı denediniz mi? Gerçekten gayri resmi bir sohbet iyi bir başlangıç ​​olabilir. Üstünüzdeki insanların aynı fikirlere sahip olmadığını, ancak iş izin vermediğinden uygulayamayacaklarını / uygulayamayacaklarını düşündüren nedir?

Örnek olarak liderliğin iyi bir yol olduğunu düşünüyorum. Çalışmayı daha önce başkası yapmışsa ve onlara nasıl çoğaltmalarını gösterebiliyorsa, insanlar çok daha az dirençlidir. TDD'yi üzerinde çalıştığınız bir projeye dahil edin. Ekibin geri kalanına bir sunum yapmayı, hatta birkaç kişiyi sunmayı ve ne yaptığınızı göstermelerini isteyin. @DrewJordan'ın patrondan satın almakla ilgili söylediği şey muhtemelen sizin düşündüğünüzden daha önemlidir.


5

Bir kusur bulun. Bir kusur düzeltildi. Düzeltmeyi göster.

Önce normalleşmeye geçelim *. Ve gerçekten de, ilk önce almanızı öneririm, çünkü normalizasyon eksikliği, aksi takdirde bulunamayan gerçek buggy verilerinin ortaya çıkmasıyla muhtemeldir, oysa gerisi en iyi uygulamanın muhtemelen yardımcı olabileceği ancak diğerlerinin söylemesi daha zor olan vakalardır. A, X politikasına uyulmamasından kaynaklandı. " Normalize edilmemiş bir veritabanınız varsa, verilerin tutarsız olabileceği bir yeriniz vardır.

Gerçek bir tutarsız veri vakası bulabilmeniz iyi bir bahis. Şimdi iki şey buldun:

  1. Verilerinizde bir hata var.

  2. Veritabanı şemanızdaki bir hata.

İlk önce ikinci hatayı gerçekten biliyordunuz, ancak ilki daha kolay görülebilir ve aynı zamanda gerçek bir soruna neden olan, teorik olarak yapılabilecek bir şey değil.

Ne yazık ki, normalize edilmiş veritabanına normalize edilmeye karşı koymanın gerçek nedenlerinden biri, bu tür buggy verileriyle ne yapılacağı sorusunun her zaman kolay olmadığıdır, ancak gerçek bir hata bulmuş olursunuz.

(Bir kişinin bazen bazı verileri bilerek normalleştirmemesinin nedenleri olabileceğinin farkında olun. Kuralın cehaleti için kuralın bilgili bir şekilde ihlal edilmesini yanlış anlamayın; arama hızı için kasten denormalize edilmiş bir tabloyu normalleştirirseniz, kazanırsınız. Herhangi bir övgüyü kazanmayın. Burada bile olsa, işaretli olmanın normalleştirilmesi usule göre yapılması gereken bir şeydir, eğer normalize edilmiş tablo normalleştirilmiş tabloların içeriğine göre otomatik olarak oluşturulmazsa, hala devam etmek mümkündür).

Geri kalanlar için, kısa vadede yardım ettiklerinde onları daha sonra uzun vadede inşa etmek için tanıtın. Örneğin, oluşturmanız için küçük bir kod parçası verilirse, bunun için bir birim testi yazın. Daha da iyisi, düzeltmek için bir hata verilirse, hata nedeniyle başarısız olan bir birim testi yazın ve daha sonra hatayı düzelttikten sonra, hataları kapattığınızda (ya da düzeldiğini söyleyen bir e-posta gönderin) geçtiğini söyleyin. , ya da her neyse).

* Bu arada, çok modern değil. Bunun normalleşme olarak adlandırılması ve normalleştirilmemesi ya da başka bir şey olmasının nedeni, o sırada Richard Nixon'un Vietnamizasyon politikasının adıyla dalga geçecek şeylerin sonlarına bağlı kalmanın topikal bir şakasıydı .


4

Tahıl aleyhine gidip şöyle diyeceğim: özgeçmişinizi biraz oluşturmak için biraz zaman geçirdikten sonra yeni bir iş bulacağım. Bir yıl kadar hedefleyin. Her ne kadar birçok şey "zahmetli" olsa da, ünite testinin tamamen eksik olması gibi konular tek bir geliştirici için anlaşılmazdır ve olasılıklar, orada çalışan programcılar test etme arzusu yoksa, asla satın alma şansınız olmayacak ve konumunuzu tehlikeye atabileceksiniz. Şirkette insanların sizi bir blowhard olarak düşünmesini sağlayarak. Kültürü temel yetkinliklere doğru zorlamaya çalışmama , mentorluk alabileceğiniz bir yerde olmanız gerekir .


3
Ben de aynısını yaptım. Bazı yeni "iyi uygulamaları" başarılı bir şekilde uygulamaya koyduğum veya mevcut uygulamalarda önemli bir değişiklik yaptığımda sadece bir kez (çeşitli yerlerde 5 denemeden sonra) ve ekibin taze olduğu ve projelerin çoğunu sıfırdan başladığımızda oldu. . Diğer zamanlar iyi uygulamalar ya tepeden tanıtıldı (takım liderleri) ya da başka hiç kimse katılmadığı için başarısız oldu. Her şeyin bir lider / patron olarak kararını zorlama yeteneğine geldiğine inanıyorum.
Scriptin


1

Programlama paradigmasını iyileştirmek için birçok teklif var . En sıcak terimler artık çevik programlama ve nesne yönelimli görünüyor. Yoksa onlar mı? Her ikisi de sadece beş yıl önce olduklarına kıyasla önemli ölçüde azaldı.

Hangi metodolojinin uygulandığının aynı sonuca ulaşmaya çalıştığına emin olabilirsiniz: mühendislerin ekonomik olarak yeterince iyi bir son ürün üretmelerine yardımcı olun.

: Tartışmalı 1960'larda tanıtıldı bir paradigma vardır programlama yapılandırılmış : Sadece "yüksek düzeyde" gibi yapıları kullanmak while, for, repeat, if/ then/ else, switch/ caseyerine yoğun olarak kullanılan açıklamalarını gotovarsayılan olarak kabul edilmişti açıklamada. Orada hala tartışmalar olmadığı hakkında gotohiç bir meşru kullanımı vardır.

Kullanımın en aza indirilmesinin gotoiyi bir şey olduğunu kabul ediyorum , ancak tüm iyi şeyler gibi, çok ileri gitmek de mümkün.

agileYöntemlerden olumlu bir şey olarak bahsediyorsunuz . Önceden belirlenmiş bir çevik rejimi takip eden yaklaşık altı ay boyunca bir geliştirme ekibindeydim. Her şeyin yeniden adlandırılması dışında, onlarca yıl öncesine dek aydınlatılmış proje yönetimi metodolojileri gibi buldum. Belki birileriyle iletişim kurmak için fikirleri bir araya getirip yeniden satarak, geçimini sağlar ve şirketler imparatorun yeni kıyafetlerini “görme” konusunda kendilerini iyi hissedebilirler .

Agile'nin uzun zaman önce bilinen en değerli dersi, bitmiş ürüne daha iyi bir yol bulma esnekliğinin iyi bir şey olması ve bu yolu bulma yeteneğinin yalnızca üst yönetimden değil, herhangi birinden gelebileceğidir.


Anti-goto ringleader Edsger Dijkstra'nın yazdığı bir yazıdan:

Programlama sanatı, karmaşıklığı organize etme, çoklukta ustalaşma ve piç kaosunu olabildiğince etkili biçimde önleme sanatıdır.

—Dijkstra, in: Dahl, Dijkstra ve Hoare 1972, sf. 6. ( burada 6. sayfaya bakınız .)

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.