Ne zaman çalışmayı bırakıp aracı yapmalıyız?


25

Bir yazılım mühendisi olarak, verimliliğimizi artırmak için etkili araçlar elde etmek için her zaman istekliyiz. Ve günlük çalışmalarımızda, mevcut araçlardan çoğunlukla yetersiz kalıyoruz ve sıkıcı işleri otomatik hale getirmek için daha iyi GDB script config, Vim script ve bazı Python script gibi daha iyi yöntemlere sahip olmak istiyoruz.

Ancak, araçlar yapmak zaman ve enerjiye ihtiyaç duyduğundan aslında bir takastır. Hemen verimlilik artışı sağlamaz. Bu nedenle, çalışmayı durdurmanın ve gelecekteki acınızı hafifletmek için bazı araçlar yapmanın zamanının gelip gelmediğine nasıl karar veriyorsunuz?


30
ObXKCD - Buna Değer

1
belki bir araca doğru refactor ve çalışmaya devam
Ray Tayek


1
Bu XKCD, tek bir şey dışında hemen hemen çivileniyor: aracın kaydettiği zamanın tamamen size ait olup olmadığı veya kuruluşunuzdaki veya ötesindeki büyük bir kullanıcı tabanı ile çarpılıp çarpılmadığı.
Kaz

Yanıtlar:


27

Bunlardan biri doğruysa "araçlar yaparım":

  1. Görev beni rahatsız ediyor
  2. Görevdeki insan hatası riski çok büyük

2. seçenek için “risk” çok büyük olmak zorunda değildir - küçük bir alet üretmenin maliyeti genellikle küçüktür, bu nedenle tek yapmanız gereken, haftada bir kez 10 dakikalık bir yapı kurma riski varsa, genellikle çok hızlı bir şekilde kendini geri öder.

Araçları olabildiğince küçük yapmaya çalışıyorum - sadece şimdi işi biraz daha kolaylaştırmak ve belki bir dahaki sefere tekrar geliştirmek.

Bu, her seferinde yalnızca en büyük acıyı düzelttiğiniz ve size gerçekten zarar vermeyen problemleri düzeltmeyeceğiniz anlamına gelir.


2
Hatalardan kaçınmak için +1 çünkü bu, yürütme sırasında harcanan zamana göre normal zaman harcamasından daha fazladır.
k3b

1
"Kendinizi aynı görevi tekrarlarken çok sık tekrarladığınızda" eklerdim. Şaşırtıcı bir şekilde, kendimi oldukça sık rastgele bir karakter dizisi oluşturmaya ihtiyaç duyuyorum. Bu yüzden, bunu yapmak için bir kod parçası yazmak yerine, bunu yapmak için bir düğmeyle basit bir form yaptım
bsara 27:13

9

Tecrübe ile sadece homurdanan işlere sert bir şekilde bastırmanın genellikle en verimli olduğunu buldum. Bir araç yapmak genellikle caziptir. Ne zaman direnmekten vazgeçiyorum:

  • Aracın birden fazla amacı var. İyi bir satranç oyuncusu her hamle için iki şeyi başardı: rakip bir parçayı engelle ve bir piskoposyu serbest bırak. Yeni başlayanlar muhtemelen bunu yapmak için iki tur gerekir. Aynı şekilde, aracın sadece bir şey yapıp yapmadığını ya da çok az çaba sarf ederek iki kere yapıp yapmadığını, örneğin bazı ham veri dosyalarının düzeltilmesine yardımcı olarak ve yapay test verileri oluşturduğunu düşünüyorum.
  • Gelecekteki faydası. Bu haftaki işlerim için bana zaman kazandırabilir, ancak gelecek hafta yeni bir projede beni veya birisini zaman kazandırabilir mi?
  • Yeni bir dil, kütüphane, tasarım tekniği ya da her neyse öğrenmek için iyi bir zaman ve bunu yapacak zamanım var. Bu araç, eğitim için zaten verilen zamanı kullanarak, bir eğitim yapmanın faydalı bir yan etkisidir.
  • Ciddi sorunlarımız olduğunda, işleri halletmek için. Paraşütsüz paraşütle atlamak gibi, paraşüt yapmak veya almak için zaman ayırmalısınız. Anlamlı bir deneysel sonuç alamıyorsanız veya yeni web uygulaması hiç işe yaramazsa, göremediklerinizi ölçmek, bileşenleri sürmek veya parçaların bir kısmını değiştirmek için durmanız ve bir araç yapmanız veya satın almanız gerekir. sistemi. İş bir alete tamamen ihtiyaç duyulduğunda, gelecekteki kullanım veya çoklu kullanım umurumda değil. Gereklilik yeterince ağır.

3
“Takımın birden fazla amacı var” Aslında iki farklı şekilde uygulanan aynı amaç olmadıkça, deneyimlerime göre sadece iki aracı yapmak daha iyi.
AJMansfield,

5

Temel kuralım, üçüncü kez bir şey yapmam gerektiğinde, otomatikleştirmek için küçük bir senaryo yazmanın ya da yaklaşımımı yeniden düşünmenin zamanı geldi.

Bu noktada tam gelişmiş bir "araç" yapmıyorum, daha önce manuel olarak yaptığımı otomatikleştiren küçük bir senaryo (genellikle bash veya python; perl de çalışacaktı, hatta PHP). Temel olarak, DRY ilkesinin (ya da özünde aynı şeyin olduğu Tek Gerçeğin Kaynak ilkesinin) bir uygulamasıdır - eğer iki kaynak dosyasını aynı anda değiştirmek zorunda kalırsanız, paylaştıkları ortak bir gerçek olmalı. hakikat çarpanlara ayrılmalı ve tek bir merkezi yerde saklanmalıdır. Bunu yeniden yönlendirme yoluyla dahili olarak çözebiliyorsanız harikadır, ancak bazen bu mümkün değildir ve özel komut dosyalarının girdiği yer burasıdır.

Daha sonra, komut dosyası tamamen gelişmiş bir araca dönüşebilir veya gelmeyebilir, ancak genellikle içinde kodlanmış birçok şey olan çok özel bir komut dosyasıyla başlarım.

Bir tutkuyla homurdanmaktan nefret ediyorum ama aynı zamanda bunun kötü veya yanlış tasarımın bir işareti olduğuna inanıyorum. Tembel olmak, bir programcıda önemli bir kalitedir ve tekrarlayan işleri önlemek için büyük uzunluklardan geçtiğiniz türden daha iyidir.

Elbette, bazen bakiye negatiftir - kodunuzu yeniden gözden geçirmek veya size bir saatlik tekrarlayan çalışmadan tasarruf etmek için bir senaryo yazmak için üç saat harcarsınız; ancak, genellikle, denge pozitif, eğer doğrudan görünür olmayan maliyetleri düşünürseniz: insan başarısızlığı (insanlar tekrarlayan işlerde gerçekten kötüdür), daha küçük kod temeli, azaltılmış yedeklilik nedeniyle daha iyi bakım, daha iyi öz dokümantasyon, daha hızlı gelecek geliştirme, daha temiz kod. Yani denge şu anda negatif gözükse bilekod tabanı daha da büyüyecek ve üç veri nesnesi için web formları oluşturmak için yazdığınız araç hala otuz veri nesnesine sahip olduğunuzda çalışmaya devam edecek. Tecrübelerime göre, denge genellikle grunt çalışması lehine tahmin edilir, çünkü muhtemelen tekrarlayan görevlerin tahmin edilmesi daha kolay ve bu nedenle düşük tahmin edilirken, yeniden yapılanma, otomatikleştirme ve soyutlama daha az öngörülebilir ve daha tehlikeli olarak değerlendirilir ve bu nedenle aşırı tahmin edilir. Genelde sonuçta otomatikleştirmenin o kadar zor olmadığı ortaya çıkıyor.

Ve sonra bunu çok geç yapma riski var: üç yeni veri nesnesi sınıfını yeniden biçimlendirmek ve onlar için web formları oluşturan bir komut dosyası yazmak kolaydır ve bir kez bunu yaptıktan sonra, 27 sınıf daha eklemek kolaydır. Ayrıca betiğinizle de çalışın. Ancak, her biri elle yazılmış web formları olan ve aralarında herhangi bir tutarlılık olmadan 30 veri nesnesi sınıfının olduğu bir noktaya ulaştığınızda bu senaryoyu yazmak imkansızdır (aka "organik büyüme"). Bu 30 sınıfı formları ile sürdürmek, tekrarlayan kodlama ve yarı-manuel arama-değiştirme kabusudur, ortak yönleri değiştirmek, olması gerektiği sürece otuz zaman alır, ancak problemi çözmek için bir senaryo yazmak, proje başladığında hiçbir kesinti olmayan bir öğle yemeği molası olacaktı, şu an iki ay süren korkunç bir projedir. eski kod temeli. İronik olarak, 30 sınıfı karışıklığı yazmak, temiz çözümün elde edebileceğinden çok daha uzun sürdü, çünkü her zaman uygun senaryoyu kullanıyor olabilirdiniz. Tecrübelerime göre, tekrarlayan işleri çok geç bir zamanda otomatikleştirmek, uzun süren büyük yazılım projelerinin en büyük sorunlarından biridir. Çünkü her zaman uygun senaryoyu kullanıyor olabilirdin. Tecrübelerime göre, tekrarlayan işleri çok geç bir zamanda otomatikleştirmek, uzun süren büyük yazılım projelerinin en büyük sorunlarından biridir. Çünkü her zaman uygun senaryoyu kullanıyor olabilirdin. Tecrübelerime göre, tekrarlayan işleri çok geç bir zamanda otomatikleştirmek, uzun süren büyük yazılım projelerinin en büyük sorunlarından biridir.


4

Bunu şimdi hatırladım:

xkcd - Buna Değer Mi?

Tabii ki bununla ilgili sorun, gerçek hayatta, tablodaki doğru hücreyi seçmek için bu verileri kolayca ölçemeyeceğinizdir. Diğer cevaplarda da belirtildiği gibi, denklemine eklemeniz gereken başka değişkenler de var (hata riski, görev bir kez bile yapamayacak kadar sıkıcı ...).

Bu yüzden cevabım gerçekten duruma bağlı ve tüm durumlar için herhangi bir "doğru" cevap almak için umut olamaz olmasıdır. Her şey için yemek kitapları olsaydı, tüm hayat sıkıcı olurdu.


1
Güzel bir! :-) Ancak, zaman tasarrufu başka görevlerde de olabilir - araç birden fazla amaç için kullanılabildiğinden veya aracı yazarken edindiğiniz bilgiler nedeniyle.
Hans-Peter Störr

3

Bu benim deneyimimde büyük bir sorun. Takım oluşturma, genellikle aracı oluşturma işini durduran motive edici bir geliştiriciye bırakılır. Bu genellikle değer sağlasa bile gelişime engel olur. Takım oluşturma, geliştirme "Süreci" nin bütünleşik bir parçası olarak görülmelidir.

Başlık hatalarının başka bir inceleme zamanlamasına neden olacağı kod incelemelerine katıldığımı hatırlıyorum. Bunların çoğu bir araç tarafından tespit edilebilirdi. örneğin yanlış sloc sayıları, eksik gereksinim, biçimlendirme hataları. Perl ile yazılan aracım başlık kodunu gelen koddan ve bir Oracle veritabanından gelen gereksinimleri doğruladı. Bu bizim "Süreci" bir parçası değildi, bu yüzden kısa vadede binada araç teslim gecikme olarak görülüyordu.

Tüm ekibin periyodik olarak durması ve takım oluşturmada otomatikleştirilebilecek manuel çabaların nerede olduğunu görmesi gerekir.


2

Diğer tüm cevaplar iyidir, ancak küçük araçlar oluşturmak için zaman harcamanın değerli olmasının bir nedeni daha eklerdim (ve .vimrc, .emacs vs.):

Bazen yaratıcı ya da motivasyonel bir şekilde "bir sıkıntıya sıkışmış" ve bir şey yaparsanız, tekrar "akan suları alacak" (metaforları karıştırmak için). İdeal olarak bu, projeyi verimli bir şekilde ileri iten bir şey olurdu, ancak biraz teğetse ve size ilham verecekse, o zaman bu da iyi.

Boş bir ekrana bakmıyor olabilirsiniz, ancak bunun yerine büyük bir görevde kaydettiğiniz ilerlemeyi görmekte güçlük çekiyor olabilirsiniz. Bu durumda, somut bir şeyi seçmek, hiçbir yere gitmediğinizi hissetmenizi engelleyebilir.

Bununla ilgili bir değişiklik, “arka brülörde” olması gereken bir şeyi düşünmeye devam ettiğinizde - sadece bir dakikanızı ayırıp bunu yapmak aklınızdan çıkar ve tam enerjinizi tekrar ana göreve koymak için serbest bırakacaksınız.


1

Bir araç olarak ne düşündüğünüze bağlı. Muhtemelen onları diğer aygıtların anlamsız sayılacağı şekilde yüklüyorum ... Çünkü onları en temel dosya sistemi komutları dışında hemen hemen her şey için yapıyorum .

Bunu desteklemek için 2 gerekçe kullanıyorum.

  • DRY ilkesinin bir uzantısı. Bir şeyi tekrarlamak istiyorsak, el emeği insan kaynaklarının en az etkili kullanımıdır.
  • Yaptığım şeyi kaydetmenin etkili bir yolu, bu yüzden eğer bir şey inşa ettiysem, o zaman ben (veya başkası) haftalar veya aylar sonra yaptığım şeye geri dönmek isteyebilirim ve proje ile çalışma günlüğünü tutar.

Zaman zaman daha büyük aletlere dönüşürler ve etkileşimli işlevler kazanırlar;

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.